| Current Path : /home/ereika83/www/wp-content/plugins/hustle/inc/providers/zapier/ |
| Current File : /home/ereika83/www/wp-content/plugins/hustle/inc/providers/zapier/hustle-zapier-form-settings.php |
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
/**
* Hustle_Zapier_Form_Settings class
*
* @package Hustle
*/
if ( ! class_exists( 'Hustle_Zapier_Form_Settings' ) ) :
/**
* Class Hustle_Zapier_Form_Settings
* Form Settings Zapier Process
*/
class Hustle_Zapier_Form_Settings extends Hustle_Provider_Form_Settings_Abstract {
/**
* For settings Wizard steps
*
* @since 3.0.5
* @return array
*/
public function form_settings_wizards() {
// already filtered on Abstract
// numerical array steps.
return array(
// 0
array(
'callback' => array( $this, 'first_step_callback' ),
'is_completed' => array( $this, 'first_step_is_completed' ),
),
);
}
/**
* Check if step is completed
*
* @since 3.0.5
* @param array $submitted_data Submitted data.
* @return bool
*/
public function first_step_is_completed( $submitted_data ) {
$is_connected = ! empty( $submitted_data['api_key'] ) && filter_var( $submitted_data['api_key'], FILTER_VALIDATE_URL );
return $is_connected;
}
/**
* Returns all settings and conditions for 1st step of Zapier settings
*
* @since 3.0.5
* @since 4.0 param $validate removed.
*
* @param array $submitted_data Submitted data.
* @return array
*/
public function first_step_callback( $submitted_data ) {
$this->addon_form_settings = $this->get_form_settings_values();
$current_data = array(
'name' => '',
'api_key' => '',
);
$current_data = $this->get_current_data( $current_data, $submitted_data );
$is_submit = ! empty( $submitted_data['hustle_is_submit'] );
if ( $is_submit ) {
$sent = $this->validate_and_send_sample( $submitted_data );
if ( true !== $sent ) {
$error_message = $sent;
}
}
$options = $this->get_first_step_options( $current_data );
$step_html = Hustle_Provider_Utils::get_integration_modal_title_markup( __( 'Setup Webhook', 'hustle' ), __( 'Put your ZAP Webhook URL below.', 'hustle' ) );
$step_html .= Hustle_Provider_Utils::get_html_for_options( $options );
if ( ! isset( $error_message ) ) {
$has_errors = false;
} else {
$step_html .= '<span class="sui-error-message">' . esc_html( $error_message ) . '</span>';
$has_errors = true;
}
$notice_message = sprintf(
/* translators: 1. Open 'a' tag. 2. Close 'a' tag. 3. Trigger name. */
esc_html__( 'Please go %1$shere%2$s if you do not have any ZAP created. Remember to choose %3$s as Trigger App.', 'hustle' ),
'<a href="https://zapier.com/app/editor/" target="_blank">',
'</a>',
'<strong>Webhooks by Zapier</strong>'
);
$notice_options = array(
array(
'type' => 'wrapper',
'style' => 'margin-top: 30px;margin-bottom: 0;',
'elements' => array(
'notice' => array(
'type' => 'notice',
'icon' => 'info',
'class' => 'sui-notice-warning',
'value' => $notice_message,
),
),
),
);
$step_html .= Hustle_Provider_Utils::get_html_for_options( $notice_options );
$buttons = array();
if ( $this->first_step_is_completed( $current_data ) ) {
$buttons['disconnect'] = array(
'markup' => Hustle_Provider_Utils::get_provider_button_markup(
__( 'Disconnect', 'hustle' ),
'sui-button-ghost',
'disconnect_form',
true
),
);
}
$buttons['save'] = array(
'markup' => Hustle_Provider_Utils::get_provider_button_markup(
__( 'Save', 'hustle' ),
'',
'next',
true
),
);
$response = array(
'html' => $step_html,
'buttons' => $buttons,
'has_errors' => $has_errors,
);
// Save only after the step has been validated and there are no errors.
if ( $is_submit && ! $has_errors ) {
$this->save_form_multi_id_settings_values( $submitted_data );
}
return $response;
}
/**
* Sending test sample to zapier webhook URL
* Data sent will be used on zapier to map fields on their zap action
*
* @param array $submitted_data Submitted data.
* @return boolean|string
*/
private function validate_and_send_sample( $submitted_data ) {
if ( ! isset( $submitted_data['api_key'] ) ) {
return esc_html__( 'Please put a valid Webhook URL.', 'hustle' );
}
// must be this prefix.
if ( stripos( $submitted_data['api_key'], 'https://hooks.zapier.com/' ) !== 0 ) {
return esc_html__( 'Please put a valid Webhook URL.', 'hustle' );
}
// must not be in silent mode.
if ( stripos( $submitted_data['api_key'], 'silent' ) !== false ) {
return esc_html__( 'Please disable Silent Mode on Webhook URL.', 'hustle' );
}
$endpoint = wp_http_validate_url( $submitted_data['api_key'] );
if ( false === $endpoint ) {
return esc_html__( 'Please put a valid Webhook URL.', 'hustle' );
}
// Build sample data.
$sample_data = $this->get_sample_data();
// If has sample data then send test request.
if ( $sample_data ) {
Hustle_Zapier_API::make_request( $endpoint, $sample_data );
}
return true;
}
/**
* Get module sample data with all fields
*
* @return array|false
*/
private function get_sample_data() {
// Get default form fields.
$module = new Hustle_Module_Model( $this->module_id );
$elements = $module->get_form_fields();
if ( ! $elements ) {
return false;
}
// Loop through form elements.
foreach ( $elements as $element ) {
$value = '';
if ( ! empty( $element['placeholder'] ) ) {
$value = $element['placeholder'];
} elseif ( $element['label'] ) {
$value = $element['label'];
}
$sample_data[ $element['name'] ] = $value;
}
// Remove recaptcha and submit fields.
unset( $sample_data['recaptcha'], $sample_data['submit'] );
return $sample_data;
}
/**
* Return an array of options used to display the settings of the 1st step.
*
* @since 4.0
*
* @param array $submitted_data Submitted data.
* @return array
*/
private function get_first_step_options( $submitted_data ) {
$webhook = ! empty( $submitted_data['api_key'] ) ? $submitted_data['api_key'] : '';
$name = ! empty( $submitted_data['name'] ) ? $submitted_data['name'] : '';
$options = array(
array(
'type' => 'wrapper',
'elements' => array(
'label' => array(
'for' => 'friendly-name',
'type' => 'label',
'value' => __( 'Integration Name', 'hustle' ),
),
'webhook' => array(
'type' => 'text',
'name' => 'name',
'value' => $name,
'placeholder' => __( 'Friendly Name', 'hustle' ),
'id' => 'friendly-name',
'icon' => 'web-globe-world',
),
),
),
array(
'type' => 'wrapper',
'style' => 'margin-bottom: 0;',
'elements' => array(
'label' => array(
'for' => 'webhook',
'type' => 'label',
'value' => __( 'Webhook URL', 'hustle' ),
),
'webhook' => array(
'type' => 'url',
'name' => 'api_key',
'value' => $webhook,
'placeholder' => __( 'Webhook URL', 'hustle' ),
'id' => 'webhook',
'icon' => 'link',
),
),
),
);
return $options;
}
/**
* Get the first found aactive connection of the provider.
*
* @since 4.0
*
* @param string $multi_id Multi ID.
* @param array $settings Settings.
* @return boolean
*/
public function is_multi_form_settings_complete( $multi_id, $settings ) {
if ( true === $this->first_step_is_completed( $settings ) ) {
return true;
}
return false;
}
/**
* Disconnect multi_id instance of a provider from a module.
*
* @since 4.0
* @param array $submitted_data Submitted data.
*/
public function disconnect_form( $submitted_data ) {
// only execute if the multi_id is provided on the submitted data.
if ( isset( $submitted_data['multi_id'] ) && ! empty( $submitted_data['multi_id'] ) ) {
$addon_form_settings = $this->get_form_settings_values();
unset( $addon_form_settings[ $submitted_data['multi_id'] ] );
$this->save_form_settings_values( $addon_form_settings, true );
}
}
} // Class end.
endif;