STRATO-apps/wordpress_03/app/wp-content/plugins/fluentformpro/src/Components/SaveProgressButton.php
SHA-256: 3b55c11d9a3cd8be0d0852e1dae2f3dd139bf53718e5c874930b999a64f34d81
<?php
namespace FluentFormPro\Components;
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
use FluentForm\Framework\Helpers\ArrayHelper as Arr;
use FluentForm\App\Services\FormBuilder\BaseFieldManager;
class SaveProgressButton extends BaseFieldManager
{
public function __construct()
{
parent::__construct(
'save_progress_button',
'Save & Resume',
['save', 'button', 'progress'],
'advanced'
);
$this->updateExistingFields();
add_action('wp_enqueue_scripts', function () {
$vars = apply_filters('fluentform/save_progress_vars', [
'source_url' => home_url($_SERVER['REQUEST_URI']),
'nonce' => wp_create_nonce(),
'copy_button' => sprintf("<img src='%s' >", fluentformMix('img/copy.svg')),
'copy_success_button' => sprintf("<img src='%s' >", fluentformMix('img/check.svg')),
'email_button' => sprintf("<img src='%s' >", fluentformMix('img/email.svg')),
'email_placeholder_str' => __('Your Email Here', 'fluentformpro'),
]);
wp_localize_script('form-save-progress', 'form_state_save_vars', $vars);
});
}
public function pushFormInputType($types)
{
return $types;
}
function getComponent()
{
return [
'index' => 15,
'element' => $this->key,
'attributes' => [
'class' => '',
'name' => 'save_progress_button'
],
'settings' => [
'button_style' => 'default',
'button_size' => 'md',
'align' => 'left',
'container_class' => '',
'current_state' => 'normal_styles',
'background_color' => 'rgb(26, 126, 251)',
'color' => 'rgb(255, 255, 255)',
'hover_styles' => (object)[
'backgroundColor' => '#ffffff',
'borderColor' => '#1a7efb',
'color' => '#1a7efb',
'borderRadius' => '',
'minWidth' => '100%'
],
'normal_styles' => (object)[
'backgroundColor' => '#1a7efb',
'borderColor' => '#1a7efb',
'color' => '#ffffff',
'borderRadius' => '',
'minWidth' => ''
],
'button_ui' => (object)[
'text' => __('Save & Resume', 'fluentformpro'),
'type' => 'default',
'img_url' => ''
],
'conditional_logics' => [],
'save_resume_for_logged_in_user' => false,
'email_resume_link_enabled' => true,
'use_link_once' => false,
'save_success_message' => __('Your progress has been successfully saved. You can access the form anytime by copying the link or get the resume form link to your email from below.','fluentformpro'),
'email_subject' => sprintf(__('Resume Form Submission : %s','fluentformpro'), '{form_name}'),
'email_body' => __(self::getEmailBody(), 'fluentformpro'),
'send_email_on_entry_create' => false,
'on_create_email_address' => get_option('admin_email'),
'on_create_email_subject' => sprintf(__('A Partial entry created on form: %s and partial entry ID: %s','fluentformpro'), '{form_name}', '{partial_entry_id}'),
'on_create_email_body' => __(self::getAdminPartialEntryEmailBody('created'), 'fluentformpro'),
'send_email_on_entry_update' => false,
'on_update_email_address' => get_option('admin_email'),
'on_update_email_subject' => sprintf(__('A Partial entry updated on form: %s and partial entry ID: %s','fluentformpro'), '{form_name}', '{partial_entry_id}'),
'on_update_email_body' => __(self::getAdminPartialEntryEmailBody('updated'), 'fluentformpro'),
],
'editor_options' => [
'title' => $this->title,
'icon_class' => 'dashicons dashicons-arrow-right-alt',
'template' => 'customButton'
],
];
}
public function pushConditionalSupport($conditonalItems)
{
return $conditonalItems;
}
public function getGeneralEditorElements()
{
return [
'btn_text',
'button_ui',
'button_style',
'button_size',
'align',
'save_success_message',
'save_resume_for_logged_in_user',
'email_resume_link_enabled',
'email_subject',
'email_body',
'use_link_once',
];
}
public function getAdvancedEditorElements()
{
return [
'container_class',
'class',
'name',
'conditional_logics',
'send_email_on_entry_create',
'on_create_email_address',
'on_create_email_subject',
'on_create_email_body',
'send_email_on_entry_update',
'on_update_email_address',
'on_update_email_subject',
'on_update_email_body',
];
}
public function generalEditorElement()
{
return [
'save_success_message' => [
'template' => 'inputTextarea',
'label' => __('Success Message', 'fluentform'),
'help_text' => __('Message to show after saving form state.', 'fluentformpro'),
],
'save_resume_for_logged_in_user' => [
'template' => 'radioButton',
'label' => __('Allow Only For Logged In User', 'fluentform'),
'help_text' => __('Only logged in user can see and use save and resume', 'fluentform'),
'options' => [
[
'value' => true,
'label' => __('Yes', 'fluentform'),
],
[
'value' => false,
'label' => __('No', 'fluentform'),
],
],
],
'email_resume_link_enabled' => [
'template' => 'radioButton',
'label' => __('Enable Email Link', 'fluentform'),
'help_text' => __('Allow User to Email Resume Link', 'fluentform'),
'options' => [
[
'value' => true,
'label' => __('Yes', 'fluentform'),
],
[
'value' => false,
'label' => __('No', 'fluentform'),
],
],
],
'email_subject' => [
'template' => 'inputText',
'label' => __('Email Subject', 'fluentform'),
'help_text' => sprintf(__('Use %s placeholder to get the Form Name.', 'fluentformpro'),'{form_name}'),
'dependency' => [
'depends_on' => 'settings/email_resume_link_enabled',
'value' => true,
'operator' => '==',
],
],
'email_body' => [
'template' => 'inputHTML',
'label' => __('Email Body', 'fluentform'),
'hide_extra' => 'yes',
'inline_help_text' => sprintf(__('Use %s placeholder to get the email resume link.', 'fluentformpro'),'{email_resume_link}'),
'dependency' => [
'depends_on' => 'settings/email_resume_link_enabled',
'value' => true,
'operator' => '==',
],
],
'use_link_once' => [
'template' => 'radioButton',
'label' => __('Allow use the link only once', 'fluentform'),
'help_text' => __('Use the link only once after that no one can use it.', 'fluentform'),
'options' => [
[
'value' => true,
'label' => __('Yes', 'fluentform'),
],
[
'value' => false,
'label' => __('No', 'fluentform'),
],
],
],
];
}
public function advancedEditorElement()
{
return [
'send_email_on_entry_create' => [
'template' => 'radioButton',
'label' => __('Send Email on Partial Entry Created', 'fluentform'),
'help_text' => __('Send Email on Partial Entry Created', 'fluentform'),
'options' => [
[
'value' => true,
'label' => __('Yes', 'fluentform'),
],
[
'value' => false,
'label' => __('No', 'fluentform'),
],
],
],
'on_create_email_address' => [
'template' => 'inputText',
'label' => __('Email Address', 'fluentform'),
'help_text' => __('Leaving it empty will send to Email to the Admin', 'fluentformpro'),
'dependency' => [
'depends_on' => 'settings/send_email_on_entry_create',
'value' => true,
'operator' => '==',
],
],
'on_create_email_subject' => [
'template' => 'inputText',
'label' => __('Email Subject', 'fluentform'),
'help_text' => sprintf(__('Use %s placeholder to get the Form Name.', 'fluentformpro'), '{form_name}'),
'dependency' => [
'depends_on' => 'settings/send_email_on_entry_create',
'value' => true,
'operator' => '==',
],
],
'on_create_email_body' => [
'template' => 'inputHTML',
'label' => __('Email Body', 'fluentform'),
'hide_extra' => 'yes',
'inline_help_text' => sprintf(__('Use %s placeholder to get the partial entry details.', 'fluentformpro'),
'{partial_entry_link}'),
'dependency' => [
'depends_on' => 'settings/send_email_on_entry_create',
'value' => true,
'operator' => '==',
],
],
'send_email_on_entry_update' => [
'template' => 'radioButton',
'label' => __('Send Email on Partial Entry Updated', 'fluentform'),
'help_text' => __('Send Email on Partial Entry Updated', 'fluentform'),
'options' => [
[
'value' => true,
'label' => __('Yes', 'fluentform'),
],
[
'value' => false,
'label' => __('No', 'fluentform'),
],
]
],
'on_update_email_address' => [
'template' => 'inputText',
'label' => __('Email Address', 'fluentform'),
'help_text' => __('Leaving it empty will send to Email to the Admin', 'fluentformpro'),
'dependency' => [
'depends_on' => 'settings/send_email_on_entry_update',
'value' => true,
'operator' => '==',
],
],
'on_update_email_subject' => [
'template' => 'inputText',
'label' => __('Email Subject', 'fluentform'),
'help_text' => sprintf(__('Use %s placeholder to get the Form Name.', 'fluentformpro'), '{form_name}'),
'dependency' => [
'depends_on' => 'settings/send_email_on_entry_update',
'value' => true,
'operator' => '==',
],
],
'on_update_email_body' => [
'template' => 'inputHTML',
'label' => __('Email Body', 'fluentform'),
'hide_extra' => 'yes',
'inline_help_text' => sprintf(__('Use %s placeholder to get the partial entry details.', 'fluentformpro'),
'{partial_entry_link}'),
'dependency' => [
'depends_on' => 'settings/send_email_on_entry_update',
'value' => true,
'operator' => '==',
],
]
];
}
public function render($data, $form)
{
if (
Arr::get($data, 'settings.save_resume_for_logged_in_user')
&& !is_user_logged_in()
) {
return '';
}
$elementName = $data['element'];
$data = apply_filters_deprecated(
'fluentform_rendering_field_data_' . $elementName,
[
$data,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/rendering_field_data_' . $elementName,
'Use fluentform/rendering_field_data_' . $elementName . ' instead of fluentform_rendering_field_data_' . $elementName
);
$data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form);
wp_enqueue_script('form-save-progress');
add_filter('fluentform/form_class', function ($formClass){
return $formClass .= ' ff-form-has-save-progress';
});
$btnStyle = Arr::get($data['settings'], 'button_style');
$btnSize = 'ff-btn-';
$btnSize .= isset($data['settings']['button_size']) ? $data['settings']['button_size'] : 'md';
$oldBtnType = isset($data['settings']['button_style']) ? '' : ' ff-btn-primary ';
$align = 'ff-el-group ff-text-' . @$data['settings']['align'];
$btnClasses = [
'ff-btn ff-btn-save-progress',
$oldBtnType,
$btnSize,
$data['attributes']['class']
];
if($btnStyle == 'no_style') {
$btnClasses[] = 'ff_btn_no_style';
} else {
$btnClasses[] = 'ff_btn_style';
}
$data['attributes']['class'] = trim(implode(' ', array_filter($btnClasses)));
if($tabIndex = \FluentForm\App\Helpers\Helper::getNextTabIndex()) {
$data['attributes']['tabindex'] = $tabIndex;
}
$styles = '';
if (Arr::get($data, 'settings.button_style') == '') {
$data['attributes']['class'] .= ' wpf_has_custom_css';
// it's a custom button
$buttonActiveStyles = Arr::get($data, 'settings.normal_styles', []);
$buttonHoverStyles = Arr::get($data, 'settings.hover_styles', []);
$activeStates = '';
foreach ($buttonActiveStyles as $styleAtr => $styleValue) {
if (!$styleValue) {
continue;
}
if ($styleAtr == 'borderRadius') {
$styleValue .= 'px';
}
$activeStates .= ltrim(strtolower(preg_replace('/[A-Z]([A-Z](?![a-z]))*/', '-$0', $styleAtr)), '_') . ':' . $styleValue . ';';
}
if ($activeStates) {
$styles .= 'form.fluent_form_' . $form->id . ' .wpf_has_custom_css.ff-btn-save-progress { ' . $activeStates . ' }';
}
$hoverStates = '';
foreach ($buttonHoverStyles as $styleAtr => $styleValue) {
if (!$styleValue) {
continue;
}
if ($styleAtr == 'borderRadius') {
$styleValue .= 'px';
}
$hoverStates .= ltrim(strtolower(preg_replace('/[A-Z]([A-Z](?![a-z]))*/', '-$0', $styleAtr)), '-') . ':' . $styleValue . ';';
}
if ($hoverStates) {
$styles .= 'form.fluent_form_' . $form->id . ' .wpf_has_custom_css.ff-btn-save-progress:hover { ' . $hoverStates . ' } ';
}
} else if($btnStyle != 'no_style') {
$styles .= 'form.fluent_form_' . $form->id . ' .ff-btn-save-progress { background-color: ' . Arr::get($data, 'settings.background_color') . '; color: ' . Arr::get($data, 'settings.color') . '; }';
}
if (Arr::get($data, 'settings.email_resume_link_enabled')) {
$data['attributes']['class'] .= ' ff_resume_email_enabled';
}
$atts = $this->buildAttributes($data['attributes']);
$hasConditions = $this->hasConditions($data) ? 'has-conditions ' : '';
$cls = trim($align . ' ' . $data['settings']['container_class'] . ' ' . $hasConditions);
$html = "<div class='{$cls} ff_submit_btn_wrapper ff_submit_btn_wrapper_custom'>";
// ADDED IN v1.2.6 - updated in 1.4.4
if (isset($data['settings']['button_ui'])) {
if ($data['settings']['button_ui']['type'] == 'default') {
$html .= '<button ' . $atts . '>' . $data['settings']['button_ui']['text'] . '</button>';
} else {
$html .= "<button class='ff-btn-save-progress' type='submit'><img style='max-width: 200px;' src='{$data['settings']['button_ui']['img_url']}' alt='Submit Form'></button>";
}
} else {
$html .= '<button ' . $atts . '>' . $data['settings']['btn_text'] . '</button>';
}
if ($styles) {
$html .= '<style>' . $styles . '</style>';
}
$html .= '</div>';
$html = apply_filters_deprecated(
'fluentform_rendering_field_html_' . $elementName,
[
$html,
$data,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/rendering_field_html_' . $elementName,
'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform_rendering_field_html_' . $elementName
);
echo apply_filters('fluentform/rendering_field_html_' . $elementName, $html, $data, $form);
}
private function getEmailBody()
{
return '<p>Hello,</p>
<p>Your Progress has been saved as you have not completed filling out the {form_name}. Continue where you left off using the link below.</p>
<p><a style="color: #ffffff; background-color: #3f9eff; text-decoration: none; font-weight: normal; font-style: normal; padding: 0.5rem 1rem; border-color: #0072ff;"
href="{email_resume_link}">
Resume Form
</a></p>
<p>Thank you</p>';
}
private function getAdminPartialEntryEmailBody($action)
{
return "<p>Hello,</p>
<p>A partial submission has been {$action} on {form_name}. See the submission using the link below.</p>
<p>
<a style='color: #ffffff; background-color: #3f9eff; text-decoration: none; font-weight: normal; font-style: normal; padding: 0.5rem 1rem; border-color: #0072ff;' href='{partial_entry_link}'>View partial submission</a>
</p>
<p>Thank you</p>";
}
private function updateExistingFields()
{
$nameIndex = 0;
add_filter('fluentform/editor_init_element_save_progress_button', function ($element) use (&$nameIndex) {
if (!isset($element['settings']['email_resume_link_enabled'])) {
$element['settings']['email_resume_link_enabled'] = false;
}
if (!isset($element['settings']['save_success_message'])) {
$element['settings']['save_success_message'] = __('Your progress has been successfully saved. You can access the form anytime by copying the link or get the resume form link to your email from below.', 'fluentformpro');
}
if (!isset($element['settings']['email_subject'])) {
$element['settings']['email_subject'] = sprintf(__('Resume Form Submission : %s',
'fluentformpro'), '{form_name}');
}
if (!isset($element['settings']['email_body'])) {
$element['settings']['email_body'] = $this->getEmailBody();
}
if (!isset($element['settings']['save_resume_for_logged_in_user'])) {
$element['settings']['save_resume_for_logged_in_user'] = false;
}
if (!isset($element['settings']['send_email_on_entry_create'])) {
$element['settings']['send_email_on_entry_create'] = false;
}
if (!isset($element['settings']['on_create_email_address'])) {
$element['settings']['on_create_email_address'] = get_option('admin_email');
}
if (!isset($element['settings']['on_create_email_subject'])) {
$element['settings']['on_create_email_subject'] = sprintf(__('A Partial entry created on form: %s and partial entry ID: %s','fluentformpro'), '{form_name}', '{partial_entry_id}');
}
if (!isset($element['settings']['on_create_email_body'])) {
$element['settings']['on_create_email_body'] = __(self::getAdminPartialEntryEmailBody('created'), 'fluentformpro');
}
if (!isset($element['settings']['send_email_on_entry_update'])) {
$element['settings']['send_email_on_entry_update'] = false;
}
if (!isset($element['settings']['on_update_email_address'])) {
$element['settings']['on_update_email_address'] = get_option('admin_email');
}
if (!isset($element['settings']['on_update_email_subject'])) {
$element['settings']['on_update_email_subject'] = sprintf(__('A Partial entry updated on form: %s and partial entry ID: %s','fluentformpro'), '{form_name}', '{partial_entry_id}');
}
if (!isset($element['settings']['on_update_email_body'])) {
$element['settings']['on_update_email_body'] = __(self::getAdminPartialEntryEmailBody('updated'), 'fluentformpro');
}
if (!isset($element['attributes']['name'])) {
$element['attributes']['name'] = 'save_progress_button' . ($nameIndex > 0 ? '_' . $nameIndex : '');
$nameIndex++;
}
if (!isset($element['settings']['use_link_once'])) {
$element['settings']['use_link_once'] = false;
}
return $element;
});
}
}