Kraken_Image_Optimizer - Version 2.0.4

Version Notes

Fixed SQL query used for fetching unoptimized Media and Skin images

Download this release

Release Info

Developer Nekkra UG
Extension Kraken_Image_Optimizer
Version 2.0.4
Comparing to
See all releases


Code changes from version 2.0.3 to 2.0.4

app/code/local/Welance/Kraken/Helper/Data.php CHANGED
@@ -249,19 +249,24 @@ class Welance_Kraken_Helper_Data extends Mage_Core_Helper_Abstract
249
 
250
  $readConnection = $resource->getConnection('core_read');
251
 
252
- $select = $readConnection->select();
253
-
254
  $table = $resource->getTableName('welance_kraken/images_'.$type);
255
 
256
- $imageNameEscaped = $readConnection->quote($imageName);
 
 
 
 
 
 
 
 
 
 
 
257
 
258
- $select = $readConnection->select()
259
- ->from($table, array('id'))
260
- ->where('path = ?', $path)
261
- ->where('image_name = ?', $imageNameEscaped)
262
- ->where('original_checksum = ? OR checksum_after_upload = ?', $checksum);
263
 
264
- if ($readConnection->fetchOne($select) !== false) {
265
  return true;
266
  }
267
 
249
 
250
  $readConnection = $resource->getConnection('core_read');
251
 
 
 
252
  $table = $resource->getTableName('welance_kraken/images_'.$type);
253
 
254
+ $query = "SELECT `id` FROM `{$table}` WHERE `path` = :path AND `image_name` = :image_name AND
255
+ (`original_checksum` = :checksum OR `checksum_after_upload` = :checksum)";
256
+
257
+ $bind = array(
258
+ 'path' => $path,
259
+ 'image_name' => $imageName,
260
+ 'checksum' => $checksum
261
+ );
262
+
263
+ /**
264
+ * Using $readConnection->query() with bind parameter automatically escapes the string
265
+ */
266
 
267
+ $select = $readConnection->query($query,$bind);
 
 
 
 
268
 
269
+ if ($select->fetch() !== false) {
270
  return true;
271
  }
272
 
app/design/adminhtml/default/default/layout/kraken.xml CHANGED
@@ -7,7 +7,7 @@
7
  <action method="addCss"><name>kraken/images.css</name></action>
8
  <action method="addJs"><script>kraken/async.js</script></action>
9
  <action method="addJs"><script>kraken/jquery.js</script></action>
10
- <action method="addJs"><script>kraken/optimize.js</script></action>
11
  </reference>
12
  <reference name="menu">
13
  <action method="setActive"><menupath>welance/welance_kraken</menupath></action>
7
  <action method="addCss"><name>kraken/images.css</name></action>
8
  <action method="addJs"><script>kraken/async.js</script></action>
9
  <action method="addJs"><script>kraken/jquery.js</script></action>
10
+ <action method="addJs"><script>kraken/optimize.v2.min.js</script></action>
11
  </reference>
12
  <reference name="menu">
13
  <action method="setActive"><menupath>welance/welance_kraken</menupath></action>
app/design/adminhtml/default/default/template/kraken/images/media.phtml CHANGED
@@ -15,7 +15,7 @@
15
  <h3>Media Images</h3>
16
 
17
  <div class="kraken-box-inner cf">
18
- <?php if ($total == 0): ?>
19
  <p class="success-msg"><?php echo $this->__('Great! All media images have been optimized.') ?></p>
20
  <?php else: ?>
21
  <p class="notice-msg"><?php echo $this->__('Heads up! There are <strong>%s</strong> media images that can be optimized.', $toBeOptimized) ?></p>
15
  <h3>Media Images</h3>
16
 
17
  <div class="kraken-box-inner cf">
18
+ <?php if ($toBeOptimized == 0): ?>
19
  <p class="success-msg"><?php echo $this->__('Great! All media images have been optimized.') ?></p>
20
  <?php else: ?>
21
  <p class="notice-msg"><?php echo $this->__('Heads up! There are <strong>%s</strong> media images that can be optimized.', $toBeOptimized) ?></p>
app/design/adminhtml/default/default/template/kraken/images/skin.phtml CHANGED
@@ -15,7 +15,7 @@
15
  <h3>Skin Images</h3>
16
 
17
  <div class="kraken-box-inner cf">
18
- <?php if ($total == 0): ?>
19
  <p class="success-msg"><?php echo $this->__('Great! All skin images optimized.') ?></p>
20
  <?php else: ?>
21
  <p class="notice-msg"><?php echo $this->__('Heads up! There are <strong>%s</strong> skin images that can be optimized.', $toBeOptimized) ?></p>
15
  <h3>Skin Images</h3>
16
 
17
  <div class="kraken-box-inner cf">
18
+ <?php if ($toBeOptimized == 0): ?>
19
  <p class="success-msg"><?php echo $this->__('Great! All skin images optimized.') ?></p>
20
  <?php else: ?>
21
  <p class="notice-msg"><?php echo $this->__('Heads up! There are <strong>%s</strong> skin images that can be optimized.', $toBeOptimized) ?></p>
js/kraken/optimize.js CHANGED
@@ -5,142 +5,154 @@
5
  /* global concurrency:true */
6
  /* global cacheConcurrency:true */
7
 
8
- "use strict";
 
9
 
10
- var $j = jQuery.noConflict();
11
-
12
- $j(document).ready(function () {
13
- var overlayElem = document.createElement("div");
14
- overlayElem.setAttribute("id", "kraken-overlay");
15
- document.body.appendChild(overlayElem);
16
 
17
- var modalElem = document.getElementById("kraken-modal");
18
- document.body.appendChild(modalElem.parentNode.removeChild(modalElem));
19
 
20
- $j("#kraken-modal-close, #kraken-success-close").on("click", function () {
21
- window.location.reload();
22
- });
23
- });
24
 
25
- window.optimizeImages = {
26
- optimize: function (type, images, total) {
27
- var originalHeader = $j("#kraken-modal-head").text();
28
-
29
- if (type === "media") {
30
- $j("#kraken-modal-head").text(originalHeader.replace("__type__", "media"));
31
- } else {
32
- $j("#kraken-modal-head").text(originalHeader.replace("__type__", "skin"));
33
  }
34
 
35
- $j("#kraken-modal").show();
36
- $j("#kraken-overlay").addClass("show");
37
- $j("#kraken-total").text(total);
38
-
39
- var j = 0;
40
-
41
- var queue = async.queue(function (task, callback) {
42
- new Ajax.Request(requestUrl, {
43
- method : "get",
44
- parameters: {
45
- type: type,
46
- image: JSON.stringify(task.file)
47
- },
48
- onComplete: function (response) {
49
- j++;
50
-
51
- var json = response.responseJSON;
52
-
53
- if (json.success) {
54
- if (!queue.paused) {
55
- $j("#kraken-current").text(j);
56
- $j("#kraken-number-progress")
57
- .addClass("show")
58
- .text(Math.round(j / total * 100) + "%");
59
-
60
- $j("#kraken-progress-bar").css({
61
- width: Math.round(j / total * 100) + "%"
62
- });
63
- }
64
- } else {
65
- var errorText = "";
66
 
67
- if (json.statusCode === 429) {
68
- errorText = "Unnknown API Key. Please check your Kraken API key and try again.";
69
- } else if (json.statusCode === 401) {
70
- errorText = "Your free quota (50 MB) has reached its limit.<br>Request more testing quota (support@kraken.io) or please upgrade to a paid plan.";
71
- } else {
72
- errorText = json.message;
73
- }
74
 
75
- if (json.statusCode === 401 || json.statusCode === 429) {
76
- $j("#kraken-modal-error")
77
- .html(json.message)
78
- .show();
79
 
80
- queue.pause();
 
 
 
81
 
82
- $j("#kraken-modal").css({
83
- marginTop: -(Math.round($j("#kraken-modal").height()/2)) + "px"
84
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  }
 
 
86
  }
 
 
87
 
88
- callback();
89
- }
90
- });
91
- }, concurrency);
 
92
 
93
- for (var i = 0, ii = images.length; i < ii; i++) {
94
- queue.push({
95
- file: images[i]
96
- });
97
- }
98
 
99
- queue.drain = function () {
100
- setTimeout(function () {
101
- var successMessage = "";
102
-
103
- if (type === "media") {
104
- successMessage = "Congratulations! Your skin images have been optimized.";
105
- } else {
106
- successMessage = "Congratulations! Your media images have been optimized.";
107
- }
108
-
109
- $j("#kraken-modal-head").text(successMessage);
110
- $j("#kraken-success-close").show();
111
- $j("#kraken-progress").hide();
112
- $j("#kraken-modal-footer").hide();
113
- $j("#kraken-count").hide();
114
- $j("#kraken-modal-content")
115
- .addClass("with-success")
116
- .find("p")
117
- .addClass("with-success");
118
- }, 500);
119
- };
120
- },
121
-
122
- optimizeCache: function (images) {
123
- var queue = async.queue(function (task, callback) {
124
- new Ajax.Request(requestUrl, {
125
- method: "post",
126
- parameters: {
127
- id: task.file.id,
128
- product_id: task.file.product_id
129
- },
130
- onComplete: function () {
131
- callback();
132
- }
133
- });
134
- }, cacheConcurrency);
135
-
136
- if (!images.length) {
137
- return;
138
- }
139
 
140
- for (var i = 0, ii = images.length; i < ii; i++) {
141
- queue.push({
142
- file: images[i]
143
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
- }
146
- };
5
  /* global concurrency:true */
6
  /* global cacheConcurrency:true */
7
 
8
+ (function() {
9
+ "use strict";
10
 
11
+ if (typeof jQuery === "undefined") {
12
+ return;
13
+ }
 
 
 
14
 
15
+ var $j = jQuery.noConflict();
 
16
 
17
+ $j(document).ready(function () {
18
+ var modalElem = document.getElementById("kraken-modal");
 
 
19
 
20
+ if (!modalElem) {
21
+ return;
 
 
 
 
 
 
22
  }
23
 
24
+ var overlayElem = document.createElement("div");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
+ overlayElem.setAttribute("id", "kraken-overlay");
27
+ document.body.appendChild(overlayElem);
 
 
 
 
 
28
 
29
+ document.body.appendChild(modalElem.parentNode.removeChild(modalElem));
 
 
 
30
 
31
+ $j("#kraken-modal-close, #kraken-success-close").on("click", function () {
32
+ window.location.reload();
33
+ });
34
+ });
35
 
36
+ window.optimizeImages = {
37
+ optimize: function (type, images, total) {
38
+ var originalHeader = $j("#kraken-modal-head").text();
39
+
40
+ if (type === "media") {
41
+ $j("#kraken-modal-head").text(originalHeader.replace("__type__", "media"));
42
+ } else {
43
+ $j("#kraken-modal-head").text(originalHeader.replace("__type__", "skin"));
44
+ }
45
+
46
+ $j("#kraken-modal").show();
47
+ $j("#kraken-overlay").addClass("show");
48
+ $j("#kraken-total").text(total);
49
+
50
+ var j = 0;
51
+
52
+ var queue = async.queue(function (task, callback) {
53
+ new Ajax.Request(requestUrl, {
54
+ method : "get",
55
+ parameters: {
56
+ type: type,
57
+ image: JSON.stringify(task.file)
58
+ },
59
+ onComplete: function (response) {
60
+ j++;
61
+
62
+ var json = response.responseJSON;
63
+
64
+ if (json.success) {
65
+ if (!queue.paused) {
66
+ $j("#kraken-current").text(j);
67
+ $j("#kraken-number-progress")
68
+ .addClass("show")
69
+ .text(Math.round(j / total * 100) + "%");
70
+
71
+ $j("#kraken-progress-bar").css({
72
+ width: Math.round(j / total * 100) + "%"
73
+ });
74
+ }
75
+ } else {
76
+ var errorText = "";
77
+
78
+ if (json.statusCode === 429) {
79
+ errorText = "Unnknown API Key. Please check your Kraken API key and try again.";
80
+ } else if (json.statusCode === 401) {
81
+ errorText = "Your free quota (50 MB) has reached its limit.<br>Request more testing quota (support@kraken.io) or please upgrade to a paid plan.";
82
+ } else {
83
+ errorText = json.message;
84
+ }
85
+
86
+ if (json.statusCode === 401 || json.statusCode === 429) {
87
+ $j("#kraken-modal-error")
88
+ .html(json.message)
89
+ .show();
90
+
91
+ queue.pause();
92
+
93
+ $j("#kraken-modal").css({
94
+ marginTop: -(Math.round($j("#kraken-modal").height()/2)) + "px"
95
+ });
96
+ }
97
  }
98
+
99
+ callback();
100
  }
101
+ });
102
+ }, concurrency);
103
 
104
+ for (var i = 0, ii = images.length; i < ii; i++) {
105
+ queue.push({
106
+ file: images[i]
107
+ });
108
+ }
109
 
110
+ queue.drain = function () {
111
+ setTimeout(function () {
112
+ var successMessage = "";
 
 
113
 
114
+ if (type === "media") {
115
+ successMessage = "Congratulations! Your skin images have been optimized.";
116
+ } else {
117
+ successMessage = "Congratulations! Your media images have been optimized.";
118
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
 
120
+ $j("#kraken-modal-head").text(successMessage);
121
+ $j("#kraken-success-close").show();
122
+ $j("#kraken-progress").hide();
123
+ $j("#kraken-modal-footer").hide();
124
+ $j("#kraken-count").hide();
125
+ $j("#kraken-modal-content")
126
+ .addClass("with-success")
127
+ .find("p")
128
+ .addClass("with-success");
129
+ }, 500);
130
+ };
131
+ },
132
+
133
+ optimizeCache: function (images) {
134
+ var queue = async.queue(function (task, callback) {
135
+ new Ajax.Request(requestUrl, {
136
+ method: "post",
137
+ parameters: {
138
+ id: task.file.id,
139
+ product_id: task.file.product_id
140
+ },
141
+ onComplete: function () {
142
+ callback();
143
+ }
144
+ });
145
+ }, cacheConcurrency);
146
+
147
+ if (!images.length) {
148
+ return;
149
+ }
150
+
151
+ for (var i = 0, ii = images.length; i < ii; i++) {
152
+ queue.push({
153
+ file: images[i]
154
+ });
155
+ }
156
  }
157
+ };
158
+ })();
js/kraken/optimize.v2.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(){"use strict";if("undefined"!=typeof jQuery){var e=jQuery.noConflict();e(document).ready(function(){var a=document.getElementById("kraken-modal");if(a){var t=document.createElement("div");t.setAttribute("id","kraken-overlay"),document.body.appendChild(t),document.body.appendChild(a.parentNode.removeChild(a)),e("#kraken-modal-close, #kraken-success-close").on("click",function(){window.location.reload()})}}),window.optimizeImages={optimize:function(a,t,n){var o=e("#kraken-modal-head").text();"media"===a?e("#kraken-modal-head").text(o.replace("__type__","media")):e("#kraken-modal-head").text(o.replace("__type__","skin")),e("#kraken-modal").show(),e("#kraken-overlay").addClass("show"),e("#kraken-total").text(n);for(var r=0,s=async.queue(function(t,o){new Ajax.Request(requestUrl,{method:"get",parameters:{type:a,image:JSON.stringify(t.file)},onComplete:function(a){r++;var t=a.responseJSON;if(t.success)s.paused||(e("#kraken-current").text(r),e("#kraken-number-progress").addClass("show").text(Math.round(r/n*100)+"%"),e("#kraken-progress-bar").css({width:Math.round(r/n*100)+"%"}));else{var d="";d=429===t.statusCode?"Unnknown API Key. Please check your Kraken API key and try again.":401===t.statusCode?"Your free quota (50 MB) has reached its limit.<br>Request more testing quota (support@kraken.io) or please upgrade to a paid plan.":t.message,(401===t.statusCode||429===t.statusCode)&&(e("#kraken-modal-error").html(t.message).show(),s.pause(),e("#kraken-modal").css({marginTop:-Math.round(e("#kraken-modal").height()/2)+"px"}))}o()}})},concurrency),d=0,i=t.length;i>d;d++)s.push({file:t[d]});s.drain=function(){setTimeout(function(){var t="";t="media"===a?"Congratulations! Your skin images have been optimized.":"Congratulations! Your media images have been optimized.",e("#kraken-modal-head").text(t),e("#kraken-success-close").show(),e("#kraken-progress").hide(),e("#kraken-modal-footer").hide(),e("#kraken-count").hide(),e("#kraken-modal-content").addClass("with-success").find("p").addClass("with-success")},500)}},optimizeCache:function(e){var a=async.queue(function(e,a){new Ajax.Request(requestUrl,{method:"post",parameters:{id:e.file.id,product_id:e.file.product_id},onComplete:function(){a()}})},cacheConcurrency);if(e.length)for(var t=0,n=e.length;n>t;t++)a.push({file:e[t]})}}}}();
package.xml CHANGED
@@ -1,18 +1,18 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Kraken_Image_Optimizer</name>
4
- <version>2.0.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/GPL-3.0">GNU General Public License (GPL)</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>This extension enables Magento users to optimize their product, skin and media images by consuming the Kraken.io image optimization API. (https://kraken.io)</summary>
10
  <description>This extension exists for the sole purpose of allowing Magento users to optimize their product, skin and media images by consuming the Kraken.io image optimization API. (https://kraken.io)</description>
11
- <notes>Re-packaged the extension</notes>
12
  <authors><author><name>Nekkra UG</name><user>KrakenIO</user><email>support@kraken.io</email></author></authors>
13
- <date>2015-10-16</date>
14
- <time>12:22:11</time>
15
- <contents><target name="magelocal"><dir name="Welance"><dir name="Kraken"><dir name="Block"><dir name="Adminhtml"><dir name="Api"><file name="Signup.php" hash="56a9ee65c5d9fd769b7a5a0854b71a16"/><file name="Status.php" hash="99dd2cb6da9d62e4d8cab36ea29d13e5"/><dir name="User"><file name="Status.php" hash="f33827a151d7ccd76684dde79599c3a2"/></dir></dir><dir name="Images"><file name="Media.php" hash="9dd94a375ceaa004df26d314a935fa63"/><file name="Skin.php" hash="f0dc5623a3974e50ce94b71cae4cd7cd"/></dir><file name="Images.php" hash="77fe1a1c7a0fb28209a741266467db69"/><file name="Statistics.php" hash="6cdae1bc41185b93c49d97465ee75704"/></dir><dir name="Product"><file name="Image.php" hash="2243dae68917d4e49b7c8786d3dc173b"/></dir></dir><dir name="Helper"><file name="Api.php" hash="bdad47443f357c6241005b76304d985e"/><file name="Data.php" hash="e1ab157c7e49420917380267577fe2f4"/></dir><dir name="Model"><file name="Abstract.php" hash="46ad69f601aa392e44fadf43dc8ff558"/><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Validation"><file name="File.php" hash="03b116c93529a00f064c428519415b90"/><file name="Quality.php" hash="63919067f4576cc1a0c6ef663b1d1779"/></dir></dir><dir name="Source"><file name="Compression.php" hash="516d83f51e2216b45e51d20d6d1f8575"/><file name="Concurrency.php" hash="436d106916fae3d01bd7272e34d9771c"/></dir></dir></dir></dir><dir name="Image"><file name="Cache.php" hash="b1405ed2975e5b2fa0136f7722f03828"/></dir><dir name="Images"><file name="Media.php" hash="3d73a5ba9276744d92de042f4ca5d228"/><file name="Skin.php" hash="d6181c6772baa9a84d26e6adda5c87be"/></dir><file name="Observer.php" hash="8e27670e4c5ce3d62d0fcc5b27b6972a"/><dir name="Product"><file name="Image.php" hash="11c24a47125de4787bf082a2227c1e77"/></dir><dir name="Resource"><dir name="Image"><dir name="Cache"><file name="Collection.php" hash="4f29016539f9586ba707c1815f1e12b6"/></dir><file name="Cache.php" hash="7058d029a436aa3d0be1dc6f3c7fae57"/></dir><dir name="Images"><dir name="Media"><file name="Collection.php" hash="e77abb3c2122a0f5582bf14739935d85"/></dir><file name="Media.php" hash="c6aa05e4362b645b001854e9578ee5d1"/><dir name="Skin"><file name="Collection.php" hash="2e81919a1fa3014a9083b12382fc46e0"/></dir><file name="Skin.php" hash="420d0b85798bbd5eb52d40d96eff2868"/></dir></dir></dir><dir name="controllers"><file name="KrakenController.php" hash="d00de7431a787527e6b84b79dc5df547"/><file name="OptimizeController.php" hash="d4a7b8d09b951960c6afd93ea4a3bda9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="71d3f77d2a29e267a1b3b172ac457ccc"/><file name="config.xml" hash="ef19419d77c4b3608ab798116e6620b9"/><file name="system.xml" hash="083bab919a0a16a8ab546815d7526850"/></dir><dir name="sql"><dir name="welance_kraken_setup"><file name="mysql4-install-0.0.1.php" hash="c672010d8288677aea0d008a4ec49d0f"/><file name="mysql4-upgrade-0.0.1-0.0.2.php" hash="f6ec9a39c730faa436d29338b35a21b2"/><file name="mysql4-upgrade-0.0.2-0.0.3.php" hash="884f018b06073d09cd38094251316a12"/><file name="mysql4-upgrade-0.0.3-0.0.4.php" hash="21b4fed490c176909fc54d36f49b6caa"/><file name="mysql4-upgrade-0.0.4-0.0.5.php" hash="3399d922082321a9c9fdb3f4d8ddbbb0"/><file name="mysql4-upgrade-0.0.5-0.0.6.php" hash="8084b2f3b1fe2bad7bbbbd1136974289"/><file name="mysql4-upgrade-0.0.6-2.0.0.php" hash="a62483557a3d026e7c2b57999f8924a4"/><file name="mysql4-upgrade-1.0.0-2.0.0.php" hash="a62483557a3d026e7c2b57999f8924a4"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="kraken.xml" hash="835ecb50d3589a96a696221c59cb9827"/></dir><dir name="template"><dir name="kraken"><dir name="images"><file name="media.phtml" hash="662b54090542b27b1a4b150c0cf11af7"/><file name="skin.phtml" hash="6210665eeb18370b4afb942c72d84a21"/></dir><file name="images.phtml" hash="f4a3760c6340e2a83569a715975c0a88"/><file name="statistics.phtml" hash="f2ac7696fcdc49f3ce74970059ee486e"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Welance_Kraken.xml" hash="5924028abd4db847049907d0685fe928"/></dir></target><target name="mageweb"><dir name="js"><dir name="kraken"><file name="async.js" hash="69a9fc4244b4ed9465d9dc17bfec7e8e"/><file name="jquery.js" hash="895323ed2f7258af4fae2c738c8aea49"/><file name="optimize.js" hash="f346b64d35c52b1e0113014f0eb15685"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="kraken"><file name="images.css" hash="4efcb99215e85cea9ef8904594b35d06"/><file name="kraken-tile.png" hash="f893c560e69916c5df3b4542659c0615"/></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Kraken_Image_Optimizer</name>
4
+ <version>2.0.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/GPL-3.0">GNU General Public License (GPL)</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>This extension enables Magento users to optimize their product, skin and media images by consuming the Kraken.io image optimization API. (https://kraken.io)</summary>
10
  <description>This extension exists for the sole purpose of allowing Magento users to optimize their product, skin and media images by consuming the Kraken.io image optimization API. (https://kraken.io)</description>
11
+ <notes>Fixed SQL query used for fetching unoptimized Media and Skin images</notes>
12
  <authors><author><name>Nekkra UG</name><user>KrakenIO</user><email>support@kraken.io</email></author></authors>
13
+ <date>2015-10-27</date>
14
+ <time>10:45:52</time>
15
+ <contents><target name="magelocal"><dir name="Welance"><dir name="Kraken"><dir name="Block"><dir name="Adminhtml"><dir name="Api"><file name="Signup.php" hash="56a9ee65c5d9fd769b7a5a0854b71a16"/><file name="Status.php" hash="99dd2cb6da9d62e4d8cab36ea29d13e5"/><dir name="User"><file name="Status.php" hash="f33827a151d7ccd76684dde79599c3a2"/></dir></dir><dir name="Images"><file name="Media.php" hash="9dd94a375ceaa004df26d314a935fa63"/><file name="Skin.php" hash="f0dc5623a3974e50ce94b71cae4cd7cd"/></dir><file name="Images.php" hash="77fe1a1c7a0fb28209a741266467db69"/><file name="Statistics.php" hash="6cdae1bc41185b93c49d97465ee75704"/></dir><dir name="Product"><file name="Image.php" hash="2243dae68917d4e49b7c8786d3dc173b"/></dir></dir><dir name="Helper"><file name="Api.php" hash="bdad47443f357c6241005b76304d985e"/><file name="Data.php" hash="855163b8739ae02bc0e68ad071d880e6"/></dir><dir name="Model"><file name="Abstract.php" hash="46ad69f601aa392e44fadf43dc8ff558"/><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Validation"><file name="File.php" hash="03b116c93529a00f064c428519415b90"/><file name="Quality.php" hash="63919067f4576cc1a0c6ef663b1d1779"/></dir></dir><dir name="Source"><file name="Compression.php" hash="516d83f51e2216b45e51d20d6d1f8575"/><file name="Concurrency.php" hash="436d106916fae3d01bd7272e34d9771c"/></dir></dir></dir></dir><dir name="Image"><file name="Cache.php" hash="b1405ed2975e5b2fa0136f7722f03828"/></dir><dir name="Images"><file name="Media.php" hash="3d73a5ba9276744d92de042f4ca5d228"/><file name="Skin.php" hash="d6181c6772baa9a84d26e6adda5c87be"/></dir><file name="Observer.php" hash="8e27670e4c5ce3d62d0fcc5b27b6972a"/><dir name="Product"><file name="Image.php" hash="11c24a47125de4787bf082a2227c1e77"/></dir><dir name="Resource"><dir name="Image"><dir name="Cache"><file name="Collection.php" hash="4f29016539f9586ba707c1815f1e12b6"/></dir><file name="Cache.php" hash="7058d029a436aa3d0be1dc6f3c7fae57"/></dir><dir name="Images"><dir name="Media"><file name="Collection.php" hash="e77abb3c2122a0f5582bf14739935d85"/></dir><file name="Media.php" hash="c6aa05e4362b645b001854e9578ee5d1"/><dir name="Skin"><file name="Collection.php" hash="2e81919a1fa3014a9083b12382fc46e0"/></dir><file name="Skin.php" hash="420d0b85798bbd5eb52d40d96eff2868"/></dir></dir></dir><dir name="controllers"><file name="KrakenController.php" hash="d00de7431a787527e6b84b79dc5df547"/><file name="OptimizeController.php" hash="d4a7b8d09b951960c6afd93ea4a3bda9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="71d3f77d2a29e267a1b3b172ac457ccc"/><file name="config.xml" hash="ef19419d77c4b3608ab798116e6620b9"/><file name="system.xml" hash="083bab919a0a16a8ab546815d7526850"/></dir><dir name="sql"><dir name="welance_kraken_setup"><file name="mysql4-install-0.0.1.php" hash="c672010d8288677aea0d008a4ec49d0f"/><file name="mysql4-upgrade-0.0.1-0.0.2.php" hash="f6ec9a39c730faa436d29338b35a21b2"/><file name="mysql4-upgrade-0.0.2-0.0.3.php" hash="884f018b06073d09cd38094251316a12"/><file name="mysql4-upgrade-0.0.3-0.0.4.php" hash="21b4fed490c176909fc54d36f49b6caa"/><file name="mysql4-upgrade-0.0.4-0.0.5.php" hash="3399d922082321a9c9fdb3f4d8ddbbb0"/><file name="mysql4-upgrade-0.0.5-0.0.6.php" hash="8084b2f3b1fe2bad7bbbbd1136974289"/><file name="mysql4-upgrade-0.0.6-2.0.0.php" hash="a62483557a3d026e7c2b57999f8924a4"/><file name="mysql4-upgrade-1.0.0-2.0.0.php" hash="a62483557a3d026e7c2b57999f8924a4"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="kraken.xml" hash="a2533032af5ce2b9aa1e5506a213faf9"/></dir><dir name="template"><dir name="kraken"><dir name="images"><file name="media.phtml" hash="276ff814433f3b99f7bb418a9b791b62"/><file name="skin.phtml" hash="a6881c5fe4f9390c88fa0f9dc73a7be4"/></dir><file name="images.phtml" hash="f4a3760c6340e2a83569a715975c0a88"/><file name="statistics.phtml" hash="f2ac7696fcdc49f3ce74970059ee486e"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Welance_Kraken.xml" hash="5924028abd4db847049907d0685fe928"/></dir></target><target name="mageweb"><dir name="js"><dir name="kraken"><file name="async.js" hash="69a9fc4244b4ed9465d9dc17bfec7e8e"/><file name="jquery.js" hash="895323ed2f7258af4fae2c738c8aea49"/><file name="optimize.js" hash="b0a5b7e67564574a0d92b6f6c37d2501"/><file name="optimize.v2.min.js" hash="00fe66aea8cef84efcc1a587e6471329"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="kraken"><file name="images.css" hash="4efcb99215e85cea9ef8904594b35d06"/><file name="kraken-tile.png" hash="f893c560e69916c5df3b4542659c0615"/></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>