Your IP : 216.73.216.95


Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/give/src/Route/
Upload File :
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/give/src/Route/Form.php

<?php

/**
 * Handle Embed Donation Form Route
 *
 * @since 2.7.0
 * @package Give
 */

namespace Give\Route;

use Give\Controller\Form as Controller;
use WP_Post;

defined( 'ABSPATH' ) || exit;

/**
 * Template class.
 *
 * @since 2.7.0
 */
class Form {
	/**
	 * Option name
	 *
	 * @since 2.7.0
	 * @var string
	 */
	private $optionName = 'form_page_url_prefix';

	/**
	 * Route base
	 *
	 * @since 2.7.0
	 * @var string
	 */
	private $defaultBase = 'give';

	/**
	 * Route base
	 *
	 * @since 2.7.0
	 * @var string
	 */
	private $base;

	/**
	 * @since 2.8.0
	 * @var Controller
	 */
	private $controller;

	/**
	 * Form constructor.
	 *
	 * @since 2.8.0
	 *
	 * @param Controller $controller
	 */
	public function __construct( Controller $controller ) {
		$this->controller = $controller;
	}

	/**
	 * Form constructor.
	 */
	public function init() {
		$this->setBasePrefix();
		$this->controller->init();

		add_action( 'init', [ $this, 'addRule' ] );
		add_action( 'query_vars', [ $this, 'addQueryVar' ] );
		add_action( 'give-settings_save_advanced', [ $this, 'updateRule' ], 11 );
	}

	/**
	 * Setup base prefix
	 *
	 * @since 2.7.0
	 */
	public function setBasePrefix() {
		$this->base = give_get_option( $this->optionName, $this->defaultBase );
	}


	/**
	 * Add rewrite rule
	 *
	 * @since 2.7.0
	 */
	public function addRule() {
		add_rewrite_rule(
			"{$this->base}/(.+?)/?$",
			sprintf(
				'index.php?url_prefix=%1$s&give_form_id=$matches[1]',
				$this->base
			),
			'top'
		);
	}


	/**
	 * Add query var
	 *
	 * @since 2.7.0
	 *
	 * @param array $queryVars
	 *
	 * @return array
	 */
	public function addQueryVar( $queryVars ) {
		$queryVars[] = 'give_form_id';
		$queryVars[] = 'url_prefix';

		return $queryVars;
	}

	/**
	 * Get form URL.
	 *
	 * @since 2.7.0
	 * @since 2.8.0 Add support for all permalink settings.
	 * @since 2.8.0 Specify URL scheme to avoid mixed content when loaded in the admin.
	 *
	 * @param int $form_id
	 *
	 * @return string
	 */
	public function getURL( $form_id ) {
		$scheme = ( is_ssl() ) ? 'https' : 'http';
		return get_option( 'permalink_structure' )
			? home_url( "/{$this->base}/{$form_id}", $scheme )
			: add_query_arg(
				[
					'give_form_id' => $form_id,
					'url_prefix'   => $this->base,
				],
				home_url( '', $scheme )
			);
	}


	/**
	 * Get url base.
	 *
	 * @since 2.7.0
	 * @return string
	 */
	public function getBase() {
		return $this->base;
	}

	/**
	 * Get url base.
	 *
	 * @since 2.7.0
	 * @return string
	 */
	public function getOptionName() {
		return $this->optionName;
	}


	/**
	 * Update route rule
	 *
	 * @since 2.7.0
	 */
	public function updateRule() {
		global $wp_rewrite;

		$updateBase = give_get_option( $this->optionName, $this->defaultBase );

		if ( $updateBase !== $this->base ) {
			$this->base = $updateBase;

			// Save rewrite rule manually.
			$this->addRule();
			flush_rewrite_rules();
			$wp_rewrite->wp_rewrite_rules();
		}
	}

	/**
	 * Get queried form ID.
	 *
	 * @since 2.7.0
	 * @return int
	 */
	public function getQueriedFormID() {
		$formId = 0;

		if ( $queryVar = get_query_var( 'give_form_id' ) ) {
			$form = current(
				get_posts(
					[
						'name'        => $queryVar,
						'numberposts' => 1,
						'post_type'   => 'give_forms',
					]
				)
			);

			if ( $form instanceof WP_Post ) {
				$formId = $form->ID;
			}
		}

		return $formId;
	}
}