Centralizes widget logic in one place
Cleans up code
This commit is contained in:
@ -115,8 +115,7 @@ class Initializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setupWidget() {
|
function setupWidget() {
|
||||||
$widget = new Widget($this->renderer);
|
register_widget('\MailPoet\Form\Widget');
|
||||||
$widget->init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initialize() {
|
function initialize() {
|
||||||
|
@ -1,153 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace MailPoet\Config;
|
|
||||||
|
|
||||||
use MailPoet\Models\Form;
|
|
||||||
|
|
||||||
if(!defined('ABSPATH')) exit;
|
|
||||||
|
|
||||||
class Widget {
|
|
||||||
private $renderer = null;
|
|
||||||
|
|
||||||
function __construct($renderer = null) {
|
|
||||||
if($renderer !== null) {
|
|
||||||
$this->renderer = $renderer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
$this->registerWidget();
|
|
||||||
|
|
||||||
if(!is_admin()) {
|
|
||||||
$this->setupDependencies();
|
|
||||||
$this->setupIframe();
|
|
||||||
} else {
|
|
||||||
add_action('widgets_admin_page', array($this, 'setupAdminWidgetPageDependencies'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupIframe() {
|
|
||||||
$form_id = (isset($_GET['mailpoet_form_iframe']) ? (int)$_GET['mailpoet_form_iframe'] : 0);
|
|
||||||
if($form_id > 0) {
|
|
||||||
$form = Form::findOne($form_id);
|
|
||||||
|
|
||||||
if($form !== false) {
|
|
||||||
$form_widget = new \MailPoet\Form\Widget();
|
|
||||||
$form_html = $form_widget->widget(array(
|
|
||||||
'form' => $form_id,
|
|
||||||
'form_type' => 'iframe'
|
|
||||||
));
|
|
||||||
|
|
||||||
// capture javascripts
|
|
||||||
ob_start();
|
|
||||||
wp_print_scripts('jquery');
|
|
||||||
wp_print_scripts('mailpoet_vendor');
|
|
||||||
wp_print_scripts('mailpoet_public');
|
|
||||||
$scripts = ob_get_contents();
|
|
||||||
ob_end_clean();
|
|
||||||
|
|
||||||
// language attributes
|
|
||||||
$language_attributes = array();
|
|
||||||
$is_rtl = (bool)(function_exists('is_rtl') && is_rtl());
|
|
||||||
|
|
||||||
if($is_rtl) {
|
|
||||||
$language_attributes[] = 'dir="rtl"';
|
|
||||||
}
|
|
||||||
|
|
||||||
if($lang = get_bloginfo('language')) {
|
|
||||||
if(get_option('html_type') === 'text/html') {
|
|
||||||
$language_attributes[] = "lang=\"$lang\"";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$language_attributes = apply_filters(
|
|
||||||
'language_attributes', implode(' ', $language_attributes)
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = array(
|
|
||||||
'language_attributes' => $language_attributes,
|
|
||||||
'scripts' => $scripts,
|
|
||||||
'form' => $form_html,
|
|
||||||
'mailpoet_form' => array(
|
|
||||||
'ajax_url' => admin_url('admin-ajax.php', 'absolute'),
|
|
||||||
'is_rtl' => $is_rtl
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
try {
|
|
||||||
echo $this->renderer->render('form/iframe.html', $data);
|
|
||||||
} catch(\Exception $e) {
|
|
||||||
echo $e->getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function registerWidget() {
|
|
||||||
register_widget('\MailPoet\Form\Widget');
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupDependencies() {
|
|
||||||
wp_enqueue_style(
|
|
||||||
'mailpoet_public',
|
|
||||||
Env::$assets_url . '/css/' . $this->renderer->getCssAsset('public.css')
|
|
||||||
);
|
|
||||||
|
|
||||||
wp_enqueue_script(
|
|
||||||
'mailpoet_vendor',
|
|
||||||
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('vendor.js'),
|
|
||||||
array(),
|
|
||||||
Env::$version,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
wp_enqueue_script(
|
|
||||||
'mailpoet_public',
|
|
||||||
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('public.js'),
|
|
||||||
array('jquery'),
|
|
||||||
Env::$version,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
wp_localize_script('mailpoet_public', 'MailPoetForm', array(
|
|
||||||
'ajax_url' => admin_url('admin-ajax.php'),
|
|
||||||
'is_rtl' => (function_exists('is_rtl') ? (bool)is_rtl() : false)
|
|
||||||
));
|
|
||||||
|
|
||||||
$ajax_failed_error_message = __('An error has happened while performing a request, please try again later.');
|
|
||||||
$inline_script = <<<EOL
|
|
||||||
function initMailpoetTranslation() {
|
|
||||||
if(typeof MailPoet !== 'undefined') {
|
|
||||||
MailPoet.I18n.add('ajaxFailedErrorMessage', '%s')
|
|
||||||
} else {
|
|
||||||
setTimeout(initMailpoetTranslation, 250);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setTimeout(initMailpoetTranslation, 250);
|
|
||||||
EOL;
|
|
||||||
wp_add_inline_script(
|
|
||||||
'mailpoet_public',
|
|
||||||
sprintf($inline_script, $ajax_failed_error_message),
|
|
||||||
'after'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupAdminWidgetPageDependencies() {
|
|
||||||
wp_enqueue_script(
|
|
||||||
'mailpoet_vendor',
|
|
||||||
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('vendor.js'),
|
|
||||||
array(),
|
|
||||||
Env::$version,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
wp_enqueue_script(
|
|
||||||
'mailpoet_admin',
|
|
||||||
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('mailpoet.js'),
|
|
||||||
array(),
|
|
||||||
Env::$version,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,6 +3,7 @@
|
|||||||
namespace MailPoet\Form;
|
namespace MailPoet\Form;
|
||||||
|
|
||||||
use MailPoet\API\JSON\API;
|
use MailPoet\API\JSON\API;
|
||||||
|
use MailPoet\Config\Env;
|
||||||
use MailPoet\Config\Renderer as ConfigRenderer;
|
use MailPoet\Config\Renderer as ConfigRenderer;
|
||||||
use MailPoet\Form\Renderer as FormRenderer;
|
use MailPoet\Form\Renderer as FormRenderer;
|
||||||
use MailPoet\Models\Form;
|
use MailPoet\Models\Form;
|
||||||
@ -12,20 +13,149 @@ use MailPoet\WP\Hooks;
|
|||||||
if(!defined('ABSPATH')) exit;
|
if(!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
class Widget extends \WP_Widget {
|
class Widget extends \WP_Widget {
|
||||||
function __construct () {
|
private $renderer;
|
||||||
return parent::__construct(
|
|
||||||
|
function __construct() {
|
||||||
|
parent::__construct(
|
||||||
'mailpoet_form',
|
'mailpoet_form',
|
||||||
__('MailPoet Form', 'mailpoet'),
|
__('MailPoet Form', 'mailpoet'),
|
||||||
|
array('description' => __('Add a newsletter subscription form', 'mailpoet'))
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->renderer = new \MailPoet\Config\Renderer(!WP_DEBUG, !WP_DEBUG);
|
||||||
|
|
||||||
|
if(!is_admin()) {
|
||||||
|
$this->setupDependencies();
|
||||||
|
$this->setupIframe();
|
||||||
|
} else {
|
||||||
|
add_action('widgets_admin_page', array(
|
||||||
|
$this,
|
||||||
|
'setupAdminWidgetPageDependencies'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupIframe() {
|
||||||
|
$form_id = (isset($_GET['mailpoet_form_iframe']) ? (int)$_GET['mailpoet_form_iframe'] : 0);
|
||||||
|
if(!$form_id || !Form::findOne($form_id)) return;
|
||||||
|
|
||||||
|
$form_html = $this->widget(
|
||||||
array(
|
array(
|
||||||
'description' => __('Add a newsletter subscription form', 'mailpoet')
|
'form' => $form_id,
|
||||||
|
'form_type' => 'iframe'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
wp_print_scripts('jquery');
|
||||||
|
wp_print_scripts('mailpoet_vendor');
|
||||||
|
wp_print_scripts('mailpoet_public');
|
||||||
|
$scripts = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
// language attributes
|
||||||
|
$language_attributes = array();
|
||||||
|
$is_rtl = (bool)(function_exists('is_rtl') && is_rtl());
|
||||||
|
|
||||||
|
if($is_rtl) {
|
||||||
|
$language_attributes[] = 'dir="rtl"';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(get_option('html_type') === 'text/html') {
|
||||||
|
$language_attributes[] = sprintf('lang="%s"', get_bloginfo('language'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$language_attributes = apply_filters(
|
||||||
|
'language_attributes', implode(' ', $language_attributes)
|
||||||
|
);
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
'language_attributes' => $language_attributes,
|
||||||
|
'scripts' => $scripts,
|
||||||
|
'form' => $form_html,
|
||||||
|
'mailpoet_form' => array(
|
||||||
|
'ajax_url' => admin_url('admin-ajax.php', 'absolute'),
|
||||||
|
'is_rtl' => $is_rtl
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
echo $this->renderer->render('form/iframe.html', $data);
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
echo $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupDependencies() {
|
||||||
|
wp_enqueue_style(
|
||||||
|
'mailpoet_public',
|
||||||
|
Env::$assets_url . '/css/' . $this->renderer->getCssAsset('public.css')
|
||||||
|
);
|
||||||
|
|
||||||
|
wp_enqueue_script(
|
||||||
|
'mailpoet_vendor',
|
||||||
|
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('vendor.js'),
|
||||||
|
array(),
|
||||||
|
Env::$version,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
wp_enqueue_script(
|
||||||
|
'mailpoet_public',
|
||||||
|
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('public.js'),
|
||||||
|
array('jquery'),
|
||||||
|
Env::$version,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
wp_localize_script('mailpoet_public', 'MailPoetForm', array(
|
||||||
|
'ajax_url' => admin_url('admin-ajax.php'),
|
||||||
|
'is_rtl' => (function_exists('is_rtl') ? (bool)is_rtl() : false)
|
||||||
|
));
|
||||||
|
|
||||||
|
$ajax_failed_error_message = __('An error has happened while performing a request, please try again later.');
|
||||||
|
|
||||||
|
$inline_script = <<<EOL
|
||||||
|
function initMailpoetTranslation() {
|
||||||
|
if(typeof MailPoet !== 'undefined') {
|
||||||
|
MailPoet.I18n.add('ajaxFailedErrorMessage', '%s')
|
||||||
|
} else {
|
||||||
|
setTimeout(initMailpoetTranslation, 250);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setTimeout(initMailpoetTranslation, 250);
|
||||||
|
EOL;
|
||||||
|
wp_add_inline_script(
|
||||||
|
'mailpoet_public',
|
||||||
|
sprintf($inline_script, $ajax_failed_error_message),
|
||||||
|
'after'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupAdminWidgetPageDependencies() {
|
||||||
|
wp_enqueue_script(
|
||||||
|
'mailpoet_vendor',
|
||||||
|
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('vendor.js'),
|
||||||
|
array(),
|
||||||
|
Env::$version,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
wp_enqueue_script(
|
||||||
|
'mailpoet_admin',
|
||||||
|
Env::$assets_url . '/js/' . $this->renderer->getJsAsset('mailpoet.js'),
|
||||||
|
array(),
|
||||||
|
Env::$version,
|
||||||
|
true
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the new widget's title.
|
* Save the new widget's title.
|
||||||
*/
|
*/
|
||||||
public function update( $new_instance, $old_instance ) {
|
public function update($new_instance, $old_instance) {
|
||||||
$instance = $old_instance;
|
$instance = $old_instance;
|
||||||
$instance['title'] = strip_tags($new_instance['title']);
|
$instance['title'] = strip_tags($new_instance['title']);
|
||||||
$instance['form'] = (int)$new_instance['form'];
|
$instance['form'] = (int)$new_instance['form'];
|
||||||
@ -36,7 +166,6 @@ class Widget extends \WP_Widget {
|
|||||||
* Output the widget's option form.
|
* Output the widget's option form.
|
||||||
*/
|
*/
|
||||||
public function form($instance) {
|
public function form($instance) {
|
||||||
|
|
||||||
$instance = wp_parse_args(
|
$instance = wp_parse_args(
|
||||||
(array)$instance,
|
(array)$instance,
|
||||||
array(
|
array(
|
||||||
@ -121,74 +250,74 @@ class Widget extends \WP_Widget {
|
|||||||
|
|
||||||
// get form
|
// get form
|
||||||
$form = Form::getPublished()->findOne($instance['form']);
|
$form = Form::getPublished()->findOne($instance['form']);
|
||||||
|
if(!$form) return '';
|
||||||
|
|
||||||
// if the form was not found, return nothing
|
$form = $form->asArray();
|
||||||
if($form === false) {
|
$form_type = 'widget';
|
||||||
return '';
|
if(isset($instance['form_type']) && in_array(
|
||||||
} else {
|
|
||||||
$form = $form->asArray();
|
|
||||||
$form_type = 'widget';
|
|
||||||
if(isset($instance['form_type']) && in_array(
|
|
||||||
$instance['form_type'],
|
$instance['form_type'],
|
||||||
array('html', 'php', 'iframe', 'shortcode')
|
array(
|
||||||
|
'html',
|
||||||
|
'php',
|
||||||
|
'iframe',
|
||||||
|
'shortcode'
|
||||||
|
)
|
||||||
)) {
|
)) {
|
||||||
$form_type = $instance['form_type'];
|
$form_type = $instance['form_type'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$body = (isset($form['body']) ? $form['body'] : array());
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
if(!empty($body)) {
|
||||||
|
$form_id = $this->id_base . '_' . $form['id'];
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
'form_id' => $form_id,
|
||||||
|
'form_type' => $form_type,
|
||||||
|
'form' => $form,
|
||||||
|
'title' => $title,
|
||||||
|
'styles' => FormRenderer::renderStyles($form, '#' . $form_id),
|
||||||
|
'html' => FormRenderer::renderHTML($form),
|
||||||
|
'before_widget' => (!empty($before_widget) ? $before_widget : ''),
|
||||||
|
'after_widget' => (!empty($after_widget) ? $after_widget : ''),
|
||||||
|
'before_title' => (!empty($before_title) ? $before_title : ''),
|
||||||
|
'after_title' => (!empty($after_title) ? $after_title : '')
|
||||||
|
);
|
||||||
|
|
||||||
|
// (POST) non ajax success/error variables
|
||||||
|
$data['success'] = (
|
||||||
|
(isset($_GET['mailpoet_success']))
|
||||||
|
&&
|
||||||
|
((int)$_GET['mailpoet_success'] === (int)$form['id'])
|
||||||
|
);
|
||||||
|
$data['error'] = (
|
||||||
|
(isset($_GET['mailpoet_error']))
|
||||||
|
&&
|
||||||
|
((int)$_GET['mailpoet_error'] === (int)$form['id'])
|
||||||
|
);
|
||||||
|
|
||||||
|
// generate security token
|
||||||
|
$data['token'] = Security::generateToken();
|
||||||
|
|
||||||
|
// add API version
|
||||||
|
$data['api_version'] = API::CURRENT_VERSION;
|
||||||
|
|
||||||
|
// render form
|
||||||
|
$renderer = new ConfigRenderer();
|
||||||
|
try {
|
||||||
|
$output = $renderer->render('form/widget.html', $data);
|
||||||
|
$output = do_shortcode($output);
|
||||||
|
$output = Hooks::applyFilters('mailpoet_form_widget_post_process', $output);
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
$output = $e->getMessage();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$settings = (isset($form['settings']) ? $form['settings'] : array());
|
if($form_type === 'widget') {
|
||||||
$body = (isset($form['body']) ? $form['body'] : array());
|
echo $output;
|
||||||
$output = '';
|
} else {
|
||||||
|
return $output;
|
||||||
if(!empty($body)) {
|
|
||||||
$form_id = $this->id_base.'_'.$form['id'];
|
|
||||||
|
|
||||||
$data = array(
|
|
||||||
'form_id' => $form_id,
|
|
||||||
'form_type' => $form_type,
|
|
||||||
'form' => $form,
|
|
||||||
'title' => $title,
|
|
||||||
'styles' => FormRenderer::renderStyles($form, '#'.$form_id),
|
|
||||||
'html' => FormRenderer::renderHTML($form),
|
|
||||||
'before_widget' => (!empty($before_widget) ? $before_widget : ''),
|
|
||||||
'after_widget' => (!empty($after_widget) ? $after_widget : ''),
|
|
||||||
'before_title' => (!empty($before_title) ? $before_title : ''),
|
|
||||||
'after_title' => (!empty($after_title) ? $after_title : '')
|
|
||||||
);
|
|
||||||
|
|
||||||
// (POST) non ajax success/error variables
|
|
||||||
$data['success'] = (
|
|
||||||
(isset($_GET['mailpoet_success']))
|
|
||||||
&&
|
|
||||||
((int)$_GET['mailpoet_success'] === (int)$form['id'])
|
|
||||||
);
|
|
||||||
$data['error'] = (
|
|
||||||
(isset($_GET['mailpoet_error']))
|
|
||||||
&&
|
|
||||||
((int)$_GET['mailpoet_error'] === (int)$form['id'])
|
|
||||||
);
|
|
||||||
|
|
||||||
// generate security token
|
|
||||||
$data['token'] = Security::generateToken();
|
|
||||||
|
|
||||||
// add API version
|
|
||||||
$data['api_version'] = API::CURRENT_VERSION;
|
|
||||||
|
|
||||||
// render form
|
|
||||||
$renderer = new ConfigRenderer();
|
|
||||||
try {
|
|
||||||
$output = $renderer->render('form/widget.html', $data);
|
|
||||||
$output = do_shortcode($output);
|
|
||||||
$output = Hooks::applyFilters('mailpoet_form_widget_post_process', $output);
|
|
||||||
} catch(\Exception $e) {
|
|
||||||
$output = $e->getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($form_type === 'widget') {
|
|
||||||
echo $output;
|
|
||||||
} else {
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user