WPCF7_MailTag_OutputCalculator{}CF7 1.0

Mail-tag output calculator.

Хуков нет.

Использование

$WPCF7_MailTag_OutputCalculator = new WPCF7_MailTag_OutputCalculator();
// use class methods

Методы

  1. public __construct( WPCF7_ContactForm $contact_form )
  2. public calc_output( WPCF7_MailTag $mail_tag )
  3. private calc_swv_result( WPCF7_MailTag $mail_tag, SWV\Rule $rule )

Код WPCF7_MailTag_OutputCalculator{} CF7 6.0.5

class WPCF7_MailTag_OutputCalculator {

	const email = 0b100;
	const text = 0b010;
	const blank = 0b001;

	private $contact_form;

	public function __construct( WPCF7_ContactForm $contact_form ) {
		$this->contact_form = $contact_form;
	}

	public function calc_output( WPCF7_MailTag $mail_tag ) {
		return $this->calc_swv_result(
			$mail_tag,
			$this->contact_form->get_schema()
		);
	}

	private function calc_swv_result( WPCF7_MailTag $mail_tag, SWV\Rule $rule ) {

		if ( $rule instanceof SWV\AnyRule ) {
			$result = 0b000;

			foreach ( $rule->rules() as $child_rule ) {
				$result |= $this->calc_swv_result( $mail_tag, $child_rule );
			}

			return $result;
		}

		if ( $rule instanceof SWV\CompositeRule ) {
			$result = 0b111;

			foreach ( $rule->rules() as $child_rule ) {
				$result &= $this->calc_swv_result( $mail_tag, $child_rule );
			}

			return $result;
		}

		$field_prop = $rule->get_property( 'field' );

		if ( empty( $field_prop ) or $field_prop !== $mail_tag->field_name() ) {
			return self::email | self::text | self::blank;
		}

		if ( $rule instanceof SWV\RequiredRule ) {
			return ~ self::blank;
		}

		if ( $rule instanceof SWV\EmailRule ) {
			return self::email | self::blank;
		}

		if ( $rule instanceof SWV\EnumRule ) {
			$acceptable_values = (array) $rule->get_property( 'accept' );
			$acceptable_values = array_map( 'strval', $acceptable_values );
			$acceptable_values = array_filter( $acceptable_values );
			$acceptable_values = array_unique( $acceptable_values );

			if ( ! $mail_tag->get_option( 'do_not_heat' ) ) {
				$pipes = $this->contact_form->get_pipes(
					$mail_tag->field_name()
				);

				$acceptable_values = array_map(
					static function ( $val ) use ( $pipes ) {
						return $pipes->do_pipe( $val );
					},
					$acceptable_values
				);
			}

			$email_values = array_filter(
				$acceptable_values,
				'wpcf7_is_mailbox_list'
			);

			if ( count( $email_values ) === count( $acceptable_values ) ) {
				return self::email | self::blank;
			} else {
				return self::email | self::text | self::blank;
			}
		}

		return self::email | self::text | self::blank;
	}

}