diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php index 346543478e..e782eb8f5b 100644 --- a/lib/Config/Initializer.php +++ b/lib/Config/Initializer.php @@ -115,8 +115,7 @@ class Initializer { } function setupWidget() { - $widget = new Widget($this->renderer); - $widget->init(); + register_widget('\MailPoet\Form\Widget'); } function initialize() { diff --git a/lib/Config/Widget.php b/lib/Config/Widget.php deleted file mode 100644 index a7928dbdaa..0000000000 --- a/lib/Config/Widget.php +++ /dev/null @@ -1,153 +0,0 @@ -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 = <<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 - ); - } -} diff --git a/lib/Form/Widget.php b/lib/Form/Widget.php index a93a95516e..ed22650733 100644 --- a/lib/Form/Widget.php +++ b/lib/Form/Widget.php @@ -3,6 +3,7 @@ namespace MailPoet\Form; use MailPoet\API\JSON\API; +use MailPoet\Config\Env; use MailPoet\Config\Renderer as ConfigRenderer; use MailPoet\Form\Renderer as FormRenderer; use MailPoet\Models\Form; @@ -12,20 +13,149 @@ use MailPoet\WP\Hooks; if(!defined('ABSPATH')) exit; class Widget extends \WP_Widget { - function __construct () { - return parent::__construct( + private $renderer; + + function __construct() { + parent::__construct( 'mailpoet_form', __('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( - '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 = <<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. */ - public function update( $new_instance, $old_instance ) { + public function update($new_instance, $old_instance) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['form'] = (int)$new_instance['form']; @@ -36,7 +166,6 @@ class Widget extends \WP_Widget { * Output the widget's option form. */ public function form($instance) { - $instance = wp_parse_args( (array)$instance, array( @@ -121,74 +250,74 @@ class Widget extends \WP_Widget { // get form $form = Form::getPublished()->findOne($instance['form']); + if(!$form) return ''; - // if the form was not found, return nothing - if($form === false) { - return ''; - } else { - $form = $form->asArray(); - $form_type = 'widget'; - if(isset($instance['form_type']) && in_array( + $form = $form->asArray(); + $form_type = 'widget'; + if(isset($instance['form_type']) && in_array( $instance['form_type'], - array('html', 'php', 'iframe', 'shortcode') + array( + 'html', + 'php', + 'iframe', + 'shortcode' + ) )) { - $form_type = $instance['form_type']; - } + $form_type = $instance['form_type']; + } - $settings = (isset($form['settings']) ? $form['settings'] : array()); - $body = (isset($form['body']) ? $form['body'] : array()); - $output = ''; + $body = (isset($form['body']) ? $form['body'] : array()); + $output = ''; - if(!empty($body)) { - $form_id = $this->id_base.'_'.$form['id']; + 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 : '') - ); + $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']) - ); + // (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(); + // generate security token + $data['token'] = Security::generateToken(); - // add API version - $data['api_version'] = API::CURRENT_VERSION; + // 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; + // 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; + } } -} +} \ No newline at end of file