reGenerate Thumbnails Advanced - Version 2.1.0

Version Description

Release date: 7th June 2019 * Replace the two options Exact size for featured/non-featured images with one checkbox Only featured * Button to stop the regeneration * Make Keep existing be checked by default * Change "Regenerate selected thumbnails" checklist to a settings selection * ShortPixel Image Optimizer integration - call the 'shortpixel-thumbnails-regenerated' action passing only the changed sizes * Fix: Security - Image sizes XSS exploit * Fix: count(): Parameter must be an array

Download this release

Release Info

Developer ShortPixel
Plugin Icon 128x128 reGenerate Thumbnails Advanced
Version 2.1.0
Comparing to
See all releases

Code changes from version 2.0.1 to 2.1.0

classes/rta_admin_controller.php CHANGED
@@ -47,9 +47,15 @@ class rtaAdminController
47
 
48
  if (isset($options['process_image_sizes']) && is_array($options['process_image_sizes']))
49
  $this->process_image_sizes = $options['process_image_sizes'];
 
 
 
50
 
51
  if (isset($options['process_image_options']) && is_array($options['process_image_options']) )
52
  $this->process_image_options = $options['process_image_options'];
 
 
 
53
  }
54
 
55
  public function show()
@@ -88,25 +94,28 @@ class rtaAdminController
88
  return false;
89
  }
90
 
 
 
 
 
91
  public function save_image_sizes() {
92
  global $_wp_additional_image_sizes;
93
 
94
  $jsonReponse = array('message' => '', 'error' => '');
95
  $error = false;
96
- global $rta_lang;
97
  $rta_image_sizes = array();
98
  $option = array();
99
  $exclude = array();
100
 
101
- $nonce = isset($_POST['nonce']) ? $_POST['nonce'] : false;
102
  if (! wp_verify_nonce($nonce, 'rta_save_image_sizes'))
103
  {
104
  $jsonResponse['error'] = 'Invalid Nonce';
105
  return $jsonResponse;
106
  }
107
 
108
- if (isset($_POST['form']))
109
- parse_str($_POST['form'], $formpost);
110
  else
111
  $formpost = array();
112
 
@@ -156,9 +165,7 @@ class rtaAdminController
156
  $this->setOptionData();
157
 
158
  $newsizes = $this->generateImageSizeOptions($sizes);
159
-
160
- $message = $this->controller->rta_get_message_html( $rta_lang['image_sizes_save_message'], 'message' );
161
- $jsonResponse = array( 'error' => $error, 'message' => $message, 'new_image_sizes' => $newsizes );
162
 
163
  return $jsonResponse;
164
 
@@ -215,15 +222,18 @@ class rtaAdminController
215
  $checked = ($check_all || in_array($value, $checked_ar)) ? 'checked' : '';
216
  $hidden = ($checked == 'checked') ? '' : 'hidden'; // hide add. option if not checked.
217
 
218
- $checked_keep = (isset($process_options[$value]) && isset($process_options[$value]['overwrite_files']) && ! $process_options[$value]['overwrite_files'] ) ? 'checked' : true;
 
219
 
 
 
220
 
221
  $output .= "<div class='item'>";
222
  $output .= "<span>
223
  <label> <input type='checkbox' id='regenerate_sizes[$i]' name='regenerate_sizes[$i]' value='$value' $checked>
224
  " . ucfirst($size) . "</label>
225
  </span>";
226
- $output .= "<span class='options $hidden'><label><input type='checkbox' $checked_keep name='keep_" . $value . "'> Keep existing</label></span>";
227
  $output .= "</div>";
228
 
229
  $i++;
47
 
48
  if (isset($options['process_image_sizes']) && is_array($options['process_image_sizes']))
49
  $this->process_image_sizes = $options['process_image_sizes'];
50
+ else
51
+ $this->process_image_sizes = array();
52
+
53
 
54
  if (isset($options['process_image_options']) && is_array($options['process_image_options']) )
55
  $this->process_image_options = $options['process_image_options'];
56
+ else
57
+ $this->process_image_options = array();
58
+
59
  }
60
 
61
  public function show()
94
  return false;
95
  }
96
 
97
+ /** Save thumbnail settings.
98
+ *
99
+ * @return JSON Returns json result data
100
+ */
101
  public function save_image_sizes() {
102
  global $_wp_additional_image_sizes;
103
 
104
  $jsonReponse = array('message' => '', 'error' => '');
105
  $error = false;
 
106
  $rta_image_sizes = array();
107
  $option = array();
108
  $exclude = array();
109
 
110
+ $nonce = isset($_POST['save_nonce']) ? $_POST['save_nonce'] : false;
111
  if (! wp_verify_nonce($nonce, 'rta_save_image_sizes'))
112
  {
113
  $jsonResponse['error'] = 'Invalid Nonce';
114
  return $jsonResponse;
115
  }
116
 
117
+ if (isset($_POST['saveform']))
118
+ parse_str($_POST['saveform'], $formpost);
119
  else
120
  $formpost = array();
121
 
165
  $this->setOptionData();
166
 
167
  $newsizes = $this->generateImageSizeOptions($sizes);
168
+ $jsonResponse = array( 'error' => $error, 'message' => '', 'new_image_sizes' => $newsizes );
 
 
169
 
170
  return $jsonResponse;
171
 
222
  $checked = ($check_all || in_array($value, $checked_ar)) ? 'checked' : '';
223
  $hidden = ($checked == 'checked') ? '' : 'hidden'; // hide add. option if not checked.
224
 
225
+ $option_in_db = (isset($process_options[$value])) ? true : false;
226
+ $checked_keep = (isset($process_options[$value]) && isset($process_options[$value]['overwrite_files']) && ! $process_options[$value]['overwrite_files'] ) ? 'checked' : '';
227
 
228
+ if ($option_in_db)
229
+ $checked .= ' data-setbyuser=true'; // if value was ever saved in DB, don't change it in the JS.
230
 
231
  $output .= "<div class='item'>";
232
  $output .= "<span>
233
  <label> <input type='checkbox' id='regenerate_sizes[$i]' name='regenerate_sizes[$i]' value='$value' $checked>
234
  " . ucfirst($size) . "</label>
235
  </span>";
236
+ $output .= "<span class='options $hidden'><label><input value='1' type='checkbox' $checked_keep name='keep_" . $value . "'> " . __('Keep existing', 'regenerate-thumbnails-advanced') . "</label></span>";
237
  $output .= "</div>";
238
 
239
  $i++;
css/rta-admin-view.css CHANGED
@@ -43,6 +43,7 @@
43
  box-shadow: 0px 0px 4px #aaa; }
44
  .rta-admin .container {
45
  padding: 20px 8px;
 
46
  margin: 0 auto; }
47
  .rta-admin .option {
48
  padding: 10px; }
@@ -136,7 +137,9 @@
136
  width: 200px;
137
  padding: 25px 0; }
138
  .rta-admin section.regenerate .rta_progress {
139
- display: inline-block; }
 
 
140
  .rta-admin section.regenerate .images {
141
  margin-left: 225px;
142
  float: left;
@@ -152,6 +155,26 @@
152
  .rta-admin section.regenerate .rta_hidden {
153
  display: inline-block;
154
  display: none; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  .rta-admin .form_controls {
156
  position: absolute;
157
  left: 45px;
@@ -165,3 +188,7 @@
165
  padding-left: 20px; }
166
  .rta-admin .form_controls .save_indicator .saved {
167
  font-size: 60px; }
 
 
 
 
43
  box-shadow: 0px 0px 4px #aaa; }
44
  .rta-admin .container {
45
  padding: 20px 8px;
46
+ position: relative;
47
  margin: 0 auto; }
48
  .rta-admin .option {
49
  padding: 10px; }
137
  width: 200px;
138
  padding: 25px 0; }
139
  .rta-admin section.regenerate .rta_progress {
140
+ display: inline-block;
141
+ position: relative;
142
+ min-height: 310px; }
143
  .rta-admin section.regenerate .images {
144
  margin-left: 225px;
145
  float: left;
155
  .rta-admin section.regenerate .rta_hidden {
156
  display: inline-block;
157
  display: none; }
158
+ .rta-admin section.regenerate .shortpixel-notice {
159
+ background: #fff;
160
+ width: 250px;
161
+ min-height: 270px;
162
+ border: 1px solid #ccc;
163
+ padding: 15px;
164
+ margin: 0 5% 10px 25px;
165
+ float: right; }
166
+ .rta-admin section.regenerate .shortpixel-notice h3 {
167
+ line-height: 1.3em; }
168
+ .rta-admin section.regenerate .shortpixel-bulk-notice {
169
+ font-size: 14px;
170
+ font-weight: 700;
171
+ text-align: center; }
172
+ .rta-admin section.regenerate button.stop-process {
173
+ position: absolute;
174
+ bottom: 10px;
175
+ left: 80%;
176
+ font-weight: normal;
177
+ text-transform: none; }
178
  .rta-admin .form_controls {
179
  position: absolute;
180
  left: 45px;
188
  padding-left: 20px; }
189
  .rta-admin .form_controls .save_indicator .saved {
190
  font-size: 60px; }
191
+ .rta-admin .form_controls .save_note {
192
+ color: orange;
193
+ float: right;
194
+ margin-left: 30px; }
includes/rta_class.php CHANGED
@@ -15,31 +15,26 @@
15
 
16
  class RTA
17
  {
 
18
 
19
  //Plugin starting point. Will call appropriate actions
20
  public function __construct() {
21
 
22
- add_action( 'plugins_loaded', array( $this, 'rta_init' ) );
23
- add_action( 'wp_enqueue_scripts', array( $this, 'rta_enqueue_scripts' ), 10 );
24
  add_action( 'admin_enqueue_scripts', array( $this, 'rta_enqueue_scripts' ), 10 );
 
 
 
25
  }
26
 
27
  //Plugin initialization
28
  public function rta_init() {
29
 
30
  do_action('rta_before_init');
31
- global $rta_options,$rta_lang;
32
- $rta_options = get_option( 'rta_settings' );
33
- load_plugin_textdomain( 'rta', FALSE, RTA_LANG_DIR );
34
- require_once RTA_PLUGIN_PATH.'language/rta_general.php';
35
-
36
- if(is_admin()){
37
- require_once RTA_PLUGIN_PATH.'rta_admin.php';
38
- }
39
 
40
- require_once (RTA_PLUGIN_PATH.'rta_front.php');
41
- require_once(RTA_PLUGIN_PATH . 'classes/rta_admin_controller.php');
42
- require_once(RTA_PLUGIN_PATH . 'classes/rta_image.php');
43
 
44
  do_action('rta_after_init');
45
  }
@@ -57,7 +52,8 @@ class RTA
57
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
58
  'nonce_savesizes' => wp_create_nonce('rta_save_image_sizes'),
59
  'nonce_generate' => wp_create_nonce('rta_regenerate_thumbnails'),
60
- 'confirm_nosave' => __('Settings not saved. You want to continue?'),
 
61
  ));
62
 
63
  do_action('rta_after_enqueue_scripts');
@@ -82,7 +78,6 @@ class RTA
82
  }
83
 
84
  public function rta_load_template( $template='', $for='front', $attr=array() ) {
85
- global $rta_options,$rta_lang;
86
 
87
  do_action( 'rta_before_load_template', $template, $for, $attr );
88
  $template = apply_filters( 'rta_template_to_load', $template, $for, $attr );
@@ -108,7 +103,6 @@ class RTA
108
  }
109
 
110
  public function rta_get_message_html( $message, $type = 'message' ) {
111
- global $rta_options,$rta_lang;
112
  do_action( 'rta_before_get_message_html', $message, $type );
113
  $message = apply_filters( 'rta_message_text', $message, $type );
114
  $type = apply_filters( 'rta_message_type', $type, $message );
@@ -145,6 +139,25 @@ class RTA
145
  wp_send_json($response);
146
  }
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
 
149
  /* [BS] Seems not in use */
150
  /*
@@ -402,6 +415,4 @@ class RTA
402
 
403
  do_action('rta_after_uninstall');
404
  }
405
- }
406
-
407
- $rta = new RTA();
15
 
16
  class RTA
17
  {
18
+ protected $admin;
19
 
20
  //Plugin starting point. Will call appropriate actions
21
  public function __construct() {
22
 
23
+ add_action( 'init', array( $this, 'rta_init' ) );
24
+ /// add_action( 'wp_enqueue_scripts', array( $this, 'rta_enqueue_scripts' ), 10 );
25
  add_action( 'admin_enqueue_scripts', array( $this, 'rta_enqueue_scripts' ), 10 );
26
+
27
+ //add_filter('media_row_actions', array($this,'add_media_action'), 10, 2);
28
+
29
  }
30
 
31
  //Plugin initialization
32
  public function rta_init() {
33
 
34
  do_action('rta_before_init');
35
+ $this->admin = new RTA_Admin(); // admin hooks.
 
 
 
 
 
 
 
36
 
37
+ load_plugin_textdomain( 'regenerate-thumbnails-advanced', FALSE, RTA_LANG_DIR );
 
 
38
 
39
  do_action('rta_after_init');
40
  }
52
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
53
  'nonce_savesizes' => wp_create_nonce('rta_save_image_sizes'),
54
  'nonce_generate' => wp_create_nonce('rta_regenerate_thumbnails'),
55
+ 'confirm_delete' => __('Are you sure you want to delete this image size?', 'regenerate-thumbnails-advanced'),
56
+ 'confirm_stop' => __("This will stop the regeneration process. You want to stop?", 'regenerate-thumbnails-advanced' ),
57
  ));
58
 
59
  do_action('rta_after_enqueue_scripts');
78
  }
79
 
80
  public function rta_load_template( $template='', $for='front', $attr=array() ) {
 
81
 
82
  do_action( 'rta_before_load_template', $template, $for, $attr );
83
  $template = apply_filters( 'rta_template_to_load', $template, $for, $attr );
103
  }
104
 
105
  public function rta_get_message_html( $message, $type = 'message' ) {
 
106
  do_action( 'rta_before_get_message_html', $message, $type );
107
  $message = apply_filters( 'rta_message_text', $message, $type );
108
  $type = apply_filters( 'rta_message_type', $type, $message );
139
  wp_send_json($response);
140
  }
141
 
142
+ /* @todo To Implement
143
+
144
+ public function add_media_action( $actions, $post) {
145
+ $url = admin_url( "upload.php");
146
+ $url = add_query_arg(array(
147
+ 'action' => 'media_replace',
148
+ 'attachment_id' => $post->ID,
149
+ ), $url);
150
+ $action = "regenerate_thumbnails";
151
+
152
+ $editurl = wp_nonce_url( $url, $action );
153
+ $link = "href=\"$editurl\"";
154
+
155
+ $newaction['regenerate'] = '<a ' . $link . ' aria-label="' . esc_html__("Replace media", "regenerate-thumbnails-advanced") . '" rel="permalink">' . esc_html__("Regenerate Thumbnails", "regenerate-thumbnails-advanced") . '</a>';
156
+ return array_merge($actions,$newaction);
157
+ }
158
+ */
159
+
160
+
161
 
162
  /* [BS] Seems not in use */
163
  /*
415
 
416
  do_action('rta_after_uninstall');
417
  }
418
+ } // class
 
 
includes/rta_install.php CHANGED
@@ -1,26 +1,42 @@
1
- <?php
2
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
-
4
- /**
5
- * Class that will hold functionality for plugin activation
6
- *
7
- * PHP version 5
8
- *
9
- * @category Install
10
- * @package Regenerate Thumbnails ID SCOUT
11
- * @author Muhammad Atiq
12
- * @version 1.0.0
13
- * @since File available since Release 1.0.0
14
- */
15
-
16
- class RTA_Install extends RTA
17
- {
18
- public function __construct() {
19
-
20
- do_action('rta_before_install', $this );
21
-
22
- do_action('rta_after_install', $this );
23
- }
24
- }
25
-
26
- $rta_install = new RTA_Install();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
+
4
+ /**
5
+ * Class that will hold functionality for plugin activation
6
+ *
7
+ * PHP version 5
8
+ *
9
+ * @category Install
10
+ * @package Regenerate Thumbnails ID SCOUT
11
+ * @author Muhammad Atiq
12
+ * @version 1.0.0
13
+ * @since File available since Release 1.0.0
14
+ */
15
+
16
+ class RTA_Install extends RTA
17
+ {
18
+ public function __construct() {
19
+
20
+ do_action('rta_before_install', $this );
21
+
22
+ $options = get_option('rta_image_sizes');
23
+
24
+ if ($options === false) // if no default settings are there; add.
25
+ {
26
+ $standard_sizes = array( 'thumbnail', 'medium', 'medium_large', 'large' ); // directly from media.php, hardcoded there.
27
+ $process_image_options = array();
28
+ foreach($standard_sizes as $name)
29
+ {
30
+ $process_image_options[$name] = array('overwrite_files' => false);
31
+ }
32
+ $options = array();
33
+ $options['process_image_sizes'] = $standard_sizes;
34
+ $options['process_image_options'] = $process_image_options;
35
+ add_option('rta_image_sizes', $options);
36
+ }
37
+
38
+ do_action('rta_after_install', $this );
39
+ }
40
+ }
41
+
42
+ $rta_install = new RTA_Install();
includes/rta_uninstall.php CHANGED
@@ -1,26 +1,26 @@
1
- <?php
2
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
-
4
- /**
5
- * Class that will hold functionality for plugin deactivation
6
- *
7
- * PHP version 5
8
- *
9
- * @category Uninstall
10
- * @package Regenerate Thumbnails ID SCOUT
11
- * @author Muhammad Atiq
12
- * @version 1.0.0
13
- * @since File available since Release 1.0.0
14
- */
15
-
16
- class RTA_Uninstall extends RTA
17
- {
18
- public function __construct() {
19
-
20
- do_action('rta_before_uninstall', $this );
21
-
22
- do_action('rta_after_uninstall', $this );
23
- }
24
- }
25
-
26
  $rta_uninstall = new RTA_Uninstall();
1
+ <?php
2
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
+
4
+ /**
5
+ * Class that will hold functionality for plugin deactivation
6
+ *
7
+ * PHP version 5
8
+ *
9
+ * @category Uninstall
10
+ * @package Regenerate Thumbnails ID SCOUT
11
+ * @author Muhammad Atiq
12
+ * @version 1.0.0
13
+ * @since File available since Release 1.0.0
14
+ */
15
+
16
+ class RTA_Uninstall extends RTA
17
+ {
18
+ public function __construct() {
19
+
20
+ do_action('rta_before_uninstall', $this );
21
+
22
+ do_action('rta_after_uninstall', $this );
23
+ }
24
+ }
25
+
26
  $rta_uninstall = new RTA_Uninstall();
js/rta.js CHANGED
@@ -5,8 +5,9 @@ function rtaJS() {};
5
  rtaJS.prototype = {
6
  offset: 0,
7
  total: 0,
8
- is_interrupted_process: false,
9
- in_process: false,
 
10
  formcookie: null,
11
  is_saved: true,
12
 
@@ -27,7 +28,8 @@ rtaJS.prototype.init = function()
27
  $(document).on('change', '.table.imagesizes input, .table.imagesizes select', $.proxy(this.image_size_changed, this));
28
  $(document).on('click', 'button[name="save_settings"]', $.proxy(this.image_size_changed, this));
29
  $(document).on('click', '.table.imagesizes .btn_remove_row', $.proxy(this.remove_image_size_row, this));
30
- $(document).on('click', '#btn_add_image_size', $.proxy(this.add_image_size_row));
 
31
 
32
  $(document).on('click', '.rta_error_link', $.proxy(function () { this.show_errorbox(true); }, this) ) ;
33
  this.formcookie = this.get_form_cookie();
@@ -58,7 +60,7 @@ rtaJS.prototype.checkSubmitReady = function()
58
  if (inputs.length == 0)
59
  processReady = false;
60
 
61
- if (this.in_process)
62
  processReady = false;
63
 
64
  if (processReady)
@@ -75,13 +77,16 @@ rtaJS.prototype.checkSubmitReady = function()
75
  {
76
  $('button[name="save_settings"]').prop('disabled', true);
77
  $('button[name="save_settings"]').addClass('disabled');
 
 
78
  }
79
  else {
80
  $('button[name="save_settings"]').prop('disabled', false);
81
  $('button[name="save_settings"]').removeClass('disabled');
82
-
83
  }
84
 
 
85
  }
86
 
87
  rtaJS.prototype.selectAll = function(e)
@@ -103,21 +108,15 @@ rtaJS.prototype.processInit = function (e)
103
  {
104
  e.preventDefault();
105
 
106
- if (! this.is_saved)
107
- {
108
- if(! confirm(rta_data.confirm_nosave)) {
109
- return false;
110
- }
111
- }
112
-
113
  this.unset_all_cookies();
114
  this.show_errorbox(false);
115
  this.hide_progress();
116
- //this.show_errorlink(false);
117
- // this.show_progress(0);
118
  this.show_wait(true);
119
 
120
  this.in_process = true;
 
121
  this.checkSubmitReady();
122
  this.set_form_cookie();
123
 
@@ -129,11 +128,11 @@ rtaJS.prototype.processInit = function (e)
129
  dataType: 'json',
130
  url: rta_data.ajaxurl,
131
  data: {
132
- nonce: rta_data.nonce_generate,
133
  action: 'rta_regenerate_thumbnails',
134
  type: 'general',
135
- form: JSON.stringify(form),
136
- },
137
  success: function (response) {
138
  if( response.pCount > 0 ) {
139
  self.offset = 0;
@@ -151,6 +150,8 @@ rtaJS.prototype.processInit = function (e)
151
 
152
  rtaJS.prototype.process = function()
153
  {
 
 
154
  offset = this.offset;
155
  total = this.total;
156
 
@@ -169,21 +170,24 @@ rtaJS.prototype.process = function()
169
  dataType: 'json',
170
  url: rta_data.ajaxurl,
171
  data: {
172
- nonce: rta_data.nonce_generate,
173
  action: 'rta_regenerate_thumbnails',
174
  type: 'submit',
175
  offset:offset,
176
- form: JSON.stringify(form),
177
  },
178
  success: function (response) {
179
  if( response.offset <= total ) {
180
  if(response.logstatus=='Processed') {
181
  $(".rta_progress .images img").attr("src",response.imgUrl);
182
  }
183
- self.set_process_cookie(response.offset,total);
184
- self.offset = response.offset;
185
 
186
- setTimeout(function(){ self.process(); },1000);
 
 
 
 
 
187
  }else{
188
  self.set_cookie("rta_image_processed",$(".rta_progress .images img").attr("src"));
189
  //this.show_buttons();
@@ -209,8 +213,22 @@ rtaJS.prototype.process = function()
209
  this.is_interrupted_process = false;
210
 
211
  this.show_wait(false);
 
 
212
  this.checkSubmitReady();
 
213
 
 
 
 
 
 
 
 
 
 
 
 
214
  }
215
 
216
  rtaJS.prototype.show_progress = function(percentage_done) {
@@ -230,6 +248,7 @@ rtaJS.prototype.process = function()
230
 
231
  this.show_wait(false);
232
  $('.rta_progress').removeClass('rta_hidden');
 
233
  $(".rta_progress").slideDown();
234
  $(".rta_progress").css('display', 'inline-block');
235
  }
@@ -300,8 +319,9 @@ rtaJS.prototype.process = function()
300
  this.set_cookie('rta_last_settings', '');
301
  }
302
 
303
- rtaJS.prototype.set_default_values = function() {
304
- }
 
305
 
306
  rtaJS.prototype.set_process_cookie = function(offset, total)
307
  {
@@ -443,8 +463,8 @@ rtaJS.prototype.process = function()
443
  url: rta_data.ajaxurl,
444
  data: {
445
  action: action,
446
- nonce: the_nonce,
447
- form: $('#rta_settings_form').serialize(),
448
  },
449
  success: function (response) {
450
  if (! response.error)
@@ -479,10 +499,18 @@ rtaJS.prototype.process = function()
479
  this.checkSubmitReady();
480
  }
481
 
 
 
 
 
 
 
 
 
482
  rtaJS.prototype.remove_image_size_row = function(e) {
483
  var rowid = $(e.target).parents('.row').attr('id');
484
 
485
- if(confirm("Are you sure you want delete it?")) {
486
  var intName = $('#' + rowid).find('.image_sizes_name').val();
487
  $('input[name^="regenerate_sizes"][value="' + intName + '"]').remove(); // remove the checkbox as well, otherwise this will remain saved.
488
 
@@ -499,6 +527,13 @@ rtaJS.prototype.process = function()
499
  if ($(this).is(':checked'))
500
  {
501
  $(this).parents('.item').find('.options').removeClass('hidden');
 
 
 
 
 
 
 
502
  }
503
  else {
504
  $(this).parents('.item').find('.options').addClass('hidden');
5
  rtaJS.prototype = {
6
  offset: 0,
7
  total: 0,
8
+ is_interrupted_process: false, // was the process killed by reload earlier?
9
+ in_process: false, // currently pushing it through.
10
+ is_stopped: false,
11
  formcookie: null,
12
  is_saved: true,
13
 
28
  $(document).on('change', '.table.imagesizes input, .table.imagesizes select', $.proxy(this.image_size_changed, this));
29
  $(document).on('click', 'button[name="save_settings"]', $.proxy(this.image_size_changed, this));
30
  $(document).on('click', '.table.imagesizes .btn_remove_row', $.proxy(this.remove_image_size_row, this));
31
+ $(document).on('click', '#btn_add_image_size', $.proxy(this.add_image_size_row, this));
32
+ $(document).on('click', '.stop-process', $.proxy(this.stopProcess,this));
33
 
34
  $(document).on('click', '.rta_error_link', $.proxy(function () { this.show_errorbox(true); }, this) ) ;
35
  this.formcookie = this.get_form_cookie();
60
  if (inputs.length == 0)
61
  processReady = false;
62
 
63
+ if (this.in_process || ! this.is_saved)
64
  processReady = false;
65
 
66
  if (processReady)
77
  {
78
  $('button[name="save_settings"]').prop('disabled', true);
79
  $('button[name="save_settings"]').addClass('disabled');
80
+ $('.save_note').addClass('rta_hidden');
81
+
82
  }
83
  else {
84
  $('button[name="save_settings"]').prop('disabled', false);
85
  $('button[name="save_settings"]').removeClass('disabled');
86
+ $('.save_note').removeClass('rta_hidden');
87
  }
88
 
89
+
90
  }
91
 
92
  rtaJS.prototype.selectAll = function(e)
108
  {
109
  e.preventDefault();
110
 
 
 
 
 
 
 
 
111
  this.unset_all_cookies();
112
  this.show_errorbox(false);
113
  this.hide_progress();
114
+ this.toggleShortPixelNotice(false);
115
+
116
  this.show_wait(true);
117
 
118
  this.in_process = true;
119
+ this.is_stopped = false;
120
  this.checkSubmitReady();
121
  this.set_form_cookie();
122
 
128
  dataType: 'json',
129
  url: rta_data.ajaxurl,
130
  data: {
131
+ gen_nonce: rta_data.nonce_generate,
132
  action: 'rta_regenerate_thumbnails',
133
  type: 'general',
134
+ genform: JSON.stringify(form),
135
+ },
136
  success: function (response) {
137
  if( response.pCount > 0 ) {
138
  self.offset = 0;
150
 
151
  rtaJS.prototype.process = function()
152
  {
153
+ if (this.is_stopped)
154
+ return; // escape if process has been stopped.
155
  offset = this.offset;
156
  total = this.total;
157
 
170
  dataType: 'json',
171
  url: rta_data.ajaxurl,
172
  data: {
173
+ gen_nonce: rta_data.nonce_generate,
174
  action: 'rta_regenerate_thumbnails',
175
  type: 'submit',
176
  offset:offset,
177
+ genform: JSON.stringify(form),
178
  },
179
  success: function (response) {
180
  if( response.offset <= total ) {
181
  if(response.logstatus=='Processed') {
182
  $(".rta_progress .images img").attr("src",response.imgUrl);
183
  }
 
 
184
 
185
+ if (! self.is_stopped)
186
+ {
187
+ self.set_process_cookie(response.offset,total);
188
+ self.offset = response.offset;
189
+ setTimeout(function(){ self.process(); },400);
190
+ }
191
  }else{
192
  self.set_cookie("rta_image_processed",$(".rta_progress .images img").attr("src"));
193
  //this.show_buttons();
213
  this.is_interrupted_process = false;
214
 
215
  this.show_wait(false);
216
+ this.toggleShortPixelNotice(true);
217
+ $('.stop-process').addClass('rta_hidden');
218
  this.checkSubmitReady();
219
+ }
220
 
221
+ rtaJS.prototype.stopProcess = function()
222
+ {
223
+ if (confirm(rta_data.confirm_stop))
224
+ {
225
+ this.is_stopped = true;
226
+ this.unset_all_cookies();
227
+ this.finishProcess();
228
+ this.hide_progress();
229
+ this.toggleShortPixelNotice(false);
230
+ // this.checkSubmitReady();
231
+ }
232
  }
233
 
234
  rtaJS.prototype.show_progress = function(percentage_done) {
248
 
249
  this.show_wait(false);
250
  $('.rta_progress').removeClass('rta_hidden');
251
+ $('.stop-process').removeClass('rta_hidden');
252
  $(".rta_progress").slideDown();
253
  $(".rta_progress").css('display', 'inline-block');
254
  }
319
  this.set_cookie('rta_last_settings', '');
320
  }
321
 
322
+ /* Empty function, disabling
323
+ rtaJS.prototype.set_default_values = function() {
324
+ } */
325
 
326
  rtaJS.prototype.set_process_cookie = function(offset, total)
327
  {
463
  url: rta_data.ajaxurl,
464
  data: {
465
  action: action,
466
+ save_nonce: the_nonce,
467
+ saveform: $('#rta_settings_form').serialize(),
468
  },
469
  success: function (response) {
470
  if (! response.error)
499
  this.checkSubmitReady();
500
  }
501
 
502
+ rtaJS.prototype.toggleShortPixelNotice = function(show)
503
+ {
504
+ if (show)
505
+ $('.shortpixel-bulk-notice, .shortpixel-notice').removeClass('rta_hidden');
506
+ else
507
+ $('.shortpixel-bulk-notice, .shortpixel-notice').addClass('rta_hidden');
508
+ }
509
+
510
  rtaJS.prototype.remove_image_size_row = function(e) {
511
  var rowid = $(e.target).parents('.row').attr('id');
512
 
513
+ if(confirm( rta_data.confirm_delete )) {
514
  var intName = $('#' + rowid).find('.image_sizes_name').val();
515
  $('input[name^="regenerate_sizes"][value="' + intName + '"]').remove(); // remove the checkbox as well, otherwise this will remain saved.
516
 
527
  if ($(this).is(':checked'))
528
  {
529
  $(this).parents('.item').find('.options').removeClass('hidden');
530
+ var input = $(this).parents('.item').find('input[type="checkbox"]');
531
+
532
+ if (typeof $(input).data('setbyuser') == 'undefined')
533
+ {
534
+ $(input).prop('checked', true);
535
+ $(input).data('setbyuser', true);
536
+ }
537
  }
538
  else {
539
  $(this).parents('.item').find('.options').addClass('hidden');
js/rta.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(e){function t(){}(t.prototype={offset:0,total:0,is_interrupted_process:!1,in_process:!1,formcookie:null,is_saved:!0}).init=function(){this.checkSubmitReady(),e(".select, .deselect").on("click",e.proxy(this.selectAll,this)),e(document).on("change","input, select",e.proxy(this.checkSubmitReady,this)),e(document).on("click",".rta_regenerate",e.proxy(this.processInit,this)),e(document).on("change",".table.imagesizes input, .table.imagesizes select",e.proxy(this.image_size_changed,this)),e(document).on("click",'button[name="save_settings"]',e.proxy(this.image_size_changed,this)),e(document).on("click",".table.imagesizes .btn_remove_row",e.proxy(this.remove_image_size_row,this)),e(document).on("click","#btn_add_image_size",e.proxy(this.add_image_size_row)),e(document).on("click",".rta_error_link",e.proxy(function(){this.show_errorbox(!0)},this)),this.formcookie=this.get_form_cookie(),e(document).on("change",".rta-settings-wrap input, .rta-settings-wrap select",e.proxy(this.show_save_indicator,this)),e(document).on("change",'input[name^="regenerate_sizes"]',e.proxy(this.checkOptionsVisible,this));var t=parseInt(this.get_cookie("rta_offset")),s=parseInt(this.get_cookie("rta_total"));isNaN(t)||isNaN(s)||t<s&&(this.is_interrupted_process=!0,this.offset=t,this.total=s,this.process())},t.prototype.checkSubmitReady=function(){processReady=!0,inputs=e('input[name^="regenerate_sizes"]:checked'),0==inputs.length&&(processReady=!1),this.in_process&&(processReady=!1),processReady?(e("button.rta_regenerate").removeClass("disabled"),e("button.rta_regenerate").prop("disabled",!1)):(e("button.rta_regenerate").addClass("disabled"),e("button.rta_regenerate").prop("disabled",!0)),this.is_saved?(e('button[name="save_settings"]').prop("disabled",!0),e('button[name="save_settings"]').addClass("disabled")):(e('button[name="save_settings"]').prop("disabled",!1),e('button[name="save_settings"]').removeClass("disabled"))},t.prototype.selectAll=function(t){var s=e(t.target).data("action"),r=e(t.target).data("target");checked="select"==s,e('input[name^="'+r+'"]').prop("checked",checked).trigger("change")},t.prototype.processInit=function(t){if(t.preventDefault(),!this.is_saved&&!confirm(rta_data.confirm_nosave))return!1;this.unset_all_cookies(),this.show_errorbox(!1),this.hide_progress(),this.show_wait(!0),this.in_process=!0,this.checkSubmitReady(),this.set_form_cookie();var s=this,r=this.get_form_cookie();e.ajax({type:"POST",dataType:"json",url:rta_data.ajaxurl,data:{nonce:rta_data.nonce_generate,action:"rta_regenerate_thumbnails",type:"general",form:JSON.stringify(r)},success:function(e){e.pCount>0?(s.offset=0,s.total=e.pCount,s.set_process_cookie(s.offset,s.total),s.process()):(s.finishProcess(),s.add_error(e.logstatus),s.show_errorlink(!0))}})},t.prototype.process=function(){offset=this.offset,total=this.total,this.in_process=!0,this.checkSubmitReady();var t=Math.round(offset/total*100);this.show_progress(t);var s=this,r=this.get_form_cookie();offset<total?e.ajax({type:"POST",dataType:"json",url:rta_data.ajaxurl,data:{nonce:rta_data.nonce_generate,action:"rta_regenerate_thumbnails",type:"submit",offset:offset,form:JSON.stringify(r)},success:function(t){t.offset<=total?("Processed"==t.logstatus&&e(".rta_progress .images img").attr("src",t.imgUrl),s.set_process_cookie(t.offset,total),s.offset=t.offset,setTimeout(function(){s.process()},1e3)):(s.set_cookie("rta_image_processed",e(".rta_progress .images img").attr("src")),s.show_errorlink(!0)),e.isArray(t.error)&&t.error.length>0&&s.add_error(t.logstatus)}}):(this.set_cookie("rta_image_processed",e(".rta_progress .images img").attr("src")),this.finishProcess(),this.show_errorlink(!0))},t.prototype.finishProcess=function(){this.in_process=!1,this.is_interrupted_process=!1,this.show_wait(!1),this.checkSubmitReady()},t.prototype.show_progress=function(t){-1!=e(".rta_progress .images img").attr("src").indexOf("http")?e(".rta_progress .images").css("opacity",100):e(".rta_progress .images").css("opacity",0);var s=289.027;t>0&&(s=Math.round(s-s*t/100)),e(".CircularProgressbar-path").css("stroke-dashoffset",s+"px"),e(".CircularProgressbar-text").html(t+"%"),e(".rta_progress").is(":visible")||(this.show_wait(!1),e(".rta_progress").removeClass("rta_hidden"),e(".rta_progress").slideDown(),e(".rta_progress").css("display","inline-block"))},t.prototype.show_wait=function(t){t?e(".rta_wait_loader").show().removeClass("rta_hidden"):e(".rta_wait_loader").hide()},t.prototype.add_error=function(t){if(""!=t){var s="";if(e.isArray(t))for(var r=0;r<=t.length;r++)s=s+'<li class="list-group-item headLi">'+t[r]+"</li>";else s='<li class="list-group-item headLi">'+t+"</li>";e(".rta_error_box ul").append(s),this.set_cookie("rta_error_box_ul",e(".rta_error_box ul").html())}},t.prototype.show_errorbox=function(t){return t?!e(".rta_error_box").is(":visible")&&e(".rta_error_box ul li").length&&e(".rta_error_box").removeClass("rta_hidden").slideDown():(e(".rta_error_box").slideUp(10),e(".rta_error_box ul").html(""),e(".rta_error_link").slideUp(10)),!1},t.prototype.show_errorlink=function(){!e(".rta_error_link").is(":visible")&&e(".rta_error_box ul li").length&&e(".rta_error_link").removeClass("rta_hidden").slideDown()},t.prototype.hide_progress=function(){var e=jQuery;e(".rta_progress .images img").attr("src",""),e(".CircularProgressbar-path").css("stroke-dashoffset","289.027px"),e(".rta_progress .images").css("opacity",0),e(".rta_progress").slideUp(),e(".CircularProgressbar-text").html("0%")},t.prototype.unset_all_cookies=function(){this.set_cookie("rta_image_processed",""),this.set_cookie("rta_offset",""),this.set_cookie("rta_total",""),this.set_cookie("rta_last_settings","")},t.prototype.set_default_values=function(){},t.prototype.set_process_cookie=function(e,t){e=parseInt(e),t=parseInt(t),isNaN(e)||this.set_cookie("rta_offset",e),isNaN(t)||this.set_cookie("rta_total",t)},t.prototype.get_form_cookie=function(){var e=this.get_cookie("rta_last_settings");return formcookie={},e.length>0&&(formcookie=JSON.parse(e)),formcookie},t.prototype.set_form_cookie=function(){var t={};e("#frm_rta_image_sizes").find("input, select").each(function(){var s=e(this).val(),r=e(this).attr("name");return r.indexOf("image_sizes[")>=0||("checkbox"==e(this).attr("type")&&!e(this).prop("checked")||(matches=r.match(/(.*?)\[(.*)\]/),void(null!==matches?(t[matches[1]]||(t[matches[1]]=[]),t[matches[1]][matches[2]]=s):t[r]=s)))}),this.set_cookie("rta_last_settings",JSON.stringify(t),10)},t.prototype.set_cookie=function(e,t,s){var r=new Date;r.setTime(r.getTime()+24*s*60*60*1e3);var o="expires="+r.toUTCString();document.cookie=e+"="+t+";"+o+";path=/"},t.prototype.get_cookie=function(e){for(var t=e+"=",s=decodeURIComponent(document.cookie).split(";"),r=0;r<s.length;r++){for(var o=s[r];" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""},t.prototype.add_image_size_row=function(){var e=jQuery,t=e(".table.imagesizes"),s=Math.random().toString(36).substring(2)+(new Date).getTime().toString(36),r=e(".row.proto").clone();e(r).attr("id",s),e(r).removeClass("proto"),t.append(r.css("display","table-row")),t.find(".header").removeClass("rta_hidden")},t.prototype.image_size_changed=function(t){t.preventDefault();var s=e(t.target).parents(".row").attr("id");this.update_thumb_name(s),this.save_image_sizes()},t.prototype.update_thumb_name=function(t){if(e("#"+t).length){var s=e("#"+t+" .image_sizes_name").val(),r=e("#"+t+" .image_sizes_width").val(),o=e("#"+t+" .image_sizes_height").val(),i=e("#"+t+" .image_sizes_cropping").val(),a=e("#"+t+" .image_sizes_pname").val();r<=0&&(r=""),o<=0&&(o="");var n=("rta_thumb "+i+" "+r+"x"+o).toLowerCase().replace(/ /g,"_");e('input[name^="regenerate_sizes"][value="'+s+'"]').val(n),a.length<=0&&e('input[name^="regenerate_sizes"][value="'+s+'"]').text(n),e('input[name="keep_'+s+'"]').attr("name","keep_"+n),e("#"+t+" .image_sizes_name").val(n)}},t.prototype.save_image_sizes=function(){this.settings_doingsave_indicator(!0);var t=rta_data.nonce_savesizes,s=this;e.ajax({type:"POST",dataType:"json",url:rta_data.ajaxurl,data:{action:"rta_save_image_sizes",nonce:t,form:e("#rta_settings_form").serialize()},success:function(t){t.error||t.new_image_sizes&&(e(".thumbnail_select .checkbox-list").fadeOut(80).html(t.new_image_sizes).fadeIn(80),s.checkOptionsVisible()),s.is_saved=!0,s.settings_doingsave_indicator(!1),s.checkSubmitReady()}})},t.prototype.settings_doingsave_indicator=function(t){t?e(".form_controls .save_indicator").fadeIn(20):e(".form_controls .save_indicator").fadeOut(100)},t.prototype.show_save_indicator=function(){this.is_saved=!1,this.checkSubmitReady()},t.prototype.remove_image_size_row=function(t){var s=e(t.target).parents(".row").attr("id");if(confirm("Are you sure you want delete it?")){var r=e("#"+s).find(".image_sizes_name").val();e('input[name^="regenerate_sizes"][value="'+r+'"]').remove(),e("#"+s).remove(),this.save_image_sizes()}},t.prototype.checkOptionsVisible=function(){e('input[name^="regenerate_sizes"]').each(function(){e(this).is(":checked")?e(this).parents(".item").find(".options").removeClass("hidden"):e(this).parents(".item").find(".options").addClass("hidden")})},window.rtaJS=new t,window.rtaJS.init()});
1
+ jQuery(document).ready(function(e){function t(){}(t.prototype={offset:0,total:0,is_interrupted_process:!1,in_process:!1,formcookie:null,is_saved:!0}).init=function(){this.checkSubmitReady(),e(".select, .deselect").on("click",e.proxy(this.selectAll,this)),e(document).on("change","input, select",e.proxy(this.checkSubmitReady,this)),e(document).on("click",".rta_regenerate",e.proxy(this.processInit,this)),e(document).on("change",".table.imagesizes input, .table.imagesizes select",e.proxy(this.image_size_changed,this)),e(document).on("click",'button[name="save_settings"]',e.proxy(this.image_size_changed,this)),e(document).on("click",".table.imagesizes .btn_remove_row",e.proxy(this.remove_image_size_row,this)),e(document).on("click","#btn_add_image_size",e.proxy(this.add_image_size_row)),e(document).on("click",".rta_error_link",e.proxy(function(){this.show_errorbox(!0)},this)),this.formcookie=this.get_form_cookie(),e(document).on("change",".rta-settings-wrap input, .rta-settings-wrap select",e.proxy(this.show_save_indicator,this)),e(document).on("change",'input[name^="regenerate_sizes"]',e.proxy(this.checkOptionsVisible,this));var t=parseInt(this.get_cookie("rta_offset")),s=parseInt(this.get_cookie("rta_total"));isNaN(t)||isNaN(s)||t<s&&(this.is_interrupted_process=!0,this.offset=t,this.total=s,this.process())},t.prototype.checkSubmitReady=function(){processReady=!0,inputs=e('input[name^="regenerate_sizes"]:checked'),0==inputs.length&&(processReady=!1),!this.in_process&&this.is_saved||(processReady=!1),processReady?(e("button.rta_regenerate").removeClass("disabled"),e("button.rta_regenerate").prop("disabled",!1)):(e("button.rta_regenerate").addClass("disabled"),e("button.rta_regenerate").prop("disabled",!0)),this.is_saved?(e('button[name="save_settings"]').prop("disabled",!0),e('button[name="save_settings"]').addClass("disabled"),e(".save_note").addClass("rta_hidden")):(e('button[name="save_settings"]').prop("disabled",!1),e('button[name="save_settings"]').removeClass("disabled"),e(".save_note").removeClass("rta_hidden"))},t.prototype.selectAll=function(t){var s=e(t.target).data("action"),r=e(t.target).data("target");checked="select"==s,e('input[name^="'+r+'"]').prop("checked",checked).trigger("change")},t.prototype.processInit=function(t){t.preventDefault(),this.unset_all_cookies(),this.show_errorbox(!1),this.hide_progress(),this.toggleShortPixelNotice(!1),this.show_wait(!0),this.in_process=!0,this.checkSubmitReady(),this.set_form_cookie();var s=this,r=this.get_form_cookie();e.ajax({type:"POST",dataType:"json",url:rta_data.ajaxurl,data:{gen_nonce:rta_data.nonce_generate,action:"rta_regenerate_thumbnails",type:"general",genform:JSON.stringify(r)},success:function(e){e.pCount>0?(s.offset=0,s.total=e.pCount,s.set_process_cookie(s.offset,s.total),s.process()):(s.finishProcess(),s.add_error(e.logstatus),s.show_errorlink(!0))}})},t.prototype.process=function(){offset=this.offset,total=this.total,this.in_process=!0,this.checkSubmitReady();var t=Math.round(offset/total*100);this.show_progress(t);var s=this,r=this.get_form_cookie();offset<total?e.ajax({type:"POST",dataType:"json",url:rta_data.ajaxurl,data:{gen_nonce:rta_data.nonce_generate,action:"rta_regenerate_thumbnails",type:"submit",offset:offset,genform:JSON.stringify(r)},success:function(t){t.offset<=total?("Processed"==t.logstatus&&e(".rta_progress .images img").attr("src",t.imgUrl),s.set_process_cookie(t.offset,total),s.offset=t.offset,setTimeout(function(){s.process()},1e3)):(s.set_cookie("rta_image_processed",e(".rta_progress .images img").attr("src")),s.show_errorlink(!0)),e.isArray(t.error)&&t.error.length>0&&s.add_error(t.logstatus)}}):(this.set_cookie("rta_image_processed",e(".rta_progress .images img").attr("src")),this.finishProcess(),this.show_errorlink(!0))},t.prototype.finishProcess=function(){this.in_process=!1,this.is_interrupted_process=!1,this.show_wait(!1),this.toggleShortPixelNotice(!0),this.checkSubmitReady()},t.prototype.show_progress=function(t){-1!=e(".rta_progress .images img").attr("src").indexOf("http")?e(".rta_progress .images").css("opacity",100):e(".rta_progress .images").css("opacity",0);var s=289.027;t>0&&(s=Math.round(s-s*t/100)),e(".CircularProgressbar-path").css("stroke-dashoffset",s+"px"),e(".CircularProgressbar-text").html(t+"%"),e(".rta_progress").is(":visible")||(this.show_wait(!1),e(".rta_progress").removeClass("rta_hidden"),e(".rta_progress").slideDown(),e(".rta_progress").css("display","inline-block"))},t.prototype.show_wait=function(t){t?e(".rta_wait_loader").show().removeClass("rta_hidden"):e(".rta_wait_loader").hide()},t.prototype.add_error=function(t){if(""!=t){var s="";if(e.isArray(t))for(var r=0;r<=t.length;r++)s=s+'<li class="list-group-item headLi">'+t[r]+"</li>";else s='<li class="list-group-item headLi">'+t+"</li>";e(".rta_error_box ul").append(s),this.set_cookie("rta_error_box_ul",e(".rta_error_box ul").html())}},t.prototype.show_errorbox=function(t){return t?!e(".rta_error_box").is(":visible")&&e(".rta_error_box ul li").length&&e(".rta_error_box").removeClass("rta_hidden").slideDown():(e(".rta_error_box").slideUp(10),e(".rta_error_box ul").html(""),e(".rta_error_link").slideUp(10)),!1},t.prototype.show_errorlink=function(){!e(".rta_error_link").is(":visible")&&e(".rta_error_box ul li").length&&e(".rta_error_link").removeClass("rta_hidden").slideDown()},t.prototype.hide_progress=function(){var e=jQuery;e(".rta_progress .images img").attr("src",""),e(".CircularProgressbar-path").css("stroke-dashoffset","289.027px"),e(".rta_progress .images").css("opacity",0),e(".rta_progress").slideUp(),e(".CircularProgressbar-text").html("0%")},t.prototype.unset_all_cookies=function(){this.set_cookie("rta_image_processed",""),this.set_cookie("rta_offset",""),this.set_cookie("rta_total",""),this.set_cookie("rta_last_settings","")},t.prototype.set_default_values=function(){},t.prototype.set_process_cookie=function(e,t){e=parseInt(e),t=parseInt(t),isNaN(e)||this.set_cookie("rta_offset",e),isNaN(t)||this.set_cookie("rta_total",t)},t.prototype.get_form_cookie=function(){var e=this.get_cookie("rta_last_settings");return formcookie={},e.length>0&&(formcookie=JSON.parse(e)),formcookie},t.prototype.set_form_cookie=function(){var t={};e("#frm_rta_image_sizes").find("input, select").each(function(){var s=e(this).val(),r=e(this).attr("name");return r.indexOf("image_sizes[")>=0||("checkbox"==e(this).attr("type")&&!e(this).prop("checked")||(matches=r.match(/(.*?)\[(.*)\]/),void(null!==matches?(t[matches[1]]||(t[matches[1]]=[]),t[matches[1]][matches[2]]=s):t[r]=s)))}),this.set_cookie("rta_last_settings",JSON.stringify(t),10)},t.prototype.set_cookie=function(e,t,s){var r=new Date;r.setTime(r.getTime()+24*s*60*60*1e3);var o="expires="+r.toUTCString();document.cookie=e+"="+t+";"+o+";path=/"},t.prototype.get_cookie=function(e){for(var t=e+"=",s=decodeURIComponent(document.cookie).split(";"),r=0;r<s.length;r++){for(var o=s[r];" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""},t.prototype.add_image_size_row=function(){var e=jQuery,t=e(".table.imagesizes"),s=Math.random().toString(36).substring(2)+(new Date).getTime().toString(36),r=e(".row.proto").clone();e(r).attr("id",s),e(r).removeClass("proto"),t.append(r.css("display","table-row")),t.find(".header").removeClass("rta_hidden")},t.prototype.image_size_changed=function(t){t.preventDefault();var s=e(t.target).parents(".row").attr("id");this.update_thumb_name(s),this.save_image_sizes()},t.prototype.update_thumb_name=function(t){if(e("#"+t).length){var s=e("#"+t+" .image_sizes_name").val(),r=e("#"+t+" .image_sizes_width").val(),o=e("#"+t+" .image_sizes_height").val(),i=e("#"+t+" .image_sizes_cropping").val(),a=e("#"+t+" .image_sizes_pname").val();r<=0&&(r=""),o<=0&&(o="");var n=("rta_thumb "+i+" "+r+"x"+o).toLowerCase().replace(/ /g,"_");e('input[name^="regenerate_sizes"][value="'+s+'"]').val(n),a.length<=0&&e('input[name^="regenerate_sizes"][value="'+s+'"]').text(n),e('input[name="keep_'+s+'"]').attr("name","keep_"+n),e("#"+t+" .image_sizes_name").val(n)}},t.prototype.save_image_sizes=function(){this.settings_doingsave_indicator(!0);var t=rta_data.nonce_savesizes,s=this;e.ajax({type:"POST",dataType:"json",url:rta_data.ajaxurl,data:{action:"rta_save_image_sizes",save_nonce:t,saveform:e("#rta_settings_form").serialize()},success:function(t){t.error||t.new_image_sizes&&(e(".thumbnail_select .checkbox-list").fadeOut(80).html(t.new_image_sizes).fadeIn(80),s.checkOptionsVisible()),s.is_saved=!0,s.settings_doingsave_indicator(!1),s.checkSubmitReady()}})},t.prototype.settings_doingsave_indicator=function(t){t?e(".form_controls .save_indicator").fadeIn(20):e(".form_controls .save_indicator").fadeOut(100)},t.prototype.show_save_indicator=function(){this.is_saved=!1,this.checkSubmitReady()},t.prototype.toggleShortPixelNotice=function(t){t?e(".shortpixel-bulk-notice, .shortpixel-notice").removeClass("rta_hidden"):e(".shortpixel-bulk-notice, .shortpixel-notice").addClass("rta_hidden")},t.prototype.remove_image_size_row=function(t){var s=e(t.target).parents(".row").attr("id");if(confirm(rta_data.confirm_delete)){var r=e("#"+s).find(".image_sizes_name").val();e('input[name^="regenerate_sizes"][value="'+r+'"]').remove(),e("#"+s).remove(),this.save_image_sizes()}},t.prototype.checkOptionsVisible=function(){e('input[name^="regenerate_sizes"]').each(function(){e(this).is(":checked")?e(this).parents(".item").find(".options").removeClass("hidden"):e(this).parents(".item").find(".options").addClass("hidden")})},window.rtaJS=new t,window.rtaJS.init()});
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.me/resizeImage
4
  Tags: regenerate, thumbnail, thumbnails, thumb, thumbs, easy, media, force regenerate, image, images, pics, date
5
  Requires at least: 4.0
6
  Tested up to: 5.2
7
- Stable tag: 2.0.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -54,6 +54,17 @@ The script stops but it will resume after you open the settings page of the plug
54
 
55
  == Changelog ==
56
 
 
 
 
 
 
 
 
 
 
 
 
57
  = 2.0.1 =
58
 
59
  Release date: 17th April 2019
4
  Tags: regenerate, thumbnail, thumbnails, thumb, thumbs, easy, media, force regenerate, image, images, pics, date
5
  Requires at least: 4.0
6
  Tested up to: 5.2
7
+ Stable tag: 2.1.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
54
 
55
  == Changelog ==
56
 
57
+ = 2.1.0 =
58
+
59
+ Release date: 7th June 2019
60
+ * Replace the two options Exact size for featured/non-featured images with one checkbox Only featured
61
+ * Button to stop the regeneration
62
+ * Make Keep existing be checked by default
63
+ * Change "Regenerate selected thumbnails" checklist to a settings selection
64
+ * ShortPixel Image Optimizer integration - call the 'shortpixel-thumbnails-regenerated' action passing only the changed sizes
65
+ * Fix: Security - Image sizes XSS exploit
66
+ * Fix: count(): Parameter must be an array
67
+
68
  = 2.0.1 =
69
 
70
  Release date: 17th April 2019
regenerate-thumbnails-advanced.php CHANGED
@@ -2,11 +2,12 @@
2
  /*
3
  Plugin Name: Regenerate Thumbnails Advanced
4
  Description: Regenerate thumbnails fast and easy while removing unused thumbnails of existing images; very useful when changing a theme.
5
- Version: 2.0.1
6
  Author: ShortPixel
7
  Author URI: https://shortpixel.com/
8
  License: GPLv2 or later
9
  Text Domain: regenerate-thumbnails-advanced
 
10
  */
11
 
12
  // Make sure we don't expose any info if called directly
@@ -15,16 +16,23 @@ if ( !function_exists( 'add_action' ) ) {
15
  exit;
16
  }
17
 
18
- define( 'RTA_PLUGIN_VERSION', '2.0.1');
19
  define( 'RTA_PLUGIN_PATH', plugin_dir_path(__FILE__) );
20
  define( 'RTA_PLUGIN_URL', plugin_dir_url(__FILE__) );
21
  define( 'RTA_SITE_BASE_URL', rtrim(get_bloginfo('url'),"/")."/");
22
  define( 'RTA_PLUGIN_FILE', __FILE__);
23
- define( 'RTA_LANG_DIR', dirname( plugin_basename(__FILE__) ).'/language/' );
 
 
 
 
 
 
 
 
24
 
25
  // define ('RTA_DEBUG', true);
26
 
27
- require_once (RTA_PLUGIN_PATH . 'includes/rta_class.php');
28
 
29
  register_activation_hook( __FILE__, array( 'RTA', 'rta_install' ) );
30
  register_deactivation_hook( __FILE__, array( 'RTA', 'rta_uninstall' ) );
2
  /*
3
  Plugin Name: Regenerate Thumbnails Advanced
4
  Description: Regenerate thumbnails fast and easy while removing unused thumbnails of existing images; very useful when changing a theme.
5
+ Version: 2.1.0
6
  Author: ShortPixel
7
  Author URI: https://shortpixel.com/
8
  License: GPLv2 or later
9
  Text Domain: regenerate-thumbnails-advanced
10
+ Domain Path: /languages
11
  */
12
 
13
  // Make sure we don't expose any info if called directly
16
  exit;
17
  }
18
 
19
+ define( 'RTA_PLUGIN_VERSION', '2.1.0');
20
  define( 'RTA_PLUGIN_PATH', plugin_dir_path(__FILE__) );
21
  define( 'RTA_PLUGIN_URL', plugin_dir_url(__FILE__) );
22
  define( 'RTA_SITE_BASE_URL', rtrim(get_bloginfo('url'),"/")."/");
23
  define( 'RTA_PLUGIN_FILE', __FILE__);
24
+ define( 'RTA_LANG_DIR', dirname( plugin_basename(__FILE__) ).'/languages' );
25
+
26
+ require_once(RTA_PLUGIN_PATH . 'includes/rta_class.php');
27
+ require_once(RTA_PLUGIN_PATH .'rta_admin.php');
28
+ require_once(RTA_PLUGIN_PATH .'rta_front.php');
29
+ require_once(RTA_PLUGIN_PATH . 'classes/rta_admin_controller.php');
30
+ require_once(RTA_PLUGIN_PATH . 'classes/rta_image.php');
31
+
32
+ $rta = new RTA(); // start runtime
33
 
34
  // define ('RTA_DEBUG', true);
35
 
 
36
 
37
  register_activation_hook( __FILE__, array( 'RTA', 'rta_install' ) );
38
  register_deactivation_hook( __FILE__, array( 'RTA', 'rta_uninstall' ) );
rta_admin.php CHANGED
@@ -30,7 +30,7 @@ class RTA_Admin extends RTA
30
 
31
  add_action( 'admin_menu', array( $this, 'rta_admin_menus' ) );
32
  add_action( 'wp_ajax_rta_regenerate_thumbnails', array( $this, 'rta_regenerate_thumbnails') );
33
- add_filter( 'image_size_names_choose', array( $this, 'rta_image_custom_sizes' ), 10, 1 );
34
  add_action( 'wp_ajax_rta_save_image_sizes', array($this,'view_generate_thumbnails_save' ) );
35
 
36
  add_filter( 'plugin_action_links_' . plugin_basename(RTA_PLUGIN_FILE), array(&$this, 'generate_plugin_links'));//for plugin settings page
@@ -50,75 +50,6 @@ class RTA_Admin extends RTA
50
 
51
  }
52
 
53
-
54
-
55
- /** [TODO] Check if this still exists **/
56
- public function rta_image_sizes() {
57
-
58
- global $rta_lang;
59
-
60
- if( isset($_POST['btnsave']) && $_POST['btnsave'] != "" ) {
61
- $exclude = array('btnsave');
62
- $rta_image_sizes = array();
63
- foreach( $_POST as $k => $v ) {
64
- if( !in_array( $k, $exclude )) {
65
- if(!is_array($v)) {
66
- $val = $this->make_safe($v);
67
- }else{
68
- $val = $v;
69
- }
70
- $rta_image_sizes[$k] = $val;
71
- }
72
- }
73
- update_option( 'rta_image_sizes', $rta_image_sizes );
74
- $message = $this->rta_get_message_html( $rta_lang['image_sizes_save_message'], 'message' );
75
- }
76
- $rta_image_sizes = get_option( 'rta_image_sizes' );
77
-
78
- $attr = $rta_image_sizes;
79
- $attr['message'] = $message;
80
- $html = $this->rta_load_template( "rta_image_sizes", "admin", $attr );
81
-
82
- echo $html;
83
- }
84
-
85
- // TODO Issue with this - function would remove all thumbnails. Need a better function.
86
- /*function rta_del_associated_thumbs($mainFile='') {
87
- //See ShortPixel Image Optimiser's findThumbs method
88
- $ext = pathinfo($mainFile, PATHINFO_EXTENSION);
89
- $base = substr($mainFile, 0, strlen($mainFile) - strlen($ext) - 1);
90
- $pattern = '/' . preg_quote($base, '/') . '-\d+x\d+\.'. $ext .'/';
91
- $thumbsCandidates = @glob($base . "-*." . $ext);
92
-
93
- $thumbs = array();
94
- if(is_array($thumbsCandidates)) {
95
- foreach($thumbsCandidates as $th) {
96
- if(preg_match($pattern, $th)) {
97
- $thumbs[]= $th;
98
- }
99
- }
100
- if( count($this->customThumbSuffixes)
101
- && !( is_plugin_active('envira-gallery/envira-gallery.php')
102
- || is_plugin_active('soliloquy/soliloquy.php')
103
- || is_plugin_active('soliloquy-lite/soliloquy-lite.php'))){
104
- foreach ($this->customThumbSuffixes as $suffix){
105
- $pattern = '/' . preg_quote($base, '/') . '-\d+x\d+'. $suffix . '\.'. $ext .'/';
106
- foreach($thumbsCandidates as $th) {
107
- if(preg_match($pattern, $th)) {
108
- $thumbs[]= $th;
109
- }
110
- }
111
- }
112
- }
113
- }
114
- foreach($thumbs as $thumb) {
115
- if($thumb !== $mainFile) {
116
- @unlink($thumb);
117
- }
118
- }
119
- return $thumbs;
120
- } */
121
-
122
  /**
123
  * schedules the image's attachment post to be deleted if all the thumbnails are missing or just removes the missing thumbnails from the sizes array if some still are present.
124
  * @param $image_id
@@ -192,18 +123,16 @@ class RTA_Admin extends RTA
192
  $json = false;
193
  }
194
 
195
- $nonce = isset($_POST['nonce'])? $_POST['nonce'] : false;
196
  if (! wp_verify_nonce($nonce, 'rta_regenerate_thumbnails'))
197
  {
198
  $this->jsonResponse(array('error' => true, 'logstatus' => "Invalid Nonce", 'message' => "Site error, Invalid Nonce"));
199
  exit();
200
  }
201
 
202
- if (isset($_POST['form']))
203
  {
204
- $data = json_decode(html_entity_decode(stripslashes($_POST['form'])), true);
205
- //parse_str($_POST['form'], $data);
206
-
207
  }
208
  else {
209
  $this->jsonResponse(array('error' => true, 'logstatus' => "No Data", 'message' => "Site error, No Data"));
@@ -377,7 +306,6 @@ class RTA_Admin extends RTA
377
 
378
  add_filter('intermediate_image_sizes_advanced', array($this, 'capture_generate_sizes'));
379
 
380
- // TODO also make sure only the regenerated thumbnails are passed to the action
381
  $new_metadata = wp_generate_attachment_metadata($image_id, $fullsizepath);
382
 
383
  remove_filter('intermediate_image_sizes_advanced', array($this, 'capture_generate_sizes'));
@@ -406,15 +334,14 @@ class RTA_Admin extends RTA
406
 
407
  $is_a_bulk = true; // we are sending multiple images.
408
  $regenSizes = isset($new_metadata['sizes']) ? $new_metadata['sizes'] : array();
409
- // TODO Something wrong with this hook.
410
-
411
- $this->debug('Sending to ShortPixel: ');
412
- $this->debug($original_meta);
413
- $this->debug($regenSizes);
414
 
415
  // Do not send if nothing was regenerated, otherwise SP thinks all needs to be redone
 
416
  if (count($regenSizes) > 0)
 
417
  do_action('shortpixel-thumbnails-regenerated', $image_id, $original_meta, $regenSizes, $is_a_bulk);
 
 
418
  }
419
  $imageUrl = $filename_only;
420
  $logstatus = 'Processed';
@@ -519,14 +446,6 @@ class RTA_Admin extends RTA
519
  }
520
 
521
 
522
- public function rta_image_custom_sizes( $sizes ) {
523
-
524
- global $rta_lang;
525
- return array_merge( $sizes, array(
526
- 'rta_featured_image' => $rta_lang['featured_image_label'],
527
- 'rta_non_featured_image' => $rta_lang['no_featured_image_label'],
528
- ) );
529
- }
530
 
531
  public function view_generate_thumbnails() {
532
  wp_enqueue_style('rta_css');
@@ -554,9 +473,8 @@ class RTA_Admin extends RTA
554
  }
555
  }
556
 
557
-
558
  public function rta_settings() {
559
- global $rta_options, $rta_lang;
560
  do_action('rta_before_settings', $this, $rta_options );
561
 
562
  $attr = $rta_options;
@@ -565,7 +483,9 @@ class RTA_Admin extends RTA
565
  do_action('rta_after_settings', $this, $rta_options );
566
  echo $html;
567
  }
568
-
 
 
569
  private function load_wp_media_uploader() {
570
 
571
  wp_enqueue_script('media-upload');
@@ -573,7 +493,5 @@ class RTA_Admin extends RTA
573
  wp_enqueue_style('thickbox');
574
  $html = $this->rta_load_template( "load_media_upload_js", "admin" );
575
  echo $html;
576
- }
577
  }
578
-
579
- $rta_admin = new RTA_Admin();
30
 
31
  add_action( 'admin_menu', array( $this, 'rta_admin_menus' ) );
32
  add_action( 'wp_ajax_rta_regenerate_thumbnails', array( $this, 'rta_regenerate_thumbnails') );
33
+ //add_filter( 'image_size_names_choose', array( $this, 'rta_image_custom_sizes' ), 10, 1 );
34
  add_action( 'wp_ajax_rta_save_image_sizes', array($this,'view_generate_thumbnails_save' ) );
35
 
36
  add_filter( 'plugin_action_links_' . plugin_basename(RTA_PLUGIN_FILE), array(&$this, 'generate_plugin_links'));//for plugin settings page
50
 
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  /**
54
  * schedules the image's attachment post to be deleted if all the thumbnails are missing or just removes the missing thumbnails from the sizes array if some still are present.
55
  * @param $image_id
123
  $json = false;
124
  }
125
 
126
+ $nonce = isset($_POST['gen_nonce'])? $_POST['gen_nonce'] : false;
127
  if (! wp_verify_nonce($nonce, 'rta_regenerate_thumbnails'))
128
  {
129
  $this->jsonResponse(array('error' => true, 'logstatus' => "Invalid Nonce", 'message' => "Site error, Invalid Nonce"));
130
  exit();
131
  }
132
 
133
+ if (isset($_POST['genform']))
134
  {
135
+ $data = json_decode(html_entity_decode(stripslashes($_POST['genform'])), true);
 
 
136
  }
137
  else {
138
  $this->jsonResponse(array('error' => true, 'logstatus' => "No Data", 'message' => "Site error, No Data"));
306
 
307
  add_filter('intermediate_image_sizes_advanced', array($this, 'capture_generate_sizes'));
308
 
 
309
  $new_metadata = wp_generate_attachment_metadata($image_id, $fullsizepath);
310
 
311
  remove_filter('intermediate_image_sizes_advanced', array($this, 'capture_generate_sizes'));
334
 
335
  $is_a_bulk = true; // we are sending multiple images.
336
  $regenSizes = isset($new_metadata['sizes']) ? $new_metadata['sizes'] : array();
 
 
 
 
 
337
 
338
  // Do not send if nothing was regenerated, otherwise SP thinks all needs to be redone
339
+
340
  if (count($regenSizes) > 0)
341
+ {
342
  do_action('shortpixel-thumbnails-regenerated', $image_id, $original_meta, $regenSizes, $is_a_bulk);
343
+ }
344
+
345
  }
346
  $imageUrl = $filename_only;
347
  $logstatus = 'Processed';
446
  }
447
 
448
 
 
 
 
 
 
 
 
 
449
 
450
  public function view_generate_thumbnails() {
451
  wp_enqueue_style('rta_css');
473
  }
474
  }
475
 
476
+ /* Probably outdated
477
  public function rta_settings() {
 
478
  do_action('rta_before_settings', $this, $rta_options );
479
 
480
  $attr = $rta_options;
483
  do_action('rta_after_settings', $this, $rta_options );
484
  echo $html;
485
  }
486
+ */
487
+ /*
488
+ * Seems not in use.
489
  private function load_wp_media_uploader() {
490
 
491
  wp_enqueue_script('media-upload');
493
  wp_enqueue_style('thickbox');
494
  $html = $this->rta_load_template( "load_media_upload_js", "admin" );
495
  echo $html;
496
+ } */
497
  }
 
 
rta_front.php CHANGED
@@ -31,7 +31,7 @@ class RTA_Front extends RTA
31
  public function rta_jpeg_quality( $quality ) {
32
  $rta_image_sizes = get_option( 'rta_image_sizes' );
33
  if(is_array($rta_image_sizes) && sizeof($rta_image_sizes) > 0){
34
- $jpeg_quality = $rta_image_sizes['jpeg_quality'];
35
  if(!empty($jpeg_quality)) {
36
  return (int)$jpeg_quality;
37
  }
31
  public function rta_jpeg_quality( $quality ) {
32
  $rta_image_sizes = get_option( 'rta_image_sizes' );
33
  if(is_array($rta_image_sizes) && sizeof($rta_image_sizes) > 0){
34
+ $jpeg_quality = isset($rta_image_sizes['jpeg_quality']) ? $rta_image_sizes['jpeg_quality'] : null;
35
  if(!empty($jpeg_quality)) {
36
  return (int)$jpeg_quality;
37
  }
scss/rta-admin-view.scss CHANGED
@@ -75,6 +75,7 @@
75
  // max-width:90%;
76
  padding: 20px 8px;
77
  //background: #fff;
 
78
  margin: 0 auto;
79
  }
80
 
@@ -223,6 +224,8 @@
223
  }
224
  .rta_progress {
225
  display: inline-block;
 
 
226
  }
227
  .images {
228
  margin-left: 225px;
@@ -245,7 +248,35 @@
245
  display: inline-block;
246
  display: none;
247
  }
248
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
 
250
  .form_controls
251
  {
@@ -265,6 +296,12 @@
265
  font-size: 60px;
266
  }
267
  }
 
 
 
 
 
 
268
  }
269
 
270
  // low in the tree, to override most.
75
  // max-width:90%;
76
  padding: 20px 8px;
77
  //background: #fff;
78
+ position: relative;
79
  margin: 0 auto;
80
  }
81
 
224
  }
225
  .rta_progress {
226
  display: inline-block;
227
+ position: relative;
228
+ min-height: 310px;
229
  }
230
  .images {
231
  margin-left: 225px;
248
  display: inline-block;
249
  display: none;
250
  }
251
+ .shortpixel-notice
252
+ {
253
+ background: #fff;
254
+ width: 250px;
255
+ min-height: 270px;
256
+ border: 1px solid #ccc;
257
+ padding: 15px;
258
+ margin: 0 5% 10px 25px;
259
+ float: right;
260
+ h3 {
261
+ line-height: 1.3em; // match size
262
+ }
263
+
264
+ }
265
+ .shortpixel-bulk-notice
266
+ {
267
+ font-size: 14px;
268
+ font-weight: 700;
269
+ text-align: center;
270
+ }
271
+ button.stop-process
272
+ {
273
+ position: absolute;
274
+ bottom: 10px;
275
+ left: 80%;
276
+ font-weight: normal;
277
+ text-transform: none;
278
+ }
279
+ } // section.regenerate
280
 
281
  .form_controls
282
  {
296
  font-size: 60px;
297
  }
298
  }
299
+ .save_note
300
+ {
301
+ color: orange;
302
+ float: right;
303
+ margin-left: 30px;
304
+ }
305
  }
306
 
307
  // low in the tree, to override most.
templates/admin/view_regenerate_process.php CHANGED
@@ -1,9 +1,7 @@
1
 
2
- <!--- TODO Move this to its own part -->
3
-
4
  <section class='regenerate'>
5
  <div class='container'>
6
- <div class="rta_wait_loader">Please wait...</div>
7
 
8
  <div class="cpbParent rta_progress rta_hidden">
9
  <svg class="CircularProgressbar " viewBox="0 0 100 100">
@@ -24,18 +22,66 @@
24
  <text class="CircularProgressbar-text" x="50" y="50">0%</text>
25
  </svg>
26
  <div class="images">
27
- <h5>Regenerated image:</h5>
28
  <img src="" alt="">
29
  </div>
 
 
 
30
  </div>
31
 
32
- <a href="javascript:void(0);" class="rta_error_link rta_hidden">There were some errors, click for details</a>
33
  <div class="listContainer rta_error_box row rta_hidden">
34
  <div class="statuslist col-sm-6">
35
- <h4 class="listTitle">Error(s)</h4>
36
  <ul class="list-group">
37
  </ul>
38
  </div>
39
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  </div> <!-- container -->
41
  </section>
1
 
 
 
2
  <section class='regenerate'>
3
  <div class='container'>
4
+ <div class="rta_wait_loader"><?php _e('Please wait...','regenerate-thumbnails-advanced'); ?></div>
5
 
6
  <div class="cpbParent rta_progress rta_hidden">
7
  <svg class="CircularProgressbar " viewBox="0 0 100 100">
22
  <text class="CircularProgressbar-text" x="50" y="50">0%</text>
23
  </svg>
24
  <div class="images">
25
+ <h5><?php _e('Regenerated image:','regenerate-thumbnails-advanced'); ?></h5>
26
  <img src="" alt="">
27
  </div>
28
+
29
+ <button class='button stop-process rta_hidden'><?php _e('Stop Process', 'regenerate-thumbnails-advanced') ?></button>
30
+
31
  </div>
32
 
33
+ <a href="javascript:void(0);" class="rta_error_link rta_hidden"><?php _e('There were some errors, click for details', 'regenerate-thumbnails-advanced'); ?></a>
34
  <div class="listContainer rta_error_box row rta_hidden">
35
  <div class="statuslist col-sm-6">
36
+ <h4 class="listTitle"><?php _e('Error(s)','regenerate-thumbnails-advanced'); ?></h4>
37
  <ul class="list-group">
38
  </ul>
39
  </div>
40
  </div>
41
+
42
+ <?php
43
+ #wp_nonce_field('enable-media-replace');
44
+ $plugins = get_plugins();
45
+ $spInstalled = isset($plugins['shortpixel-image-optimiser/wp-shortpixel.php']);
46
+ $spActive = is_plugin_active('shortpixel-image-optimiser/wp-shortpixel.php');
47
+
48
+ ?>
49
+
50
+ <?php if(!$spInstalled): ?>
51
+ <div class='shortpixel-notice rta_hidden'>
52
+ <h3 class="" style="margin-top: 0;text-align: center;">
53
+ <a href="https://shortpixel.com/otp/af/TFXUHHC28044" target="_blank">
54
+ <?php echo esc_html__("Optimize your images with ShortPixel, get +50% credits!", "enable-media-replace"); ?>
55
+ </a>
56
+ </h3>
57
+ <div class="" style="text-align: center;">
58
+ <a href="https://shortpixel.com/otp/af/TFXUHHC28044" target="_blank">
59
+ <img src="https://optimizingmattersblog.files.wordpress.com/2016/10/shortpixel.png">
60
+ </a>
61
+ </div>
62
+ <div class="" style="margin-bottom: 10px;">
63
+ <?php echo esc_html__("Get more Google love by compressing your site's images! Check out how much ShortPixel can save your site and get +50% credits when signing up as an Enable Media Replace user! Forever!", "enable-media-replace"); ?>
64
+ </div>
65
+ <div class=""><div style="text-align: <?php echo (is_rtl()) ? 'left' : 'right' ?>;">
66
+ <a class="button button-primary" id="shortpixel-image-optimiser-info" href="https://shortpixel.com/otp/af/TFXUHHC28044" target="_blank">
67
+ <?php echo esc_html__("More info", "enable-media-replace"); ?></p>
68
+ </a>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ <?php
73
+ else:
74
+ ?>
75
+ <div class='shortpixel-bulk-notice rta_hidden'>
76
+ <?php if ($spActive): ?>
77
+ <p class='gotobulk'><?php printf(__('Thumbnails successfully regenerated. Go to %s ShortPixel Bulk page %s to optimize the updated thumbnails.'), '<a href="' . admin_url('upload.php?page=wp-short-pixel-bulk') . '">', '</a>'); ?></p>
78
+ <?php else:
79
+ $path = 'shortpixel-image-optimiser/wp-shortpixel.php';
80
+ $activate_url = wp_nonce_url(admin_url('plugins.php?action=activate&plugin='.$path), 'activate-plugin_'.$path);
81
+ ?>
82
+ <p class='gotobulk'><?php printf(__('%s Activate ShortPixel %s to optimize your newly generated thumbnails.'), '<a href="' . $activate_url . '">', '</a>'); ?></p>
83
+ <?php endif; ?>
84
+ </div>
85
+ <?php endif ?>
86
  </div> <!-- container -->
87
  </section>
templates/admin/view_rta_regenerate.php CHANGED
@@ -28,12 +28,12 @@
28
  <h4><?php _e('Clean-up options', 'regenerate-thumbnails-advanced') ?></h4>
29
  <div class='option'>
30
  <label for="del_associated_thumbs"><?php _e('Delete Unused Thumbnails','regenerate-thumbnails-advanced'); ?></label>
31
- <span><input type="checkbox" name="del_associated_thumbs" id="del_associated_thumbs" value="YES" /> </span>
32
  <span class='note'><?php _e('This option will remove thumbnails not selected in the settings. Good for stale thumbnails, but be sure they are not in use. ','regenerate-thumbnails-advanced'); ?></span>
33
  </div>
34
  <div class='option'>
35
  <label for="del_leftover_metadata"><?php _e('Delete Leftover Image Metadata','regenerate-thumbnails-advanced'); ?></label>
36
- <span><input type="checkbox" name="del_leftover_metadata" id="del_leftover_metadata" value="YES" /> </span>
37
  <span class='note'><?php _e('Delete all the metadata associated with missing (non-existing) images. Keep in mind there is no undo!','regenerate-thumbnails-advanced'); ?></span>
38
  </div>
39
  </div>
@@ -42,7 +42,8 @@
42
 
43
  <section class='form_controls'>
44
  <div class='container'>
45
- <button type='submit' disabled class='rta_regenerate disabled'>Regenerate</button>
 
46
  </div>
47
  </section>
48
  </form>
28
  <h4><?php _e('Clean-up options', 'regenerate-thumbnails-advanced') ?></h4>
29
  <div class='option'>
30
  <label for="del_associated_thumbs"><?php _e('Delete Unused Thumbnails','regenerate-thumbnails-advanced'); ?></label>
31
+ <span><input type="checkbox" name="del_associated_thumbs" id="del_associated_thumbs" value="1" /> </span>
32
  <span class='note'><?php _e('This option will remove thumbnails not selected in the settings. Good for stale thumbnails, but be sure they are not in use. ','regenerate-thumbnails-advanced'); ?></span>
33
  </div>
34
  <div class='option'>
35
  <label for="del_leftover_metadata"><?php _e('Delete Leftover Image Metadata','regenerate-thumbnails-advanced'); ?></label>
36
+ <span><input type="checkbox" name="del_leftover_metadata" id="del_leftover_metadata" value="1" /> </span>
37
  <span class='note'><?php _e('Delete all the metadata associated with missing (non-existing) images. Keep in mind there is no undo!','regenerate-thumbnails-advanced'); ?></span>
38
  </div>
39
  </div>
42
 
43
  <section class='form_controls'>
44
  <div class='container'>
45
+ <button type='submit' disabled class='rta_regenerate disabled'><?php _e('Regenerate', 'regenerate-thumbnails-advanced'); ?></button>
46
+ <p class='save_note rta_hidden'><?php _e('Save your settings first','regenerate-thumbnails-advanced'); ?></p>
47
  </div>
48
  </section>
49
  </form>
templates/admin/view_rta_settings.php CHANGED
@@ -73,12 +73,12 @@
73
  <div class='container'>
74
 
75
  <div class='option'>
76
- <label><?php _e('Use selected thumbnails:') ?></label>
77
  <div class='checkbox-list'>
78
  <?php echo $view->generateImageSizeOptions($view->process_image_sizes); ?>
79
  </div>
80
- <div class='select-options'><span class='select' data-action='select' data-target='regenerate_sizes' >Select All</span>
81
- <span class='deselect' data-action='deselect' data-target='regenerate_sizes'>Deselect All</span>
82
  <div class='note'>
83
  <ul>
84
  <li><?php _e('Select the thumbnails you want to have available in your system. ', 'regenerate-thumbnails-advanced') ?></li>
73
  <div class='container'>
74
 
75
  <div class='option'>
76
+ <label><?php _e('Use selected thumbnails:', 'regenerate-thumbnails-advanced') ?></label>
77
  <div class='checkbox-list'>
78
  <?php echo $view->generateImageSizeOptions($view->process_image_sizes); ?>
79
  </div>
80
+ <div class='select-options'><span class='select' data-action='select' data-target='regenerate_sizes'><?php _e('Select All', 'regenerate-thumbnails-advanced'); ?></span>
81
+ <span class='deselect' data-action='deselect' data-target='regenerate_sizes'><?php _e('Deselect All', 'regenerate-thumbnails-advanced'); ?></span>
82
  <div class='note'>
83
  <ul>
84
  <li><?php _e('Select the thumbnails you want to have available in your system. ', 'regenerate-thumbnails-advanced') ?></li>