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 | 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 +1 -1
- admin/album.php +4 -4
- admin/functions.php +1 -8
- admin/js/plupload.handler.js +13 -11
- admin/manage-images.php +2 -4
- admin/settings.php +1 -1
- admin/style.php +1 -1
- admin/tinymce/editor_plugin.js +1 -2
- lib/core.php +13 -2
- lib/tags.php +37 -19
- nggallery.php +2 -2
- nggfunctions.php +1 -1
- readme.txt +33 -23
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(__('
|
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(__('
|
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(__('
|
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"
|
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">━</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['
|
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 |
-
|
115 |
break;
|
116 |
case plupload.FILE_EXTENSION_ERROR:
|
117 |
-
|
118 |
break;
|
119 |
case plupload.FILE_SIZE_ERROR:
|
120 |
-
|
121 |
break;
|
122 |
case plupload.IMAGE_FORMAT_ERROR:
|
123 |
-
|
124 |
break;
|
125 |
case plupload.IMAGE_MEMORY_ERROR:
|
126 |
-
|
127 |
break;
|
128 |
case plupload.IMAGE_DIMENSIONS_ERROR:
|
129 |
-
|
130 |
break;
|
131 |
case plupload.GENERIC_ERROR:
|
132 |
-
|
133 |
break;
|
134 |
case plupload.IO_ERROR:
|
135 |
-
|
136 |
break;
|
137 |
case plupload.HTTP_ERROR:
|
138 |
-
|
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 |
-
|
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 |
-
|
505 |
-
|
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(__('
|
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(__('
|
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 : '
|
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="
|
16 |
}
|
17 |
|
18 |
/**
|
19 |
* Show a system messages
|
20 |
*/
|
21 |
static function show_message($message) {
|
22 |
-
echo '<div class="
|
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 |
-
|
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 |
-
|
322 |
-
|
|
|
|
|
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.
|
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.
|
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.
|
14 |
|
15 |
What's in it for you?
|
16 |
|
17 |
-
*
|
18 |
-
*
|
19 |
-
*
|
20 |
-
*
|
21 |
-
|
22 |
-
*
|
|
|
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 |
-
|
39 |
|
40 |
-
-
|
41 |
|
42 |
-
-
|
43 |
|
44 |
-
-
|
45 |
|
46 |
-
-
|
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 |
-
-
|
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 |
-
- **
|
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 |
-
-
|
|
|
|
|
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)
|