PATH:
home
/
letacommog
/
autopropr01
/
wp-content
/
plugins
/
force-regenerate-thumbnails
<?php /* Plugin Name: Force Regenerate Thumbnails Plugin URI: http://pedroelsner.com/2012/08/forcando-a-atualizacao-de-thumbnails-no-wordpress Description: Delete and REALLY force the regenerate thumbnail. Version: 2.0.6 Author: Pedro Elsner Author URI: http://www.pedroelsner.com/ */ /* Bebug URL wp-admin/admin-ajax.php?action=regeneratethumbnail&id= */ /** * Force GD for Image handle (WordPress 3.5 or better) * Thanks (@nikcree) * * @since 1.5 */ $version = get_bloginfo('version'); if ($version >= 3.5) { function ms_image_editor_default_to_gd_fix( $editors ) { $gd_editor = 'WP_Image_Editor_GD'; $editors = array_diff( $editors, array( $gd_editor ) ); array_unshift( $editors, $gd_editor ); return $editors; } add_filter('wp_image_editors', 'ms_image_editor_default_to_gd_fix'); } /** * Force Regenerate Thumbnails * * @since 1.0 */ class ForceRegenerateThumbnails { /** * Register ID of management page * * @var * @since 1.0 */ var $menu_id; /** * User capability * * @access public * @since 1.0 */ public $capability; /** * Plugin initialization * * @access public * @since 1.0 */ function __construct() { load_plugin_textdomain('force-regenerate-thumbnails', false, '/force-regenerate-thumbnails/localization'); add_action('admin_menu', array(&$this, 'add_admin_menu')); add_action('admin_enqueue_scripts', array(&$this, 'admin_enqueues')); add_action('wp_ajax_regeneratethumbnail', array(&$this, 'ajax_process_image')); add_filter('media_row_actions', array(&$this, 'add_media_row_action'), 10, 2); add_action('admin_head-upload.php', array(&$this, 'add_bulk_actions_via_javascript')); add_action('admin_action_bulk_force_regenerate_thumbnails', array(&$this, 'bulk_action_handler')); add_action('admin_action_-1', array(&$this, 'bulk_action_handler')); // Allow people to change what capability is required to use this plugin $this->capability = apply_filters('regenerate_thumbs_cap', 'manage_options'); } /** * Register the management page * * @access public * @since 1.0 */ function add_admin_menu() { $this->menu_id = add_management_page(__('Force Regenerate Thumbnails', 'force-regenerate-thumbnails' ), __( 'Force Regenerate Thumbnails', 'force-regenerate-thumbnails' ), $this->capability, 'force-regenerate-thumbnails', array(&$this, 'force_regenerate_interface') ); } /** * Enqueue the needed Javascript and CSS * * @param string $hook_suffix * @access public * @since 1.0 */ function admin_enqueues($hook_suffix) { if ($hook_suffix != $this->menu_id) { return; } // WordPress 3.1 vs older version compatibility //if (wp_script_is('jquery-ui-widget', 'registered')) { // wp_enqueue_script('jquery-ui-progressbar', plugins_url('jquery-ui/jquery.ui.progressbar.min.js', __FILE__), array('jquery-ui-core', 'jquery-ui-widget'), '1.8.6'); //} else { // wp_enqueue_script('jquery-ui-progressbar', plugins_url('jquery-ui/jquery.ui.progressbar.min.1.7.2.js', __FILE__), array('jquery-ui-core'), '1.7.2'); //} wp_enqueue_script('jquery-ui-progressbar', plugins_url('jquery-ui/jquery.ui.progressbar.min.1.7.2.js', __FILE__), array('jquery-ui-core'), '1.7.2'); wp_enqueue_style('jquery-ui-regenthumbs', plugins_url('jquery-ui/redmond/jquery-ui-1.7.2.custom.css', __FILE__), array(), '1.7.2'); wp_enqueue_style('plugin-custom-style', plugins_url('style.css', __FILE__), array(), '2.0.1'); } /** * Add a "Force Regenerate Thumbnails" link to the media row actions * * @param array $actions * @param string $post * @return array * @access public * @since 1.0 */ function add_media_row_action($actions, $post) { if ('image/' != substr($post->post_mime_type, 0, 6) || !current_user_can($this->capability)) return $actions; $url = wp_nonce_url( admin_url( 'tools.php?page=force-regenerate-thumbnails&goback=1&ids=' . $post->ID ), 'force-regenerate-thumbnails' ); $actions['regenerate_thumbnails'] = '<a href="' . esc_url( $url ) . '" title="' . esc_attr( __( "Regenerate the thumbnails for this single image", 'force-regenerate-thumbnails' ) ) . '">' . __( 'Force Regenerate Thumbnails', 'force-regenerate-thumbnails' ) . '</a>'; return $actions; } /** * Add "Force Regenerate Thumbnails" to the Bulk Actions media dropdown * * @param array $actions Actions list * @return array * @access public * @since 1.0 */ function add_bulk_actions($actions) { $delete = false; if (!empty($actions['delete'])) { $delete = $actions['delete']; unset($actions['delete']); } $actions['bulk_force_regenerate_thumbnails'] = __('Force Regenerate Thumbnails', 'force-regenerate-thumbnails'); if ($delete) { $actions['delete'] = $delete; } return $actions; } /** * Add new items to the Bulk Actions using Javascript * * @access public * @since 1.0 */ function add_bulk_actions_via_javascript() { if (!current_user_can( $this->capability)) { return; } ?> <script type="text/javascript"> jQuery(document).ready(function($){ $('select[name^="action"] option:last-child').before('<option value="bulk_force_regenerate_thumbnails"><?php echo esc_attr(__('Force Regenerate Thumbnails', 'force-regenerate-thumbnails')); ?></option>'); }); </script> <?php } /** * Handles the bulk actions POST * * @access public * @since 1.0 */ function bulk_action_handler() { if (empty($_REQUEST['action']) || ('bulk_force_regenerate_thumbnails' != $_REQUEST['action'] && 'bulk_force_regenerate_thumbnails' != $_REQUEST['action2'])) { return; } if (empty($_REQUEST['media']) || ! is_array($_REQUEST['media'])) { return; } check_admin_referer('bulk-media'); $ids = implode(',', array_map('intval', $_REQUEST['media'])); wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('force-regenerate-thumbnails'), admin_url('tools.php?page=force-regenerate-thumbnails&goback=1&ids=' . $ids))); exit(); } /** * The user interface plus thumbnail regenerator * * @access public * @since 1.0 */ function force_regenerate_interface() { global $wpdb; ?> <div id="message" class="updated fade" style="display:none"></div> <div class="wrap regenthumbs"> <h2><?php _e('Force Regenerate Thumbnails', 'force-regenerate-thumbnails'); ?></h2> <?php // If the button was clicked if (!empty($_POST['force-regenerate-thumbnails'] ) || !empty($_REQUEST['ids'])) { // Capability check if (!current_user_can( $this->capability)) wp_die(__('Cheatin’ uh?')); // Form nonce check check_admin_referer('force-regenerate-thumbnails'); // Create the list of image IDs if (!empty($_REQUEST['ids'])) { $images = array_map('intval', explode(',', trim($_REQUEST['ids'], ','))); $ids = implode(',', $images); } else { // Directly querying the database is normally frowned upon, but all // of the API functions will return the full post objects which will // suck up lots of memory. This is best, just not as future proof. if (!$images = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' ORDER BY ID DESC")) { echo ' <p>' . sprintf(__("Unable to find any images. Are you sure <a href='%s'>some exist</a>?", 'force-regenerate-thumbnails'), admin_url('upload.php?post_mime_type=image')) . "</p></div>"; return; } // Generate the list of IDs $ids = array(); foreach ($images as $image) { $ids[] = $image->ID; } $ids = implode(',', $ids); } echo ' <p>' . __("Please be patient while the thumbnails are regenerated. You will be notified via this page when the regenerating is completed.", 'force-regenerate-thumbnails') . '</p>'; $count = count($images); $text_goback = (!empty($_GET['goback'])) ? sprintf(__('To go back to the previous page, <a href="%s">click here</a>.', 'force-regenerate-thumbnails'), 'javascript:history.go(-1)') : ''; $text_failures = sprintf(__('All done! %1$s image(s) were successfully resized in %2$s seconds and there were %3$s failure(s). To try regenerating the failed images again, <a href="%4$s">click here</a>. %5$s', 'force-regenerate-thumbnails'), "' + rt_successes + '", "' + rt_totaltime + '", "' + rt_errors + '", esc_url(wp_nonce_url(admin_url('tools.php?page=force-regenerate-thumbnails&goback=1'), 'force-regenerate-thumbnails') . '&ids=') . "' + rt_failedlist + '", $text_goback); $text_nofailures = sprintf(__('All done! %1$s image(s) were successfully resized in %2$s seconds and there were 0 failures. %3$s', 'force-regenerate-thumbnails'), "' + rt_successes + '", "' + rt_totaltime + '", $text_goback); ?> <noscript><p><em><?php _e('You must enable Javascript in order to proceed!', 'force-regenerate-thumbnails') ?></em></p></noscript> <div id="regenthumbs-bar" style="position:relative;height:25px;"> <div id="regenthumbs-bar-percent" style="position:absolute;left:50%;top:50%;width:300px;margin-left:-150px;height:25px;margin-top:-9px;font-weight:bold;text-align:center;"></div> </div> <p><input type="button" class="button hide-if-no-js" name="regenthumbs-stop" id="regenthumbs-stop" value="<?php _e('Abort Process', 'force-regenerate-thumbnails') ?>" /></p> <h3 class="title"><?php _e('Process Information', 'force-regenerate-thumbnails'); ?></h3> <p> <?php printf(__('Total: %s', 'force-regenerate-thumbnails'), $count); ?><br /> <?php printf(__('Success: %s', 'force-regenerate-thumbnails'), '<span id="regenthumbs-debug-successcount">0</span>'); ?><br /> <?php printf(__('Failure: %s', 'force-regenerate-thumbnails'), '<span id="regenthumbs-debug-failurecount">0</span>'); ?> </p> <ol id="regenthumbs-debuglist"> <li style="display:none"></li> </ol> <script type="text/javascript"> // <![CDATA[ jQuery(document).ready(function($){ var i; var rt_images = [<?php echo $ids; ?>]; var rt_total = rt_images.length; var rt_count = 1; var rt_percent = 0; var rt_successes = 0; var rt_errors = 0; var rt_failedlist = ''; var rt_resulttext = ''; var rt_timestart = new Date().getTime(); var rt_timeend = 0; var rt_totaltime = 0; var rt_continue = true; // Create the progress bar $("#regenthumbs-bar").progressbar(); $("#regenthumbs-bar-percent").html("0%"); // Stop button $("#regenthumbs-stop").click(function() { rt_continue = false; $('#regenthumbs-stop').val("<?php echo $this->esc_quotes(__('Stopping...', 'force-regenerate-thumbnails')); ?>"); }); // Clear out the empty list element that's there for HTML validation purposes $("#regenthumbs-debuglist li").remove(); // Called after each resize. Updates debug information and the progress bar. function RegenThumbsUpdateStatus(id, success, response) { $("#regenthumbs-bar").progressbar("value", (rt_count / rt_total) * 100); $("#regenthumbs-bar-percent").html(Math.round((rt_count / rt_total) * 1000) / 10 + "%"); rt_count = rt_count + 1; if (success) { rt_successes = rt_successes + 1; $("#regenthumbs-debug-successcount").html(rt_successes); $("#regenthumbs-debuglist").append("<li>" + response.success + "</li>"); } else { rt_errors = rt_errors + 1; rt_failedlist = rt_failedlist + ',' + id; $("#regenthumbs-debug-failurecount").html(rt_errors); $("#regenthumbs-debuglist").append("<li>" + response.error + "</li>"); } } // Called when all images have been processed. Shows the results and cleans up. function RegenThumbsFinishUp() { rt_timeend = new Date().getTime(); rt_totaltime = Math.round((rt_timeend - rt_timestart) / 1000); $('#regenthumbs-stop').hide(); if (rt_errors > 0) { rt_resulttext = '<?php echo $text_failures; ?>'; } else { rt_resulttext = '<?php echo $text_nofailures; ?>'; } $("#message").html("<p><strong>" + rt_resulttext + "</strong></p>"); $("#message").show(); } // Regenerate a specified image via AJAX function RegenThumbs(id) { $.ajax({ type: 'POST', cache: false, url: ajaxurl, data: { action: "regeneratethumbnail", id: id }, success: function(response) { //Catch unknown error if(response === null) { response = {}; response.success = false; response.error = 'Unknown error occured.'; } if (response.success) { RegenThumbsUpdateStatus(id, true, response); } else { RegenThumbsUpdateStatus(id, false, response); } if (rt_images.length && rt_continue) { RegenThumbs(rt_images.shift()); } else { RegenThumbsFinishUp(); } }, error: function(response) { RegenThumbsUpdateStatus(id, false, response); if (rt_images.length && rt_continue) { RegenThumbs(rt_images.shift()); } else { RegenThumbsFinishUp(); } } }); } RegenThumbs(rt_images.shift()); }); // ]]> </script> <?php } // No button click? Display the form. else { ?> <form method="post" action=""> <?php wp_nonce_field('force-regenerate-thumbnails') ?> <h3>All Thumbnails</h3> <p><?php printf(__("Pressing the follow button, you can regenerate thumbnails for all images that you have uploaded to your blog.", 'force-regenerate-thumbnails'), admin_url('options-media.php')); ?></p> <p> <noscript><p><em><?php _e('You must enable Javascript in order to proceed!', 'force-regenerate-thumbnails') ?></em></p></noscript> <input type="submit" class="button-primary hide-if-no-js" name="force-regenerate-thumbnails" id="force-regenerate-thumbnails" value="<?php _e('Regenerate All Thumbnails', 'force-regenerate-thumbnails') ?>" /> </p> </br> <h3>Specific Thumbnails</h3> <p><?php printf(__("You can regenerate all thumbnails for specific images from the <a href='%s'>Media</a> page. (WordPress 3.1+ only)", 'force-regenerate-thumbnails'), admin_url('upload.php')); ?></p> </form> <?php } // End if button ?> </div> <?php } /** * Process a single image ID (this is an AJAX handler) * * @access public * @since 1.0 */ function ajax_process_image() { // No timeout limit set_time_limit(0); // Don't break the JSON result error_reporting(0); $id = (int) $_REQUEST['id']; try { header('Content-type: application/json'); $image = get_post($id); if (is_null($image)) { throw new Exception(sprintf(__('Failed: %d is an invalid image ID.', 'force-regenerate-thumbnails'), $id)); } if ('attachment' != $image->post_type || 'image/' != substr($image->post_mime_type, 0, 6)) { throw new Exception(sprintf(__('Failed: %d is an invalid image ID.', 'force-regenerate-thumbnails'), $id)); } if (!current_user_can($this->capability)) { throw new Exception(__('Your user account does not have permission to regenerate images.', 'force-regenerate-thumbnails')); } /** * Fix for get_option('upload_path') * Thanks (@DavidLingren) * * @since 2.0.1 */ $upload_dir = wp_upload_dir(); // Get original image $image_fullpath = get_attached_file($image->ID); $debug_1 = $image_fullpath; $debug_2 = ''; $debug_3 = ''; $debug_4 = ''; // Can't get image path if (false === $image_fullpath || strlen($image_fullpath) == 0) { // Try get image path from url if ((strrpos($image->guid, $upload_dir['baseurl']) !== false)) { $image_fullpath = realpath($upload_dir['basedir'] . DIRECTORY_SEPARATOR . substr($image->guid, strlen($upload_dir['baseurl']), strlen($image->guid))); $debug_2 = $image_fullpath; if (realpath($image_fullpath) === false) { throw new Exception(sprintf(__('The originally uploaded image file cannot be found at "%s".', 'force-regenerate-thumbnails'), esc_html((string) $image_fullpath))); } } else { throw new Exception(__('The originally uploaded image file cannot be found.', 'force-regenerate-thumbnails')); } } // Image path incomplete if ((strrpos($image_fullpath, $upload_dir['basedir']) === false)) { $image_fullpath = $upload_dir['basedir'] . DIRECTORY_SEPARATOR . $image_fullpath; $debug_3 = $image_fullpath; } // Image don't exists if (!file_exists($image_fullpath) || realpath($image_fullpath) === false) { // Try get image path from url if ((strrpos($image->guid, $upload_dir['baseurl']) !== false)) { $image_fullpath = realpath($upload_dir['basedir'] . DIRECTORY_SEPARATOR . substr($image->guid, strlen($upload_dir['baseurl']), strlen($image->guid))); $debug_4 = $image_fullpath; if (realpath($image_fullpath) === false) { throw new Exception(sprintf(__('The originally uploaded image file cannot be found at "%s".', 'force-regenerate-thumbnails'), esc_html((string) $image_fullpath))); } } else { throw new Exception(sprintf(__('The originally uploaded image file cannot be found at "%s".', 'force-regenerate-thumbnails'), esc_html((string) $image_fullpath))); } } /** * Update META POST * Thanks (@norecipes) * * @since 2.0.2 */ update_attached_file($image->ID, $image_fullpath); // Results $thumb_deleted = array(); $thumb_error = array(); $thumb_regenerate = array(); // Hack to find thumbnail $file_info = pathinfo($image_fullpath); $file_info['filename'] .= '-'; /** * Try delete all thumbnails */ $files = array(); $path = opendir($file_info['dirname']); if ( false !== $path ) { while (false !== ($thumb = readdir($path))) { if (!(strrpos($thumb, $file_info['filename']) === false)) { $files[] = $thumb; } } closedir($path); sort($files); } foreach ($files as $thumb) { $thumb_fullpath = $file_info['dirname'] . DIRECTORY_SEPARATOR . $thumb; $thumb_info = pathinfo($thumb_fullpath); $valid_thumb = explode($file_info['filename'], $thumb_info['filename']); if ($valid_thumb[0] == "") { $dimension_thumb = explode('x', $valid_thumb[1]); if (count($dimension_thumb) == 2) { if (is_numeric($dimension_thumb[0]) && is_numeric($dimension_thumb[1])) { unlink($thumb_fullpath); if (!file_exists($thumb_fullpath)) { $thumb_deleted[] = sprintf("%sx%s", $dimension_thumb[0], $dimension_thumb[1]); } else { $thumb_error[] = sprintf("%sx%s", $dimension_thumb[0], $dimension_thumb[1]); } } } } } /** * Regenerate all thumbnails */ $metadata = wp_generate_attachment_metadata($image->ID, $image_fullpath); if (is_wp_error($metadata)) { throw new Exception($metadata->get_error_message()); } if (empty($metadata)) { throw new Exception(__('Unknown failure reason.', 'force-regenerate-thumbnails')); } wp_update_attachment_metadata($image->ID, $metadata); /** * Verify results (deleted, errors, success) */ $files = array(); $path = opendir($file_info['dirname']); if ( false !== $path ) { while (false !== ($thumb = readdir($path))) { if (!(strrpos($thumb, $file_info['filename']) === false)) { $files[] = $thumb; } } closedir($path); sort($files); } foreach ($files as $thumb) { $thumb_fullpath = $file_info['dirname'] . DIRECTORY_SEPARATOR . $thumb; $thumb_info = pathinfo($thumb_fullpath); $valid_thumb = explode($file_info['filename'], $thumb_info['filename']); if ($valid_thumb[0] == "") { $dimension_thumb = explode('x', $valid_thumb[1]); if (count($dimension_thumb) == 2) { if (is_numeric($dimension_thumb[0]) && is_numeric($dimension_thumb[1])) { $thumb_regenerate[] = sprintf("%sx%s", $dimension_thumb[0], $dimension_thumb[1]); } } } } // Remove success if has in error list foreach ($thumb_regenerate as $key => $regenerate) { if (in_array($regenerate, $thumb_error)) unset($thumb_regenerate[$key]); } // Remove deleted if has in success list foreach ($thumb_deleted as $key => $deleted) { if (in_array($deleted, $thumb_regenerate)) unset($thumb_deleted[$key]); } /** * Display results */ $message = sprintf(__('<b>"%s" (ID %s)</b>', 'force-regenerate-thumbnails'), esc_html(get_the_title($id)), $image->ID); $message .= "<br /><br />"; $message .= sprintf(__("<code>BaseDir: %s</code><br />", 'force-regenerate-thumbnails'), $upload_dir['basedir']); $message .= sprintf(__("<code>BaseUrl: %s</code><br />", 'force-regenerate-thumbnails'), $upload_dir['baseurl']); $message .= sprintf(__("<code>Image: %s</code><br />", 'force-regenerate-thumbnails'), $debug_1); if ($debug_2 != '') $message .= sprintf(__("<code>Image Debug 2: %s</code><br />", 'force-regenerate-thumbnails'), $debug_2); if ($debug_3 != '') $message .= sprintf(__("<code>Image Debug 3: %s</code><br />", 'force-regenerate-thumbnails'), $debug_3); if ($debug_4 != '') $message .= sprintf(__("<code>Image Debug 4: %s</code><br />", 'force-regenerate-thumbnails'), $debug_4); if (count($thumb_deleted) > 0) { $message .= sprintf(__('<br />Deleted: %s', 'force-regenerate-thumbnails'), implode(', ', $thumb_deleted)); } if (count($thumb_error) > 0) { $message .= sprintf(__('<br /><b><span style="color: #DD3D36;">Deleted error: %s</span></b>', 'force-regenerate-thumbnails'), implode(', ', $thumb_error)); $message .= sprintf(__('<br /><span style="color: #DD3D36;">Please, check the folder permission (chmod 777): %s</span>', 'force-regenerate-thumbnails'), $upload_dir['basedir']); } if (count($thumb_regenerate) > 0) { $message .= sprintf(__('<br />Regenerate: %s</span>', 'force-regenerate-thumbnails'), implode(', ', $thumb_regenerate)); if (count($thumb_error) <= 0) { $message .= sprintf(__('<br />Successfully regenerated in %s seconds', 'force-regenerate-thumbnails'), timer_stop()); } } if (count($thumb_error) > 0) { die(json_encode(array('error' => '<div id="message" class="error fade"><p>' . $message . '</p></div>'))); } else { die(json_encode(array('success' => '<div id="message" class="updated fade"><p>' . $message . '</p></div>'))); } } catch (Exception $e) { $this->die_json_failure_msg($id, '<b><span style="color: #DD3D36;">' . $e->getMessage() . '</span></b>'); } exit; } /** * Helper to make a JSON failure message * * @param integer $id * @param string #message * @access public * @since 1.8 */ function die_json_failure_msg($id, $message) { die(json_encode(array('error' => sprintf(__('(ID %s)<br />%s', 'force-regenerate-thumbnails'), $id, $message)))); } /** * Helper function to escape quotes in strings for use in Javascript * * @param string #message * @return string * @access public * @since 1.0 */ function esc_quotes($string) { return str_replace('"', '\"', $string); } } /** * Start */ function ForceRegenerateThumbnails() { global $ForceRegenerateThumbnails; $ForceRegenerateThumbnails = new ForceRegenerateThumbnails(); } add_action('init', 'ForceRegenerateThumbnails'); ?>
[+]
..
[-] su.js.php
[edit]
[-] screenshot-2.png
[edit]
[-] style.css
[edit]
[+]
jquery-ui
[-] readme.txt
[edit]
[-] screenshot-1.png
[edit]
[-] force-regenerate-thumbnails.php
[edit]