| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- defined('ABSPATH') || exit;
- if (version_compare(phpversion(), '5.3', '<')) {
- return;
- }
- /**
- * Newsletter widget version 2.0: it'll replace the old version left for compatibility.
- */
- class NewsletterWidget extends WP_Widget {
- function __construct() {
- parent::__construct(false, $name = 'Newsletter', array('description' => 'Newsletter widget to add subscription forms on sidebars'), array('width' => '350px'));
- }
- static function get_widget_form($instance) {
- $field_wrapper_tag = 'div';
- if (!isset($instance['nl']) || !is_array($instance['nl']))
- $instance['nl'] = array();
- $instance = array_merge(array('lists_layout' => '',
- 'lists_empty_label' => '',
- 'lists_field_label' => ''), $instance);
- $options_profile = get_option('newsletter_profile');
- $form = '';
- $form .= '<div class="tnp tnp-widget">';
- $form .= NewsletterSubscription::instance()->get_subscription_form('widget', null, array(
- 'list' => implode(',', $instance['nl']),
- 'lists_field_layout' => $instance['lists_layout'],
- 'lists_field_empty_label' => $instance['lists_empty_label'],
- 'lists_field_label' => $instance['lists_field_label'],
- ));
- $form .= "</div>\n";
- return $form;
- }
- function widget($args, $instance) {
-
- $newsletter = Newsletter::instance();
- extract($args);
- if (empty($instance))
- $instance = array();
- $instance = array_merge(array('text' => '', 'title' => ''), $instance);
- echo $before_widget;
- // Filters are used for WPML
- if (!empty($instance['title'])) {
- $title = apply_filters('widget_title', $instance['title'], $instance);
- echo $before_title . $title . $after_title;
- }
- $buffer = apply_filters('widget_text', $instance['text'], $instance);
- $options = get_option('newsletter');
- $options_profile = get_option('newsletter_profile');
- if (stripos($instance['text'], '<form') === false) {
- $form = NewsletterWidget::get_widget_form($instance);
- // Canot user directly the replace, since the form is different on the widget...
- if (strpos($buffer, '{subscription_form}') !== false)
- $buffer = str_replace('{subscription_form}', $form, $buffer);
- else {
- if (strpos($buffer, '{subscription_form_') !== false) {
- // TODO: Optimize with a method to replace only the custom forms
- $buffer = $newsletter->replace($buffer);
- } else {
- $buffer .= $form;
- }
- }
- } else {
- $buffer = str_ireplace('<form', '<form method="post" action="' . esc_attr($newsletter->get_subscribe_url()) . '" onsubmit="return newsletter_check(this)"', $buffer);
- $buffer = str_ireplace('</form>', '<input type="hidden" name="nr" value="widget"/></form>', $buffer);
- }
- // That replace all the remaining tags
- $buffer = $newsletter->replace($buffer);
- echo $buffer;
- echo $after_widget;
- }
- function update($new_instance, $old_instance) {
- return $new_instance;
- }
- function form($instance) {
- if (!is_array($instance)) {
- $instance = array();
- }
- $instance = array_merge(array('title' => '', 'text' => '', 'lists_layout' => '', 'lists_empty_label' => '', 'lists_field_label' => ''), $instance);
- $options_profile = get_option('newsletter_profile');
- if (!isset($instance['nl']) || !is_array($instance['nl']))
- $instance['nl'] = array();
- ?>
- <p>
- <label for="<?php echo $this->get_field_id('title'); ?>">
- <?php _e('Title')?>:
- <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($instance['title']); ?>" />
- </label>
- <label for="<?php echo $this->get_field_id('text'); ?>">
- Introduction:
- <textarea class="widefat" rows="10" cols="20" id="<?php echo $this->get_field_id('text'); ?>" name="<?php echo $this->get_field_name('text'); ?>"><?php echo esc_html($instance['text']); ?></textarea>
- </label>
- <label>
- Show lists as:
- <select name="<?php echo $this->get_field_name('lists_layout'); ?>" id="<?php echo $this->get_field_id('lists_layout'); ?>" style="width: 100%">
- <option value="">Checkboxes</option>
- <option value="dropdown" <?php echo $instance['lists_layout'] == 'dropdown' ? 'selected' : '' ?>>Dropdown</option>
- </select>
- </label>
- <br>
- <label for="<?php echo $this->get_field_id('lists_empty_label'); ?>">
- First dropdown entry label:
- <input class="widefat" id="<?php echo $this->get_field_id('lists_empty_label'); ?>" name="<?php echo $this->get_field_name('lists_empty_label'); ?>" type="text" value="<?php echo esc_attr($instance['lists_empty_label']); ?>" />
- </label>
- <br>
- <label for="<?php echo $this->get_field_id('lists_field_label'); ?>">
- Lists field label:
- <input class="widefat" id="<?php echo $this->get_field_id('lists_field_label'); ?>" name="<?php echo $this->get_field_name('lists_field_label'); ?>" type="text" value="<?php echo esc_attr($instance['lists_field_label']); ?>" />
- </label>
- <br><br>
- <?php _e('Automatically subscribe to', 'newsletter') ?>
- <br>
- <?php
- $lists = Newsletter::instance()->get_lists_public();
- foreach ($lists as $list) {
- ?>
- <label for="nl<?php echo $list->id ?>">
- <input type="checkbox" value="<?php echo $list->id ?>" name="<?php echo $this->get_field_name('nl[]') ?>" <?php echo array_search($list->id, $instance['nl']) !== false ? 'checked' : '' ?>> <?php echo esc_html($list->name) ?>
- </label>
- <br>
- <?php } ?>
- <br>
- </p>
- <p>
- Use the tag {subscription_form} to place the subscription form within your personal text.
- </p>
- <?php
- }
- }
- add_action('widgets_init', function () {
- return register_widget("NewsletterWidget");
- });
|