MP_Addon_Dynamics_Settings

Class MP_Addon_Dynamics_Settings.


Description Description

See also See also


Top ↑

Source Source

File: calculator-dynamics-add-on/inc/MP_Addon_Dynamics_Settings.php

class MP_Addon_Dynamics_Settings extends MP_Settings {


	/**
	 * Dynamics export settings.
	 * @var array settings
	 * @since  1.0.0
	 * @access private
	 */
	private $export_settings;


	/**
	 * Dynamics settings.
	 * @var array settings
	 * @since  1.0.0
	 * @access private
	 */
	private $settings;


	/**
	 * Set Dynamics export settings.
	 * @access public
	 * @since  1.0.0
	 * @return array {
	 *               Dynamics export settings.
	 *  @type array 'allow_dynamics' Allow sending lead data to Dynamics 365
	 * }
	 */
	public function set_export_fields() {

		$this->export_settings = array(
			array(
				'id'       => 'allow_dynamics',
				'title'    => __( 'Allow Dynamics', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'checkbox' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'export',
					'label_for'   => 'allow_dynamics',
					'placeholder' => '',
					'default'     => '',
					'description' => __( 'Allow Dynamics', 'CalculatorsDynamicsAddon' ),
				),
			),
		);

		return $this->export_settings;
	}


	/**
	 * Set Dynamics settings.
	 * @access public
	 * @since  1.0.0
	 * @return array {
	 *               Dynamics settings.
	 *  @type array 'dynamics_url' Dynamics url
	 *  @type array 'dynamics_client_id' Dynamics client key
	 *  @type array 'dynamics_client_secret' Dynamics client secret
	 *  @type array 'dynamics_redirect_uri' Redirect URL
	 *  @type array 'dynamics_token' Dynamics token(Authentication/revoke)
	 *  @type array 'dynamics_object' Dynamics entry. Leads or contacts
	 *  @type array 'dynamics_primary_key' Primary key. Email or Full name
	 * }
	 */
	public function set_fields() {

		$this->settings = array(
			array(
				'id'       => 'dynamics_url',
				'title'    => __( 'Dynamics URL', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'input' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_url',
					'placeholder' => 'https://xxxxxxxx.cms.dynamics.com',
					'default'     => '',
					'description' => __( 'Enter Dynamics URL', 'CalculatorsDynamicsAddon' ),
				),
			),
			array(
				'id'       => 'dynamics_client_id',
				'title'    => __( 'Client ID', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'input' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_client_id',
					'placeholder' => '',
					'default'     => '',
					'description' => __( 'Enter Azure client ID. https://docs.microsoft.com/en-us/powerapps/developer/data-platform/walkthrough-register-app-azure-active-directory', 'CalculatorsDynamicsAddon' ),
				),
			),
			array(
				'id'       => 'dynamics_client_secret',
				'title'    => __( 'Client secret', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'input' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_client_secret',
					'placeholder' => '',
					'default'     => '',
					'description' => __( 'Enter Azure client secret', 'CalculatorsDynamicsAddon' ),
				),
			),
			array(
				'id'       => 'dynamics_redirect_uri',
				'title'    => __( 'Redirect URI', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'input' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_redirect_uri',
					'placeholder' => str_replace( '127.0.0.1', 'localhost', get_admin_url() ) . 'admin.php?page=mortgage_platform&tab=dynamics',
					'default'     => '',
					'description' => __( 'Enter Dynamics redirect uri', 'CalculatorsDynamicsAddon' ),
				),
			),
			array(
				'id'       => 'dynamics_token',
				'title'    => __( 'Client token', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'dynamics_access' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_token',
					'placeholder' => '',
					'default'     => __( 'Authentication Token', 'CalculatorsDynamicsAddon' ),
					'description' => __( 'Click here to generate an Authentication Token', 'CalculatorsDynamicsAddon' ),
				),
			),
			array(
				'id'       => 'dynamics_object',
				'title'    => __( 'Dynamics entry', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'select' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_object',
					'placeholder' => '',
					'default'     => 'default',
					'description' => __( 'Select the entry where to export the lead data. Leads or Contacts', 'CalculatorsDynamicsAddon' ),
					'options'     => array(
						'leads'    => 'Leads',
						'contacts' => 'Contacts',
					)
				),
			),
			array(
				'id'       => 'dynamics_primary_key',
				'title'    => __( 'Primary key', 'CalculatorsDynamicsAddon' ),
				'callback' => array( $this, 'select' ),
				'args'     => array(
					'option_name' => MortgagePlatform::$prefix . 'dynamics',
					'label_for'   => 'dynamics_primary_key',
					'placeholder' => '',
					'default'     => 'default',
					'description' => __( 'Choose field should be used to update existing objects', 'CalculatorsDynamicsAddon' ),
					'options'     => array(
						'emailaddress1' => 'Email',
						'fullname'      => 'Full name',
					)
				),
			),

		);

		return $this->settings;

	}


	/**
	 * Dynamics settings.
	 * @since  1.0.0
	 * @access public
	 *
	 * @param array $array export settings
	 *
	 * @return mixed export data settings
	 */
	public function filter_export_data_settings( $array ) {

		$settings = $this->set_export_fields();
        $array = is_array($array) ? $array : array();
		return array_merge( $array, $settings );
	}

	/**
	 * Set default settings.
	 * @access public
	 * @static
	 * @since  1.0.0
	 */
	public static function default_settings() {

		if ( isset(get_option( MortgagePlatform::$prefix . 'dynamics' )['dynamics_redirect_uri']) ) {
			$settings                          = get_option( MortgagePlatform::$prefix . 'dynamics' );
			$settings['dynamics_redirect_uri'] = str_replace( '127.0.0.1', 'localhost', get_admin_url() ) . 'admin.php?page=mortgage_platform&tab=dynamics';
			update_option( MortgagePlatform::$prefix . 'dynamics', $settings );

		}

	}


	/**
	 * Register Dynamics Spreadsheets Settings.
	 * @since  1.0.0
	 * @access public
	 */
	public function register() {

		$fields = $this->set_fields();

		$this->register_setting_fields(
			$fields,
			'dynamics',
			__( 'Dynamics Settings', 'CalculatorsDynamicsAddon' ),
			array( $this, 'page_title' )
		);

		add_filter( MortgagePlatform::$prefix . 'menu', array( $this, 'filter_menu' ), 50 );
		add_action( MortgagePlatform::$prefix . 'menu_settings', array( $this, 'filter_settings' ) );

	}


	/**
	 * Filter Settings Menu.
	 * @since  1.0.0
	 * @access public
	 *
	 * @param string $list menu list
	 *
	 * @return string
	 */
	public function filter_menu( $list ) {

		if ( isset( $_GET['tab'] ) && 'dynamics' === $_GET['tab'] ) {
			$list .= '<li class="active"><a href="?page=' . esc_attr( MortgagePlatform::$domain ) . '&tab=dynamics" >' . esc_html__( 'Dynamics Settings', 'CalculatorsDynamicsAddon' ) . '</a></li>';
		} else {
			$list .= '<li ><a href="?page=' . esc_attr( MortgagePlatform::$domain ) . '&tab=dynamics" >' . esc_html__( 'Dynamics Settings', 'CalculatorsDynamicsAddon' ) . '</a></li>';
		}

		return $list;

	}


	/**
	 * Add Setting Fields.
	 * @since  1.0.0
	 * @access public
	 * @global $pagenow
	 */
	public function filter_settings() {
		global $pagenow;
		if ( isset( $_GET['tab'] ) ) {
			if ( 'admin.php' === $pagenow && MortgagePlatform::$domain === $_GET['page'] ) {

				if ( 'dynamics' === $_GET['tab'] ) {
					?>
                    <div class="mp-settings__content tab-pane dynamics">
                        <form action="options.php" method="POST">
							<?php
							settings_fields( MortgagePlatform::$prefix . 'settings_dynamics' );
							do_settings_sections( MortgagePlatform::$prefix . 'dynamics' );
							submit_button()
							?>
                        </form>
                    </div>
					<?php
				}
			}
		}

	}


	/**
	 * Dynamics get access token callback function.
	 * @access public
	 * @since  1.0.0
	 *
	 * @param $args
	 */
	public function dynamics_access( $args ) {

		if ( ! empty( get_option( MortgagePlatform::$prefix . 'dynamics' )['dynamics_client_id'] ) &&
		     ! empty( get_option( MortgagePlatform::$prefix . 'dynamics' )['dynamics_client_secret'] ) &&
		     ! empty( get_option( MortgagePlatform::$prefix . 'dynamics' )['dynamics_redirect_uri'] )
		) {
			echo $this->get_token_button( $args );
		} else {
			echo '<p>' . __( "Please enter client id, client secret, redirect url.", "CalculatorsDynamicsAddon" ) . '</p>';
		}
	}

	/**
	 * Get Dynamics token refresh callback.
	 * @access public
	 * @since  1.0.0
	 *
	 * @param array $args arguments of setting
	 */
	private function get_token_button( $args ) {

		$name        = $args['label_for'];
		$option_name = $args['option_name'];
		$input       = get_option( $option_name );
		$description = $args['description'];
		$default     = $args['default'];
		$value       = isset( $input[ $name ] ) ? $input[ $name ] : $default;


		$dynamics = new MP_Addon_Dynamics();


		if ( empty( get_option( MortgagePlatform::$prefix . 'dynamics_refresh_token' ) ) ) {

			$url = $dynamics->get_url();

			echo '<a href="' . esc_url( $url ) . '" class="button" target="_blank">' . esc_attr( $value ) . '</a>';
			echo '<p>' . esc_attr( $description ) . '</p>';
		} else {

			$dynamics->get_client();

			echo '<div class="dynamics_token" style="float:left">';
			echo '<span class="spinner"></span>';
			echo '<button id="dynamics_token_revoke" class="button">' . esc_attr__( "Revoke Token", "CalculatorsDynamicsAddon" ) . '</button>';
			echo '</div>';
			echo '<input id="dynamics_revoke_nonce" type="hidden" value="' . wp_create_nonce( "dynamics" ) . '">';
		}
	}


	/**
	 * Add Dynamics metabox.
	 * @access public
	 * @since  1.0.0
	 */
	public function dynamics_metabox() {
		add_meta_box(
			'dynamics-metabox',
			__( 'Dynamics', 'CalculatorsDynamicsAddon' ),
			array( $this, 'dynamics_meta_callback' ),
			MortgagePlatform::$lead,
			'side',
			'core'
		);
	}


	/**
	 * Callback for Dynamics.
	 * @access public
	 * @since  1.0.0
	 *
	 * @param object $post post data
	 * @param array $meta  meta data
	 */
	public function dynamics_meta_callback( $post, $meta ) {

		wp_nonce_field( MortgagePlatform::$prefix . 'dynamics', MortgagePlatform::$prefix . 'dynamics' );

		echo '<button id="' . esc_attr( $meta['id'] ) . '-send-button" class="button button-large">' . __( 'Send to Dynamics', 'CalculatorsDynamicsAddon' ) . '</button>';
		echo '<span class="spinner"></span>';

	}


	/**
	 * Add send options.
	 * @access public
	 * @since  1.0.0
	 *
	 * @param string $options send options
	 *
	 * @return string
	 */
	public function export_to_dynamics( $options ) {

		$options .= '<option disabled>' . __( 'Dynamics', 'CalculatorsDynamicsAddon' ) . '</option>';
		$options .= '<option value="dynamics">' . __( 'Send to Dynamics', 'CalculatorsDynamicsAddon' ) . '</option>';
		$options .= '<option value="dynamics_csv">' . __( 'Export CSV for Dynamics', 'CalculatorsDynamicsAddon' ) . '</option>';

		return $options;
	}

}

Top ↑

Methods Methods


Top ↑

Changelog Changelog

Changelog
Version Description
1.0.0 Introduced.