Horriblesubs/fansub/widgets/class-fansub-widget-feedbur...

143 lines
5.8 KiB
PHP

<?php
if(!function_exists('add_filter')) exit;
class FANSUB_Widget_FeedBurner extends WP_Widget {
public $args = array();
public $admin_args;
private function get_defaults() {
$defaults = array(
'button_text' => __('Subscribe', 'fansub'),
'placeholder' => __('Enter your email', 'fansub'),
'description' => '',
'desc_position' => 'before',
'desc_positions' => array(
'before' => __('Before email field', 'fansub'),
'after' => __('After email field', 'fansub')
)
);
$defaults = apply_filters('fansub_widget_feedburner_defaults', $defaults);
$args = apply_filters('fansub_widget_feedburner_args', array());
$args = wp_parse_args($args, $defaults);
return $args;
}
public function __construct() {
$this->args = $this->get_defaults();
$this->admin_args = array(
'id' => 'fansub_widget_feedburner',
'name' => 'FANSUB FeedBurner',
'class' => 'fansub-feedburner-widget',
'description' => __('Display FeedBurner subscription box on sidebar.', 'fansub'),
'width' => 400
);
$this->admin_args = apply_filters('fansub_widget_feedburner_admin_args', $this->admin_args);
parent::__construct($this->admin_args['id'], $this->admin_args['name'],
array(
'classname' => $this->admin_args['class'],
'description' => $this->admin_args['description'],
),
array(
'width' => $this->admin_args['width']
)
);
}
public function widget($args, $instance) {
$feedburner_name = fansub_get_value_by_key($instance, 'feedburner_name');
if(!empty($feedburner_name)) {
$button_text = fansub_get_value_by_key($instance, 'button_text', fansub_get_value_by_key($this->args, 'button_text'));
$placeholder = fansub_get_value_by_key($instance, 'placeholder', fansub_get_value_by_key($this->args, 'placeholder'));
$description = fansub_get_value_by_key($instance, 'description', fansub_get_value_by_key($this->args, 'description'));
$desc_position = fansub_get_value_by_key($instance, 'desc_position', fansub_get_value_by_key($this->args, 'desc_position'));
fansub_widget_before($args, $instance);
ob_start();
if(!empty($description) && 'before' == $desc_position) {
echo '<p class="description">' . $description . '</p>';
}
$fb_args = array(
'button_text' => $button_text,
'name' => $feedburner_name,
'placeholder' => $placeholder
);
fansub_feedburner_form($fb_args);
if(!empty($description) && 'after' == $desc_position) {
echo '<p class="description">' . $description . '</p>';
}
$widget_html = ob_get_clean();
$widget_html = apply_filters('fansub_widget_feedburner_html', $widget_html, $instance, $args, $this);
echo $widget_html;
fansub_widget_after($args, $instance);
}
}
public function form($instance) {
$title = isset($instance['title']) ? $instance['title'] : '';
$feedburner_name = fansub_get_value_by_key($instance, 'feedburner_name');
$button_text = fansub_get_value_by_key($instance, 'button_text', fansub_get_value_by_key($this->args, 'button_text'));
$placeholder = fansub_get_value_by_key($instance, 'placeholder', fansub_get_value_by_key($this->args, 'placeholder'));
$description = fansub_get_value_by_key($instance, 'description', fansub_get_value_by_key($this->args, 'description'));
$desc_position = fansub_get_value_by_key($instance, 'desc_position', fansub_get_value_by_key($this->args, 'desc_position'));
fansub_field_widget_before($this->admin_args['class']);
fansub_widget_field_title($this->get_field_id('title'), $this->get_field_name('title'), $title);
$args = array(
'id' => $this->get_field_id('feedburner_name'),
'name' => $this->get_field_name('feedburner_name'),
'value' => $feedburner_name,
'label' => __('Name:', 'fansub')
);
fansub_widget_field('fansub_field_input_text', $args);
$args = array(
'id' => $this->get_field_id('button_text'),
'name' => $this->get_field_name('button_text'),
'value' => $button_text,
'label' => __('Button text:', 'fansub')
);
fansub_widget_field('fansub_field_input_text', $args);
$args = array(
'id' => $this->get_field_id('placeholder'),
'name' => $this->get_field_name('placeholder'),
'value' => $placeholder,
'label' => __('Placeholder:', 'fansub')
);
fansub_widget_field('fansub_field_input_text', $args);
$args = array(
'id' => $this->get_field_id('description'),
'name' => $this->get_field_name('description'),
'value' => $description,
'label' => __('Description:', 'fansub')
);
fansub_widget_field('fansub_field_textarea', $args);
$lists = $this->args['desc_positions'];
$all_option = '';
foreach($lists as $lkey => $lvalue) {
$all_option .= fansub_field_get_option(array('value' => $lkey, 'text' => $lvalue, 'selected' => $desc_position));
}
$args = array(
'id' => $this->get_field_id('desc_position'),
'name' => $this->get_field_name('desc_position'),
'value' => $desc_position,
'all_option' => $all_option,
'label' => __('Description position:', 'fansub'),
'class' => 'desc-position'
);
fansub_widget_field('fansub_field_select', $args);
fansub_field_widget_after();
}
public function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = strip_tags(fansub_get_value_by_key($new_instance, 'title'));
$instance['feedburner_name'] = fansub_get_value_by_key($new_instance, 'feedburner_name');
$instance['button_text'] = fansub_get_value_by_key($new_instance, 'button_text', fansub_get_value_by_key($this->args, 'button_text'));
$instance['placeholder'] = fansub_get_value_by_key($new_instance, 'placeholder', fansub_get_value_by_key($this->args, 'placeholder'));
$instance['description'] = fansub_get_value_by_key($new_instance, 'description', fansub_get_value_by_key($this->args, 'description'));
$instance['desc_position'] = fansub_get_value_by_key($new_instance, 'desc_position', $this->args['desc_position']);
return $instance;
}
}