NextCellent Gallery – NextGEN Legacy - Version 1.9.20

Version Description

  • 20.06.2014

What's in it for you?

  • Fixes on uploader (credits to Niko Strijbol)
  • Fixes for nggtag shortcode (credits to Niko Strijbol)
  • Refactored code in few places
  • Fix vulnerability which disallowed html text & santitize_taglist function (credits to NS & FZ)
  • Fix for 3.9 and typos for strict warning
  • Improved injections prevention (credits to jayque9)
  • Improve spelling & error message (credits to Niko Strijbol)

VERY IMPORTANT: Read ON!

NextCellent Gallery provides backward compatibility for older NextGEN until version 1.9.13 .

  • this plugin will gracefully deactivate if detects NextGEN is working (any version) to avoid compatibility issues.

  • Please remember to READ THE FAQ!!! Issues for failing to read the FAQ will be IGNORED!!!

  • If you like it, please spread the word and rate it accordingly. I guess a lot of annoyed users can take advantage of NextCellent. Thank you!

  • WE APPRECIATE YOUR FEEDBACK. Be our voice and comment it!!!!

Download this release

Release Info

Developer WPReady
Plugin Icon NextCellent Gallery – NextGEN Legacy
Version 1.9.20
Comparing to
See all releases

Code changes from version 1.9.19 to 1.9.20

admin/addgallery.php CHANGED
@@ -168,7 +168,7 @@ class nggAddGallery {
168
  mime_types : [
169
  {title: '<?php echo esc_js( __('Image Files', 'nggallery') ); ?>', extensions: '<?php echo esc_js( str_replace( array('*.', ';'), array('', ','), $file_types) ); ?>'}
170
  ],
171
- max_file_size: '<?php echo round( (int) wp_max_upload_size() / 1024 ); ?>kb',
172
  },
173
  multipart: true,
174
  urlstream_upload: true,
168
  mime_types : [
169
  {title: '<?php echo esc_js( __('Image Files', 'nggallery') ); ?>', extensions: '<?php echo esc_js( str_replace( array('*.', ';'), array('', ','), $file_types) ); ?>'}
170
  ],
171
+ max_file_size: '<?php echo round( (int) wp_max_upload_size() / 1024 ); ?>kb'
172
  },
173
  multipart: true,
174
  urlstream_upload: true,
admin/album.php CHANGED
@@ -94,7 +94,7 @@ class nggManageAlbum {
94
  do_action('ngg_add_album', $this->currentID);
95
 
96
  if ($result)
97
- nggGallery::show_message(__('Update Successfully','nggallery'));
98
  }
99
 
100
  if ( isset($_POST['update']) && ($this->currentID > 0) ) {
@@ -113,7 +113,7 @@ class nggManageAlbum {
113
  //hook for other plugins
114
  do_action('ngg_update_album_sortorder', $this->currentID);
115
 
116
- nggGallery::show_message(__('Update Successfully','nggallery'));
117
 
118
  }
119
 
@@ -158,7 +158,7 @@ class nggManageAlbum {
158
  do_action('ngg_update_album', $this->currentID, $_POST);
159
 
160
  if ($result)
161
- nggGallery::show_message(__('Update Successfully','nggallery'));
162
  }
163
 
164
  function output() {
@@ -539,7 +539,7 @@ function showDialog() {
539
  echo '<div id="gid-' . $prefix . $obj['id'] . '" class="groupItem' . $used . '">
540
  <div class="innerhandle">
541
  <div class="item_top ' . $class . '">
542
- <a href="#" class="min" title="close">[-]</a>
543
  ID: ' . $obj['id'] . ' | ' . wp_html_excerpt( esc_html ( nggGallery::i18n( $obj['title'] ) ) , 25) . '
544
  </div>
545
  <div class="itemContent">
94
  do_action('ngg_add_album', $this->currentID);
95
 
96
  if ($result)
97
+ nggGallery::show_message(__('Updated successfully','nggallery'));
98
  }
99
 
100
  if ( isset($_POST['update']) && ($this->currentID > 0) ) {
113
  //hook for other plugins
114
  do_action('ngg_update_album_sortorder', $this->currentID);
115
 
116
+ nggGallery::show_message(__('Updated successfully','nggallery'));
117
 
118
  }
119
 
158
  do_action('ngg_update_album', $this->currentID, $_POST);
159
 
160
  if ($result)
161
+ nggGallery::show_message(__('Updated successfully','nggallery'));
162
  }
163
 
164
  function output() {
539
  echo '<div id="gid-' . $prefix . $obj['id'] . '" class="groupItem' . $used . '">
540
  <div class="innerhandle">
541
  <div class="item_top ' . $class . '">
542
+ <a href="#" class="min" title="close">&#9473;</a>
543
  ID: ' . $obj['id'] . ' | ' . wp_html_excerpt( esc_html ( nggGallery::i18n( $obj['title'] ) ) , 25) . '
544
  </div>
545
  <div class="itemContent">
admin/functions.php CHANGED
@@ -266,16 +266,9 @@ class nggAdmin{
266
  //rename images with the cleaned filename
267
  $old_path = $gallerypath . '/' . $picture;
268
  $filepart = nggGallery::fileinfo( $picture );
269
-
270
- //check if the sanitized name already exists
271
- $increment = ''; //start with no suffix
272
-
273
- while(file_exists($gallerypath . '/' . $filepart['filename'] . $increment . '.' . $filepart['extension'])) {
274
- $increment++;
275
- }
276
 
277
  //define new values
278
- $picture = $filepart['filename'] . $increment . '.' . $filepart['extension'];
279
  $new_path = $gallerypath . "/" . $picture;
280
 
281
  rename($old_path, $new_path);
266
  //rename images with the cleaned filename
267
  $old_path = $gallerypath . '/' . $picture;
268
  $filepart = nggGallery::fileinfo( $picture );
 
 
 
 
 
 
 
269
 
270
  //define new values
271
+ $picture = $filepart['basename'];
272
  $new_path = $gallerypath . "/" . $picture;
273
 
274
  rename($old_path, $new_path);
admin/js/plupload.handler.js CHANGED
@@ -109,33 +109,34 @@ function cancelUpload() {
109
 
110
  function uploadError(fileObj, errorCode, message) {
111
  debug('[uploadError]', errorCode, message);
 
112
  switch (errorCode) {
113
  case plupload.FAILED:
114
- error_name = fileObj.name + " : " + pluploadL10n.upload_failed;
115
  break;
116
  case plupload.FILE_EXTENSION_ERROR:
117
- error_name = fileObj.name + " : " + pluploadL10n.invalid_filetype;
118
  break;
119
  case plupload.FILE_SIZE_ERROR:
120
- error_name = fileObj.name + " : " + pluploadL10n.upload_limit_exceeded;
121
  break;
122
  case plupload.IMAGE_FORMAT_ERROR:
123
- error_name = fileObj.name + " : " + pluploadL10n.not_an_image;
124
  break;
125
  case plupload.IMAGE_MEMORY_ERROR:
126
- error_name = fileObj.name + " : " + pluploadL10n.image_memory_exceeded;
127
  break;
128
  case plupload.IMAGE_DIMENSIONS_ERROR:
129
- error_name = fileObj.name + " : " + pluploadL10n.image_dimensions_exceeded;
130
  break;
131
  case plupload.GENERIC_ERROR:
132
- error_name = pluploadL10n.upload_failed;
133
  break;
134
  case plupload.IO_ERROR:
135
- error_name = pluploadL10n.io_error;
136
  break;
137
  case plupload.HTTP_ERROR:
138
- error_name = pluploadL10n.http_error;
139
  break;
140
  case plupload.INIT_ERROR:
141
  /* what should we do in this case ? */
@@ -143,7 +144,7 @@ function uploadError(fileObj, errorCode, message) {
143
  //jQuery('.upload-html-bypass').hide();
144
  break;
145
  case plupload.SECURITY_ERROR:
146
- error_name = pluploadL10n.security_error;
147
  break;
148
  case plupload.UPLOAD_ERROR.UPLOAD_STOPPED:
149
  case plupload.UPLOAD_ERROR.FILE_CANCELLED:
@@ -151,7 +152,8 @@ function uploadError(fileObj, errorCode, message) {
151
  default:
152
  FileError(fileObj, pluploadL10n.default_error);
153
  }
154
- nggProgressBar.addNote("<strong>ERROR " + error_name + " </strong>: " + message);
 
155
  jQuery("#" + fileObj.id).hide("slow");
156
  jQuery("#" + fileObj.id).remove();
157
  }
109
 
110
  function uploadError(fileObj, errorCode, message) {
111
  debug('[uploadError]', errorCode, message);
112
+ error_name = fileObj.name + ': ';
113
  switch (errorCode) {
114
  case plupload.FAILED:
115
+ message = pluploadL10n.upload_failed;
116
  break;
117
  case plupload.FILE_EXTENSION_ERROR:
118
+ message = pluploadL10n.invalid_filetype;
119
  break;
120
  case plupload.FILE_SIZE_ERROR:
121
+ message = pluploadL10n.file_exceeds_size_limit;
122
  break;
123
  case plupload.IMAGE_FORMAT_ERROR:
124
+ message = pluploadL10n.not_an_image;
125
  break;
126
  case plupload.IMAGE_MEMORY_ERROR:
127
+ message = pluploadL10n.image_memory_exceeded;
128
  break;
129
  case plupload.IMAGE_DIMENSIONS_ERROR:
130
+ message = pluploadL10n.image_dimensions_exceeded;
131
  break;
132
  case plupload.GENERIC_ERROR:
133
+ message = pluploadL10n.upload_failed;
134
  break;
135
  case plupload.IO_ERROR:
136
+ message = pluploadL10n.io_error;
137
  break;
138
  case plupload.HTTP_ERROR:
139
+ message = pluploadL10n.http_error;
140
  break;
141
  case plupload.INIT_ERROR:
142
  /* what should we do in this case ? */
144
  //jQuery('.upload-html-bypass').hide();
145
  break;
146
  case plupload.SECURITY_ERROR:
147
+ message = pluploadL10n.security_error;
148
  break;
149
  case plupload.UPLOAD_ERROR.UPLOAD_STOPPED:
150
  case plupload.UPLOAD_ERROR.FILE_CANCELLED:
152
  default:
153
  FileError(fileObj, pluploadL10n.default_error);
154
  }
155
+ //nggProgressBar.addNote("<strong>ERROR " + error_name + " </strong>: " + message);
156
+ jQuery('#plupload-upload-ui').prepend('<div id="file-' + fileObj.id + '" class="error"><p style="margin: auto;">' + error_name + message + '</p></div>');
157
  jQuery("#" + fileObj.id).hide("slow");
158
  jQuery("#" + fileObj.id).remove();
159
  }
admin/manage-images.php CHANGED
@@ -501,10 +501,8 @@ if($picturelist) {
501
  <?php
502
  break;
503
  case 'alt_title_desc' :
504
- //FZSM Vulnerability fix, second attempt
505
- global $allowedposttags;
506
- $img_alt_text = wp_kses($picture->alttext,$allowedposttags);
507
- $img_description = wp_kses($picture->description,$allowedposttags);
508
  ?>
509
  <td <?php echo $attributes ?>>
510
  <input placeholder="<?php _e("Alt & title text",'nggallery'); ?>" name="alttext[<?php echo $pid ?>]" type="text" style="width:95%; margin-bottom: 2px;" value="<?php echo $img_alt_text; ?>" /><br/>
501
  <?php
502
  break;
503
  case 'alt_title_desc' :
504
+ $img_alt_text = nggGallery::suppress_injection($picture->alttext);
505
+ $img_description = nggGallery::suppress_injection($picture->description)
 
 
506
  ?>
507
  <td <?php echo $attributes ?>>
508
  <input placeholder="<?php _e("Alt & title text",'nggallery'); ?>" name="alttext[<?php echo $pid ?>]" type="text" style="width:95%; margin-bottom: 2px;" value="<?php echo $img_alt_text; ?>" /><br/>
admin/settings.php CHANGED
@@ -164,7 +164,7 @@ class nggOptions {
164
  if ( $old_state != $ngg->options['usePermalinks'] || $old_slug != $ngg->options['permalinkSlug'] )
165
  $nggRewrite->flush();
166
 
167
- nggGallery::show_message(__('Update Successfully','nggallery'));
168
  }
169
 
170
  if ( isset($_POST['clearcache']) ) {
164
  if ( $old_state != $ngg->options['usePermalinks'] || $old_slug != $ngg->options['permalinkSlug'] )
165
  $nggRewrite->flush();
166
 
167
+ nggGallery::show_message(__('Settings updated successfully','nggallery'));
168
  }
169
 
170
  if ( isset($_POST['clearcache']) ) {
admin/style.php CHANGED
@@ -21,7 +21,7 @@ if ( $theme_css_exists = file_exists (TEMPLATEPATH . "/nggallery.css") ) {
21
  $ngg->options['activateCSS'] = $_POST['activateCSS'];
22
  $ngg->options['CSSfile'] = $act_cssfile;
23
  update_option('ngg_options', $ngg->options);
24
- nggGallery::show_message(__('Update Successfully','nggallery'));
25
  }
26
  } else {
27
  // get the options
21
  $ngg->options['activateCSS'] = $_POST['activateCSS'];
22
  $ngg->options['CSSfile'] = $act_cssfile;
23
  update_option('ngg_options', $ngg->options);
24
+ nggGallery::show_message(__('Updated successfully','nggallery'));
25
  }
26
  } else {
27
  // get the options
admin/tinymce/editor_plugin.js CHANGED
@@ -2,7 +2,6 @@
2
 
3
  (function() {
4
  // Load plugin specific language pack
5
- //tinymce.PluginManager.requireLangPack('NextGEN');
6
 
7
  tinymce.create('tinymce.plugins.NextGEN', {
8
  /**
@@ -30,7 +29,7 @@
30
 
31
  // Register example button
32
  ed.addButton('NextGEN', {
33
- title : 'NextGEN.desc',
34
  cmd : 'mceNextGEN',
35
  image : url + '/nextgen.gif',
36
  stateSelector: 'img'
2
 
3
  (function() {
4
  // Load plugin specific language pack
 
5
 
6
  tinymce.create('tinymce.plugins.NextGEN', {
7
  /**
29
 
30
  // Register example button
31
  ed.addButton('NextGEN', {
32
+ title : 'NextCellent',
33
  cmd : 'mceNextGEN',
34
  image : url + '/nextgen.gif',
35
  stateSelector: 'img'
lib/core.php CHANGED
@@ -12,14 +12,14 @@ class nggGallery {
12
  * Show a error messages
13
  */
14
  static function show_error($message) {
15
- echo '<div class="wrap"><h2></h2><div class="error" id="error"><p>' . $message . '</p></div></div>' . "\n";
16
  }
17
 
18
  /**
19
  * Show a system messages
20
  */
21
  static function show_message($message) {
22
- echo '<div class="wrap"><h2></h2><div class="updated fade" id="message"><p>' . $message . '</p></div></div>' . "\n";
23
  }
24
 
25
  /**
@@ -589,5 +589,16 @@ class nggGallery {
589
  global $ngg;
590
  echo apply_filters('show_nextgen_version', '<!-- <meta name="NextGEN" version="'. $ngg->version . '" /> -->' . "\n");
591
  }
 
 
 
 
 
 
 
 
 
 
 
592
  }
593
  ?>
12
  * Show a error messages
13
  */
14
  static function show_error($message) {
15
+ echo '<div class="error" id="error"><p>' . $message . '</p></div>';
16
  }
17
 
18
  /**
19
  * Show a system messages
20
  */
21
  static function show_message($message) {
22
+ echo '<div class="updated fade" id="message"><p>' . $message . '</p></div>';
23
  }
24
 
25
  /**
589
  global $ngg;
590
  echo apply_filters('show_nextgen_version', '<!-- <meta name="NextGEN" version="'. $ngg->version . '" /> -->' . "\n");
591
  }
592
+
593
+ /**
594
+ * Prevents injection filtering HTML Code
595
+ * 20140604: Improved based on suggestions of jayque9
596
+ * http://wordpress.org/support/topic/prevent-removal-of-html-code-from-image-descriptions
597
+ */
598
+ static function suppress_injection
599
+ ($html_text) {
600
+ global $allowedposttags;
601
+ return wp_kses(stripslashes($html_text),$allowedposttags);
602
+ }
603
  }
604
  ?>
lib/tags.php CHANGED
@@ -246,7 +246,35 @@ class nggTags {
246
  return $return_value;
247
  }
248
 
249
- /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  * Get a list of the tags used by the images
251
  */
252
  function find_all_tags() {
@@ -293,7 +321,7 @@ class nggTags {
293
  /**
294
  * nggTags::find_images_for_tags()
295
  * 20140120: Mode DESC added.
296
- *
297
  * @param mixed $taglist
298
  * @param string $sorting could be 'ASC' or 'RAND' or 'DESC'
299
  * @return array of images
@@ -302,29 +330,19 @@ class nggTags {
302
  // return the images based on the tag
303
  global $wpdb;
304
  $modes = array ('ASC','DESC','RAND');
 
 
305
 
306
- // extract it into a array
307
- $taglist = explode(",", $taglist);
308
-
309
- if ( !is_array($taglist) )
310
- $taglist = array($taglist);
311
-
312
- $taglist = array_map('trim', $taglist);
313
- $new_slugarray = array_map('sanitize_title', $taglist);
314
- $sluglist = "'" . implode("', '", $new_slugarray) . "'";
315
-
316
- //Treat % as a litteral in the database, for unicode support
317
- $sluglist=str_replace("%","%%",$sluglist);
318
-
319
- // first get all $term_ids with this tag
320
  //Fix for WP 3.9 . See http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/
321
- $term_ids = $wpdb->get_col( $wpdb->prepare("SELECT term_id FROM $wpdb->terms WHERE slug IN (%s) ORDER BY term_id ASC ", $sluglist));
322
- $picids = get_objects_in_term($term_ids, 'ngg_tag');
 
 
323
 
324
  //Now lookup in the database
325
  $sorting = in_array($sorting,$modes)?$sorting:'ASC';
326
  $pictures = nggdb::find_images_in_list($picids, true, $sorting );
327
-
328
  return $pictures;
329
  }
330
 
246
  return $return_value;
247
  }
248
 
249
+ /**
250
+ * @param $taglist
251
+ * @return mixed|string
252
+ * Sanitize tag list suppressing spaces, sanitizing every tag and solving issues
253
+ * with unicode support.
254
+ * 20140605: '%' character does not pass through sanitize_title
255
+ * Note: this list cannot be handled with wpdb->prepare since single quotes
256
+ * will be escaped(!)
257
+ */
258
+ public static function sanitize_taglist($taglist)
259
+ {
260
+ // extract it into a array
261
+ $taglist = explode(",", $taglist);
262
+ //if we don't have a list, make an array with one item
263
+ if (!is_array($taglist))
264
+ $taglist = array($taglist);
265
+ //suppress spaces in all terms on the list.
266
+ $taglist = array_map('trim', $taglist);
267
+ //and sanitize every term
268
+ $new_slugarray = array_map('sanitize_title', $taglist);
269
+ //recompose list of terms and make one simple string
270
+ $sluglist = implode("', '", $new_slugarray);
271
+ if (empty($sluglist)) return "";
272
+ //Treat % as a literal in the database, for unicode support
273
+ // $sluglist = str_replace("%", "%%", $sluglist);
274
+ return "'" . $sluglist . "'";
275
+ }
276
+
277
+ /**
278
  * Get a list of the tags used by the images
279
  */
280
  function find_all_tags() {
321
  /**
322
  * nggTags::find_images_for_tags()
323
  * 20140120: Mode DESC added.
324
+ * 20140611:Dropped use of wpdb->prepare since singel quotes are scaped.
325
  * @param mixed $taglist
326
  * @param string $sorting could be 'ASC' or 'RAND' or 'DESC'
327
  * @return array of images
330
  // return the images based on the tag
331
  global $wpdb;
332
  $modes = array ('ASC','DESC','RAND');
333
+ //Sanitize & standarize list
334
+ $sluglist = self::sanitize_taglist($taglist);
335
 
336
+ // first get all $term_ids with this tag
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  //Fix for WP 3.9 . See http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/
338
+ $prepared = "SELECT term_id FROM $wpdb->terms WHERE slug IN ($sluglist) ORDER BY term_id ASC ";
339
+ $term_ids = $wpdb->get_col( $prepared );
340
+ //Get the objects related with the taxonomy defined by NextCellent
341
+ $picids = get_objects_in_term($term_ids, 'ngg_tag');
342
 
343
  //Now lookup in the database
344
  $sorting = in_array($sorting,$modes)?$sorting:'ASC';
345
  $pictures = nggdb::find_images_in_list($picids, true, $sorting );
 
346
  return $pictures;
347
  }
348
 
nggallery.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://www.wpgetready.com/nextcellent-gallery
5
  Description: A Photo Gallery for WordPress providing NextGEN legacy compatibility from version 1.9.13
6
  Author: WPGReady based on Alex Rabe & PhotoCrati work.
7
  Author URI: http://www.wpgetready.com
8
- Version: 1.9.19
9
 
10
  Copyright (c) 2007-2011 by Alex Rabe & NextGEN DEV-Team
11
  Copyright (c) 2012 Photocrati Media
@@ -52,7 +52,7 @@ if (!class_exists('nggLoader')) {
52
  */
53
  class nggLoader {
54
 
55
- var $version = '1.9.19';
56
  var $dbversion = '1.8.1';
57
  var $minimum_WP = '3.5';
58
  var $options = '';
5
  Description: A Photo Gallery for WordPress providing NextGEN legacy compatibility from version 1.9.13
6
  Author: WPGReady based on Alex Rabe & PhotoCrati work.
7
  Author URI: http://www.wpgetready.com
8
+ Version: 1.9.20
9
 
10
  Copyright (c) 2007-2011 by Alex Rabe & NextGEN DEV-Team
11
  Copyright (c) 2012 Photocrati Media
52
  */
53
  class nggLoader {
54
 
55
+ var $version = '1.9.20';
56
  var $dbversion = '1.8.1';
57
  var $minimum_WP = '3.5';
58
  var $options = '';
nggfunctions.php CHANGED
@@ -851,7 +851,6 @@ function nggSinglePicture($imageID, $width = 250, $height = 250, $mode = '', $fl
851
 
852
  return $out;
853
  }
854
-
855
  /**
856
  * nggShowGalleryTags() - create a gallery based on the tags
857
  *
@@ -887,6 +886,7 @@ function nggShowGalleryTags($taglist, $template = '', $sorting = 'ASC') {
887
  return $out;
888
  }
889
 
 
890
  /**
891
  * nggShowRelatedGallery() - create a gallery based on the tags
892
  *
851
 
852
  return $out;
853
  }
 
854
  /**
855
  * nggShowGalleryTags() - create a gallery based on the tags
856
  *
886
  return $out;
887
  }
888
 
889
+
890
  /**
891
  * nggShowRelatedGallery() - create a gallery based on the tags
892
  *
readme.txt CHANGED
@@ -10,16 +10,17 @@ License: GPLv2
10
 
11
  = WordPress Gallery Plugin =
12
 
13
- = V1.9.19 - 22.05.2014
14
 
15
  What's in it for you?
16
 
17
- * New uploader. Flash uploader deprecated (credits to Niko Strijbol)
18
- * Improved image folder importer. Now fixes folder & files with spaces (credits to Niko Strijbol)
19
- * Removed dead code
20
- * Wikipedia docs in progress http://wpgetready.com/wiki/nextcellent-plugin/ Be free to contribute! (contact us to request
21
- permission to edit it)
22
- * Re-fix vuln (previous fix also filtered html data, now fixed)
 
23
 
24
  VERY IMPORTANT: Read ON!
25
  -----------------------
@@ -32,20 +33,18 @@ VERY IMPORTANT: Read ON!
32
 
33
  - If you like it, please spread the word and rate it accordingly. I guess a lot of annoyed users can take advantage of NextCellent. Thank you!
34
 
 
35
 
36
- = So, who is going to use this plugin? =
37
 
38
- - The aim of NextCellent is to provide an alternative for traditional NextGEN users to keep their sites updated without breaking compatibility. Older subplugins will be also compatible (those which were compatible with version 1.9.13 or earlier).
39
 
40
- - Users who wants to stay working with older NextGEN version (1.9.13 or older) until they're confident enough to make the jump to newest 2.x.x version
41
 
42
- - Users wishing avoid NextGEN 2.x.x and beyond for the moment.
43
 
44
- - Site managers handling several sites using specialized software as InfiniteWP or ManageWP, wanting to keep their sites running with automatic updates.
45
 
46
- - Users preferring an alternative development path with backward compatibility.
47
-
48
- - Developers wanting to suggest or colaborate improving the code.
49
 
50
 
51
  = What do you get with NextCellent Gallery? =
@@ -140,7 +139,7 @@ NextCellent Plugin Shortcodes are 100% backward compatible with older NGG shortc
140
 
141
  = Examples =
142
 
143
- *Use Image Tags to Create Galleries/Albums* - [ nggtags album=WordPress,Cologne,Ireland ]
144
 
145
  *Display Captions in Thumbnail Galleries* - [ nggallery id=1 template=caption ]
146
 
@@ -148,7 +147,7 @@ NextCellent Plugin Shortcodes are 100% backward compatible with older NGG shortc
148
 
149
  *Display Exif Data* - [ imagebrowser id=28 template=exif ]
150
 
151
- *Sort Images in a Gallery Based on Their Tags* - [ nggtags gallery=cologne,wordpress,.. ]
152
 
153
  *Add Tag Clouds* - [ tagcloud]
154
 
@@ -182,7 +181,7 @@ NextCellent Plugin Shortcodes are 100% backward compatible with older NGG shortc
182
 
183
  = I'm going to install the plugin on a fresh site. Any recommendations? =
184
 
185
- - None than usual. Follow the installation procedure!
186
 
187
  = I'm currently using NextGEN. How can I switch from NextGEN to NextCellent? =
188
 
@@ -231,11 +230,12 @@ NextCellent Plugin Shortcodes are 100% backward compatible with older NGG shortc
231
  - If you are getting performance problems, go with NextCellent.
232
  - If you need peace of mind right now, go with NextCellent.
233
  - If you are managing large amounts of sites, and you need update-and-forget without FTP (like InfiniteWP or ManageWP), go with NextCellent.
 
234
  - NextCellent is a place where you can download and install currently an older, stable version. And when I say 'older' is completely different of saying obsolete. We (the users an me) are taking a different development path, picking up the old, good code and working from there.
235
 
236
  = I am a developer , would be wise to create plugins based on NextCellent? =
237
 
238
- - That is another good question. Since NextCellent is a branch from NextGEN 1.9.13, I will do my best to keep it stable. I can assure the code will lack of dramatic changes over the time, unless there is a big need to do that.
239
 
240
  = Are you related with Alex Rabe or PhotoCrati? =
241
 
@@ -243,11 +243,12 @@ NextCellent Plugin Shortcodes are 100% backward compatible with older NGG shortc
243
 
244
  = Will NextCellent continue evolving? =
245
 
246
- - **Absolutely**. Current version has many things to be improved. Versions will be numbered as 1.9.x avoiding conflicting NextGEN numbering. However NextCellent will respect current configuration and database table format, so you can switch to NextGEN version (theoretically) without effort.
247
 
248
  = Will NextCellent Gallery work with my theme? =
249
 
250
  - NextCellent uses the same codebase and tries to mimic older NextGEN as much as possible. In short, it should!
 
251
 
252
  = Will NextCellent work with my NextGEN Galleries? =
253
 
@@ -269,7 +270,9 @@ Why then the name NextCellent instead NextGEN Legacy for example? =
269
 
270
  = Will NextCellent work with NextGEN plugins and subplugins? =
271
 
272
- - Since the code is based on the older version, it will work with all plugins which worked for NextGEN version 1.9.13 or earlier. However be warned many developers already started (and finished) making the migration to new NextGEN version.
 
 
273
 
274
  = Wait, I'm using flash gallery along imagerotator.swf but I cannot find it in this plugin!
275
 
@@ -325,9 +328,17 @@ Yes, since we use Javascript rather than flash, NextCellent Gallery is compatibl
325
  - You should go to original NextGEN plugin to check this out. <a href="http://www.NextGEN-gallery.com/languages/" target="_blank">click here to find out more.</a>
326
  - Many users are creating their respective translations and they will be included, along respective credits. Thanks to them!!!
327
 
328
-
329
  == Changelog ==
330
 
 
 
 
 
 
 
 
 
 
331
  = V1.9.19 - 22.05.2014
332
  * New uploader. Flash uploader deprecated (credits to Niko Strijbol)
333
  * Improved image folder importer. Now fixes folder & files with spaces (credits to Niko Strijbol)
@@ -335,7 +346,6 @@ Yes, since we use Javascript rather than flash, NextCellent Gallery is compatibl
335
  * Wikipedia docs in progress http://wpgetready.com/wiki/nextcellent-plugin/ Be free to contribute! (contact us to request permission to edit it)
336
  * Re-fix vuln (previous fix also filtered html data, now fixed)
337
 
338
-
339
  = V1.9.18 - 23.04.2014 =
340
  * Fixes compatibility with TinyMCE 1.4, for WordPress 3.9. (credits to Niko Strijbol)
341
  * Fixes use of mysql_*(), which isn't allowed anymore. (credits to Niko Strijbol)
10
 
11
  = WordPress Gallery Plugin =
12
 
13
+ = V1.9.20 - 20.06.2014
14
 
15
  What's in it for you?
16
 
17
+ * Fixes on uploader (credits to Niko Strijbol)
18
+ * Fixes for nggtag shortcode (credits to Niko Strijbol)
19
+ * Refactored code in few places
20
+ * Fix vulnerability which disallowed html text & santitize_taglist function (credits to NS & FZ)
21
+ * Fix for 3.9 and typos for strict warning
22
+ * Improved injections prevention (credits to jayque9)
23
+ * Improve spelling & error message (credits to Niko Strijbol)
24
 
25
  VERY IMPORTANT: Read ON!
26
  -----------------------
33
 
34
  - If you like it, please spread the word and rate it accordingly. I guess a lot of annoyed users can take advantage of NextCellent. Thank you!
35
 
36
+ - WE APPRECIATE YOUR FEEDBACK. Be our voice and comment it!!!!
37
 
 
38
 
39
+ = What is Nextcellent? =
40
 
41
+ - NextCellent is a image gallery plugin, based on older NextGen gallery code
42
 
43
+ - NextCellent provides an alternative for traditional NextGEN users to keep their sites updated without breaking compatibility.
44
 
45
+ - Older subplugins NextGen-compatible will be compatible (prior NextGen 1.9.13 or earlier).
46
 
47
+ - Compatibility issues? Please check NextCellent Wiki (in construction) http://wpgetready.com/wiki/nextcellent-plugin/
 
 
48
 
49
 
50
  = What do you get with NextCellent Gallery? =
139
 
140
  = Examples =
141
 
142
+ *Use Image Tags to Create Galleries/Albums* - [ nggtags album="WordPress,Cologne,Ireland" ]
143
 
144
  *Display Captions in Thumbnail Galleries* - [ nggallery id=1 template=caption ]
145
 
147
 
148
  *Display Exif Data* - [ imagebrowser id=28 template=exif ]
149
 
150
+ *Sort Images in a Gallery Based on Their Tags* - [ nggtags gallery="cologne,wordpress,.." ]
151
 
152
  *Add Tag Clouds* - [ tagcloud]
153
 
181
 
182
  = I'm going to install the plugin on a fresh site. Any recommendations? =
183
 
184
+ - None than usual. NextCellent is a FULL plugin which works with Wordpress. Follow the installation procedure!
185
 
186
  = I'm currently using NextGEN. How can I switch from NextGEN to NextCellent? =
187
 
230
  - If you are getting performance problems, go with NextCellent.
231
  - If you need peace of mind right now, go with NextCellent.
232
  - If you are managing large amounts of sites, and you need update-and-forget without FTP (like InfiniteWP or ManageWP), go with NextCellent.
233
+ - if you need a STABLE plugin codebase without suprising code changes choose NextCellent.
234
  - NextCellent is a place where you can download and install currently an older, stable version. And when I say 'older' is completely different of saying obsolete. We (the users an me) are taking a different development path, picking up the old, good code and working from there.
235
 
236
  = I am a developer , would be wise to create plugins based on NextCellent? =
237
 
238
+ - YES. NextCellent is a branch from NextGEN 1.9.13, I will do my best to keep it stable. I can assure the code will lack of dramatic changes over the time, unless there is a big need to do that.
239
 
240
  = Are you related with Alex Rabe or PhotoCrati? =
241
 
243
 
244
  = Will NextCellent continue evolving? =
245
 
246
+ - **YES**. Current version has many things to be improved. Versions will be numbered as 1.9.x avoiding conflicting NextGEN numbering. NextCellent will respect current configuration and database table format, so you can switch to NextGEN version (theoretically) safely.
247
 
248
  = Will NextCellent Gallery work with my theme? =
249
 
250
  - NextCellent uses the same codebase and tries to mimic older NextGEN as much as possible. In short, it should!
251
+ - There is a NextCellent Wiki addressing some common questions http://wpgetready.com/wiki/nextcellent-plugin/
252
 
253
  = Will NextCellent work with my NextGEN Galleries? =
254
 
270
 
271
  = Will NextCellent work with NextGEN plugins and subplugins? =
272
 
273
+ - Nextcellent will work with all plugins which worked for NextGEN version 1.9.13 or earlier. However be warned many developers already started (and finished) making the migration to new NextGEN version.
274
+
275
+ - We are testing case by case on the compatibility list for plugins http://wpgetready.com/wiki/nextcellent-plugin/compatibility-list/
276
 
277
  = Wait, I'm using flash gallery along imagerotator.swf but I cannot find it in this plugin!
278
 
328
  - You should go to original NextGEN plugin to check this out. <a href="http://www.NextGEN-gallery.com/languages/" target="_blank">click here to find out more.</a>
329
  - Many users are creating their respective translations and they will be included, along respective credits. Thanks to them!!!
330
 
 
331
  == Changelog ==
332
 
333
+ = V1.9.19 - 20.06.2014
334
+ * Fixes on uploader (credits to Niko Strijbol)
335
+ * Fixes for nggtag shortcode (credits to Niko Strijbol)
336
+ * Refactored code in few places
337
+ * Fix vulnerability which disallowed html text & santitize_taglist function (credits to NS & FZ)
338
+ * Fix for 3.9 and typos for strict warning
339
+ * Improved injections prevention (credits to jayque9)
340
+ * Improve spelling & error message (credits to Niko Strijbol)
341
+
342
  = V1.9.19 - 22.05.2014
343
  * New uploader. Flash uploader deprecated (credits to Niko Strijbol)
344
  * Improved image folder importer. Now fixes folder & files with spaces (credits to Niko Strijbol)
346
  * Wikipedia docs in progress http://wpgetready.com/wiki/nextcellent-plugin/ Be free to contribute! (contact us to request permission to edit it)
347
  * Re-fix vuln (previous fix also filtered html data, now fixed)
348
 
 
349
  = V1.9.18 - 23.04.2014 =
350
  * Fixes compatibility with TinyMCE 1.4, for WordPress 3.9. (credits to Niko Strijbol)
351
  * Fixes use of mysql_*(), which isn't allowed anymore. (credits to Niko Strijbol)