addBehavior('initWidgets', ['topWriterWidget', 'init']); class topWriterWidget { public static function init($w) { #Top comments widget $w ->create( 'topcom', __('Top writer: comments'), ['topWriterWidget', 'topCom'], null, __('List users who write more comments') ) ->addTitle(__('Top comments')) ->setting( 'text', __('Text:'), '%author% (%count%)', 'text' ) ->setting( 'period', __('Period:'), 'year', 'combo', [ __('day') => 'day', __('week') => 'week', __('month') => 'month', __('year') => 'year', __('from begining') => '' ] ) ->setting( 'sort', __('Sort:'), 'desc', 'combo', [ __('Ascending') => 'asc', __('Descending') => 'desc' ] ) ->setting( 'limit', __('Limit:'), '10', 'text' ) ->setting( 'exclude', __('Exclude post writer from list'), 0, 'check' ) ->addHomeOnly() ->addContentOnly() ->addClass() ->addOffline(); #Top entries widget $w ->create( 'toppost', __('Top writer: entries'), ['topWriterWidget', 'topPost'], null, __('List users who write more posts') ) ->addTitle(__('Top entries')) ->setting( 'text', __('Text:'), '%author% (%count%)', 'text' ) ->setting( 'period', __('Period:'), 'year', 'combo', [ __('day') => 'day', __('week') => 'week', __('month') => 'month', __('year') => 'year', __('from begining') => '' ] ) ->setting( 'sort', __('Sort:'),'desc', 'combo', [ __('Ascending') => 'asc', __('Descending') => 'desc' ] ) ->setting( 'limit', __('Limit:'), '10', 'text' ) ->addHomeOnly() ->addContentOnly() ->addClass() ->addOffline(); } public static function topCom($w) { global $core; if ($w->offline) { return null; } if (($w->homeonly == 1 && !$core->url->isHome($core->url->type)) || ($w->homeonly == 2 && $core->url->isHome($core->url->type))) { return null; } $req = 'SELECT COUNT(*) AS count, comment_email ' . "FROM " . $core->prefix . "post P, " . $core->prefix . "comment C " . 'WHERE P.post_id=C.post_id ' . "AND blog_id='" . $core->con->escape($core->blog->id) . "' " . 'AND post_status=1 AND comment_status=1 ' . self::period('comment_dt', $w->period); if ($w->exclude) { $req .= 'AND comment_email NOT IN (' . ' SELECT U.user_email ' . ' FROM ' . $core->prefix . 'user U' . ' INNER JOIN ' . $core->prefix . 'post P ON P.user_id = U.user_id ' . " WHERE blog_id='" . $core->con->escape($core->blog->id) . "' " . ' GROUP BY U.user_email) '; } $req .= 'GROUP BY comment_email ' . 'ORDER BY count ' . ($w->sort == 'asc' ? 'ASC' : 'DESC') . ' ' . $core->con->limit(abs((integer) $w->limit)); $rs = $core->con->select($req); if ($rs->isEmpty()) { return null; } $content = ''; $i = 0; while($rs->fetch()) { $user = $core->con->select( "SELECT * FROM " . $core->prefix . "comment " . "WHERE comment_email='" . $rs->comment_email . "' " . 'ORDER BY comment_dt DESC' ); if (!$user->comment_author) { continue; } $i++; $rank = '' . $i . ''; if ($user->comment_site) { $author = '' . $user->comment_author . ''; } else { $author = $user->comment_author; } $author = ' '; if ($rs->count == 0) { $count = __('no comments'); } else { $count = sprintf(__('one comment', '%s comments', $rs->count), $rs->count); } $content .= sprintf( '