HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //proc/self/cwd/wp-content/plugins/automatewoo/includes/Variables/Abstract_Generate_Coupon.php
<?php

namespace AutomateWoo;

defined( 'ABSPATH' ) || exit;

/**
 * Variable_Abstract_Generate_Coupon class.
 */
abstract class Variable_Abstract_Generate_Coupon extends Variable {

	/**
	 * Load admin details.
	 */
	public function load_admin_details() {

		$this->description = sprintf(
			__( 'Generates a unique coupon based on a template coupon. <%1$s>View documentation<%2$s>.', 'automatewoo' ),
			'a href="' . Admin::get_docs_link( 'variables/personalized-coupons', 'variable-description' ) . '" target="_blank"',
			'/a'
		);

		$coupon = new Fields\Coupon();
		$coupon->set_name( 'template' );
		$coupon->set_required( true );
		$coupon->set_description( __( 'Name of the coupon that will be cloned.', 'automatewoo' ) );
		$this->add_parameter_field( $coupon );

		$this->add_parameter_text_field( 'expires', __( 'Number of days the coupon will be valid for. If left blank then the expiry set for the template coupon will be used.', 'automatewoo' ) );
		$this->add_parameter_text_field( 'prefix', __( "The prefix for the coupon code, defaults to 'aw-'. To remove the prefix set this field to a single space character.", 'automatewoo' ), false, 'aw-' );
		$this->add_parameter_text_field( 'prefix', __( "The prefix for the coupon code, defaults to 'aw-'. To remove the prefix set this field to a single space character.", 'automatewoo' ), false, 'aw-' );
		$this->add_parameter_text_field( 'limit', __( "The number of times the generated coupon can be used. Set to '0' for unlimited.", 'automatewoo' ), false, '1' );
	}

	/**
	 * Generate coupon.
	 *
	 * @param string   $email
	 * @param array    $parameters
	 * @param Workflow $workflow
	 * @return bool|string
	 */
	public function generate_coupon( $email, $parameters, $workflow ) {

		// requires a template
		if ( empty( $parameters['template'] ) ) {
			return false;
		}

		$coupon_generator = new Coupon_Generator();
		$coupon_generator->set_template_coupon_code( $parameters['template'] );

		if ( ! $coupon_generator->get_template_coupon_id() ) {
			return false;
		}

		// override with parameter
		if ( isset( $parameters['prefix'] ) ) {
			$coupon_generator->set_prefix( $parameters['prefix'] );
		}

		if ( $workflow->is_test_mode() ) {
			$coupon_generator->set_suffix( '[test]' );
			$coupon_generator->set_description( __( 'AutomateWoo Test Coupon', 'automatewoo' ) );
		}

		$coupon_generator->set_code( $coupon_generator->generate_code() );

		// filter to enable use of coupon email restriction
		if ( apply_filters( 'automatewoo/variables/coupons/use_email_restriction', false, $workflow, $email, $parameters ) ) {
			$coupon_generator->set_email_restriction( $email );
		}

		// don't generate a new coupon every time we preview
		if ( $workflow->is_preview_mode() ) {
			return $coupon_generator->code;
		}

		if ( ! empty( $parameters['expires'] ) ) {
			$coupon_generator->set_expires( $parameters['expires'] );
		}

		if ( isset( $parameters['limit'] ) ) {
			$coupon_generator->set_usage_limit( $parameters['limit'] );
		}

		$coupon = $coupon_generator->generate_coupon();

		if ( ! $coupon ) {
			return false;
		}

		if ( $workflow->is_test_mode() ) {
			$coupon->update_meta_data( '_is_aw_test_coupon', true );
		}

		// store customer ID, workflow ID and log ID in coupon meta
		$coupon->update_meta_data( '_aw_workflow_id', $workflow->get_id() );

		$customer = Customer_Factory::get_by_email( $email );

		if ( $customer ) {
			$coupon->update_meta_data( '_aw_customer_id', $customer->get_id() );
		}

		$log = $workflow->get_current_log();

		// since 3.7
		if ( $log ) {
			$coupon->update_meta_data( '_aw_workflow_log_id', $log->get_id() );
		}

		$coupon = apply_filters( 'automatewoo/variables/generate_coupon', $coupon, $parameters, $workflow );

		$coupon->save();

		return $coupon->get_code();
	}
}