[44] | 1 | <?php
|
---|
| 2 |
|
---|
| 3 | /*
|
---|
| 4 | Plugin Name: Popularity Contest
|
---|
| 5 | Plugin URI: http://alexking.org/projects/wordpress
|
---|
| 6 | Description: This will enable ranking of your posts by popularity; using the behavior of your visitors to determine each post's popularity. You set a value (or use the default value) for every post view, comment, etc. and the popularity of your posts is calculated based on those values. Once you have activated the plugin, you can configure the Popularity Values and View Reports. You can also use the included Widgets and Template Tags to display post popularity and lists of popular posts on your blog.
|
---|
| 7 | Version: 2.0b2
|
---|
| 8 | Author: Crowd Favorite
|
---|
| 9 | Author URI: http://crowdfavorite.com
|
---|
| 10 | */
|
---|
| 11 |
|
---|
| 12 | // Copyright (c) 2005-2009 Alex King, Crowd Favorite, Ltd. All rights reserved.
|
---|
| 13 | //
|
---|
| 14 | // Released under the GPL license
|
---|
| 15 | // http://www.opensource.org/licenses/gpl-license.php
|
---|
| 16 | //
|
---|
| 17 | // This is an add-on for WordPress
|
---|
| 18 | // http://wordpress.org/
|
---|
| 19 | //
|
---|
| 20 | // **********************************************************************
|
---|
| 21 | // This program is distributed in the hope that it will be useful, but
|
---|
| 22 | // WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 23 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
---|
| 24 | // **********************************************************************
|
---|
| 25 |
|
---|
| 26 | // Special thanks to Martijn Stegink for help with WordPress 2.3 compatibility.
|
---|
| 27 |
|
---|
| 28 | /*
|
---|
| 29 | @TODO
|
---|
| 30 | - run reports by join/order by using WP_Query?
|
---|
| 31 | - convert to 2.8 widgets
|
---|
| 32 | - display upgrade needed message on admin pages if upgrade needed
|
---|
| 33 | */
|
---|
| 34 |
|
---|
| 35 | if (!defined('AKPC_LOADED')) : // LOADED CHECK
|
---|
| 36 |
|
---|
| 37 | @define('AKPC_LOADED', true);
|
---|
| 38 |
|
---|
| 39 | /* -- INSTALLATION --------------------- */
|
---|
| 40 |
|
---|
| 41 | // To hide the popularity score on a per post/page basis, add a custom field to the post/page as follows:
|
---|
| 42 | // name: hide_popularity
|
---|
| 43 | // value: 1
|
---|
| 44 |
|
---|
| 45 |
|
---|
| 46 | // When this is set to 1, WPMU will auto-install popularity contest for each installed blog when installed in the mu-plugins folder
|
---|
| 47 |
|
---|
| 48 | @define('AKPC_MU_AUTOINSTALL', 1);
|
---|
| 49 |
|
---|
| 50 | // Change this to 1 if you want popularity contest to pull its config from this file instead of the database
|
---|
| 51 | // This option hides most of the Popularity Contest admin page
|
---|
| 52 |
|
---|
| 53 | @define('AKPC_CONFIG_FILE', 0);
|
---|
| 54 |
|
---|
| 55 | // By default the view is recorded via an Ajax call from the page. If you want Popularity Contest to do this on the
|
---|
| 56 | // back end set this to 0. Setting this to 0 will cause popularity contest results to improperly tally when caching is
|
---|
| 57 | // turned on. It is recommended to use the API.
|
---|
| 58 |
|
---|
| 59 | @define('AKPC_USE_API', 1);
|
---|
| 60 |
|
---|
| 61 |
|
---|
| 62 | // if pulling settings from this file, set weight values below
|
---|
| 63 | $akpc_settings['show_pop'] = 1; // clickthrough from feed
|
---|
| 64 | $akpc_settings['show_help'] = 1; // clickthrough from feed
|
---|
| 65 | $akpc_settings['ignore_authors'] = 1; // clickthrough from feed
|
---|
| 66 | $akpc_settings['feed_value'] = 1; // clickthrough from feed
|
---|
| 67 | $akpc_settings['home_value'] = 2; // clickthrough from home
|
---|
| 68 | $akpc_settings['archive_value'] = 4; // clickthrough from archive page
|
---|
| 69 | $akpc_settings['category_value'] = 6; // clickthrough from category page
|
---|
| 70 | $akpc_settings['single_value'] = 10; // full article page view
|
---|
| 71 | $akpc_settings['comment_value'] = 20; // comment on article
|
---|
| 72 | $akpc_settings['pingback_value'] = 50; // pingback on article
|
---|
| 73 | $akpc_settings['trackback_value'] = 80; // trackback on article
|
---|
| 74 | $akpc_settings['searcher_names'] = 'google.com yahoo.com bing.com'; // serach engine bot names, space separated
|
---|
| 75 |
|
---|
| 76 |
|
---|
| 77 | // If you would like to show lists of popular posts in the sidebar,
|
---|
| 78 | // take a look at how it is implemented in the included sidebar.php.
|
---|
| 79 |
|
---|
| 80 | /* ------------------------------------- */
|
---|
| 81 |
|
---|
| 82 | load_plugin_textdomain('popularity-contest');
|
---|
| 83 |
|
---|
| 84 | if (is_file(trailingslashit(ABSPATH.PLUGINDIR).'popularity-contest.php')) {
|
---|
| 85 | define('AKPC_FILE', trailingslashit(ABSPATH.PLUGINDIR).'popularity-contest.php');
|
---|
| 86 | }
|
---|
| 87 | else if (is_file(trailingslashit(ABSPATH.PLUGINDIR).'popularity-contest/popularity-contest.php')) {
|
---|
| 88 | define('AKPC_FILE', trailingslashit(ABSPATH.PLUGINDIR).'popularity-contest/popularity-contest.php');
|
---|
| 89 | }
|
---|
| 90 |
|
---|
| 91 | register_activation_hook(AKPC_FILE, 'akpc_install');
|
---|
| 92 |
|
---|
| 93 | function akpc_install() {
|
---|
| 94 | global $akpc;
|
---|
| 95 | if (!is_a($akpc, 'ak_popularity_contest')) {
|
---|
| 96 | $akpc = new ak_popularity_contest();
|
---|
| 97 | }
|
---|
| 98 | $akpc->install();
|
---|
| 99 | $akpc->upgrade();
|
---|
| 100 | $akpc->mine_gap_data();
|
---|
| 101 | }
|
---|
| 102 |
|
---|
| 103 | // -- MAIN FUNCTIONALITY
|
---|
| 104 |
|
---|
| 105 | class ak_popularity_contest {
|
---|
| 106 | var $feed_value;
|
---|
| 107 | var $home_value;
|
---|
| 108 | var $archive_value;
|
---|
| 109 | var $category_value;
|
---|
| 110 | var $single_value;
|
---|
| 111 | var $comment_value;
|
---|
| 112 | var $pingback_value;
|
---|
| 113 | var $trackback_value;
|
---|
| 114 | var $searcher_names;
|
---|
| 115 | var $logged;
|
---|
| 116 | var $options;
|
---|
| 117 | var $top_ranked;
|
---|
| 118 | var $current_posts;
|
---|
| 119 | var $show_pop;
|
---|
| 120 | var $show_help;
|
---|
| 121 | var $ignore_authors;
|
---|
| 122 |
|
---|
| 123 | var $report_types;
|
---|
| 124 |
|
---|
| 125 | function ak_popularity_contest() {
|
---|
| 126 | $this->options = array(
|
---|
| 127 | 'feed_value'
|
---|
| 128 | ,'home_value'
|
---|
| 129 | ,'archive_value'
|
---|
| 130 | ,'category_value'
|
---|
| 131 | ,'tag_value'
|
---|
| 132 | ,'single_value'
|
---|
| 133 | ,'searcher_value'
|
---|
| 134 | ,'comment_value'
|
---|
| 135 | ,'pingback_value'
|
---|
| 136 | ,'trackback_value'
|
---|
| 137 | ,'searcher_names'
|
---|
| 138 | ,'show_pop'
|
---|
| 139 | ,'show_help'
|
---|
| 140 | ,'ignore_authors'
|
---|
| 141 | );
|
---|
| 142 | $this->feed_value = 1;
|
---|
| 143 | $this->home_value = 2;
|
---|
| 144 | $this->archive_value = 4;
|
---|
| 145 | $this->category_value = 6;
|
---|
| 146 | $this->tag_value = 6;
|
---|
| 147 | $this->single_value = 10;
|
---|
| 148 | $this->searcher_value = 2;
|
---|
| 149 | $this->comment_value = 20;
|
---|
| 150 | $this->pingback_value = 50;
|
---|
| 151 | $this->trackback_value = 80;
|
---|
| 152 | $this->searcher_names = 'google.com yahoo.com bing.com';
|
---|
| 153 | $this->logged = 0;
|
---|
| 154 | $this->show_pop = 1;
|
---|
| 155 | $this->show_help = 1;
|
---|
| 156 | $this->ignore_authors = 1;
|
---|
| 157 | $this->top_ranked = array();
|
---|
| 158 | $this->current_posts = array();
|
---|
| 159 | }
|
---|
| 160 |
|
---|
| 161 | function get_settings() {
|
---|
| 162 | global $wpdb;
|
---|
| 163 | if (AKPC_CONFIG_FILE == 1) { // use hard coded settings
|
---|
| 164 | global $akpc_settings;
|
---|
| 165 | foreach($akpc_settings as $key => $value) {
|
---|
| 166 | if (in_array($key, $this->options)) {
|
---|
| 167 | $this->$key = $value;
|
---|
| 168 | }
|
---|
| 169 | }
|
---|
| 170 | }
|
---|
| 171 | else { // pull settings from db
|
---|
| 172 | // This checks to see if the tables are in the DB for this blog
|
---|
| 173 | $settings = $this->query_settings();
|
---|
| 174 |
|
---|
| 175 | // If the DB tables are not in place, lets check to see if we can install
|
---|
| 176 | if (!count($settings)) {
|
---|
| 177 | // This checks to see if we need to install, then checks if we can install
|
---|
| 178 | // For the can install to work in MU the AKPC_MU_AUTOINSTALL variable must be set to 1
|
---|
| 179 | if (!$this->check_install() && $this->can_autoinstall()) {
|
---|
| 180 | $this->install();
|
---|
| 181 | }
|
---|
| 182 | if (!$this->check_install()) {
|
---|
| 183 | $error = __('
|
---|
| 184 | <h2>Popularity Contest Installation Failed</h2>
|
---|
| 185 | <p>Sorry, Popularity Contest was not successfully installed. Please try again, or try one of the following options for support:</p>
|
---|
| 186 | <ul>
|
---|
| 187 | <li><a href="http://wphelpcenter.com">WordPress HelpCenter</a> (the official support provider for Popularity Contest)</li>
|
---|
| 188 | <li><a href="http://wordpress.org">WordPress Forums</a> (community support forums)</li>
|
---|
| 189 | </ul>
|
---|
| 190 | <p>If you are having trouble and need to disable Popularity Contest immediately, simply delete the popularity-contest.php file from within your wp-content/plugins directory.</p>
|
---|
| 191 | ', 'popularity-contest');
|
---|
| 192 | wp_die($error);
|
---|
| 193 | }
|
---|
| 194 | else {
|
---|
| 195 | $settings = $this->query_settings();
|
---|
| 196 | }
|
---|
| 197 | }
|
---|
| 198 | if (count($settings)) {
|
---|
| 199 | foreach ($settings as $setting) {
|
---|
| 200 | if (in_array($setting->option_name, $this->options)) {
|
---|
| 201 | $this->{$setting->option_name} = $setting->option_value;
|
---|
| 202 | }
|
---|
| 203 | }
|
---|
| 204 | }
|
---|
| 205 | }
|
---|
| 206 | return true;
|
---|
| 207 | }
|
---|
| 208 |
|
---|
| 209 | function query_settings() {
|
---|
| 210 | global $wpdb;
|
---|
| 211 | return @$wpdb->get_results("
|
---|
| 212 | SELECT *
|
---|
| 213 | FROM $wpdb->ak_popularity_options
|
---|
| 214 | ");
|
---|
| 215 | }
|
---|
| 216 |
|
---|
| 217 | /**
|
---|
| 218 | * check_install - This function checks to see if the proper tables have been added to the DB for the blog the plugin is being activated for
|
---|
| 219 | *
|
---|
| 220 | * @return void
|
---|
| 221 | */
|
---|
| 222 | function check_install() {
|
---|
| 223 | global $wpdb;
|
---|
| 224 | $result = mysql_query("SHOW TABLES LIKE '{$wpdb->prefix}ak_popularity%'", $wpdb->dbh);
|
---|
| 225 | return mysql_num_rows($result) == 2;
|
---|
| 226 | }
|
---|
| 227 |
|
---|
| 228 | /**
|
---|
| 229 | * can_autoinstall - This function checks to see whether the tables can be installed
|
---|
| 230 | *
|
---|
| 231 | * @return void - Checks to see if the blog is MU, if not returns true
|
---|
| 232 | * - Checks to see if the blog is MU, if it is also checks to see if the function can install and returns true if it can
|
---|
| 233 | * - (For the second condition to work: ie. if the plugin is installed in MU: AKPC_MU_AUTOINSTALL must be set to 1)
|
---|
| 234 | */
|
---|
| 235 | function can_autoinstall() {
|
---|
| 236 | global $wpmu_version;
|
---|
| 237 | return (is_null($wpmu_version) || (!is_null($wpmu_version) && AKPC_MU_AUTOINSTALL == 1));
|
---|
| 238 | }
|
---|
| 239 |
|
---|
| 240 | /**
|
---|
| 241 | * install - This function installs the proper tables in the DB for handling popularity contest items
|
---|
| 242 | *
|
---|
| 243 | * @return void - Returns whether the table creation was successful
|
---|
| 244 | */
|
---|
| 245 | function install() {
|
---|
| 246 | global $wpdb;
|
---|
| 247 | if ($this->check_install()) {
|
---|
| 248 | return;
|
---|
| 249 | }
|
---|
| 250 | $result = mysql_query("
|
---|
| 251 | CREATE TABLE `$wpdb->ak_popularity_options` (
|
---|
| 252 | `option_name` VARCHAR( 50 ) NOT NULL,
|
---|
| 253 | `option_value` VARCHAR( 50 ) NOT NULL
|
---|
| 254 | )
|
---|
| 255 | ", $wpdb->dbh) or die(mysql_error().' on line: '.__LINE__);
|
---|
| 256 | if (!$result) {
|
---|
| 257 | return false;
|
---|
| 258 | }
|
---|
| 259 |
|
---|
| 260 | $this->default_values();
|
---|
| 261 |
|
---|
| 262 | $result = mysql_query("
|
---|
| 263 | CREATE TABLE `$wpdb->ak_popularity` (
|
---|
| 264 | `post_id` INT( 11 ) NOT NULL ,
|
---|
| 265 | `total` INT( 11 ) NOT NULL ,
|
---|
| 266 | `feed_views` INT( 11 ) NOT NULL ,
|
---|
| 267 | `home_views` INT( 11 ) NOT NULL ,
|
---|
| 268 | `archive_views` INT( 11 ) NOT NULL ,
|
---|
| 269 | `category_views` INT( 11 ) NOT NULL ,
|
---|
| 270 | `tag_views` INT( 11 ) NOT NULL ,
|
---|
| 271 | `single_views` INT( 11 ) NOT NULL ,
|
---|
| 272 | `searcher_views` INT( 11 ) NOT NULL ,
|
---|
| 273 | `comments` INT( 11 ) NOT NULL ,
|
---|
| 274 | `pingbacks` INT( 11 ) NOT NULL ,
|
---|
| 275 | `trackbacks` INT( 11 ) NOT NULL ,
|
---|
| 276 | `last_modified` DATETIME NOT NULL ,
|
---|
| 277 | KEY `post_id` ( `post_id` )
|
---|
| 278 | )
|
---|
| 279 | ", $wpdb->dbh) or die(mysql_error().' on line: '.__LINE__);
|
---|
| 280 | if (!$result) {
|
---|
| 281 | return false;
|
---|
| 282 | }
|
---|
| 283 |
|
---|
| 284 | $this->mine_data();
|
---|
| 285 |
|
---|
| 286 | return true;
|
---|
| 287 | }
|
---|
| 288 |
|
---|
| 289 | function upgrade() {
|
---|
| 290 | $this->upgrade_20();
|
---|
| 291 | }
|
---|
| 292 |
|
---|
| 293 | function upgrade_20() {
|
---|
| 294 | global $wpdb;
|
---|
| 295 |
|
---|
| 296 | $cols = $wpdb->get_col("
|
---|
| 297 | SHOW COLUMNS FROM $wpdb->ak_popularity
|
---|
| 298 | ");
|
---|
| 299 |
|
---|
| 300 | //2.0 Schema
|
---|
| 301 | if (!in_array('tag_views', $cols)) {
|
---|
| 302 | $wpdb->query("
|
---|
| 303 | ALTER TABLE `$wpdb->ak_popularity`
|
---|
| 304 | ADD `tag_views` INT( 11 ) NOT NULL
|
---|
| 305 | AFTER `category_views`
|
---|
| 306 | ");
|
---|
| 307 | }
|
---|
| 308 | if (!in_array('searcher_views', $cols)) {
|
---|
| 309 | $wpdb->query("
|
---|
| 310 | ALTER TABLE `$wpdb->ak_popularity`
|
---|
| 311 | ADD `searcher_views` INT( 11 ) NOT NULL
|
---|
| 312 | AFTER `single_views`
|
---|
| 313 | ");
|
---|
| 314 | }
|
---|
| 315 | $temp = new ak_popularity_contest;
|
---|
| 316 | $cols = $wpdb->get_col("
|
---|
| 317 | SELECT `option_name`
|
---|
| 318 | FROM `$wpdb->ak_popularity_options`
|
---|
| 319 | ");
|
---|
| 320 | if (!in_array('searcher_names', $cols)) {
|
---|
| 321 | $wpdb->query("
|
---|
| 322 | INSERT
|
---|
| 323 | INTO `$wpdb->ak_popularity_options` (
|
---|
| 324 | `option_name`,
|
---|
| 325 | `option_value`
|
---|
| 326 | )
|
---|
| 327 | VALUES (
|
---|
| 328 | 'searcher_names',
|
---|
| 329 | '$temp->searcher_names'
|
---|
| 330 | )
|
---|
| 331 |
|
---|
| 332 | ");
|
---|
| 333 | }
|
---|
| 334 | if (!in_array('show_pop', $cols)) {
|
---|
| 335 | $wpdb->query("
|
---|
| 336 | INSERT
|
---|
| 337 | INTO `$wpdb->ak_popularity_options` (
|
---|
| 338 | `option_name`,
|
---|
| 339 | `option_value`
|
---|
| 340 | )
|
---|
| 341 | VALUES (
|
---|
| 342 | 'show_pop',
|
---|
| 343 | '$temp->show_pop'
|
---|
| 344 | )
|
---|
| 345 |
|
---|
| 346 | ");
|
---|
| 347 | }
|
---|
| 348 | if (!in_array('show_help', $cols)) {
|
---|
| 349 | $wpdb->query("
|
---|
| 350 | INSERT
|
---|
| 351 | INTO `$wpdb->ak_popularity_options` (
|
---|
| 352 | `option_name`,
|
---|
| 353 | `option_value`
|
---|
| 354 | )
|
---|
| 355 | VALUES (
|
---|
| 356 | 'show_help',
|
---|
| 357 | '$temp->show_help'
|
---|
| 358 | )
|
---|
| 359 |
|
---|
| 360 | ");
|
---|
| 361 | }
|
---|
| 362 | if (!in_array('ignore_authors', $cols)) {
|
---|
| 363 | $wpdb->query("
|
---|
| 364 | INSERT
|
---|
| 365 | INTO `$wpdb->ak_popularity_options` (
|
---|
| 366 | `option_name`,
|
---|
| 367 | `option_value`
|
---|
| 368 | )
|
---|
| 369 | VALUES (
|
---|
| 370 | 'ignore_authors',
|
---|
| 371 | '$temp->ignore_authors'
|
---|
| 372 | )
|
---|
| 373 |
|
---|
| 374 | ");
|
---|
| 375 | }
|
---|
| 376 | }
|
---|
| 377 |
|
---|
| 378 | function default_values() {
|
---|
| 379 | global $wpdb;
|
---|
| 380 | foreach ($this->options as $option) {
|
---|
| 381 | $result = $wpdb->query("
|
---|
| 382 | INSERT
|
---|
| 383 | INTO $wpdb->ak_popularity_options
|
---|
| 384 | VALUES (
|
---|
| 385 | '$option',
|
---|
| 386 | '{$this->$option}'
|
---|
| 387 | )
|
---|
| 388 | ");
|
---|
| 389 | if (!$result) {
|
---|
| 390 | return false;
|
---|
| 391 | }
|
---|
| 392 | }
|
---|
| 393 | return true;
|
---|
| 394 | }
|
---|
| 395 |
|
---|
| 396 | function update_settings() {
|
---|
| 397 | if (!current_user_can('manage_options')) { wp_die('Unauthorized.'); }
|
---|
| 398 | global $wpdb;
|
---|
| 399 | $this->upgrade();
|
---|
| 400 | foreach ($this->options as $option) {
|
---|
| 401 | if (isset($_POST[$option])) {
|
---|
| 402 | $option != 'searcher_names' ? $this->$option = intval($_POST[$option]) : $this->$option = stripslashes($_POST[$option]);
|
---|
| 403 | $wpdb->query("
|
---|
| 404 | UPDATE $wpdb->ak_popularity_options
|
---|
| 405 | SET option_value = '{$this->$option}'
|
---|
| 406 | WHERE option_name = '".$wpdb->escape($option)."'
|
---|
| 407 | ");
|
---|
| 408 | }
|
---|
| 409 | }
|
---|
| 410 | $this->recalculate_popularity();
|
---|
| 411 | $this->mine_gap_data();
|
---|
| 412 | header('Location: '.get_bloginfo('wpurl').'/wp-admin/options-general.php?page='.basename(__FILE__).'&updated=true');
|
---|
| 413 | die();
|
---|
| 414 | }
|
---|
| 415 |
|
---|
| 416 | function recalculate_popularity() {
|
---|
| 417 | global $wpdb;
|
---|
| 418 | $result = $wpdb->query("
|
---|
| 419 | UPDATE $wpdb->ak_popularity
|
---|
| 420 | SET total = (home_views * $this->home_value)
|
---|
| 421 | + (feed_views * $this->feed_value)
|
---|
| 422 | + (archive_views * $this->archive_value)
|
---|
| 423 | + (category_views * $this->category_value)
|
---|
| 424 | + (tag_views * $this->tag_value)
|
---|
| 425 | + (single_views * $this->single_value)
|
---|
| 426 | + (searcher_views * $this->searcher_value)
|
---|
| 427 | + (comments * $this->comment_value)
|
---|
| 428 | + (pingbacks * $this->pingback_value)
|
---|
| 429 | + (trackbacks * $this->trackback_value)
|
---|
| 430 | ");
|
---|
| 431 | }
|
---|
| 432 |
|
---|
| 433 | function reset_data() {
|
---|
| 434 | global $wpdb;
|
---|
| 435 | $result = $wpdb->query("
|
---|
| 436 | TRUNCATE $wpdb->ak_popularity
|
---|
| 437 | ");
|
---|
| 438 | if (!$result) {
|
---|
| 439 | return false;
|
---|
| 440 | }
|
---|
| 441 |
|
---|
| 442 | $result = $wpdb->query("
|
---|
| 443 | TRUNCATE $wpdb->ak_popularity_options
|
---|
| 444 | ");
|
---|
| 445 | if (!$result) {
|
---|
| 446 | return false;
|
---|
| 447 | }
|
---|
| 448 |
|
---|
| 449 | $this->default_values();
|
---|
| 450 | return true;
|
---|
| 451 | }
|
---|
| 452 |
|
---|
| 453 | function create_post_record($post_id = -1) {
|
---|
| 454 | global $wpdb;
|
---|
| 455 | if ($post_id == -1) {
|
---|
| 456 | global $post_id;
|
---|
| 457 | }
|
---|
| 458 | $post_id = intval($post_id);
|
---|
| 459 | $count = $wpdb->get_var("
|
---|
| 460 | SELECT COUNT(post_id)
|
---|
| 461 | FROM $wpdb->ak_popularity
|
---|
| 462 | WHERE post_id = '$post_id'
|
---|
| 463 | ");
|
---|
| 464 | if (!intval($count)) {
|
---|
| 465 | $result = $wpdb->query("
|
---|
| 466 | INSERT
|
---|
| 467 | INTO $wpdb->ak_popularity (
|
---|
| 468 | `post_id`,
|
---|
| 469 | `last_modified`
|
---|
| 470 | )
|
---|
| 471 | VALUES (
|
---|
| 472 | '$post_id',
|
---|
| 473 | '".date('Y-m-d H:i:s')."'
|
---|
| 474 | )
|
---|
| 475 | ");
|
---|
| 476 | }
|
---|
| 477 | }
|
---|
| 478 |
|
---|
| 479 | function delete_post_record($post_id = -1) {
|
---|
| 480 | global $wpdb;
|
---|
| 481 | if ($post_id == -1) {
|
---|
| 482 | global $post_id;
|
---|
| 483 | }
|
---|
| 484 | $result = $wpdb->query("
|
---|
| 485 | DELETE
|
---|
| 486 | FROM $wpdb->ak_popularity
|
---|
| 487 | WHERE post_id = '$post_id'
|
---|
| 488 | ");
|
---|
| 489 |
|
---|
| 490 | }
|
---|
| 491 |
|
---|
| 492 | function mine_data() {
|
---|
| 493 | global $wpdb;
|
---|
| 494 | $posts = $wpdb->get_results("
|
---|
| 495 | SELECT ID
|
---|
| 496 | FROM $wpdb->posts
|
---|
| 497 | WHERE post_status = 'publish'
|
---|
| 498 | ");
|
---|
| 499 | if ($posts && count($posts) > 0) {
|
---|
| 500 | foreach ($posts as $post) {
|
---|
| 501 | $this->create_post_record($post->ID);
|
---|
| 502 | $this->populate_post_data($post->ID);
|
---|
| 503 | }
|
---|
| 504 | }
|
---|
| 505 | return true;
|
---|
| 506 | }
|
---|
| 507 |
|
---|
| 508 | function mine_gap_data() {
|
---|
| 509 | global $wpdb;
|
---|
| 510 | $posts = $wpdb->get_results("
|
---|
| 511 | SELECT p.ID
|
---|
| 512 | FROM $wpdb->posts p
|
---|
| 513 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 514 | ON p.ID = pop.post_id
|
---|
| 515 | WHERE pop.post_id IS NULL
|
---|
| 516 | AND (
|
---|
| 517 | p.post_type = 'post'
|
---|
| 518 | OR p.post_type = 'page'
|
---|
| 519 | )
|
---|
| 520 | AND p.post_status = 'publish'
|
---|
| 521 | ");
|
---|
| 522 | if ($posts && count($posts) > 0) {
|
---|
| 523 | foreach ($posts as $post) {
|
---|
| 524 | $this->create_post_record($post->ID);
|
---|
| 525 | $this->populate_post_data($post->ID);
|
---|
| 526 | }
|
---|
| 527 | }
|
---|
| 528 | }
|
---|
| 529 |
|
---|
| 530 | function populate_post_data($post_id) {
|
---|
| 531 | global $wpdb;
|
---|
| 532 | // grab existing comments
|
---|
| 533 | $count = intval($wpdb->get_var("
|
---|
| 534 | SELECT COUNT(*)
|
---|
| 535 | FROM $wpdb->comments
|
---|
| 536 | WHERE comment_post_ID = '$post_id'
|
---|
| 537 | AND comment_type = ''
|
---|
| 538 | AND comment_approved = '1'
|
---|
| 539 | "));
|
---|
| 540 | if ($count > 0) {
|
---|
| 541 | $result = $wpdb->query("
|
---|
| 542 | UPDATE $wpdb->ak_popularity
|
---|
| 543 | SET comments = comments + $count
|
---|
| 544 | , total = total + ".($this->comment_value * $count)."
|
---|
| 545 | WHERE post_id = '$post_id'
|
---|
| 546 | ");
|
---|
| 547 | if (!$result) {
|
---|
| 548 | return false;
|
---|
| 549 | }
|
---|
| 550 | }
|
---|
| 551 |
|
---|
| 552 | // grab existing trackbacks
|
---|
| 553 | $count = intval($wpdb->get_var("
|
---|
| 554 | SELECT COUNT(*)
|
---|
| 555 | FROM $wpdb->comments
|
---|
| 556 | WHERE comment_post_ID = '$post_id'
|
---|
| 557 | AND comment_type = 'trackback'
|
---|
| 558 | AND comment_approved = '1'
|
---|
| 559 | "));
|
---|
| 560 | if ($count > 0) {
|
---|
| 561 | $result = $wpdb->query("
|
---|
| 562 | UPDATE $wpdb->ak_popularity
|
---|
| 563 | SET trackbacks = trackbacks + $count
|
---|
| 564 | , total = total + ".($this->trackback_value * $count)."
|
---|
| 565 | WHERE post_id = '$post_id'
|
---|
| 566 | ");
|
---|
| 567 | if (!$result) {
|
---|
| 568 | return false;
|
---|
| 569 | }
|
---|
| 570 | }
|
---|
| 571 |
|
---|
| 572 | // grab existing pingbacks
|
---|
| 573 | $count = intval($wpdb->get_var("
|
---|
| 574 | SELECT COUNT(*)
|
---|
| 575 | FROM $wpdb->comments
|
---|
| 576 | WHERE comment_post_ID = '$post_id'
|
---|
| 577 | AND comment_type = 'pingback'
|
---|
| 578 | AND comment_approved = '1'
|
---|
| 579 | "));
|
---|
| 580 | if ($count > 0) {
|
---|
| 581 | $result = $wpdb->query("
|
---|
| 582 | UPDATE $wpdb->ak_popularity
|
---|
| 583 | SET pingbacks = pingbacks + $count
|
---|
| 584 | , total = total + ".($this->pingback_value * $count)."
|
---|
| 585 | WHERE post_id = '$post_id'
|
---|
| 586 | ");
|
---|
| 587 | if (!$result) {
|
---|
| 588 | return false;
|
---|
| 589 | }
|
---|
| 590 | }
|
---|
| 591 | }
|
---|
| 592 |
|
---|
| 593 | function record_view($api = false, $ids = false, $type = false) {
|
---|
| 594 | if ($this->logged > 0 || ($this->ignore_authors && current_user_can('publish_posts'))) {
|
---|
| 595 | return true;
|
---|
| 596 | }
|
---|
| 597 |
|
---|
| 598 | global $wpdb;
|
---|
| 599 |
|
---|
| 600 | if ($api == false) {
|
---|
| 601 | global $posts;
|
---|
| 602 |
|
---|
| 603 | if (!isset($posts) || !is_array($posts) || count($posts) == 0 || is_admin()) {
|
---|
| 604 | return;
|
---|
| 605 | }
|
---|
| 606 |
|
---|
| 607 | $ids = array();
|
---|
| 608 | $ak_posts = $posts;
|
---|
| 609 | foreach ($ak_posts as $post) {
|
---|
| 610 | $ids[] = $post->ID;
|
---|
| 611 | }
|
---|
| 612 | }
|
---|
| 613 | if (!$ids || !count($ids)) {
|
---|
| 614 | return;
|
---|
| 615 | }
|
---|
| 616 | if (($api && $type == 'feed') || is_feed()) {
|
---|
| 617 | $result = $wpdb->query("
|
---|
| 618 | UPDATE $wpdb->ak_popularity
|
---|
| 619 | SET feed_views = feed_views + 1
|
---|
| 620 | , total = total + $this->feed_value
|
---|
| 621 | WHERE post_id IN (".implode(',', $ids).")
|
---|
| 622 | ");
|
---|
| 623 | if (!$result) {
|
---|
| 624 | return false;
|
---|
| 625 | }
|
---|
| 626 | }
|
---|
| 627 | else if (($api && $type == 'archive') || (is_archive() && !is_category())) {
|
---|
| 628 | $result = $wpdb->query("
|
---|
| 629 | UPDATE $wpdb->ak_popularity
|
---|
| 630 | SET archive_views = archive_views + 1
|
---|
| 631 | , total = total + $this->archive_value
|
---|
| 632 | WHERE post_id IN (".implode(',', $ids).")
|
---|
| 633 | ");
|
---|
| 634 | if (!$result) {
|
---|
| 635 | return false;
|
---|
| 636 | }
|
---|
| 637 | }
|
---|
| 638 | else if (($api && $type == 'category') || is_category()) {
|
---|
| 639 | $result = $wpdb->query("
|
---|
| 640 | UPDATE $wpdb->ak_popularity
|
---|
| 641 | SET category_views = category_views + 1
|
---|
| 642 | , total = total + $this->category_value
|
---|
| 643 | WHERE post_id IN (".implode(',', $ids).")
|
---|
| 644 | ");
|
---|
| 645 | if (!$result) {
|
---|
| 646 | return false;
|
---|
| 647 | }
|
---|
| 648 | }
|
---|
| 649 | else if (($api && $type == 'tag') || is_tag()) {
|
---|
| 650 | $result = $wpdb->query("
|
---|
| 651 | UPDATE $wpdb->ak_popularity
|
---|
| 652 | SET tag_views = tag_views + 1
|
---|
| 653 | , total = total + $this->tag_views
|
---|
| 654 | WHERE post_id IN (".implode(',', $ids).")
|
---|
| 655 | ");
|
---|
| 656 | if (!$result) {
|
---|
| 657 | return false;
|
---|
| 658 | }
|
---|
| 659 | }
|
---|
| 660 | else if (($api && in_array($type, array('single', 'page'))) || is_single() || is_singular() || is_page()) {
|
---|
| 661 | if (($api && $type == 'searcher') || akpc_is_searcher()) {
|
---|
| 662 | $result = $wpdb->query("
|
---|
| 663 | UPDATE $wpdb->ak_popularity
|
---|
| 664 | SET searcher_views = searcher_views + 1
|
---|
| 665 | , total = total + $this->searcher_value
|
---|
| 666 | WHERE post_id = '".$ids[0]."'
|
---|
| 667 | ");
|
---|
| 668 | if (!$result) {
|
---|
| 669 | return false;
|
---|
| 670 | }
|
---|
| 671 | }
|
---|
| 672 | $result = $wpdb->query("
|
---|
| 673 | UPDATE $wpdb->ak_popularity
|
---|
| 674 | SET single_views = single_views + 1
|
---|
| 675 | , total = total + $this->single_value
|
---|
| 676 | WHERE post_id = '".$ids[0]."'
|
---|
| 677 | ");
|
---|
| 678 | if (!$result) {
|
---|
| 679 | return false;
|
---|
| 680 | }
|
---|
| 681 | }
|
---|
| 682 | else {
|
---|
| 683 | $result = $wpdb->query("
|
---|
| 684 | UPDATE $wpdb->ak_popularity
|
---|
| 685 | SET home_views = home_views + 1
|
---|
| 686 | , total = total + $this->home_value
|
---|
| 687 | WHERE post_id IN (".implode(',', $ids).")
|
---|
| 688 | ");
|
---|
| 689 | if (!$result) {
|
---|
| 690 | return false;
|
---|
| 691 | }
|
---|
| 692 | }
|
---|
| 693 | $this->logged++;
|
---|
| 694 | return true;
|
---|
| 695 | }
|
---|
| 696 |
|
---|
| 697 | function record_feedback($type, $action = '+', $comment_id = null) {
|
---|
| 698 | global $wpdb, $comment_post_ID;
|
---|
| 699 | if ($comment_id) {
|
---|
| 700 | $comment_post_ID = $comment_id;
|
---|
| 701 | }
|
---|
| 702 | switch ($type) {
|
---|
| 703 | case 'trackback':
|
---|
| 704 | $result = $wpdb->query("
|
---|
| 705 | UPDATE $wpdb->ak_popularity
|
---|
| 706 | SET trackbacks = trackbacks $action 1
|
---|
| 707 | , total = total $action $this->trackback_value
|
---|
| 708 | WHERE post_id = '$comment_post_ID'
|
---|
| 709 | ");
|
---|
| 710 | if (!$result) {
|
---|
| 711 | return false;
|
---|
| 712 | }
|
---|
| 713 | break;
|
---|
| 714 | case 'pingback':
|
---|
| 715 | $result = $wpdb->query("
|
---|
| 716 | UPDATE $wpdb->ak_popularity
|
---|
| 717 | SET pingbacks = pingbacks $action 1
|
---|
| 718 | , total = total $action $this->pingback_value
|
---|
| 719 | WHERE post_id = '$comment_post_ID'
|
---|
| 720 | ");
|
---|
| 721 | if (!$result) {
|
---|
| 722 | return false;
|
---|
| 723 | }
|
---|
| 724 | break;
|
---|
| 725 | default:
|
---|
| 726 | $result = $wpdb->query("
|
---|
| 727 | UPDATE $wpdb->ak_popularity
|
---|
| 728 | SET comments = comments $action 1
|
---|
| 729 | , total = total $action $this->comment_value
|
---|
| 730 | WHERE post_id = '$comment_post_ID'
|
---|
| 731 | ");
|
---|
| 732 | if (!$result) {
|
---|
| 733 | return false;
|
---|
| 734 | }
|
---|
| 735 | break;
|
---|
| 736 | }
|
---|
| 737 | return true;
|
---|
| 738 | }
|
---|
| 739 |
|
---|
| 740 | function edit_feedback($comment_id, $action, $status = null) {
|
---|
| 741 | $comment = get_comment($comment_id);
|
---|
| 742 | switch ($action) {
|
---|
| 743 | case 'delete':
|
---|
| 744 | $this->record_feedback($comment->comment_type, '-', $comment_id);
|
---|
| 745 | break;
|
---|
| 746 | case 'status':
|
---|
| 747 | if ($status == 'spam') {
|
---|
| 748 | $this->record_feedback($comment->comment_type, '-', $comment_id);
|
---|
| 749 | return;
|
---|
| 750 | }
|
---|
| 751 | break;
|
---|
| 752 | }
|
---|
| 753 | }
|
---|
| 754 |
|
---|
| 755 | function recount_feedback() {
|
---|
| 756 | global $wpdb;
|
---|
| 757 | $post_ids = $wpdb->get_results("
|
---|
| 758 | SELECT ID
|
---|
| 759 | FROM $wpdb->posts
|
---|
| 760 | WHERE post_status = 'publish'
|
---|
| 761 | OR post_status = 'static'
|
---|
| 762 | ");
|
---|
| 763 |
|
---|
| 764 | if (count($post_ids)) {
|
---|
| 765 | $result = $wpdb->query("
|
---|
| 766 | UPDATE $wpdb->ak_popularity
|
---|
| 767 | SET comments = 0
|
---|
| 768 | , trackbacks = 0
|
---|
| 769 | , pingbacks = 0
|
---|
| 770 | ");
|
---|
| 771 | foreach ($post_ids as $post_id) {
|
---|
| 772 | $this->populate_post_data($post_id);
|
---|
| 773 | }
|
---|
| 774 | }
|
---|
| 775 | $this->recalculate_popularity();
|
---|
| 776 |
|
---|
| 777 | header('Location: '.get_bloginfo('wpurl').'/wp-admin/options-general.php?page='.basename(__FILE__).'&updated=true');
|
---|
| 778 | die();
|
---|
| 779 | }
|
---|
| 780 |
|
---|
| 781 | function options_form() {
|
---|
| 782 | if (!AKPC_CONFIG_FILE) { // don't show options update functions if we're running from a config file
|
---|
| 783 | $temp = new ak_popularity_contest;
|
---|
| 784 | print('<div class="wrap">');
|
---|
| 785 | $yes_no = array(
|
---|
| 786 | 'show_pop',
|
---|
| 787 | 'show_help',
|
---|
| 788 | 'ignore_authors',
|
---|
| 789 | );
|
---|
| 790 | foreach ($yes_no as $key) {
|
---|
| 791 | $var = $key.'_options';
|
---|
| 792 | if ($this->$key == '0') {
|
---|
| 793 | $$var = '
|
---|
| 794 | <option value="1">'.__('Yes', 'popularity-contest').'</option>
|
---|
| 795 | <option value="0" selected="selected">'.__('No', 'popularity-contest').'</option>
|
---|
| 796 | ';
|
---|
| 797 | }
|
---|
| 798 | else {
|
---|
| 799 | $$var = '
|
---|
| 800 | <option value="1" selected="selected">'.__('Yes', 'popularity-contest').'</option>
|
---|
| 801 | <option value="0">'.__('No', 'popularity-contest').'</option>
|
---|
| 802 | ';
|
---|
| 803 | }
|
---|
| 804 | }
|
---|
| 805 |
|
---|
| 806 | print('
|
---|
| 807 | <h2>'.__('Popularity Contest Options', 'popularity-contest').'</h2>
|
---|
| 808 | <form name="ak_popularity" action="'.get_bloginfo('wpurl').'/wp-admin/options-general.php" method="post">
|
---|
| 809 | <fieldset class="options">
|
---|
| 810 | <h3>'.__('Settings', 'popularity-contest').'</h3>
|
---|
| 811 | <p>
|
---|
| 812 | <label for="akpc_ignore_authors">'.__('Ignore views by site authors:', 'popularity-contest').'</label>
|
---|
| 813 | <select name="ignore_authors" id="akpc_ignore_authors">
|
---|
| 814 | '.$ignore_authors_options.'
|
---|
| 815 | </select>
|
---|
| 816 | </p>
|
---|
| 817 | <p>
|
---|
| 818 | <label for="akpc_show_pop">'.__('Show popularity rank for posts:', 'popularity-contest').'</label>
|
---|
| 819 | <select name="show_pop" id="akpc_show_pop">
|
---|
| 820 | '.$show_pop_options.'
|
---|
| 821 | </select>
|
---|
| 822 | </p>
|
---|
| 823 | <p>
|
---|
| 824 | <label for="akpc_show_help">'.__('Show the [?] help link:', 'popularity-contest').'</label>
|
---|
| 825 | <select name="show_help" id="akpc_show_help">
|
---|
| 826 | '.$show_help_options.'
|
---|
| 827 | </select>
|
---|
| 828 | </p>
|
---|
| 829 | <p>
|
---|
| 830 | <label>'.__('Search Engine Domains (space separated):', 'popularity-contest').'</label><br/>
|
---|
| 831 | <textarea name="searcher_names" id="searcher_names" rows="2" cols="50">'.htmlspecialchars($this->searcher_names).'</textarea>
|
---|
| 832 | </p>
|
---|
| 833 | </fieldset>
|
---|
| 834 | <fieldset class="options">
|
---|
| 835 | <h3>'.__('Popularity Values', 'popularity-contest').'</h3>
|
---|
| 836 | <p>'.__('Adjust the values below as you see fit. When you save the new options the <a href="index.php?page=popularity-contest.php"><strong>popularity rankings</strong></a> for your posts will be automatically updated to reflect the new values you have chosen.', 'popularity-contest').'</p>
|
---|
| 837 | <table width="100%" cellspacing="2" cellpadding="5" class="editform" id="akpc_options">
|
---|
| 838 | <tr valign="top">
|
---|
| 839 | <th width="33%" scope="row"><label for="single_value">'.__('Permalink Views:', 'popularity-contest').'</label></th>
|
---|
| 840 | <td><input type="text" class="number" name="single_value" id="single_value" value="'.$this->single_value.'" /> '.__("(default: $temp->single_value)", 'popularity-contest').'</td>
|
---|
| 841 | </tr>
|
---|
| 842 | <tr valign="top">
|
---|
| 843 | <th width="33%" scope="row"><label for="searcher_value">'.__('Permalink Views from Search Engines:', 'popularity-contest').'</label></th>
|
---|
| 844 | <td><input type="text" class="number" name="searcher_value" id="searcher_value" value="'.$this->searcher_value.'" /> '.__("(default: $temp->searcher_value)", 'popularity-contest').'</td>
|
---|
| 845 | </tr>
|
---|
| 846 | <tr valign="top">
|
---|
| 847 | <th width="33%" scope="row"><label for="home_value">'.__('Home Views:', 'popularity-contest').'</label></th>
|
---|
| 848 | <td><input type="text" class="number" name="home_value" id="home_value" value="'.$this->home_value.'" /> '.__("(default: $temp->home_value)", 'popularity-contest').'</td>
|
---|
| 849 | </tr>
|
---|
| 850 | <tr valign="top">
|
---|
| 851 | <th width="33%" scope="row"><label for="archive_value">'.__('Archive Views:', 'popularity-contest').'</label></th>
|
---|
| 852 | <td><input type="text" class="number" name="archive_value" id="archive_value" value="'.$this->archive_value.'" /> '.__("(default: $temp->archive_value)", 'popularity-contest').'</td>
|
---|
| 853 | </tr>
|
---|
| 854 | <tr valign="top">
|
---|
| 855 | <th width="33%" scope="row"><label for="category_value">'.__('Category Views:', 'popularity-contest').'</label></th>
|
---|
| 856 | <td><input type="text" class="number" name="category_value" id="category_value" value="'.$this->category_value.'" /> '.__("(default: $temp->category_value)", 'popularity-contest').'</td>
|
---|
| 857 | </tr>
|
---|
| 858 | <tr valign="top">
|
---|
| 859 | <th width="33%" scope="row"><label for="tag_value">'.__('Tag Views:', 'popularity-contest').'</label></th>
|
---|
| 860 | <td><input type="text" class="number" name="tag_value" id="tag_value" value="'.$this->tag_value.'" /> '.__("(default: $temp->tag_value)", 'popularity-contest').'</td>
|
---|
| 861 | </tr>
|
---|
| 862 | <tr valign="top">
|
---|
| 863 | <th width="33%" scope="row"><label for="feed_value">'.__('Feed Views (full content only):', 'popularity-contest').'</label></th>
|
---|
| 864 | <td><input type="text" class="number" name="feed_value" id="feed_value" value="'.$this->feed_value.'" /> '.__("(default: $temp->feed_value)", 'popularity-contest').'</td>
|
---|
| 865 | </tr>
|
---|
| 866 | <tr valign="top">
|
---|
| 867 | <th width="33%" scope="row"><label for="comment_value">'.__('Comments:', 'popularity-contest').'</label></th>
|
---|
| 868 | <td><input type="text" class="number" name="comment_value" id="comment_value" value="'.$this->comment_value.'" /> '.__("(default: $temp->comment_value)", 'popularity-contest').'</td>
|
---|
| 869 | </tr>
|
---|
| 870 | <tr valign="top">
|
---|
| 871 | <th width="33%" scope="row"><label for="pingback_value">'.__('Pingbacks:', 'popularity-contest').'</label></th>
|
---|
| 872 | <td><input type="text" class="number" name="pingback_value" id="pingback_value" value="'.$this->pingback_value.'" /> '.__("(default: $temp->pingback_value)", 'popularity-contest').'</td>
|
---|
| 873 | </tr>
|
---|
| 874 | <tr valign="top">
|
---|
| 875 | <th width="33%" scope="row"><label for="trackback_value">'.__('Trackbacks:', 'popularity-contest').'</label></th>
|
---|
| 876 | <td><input type="text" class="number" name="trackback_value" id="trackback_value" value="'.$this->trackback_value.'" /> '.__("(default: $temp->trackback_value)", 'popularity-contest').'</td>
|
---|
| 877 | </tr>
|
---|
| 878 | </table>
|
---|
| 879 | <h3>'.__('Example', 'popularity-contest').'</h3>
|
---|
| 880 | <ul>
|
---|
| 881 | <li>'.__('Post #1 receives 11 Home Page Views (11 * 2 = 22), 6 Permalink Views (6 * 10 = 60) and 3 Comments (3 * 20 = 60) for a total value of: <strong>142</strong>', 'popularity-contest').'</li>
|
---|
| 882 | <li>'.__('Post #2 receives 7 Home Page Views (7 * 2 = 14), 10 Permalink Views (10 * 10 = 100), 7 Comments (7 * 20 = 140) and 3 Trackbacks (3 * 80 = 240) for a total value of: <strong>494</strong>', 'popularity-contest').'</li>
|
---|
| 883 | </ul>
|
---|
| 884 | <hr style="margin: 20px 40px; border: 0; border-top: 1px solid #ccc;" />
|
---|
| 885 | <input type="hidden" name="ak_action" value="update_popularity_values" />
|
---|
| 886 | </fieldset>
|
---|
| 887 | <p class="submit">
|
---|
| 888 | <input type="submit" name="submit" value="'.__('Save Popularity Contest Options', 'popularity-contest').'" class="button-primary" />
|
---|
| 889 | <input type="button" name="recount" value="'.__('Reset Comments/Trackback/Pingback Counts', 'popularity-contest').'" onclick="location.href=\''.get_bloginfo('wpurl').'/wp-admin/options-general.php?ak_action=recount_feedback\';" />
|
---|
| 890 | </p>
|
---|
| 891 | </form>
|
---|
| 892 | ');
|
---|
| 893 | }
|
---|
| 894 | print('
|
---|
| 895 | <div id="akpc_template_tags">
|
---|
| 896 | <h2>'.__('Popularity Contest Template Tags', 'popularity-contest').'</h2>
|
---|
| 897 | <dl>
|
---|
| 898 | <dt><code>akpc_the_popularity()</code></dt>
|
---|
| 899 | <dd>
|
---|
| 900 | <p>'.__('Put this tag within <a href="http://codex.wordpress.org/The_Loop">The Loop</a> to show the popularity of the post being shown. The popularity is shown as a percentage of your most popular post. For example, if the popularity total for Post #1 is 500 and your popular post has a total of 1000, this tag will show a value of <strong>50%</strong>.', 'popularity-contest').'</p>
|
---|
| 901 | <p>Example:</p>
|
---|
| 902 | <ul>
|
---|
| 903 | <li><code><?php if (function_exists(\'akpc_the_popularity\')) { akpc_the_popularity(); } ?></code></li>
|
---|
| 904 | </ul>
|
---|
| 905 | </dd>
|
---|
| 906 | <dt><code>akpc_most_popular($limit = 10, $before = <li>, $after = </li>)</code></dt>
|
---|
| 907 | <dd>
|
---|
| 908 | <p>'.__('Put this tag outside of <a href="http://codex.wordpress.org/The_Loop">The Loop</a> (perhaps in your sidebar?) to show a list (like the archives/categories/links list) of your most popular posts. All arguments are optional, the defaults are included in the example above.', 'popularity-contest').'</p>
|
---|
| 909 | <p>Examples:</p>
|
---|
| 910 | <ul>
|
---|
| 911 | <li><code><?php if (function_exists(\'akpc_most_popular\')) { akpc_most_popular(); } ?></code></li>
|
---|
| 912 | <li><code>
|
---|
| 913 | <?php if (function_exists(\'akpc_most_popular\')) { ?><br />
|
---|
| 914 | <li><h2>Most Popular Posts</h2><br />
|
---|
| 915 | <ul><br />
|
---|
| 916 | <?php akpc_most_popular(); ?><br />
|
---|
| 917 | </ul><br />
|
---|
| 918 | </li><br />
|
---|
| 919 | <?php } ?>
|
---|
| 920 | </code></li>
|
---|
| 921 | </ul>
|
---|
| 922 | </dd>
|
---|
| 923 | <dt><code>akpc_most_popular_in_cat($limit = 10, $before = <li>, $after = </li>, $cat_ID = current category)</code></dt>
|
---|
| 924 | <dd>
|
---|
| 925 | <p>'.__('Put this tag outside of <a href="http://codex.wordpress.org/The_Loop">The Loop</a> (perhaps in your sidebar?) to show a list of the most popular posts in a specific category. You may want to use this on category archive pages. All arguments are', 'popularity-contest').'</p>
|
---|
| 926 | <p>Examples:</p>
|
---|
| 927 | <ul>
|
---|
| 928 | <li><code><?php if (function_exists(\'akpc_most_popular_in_cat\')) { akpc_most_popular_in_cat(); } ?></code></li>
|
---|
| 929 | <li><code><php if (is_category() && function_exists(\'akpc_most_popular_in_cat\')) { akpc_most_popular_in_cat(); } ?></code></li>
|
---|
| 930 | <li><code>
|
---|
| 931 | <?php if (is_category() && function_exists(\'akpc_most_popular_in_cat\')) { ?><br />
|
---|
| 932 | <li><h2>Most Popular in \'<?php single_cat_title(); ?>\'</h2><br />
|
---|
| 933 | <ul><br />
|
---|
| 934 | <?php akpc_most_popular_in_cat(); ?><br />
|
---|
| 935 | </ul><br />
|
---|
| 936 | </li><br />
|
---|
| 937 | <?php } ?>
|
---|
| 938 | </code></li>
|
---|
| 939 | </ul>
|
---|
| 940 | </dd>
|
---|
| 941 | <dt><code>akpc_most_popular_in_month($limit, $before, $after, $m = YYYYMM)</code></dt>
|
---|
| 942 | <dd>
|
---|
| 943 | <p>'.__('Put this tag outside of <a href="http://codex.wordpress.org/The_Loop">The Loop</a> (perhaps in your sidebar?) to show a list of the most popular posts in a specific month. You may want to use this on monthly archive pages.', 'popularity-contest').'</p>
|
---|
| 944 | <p>Examples:</p>
|
---|
| 945 | <ul>
|
---|
| 946 | <li><code><?php if (function_exists(\'akpc_most_popular_in_month\')) { akpc_most_popular_in_month(); } ?></code></li>
|
---|
| 947 | <li><code><php if (is_archive() && is_month() && function_exists(\'akpc_most_popular_in_month\')) { akpc_most_popular_in_month(); } ?></code></li>
|
---|
| 948 | <li><code>
|
---|
| 949 | <?php if (is_archive() && is_month() && function_exists(\'akpc_most_popular_in_month\')) { ?><br />
|
---|
| 950 | <li><h2>Most Popular in <?php the_time(\'F, Y\'); ?></h2><br />
|
---|
| 951 | <ul><br />
|
---|
| 952 | <?php akpc_most_popular_in_month(); ?><br />
|
---|
| 953 | </ul><br />
|
---|
| 954 | </li><br />
|
---|
| 955 | <?php } ?>
|
---|
| 956 | </code></li>
|
---|
| 957 | </ul>
|
---|
| 958 | </dd>
|
---|
| 959 | <dt><code>akpc_most_popular_in_last_days($limit, $before, $after, $days = 45)</code></dt>
|
---|
| 960 | <dd>
|
---|
| 961 | <p>'.__('Put this tag outside of <a href="http://codex.wordpress.org/The_Loop">The Loop</a> (perhaps in your sidebar?) to show a list of the most popular posts in the last (your chosen number, default = 45) days.', 'popularity-contest').'</p>
|
---|
| 962 | <p>Examples:</p>
|
---|
| 963 | <ul>
|
---|
| 964 |
|
---|
| 965 | <li><code><?php if (function_exists(\'akpc_most_popular_in_last_days\')) { akpc_most_popular_in_last_days(); } ?></code></li>
|
---|
| 966 | <li><code>
|
---|
| 967 | <?php if (function_exists(\'akpc_most_popular_in_last_days\')) { ?><br />
|
---|
| 968 | <li><h2>Recent Popular Posts</h2><br />
|
---|
| 969 | <ul><br />
|
---|
| 970 | <?php akpc_most_popular_in_last_days(); ?><br />
|
---|
| 971 | </ul><br />
|
---|
| 972 | </li><br />
|
---|
| 973 | <?php } ?>
|
---|
| 974 | </code></li>
|
---|
| 975 | </ul>
|
---|
| 976 | </dd>
|
---|
| 977 | </dl>
|
---|
| 978 | </div>
|
---|
| 979 | </div>
|
---|
| 980 | ');
|
---|
| 981 | }
|
---|
| 982 |
|
---|
| 983 | function get_popular_posts($type = 'popular', $limit, $exclude_pages = 'yes', $custom = array()) {
|
---|
| 984 | global $wpdb;
|
---|
| 985 | $items = array();
|
---|
| 986 | switch($type) {
|
---|
| 987 | case 'category':
|
---|
| 988 | $temp = "
|
---|
| 989 | SELECT p.ID AS ID, p.post_title AS post_title, pop.total AS total
|
---|
| 990 | FROM $wpdb->posts p
|
---|
| 991 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 992 | ON p.ID = pop.post_id
|
---|
| 993 | LEFT JOIN $wpdb->term_relationships tr
|
---|
| 994 | ON p.ID = tr.object_id
|
---|
| 995 | LEFT JOIN $wpdb->term_taxonomy tt
|
---|
| 996 | ON tt.term_taxonomy_id = tr.term_taxonomy_id
|
---|
| 997 | WHERE tt.term_id = ".$custom['cat_ID']."
|
---|
| 998 | AND p.post_status = 'publish'
|
---|
| 999 | ";
|
---|
| 1000 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1001 | $temp .= "
|
---|
| 1002 | ORDER BY pop.total DESC
|
---|
| 1003 | LIMIT $limit
|
---|
| 1004 | ";
|
---|
| 1005 | $items = $wpdb->get_results($temp);
|
---|
| 1006 | break;
|
---|
| 1007 | case 'tag':
|
---|
| 1008 | $temp = "
|
---|
| 1009 | SELECT p.ID AS ID, p.post_title AS post_title, pop.total AS total
|
---|
| 1010 | FROM $wpdb->posts p
|
---|
| 1011 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1012 | ON p.ID = pop.post_id
|
---|
| 1013 | LEFT JOIN $wpdb->term_relationships tr
|
---|
| 1014 | ON p.ID = tr.object_id
|
---|
| 1015 | LEFT JOIN $wpdb->term_taxonomy tt
|
---|
| 1016 | ON tt.term_taxonomy_id = tr.term_taxonomy_id
|
---|
| 1017 | WHERE tt.term_id = ".$custom['term_id']."
|
---|
| 1018 | AND p.post_status = 'publish'
|
---|
| 1019 | ";
|
---|
| 1020 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1021 | $temp .= "
|
---|
| 1022 | ORDER BY pop.total DESC
|
---|
| 1023 | LIMIT $limit
|
---|
| 1024 | ";
|
---|
| 1025 | $items = $wpdb->get_results($temp);
|
---|
| 1026 | break;
|
---|
| 1027 | case 'category_popularity':
|
---|
| 1028 | $temp = "
|
---|
| 1029 | SELECT DISTINCT name, AVG(pop.total) AS avg
|
---|
| 1030 | FROM $wpdb->posts p
|
---|
| 1031 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1032 | ON p.ID = pop.post_id
|
---|
| 1033 | LEFT JOIN $wpdb->term_relationships tr
|
---|
| 1034 | ON p.ID = tr.object_id
|
---|
| 1035 | LEFT JOIN $wpdb->term_taxonomy tt
|
---|
| 1036 | ON tr.term_taxonomy_id = tt.term_taxonomy_id
|
---|
| 1037 | LEFT JOIN $wpdb->terms t
|
---|
| 1038 | ON tt.term_id = t.term_id
|
---|
| 1039 | WHERE tt.taxonomy = 'category'
|
---|
| 1040 | ";
|
---|
| 1041 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1042 | $temp .= "
|
---|
| 1043 | GROUP BY name
|
---|
| 1044 | ORDER BY avg DESC
|
---|
| 1045 | LIMIT 50
|
---|
| 1046 | ";
|
---|
| 1047 | $items = $wpdb->get_results($temp);
|
---|
| 1048 | break;
|
---|
| 1049 | case 'tag_popularity':
|
---|
| 1050 | $temp = "
|
---|
| 1051 | SELECT DISTINCT name, AVG(pop.total) AS avg
|
---|
| 1052 | FROM $wpdb->posts p
|
---|
| 1053 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1054 | ON p.ID = pop.post_id
|
---|
| 1055 | LEFT JOIN $wpdb->term_relationships tr
|
---|
| 1056 | ON p.ID = tr.object_id
|
---|
| 1057 | LEFT JOIN $wpdb->term_taxonomy tt
|
---|
| 1058 | ON tr.term_taxonomy_id = tt.term_taxonomy_id
|
---|
| 1059 | LEFT JOIN $wpdb->terms t
|
---|
| 1060 | ON tt.term_id = t.term_id
|
---|
| 1061 | WHERE tt.taxonomy = 'post_tag'
|
---|
| 1062 | ";
|
---|
| 1063 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1064 | $temp .= "
|
---|
| 1065 | GROUP BY name
|
---|
| 1066 | ORDER BY avg DESC
|
---|
| 1067 | LIMIT 50
|
---|
| 1068 | ";
|
---|
| 1069 | $items = $wpdb->get_results($temp);
|
---|
| 1070 | break;
|
---|
| 1071 | case 'year':
|
---|
| 1072 | $temp = "
|
---|
| 1073 | SELECT MONTH(p.post_date) AS month, AVG(pop.total) AS avg
|
---|
| 1074 | FROM $wpdb->posts p
|
---|
| 1075 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1076 | ON p.ID = pop.post_id
|
---|
| 1077 | WHERE YEAR(p.post_date) = '".$custom['y']."'
|
---|
| 1078 | AND p.post_status = 'publish'
|
---|
| 1079 | ";
|
---|
| 1080 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1081 | $temp .= "
|
---|
| 1082 | GROUP BY month
|
---|
| 1083 | ORDER BY avg DESC
|
---|
| 1084 | ";
|
---|
| 1085 | $items = $wpdb->get_results($temp);
|
---|
| 1086 | break;
|
---|
| 1087 | case 'views_wo_feedback':
|
---|
| 1088 | $temp = "
|
---|
| 1089 | SELECT p.ID AS ID, p.post_title AS post_title, pop.total AS total
|
---|
| 1090 | FROM $wpdb->posts p
|
---|
| 1091 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1092 | ON p.ID = pop.post_id
|
---|
| 1093 | WHERE pop.comments = 0
|
---|
| 1094 | AND pop.pingbacks = 0
|
---|
| 1095 | AND pop.trackbacks = 0
|
---|
| 1096 | AND p.post_status = 'publish'
|
---|
| 1097 | ";
|
---|
| 1098 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1099 | $temp .= "
|
---|
| 1100 | ORDER BY pop.total DESC
|
---|
| 1101 | LIMIT $limit
|
---|
| 1102 | ";
|
---|
| 1103 | $items = $wpdb->get_results($temp);
|
---|
| 1104 | break;
|
---|
| 1105 | case 'most_feedback':
|
---|
| 1106 | // in progress, should probably be combination of comment, pingback & trackback scores
|
---|
| 1107 | $temp = "
|
---|
| 1108 | SELECT p.ID, p.post_title, p.comment_count
|
---|
| 1109 | FROM $wpdb->posts p
|
---|
| 1110 | LEFT JOIN $wpdb->ak_popularity pop ON p.ID = pop.post_id
|
---|
| 1111 | WHERE p.post_status = 'publish'
|
---|
| 1112 | AND p.comment_count > 0";
|
---|
| 1113 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1114 | $temp = "
|
---|
| 1115 | ORDER BY p.comment_count DESC
|
---|
| 1116 | LIMIT $limit;
|
---|
| 1117 | ";
|
---|
| 1118 | $items = $wpdb->get_results($temp);
|
---|
| 1119 | break;
|
---|
| 1120 | case 'date':
|
---|
| 1121 | $temp = "
|
---|
| 1122 | SELECT p.ID AS ID, p.post_title AS post_title, pop.total AS total
|
---|
| 1123 | FROM $wpdb->posts p
|
---|
| 1124 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1125 | ON p.ID = pop.post_id
|
---|
| 1126 | WHERE DATE_ADD(p.post_date, INTERVAL ".intval($custom['days'])." DAY) {$custom['compare']} DATE_ADD(NOW(), INTERVAL ".intval($custom['offset'])." DAY)
|
---|
| 1127 | AND p.post_status = 'publish'
|
---|
| 1128 | ";
|
---|
| 1129 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1130 | $temp .= "
|
---|
| 1131 | ORDER BY pop.total DESC
|
---|
| 1132 | LIMIT $limit
|
---|
| 1133 | ";
|
---|
| 1134 | $items = $wpdb->get_results($temp);
|
---|
| 1135 | break;
|
---|
| 1136 | case 'most':
|
---|
| 1137 | $temp = "
|
---|
| 1138 | SELECT p.ID AS ID, p.post_title AS post_title, pop.{$custom['column']} AS {$custom['column']}
|
---|
| 1139 | FROM $wpdb->posts p
|
---|
| 1140 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1141 | ON p.ID = pop.post_id
|
---|
| 1142 | WHERE p.post_status = 'publish'
|
---|
| 1143 | ";
|
---|
| 1144 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1145 | $temp .= "
|
---|
| 1146 | ORDER BY pop.{$custom['column']} DESC
|
---|
| 1147 | LIMIT $limit
|
---|
| 1148 | ";
|
---|
| 1149 | $items = $wpdb->get_results($temp);
|
---|
| 1150 | break;
|
---|
| 1151 | case 'popular':
|
---|
| 1152 | $temp = "
|
---|
| 1153 | SELECT p.ID AS ID, p.post_title AS post_title, pop.{$custom['column']} AS {$custom['column']}
|
---|
| 1154 | FROM $wpdb->posts p
|
---|
| 1155 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1156 | ON p.ID = pop.post_id
|
---|
| 1157 | WHERE p.post_status = 'publish'
|
---|
| 1158 | ";
|
---|
| 1159 | if ($exclude_pages == 'yes') { $temp .= " AND p.post_type != 'page' "; }
|
---|
| 1160 | $temp .= "
|
---|
| 1161 | ORDER BY pop.{$custom['column']} DESC
|
---|
| 1162 | LIMIT $limit
|
---|
| 1163 | ";
|
---|
| 1164 | $items = $wpdb->get_results($temp);
|
---|
| 1165 | break;
|
---|
| 1166 | case 'popular_pages':
|
---|
| 1167 | $temp = "
|
---|
| 1168 | SELECT p.ID AS ID, p.post_title AS post_title, pop.single_views AS single_views
|
---|
| 1169 | FROM $wpdb->posts p
|
---|
| 1170 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1171 | ON p.ID = pop.post_id
|
---|
| 1172 | WHERE p.post_status = 'publish'
|
---|
| 1173 | AND p.post_type = 'page'
|
---|
| 1174 | ORDER BY pop.single_views DESC
|
---|
| 1175 | LIMIT $limit
|
---|
| 1176 | ";
|
---|
| 1177 | $items = $wpdb->get_results($temp);
|
---|
| 1178 | break;
|
---|
| 1179 | }
|
---|
| 1180 |
|
---|
| 1181 | do_action('akpc_get_popular_posts',$items);
|
---|
| 1182 |
|
---|
| 1183 | if (count($items)) {
|
---|
| 1184 | return $items;
|
---|
| 1185 | }
|
---|
| 1186 | return false;
|
---|
| 1187 | }
|
---|
| 1188 |
|
---|
| 1189 | /**
|
---|
| 1190 | * Show a popularity report
|
---|
| 1191 | * @var string $type - type of report to show
|
---|
| 1192 | * @var int $limit - num posts to show
|
---|
| 1193 | * @var array $custom - pre-defined list of posts to show
|
---|
| 1194 | * @var bool $hide_title - wether to echo the list title
|
---|
| 1195 | */
|
---|
| 1196 | function show_report($type = 'popular', $limit = 10, $exclude_pages = 'yes', $custom = array(), $before_title = '<h3>', $after_title = '</h3>', $hide_title = false) {
|
---|
| 1197 | global $wpdb;
|
---|
| 1198 |
|
---|
| 1199 | if (count($custom) > 0 && 1 == 0) {
|
---|
| 1200 | }
|
---|
| 1201 | else {
|
---|
| 1202 | $query = '';
|
---|
| 1203 | $column = '';
|
---|
| 1204 | $list = '';
|
---|
| 1205 | $items = array();
|
---|
| 1206 | $rel = '';
|
---|
| 1207 | switch ($type) {
|
---|
| 1208 | case 'category':
|
---|
| 1209 | $title = $custom['cat_name'];
|
---|
| 1210 | $items = $this->get_popular_posts($type, $limit, $exclude_pages, $custom);
|
---|
| 1211 | $list = $this->report_list_items($items, $before = '<li>', $after = '</li>');
|
---|
| 1212 | break;
|
---|
| 1213 | case 'tag':
|
---|
| 1214 | $title = $custom['term_name'];
|
---|
| 1215 | $rel = sanitize_title($title);
|
---|
| 1216 | $items = $this->get_popular_posts($type, $limit, $exclude_pages, $custom);
|
---|
| 1217 | $list = $this->report_list_items($items, $before = '<li>', $after = '</li>');
|
---|
| 1218 | break;
|
---|
| 1219 | case 'pop_by_category':
|
---|
| 1220 | $cats = get_categories();
|
---|
| 1221 | if (count($cats)) {
|
---|
| 1222 | foreach ($cats as $cat) {
|
---|
| 1223 | $this->show_report('category', 10, $exclude_pages, array('cat_ID' => $cat->term_id, 'cat_name' => $cat->name));
|
---|
| 1224 | }
|
---|
| 1225 | }
|
---|
| 1226 | break;
|
---|
| 1227 | case 'pop_by_tag':
|
---|
| 1228 | $tags = maybe_unserialize(get_option('akpc_tag_reports'));
|
---|
| 1229 | if (is_array($tags) && count($tags)) {
|
---|
| 1230 | foreach ($tags as $tag) {
|
---|
| 1231 | $term = get_term_by('slug', $tag, 'post_tag');
|
---|
| 1232 | $this->show_report('tag', 10, $exclude_pages, array('term_id' => $term->term_id, 'term_name' => $term->name));
|
---|
| 1233 | }
|
---|
| 1234 | }
|
---|
| 1235 | break;
|
---|
| 1236 | case 'category_popularity':
|
---|
| 1237 | $title = __('Average by Category', 'popularity-contest');
|
---|
| 1238 | $items = $this->get_popular_posts($type, $limit, $exclude_pages);
|
---|
| 1239 | if (is_array($items) && count($items)) {
|
---|
| 1240 | foreach ($items as $item) {
|
---|
| 1241 | $list .= ' <li>
|
---|
| 1242 | <span>'.$this->get_rank(ceil($item->avg)).'</span>
|
---|
| 1243 | '.$item->name.'
|
---|
| 1244 | </li>'."\n";
|
---|
| 1245 | }
|
---|
| 1246 | }
|
---|
| 1247 | break;
|
---|
| 1248 | case 'tag_popularity':
|
---|
| 1249 | $title = __('Average by Tag', 'popularity-contest');
|
---|
| 1250 | $items = $this->get_popular_posts($type, $limit, $exclude_pages);
|
---|
| 1251 | if (is_array($items) && count($items)) {
|
---|
| 1252 | foreach ($items as $item) {
|
---|
| 1253 | $list .= ' <li>
|
---|
| 1254 | <span>'.$this->get_rank(ceil($item->avg)).'</span>
|
---|
| 1255 | '.$item->name.'
|
---|
| 1256 | </li>'."\n";
|
---|
| 1257 | }
|
---|
| 1258 | }
|
---|
| 1259 | break;
|
---|
| 1260 | case 'year':
|
---|
| 1261 | global $month;
|
---|
| 1262 | $title = $custom['y'].__(' Average by Month', 'popularity-contest');
|
---|
| 1263 | $items = $this->get_popular_posts($type,$limit, $exclude_pages,$custom);
|
---|
| 1264 | if (is_array($items) && count($items)) {
|
---|
| 1265 | foreach ($items as $item) {
|
---|
| 1266 | $list .= ' <li>
|
---|
| 1267 | <span>'.$this->get_rank(ceil($item->avg)).'</span>
|
---|
| 1268 | '.$month[str_pad($item->month, 2, '0', STR_PAD_LEFT)].'
|
---|
| 1269 | </li>'."\n";
|
---|
| 1270 | }
|
---|
| 1271 | }
|
---|
| 1272 | break;
|
---|
| 1273 | case 'month_popularity':
|
---|
| 1274 | $years = array();
|
---|
| 1275 | $years = $wpdb->get_results("
|
---|
| 1276 | SELECT DISTINCT YEAR(post_date) AS year
|
---|
| 1277 | FROM $wpdb->posts
|
---|
| 1278 | ORDER BY year DESC
|
---|
| 1279 | ");
|
---|
| 1280 | $i = 2;
|
---|
| 1281 | if (count($years) > 0) {
|
---|
| 1282 | foreach ($years as $year) {
|
---|
| 1283 | $this->show_report('year', 10, $exclude_pages, array('y' => $year->year));
|
---|
| 1284 | if ($i == 3) {
|
---|
| 1285 | print('
|
---|
| 1286 | <div class="clear"></div>
|
---|
| 1287 | ');
|
---|
| 1288 | $i = 0;
|
---|
| 1289 | }
|
---|
| 1290 | $i++;
|
---|
| 1291 | }
|
---|
| 1292 | }
|
---|
| 1293 | break;
|
---|
| 1294 | case 'views_wo_feedback':
|
---|
| 1295 | $title = __('Views w/o Feedback', 'popularity-contest');
|
---|
| 1296 | $items = $this->get_popular_posts($type, $limit, $exclude_pages);
|
---|
| 1297 | $list = $this->report_list_items($items, $before = '<li>', $after = '</li>');
|
---|
| 1298 | break;
|
---|
| 1299 | case 'most_feedback':
|
---|
| 1300 | $query = 'sum';
|
---|
| 1301 | $column = 'pop.comments + pop.pingbacks + pop.trackbacks AS feedback';
|
---|
| 1302 | $title = __('Feedback', 'popularity-contest');
|
---|
| 1303 | break;
|
---|
| 1304 | case '365_plus':
|
---|
| 1305 | $offset = -365;
|
---|
| 1306 | $compare = '<';
|
---|
| 1307 | $title = __('Older Than 1 Year', 'popularity-contest');
|
---|
| 1308 | $items = $this->get_popular_posts('date', $limit, $exclude_pages, array('days' => $days, 'offset' => $offset, 'compare' => $compare));
|
---|
| 1309 | $list = $this->report_list_items($items, $before = '<li>', $after = '</li>');
|
---|
| 1310 | break;
|
---|
| 1311 | case 'last_30':
|
---|
| 1312 | case 'last_60':
|
---|
| 1313 | case 'last_90':
|
---|
| 1314 | case 'last_365':
|
---|
| 1315 | case 'last_n':
|
---|
| 1316 | $compare = '>';
|
---|
| 1317 | $offset = $days = '0';
|
---|
| 1318 | switch(str_replace('last_','',$type)) {
|
---|
| 1319 | case '30':
|
---|
| 1320 | $days = 30;
|
---|
| 1321 | $title = __('Last 30 Days', 'popularity-contest');
|
---|
| 1322 | break;
|
---|
| 1323 | case '60':
|
---|
| 1324 | $days = 60;
|
---|
| 1325 | $title = __('Last 60 Days', 'popularity-contest');
|
---|
| 1326 | break;
|
---|
| 1327 | case '90':
|
---|
| 1328 | $days = 90;
|
---|
| 1329 | $title = __('Last 90 Days', 'popularity-contest');
|
---|
| 1330 | break;
|
---|
| 1331 | case '365':
|
---|
| 1332 | $days = 365;
|
---|
| 1333 | $title = __('Last Year', 'popularity-contest');
|
---|
| 1334 | break;
|
---|
| 1335 | case 'n':
|
---|
| 1336 | $days = $custom['days'];
|
---|
| 1337 | if ($days == 1) {
|
---|
| 1338 | $title = __('Last Day', 'popularity-contest');
|
---|
| 1339 | }
|
---|
| 1340 | else {
|
---|
| 1341 | $title = sprintf(__('Last %s Days', 'popularity-contest'), $days);
|
---|
| 1342 | }
|
---|
| 1343 | break;
|
---|
| 1344 | }
|
---|
| 1345 | $items = $this->get_popular_posts('date', $limit, $exclude_pages, array('days' => $days, 'offset' => $offset, 'compare' => $compare));
|
---|
| 1346 | $list = $this->report_list_items($items, $before = '<li>', $after = '</li>');
|
---|
| 1347 | break;
|
---|
| 1348 | case 'most_feed_views':
|
---|
| 1349 | case 'most_home_views':
|
---|
| 1350 | case 'most_archive_views':
|
---|
| 1351 | case 'most_category_views':
|
---|
| 1352 | case 'most_tag_views':
|
---|
| 1353 | case 'most_single_views':
|
---|
| 1354 | case 'most_searcher_views':
|
---|
| 1355 | case 'most_comments':
|
---|
| 1356 | case 'most_pingbacks':
|
---|
| 1357 | case 'most_trackbacks':
|
---|
| 1358 | switch($type) {
|
---|
| 1359 | case 'most_feed_views':
|
---|
| 1360 | $query = 'most';
|
---|
| 1361 | $column = 'feed_views';
|
---|
| 1362 | $title = __('Feed Views', 'popularity-contest');
|
---|
| 1363 | break;
|
---|
| 1364 | case 'most_home_views':
|
---|
| 1365 | $query = 'most';
|
---|
| 1366 | $column = 'home_views';
|
---|
| 1367 | $title = __('Home Page Views', 'popularity-contest');
|
---|
| 1368 | break;
|
---|
| 1369 | case 'most_archive_views':
|
---|
| 1370 | $query = 'most';
|
---|
| 1371 | $column = 'archive_views';
|
---|
| 1372 | $title = __('Archive Views', 'popularity-contest');
|
---|
| 1373 | break;
|
---|
| 1374 | case 'most_category_views':
|
---|
| 1375 | $query = 'most';
|
---|
| 1376 | $column = 'category_views';
|
---|
| 1377 | $title = __('Category Views', 'popularity-contest');
|
---|
| 1378 | break;
|
---|
| 1379 | case 'most_tag_views':
|
---|
| 1380 | $query = 'most';
|
---|
| 1381 | $column = 'tag_views';
|
---|
| 1382 | $title = __('Tag Views', 'popularity-contest');
|
---|
| 1383 | break;
|
---|
| 1384 | case 'most_single_views':
|
---|
| 1385 | $query = 'most';
|
---|
| 1386 | $column = 'single_views';
|
---|
| 1387 | $title = __('Single Post Views', 'popularity-contest');
|
---|
| 1388 | break;
|
---|
| 1389 | case 'most_searcher_views':
|
---|
| 1390 | $query = 'most';
|
---|
| 1391 | $column = 'searcher_views';
|
---|
| 1392 | $title = __('Search Engine Traffic', 'popularity-contest');
|
---|
| 1393 | break;
|
---|
| 1394 | case 'most_comments':
|
---|
| 1395 | $query = 'most';
|
---|
| 1396 | $column = 'comments';
|
---|
| 1397 | $title = __('Comments', 'popularity-contest');
|
---|
| 1398 | break;
|
---|
| 1399 | case 'most_pingbacks':
|
---|
| 1400 | $query = 'most';
|
---|
| 1401 | $column = 'pingbacks';
|
---|
| 1402 | $title = __('Pingbacks', 'popularity-contest');
|
---|
| 1403 | break;
|
---|
| 1404 | case 'most_trackbacks':
|
---|
| 1405 | $query = 'most';
|
---|
| 1406 | $column = 'trackbacks';
|
---|
| 1407 | $title = __('Trackbacks', 'popularity-contest');
|
---|
| 1408 | break;
|
---|
| 1409 | }
|
---|
| 1410 | $items = $this->get_popular_posts('most', $limit, $exclude_pages, array('column' => $column));
|
---|
| 1411 | if (is_array($items) && count($items)) {
|
---|
| 1412 | foreach ($items as $item) {
|
---|
| 1413 | $list .= ' <li>
|
---|
| 1414 | <span>'.$item->$column.'</span>
|
---|
| 1415 | <a href="'.get_permalink($item->ID).'">'.$item->post_title.'</a>
|
---|
| 1416 | </li>'."\n";
|
---|
| 1417 | }
|
---|
| 1418 | }
|
---|
| 1419 | else {
|
---|
| 1420 | $list = '<li>'.__('(none)', 'popularity-contest').'</li>';
|
---|
| 1421 | }
|
---|
| 1422 | break;
|
---|
| 1423 | case 'most_page_views':
|
---|
| 1424 | $column = 'single_views';
|
---|
| 1425 | $title = __('Page Views', 'popularity-contest');
|
---|
| 1426 | $items = $this->get_popular_posts('popular_pages', $limit, $exclude_pages, array('column' => $column));
|
---|
| 1427 | if (is_array($items) && count($items)) {
|
---|
| 1428 | foreach ($items as $item) {
|
---|
| 1429 | $list .= ' <li>
|
---|
| 1430 | <span>'.$item->$column.'</span>
|
---|
| 1431 | <a href="'.get_permalink($item->ID).'">'.$item->post_title.'</a>
|
---|
| 1432 | </li>'."\n";
|
---|
| 1433 | }
|
---|
| 1434 | }
|
---|
| 1435 | else {
|
---|
| 1436 | $list = '<li>'.__('(none)', 'popularity-contest').'</li>';
|
---|
| 1437 | }
|
---|
| 1438 | break;
|
---|
| 1439 | case 'popular':
|
---|
| 1440 | $query = 'popular';
|
---|
| 1441 | $column = 'total';
|
---|
| 1442 | $title = __('Most Popular', 'popularity-contest');
|
---|
| 1443 | $items = $this->get_popular_posts($type, $limit, $exclude_pages, array('column' => $column));
|
---|
| 1444 | if (is_array($items) && count($items)) {
|
---|
| 1445 | foreach ($items as $item) {
|
---|
| 1446 | $list .= ' <li>
|
---|
| 1447 | <span>'.$this->get_post_rank(null, $item->total).'</span>
|
---|
| 1448 | <a href="'.get_permalink($item->ID).'">'.$item->post_title.'</a>
|
---|
| 1449 | </li>'."\n";
|
---|
| 1450 | }
|
---|
| 1451 | }
|
---|
| 1452 | else {
|
---|
| 1453 | $list = '<li>'.__('(none)', 'popularity-contest').'</li>';
|
---|
| 1454 | }
|
---|
| 1455 | break;
|
---|
| 1456 | }
|
---|
| 1457 | }
|
---|
| 1458 |
|
---|
| 1459 | if (!empty($list)) {
|
---|
| 1460 | $html = '
|
---|
| 1461 | <div class="akpc_report" rel="'.$rel.'">
|
---|
| 1462 | '.($hide_title ? '' : $before_title.$title.$after_title).'
|
---|
| 1463 | <ol>
|
---|
| 1464 | '.$list.'
|
---|
| 1465 | </ol>
|
---|
| 1466 | </div>
|
---|
| 1467 | ';
|
---|
| 1468 | echo apply_filters('akpc_show_report', $html, $items);
|
---|
| 1469 | }
|
---|
| 1470 | }
|
---|
| 1471 |
|
---|
| 1472 | /**
|
---|
| 1473 | * create a list of popular items for a report
|
---|
| 1474 | * @var array $items
|
---|
| 1475 | * @return string - HTML
|
---|
| 1476 | */
|
---|
| 1477 | function report_list_items($items, $before = '<li>', $after = '<li>') {
|
---|
| 1478 | if (!$items || !count($items)) { return false; }
|
---|
| 1479 |
|
---|
| 1480 | $html = '';
|
---|
| 1481 | foreach($items as $item) {
|
---|
| 1482 | $html .= $before.
|
---|
| 1483 | '<span>'.$this->get_post_rank(null, $item->total).'</span><a href="'.get_permalink($item->ID).'">'.$item->post_title.'</a>'.
|
---|
| 1484 | $after;
|
---|
| 1485 | }
|
---|
| 1486 | return $html;
|
---|
| 1487 | }
|
---|
| 1488 |
|
---|
| 1489 | function show_report_extended($type = 'popular', $limit = 50) {
|
---|
| 1490 | global $wpdb, $post;
|
---|
| 1491 | $columns = array(
|
---|
| 1492 | 'popularity' => __('', 'popularity-contest')
|
---|
| 1493 | ,'title' => __('Title', 'popularity-contest')
|
---|
| 1494 | ,'categories' => __('Categories', 'popularity-contest')
|
---|
| 1495 | ,'single_views' => __('Single', 'popularity-contest')
|
---|
| 1496 | ,'searcher_views' => __('Search', 'popularity-contest')
|
---|
| 1497 | ,'category_views' => __('Cat', 'popularity-contest')
|
---|
| 1498 | ,'tag_views' => __('Tag', 'popularity-contest')
|
---|
| 1499 | ,'archive_views' => __('Arch', 'popularity-contest')
|
---|
| 1500 | ,'home_views' => __('Home', 'popularity-contest')
|
---|
| 1501 | ,'feed_views' => __('Feed', 'popularity-contest')
|
---|
| 1502 | ,'comments' => __('Com', 'popularity-contest')
|
---|
| 1503 | ,'pingbacks' => __('Ping', 'popularity-contest')
|
---|
| 1504 | ,'trackbacks' => __('Track', 'popularity-contest')
|
---|
| 1505 | );
|
---|
| 1506 | ?>
|
---|
| 1507 | <div id="akpc_most_popular">
|
---|
| 1508 | <table width="100%" cellpadding="3" cellspacing="2">
|
---|
| 1509 | <tr>
|
---|
| 1510 | <?php
|
---|
| 1511 | foreach($columns as $column_display_name) {
|
---|
| 1512 | ?>
|
---|
| 1513 | <th scope="col"><?php echo $column_display_name; ?></th>
|
---|
| 1514 | <?php
|
---|
| 1515 | }
|
---|
| 1516 | ?>
|
---|
| 1517 | </tr>
|
---|
| 1518 | <?php
|
---|
| 1519 | $posts = $wpdb->get_results("
|
---|
| 1520 | SELECT p.*, pop.*
|
---|
| 1521 | FROM $wpdb->posts p
|
---|
| 1522 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1523 | ON p.ID = pop.post_id
|
---|
| 1524 | WHERE p.post_status = 'publish'
|
---|
| 1525 | ORDER BY pop.total DESC
|
---|
| 1526 | LIMIT ".intval($limit)
|
---|
| 1527 | );
|
---|
| 1528 | if ($posts) {
|
---|
| 1529 | $bgcolor = '';
|
---|
| 1530 | foreach ($posts as $post) {
|
---|
| 1531 | $class = ('alternate' == $class) ? '' : 'alternate';
|
---|
| 1532 | ?>
|
---|
| 1533 | <tr class='<?php echo $class; ?>'>
|
---|
| 1534 | <?php
|
---|
| 1535 | foreach($columns as $column_name => $column_display_name) {
|
---|
| 1536 | switch($column_name) {
|
---|
| 1537 | case 'popularity':
|
---|
| 1538 | ?>
|
---|
| 1539 | <td class="right"><?php $this->show_post_rank(null, $post->total); ?></td>
|
---|
| 1540 | <?php
|
---|
| 1541 | break;
|
---|
| 1542 | case 'title':
|
---|
| 1543 | ?>
|
---|
| 1544 | <td><a href="<?php the_permalink(); ?>"><?php the_title() ?></a></td>
|
---|
| 1545 | <?php
|
---|
| 1546 | break;
|
---|
| 1547 | case 'categories':
|
---|
| 1548 | ?>
|
---|
| 1549 | <td><?php if ($post->post_type == 'post') { the_category(','); } ?></td>
|
---|
| 1550 | <?php
|
---|
| 1551 | break;
|
---|
| 1552 | case 'single_views':
|
---|
| 1553 | ?>
|
---|
| 1554 | <td class="right"><?php print($post->single_views); ?></td>
|
---|
| 1555 | <?php
|
---|
| 1556 | break;
|
---|
| 1557 | case 'searcher_views':
|
---|
| 1558 | ?>
|
---|
| 1559 | <td class="right"><?php print($post->searcher_views); ?></td>
|
---|
| 1560 | <?php
|
---|
| 1561 | break;
|
---|
| 1562 | case 'category_views':
|
---|
| 1563 | ?>
|
---|
| 1564 | <td class="right"><?php print($post->category_views); ?></td>
|
---|
| 1565 | <?php
|
---|
| 1566 | break;
|
---|
| 1567 | case 'tag_views':
|
---|
| 1568 | ?>
|
---|
| 1569 | <td class="right"><?php print($post->tag_views); ?></td>
|
---|
| 1570 | <?php
|
---|
| 1571 | break;
|
---|
| 1572 | case 'archive_views':
|
---|
| 1573 | ?>
|
---|
| 1574 | <td class="right"><?php print($post->archive_views); ?></td>
|
---|
| 1575 | <?php
|
---|
| 1576 | break;
|
---|
| 1577 | case 'home_views':
|
---|
| 1578 | ?>
|
---|
| 1579 | <td class="right"><?php print($post->home_views); ?></td>
|
---|
| 1580 | <?php
|
---|
| 1581 | break;
|
---|
| 1582 | case 'feed_views':
|
---|
| 1583 | ?>
|
---|
| 1584 | <td class="right"><?php print($post->feed_views); ?></td>
|
---|
| 1585 | <?php
|
---|
| 1586 | break;
|
---|
| 1587 | case 'comments':
|
---|
| 1588 | ?>
|
---|
| 1589 | <td class="right"><?php print($post->comments); ?></td>
|
---|
| 1590 | <?php
|
---|
| 1591 | break;
|
---|
| 1592 | case 'pingbacks':
|
---|
| 1593 | ?>
|
---|
| 1594 | <td class="right"><?php print($post->pingbacks); ?></td>
|
---|
| 1595 | <?php
|
---|
| 1596 | break;
|
---|
| 1597 | case 'trackbacks':
|
---|
| 1598 | ?>
|
---|
| 1599 | <td class="right"><?php print($post->trackbacks); ?></td>
|
---|
| 1600 | <?php
|
---|
| 1601 | break;
|
---|
| 1602 | }
|
---|
| 1603 | }
|
---|
| 1604 | ?>
|
---|
| 1605 | </tr>
|
---|
| 1606 | <?php
|
---|
| 1607 | }
|
---|
| 1608 | }
|
---|
| 1609 | else {
|
---|
| 1610 | ?>
|
---|
| 1611 | <tr style='background-color: <?php echo $bgcolor; ?>'>
|
---|
| 1612 | <td colspan="8"><?php _e('No posts found.') ?></td>
|
---|
| 1613 | </tr>
|
---|
| 1614 | <?php
|
---|
| 1615 | } // end if ($posts)
|
---|
| 1616 | ?>
|
---|
| 1617 | </table>
|
---|
| 1618 | </div>
|
---|
| 1619 | <?php
|
---|
| 1620 | }
|
---|
| 1621 |
|
---|
| 1622 | function view_stats($limit = 100) {
|
---|
| 1623 | global $wpdb, $post;
|
---|
| 1624 | print('
|
---|
| 1625 | <div class="wrap ak_wrap">
|
---|
| 1626 | <h2>'.__('Most Popular', 'popularity-contest').'</h2>
|
---|
| 1627 | ');
|
---|
| 1628 |
|
---|
| 1629 | $this->show_report_extended('popular', 50);
|
---|
| 1630 |
|
---|
| 1631 | print('
|
---|
| 1632 | <p id="akpc_options_link"><a href="options-general.php?page=popularity-contest.php">Change Popularity Values</a></p>
|
---|
| 1633 |
|
---|
| 1634 | <div class="pop_group">
|
---|
| 1635 | <h2>'.__('Date Range', 'popularity-contest').'</h2>
|
---|
| 1636 | ');
|
---|
| 1637 |
|
---|
| 1638 | $this->show_report('last_30');
|
---|
| 1639 | $this->show_report('last_60');
|
---|
| 1640 | $this->show_report('last_90');
|
---|
| 1641 | $this->show_report('last_365');
|
---|
| 1642 | $this->show_report('365_plus');
|
---|
| 1643 |
|
---|
| 1644 | print('
|
---|
| 1645 | </div>
|
---|
| 1646 | <div class="clear"></div>
|
---|
| 1647 | <div class="pop_group">
|
---|
| 1648 | <h2>'.__('Views', 'popularity-contest').'</h2>
|
---|
| 1649 | ');
|
---|
| 1650 |
|
---|
| 1651 | $this->show_report('most_single_views');
|
---|
| 1652 | $this->show_report('most_page_views');
|
---|
| 1653 | $this->show_report('most_searcher_views');
|
---|
| 1654 | $this->show_report('most_category_views');
|
---|
| 1655 | $this->show_report('most_tag_views');
|
---|
| 1656 | $this->show_report('most_archive_views');
|
---|
| 1657 | $this->show_report('most_home_views');
|
---|
| 1658 | $this->show_report('most_feed_views');
|
---|
| 1659 |
|
---|
| 1660 | print('
|
---|
| 1661 | </div>
|
---|
| 1662 | <div class="clear"></div>
|
---|
| 1663 | <div class="pop_group">
|
---|
| 1664 | <h2>'.__('Feedback', 'popularity-contest').'</h2>
|
---|
| 1665 | ');
|
---|
| 1666 |
|
---|
| 1667 | $this->show_report('most_comments');
|
---|
| 1668 | $this->show_report('most_pingbacks');
|
---|
| 1669 | $this->show_report('most_trackbacks');
|
---|
| 1670 | $this->show_report('views_wo_feedback');
|
---|
| 1671 |
|
---|
| 1672 | print('
|
---|
| 1673 | </div>
|
---|
| 1674 | <div class="clear"></div>
|
---|
| 1675 | <h2>'.__('Averages', 'popularity-contest').'</h2>
|
---|
| 1676 | ');
|
---|
| 1677 |
|
---|
| 1678 | $this->show_report('category_popularity');
|
---|
| 1679 | $this->show_report('tag_popularity');
|
---|
| 1680 | $this->show_report('month_popularity');
|
---|
| 1681 |
|
---|
| 1682 | print('
|
---|
| 1683 | <div class="clear"></div>
|
---|
| 1684 | <div class="pop_group" id="akpc_tag_reports">
|
---|
| 1685 | <h2>'.__('Tags', 'popularity-contest').'
|
---|
| 1686 | <form action="'.site_url('index.php').'" method="post" id="akpc_report_tag_form">
|
---|
| 1687 | <label for="akpc_tag_add">'.__('Add report for tag:', 'popularity-contest').'</label>
|
---|
| 1688 | <input type="text" name="akpc_tag_add" id="akpc_tag_add" value="" />
|
---|
| 1689 | <input type="submit" name="submit_button" value="'.__('Add', 'popularity-contest').'" />
|
---|
| 1690 | <input type="hidden" name="ak_action" value="akpc_add_tag" />
|
---|
| 1691 | <span class="akpc_saving">'.__('Adding tag...'. 'popularity-contest').'</span>
|
---|
| 1692 | </form>
|
---|
| 1693 | </h2>
|
---|
| 1694 | ');
|
---|
| 1695 |
|
---|
| 1696 | $this->show_report('pop_by_tag');
|
---|
| 1697 |
|
---|
| 1698 | print('
|
---|
| 1699 | <div class="akpc_padded none">'.__('No tag reports chosen.', 'popularity-contest').'</div>
|
---|
| 1700 | </div>
|
---|
| 1701 | <div class="clear"></div>
|
---|
| 1702 | <div class="pop_group">
|
---|
| 1703 | <h2>'.__('Categories', 'popularity-contest').'</h2>
|
---|
| 1704 | ');
|
---|
| 1705 |
|
---|
| 1706 | $this->show_report('pop_by_category');
|
---|
| 1707 |
|
---|
| 1708 | print('
|
---|
| 1709 | </div>
|
---|
| 1710 | <div class="clear"></div>
|
---|
| 1711 | </div>
|
---|
| 1712 | ');
|
---|
| 1713 | ?>
|
---|
| 1714 | <script type="text/javascript">
|
---|
| 1715 | akpc_flow_reports = function() {
|
---|
| 1716 | var reports = jQuery('div.akpc_report').css('visibility', 'hidden');
|
---|
| 1717 | jQuery('div.akpc-auto-insert').remove();
|
---|
| 1718 | var akpc_reports_per_row = Math.floor(jQuery('div.pop_group').width()/250);
|
---|
| 1719 | jQuery('div.pop_group').each(function() {
|
---|
| 1720 | var i = 1;
|
---|
| 1721 | jQuery(this).find('div.akpc_report').each(function() {
|
---|
| 1722 | if (i % akpc_reports_per_row == 0) {
|
---|
| 1723 | jQuery(this).after('<div class="clear akpc-auto-insert"></div>');
|
---|
| 1724 | }
|
---|
| 1725 | i++;
|
---|
| 1726 | });
|
---|
| 1727 | });
|
---|
| 1728 | akpc_tag_reports_none();
|
---|
| 1729 | reports.css('visibility', 'visible');
|
---|
| 1730 | }
|
---|
| 1731 | akpc_tag_report_remove_links = function() {
|
---|
| 1732 | jQuery('#akpc_tag_reports a.remove').remove();
|
---|
| 1733 | jQuery('#akpc_tag_reports .akpc_report').each(function() {
|
---|
| 1734 | jQuery(this).prepend('<a href="<?php echo site_url('index.php?ak_action=akpc_remove_tag&tag='); ?>' + jQuery(this).attr('rel') + '" class="remove"><?php _e('[X]', 'popuarity-contest'); ?></a>');
|
---|
| 1735 | });
|
---|
| 1736 | jQuery('#akpc_tag_reports a.remove').click(function() {
|
---|
| 1737 | report = jQuery(this).parents('#akpc_tag_reports .akpc_report');
|
---|
| 1738 | report.html('<div class="akpc_padded"><?php _e('Removing...', 'popularity-contest'); ?></div>');
|
---|
| 1739 | jQuery.post(
|
---|
| 1740 | '<?php echo site_url('index.php'); ?>',
|
---|
| 1741 | {
|
---|
| 1742 | 'ak_action': 'akpc_remove_tag',
|
---|
| 1743 | 'tag': report.attr('rel')
|
---|
| 1744 | },
|
---|
| 1745 | function(response) {
|
---|
| 1746 | report.remove();
|
---|
| 1747 | akpc_flow_reports();
|
---|
| 1748 | },
|
---|
| 1749 | 'html'
|
---|
| 1750 | );
|
---|
| 1751 | return false;
|
---|
| 1752 | });
|
---|
| 1753 | }
|
---|
| 1754 | akpc_tag_reports_none = function() {
|
---|
| 1755 | none_msg = jQuery('#akpc_tag_reports .none');
|
---|
| 1756 | if (jQuery('#akpc_tag_reports .akpc_report').size()) {
|
---|
| 1757 | none_msg.hide();
|
---|
| 1758 | }
|
---|
| 1759 | else {
|
---|
| 1760 | none_msg.show();
|
---|
| 1761 | }
|
---|
| 1762 | }
|
---|
| 1763 | jQuery(function($) {
|
---|
| 1764 | akpc_flow_reports();
|
---|
| 1765 | akpc_tag_report_remove_links();
|
---|
| 1766 | $('#akpc_tag_add').suggest( 'admin-ajax.php?action=ajax-tag-search&tax=post_tag', { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } );
|
---|
| 1767 | $('#akpc_report_tag_form').submit(function() {
|
---|
| 1768 | var tag = $('#akpc_tag_add').val();
|
---|
| 1769 | if (tag.length > 0) {
|
---|
| 1770 | var add_button = $(this).find('input[type="submit"]');
|
---|
| 1771 | var saving_msg = $(this).find('span.akpc_saving');
|
---|
| 1772 | add_button.hide();
|
---|
| 1773 | saving_msg.show();
|
---|
| 1774 | $.post(
|
---|
| 1775 | '<?php echo site_url('index.php'); ?>',
|
---|
| 1776 | {
|
---|
| 1777 | 'ak_action': 'akpc_add_tag',
|
---|
| 1778 | 'tag': tag
|
---|
| 1779 | },
|
---|
| 1780 | function(response) {
|
---|
| 1781 | $('#akpc_tag_add').val('');
|
---|
| 1782 | $('#akpc_tag_reports').append(response);
|
---|
| 1783 | akpc_flow_reports();
|
---|
| 1784 | akpc_tag_report_remove_links()
|
---|
| 1785 | saving_msg.hide();
|
---|
| 1786 | add_button.show();
|
---|
| 1787 | },
|
---|
| 1788 | 'html'
|
---|
| 1789 | );
|
---|
| 1790 | }
|
---|
| 1791 | return false;
|
---|
| 1792 | });
|
---|
| 1793 | });
|
---|
| 1794 | jQuery(window).bind('resize', akpc_flow_reports);
|
---|
| 1795 | </script>
|
---|
| 1796 | <?php
|
---|
| 1797 | }
|
---|
| 1798 |
|
---|
| 1799 | function get_post_total($post_id) {
|
---|
| 1800 | if (!isset($this->current_posts['id_'.$post_id])) {
|
---|
| 1801 | $this->get_current_posts(array($post_id));
|
---|
| 1802 | }
|
---|
| 1803 | return $this->current_posts['id_'.$post_id];
|
---|
| 1804 | }
|
---|
| 1805 |
|
---|
| 1806 | function get_rank($item, $total = null) {
|
---|
| 1807 | if (is_null($total)) {
|
---|
| 1808 | $total = $this->top_rank();
|
---|
| 1809 | }
|
---|
| 1810 | return ceil(($item/$total) * 100).'%';
|
---|
| 1811 | }
|
---|
| 1812 |
|
---|
| 1813 | function get_post_rank($post_id = null, $total = -1) {
|
---|
| 1814 | if (count($this->top_ranked) == 0) {
|
---|
| 1815 | $this->get_top_ranked();
|
---|
| 1816 | }
|
---|
| 1817 | if ($total > -1 && !$post_id) {
|
---|
| 1818 | return ceil(($total/$this->top_rank()) * 100).'%';
|
---|
| 1819 | }
|
---|
| 1820 | if (isset($this->top_ranked['id_'.$post_id])) {
|
---|
| 1821 | $rank = $this->top_ranked['id_'.$post_id];
|
---|
| 1822 | }
|
---|
| 1823 | else {
|
---|
| 1824 | $rank = $this->get_post_total($post_id);
|
---|
| 1825 | }
|
---|
| 1826 | $show_help = apply_filters('akpc_show_help', $this->show_help, $post_id);
|
---|
| 1827 | if ($show_help) {
|
---|
| 1828 | $suffix = ' <span class="akpc_help">[<a href="http://alexking.org/projects/wordpress/popularity-contest" title="'.__('What does this mean?', 'popularity-contest').'">?</a>]</span>';
|
---|
| 1829 | }
|
---|
| 1830 | else {
|
---|
| 1831 | $suffix = '';
|
---|
| 1832 | }
|
---|
| 1833 | if (isset($rank) && $rank != false) {
|
---|
| 1834 | return __('Popularity:', 'popularity-contest').' '.$this->get_rank($rank).$suffix;
|
---|
| 1835 | }
|
---|
| 1836 | else {
|
---|
| 1837 | return __('Popularity:', 'popularity-contest').' '.__('unranked', 'popularity-contest').$suffix;
|
---|
| 1838 | }
|
---|
| 1839 | }
|
---|
| 1840 |
|
---|
| 1841 | function show_post_rank($post_id = -1, $total = -1) {
|
---|
| 1842 | print($this->get_post_rank($post_id, $total));
|
---|
| 1843 | }
|
---|
| 1844 |
|
---|
| 1845 | function top_rank() {
|
---|
| 1846 | if (count($this->top_ranked) == 0) {
|
---|
| 1847 | $this->get_top_ranked();
|
---|
| 1848 | }
|
---|
| 1849 | foreach ($this->top_ranked as $id => $rank) {
|
---|
| 1850 | $top = $rank;
|
---|
| 1851 | break;
|
---|
| 1852 | }
|
---|
| 1853 | // handle edge case - div by zero
|
---|
| 1854 | if (intval($top) == 0) {
|
---|
| 1855 | $top = 1;
|
---|
| 1856 | }
|
---|
| 1857 | return $top;
|
---|
| 1858 | }
|
---|
| 1859 |
|
---|
| 1860 | function get_current_posts($post_ids = array()) {
|
---|
| 1861 | global $wpdb, $wp_query;
|
---|
| 1862 | $posts = $wp_query->get_posts();
|
---|
| 1863 | $ids = array();
|
---|
| 1864 | foreach ($posts as $post) {
|
---|
| 1865 | $ids[] = $post->ID;
|
---|
| 1866 | }
|
---|
| 1867 | $ids = array_unique(array_merge($ids, $post_ids));
|
---|
| 1868 | if (count($ids)) {
|
---|
| 1869 | $result = $wpdb->get_results("
|
---|
| 1870 | SELECT post_id, total
|
---|
| 1871 | FROM $wpdb->ak_popularity
|
---|
| 1872 | WHERE post_id IN (".implode(',', $ids).")
|
---|
| 1873 | ");
|
---|
| 1874 |
|
---|
| 1875 | if (count($result)) {
|
---|
| 1876 | foreach ($result as $data) {
|
---|
| 1877 | $this->current_posts['id_'.$data->post_id] = $data->total;
|
---|
| 1878 | }
|
---|
| 1879 | }
|
---|
| 1880 | }
|
---|
| 1881 | return true;
|
---|
| 1882 | }
|
---|
| 1883 |
|
---|
| 1884 |
|
---|
| 1885 | function get_top_ranked() {
|
---|
| 1886 | global $wpdb;
|
---|
| 1887 | $result = $wpdb->get_results("
|
---|
| 1888 | SELECT post_id, total
|
---|
| 1889 | FROM $wpdb->ak_popularity
|
---|
| 1890 | ORDER BY total DESC
|
---|
| 1891 | LIMIT 10
|
---|
| 1892 | ");
|
---|
| 1893 |
|
---|
| 1894 | if (!count($result)) {
|
---|
| 1895 | return false;
|
---|
| 1896 | }
|
---|
| 1897 |
|
---|
| 1898 | foreach ($result as $data) {
|
---|
| 1899 | $this->top_ranked['id_'.$data->post_id] = $data->total;
|
---|
| 1900 | }
|
---|
| 1901 |
|
---|
| 1902 | return true;
|
---|
| 1903 | }
|
---|
| 1904 |
|
---|
| 1905 | function show_top_ranked($limit, $before, $after) {
|
---|
| 1906 | if ($posts=$this->get_top_ranked_posts($limit)) {
|
---|
| 1907 | foreach ($posts as $post) {
|
---|
| 1908 | print(
|
---|
| 1909 | $before.'<a href="'.get_permalink($post->ID).'">'
|
---|
| 1910 | .$post->post_title.'</a>'.$after
|
---|
| 1911 | );
|
---|
| 1912 | }
|
---|
| 1913 | }
|
---|
| 1914 | else {
|
---|
| 1915 | print($before.'(none)'.$after);
|
---|
| 1916 | }
|
---|
| 1917 | }
|
---|
| 1918 |
|
---|
| 1919 | function get_top_ranked_posts($limit) {
|
---|
| 1920 | global $wpdb;
|
---|
| 1921 | $temp = $wpdb;
|
---|
| 1922 |
|
---|
| 1923 | $join = apply_filters('posts_join', '');
|
---|
| 1924 | $where = apply_filters('posts_where', '');
|
---|
| 1925 | $groupby = apply_filters('posts_groupby', '');
|
---|
| 1926 | if (!empty($groupby)) {
|
---|
| 1927 | $groupby = ' GROUP BY '.$groupby;
|
---|
| 1928 | }
|
---|
| 1929 | else {
|
---|
| 1930 | $groupby = ' GROUP BY '.$wpdb->posts.'.ID ';
|
---|
| 1931 | }
|
---|
| 1932 |
|
---|
| 1933 | $posts = $wpdb->get_results("
|
---|
| 1934 | SELECT ID, post_title
|
---|
| 1935 | FROM $wpdb->posts
|
---|
| 1936 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1937 | ON $wpdb->posts.ID = pop.post_id
|
---|
| 1938 | $join
|
---|
| 1939 | WHERE post_status = 'publish'
|
---|
| 1940 | AND post_date < NOW()
|
---|
| 1941 | $where
|
---|
| 1942 | $groupby
|
---|
| 1943 | ORDER BY pop.total DESC
|
---|
| 1944 | LIMIT ".intval($limit)
|
---|
| 1945 | );
|
---|
| 1946 |
|
---|
| 1947 | $wpdb = $temp;
|
---|
| 1948 |
|
---|
| 1949 | return $posts;
|
---|
| 1950 | }
|
---|
| 1951 |
|
---|
| 1952 | function show_top_ranked_in_cat($limit, $before, $after, $cat_ID = '') {
|
---|
| 1953 | if (empty($cat_ID) && is_category()) {
|
---|
| 1954 | global $cat;
|
---|
| 1955 | $cat_ID = $cat;
|
---|
| 1956 | }
|
---|
| 1957 | if (empty($cat_ID)) {
|
---|
| 1958 | return;
|
---|
| 1959 | }
|
---|
| 1960 | global $wpdb;
|
---|
| 1961 | $temp = $wpdb;
|
---|
| 1962 |
|
---|
| 1963 | $join = apply_filters('posts_join', '');
|
---|
| 1964 | $where = apply_filters('posts_where', '');
|
---|
| 1965 | $groupby = apply_filters('posts_groupby', '');
|
---|
| 1966 | if (!empty($groupby)) {
|
---|
| 1967 | $groupby = ' GROUP BY '.$groupby;
|
---|
| 1968 | }
|
---|
| 1969 | else {
|
---|
| 1970 | $groupby = ' GROUP BY p.ID ';
|
---|
| 1971 | }
|
---|
| 1972 |
|
---|
| 1973 | $posts = $wpdb->get_results("
|
---|
| 1974 | SELECT ID, post_title
|
---|
| 1975 | FROM $wpdb->posts p
|
---|
| 1976 | LEFT JOIN $wpdb->term_relationships tr
|
---|
| 1977 | ON p.ID = tr.object_id
|
---|
| 1978 | LEFT JOIN $wpdb->term_taxonomy tt
|
---|
| 1979 | ON tr.term_taxonomy_id = tt.term_taxonomy_id
|
---|
| 1980 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 1981 | ON p.ID = pop.post_id
|
---|
| 1982 | $join
|
---|
| 1983 | WHERE tt.term_id = '".intval($cat_ID)."'
|
---|
| 1984 | AND tt.taxonomy = 'category'
|
---|
| 1985 | AND post_status = 'publish'
|
---|
| 1986 | AND post_type = 'post'
|
---|
| 1987 | AND post_date < NOW()
|
---|
| 1988 | $where
|
---|
| 1989 | $groupby
|
---|
| 1990 | ORDER BY pop.total DESC
|
---|
| 1991 | LIMIT ".intval($limit)
|
---|
| 1992 | );
|
---|
| 1993 | if ($posts) {
|
---|
| 1994 | foreach ($posts as $post) {
|
---|
| 1995 | print(
|
---|
| 1996 | $before.'<a href="'.get_permalink($post->ID).'">'
|
---|
| 1997 | .$post->post_title.'</a>'.$after
|
---|
| 1998 | );
|
---|
| 1999 | }
|
---|
| 2000 | }
|
---|
| 2001 | else {
|
---|
| 2002 | print($before.'(none)'.$after);
|
---|
| 2003 | }
|
---|
| 2004 | $wpdb = $temp;
|
---|
| 2005 | }
|
---|
| 2006 |
|
---|
| 2007 | function show_top_ranked_in_month($limit, $before, $after, $m = '') {
|
---|
| 2008 | if (empty($m) && is_archive()) {
|
---|
| 2009 | global $m;
|
---|
| 2010 | }
|
---|
| 2011 | if (empty($m)) {
|
---|
| 2012 | global $post;
|
---|
| 2013 | $m = get_the_time('Ym');
|
---|
| 2014 | }
|
---|
| 2015 | if (empty($m)) {
|
---|
| 2016 | return;
|
---|
| 2017 | }
|
---|
| 2018 | $year = substr($m, 0, 4);
|
---|
| 2019 | $month = substr($m, 4, 2);
|
---|
| 2020 | global $wpdb;
|
---|
| 2021 | $temp = $wpdb;
|
---|
| 2022 |
|
---|
| 2023 | $join = apply_filters('posts_join', '');
|
---|
| 2024 | $where = apply_filters('posts_where', '');
|
---|
| 2025 | $groupby = apply_filters('posts_groupby', '');
|
---|
| 2026 | if (!empty($groupby)) {
|
---|
| 2027 | $groupby = ' GROUP BY '.$groupby;
|
---|
| 2028 | }
|
---|
| 2029 | else {
|
---|
| 2030 | $groupby = ' GROUP BY '.$wpdb->posts.'.ID ';
|
---|
| 2031 | }
|
---|
| 2032 |
|
---|
| 2033 | $posts = $wpdb->get_results("
|
---|
| 2034 | SELECT ID, post_title
|
---|
| 2035 | FROM $wpdb->posts
|
---|
| 2036 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 2037 | ON $wpdb->posts.ID = pop.post_id
|
---|
| 2038 | $join
|
---|
| 2039 | WHERE YEAR(post_date) = '$year'
|
---|
| 2040 | AND MONTH(post_date) = '$month'
|
---|
| 2041 | AND post_status = 'publish'
|
---|
| 2042 | AND post_date < NOW()
|
---|
| 2043 | $where
|
---|
| 2044 | $groupby
|
---|
| 2045 | ORDER BY pop.total DESC
|
---|
| 2046 | LIMIT ".intval($limit)
|
---|
| 2047 | );
|
---|
| 2048 | if ($posts) {
|
---|
| 2049 | foreach ($posts as $post) {
|
---|
| 2050 | print(
|
---|
| 2051 | $before.'<a href="'.get_permalink($post->ID).'">'
|
---|
| 2052 | .$post->post_title.'</a>'.$after
|
---|
| 2053 | );
|
---|
| 2054 | }
|
---|
| 2055 | }
|
---|
| 2056 | else {
|
---|
| 2057 | print($before.'(none)'.$after);
|
---|
| 2058 | }
|
---|
| 2059 | $wpdb = $temp;
|
---|
| 2060 | }
|
---|
| 2061 |
|
---|
| 2062 | function show_top_ranked_in_last_days($limit, $before, $after, $days = 45) {
|
---|
| 2063 | global $wpdb;
|
---|
| 2064 | $temp = $wpdb;
|
---|
| 2065 |
|
---|
| 2066 | $join = apply_filters('posts_join', '');
|
---|
| 2067 | $where = apply_filters('posts_where', '');
|
---|
| 2068 | $groupby = apply_filters('posts_groupby', '');
|
---|
| 2069 | if (!empty($groupby)) { $groupby = ' GROUP BY '.$groupby; }
|
---|
| 2070 |
|
---|
| 2071 | $offset = 0;
|
---|
| 2072 | $compare = '>';
|
---|
| 2073 |
|
---|
| 2074 | $posts = $wpdb->get_results("
|
---|
| 2075 | SELECT ID, post_title
|
---|
| 2076 | FROM $wpdb->posts
|
---|
| 2077 | LEFT JOIN $wpdb->ak_popularity pop
|
---|
| 2078 | ON $wpdb->posts.ID = pop.post_id
|
---|
| 2079 | $join
|
---|
| 2080 | WHERE DATE_ADD($wpdb->posts.post_date, INTERVAL $days DAY) $compare DATE_ADD(NOW(), INTERVAL $offset DAY)
|
---|
| 2081 | AND post_status = 'publish'
|
---|
| 2082 | AND post_date < NOW()
|
---|
| 2083 | $where
|
---|
| 2084 | $groupby
|
---|
| 2085 | ORDER BY pop.total DESC
|
---|
| 2086 | LIMIT ".intval($limit)
|
---|
| 2087 | );
|
---|
| 2088 | if ($posts) {
|
---|
| 2089 | foreach ($posts as $post) {
|
---|
| 2090 | print(
|
---|
| 2091 | $before.'<a href="'.get_permalink($post->ID).'">'
|
---|
| 2092 | .$post->post_title.'</a>'.$after
|
---|
| 2093 | );
|
---|
| 2094 | }
|
---|
| 2095 | }
|
---|
| 2096 | else {
|
---|
| 2097 | print($before.'(none)'.$after);
|
---|
| 2098 | }
|
---|
| 2099 | $wpdb = $temp;
|
---|
| 2100 | }
|
---|
| 2101 |
|
---|
| 2102 | }
|
---|
| 2103 |
|
---|
| 2104 | // -- "HOOKABLE" FUNCTIONS
|
---|
| 2105 |
|
---|
| 2106 | function akpc_init() {
|
---|
| 2107 | global $wpdb, $akpc;
|
---|
| 2108 |
|
---|
| 2109 | $wpdb->ak_popularity = $wpdb->prefix.'ak_popularity';
|
---|
| 2110 | $wpdb->ak_popularity_options = $wpdb->prefix.'ak_popularity_options';
|
---|
| 2111 |
|
---|
| 2112 | $akpc = new ak_popularity_contest;
|
---|
| 2113 | $akpc->get_settings();
|
---|
| 2114 | }
|
---|
| 2115 |
|
---|
| 2116 | function akpc_view($content) {
|
---|
| 2117 | global $akpc;
|
---|
| 2118 | $akpc->record_view();
|
---|
| 2119 | return $content;
|
---|
| 2120 | }
|
---|
| 2121 |
|
---|
| 2122 | function akpc_feedback_comment() {
|
---|
| 2123 | global $akpc;
|
---|
| 2124 | $akpc->record_feedback('comment');
|
---|
| 2125 | }
|
---|
| 2126 |
|
---|
| 2127 | function akpc_comment_status($comment_id, $status = 'approved') {
|
---|
| 2128 | global $akpc;
|
---|
| 2129 | $akpc->edit_feedback($comment_id, 'status', $status);
|
---|
| 2130 | }
|
---|
| 2131 |
|
---|
| 2132 | function akpc_comment_delete($comment_id) {
|
---|
| 2133 | global $akpc;
|
---|
| 2134 | $akpc->edit_feedback($comment_id, 'delete');
|
---|
| 2135 | }
|
---|
| 2136 |
|
---|
| 2137 | function akpc_feedback_pingback() {
|
---|
| 2138 | global $akpc;
|
---|
| 2139 | $akpc->record_feedback('pingback');
|
---|
| 2140 | }
|
---|
| 2141 |
|
---|
| 2142 | function akpc_feedback_trackback() {
|
---|
| 2143 | global $akpc;
|
---|
| 2144 | $akpc->record_feedback('trackback');
|
---|
| 2145 | }
|
---|
| 2146 |
|
---|
| 2147 | function akpc_publish($post_id) {
|
---|
| 2148 | global $akpc;
|
---|
| 2149 | $akpc->create_post_record($post_id);
|
---|
| 2150 | }
|
---|
| 2151 |
|
---|
| 2152 | function akpc_post_delete($post_id) {
|
---|
| 2153 | global $akpc;
|
---|
| 2154 | $akpc->delete_post_record($post_id);
|
---|
| 2155 | }
|
---|
| 2156 |
|
---|
| 2157 | function akpc_options_form() {
|
---|
| 2158 | global $akpc;
|
---|
| 2159 | $akpc->options_form();
|
---|
| 2160 | }
|
---|
| 2161 |
|
---|
| 2162 | function akpc_view_stats() {
|
---|
| 2163 | global $akpc;
|
---|
| 2164 | $akpc->view_stats();
|
---|
| 2165 | }
|
---|
| 2166 |
|
---|
| 2167 | function akpc_plugin_action_links($links, $file) {
|
---|
| 2168 | $plugin_file = basename(__FILE__);
|
---|
| 2169 | if (basename($file) == $plugin_file) {
|
---|
| 2170 | $settings_link = '<a href="options-general.php?page='.$plugin_file.'">'.__('Settings', 'popularity-contest').'</a>';
|
---|
| 2171 | array_unshift($links, $settings_link);
|
---|
| 2172 | $reports_link = '<a href="index.php?page='.$plugin_file.'">'.__('Reports', 'popularity-contest').'</a>';
|
---|
| 2173 | array_unshift($links, $reports_link);
|
---|
| 2174 | }
|
---|
| 2175 | return $links;
|
---|
| 2176 | }
|
---|
| 2177 | add_filter('plugin_action_links', 'akpc_plugin_action_links', 10, 2);
|
---|
| 2178 |
|
---|
| 2179 | function akpc_options() {
|
---|
| 2180 | if (function_exists('add_options_page')) {
|
---|
| 2181 | add_options_page(
|
---|
| 2182 | __('Popularity Contest Options', 'popularity-contest')
|
---|
| 2183 | , __('Popularity', 'popularity-contest')
|
---|
| 2184 | , 10
|
---|
| 2185 | , basename(__FILE__)
|
---|
| 2186 | , 'akpc_options_form'
|
---|
| 2187 | );
|
---|
| 2188 | }
|
---|
| 2189 | if (function_exists('add_submenu_page')) {
|
---|
| 2190 | add_submenu_page(
|
---|
| 2191 | 'index.php'
|
---|
| 2192 | , __('Most Popular Posts', 'popularity-contest')
|
---|
| 2193 | , __('Most Popular Posts', 'popularity-contest')
|
---|
| 2194 | , 0
|
---|
| 2195 | , basename(__FILE__)
|
---|
| 2196 | , 'akpc_view_stats'
|
---|
| 2197 | );
|
---|
| 2198 | }
|
---|
| 2199 | }
|
---|
| 2200 | function akpc_options_css() {
|
---|
| 2201 | print('<link rel="stylesheet" type="text/css" href="'.site_url('?ak_action=akpc_css').'" />');
|
---|
| 2202 | }
|
---|
| 2203 | function akpc_widget_js() {
|
---|
| 2204 | echo '<script type="text/javascript" src="'.site_url('?ak_action=akpc_js').'"></script>';
|
---|
| 2205 | }
|
---|
| 2206 |
|
---|
| 2207 | // -- TEMPLATE FUNCTIONS
|
---|
| 2208 |
|
---|
| 2209 | function akpc_the_popularity($post_id = null) {
|
---|
| 2210 | global $akpc;
|
---|
| 2211 | if (!$post_id) {
|
---|
| 2212 | global $post;
|
---|
| 2213 | $post_id = $post->ID;
|
---|
| 2214 | }
|
---|
| 2215 | $akpc->show_post_rank($post_id);
|
---|
| 2216 | }
|
---|
| 2217 |
|
---|
| 2218 | function akpc_most_popular($limit = 10, $before = '<li>', $after = '</li>', $report = false, $echo = true) {
|
---|
| 2219 | global $akpc;
|
---|
| 2220 | if(!$report) {
|
---|
| 2221 | $akpc->show_top_ranked($limit, $before, $after);
|
---|
| 2222 | }
|
---|
| 2223 | else {
|
---|
| 2224 | return $akpc->show_report($report, $limit);
|
---|
| 2225 | }
|
---|
| 2226 | }
|
---|
| 2227 |
|
---|
| 2228 | /**
|
---|
| 2229 | * Show a single report
|
---|
| 2230 | * @var string $type - type of report to show
|
---|
| 2231 | * @var int $limit - number of results to display
|
---|
| 2232 | * @return mixed echo/array
|
---|
| 2233 | */
|
---|
| 2234 | function akpc_show_report($type = 'popular', $limit = 10, $exclude_pages = 'no', $custom = array(), $before_title = '<h3>', $after_title = '</h3>', $hide_title = false) {
|
---|
| 2235 | global $akpc;
|
---|
| 2236 | return $akpc->show_report($type, $limit, $exclude_pages, $custom, $before_title, $after_title, $hide_title);
|
---|
| 2237 | }
|
---|
| 2238 |
|
---|
| 2239 | /**
|
---|
| 2240 | * Get raw post data for a report type
|
---|
| 2241 | * @var string $type - type of report to show
|
---|
| 2242 | * @var int $limit - number of posts to display
|
---|
| 2243 | * @var array $custom - any custom report attributes needed
|
---|
| 2244 | * @return bool/array - returns false if no posts in report
|
---|
| 2245 | */
|
---|
| 2246 | function akpc_get_popular_posts_array($type, $limit, $custom = array()) {
|
---|
| 2247 | global $akpc;
|
---|
| 2248 | return $akpc->get_popular_posts($type, $limit, $custom);
|
---|
| 2249 | }
|
---|
| 2250 |
|
---|
| 2251 | function akpc_most_popular_in_cat($limit = 10, $before = '<li>', $after = '</li>', $cat_ID = '') {
|
---|
| 2252 | global $akpc;
|
---|
| 2253 | $akpc->show_top_ranked_in_cat($limit, $before, $after, $cat_ID);
|
---|
| 2254 | }
|
---|
| 2255 |
|
---|
| 2256 | function akpc_most_popular_in_month($limit = 10, $before = '<li>', $after = '</li>', $m = '') {
|
---|
| 2257 | global $akpc;
|
---|
| 2258 | $akpc->show_top_ranked_in_month($limit, $before, $after, $m);
|
---|
| 2259 | }
|
---|
| 2260 |
|
---|
| 2261 | function akpc_most_popular_in_last_days($limit = 10, $before = '<li>', $after = '</li>', $days = 45) {
|
---|
| 2262 | global $akpc;
|
---|
| 2263 | $akpc->show_top_ranked_in_last_days($limit, $before, $after, $days);
|
---|
| 2264 | }
|
---|
| 2265 |
|
---|
| 2266 | function akpc_content_pop($str) {
|
---|
| 2267 | global $akpc, $post;
|
---|
| 2268 | if (is_admin()) {
|
---|
| 2269 | return $str;
|
---|
| 2270 | }
|
---|
| 2271 | else if (is_feed()) {
|
---|
| 2272 | $str .= '<img src="'.site_url('?ak_action=api_record_view&id='.$post->ID.'&type=feed').'" alt="" />';
|
---|
| 2273 | }
|
---|
| 2274 | else {
|
---|
| 2275 | if (AKPC_USE_API) {
|
---|
| 2276 | $str .= '<script type="text/javascript">AKPC_IDS += "'.$post->ID.',";</script>';
|
---|
| 2277 | }
|
---|
| 2278 | $show = apply_filters('akpc_display_popularity', $akpc->show_pop, $post);
|
---|
| 2279 | if (!get_post_meta($post->ID, 'hide_popularity', true) && $show) {
|
---|
| 2280 | $str .= '<p class="akpc_pop">'.$akpc->get_post_rank($post->ID).'</p>';
|
---|
| 2281 | }
|
---|
| 2282 | }
|
---|
| 2283 | return $str;
|
---|
| 2284 | }
|
---|
| 2285 |
|
---|
| 2286 | function akpc_excerpt_compat_pre($output) {
|
---|
| 2287 | remove_filter('the_content', 'akpc_content_pop');
|
---|
| 2288 | return $output;
|
---|
| 2289 | }
|
---|
| 2290 | add_filter('get_the_excerpt', 'akpc_excerpt_compat_pre', 1);
|
---|
| 2291 |
|
---|
| 2292 | function akpc_excerpt_compat_post($output) {
|
---|
| 2293 | add_filter('the_content', 'akpc_content_pop');
|
---|
| 2294 | return $output;
|
---|
| 2295 | }
|
---|
| 2296 | add_filter('get_the_excerpt', 'akpc_excerpt_compat_post', 999);
|
---|
| 2297 |
|
---|
| 2298 | // -- WIDGET
|
---|
| 2299 |
|
---|
| 2300 | /**
|
---|
| 2301 | * do widget init functionality
|
---|
| 2302 | */
|
---|
| 2303 | function akpc_widget_init() {
|
---|
| 2304 | if(!function_exists('register_sidebar_widget') || !function_exists('register_widget_control')) { return; }
|
---|
| 2305 |
|
---|
| 2306 | // get existing widget options
|
---|
| 2307 | $options = maybe_unserialize(get_option('akpc_widget_options'));
|
---|
| 2308 |
|
---|
| 2309 | // if no existing widgets, fake one
|
---|
| 2310 | if(!is_array($options)) { $options[-1] = array('title'=>'','type'=>'','limit'=>''); }
|
---|
| 2311 |
|
---|
| 2312 | // base set of options for widget type
|
---|
| 2313 | $base_options = array('classname' => 'akpc-widget', 'description' => __('Show popular posts as ranked by Popularity Contest', 'popularity-contest'));
|
---|
| 2314 | $widget_name = __('Popularity Contest', 'popularity-contest');
|
---|
| 2315 |
|
---|
| 2316 | // register widgets & controls for each existing widget
|
---|
| 2317 | foreach($options as $number => $option) {
|
---|
| 2318 | $widget_id = 'akpc-widget-'.($number === -1 ? 1 : $number); // not needed, but avoids duplicate dashes for new widgets
|
---|
| 2319 | wp_register_sidebar_widget($widget_id, $widget_name,'akpc_widget', $base_options, array('number' => $number));
|
---|
| 2320 | wp_register_widget_control($widget_id, $widget_name,'akpc_widget_control', array('id_base' => 'akpc-widget'), array('number' => $number));
|
---|
| 2321 | }
|
---|
| 2322 | }
|
---|
| 2323 |
|
---|
| 2324 | /**
|
---|
| 2325 | * Widget display
|
---|
| 2326 | */
|
---|
| 2327 | function akpc_widget($args, $widget_args = 1) {
|
---|
| 2328 | // find out which widget we're working on
|
---|
| 2329 | if(is_numeric($widget_args)) {
|
---|
| 2330 | $widget_args = array('number' => $widget_args);
|
---|
| 2331 | }
|
---|
| 2332 | $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
|
---|
| 2333 | extract($widget_args, EXTR_SKIP);
|
---|
| 2334 |
|
---|
| 2335 | // get passed args
|
---|
| 2336 | extract($args);
|
---|
| 2337 |
|
---|
| 2338 | // get saved options
|
---|
| 2339 | $options = maybe_unserialize(get_option('akpc_widget_options'));
|
---|
| 2340 | extract($options[$number]);
|
---|
| 2341 | $type = (!isset($type) || empty($type)) ? 'popular' : $type;
|
---|
| 2342 | $days = (!isset($days) || empty($days)) ? '' : intval($days);
|
---|
| 2343 | $limit = (!isset($limit) || empty($limit)) ? 10 : intval($limit);
|
---|
| 2344 | $title_string = (!isset($title) || empty($title)) ? '' : $before_title.htmlspecialchars(stripslashes($title)).$after_title;
|
---|
| 2345 | $exclude_pages = (!isset($exclude_pages) || empty($exclude_pages)) ? 'no' : $exclude_pages;
|
---|
| 2346 | $custom = array();
|
---|
| 2347 |
|
---|
| 2348 | // Check to see if we have the custom type of "last_n" and pass the day amount in the custom array
|
---|
| 2349 | if ($type == 'last_n') {
|
---|
| 2350 | $custom['days'] = $days;
|
---|
| 2351 | }
|
---|
| 2352 |
|
---|
| 2353 | // output
|
---|
| 2354 | echo $before_widget.$title_string;
|
---|
| 2355 | akpc_show_report($type, $limit, $exclude_pages, $custom, '<h4>', '<h4>', true);
|
---|
| 2356 | echo $after_widget;
|
---|
| 2357 | }
|
---|
| 2358 |
|
---|
| 2359 | /**
|
---|
| 2360 | * Controls for creating and saving multiple PC widgets
|
---|
| 2361 | */
|
---|
| 2362 | function akpc_widget_control($widget_args = 1) {
|
---|
| 2363 | global $wp_registered_widgets;
|
---|
| 2364 | static $updated = false; // set this after updating so update only happens once
|
---|
| 2365 |
|
---|
| 2366 | // get individual widget ID
|
---|
| 2367 | if(is_numeric($widget_args)) {
|
---|
| 2368 | $widget_args = array('number' => $widget_args);
|
---|
| 2369 | }
|
---|
| 2370 | $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
|
---|
| 2371 | extract( $widget_args, EXTR_SKIP );
|
---|
| 2372 |
|
---|
| 2373 | // get existing widget options
|
---|
| 2374 | $options = maybe_unserialize(get_option('akpc_widget_options'));
|
---|
| 2375 |
|
---|
| 2376 | /* UPDATE OPTIONS ON PRESENCE OF POST DATA */
|
---|
| 2377 | if(isset($_POST['akpc']) && isset($_POST['sidebar'])) {
|
---|
| 2378 | // get current sidebar data
|
---|
| 2379 | $sidebar = strval($_POST['sidebar']);
|
---|
| 2380 | $sidebar_widgets = wp_get_sidebars_widgets();
|
---|
| 2381 | $this_sidebar = isset($sidebar_widgets[$sidebar]) ? $sidebar_widgets[$sidebar] : array();
|
---|
| 2382 |
|
---|
| 2383 | // check to see if this sidebar item needs to be deleted
|
---|
| 2384 | // code pulled directly from the Plain Text widget native to wordpress
|
---|
| 2385 | foreach ($this_sidebar as $_widget_id) {
|
---|
| 2386 | if ('akpc_widget' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number'])) {
|
---|
| 2387 | $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
|
---|
| 2388 | // if we had a previously registered widget ID but nothing in the post args, the widget was removed, so kill it
|
---|
| 2389 | if(!in_array("akpc-widget-$widget_number", $_POST['widget-id'])) {
|
---|
| 2390 | unset($options[$widget_number]);
|
---|
| 2391 | }
|
---|
| 2392 | }
|
---|
| 2393 | }
|
---|
| 2394 |
|
---|
| 2395 | // save this widget's options
|
---|
| 2396 | foreach((array) $_POST['akpc'] as $widget_number => $widget_options) {
|
---|
| 2397 | $options[$widget_number]['title'] = $widget_options['title'];
|
---|
| 2398 | $options[$widget_number]['type'] = $widget_options['type'];
|
---|
| 2399 | $options[$widget_number]['days'] = intval($widget_options['days']);
|
---|
| 2400 | $options[$widget_number]['limit'] = intval($widget_options['limit']);
|
---|
| 2401 | $options[$widget_number]['exclude_pages'] = $widget_options['exclude_pages'];
|
---|
| 2402 | }
|
---|
| 2403 | update_option('akpc_widget_options',serialize($options));
|
---|
| 2404 | $updated = true;
|
---|
| 2405 | }
|
---|
| 2406 |
|
---|
| 2407 | // new widget prep
|
---|
| 2408 | if($number == -1) {
|
---|
| 2409 | $options[$number] = array('title'=>'','type'=>'','days'=>'','limit'=>'');
|
---|
| 2410 | $number = '%i%'; // required for new widgets so WP auto-generates a new ID
|
---|
| 2411 | }
|
---|
| 2412 |
|
---|
| 2413 | /* START CONTROLS OUTPUT */
|
---|
| 2414 | // Widget Title
|
---|
| 2415 | echo '<p>
|
---|
| 2416 | <label for="akpc['.$number.'][title]">'.__('Widget Title', 'popularity-contest').'</label>
|
---|
| 2417 | <input type="text" id="akpc['.$number.'][title]" name="akpc['.$number.'][title]" value="'.htmlspecialchars(stripslashes($options[$number]['title'])).'" />
|
---|
| 2418 | </p>'.PHP_EOL;
|
---|
| 2419 |
|
---|
| 2420 | // report type select list
|
---|
| 2421 | $report_types = array('popular' => __('Most Popular', 'popularity-contest'),
|
---|
| 2422 | 'pop_by_category' => __('By Category', 'popularity-contest'),
|
---|
| 2423 | 'category_popularity' => __('Average by Category', 'popularity-contest'),
|
---|
| 2424 | 'last_30' => __('Last 30 Days', 'popularity-contest'),
|
---|
| 2425 | 'last_60' => __('Last 60 Days', 'popularity-contest'),
|
---|
| 2426 | 'last_90' => __('Last 90 Days', 'popularity-contest'),
|
---|
| 2427 | 'last_n' => __('Last (n) Days', 'popularity-contest'),
|
---|
| 2428 | '365_plus' => __('Older than 1 Year', 'popularity-contest'),
|
---|
| 2429 | 'year' => __('Average by Year', 'popularity-contest'),
|
---|
| 2430 | 'views_wo_feedback' => __('Views w/o Feedback', 'popularity-contest'),
|
---|
| 2431 | 'most_feedback' => __('Most Feedback', 'popularity-contest'),
|
---|
| 2432 | 'most_comments' => __('Most Commented', 'popularity-contest'),
|
---|
| 2433 | 'most_feed_views' => __('Feed Views', 'popularity-contest'),
|
---|
| 2434 | 'most_home_views' => __('Home Page Views', 'popularity-contest'),
|
---|
| 2435 | 'most_archive_views' => __('Archive Views', 'popularity-contest'),
|
---|
| 2436 | 'most_single_views' => __('Permalink Views', 'popularity-contest'),
|
---|
| 2437 | 'most_pingbacks' => __('Pingbacks', 'popularity-contest'),
|
---|
| 2438 | 'most_trackbacks' => __('Trackbacks', 'popularity-contest')
|
---|
| 2439 | );
|
---|
| 2440 | echo '<p>
|
---|
| 2441 | <label for="akpc['.$number.'][type]">'.__('Report Type', 'popularity-contest').'</label>
|
---|
| 2442 | <select id="akpc['.$number.'][type]" name="akpc['.$number.'][type]" class="akpc_pop_widget_type">'.PHP_EOL;
|
---|
| 2443 | foreach($report_types as $key => $value) {
|
---|
| 2444 | echo '<option value="'.$key.'"'.($key == $options[$number]['type'] ? ' selected="selected"' : '').'>'.$value.'</option>'.PHP_EOL;
|
---|
| 2445 | }
|
---|
| 2446 | echo '</select>
|
---|
| 2447 | </p>'.PHP_EOL;
|
---|
| 2448 | // Number of days to get data from
|
---|
| 2449 | $hide_days = '';
|
---|
| 2450 | if ($options[$number]['type'] != 'last_n' || (!is_int($options[$number]['days']) && $options[$number]['days'] != 0)) {
|
---|
| 2451 | $hide_days = ' style="display:none;"';
|
---|
| 2452 | }
|
---|
| 2453 | echo '<p class="akpc_pop_widget_days"'.$hide_days.'>
|
---|
| 2454 | <label for="akpc['.$number.'][days]">'.__('Number of days', 'popularity-contest').': </label>
|
---|
| 2455 | <input type="text" id="akpc['.$number.'][days]" name="akpc['.$number.'][days]" size="3" value="'.$options[$number]['days'].'" />
|
---|
| 2456 | </p>'.PHP_EOL;
|
---|
| 2457 |
|
---|
| 2458 | // number of posts to display
|
---|
| 2459 | echo '<p>
|
---|
| 2460 | <label for="akpc['.$number.'][limit]">'.__('Number of posts to display', 'popularity-contest').': </label>
|
---|
| 2461 | <input type="text" id="akpc['.$number.'][limit]" name="akpc['.$number.'][limit]" size="3" value="'.$options[$number]['limit'].'" />
|
---|
| 2462 | </p>'.PHP_EOL;
|
---|
| 2463 | // exclude pages
|
---|
| 2464 | echo '<p>
|
---|
| 2465 | <label for="akpc['.$number.'][limit]">'.__('Exclude pages', 'popularity-contest').': </label>
|
---|
| 2466 | <select id="akpc['.$number.'][exclude_pages]" name="akpc['.$number.'][exclude_pages]">
|
---|
| 2467 | <option value="yes"'.('yes' == $options[$number]['exclude_pages'] ? ' selected="selected"' : '').'>Yes</option>
|
---|
| 2468 | <option value="no"'.('no' == $options[$number]['exclude_pages'] ? ' selected="selected"' : '').'>No</option>
|
---|
| 2469 | </select>
|
---|
| 2470 | </p>'.PHP_EOL;
|
---|
| 2471 | // submit hidden field, really necessary? may be needed for legacy compatability
|
---|
| 2472 | echo '<input type="hidden" id="akpc['.$number.'][submit]" name="akpc['.$number.'][submit]" value="1" />';
|
---|
| 2473 | }
|
---|
| 2474 |
|
---|
| 2475 | function akpc_show_error($type, $info = null) {
|
---|
| 2476 | switch ($type) {
|
---|
| 2477 | case 'tag_report_not_found':
|
---|
| 2478 | echo '<div class="akpc_report"><div class="akpc_padded">'.sprintf(__('Sorry, could not find the requested tag: %s', 'popularity-contest'), htmlspecialchars($info)).'</div></div>';
|
---|
| 2479 | break;
|
---|
| 2480 | case 'tag_report_already_added':
|
---|
| 2481 | echo '<div class="akpc_report"><div class="akpc_padded">'.sprintf(__('Looks like you already have a report for tag: %s', 'popularity-contest'), htmlspecialchars($info)).'</div></div>';
|
---|
| 2482 | break;
|
---|
| 2483 | }
|
---|
| 2484 | }
|
---|
| 2485 |
|
---|
| 2486 | // -- API FUNCTIONS
|
---|
| 2487 |
|
---|
| 2488 | function akpc_api_head_javascript() {
|
---|
| 2489 | echo '
|
---|
| 2490 | <script type="text/javascript">var AKPC_IDS = "";</script>
|
---|
| 2491 | ';
|
---|
| 2492 | }
|
---|
| 2493 |
|
---|
| 2494 | function akpc_api_footer_javascript() {
|
---|
| 2495 | if (function_exists('akpc_is_searcher') && akpc_is_searcher()) {
|
---|
| 2496 | $type = 'searcher';
|
---|
| 2497 | }
|
---|
| 2498 | else if (is_archive() && !is_category()) {
|
---|
| 2499 | $type = 'archive';
|
---|
| 2500 | }
|
---|
| 2501 | else if (is_category()) {
|
---|
| 2502 | $type = 'category';
|
---|
| 2503 | }
|
---|
| 2504 | else if (is_single()) {
|
---|
| 2505 | $type = 'single';
|
---|
| 2506 | }
|
---|
| 2507 | else if (is_tag()) {
|
---|
| 2508 | $type = 'tag';
|
---|
| 2509 | }
|
---|
| 2510 | else if (is_page()) {
|
---|
| 2511 | $type = 'page';
|
---|
| 2512 | }
|
---|
| 2513 | else {
|
---|
| 2514 | $type = 'home';
|
---|
| 2515 | }
|
---|
| 2516 | echo '
|
---|
| 2517 | <script type="text/javascript">
|
---|
| 2518 | jQuery(function() {
|
---|
| 2519 |
|
---|
| 2520 | jQuery.post("index.php",{ak_action:"api_record_view", ids: AKPC_IDS, type:"'.$type.'"}, false, "json");
|
---|
| 2521 | });
|
---|
| 2522 | </script>
|
---|
| 2523 | ';
|
---|
| 2524 | }
|
---|
| 2525 |
|
---|
| 2526 | function akpc_is_searcher() {
|
---|
| 2527 | global $akpc;
|
---|
| 2528 |
|
---|
| 2529 | $temp = parse_url($_SERVER['HTTP_REFERER']);
|
---|
| 2530 | $referring_domain = $temp['host'];
|
---|
| 2531 | $searchers = ereg_replace("\n|\r|\r\n|\n\r", " ", $akpc->searcher_names);
|
---|
| 2532 | $searchers = explode(" ", $searchers);
|
---|
| 2533 | foreach ($searchers as $searcher) {
|
---|
| 2534 | if ($referring_domain == $searcher) { return true; }
|
---|
| 2535 | }
|
---|
| 2536 | return false;
|
---|
| 2537 | }
|
---|
| 2538 |
|
---|
| 2539 | function akpc_api_record_view($id = null) {
|
---|
| 2540 | global $wpdb;
|
---|
| 2541 | $akpc = new ak_popularity_contest;
|
---|
| 2542 | $akpc->get_settings();
|
---|
| 2543 |
|
---|
| 2544 | $ids = array();
|
---|
| 2545 | if ($id) {
|
---|
| 2546 | $ids[] = $id;
|
---|
| 2547 | }
|
---|
| 2548 | else {
|
---|
| 2549 | foreach (explode(',', $_POST['ids']) as $id) {
|
---|
| 2550 | if ($id = intval($id)) {
|
---|
| 2551 | $ids[] = $id;
|
---|
| 2552 | }
|
---|
| 2553 | }
|
---|
| 2554 | }
|
---|
| 2555 | array_unique($ids);
|
---|
| 2556 |
|
---|
| 2557 | if (!empty($_GET['type'])) {
|
---|
| 2558 | $type = $_GET['type'];
|
---|
| 2559 | $response = 'img';
|
---|
| 2560 | }
|
---|
| 2561 | else {
|
---|
| 2562 | $type = $_POST['type'];
|
---|
| 2563 | $response = 'json';
|
---|
| 2564 | }
|
---|
| 2565 | if (count($ids) && $akpc->record_view(true, $ids, $type)) {
|
---|
| 2566 | $json = '{"result":true,"ids":"'.implode(',',$ids).'","type":"'.sanitize_title($type).'"}';
|
---|
| 2567 | }
|
---|
| 2568 | else {
|
---|
| 2569 | $json = '{"result":false,"ids":"'.implode(',',$ids).'","type":"'.sanitize_title($type).'"}';
|
---|
| 2570 | }
|
---|
| 2571 | switch ($response) {
|
---|
| 2572 | case 'img':
|
---|
| 2573 | header('Content-type: image/jpeg');
|
---|
| 2574 | break;
|
---|
| 2575 | case 'json':
|
---|
| 2576 | header('Content-type: application/json');
|
---|
| 2577 | echo $json;
|
---|
| 2578 | break;
|
---|
| 2579 | }
|
---|
| 2580 | exit();
|
---|
| 2581 | }
|
---|
| 2582 |
|
---|
| 2583 | // -- HANDLE ACTIONS
|
---|
| 2584 |
|
---|
| 2585 | function akpc_request_handler() {
|
---|
| 2586 | if (!empty($_POST['ak_action'])) {
|
---|
| 2587 | switch($_POST['ak_action']) {
|
---|
| 2588 | case 'update_popularity_values':
|
---|
| 2589 | if (current_user_can('manage_options')) {
|
---|
| 2590 | $akpc = new ak_popularity_contest;
|
---|
| 2591 | $akpc->get_settings();
|
---|
| 2592 | $akpc->update_settings();
|
---|
| 2593 | }
|
---|
| 2594 | break;
|
---|
| 2595 | case 'api_record_view':
|
---|
| 2596 | akpc_api_record_view();
|
---|
| 2597 | break;
|
---|
| 2598 | case 'akpc_add_tag':
|
---|
| 2599 | if (!empty($_POST['tag']) && current_user_can('manage_options')) {
|
---|
| 2600 | $akpc = new ak_popularity_contest;
|
---|
| 2601 | if (strpos($_POST['tag'], ',')) {
|
---|
| 2602 | $added_tags = explode(',', $_POST['tag']);
|
---|
| 2603 | }
|
---|
| 2604 | else {
|
---|
| 2605 | $added_tags = array($_POST['tag']);
|
---|
| 2606 | }
|
---|
| 2607 | $tag_reports = get_option('akpc_tag_reports');
|
---|
| 2608 | if ($tag_reports == '') {
|
---|
| 2609 | add_option('akpc_tag_reports');
|
---|
| 2610 | }
|
---|
| 2611 | $tags = maybe_unserialize($tag_reports);
|
---|
| 2612 | if (!is_array($tags)) {
|
---|
| 2613 | $tags = array();
|
---|
| 2614 | }
|
---|
| 2615 | foreach ($added_tags as $tag) {
|
---|
| 2616 | $tag = sanitize_title_with_dashes(trim($tag));
|
---|
| 2617 | if (!empty($tag)) {
|
---|
| 2618 | if (in_array($tag, $tags)) {
|
---|
| 2619 | akpc_show_error('tag_report_already_added', $tag);
|
---|
| 2620 | }
|
---|
| 2621 | else if ($term = get_term_by('slug', $tag, 'post_tag')) {
|
---|
| 2622 | $tags[] = $tag;
|
---|
| 2623 | $akpc->show_report('tag', 10, 'yes', array('term_id' => $term->term_id, 'term_name' => $term->name));
|
---|
| 2624 | }
|
---|
| 2625 | else {
|
---|
| 2626 | akpc_show_error('tag_report_not_found', $tag);
|
---|
| 2627 | }
|
---|
| 2628 | }
|
---|
| 2629 | }
|
---|
| 2630 | $tags = array_unique($tags);
|
---|
| 2631 | update_option('akpc_tag_reports', $tags);
|
---|
| 2632 | }
|
---|
| 2633 | die();
|
---|
| 2634 | break;
|
---|
| 2635 | case 'akpc_remove_tag':
|
---|
| 2636 | if (!empty($_POST['tag']) && current_user_can('manage_options')) {
|
---|
| 2637 | $tag = sanitize_title(trim($_POST['tag']));
|
---|
| 2638 | if (!empty($tag)) {
|
---|
| 2639 | $tags = maybe_unserialize(get_option('akpc_tag_reports'));
|
---|
| 2640 | if (is_array($tags) && count($tags)) {
|
---|
| 2641 | $new_tags = array();
|
---|
| 2642 | foreach ($tags as $existing_tag) {
|
---|
| 2643 | if ($existing_tag != $tag) {
|
---|
| 2644 | $new_tags[] = $existing_tag;
|
---|
| 2645 | }
|
---|
| 2646 | }
|
---|
| 2647 | $tags = array_unique($new_tags);
|
---|
| 2648 | update_option('akpc_tag_reports', $tags);
|
---|
| 2649 | }
|
---|
| 2650 | }
|
---|
| 2651 | }
|
---|
| 2652 | die();
|
---|
| 2653 | break;
|
---|
| 2654 | }
|
---|
| 2655 | }
|
---|
| 2656 | if (!empty($_GET['ak_action'])) {
|
---|
| 2657 | switch($_GET['ak_action']) {
|
---|
| 2658 | case 'api_record_view':
|
---|
| 2659 | if (isset($_GET['id']) && $id = intval($_GET['id'])) {
|
---|
| 2660 | akpc_api_record_view($id);
|
---|
| 2661 | }
|
---|
| 2662 | break;
|
---|
| 2663 | case 'recount_feedback':
|
---|
| 2664 | if (current_user_can('manage_options')) {
|
---|
| 2665 | $akpc = new ak_popularity_contest;
|
---|
| 2666 | $akpc->get_settings();
|
---|
| 2667 | $akpc->recount_feedback();
|
---|
| 2668 | }
|
---|
| 2669 | break;
|
---|
| 2670 | case 'akpc_css':
|
---|
| 2671 | header("Content-type: text/css");
|
---|
| 2672 | ?>
|
---|
| 2673 | .ak_wrap {
|
---|
| 2674 | padding-bottom: 40px;
|
---|
| 2675 | }
|
---|
| 2676 | #akpc_most_popular {
|
---|
| 2677 | height: 250px;
|
---|
| 2678 | overflow: auto;
|
---|
| 2679 | margin-bottom: 10px;
|
---|
| 2680 | }
|
---|
| 2681 | #akpc_most_popular .alternate {
|
---|
| 2682 | background: #efefef;
|
---|
| 2683 | }
|
---|
| 2684 | #akpc_most_popular td.right, #akpc_options_link {
|
---|
| 2685 | text-align: right;
|
---|
| 2686 | }
|
---|
| 2687 | #akpc_most_popular td {
|
---|
| 2688 | padding: 3px;
|
---|
| 2689 | }
|
---|
| 2690 | #akpc_most_popular td a {
|
---|
| 2691 | border: 0;
|
---|
| 2692 | }
|
---|
| 2693 | .akpc_report {
|
---|
| 2694 | float: left;
|
---|
| 2695 | margin: 5px 30px 20px 0;
|
---|
| 2696 | width: 220px;
|
---|
| 2697 | }
|
---|
| 2698 | .akpc_report h3 {
|
---|
| 2699 | border-bottom: 1px solid #999;
|
---|
| 2700 | color #333;
|
---|
| 2701 | margin: 0 0 4px 0;
|
---|
| 2702 | padding: 0 0 2px 0;
|
---|
| 2703 | }
|
---|
| 2704 | .akpc_report ol {
|
---|
| 2705 | margin: 0;
|
---|
| 2706 | padding: 0 0 0 30px;
|
---|
| 2707 | }
|
---|
| 2708 | .akpc_report ol li span {
|
---|
| 2709 | float: right;
|
---|
| 2710 | }
|
---|
| 2711 | .akpc_report ol li a {
|
---|
| 2712 | border: 0;
|
---|
| 2713 | display: block;
|
---|
| 2714 | margin: 0 30px 0 0;
|
---|
| 2715 | }
|
---|
| 2716 | .clear {
|
---|
| 2717 | clear: both;
|
---|
| 2718 | float: none;
|
---|
| 2719 | }
|
---|
| 2720 | #akpc_template_tags dl {
|
---|
| 2721 | margin-left: 10px;
|
---|
| 2722 | }
|
---|
| 2723 | #akpc_template_tags dl dt {
|
---|
| 2724 | font-weight: bold;
|
---|
| 2725 | margin: 0 0 5px 0;
|
---|
| 2726 | }
|
---|
| 2727 | #akpc_template_tags dl dd {
|
---|
| 2728 | margin: 0 0 15px 0;
|
---|
| 2729 | padding: 0 0 0 15px;
|
---|
| 2730 | }
|
---|
| 2731 | #akpc_options th {
|
---|
| 2732 | font-weight: normal;
|
---|
| 2733 | text-align: left;
|
---|
| 2734 | }
|
---|
| 2735 | #akpc_options input.number {
|
---|
| 2736 | width: 40px;
|
---|
| 2737 | }
|
---|
| 2738 | #akpc_report_tag_form {
|
---|
| 2739 | display: inline;
|
---|
| 2740 | padding-left: 20px;
|
---|
| 2741 | }
|
---|
| 2742 | #akpc_report_tag_form label, .akpc_saving {
|
---|
| 2743 | font: normal normal 12px "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
---|
| 2744 | }
|
---|
| 2745 | .akpc_saving {
|
---|
| 2746 | color: #999;
|
---|
| 2747 | display: none;
|
---|
| 2748 | padding: 5px;
|
---|
| 2749 | }
|
---|
| 2750 | #akpc_tag_reports h3 {
|
---|
| 2751 | padding-right: 20px;
|
---|
| 2752 | }
|
---|
| 2753 | #akpc_tag_reports a.remove {
|
---|
| 2754 | float: right;
|
---|
| 2755 | }
|
---|
| 2756 | #akpc_tag_reports .akpc_padded {
|
---|
| 2757 | color: #999;
|
---|
| 2758 | padding: 20px;
|
---|
| 2759 | text-align: center;
|
---|
| 2760 | }
|
---|
| 2761 | #akpc_tag_reports .none {
|
---|
| 2762 | background: #eee;
|
---|
| 2763 | text-align: left;
|
---|
| 2764 | }
|
---|
| 2765 | <?php
|
---|
| 2766 | die();
|
---|
| 2767 | break;
|
---|
| 2768 | case 'akpc_js':
|
---|
| 2769 | header('Content-type: text/javascript');
|
---|
| 2770 | ?>
|
---|
| 2771 | var cf_widget_count = 0;
|
---|
| 2772 | jQuery(function($) {
|
---|
| 2773 | akpc_widget_js();
|
---|
| 2774 | setInterval('akpc_widget_check()', 500);
|
---|
| 2775 | });
|
---|
| 2776 | akpc_widget_js = function() {
|
---|
| 2777 | jQuery('select.akpc_pop_widget_type').unbind().change(function() {
|
---|
| 2778 | if (jQuery(this).val() == 'last_n') {
|
---|
| 2779 | jQuery(this).parents('div.widget-content, div.widget-control').find('p.akpc_pop_widget_days:hidden').slideDown();
|
---|
| 2780 | }
|
---|
| 2781 | else {
|
---|
| 2782 | jQuery(this).parents('div.widget-content, div.widget-control').find('p.akpc_pop_widget_days:visible').slideUp();
|
---|
| 2783 | }
|
---|
| 2784 | });
|
---|
| 2785 | }
|
---|
| 2786 | akpc_widget_check = function() {
|
---|
| 2787 | var current_count = jQuery('#widgets-right .widget-inside:visible, .widget-control-list .widget-list-control-item').size();
|
---|
| 2788 | if (current_count != cf_widget_count) {
|
---|
| 2789 | akpc_widget_js();
|
---|
| 2790 | cf_widget_count = current_count;
|
---|
| 2791 | }
|
---|
| 2792 | }
|
---|
| 2793 | <?php
|
---|
| 2794 | die();
|
---|
| 2795 | break;
|
---|
| 2796 | }
|
---|
| 2797 | }
|
---|
| 2798 | }
|
---|
| 2799 |
|
---|
| 2800 | // -- GET HOOKED
|
---|
| 2801 |
|
---|
| 2802 | if (is_admin() && $_GET['page'] == 'popularity-contest.php') {
|
---|
| 2803 | wp_enqueue_script('suggest');
|
---|
| 2804 | }
|
---|
| 2805 |
|
---|
| 2806 | add_filter('the_content', 'akpc_content_pop');
|
---|
| 2807 |
|
---|
| 2808 | add_action('init', 'akpc_init', 1);
|
---|
| 2809 | add_action('init', 'akpc_request_handler', 2);
|
---|
| 2810 | add_action('admin_menu', 'akpc_options');
|
---|
| 2811 | add_action('admin_head', 'akpc_options_css');
|
---|
| 2812 |
|
---|
| 2813 |
|
---|
| 2814 | // Use the global pagenow so we only load the Widget JS on the widget page
|
---|
| 2815 | global $pagenow;
|
---|
| 2816 | if ($pagenow == 'widgets.php') {
|
---|
| 2817 | add_action('admin_head', 'akpc_widget_js');
|
---|
| 2818 | }
|
---|
| 2819 |
|
---|
| 2820 | if (AKPC_USE_API == 0) {
|
---|
| 2821 | // work cache unfriendly
|
---|
| 2822 | add_action('the_content', 'akpc_view');
|
---|
| 2823 | }
|
---|
| 2824 | else {
|
---|
| 2825 | // do view updates via API
|
---|
| 2826 | add_action('wp_head','akpc_api_head_javascript');
|
---|
| 2827 | add_action('wp_footer','akpc_api_footer_javascript');
|
---|
| 2828 | wp_enqueue_script('jquery');
|
---|
| 2829 | }
|
---|
| 2830 | add_action('comment_post', 'akpc_feedback_comment');
|
---|
| 2831 | add_action('pingback_post', 'akpc_feedback_pingback');
|
---|
| 2832 | add_action('trackback_post', 'akpc_feedback_trackback');
|
---|
| 2833 |
|
---|
| 2834 | add_action('publish_post', 'akpc_publish');
|
---|
| 2835 | add_action('delete_post', 'akpc_post_delete');
|
---|
| 2836 |
|
---|
| 2837 | add_action('publish_page', 'akpc_publish');
|
---|
| 2838 | add_action('delete_page', 'akpc_post_delete');
|
---|
| 2839 |
|
---|
| 2840 | add_action('wp_set_comment_status', 'akpc_comment_status', 10, 2);
|
---|
| 2841 | add_action('delete_comment', 'akpc_comment_delete');
|
---|
| 2842 |
|
---|
| 2843 | add_action('plugins_loaded','akpc_widget_init');
|
---|
| 2844 |
|
---|
| 2845 | endif; // LOADED CHECK
|
---|
| 2846 |
|
---|
| 2847 | ?>
|
---|