diff --git a/wp-content/plugins/wordpress-popular-post/admin.php b/wp-content/plugins/wordpress-popular-post/admin.php new file mode 100644 index 0000000000000000000000000000000000000000..0c253dc9e4c958c23030bc21bbdc9cf944bf4060 --- /dev/null +++ b/wp-content/plugins/wordpress-popular-post/admin.php @@ -0,0 +1,717 @@ +<?php + if (basename($_SERVER['SCRIPT_NAME']) == basename(__FILE__)) exit('Please do not load this page directly'); + + $wpp_settings_def = array( + 'stats' => array( + 'order_by' => 'comments', + 'limit' => 10 + ), + 'tools' => array( + 'ajax' => false, + 'css' => true, + 'stylesheet' => true, + 'thumbnail' => array( + 'source' => 'featured', + 'field' => '' + ) + ) + ); + + $ops = get_option('wpp_settings_config'); + + if (!$ops) { + add_option('wpp_settings_config', $wpp_settings_def); + $ops = $wpp_settings_def; + } + + if ( isset($_POST['section']) ) { + if ($_POST['section'] == "stats") { + $ops['stats']['order_by'] = $_POST['stats_order']; + $ops['stats']['limit'] = (is_numeric($_POST['stats_limit']) && $_POST['stats_limit'] > 0) ? $_POST['stats_limit'] : 10; + + update_option('wpp_settings_config', $ops); + echo "<div class=\"updated\"><p><strong>" . __('Settings saved.', 'wordpress-popular-posts' ) . "</strong></p></div>"; + + } else if ($_POST['section'] == "tools") { + + if ($_POST['thumb_source'] == "custom_field" && (!isset($_POST['thumb_field']) || empty($_POST['thumb_field']))) { + echo '<div id="wpp-message" class="error fade"><p>'.__('Please provide the name of your custom field.', 'wordpress-popular-posts').'</p></div>'; + } else { + $ops['tools']['thumbnail']['source'] = $_POST['thumb_source']; + $ops['tools']['thumbnail']['field'] = $_POST['thumb_field']; + + update_option('wpp_settings_config', $ops); + echo "<div class=\"updated\"><p><strong>" . __('Settings saved.', 'wordpress-popular-posts' ) . "</strong></p></div>"; + } + } else if ($_POST['section'] == "ajax") { + $ops['tools']['ajax'] = $_POST['ajax']; + + update_option('wpp_settings_config', $ops); + echo "<div class=\"updated\"><p><strong>" . __('Settings saved.', 'wordpress-popular-posts' ) . "</strong></p></div>"; + } else if ($_POST['section'] == "css") { + $ops['tools']['css'] = $_POST['css']; + + //print_r($ops); + + update_option('wpp_settings_config', $ops); + echo "<div class=\"updated\"><p><strong>" . __('Settings saved.', 'wordpress-popular-posts' ) . "</strong></p></div>"; + } + } + + $rand = md5(uniqid(rand(), true)); + $wpp_rand = get_option("wpp_rand"); + if (empty($wpp_rand)) { + add_option("wpp_rand", $rand); + } else { + update_option("wpp_rand", $rand); + } + +?> + + +<style> + #wmpp-title { + color:#666; + font-family:Georgia, "Times New Roman", Times, serif; + font-weight:100; + font-size:24px; + font-style:italic; + } + + .wmpp-subtitle { + margin:8px 0 15px 0; + color:#666; + font-family:Georgia, "Times New Roman", Times, serif; + font-size:16px; + font-weight:100; + } + + .wpp_boxes { + display:none; + overflow:hidden; + width:100%; + } + + #wpp-options { + width:100%; + } + + #wpp-options fieldset { + margin:0 0 15px 0; + width:99%; + } + + #wpp-options fieldset legend { font-weight:bold; } + + #wpp-options fieldset .lbl_wpp_stats { + display:block; + margin:0 0 8px 0; + } + + #wpp-stats-tabs { + padding:2px 0; + } + + #wpp-stats-canvas { + overflow:hidden; + padding:2px 0; + width:100%; + } + + .wpp-stats { + display:none; + width:96%px; + padding:1% 0; + font-size:8px; + background:#fff; + border:#999 3px solid; + } + + .wpp-stats-active { + display:block; + } + + .wpp-stats ol { + margin:0; + padding:0; + } + + .wpp-stats ol li { + overflow:hidden; + margin:0 8px 10px 8px!important; + padding:0 0 2px 0!important; + font-size:12px; + line-height:12px; + color:#999; + border-bottom:#eee 1px solid; + } + + .wpp-post-title { + /*display:block;*/ + display:inline; + float:left; + font-weight:bold; + } + + .post-stats { + display:inline; + float:right; + font-size:0.9em!important; + text-align:right; + color:#999; + } + + .wpp-stats-unique-item, .wpp-stats-last-item { + margin:0!important; + padding:0!important; + border:none!important; + } + /**/ + .wpp-stats p { + margin:0; + padding:0 8px; + font-size:12px; + } + + .wp-list-table h4 { + margin:0 0 0 0; + } + + .wpp-ans { + display:none; + width:100%; + } + + .wpp-ans p { + margin:0 0 0 0; + padding:0; + } + +</style> + +<script type="text/javascript"> + jQuery(document).ready(function(){ + + // TABS + jQuery(".subsubsub li a").click(function(e){ + var tab = jQuery(this); + tab.addClass("current").parent().siblings().children("a").removeClass("current"); + + jQuery(".wpp_boxes:visible").hide(); + jQuery("#" + tab.attr("rel")).fadeIn(); + + e.preventDefault(); + }); + + // STATISTICS TABS + jQuery("#wpp-stats-tabs a").click(function(){ + var activeTab = jQuery(this).attr("rel"); + jQuery(this).removeClass("button-secondary").addClass("button-primary").siblings().removeClass("button-primary").addClass("button-secondary"); + jQuery(".wpp-stats:visible").fadeOut("fast", function(){ + jQuery("#"+activeTab).slideDown("fast"); + }); + + return false; + }); + + jQuery(".wpp-stats").each(function(){ + if (jQuery("li", this).length == 1) { + jQuery("li", this).addClass("wpp-stats-last-item"); + } else { + jQuery("li:last", this).addClass("wpp-stats-last-item"); + } + }); + + // FAQ + jQuery(".wp-list-table a").click(function(e){ + var ans = jQuery(this).attr("rel"); + + jQuery(".wpp-ans:visible").hide(); + jQuery("#"+ans).slideToggle(); + + e.preventDefault(); + }); + + // TOOLS + jQuery("#thumb_source").change(function() { + if (jQuery(this).val() == "custom_field") { + jQuery("#lbl_field, #thumb_field").show(); + } else { + jQuery("#lbl_field, #thumb_field").hide(); + } + }); + }); + + // TOOLS + function confirm_reset_cache() { + if (confirm("<?php _e("This operation will delete all entries from Wordpress Popular Posts' cache table and cannot be undone.", "wordpress-popular-posts"); ?> \n" + "<?php _e("Do you want to continue?", "wordpress-popular-posts"); ?>")) { + jQuery.post(ajaxurl, {action: 'wpp_clear_cache', token: '<?php echo get_option("wpp_rand"); ?>', clear: 'cache'}, function(data){ + alert(data); + }); + } + } + + function confirm_reset_all() { + if (confirm("<?php _e("This operation will delete all stored info from Wordpress Popular Posts' data tables and cannot be undone.", "wordpress-popular-posts"); ?> \n" + "<?php _e("Do you want to continue?", "wordpress-popular-posts"); ?>")) { + jQuery.post(ajaxurl, {action: 'wpp_clear_all', token: '<?php echo get_option("wpp_rand"); ?>', clear: 'all'}, function(data){ + alert(data); + }); + } + } + +</script> + +<div class="wrap"> + <div id="icon-options-general" class="icon32"><br /></div> + <h2 id="wmpp-title">Wordpress Popular Posts</h2> + + <ul class="subsubsub"> + <li id="btn_stats"><a href="#" <?php if (!isset($_POST['section']) || (isset($_POST['section']) && $_POST['section'] == "stats") ) {?>class="current"<?php } ?> rel="wpp_stats"><?php _e("Stats", "wordpress-popular-posts"); ?></a> |</li> + <li id="btn_faq"><a href="#" rel="wpp_faq"><?php _e("FAQ", "wordpress-popular-posts"); ?></a> |</li> + <li id="btn_tools"><a href="#" rel="wpp_tools"<?php if (isset($_POST['section']) && ($_POST['section'] == "tools" || $_POST['section'] == "ajax" || $_POST['section'] == "css") ) {?> class="current"<?php } ?>><?php _e("Tools", "wordpress-popular-posts"); ?></a></li> + </ul> + <!-- Start stats --> + <div id="wpp_stats" class="wpp_boxes"<?php if (!isset($_POST['section']) || (isset($_POST['section']) && $_POST['section'] == "stats") ) {?> style="display:block;"<?php } ?>> + <p><?php _e("Click on each tab to see what are the most popular entries on your blog today, this week, last 30 days or all time since Wordpress Popular Posts was installed.", "wordpress-popular-posts"); ?></p> + + <div class="tablenav top"> + <div class="alignleft actions"> + <form action="" method="post" id="wpp_stats_options" name="wpp_stats_options"> + <select name="stats_order"> + <option <?php if ($ops['stats']['order_by'] == "comments") {?>selected="selected"<?php } ?> value="comments"><?php _e("Order by comments", "wordpress-popular-posts"); ?></option> + <option <?php if ($ops['stats']['order_by'] == "views") {?>selected="selected"<?php } ?> value="views"><?php _e("Order by views", "wordpress-popular-posts"); ?></option> + <option <?php if ($ops['stats']['order_by'] == "avg") {?>selected="selected"<?php } ?> value="avg"><?php _e("Order by avg. daily views", "wordpress-popular-posts"); ?></option> + </select> + <label for="stats_limits"><?php _e("Limit", "wordpress-popular-posts"); ?>:</label> <input type="text" name="stats_limit" value="<?php echo $ops['stats']['limit']; ?>" size="5" /> + <input type="hidden" name="section" value="stats" /> + <input type="submit" class="button-secondary action" value="<?php _e("Apply", "wordpress-popular-posts"); ?>" name="" /> + </form> + </div> + </div> + <br /> + <div id="wpp-stats-tabs"> + <a href="#" class="button-primary" rel="wpp-daily"><?php _e("Last 24 hours", "wordpress-popular-posts"); ?></a> + <a href="#" class="button-secondary" rel="wpp-weekly"><?php _e("Last 7 days", "wordpress-popular-posts"); ?></a> + <a href="#" class="button-secondary" rel="wpp-monthly"><?php _e("Last 30 days", "wordpress-popular-posts"); ?></a> + <a href="#" class="button-secondary" rel="wpp-all"><?php _e("All-time", "wordpress-popular-posts"); ?></a> + </div> + <div id="wpp-stats-canvas"> + <div class="wpp-stats wpp-stats-active" id="wpp-daily"> + <?php echo do_shortcode("[wpp range='daily' stats_comments=1 stats_views=1 order_by='".$ops['stats']['order_by']."' wpp_start='<ol>' wpp_end='</ol>' do_pattern=1 pattern_form='{title} <span class=\"post-stats\">{stats}</span>' limit=".$ops['stats']['limit']."]"); ?> + </div> + <div class="wpp-stats" id="wpp-weekly"> + <?php echo do_shortcode("[wpp range='weekly' stats_comments=1 stats_views=1 order_by='".$ops['stats']['order_by']."' wpp_start='<ol>' wpp_end='</ol>' do_pattern=1 pattern_form='{title} <span class=\"post-stats\">{stats}</span>' limit=".$ops['stats']['limit']."]"); ?> + </div> + <div class="wpp-stats" id="wpp-monthly"> + <?php echo do_shortcode("[wpp range='monthly' stats_comments=1 stats_views=1 order_by='".$ops['stats']['order_by']."' wpp_start='<ol>' wpp_end='</ol>' do_pattern=1 pattern_form='{title} <span class=\"post-stats\">{stats}</span>' limit=".$ops['stats']['limit']."]"); ?> + </div> + <div class="wpp-stats" id="wpp-all"> + <?php echo do_shortcode("[wpp range='all' stats_views=1 order_by='".$ops['stats']['order_by']."' wpp_start='<ol>' wpp_end='</ol>' do_pattern=1 pattern_form='{title} <span class=\"post-stats\">{stats}</span>' limit=".$ops['stats']['limit']."]"); ?> + </div> + </div> + </div> + <!-- End stats --> + + <!-- Start faq --> + <div id="wpp_faq" class="wpp_boxes"> + <h3 class="wmpp-subtitle"><?php _e("Frequently Asked Questions", "wordpress-popular-posts"); ?></h3> + <table cellspacing="0" class="wp-list-table widefat fixed posts"> + <tr> + <td valign="top"><!-- help area --> + <h4>» <a href="#" rel="q-1"><?php _e('What does "Title" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-1"> + <p><?php _e('It allows you to show a heading for your most popular posts listing. If left empty, no heading will be displayed at all.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-2"><?php _e('What is Time Range for?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-2"> + <p><?php _e('It will tell Wordpress Popular Posts to retrieve all posts with most views / comments within the selected time range.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-3"><?php _e('What is "Sort post by" for?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-3"> + <p><?php _e('It allows you to decide whether to order your popular posts listing by total views, comments, or average views per day.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-4"><?php _e('What does "Display post rating" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-4"> + <p><?php _e('If checked, Wordpress Popular Posts will show how your readers are rating your most popular posts. This feature requires having WP-PostRatings plugin installed and enabled on your blog for it to work.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-5"><?php _e('What does "Shorten title" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-5"> + <p><?php _e('If checked, all posts titles will be shortened to "n" characters. A new "Shorten title to" option will appear so you can set it to whatever you like.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-6"><?php _e('What does "Display post excerpt" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-6"> + <p><?php _e('If checked, Wordpress Popular Posts will also include a small extract of your posts in the list. Similarly to the previous option, you will be able to decide how long the post excerpt should be.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-7"><?php _e('What does "Keep text format and links" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-7"> + <p><?php _e('If checked, and if the Post Excerpt feature is enabled, Wordpress Popular Posts will keep the styling tags (eg. bold, italic, etc) that were found in the excerpt. Hyperlinks will remain intact, too.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-7"><?php _e('What is "Post type" for?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-7"> + <p><?php _e('This filter allows you to decide which post types to show on the listing. By default, it will retrieve only posts and pages (which should be fine for most cases).', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-8"><?php _e('What is "Category(ies) ID(s)" for?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-8"> + <p><?php _e('This filter allows you to select which categories should be included or excluded from the listing. A negative sign in front of the category ID number will exclude posts belonging to it from the list, for example. You can specify more than one ID with a comma separated list.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-9"><?php _e('What is "Author(s) ID(s)" for?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-9"> + <p><?php _e('Just like the Category filter, this one lets you filter posts by author ID. You can specify more than one ID with a comma separated list.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-10"><?php _e('What does "Display post thumbnail" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-10"> + <p><?php _e('If checked, Wordpress Popular Posts will attempt to retrieve the thumbnail of each post. You can set up the source of the thumbnail via Settings - Wordpress Popular Posts - Tools.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-11"><?php _e('What does "Display comment count" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-11"> + <p><?php _e('If checked, Wordpress Popular Posts will display how many comments each popular post has got in the selected Time Range.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-12"><?php _e('What does "Display views" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-12"> + <p><?php _e('If checked, Wordpress Popular Posts will show how many pageviews a single post has gotten in the selected Time Range.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-13"><?php _e('What does "Display author" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-13"> + <p><?php _e('If checked, Wordpress Popular Posts will display the name of the author of each entry listed.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-14"><?php _e('What does "Display date" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-14"> + <p><?php _e('If checked, Wordpress Popular Posts will display the date when each popular posts was published.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-15"><?php _e('What does "Use custom HTML Markup" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-15"> + <p><?php _e('If checked, you will be able to customize the HTML markup of your popular posts listing. For example, you can decide whether to wrap your posts in an unordered list, an ordered list, a div, etc. If you know xHTML/CSS, this is for you!', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-16"><?php _e('What does "Use content formatting tags" do?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-16"> + <p><?php _e('If checked, you can decide the order of the items displayed on each entry. For example, setting it to "{title}: {summary}" (without the quotes) would display "Post title: excerpt of the post here". Available tags: {image}, {title}, {summary}, {stats} and {rating}.', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-17"><?php _e('What are "Template Tags"?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-17"> + <p><?php _e('Template Tags are simply php functions that allow you to perform certain actions. For example, Wordpress Popular Posts currently supports two different template tags: wpp_get_mostpopular() and wpp_get_views().', 'wordpress-popular-posts'); ?></p> + </div> + + <h4>» <a href="#" rel="q-18"><?php _e('What are the template tags that Wordpress Popular Posts supports?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-18"> + <p><?php _e('The following are the template tags supported by Wordpress Popular Posts', 'wordpress-popular-posts'); ?>:</p> + <table cellspacing="0" class="wp-list-table widefat fixed posts"> + <thead> + <tr> + <th class="manage-column column-title"><?php _e('Template tag', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('What it does ', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('Parameters', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('Example', 'wordpress-popular-posts'); ?></th> + </tr> + </thead> + <tbody> + <tr> + <td class="post type-post status-draft format-standard hentry category-js alternate iedit"><strong>wpp_get_mostpopular()</strong></td> + <td class="post type-post status-draft format-standard hentry category-js iedit"><?php _e('Similar to the widget functionality, this tag retrieves the most popular posts on your blog. This function also accepts parameters so you can customize your popular listing, but these are not required.', 'wordpress-popular-posts'); ?></td> + <td class="post type-post status-draft format-standard hentry category-js alternate iedit"><?php _e('Please refer to "List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode".', 'wordpress-popular-posts'); ?></td> + <td class="post type-post status-draft format-standard hentry category-js iedit"><?php wpp_get_mostpopular(); ?><br /><?php wpp_get_mostpopular("range=weekly&limit=7"); ?></td> + </tr> + <tr> + <td><strong>wpp_get_views()</strong></td> + <td><?php _e('Displays the number of views of a single post. Post ID is required or it will return false.', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Post ID', 'wordpress-popular-posts'); ?></td> + <td><?php echo wpp_get_views($post->ID); ?><br /><?php echo wpp_get_views(15); ?></td> + </tr> + </tbody> + </table> + </div> + + <h4>» <a href="#" rel="q-19"><?php _e('What are "shortcodes"?', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-19"> + <p><?php _e('Shortcodes are similar to BB Codes, these allow us to call a php function by simply typing something like [shortcode]. With Wordpress Popular Posts, the shortcode [wpp] will let you insert a list of the most popular posts in posts content and pages too! For more information about shortcodes, please visit', 'wordpress-popular-posts', 'wordpress-popular-posts'); ?> <a href="http://codex.wordpress.org/Shortcode_API" target="_blank">Wordpress Shortcode API</a>.</p> + </div> + <h4>» <a href="#" rel="q-20"><?php _e('List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode', 'wordpress-popular-posts'); ?></a></h4> + <div class="wpp-ans" id="q-20" style="display:block;"> + <p><?php _e('These parameters can be used by both the template tag wpp_get_most_popular() and the shortcode [wpp].', 'wordpress-popular-posts'); ?>:</p> + <table cellspacing="0" class="wp-list-table widefat fixed posts"> + <thead> + <tr> + <th class="manage-column column-title"><?php _e('Parameter', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('What it does ', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('Possible values', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('Defaults to', 'wordpress-popular-posts'); ?></th> + <th class="manage-column column-title"><?php _e('Example', 'wordpress-popular-posts'); ?></th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>header</strong></td> + <td><?php _e('Sets a heading for the list', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Popular Posts', 'wordpress-popular-posts'); ?></td> + <td>header="Popular Posts"</td> + </tr> + <tr> + <td><strong>header_start</strong></td> + <td><?php _e('Set the opening tag for the heading of the list', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td><h2></td> + <td>header_start="<h2>"</td> + </tr> + <tr> + <td><strong>header_end</strong></td> + <td><?php _e('Set the closing tag for the heading of the list', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td></h2></td> + <td>header_end="</h2>"</td> + </tr> + <tr> + <td><strong>limit</strong></td> + <td><?php _e('Sets the maximum number of popular posts to be shown on the listing', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Positive integer', 'wordpress-popular-posts'); ?></td> + <td>10</td> + <td>limit=10</td> + </tr> + <tr> + <td><strong>range</strong></td> + <td><?php _e('Tells Wordpress Popular Posts to retrieve the most popular entries within the time range specified by you', 'wordpress-popular-posts'); ?></td> + <td>"daily", "weekly", "monthly", "all"</td> + <td>daily</td> + <td>range="daily"</td> + </tr> + <tr> + <td><strong>order_by</strong></td> + <td><?php _e('Sets the sorting option of the popular posts', 'wordpress-popular-posts'); ?></td> + <td>"comments", "views", "avg" <?php _e('(for average views per day)', 'wordpress-popular-posts'); ?></td> + <td>comments</td> + <td>order_by="comments"</td> + </tr> + <tr> + <td><strong>post_type</strong></td> + <td><?php _e('Defines the type of posts to show on the listing', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td>post,page</td> + <td>post_type=post,page,your-custom-post-type</td> + </tr> + <tr> + <td><strong>cat</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will retrieve all entries that belong to the specified category(ies) ID(s). If a minus sign is used, the category(ies) will be excluded instead.', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td><?php _e('None', 'wordpress-popular-posts'); ?></td> + <td>cat="1,55,-74"</td> + </tr> + <tr> + <td><strong>author</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will retrieve all entries created by specified author(s) ID(s).', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td><?php _e('None', 'wordpress-popular-posts'); ?></td> + <td>author="75,8,120"</td> + </tr> + <tr> + <td><strong>title_length</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will shorten each post title to "n" characters whenever possible', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Positive integer', 'wordpress-popular-posts'); ?></td> + <td>25</td> + <td>title_length=25</td> + </tr> + <tr> + <td><strong>excerpt_length</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will build and include an excerpt of "n" characters long from the content of each post listed as popular', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Positive integer', 'wordpress-popular-posts'); ?></td> + <td>55</td> + <td>excerpt_length=55</td> + </tr> + <tr> + <td><strong>excerpt_format</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will maintaing all styling tags (strong, italic, etc) and hyperlinks found in the excerpt', 'wordpress-popular-posts'); ?></td> + <td>1 (true), (0) false</td> + <td>0</td> + <td>excerpt_format=1</td> + </tr> + <tr> + <td><strong>thumbnail_width</strong></td> + <td><?php _e('If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the width for thumbnails', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Positive integer', 'wordpress-popular-posts'); ?></td> + <td>15</td> + <td>thumbnail_width=30</td> + </tr> + <tr> + <td><strong>thumbnail_height</strong></td> + <td><?php _e('If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the height for thumbnails', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Positive integer', 'wordpress-popular-posts'); ?></td> + <td>15</td> + <td>thumbnail_height=30</td> + </tr> + <tr> + <td><strong>rating</strong></td> + <td><?php _e('If set, and if the WP-PostRatings plugin is installed and enabled on your blog, Wordpress Popular Posts will show how your visitors are rating your entries', 'wordpress-popular-posts'); ?></td> + <td>1 (true), (0) false</td> + <td>0</td> + <td>rating=1</td> + </tr> + <tr> + <td><strong>stats_comments</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will show how many comments each popular post has got until now', 'wordpress-popular-posts'); ?></td> + <td>1 (true), 0 (false)</td> + <td>1</td> + <td>stats_comments=1</td> + </tr> + <tr> + <td><strong>stats_views</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will show how many views each popular post has got since it was installed', 'wordpress-popular-posts'); ?></td> + <td>1 (true), (0) false</td> + <td>0</td> + <td>stats_views=1</td> + </tr> + <tr> + <td><strong>stats_author</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will show who published each popular post on the list', 'wordpress-popular-posts'); ?></td> + <td>1 (true), (0) false</td> + <td>0</td> + <td>stats_author=1</td> + </tr> + <tr> + <td><strong>stats_date</strong></td> + <td><?php _e('If set, Wordpress Popular Posts will display the date when each popular post on the list was published', 'wordpress-popular-posts'); ?></td> + <td>1 (true), (0) false</td> + <td>0</td> + <td>stats_date=1</td> + </tr> + <tr> + <td><strong>stats_date_format</strong></td> + <td><?php _e('Sets the date format', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td>0</td> + <td>stats_date_format='F j, Y'</td> + </tr> + <tr> + <td><strong>wpp_start</strong></td> + <td><?php _e('Sets the opening tag for the listing', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td><ul></td> + <td>wpp_start="<ul>"</td> + </tr> + <tr> + <td><strong>wpp_end</strong></td> + <td><?php _e('Sets the closing tag for the listing', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td></ul></td> + <td>wpp_end="</ul>"</td> + </tr> + <tr> + <td><strong>post_start</strong></td> + <td><?php _e('Sets the opening tag for each item on the list', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td><li></td> + <td>post_start="<li>"</td> + </tr> + <tr> + <td><strong>post_end</strong></td> + <td><?php _e('Sets the closing tag for each item on the list', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Text string', 'wordpress-popular-posts'); ?></td> + <td></li></td> + <td>post_end="</li>"</td> + </tr> + <tr> + <td><strong>do_pattern</strong></td> + <td><?php _e('If set, this option will allow you to decide the order of the contents within each item on the list.', 'wordpress-popular-posts'); ?></td> + <td>1 (true), (0) false</td> + <td>0</td> + <td>do_pattern=1</td> + </tr> + <tr> + <td><strong>pattern_form</strong></td> + <td><?php _e('If set, you can decide the order of each content inside a single item on the list. For example, setting it to "{title}: {summary}" would output something like "Your Post Title: summary here". This attribute requires do_pattern to be true.', 'wordpress-popular-posts'); ?></td> + <td><?php _e('Available tags', 'wordpress-popular-posts'); ?>: {image}, {title}, {summary}, {stats}, {rating}</td> + <td>{image} {title}: {summary} {stats}</td> + <td>pattern_form="{image} {title}: {summary} {stats}"</td> + </tr> + </tbody> + </table> + </div> + </td> + </tr> + </table> + </div> + <!-- End faq --> + + <!-- Start tools --> + <div id="wpp_tools" class="wpp_boxes"<?php if (isset($_POST['section']) && ($_POST['section'] == "tools" || $_POST['section'] == "ajax" || $_POST['section'] == "css") ) {?> style="display:block;"<?php } ?>> + <p><?php _e("Here you will find a handy group of options to tweak Wordpress Popular Posts.", "wordpress-popular-posts"); ?></p><br /> + + <h3 class="wmpp-subtitle"><?php _e("Thumbnail source", "wordpress-popular-posts"); ?></h3> + <p><?php _e("Tell Wordpress Popular Posts where it should get thumbnails from", "wordpress-popular-posts"); ?>:</p> + <div class="tablenav top"> + <div class="alignleft actions"> + <form action="" method="post" id="wpp_thumbnail_options" name="wpp_thumbnail_options"> + <select name="thumb_source" id="thumb_source"> + <option <?php if ($ops['tools']['thumbnail']['source'] == "featured") {?>selected="selected"<?php } ?> value="featured"><?php _e("Featured image", "wordpress-popular-posts"); ?></option> + <option <?php if ($ops['tools']['thumbnail']['source'] == "first_image") {?>selected="selected"<?php } ?> value="first_image"><?php _e("First image on post", "wordpress-popular-posts"); ?></option> + <option <?php if ($ops['tools']['thumbnail']['source'] == "custom_field") {?>selected="selected"<?php } ?> value="custom_field"><?php _e("Custom field", "wordpress-popular-posts"); ?></option> + </select> + + <label for="thumb_field" id="lbl_field" <?php if ($ops['tools']['thumbnail']['source'] != "custom_field") {?>style="display:none;"<?php } ?>><?php _e("Custom field name", "wordpress-popular-posts"); ?>:</label> + <input type="text" id="thumb_field" name="thumb_field" value="<?php echo $ops['tools']['thumbnail']['field']; ?>" size="10" <?php if ($ops['tools']['thumbnail']['source'] != "custom_field") {?>style="display:none;"<?php } ?> /> + <input type="hidden" name="section" value="tools" /> + <input type="submit" class="button-secondary action" id="btn_th_ops" value="<?php _e("Apply", "wordpress-popular-posts"); ?>" name="" /> + </form> + </div> + </div> + <br /> + + <h3 class="wmpp-subtitle"><?php _e("Wordpress Popular Posts Stylesheet", "wordpress-popular-posts"); ?></h3> + <p><?php _e("By default, the plugin includes a stylesheet called wpp.css which you can use to style your popular posts listing. If you wish to use your own stylesheet or do not want it to have it included in the header section of your site, use this.", "wordpress-popular-posts"); ?></p> + <div class="tablenav top"> + <div class="alignleft actions"> + <form action="" method="post" id="wpp_css_options" name="wpp_css_options"> + <select name="css" id="css"> + <option <?php if ($ops['tools']['css']) {?>selected="selected"<?php } ?> value="1"><?php _e("Enabled", "wordpress-popular-posts"); ?></option> + <option <?php if (!$ops['tools']['css']) {?>selected="selected"<?php } ?> value="0"><?php _e("Disabled", "wordpress-popular-posts"); ?></option> + </select> + <input type="hidden" name="section" value="css" /> + <input type="submit" class="button-secondary action" id="btn_css_ops" value="<?php _e("Apply", "wordpress-popular-posts"); ?>" name="" /> + </form> + </div> + </div> + <br /> + + <h3 class="wmpp-subtitle"><?php _e("Data tools", "wordpress-popular-posts"); ?></h3> + + <p><?php _e("AJAX update. If you are using a caching plugin such as WP Super Cache, enabling this feature will keep the popular list from being cached.", "wordpress-popular-posts"); ?> (NOT AVAILABLE)</p> + <div class="tablenav top"> + <div class="alignleft actions"> + <form action="" method="post" id="wpp_ajax_options" name="wpp_ajax_options"> + <select name="ajax" id="ajax" disabled="disabled"> + <option <?php if ($ops['tools']['ajax']) {?>selected="selected"<?php } ?> value="1"><?php _e("Enabled", "wordpress-popular-posts"); ?></option> + <option <?php if (!$ops['tools']['ajax']) {?>selected="selected"<?php } ?> value="0"><?php _e("Disabled", "wordpress-popular-posts"); ?></option> + </select> + <input type="hidden" name="section" value="ajax" /> + <input type="submit" class="button-secondary action" id="btn_ajax_ops" value="<?php _e("Apply", "wordpress-popular-posts"); ?>" name="" /> + </form> + </div> + </div> + <br /> + + <p><?php _e('Wordpress Popular Posts keeps historical data of your most popular entries for up to 30 days. If for some reason you need to clear the cache table, or even both historical and cache tables, please use the buttons below to do so.', 'wordpress-popular-posts') ?></p> + <p><input type="button" name="wpp-reset-cache" id="wpp-reset-cache" class="button-secondary" value="<?php _e("Empty cache", "wordpress-popular-posts"); ?>" onclick="confirm_reset_cache()" /> <label for="wpp-reset-cache"><small><?php _e('Use this button to manually clear entries from WPP cache only', 'wordpress-popular-posts'); ?></small></label></p> + <p><input type="button" name="wpp-reset-all" id="wpp-reset-all" class="button-secondary" value="<?php _e("Clear all data", "wordpress-popular-posts"); ?>" onclick="confirm_reset_all()" /> <label for="wpp-reset-all"><small><?php _e('Use this button to manually clear entries from all WPP data tables', 'wordpress-popular-posts'); ?></small></label></p> + </div> + <!-- End tools --> + + <br /> + <hr /> + <p><?php _e('Do you like this plugin?', 'wordpress-popular-posts'); ?> <a title="<?php _e('Rate Wordpress Popular Posts!', 'wordpress-popular-posts'); ?>" href="http://wordpress.org/extend/plugins/wordpress-popular-posts/#rate-response" target="_blank"><strong><?php _e('Rate it', 'wordpress-popular-posts'); ?></strong></a> <?php _e('on the official Plugin Directory!', 'wordpress-popular-posts'); ?></p> + <p><?php _e('Do you love this plugin?', 'wordpress-popular-posts'); ?> <a title="<?php _e('Buy me a beer!', 'wordpress-popular-posts'); ?>" href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=dadslayer%40gmail%2ecom&lc=GB&item_name=Wordpress%20Popular%20Posts%20Plugin¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG_global%2egif%3aNonHosted" target="_blank"><strong><?php _e('Buy me a beer!', 'wordpress-popular-posts'); ?></strong></a>. <?php _e('Each donation motivates me to keep releasing free stuff for the Wordpress community!', 'wordpress-popular-posts'); ?></p> + <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=dadslayer%40gmail%2ecom&lc=GB&item_name=Wordpress%20Popular%20Posts%20Plugin¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG_global%2egif%3aNonHosted" target="_blank" rel="external nofollow"><img src="<?php echo get_bloginfo('url') . "/" . PLUGINDIR; ?>/wordpress-popular-posts/btn_donateCC_LG_global.gif" width="122" height="47" alt="<?php _e('Buy me a beer!', 'wordpress-popular-posts'); ?>" border="0" /></a> +</div> \ No newline at end of file diff --git a/wp-content/plugins/wordpress-popular-post/cache/index.html b/wp-content/plugins/wordpress-popular-post/cache/index.html new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/wp-content/plugins/wordpress-popular-post/readme.txt b/wp-content/plugins/wordpress-popular-post/readme.txt index bbf8cd41985cbdbbf886a041090178616c1bf939..5d458b4f9d314f7e35e713d34335c37c17cda1bd 100644 --- a/wp-content/plugins/wordpress-popular-post/readme.txt +++ b/wp-content/plugins/wordpress-popular-post/readme.txt @@ -1,44 +1,39 @@ === Wordpress Popular Posts === Contributors: hcabrera Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=dadslayer%40gmail%2ecom&lc=GB&item_name=Wordpress%20Popular%20Posts%20Plugin¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG_global%2egif%3aNonHosted -Tags: popular, posts, widget, seo, wordpress +Tags: popular, posts, popular posts, widget, seo, wordpress, custom post type Requires at least: 2.8 -Tested up to: 3.2.1 -Stable tag: 2.2.1 +Tested up to: 3.4.1 +Stable tag: 2.3.2 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html With Wordpress Popular Posts, you can show your visitors what are the most popular entries on your blog. == Description == -Wordpress Popular Posts is a highly customizable sidebar widget that displays the most popular posts on your blog. You can use it as a template tag, too! +Wordpress Popular Posts is a highly customizable widget that displays the most popular posts on your blog. -**IMPORTANT NOTICES:** - -Due to critical security issues, from Wordpress Popular Posts v.2.1.5 and on **TimThumb support has been dropped**. Please upgrade as soon as possible since your site may be under risk of being exploited. - -From **version 2.0** and on, **Wordpress Popular Posts** requires at least **Wordpress 2.8** in order to function correctly. If you are not running Wordpress 2.8 or can't update your blog right now, please don't upgrade to/install version 2.x! - -Also, if you are upgrading from any version prior to 1.4.6, please [update to 1.4.6](http://downloads.wordpress.org/plugin/wordpress-popular-posts.1.4.6.zip) before moving to 2.x! += Main Features = +* **Multi-widget capable**. That is, you can have several widgets of Wordpress Popular Posts on your blog - each with its own settings! +* **Time Range** - list those posts of your blog that have been the most popular ones within a specific time range (eg. last 24 hours, last 7 days, last 30 days, etc.)! +* **Custom Post-type support**. Wanna show other stuff than just posts and pages? +* Display a **thumbnail** of your posts! (*see the [FAQ section](http://wordpress.org/extend/plugins/wordpress-popular-posts/faq/) for technical requirements*). +* Use **your own layout**! Control how your most popular posts are shown on your theme. +* Check the **statistics** on your most popular posts from wp-admin. -**What's new** += Other Features = +* **Shortcode support** - use the [wpp] shortcode to showcase your most popular posts on pages, too! For usage and instructions, please refer to the [installation section](http://wordpress.org/extend/plugins/wordpress-popular-posts/installation/). +* **Template tags** - Don't feel like using widgets? No problem! You can still embed your most popular entries on your theme using the *wpp_get_mostpopular()* template tag. Additionally, the *wpp_gets_views()* template tag allows you to retrieve the views count for a particular post. For usage and instructions, please refer to the [installation section](http://wordpress.org/extend/plugins/wordpress-popular-posts/installation/). +* **Localizable** to your own language (*See the [FAQ section](http://wordpress.org/extend/plugins/wordpress-popular-posts/faq/) for more info*). +* **[WP-PostRatings](http://wordpress.org/extend/plugins/wp-postratings/) support**. Show your visitors how your readers are rating your posts! +* **Automatic maintenance** - Wordpress Popular Posts will wipe out from its cache automatically all those posts that have not been viewed more than 30 days from the current date, keeping just the popular ones on the list! This ensures that your cache table will remain as compact as possible! (You can also clear it manually if you like, [look here for instructions](http://wordpress.org/extend/plugins/wordpress-popular-posts/faq/)!). -* Include a **thumbnail** of your posts! (*see the [FAQ section](http://wordpress.org/extend/plugins/wordpress-popular-posts/faq/) for technical requirements*) -* From version 2.0.3 and on, Wordpress Popular Posts includes a **Dashboard panel** where you can monitor what are the most popular posts on your site directly from your wp-admin area! -* Wordpress Popular Posts is **multi-widget** capable! Install multiple instances of Wordpress Popular Posts on your sidebars, each with its own unique settings! -* **Shortcode support!** - from version 2.0, you can showcase your most popular posts on pages, too! -* **Category exclusion** - Want to exclude certain categories from the listing? Use the *Exclude Category* option! -* **Automatic maintenance** - Wordpress Popular Posts will wipe out from its cache automatically all those posts that have not been viewed more than 30 days from the current date, keeping the popular ones on the list! This ensures that your cache table will remain as compact as possible! (You can also clear it manually if you like, [look here for instructions](http://wordpress.org/extend/plugins/wordpress-popular-posts/faq/)!). -* **Template tags** - Don't feel like using widgets? No problem! You can still embed your most popular entries on your theme using the **wpp_get_mostpopular()** template tag. Additionally, the **wpp_gets_views()** template tag allows you to retrieve the views count for a particular post. For usage and instructions, please refer to the [instalation section](http://wordpress.org/extend/plugins/wordpress-popular-posts/installation/). += Notice = -**Other features** +From version 2.0 and on, Wordpress Popular Posts requires Wordpress 2.8 at least in order to function correctly. If you're not running Wordpress 2.8 (or newer) please use [Wordpress Popular Posts v.1.5.1](http://downloads.wordpress.org/plugin/wordpress-popular-posts.1.5.1.zip) instead. -* Use **your own layout**! Control how your most popular posts are shown on your theme. -* *Wordpress Popular Posts can be localized*! Languages included on this release: *English* (default), *Italian* and *Spanish*. Wanna know how to translate Wordpress Popular Posts into your language? See the [FAQ section](http://wordpress.org/extend/plugins/wordpress-popular-posts/faq/) for more! -* *Time Range* - list your most popular posts within a specific time range (eg. popular posts of the last 24 hours, this week's popular posts, etc.)! -* [WP-PostRatings](http://wordpress.org/extend/plugins/wp-postratings/) support added! Show your visitors how your readers are rating your posts! -* Wanna show your readers a sneak peak of your most popular entries? Wordpress Popular Posts can include excerpts, too! -* List your posts either by **comment count**, **views** or **average daily views**. Sorted by **comment count** by default. -* You can also list those pages of your blog (About, Services, Archives, etc.) that are getting a lot of attention from your readers. Enabled by default. +Also, if you are upgrading from any version prior to Wordpress Popular Posts 1.4.6, please [update to 1.4.6](http://downloads.wordpress.org/plugin/wordpress-popular-posts.1.4.6.zip) first! == Installation == @@ -50,9 +45,9 @@ Also, if you are upgrading from any version prior to 1.4.6, please [update to 1. That's it! -= Using Wordpress Popular Posts on Pages = += Shortcode = -If you want to use Wordpress Popular Posts on your pages (a "Hall of Fame" page, for example) please use the shortcode `[wpp]`. Attributes are **optional**, however you can use them if needed. You can find a complete list of the attributes Wordpress Popular Posts currently supports at your *wp-admin > Settings > Wordpress Popular Posts* page. +If you want to use Wordpress Popular Posts on your pages (a "Hall of Fame" page, for example) please use the shortcode `[wpp]`. Parameters are **optional**, however you can use them if needed. You can find the complete list of the parameters via *wp-admin > Settings > Wordpress Popular Posts > FAQ*. **Usage:** @@ -62,7 +57,7 @@ If you want to use Wordpress Popular Posts on your pages (a "Hall of Fame" page, Example: -`[wpp range=today stats_views=1 order_by=views wpp_start=<ol> wpp_end=</ol>]` +`[wpp range=daily stats_views=1 order_by=views wpp_start=<ol> wpp_end=</ol>]` @@ -87,12 +82,12 @@ Using parameters: `<?php if (function_exists('wpp_get_mostpopular')) wpp_get_mostpopular("range=weekly&order_by=comments"); ?>` -For a complete list of parameters (also known as "attributes"), please check your *wp-admin > Settings > Wordpress Popular Posts* page. +For a complete list of parameters, please go to *wp-admin > Settings > Wordpress Popular Posts > FAQ*. ***wpp_get_views()*** -The **wpp_get_views** template tag retrieves the views count of a single post since the plugin was installed. It only accepts one parameter: the post ID (eg. echo wpp_get_views(15)). If the function doesn't get passed a post ID when called, it'll return false instead. +The **wpp_get_views** template tag retrieves the total views count of a single post. It only accepts one parameter: the post ID (eg. echo wpp_get_views(15)). If the function doesn't get passed a post ID when called, it'll return false instead. **Usage:** @@ -100,54 +95,113 @@ The **wpp_get_views** template tag retrieves the views count of a single post si == Frequently Asked Questions == -* *I'm getting "Sorry. No data so far". What's up with that?* -There are a number of reasons that might explain why you are seeing this message: Wordpress Popular Posts won't count views generated by logged in users (if your blog requires readers to be logged in to access its contents, [this tutorial](http://wordpress.org/support/topic/398760) is for you); your current theme does not have the [wp_header()](http://codex.wordpress.org/Theme_Development#Plugin_API_Hooks) tag in its <head> section, required by my plugin to keep track of what your visitors are viewing on your site; no one has seen your posts/pages since Wordpress Popular Posts activation, you should give it some time. Wordpress Popular Posts works based on views, mainly. Whenever a post gets a view, WPP will register it on its cache table. Only those posts registered by my plugin will be listed. It doesn't really make much difference if a post has got a lot of comments or not if it hasn't been cached by my plugin - it still needs to be viewed by someone/people in order to rank as popular. += I need help with your plugin! What should I do? = +First thing to do is read both FAQ and Installation sections, they should address most of the questions you might have about this plugin (and even more info can be found via *wp-admin > Settings > Wordpress Popular Posts > FAQ*). If you're having problems with WPP, my suggestion would be try disabling all other plugins first and then re-enable each one to make sure there are no conflicts. Checking the [Support Forum](http://wordpress.org/support/plugin/wordpress-popular-posts) is also a good idea as chances are that someone else has already posted something about it (and if not, you are always welcome to create a new thread). **Remember:** *read first*. It'll save you (and me) time. + += -FUNCTIONALITY- = + += I'm getting "Sorry. No data so far". What's up with that? = +There are a number of reasons that might explain why you are seeing this message: no one has seen or commented on your posts/pages since Wordpress Popular Posts activation, you should give it some time; your current theme does not have the [wp_head()](http://codex.wordpress.org/Theme_Development#Plugin_API_Hooks) tag in its <head> section, required by my plugin to keep track of what your visitors are viewing on your site; Wordpress Popular Posts was unable to create the necessary DB tables to work, make sure your hosting has granted you permission to create / update / modify tables in the database. + += Wordpress Popular Posts is not counting my own visits, why? = +Wordpress Popular Posts won't count views generated by logged in users. If your blog requires readers to be logged in to access its contents, [this tutorial](http://wordpress.org/support/topic/398760) is for you. + += I'm unable to activate the "Display post thumbnail" option. Why? = +Make sure that: your host is running **PHP 4.3 or higher**; the **GD library** is installed and [enabled by your host](http://wordpress.org/support/topic/289778#post-1366038). + += How does Wordpress Popular Posts select my posts' thumbnails? = +By default, Wordpress Popular Posts will try and use the [Featured Image](http://codex.wordpress.org/Post_Thumbnails) you have selected for each of your posts and use it to create a thumbnail. If none is set, a "No thumbnail" image will be used instead. You can also tell Wordpress Popular Posts to get the thumbnails from the first image found on each post, or specify the path of your thumbnails using a [custom field](http://codex.wordpress.org/Custom_Fields). To do so, simply go to *wp-admin > Settings > Wordpress Popular Posts > Tools* and pick the choice of your preference. -* *I'm unable to activate the "Display post thumbnail" option. Why?* -Make sure that: your host is running **PHP 4.3 or higher**; the **GD library** is installed and [enabled by your host](http://wordpress.org/support/topic/289778#post-1366038); your theme has been enabled to use the [Featured Images functionality](http://codex.wordpress.org/Post_Thumbnails#Enabling_Support_for_Post_Thumbnails). += I'm seeing a "No thumbnail" image, where's my post thumbnail? = +Make sure you have assigned one to your posts (either by [attaching an image to your post](http://codex.wordpress.org/Using_Image_and_File_Attachments#Attachment_to_a_Post), selected one using the [Featured Images functionality](http://codex.wordpress.org/Post_Thumbnails#Enabling_Support_for_Post_Thumbnails)), or assigned one using a custom field and told Wordpress Popular Posts what the custom field name is in *wp-admin > Settings > Wordpress Popular Posts > Tools*. Otherwise, my plugin will show this image by default. -* *I'm seeing a "No thumbnail" image, where's my post thumbnail?* -Make sure you have assigned one to your posts (either by [attaching an image to your post](http://codex.wordpress.org/Using_Image_and_File_Attachments#Attachment_to_a_Post) or selected one using the [Featured Images functionality](http://codex.wordpress.org/Post_Thumbnails#Enabling_Support_for_Post_Thumbnails)), otherwise my plugin will show this image by default. += The thumbnail images are broken. What happened? = +Check that the cache subfolder exists (wordpress-popular-posts/cache/) and it's *writable* (chmodd it to 777 if you're unsure about this). Also, Timthumb uses the [PHP GD library](http://php.net/manual/en/book.image.php) to generate images. If it's not installed/enabled, [Timthumb will fail and thumbnails won't be generated](http://wordpress.org/support/topic/289778#post-1366038). -* *Can I embed my most popular posts in any other ways than via sidebar widgets?* -Yes. You have two other ways to achieve this: via **shortcode** [wpp] (so you can embed it directly on your posts / pages), or via **template tag**. += Can I embed my most popular posts in any other ways than via sidebar widgets? = +Yes. You have two other ways to achieve this: via **shortcode**: [wpp] (so you can embed it directly on your posts / pages), or via **template tag**: wpp_get_mostpopular(). -* *What are the parameters that the wpp_get_mostpopular() template tag and the [wpp] shortcode accept?* -You can find a complete list of parameters via wp-admin > Settings > Wordpress Popular Posts under the section "What attributes does Wordpress Popular Posts shortcode [wpp] have?". += Where can I find the list of parameters accepted by the wpp_get_mostpopular() template tag / [wpp] shortcode? = +You can find it via *wp-admin > Settings > Wordpress Popular Posts > FAQ*, under the section **"List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode"**. -* *I would like to clear Wordpress Popular Posts cache and start over. How can I do that?* -If you go to *wp-admin > Settings > Wordpress Popular Posts*, you'll find two buttons that should do what you need: **Clear cache** and **Clear all data**. The first one just wipes out what's in cache, keeping the historical data intact (All-time). The latter, wipes out everything from Wordpress Popular Posts data tables - even the historical data. Note that this **cannot be undone**. += I want to have a popular list of my custom post type. How can I do that? = +Simply add your custom post type to the Post Type field in the widget (or, if yo're using the template tag / shortcode, use the post_type parameter). -* *Does your plugin include any css stylesheets?* -Yes, *but* there are no predefined styles (well, almost). Wordpress Popular Posts will first look into your theme's folder for the wpp.css file and use it if found so that any custom CSS styles are not overwritten, otherwise will use the one bundled with the plugin. It's up to you to style your most popular posts list as you like. You might need a hand with that if you don't know HTML/CSS, though. += How can I use my own HTML markup with your plugin? = +Wordpress Popular Posts is flexible enough to let you use your own HTML markup. To do so, simply activate the *Use custom HTML markup* option and set your desired configuration; or if you're using the template tag / shortcode, you can find the equivalent parameters in the section mentioned above. -* *Each time Wordpress Popular Posts gets updated, the stylesheet gets reset.* -You need to copy your custom wpp.css to your theme's folder, otherwise my plugin will use the one += I would like to clear all data gathered by Wordpress Popular Posts and start over. How can I do that? = +If you go to *wp-admin > Settings > Wordpress Popular Posts > Tools*, you'll find two buttons that should do what you need: **Clear cache** and **Clear all data**. The first one just wipes out what's in cache (Last 24 hours, Last 7 Days, Last 30 Days), keeping the historical data (All-time) intact. The latter wipes out everything from Wordpress Popular Posts data tables - even the historical data. Note that this **cannot be undone** so proceed with caution. -* *Would you help me style my list, please?* -For a small donation, sure why not? += Can Wordpress Popular Posts run on Wordpress Multisite? = +While **it's not officially supported**, other users have reported that my plugin runs fine on Wordpress Multisite. According to what they have said, you need to install this plugin using the Network Activation feature. -* *I want to remove WPP's stylesheet. How can I do that?* -Simply add the following code to yout theme's functions.php file: -`add_action('wp_head', 'remove_wpp_stylesheet', 1); function remove_wpp_stylesheet() { global $wp_widget_factory; remove_action( 'wp_head', array($wp_widget_factory->widgets['WordpressPopularPosts'], 'wpp_print_stylesheet') ); }` += -CSS AND STYLESHEETS- = -* *I want your plugin to have x or y functionality. Would you do it for me?* -I usually accept suggestions, yes. However, if it doesn't fit the nature of my plugin (to list popular posts) or requires something that might affect other users' experiences, chances are that I won't implement it. However, I could cook up a customized version of Wordpress Popular Posts just for you if you really, really need that special feature/capability ... but it won't be for free. += Does your plugin include any CSS stylesheets? = +Yes, *but* there are no predefined styles (well, almost). Wordpress Popular Posts will first look into your current theme's folder for the wpp.css file and use it if found so that any custom CSS styles made by you are not overwritten, otherwise will use the one bundled with the plugin. -* *I want to translate your plugin into my language / help you update a PO file. What do I need to do?* -There's a PO file included with Wordpress Popular Posts. If your language is not already supported by my plugin, you can use a [gettext](http://www.gnu.org/software/gettext/) editor like [Poedit](http://www.poedit.net/) to translate all definitions into your language. If you want to, you can send me your resulting PO and MO files to *me at cabrerahector dot com* so I can include them on the next release of my plugin. += How can I style my list to look like that other site / this way? = +Since this plugin does not include any predefined designs, it's up to you to style your most popular posts list as you like. You might need to hire someone for this if you don't know HTML/CSS. Asking questions about styling / CSS at the [Support Forum](http://wordpress.org/support/plugin/wordpress-popular-posts) might not get an answer from me, either. -* *Help! I'm having some issues with your plugin! What should I do?* -Please don't, and read my words carefully, don't use my email address to contact me for support (unless I authorize you to do so). It'll surely be of more help for other people running into similar issues if you posted your doubts/questions/suggestions on the [Wordpress Popular Posts Support forums](http://wordpress.org/tags/wordpress-popular-posts?forum_id=10) (please be as descriptive as possible)! += Each time Wordpress Popular Posts gets updated, the stylesheet gets reset. = +You need to copy your custom wpp.css file to your theme's folder, otherwise my plugin will use the one bundled with it by default. + += I want to remove WPP's stylesheet. How can I do that? = +Simply add the following code to your theme's functions.php file: `<?php wp_dequeue_style('wordpress-popular-posts') ?>` (or disable the stylesheet via *wp-admin > Settings > Wordpress Popular Posts > Tools*). + += -OTHER STUFF THAT YOU SHOULD KNOW- = + += I want your plugin to have X or Y functionality. Can it be done? = +If it fits the nature of my plugin and it sounds like something other users would like to have, there's a pretty good chance that I will implement it (specially if you actually provide some sample code with useful comments). + += ETA for your next release? = +Updates will come depending on my work projects (I'm a full-time web developer) and the amount of time I have on my hands. So please, don't ask for ETAs. + += I want to translate your plugin into my language / help you update a translation. What do I need to do? = +There's a PO file included with Wordpress Popular Posts. If your language is not already supported by my plugin, you can use a [gettext](http://www.gnu.org/software/gettext/) editor like [Poedit](http://www.poedit.net/) to translate all texts into your language. If you want to, you can send me your resulting PO and MO files to *hcabrerab at gmail dot com* so I can include them on the next release of my plugin. + += I posted a question on the Support Forum and got no answer from the developer. Why is that? = +Chances are that your question has been already answered either in the [Support Forum](http://wordpress.org/support/plugin/wordpress-popular-posts) or here in the FAQ section, so I will simply ignore your thread. It could also happen that maybe I just haven't read your post so please be patient (in the meanwhile, search the [Support Forum](http://wordpress.org/support/plugin/wordpress-popular-posts) for an answer). + += Is there any other way to contact you? = +For the time being, the [Support Forum](http://wordpress.org/support/plugin/wordpress-popular-posts) is the only way to contact me. Do not, please, do not use my email to get in touch with me *unless I authorize you to do so*. == Screenshots == 1. Widgets Control Panel. 2. Wordpress Popular Posts Widget. -3. Wordpress Popular Posts Widget on Kubrik Theme's sidebar. +3. Wordpress Popular Posts Widget on theme's sidebar. 4. Wordpress Popular Posts Stats panel. == Changelog == += 2.3.2 = +* The ability to enable / disable the Ajax Update has been removed. It introduced a random bug that doubled the views count of some posts / pages. Will be added back when a fix is ready. +* Fixed a bug preventing the cat parameter from excluding categories (widget was not affected by this). +* FAQ section (Settings / Wordpress Popular Posts / FAQ) updated. +* Added french translation. (Thanks, Le Raconteur!) + += 2.3.1 = +* Fixed bug caused by the sorter function when there are multiple instances of the widget. +* Added check for new options in the get_popular_posts function. +* Added plugin version check to handle upgrades. +* Fixed bug preventing some site from fetching images from subdomains or external sites. +* Fixed bug that prevented excluding more than one category using the Category filter. + += 2.3.0 = +* Merged all pages into Settings/Wordpress Popular Posts. +* Added new options to the Wordpress Popular Posts Stats dashboard. +* Added check for static homepages to avoid printing ajax script there. +* Database queries re-built from scratch for optimization. +* Added the ability to remove / enable plugin's stylesheet from the admin. +* Added the ability to enable / disable ajax update from the admin. +* Added the ability to set thumbnail's source from the admin. +* Timthumb support re-added. +* Added support for custom post type (Thanks, Brad Williams!). +* Improved the category filtering feature. +* Added the ability to get popular posts from given author IDs. + + = 2.2.1 = * Quick update to fix error with All-time combined with views breaking the plugin. @@ -205,7 +259,7 @@ Please don't, and read my words carefully, don't use my email address to contact * Several shortcode bugs fixed (range, order_by, do_pattern, pattern_form were not working as expected). = 2.0.1 = -* Post title excerpt now includes html entities. Characters like ÅÄÖ should display properly now. +* Post title excerpt now includes html entities. Characters like ��� should display properly now. * Post excerpt has been improved. Now it supports the following HTML tags: a, b, i, strong, em. * Template tag wpp_get_views() added. Retrieves the views count of a single post. * Template tag get_mostpopular() re-added. Parameter support included. @@ -275,5 +329,4 @@ Please don't, and read my words carefully, don't use my email address to contact * Public release == Upgrade Notice == - -Due to critical security issues, from Wordpress Popular Posts v.2.1.5 TimThumb support has been dropped. Please upgrade as soon as possible since your site may be under risk of being exploited. \ No newline at end of file +From version 2.0 and on, Wordpress Popular Posts requires Wordpress 2.8 at least in order to function correctly. If you're not running Wordpress 2.8 (or newer) please use Wordpress Popular Posts v.1.5.1 instead. Also, if you are upgrading from any version prior to Wordpress Popular Posts 1.4.6, please update to 1.4.6 first! \ No newline at end of file diff --git a/wp-content/plugins/wordpress-popular-post/screenshot-1.gif b/wp-content/plugins/wordpress-popular-post/screenshot-1.gif index 1b171b63cdf6e7b59d370b181648ed27d8c121cb..04a88dfbcb79a3bde5e00ba240adcaa48fcf8c01 100644 Binary files a/wp-content/plugins/wordpress-popular-post/screenshot-1.gif and b/wp-content/plugins/wordpress-popular-post/screenshot-1.gif differ diff --git a/wp-content/plugins/wordpress-popular-post/screenshot-2.gif b/wp-content/plugins/wordpress-popular-post/screenshot-2.gif index b3ee91018ddea30b58d2f9ffc51f1d3a303af5d2..5940bc48e81e878b3c936cca433cc5d1c925c7e9 100644 Binary files a/wp-content/plugins/wordpress-popular-post/screenshot-2.gif and b/wp-content/plugins/wordpress-popular-post/screenshot-2.gif differ diff --git a/wp-content/plugins/wordpress-popular-post/screenshot-3.gif b/wp-content/plugins/wordpress-popular-post/screenshot-3.gif index ee1bdb7f2ec5abf06356d7fc0b002ecf08eeceba..77ae2200b0894317a473c951792de992dbcf0cfd 100644 Binary files a/wp-content/plugins/wordpress-popular-post/screenshot-3.gif and b/wp-content/plugins/wordpress-popular-post/screenshot-3.gif differ diff --git a/wp-content/plugins/wordpress-popular-post/screenshot-4.gif b/wp-content/plugins/wordpress-popular-post/screenshot-4.gif index 07cfb46f7b72e79cff7fd48fb8b46b070332a518..3cc0ac6467bc31fe71f25463a2e613686b4a8d09 100644 Binary files a/wp-content/plugins/wordpress-popular-post/screenshot-4.gif and b/wp-content/plugins/wordpress-popular-post/screenshot-4.gif differ diff --git a/wp-content/plugins/wordpress-popular-post/timthumb.php b/wp-content/plugins/wordpress-popular-post/timthumb.php new file mode 100644 index 0000000000000000000000000000000000000000..3613f38e86d82e589f42946901dfcad029c1d95c --- /dev/null +++ b/wp-content/plugins/wordpress-popular-post/timthumb.php @@ -0,0 +1,1245 @@ +<?php +/** + * TimThumb by Ben Gillbanks and Mark Maunder + * Based on work done by Tim McDaniels and Darren Hoyt + * http://code.google.com/p/timthumb/ + * + * GNU General Public License, version 2 + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * + * Examples and documentation available on the project homepage + * http://www.binarymoon.co.uk/projects/timthumb/ + * + * $Rev$ + */ + +/* + * --- TimThumb CONFIGURATION --- + * To edit the configs it is best to create a file called timthumb-config.php + * and define variables you want to customize in there. It will automatically be + * loaded by timthumb. This will save you having to re-edit these variables + * everytime you download a new version +*/ +define ('VERSION', '2.8.10'); // Version of this script +//Load a config file if it exists. Otherwise, use the values below +if( file_exists(dirname(__FILE__) . '/timthumb-config.php')) require_once('timthumb-config.php'); +if(! defined('DEBUG_ON') ) define ('DEBUG_ON', false); // Enable debug logging to web server error log (STDERR) +if(! defined('DEBUG_LEVEL') ) define ('DEBUG_LEVEL', 1); // Debug level 1 is less noisy and 3 is the most noisy +if(! defined('MEMORY_LIMIT') ) define ('MEMORY_LIMIT', '30M'); // Set PHP memory limit +if(! defined('BLOCK_EXTERNAL_LEECHERS') ) define ('BLOCK_EXTERNAL_LEECHERS', false); // If the image or webshot is being loaded on an external site, display a red "No Hotlinking" gif. + +//Image fetching and caching +if(! defined('ALLOW_EXTERNAL') ) define ('ALLOW_EXTERNAL', TRUE); // Allow image fetching from external websites. Will check against ALLOWED_SITES if ALLOW_ALL_EXTERNAL_SITES is false +if(! defined('ALLOW_ALL_EXTERNAL_SITES') ) define ('ALLOW_ALL_EXTERNAL_SITES', TRUE); // Less secure. +if(! defined('FILE_CACHE_ENABLED') ) define ('FILE_CACHE_ENABLED', TRUE); // Should we store resized/modified images on disk to speed things up? +if(! defined('FILE_CACHE_TIME_BETWEEN_CLEANS')) define ('FILE_CACHE_TIME_BETWEEN_CLEANS', 86400); // How often the cache is cleaned + +if(! defined('FILE_CACHE_MAX_FILE_AGE') ) define ('FILE_CACHE_MAX_FILE_AGE', 86400); // How old does a file have to be to be deleted from the cache +if(! defined('FILE_CACHE_SUFFIX') ) define ('FILE_CACHE_SUFFIX', '.timthumb.txt'); // What to put at the end of all files in the cache directory so we can identify them +if(! defined('FILE_CACHE_PREFIX') ) define ('FILE_CACHE_PREFIX', 'timthumb'); // What to put at the beg of all files in the cache directory so we can identify them +if(! defined('FILE_CACHE_DIRECTORY') ) define ('FILE_CACHE_DIRECTORY', './cache'); // Directory where images are cached. Left blank it will use the system temporary directory (which is better for security) +if(! defined('MAX_FILE_SIZE') ) define ('MAX_FILE_SIZE', 10485760); // 10 Megs is 10485760. This is the max internal or external file size that we'll process. +if(! defined('CURL_TIMEOUT') ) define ('CURL_TIMEOUT', 20); // Timeout duration for Curl. This only applies if you have Curl installed and aren't using PHP's default URL fetching mechanism. +if(! defined('WAIT_BETWEEN_FETCH_ERRORS') ) define ('WAIT_BETWEEN_FETCH_ERRORS', 3600); //Time to wait between errors fetching remote file + +//Browser caching +if(! defined('BROWSER_CACHE_MAX_AGE') ) define ('BROWSER_CACHE_MAX_AGE', 864000); // Time to cache in the browser +if(! defined('BROWSER_CACHE_DISABLE') ) define ('BROWSER_CACHE_DISABLE', false); // Use for testing if you want to disable all browser caching + +//Image size and defaults +if(! defined('MAX_WIDTH') ) define ('MAX_WIDTH', 1500); // Maximum image width +if(! defined('MAX_HEIGHT') ) define ('MAX_HEIGHT', 1500); // Maximum image height +if(! defined('NOT_FOUND_IMAGE') ) define ('NOT_FOUND_IMAGE', ''); // Image to serve if any 404 occurs +if(! defined('ERROR_IMAGE') ) define ('ERROR_IMAGE', ''); // Image to serve if an error occurs instead of showing error message +if(! defined('PNG_IS_TRANSPARENT') ) define ('PNG_IS_TRANSPARENT', FALSE); //42 Define if a png image should have a transparent background color. Use False value if you want to display a custom coloured canvas_colour +if(! defined('DEFAULT_Q') ) define ('DEFAULT_Q', 90); // Default image quality. Allows overrid in timthumb-config.php +if(! defined('DEFAULT_ZC') ) define ('DEFAULT_ZC', 1); // Default zoom/crop setting. Allows overrid in timthumb-config.php +if(! defined('DEFAULT_F') ) define ('DEFAULT_F', ''); // Default image filters. Allows overrid in timthumb-config.php +if(! defined('DEFAULT_S') ) define ('DEFAULT_S', 0); // Default sharpen value. Allows overrid in timthumb-config.php +if(! defined('DEFAULT_CC') ) define ('DEFAULT_CC', 'ffffff'); // Default canvas colour. Allows overrid in timthumb-config.php + + +//Image compression is enabled if either of these point to valid paths + +//These are now disabled by default because the file sizes of PNGs (and GIFs) are much smaller than we used to generate. +//They only work for PNGs. GIFs and JPEGs are not affected. +if(! defined('OPTIPNG_ENABLED') ) define ('OPTIPNG_ENABLED', false); +if(! defined('OPTIPNG_PATH') ) define ('OPTIPNG_PATH', '/usr/bin/optipng'); //This will run first because it gives better compression than pngcrush. +if(! defined('PNGCRUSH_ENABLED') ) define ('PNGCRUSH_ENABLED', false); +if(! defined('PNGCRUSH_PATH') ) define ('PNGCRUSH_PATH', '/usr/bin/pngcrush'); //This will only run if OPTIPNG_PATH is not set or is not valid + +/* + -------====Website Screenshots configuration - BETA====------- + + If you just want image thumbnails and don't want website screenshots, you can safely leave this as is. + + If you would like to get website screenshots set up, you will need root access to your own server. + + Enable ALLOW_ALL_EXTERNAL_SITES so you can fetch any external web page. This is more secure now that we're using a non-web folder for cache. + Enable BLOCK_EXTERNAL_LEECHERS so that your site doesn't generate thumbnails for the whole Internet. + + Instructions to get website screenshots enabled on Ubuntu Linux: + + 1. Install Xvfb with the following command: sudo apt-get install subversion libqt4-webkit libqt4-dev g++ xvfb + 2. Go to a directory where you can download some code + 3. Check-out the latest version of CutyCapt with the following command: svn co https://cutycapt.svn.sourceforge.net/svnroot/cutycapt + 4. Compile CutyCapt by doing: cd cutycapt/CutyCapt + 5. qmake + 6. make + 7. cp CutyCapt /usr/local/bin/ + 8. Test it by running: xvfb-run --server-args="-screen 0, 1024x768x24" CutyCapt --url="http://markmaunder.com/" --out=test.png + 9. If you get a file called test.png with something in it, it probably worked. Now test the script by accessing it as follows: + 10. http://yoursite.com/path/to/timthumb.php?src=http://markmaunder.com/&webshot=1 + + Notes on performance: + The first time a webshot loads, it will take a few seconds. + From then on it uses the regular timthumb caching mechanism with the configurable options above + and loading will be very fast. + + --ADVANCED USERS ONLY-- + If you'd like a slight speedup (about 25%) and you know Linux, you can run the following command which will keep Xvfb running in the background. + nohup Xvfb :100 -ac -nolisten tcp -screen 0, 1024x768x24 > /dev/null 2>&1 & + Then set WEBSHOT_XVFB_RUNNING = true below. This will save your server having to fire off a new Xvfb server and shut it down every time a new shot is generated. + You will need to take responsibility for keeping Xvfb running in case it crashes. (It seems pretty stable) + You will also need to take responsibility for server security if you're running Xvfb as root. + + +*/ +if(! defined('WEBSHOT_ENABLED') ) define ('WEBSHOT_ENABLED', false); //Beta feature. Adding webshot=1 to your query string will cause the script to return a browser screenshot rather than try to fetch an image. +if(! defined('WEBSHOT_CUTYCAPT') ) define ('WEBSHOT_CUTYCAPT', '/usr/local/bin/CutyCapt'); //The path to CutyCapt. +if(! defined('WEBSHOT_XVFB') ) define ('WEBSHOT_XVFB', '/usr/bin/xvfb-run'); //The path to the Xvfb server +if(! defined('WEBSHOT_SCREEN_X') ) define ('WEBSHOT_SCREEN_X', '1024'); //1024 works ok +if(! defined('WEBSHOT_SCREEN_Y') ) define ('WEBSHOT_SCREEN_Y', '768'); //768 works ok +if(! defined('WEBSHOT_COLOR_DEPTH') ) define ('WEBSHOT_COLOR_DEPTH', '24'); //I haven't tested anything besides 24 +if(! defined('WEBSHOT_IMAGE_FORMAT') ) define ('WEBSHOT_IMAGE_FORMAT', 'png'); //png is about 2.5 times the size of jpg but is a LOT better quality +if(! defined('WEBSHOT_TIMEOUT') ) define ('WEBSHOT_TIMEOUT', '20'); //Seconds to wait for a webshot +if(! defined('WEBSHOT_USER_AGENT') ) define ('WEBSHOT_USER_AGENT', "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18"); //I hate to do this, but a non-browser robot user agent might not show what humans see. So we pretend to be Firefox +if(! defined('WEBSHOT_JAVASCRIPT_ON') ) define ('WEBSHOT_JAVASCRIPT_ON', true); //Setting to false might give you a slight speedup and block ads. But it could cause other issues. +if(! defined('WEBSHOT_JAVA_ON') ) define ('WEBSHOT_JAVA_ON', false); //Have only tested this as fase +if(! defined('WEBSHOT_PLUGINS_ON') ) define ('WEBSHOT_PLUGINS_ON', true); //Enable flash and other plugins +if(! defined('WEBSHOT_PROXY') ) define ('WEBSHOT_PROXY', ''); //In case you're behind a proxy server. +if(! defined('WEBSHOT_XVFB_RUNNING') ) define ('WEBSHOT_XVFB_RUNNING', false); //ADVANCED: Enable this if you've got Xvfb running in the background. + + +// If ALLOW_EXTERNAL is true and ALLOW_ALL_EXTERNAL_SITES is false, then external images will only be fetched from these domains and their subdomains. +if(! isset($ALLOWED_SITES)){ + $ALLOWED_SITES = array ( + 'flickr.com', + 'staticflickr.com', + 'picasa.com', + 'img.youtube.com', + 'upload.wikimedia.org', + 'photobucket.com', + 'imgur.com', + 'imageshack.us', + 'tinypic.com', + ); +} +// ------------------------------------------------------------- +// -------------- STOP EDITING CONFIGURATION HERE -------------- +// ------------------------------------------------------------- + +timthumb::start(); + +class timthumb { + protected $src = ""; + protected $is404 = false; + protected $docRoot = ""; + protected $lastURLError = false; + protected $localImage = ""; + protected $localImageMTime = 0; + protected $url = false; + protected $myHost = ""; + protected $isURL = false; + protected $cachefile = ''; + protected $errors = array(); + protected $toDeletes = array(); + protected $cacheDirectory = ''; + protected $startTime = 0; + protected $lastBenchTime = 0; + protected $cropTop = false; + protected $salt = ""; + protected $fileCacheVersion = 1; //Generally if timthumb.php is modifed (upgraded) then the salt changes and all cache files are recreated. This is a backup mechanism to force regen. + protected $filePrependSecurityBlock = "<?php die('Execution denied!'); //"; //Designed to have three letter mime type, space, question mark and greater than symbol appended. 6 bytes total. + protected static $curlDataWritten = 0; + protected static $curlFH = false; + public static function start(){ + $tim = new timthumb(); + $tim->handleErrors(); + $tim->securityChecks(); + if($tim->tryBrowserCache()){ + exit(0); + } + $tim->handleErrors(); + if(FILE_CACHE_ENABLED && $tim->tryServerCache()){ + exit(0); + } + $tim->handleErrors(); + $tim->run(); + $tim->handleErrors(); + exit(0); + } + public function __construct(){ + global $ALLOWED_SITES; + $this->startTime = microtime(true); + date_default_timezone_set('UTC'); + $this->debug(1, "Starting new request from " . $this->getIP() . " to " . $_SERVER['REQUEST_URI']); + $this->calcDocRoot(); + //On windows systems I'm assuming fileinode returns an empty string or a number that doesn't change. Check this. + $this->salt = @filemtime(__FILE__) . '-' . @fileinode(__FILE__); + $this->debug(3, "Salt is: " . $this->salt); + if(FILE_CACHE_DIRECTORY){ + if(! is_dir(FILE_CACHE_DIRECTORY)){ + @mkdir(FILE_CACHE_DIRECTORY); + if(! is_dir(FILE_CACHE_DIRECTORY)){ + $this->error("Could not create the file cache directory."); + return false; + } + } + $this->cacheDirectory = FILE_CACHE_DIRECTORY; + if (!touch($this->cacheDirectory . '/index.html')) { + $this->error("Could not create the index.html file - to fix this create an empty file named index.html file in the cache directory."); + } + } else { + $this->cacheDirectory = sys_get_temp_dir(); + } + //Clean the cache before we do anything because we don't want the first visitor after FILE_CACHE_TIME_BETWEEN_CLEANS expires to get a stale image. + $this->cleanCache(); + + $this->myHost = preg_replace('/^www\./i', '', $_SERVER['HTTP_HOST']); + $this->src = $this->param('src'); + $this->url = parse_url($this->src); + $this->src = preg_replace('/https?:\/\/(?:www\.)?' . $this->myHost . '/i', '', $this->src); + + if(strlen($this->src) <= 3){ + $this->error("No image specified"); + return false; + } + if(BLOCK_EXTERNAL_LEECHERS && array_key_exists('HTTP_REFERER', $_SERVER) && (! preg_match('/^https?:\/\/(?:www\.)?' . $this->myHost . '(?:$|\/)/i', $_SERVER['HTTP_REFERER']))){ + // base64 encoded red image that says 'no hotlinkers' + // nothing to worry about! :) + $imgData = base64_decode("R0lGODlhUAAMAIAAAP8AAP///yH5BAAHAP8ALAAAAABQAAwAAAJpjI+py+0Po5y0OgAMjjv01YUZ\nOGplhWXfNa6JCLnWkXplrcBmW+spbwvaVr/cDyg7IoFC2KbYVC2NQ5MQ4ZNao9Ynzjl9ScNYpneb\nDULB3RP6JuPuaGfuuV4fumf8PuvqFyhYtjdoeFgAADs="); + header('Content-Type: image/gif'); + header('Content-Length: ' . sizeof($imgData)); + header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); + header("Pragma: no-cache"); + header('Expires: ' . gmdate ('D, d M Y H:i:s', time())); + echo $imgData; + return false; + exit(0); + } + if(preg_match('/^https?:\/\/[^\/]+/i', $this->src)){ + $this->debug(2, "Is a request for an external URL: " . $this->src); + $this->isURL = true; + } else { + $this->debug(2, "Is a request for an internal file: " . $this->src); + } + if($this->isURL && (! ALLOW_EXTERNAL)){ + $this->error("You are not allowed to fetch images from an external website."); + return false; + } + if($this->isURL){ + if(ALLOW_ALL_EXTERNAL_SITES){ + $this->debug(2, "Fetching from all external sites is enabled."); + } else { + $this->debug(2, "Fetching only from selected external sites is enabled."); + $allowed = false; + foreach($ALLOWED_SITES as $site){ + if ((strtolower(substr($this->url['host'],-strlen($site)-1)) === strtolower(".$site")) || (strtolower($this->url['host'])===strtolower($site))) { + $this->debug(3, "URL hostname {$this->url['host']} matches $site so allowing."); + $allowed = true; + } + } + if(! $allowed){ + return $this->error("You may not fetch images from that site. To enable this site in timthumb, you can either add it to \$ALLOWED_SITES and set ALLOW_EXTERNAL=true. Or you can set ALLOW_ALL_EXTERNAL_SITES=true, depending on your security needs."); + } + } + } + + $cachePrefix = ($this->isURL ? '_ext_' : '_int_'); + if($this->isURL){ + $arr = explode('&', $_SERVER ['QUERY_STRING']); + asort($arr); + $this->cachefile = $this->cacheDirectory . '/' . FILE_CACHE_PREFIX . $cachePrefix . md5($this->salt . implode('', $arr) . $this->fileCacheVersion) . FILE_CACHE_SUFFIX; + } else { + $this->localImage = $this->getLocalImagePath($this->src); + if(! $this->localImage){ + $this->debug(1, "Could not find the local image: {$this->localImage}"); + $this->error("Could not find the internal image you specified."); + $this->set404(); + return false; + } + $this->debug(1, "Local image path is {$this->localImage}"); + $this->localImageMTime = @filemtime($this->localImage); + //We include the mtime of the local file in case in changes on disk. + $this->cachefile = $this->cacheDirectory . '/' . FILE_CACHE_PREFIX . $cachePrefix . md5($this->salt . $this->localImageMTime . $_SERVER ['QUERY_STRING'] . $this->fileCacheVersion) . FILE_CACHE_SUFFIX; + } + $this->debug(2, "Cache file is: " . $this->cachefile); + + return true; + } + public function __destruct(){ + foreach($this->toDeletes as $del){ + $this->debug(2, "Deleting temp file $del"); + @unlink($del); + } + } + public function run(){ + if($this->isURL){ + if(! ALLOW_EXTERNAL){ + $this->debug(1, "Got a request for an external image but ALLOW_EXTERNAL is disabled so returning error msg."); + $this->error("You are not allowed to fetch images from an external website."); + return false; + } + $this->debug(3, "Got request for external image. Starting serveExternalImage."); + if($this->param('webshot')){ + if(WEBSHOT_ENABLED){ + $this->debug(3, "webshot param is set, so we're going to take a webshot."); + $this->serveWebshot(); + } else { + $this->error("You added the webshot parameter but webshots are disabled on this server. You need to set WEBSHOT_ENABLED == true to enable webshots."); + } + } else { + $this->debug(3, "webshot is NOT set so we're going to try to fetch a regular image."); + $this->serveExternalImage(); + + } + } else { + $this->debug(3, "Got request for internal image. Starting serveInternalImage()"); + $this->serveInternalImage(); + } + return true; + } + protected function handleErrors(){ + if($this->haveErrors()){ + if(NOT_FOUND_IMAGE && $this->is404()){ + if($this->serveImg(NOT_FOUND_IMAGE)){ + exit(0); + } else { + $this->error("Additionally, the 404 image that is configured could not be found or there was an error serving it."); + } + } + if(ERROR_IMAGE){ + if($this->serveImg(ERROR_IMAGE)){ + exit(0); + } else { + $this->error("Additionally, the error image that is configured could not be found or there was an error serving it."); + } + } + $this->serveErrors(); + exit(0); + } + return false; + } + protected function tryBrowserCache(){ + if(BROWSER_CACHE_DISABLE){ $this->debug(3, "Browser caching is disabled"); return false; } + if(!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) ){ + $this->debug(3, "Got a conditional get"); + $mtime = false; + //We've already checked if the real file exists in the constructor + if(! is_file($this->cachefile)){ + //If we don't have something cached, regenerate the cached image. + return false; + } + if($this->localImageMTime){ + $mtime = $this->localImageMTime; + $this->debug(3, "Local real file's modification time is $mtime"); + } else if(is_file($this->cachefile)){ //If it's not a local request then use the mtime of the cached file to determine the 304 + $mtime = @filemtime($this->cachefile); + $this->debug(3, "Cached file's modification time is $mtime"); + } + if(! $mtime){ return false; } + + $iftime = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); + $this->debug(3, "The conditional get's if-modified-since unixtime is $iftime"); + if($iftime < 1){ + $this->debug(3, "Got an invalid conditional get modified since time. Returning false."); + return false; + } + if($iftime < $mtime){ //Real file or cache file has been modified since last request, so force refetch. + $this->debug(3, "File has been modified since last fetch."); + return false; + } else { //Otherwise serve a 304 + $this->debug(3, "File has not been modified since last get, so serving a 304."); + header ($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); + $this->debug(1, "Returning 304 not modified"); + return true; + } + } + return false; + } + protected function tryServerCache(){ + $this->debug(3, "Trying server cache"); + if(file_exists($this->cachefile)){ + $this->debug(3, "Cachefile {$this->cachefile} exists"); + if($this->isURL){ + $this->debug(3, "This is an external request, so checking if the cachefile is empty which means the request failed previously."); + if(filesize($this->cachefile) < 1){ + $this->debug(3, "Found an empty cachefile indicating a failed earlier request. Checking how old it is."); + //Fetching error occured previously + if(time() - @filemtime($this->cachefile) > WAIT_BETWEEN_FETCH_ERRORS){ + $this->debug(3, "File is older than " . WAIT_BETWEEN_FETCH_ERRORS . " seconds. Deleting and returning false so app can try and load file."); + @unlink($this->cachefile); + return false; //to indicate we didn't serve from cache and app should try and load + } else { + $this->debug(3, "Empty cachefile is still fresh so returning message saying we had an error fetching this image from remote host."); + $this->set404(); + $this->error("An error occured fetching image."); + return false; + } + } + } else { + $this->debug(3, "Trying to serve cachefile {$this->cachefile}"); + } + if($this->serveCacheFile()){ + $this->debug(3, "Succesfully served cachefile {$this->cachefile}"); + return true; + } else { + $this->debug(3, "Failed to serve cachefile {$this->cachefile} - Deleting it from cache."); + //Image serving failed. We can't retry at this point, but lets remove it from cache so the next request recreates it + @unlink($this->cachefile); + return true; + } + } + } + protected function error($err){ + $this->debug(3, "Adding error message: $err"); + $this->errors[] = $err; + return false; + + } + protected function haveErrors(){ + if(sizeof($this->errors) > 0){ + return true; + } + return false; + } + protected function serveErrors(){ + header ($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request'); + $html = '<ul>'; + foreach($this->errors as $err){ + $html .= '<li>' . htmlentities($err) . '</li>'; + } + $html .= '</ul>'; + echo '<h1>A TimThumb error has occured</h1>The following error(s) occured:<br />' . $html . '<br />'; + echo '<br />Query String : ' . htmlentities ($_SERVER['QUERY_STRING']); + echo '<br />TimThumb version : ' . VERSION . '</pre>'; + } + protected function serveInternalImage(){ + $this->debug(3, "Local image path is $this->localImage"); + if(! $this->localImage){ + $this->sanityFail("localImage not set after verifying it earlier in the code."); + return false; + } + $fileSize = filesize($this->localImage); + if($fileSize > MAX_FILE_SIZE){ + $this->error("The file you specified is greater than the maximum allowed file size."); + return false; + } + if($fileSize <= 0){ + $this->error("The file you specified is <= 0 bytes."); + return false; + } + $this->debug(3, "Calling processImageAndWriteToCache() for local image."); + if($this->processImageAndWriteToCache($this->localImage)){ + $this->serveCacheFile(); + return true; + } else { + return false; + } + } + protected function cleanCache(){ + if (FILE_CACHE_TIME_BETWEEN_CLEANS < 0) { + return; + } + $this->debug(3, "cleanCache() called"); + $lastCleanFile = $this->cacheDirectory . '/timthumb_cacheLastCleanTime.touch'; + + //If this is a new timthumb installation we need to create the file + if(! is_file($lastCleanFile)){ + $this->debug(1, "File tracking last clean doesn't exist. Creating $lastCleanFile"); + if (!touch($lastCleanFile)) { + $this->error("Could not create cache clean timestamp file."); + } + return; + } + if(@filemtime($lastCleanFile) < (time() - FILE_CACHE_TIME_BETWEEN_CLEANS) ){ //Cache was last cleaned more than 1 day ago + $this->debug(1, "Cache was last cleaned more than " . FILE_CACHE_TIME_BETWEEN_CLEANS . " seconds ago. Cleaning now."); + // Very slight race condition here, but worst case we'll have 2 or 3 servers cleaning the cache simultaneously once a day. + if (!touch($lastCleanFile)) { + $this->error("Could not create cache clean timestamp file."); + } + $files = glob($this->cacheDirectory . '/*' . FILE_CACHE_SUFFIX); + if ($files) { + $timeAgo = time() - FILE_CACHE_MAX_FILE_AGE; + foreach($files as $file){ + if(@filemtime($file) < $timeAgo){ + $this->debug(3, "Deleting cache file $file older than max age: " . FILE_CACHE_MAX_FILE_AGE . " seconds"); + @unlink($file); + } + } + } + return true; + } else { + $this->debug(3, "Cache was cleaned less than " . FILE_CACHE_TIME_BETWEEN_CLEANS . " seconds ago so no cleaning needed."); + } + return false; + } + protected function processImageAndWriteToCache($localImage){ + $sData = getimagesize($localImage); + $origType = $sData[2]; + $mimeType = $sData['mime']; + + $this->debug(3, "Mime type of image is $mimeType"); + if(! preg_match('/^image\/(?:gif|jpg|jpeg|png)$/i', $mimeType)){ + return $this->error("The image being resized is not a valid gif, jpg or png."); + } + + if (!function_exists ('imagecreatetruecolor')) { + return $this->error('GD Library Error: imagecreatetruecolor does not exist - please contact your webhost and ask them to install the GD library'); + } + + if (function_exists ('imagefilter') && defined ('IMG_FILTER_NEGATE')) { + $imageFilters = array ( + 1 => array (IMG_FILTER_NEGATE, 0), + 2 => array (IMG_FILTER_GRAYSCALE, 0), + 3 => array (IMG_FILTER_BRIGHTNESS, 1), + 4 => array (IMG_FILTER_CONTRAST, 1), + 5 => array (IMG_FILTER_COLORIZE, 4), + 6 => array (IMG_FILTER_EDGEDETECT, 0), + 7 => array (IMG_FILTER_EMBOSS, 0), + 8 => array (IMG_FILTER_GAUSSIAN_BLUR, 0), + 9 => array (IMG_FILTER_SELECTIVE_BLUR, 0), + 10 => array (IMG_FILTER_MEAN_REMOVAL, 0), + 11 => array (IMG_FILTER_SMOOTH, 0), + ); + } + + // get standard input properties + $new_width = (int) abs ($this->param('w', 0)); + $new_height = (int) abs ($this->param('h', 0)); + $zoom_crop = (int) $this->param('zc', DEFAULT_ZC); + $quality = (int) abs ($this->param('q', DEFAULT_Q)); + $align = $this->cropTop ? 't' : $this->param('a', 'c'); + $filters = $this->param('f', DEFAULT_F); + $sharpen = (bool) $this->param('s', DEFAULT_S); + $canvas_color = $this->param('cc', DEFAULT_CC); + $canvas_trans = (bool) $this->param('ct', '1'); + + // set default width and height if neither are set already + if ($new_width == 0 && $new_height == 0) { + $new_width = 100; + $new_height = 100; + } + + // ensure size limits can not be abused + $new_width = min ($new_width, MAX_WIDTH); + $new_height = min ($new_height, MAX_HEIGHT); + + // set memory limit to be able to have enough space to resize larger images + $this->setMemoryLimit(); + + // open the existing image + $image = $this->openImage ($mimeType, $localImage); + if ($image === false) { + return $this->error('Unable to open image.'); + } + + // Get original width and height + $width = imagesx ($image); + $height = imagesy ($image); + $origin_x = 0; + $origin_y = 0; + + // generate new w/h if not provided + if ($new_width && !$new_height) { + $new_height = floor ($height * ($new_width / $width)); + } else if ($new_height && !$new_width) { + $new_width = floor ($width * ($new_height / $height)); + } + + // scale down and add borders + if ($zoom_crop == 3) { + + $final_height = $height * ($new_width / $width); + + if ($final_height > $new_height) { + $new_width = $width * ($new_height / $height); + } else { + $new_height = $final_height; + } + + } + + // create a new true color image + $canvas = imagecreatetruecolor ($new_width, $new_height); + imagealphablending ($canvas, false); + + if (strlen($canvas_color) == 3) { //if is 3-char notation, edit string into 6-char notation + $canvas_color = str_repeat(substr($canvas_color, 0, 1), 2) . str_repeat(substr($canvas_color, 1, 1), 2) . str_repeat(substr($canvas_color, 2, 1), 2); + } else if (strlen($canvas_color) != 6) { + $canvas_color = DEFAULT_CC; // on error return default canvas color + } + + $canvas_color_R = hexdec (substr ($canvas_color, 0, 2)); + $canvas_color_G = hexdec (substr ($canvas_color, 2, 2)); + $canvas_color_B = hexdec (substr ($canvas_color, 4, 2)); + + // Create a new transparent color for image + // If is a png and PNG_IS_TRANSPARENT is false then remove the alpha transparency + // (and if is set a canvas color show it in the background) + if(preg_match('/^image\/png$/i', $mimeType) && !PNG_IS_TRANSPARENT && $canvas_trans){ + $color = imagecolorallocatealpha ($canvas, $canvas_color_R, $canvas_color_G, $canvas_color_B, 127); + }else{ + $color = imagecolorallocatealpha ($canvas, $canvas_color_R, $canvas_color_G, $canvas_color_B, 0); + } + + + // Completely fill the background of the new image with allocated color. + imagefill ($canvas, 0, 0, $color); + + // scale down and add borders + if ($zoom_crop == 2) { + + $final_height = $height * ($new_width / $width); + + if ($final_height > $new_height) { + + $origin_x = $new_width / 2; + $new_width = $width * ($new_height / $height); + $origin_x = round ($origin_x - ($new_width / 2)); + + } else { + + $origin_y = $new_height / 2; + $new_height = $final_height; + $origin_y = round ($origin_y - ($new_height / 2)); + + } + + } + + // Restore transparency blending + imagesavealpha ($canvas, true); + + if ($zoom_crop > 0) { + + $src_x = $src_y = 0; + $src_w = $width; + $src_h = $height; + + $cmp_x = $width / $new_width; + $cmp_y = $height / $new_height; + + // calculate x or y coordinate and width or height of source + if ($cmp_x > $cmp_y) { + + $src_w = round ($width / $cmp_x * $cmp_y); + $src_x = round (($width - ($width / $cmp_x * $cmp_y)) / 2); + + } else if ($cmp_y > $cmp_x) { + + $src_h = round ($height / $cmp_y * $cmp_x); + $src_y = round (($height - ($height / $cmp_y * $cmp_x)) / 2); + + } + + // positional cropping! + if ($align) { + if (strpos ($align, 't') !== false) { + $src_y = 0; + } + if (strpos ($align, 'b') !== false) { + $src_y = $height - $src_h; + } + if (strpos ($align, 'l') !== false) { + $src_x = 0; + } + if (strpos ($align, 'r') !== false) { + $src_x = $width - $src_w; + } + } + + imagecopyresampled ($canvas, $image, $origin_x, $origin_y, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h); + + } else { + + // copy and resize part of an image with resampling + imagecopyresampled ($canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); + + } + + if ($filters != '' && function_exists ('imagefilter') && defined ('IMG_FILTER_NEGATE')) { + // apply filters to image + $filterList = explode ('|', $filters); + foreach ($filterList as $fl) { + + $filterSettings = explode (',', $fl); + if (isset ($imageFilters[$filterSettings[0]])) { + + for ($i = 0; $i < 4; $i ++) { + if (!isset ($filterSettings[$i])) { + $filterSettings[$i] = null; + } else { + $filterSettings[$i] = (int) $filterSettings[$i]; + } + } + + switch ($imageFilters[$filterSettings[0]][1]) { + + case 1: + + imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1]); + break; + + case 2: + + imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2]); + break; + + case 3: + + imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2], $filterSettings[3]); + break; + + case 4: + + imagefilter ($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2], $filterSettings[3], $filterSettings[4]); + break; + + default: + + imagefilter ($canvas, $imageFilters[$filterSettings[0]][0]); + break; + + } + } + } + } + + // sharpen image + if ($sharpen && function_exists ('imageconvolution')) { + + $sharpenMatrix = array ( + array (-1,-1,-1), + array (-1,16,-1), + array (-1,-1,-1), + ); + + $divisor = 8; + $offset = 0; + + imageconvolution ($canvas, $sharpenMatrix, $divisor, $offset); + + } + //Straight from Wordpress core code. Reduces filesize by up to 70% for PNG's + if ( (IMAGETYPE_PNG == $origType || IMAGETYPE_GIF == $origType) && function_exists('imageistruecolor') && !imageistruecolor( $image ) && imagecolortransparent( $image ) > 0 ){ + imagetruecolortopalette( $canvas, false, imagecolorstotal( $image ) ); + } + + $imgType = ""; + $tempfile = tempnam($this->cacheDirectory, 'timthumb_tmpimg_'); + if(preg_match('/^image\/(?:jpg|jpeg)$/i', $mimeType)){ + $imgType = 'jpg'; + imagejpeg($canvas, $tempfile, $quality); + } else if(preg_match('/^image\/png$/i', $mimeType)){ + $imgType = 'png'; + imagepng($canvas, $tempfile, floor($quality * 0.09)); + } else if(preg_match('/^image\/gif$/i', $mimeType)){ + $imgType = 'gif'; + imagegif($canvas, $tempfile); + } else { + return $this->sanityFail("Could not match mime type after verifying it previously."); + } + + if($imgType == 'png' && OPTIPNG_ENABLED && OPTIPNG_PATH && @is_file(OPTIPNG_PATH)){ + $exec = OPTIPNG_PATH; + $this->debug(3, "optipng'ing $tempfile"); + $presize = filesize($tempfile); + $out = `$exec -o1 $tempfile`; //you can use up to -o7 but it really slows things down + clearstatcache(); + $aftersize = filesize($tempfile); + $sizeDrop = $presize - $aftersize; + if($sizeDrop > 0){ + $this->debug(1, "optipng reduced size by $sizeDrop"); + } else if($sizeDrop < 0){ + $this->debug(1, "optipng increased size! Difference was: $sizeDrop"); + } else { + $this->debug(1, "optipng did not change image size."); + } + } else if($imgType == 'png' && PNGCRUSH_ENABLED && PNGCRUSH_PATH && @is_file(PNGCRUSH_PATH)){ + $exec = PNGCRUSH_PATH; + $tempfile2 = tempnam($this->cacheDirectory, 'timthumb_tmpimg_'); + $this->debug(3, "pngcrush'ing $tempfile to $tempfile2"); + $out = `$exec $tempfile $tempfile2`; + $todel = ""; + if(is_file($tempfile2)){ + $sizeDrop = filesize($tempfile) - filesize($tempfile2); + if($sizeDrop > 0){ + $this->debug(1, "pngcrush was succesful and gave a $sizeDrop byte size reduction"); + $todel = $tempfile; + $tempfile = $tempfile2; + } else { + $this->debug(1, "pngcrush did not reduce file size. Difference was $sizeDrop bytes."); + $todel = $tempfile2; + } + } else { + $this->debug(3, "pngcrush failed with output: $out"); + $todel = $tempfile2; + } + @unlink($todel); + } + + $this->debug(3, "Rewriting image with security header."); + $tempfile4 = tempnam($this->cacheDirectory, 'timthumb_tmpimg_'); + $context = stream_context_create (); + $fp = fopen($tempfile,'r',0,$context); + file_put_contents($tempfile4, $this->filePrependSecurityBlock . $imgType . ' ?' . '>'); //6 extra bytes, first 3 being image type + file_put_contents($tempfile4, $fp, FILE_APPEND); + fclose($fp); + @unlink($tempfile); + $this->debug(3, "Locking and replacing cache file."); + $lockFile = $this->cachefile . '.lock'; + $fh = fopen($lockFile, 'w'); + if(! $fh){ + return $this->error("Could not open the lockfile for writing an image."); + } + if(flock($fh, LOCK_EX)){ + @unlink($this->cachefile); //rename generally overwrites, but doing this in case of platform specific quirks. File might not exist yet. + rename($tempfile4, $this->cachefile); + flock($fh, LOCK_UN); + fclose($fh); + @unlink($lockFile); + } else { + fclose($fh); + @unlink($lockFile); + @unlink($tempfile4); + return $this->error("Could not get a lock for writing."); + } + $this->debug(3, "Done image replace with security header. Cleaning up and running cleanCache()"); + imagedestroy($canvas); + imagedestroy($image); + return true; + } + protected function calcDocRoot(){ + $docRoot = @$_SERVER['DOCUMENT_ROOT']; + if (defined('LOCAL_FILE_BASE_DIRECTORY')) { + $docRoot = LOCAL_FILE_BASE_DIRECTORY; + } + if(!isset($docRoot)){ + $this->debug(3, "DOCUMENT_ROOT is not set. This is probably windows. Starting search 1."); + if(isset($_SERVER['SCRIPT_FILENAME'])){ + $docRoot = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0-strlen($_SERVER['PHP_SELF']))); + $this->debug(3, "Generated docRoot using SCRIPT_FILENAME and PHP_SELF as: $docRoot"); + } + } + if(!isset($docRoot)){ + $this->debug(3, "DOCUMENT_ROOT still is not set. Starting search 2."); + if(isset($_SERVER['PATH_TRANSLATED'])){ + $docRoot = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0-strlen($_SERVER['PHP_SELF']))); + $this->debug(3, "Generated docRoot using PATH_TRANSLATED and PHP_SELF as: $docRoot"); + } + } + if($docRoot && $_SERVER['DOCUMENT_ROOT'] != '/'){ $docRoot = preg_replace('/\/$/', '', $docRoot); } + $this->debug(3, "Doc root is: " . $docRoot); + $this->docRoot = $docRoot; + + } + protected function getLocalImagePath($src){ + $src = ltrim($src, '/'); //strip off the leading '/' + if(! $this->docRoot){ + $this->debug(3, "We have no document root set, so as a last resort, lets check if the image is in the current dir and serve that."); + //We don't support serving images outside the current dir if we don't have a doc root for security reasons. + $file = preg_replace('/^.*?([^\/\\\\]+)$/', '$1', $src); //strip off any path info and just leave the filename. + if(is_file($file)){ + return $this->realpath($file); + } + return $this->error("Could not find your website document root and the file specified doesn't exist in timthumbs directory. We don't support serving files outside timthumb's directory without a document root for security reasons."); + } //Do not go past this point without docRoot set + + //Try src under docRoot + if(file_exists ($this->docRoot . '/' . $src)) { + $this->debug(3, "Found file as " . $this->docRoot . '/' . $src); + $real = $this->realpath($this->docRoot . '/' . $src); + if(stripos($real, $this->docRoot) === 0){ + return $real; + } else { + $this->debug(1, "Security block: The file specified occurs outside the document root."); + //allow search to continue + } + } + //Check absolute paths and then verify the real path is under doc root + $absolute = $this->realpath('/' . $src); + if($absolute && file_exists($absolute)){ //realpath does file_exists check, so can probably skip the exists check here + $this->debug(3, "Found absolute path: $absolute"); + if(! $this->docRoot){ $this->sanityFail("docRoot not set when checking absolute path."); } + if(stripos($absolute, $this->docRoot) === 0){ + return $absolute; + } else { + $this->debug(1, "Security block: The file specified occurs outside the document root."); + //and continue search + } + } + + $base = $this->docRoot; + + // account for Windows directory structure + if (strstr($_SERVER['SCRIPT_FILENAME'],':')) { + $sub_directories = explode('\\', str_replace($this->docRoot, '', $_SERVER['SCRIPT_FILENAME'])); + } else { + $sub_directories = explode('/', str_replace($this->docRoot, '', $_SERVER['SCRIPT_FILENAME'])); + } + + foreach ($sub_directories as $sub){ + $base .= $sub . '/'; + $this->debug(3, "Trying file as: " . $base . $src); + if(file_exists($base . $src)){ + $this->debug(3, "Found file as: " . $base . $src); + $real = $this->realpath($base . $src); + if(stripos($real, $this->realpath($this->docRoot)) === 0){ + return $real; + } else { + $this->debug(1, "Security block: The file specified occurs outside the document root."); + //And continue search + } + } + } + return false; + } + protected function realpath($path){ + //try to remove any relative paths + $remove_relatives = '/\w+\/\.\.\//'; + while(preg_match($remove_relatives,$path)){ + $path = preg_replace($remove_relatives, '', $path); + } + //if any remain use PHP realpath to strip them out, otherwise return $path + //if using realpath, any symlinks will also be resolved + return preg_match('#^\.\./|/\.\./#', $path) ? realpath($path) : $path; + } + protected function toDelete($name){ + $this->debug(3, "Scheduling file $name to delete on destruct."); + $this->toDeletes[] = $name; + } + protected function serveWebshot(){ + $this->debug(3, "Starting serveWebshot"); + $instr = "Please follow the instructions at http://code.google.com/p/timthumb/ to set your server up for taking website screenshots."; + if(! is_file(WEBSHOT_CUTYCAPT)){ + return $this->error("CutyCapt is not installed. $instr"); + } + if(! is_file(WEBSHOT_XVFB)){ + return $this->Error("Xvfb is not installed. $instr"); + } + $cuty = WEBSHOT_CUTYCAPT; + $xv = WEBSHOT_XVFB; + $screenX = WEBSHOT_SCREEN_X; + $screenY = WEBSHOT_SCREEN_Y; + $colDepth = WEBSHOT_COLOR_DEPTH; + $format = WEBSHOT_IMAGE_FORMAT; + $timeout = WEBSHOT_TIMEOUT * 1000; + $ua = WEBSHOT_USER_AGENT; + $jsOn = WEBSHOT_JAVASCRIPT_ON ? 'on' : 'off'; + $javaOn = WEBSHOT_JAVA_ON ? 'on' : 'off'; + $pluginsOn = WEBSHOT_PLUGINS_ON ? 'on' : 'off'; + $proxy = WEBSHOT_PROXY ? ' --http-proxy=' . WEBSHOT_PROXY : ''; + $tempfile = tempnam($this->cacheDirectory, 'timthumb_webshot'); + $url = $this->src; + if(! preg_match('/^https?:\/\/[a-zA-Z0-9\.\-]+/i', $url)){ + return $this->error("Invalid URL supplied."); + } + $url = preg_replace('/[^A-Za-z0-9\-\.\_\~:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=]+/', '', $url); //RFC 3986 + //Very important we don't allow injection of shell commands here. URL is between quotes and we are only allowing through chars allowed by a the RFC + // which AFAIKT can't be used for shell injection. + if(WEBSHOT_XVFB_RUNNING){ + putenv('DISPLAY=:100.0'); + $command = "$cuty $proxy --max-wait=$timeout --user-agent=\"$ua\" --javascript=$jsOn --java=$javaOn --plugins=$pluginsOn --js-can-open-windows=off --url=\"$url\" --out-format=$format --out=$tempfile"; + } else { + $command = "$xv --server-args=\"-screen 0, {$screenX}x{$screenY}x{$colDepth}\" $cuty $proxy --max-wait=$timeout --user-agent=\"$ua\" --javascript=$jsOn --java=$javaOn --plugins=$pluginsOn --js-can-open-windows=off --url=\"$url\" --out-format=$format --out=$tempfile"; + } + $this->debug(3, "Executing command: $command"); + $out = `$command`; + $this->debug(3, "Received output: $out"); + if(! is_file($tempfile)){ + $this->set404(); + return $this->error("The command to create a thumbnail failed."); + } + $this->cropTop = true; + if($this->processImageAndWriteToCache($tempfile)){ + $this->debug(3, "Image processed succesfully. Serving from cache"); + return $this->serveCacheFile(); + } else { + return false; + } + } + protected function serveExternalImage(){ + if(! preg_match('/^https?:\/\/[a-zA-Z0-9\-\.]+/i', $this->src)){ + $this->error("Invalid URL supplied."); + return false; + } + $tempfile = tempnam($this->cacheDirectory, 'timthumb'); + $this->debug(3, "Fetching external image into temporary file $tempfile"); + $this->toDelete($tempfile); + #fetch file here + if(! $this->getURL($this->src, $tempfile)){ + @unlink($this->cachefile); + touch($this->cachefile); + $this->debug(3, "Error fetching URL: " . $this->lastURLError); + $this->error("Error reading the URL you specified from remote host." . $this->lastURLError); + return false; + } + + $mimeType = $this->getMimeType($tempfile); + if(! preg_match("/^image\/(?:jpg|jpeg|gif|png)$/i", $mimeType)){ + $this->debug(3, "Remote file has invalid mime type: $mimeType"); + @unlink($this->cachefile); + touch($this->cachefile); + $this->error("The remote file is not a valid image."); + return false; + } + if($this->processImageAndWriteToCache($tempfile)){ + $this->debug(3, "Image processed succesfully. Serving from cache"); + return $this->serveCacheFile(); + } else { + return false; + } + } + public static function curlWrite($h, $d){ + fwrite(self::$curlFH, $d); + self::$curlDataWritten += strlen($d); + if(self::$curlDataWritten > MAX_FILE_SIZE){ + return 0; + } else { + return strlen($d); + } + } + protected function serveCacheFile(){ + $this->debug(3, "Serving {$this->cachefile}"); + if(! is_file($this->cachefile)){ + $this->error("serveCacheFile called in timthumb but we couldn't find the cached file."); + return false; + } + $fp = fopen($this->cachefile, 'rb'); + if(! $fp){ return $this->error("Could not open cachefile."); } + fseek($fp, strlen($this->filePrependSecurityBlock), SEEK_SET); + $imgType = fread($fp, 3); + fseek($fp, 3, SEEK_CUR); + if(ftell($fp) != strlen($this->filePrependSecurityBlock) + 6){ + @unlink($this->cachefile); + return $this->error("The cached image file seems to be corrupt."); + } + $imageDataSize = filesize($this->cachefile) - (strlen($this->filePrependSecurityBlock) + 6); + $this->sendImageHeaders($imgType, $imageDataSize); + $bytesSent = @fpassthru($fp); + fclose($fp); + if($bytesSent > 0){ + return true; + } + $content = file_get_contents ($this->cachefile); + if ($content != FALSE) { + $content = substr($content, strlen($this->filePrependSecurityBlock) + 6); + echo $content; + $this->debug(3, "Served using file_get_contents and echo"); + return true; + } else { + $this->error("Cache file could not be loaded."); + return false; + } + } + protected function sendImageHeaders($mimeType, $dataSize){ + if(! preg_match('/^image\//i', $mimeType)){ + $mimeType = 'image/' . $mimeType; + } + if(strtolower($mimeType) == 'image/jpg'){ + $mimeType = 'image/jpeg'; + } + $gmdate_expires = gmdate ('D, d M Y H:i:s', strtotime ('now +10 days')) . ' GMT'; + $gmdate_modified = gmdate ('D, d M Y H:i:s') . ' GMT'; + // send content headers then display image + header ('Content-Type: ' . $mimeType); + header ('Accept-Ranges: none'); //Changed this because we don't accept range requests + header ('Last-Modified: ' . $gmdate_modified); + header ('Content-Length: ' . $dataSize); + if(BROWSER_CACHE_DISABLE){ + $this->debug(3, "Browser cache is disabled so setting non-caching headers."); + header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); + header("Pragma: no-cache"); + header('Expires: ' . gmdate ('D, d M Y H:i:s', time())); + } else { + $this->debug(3, "Browser caching is enabled"); + header('Cache-Control: max-age=' . BROWSER_CACHE_MAX_AGE . ', must-revalidate'); + header('Expires: ' . $gmdate_expires); + } + return true; + } + protected function securityChecks(){ + } + protected function param($property, $default = ''){ + if (isset ($_GET[$property])) { + return $_GET[$property]; + } else { + return $default; + } + } + protected function openImage($mimeType, $src){ + switch ($mimeType) { + case 'image/jpeg': + $image = imagecreatefromjpeg ($src); + break; + + case 'image/png': + $image = imagecreatefrompng ($src); + break; + + case 'image/gif': + $image = imagecreatefromgif ($src); + break; + + default: + $this->error("Unrecognised mimeType"); + } + + return $image; + } + protected function getIP(){ + $rem = @$_SERVER["REMOTE_ADDR"]; + $ff = @$_SERVER["HTTP_X_FORWARDED_FOR"]; + $ci = @$_SERVER["HTTP_CLIENT_IP"]; + if(preg_match('/^(?:192\.168|172\.16|10\.|127\.)/', $rem)){ + if($ff){ return $ff; } + if($ci){ return $ci; } + return $rem; + } else { + if($rem){ return $rem; } + if($ff){ return $ff; } + if($ci){ return $ci; } + return "UNKNOWN"; + } + } + protected function debug($level, $msg){ + if(DEBUG_ON && $level <= DEBUG_LEVEL){ + $execTime = sprintf('%.6f', microtime(true) - $this->startTime); + $tick = sprintf('%.6f', 0); + if($this->lastBenchTime > 0){ + $tick = sprintf('%.6f', microtime(true) - $this->lastBenchTime); + } + $this->lastBenchTime = microtime(true); + error_log("TimThumb Debug line " . __LINE__ . " [$execTime : $tick]: $msg"); + } + } + protected function sanityFail($msg){ + return $this->error("There is a problem in the timthumb code. Message: Please report this error at <a href='http://code.google.com/p/timthumb/issues/list'>timthumb's bug tracking page</a>: $msg"); + } + protected function getMimeType($file){ + $info = getimagesize($file); + if(is_array($info) && $info['mime']){ + return $info['mime']; + } + return ''; + } + protected function setMemoryLimit(){ + $inimem = ini_get('memory_limit'); + $inibytes = timthumb::returnBytes($inimem); + $ourbytes = timthumb::returnBytes(MEMORY_LIMIT); + if($inibytes < $ourbytes){ + ini_set ('memory_limit', MEMORY_LIMIT); + $this->debug(3, "Increased memory from $inimem to " . MEMORY_LIMIT); + } else { + $this->debug(3, "Not adjusting memory size because the current setting is " . $inimem . " and our size of " . MEMORY_LIMIT . " is smaller."); + } + } + protected static function returnBytes($size_str){ + switch (substr ($size_str, -1)) + { + case 'M': case 'm': return (int)$size_str * 1048576; + case 'K': case 'k': return (int)$size_str * 1024; + case 'G': case 'g': return (int)$size_str * 1073741824; + default: return $size_str; + } + } + protected function getURL($url, $tempfile){ + $this->lastURLError = false; + $url = preg_replace('/ /', '%20', $url); + if(function_exists('curl_init')){ + $this->debug(3, "Curl is installed so using it to fetch URL."); + self::$curlFH = fopen($tempfile, 'w'); + if(! self::$curlFH){ + $this->error("Could not open $tempfile for writing."); + return false; + } + self::$curlDataWritten = 0; + $this->debug(3, "Fetching url with curl: $url"); + $curl = curl_init($url); + curl_setopt ($curl, CURLOPT_TIMEOUT, CURL_TIMEOUT); + curl_setopt ($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"); + curl_setopt ($curl, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt ($curl, CURLOPT_HEADER, 0); + curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt ($curl, CURLOPT_WRITEFUNCTION, 'timthumb::curlWrite'); + @curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, true); + @curl_setopt ($curl, CURLOPT_MAXREDIRS, 10); + + $curlResult = curl_exec($curl); + fclose(self::$curlFH); + $httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if($httpStatus == 404){ + $this->set404(); + } + if($curlResult){ + curl_close($curl); + return true; + } else { + $this->lastURLError = curl_error($curl); + curl_close($curl); + return false; + } + } else { + $img = @file_get_contents ($url); + if($img === false){ + $err = error_get_last(); + if(is_array($err) && $err['message']){ + $this->lastURLError = $err['message']; + } else { + $this->lastURLError = $err; + } + if(preg_match('/404/', $this->lastURLError)){ + $this->set404(); + } + + return false; + } + if(! file_put_contents($tempfile, $img)){ + $this->error("Could not write to $tempfile."); + return false; + } + return true; + } + + } + protected function serveImg($file){ + $s = getimagesize($file); + if(! ($s && $s['mime'])){ + return false; + } + header ('Content-Type: ' . $s['mime']); + header ('Content-Length: ' . filesize($file) ); + header ('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); + header ("Pragma: no-cache"); + $bytes = @readfile($file); + if($bytes > 0){ + return true; + } + $content = @file_get_contents ($file); + if ($content != FALSE){ + echo $content; + return true; + } + return false; + + } + protected function set404(){ + $this->is404 = true; + } + protected function is404(){ + return $this->is404; + } +} +?> \ No newline at end of file diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.mo b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.mo index be73598f219e192d3b3f2b2e97628d89cadf2274..c2e63a7d96183eedafe8c4555230411cf35db006 100644 Binary files a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.mo and b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.mo differ diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.po b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.po index 3c3a4ca3e6354ded8e4ce93131742e57400d9f6c..b7bc18f6d33b995528ade5d07e628c11c51fe77a 100644 --- a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.po +++ b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-es_ES.po @@ -2,706 +2,803 @@ msgid "" msgstr "" "Project-Id-Version: Wordpress Popular Posts\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-02 11:05-0430\n" +"POT-Creation-Date: 2012-08-31 11:32-0430\n" "PO-Revision-Date: \n" "Last-Translator: Hector Cabrera <me@cabrerahector.com>\n" "Language-Team: Héctor Cabrera <admin@rauru.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: English\n" -"X-Poedit-Country: VENEZUELA\n" +"Language: en_VE\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: .\n" -#: maintenance.php:58 +#: admin.php:33 +#: admin.php:44 +#: admin.php:50 +#: admin.php:57 +msgid "Settings saved." +msgstr "Configuración guardada." + +#: admin.php:38 +msgid "Please provide the name of your custom field." +msgstr "Por favor indica el nombre de tu custom field." + +#: admin.php:247 msgid "This operation will delete all entries from Wordpress Popular Posts' cache table and cannot be undone." -msgstr "Esta operación eliminará todas las entradas del cache de Wordpress Popular Posts y no puede revertirse." +msgstr "Esta operación borrará todas las entradas en el caché de Wordpress Popular Posts y no puede ser reversado." -#: maintenance.php:58 -#: maintenance.php:66 +#: admin.php:247 +#: admin.php:255 msgid "Do you want to continue?" -msgstr "¿Quieres continuar?" +msgstr "¿Deseas continuar?" -#: maintenance.php:66 +#: admin.php:255 msgid "This operation will delete all stored info from Wordpress Popular Posts' data tables and cannot be undone." -msgstr "Esta operación eliminará toda la información almacenada de las tablas de data de Wordpress Popular Posts y no puede revertirse." +msgstr "Esta operación borrará toda la información guardada en las tablas de Wordpress Popular Posts y no puede ser reversado." + +#: admin.php:269 +msgid "Stats" +msgstr "Estadísticas" + +#: admin.php:270 +msgid "FAQ" +msgstr "FAQ" + +#: admin.php:271 +msgid "Tools" +msgstr "Herramientas" + +#: admin.php:275 +msgid "Click on each tab to see what are the most popular entries on your blog today, this week, last 30 days or all time since Wordpress Popular Posts was installed." +msgstr "Haz clic en cada pestaña para ver las entradas más populares de tu blog hoy, esta semana, los últimos 30 dís o de todos los tiempos." + +#: admin.php:281 +msgid "Order by comments" +msgstr "Ordenar por comentarios" + +#: admin.php:282 +msgid "Order by views" +msgstr "Ordenar por vistas" -#: maintenance.php:78 -msgid "Whoa! What just happened in here?!" -msgstr "¡Whoa! ¿Qué pasó aquí?" +#: admin.php:283 +msgid "Order by avg. daily views" +msgstr "Ordenar por average de vistas diarias" -#: maintenance.php:79 -msgid "Previous users of Wordpress Popular Posts will remember that earlier versions of my plugin used to display a Settings page over here. However, from version 2.0 and on things will be slightly different." -msgstr "Los usuarios previos de Wordpress Popular Posts recordarán que versiones anteriores de mi plugin mostraba una página de Configuración aquí. Sin embargo, desde la versión 2.0 en adelante las cosas serán algo diferentes." +#: admin.php:285 +msgid "Limit" +msgstr "Límite" + +#: admin.php:287 +#: admin.php:667 +#: admin.php:683 +#: admin.php:700 +msgid "Apply" +msgstr "Aplicar" + +#: admin.php:293 +#: wordpress-popular-posts.php:307 +msgid "Last 24 hours" +msgstr "Últimas 24 horas" + +#: admin.php:294 +#: wordpress-popular-posts.php:308 +msgid "Last 7 days" +msgstr "Últimos 7 días" + +#: admin.php:295 +#: wordpress-popular-posts.php:309 +msgid "Last 30 days" +msgstr "Últimos 30 días" + +#: admin.php:296 +#: wordpress-popular-posts.php:310 +msgid "All-time" +msgstr "Todos los tiempos" -#: maintenance.php:80 -msgid "Wordpress Popular Posts has gone multi-widget so now you'll be able to install multiple instances of my plugin on your sidebars, each with its own unique settings! Because of that, having a General Settings page to handle all instances is simply not a good idea. Fear not, my friend, since you still can set each instance's configuration via" -msgstr "Wordpress Popular Posts ahora es multi-widget, podrás instalar múltiples instancias de mi plugin en tus barras laterales, ¡cada una con su configuración propia! Por ello, tener una página de Configuración General para manejar todas las instancias no es una buena idea. No temas, amigo mío, ya que puedes manejar la configuración de cada instancia a través de la sección" +#: admin.php:317 +msgid "Frequently Asked Questions" +msgstr "Preguntas Frecuentes (FAQ)" -#: maintenance.php:80 -msgid "Widgets page" -msgstr "Widgets" +#: admin.php:321 +msgid "What does \"Title\" do?" +msgstr "¿Para qué es \"Título\"?" -#: maintenance.php:84 -msgid "Help" -msgstr "Ayuda" +#: admin.php:323 +msgid "It allows you to show a heading for your most popular posts listing. If left empty, no heading will be displayed at all." +msgstr "Te permite mostrar un encabezado para tu lista de entradas populares. Si se deja vacío, no se mostrará el encabezado." -#: maintenance.php:85 -msgid "What does \"Include pages\" do?" -msgstr "¿Qué hace \"Incluir páginas\"?" +#: admin.php:326 +msgid "What is Time Range for?" +msgstr "¿Para qué es \"Rango de Tiempo\"?" -#: maintenance.php:87 -msgid "If checked, Wordpress Popular Posts will also list the most viewed pages on your blog. Enabled by default." -msgstr "Si de tilda, Wordpress Popular Posts también listará las páginas más populares en tu blog. Habilitado por defecto." +#: admin.php:328 +msgid "It will tell Wordpress Popular Posts to retrieve all posts with most views / comments within the selected time range." +msgstr "Le indica a Wordpress Popular Posts que muestre las entradas más vistas / comentadas en el rango de tiempo seleccionado." -#: maintenance.php:89 +#: admin.php:331 +msgid "What is \"Sort post by\" for?" +msgstr "¿Para qué es \"Ordenar entradas por\"?" + +#: admin.php:333 +msgid "It allows you to decide whether to order your popular posts listing by total views, comments, or average views per day." +msgstr "Te permite decidir si ordenar tus entradas populares por la cantidad total de vistas, comentarios, o por el porcentaje diario de vistas." + +#: admin.php:336 msgid "What does \"Display post rating\" do?" -msgstr "¿Qué hace \"Mostrar rating del post\"?" +msgstr "¿Qué hace \"Mostrar rating de la entrada\"?" -#: maintenance.php:91 -msgid "If checked, Wordpress Popular Posts will show how your readers are rating your most popular posts. This feature requires having WP-PostRatings plugin installed and enabled on your blog for it to work. Disabled by default." -msgstr "Si se tilda, Wordpress Popular Posts mostrará como tus lectores están calificando tus posts más populares. Esta funcionalidad requiere que el plugin WP-PostRatings esté instalado y activado en tu blog para que funcione. Deshabilitado por defecto." +#: admin.php:338 +msgid "If checked, Wordpress Popular Posts will show how your readers are rating your most popular posts. This feature requires having WP-PostRatings plugin installed and enabled on your blog for it to work." +msgstr "Si se tilda, Wordpress Popular Posts mostrará cómo tus lectores están calificando tus entradas populares. Esta característica requiere que el plugin WP-PostRatings esté instalado y habilitado en tu blog para que funcione." -#: maintenance.php:93 -msgid "What does \"Shorten title output\" do?" -msgstr "¿Qué hace \"Acortar títulos\"?" +#: admin.php:341 +#, fuzzy +msgid "What does \"Shorten title\" do?" +msgstr "¿Qué hace \"Acortar título\"?" -#: maintenance.php:95 -msgid "If checked, all posts titles will be shortened to \"n\" characters. A new \"Shorten title to\" option will appear so you can set it to whatever you like. Disabled by default." -msgstr "Si se tilda, todos los títulos de posts se acortará \"n\" caracteres. Una nueva opción, \"Acortar título a\" aparecerá para que puedas configurarlo como gustes. Desactivado por defecto." +#: admin.php:343 +msgid "If checked, all posts titles will be shortened to \"n\" characters. A new \"Shorten title to\" option will appear so you can set it to whatever you like." +msgstr "Si se tilda, todos los títulos de las entradas se acortarán \"n\" caracteres. Una nueva opción \"Acortar título en\" se mostrará para que puedas configurarlo como quieras." -#: maintenance.php:97 +#: admin.php:346 msgid "What does \"Display post excerpt\" do?" -msgstr "¿Qué hace \"Mostrar extracto del post\"?" +msgstr "¿Qué hace \"Mostrar resumen de la entrada\"?" -#: maintenance.php:99 -msgid "If checked, Wordpress Popular Posts will also include a small extract of your posts in the list. Similarly to the previous option, you will be able to decide how long the post excerpt should be. Disabled by default." -msgstr "Si se tilda, Wordpress Popular Posts también incluirá un pequeño extracto de tus posts en la lista. Similarmente a la opción anterior, podrás decidir qué tan largo debe ser el extracto. Desactivado por defecto." +#: admin.php:348 +msgid "If checked, Wordpress Popular Posts will also include a small extract of your posts in the list. Similarly to the previous option, you will be able to decide how long the post excerpt should be." +msgstr "Si se tilda, Wordpress Popular Posts incluirá un pequeño extracto de tus entradas en la lista. Similar a la opción anterior, podrás decidir qué tan largo debe ser el extracto." -#: maintenance.php:101 +#: admin.php:351 msgid "What does \"Keep text format and links\" do?" -msgstr "¿Qué hace \"Mantener formato de texto y links\"?" +msgstr "¿Qué hace \"Mantener el formato de texto y links\"?" -#: maintenance.php:103 +#: admin.php:353 msgid "If checked, and if the Post Excerpt feature is enabled, Wordpress Popular Posts will keep the styling tags (eg. bold, italic, etc) that were found in the excerpt. Hyperlinks will remain intact, too." -msgstr "Si se tilda, y si Mostrar Extracto del Post está habilitado, Wordpress Popular Posts mantendrá las etiquetas de estilo (ejem. bold, italic, etc) que se encontraron en el extracto. Los hipervínculos se mantendrán intactos también." +msgstr "Si se tilda, y si la opción Mostrar Resumen está habilitada, Wordpress Popular Posts mantendrá las etiquetas de estilos que se encontraron en el extracto. Los hipervínculos también se mantendrán." + +#: admin.php:356 +msgid "What is \"Post type\" for?" +msgstr "¿Para qué es el \"Post type\"?" + +#: admin.php:358 +msgid "This filter allows you to decide which post types to show on the listing. By default, it will retrieve only posts and pages (which should be fine for most cases)." +msgstr "Este filtro te permite decidir que tipo de entradas deseas mostrar en el listado. Por defecto, traterá sólo entradas y páginas (que es lo que se quiere, en la mayoría de los casos)." + +#: admin.php:361 +msgid "What is \"Category(ies) ID(s)\" for?" +msgstr "¿Para qué es el \"ID(s) de Categoría(s)\"?" + +#: admin.php:363 +msgid "This filter allows you to select which categories should be included or excluded from the listing. A negative sign in front of the category ID number will exclude posts belonging to it from the list, for example. You can specify more than one ID with a comma separated list." +msgstr "Este filtro te permite seleccionar qué categorías deberían ser incluídas o excluídas del listado. Un signo negativo enfrente del ID de la categoría la excluirá de la lista, por ejemplo. Puedes especificar más de un ID separándolos con comas." -#: maintenance.php:105 -msgid "What does \"Exclude Categories\" do?" -msgstr "¿Qué hace \"Excluir Categorías\"?" +#: admin.php:366 +msgid "What is \"Author(s) ID(s)\" for?" +msgstr "¿Para qué es el \"ID de Autor(es)\"?" -#: maintenance.php:107 -msgid "If checked, Wordpress Popular Posts will exclude from the listing all those entries that belong to specific categories. When entering more than one Category ID, you need to use commas to separate them (eg. 1,5,12 - no spaces!). Disabled by default." -msgstr "Si se tilda, Wordpress Popular Posts excluirá del listado todas aquellas entradas pertenecientes a categorías específicas. Cuando se ingresa más de un ID de Categoría, necesitas utilizar comas para separarlas (ejem. 1,5,12 - !sin espacios!). Deshabilitado por defecto." +#: admin.php:368 +msgid "Just like the Category filter, this one lets you filter posts by author ID. You can specify more than one ID with a comma separated list." +msgstr "Justo como el filtro de Categoría, éste te permite filtrar entradas por ID del autor. Puedes especificar más de un ID separándolos con comas." -#: maintenance.php:109 +#: admin.php:371 msgid "What does \"Display post thumbnail\" do?" -msgstr "¿Qué hace \"Mostrar miniatura\"?" +msgstr "¿Qué hace \"Mostrar miniatura de la entrada\"?" -#: maintenance.php:111 -msgid "If checked, Wordpress Popular Posts will attempt to use the thumbnail you have selected for each post on the Post Edit Screen under Featured Image (this also requires including add_theme_support(\"post-thumbnails\") to your theme's functions.php file). Disabled by default." -msgstr "Wordpress Popular Posts utilizará la miniatura que seleccionaste como Imagen Destacada para cada entrada (esto también requiere incluir add_theme_support(\"post-thumbnails\") al archivo functions.php de tu tema actual)." +#: admin.php:373 +msgid "If checked, Wordpress Popular Posts will attempt to retrieve the thumbnail of each post. You can set up the source of the thumbnail via Settings - Wordpress Popular Posts - Tools." +msgstr "Si se tilda, Wordpress Popular Posts intentará obtener la imagen miniatura de cada entrada. Puedes configurar la fuente de la miniatura via Configuración - Wordpress Popular Posts - Herramientas." -#: maintenance.php:113 +#: admin.php:376 msgid "What does \"Display comment count\" do?" -msgstr "¿Qué hace \"Mostrar comentarios\"?" +msgstr "¿Qué hace \"Mostrar cantidad de comentarios\"?" -#: maintenance.php:115 -msgid "If checked, Wordpress Popular Posts will display how many comments each popular post has got until now. Enabled by default." -msgstr "Si se tilda, Wordpress Popular Posts mostrará cuántos comentarios ha obtenido cada post popular hasta ahora. Habilitado por defecto." +#: admin.php:378 +msgid "If checked, Wordpress Popular Posts will display how many comments each popular post has got in the selected Time Range." +msgstr "Si se tilda, Wordpress Popular Posts mostrará cuántos comentarios ha obtenido cada entrada popular dentro del Rango de Tiempo seleccionado." -#: maintenance.php:117 +#: admin.php:381 msgid "What does \"Display views\" do?" msgstr "¿Qué hace \"Mostrar vistas\"?" -#: maintenance.php:119 -msgid "If checked, Wordpress Popular Posts will show how many pageviews a single post has gotten so far since this plugin was installed. Disabled by default." -msgstr "Si se tilda, Wordpress Popular Posts mostrará cuántas vistas ha obtenido un post desde la instalación de este plugin. Deshabilitado por defecto." +#: admin.php:383 +msgid "If checked, Wordpress Popular Posts will show how many pageviews a single post has gotten in the selected Time Range." +msgstr "Si se tilda, Wordpress Popular Posts mostrará cuántas vistas ha obtenido cada entrada en el Rango de Tiempo seleccionado." -#: maintenance.php:121 +#: admin.php:386 msgid "What does \"Display author\" do?" msgstr "¿Qué hace \"Mostrar autor\"?" -#: maintenance.php:123 -msgid "If checked, Wordpress Popular Posts will display the name of the author of each entry listed. Disabled by default." -msgstr "Si se tilda, Wordpress Popular Posts mostrará el nombre del autor de cada entrada listada. Deshabilitado por defecto." +#: admin.php:388 +msgid "If checked, Wordpress Popular Posts will display the name of the author of each entry listed." +msgstr "Si se tilda, Wordpress Popular Posts mostrará el nombre del autor de cada entrada listada." -#: maintenance.php:125 +#: admin.php:391 msgid "What does \"Display date\" do?" msgstr "¿Qué hace \"Mostrar fecha\"?" -#: maintenance.php:127 -msgid "If checked, Wordpress Popular Posts will display the date when each popular posts was published. Disabled by default." -msgstr "Si se tilda, Wordpress Popular Posts mostrará la fecha en que cada post popular fue publicado. Deshabilitado por defecto." +#: admin.php:393 +msgid "If checked, Wordpress Popular Posts will display the date when each popular posts was published." +msgstr "Si se tilda, Wordpress Popular Posts mostrará la fecha en la que fue publicada cada entrada popular." -#: maintenance.php:129 +#: admin.php:396 msgid "What does \"Use custom HTML Markup\" do?" msgstr "¿Qué hace \"Utilizar Markup HTML personalizado\"?" -#: maintenance.php:131 -msgid "If checked, you will be able to customize the HTML markup of your popular posts listing. For example, you can decide whether to wrap your posts in an unordered list, an ordered list, a div, etc. If you know xHTML/CSS, this is for you! Disabled by default." -msgstr "Si se tilda, podrás personalizar el markup HTML (la estructura HTML) del listado de tus posts. Por ejemplo, puedes decidir si tus posts estarán dentro de una lista desordenada (ul), una lista ordenada (ol), un div, etc. Si sabes xHTML/CSS, ¡esto es para tí!" +#: admin.php:398 +msgid "If checked, you will be able to customize the HTML markup of your popular posts listing. For example, you can decide whether to wrap your posts in an unordered list, an ordered list, a div, etc. If you know xHTML/CSS, this is for you!" +msgstr "Si se tilda, podrás personalizad el markup HTML de tu listado de entradas populares. Por ejemplo, podrás decidir si colocar tu listado en una lista desordenada, una ordenada, dentro de un div, etc. Si sabes xHTML/CSS, ¡esto es para ti!" -#: maintenance.php:133 +#: admin.php:401 msgid "What does \"Use content formatting tags\" do?" -msgstr "¿Qué hace \"Utilizar etiquetas de contenido\"?" +msgstr "¿Qué hace \"Utilizar etiquetas de formato de contenido\"?" -#: maintenance.php:135 -msgid "If checked, you can decide the order of the items displayed on each entry. For example, setting it to \"{title}: {summary}\" (without the quotes) would display \"Post title: excerpt of the post here\". Available tags: {image}, {title}, {summary}, {stats} and {rating}. Disabled by default." -msgstr "Si se tilda, puedes decidir el orden de los items mostrados en cada entrada. Por ejemplo, configurarlo como \"{title}: {summary}\" (sin las comillas) mostraría \"Título del post: extracto del post aquí\". Etiquetas disponibles: {image}, {title}, {summary}, {stats} y {rating}. Deshabilitado por defecto." +#: admin.php:403 +msgid "If checked, you can decide the order of the items displayed on each entry. For example, setting it to \"{title}: {summary}\" (without the quotes) would display \"Post title: excerpt of the post here\". Available tags: {image}, {title}, {summary}, {stats} and {rating}." +msgstr "Si se tilda, puedes decidir el orden de los elementos mostrados en cada entrada. Por ejemplo, configurarlo como \"{title}: {summary}\" (sin las comillas) mostraría \"Título de la entrada: extracto de la entrada aquí\". Etiquetas disponibles: {image}, {title}, {summary}, {stats} y {rating}." -#: maintenance.php:137 +#: admin.php:406 msgid "What are \"Template Tags\"?" msgstr "¿Qué son los \"Template Tags\"?" -#: maintenance.php:139 -msgid "Template Tags are simply php functions that allow you to perform certain actions. For example, Wordpress Popular Posts currently supports two different template tags: get_mostpopular() and wpp_get_views()." -msgstr "Los Template Tags son simplemente funciones php que te permiten realizar ciertas acciones. Por ejemplo, Wordpress Popular Posts actualmante soporte dos template tags diferentes: get_mostpopular y wpp_get_views()." +#: admin.php:408 +msgid "Template Tags are simply php functions that allow you to perform certain actions. For example, Wordpress Popular Posts currently supports two different template tags: wpp_get_mostpopular() and wpp_get_views()." +msgstr "Los Template Tags son simplemente funciones php que nos permiten realizar ciertas acciones. Por ejemplo, Wordpress Popular Posts actualmente soporta dos template tags diferentes: wpp_get_mostpopular() y wpp_get_views()." -#: maintenance.php:141 +#: admin.php:411 msgid "What are the template tags that Wordpress Popular Posts supports?" -msgstr "¿Cuáles template tags soporta Wordpress Popular Posts?" +msgstr "¿Cuáles son los Template Tags soportados por Wordpress Popular Posts?" -#: maintenance.php:143 -msgid "The following are the template tags supported by Wordpress Popular Posts:" -msgstr "Los siguientes son los template tags soportados por Wordpress Popular Posts:" +#: admin.php:413 +msgid "The following are the template tags supported by Wordpress Popular Posts" +msgstr "Los siguientes son los template tags soportados por Wordpress Popular Posts" -#: maintenance.php:146 +#: admin.php:417 msgid "Template tag" msgstr "Template tag" -#: maintenance.php:147 -#: maintenance.php:175 +#: admin.php:418 +#: admin.php:451 msgid "What it does " msgstr "Qué hace" -#: maintenance.php:148 +#: admin.php:419 msgid "Parameters" msgstr "Parámetros" -#: maintenance.php:149 -#: maintenance.php:178 +#: admin.php:420 +#: admin.php:454 msgid "Example" msgstr "Ejemplo" -#: maintenance.php:153 -msgid "Similar to the widget functionality, this tag retrieves the most popular posts on your blog. While it can be customized via parameters, these are not needed for it to work." -msgstr "Al igual que la funcionalidad tipo widget, este tag obtiene los posts más populares de tu blog. Puede ser personalizado via parámetros, pero no son necesarios para que funcione." +#: admin.php:426 +msgid "Similar to the widget functionality, this tag retrieves the most popular posts on your blog. This function also accepts parameters so you can customize your popular listing, but these are not required." +msgstr "Parecido a la funcionalidad del widget, esta etiqueta obtiene las entradas más populares de tu blog. Esta función también acepta parámetros para que puedas personalizar el listado, pero no es requerido." -#: maintenance.php:154 -msgid "Please refer to \"What attributes does Wordpress Popular Posts shortcode [wpp] have?\"" -msgstr "Favor leer \"¿Cuáles template tags soporta Wordpress Popular Posts?\"" +#: admin.php:427 +msgid "Please refer to \"List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode\"." +msgstr "Por favor revisa \"Listado de parámetros aceptados por wpp_get_mostpopular() y el shortcode [wpp]\"." -#: maintenance.php:159 -msgid "Displays the number of views of a single post. Post ID required, or it will return false." -msgstr "Muestra el número de vistas de un post. Se requiere el ID del post, o la función retornará falso." +#: admin.php:432 +msgid "Displays the number of views of a single post. Post ID is required or it will return false." +msgstr "Muestra la cantidad de vistas de una entrada. El ID de la entrada es requerido, o la función devolverá false." -#: maintenance.php:160 +#: admin.php:433 msgid "Post ID" -msgstr "ID del Post" +msgstr "ID de la entrada" -#: maintenance.php:165 +#: admin.php:440 msgid "What are \"shortcodes\"?" msgstr "¿Qué son los \"shortcodes\"?" -#: maintenance.php:167 -msgid "Shortcodes are hooks that allow us to call a php function by simply typing something like [shortcode]. With Wordpress Popular Posts, the shortcode [wpp] will let you insert a list of the most popular posts in posts content and pages too! For more information about shortcodes, please visit" -msgstr "Los shortcodes son hooks que nos permiten llamar a una función php simplemente escribiendo algo como [shortcode]. Con Wordpress Popular Posts, el shortcode [wpp] te permitirá insertar una lista de los posts más populares en páginas y en los contenidos de los posts. Para más informació visita" +#: admin.php:442 +msgid "Shortcodes are similar to BB Codes, these allow us to call a php function by simply typing something like [shortcode]. With Wordpress Popular Posts, the shortcode [wpp] will let you insert a list of the most popular posts in posts content and pages too! For more information about shortcodes, please visit" +msgstr "Los Shortcodes son similares a los BB Codes, éstos nos permiten llamar a una función php simplemente escribiendo algo como [shortcode]. Con Wordpress Popular Posts, el shortcode [wpp] te permitirá insertar una lista de las entradas más populares en el contenido de tus entradas y en páginas también. Para mayor información sobre los shortcodes, por favor visita" -#: maintenance.php:169 -msgid "What attributes does Wordpress Popular Posts shortcode [wpp] have?" -msgstr "¿Qué atributos tiene el shortcode [wpp] de Wordpress Popular Posts?" +#: admin.php:444 +msgid "List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode" +msgstr "Lista de parámetros aceptados por wpp_get_mostpopular() y el shortcode [wpp]" -#: maintenance.php:171 -msgid "There are a number of attributes Wordpress Popular Posts currently supports:" -msgstr "Hay un número de atributos que Wordpress Popular Posts actualmente soporta:" +#: admin.php:446 +msgid "These parameters can be used by both the template tag wpp_get_most_popular() and the shortcode [wpp]." +msgstr "Estos parámetros pueden ser utilizados tanto por el template tag wpp_get_mostpopular() como por el shortcode [wpp]." -#: maintenance.php:174 -msgid "Attributes" -msgstr "Atributos" +#: admin.php:450 +msgid "Parameter" +msgstr "Parámetro" -#: maintenance.php:176 +#: admin.php:452 msgid "Possible values" -msgstr "Valores Posibles" +msgstr "Valores posibles" -#: maintenance.php:177 +#: admin.php:453 msgid "Defaults to" msgstr "Por defecto" -#: maintenance.php:182 +#: admin.php:460 msgid "Sets a heading for the list" -msgstr "Setea el encabezado de la lista" - -#: maintenance.php:183 -#: maintenance.php:190 -#: maintenance.php:197 -#: maintenance.php:253 -#: maintenance.php:316 -#: maintenance.php:323 -#: maintenance.php:330 -#: maintenance.php:337 -#: maintenance.php:344 +msgstr "Configura el encabezado de la lista" + +#: admin.php:461 +#: admin.php:468 +#: admin.php:475 +#: admin.php:503 +#: admin.php:510 +#: admin.php:517 +#: admin.php:594 +#: admin.php:601 +#: admin.php:608 +#: admin.php:615 +#: admin.php:622 msgid "Text string" -msgstr "Cadena de texto" +msgstr "Texto" -#: maintenance.php:184 -#: wordpress-popular-posts.php:198 +#: admin.php:462 +#: wordpress-popular-posts.php:250 msgid "Popular Posts" msgstr "Entradas Populares" -#: maintenance.php:189 +#: admin.php:467 msgid "Set the opening tag for the heading of the list" -msgstr "Setea la etiqueta html de apertura del encabezado de la lista" +msgstr "Configura la etiqueta de apertura para el encabezado de la lista" -#: maintenance.php:196 +#: admin.php:474 msgid "Set the closing tag for the heading of the list" -msgstr "Setea la etiqueta de cierre del encabezado de la lista" +msgstr "Configura la etiqueta de cierre para el encabezado de la lista" -#: maintenance.php:203 +#: admin.php:481 msgid "Sets the maximum number of popular posts to be shown on the listing" -msgstr "Setea el número máximo de posts populares a mostrarse en la lista" +msgstr "Configura el máximo de entradas populares a ser mostradas en la lista" -#: maintenance.php:204 -#: maintenance.php:232 -#: maintenance.php:239 -#: maintenance.php:260 -#: maintenance.php:267 +#: admin.php:482 +#: admin.php:524 +#: admin.php:531 +#: admin.php:545 +#: admin.php:552 msgid "Positive integer" msgstr "Entero positivo" -#: maintenance.php:210 +#: admin.php:488 msgid "Tells Wordpress Popular Posts to retrieve the most popular entries within the time range specified by you" -msgstr "Le dice a Wordpress Popular Posts que debe traer los posts más populares que estén dentro del tiempo especificado por tí." +msgstr "Le indica a Wordpress Popular Posts que debe listar aquellas entradas que hayan sido populares dentro del rango de tiempo especificado por ti" -#: maintenance.php:217 +#: admin.php:495 msgid "Sets the sorting option of the popular posts" -msgstr "Setea el valor por el cual deben ordenarse los posts populares" +msgstr "Configura el ordenado de las entradas populares" -#: maintenance.php:218 +#: admin.php:496 msgid "(for average views per day)" -msgstr "(vistas promedio por día)" +msgstr "(para el porcentaje de vistas por día)" + +#: admin.php:502 +msgid "Defines the type of posts to show on the listing" +msgstr "Define el tipo de entrada a mostrar en el listado" + +#: admin.php:509 +msgid "If set, Wordpress Popular Posts will retrieve all entries that belong to the specified category(ies) ID(s). If a minus sign is used, the category(ies) will be excluded instead." +msgstr "Si se configura, Wordpress Popular Posts mostrará todas las entradas que pertenecen a la(s) categoría(s) especificada(s). Si se usa un signo negativo, la(s) categoría(s) será(n) excluída(s)." + +#: admin.php:511 +#: admin.php:518 +msgid "None" +msgstr "Ninguno" -#: maintenance.php:224 -msgid "Tells Wordpress Popular Posts whether to consider or not pages while building the popular list" -msgstr "Le dice a Wordpress Popular Posts si debe considerar o no las páginas mientras construye la lista popular" +#: admin.php:516 +msgid "If set, Wordpress Popular Posts will retrieve all entries created by specified author(s) ID(s)." +msgstr "Si se configura, Wordpress Popular Posts traerá todas las entradas creadas por el (los) ID(s) de autor(es) especificado(s)." -#: maintenance.php:231 +#: admin.php:523 msgid "If set, Wordpress Popular Posts will shorten each post title to \"n\" characters whenever possible" -msgstr "Si se setea, Wordpress Popular Posts acortará cada título a \"n\" caracteres cuando sea posible" +msgstr "Si se configura, Wordpress Popular Posts acortará cada titulo en \"n\" caracteres cuando sea posible" -#: maintenance.php:238 +#: admin.php:530 msgid "If set, Wordpress Popular Posts will build and include an excerpt of \"n\" characters long from the content of each post listed as popular" -msgstr "Si se setea, Wordpress Popular Posts construirá e insertará un extracto de \"n\" caracteres de largo del contenido de cada post listado como popular" +msgstr "Si se configura, Wordpress Popular Posts construirá e incluirá un extracto de \"n\" caracteres del contenido de cada entrada listada como popular" -#: maintenance.php:245 +#: admin.php:537 msgid "If set, Wordpress Popular Posts will maintaing all styling tags (strong, italic, etc) and hyperlinks found in the excerpt" -msgstr "Si se setea, Wordpress Popular Posts mantendrá las etiquetas de formato (strong, italic, etc) y los hipervínculos encontrados en el extracto" +msgstr "Si se configura, Wordpress Popular Posts mantendrá todas las etiquetas de estilo (strong, italic, etc) y los hipervínculos encontrados en el extracto" -#: maintenance.php:252 -msgid "If set, Wordpress Popular Posts will exclude all entries that belong to the specified category(ies)." -msgstr "Si se setea, Wordpress Popular Posts excluirá todas las entradas que pertenezcan a las categorías especificadas." - -#: maintenance.php:254 -msgid "None" -msgstr "Ninguno" - -#: maintenance.php:259 +#: admin.php:544 msgid "If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the width for thumbnails" -msgstr "Si se setea, y si la configuración actual de tu servidor lo permite, podrás mostrar miniaturas (thumbnails) de tus posts. Este atributo setea el ancho de las miniaturas" +msgstr "Si se configura, y si la configuración actual de tu servidor lo permite, podrás mostrar miniaturas de tus entradas. Este atributo configura el ancho de tus miniaturas" -#: maintenance.php:266 +#: admin.php:551 msgid "If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the height for thumbnails" -msgstr "Si se setea, y si la configuración actual de tu servidor lo permite, podrás mostrar miniaturas (thumbnails) de tus posts. Este atributo setea el alto de las miniaturas" - -#: maintenance.php:273 -msgid "Wordpress Popular Posts will use the thumbnails selected by you. *Requires enabling The Post Thumbnail feature on your theme*" -msgstr "Wordpress Popular Posts utilizará las miniaturas que has seleccionado. *Requiere habilitar la funcionalidad de The Post Thumbnail en tu tema*" +msgstr "Si se configura, y si la configuración actual de tu servidor lo permite, podrás mostrar miniaturas de tus entradas. Este atributo configura el alto de tus miniaturas" -#: maintenance.php:280 +#: admin.php:558 msgid "If set, and if the WP-PostRatings plugin is installed and enabled on your blog, Wordpress Popular Posts will show how your visitors are rating your entries" -msgstr "Si se setea, y si el plugin WP-PostRatings está instalado y activo en tu blog, Wordpress Popular Posts mostrará cómo tus visitantes califican tus entradas" +msgstr "Si se configura, y si el plugin WP-PostRatings está instalado y habilitado en tu blog, Wordpress Popular Posts mostrará como tus visitantes han calificado a tus entradas" -#: maintenance.php:287 +#: admin.php:565 msgid "If set, Wordpress Popular Posts will show how many comments each popular post has got until now" -msgstr "Si se setea, Wordpress Popular Posts mostrará cuántos comentarios ha obtenido cada post popular hasta ahora" +msgstr "Si se configura, Wordpress Popular Posts mostrará cuántos comentarios ha obtenido cada entrada popular hasta ahora" -#: maintenance.php:294 +#: admin.php:572 msgid "If set, Wordpress Popular Posts will show how many views each popular post has got since it was installed" -msgstr "Si se setea, Wordpress Popular Posts mostrará cuántas vistas ha obtenido cada post popular desde que se instaló el plugin" +msgstr "Si se configura, Wordpress Popular Posts mostrará cuántas vistas ha obtenido cada entrada popular hasta ahora" -#: maintenance.php:301 +#: admin.php:579 msgid "If set, Wordpress Popular Posts will show who published each popular post on the list" -msgstr "Si se setea, Wordpress Popular Posts mostrará quién publicó cada uno de los posts populares de la lista" +msgstr "Si se configura, Wordpress Popular Posts mostrará quién publicó cada entrada popular de la lista" -#: maintenance.php:308 -msgid "If set, Wordpress Popular Posts will when each popular post on the list was published" -msgstr "Si se setea, Wordpress Popular Posts mostrará cuando fue publicado cada post en la lista" +#: admin.php:586 +msgid "If set, Wordpress Popular Posts will display the date when each popular post on the list was published" +msgstr "Si se tilda, Wordpress Popular Posts mostrará la fecha en la que fue publicada cada entrada popular" -#: maintenance.php:315 +#: admin.php:593 msgid "Sets the date format" -msgstr "Setea el formato de la fecha" +msgstr "Configura el formato de la fecha" -#: maintenance.php:322 +#: admin.php:600 msgid "Sets the opening tag for the listing" -msgstr "Setea la etiqueta de apertura de la lista" +msgstr "Configura la etiqueta de apertura del listado" -#: maintenance.php:329 +#: admin.php:607 msgid "Sets the closing tag for the listing" -msgstr "Setea la etiqueta de cierre de la lista" +msgstr "Configura la etiqueta de cierre del listado" -#: maintenance.php:336 +#: admin.php:614 msgid "Sets the opening tag for each item on the list" -msgstr "Setea la etiqueta de apertura de cada item en la lista" +msgstr "Configura la etiqueta de apertura de cada ítem del listado" -#: maintenance.php:343 +#: admin.php:621 msgid "Sets the closing tag for each item on the list" -msgstr "Setea la etiqueta de cierre de cada item en la lista" +msgstr "Configura la etiqueta de cierre de cada ítem del listado" -#: maintenance.php:350 +#: admin.php:628 msgid "If set, this option will allow you to decide the order of the contents within each item on the list." -msgstr "Si se setea, esta opción te permitirá decidir el orden de los contenidos de cada item en la lista" +msgstr "Si se configura, esta opción te permitirá decidir el orden de los contenidos dentro de cada item en la lista." -#: maintenance.php:357 +#: admin.php:635 msgid "If set, you can decide the order of each content inside a single item on the list. For example, setting it to \"{title}: {summary}\" would output something like \"Your Post Title: summary here\". This attribute requires do_pattern to be true." -msgstr "Si se setea, puedes decidir el orden de los contenidos de cada item en la lista. Por ejemplo, configurarlo como \"{title}: {summary}\" mostraría algo como \"Tu título: extracto del post aquí\". Este atributo requiere que do_pattern sea true." +msgstr "Si se configura, puedes decidir el orden de cada contenido dentro de cada item en la lista. Por ejemplo, configurarlo como \"{title}: {summary}\" mostraría \"El título de tu entrada: resumen aquí\". Este atributo requiere que do_pattern sea true." -#: maintenance.php:358 +#: admin.php:636 msgid "Available tags" msgstr "Etiquetas disponibles" -#: maintenance.php:367 -msgid "Maintenance Settings" -msgstr "Opciones de Mantenimiento" +#: admin.php:651 +msgid "Here you will find a handy group of options to tweak Wordpress Popular Posts." +msgstr "Aquí encontrarás un útil grupo de opciones para ajustar a Wordpress Popular Posts." + +#: admin.php:653 +msgid "Thumbnail source" +msgstr "Fuente de la miniatura" + +#: admin.php:654 +msgid "Tell Wordpress Popular Posts where it should get thumbnails from" +msgstr "Dile a Wordpress Popular Posts de dónde debe obtener las miniaturas" + +#: admin.php:659 +msgid "Featured image" +msgstr "Imagen destacada" + +#: admin.php:660 +msgid "First image on post" +msgstr "Primera imagen de la entrada" + +#: admin.php:661 +msgid "Custom field" +msgstr "Custom field" + +#: admin.php:664 +msgid "Custom field name" +msgstr "Nombre del custom field" -#: maintenance.php:368 +#: admin.php:673 +msgid "Wordpress Popular Posts Stylesheet" +msgstr "Hoja de estilos de Wordpress Popular Posts" + +#: admin.php:674 +msgid "By default, the plugin includes a stylesheet called wpp.css which you can use to style your popular posts listing. If you wish to use your own stylesheet or do not want it to have it included in the header section of your site, use this." +msgstr "Por defecto, el plugin incluye una hoja de estilos llamada wpp.css que puedes utilizar para darle estilos a tu listado de entradas populares. Si deseas utilizar tu propia hoja de estilos, o no quieres que wpp.css se incluya en el header de tu sitio web, utiliza esto." + +#: admin.php:679 +#: admin.php:696 +msgid "Enabled" +msgstr "Habilitado" + +#: admin.php:680 +#: admin.php:697 +msgid "Disabled" +msgstr "Deshabilitado" + +#: admin.php:689 +msgid "Data tools" +msgstr "Herramientas de datos" + +#: admin.php:691 +#, fuzzy +msgid "AJAX update. If you are using a caching plugin such as WP Super Cache, enabling this feature will keep the popular list from being cached." +msgstr "Actualización AJAX. Si estás utilizando un plugin de cacheado como WP Super Cache, habilitar esta característica evitará que la lista de entradas populares sea guardada en caché." + +#: admin.php:706 msgid "Wordpress Popular Posts keeps historical data of your most popular entries for up to 30 days. If for some reason you need to clear the cache table, or even both historical and cache tables, please use the buttons below to do so." -msgstr "Wordpress Popular Posts guarda data histórica de tus posts más populares por hasta 30 días. Si por alguna razón necesitas limpiar el cache, o inclusive tanto el cache como la tabla histórica, por favor utiliza los botones de abajo." +msgstr "Wordpress Popular Posts mantiene una data histórica de tus entradas más populares hasta por 30 días. Si por alguna razón necesitas vaciar la tabla caché, o inclusive las dos tablas hist&oacoute;ricas y de caché, por favor utiliza los botones de abajo." -#: maintenance.php:371 +#: admin.php:707 msgid "Empty cache" -msgstr "Vaciar cache" +msgstr "Vaciar el caché" -#: maintenance.php:372 +#: admin.php:707 msgid "Use this button to manually clear entries from WPP cache only" -msgstr "Utiliza este botón para limpiar manualmente todas las entradas del cache de Wordpress Popular Posts" +msgstr "Utiliza este bot&oacoue;n para vaciar manualmente sólo las entradas del caché de WPP." -#: maintenance.php:378 +#: admin.php:708 msgid "Clear all data" msgstr "Eliminar toda la data" -#: maintenance.php:379 +#: admin.php:708 msgid "Use this button to manually clear entries from all WPP data tables" -msgstr "Utiliza este botón para limpiar toda la data de Wordpress Popular Posts" +msgstr "Utiliza este botón para limpiar manualmente las tablas de datos de WPP" -#: maintenance.php:387 +#: admin.php:714 msgid "Do you like this plugin?" -msgstr "¿Te gusta este plugin?" +msgstr "¿te gusta este plugin?" -#: maintenance.php:387 +#: admin.php:714 msgid "Rate Wordpress Popular Posts!" -msgstr "¡Califica Wordpress Popular Posts!" +msgstr "¡Califica a Wordpress Popular Posts!" -#: maintenance.php:387 -msgid "Rate it 5" -msgstr "¡Dale un 5" +#: admin.php:714 +msgid "Rate it" +msgstr "Califícalo" -#: maintenance.php:387 +#: admin.php:714 msgid "on the official Plugin Directory!" -msgstr "en el directorio oficial de plugins!" +msgstr "en el Directorio Oficial de Plugins!" -#: maintenance.php:388 +#: admin.php:715 msgid "Do you love this plugin?" -msgstr "¿Te encanta este plugin?" +msgstr "¿Adoras este plugin?" -#: maintenance.php:388 -#: maintenance.php:389 +#: admin.php:715 +#: admin.php:716 msgid "Buy me a beer!" msgstr "¡Cómprame una cerveza!" -#: maintenance.php:388 +#: admin.php:715 msgid "Each donation motivates me to keep releasing free stuff for the Wordpress community!" -msgstr "¡Cada donativo me motiva a seguir contribuyendo con la comunidad Wordpress!" +msgstr "¡Cada donación me motiva a seguir publicando cosas gratuitas para la comunidad de Wordpress!" -#: stats.php:90 -msgid "Click on each tab to see what are the most popular entries on your blog today, this week, last 30 days or all time since Wordpress Popular Posts was installed." -msgstr "Haga clic en cada pestaña para ver cuáles son las entradas más populares en su blog hoy, esta semana, en los últimos 30 dís o desde que se instaló Wordpress Popular Posts." - -#: stats.php:92 -msgid "Yesterday" -msgstr "Ayer" - -#: stats.php:93 -msgid "Today" -msgstr "Hoy" +#: wordpress-popular-posts.php:47 +msgid "The most Popular Posts on your blog." +msgstr "Las entradas más populares en tu blog." -#: stats.php:94 -msgid "Weekly" -msgstr "Semanalmente" - -#: stats.php:95 -msgid "Monthly" -msgstr "Mensualmente" - -#: stats.php:96 -#: wordpress-popular-posts.php:260 -msgid "All-time" -msgstr "Todos" - -#: wordpress-popular-posts.php:251 +#: wordpress-popular-posts.php:301 msgid "Title:" msgstr "Título:" -#: wordpress-popular-posts.php:253 +#: wordpress-popular-posts.php:301 +#: wordpress-popular-posts.php:303 +#: wordpress-popular-posts.php:305 +#: wordpress-popular-posts.php:313 +#: wordpress-popular-posts.php:324 +#: wordpress-popular-posts.php:326 +#: wordpress-popular-posts.php:330 +#: wordpress-popular-posts.php:334 +#: wordpress-popular-posts.php:343 +#: wordpress-popular-posts.php:355 +#: wordpress-popular-posts.php:367 +#: wordpress-popular-posts.php:368 +#: wordpress-popular-posts.php:369 +#: wordpress-popular-posts.php:370 +#: wordpress-popular-posts.php:385 +#: wordpress-popular-posts.php:396 +msgid "What is this?" +msgstr "¿Qué es esto?" + +#: wordpress-popular-posts.php:303 msgid "Show up to:" msgstr "Mostrar hasta:" -#: wordpress-popular-posts.php:254 +#: wordpress-popular-posts.php:304 msgid "posts" -msgstr "posts" +msgstr "entradas" -#: wordpress-popular-posts.php:255 +#: wordpress-popular-posts.php:305 msgid "Time Range:" -msgstr "Rango de tiempo:" +msgstr "Rango de Tiempo" -#: wordpress-popular-posts.php:257 -msgid "Last 24 hours" -msgstr "Últimas 24 horas" - -#: wordpress-popular-posts.php:258 -msgid "Last 7 days" -msgstr "Últimos 7 días" - -#: wordpress-popular-posts.php:259 -msgid "Last 30 days" -msgstr "Últimos 30 días" - -#: wordpress-popular-posts.php:263 +#: wordpress-popular-posts.php:313 msgid "Sort posts by:" -msgstr "Ordernar posts por:" +msgstr "Ordenar entradas por:" -#: wordpress-popular-posts.php:265 +#: wordpress-popular-posts.php:315 msgid "Comments" msgstr "Comentarios" -#: wordpress-popular-posts.php:266 +#: wordpress-popular-posts.php:316 msgid "Total views" -msgstr "Vistas" +msgstr "Total de vistas" -#: wordpress-popular-posts.php:267 +#: wordpress-popular-posts.php:317 msgid "Avg. daily views" -msgstr "Vistas por día" +msgstr "Porcentaje de vistas diarias" -#: wordpress-popular-posts.php:270 -msgid "Include pages" -msgstr "Incluir páginas" +#: wordpress-popular-posts.php:322 +msgid "Posts settings" +msgstr "Configuración de las entradas" -#: wordpress-popular-posts.php:272 +#: wordpress-popular-posts.php:324 msgid "Display post rating" -msgstr "Mostrar calificación del post" +msgstr "Mostrar rating de la entrada" -#: wordpress-popular-posts.php:274 -msgid "Shorten title output" +#: wordpress-popular-posts.php:326 +msgid "Shorten title" msgstr "Acortar título" -#: wordpress-popular-posts.php:276 +#: wordpress-popular-posts.php:328 msgid "Shorten title to" -msgstr "acortar título a" +msgstr "Acortar título en" -#: wordpress-popular-posts.php:276 -#: wordpress-popular-posts.php:283 +#: wordpress-popular-posts.php:328 +#: wordpress-popular-posts.php:335 msgid "characters" msgstr "caracteres" -#: wordpress-popular-posts.php:278 +#: wordpress-popular-posts.php:330 msgid "Display post excerpt" -msgstr "Mostrar extracto del post" +msgstr "Mostrar resumen de la entrada" -#: wordpress-popular-posts.php:281 +#: wordpress-popular-posts.php:333 msgid "Excerpt Properties" -msgstr "Propiedades del extracto" +msgstr "Propiedades del resumen" -#: wordpress-popular-posts.php:282 +#: wordpress-popular-posts.php:334 msgid "Keep text format and links" msgstr "Mantener formato de texto y links" -#: wordpress-popular-posts.php:283 +#: wordpress-popular-posts.php:335 msgid "Excerpt length:" -msgstr "Longitud del extracto:" +msgstr "Largo del resumen:" + +#: wordpress-popular-posts.php:343 +msgid "Filters:" +msgstr "Filtros:" -#: wordpress-popular-posts.php:287 -msgid "Exclude categories" -msgstr "Excluir categorías" +#: wordpress-popular-posts.php:344 +msgid "Post type(s):" +msgstr "Post type(s):" -#: wordpress-popular-posts.php:290 -msgid "Categories to exclude" -msgstr "Categorías a excluir" +#: wordpress-popular-posts.php:346 +msgid "Category(ies) ID(s):" +msgstr "ID(s) de Categoría(s):" -#: wordpress-popular-posts.php:291 -msgid "ID(s) (comma separated, no spaces):" -msgstr "ID(s) (separado por comas, sin espacios):" +#: wordpress-popular-posts.php:348 +msgid "Author(s) ID(s):" +msgstr "ID(s) de Autor(es):" -#: wordpress-popular-posts.php:297 +#: wordpress-popular-posts.php:354 msgid "Thumbnail settings" -msgstr "Configuración de la miniatura" +msgstr "Configuración de miniatura" -#: wordpress-popular-posts.php:298 +#: wordpress-popular-posts.php:355 msgid "Display post thumbnail" msgstr "Mostrar miniatura" -#: wordpress-popular-posts.php:300 +#: wordpress-popular-posts.php:357 msgid "Width:" msgstr "Ancho:" -#: wordpress-popular-posts.php:301 -#: wordpress-popular-posts.php:303 +#: wordpress-popular-posts.php:358 +#: wordpress-popular-posts.php:360 msgid "px" msgstr "px" -#: wordpress-popular-posts.php:302 +#: wordpress-popular-posts.php:359 msgid "Height:" msgstr "Alto:" -#: wordpress-popular-posts.php:309 +#: wordpress-popular-posts.php:366 msgid "Stats Tag settings" msgstr "Configuración del Stats Tag" -#: wordpress-popular-posts.php:310 +#: wordpress-popular-posts.php:367 msgid "Display comment count" -msgstr "Mostrar comentarios" +msgstr "Mostrar cantidad de comentarios" -#: wordpress-popular-posts.php:311 +#: wordpress-popular-posts.php:368 msgid "Display views" msgstr "Mostrar vistas" -#: wordpress-popular-posts.php:312 +#: wordpress-popular-posts.php:369 msgid "Display author" msgstr "Mostrar autor" -#: wordpress-popular-posts.php:313 +#: wordpress-popular-posts.php:370 msgid "Display date" msgstr "Mostrar fecha" -#: wordpress-popular-posts.php:316 +#: wordpress-popular-posts.php:373 msgid "Date Format" msgstr "Formato de la fecha" -#: wordpress-popular-posts.php:327 +#: wordpress-popular-posts.php:384 msgid "HTML Markup settings" msgstr "Configuración del Markup HTML" -#: wordpress-popular-posts.php:328 +#: wordpress-popular-posts.php:385 msgid "Use custom HTML Markup" msgstr "Utilizar Markup HTML personalizado" -#: wordpress-popular-posts.php:331 +#: wordpress-popular-posts.php:388 msgid "Before / after title:" msgstr "Antes / después del título:" -#: wordpress-popular-posts.php:333 +#: wordpress-popular-posts.php:390 msgid "Before / after Popular Posts:" -msgstr "Antes / después de los Post Populares:" +msgstr "Antes / después de las entradas populares" -#: wordpress-popular-posts.php:335 +#: wordpress-popular-posts.php:392 msgid "Before / after each post:" -msgstr "Antes / después de cada post:" +msgstr "Antes / después de cada entrada" -#: wordpress-popular-posts.php:339 +#: wordpress-popular-posts.php:396 msgid "Use content formatting tags" -msgstr "Utilizar etiquetas de contenido" +msgstr "Utilizar etiquetas de formato de contenido" -#: wordpress-popular-posts.php:342 +#: wordpress-popular-posts.php:399 msgid "Content format:" -msgstr "Formato del contenido:" +msgstr "Formato de contenido:" -#: wordpress-popular-posts.php:424 +#: wordpress-popular-posts.php:505 msgid "Success! The cache table has been cleared!" -msgstr "!Eacute;xito! !El cache ha sido vaciado!" +msgstr "¡Éxito! ¡La tabla caché ha sido borrada!" -#: wordpress-popular-posts.php:426 +#: wordpress-popular-posts.php:507 msgid "Error: cache table does not exist." -msgstr "Error: la tabla cache no existe." +msgstr "Error: la tabla caché no existe." -#: wordpress-popular-posts.php:432 +#: wordpress-popular-posts.php:513 msgid "Success! All data have been cleared!" -msgstr "!Eacute;xito! !Toda la data ha sido eliminada!" +msgstr "¡Éxito! ¡Toda la data ha sido borrada!" -#: wordpress-popular-posts.php:434 +#: wordpress-popular-posts.php:515 msgid "Error: one or both data tables are missing." msgstr "Error: una o ambas tablas de datos no existen." -#: wordpress-popular-posts.php:437 +#: wordpress-popular-posts.php:518 msgid "Invalid action." msgstr "Acción inválida." -#: wordpress-popular-posts.php:440 +#: wordpress-popular-posts.php:521 msgid "Sorry, you do not have enough permissions to do this. Please contact the site administrator for support." -msgstr "Lo lamento, no tienes suficientes permisos para hacer esto. Por favor contacta al administrador del sitio." +msgstr "Lo lamento, no tienes permisos suficientes para hacer esto. Por favor contacta al administrador del sitio." -#: wordpress-popular-posts.php:643 +#: wordpress-popular-posts.php:852 msgid "Sorry. No data so far." -msgstr "Lo lamento, no hay información aún." +msgstr "Lo lamentamos. No hay nada que mostrar aán." -#: wordpress-popular-posts.php:690 -msgid " comment(s)" +#: wordpress-popular-posts.php:928 +msgid "comment(s)" msgstr "comentario(s)" -#: wordpress-popular-posts.php:693 -msgid " view(s)" +#: wordpress-popular-posts.php:932 +msgid "view(s)" msgstr "vista(s)" -#: wordpress-popular-posts.php:699 -msgid " view(s) per day" +#: wordpress-popular-posts.php:935 +msgid "view(s) per day" msgstr "vista(s) por día" -#: wordpress-popular-posts.php:712 -#: wordpress-popular-posts.php:714 +#: wordpress-popular-posts.php:943 msgid "by" msgstr "por" -#: wordpress-popular-posts.php:719 -#: wordpress-popular-posts.php:721 +#: wordpress-popular-posts.php:947 msgid "posted on" -msgstr "publicado en" +msgstr "publicado el" -#: wordpress-popular-posts.php:1030 +#: wordpress-popular-posts.php:1292 msgid "Your Wordpress version is too old. Wordpress Popular Posts Plugin requires at least version 2.8 to function correctly. Please update your blog via Tools > Upgrade." -msgstr "Tu versión de Wordpress es muy antigua. El plugin Wordpress Popular Posts requiere al menos la versión 2.8 para funcionar correctamente. Por favor actualiza tu blog via Herramientas > Actualizar." +msgstr "Tu versión de Wordpress es muy antigua. El plugin Wordpress Popular Posts requiere al menos la versión 2.8 para funcionar correctamente. Por favor actualiza tu blog via Herramientas > Actualizaciones." -#: wordpress-popular-posts.php:1157 +#: wordpress-popular-posts.php:1416 msgid "Wordpress Popular Posts Stats" msgstr "Estadísticas de Wordpress Popular Posts" -#~ msgid "Generate all thumbnails for me" -#~ msgstr "Genera las miniaturas por mi" - -#~ msgid "Use thumbnails selected by me" -#~ msgstr "Usa las ministuras que seleccioné" - -#~ msgid "" -#~ "If checked, Wordpress Popular Posts will attempt to find the very first " -#~ "image of each post in the listing and turn it into a thumbnail. Note that " -#~ "for this option to work you must check that: your current web host is " -#~ "running PHP 4.3+ or higher and the GD Library is installed and enabled; " -#~ "also that your \"wordpress-popular-posts/scripts/cache\" directory exists " -#~ "and is writable. Disabled by default." -#~ msgstr "" -#~ "Si se tilda, Wordpress Popular Posts intentará encontrar la " -#~ "primera imagen de cada post para convertirla en una miniatura " -#~ "(thumbnail). Nota que para que esta opción funcione debes " -#~ "verificar que: tu host está corre bajo PHP 4.3+ o mejor y que la " -#~ "librería GD está instalada y habilitada; tambié que " -#~ "tu carpeta \"wordpress-popular-posts/scripts/cache\" existe is es " -#~ "escribible. Desactivada por defecto." - -#~ msgid "" -#~ "What does \"Generate all thumbnails for me\" and \"Use thumbnails " -#~ "selected by me\" do?" -#~ msgstr "" -#~ "¿Qué hacen \"Genera las miniaturas por mi\" y \"Usa las " -#~ "miniaturas que seleccioné\"?" - -#~ msgid "See statistics also in" -#~ msgstr "Ver estadísticas en" diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-fr_FR.mo b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-fr_FR.mo new file mode 100644 index 0000000000000000000000000000000000000000..00447bfbe22c183ab1c8c3bb10afa3945eaf5def Binary files /dev/null and b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-fr_FR.mo differ diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-fr_FR.po b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-fr_FR.po new file mode 100644 index 0000000000000000000000000000000000000000..9fbaa1cb24930af82fbb56f0a8ec59bb486bba5c --- /dev/null +++ b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts-fr_FR.po @@ -0,0 +1,1043 @@ +msgid "" +msgstr "" +"Project-Id-Version: Wordpress Popular Posts\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-31 11:31-0430\n" +"PO-Revision-Date: \n" +"Last-Translator: Le raconteur <leraconteur@maintenantunehistoire.fr>\n" +"Language-Team: Héctor Cabrera <admin@rauru.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_VE\n" +"X-Poedit-SourceCharset: iso-8859-1\n" +"X-Poedit-KeywordsList: __;_e\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: .\n" + +#: admin.php:33 admin.php:44 admin.php:50 admin.php:57 +msgid "Settings saved." +msgstr "Paramètres sauvegardés." + +#: admin.php:38 +msgid "Please provide the name of your custom field." +msgstr "Veuillez indiquer le nom de votre champ personnalisé." + +#: admin.php:247 +msgid "" +"This operation will delete all entries from Wordpress Popular Posts' cache " +"table and cannot be undone." +msgstr "" +"Cette opération va supprimer définitivement toutes les " +"données de la table de cache de Wordpress Popular Posts." + +#: admin.php:247 admin.php:255 +msgid "Do you want to continue?" +msgstr "Voulez-vous continuer ?" + +#: admin.php:255 +msgid "" +"This operation will delete all stored info from Wordpress Popular Posts' " +"data tables and cannot be undone." +msgstr "" +"Cette opération va supprimer définitivement toutes les " +"données des tables de Wordpress Popular Posts." + +#: admin.php:269 +msgid "Stats" +msgstr "Statistiques" + +#: admin.php:270 +msgid "FAQ" +msgstr "FAQ" + +#: admin.php:271 +msgid "Tools" +msgstr "Outils" + +#: admin.php:275 +msgid "" +"Click on each tab to see what are the most popular entries on your blog " +"today, this week, last 30 days or all time since Wordpress Popular Posts was " +"installed." +msgstr "" +"Cliquer sur chaque onglet pour voir quelles sont les entrées les plus " +"populaires sur votre blog aujourd'hui, cette semaine, les 30 derniers jours " +"ou depuis que Wordpress Popular Posts a été installé." + +#: admin.php:281 +msgid "Order by comments" +msgstr "Trier par commentaires" + +#: admin.php:282 +msgid "Order by views" +msgstr "Trier par vues" + +#: admin.php:283 +msgid "Order by avg. daily views" +msgstr "Trier par vues moyenne par jour" + +#: admin.php:285 +msgid "Limit" +msgstr "Limite" + +#: admin.php:287 admin.php:667 admin.php:683 admin.php:700 +msgid "Apply" +msgstr "Appliquer" + +#: admin.php:293 wordpress-popular-posts.php:307 +msgid "Last 24 hours" +msgstr "Dernières 24 heures" + +#: admin.php:294 wordpress-popular-posts.php:308 +msgid "Last 7 days" +msgstr "7 derniers jours " + +#: admin.php:295 wordpress-popular-posts.php:309 +msgid "Last 30 days" +msgstr "30 derniers jours " + +#: admin.php:296 wordpress-popular-posts.php:310 +msgid "All-time" +msgstr "Depuis le début" + +#: admin.php:317 +msgid "Frequently Asked Questions" +msgstr "Questions fréquentes" + +#: admin.php:321 +msgid "What does \"Title\" do?" +msgstr "Que fait \"Titre\" ?" + +#: admin.php:323 +msgid "" +"It allows you to show a heading for your most popular posts listing. If left " +"empty, no heading will be displayed at all." +msgstr "" +"Il vous permet d'afficher un titre au-dessus de la liste des messages les " +"plus populaires. Si le champ est laissé vide, aucun titre ne sera " +"affiché. " + +#: admin.php:326 +msgid "What is Time Range for?" +msgstr "Qu'est-ce que la Plage de temps ?" + +#: admin.php:328 +msgid "" +"It will tell Wordpress Popular Posts to retrieve all posts with most views / " +"comments within the selected time range." +msgstr "" +"Wordpress Popular Posts récupère les posts les plus vus/" +"commentés durant l'intervelle de temps sélectionné." + +#: admin.php:331 +msgid "What is \"Sort post by\" for?" +msgstr "Que fait \"Trier les posts par\" ?" + +#: admin.php:333 +msgid "" +"It allows you to decide whether to order your popular posts listing by total " +"views, comments, or average views per day." +msgstr "" +"Cela vous permet de décider si vous voulez ordonner votre liste de " +"posts populaires par nombre de vues total, par nombre de commentaires, ou " +"par nombre de vues moyennes par jour." + +#: admin.php:336 +msgid "What does \"Display post rating\" do?" +msgstr "Que fait \"Afficher la note du post\" ?" + +#: admin.php:338 +msgid "" +"If checked, Wordpress Popular Posts will show how your readers are rating " +"your most popular posts. This feature requires having WP-PostRatings plugin " +"installed and enabled on your blog for it to work." +msgstr "" +"Si c'est cochée,Wordpress Popular Posts affichera la liste des posts " +"les mieux notés par vos lecteurs. Cette fonction nécessite " +"d'avoir le plugin WP-PostRatings installé et activé sur votre " +"blog pour que cela fonctionne." + +#: admin.php:341 +msgid "What does \"Shorten title\" do?" +msgstr "Que fait \"Raccourcir le titre\" ?" + +#: admin.php:343 +msgid "" +"If checked, all posts titles will be shortened to \"n\" characters. A new " +"\"Shorten title to\" option will appear so you can set it to whatever you " +"like." +msgstr "" +"Si c'est coché, les titres des posts sont raccourci à \"n\" " +"caractères. Une option \"Raccourcir le titre de\" apparaîtra " +"afin que vous puissiez le régler le nombre \"n\" de caractères " +"que vous voulez garder." + +#: admin.php:346 +msgid "What does \"Display post excerpt\" do?" +msgstr "Que fait \"Afficher un extrait du post\" ?" + +#: admin.php:348 +msgid "" +"If checked, Wordpress Popular Posts will also include a small extract of " +"your posts in the list. Similarly to the previous option, you will be able " +"to decide how long the post excerpt should be." +msgstr "" +"Si c'est coché, Wordpress Popular Post permet d'inclure un petit " +"extrait de vos posts dans la liste. Comme la précédente " +"option, une option apparaîtra pour que vous choisissiez la longueur de " +"l'extrait à afficher." + +#: admin.php:351 +msgid "What does \"Keep text format and links\" do?" +msgstr "Que fait \"Garder le formatage du texte et les liens\" ?" + +#: admin.php:353 +msgid "" +"If checked, and if the Post Excerpt feature is enabled, Wordpress Popular " +"Posts will keep the styling tags (eg. bold, italic, etc) that were found in " +"the excerpt. Hyperlinks will remain intact, too." +msgstr "" +"Si c'est coché et que la fonction \"extrait du post\" est " +"activé, Wordpress Popular Posts garde les balises de formatage (ex : " +"gras, italique, etc.) qui se trouvent dans l'extrait. Les liens hypertexte " +"sont aussi affichés à l'identique." + +#: admin.php:356 +msgid "What is \"Post type\" for?" +msgstr "Que fait \"Type de posts\" ?" + +#: admin.php:358 +msgid "" +"This filter allows you to decide which post types to show on the listing. By " +"default, it will retrieve only posts and pages (which should be fine for " +"most cases)." +msgstr "" +"Ce filtre vous permet de choisir quels types de posts doivent être " +"afficher ; par défaut, il permet de récupérer les " +"articles et les pages (ce qui est suffisant dans la plupart des cas)" + +#: admin.php:361 +msgid "What is \"Category(ies) ID(s)\" for?" +msgstr "Que fait \"Catégories ID\" ?" + +#: admin.php:363 +msgid "" +"This filter allows you to select which categories should be included or " +"excluded from the listing. A negative sign in front of the category ID " +"number will exclude posts belonging to it from the list, for example. You " +"can specify more than one ID with a comma separated list." +msgstr "" +"Ce filtre vous permet de sélectionner quelles catégories " +"doivent être inclus ou exclus de la liste. Un signe négatif " +"devant le numéro de catégories ID permet exclure les posts de " +"cette catégorie de la liste. Vous pouvez spécifier plusieurs " +"ID d'une liste séparée par des virgules." + +#: admin.php:366 +msgid "What is \"Author(s) ID(s)\" for?" +msgstr "Que fait \"Auteur ID\" ?" + +#: admin.php:368 +msgid "" +"Just like the Category filter, this one lets you filter posts by author ID. " +"You can specify more than one ID with a comma separated list." +msgstr "" +"Fait exactement comme le filtre Catégorie, celui-ci vous permet de " +"filtrer les messages par auteur ID. Vous pouvez spécifier plusieurs " +"ID séparé par des virgules." + +#: admin.php:371 +msgid "What does \"Display post thumbnail\" do?" +msgstr "Que fait \"Afficher les vignettes des posts\" ?" + +#: admin.php:373 +msgid "" +"If checked, Wordpress Popular Posts will attempt to retrieve the thumbnail " +"of each post. You can set up the source of the thumbnail via Settings - " +"Wordpress Popular Posts - Tools." +msgstr "" +"Si c'est coché, Wordpress Popular Posts tentera de ré" +"cupérer la vignette de chaque post. Vous pouvez configurer la source " +"de la vignette via Paramètres - Wordpress Popular Posts - Outils." + +#: admin.php:376 +msgid "What does \"Display comment count\" do?" +msgstr "Que fait \"Affichage du nombre de commentaires\" ?" + +#: admin.php:378 +msgid "" +"If checked, Wordpress Popular Posts will display how many comments each " +"popular post has got in the selected Time Range." +msgstr "" +"Si c'est coché, Wordpress Popular Posts affiche le nombre de " +"commentaires que chaque post a eu durant la plage de temps sé" +"lectionnée." + +#: admin.php:381 +msgid "What does \"Display views\" do?" +msgstr "Que fait \"Affichage des vues\" ?" + +#: admin.php:383 +msgid "" +"If checked, Wordpress Popular Posts will show how many pageviews a single " +"post has gotten in the selected Time Range." +msgstr "" +"Si c'est coché, Wordpress Popular Posts affichera le nombre de fois " +"où le post a été vu durant la plage de temps sé" +"lectionnée." + +#: admin.php:386 +msgid "What does \"Display author\" do?" +msgstr "Que fait \"Affichage de l'auteur\" ?" + +#: admin.php:388 +msgid "" +"If checked, Wordpress Popular Posts will display the name of the author of " +"each entry listed." +msgstr "" +"Si c'est coché, Wordpress Popular Posts affichera le nom de l'auteur " +"des posts." + +#: admin.php:391 +msgid "What does \"Display date\" do?" +msgstr "Que fait \"Affichage de la date\" ?" + +#: admin.php:393 +msgid "" +"If checked, Wordpress Popular Posts will display the date when each popular " +"posts was published." +msgstr "" +"Si c'est sélectionné, Wordpress Popular Posts affichera la " +"date de publication des posts." + +#: admin.php:396 +msgid "What does \"Use custom HTML Markup\" do?" +msgstr "Que fait \"Formatage HTML de l'affichage\" ?" + +#: admin.php:398 +msgid "" +"If checked, you will be able to customize the HTML markup of your popular " +"posts listing. For example, you can decide whether to wrap your posts in an " +"unordered list, an ordered list, a div, etc. If you know xHTML/CSS, this is " +"for you!" +msgstr "" +"Si c'est sélectionné, cela vous permet de personnaliser le " +"formatage HTML de l'affichage de la liste des posts. Par exemple vous pouvez " +"décider d'afficher les posts en utilisant une liste, un div, etc. Si " +"vous connaissez xHTML/CSS, ceci est pour vous !" + +#: admin.php:401 +msgid "What does \"Use content formatting tags\" do?" +msgstr "Que fait \"Utiliser les balises de formatage de contenu\" ?" + +#: admin.php:403 +msgid "" +"If checked, you can decide the order of the items displayed on each entry. " +"For example, setting it to \"{title}: {summary}\" (without the quotes) would " +"display \"Post title: excerpt of the post here\". Available tags: {image}, " +"{title}, {summary}, {stats} and {rating}." +msgstr "" +"Si c'est sélectionné, vous pouvez décider la façon dont " +"les éléments sont affichés pour chaque post. Par " +"exemple, si vous mettez \"{title} : {summary} \" (sans les guillemets), " +"cela va afficher \"Titre du post : extrait du post \". Les balises " +"disponibles sont : {image}, {title}, {summary}, {stats} et {rating}." + +#: admin.php:406 +msgid "What are \"Template Tags\"?" +msgstr "Qu'est-ce que les \"Marqueurs de Modele\" ?" + +#: admin.php:408 +msgid "" +"Template Tags are simply php functions that allow you to perform certain " +"actions. For example, Wordpress Popular Posts currently supports two " +"different template tags: wpp_get_mostpopular() and wpp_get_views()." +msgstr "" +"Les marqueurs de modèle sont simplement des fonctions php qui " +"permettent de réaliser certaines actions. Par exemple, Wordpress " +"Popular Posts gère deux marqueurs de modèle diffé" +"rents : wpp_get_mostpopular() et wpp_get_views()." + +#: admin.php:411 +msgid "What are the template tags that Wordpress Popular Posts supports?" +msgstr "" +"Quels sont les marqueurs de modèle que Wordpresse Popular Posts " +"supporte ?" + +#: admin.php:413 +msgid "" +"The following are the template tags supported by Wordpress Popular Posts" +msgstr "" +"Ci-dessous les paramètres que le marqueur de modèle Wordpress " +"Popular Posts accepte" + +#: admin.php:417 +msgid "Template tag" +msgstr "Marqueur de modèle" + +#: admin.php:418 admin.php:451 +msgid "What it does " +msgstr "Qu'est-ce que ça fait ?" + +#: admin.php:419 +msgid "Parameters" +msgstr "Paramètres" + +#: admin.php:420 admin.php:454 +msgid "Example" +msgstr "Exemple" + +#: admin.php:426 +msgid "" +"Similar to the widget functionality, this tag retrieves the most popular " +"posts on your blog. This function also accepts parameters so you can " +"customize your popular listing, but these are not required." +msgstr "" +"Fonctionnalités similaire au widget Wordpress Popular Posts, cette " +"balise récupère les posts les plus populaires sur votre blog. " +"Cette fonction accepte également les paramètres pour " +"personnaliser la liste des posts les plus populaires, mais ceux-ci ne sont " +"pas indispensables." + +#: admin.php:427 +msgid "" +"Please refer to \"List of parameters accepted by wpp_get_mostpopular() and " +"the [wpp] shortcode\"." +msgstr "" +"Veuillez consulter la \"Liste des paramètres acceptés par " +"wpp_get_mostpopular() et le shortcode [wpp]\"" + +#: admin.php:432 +msgid "" +"Displays the number of views of a single post. Post ID is required or it " +"will return false." +msgstr "" +"Affiche le nombre de vues d'un seul poste. Le post ID est nécessaire " +"sinon la fonction retourne false." + +#: admin.php:433 +msgid "Post ID" +msgstr "Post ID" + +#: admin.php:440 +msgid "What are \"shortcodes\"?" +msgstr "Qu'est-ce que \"shortcodes\" ?" + +#: admin.php:442 +msgid "" +"Shortcodes are similar to BB Codes, these allow us to call a php function by " +"simply typing something like [shortcode]. With Wordpress Popular Posts, the " +"shortcode [wpp] will let you insert a list of the most popular posts in " +"posts content and pages too! For more information about shortcodes, please " +"visit" +msgstr "" +"Les shortcodes sont similaires aux BB Codes, cela permet d'appeler une " +"fonction php en tapant simplement quelque chose comme [shortcode]. Avec " +"Wordpress Popular Posts, le shortcode [wpp] permet d'insérer une " +"liste des posts les plus populaires dans les messages et les pages de " +"contenu aussi ! Pour plus d'informations sur les shortcodes, veuillez visiter" + +#: admin.php:444 +msgid "" +"List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode" +msgstr "" +"Liste des paramètres acceptés par wpp_get_mostpopular() et le " +"shortcode [wpp]" + +#: admin.php:446 +msgid "" +"These parameters can be used by both the template tag wpp_get_most_popular() " +"and the shortcode [wpp]." +msgstr "" +"Ces paramètres peuvent être utilisés aussi bien par le " +"marqueur de modèle wpp_get_most_popular() que par le shortcode [wpp]." + +#: admin.php:450 +msgid "Parameter" +msgstr "Paramètres" + +#: admin.php:452 +msgid "Possible values" +msgstr "Valeurs possibles" + +#: admin.php:453 +msgid "Defaults to" +msgstr "Par défaut" + +#: admin.php:460 +msgid "Sets a heading for the list" +msgstr "Met un entête à la liste" + +#: admin.php:461 admin.php:468 admin.php:475 admin.php:503 admin.php:510 +#: admin.php:517 admin.php:594 admin.php:601 admin.php:608 admin.php:615 +#: admin.php:622 +msgid "Text string" +msgstr "Texte" + +#: admin.php:462 wordpress-popular-posts.php:250 +msgid "Popular Posts" +msgstr "Popular Posts" + +#: admin.php:467 +msgid "Set the opening tag for the heading of the list" +msgstr "Définit la balise d'ouverture de l'en-tête de la liste" + +#: admin.php:474 +msgid "Set the closing tag for the heading of the list" +msgstr "Définit la balise de fermeture de l'en-tête de la liste" + +#: admin.php:481 +msgid "Sets the maximum number of popular posts to be shown on the listing" +msgstr "" +"Définit le nombre maximum de posts populaires que doit afficher la " +"liste" + +#: admin.php:482 admin.php:524 admin.php:531 admin.php:545 admin.php:552 +msgid "Positive integer" +msgstr "Entier positif" + +#: admin.php:488 +msgid "" +"Tells Wordpress Popular Posts to retrieve the most popular entries within " +"the time range specified by you" +msgstr "" +"Permet à Wordpress Popular Posts de récupérer les posts " +"les plus populaires dans l'intervalle de temps que vous avez spé" +"cifié" + +#: admin.php:495 +msgid "Sets the sorting option of the popular posts" +msgstr "Définit les options de tri des posts les plus populaires" + +#: admin.php:496 +msgid "(for average views per day)" +msgstr "(Pour le nb de vues moyenne par jour)" + +#: admin.php:502 +msgid "Defines the type of posts to show on the listing" +msgstr "Définit le type de messages à afficher sur la liste" + +#: admin.php:509 +msgid "" +"If set, Wordpress Popular Posts will retrieve all entries that belong to the " +"specified category(ies) ID(s). If a minus sign is used, the category(ies) " +"will be excluded instead." +msgstr "" +"Ce paramètre vous permet de récuperer les posts les plus " +"populaires appartenant aux catégories spécifiée " +"(à l'aide des Categories ID). En utilisant le signe - devant l'ID, " +"les catégories seront exclus." + +#: admin.php:511 admin.php:518 +msgid "None" +msgstr "Non" + +#: admin.php:516 +msgid "" +"If set, Wordpress Popular Posts will retrieve all entries created by " +"specified author(s) ID(s)." +msgstr "" +"Cet attribut vous permet de sélectionner les posts les plus " +"populaires ayant ce numéro d'auteur ID." + +#: admin.php:523 +msgid "" +"If set, Wordpress Popular Posts will shorten each post title to \"n\" " +"characters whenever possible" +msgstr "" +"Vous pouvez raccourcir les titres des posts à \"n\" caractè" +"res, si c'est nécessaire" + +#: admin.php:530 +msgid "" +"If set, Wordpress Popular Posts will build and include an excerpt of \"n\" " +"characters long from the content of each post listed as popular" +msgstr "" +"Cet attribut permet de définir la longueur de \"n\" caractères de " +"l'extrait des posts les plus populaires" + +#: admin.php:537 +msgid "" +"If set, Wordpress Popular Posts will maintaing all styling tags (strong, " +"italic, etc) and hyperlinks found in the excerpt" +msgstr "" +"Cet attribut permet l'affichage des balises de style (gras, italique, etc.) " +"ainsi que des liens trouvés dans l'extrait" + +#: admin.php:544 +msgid "" +"If set, and if your current server configuration allows it, you will be able " +"to display thumbnails of your posts. This attribute sets the width for " +"thumbnails" +msgstr "" +"Si la configuration de votre serveur le permet, cet attribut définit " +"la largeur des vignettes" + +#: admin.php:551 +msgid "" +"If set, and if your current server configuration allows it, you will be able " +"to display thumbnails of your posts. This attribute sets the height for " +"thumbnails" +msgstr "" +"Si la configuration de votre serveur le permet, cet attribut définit " +"la hauteur des vignettes" + +#: admin.php:558 +msgid "" +"If set, and if the WP-PostRatings plugin is installed and enabled on your " +"blog, Wordpress Popular Posts will show how your visitors are rating your " +"entries" +msgstr "" +"Si le plugin WP-PostRatings est installé et activé sur votre " +"blog, cette option vous permet d'afficher les notes que vos visiteurs ont " +"données à vos posts" + +#: admin.php:565 +msgid "" +"If set, Wordpress Popular Posts will show how many comments each popular " +"post has got until now" +msgstr "Affiche le nombre de commentaires pour chaque post de la liste" + +#: admin.php:572 +msgid "" +"If set, Wordpress Popular Posts will show how many views each popular post " +"has got since it was installed" +msgstr "" +"Affiche le nombre de vues pour chaque post de la liste depuis que le plugin " +"est installé" + +#: admin.php:579 +msgid "" +"If set, Wordpress Popular Posts will show who published each popular post on " +"the list" +msgstr "Permet l'affichage de l'auteur de chaque post de la liste" + +#: admin.php:586 +msgid "" +"If set, Wordpress Popular Posts will display the date when each popular post " +"on the list was published" +msgstr "" +"Permet l'affichage de la date de publication pour chaque post de la liste" + +#: admin.php:593 +msgid "Sets the date format" +msgstr "Définit le format de la date" + +#: admin.php:600 +msgid "Sets the opening tag for the listing" +msgstr "Définit la balise de début de liste" + +#: admin.php:607 +msgid "Sets the closing tag for the listing" +msgstr "Définit la balise de fin de liste" + +#: admin.php:614 +msgid "Sets the opening tag for each item on the list" +msgstr "" +"Définit la balise d'ouverture pour chaque élément de la " +"liste" + +#: admin.php:621 +msgid "Sets the closing tag for each item on the list" +msgstr "" +"Définit la balise de fermeture pour chaque élément de " +"la liste" + +#: admin.php:628 +msgid "" +"If set, this option will allow you to decide the order of the contents " +"within each item on the list." +msgstr "" +"Cette option vous permet de d'activer le choix de l'ordre du contenu dans " +"chaque élément de la liste." + +#: admin.php:635 +msgid "" +"If set, you can decide the order of each content inside a single item on the " +"list. For example, setting it to \"{title}: {summary}\" would output " +"something like \"Your Post Title: summary here\". This attribute requires " +"do_pattern to be true." +msgstr "" +"Permet de choisir l'ordre des éléments à afficher pour " +"chaque post de la liste. Par exemple, mettre \"{title} : {summary} \" " +"affichera quelque chose comme \"Titre de votre message : ré" +"sumé \". Cette fonctionnalité est active si le paramè" +"tre précédent do_pattern=1." + +#: admin.php:636 +msgid "Available tags" +msgstr "Balises disponibles" + +#: admin.php:651 +msgid "" +"Here you will find a handy group of options to tweak Wordpress Popular Posts." +msgstr "" +"Vous trouverez ici des options pour personnaliser Wordpress Popular Posts." + +#: admin.php:653 +msgid "Thumbnail source" +msgstr "Source des vignettes" + +#: admin.php:654 +msgid "Tell Wordpress Popular Posts where it should get thumbnails from" +msgstr "" +"Indiquer où Wordpress Popular Posts doit aller prendre les vignettes " +"de" + +#: admin.php:659 +msgid "Featured image" +msgstr "Choix de l'image" + +#: admin.php:660 +msgid "First image on post" +msgstr "Première image du post" + +#: admin.php:661 +msgid "Custom field" +msgstr "Champ personalisé" + +#: admin.php:664 +msgid "Custom field name" +msgstr "Nom du champ personalisé" + +#: admin.php:673 +msgid "Wordpress Popular Posts Stylesheet" +msgstr "Feuille de style pour Wordpress Popular Posts" + +#: admin.php:674 +msgid "" +"By default, the plugin includes a stylesheet called wpp.css which you can " +"use to style your popular posts listing. If you wish to use your own " +"stylesheet or do not want it to have it included in the header section of " +"your site, use this." +msgstr "" +"Par défaut, le plugin comprend une feuille de style appelée " +"wpp.css que vous pouvez utiliser pour mettre en forme la liste des messages " +"populaires. Si vous souhaitez utiliser votre propre feuille de style ou ne " +"voulez pas de l'inclure dans la section d'en-tête de votre site, " +"utilisez ceci." + +#: admin.php:679 admin.php:696 +msgid "Enabled" +msgstr "Activé" + +#: admin.php:680 admin.php:697 +msgid "Disabled" +msgstr "Désactivé" + +#: admin.php:689 +msgid "Data tools" +msgstr "Gestion des données" + +#: admin.php:691 +msgid "" +"AJAX update. If you are using a caching plugin such as WP Super Cache, " +"enabling this feature will keep the popular list from being cached." +msgstr "" +"Mise à jour AJAX. Si vous utilisez un plugin de mise en cache comme " +"WP Super Cache, l'activation de cette fonction permet d'avoir la liste des " +"posts les plus populaire malgré la mise en cache." + +#: admin.php:706 +msgid "" +"Wordpress Popular Posts keeps historical data of your most popular entries " +"for up to 30 days. If for some reason you need to clear the cache table, or " +"even both historical and cache tables, please use the buttons below to do so." +msgstr "" +"Wordpress Popular Posts conserve les données historiques de vos posts " +"les plus populaires pour un maximum de 30 jours. Si, pour une raison " +"quelconque, vous devez effacer la table du cache, ou même les deux " +"tables d'historiques et de cache, veuillez utiliser les boutons ci-dessous " +"pour le faire." + +#: admin.php:707 +msgid "Empty cache" +msgstr "Vider le cache" + +#: admin.php:707 +msgid "Use this button to manually clear entries from WPP cache only" +msgstr "" +"Utiliser ce bouton pour effacer manuellement les données en caches de " +"WPP" + +#: admin.php:708 +msgid "Clear all data" +msgstr "Effacer toutes les données" + +#: admin.php:708 +msgid "Use this button to manually clear entries from all WPP data tables" +msgstr "" +"Utiliser ce bouton pour effacer manuellement les données de toutes " +"les tables de données WPP" + +#: admin.php:714 +msgid "Do you like this plugin?" +msgstr "Aimez-vous ce plugin ?" + +#: admin.php:714 +msgid "Rate Wordpress Popular Posts!" +msgstr "Noter Wordpress Popular Posts !" + +#: admin.php:714 +msgid "Rate it" +msgstr "Notez le" + +#: admin.php:714 +msgid "on the official Plugin Directory!" +msgstr "sur le site officiel des plugins !" + +#: admin.php:715 +msgid "Do you love this plugin?" +msgstr "Si vous appreciez-vous ce plugin, " + +#: admin.php:715 admin.php:716 +msgid "Buy me a beer!" +msgstr "payez moi une bière !" + +#: admin.php:715 +msgid "" +"Each donation motivates me to keep releasing free stuff for the Wordpress " +"community!" +msgstr "" +"Chaque don me motive pour maintenir la gratuité des dé" +"veloppements pour la communauté Wordpress" + +#: wordpress-popular-posts.php:47 +msgid "The most Popular Posts on your blog." +msgstr "Les posts les plus populaires sur votre blog." + +#: wordpress-popular-posts.php:301 +msgid "Title:" +msgstr "Titre :" + +#: wordpress-popular-posts.php:301 wordpress-popular-posts.php:303 +#: wordpress-popular-posts.php:305 wordpress-popular-posts.php:313 +#: wordpress-popular-posts.php:324 wordpress-popular-posts.php:326 +#: wordpress-popular-posts.php:330 wordpress-popular-posts.php:334 +#: wordpress-popular-posts.php:343 wordpress-popular-posts.php:355 +#: wordpress-popular-posts.php:367 wordpress-popular-posts.php:368 +#: wordpress-popular-posts.php:369 wordpress-popular-posts.php:370 +#: wordpress-popular-posts.php:385 wordpress-popular-posts.php:396 +msgid "What is this?" +msgstr "Qu'est-ce que c'est ?" + +#: wordpress-popular-posts.php:303 +msgid "Show up to:" +msgstr "Présentez-vous :" + +#: wordpress-popular-posts.php:304 +msgid "posts" +msgstr "posts" + +#: wordpress-popular-posts.php:305 +msgid "Time Range:" +msgstr "Plage de temps :" + +#: wordpress-popular-posts.php:313 +msgid "Sort posts by:" +msgstr "Trier les posts par :" + +#: wordpress-popular-posts.php:315 +msgid "Comments" +msgstr "Commentaires" + +#: wordpress-popular-posts.php:316 +msgid "Total views" +msgstr "Nombre de vues" + +#: wordpress-popular-posts.php:317 +msgid "Avg. daily views" +msgstr "Moy. vues par jour" + +#: wordpress-popular-posts.php:322 +msgid "Posts settings" +msgstr "Réglage des posts" + +#: wordpress-popular-posts.php:324 +msgid "Display post rating" +msgstr "Afficher la note du post" + +#: wordpress-popular-posts.php:326 +msgid "Shorten title" +msgstr "Raccourcir le titre" + +#: wordpress-popular-posts.php:328 +msgid "Shorten title to" +msgstr "Raccourcir le titre de" + +#: wordpress-popular-posts.php:328 wordpress-popular-posts.php:335 +msgid "characters" +msgstr "caract." + +#: wordpress-popular-posts.php:330 +msgid "Display post excerpt" +msgstr "Afficher un extrait du post" + +#: wordpress-popular-posts.php:333 +msgid "Excerpt Properties" +msgstr "Propriété de l'extrait" + +#: wordpress-popular-posts.php:334 +msgid "Keep text format and links" +msgstr "Garder le formatage du texte et les liens" + +#: wordpress-popular-posts.php:335 +msgid "Excerpt length:" +msgstr "Longueur de l'extrait :" + +#: wordpress-popular-posts.php:343 +msgid "Filters:" +msgstr "Filtres :" + +#: wordpress-popular-posts.php:344 +msgid "Post type(s):" +msgstr "Type de posts" + +#: wordpress-popular-posts.php:346 +msgid "Category(ies) ID(s):" +msgstr "Catégories ID :" + +#: wordpress-popular-posts.php:348 +msgid "Author(s) ID(s):" +msgstr "Auteurs ID :" + +#: wordpress-popular-posts.php:354 +msgid "Thumbnail settings" +msgstr "Réglages des vignettes" + +#: wordpress-popular-posts.php:355 +msgid "Display post thumbnail" +msgstr "Afficher les vignettes des posts" + +#: wordpress-popular-posts.php:357 +msgid "Width:" +msgstr "Largeur :" + +#: wordpress-popular-posts.php:358 wordpress-popular-posts.php:360 +msgid "px" +msgstr "px" + +#: wordpress-popular-posts.php:359 +msgid "Height:" +msgstr "Hauteur :" + +#: wordpress-popular-posts.php:366 +msgid "Stats Tag settings" +msgstr "Options d'affichage" + +#: wordpress-popular-posts.php:367 +msgid "Display comment count" +msgstr "Affichage du nombre de commentaires" + +#: wordpress-popular-posts.php:368 +msgid "Display views" +msgstr "Affichage le nb de vues" + +#: wordpress-popular-posts.php:369 +msgid "Display author" +msgstr "Affichage de l'auteur" + +#: wordpress-popular-posts.php:370 +msgid "Display date" +msgstr "Affichage de la date" + +#: wordpress-popular-posts.php:373 +msgid "Date Format" +msgstr "Format de la date" + +#: wordpress-popular-posts.php:384 +msgid "HTML Markup settings" +msgstr "Formatage HTML de l'affichage" + +#: wordpress-popular-posts.php:385 +msgid "Use custom HTML Markup" +msgstr "Utiliser du code HTML" + +#: wordpress-popular-posts.php:388 +msgid "Before / after title:" +msgstr "Avant/Après le titre :" + +#: wordpress-popular-posts.php:390 +msgid "Before / after Popular Posts:" +msgstr "Avant/Après Popular Posts :" + +#: wordpress-popular-posts.php:392 +msgid "Before / after each post:" +msgstr "Avant/Après chaque post :" + +#: wordpress-popular-posts.php:396 +msgid "Use content formatting tags" +msgstr "Utiliser les balises de formatage de contenu." + +#: wordpress-popular-posts.php:399 +msgid "Content format:" +msgstr "Format de contenu :" + +#: wordpress-popular-posts.php:505 +msgid "Success! The cache table has been cleared!" +msgstr "Ok ! La table de cache est bien effacée !" + +#: wordpress-popular-posts.php:507 +msgid "Error: cache table does not exist." +msgstr "Erreur : la table de cache n'existe pas." + +#: wordpress-popular-posts.php:513 +msgid "Success! All data have been cleared!" +msgstr "Ok ! Toutes les données ont été effacées !" + +#: wordpress-popular-posts.php:515 +msgid "Error: one or both data tables are missing." +msgstr "Erreur : une ou deux tables de données sont manquantes. " + +#: wordpress-popular-posts.php:518 +msgid "Invalid action." +msgstr "Action invalide" + +#: wordpress-popular-posts.php:521 +msgid "" +"Sorry, you do not have enough permissions to do this. Please contact the " +"site administrator for support." +msgstr "" +"Désolé, vous n'avez pas les autorisations suffisantes pour " +"faire cela. Contactez, s'il vous plaît, l'administrateur du site pour " +"avoir de l'aide." + +#: wordpress-popular-posts.php:852 +msgid "Sorry. No data so far." +msgstr "Désolé. Aucune donnée à ce jour." + +#: wordpress-popular-posts.php:928 +msgid "comment(s)" +msgstr "commentaire(s)" + +#: wordpress-popular-posts.php:932 +msgid "view(s)" +msgstr "vue(s)" + +#: wordpress-popular-posts.php:935 +msgid "view(s) per day" +msgstr "vue(s) par jour" + +#: wordpress-popular-posts.php:943 +msgid "by" +msgstr "par" + +#: wordpress-popular-posts.php:947 +msgid "posted on" +msgstr "posté le" + +#: wordpress-popular-posts.php:1292 +msgid "" +"Your Wordpress version is too old. Wordpress Popular Posts Plugin requires " +"at least version 2.8 to function correctly. Please update your blog via " +"Tools > Upgrade." +msgstr "" +"Votre version de Wordpress est trop vielle. Le plugin Wordpress Popular " +"Posts requiert une version > 2.8 pour fonctionner correctement. Veuillez " +"mettre à jour votre blog à l'aide de l'outil \"Mise à " +"jour\"." + +#: wordpress-popular-posts.php:1416 +msgid "Wordpress Popular Posts Stats" +msgstr "Statistiques Wordpress Popular Posts" diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.mo b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.mo index 84eca1167216df79d19feb224322d23ce089d9cc..8415a07087b5cde8895cf21c5b72b5df2b393895 100644 Binary files a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.mo and b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.mo differ diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.php b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.php index 69aa8c92ad8b8342bf60d38ca7778aaea0c4ccc3..fe3dfc85a0aec3767489649873eb69be02cafe68 100644 --- a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.php +++ b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.php @@ -2,10 +2,10 @@ /* Plugin Name: Wordpress Popular Posts Plugin URI: http://wordpress.org/extend/plugins/wordpress-popular-posts -Description: Showcases your most popular posts to your visitors on your blog's sidebar. Use Wordpress Popular Posts as a widget or place it anywhere on your theme using <strong><?php wpp_get_mostpopular(); ?></strong> -Version: 2.2.1 +Description: Showcases your most popular posts to your visitors on your blog's sidebar. Use Wordpress Popular Posts as a widget or place it anywhere on your theme using <strong><?php wpp_get_mostpopular(); ?></strong> +Version: 2.3.2 Author: Héctor Cabrera -Author URI: http://wordpress.org/extend/plugins/wordpress-popular-posts +Author URI: http://cabrerahector.com License: GPL2 */ @@ -26,9 +26,10 @@ function load_wpp() { */ if ( !class_exists('WordpressPopularPosts') ) { + class WordpressPopularPosts extends WP_Widget { // plugin global variables - var $version = "2.2.1"; + var $version = "2.3.2"; var $qTrans = false; var $postRating = false; var $thumb = false; @@ -36,13 +37,14 @@ if ( !class_exists('WordpressPopularPosts') ) { var $charset = "UTF-8"; var $magicquotes = false; var $default_thumbnail = ""; + var $user_ops = array(); // constructor function WordpressPopularPosts() { global $wp_version; // widget settings - $widget_ops = array( 'classname' => 'popular-posts', 'description' => 'The most Popular Posts on your blog.' ); + $widget_ops = array( 'classname' => 'popular-posts', 'description' => __('The most Popular Posts on your blog.', 'wordpress-popular-posts') ); // widget control settings $control_ops = array( 'width' => 250, 'height' => 350, 'id_base' => 'wpp' ); @@ -62,10 +64,46 @@ if ( !class_exists('WordpressPopularPosts') ) { // detect PHP magic quotes $this->magicquotes = get_magic_quotes_gpc(); + // get user options + $wpp_settings_def = array( + 'stats' => array( + 'order_by' => 'comments', + 'limit' => 10 + ), + 'tools' => array( + 'ajax' => false, + 'css' => true, + 'stylesheet' => true, + 'thumbnail' => array( + 'source' => 'featured', + 'field' => '' + ) + ) + ); + + $this->user_ops = get_option('wpp_settings_config'); + + if (!$this->user_ops) { + add_option('wpp_settings_config', $wpp_settings_def); + $this->user_ops = $wpp_settings_def; + } + // print stylesheet - add_action('wp_head', array(&$this, 'wpp_print_stylesheet')); + if ($this->user_ops['tools']['css']) { + add_action('get_header', array(&$this, 'wpp_print_stylesheet')); + } + + /* + if ($this->user_ops['tools']['ajax']) { + // add ajax update to wp_ajax_ hook + add_action('wp_ajax_nopriv_wpp_update', array(&$this, 'wpp_ajax_update')); + add_action('wp_head', array(&$this, 'wpp_print_ajax')); + } else { + // add update action, no ajax + add_action('the_content', array(&$this,'wpp_update') ); + } + */ - // add ajax update to wp_ajax_ hook add_action('wp_ajax_nopriv_wpp_update', array(&$this, 'wpp_ajax_update')); add_action('wp_head', array(&$this, 'wpp_print_ajax')); @@ -76,8 +114,8 @@ if ( !class_exists('WordpressPopularPosts') ) { // activate textdomain for translations add_action('init', array(&$this, 'wpp_textdomain')); - // activate maintenance page - add_action('admin_menu', array(&$this, 'add_wpp_maintenance_page')); + // activate admin page + add_action('admin_menu', array(&$this, 'add_wpp_admin')); // cache maintenance schedule register_deactivation_hook(__FILE__, array(&$this, 'wpp_deactivation')); @@ -110,34 +148,36 @@ if ( !class_exists('WordpressPopularPosts') ) { add_shortcode('WPP', array(&$this, 'wpp_shortcode')); } - // set version + // set version and check for upgrades $wpp_ver = get_option('wpp_ver'); if (!$wpp_ver) { add_option('wpp_ver', $this->version); } else if (version_compare($wpp_ver, $this->version, '<')) { + $this->wpp_upgrade(); update_option('wpp_ver', $this->version); } - - // add stats page - add_action('admin_menu', array(&$this, 'wpp_stats')); } // builds Wordpress Popular Posts' widgets function widget($args, $instance) { + //$args['widget_id']; extract($args); echo "<!-- Wordpress Popular Posts Plugin v". $this->version ." [W] [".$instance['range']."]". (($instance['markup']['custom_html']) ? ' [custom]' : ' [regular]') ." -->"."\n"; echo $before_widget . "\n"; // has user set a title? if ($instance['title'] != '') { + + $title = apply_filters( 'widget_title', $instance['title'] ); + if ($instance['markup']['custom_html'] && $instance['markup']['title-start'] != "" && $instance['markup']['title-end'] != "" ) { - echo htmlspecialchars_decode($instance['markup']['title-start'], ENT_QUOTES) . htmlspecialchars_decode($instance['title'], ENT_QUOTES) . htmlspecialchars_decode($instance['markup']['title-end'], ENT_QUOTES); + echo htmlspecialchars_decode($instance['markup']['title-start'], ENT_QUOTES) . $title . htmlspecialchars_decode($instance['markup']['title-end'], ENT_QUOTES); } else { - echo $before_title . htmlspecialchars_decode($instance['title'], ENT_QUOTES) . $after_title; + echo $before_title . $title . $after_title; } } - echo $this->get_popular_posts($instance, false); + echo $this->get_popular_posts($instance); echo $after_widget . "\n"; echo "<!-- End Wordpress Popular Posts Plugin v". $this->version ." -->"."\n"; } @@ -147,25 +187,41 @@ if ( !class_exists('WordpressPopularPosts') ) { $instance = $old_instance; - //$instance['title'] = htmlspecialchars( stripslashes(strip_tags( $new_instance['title'] )), ENT_QUOTES, 'UTF-8', FALSE ); $instance['title'] = ($this->magicquotes) ? htmlspecialchars( stripslashes(strip_tags( $new_instance['title'] )), ENT_QUOTES ) : htmlspecialchars( strip_tags( $new_instance['title'] ), ENT_QUOTES ); $instance['limit'] = is_numeric($new_instance['limit']) ? $new_instance['limit'] : 10; $instance['range'] = $new_instance['range']; $instance['order_by'] = $new_instance['order_by']; - $instance['pages'] = $new_instance['pages']; + + // FILTERS + if ($new_instance['post_type'] == "") { // user did not define the custom post type name, so we fall back to default + $instance['post_type'] = 'post,page'; + } else { + $instance['post_type'] = $new_instance['post_type']; + } + + $instance['cat'] = implode(",", array_filter(explode(",", preg_replace( '|[^0-9,-]|', '', $new_instance['cat'] )))); + $instance['author'] = implode(",", array_filter(explode(",", preg_replace( '|[^0-9,]|', '', $new_instance['uid'] )))); + $instance['shorten_title']['active'] = $new_instance['shorten_title-active']; $instance['shorten_title']['length'] = is_numeric($new_instance['shorten_title-length']) ? $new_instance['shorten_title-length'] : 25; $instance['post-excerpt']['active'] = $new_instance['post-excerpt-active']; $instance['post-excerpt']['length'] = is_numeric($new_instance['post-excerpt-length']) ? $new_instance['post-excerpt-length'] : 55; - $instance['post-excerpt']['keep_format'] = $new_instance['post-excerpt-format']; - $instance['exclude-cats']['active'] = $new_instance['exclude-cats']; - $instance['exclude-cats']['cats'] = empty($new_instance['excluded']) ? '' : (ctype_digit(str_replace(",", "", $new_instance['excluded']))) ? $new_instance['excluded'] : ''; + $instance['post-excerpt']['keep_format'] = $new_instance['post-excerpt-format']; $instance['thumbnail']['thumb_selection'] = "usergenerated"; if ($this->thumb) { // can create thumbnails - $instance['thumbnail']['active'] = $new_instance['thumbnail-active']; - $instance['thumbnail']['width'] = is_numeric($new_instance['thumbnail-width']) ? $new_instance['thumbnail-width'] : 15; - $instance['thumbnail']['height'] = is_numeric($new_instance['thumbnail-height']) ? $new_instance['thumbnail-height'] : 15; + $instance['thumbnail']['active'] = $new_instance['thumbnail-active']; + + if (is_numeric($new_instance['thumbnail-width']) && is_numeric($new_instance['thumbnail-height'])) { + if (($instance['thumbnail']['width'] != $new_instance['thumbnail-width']) || ($instance['thumbnail']['height'] != $new_instance['thumbnail-height'])) { + $instance['thumbnail']['width'] = $new_instance['thumbnail-width']; + $instance['thumbnail']['height'] = $new_instance['thumbnail-height']; + } + } else { + $instance['thumbnail']['width'] = 15; + $instance['thumbnail']['height'] = 15; + } + } else { // cannot create thumbnails $instance['thumbnail']['active'] = false; $instance['thumbnail']['width'] = 15; @@ -186,20 +242,24 @@ if ( !class_exists('WordpressPopularPosts') ) { $instance['markup']['title-start'] = empty($new_instance['title-start']) ? '' : htmlspecialchars( $new_instance['title-start'], ENT_QUOTES ); $instance['markup']['title-end'] = empty($new_instance['title-end']) ? '' : htmlspecialchars( $new_instance['title-end'], ENT_QUOTES ); $instance['markup']['pattern']['active'] = $new_instance['pattern_active']; - $instance['markup']['pattern']['form'] = empty($new_instance['pattern_form']) ? '{image} {title}: {summary} {stats}' : strip_tags( $new_instance['pattern_form'] ); + //$instance['markup']['pattern']['form'] = empty($new_instance['pattern_form']) ? '{image} {title}: {summary} {stats}' : strip_tags( $new_instance['pattern_form'] ); + $instance['markup']['pattern']['form'] = empty($new_instance['pattern_form']) ? '{image} {title}: {summary} {stats}' : $new_instance['pattern_form']; return $instance; } // widget's form function form($instance) { + // set default values $defaults = array( 'title' => __('Popular Posts', 'wordpress-popular-posts'), 'limit' => 10, 'range' => 'daily', 'order_by' => 'comments', - 'pages' => true, + 'post_type' => 'post,page', + 'author' => '', + 'cat' => '', 'shorten_title' => array( 'active' => false, 'length' => 25, @@ -208,11 +268,7 @@ if ( !class_exists('WordpressPopularPosts') ) { 'post-excerpt' => array( 'active' => false, 'length' => 55 - ), - 'exclude-cats' => array( - 'active' => false, - 'cats' => '' - ), + ), 'thumbnail' => array( 'active' => false, 'width' => 15, @@ -248,11 +304,11 @@ if ( !class_exists('WordpressPopularPosts') ) { // form ?> - <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'wordpress-popular-posts'); ?></label> + <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small> <br /> <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" class="widefat" /></p> - <p><label for="<?php echo $this->get_field_id( 'limit' ); ?>"><?php _e('Show up to:', 'wordpress-popular-posts'); ?></label><br /> + <p><label for="<?php echo $this->get_field_id( 'limit' ); ?>"><?php _e('Show up to:', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> <input id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" value="<?php echo $instance['limit']; ?>" class="widefat" style="width:50px!important" /> <?php _e('posts', 'wordpress-popular-posts'); ?></p> - <p><label for="<?php echo $this->get_field_id( 'range' ); ?>"><?php _e('Time Range:', 'wordpress-popular-posts'); ?></label> + <p><label for="<?php echo $this->get_field_id( 'range' ); ?>"><?php _e('Time Range:', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> <select id="<?php echo $this->get_field_id( 'range' ); ?>" name="<?php echo $this->get_field_name( 'range' ); ?>" class="widefat"> <option value="daily" <?php if ( 'daily' == $instance['range'] ) echo 'selected="selected"'; ?>><?php _e('Last 24 hours', 'wordpress-popular-posts'); ?></option> <option value="weekly" <?php if ( 'weekly' == $instance['range'] ) echo 'selected="selected"'; ?>><?php _e('Last 7 days', 'wordpress-popular-posts'); ?></option> @@ -260,42 +316,49 @@ if ( !class_exists('WordpressPopularPosts') ) { <option value="all" <?php if ( 'all' == $instance['range'] ) echo 'selected="selected"'; ?>><?php _e('All-time', 'wordpress-popular-posts'); ?></option> </select> </p> - <p><label for="<?php echo $this->get_field_id( 'order_by' ); ?>"><?php _e('Sort posts by:', 'wordpress-popular-posts'); ?></label> + <p><label for="<?php echo $this->get_field_id( 'order_by' ); ?>"><?php _e('Sort posts by:', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small> <br /> <select id="<?php echo $this->get_field_id( 'order_by' ); ?>" name="<?php echo $this->get_field_name( 'order_by' ); ?>" class="widefat"> <option value="comments" <?php if ( 'comments' == $instance['order_by'] ) echo 'selected="selected"'; ?>><?php _e('Comments', 'wordpress-popular-posts'); ?></option> <option value="views" <?php if ( 'views' == $instance['order_by'] ) echo 'selected="selected"'; ?>><?php _e('Total views', 'wordpress-popular-posts'); ?></option> <option value="avg" <?php if ( 'avg' == $instance['order_by'] ) echo 'selected="selected"'; ?>><?php _e('Avg. daily views', 'wordpress-popular-posts'); ?></option> </select> </p> - <input type="checkbox" class="checkbox" <?php echo ($instance['pages']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'pages' ); ?>" name="<?php echo $this->get_field_name( 'pages' ); ?>" /> <label for="<?php echo $this->get_field_id( 'pages' ); ?>"><?php _e('Include pages', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <?php if ($this->postRating) : ?> - <input type="checkbox" class="checkbox" <?php echo ($instance['rating']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'rating' ); ?>" name="<?php echo $this->get_field_name( 'rating' ); ?>" /> <label for="<?php echo $this->get_field_id( 'rating' ); ?>"><?php _e('Display post rating', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <?php endif; ?> - <input type="checkbox" class="checkbox" <?php echo ($instance['shorten_title']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'shorten_title-active' ); ?>" name="<?php echo $this->get_field_name( 'shorten_title-active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'shorten_title-active' ); ?>"><?php _e('Shorten title output', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <?php if ($instance['shorten_title']['active']) : ?> - <label for="<?php echo $this->get_field_id( 'shorten_title-length' ); ?>"><?php _e('Shorten title to', 'wordpress-popular-posts'); ?> <input id="<?php echo $this->get_field_id( 'shorten_title-length' ); ?>" name="<?php echo $this->get_field_name( 'shorten_title-length' ); ?>" value="<?php echo $instance['shorten_title']['length']; ?>" class="widefat" style="width:50px!important" /> <?php _e('characters', 'wordpress-popular-posts'); ?></label><br /><br /> - <?php endif; ?> - <input type="checkbox" class="checkbox" <?php echo ($instance['post-excerpt']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'post-excerpt-active' ); ?>" name="<?php echo $this->get_field_name( 'post-excerpt-active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'post-excerpt-active' ); ?>"><?php _e('Display post excerpt', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <?php if ($instance['post-excerpt']['active']) : ?> - <fieldset class="widefat"> - <legend><?php _e('Excerpt Properties', 'wordpress-popular-posts'); ?></legend> - <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'post-excerpt-format' ); ?>" name="<?php echo $this->get_field_name( 'post-excerpt-format' ); ?>" <?php echo ($instance['post-excerpt']['keep_format']) ? 'checked="checked"' : ''; ?> /> <label for="<?php echo $this->get_field_id( 'post-excerpt-format' ); ?>"><?php _e('Keep text format and links', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <label for="<?php echo $this->get_field_id( 'post-excerpt-length' ); ?>"><?php _e('Excerpt length:', 'wordpress-popular-posts'); ?> <input id="<?php echo $this->get_field_id( 'post-excerpt-length' ); ?>" name="<?php echo $this->get_field_name( 'post-excerpt-length' ); ?>" value="<?php echo $instance['post-excerpt']['length']; ?>" class="widefat" style="width:30px!important" /> <?php _e('characters', 'wordpress-popular-posts'); ?></label> - </fieldset> - <br /> - <?php endif; ?> - <input type="checkbox" class="checkbox" <?php echo ($instance['exclude-cats']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'exclude-cats' ); ?>" name="<?php echo $this->get_field_name( 'exclude-cats' ); ?>" /> <label for="<?php echo $this->get_field_id( 'exclude-cats' ); ?>"><?php _e('Exclude categories', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <?php if ($instance['exclude-cats']['active']) : ?> + + <fieldset style="width:214px; padding:5px;" class="widefat"> + <legend><?php _e('Posts settings', 'wordpress-popular-posts'); ?></legend> + <?php if ($this->postRating) : ?> + <input type="checkbox" class="checkbox" <?php echo ($instance['rating']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'rating' ); ?>" name="<?php echo $this->get_field_name( 'rating' ); ?>" /> <label for="<?php echo $this->get_field_id( 'rating' ); ?>"><?php _e('Display post rating', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <?php endif; ?> + <input type="checkbox" class="checkbox" <?php echo ($instance['shorten_title']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'shorten_title-active' ); ?>" name="<?php echo $this->get_field_name( 'shorten_title-active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'shorten_title-active' ); ?>"><?php _e('Shorten title', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <?php if ($instance['shorten_title']['active']) : ?> + <label for="<?php echo $this->get_field_id( 'shorten_title-length' ); ?>"><?php _e('Shorten title to', 'wordpress-popular-posts'); ?> <input id="<?php echo $this->get_field_id( 'shorten_title-length' ); ?>" name="<?php echo $this->get_field_name( 'shorten_title-length' ); ?>" value="<?php echo $instance['shorten_title']['length']; ?>" class="widefat" style="width:50px!important" /> <?php _e('characters', 'wordpress-popular-posts'); ?></label><br /><br /> + <?php endif; ?> + <input type="checkbox" class="checkbox" <?php echo ($instance['post-excerpt']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'post-excerpt-active' ); ?>" name="<?php echo $this->get_field_name( 'post-excerpt-active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'post-excerpt-active' ); ?>"><?php _e('Display post excerpt', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <?php if ($instance['post-excerpt']['active']) : ?> + <fieldset class="widefat"> + <legend><?php _e('Excerpt Properties', 'wordpress-popular-posts'); ?></legend> + <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'post-excerpt-format' ); ?>" name="<?php echo $this->get_field_name( 'post-excerpt-format' ); ?>" <?php echo ($instance['post-excerpt']['keep_format']) ? 'checked="checked"' : ''; ?> /> <label for="<?php echo $this->get_field_id( 'post-excerpt-format' ); ?>"><?php _e('Keep text format and links', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <label for="<?php echo $this->get_field_id( 'post-excerpt-length' ); ?>"><?php _e('Excerpt length:', 'wordpress-popular-posts'); ?> <input id="<?php echo $this->get_field_id( 'post-excerpt-length' ); ?>" name="<?php echo $this->get_field_name( 'post-excerpt-length' ); ?>" value="<?php echo $instance['post-excerpt']['length']; ?>" class="widefat" style="width:30px!important" /> <?php _e('characters', 'wordpress-popular-posts'); ?></label> + </fieldset> + <br /> + <?php endif; ?> + </fieldset> + <br /> + <fieldset class="widefat"> - <legend><?php _e('Categories to exclude', 'wordpress-popular-posts'); ?></legend> - <label for="<?php echo $this->get_field_id( 'excluded' ); ?>"><?php _e('ID(s) (comma separated, no spaces):', 'wordpress-popular-posts'); ?></label><br /> <input id="<?php echo $this->get_field_id( 'excluded' ); ?>" name="<?php echo $this->get_field_name( 'excluded' ); ?>" value="<?php echo $instance['exclude-cats']['cats']; ?>" class="widefat" style="width:150px" /><br /><br /> - </fieldset> - <?php endif; ?> + <legend><?php _e('Filters:', 'wordpress-popular-posts'); ?> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small></legend><br /> + <label for="<?php echo $this->get_field_id( 'post_type' ); ?>"><?php _e('Post type(s):', 'wordpress-popular-posts'); ?></label><br /> + <input id="<?php echo $this->get_field_id( 'post_type' ); ?>" name="<?php echo $this->get_field_name( 'post_type' ); ?>" value="<?php echo $instance['post_type']; ?>" class="widefat" style="width:150px" /><br /><br /> + <label for="<?php echo $this->get_field_id( 'cat' ); ?>"><?php _e('Category(ies) ID(s):', 'wordpress-popular-posts'); ?></label><br /> + <input id="<?php echo $this->get_field_id( 'cat' ); ?>" name="<?php echo $this->get_field_name( 'cat' ); ?>" value="<?php echo $instance['cat']; ?>" class="widefat" style="width:150px" /><br /><br /> + <label for="<?php echo $this->get_field_id( 'uid' ); ?>"><?php _e('Author(s) ID(s):', 'wordpress-popular-posts'); ?></label><br /> + <input id="<?php echo $this->get_field_id( 'uid' ); ?>" name="<?php echo $this->get_field_name( 'uid' ); ?>" value="<?php echo $instance['author']; ?>" class="widefat" style="width:150px" /><br /><br /> + </fieldset> <br /> - + <fieldset style="width:214px; padding:5px;" class="widefat"> <legend><?php _e('Thumbnail settings', 'wordpress-popular-posts'); ?></legend> - <input type="checkbox" class="checkbox" <?php echo ($instance['thumbnail']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'thumbnail-active' ); ?>" name="<?php echo $this->get_field_name( 'thumbnail-active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'thumbnail-active' ); ?>"><?php _e('Display post thumbnail', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> + <input type="checkbox" class="checkbox" <?php echo ($instance['thumbnail']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'thumbnail-active' ); ?>" name="<?php echo $this->get_field_name( 'thumbnail-active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'thumbnail-active' ); ?>"><?php _e('Display post thumbnail', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> <?php if($instance['thumbnail']['active']) : ?> <label for="<?php echo $this->get_field_id( 'thumbnail-width' ); ?>"><?php _e('Width:', 'wordpress-popular-posts'); ?></label> <input id="<?php echo $this->get_field_id( 'thumbnail-width' ); ?>" name="<?php echo $this->get_field_name( 'thumbnail-width' ); ?>" value="<?php echo $instance['thumbnail']['width']; ?>" class="widefat" style="width:30px!important" <?php echo ($this->thumb) ? '' : 'disabled="disabled"' ?> /> <?php _e('px', 'wordpress-popular-posts'); ?> <br /> @@ -307,10 +370,10 @@ if ( !class_exists('WordpressPopularPosts') ) { <br /> <fieldset style="width:214px; padding:5px;" class="widefat"> <legend><?php _e('Stats Tag settings', 'wordpress-popular-posts'); ?></legend> - <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['comment_count']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'comment_count' ); ?>" name="<?php echo $this->get_field_name( 'comment_count' ); ?>" /> <label for="<?php echo $this->get_field_id( 'comment_count' ); ?>"><?php _e('Display comment count', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['views']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'views' ); ?>" name="<?php echo $this->get_field_name( 'views' ); ?>" /> <label for="<?php echo $this->get_field_id( 'views' ); ?>"><?php _e('Display views', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['author']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'author' ); ?>" name="<?php echo $this->get_field_name( 'author' ); ?>" /> <label for="<?php echo $this->get_field_id( 'author' ); ?>"><?php _e('Display author', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> - <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['date']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'date' ); ?>" name="<?php echo $this->get_field_name( 'date' ); ?>" /> <label for="<?php echo $this->get_field_id( 'date' ); ?>"><?php _e('Display date', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small> + <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['comment_count']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'comment_count' ); ?>" name="<?php echo $this->get_field_name( 'comment_count' ); ?>" /> <label for="<?php echo $this->get_field_id( 'comment_count' ); ?>"><?php _e('Display comment count', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['views']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'views' ); ?>" name="<?php echo $this->get_field_name( 'views' ); ?>" /> <label for="<?php echo $this->get_field_id( 'views' ); ?>"><?php _e('Display views', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['author']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'author' ); ?>" name="<?php echo $this->get_field_name( 'author' ); ?>" /> <label for="<?php echo $this->get_field_id( 'author' ); ?>"><?php _e('Display author', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> + <input type="checkbox" class="checkbox" <?php echo ($instance['stats_tag']['date']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'date' ); ?>" name="<?php echo $this->get_field_name( 'date' ); ?>" /> <label for="<?php echo $this->get_field_id( 'date' ); ?>"><?php _e('Display date', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small> <?php if ($instance['stats_tag']['date']['active']) : ?> <fieldset class="widefat"> <legend><?php _e('Date Format', 'wordpress-popular-posts'); ?></legend> @@ -325,7 +388,7 @@ if ( !class_exists('WordpressPopularPosts') ) { <fieldset style="width:214px; padding:5px;" class="widefat"> <legend><?php _e('HTML Markup settings', 'wordpress-popular-posts'); ?></legend> - <input type="checkbox" class="checkbox" <?php echo ($instance['markup']['custom_html']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'custom_html' ); ?>" name="<?php echo $this->get_field_name( 'custom_html' ); ?>" /> <label for="<?php echo $this->get_field_id( 'custom_html' ); ?>"><?php _e('Use custom HTML Markup', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> + <input type="checkbox" class="checkbox" <?php echo ($instance['markup']['custom_html']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'custom_html' ); ?>" name="<?php echo $this->get_field_name( 'custom_html' ); ?>" /> <label for="<?php echo $this->get_field_id( 'custom_html' ); ?>"><?php _e('Use custom HTML Markup', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> <?php if ($instance['markup']['custom_html']) : ?> <br /> <p style="font-size:11px"><label for="<?php echo $this->get_field_id( 'title-start' ); ?>"><?php _e('Before / after title:', 'wordpress-popular-posts'); ?></label> <br /> @@ -336,33 +399,38 @@ if ( !class_exists('WordpressPopularPosts') ) { <input type="text" id="<?php echo $this->get_field_id( 'post-start' ); ?>" name="<?php echo $this->get_field_name( 'post-start' ); ?>" value="<?php echo $instance['markup']['post-start']; ?>" class="widefat" style="width:80px!important" <?php echo ($instance['markup']['custom_html']) ? '' : 'disabled="disabled"' ?> /> <input type="text" id="<?php echo $this->get_field_id( 'post-end' ); ?>" name="<?php echo $this->get_field_name( 'post-end' ); ?>" value="<?php echo $instance['markup']['post-end']; ?>" class="widefat" style="width:80px!important" <?php echo ($instance['markup']['custom_html']) ? '' : 'disabled="disabled"' ?> /></p> <hr /> <?php endif; ?> - <input type="checkbox" class="checkbox" <?php echo ($instance['markup']['pattern']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'pattern_active' ); ?>" name="<?php echo $this->get_field_name( 'pattern_active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'pattern_active' ); ?>"><?php _e('Use content formatting tags', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('url'); ?>/wp-admin/options-general.php?page=wordpress-popular-posts/wordpress-popular-posts.php">?</a>]</small><br /> + <input type="checkbox" class="checkbox" <?php echo ($instance['markup']['pattern']['active']) ? 'checked="checked"' : ''; ?> id="<?php echo $this->get_field_id( 'pattern_active' ); ?>" name="<?php echo $this->get_field_name( 'pattern_active' ); ?>" /> <label for="<?php echo $this->get_field_id( 'pattern_active' ); ?>"><?php _e('Use content formatting tags', 'wordpress-popular-posts'); ?></label> <small>[<a href="<?php echo bloginfo('wpurl'); ?>/wp-admin/options-general.php?page=wpp_admin" title="<?php _e('What is this?', 'wordpress-popular-posts'); ?>">?</a>]</small><br /> <?php if ($instance['markup']['pattern']['active']) : ?> <br /> <p style="font-size:11px"><label for="<?php echo $this->get_field_id( 'pattern_form' ); ?>"><?php _e('Content format:', 'wordpress-popular-posts'); ?></label> - <input type="text" id="<?php echo $this->get_field_id( 'pattern_form' ); ?>" name="<?php echo $this->get_field_name( 'pattern_form' ); ?>" value="<?php echo $instance['markup']['pattern']['form']; ?>" style="width:204px" <?php echo ($instance['markup']['pattern']['active']) ? '' : 'disabled="disabled"' ?> /></p> + <input type="text" id="<?php echo $this->get_field_id( 'pattern_form' ); ?>" name="<?php echo $this->get_field_name( 'pattern_form' ); ?>" value="<?php echo htmlspecialchars($instance['markup']['pattern']['form'], ENT_QUOTES); ?>" style="width:204px" <?php echo ($instance['markup']['pattern']['active']) ? '' : 'disabled="disabled"' ?> /></p> <?php endif; ?> </fieldset> <?php } // RRR Added to get local time as per WP settings - function curdate() { - //return "'".gmdate( 'Y-m-d', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) ))."'"; + function curdate() { return gmdate( 'Y-m-d', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) )); } - function now() { - //return "'".current_time('mysql')."'"; + function now() { return current_time('mysql'); } - // updates popular posts data table + // Function to calculate script execution time. + function microtime_float() { + list( $msec, $sec ) = explode( ' ', microtime() ); + $microtime = (float) $msec + (float) $sec; + return $microtime; + } + + // updates popular posts data table via ajax function wpp_ajax_update() { $nonce = $_POST['token']; // is this a valid request? - if (! wp_verify_nonce($nonce, 'wpp-token') ) die("Oops!"); + if (! wp_verify_nonce($nonce, 'wpp-token') ) die("Invalid token"); if (is_numeric($_POST['id']) && (intval($_POST['id']) == floatval($_POST['id'])) && ($_POST['id'] != '')) { $id = $_POST['id']; @@ -370,36 +438,67 @@ if ( !class_exists('WordpressPopularPosts') ) { die("Invalid ID"); } - // if we got an ID, let's update the data table - + // if we got an ID, let's update the data table global $wpdb; $wpdb->show_errors(); - $table = $wpdb->prefix . 'popularpostsdata'; + $table = $wpdb->prefix . 'popularpostsdata'; + $exec_time = 0; + // update popularpostsdata table - $exists = $wpdb->get_results("SELECT postid FROM $table WHERE postid = '$id'"); - if ($exists) { - $result = $wpdb->query("UPDATE $table SET last_viewed = '".$this->now()."', pageviews = pageviews + 1 WHERE postid = '$id'"); - } else { - $result = $wpdb->query("INSERT INTO $table (postid, day, last_viewed) VALUES ('".$id."', '".$this->now()."', '".$this->now()."')" ); - } + $start = $this->microtime_float(); + $result = $wpdb->query("INSERT INTO {$table} (postid, day, last_viewed) VALUES ({$id}, '{$this->now()}', '{$this->now()}') ON DUPLICATE KEY UPDATE last_viewed = '{$this->now()}', pageviews = pageviews + 1;"); + $end = $this->microtime_float(); + $exec_time += round($end - $start, 6); + // update popularpostsdatacache table - $isincache = $wpdb->get_results("SELECT id FROM ".$table."cache WHERE id = '" . $id ."' AND day BETWEEN '".$this->curdate()." 00:00:00' AND '".$this->curdate()." 23:59:59';"); - if ($isincache) { - $result2 = $wpdb->query("UPDATE ".$table."cache SET pageviews = pageviews + 1, day = '".$this->now()."' WHERE id = '". $id . "' AND day BETWEEN '".$this->curdate()." 00:00:00' AND '".$this->curdate()." 23:59:59';"); - } else { - $result2 = $wpdb->query("INSERT INTO ".$table."cache (id, day) VALUES ('".$id."', '".$this->now()."')"); - } + $start = $this->microtime_float(); + + $result2 = $wpdb->query("INSERT INTO {$table}cache (id, day, day_no_time) VALUES ({$id}, '{$this->now()}', '{$this->curdate()}') ON DUPLICATE KEY UPDATE pageviews = pageviews + 1, day = '{$this->now()}', day_no_time = '{$this->curdate()}';"); - if (($result == 1) && ($result2 == 1)) { - die("OK"); + $exec_time += round($end - $start, 6); + + if ($result && $result2) { + die("OK. Execution time: " . $exec_time . " seconds"); } else { die($wpdb->print_error); - } + } + } + + // Updates popular posts data table on post/page view + // Since 2.3.0 + function wpp_update($content) { + if ( (is_single() || is_page()) && !is_user_logged_in() && !is_front_page() ) { + + global $wpdb, $wp_query; + + $wpdb->show_errors(); + + $id = $wp_query->post->ID; // get post ID + $table = $wpdb->prefix . 'popularpostsdata'; + + // update popularpostsdata table + + + $result = $wpdb->query("INSERT INTO {$table} (postid, day, last_viewed) VALUES ({$id}, '{$this->now()}', '{$this->now()}') ON DUPLICATE KEY UPDATE last_viewed = '{$this->now()}', pageviews = pageviews + 1;"); + + $result2 = $wpdb->query("INSERT INTO {$table}cache (id, day, day_no_time) VALUES ({$id}, '{$this->now()}', '{$this->curdate()}') ON DUPLICATE KEY UPDATE pageviews = pageviews + 1, day = '{$this->now()}', day_no_time = '{$this->curdate()}';"); + + + echo "INSERT INTO {$table} (postid, day, last_viewed) VALUES ({$id}, '{$this->now()}', '{$this->now()}') ON DUPLICATE KEY UPDATE last_viewed = '{$this->now()}', pageviews = pageviews + 1;" . "<br />"; + + echo "INSERT INTO {$table}cache (id, day, day_no_time) VALUES ({$id}, '{$this->now()}', '{$this->curdate()}') ON DUPLICATE KEY UPDATE pageviews = pageviews + 1, day = '{$this->now()}', day_no_time = '{$this->curdate()}';" . "<br />"; + + if (!$result || !$result2) { + die($wpdb->print_error); + } + + } + return $content; } // clears Wordpress Popular Posts' data @@ -442,6 +541,9 @@ if ( !class_exists('WordpressPopularPosts') ) { // database install function wpp_install() { global $wpdb; + + $wpdb->show_errors(); + $sql = ""; $charset_collate = ""; @@ -455,42 +557,144 @@ if ( !class_exists('WordpressPopularPosts') ) { // does popularpostsdata table exists? if ( $wpdb->get_var("SHOW TABLES LIKE '$table'") != $table ) { // fresh setup - // create tables popularpostsdata and popularpostsdatacache - $sql = "CREATE TABLE " . $table . " ( UNIQUE KEY id (postid), postid int(10) NOT NULL, day datetime NOT NULL default '0000-00-00 00:00:00', last_viewed datetime NOT NULL default '0000-00-00 00:00:00', pageviews int(10) default 1 ) $charset_collate; CREATE TABLE " . $table ."cache ( UNIQUE KEY id (id, day), id int(10) NOT NULL, day datetime NOT NULL default '0000-00-00 00:00:00', pageviews int(10) default 1 ) $charset_collate;"; + $sql = "CREATE TABLE " . $table . " ( UNIQUE KEY id (postid), postid int(10) NOT NULL, day datetime NOT NULL default '0000-00-00 00:00:00', last_viewed datetime NOT NULL default '0000-00-00 00:00:00', pageviews int(10) default 1 ) $charset_collate; CREATE TABLE " . $table ."cache ( UNIQUE KEY compositeID (id, day_no_time), id int(10) NOT NULL, day datetime NOT NULL default '0000-00-00 00:00:00', day_no_time date NOT NULL default '0000-00-00', pageviews int(10) default 1 ) $charset_collate;"; } else { + + // check if cahe table is missing $cache = $table . "cache"; - if ( $wpdb->get_var("SHOW TABLES LIKE '$cache'") != $cache ) { - // someone is upgrading from version 1.5.x - $sql = "CREATE TABLE " . $table ."cache ( UNIQUE KEY id (id, day), id int(10) NOT NULL, day datetime NOT NULL, pageviews int(10) default 1 ) $charset_collate;"; - } - $dateField = $wpdb->get_results("SHOW FIELDS FROM " . $table ."cache", ARRAY_A); - if ($dateField[1]['Type'] != 'datetime') $wpdb->query("ALTER TABLE ". $table ."cache CHANGE day day datetime NOT NULL default '0000-00-00 00:00:00';"); + if ( $wpdb->get_var("SHOW TABLES LIKE '$cache'") != $cache ) { + $sql = "CREATE TABLE $cache ( UNIQUE KEY compositeID (id, day_no_time), id int(10) NOT NULL, day datetime NOT NULL default '0000-00-00 00:00:00', day_no_time date NOT NULL default '0000-00-00', pageviews int(10) default 1 ) $charset_collate;"; + } else { // check if any column is missing + + // get table columns + $cacheFields = $wpdb->get_results("SHOW FIELDS FROM $cache", ARRAY_A); + + $alter_day = true; + $add_daynotime = true; + + foreach ($cacheFields as $column) { + // check if day column is type datetime + if ($column['Field'] == 'day') { + if ($column['Type'] == 'datetime') { + $alter_day = false; + } + } + + // check if day_no_time field exists + if ($column['Field'] == 'day_no_time') { + $add_daynotime = false; + } + } + + if ($alter_day) { // day column is not datimetime, so change it + $wpdb->query("ALTER TABLE $cache CHANGE day day datetime NOT NULL default '0000-00-00 00:00:00';"); + } + + if ($add_daynotime) { // day_no_time column is missing, add it + $wpdb->query("ALTER TABLE $cache ADD day_no_time date NOT NULL default '0000-00-00';"); + $wpdb->query("UPDATE $cache SET day_no_time = day;"); + } + + $cacheIndex = $wpdb->get_results("SHOW INDEX FROM $cache", ARRAY_A); + if ($cacheIndex[0]['Key_name'] == "id") { // if index is id-day change to id-day_no_time + $wpdb->query("ALTER TABLE $cache DROP INDEX id, ADD UNIQUE KEY compositeID (id, day_no_time);"); + } + + /* + ALTER TABLE wp_popularpostsdatacache DROP INDEX id, ADD UNIQUE KEY compositeID (id, day_no_time); + */ + + } } dbDelta($sql); } - // prints ajax script to theme's header - function wpp_print_ajax() { - // let's add jQuery - wp_print_scripts('jquery'); + // Checks for stuff that needs updating on plugin reactivation + // Since 2.3.1 + function wpp_upgrade() { + + global $wpdb; + + $wpdb->show_errors(); + + $sql = ""; + $charset_collate = ""; + + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + + if ( ! empty($wpdb->charset) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; + + // set table name + $data = $wpdb->prefix . "popularpostsdata"; + $cache = $data . "cache"; + + // if the cache table is missing, create it + if ( $wpdb->get_var("SHOW TABLES LIKE '$cache'") != $cache ) { + $sql = "CREATE TABLE $cache ( UNIQUE KEY compositeID (id, day_no_time), id int(10) NOT NULL, day datetime NOT NULL default '0000-00-00 00:00:00', day_no_time date NOT NULL default '0000-00-00', pageviews int(10) default 1 ) $charset_collate;"; + } else { // check if any column is missing + + // get table columns + $cacheFields = $wpdb->get_results("SHOW FIELDS FROM $cache", ARRAY_A); + + $alter_day = true; + $add_daynotime = true; + + foreach ($cacheFields as $column) { + // check if day column is type datetime + if ($column['Field'] == 'day') { + if ($column['Type'] == 'datetime') { + $alter_day = false; + } + } + + // check if day_no_time field exists + if ($column['Field'] == 'day_no_time') { + $add_daynotime = false; + } + } + + if ($alter_day) { // day column is not datimetime, so change it + $wpdb->query("ALTER TABLE $cache CHANGE day day datetime NOT NULL default '0000-00-00 00:00:00';"); + } + + if ($add_daynotime) { // day_no_time column is missing, add it + $wpdb->query("ALTER TABLE $cache ADD day_no_time date NOT NULL default '0000-00-00';"); + $wpdb->query("UPDATE $cache SET day_no_time = day;"); + } - // create security token - $nonce = wp_create_nonce('wpp-token'); + $cacheIndex = $wpdb->get_results("SHOW INDEX FROM $cache", ARRAY_A); + if ($cacheIndex[0]['Key_name'] == "id") { // if index is id-day change to id-day_no_time + $wpdb->query("ALTER TABLE $cache DROP INDEX id, ADD UNIQUE KEY compositeID (id, day_no_time);"); + } + } - // get current post's ID - global $wp_query; - wp_reset_query(); + dbDelta($sql); + } + + // prints ajax script to theme's header + function wpp_print_ajax() { // if we're on a page or post, load the script - if ( (is_single() || is_page()) && !is_user_logged_in() ) { + if ( (is_single() || is_page()) && !is_user_logged_in() && !is_front_page() ) { + // let's add jQuery + wp_print_scripts('jquery'); + + // create security token + $nonce = wp_create_nonce('wpp-token'); + + // get current post's ID + global $wp_query; + wp_reset_query(); + $id = $wp_query->post->ID; ?> <!-- Wordpress Popular Posts v<?php echo $this->version; ?> --> -<script type="text/javascript" charset="utf-8"> +<script type="text/javascript"> /* <![CDATA[ */ - jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', {action: 'wpp_update', token: '<?php echo $nonce; ?>', id: <?php echo $id; ?>}); + jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', {action: 'wpp_update', token: '<?php echo $nonce; ?>', id: <?php echo $id; ?>}, function(data){/*alert(data);*/}); /* ]]> */ </script> <!-- End Wordpress Popular Posts v<?php echo $this->version; ?> --> @@ -499,269 +703,441 @@ if ( !class_exists('WordpressPopularPosts') ) { } // prints popular posts - function get_popular_posts($instance, $echo = true) { + function get_popular_posts($instance, $return = false) { + + // set default values + $defaults = array( + 'title' => __('Popular Posts', 'wordpress-popular-posts'), + 'limit' => 10, + 'range' => 'daily', + 'order_by' => 'comments', + 'post_type' => 'post,page', + 'author' => '', + 'cat' => '', + 'shorten_title' => array( + 'active' => false, + 'length' => 25, + 'keep_format' => false + ), + 'post-excerpt' => array( + 'active' => false, + 'length' => 55 + ), + 'thumbnail' => array( + 'active' => false, + 'width' => 15, + 'height' => 15 + ), + 'rating' => false, + 'stats_tag' => array( + 'comment_count' => true, + 'views' => false, + 'author' => false, + 'date' => array( + 'active' => false, + 'format' => 'F j, Y' + ) + ), + 'markup' => array( + 'custom_html' => false, + 'wpp-start' => '<ul>', + 'wpp-end' => '</ul>', + 'post-start' => '<li>', + 'post-end' => '</li>', + 'title-start' => '<h2>', + 'title-end' => '</h2>', + 'pattern' => array( + 'active' => false, + 'form' => '{image} {title}: {summary} {stats}' + ) + ) + ); + + // update instance's default options + $instance = wp_parse_args( (array) $instance, $defaults ); global $wpdb; $table = $wpdb->prefix . "popularpostsdata"; - - if ( $instance['pages'] ) { - $nopages = ''; - } else { - $nopages = "AND $wpdb->posts.post_type = 'post'"; - } - switch( $instance['range'] ) { - case 'all': - $range = "post_date_gmt < '".gmdate("Y-m-d H:i:s")."'"; - break; - case 'yesterday': - $range = $table."cache.day >= '".gmdate("Y-m-d")."' - INTERVAL 1 DAY"; - break; - case 'daily': - //$range = $table."cache.day = ".$this->curdate(); - $range = $table."cache.day >= '".$this->now()."' - INTERVAL 1 DAY"; - break; - case 'weekly': - $range = $table."cache.day >= '".gmdate("Y-m-d")."' - INTERVAL 7 DAY"; - break; - case 'monthly': - $range = $table."cache.day >= '".gmdate("Y-m-d")."' - INTERVAL 30 DAY"; - break; - default: - $range = "post_date_gmt < '".gmdate("Y-m-d H:i:s")."'"; - break; + $fields = ""; + $join = ""; + $where = ""; + $having = ""; + $orderby = ""; + $cat = (is_category()) ? get_query_var('cat') : ''; + $content = ""; + + if ($instance['range'] == "all") { // data - all + + // views + if ($instance['order_by'] == "views" || $instance['order_by'] == "avg" || $instance['stats_tag']['views']) { + $join .= " LEFT JOIN {$table} v ON p.ID = v.postid "; + + if ( $instance['order_by'] == "avg" ) { + $fields .= ", ( IFNULL(v.pageviews, 0)/(IF ( DATEDIFF('".$this->now()."', MIN(v.day)) > 0, DATEDIFF('".$this->now()."', MIN(v.day)), 1) )) AS 'avg_views' "; + } else { + $fields .= ", IFNULL(v.pageviews, 0) AS 'pageviews' "; + } + } + + // comments + if ($instance['order_by'] == "comments" || $instance['stats_tag']['comment_count']) { + $fields .= ", p.comment_count AS 'comment_count' "; + } + + } else if ($instance['range'] == "yesterday" || $instance['range'] == "daily") { // data - last 24 hours + + // views + if ($instance['order_by'] == "views" || $instance['order_by'] == "avg" || $instance['stats_tag']['views']) { + $join .= " LEFT JOIN (SELECT id, SUM(pageviews) AS 'pageviews', day FROM (SELECT id, pageviews, day FROM {$table}cache WHERE day > DATE_SUB('".$this->now()."', INTERVAL 1 DAY) ORDER BY day) sv GROUP BY id) v ON p.ID = v.id "; + + $fields .= ", IFNULL(v.pageviews, 0) AS 'pageviews' "; + } + + // comments + if ($instance['order_by'] == "comments" || $instance['stats_tag']['comment_count']) { + $fields .= ", IFNULL(c.comment_count, 0) AS 'comment_count' "; + $join .= " LEFT JOIN (SELECT comment_post_ID, COUNT(comment_post_ID) AS 'comment_count' FROM $wpdb->comments WHERE comment_approved = 1 AND comment_date > DATE_SUB('".$this->now()."', INTERVAL 1 DAY) GROUP BY comment_post_ID ORDER BY comment_date DESC) c ON p.ID = c.comment_post_ID "; + } + + } else if ($instance['range'] == "weekly") { // data - last 7 days + + // views + if ($instance['order_by'] == "views" || $instance['order_by'] == "avg" || $instance['stats_tag']['views']) { + $join .= " LEFT JOIN (SELECT id, SUM(pageviews) AS 'pageviews', day FROM (SELECT id, pageviews, day FROM {$table}cache WHERE day > DATE_SUB('".$this->now()."', INTERVAL 1 WEEK) ORDER BY day) sv GROUP BY id) v ON p.ID = v.id "; + + if ( $instance['order_by'] == "avg" ) { + $fields .= ", ( IFNULL(v.pageviews, 0)/(IF ( DATEDIFF('".$this->now()."', MIN(v.day)) > 0, DATEDIFF('".$this->now()."', MIN(v.day)), 1) )) AS 'avg_views' "; + } else { + $fields .= ", IFNULL(v.pageviews, 0) AS 'pageviews' "; + } + } + + // comments + if ($instance['order_by'] == "comments" || $instance['stats_tag']['comment_count']) { + $fields .= ", IFNULL(c.comment_count, 0) AS 'comment_count' "; + $join .= " LEFT JOIN (SELECT comment_post_ID, COUNT(comment_post_ID) AS 'comment_count' FROM $wpdb->comments WHERE comment_approved = 1 AND comment_date > DATE_SUB('".$this->now()."', INTERVAL 1 WEEK) GROUP BY comment_post_ID ORDER BY comment_date DESC) c ON p.ID = c.comment_post_ID "; + } + + } else if ($instance['range'] == "monthly") { // data - last 30 days + + // views + if ($instance['order_by'] == "views" || $instance['order_by'] == "avg" || $instance['stats_tag']['views']) { + $join .= " LEFT JOIN (SELECT id, SUM(pageviews) AS 'pageviews', day FROM (SELECT id, pageviews, day FROM {$table}cache WHERE day > DATE_SUB('".$this->now()."', INTERVAL 1 MONTH) ORDER BY day) sv GROUP BY id) v ON p.ID = v.id "; + + if ( $instance['order_by'] == "avg" ) { + $fields .= ", ( IFNULL(v.pageviews, 0)/(IF ( DATEDIFF('".$this->now()."', MIN(v.day)) > 0, DATEDIFF('".$this->now()."', MIN(v.day)), 1) )) AS 'avg_views' "; + } else { + $fields .= ", IFNULL(v.pageviews, 0) AS 'pageviews' "; + } + } + + // comments + if ($instance['order_by'] == "comments" || $instance['stats_tag']['comment_count']) { + $fields .= ", IFNULL(c.comment_count, 0) AS 'comment_count' "; + $join .= " LEFT JOIN (SELECT comment_post_ID, COUNT(comment_post_ID) AS 'comment_count' FROM $wpdb->comments WHERE comment_approved = 1 AND comment_date > DATE_SUB('".$this->now()."', INTERVAL 1 MONTH) GROUP BY comment_post_ID ORDER BY comment_date DESC) c ON p.ID = c.comment_post_ID "; + } + } // sorting options switch( $instance['order_by'] ) { case 'comments': - $sortby = 'comment_count'; + if ($instance['range'] == "all") { + $where .= " AND p.comment_count > 0 "; + $orderby = 'p.comment_count'; + } else { + $where .= " AND c.comment_count > 0 "; + $orderby = 'c.comment_count'; + } break; + case 'views': - $sortby = 'pageviews'; + $where .= " AND v.pageviews > 0 "; + $orderby = 'v.pageviews'; break; + case 'avg': - $sortby = 'avg_views'; + if ($instance['range'] == "yesterday" || $instance['range'] == "daily") { + $where .= " AND v.pageviews > 0 "; + $orderby = 'v.pageviews'; + } else { + $having = " HAVING avg_views > 0.0000 "; + $orderby = 'avg_views'; + } + break; + default: - $sortby = 'comment_count'; + $orderby = 'comment_count'; break; } - // dynamic query fields - $fields = ', '; - if ( $instance['stats_tag']['views'] || ($sortby != 'comment_count') ) { - - if ( $sortby == 'avg_views' ) { - if ( $instance['range'] == 'all') { - $fields .= "(".$table.".pageviews / (IF ( DATEDIFF('".$this->now()."', $wpdb->posts.post_date_gmt) > 0, DATEDIFF('".$this->now()."', $wpdb->posts.post_date_gmt), 1) )) AS 'avg_views' "; - } else { - $fields .= "(SUM(".$table."cache.pageviews)/(IF ( DATEDIFF('".$this->now()."', MIN(".$table."cache.day)) > 0, DATEDIFF('".$this->now()."', MIN(".$table."cache.day)), 1) )) AS 'avg_views' "; - } - } else { - //$fields .= "(SUM(".$table."cache.pageviews)) AS 'pageviews' "; - if ( $instance['range'] == 'all') { - $fields .= "$table.pageviews AS 'pageviews' "; - } else { - $fields .= "(SUM(".$table."cache.pageviews)) AS 'pageviews' "; - } + // post filters + // * post types - based on code seen at https://github.com/williamsba/WordPress-Popular-Posts-with-Custom-Post-Type-Support + $post_types = explode(",", $instance['post_type']); + $i = 0; + $len = count($post_types); + $sql_post_types = ""; + + if ($len > 1) { // we are getting posts from more that one ctp + foreach ( $post_types as $post_type ) { + $sql_post_types .= "'" .$post_type. "'"; + + if ($i != $len - 1) $sql_post_types .= ","; + + $i++; } + + $where .= " AND p.post_type IN({$sql_post_types}) "; + } else if ($len == 1) { // post from one ctp only + $where .= " AND p.post_type = '".$instance['post_type']."' "; } - if ( $instance['stats_tag']['comment_count'] ) { - if ( $fields != ', ' ) { - $fields .= ", $wpdb->posts.comment_count AS 'comment_count' "; - } else { - $fields .= "$wpdb->posts.comment_count AS 'comment_count' "; + // * categories + if ( !empty($instance['cat']) ) { + $cat_ids = explode(",", $instance['cat']); + $in = array(); + $out = array(); + $not_in = ""; + + usort($cat_ids, array(&$this, 'sorter')); + + for ($i=0; $i < count($cat_ids); $i++) { + if ($cat_ids[$i] >= 0) $in[] = $cat_ids[$i]; + if ($cat_ids[$i] < 0) $out[] = $cat_ids[$i]; } - } - - if ( $instance['stats_tag']['author'] ) { - if ( $fields != ', ' ) { - $fields .= ", (SELECT $wpdb->users.display_name FROM $wpdb->users WHERE $wpdb->users.ID = $wpdb->posts.post_author ) AS 'display_name'"; - } else { - $fields .= "(SELECT $wpdb->users.display_name FROM $wpdb->users WHERE $wpdb->users.ID = $wpdb->posts.post_author ) AS 'display_name'"; + + $in_cats = implode(",", $in); + $out_cats = implode(",", $out); + $out_cats = preg_replace( '|[^0-9,]|', '', $out_cats ); + + if ($in_cats != "" && $out_cats == "") { // get posts from from given cats only + $where .= " AND p.ID IN ( + SELECT object_id + FROM $wpdb->term_relationships AS r + JOIN $wpdb->term_taxonomy AS x ON x.term_taxonomy_id = r.term_taxonomy_id + JOIN $wpdb->terms AS t ON t.term_id = x.term_id + WHERE x.taxonomy = 'category' AND t.term_id IN($in_cats) + ) "; + } else if ($in_cats == "" && $out_cats != "") { // exclude posts from given cats only + $where .= " AND p.ID NOT IN ( + SELECT object_id + FROM $wpdb->term_relationships AS r + JOIN $wpdb->term_taxonomy AS x ON x.term_taxonomy_id = r.term_taxonomy_id + JOIN $wpdb->terms AS t ON t.term_id = x.term_id + WHERE x.taxonomy = 'category' AND t.term_id IN($out_cats) + ) "; + } else { // mixed, and possibly a heavy load on the DB + $where .= " AND p.ID IN ( + SELECT object_id + FROM $wpdb->term_relationships AS r + JOIN $wpdb->term_taxonomy AS x ON x.term_taxonomy_id = r.term_taxonomy_id + JOIN $wpdb->terms AS t ON t.term_id = x.term_id + WHERE x.taxonomy = 'category' AND t.term_id IN($in_cats) + ) AND p.ID NOT IN ( + SELECT object_id + FROM $wpdb->term_relationships AS r + JOIN $wpdb->term_taxonomy AS x ON x.term_taxonomy_id = r.term_taxonomy_id + JOIN $wpdb->terms AS t ON t.term_id = x.term_id + WHERE x.taxonomy = 'category' AND t.term_id IN($out_cats) + ) "; } } - if ( $instance['stats_tag']['date']['active'] ) { - if ( $fields != ', ' ) { - $fields .= ", $wpdb->posts.post_date_gmt AS 'date_gmt'"; - } else { - $fields .= "$wpdb->posts.post_date_gmt AS 'date_gmt'"; - } - } - - if (strlen($fields) == 2) $fields = ''; - $force_pv = ""; - - if ( $instance['range'] == 'all') { - $join = "LEFT JOIN $table ON $wpdb->posts.ID = $table.postid"; - $force_pv = "AND ".$table.".pageviews > 0 "; - } else { - $join = "RIGHT JOIN ".$table."cache ON $wpdb->posts.ID = ".$table."cache.id"; - } - - // Category excluding snippet suggested by user almergabor at http://wordpress.org/support/topic/plugin-wordpress-popular-posts-exclude-and-include-categories?replies=2#post-2464701 - // Thanks, almergabor! - if ( $instance['exclude-cats']['active'] && !empty($instance['exclude-cats']['cats']) ) { - $exclude = " AND $wpdb->posts.ID NOT IN ( - SELECT object_id - FROM $wpdb->term_relationships AS r - JOIN $wpdb->term_taxonomy AS x ON x.term_taxonomy_id = r.term_taxonomy_id - JOIN $wpdb->terms AS t ON t.term_id = x.term_id - WHERE x.taxonomy = 'category' AND t.term_id IN(".$instance['exclude-cats']['cats'].") - ) "; - - } else { - $exclude = ""; + // * authors + if ( !empty($instance['author']) ) { + $authors = explode(",", $instance['author']); + $len = count($authors); + + if ($len > 1) { // we are getting posts from more that one author + $where .= " AND p.post_author IN(".$instance['author'].") "; + } else if ($len == 1) { // post from one author only + $where .= " AND p.post_author = '".$instance['author']."' "; + } } - $mostpopular = $wpdb->get_results("SELECT $wpdb->posts.ID, $wpdb->posts.post_title $fields FROM $wpdb->posts $join WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_password = '' AND $range $force_pv $nopages $exclude GROUP BY $wpdb->posts.ID ORDER BY $sortby DESC LIMIT " . $instance['limit'] . ""); + $query = "SELECT p.ID AS 'id', p.post_title AS 'title', p.post_date AS 'date', p.post_author AS 'uid' {$fields} FROM {$wpdb->posts} p {$join} WHERE p.post_status = 'publish' AND p.post_password = '' {$where} GROUP BY p.ID {$having} ORDER BY {$orderby} DESC LIMIT " . $instance['limit'] . ";"; - $content = ''; - - //echo "SELECT $wpdb->posts.ID, $wpdb->posts.post_title $fields FROM $wpdb->posts $join WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_password = '' AND $range $force_pv $nopages $exclude GROUP BY $wpdb->posts.ID ORDER BY $sortby DESC LIMIT " . $instance['limit']; + //echo $query; + //return $content; + + $mostpopular = $wpdb->get_results($query); - if ( !is_array($mostpopular) || empty($mostpopular) ) { + if ( !is_array($mostpopular) || empty($mostpopular) ) { // no posts to show $content .= "<p>".__('Sorry. No data so far.', 'wordpress-popular-posts')."</p>"."\n"; - } else { + } else { // list posts + + // THUMBNAIL SOURCE + $user_def_settings = array( + 'stats' => array( + 'order_by' => 'comments', + 'limit' => 10 + ), + 'tools' => array( + 'ajax' => false, + 'css' => true, + 'stylesheet' => true, + 'thumbnail' => array( + 'source' => 'featured', + 'field' => '' + ) + ) + ); + $this->user_ops = get_option('wpp_settings_config'); + + if (!$this->user_ops || empty($this->user_ops)) { + add_option('wpp_settings_config', $user_def_settings); + $this->user_ops = $user_def_settings; + } + + // HTML wrapper if ($instance['markup']['custom_html']) { $content .= htmlspecialchars_decode($instance['markup']['wpp-start'], ENT_QUOTES) ."\n"; } else { + $content .= "<!-- Wordpress Popular Posts Plugin v". $this->version ." [Widget] [".$instance['range']."]". (($instance['markup']['custom_html']) ? ' [custom]' : ' [regular]') ." -->"."\n"; $content .= "<ul>" . "\n"; } - foreach ($mostpopular as $wppost) { - - $post_stats = ""; + // posts array + $posts_data = array(); + + foreach($mostpopular as $p) { $stats = ""; $thumb = ""; - $the_ID = $wppost->ID; + $title = ""; + $title_sub = ""; + $permalink = get_permalink( $p->id ); + $author = ($instance['stats_tag']['author']) ? get_the_author_meta('display_name', $p->uid) : ""; + $date = date_i18n( $instance['stats_tag']['date']['format'], strtotime($p->date) ); + $pageviews = ($instance['order_by'] == "views" || $instance['order_by'] == "avg" || $instance['stats_tag']['views']) ? (($instance['order_by'] == "views" || $instance['order_by'] == "comments") ? number_format($p->pageviews) : ( ($instance['range'] == "yesterday" || $instance['range'] == "daily") ? number_format($p->pageviews) : number_format($p->avg_views, 2)) ) : 0; + $comments = ($instance['order_by'] == "comments" || $instance['stats_tag']['comment_count']) ? $p->comment_count : 0; + $excerpt = ""; + $rating = ""; $data = array(); - // get post title - /* qTranslate integration check */ - ($this->qTrans) ? $tit = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($wppost->post_title) : $tit = $wppost->post_title; + // TITLE + $title = ($this->qTrans) ? qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($p->title) : $p->title; + $title = strip_tags($title); + $title_sub = strip_tags($title); - $tit = ($this->magicquotes) ? stripslashes($tit) : $tit; - //$title_attr = htmlentities($tit, ENT_QUOTES, $this->charset); - - $title_attr = apply_filters('the_title', $tit); - - if ( $instance['shorten_title']['active'] && (strlen($tit) > $instance['shorten_title']['length'])) { - $tit = mb_substr($tit, 0, $instance['shorten_title']['length'], $this->charset) . "..."; + if ( $instance['shorten_title']['active'] && (strlen($title) > $instance['shorten_title']['length'])) { + $title_sub = mb_substr($title, 0, $instance['shorten_title']['length'], $this->charset) . "..."; } - //$tit = htmlentities($tit, ENT_QUOTES, $this->charset); - $tit = apply_filters('the_title', $tit); + $title = apply_filters('the_title', $title); + $title_sub = apply_filters('the_title', $title_sub); - // get post excerpt + // EXCERPT if ( $instance['post-excerpt']['active'] ) { if ($instance['markup']['pattern']['active']) { - $post_content = "<span class=\"wpp-excerpt\">" . $this->get_summary($the_ID, $instance) . "</span>"; + $excerpt = $this->get_summary($p->id, $instance); } else { - $post_content = ": <span class=\"wpp-excerpt\">" . $this->get_summary($the_ID, $instance) . "...</span>"; + $excerpt = ": <span class=\"wpp-excerpt\">" . $this->get_summary($p->id, $instance) . "...</span>"; } - } else { - $post_content = ""; } - // build stats tag - if ( $instance['stats_tag']['comment_count'] ) { - $comment_count = (int) $wppost->comment_count; - $post_stats .= "<span class=\"wpp-comments\">" . $comment_count . " " . __(' comment(s)', 'wordpress-popular-posts') . "</span>"; + // STATS + // comments + if ( $instance['stats_tag']['comment_count'] ) { + $stats .= "<span class=\"wpp-comments\">{$comments} " . __('comment(s)', 'wordpress-popular-posts') . "</span>"; } + // views if ( $instance['stats_tag']['views'] ) { - $views_text = __(' view(s)', 'wordpress-popular-posts'); - if ($instance['order_by'] == 'views') { - $pageviews = (int) $wppost->pageviews; - } else if ($instance['order_by'] == 'avg') { - //$pageviews = ceil($wppost->avg_views); - $pageviews = round($wppost->avg_views, 2); - if ($instance['range'] != 'daily') $views_text = __(' view(s) per day', 'wordpress-popular-posts'); - } else { - $pageviews = (int) $wppost->pageviews; - } + $views_text = ' ' . __('view(s)', 'wordpress-popular-posts'); - if ($post_stats != "") { - $post_stats .= " | <span class=\"wpp-views\">$pageviews $views_text</span>"; - } else { - $post_stats .= "<span class=\"wpp-views\">$pageviews $views_text</span>"; - } - } - if ( $instance['stats_tag']['author'] ) { - if ($post_stats != "") { - $post_stats .= " | ".__('by', 'wordpress-popular-posts')." <span class=\"wpp-author\">".$wppost->display_name."</span>"; - } else { - $post_stats .= __('by', 'wordpress-popular-posts')." <span class=\"wpp-author\">".$wppost->display_name."</span>"; + if ($instance['order_by'] == 'avg') { + if ($instance['range'] != 'daily') $views_text = ' ' . __('view(s) per day', 'wordpress-popular-posts'); } + + $stats .= ($stats == "") ? "<span class=\"wpp-views\">{$pageviews} {$views_text}</span>" : " | <span class=\"wpp-views\">{$pageviews} {$views_text}</span>"; } - if ( $instance['stats_tag']['date']['active'] ) { - if ($post_stats != "") { - $post_stats .= " | <span class=\"wpp-date\">".__('posted on', 'wordpress-popular-posts')." ".date_i18n($instance['stats_tag']['date']['format'], strtotime($wppost->date_gmt))."</span>"; - } else { - $post_stats .= "<span class=\"wpp-date\">".__('posted on', 'wordpress-popular-posts')." ".date_i18n($instance['stats_tag']['date']['format'], strtotime($wppost->date_gmt))."</span>"; - } + //author + if ( $instance['stats_tag']['author'] ) { + $display_name = get_the_author_meta('display_name', $p->uid); + $stats .= ($stats == "") ? "<span class=\"wpp-author\">" . __('by', 'wordpress-popular-posts')." {$display_name}</span>" : " | <span class=\"wpp-author\">" . __('by', 'wordpress-popular-posts') ." {$display_name}</span>"; } - - if (!empty($post_stats)) { - $stats = ' <span class="post-stats">' . $post_stats . '</span> '; + // date + if ( $instance['stats_tag']['date']['active'] ) { + $stats .= ($stats == "") ? "<span class=\"wpp-date\">" . __('posted on', 'wordpress-popular-posts')." {$date}</span>" : " | <span class=\"wpp-date\">" . __('posted on', 'wordpress-popular-posts') ." {$date}</span>"; } - // get thumbnail + // POST THUMBNAIL if ($instance['thumbnail']['active'] && $this->thumb) { $tbWidth = $instance['thumbnail']['width']; $tbHeight = $instance['thumbnail']['height']; - if (!function_exists('get_the_post_thumbnail')) { // if the Featured Image is not active, show default thumbnail - $thumb = "<a href=\"".get_permalink($the_ID)."\" class=\"wppnothumb\" title=\"". $title_attr ."\"><img src=\"". $this->default_thumbnail . "\" alt=\"".$title_attr."\" border=\"0\" class=\"wpp-thumbnail\" width=\"".$tbWidth."\" height=\"".$tbHeight."\" "."/></a>"; - } else { - if (has_post_thumbnail( $the_ID )) { // if the post has a thumbnail, get it - $thumb = "<a href=\"".get_permalink($the_ID)."\" title=\"". $title_attr ."\">" . get_the_post_thumbnail($the_ID, array($tbWidth, $tbHeight), array('class' => 'wpp-thumbnail', 'alt' => $title_attr, 'title' => $title_attr) ) . "</a>"; - } else { // try to generate a post thumbnail from first image attached to post. If it fails, use default thumbnail - $thumb = "<a href=\"".get_permalink($the_ID)."\" title=\"". $title_attr ."\">" . $this->generate_post_thumbnail($the_ID, array($tbWidth, $tbHeight), array('class' => 'wpp-thumbnail', 'alt' => $title_attr, 'title' => $title_attr) ) ."</a>"; + $thumb = "<a href=\"". $permalink ."\" class=\"wpp-thumbnail\" title=\"{$title}\">"; + + if ($this->user_ops['tools']['thumbnail']['source'] == "featured") { // get Featured Image + if (function_exists('has_post_thumbnail') && has_post_thumbnail( $p->id )) { + $path = $this->get_img($p->id, "featured"); + + if ($path) { + $thumb .= "<img src=\"". $this->pluginDir ."/timthumb.php?src={$path}&h={$tbHeight}&w={$tbWidth}\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" alt=\"{$title}\" border=\"0\" class=\"wpp-thumbnail wpp_fi\" />"; + } else { + $thumb .= "<img src=\"". $this->default_thumbnail ."\" alt=\"{$title}\" border=\"0\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" class=\"wpp-thumbnail wpp_fi_def\" />"; + } + } else { + $thumb .= "<img src=\"". $this->default_thumbnail ."\" alt=\"{$title}\" border=\"0\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" class=\"wpp-thumbnail wpp_fi_def\" />"; + } + } else if ($this->user_ops['tools']['thumbnail']['source'] == "first_image") { // get first image on post + $path = $this->get_img($p->id, "first_image"); + + if ($path) { + $thumb .= "<img src=\"". $this->pluginDir ."/timthumb.php?src={$path}&h={$tbHeight}&w={$tbWidth}\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" alt=\"{$title}\" border=\"0\" class=\"wpp-thumbnail wpp_fp\" />"; + } else { + $thumb .= "<img src=\"". $this->default_thumbnail ."\" alt=\"{$title}\" border=\"0\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" class=\"wpp-thumbnail wpp_fp_def\" />"; + } + } else if ($this->user_ops['tools']['thumbnail']['source'] == "custom_field") { // get image from custom field + $path = get_post_meta($p->id, $this->user_ops['tools']['thumbnail']['field'], true); + + if ($path != "") { + $thumb .= "<img src=\"{$path}\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" alt=\"{$title}\" border=\"0\" class=\"wpp-thumbnail wpp_cf\" />"; + } else { + $thumb .= "<img src=\"". $this->default_thumbnail ."\" alt=\"{$title}\" border=\"0\" width=\"{$tbWidth}\" height=\"{$tbHeight}\" class=\"wpp-thumbnail wpp_cf_def\" />"; } } - } - - // get rating - if ($instance['rating'] && $this->postRating) { - $rating = '<span class="wpp-rating">'.the_ratings_results($the_ID).'</span>'; - } else { - $rating = ''; + + $thumb .= "</a>"; } $data = array( - 'title' => '<a href="'.get_permalink($the_ID).'" title="'. $title_attr . '"><span class="wpp-post-title">'. $tit .'</span></a>', - 'summary' => $post_content, + 'title' => '<a href="'.$permalink.'" title="'.$title.'">'.$title_sub.'</a>', + 'summary' => $excerpt, 'stats' => $stats, 'img' => $thumb, - 'id' => $the_ID + 'id' => $p->id ); - // build custom layout - if ($instance['markup']['custom_html']) { + array_push($posts_data, $data); + + // PUTTING IT ALL TOGETHER + if ($instance['markup']['custom_html']) { // build custom layout if ($instance['markup']['pattern']['active']) { - $content .= htmlspecialchars_decode($instance['markup']['post-start'], ENT_QUOTES) . $this->format_content($instance['markup']['pattern']['form'], $data, $instance['rating']) . htmlspecialchars_decode($instance['markup']['post-end'], ENT_QUOTES) . "\n"; + $content .= htmlspecialchars_decode($instance['markup']['post-start'], ENT_QUOTES) . htmlspecialchars_decode($this->format_content($instance['markup']['pattern']['form'], $data, $instance['rating'])) . htmlspecialchars_decode($instance['markup']['post-end'], ENT_QUOTES) . "\n"; } else { - $content .= htmlspecialchars_decode($instance['markup']['post-start'], ENT_QUOTES) . $thumb . '<a href="'.get_permalink($the_ID).'" title="'. $title_attr .'"><span class="wpp-post-title">'. $tit .'</span></a>'.$post_content.' '. $stats . $rating . htmlspecialchars_decode($instance['markup']['post-end'], ENT_QUOTES) . "\n"; + $content .= htmlspecialchars_decode($instance['markup']['post-start'], ENT_QUOTES) . "{$thumb}<a href=\"{$permalink}\" title=\"{$title}\" class=\"wpp-post-title\">{$title_sub}</a> {$excerpt}{$stats}{$rating}" . htmlspecialchars_decode($instance['markup']['post-end'], ENT_QUOTES) . "\n"; } - } else { - $content .= '<li>'. $thumb .'<a href="'. get_permalink($the_ID) .'" title="'. $title_attr .'"><span class="wpp-post-title">'. $tit .'</span></a>'. $post_content .' '. $stats . $rating .'</li>' . "\n"; + } else { // build regular layout + $content .= "<li>{$thumb}<a href=\"{$permalink}\" title=\"{$title}\" class=\"wpp-post-title\">{$title_sub}</a> {$excerpt}<span class=\"post-stats\">{$stats}</span>{$rating}</li>" . "\n"; } - } + } + + //print_r($posts_data); + // END HTML wrapper if ($instance['markup']['custom_html']) { $content .= htmlspecialchars_decode($instance['markup']['wpp-end'], ENT_QUOTES) ."\n"; } else { $content .= "\n"."</ul>"."\n"; } - } - if ($echo) { echo "<noscript>" . $content . "</noscript>"; } else { return $content; } + //if ($echo) { echo "<noscript>" . $content . "</noscript>"; } else { return $content; } + if ($return) { return $posts_data; } else { return $content; } + } // builds posts' excerpt @@ -804,28 +1180,53 @@ if ( !class_exists('WordpressPopularPosts') ) { return $excerpt; } - // Generates a featured image from the first image attached to a post if found. - // Otherwise, returns default thumbnail - // Since 2.2.0 - function generate_post_thumbnail($id, $dimensions, $atts) { - // get post attachments - $attachments = get_children(array('post_parent' => $id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order')); + // gets the first image of post / page + function get_img($id = "", $source = "featured") { - // no images have been attached to the post, return default thumbnail - if ( !$attachments ) return "<img src=\"". $this->default_thumbnail . "\" alt=\"". $atts['alt'] ."\" border=\"0\" class=\"". $atts['class'] ."\" width=\"". $dimensions[0] ."\" height=\"". $dimensions[1] ."\" "."/>"; + if ( empty($id) || !is_numeric($id)) return false; - $count = count($attachments); - $first_attachment = array_shift($attachments); - $img = wp_get_attachment_image($first_attachment->ID); - - if (!empty($img)) { // found an image, use it as Featured Image - update_post_meta( $id, '_thumbnail_id', $first_attachment->ID ); - return get_the_post_thumbnail($id, $dimensions, $atts); - } else { // no images have been found, return default thumbnail - return "<img src=\"". $this->default_thumbnail . "\" alt=\"". $atts['alt'] ."\" border=\"0\" class=\"". $atts['class'] ."\" width=\"". $dimensions[0] ."\" height=\"". $dimensions[1] ."\" "."/>"; + if ($source == "featured") { + $thumbnail_id = get_post_thumbnail_id($id); + + if ($thumbnail_id) { + $thumbnail = wp_get_attachment_image_src($thumbnail_id, 'full'); + + if ($thumbnail) { + return $thumbnail[0]; + } + } + + return false; + } else if ($source == "first_image") { + // get post attachments + $attachments = get_children(array('post_parent' => $id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order')); + + // no image has been found + if ( !$attachments ) return false; + + $image = array_shift($attachments); + + return $image->guid; } + + } + + /* + // gets the first image of post / page + function get_img($id = "", $print = false) { + if ( empty($id) || !is_numeric($id) ) return false; + + // get post attachments + $attachments = get_children(array('post_parent' => $id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order')); + + // no image has been found + if ( !$attachments ) return false; + + $image = array_shift($attachments); + return $image->guid; } + */ // parses content structure defined by user function format_content ($string, $data = array(), $rating) { @@ -848,7 +1249,7 @@ if ( !class_exists('WordpressPopularPosts') ) { $params[$matches[0][$i]] = $data['summary']; continue; } - if (strtolower($matches[0][$i]) == "{image}") { + if (strtolower($matches[0][$i]) == "{image}" || strtolower($matches[0][$i]) == "{thumb}") { $params[$matches[0][$i]] = $data['img']; continue; } @@ -936,7 +1337,7 @@ if ( !class_exists('WordpressPopularPosts') ) { } //$truncate .= substr($line_matchings[2], 0, $left+$entities_length); $truncate .= mb_substr($line_matchings[2], 0, $left+$entities_length); - // maximum lenght is reached, so get off the loop + // maximum length is reached, so get off the loop break; } else { $truncate .= $line_matchings[2]; @@ -981,18 +1382,25 @@ if ( !class_exists('WordpressPopularPosts') ) { load_plugin_textdomain('wordpress-popular-posts', false, dirname(plugin_basename( __FILE__ ))); } - // insert Wordpress Popular Posts' stylesheet in theme's head section, just in case someone needs it + // insert Wordpress Popular Posts' stylesheet in theme's head section, just in case someone needs it function wpp_print_stylesheet() { - $css_path = (@file_exists(TEMPLATEPATH.'/wpp.css')) ? get_stylesheet_directory_uri().'/wpp.css' : plugin_dir_url( __FILE__ ).'style/wpp.css'; - echo "\n"."<!-- Wordpress Popular Posts v".$this->version." -->"."\n".'<link rel="stylesheet" href="'. $css_path .'" type="text/css" media="screen" />'."\n"."<!-- End Wordpress Popular Posts v".$this->version." -->"."\n"; + if (!is_admin()) { + if ( @file_exists(TEMPLATEPATH.'/wpp.css') ) { // user stored a custom wpp.css on theme's directory, so use it + $css_path = get_template_directory_uri() . "/wpp.css"; + } else { // no custom wpp.css, use plugin's instead + $css_path = plugins_url('style/wpp.css', __FILE__); + } + + wp_enqueue_style('wordpress-popular-posts', $css_path, false); + } } - // create Wordpress Popular Posts' maintenance page - function wpp_maintenance_page() { - require (dirname(__FILE__) . '/maintenance.php'); + // create Wordpress Popular Posts' admin page + function wpp_admin() { + require (dirname(__FILE__) . '/admin.php'); } - function add_wpp_maintenance_page() { - add_submenu_page( 'options-general.php', 'Wordpress Popular Posts', 'Wordpress Popular Posts', 'manage_options', 'wpp_maintenance_page', array(&$this, 'wpp_maintenance_page') ); + function add_wpp_admin() { + add_options_page('Wordpress Popular Posts', 'Wordpress Popular Posts', 'manage_options', 'wpp_admin', array(&$this, 'wpp_admin')); } // version update warning @@ -1015,21 +1423,23 @@ if ( !class_exists('WordpressPopularPosts') ) { remove_shortcode('wpp'); remove_shortcode('WPP'); - delete_option('wpp_ver'); + //delete_option('wpp_ver'); } // shortcode handler function wpp_shortcode($atts = NULL, $content = NULL) { + extract( shortcode_atts( array( 'header' => '', 'limit' => 10, 'range' => 'daily', 'order_by' => 'comments', - 'pages' => true, + 'post_type' => 'post,page', + 'cat' => '', + 'author' => '', 'title_length' => 0, 'excerpt_length' => 0, - 'excerpt_format' => 0, - 'cats_to_exclude' => '', + 'excerpt_format' => 0, 'thumbnail_width' => 0, 'thumbnail_height' => 0, 'thumbnail_selection' => 'wppgenerated', @@ -1052,14 +1462,16 @@ if ( !class_exists('WordpressPopularPosts') ) { // possible values for "Time Range" and "Order by" $range_values = array("yesterday", "daily", "weekly", "monthly", "all"); $order_by_values = array("comments", "views", "avg"); - $thumbnail_selector = array("wppgenerated", "usergenerated"); + $thumbnail_selector = array("wppgenerated", "usergenerated"); $shortcode_ops = array( 'title' => strip_tags($header), 'limit' => empty($limit) ? 10 : (is_numeric($limit)) ? (($limit > 0) ? $limit : 10) : 10, 'range' => (in_array($range, $range_values)) ? $range : 'daily', 'order_by' => (in_array($order_by, $order_by_values)) ? $order_by : 'comments', - 'pages' => empty($pages) || $pages == "false" ? false : true, + 'post_type' => empty($post_type) ? 'post,page' : $post_type, + 'cat' => preg_replace( '|[^0-9,-]|', '', $cat ), + 'author' => preg_replace( '|[^0-9,]|', '', $author ), 'shorten_title' => array( 'active' => empty($title_length) ? false : (is_numeric($title_length)) ? (($title_length > 0) ? true : false) : false, 'length' => empty($title_length) ? 0 : (is_numeric($title_length)) ? $title_length : 0 @@ -1068,11 +1480,7 @@ if ( !class_exists('WordpressPopularPosts') ) { 'active' => empty($excerpt_length) ? false : (is_numeric($excerpt_length)) ? (($excerpt_length > 0) ? true : false) : false, 'length' => empty($excerpt_length) ? 0 : (is_numeric($excerpt_length)) ? $excerpt_length : 0, 'keep_format' => empty($excerpt_format) ? false : (is_numeric($excerpt_format)) ? (($excerpt_format > 0) ? true : false) : false, - ), - 'exclude-cats' => array( - 'active' => empty($cats_to_exclude) ? false : (ctype_digit(str_replace(",", "", $cats_to_exclude))) ? true : false, - 'cats' => empty($cats_to_exclude) ? '' : (ctype_digit(str_replace(",", "", $cats_to_exclude))) ? $cats_to_exclude : '' - ), + ), 'thumbnail' => array( 'active' => empty($thumbnail_width) ? false : (is_numeric($thumbnail_width)) ? (($thumbnail_width > 0) ? true : false) : false, 'thumb_selection' => 'usergenerated', @@ -1104,18 +1512,15 @@ if ( !class_exists('WordpressPopularPosts') ) { ) ); - $shortcode_content = ""; - - $shortcode_content .= "<!-- Wordpress Popular Posts Plugin v". $this->version ." [SC] [".$shortcode_ops['range']."]". (($shortcode_ops['markup']['custom_html']) ? ' [custom]' : ' [regular]') ." -->"."\n"; - + $shortcode_content = "<!-- Wordpress Popular Posts Plugin v". $this->version ." [SC] [".$shortcode_ops['range']."]". (($shortcode_ops['markup']['custom_html']) ? ' [custom]' : ' [regular]') ." -->"."\n"; + // is there a title defined by user? if (!empty($header) && !empty($header_start) && !empty($header_end)) { - $shortcode_content .= $header_start . $header . $header_end; + $shortcode_content .= $header_start . apply_filters('widget_title', $header) . $header_end; } // print popular posts list - $shortcode_content .= $this->get_popular_posts($shortcode_ops, false); - + $shortcode_content .= $this->get_popular_posts($shortcode_ops); $shortcode_content .= "<!-- End Wordpress Popular Posts Plugin v". $this->version ." -->"."\n"; return $shortcode_content; @@ -1130,6 +1535,16 @@ if ( !class_exists('WordpressPopularPosts') ) { function wpp_stats_display() { require (dirname(__FILE__) . '/stats.php'); } + + // stats page + // Since 2.3.0 + function sorter($a, $b) { + if ($a > 0 && $b > 0) { + return $a - $b; + } else { + return $b - $a; + } + } } // create tables @@ -1164,13 +1579,25 @@ function wpp_get_views($id = NULL) { // gets popular posts // Since 2.0.3 function wpp_get_mostpopular($args = NULL) { + + $shortcode = '[wpp'; - if (is_null($args)) { - echo do_shortcode('[wpp]'); + if ( is_null( $args ) ) { + $shortcode .= ']'; } else { - $atts = trim(str_replace("&", " ", $args)); - echo do_shortcode('[wpp '.$atts.']'); + if( is_array( $args ) ){ + $atts = ''; + foreach( $args as $key => $arg ){ + $atts .= ' ' . $key . '="' . $arg . '"'; + } + } else { + $atts = trim( str_replace( "&", " ", $args ) ); + } + + $shortcode .= ' ' . $atts . ']'; } + + echo do_shortcode( $shortcode ); } // gets popular posts @@ -1184,10 +1611,13 @@ function get_mostpopular($args = NULL) { /** - * Wordpress Popular Posts 2.2.1 Changelog. + * Wordpress Popular Posts 2.3.2 Changelog. */ /* - = 2.2.1 = - * Quick update to fix error with All-time combined with views breaking the plugin. += 2.3.2 = +* The ability is enabling / disabling the Ajax Update has been removed. It introduced a random bug that doubled the views count of some posts / pages. Will be added back when a fix is ready. +* Fixed a bug preventing the cat parameter from excluding categories (widget was not affected by this). +* FAQ section (Settings / Wordpress Popular Posts / FAQ) updated. +* Added french translation. (Thanks, Le Raconteur!) */ \ No newline at end of file diff --git a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.po b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.po index 2fe91e46345feaa5fe9f90bf70669956c3ee4a15..76549e759b39b0c92b48ccf403e13f0d9a8ab088 100644 --- a/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.po +++ b/wp-content/plugins/wordpress-popular-post/wordpress-popular-posts.po @@ -2,675 +2,801 @@ msgid "" msgstr "" "Project-Id-Version: Wordpress Popular Posts\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-02 11:05-0430\n" +"POT-Creation-Date: 2012-08-31 11:31-0430\n" "PO-Revision-Date: \n" "Last-Translator: Hector Cabrera <me@cabrerahector.com>\n" "Language-Team: Héctor Cabrera <admin@rauru.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: English\n" -"X-Poedit-Country: VENEZUELA\n" +"Language: en_VE\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: .\n" -#: maintenance.php:58 +#: admin.php:33 +#: admin.php:44 +#: admin.php:50 +#: admin.php:57 +msgid "Settings saved." +msgstr "" + +#: admin.php:38 +msgid "Please provide the name of your custom field." +msgstr "" + +#: admin.php:247 msgid "This operation will delete all entries from Wordpress Popular Posts' cache table and cannot be undone." msgstr "" -#: maintenance.php:58 -#: maintenance.php:66 +#: admin.php:247 +#: admin.php:255 msgid "Do you want to continue?" msgstr "" -#: maintenance.php:66 +#: admin.php:255 msgid "This operation will delete all stored info from Wordpress Popular Posts' data tables and cannot be undone." msgstr "" -#: maintenance.php:78 -msgid "Whoa! What just happened in here?!" +#: admin.php:269 +msgid "Stats" +msgstr "" + +#: admin.php:270 +msgid "FAQ" +msgstr "" + +#: admin.php:271 +msgid "Tools" +msgstr "" + +#: admin.php:275 +msgid "Click on each tab to see what are the most popular entries on your blog today, this week, last 30 days or all time since Wordpress Popular Posts was installed." +msgstr "" + +#: admin.php:281 +msgid "Order by comments" +msgstr "" + +#: admin.php:282 +msgid "Order by views" +msgstr "" + +#: admin.php:283 +msgid "Order by avg. daily views" +msgstr "" + +#: admin.php:285 +msgid "Limit" +msgstr "" + +#: admin.php:287 +#: admin.php:667 +#: admin.php:683 +#: admin.php:700 +msgid "Apply" +msgstr "" + +#: admin.php:293 +#: wordpress-popular-posts.php:307 +msgid "Last 24 hours" +msgstr "" + +#: admin.php:294 +#: wordpress-popular-posts.php:308 +msgid "Last 7 days" msgstr "" -#: maintenance.php:79 -msgid "Previous users of Wordpress Popular Posts will remember that earlier versions of my plugin used to display a Settings page over here. However, from version 2.0 and on things will be slightly different." +#: admin.php:295 +#: wordpress-popular-posts.php:309 +msgid "Last 30 days" msgstr "" -#: maintenance.php:80 -msgid "Wordpress Popular Posts has gone multi-widget so now you'll be able to install multiple instances of my plugin on your sidebars, each with its own unique settings! Because of that, having a General Settings page to handle all instances is simply not a good idea. Fear not, my friend, since you still can set each instance's configuration via" +#: admin.php:296 +#: wordpress-popular-posts.php:310 +msgid "All-time" msgstr "" -#: maintenance.php:80 -msgid "Widgets page" +#: admin.php:317 +msgid "Frequently Asked Questions" msgstr "" -#: maintenance.php:84 -msgid "Help" +#: admin.php:321 +msgid "What does \"Title\" do?" msgstr "" -#: maintenance.php:85 -msgid "What does \"Include pages\" do?" +#: admin.php:323 +msgid "It allows you to show a heading for your most popular posts listing. If left empty, no heading will be displayed at all." msgstr "" -#: maintenance.php:87 -msgid "If checked, Wordpress Popular Posts will also list the most viewed pages on your blog. Enabled by default." +#: admin.php:326 +msgid "What is Time Range for?" msgstr "" -#: maintenance.php:89 +#: admin.php:328 +msgid "It will tell Wordpress Popular Posts to retrieve all posts with most views / comments within the selected time range." +msgstr "" + +#: admin.php:331 +msgid "What is \"Sort post by\" for?" +msgstr "" + +#: admin.php:333 +msgid "It allows you to decide whether to order your popular posts listing by total views, comments, or average views per day." +msgstr "" + +#: admin.php:336 msgid "What does \"Display post rating\" do?" msgstr "" -#: maintenance.php:91 -msgid "If checked, Wordpress Popular Posts will show how your readers are rating your most popular posts. This feature requires having WP-PostRatings plugin installed and enabled on your blog for it to work. Disabled by default." +#: admin.php:338 +msgid "If checked, Wordpress Popular Posts will show how your readers are rating your most popular posts. This feature requires having WP-PostRatings plugin installed and enabled on your blog for it to work." msgstr "" -#: maintenance.php:93 -msgid "What does \"Shorten title output\" do?" +#: admin.php:341 +msgid "What does \"Shorten title\" do?" msgstr "" -#: maintenance.php:95 -msgid "If checked, all posts titles will be shortened to \"n\" characters. A new \"Shorten title to\" option will appear so you can set it to whatever you like. Disabled by default." +#: admin.php:343 +msgid "If checked, all posts titles will be shortened to \"n\" characters. A new \"Shorten title to\" option will appear so you can set it to whatever you like." msgstr "" -#: maintenance.php:97 +#: admin.php:346 msgid "What does \"Display post excerpt\" do?" msgstr "" -#: maintenance.php:99 -msgid "If checked, Wordpress Popular Posts will also include a small extract of your posts in the list. Similarly to the previous option, you will be able to decide how long the post excerpt should be. Disabled by default." +#: admin.php:348 +msgid "If checked, Wordpress Popular Posts will also include a small extract of your posts in the list. Similarly to the previous option, you will be able to decide how long the post excerpt should be." msgstr "" -#: maintenance.php:101 +#: admin.php:351 msgid "What does \"Keep text format and links\" do?" msgstr "" -#: maintenance.php:103 +#: admin.php:353 msgid "If checked, and if the Post Excerpt feature is enabled, Wordpress Popular Posts will keep the styling tags (eg. bold, italic, etc) that were found in the excerpt. Hyperlinks will remain intact, too." msgstr "" -#: maintenance.php:105 -msgid "What does \"Exclude Categories\" do?" +#: admin.php:356 +msgid "What is \"Post type\" for?" +msgstr "" + +#: admin.php:358 +msgid "This filter allows you to decide which post types to show on the listing. By default, it will retrieve only posts and pages (which should be fine for most cases)." +msgstr "" + +#: admin.php:361 +msgid "What is \"Category(ies) ID(s)\" for?" +msgstr "" + +#: admin.php:363 +msgid "This filter allows you to select which categories should be included or excluded from the listing. A negative sign in front of the category ID number will exclude posts belonging to it from the list, for example. You can specify more than one ID with a comma separated list." +msgstr "" + +#: admin.php:366 +msgid "What is \"Author(s) ID(s)\" for?" msgstr "" -#: maintenance.php:107 -msgid "If checked, Wordpress Popular Posts will exclude from the listing all those entries that belong to specific categories. When entering more than one Category ID, you need to use commas to separate them (eg. 1,5,12 - no spaces!). Disabled by default." +#: admin.php:368 +msgid "Just like the Category filter, this one lets you filter posts by author ID. You can specify more than one ID with a comma separated list." msgstr "" -#: maintenance.php:109 +#: admin.php:371 msgid "What does \"Display post thumbnail\" do?" msgstr "" -#: maintenance.php:111 -msgid "If checked, Wordpress Popular Posts will attempt to use the thumbnail you have selected for each post on the Post Edit Screen under Featured Image (this also requires including add_theme_support(\"post-thumbnails\") to your theme's functions.php file). Disabled by default." +#: admin.php:373 +msgid "If checked, Wordpress Popular Posts will attempt to retrieve the thumbnail of each post. You can set up the source of the thumbnail via Settings - Wordpress Popular Posts - Tools." msgstr "" -#: maintenance.php:113 +#: admin.php:376 msgid "What does \"Display comment count\" do?" msgstr "" -#: maintenance.php:115 -msgid "If checked, Wordpress Popular Posts will display how many comments each popular post has got until now. Enabled by default." +#: admin.php:378 +msgid "If checked, Wordpress Popular Posts will display how many comments each popular post has got in the selected Time Range." msgstr "" -#: maintenance.php:117 +#: admin.php:381 msgid "What does \"Display views\" do?" msgstr "" -#: maintenance.php:119 -msgid "If checked, Wordpress Popular Posts will show how many pageviews a single post has gotten so far since this plugin was installed. Disabled by default." +#: admin.php:383 +msgid "If checked, Wordpress Popular Posts will show how many pageviews a single post has gotten in the selected Time Range." msgstr "" -#: maintenance.php:121 +#: admin.php:386 msgid "What does \"Display author\" do?" msgstr "" -#: maintenance.php:123 -msgid "If checked, Wordpress Popular Posts will display the name of the author of each entry listed. Disabled by default." +#: admin.php:388 +msgid "If checked, Wordpress Popular Posts will display the name of the author of each entry listed." msgstr "" -#: maintenance.php:125 +#: admin.php:391 msgid "What does \"Display date\" do?" msgstr "" -#: maintenance.php:127 -msgid "If checked, Wordpress Popular Posts will display the date when each popular posts was published. Disabled by default." +#: admin.php:393 +msgid "If checked, Wordpress Popular Posts will display the date when each popular posts was published." msgstr "" -#: maintenance.php:129 +#: admin.php:396 msgid "What does \"Use custom HTML Markup\" do?" msgstr "" -#: maintenance.php:131 -msgid "If checked, you will be able to customize the HTML markup of your popular posts listing. For example, you can decide whether to wrap your posts in an unordered list, an ordered list, a div, etc. If you know xHTML/CSS, this is for you! Disabled by default." +#: admin.php:398 +msgid "If checked, you will be able to customize the HTML markup of your popular posts listing. For example, you can decide whether to wrap your posts in an unordered list, an ordered list, a div, etc. If you know xHTML/CSS, this is for you!" msgstr "" -#: maintenance.php:133 +#: admin.php:401 msgid "What does \"Use content formatting tags\" do?" msgstr "" -#: maintenance.php:135 -msgid "If checked, you can decide the order of the items displayed on each entry. For example, setting it to \"{title}: {summary}\" (without the quotes) would display \"Post title: excerpt of the post here\". Available tags: {image}, {title}, {summary}, {stats} and {rating}. Disabled by default." +#: admin.php:403 +msgid "If checked, you can decide the order of the items displayed on each entry. For example, setting it to \"{title}: {summary}\" (without the quotes) would display \"Post title: excerpt of the post here\". Available tags: {image}, {title}, {summary}, {stats} and {rating}." msgstr "" -#: maintenance.php:137 +#: admin.php:406 msgid "What are \"Template Tags\"?" msgstr "" -#: maintenance.php:139 -msgid "Template Tags are simply php functions that allow you to perform certain actions. For example, Wordpress Popular Posts currently supports two different template tags: get_mostpopular() and wpp_get_views()." +#: admin.php:408 +msgid "Template Tags are simply php functions that allow you to perform certain actions. For example, Wordpress Popular Posts currently supports two different template tags: wpp_get_mostpopular() and wpp_get_views()." msgstr "" -#: maintenance.php:141 +#: admin.php:411 msgid "What are the template tags that Wordpress Popular Posts supports?" msgstr "" -#: maintenance.php:143 -msgid "The following are the template tags supported by Wordpress Popular Posts:" +#: admin.php:413 +msgid "The following are the template tags supported by Wordpress Popular Posts" msgstr "" -#: maintenance.php:146 +#: admin.php:417 msgid "Template tag" msgstr "" -#: maintenance.php:147 -#: maintenance.php:175 +#: admin.php:418 +#: admin.php:451 msgid "What it does " msgstr "" -#: maintenance.php:148 +#: admin.php:419 msgid "Parameters" msgstr "" -#: maintenance.php:149 -#: maintenance.php:178 +#: admin.php:420 +#: admin.php:454 msgid "Example" msgstr "" -#: maintenance.php:153 -msgid "Similar to the widget functionality, this tag retrieves the most popular posts on your blog. While it can be customized via parameters, these are not needed for it to work." +#: admin.php:426 +msgid "Similar to the widget functionality, this tag retrieves the most popular posts on your blog. This function also accepts parameters so you can customize your popular listing, but these are not required." msgstr "" -#: maintenance.php:154 -msgid "Please refer to \"What attributes does Wordpress Popular Posts shortcode [wpp] have?\"" +#: admin.php:427 +msgid "Please refer to \"List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode\"." msgstr "" -#: maintenance.php:159 -msgid "Displays the number of views of a single post. Post ID required, or it will return false." +#: admin.php:432 +msgid "Displays the number of views of a single post. Post ID is required or it will return false." msgstr "" -#: maintenance.php:160 +#: admin.php:433 msgid "Post ID" msgstr "" -#: maintenance.php:165 +#: admin.php:440 msgid "What are \"shortcodes\"?" msgstr "" -#: maintenance.php:167 -msgid "Shortcodes are hooks that allow us to call a php function by simply typing something like [shortcode]. With Wordpress Popular Posts, the shortcode [wpp] will let you insert a list of the most popular posts in posts content and pages too! For more information about shortcodes, please visit" +#: admin.php:442 +msgid "Shortcodes are similar to BB Codes, these allow us to call a php function by simply typing something like [shortcode]. With Wordpress Popular Posts, the shortcode [wpp] will let you insert a list of the most popular posts in posts content and pages too! For more information about shortcodes, please visit" msgstr "" -#: maintenance.php:169 -msgid "What attributes does Wordpress Popular Posts shortcode [wpp] have?" +#: admin.php:444 +msgid "List of parameters accepted by wpp_get_mostpopular() and the [wpp] shortcode" msgstr "" -#: maintenance.php:171 -msgid "There are a number of attributes Wordpress Popular Posts currently supports:" +#: admin.php:446 +msgid "These parameters can be used by both the template tag wpp_get_most_popular() and the shortcode [wpp]." msgstr "" -#: maintenance.php:174 -msgid "Attributes" +#: admin.php:450 +msgid "Parameter" msgstr "" -#: maintenance.php:176 +#: admin.php:452 msgid "Possible values" msgstr "" -#: maintenance.php:177 +#: admin.php:453 msgid "Defaults to" msgstr "" -#: maintenance.php:182 +#: admin.php:460 msgid "Sets a heading for the list" msgstr "" -#: maintenance.php:183 -#: maintenance.php:190 -#: maintenance.php:197 -#: maintenance.php:253 -#: maintenance.php:316 -#: maintenance.php:323 -#: maintenance.php:330 -#: maintenance.php:337 -#: maintenance.php:344 +#: admin.php:461 +#: admin.php:468 +#: admin.php:475 +#: admin.php:503 +#: admin.php:510 +#: admin.php:517 +#: admin.php:594 +#: admin.php:601 +#: admin.php:608 +#: admin.php:615 +#: admin.php:622 msgid "Text string" msgstr "" -#: maintenance.php:184 -#: wordpress-popular-posts.php:198 +#: admin.php:462 +#: wordpress-popular-posts.php:250 msgid "Popular Posts" msgstr "" -#: maintenance.php:189 +#: admin.php:467 msgid "Set the opening tag for the heading of the list" msgstr "" -#: maintenance.php:196 +#: admin.php:474 msgid "Set the closing tag for the heading of the list" msgstr "" -#: maintenance.php:203 +#: admin.php:481 msgid "Sets the maximum number of popular posts to be shown on the listing" msgstr "" -#: maintenance.php:204 -#: maintenance.php:232 -#: maintenance.php:239 -#: maintenance.php:260 -#: maintenance.php:267 +#: admin.php:482 +#: admin.php:524 +#: admin.php:531 +#: admin.php:545 +#: admin.php:552 msgid "Positive integer" msgstr "" -#: maintenance.php:210 +#: admin.php:488 msgid "Tells Wordpress Popular Posts to retrieve the most popular entries within the time range specified by you" msgstr "" -#: maintenance.php:217 +#: admin.php:495 msgid "Sets the sorting option of the popular posts" msgstr "" -#: maintenance.php:218 +#: admin.php:496 msgid "(for average views per day)" msgstr "" -#: maintenance.php:224 -msgid "Tells Wordpress Popular Posts whether to consider or not pages while building the popular list" +#: admin.php:502 +msgid "Defines the type of posts to show on the listing" msgstr "" -#: maintenance.php:231 -msgid "If set, Wordpress Popular Posts will shorten each post title to \"n\" characters whenever possible" +#: admin.php:509 +msgid "If set, Wordpress Popular Posts will retrieve all entries that belong to the specified category(ies) ID(s). If a minus sign is used, the category(ies) will be excluded instead." msgstr "" -#: maintenance.php:238 -msgid "If set, Wordpress Popular Posts will build and include an excerpt of \"n\" characters long from the content of each post listed as popular" +#: admin.php:511 +#: admin.php:518 +msgid "None" msgstr "" -#: maintenance.php:245 -msgid "If set, Wordpress Popular Posts will maintaing all styling tags (strong, italic, etc) and hyperlinks found in the excerpt" +#: admin.php:516 +msgid "If set, Wordpress Popular Posts will retrieve all entries created by specified author(s) ID(s)." msgstr "" -#: maintenance.php:252 -msgid "If set, Wordpress Popular Posts will exclude all entries that belong to the specified category(ies)." +#: admin.php:523 +msgid "If set, Wordpress Popular Posts will shorten each post title to \"n\" characters whenever possible" msgstr "" -#: maintenance.php:254 -msgid "None" +#: admin.php:530 +msgid "If set, Wordpress Popular Posts will build and include an excerpt of \"n\" characters long from the content of each post listed as popular" msgstr "" -#: maintenance.php:259 -msgid "If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the width for thumbnails" +#: admin.php:537 +msgid "If set, Wordpress Popular Posts will maintaing all styling tags (strong, italic, etc) and hyperlinks found in the excerpt" msgstr "" -#: maintenance.php:266 -msgid "If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the height for thumbnails" +#: admin.php:544 +msgid "If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the width for thumbnails" msgstr "" -#: maintenance.php:273 -msgid "Wordpress Popular Posts will use the thumbnails selected by you. *Requires enabling The Post Thumbnail feature on your theme*" +#: admin.php:551 +msgid "If set, and if your current server configuration allows it, you will be able to display thumbnails of your posts. This attribute sets the height for thumbnails" msgstr "" -#: maintenance.php:280 +#: admin.php:558 msgid "If set, and if the WP-PostRatings plugin is installed and enabled on your blog, Wordpress Popular Posts will show how your visitors are rating your entries" msgstr "" -#: maintenance.php:287 +#: admin.php:565 msgid "If set, Wordpress Popular Posts will show how many comments each popular post has got until now" msgstr "" -#: maintenance.php:294 +#: admin.php:572 msgid "If set, Wordpress Popular Posts will show how many views each popular post has got since it was installed" msgstr "" -#: maintenance.php:301 +#: admin.php:579 msgid "If set, Wordpress Popular Posts will show who published each popular post on the list" msgstr "" -#: maintenance.php:308 -msgid "If set, Wordpress Popular Posts will when each popular post on the list was published" +#: admin.php:586 +msgid "If set, Wordpress Popular Posts will display the date when each popular post on the list was published" msgstr "" -#: maintenance.php:315 +#: admin.php:593 msgid "Sets the date format" msgstr "" -#: maintenance.php:322 +#: admin.php:600 msgid "Sets the opening tag for the listing" msgstr "" -#: maintenance.php:329 +#: admin.php:607 msgid "Sets the closing tag for the listing" msgstr "" -#: maintenance.php:336 +#: admin.php:614 msgid "Sets the opening tag for each item on the list" msgstr "" -#: maintenance.php:343 +#: admin.php:621 msgid "Sets the closing tag for each item on the list" msgstr "" -#: maintenance.php:350 +#: admin.php:628 msgid "If set, this option will allow you to decide the order of the contents within each item on the list." msgstr "" -#: maintenance.php:357 +#: admin.php:635 msgid "If set, you can decide the order of each content inside a single item on the list. For example, setting it to \"{title}: {summary}\" would output something like \"Your Post Title: summary here\". This attribute requires do_pattern to be true." msgstr "" -#: maintenance.php:358 +#: admin.php:636 msgid "Available tags" msgstr "" -#: maintenance.php:367 -msgid "Maintenance Settings" +#: admin.php:651 +msgid "Here you will find a handy group of options to tweak Wordpress Popular Posts." msgstr "" -#: maintenance.php:368 -msgid "Wordpress Popular Posts keeps historical data of your most popular entries for up to 30 days. If for some reason you need to clear the cache table, or even both historical and cache tables, please use the buttons below to do so." +#: admin.php:653 +msgid "Thumbnail source" msgstr "" -#: maintenance.php:371 -msgid "Empty cache" +#: admin.php:654 +msgid "Tell Wordpress Popular Posts where it should get thumbnails from" msgstr "" -#: maintenance.php:372 -msgid "Use this button to manually clear entries from WPP cache only" +#: admin.php:659 +msgid "Featured image" msgstr "" -#: maintenance.php:378 -msgid "Clear all data" +#: admin.php:660 +msgid "First image on post" msgstr "" -#: maintenance.php:379 -msgid "Use this button to manually clear entries from all WPP data tables" +#: admin.php:661 +msgid "Custom field" msgstr "" -#: maintenance.php:387 -msgid "Do you like this plugin?" +#: admin.php:664 +msgid "Custom field name" msgstr "" -#: maintenance.php:387 -msgid "Rate Wordpress Popular Posts!" +#: admin.php:673 +msgid "Wordpress Popular Posts Stylesheet" msgstr "" -#: maintenance.php:387 -msgid "Rate it 5" +#: admin.php:674 +msgid "By default, the plugin includes a stylesheet called wpp.css which you can use to style your popular posts listing. If you wish to use your own stylesheet or do not want it to have it included in the header section of your site, use this." msgstr "" -#: maintenance.php:387 -msgid "on the official Plugin Directory!" +#: admin.php:679 +#: admin.php:696 +msgid "Enabled" msgstr "" -#: maintenance.php:388 -msgid "Do you love this plugin?" +#: admin.php:680 +#: admin.php:697 +msgid "Disabled" msgstr "" -#: maintenance.php:388 -#: maintenance.php:389 -msgid "Buy me a beer!" +#: admin.php:689 +msgid "Data tools" msgstr "" -#: maintenance.php:388 -msgid "Each donation motivates me to keep releasing free stuff for the Wordpress community!" +#: admin.php:691 +msgid "AJAX update. If you are using a caching plugin such as WP Super Cache, enabling this feature will keep the popular list from being cached." msgstr "" -#: stats.php:90 -msgid "Click on each tab to see what are the most popular entries on your blog today, this week, last 30 days or all time since Wordpress Popular Posts was installed." +#: admin.php:706 +msgid "Wordpress Popular Posts keeps historical data of your most popular entries for up to 30 days. If for some reason you need to clear the cache table, or even both historical and cache tables, please use the buttons below to do so." msgstr "" -#: stats.php:92 -msgid "Yesterday" +#: admin.php:707 +msgid "Empty cache" msgstr "" -#: stats.php:93 -msgid "Today" +#: admin.php:707 +msgid "Use this button to manually clear entries from WPP cache only" msgstr "" -#: stats.php:94 -msgid "Weekly" +#: admin.php:708 +msgid "Clear all data" msgstr "" -#: stats.php:95 -msgid "Monthly" +#: admin.php:708 +msgid "Use this button to manually clear entries from all WPP data tables" msgstr "" -#: stats.php:96 -#: wordpress-popular-posts.php:260 -msgid "All-time" +#: admin.php:714 +msgid "Do you like this plugin?" msgstr "" -#: wordpress-popular-posts.php:251 -msgid "Title:" +#: admin.php:714 +msgid "Rate Wordpress Popular Posts!" msgstr "" -#: wordpress-popular-posts.php:253 -msgid "Show up to:" +#: admin.php:714 +msgid "Rate it" msgstr "" -#: wordpress-popular-posts.php:254 -msgid "posts" +#: admin.php:714 +msgid "on the official Plugin Directory!" msgstr "" -#: wordpress-popular-posts.php:255 -msgid "Time Range:" +#: admin.php:715 +msgid "Do you love this plugin?" msgstr "" -#: wordpress-popular-posts.php:257 -msgid "Last 24 hours" +#: admin.php:715 +#: admin.php:716 +msgid "Buy me a beer!" msgstr "" -#: wordpress-popular-posts.php:258 -msgid "Last 7 days" +#: admin.php:715 +msgid "Each donation motivates me to keep releasing free stuff for the Wordpress community!" msgstr "" -#: wordpress-popular-posts.php:259 -msgid "Last 30 days" +#: wordpress-popular-posts.php:47 +msgid "The most Popular Posts on your blog." +msgstr "" + +#: wordpress-popular-posts.php:301 +msgid "Title:" +msgstr "" + +#: wordpress-popular-posts.php:301 +#: wordpress-popular-posts.php:303 +#: wordpress-popular-posts.php:305 +#: wordpress-popular-posts.php:313 +#: wordpress-popular-posts.php:324 +#: wordpress-popular-posts.php:326 +#: wordpress-popular-posts.php:330 +#: wordpress-popular-posts.php:334 +#: wordpress-popular-posts.php:343 +#: wordpress-popular-posts.php:355 +#: wordpress-popular-posts.php:367 +#: wordpress-popular-posts.php:368 +#: wordpress-popular-posts.php:369 +#: wordpress-popular-posts.php:370 +#: wordpress-popular-posts.php:385 +#: wordpress-popular-posts.php:396 +msgid "What is this?" +msgstr "" + +#: wordpress-popular-posts.php:303 +msgid "Show up to:" +msgstr "" + +#: wordpress-popular-posts.php:304 +msgid "posts" +msgstr "" + +#: wordpress-popular-posts.php:305 +msgid "Time Range:" msgstr "" -#: wordpress-popular-posts.php:263 +#: wordpress-popular-posts.php:313 msgid "Sort posts by:" msgstr "" -#: wordpress-popular-posts.php:265 +#: wordpress-popular-posts.php:315 msgid "Comments" msgstr "" -#: wordpress-popular-posts.php:266 +#: wordpress-popular-posts.php:316 msgid "Total views" msgstr "" -#: wordpress-popular-posts.php:267 +#: wordpress-popular-posts.php:317 msgid "Avg. daily views" msgstr "" -#: wordpress-popular-posts.php:270 -msgid "Include pages" +#: wordpress-popular-posts.php:322 +msgid "Posts settings" msgstr "" -#: wordpress-popular-posts.php:272 +#: wordpress-popular-posts.php:324 msgid "Display post rating" msgstr "" -#: wordpress-popular-posts.php:274 -msgid "Shorten title output" +#: wordpress-popular-posts.php:326 +msgid "Shorten title" msgstr "" -#: wordpress-popular-posts.php:276 +#: wordpress-popular-posts.php:328 msgid "Shorten title to" msgstr "" -#: wordpress-popular-posts.php:276 -#: wordpress-popular-posts.php:283 +#: wordpress-popular-posts.php:328 +#: wordpress-popular-posts.php:335 msgid "characters" msgstr "" -#: wordpress-popular-posts.php:278 +#: wordpress-popular-posts.php:330 msgid "Display post excerpt" msgstr "" -#: wordpress-popular-posts.php:281 +#: wordpress-popular-posts.php:333 msgid "Excerpt Properties" msgstr "" -#: wordpress-popular-posts.php:282 +#: wordpress-popular-posts.php:334 msgid "Keep text format and links" msgstr "" -#: wordpress-popular-posts.php:283 +#: wordpress-popular-posts.php:335 msgid "Excerpt length:" msgstr "" -#: wordpress-popular-posts.php:287 -msgid "Exclude categories" +#: wordpress-popular-posts.php:343 +msgid "Filters:" msgstr "" -#: wordpress-popular-posts.php:290 -msgid "Categories to exclude" +#: wordpress-popular-posts.php:344 +msgid "Post type(s):" msgstr "" -#: wordpress-popular-posts.php:291 -msgid "ID(s) (comma separated, no spaces):" +#: wordpress-popular-posts.php:346 +msgid "Category(ies) ID(s):" msgstr "" -#: wordpress-popular-posts.php:297 +#: wordpress-popular-posts.php:348 +msgid "Author(s) ID(s):" +msgstr "" + +#: wordpress-popular-posts.php:354 msgid "Thumbnail settings" msgstr "" -#: wordpress-popular-posts.php:298 +#: wordpress-popular-posts.php:355 msgid "Display post thumbnail" msgstr "" -#: wordpress-popular-posts.php:300 +#: wordpress-popular-posts.php:357 msgid "Width:" msgstr "" -#: wordpress-popular-posts.php:301 -#: wordpress-popular-posts.php:303 +#: wordpress-popular-posts.php:358 +#: wordpress-popular-posts.php:360 msgid "px" msgstr "" -#: wordpress-popular-posts.php:302 +#: wordpress-popular-posts.php:359 msgid "Height:" msgstr "" -#: wordpress-popular-posts.php:309 +#: wordpress-popular-posts.php:366 msgid "Stats Tag settings" msgstr "" -#: wordpress-popular-posts.php:310 +#: wordpress-popular-posts.php:367 msgid "Display comment count" msgstr "" -#: wordpress-popular-posts.php:311 +#: wordpress-popular-posts.php:368 msgid "Display views" msgstr "" -#: wordpress-popular-posts.php:312 +#: wordpress-popular-posts.php:369 msgid "Display author" msgstr "" -#: wordpress-popular-posts.php:313 +#: wordpress-popular-posts.php:370 msgid "Display date" msgstr "" -#: wordpress-popular-posts.php:316 +#: wordpress-popular-posts.php:373 msgid "Date Format" msgstr "" -#: wordpress-popular-posts.php:327 +#: wordpress-popular-posts.php:384 msgid "HTML Markup settings" msgstr "" -#: wordpress-popular-posts.php:328 +#: wordpress-popular-posts.php:385 msgid "Use custom HTML Markup" msgstr "" -#: wordpress-popular-posts.php:331 +#: wordpress-popular-posts.php:388 msgid "Before / after title:" msgstr "" -#: wordpress-popular-posts.php:333 +#: wordpress-popular-posts.php:390 msgid "Before / after Popular Posts:" msgstr "" -#: wordpress-popular-posts.php:335 +#: wordpress-popular-posts.php:392 msgid "Before / after each post:" msgstr "" -#: wordpress-popular-posts.php:339 +#: wordpress-popular-posts.php:396 msgid "Use content formatting tags" msgstr "" -#: wordpress-popular-posts.php:342 +#: wordpress-popular-posts.php:399 msgid "Content format:" msgstr "" -#: wordpress-popular-posts.php:424 +#: wordpress-popular-posts.php:505 msgid "Success! The cache table has been cleared!" msgstr "" -#: wordpress-popular-posts.php:426 +#: wordpress-popular-posts.php:507 msgid "Error: cache table does not exist." msgstr "" -#: wordpress-popular-posts.php:432 +#: wordpress-popular-posts.php:513 msgid "Success! All data have been cleared!" msgstr "" -#: wordpress-popular-posts.php:434 +#: wordpress-popular-posts.php:515 msgid "Error: one or both data tables are missing." msgstr "" -#: wordpress-popular-posts.php:437 +#: wordpress-popular-posts.php:518 msgid "Invalid action." msgstr "" -#: wordpress-popular-posts.php:440 +#: wordpress-popular-posts.php:521 msgid "Sorry, you do not have enough permissions to do this. Please contact the site administrator for support." msgstr "" -#: wordpress-popular-posts.php:643 +#: wordpress-popular-posts.php:852 msgid "Sorry. No data so far." msgstr "" -#: wordpress-popular-posts.php:690 -msgid " comment(s)" +#: wordpress-popular-posts.php:928 +msgid "comment(s)" msgstr "" -#: wordpress-popular-posts.php:693 -msgid " view(s)" +#: wordpress-popular-posts.php:932 +msgid "view(s)" msgstr "" -#: wordpress-popular-posts.php:699 -msgid " view(s) per day" +#: wordpress-popular-posts.php:935 +msgid "view(s) per day" msgstr "" -#: wordpress-popular-posts.php:712 -#: wordpress-popular-posts.php:714 +#: wordpress-popular-posts.php:943 msgid "by" msgstr "" -#: wordpress-popular-posts.php:719 -#: wordpress-popular-posts.php:721 +#: wordpress-popular-posts.php:947 msgid "posted on" msgstr "" -#: wordpress-popular-posts.php:1030 +#: wordpress-popular-posts.php:1292 msgid "Your Wordpress version is too old. Wordpress Popular Posts Plugin requires at least version 2.8 to function correctly. Please update your blog via Tools > Upgrade." msgstr "" -#: wordpress-popular-posts.php:1157 +#: wordpress-popular-posts.php:1416 msgid "Wordpress Popular Posts Stats" msgstr ""