Version Description
- When quota exceeded, download the images that are already processed on the server
Download this release
Release Info
Developer | ShortPixel |
Plugin | ShortPixel Image Optimizer |
Version | 3.3.6 |
Comparing to | |
See all releases |
Code changes from version 3.3.5 to 3.3.6
- js/short-pixel.js +3 -0
- readme.txt +8 -3
- shortpixel_api.php +18 -1
- shortpixel_queue.php +35 -1
- wp-shortpixel-settings.php +1 -0
- wp-shortpixel.php +28 -8
js/short-pixel.js
CHANGED
@@ -224,6 +224,9 @@ function checkBulkProcessingCallApi(){
|
|
224 |
+ "<a class='button button-smaller' href='admin.php?action=shortpixel_check_quota'>Check Quota</a></div>"
|
225 |
+ "<div class='sp-column-info'>" + data["Message"] + "</div>" );
|
226 |
showToolBarAlert(ShortPixel.STATUS_QUOTA_EXCEEDED);
|
|
|
|
|
|
|
227 |
break;
|
228 |
case ShortPixel.STATUS_FAIL:
|
229 |
setCellMessage(id, data["Message"]);
|
224 |
+ "<a class='button button-smaller' href='admin.php?action=shortpixel_check_quota'>Check Quota</a></div>"
|
225 |
+ "<div class='sp-column-info'>" + data["Message"] + "</div>" );
|
226 |
showToolBarAlert(ShortPixel.STATUS_QUOTA_EXCEEDED);
|
227 |
+
if(data['Stop'] == false) { //there are other items in queue maybe already optimized
|
228 |
+
setTimeout(checkBulkProgress, 5000);
|
229 |
+
}
|
230 |
break;
|
231 |
case ShortPixel.STATUS_FAIL:
|
232 |
setCellMessage(id, data["Message"]);
|
readme.txt
CHANGED
@@ -4,8 +4,8 @@ Contributors: AlexSP
|
|
4 |
Tags: image optimizer, image optimization, compress pdf, compress jpeg, compress png, image compression, wp smush, compress images, optimize images, shrink jpeg, optimize photos, tinypng
|
5 |
|
6 |
Requires at least: 3.2.0
|
7 |
-
Tested up to: 4.
|
8 |
-
Stable tag: 3.3.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -193,8 +193,13 @@ The ShortPixel team is here to help. <a href="https://shortpixel.com/contact">Co
|
|
193 |
|
194 |
== Changelog ==
|
195 |
|
|
|
|
|
|
|
|
|
196 |
= 3.3.5 =
|
197 |
-
|
|
|
198 |
|
199 |
= 3.3.4 =
|
200 |
|
4 |
Tags: image optimizer, image optimization, compress pdf, compress jpeg, compress png, image compression, wp smush, compress images, optimize images, shrink jpeg, optimize photos, tinypng
|
5 |
|
6 |
Requires at least: 3.2.0
|
7 |
+
Tested up to: 4.6
|
8 |
+
Stable tag: 3.3.6
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
193 |
|
194 |
== Changelog ==
|
195 |
|
196 |
+
= 3.3.6 =
|
197 |
+
|
198 |
+
* When quota exceeded, download the images that are already processed on the server
|
199 |
+
|
200 |
= 3.3.5 =
|
201 |
+
|
202 |
+
* fix the size problem of the settings tabs when not yet activated
|
203 |
|
204 |
= 3.3.4 =
|
205 |
|
shortpixel_api.php
CHANGED
@@ -159,7 +159,9 @@ class ShortPixelAPI {
|
|
159 |
{
|
160 |
case 2:
|
161 |
//handle image has been processed
|
162 |
-
|
|
|
|
|
163 |
return $this->handleSuccess($APIresponse, $URLs, $PATHs, $ID, $compressionType);
|
164 |
break;
|
165 |
default:
|
@@ -338,7 +340,22 @@ class ShortPixelAPI {
|
|
338 |
foreach ( $tempFiles as $tempFileID => $tempFilePATH )
|
339 |
{
|
340 |
if ( file_exists($tempFilePATH) && file_exists($PATHs[$tempFileID]) && is_writable($PATHs[$tempFileID]) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
341 |
copy($tempFilePATH, $PATHs[$tempFileID]);
|
|
|
|
|
|
|
|
|
|
|
342 |
} else {
|
343 |
$writeFailed++;
|
344 |
}
|
159 |
{
|
160 |
case 2:
|
161 |
//handle image has been processed
|
162 |
+
if(!isset($firstImage->Status->quotaExceeded)) {
|
163 |
+
$this->_settings->quotaExceeded = 0;//reset the quota exceeded flag
|
164 |
+
}
|
165 |
return $this->handleSuccess($APIresponse, $URLs, $PATHs, $ID, $compressionType);
|
166 |
break;
|
167 |
default:
|
340 |
foreach ( $tempFiles as $tempFileID => $tempFilePATH )
|
341 |
{
|
342 |
if ( file_exists($tempFilePATH) && file_exists($PATHs[$tempFileID]) && is_writable($PATHs[$tempFileID]) ) {
|
343 |
+
/*
|
344 |
+
echo("COPY FROM " . $tempFilePATH . " TO " . $PATHs[$tempFileID] . " TIME " . date("Y-m-d H:i:s"));
|
345 |
+
if(file_exists($PATHs[$tempFileID])) {
|
346 |
+
echo " TARGET IS THERE, SIZE " . filesize($PATHs[$tempFileID]) . ", FILEMTIME: " . date("Y-m-d H:i:s", filemtime($PATHs[$tempFileID])) . ", UNLINKING ... "
|
347 |
+
}
|
348 |
+
unlink($PATHs[$tempFileID]);
|
349 |
+
if(file_exists($PATHs[$tempFileID])) {
|
350 |
+
echo " NOT UNLINKED ";
|
351 |
+
}
|
352 |
+
*/
|
353 |
copy($tempFilePATH, $PATHs[$tempFileID]);
|
354 |
+
/*
|
355 |
+
if(file_exists($PATHs[$tempFileID])) {
|
356 |
+
echo " FILE COPIED, SIZE " . filesize($PATHs[$tempFileID]) . ", FILEMTIME: " . date("Y-m-d H:i:s", filemtime($PATHs[$tempFileID])) . " ";
|
357 |
+
}
|
358 |
+
*/
|
359 |
} else {
|
360 |
$writeFailed++;
|
361 |
}
|
shortpixel_queue.php
CHANGED
@@ -59,7 +59,41 @@ class ShortPixelQueue {
|
|
59 |
return $_SESSION["wp-short-pixel-priorityQueue"];//get_option("wp-short-pixel-priorityQueue");
|
60 |
}
|
61 |
|
62 |
-
public function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
{
|
64 |
$priorityQueue = $_SESSION["wp-short-pixel-priorityQueue"]; //get_option("wp-short-pixel-priorityQueue");
|
65 |
WPShortPixel::log("PUSH: Push ID $ID into queue ".json_encode($priorityQueue));
|
59 |
return $_SESSION["wp-short-pixel-priorityQueue"];//get_option("wp-short-pixel-priorityQueue");
|
60 |
}
|
61 |
|
62 |
+
public function skip($id) {
|
63 |
+
if(is_array($this->settings->prioritySkip)) {
|
64 |
+
$this->settings->prioritySkip = array_merge($this->settings->prioritySkip, array($id));
|
65 |
+
} else {
|
66 |
+
$this->settings->prioritySkip = array($id);
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
public function allSkipped() {
|
71 |
+
if( !is_array($this->settings->prioritySkip) ) return false;
|
72 |
+
count(array_diff($_SESSION["wp-short-pixel-priorityQueue"], $this->settings->prioritySkip));
|
73 |
+
}
|
74 |
+
|
75 |
+
public function skippedCount() {
|
76 |
+
return is_array($this->settings->prioritySkip) ? count($this->settings->prioritySkip) : 0;
|
77 |
+
}
|
78 |
+
|
79 |
+
public function isSkipped($id) {
|
80 |
+
return is_array($this->settings->prioritySkip) && in_array($id, $this->settings->prioritySkip);
|
81 |
+
}
|
82 |
+
|
83 |
+
public function isPrio($id) {
|
84 |
+
return is_array($_SESSION["wp-short-pixel-priorityQueue"]) && in_array($id, $_SESSION["wp-short-pixel-priorityQueue"]);
|
85 |
+
}
|
86 |
+
|
87 |
+
public function getSkipped() {
|
88 |
+
return $this->settings->prioritySkip;
|
89 |
+
}
|
90 |
+
|
91 |
+
public function reverse() {
|
92 |
+
$this->settings->priorityQueue = $_SESSION["wp-short-pixel-priorityQueue"] = array_reverse($_SESSION["wp-short-pixel-priorityQueue"]);
|
93 |
+
|
94 |
+
}
|
95 |
+
|
96 |
+
public function push($ID)//add an ID to priority queue
|
97 |
{
|
98 |
$priorityQueue = $_SESSION["wp-short-pixel-priorityQueue"]; //get_option("wp-short-pixel-priorityQueue");
|
99 |
WPShortPixel::log("PUSH: Push ID $ID into queue ".json_encode($priorityQueue));
|
wp-shortpixel-settings.php
CHANGED
@@ -38,6 +38,7 @@ class WPShortPixelSettings {
|
|
38 |
'mediaAlert' => 'wp-short-pixel-media-alert',
|
39 |
'siteAuthUser' => 'wp-short-pixel-site-auth-user',
|
40 |
'siteAuthPass' => 'wp-short-pixel-site-auth-pass',
|
|
|
41 |
'' => '',
|
42 |
);
|
43 |
|
38 |
'mediaAlert' => 'wp-short-pixel-media-alert',
|
39 |
'siteAuthUser' => 'wp-short-pixel-site-auth-user',
|
40 |
'siteAuthPass' => 'wp-short-pixel-site-auth-pass',
|
41 |
+
'prioritySkip' => 'wp-short-pixel-prioritySkip',
|
42 |
'' => '',
|
43 |
);
|
44 |
|
wp-shortpixel.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: ShortPixel Image Optimizer
|
4 |
* Plugin URI: https://shortpixel.com/
|
5 |
* Description: ShortPixel optimizes images automatically, while guarding the quality of your images. Check your <a href="options-general.php?page=wp-shortpixel" target="_blank">Settings > ShortPixel</a> page on how to start optimizing your image library and make your website load faster.
|
6 |
-
* Version: 3.3.
|
7 |
* Author: ShortPixel
|
8 |
* Author URI: https://shortpixel.com
|
9 |
*/
|
@@ -22,7 +22,7 @@ define('SP_RESET_ON_ACTIVATE', false); //if true TODO set false
|
|
22 |
|
23 |
define('SP_AFFILIATE_CODE', '');
|
24 |
|
25 |
-
define('PLUGIN_VERSION', "3.3.
|
26 |
define('SP_MAX_TIMEOUT', 10);
|
27 |
define('SP_VALIDATE_MAX_TIMEOUT', 15);
|
28 |
define('SP_BACKUP', 'ShortpixelBackups');
|
@@ -78,6 +78,8 @@ class WPShortPixel {
|
|
78 |
//Media custom column
|
79 |
add_filter( 'manage_media_columns', array( &$this, 'columns' ) );//add media library column header
|
80 |
add_action( 'manage_media_custom_column', array( &$this, 'generateCustomColumn' ), 10, 2 );//generate the media library column
|
|
|
|
|
81 |
|
82 |
if($isAdminUser) {
|
83 |
//add settings page
|
@@ -417,10 +419,10 @@ class WPShortPixel {
|
|
417 |
$idsPrio = $this->prioQ->get();
|
418 |
for($i = count($idsPrio) - 1, $cnt = 0; $i>=0 && $cnt < 3; $i--) {
|
419 |
$id = $idsPrio[$i];
|
420 |
-
if(wp_get_attachment_url($id)) {
|
421 |
$ids[] = $id; //valid ID
|
422 |
-
}
|
423 |
-
$removeIds[] = $id;//absent, to remove
|
424 |
}
|
425 |
}
|
426 |
foreach($removeIds as $rId){
|
@@ -571,7 +573,19 @@ class WPShortPixel {
|
|
571 |
}
|
572 |
$this->advanceBulk($ID, $result);
|
573 |
}
|
574 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
575 |
update_option( 'wp-short-pixel-bulk-last-status', $result);
|
576 |
}
|
577 |
die(json_encode($result));
|
@@ -598,9 +612,14 @@ class WPShortPixel {
|
|
598 |
}
|
599 |
|
600 |
public function handleManualOptimization() {
|
601 |
-
|
602 |
$imageId = intval($_GET['image_id']);
|
|
|
|
|
603 |
|
|
|
|
|
|
|
|
|
604 |
if(self::isProcessable($imageId)) {
|
605 |
$this->prioQ->push($imageId);
|
606 |
$this->sendToProcessing($imageId);
|
@@ -807,7 +826,8 @@ class WPShortPixel {
|
|
807 |
//$quotaData['mainProcessedFiles'] = $imageCount['mainProcessedFiles'];
|
808 |
|
809 |
if($quotaData['APICallsQuotaNumeric'] + $quotaData['APICallsQuotaOneTimeNumeric'] > $quotaData['APICallsMadeNumeric'] + $quotaData['APICallsMadeOneTimeNumeric']) {
|
810 |
-
|
|
|
811 |
?><script>var shortPixelQuotaExceeded = 0;</script><?php
|
812 |
}
|
813 |
else {
|
3 |
* Plugin Name: ShortPixel Image Optimizer
|
4 |
* Plugin URI: https://shortpixel.com/
|
5 |
* Description: ShortPixel optimizes images automatically, while guarding the quality of your images. Check your <a href="options-general.php?page=wp-shortpixel" target="_blank">Settings > ShortPixel</a> page on how to start optimizing your image library and make your website load faster.
|
6 |
+
* Version: 3.3.6
|
7 |
* Author: ShortPixel
|
8 |
* Author URI: https://shortpixel.com
|
9 |
*/
|
22 |
|
23 |
define('SP_AFFILIATE_CODE', '');
|
24 |
|
25 |
+
define('PLUGIN_VERSION', "3.3.6");
|
26 |
define('SP_MAX_TIMEOUT', 10);
|
27 |
define('SP_VALIDATE_MAX_TIMEOUT', 15);
|
28 |
define('SP_BACKUP', 'ShortpixelBackups');
|
78 |
//Media custom column
|
79 |
add_filter( 'manage_media_columns', array( &$this, 'columns' ) );//add media library column header
|
80 |
add_action( 'manage_media_custom_column', array( &$this, 'generateCustomColumn' ), 10, 2 );//generate the media library column
|
81 |
+
//custom hook
|
82 |
+
add_action( 'shortpixel-optimize-now', array( &$this, 'optimizeNowHook' ), 10, 1);
|
83 |
|
84 |
if($isAdminUser) {
|
85 |
//add settings page
|
419 |
$idsPrio = $this->prioQ->get();
|
420 |
for($i = count($idsPrio) - 1, $cnt = 0; $i>=0 && $cnt < 3; $i--) {
|
421 |
$id = $idsPrio[$i];
|
422 |
+
if(!$this->prioQ->isSkipped($id) && wp_get_attachment_url($id)) {
|
423 |
$ids[] = $id; //valid ID
|
424 |
+
} elseif(!$this->prioQ->isSkipped($id)) {
|
425 |
+
$removeIds[] = $id;//not skipped, url not found, means it's absent, to remove
|
426 |
}
|
427 |
}
|
428 |
foreach($removeIds as $rId){
|
573 |
}
|
574 |
$this->advanceBulk($ID, $result);
|
575 |
}
|
576 |
+
elseif ($this->prioQ->isPrio($ID) && $result["Status"] == ShortPixelAPI::STATUS_QUOTA_EXCEEDED) {
|
577 |
+
if(!$this->prioQ->skippedCount()) {
|
578 |
+
$this->prioQ->reverse(); //for the first prio item with quota exceeded, revert the prio queue as probably the bottom ones were processed
|
579 |
+
}
|
580 |
+
if($this->prioQ->allSkipped()) {
|
581 |
+
$result["Stop"] = true;
|
582 |
+
} else {
|
583 |
+
$result["Stop"] = false;
|
584 |
+
$this->prioQ->skip($ID);
|
585 |
+
}
|
586 |
+
self::log("HIP: 5 Prio Skipped: ".json_encode($this->prioQ->getSkipped()));
|
587 |
+
}
|
588 |
+
if($result["Status"] !== ShortPixelAPI::STATUS_RETRY) {
|
589 |
update_option( 'wp-short-pixel-bulk-last-status', $result);
|
590 |
}
|
591 |
die(json_encode($result));
|
612 |
}
|
613 |
|
614 |
public function handleManualOptimization() {
|
|
|
615 |
$imageId = intval($_GET['image_id']);
|
616 |
+
$this->optimizeNowHook($imageId);
|
617 |
+
//do_action('shortpixel-optimize-now', $imageId);
|
618 |
|
619 |
+
}
|
620 |
+
|
621 |
+
//custom hook
|
622 |
+
public function optimizeNowHook($imageId) {
|
623 |
if(self::isProcessable($imageId)) {
|
624 |
$this->prioQ->push($imageId);
|
625 |
$this->sendToProcessing($imageId);
|
826 |
//$quotaData['mainProcessedFiles'] = $imageCount['mainProcessedFiles'];
|
827 |
|
828 |
if($quotaData['APICallsQuotaNumeric'] + $quotaData['APICallsQuotaOneTimeNumeric'] > $quotaData['APICallsMadeNumeric'] + $quotaData['APICallsMadeOneTimeNumeric']) {
|
829 |
+
$this->_settings->quotaExceeded = '0';
|
830 |
+
$this->_settings->prioritySkip = NULL;
|
831 |
?><script>var shortPixelQuotaExceeded = 0;</script><?php
|
832 |
}
|
833 |
else {
|