209 lines
9.3 KiB
PHP
209 lines
9.3 KiB
PHP
<?php
|
|
if(!function_exists('add_filter')) exit;
|
|
class FANSUB_Widget_Top_Commenter extends WP_Widget {
|
|
public $args = array();
|
|
public $admin_args;
|
|
|
|
private function get_defaults() {
|
|
$defaults = array(
|
|
'number' => 5,
|
|
'time' => 'week',
|
|
'times' => array(
|
|
'today' => __('Today', 'fansub'),
|
|
'week' => __('This week', 'fansub'),
|
|
'month' => __('This month', 'fansub'),
|
|
'year' => __('This year', 'fansub'),
|
|
'all' => __('All time', 'fansub')
|
|
),
|
|
'show_count' => true,
|
|
'link_author_name' => true,
|
|
'none_text' => __('There is no commenter in this list.', 'fansub')
|
|
);
|
|
$defaults = apply_filters('fansub_widget_top_commenter_defaults', $defaults);
|
|
$args = apply_filters('fansub_widget_top_commenter_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_top_commenter',
|
|
'name' => 'FANSUB Top Commenter',
|
|
'class' => 'fansub-top-commenter-widget',
|
|
'description' => __('Get top commenters on your site.', 'fansub'),
|
|
'width' => 400
|
|
);
|
|
$this->admin_args = apply_filters('fansub_widget_top_commenter_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) {
|
|
$number = fansub_get_value_by_key($instance, 'number', fansub_get_value_by_key($this->args, 'number'));
|
|
$time = fansub_get_value_by_key($instance, 'time', fansub_get_value_by_key($this->args, 'time'));
|
|
$exclude_users = fansub_get_value_by_key($instance, 'exclude_users');
|
|
$exclude_users = fansub_json_string_to_array($exclude_users);
|
|
$show_count = fansub_get_value_by_key($instance, 'show_count', fansub_get_value_by_key($this->args, 'show_count'));
|
|
$link_author_name = fansub_get_value_by_key($instance, 'link_author_name', fansub_get_value_by_key($this->args, 'link_author_name'));
|
|
$none_text = fansub_get_value_by_key($instance, 'none_text', fansub_get_value_by_key($this->args, 'none_text'));
|
|
|
|
fansub_widget_before($args, $instance);
|
|
$condition = '';
|
|
if(fansub_array_has_value($exclude_users)) {
|
|
$not_in = array();
|
|
foreach($exclude_users as $data) {
|
|
$uid = fansub_get_value_by_key($data, 'value');
|
|
if(fansub_id_number_valid($uid)) {
|
|
$not_in[] = $uid;
|
|
}
|
|
}
|
|
if(fansub_array_has_value($not_in)) {
|
|
$condition = 'AND user_id NOT IN (' . implode(', ', $not_in) . ')';
|
|
}
|
|
}
|
|
$commenters = fansub_get_top_commenters($number, $time, $condition);
|
|
ob_start();
|
|
if(!fansub_array_has_value($commenters)) {
|
|
echo wpautop($none_text);
|
|
} else {
|
|
?>
|
|
<ol class="list-commenters">
|
|
<?php
|
|
foreach($commenters as $commenter) {
|
|
$url = $commenter->comment_author_url;
|
|
$author = $commenter->comment_author;
|
|
$count = absint($commenter->comments_count);
|
|
$email = $commenter->comment_author_email;
|
|
$user_id = 0;
|
|
if(!empty($commenter->user_id)) {
|
|
$user_id = $commenter->user_id;
|
|
}
|
|
if((bool)$show_count) {
|
|
$author .= " ($count)";
|
|
}
|
|
if(empty($url) || 'http://' == $url || !(bool)$link_author_name) {
|
|
$url = $author;
|
|
} else {
|
|
$url = "<a href='$url' rel='external nofollow' class='url'>$author</a>";
|
|
}
|
|
?>
|
|
<li class="commenter"><?php echo $url; ?></li>
|
|
<?php
|
|
}
|
|
?>
|
|
</ol>
|
|
<?php
|
|
}
|
|
$widget_html = ob_get_clean();
|
|
$widget_html = apply_filters('fansub_widget_top_commenter_html', $widget_html, $instance, $args, $this);
|
|
echo $widget_html;
|
|
fansub_widget_after($args, $instance);
|
|
}
|
|
|
|
public function form($instance) {
|
|
$title = fansub_get_value_by_key($instance, 'title');
|
|
$number = fansub_get_value_by_key($instance, 'number', fansub_get_value_by_key($this->args, 'number'));
|
|
$time = fansub_get_value_by_key($instance, 'time', fansub_get_value_by_key($this->args, 'time'));
|
|
$exclude_users = fansub_get_value_by_key($instance, 'exclude_users');
|
|
$users = fansub_json_string_to_array($exclude_users);
|
|
$show_count = fansub_get_value_by_key($instance, 'show_count', fansub_get_value_by_key($this->args, 'show_count'));
|
|
$link_author_name = fansub_get_value_by_key($instance, 'link_author_name', fansub_get_value_by_key($this->args, 'link_author_name'));
|
|
$none_text = fansub_get_value_by_key($instance, 'none_text', fansub_get_value_by_key($this->args, 'none_text'));
|
|
|
|
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('number'),
|
|
'name' => $this->get_field_name('number'),
|
|
'value' => $number,
|
|
'label' => __('Number:', 'fansub')
|
|
);
|
|
fansub_widget_field('fansub_field_input_number', $args);
|
|
|
|
$lists = $this->args['times'];
|
|
$all_option = '';
|
|
foreach($lists as $key => $lvalue) {
|
|
$all_option .= fansub_field_get_option(array('value' => $key, 'text' => $lvalue, 'selected' => $time));
|
|
}
|
|
$args = array(
|
|
'id' => $this->get_field_id('time'),
|
|
'name' => $this->get_field_name('time'),
|
|
'all_option' => $all_option,
|
|
'value' => $time,
|
|
'label' => __('Time:', 'fansub'),
|
|
'multiple' => true
|
|
);
|
|
fansub_widget_field('fansub_field_select', $args);
|
|
|
|
$lists = get_users();
|
|
$all_option = '';
|
|
foreach($lists as $lvalue) {
|
|
$selected = '';
|
|
foreach($users as $data) {
|
|
$user_name = fansub_get_value_by_key($data, 'value');
|
|
if($lvalue->ID == $user_name) {
|
|
$selected = $user_name;
|
|
}
|
|
}
|
|
$all_option .= fansub_field_get_option(array('value' => $lvalue->ID, 'text' => $lvalue->display_name, 'selected' => $selected));
|
|
}
|
|
$args = array(
|
|
'id' => $this->get_field_id('exclude_users'),
|
|
'name' => $this->get_field_name('exclude_users'),
|
|
'all_option' => $all_option,
|
|
'value' => $exclude_users,
|
|
'label' => __('Exclude users:', 'fansub'),
|
|
'placeholder' => __('Choose user', 'fansub'),
|
|
'multiple' => true
|
|
);
|
|
fansub_widget_field('fansub_field_select_chosen', $args);
|
|
|
|
$args = array(
|
|
'id' => $this->get_field_id('show_count'),
|
|
'name' => $this->get_field_name('show_count'),
|
|
'value' => $show_count,
|
|
'label' => __('Show count', 'fansub')
|
|
);
|
|
fansub_widget_field('fansub_field_input_checkbox', $args);
|
|
|
|
$args = array(
|
|
'id' => $this->get_field_id('link_author_name'),
|
|
'name' => $this->get_field_name('link_author_name'),
|
|
'value' => $link_author_name,
|
|
'label' => __('Link author name', 'fansub')
|
|
);
|
|
fansub_widget_field('fansub_field_input_checkbox', $args);
|
|
|
|
$args = array(
|
|
'id' => $this->get_field_id('none_text'),
|
|
'name' => $this->get_field_name('none_text'),
|
|
'value' => $none_text,
|
|
'label' => __('No commenter text:', 'fansub')
|
|
);
|
|
fansub_widget_field('fansub_field_input', $args);
|
|
|
|
fansub_field_widget_after();
|
|
}
|
|
|
|
public function update($new_instance, $old_instance) {
|
|
fansub_delete_transient('fansub_top_commenters');
|
|
$instance = $old_instance;
|
|
$instance['title'] = strip_tags(fansub_get_value_by_key($new_instance, 'title'));
|
|
$instance['number'] = fansub_get_value_by_key($new_instance, 'number', fansub_get_value_by_key($this->args, 'number'));
|
|
$instance['time'] = fansub_get_value_by_key($new_instance, 'time', fansub_get_value_by_key($this->args, 'time'));
|
|
$instance['exclude_users'] = fansub_get_value_by_key($new_instance, 'exclude_users');
|
|
$instance['show_count'] = fansub_checkbox_post_data_value($new_instance, 'show_count');
|
|
$instance['link_author_name'] = fansub_checkbox_post_data_value($new_instance, 'link_author_name');
|
|
$instance['none_text'] = fansub_get_value_by_key($new_instance, 'none_text', fansub_get_value_by_key($this->args, 'none_text'));
|
|
return $instance;
|
|
}
|
|
}
|