From 2d242a9c939558280053fb9695ddf9ee69a0f4d8 Mon Sep 17 00:00:00 2001
From: lucha <lucha@paranoici.org>
Date: Sat, 25 Oct 2014 18:17:26 +0200
Subject: [PATCH] [auto] Plugin: nextgen-gallery 2.0.66.29

---
 .../plugins/nextgen-gallery/changelog.txt     | 14 ++++++--
 .../plugins/nextgen-gallery/nggallery.php     |  4 +--
 .../attach_to_post/module.attach_to_post.php  | 23 ++-----------
 ...ter.nextgen_basic_singlepic_controller.php |  3 +-
 .../class.gallerystorage_driver_base.php      |  4 +--
 .../class.displayed_gallery.php               | 17 +++++++---
 .../nextgen_xmlrpc/module.nextgen_xmlrpc.php  |  5 ++-
 .../module.third_party_compat.php             | 33 -------------------
 .../module.wordpress_routing.php              |  6 ++--
 wp-content/plugins/nextgen-gallery/readme.txt | 16 ++++++---
 10 files changed, 50 insertions(+), 75 deletions(-)

diff --git a/wp-content/plugins/nextgen-gallery/changelog.txt b/wp-content/plugins/nextgen-gallery/changelog.txt
index 6afdf2a9c..244a836e2 100644
--- a/wp-content/plugins/nextgen-gallery/changelog.txt
+++ b/wp-content/plugins/nextgen-gallery/changelog.txt
@@ -1,6 +1,14 @@
 NextGEN Gallery
 by Photocrati Media
 
+= V2.0.66.29 - 09.17.2014 =
+* NEW:     Added skip_excluding_globally_excluded_images property to displayed gallery objects
+* Fixed:   SQL generation for random image selection
+* Fixed:   Adjust regex for replacing displayed gallery placeholder images
+* Fixed:   Removed filters to home_url needed previously for WMPL compatibility
+* Fixed:   Use canonical redirects when appropriate
+* Fixed:   Ability to override image files using XML-RPC
+
 = V2.0.66.27 - 08.18.2014 =
 * Fixed:   Missing class.frame_communication_option_handerl.php error
 
@@ -35,7 +43,7 @@ by Photocrati Media
 * NEW: 	   Spanish (es_ES) language thanks to Andrew Kurtis at WebHostingHub
 * Changed: Updated Czech language thanks to Separatista; additional thanks to Martin Krizek for the original translation who was mistakenly unaccredited
 * Changed: "Upgrade to Pro" page has new design, advertises for NextGEN Plus
-* Changed: Basic Albums templates now given the image counter <p> element the class 'ngg-album-gallery-image-counter' (by user request)
+* Changed: Basic Albums templates now given the image counter P element the class 'ngg-album-gallery-image-counter' (by user request)
 * Changed: Gallery widgets now apply height:auto to their element; fixes compatibility with some themes
 * Changed: Random galleries should be substantially faster now (1000% or more for large image tables)
 * Fixed:   Complete WPML compatibility
@@ -49,7 +57,7 @@ by Photocrati Media
 * Fixed:   Multisite gallery path tooltip gave a wrong default setting
 * Fixed:   Flush 'all' caches when pope_module_list setting changes
 * Fixed:   Don't enqueue related images css in the admin
-* Fixed:   Basic Slideshows fixes WP creating extraneous <p> element above the slideshow display
+* Fixed:   Basic Slideshows fixes WP creating extraneous P element above the slideshow display
 * Fixed:   Basic Singlepic will now display images marked 'excluded' in the admin
 * Fixed:   Admin pages can now update when the "Save" button text has been translated
 
@@ -831,7 +839,7 @@ Fixed:     Match legacy behaviour when changing gallery path, i.e. don't move fi
 * Added : New filter function to add custom columns
 * Bugfix : Fixed width for Thickbox in Manage gallery
 * Bugfix : fixed width for media upload select box
-* Bugfix : Remove <p> tag in singlepic regex
+* Bugfix : Remove P tag in singlepic regex
 * Bugfix : Correct format of shutter speed
 * Bugfix : Album name in Short code not useable
 
diff --git a/wp-content/plugins/nextgen-gallery/nggallery.php b/wp-content/plugins/nextgen-gallery/nggallery.php
index 6361842e0..66b33a18a 100755
--- a/wp-content/plugins/nextgen-gallery/nggallery.php
+++ b/wp-content/plugins/nextgen-gallery/nggallery.php
@@ -4,7 +4,7 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You
 /**
  * Plugin Name: NextGEN Gallery by Photocrati
  * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 9 million downloads.
- * Version: 2.0.66.27
+ * Version: 2.0.66.29
  * Author: Photocrati Media
  * Plugin URI: http://www.nextgen-gallery.com
  * Author URI: http://www.photocrati.com
@@ -431,7 +431,7 @@ class C_NextGEN_Bootstrap
 		define('NGG_PRODUCT_URL', path_join(str_replace("\\", '/', NGG_PLUGIN_URL), 'products'));
 		define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
 		define('NGG_PLUGIN_STARTED_AT', microtime());
-		define('NGG_PLUGIN_VERSION', '2.0.66.27');
+		define('NGG_PLUGIN_VERSION', '2.0.66.29');
 
 		if (!defined('NGG_HIDE_STRICT_ERRORS')) {
 			define('NGG_HIDE_STRICT_ERRORS', TRUE);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php
index fa6df7443..48d6dcedc 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php
@@ -167,27 +167,10 @@ class M_Attach_To_Post extends C_Base_Module
      */
     function substitute_placeholder_imgs($content)
     {
-		// Get some utilities
-		$mapper = $this->get_registry()->get_utility('I_Displayed_Gallery_Mapper');
-		$router	= $this->get_registry()->get_utility('I_Router');
-
-		// To match ATP entries we compare the stored url against a generic path
-		// We must check HTTP and HTTPS as well as permalink and non-permalink forms
-		$preview_url = parse_url($router->join_paths(
-			$router->remove_url_segment('index.php', $router->get_base_url('root')),
-			'/nextgen-attach_to_post/preview'
-		));
-        $router->debug = TRUE;
-		$preview_url = preg_quote($preview_url['host'] . $preview_url['path'], '#');
-
-		$alt_preview_url = parse_url($router->join_paths(
-			$router->remove_url_segment('index.php', $router->get_base_url('root')),
-			'index.php/nextgen-attach_to_post/preview'
-		));
-		$alt_preview_url = preg_quote($alt_preview_url['host'] . $alt_preview_url['path'], '#');
-
 		// The placeholder MUST have a gallery instance id
-		if (preg_match_all("#<img.*http(s)?://({$preview_url}|{$alt_preview_url})/id--(\\d+).*\\/>#mi", $content, $matches, PREG_SET_ORDER)) {
+        if (preg_match_all("#<img.*http(s)?://(.*)/" . NGG_ATTACH_TO_POST_SLUG . "/preview/id--(\\d+).*>#mi", $content, $matches, PREG_SET_ORDER))
+        {
+            $mapper = C_Displayed_Gallery_Mapper::get_instance();
 			foreach ($matches as $match) {
 				// Find the displayed gallery
 				$displayed_gallery_id = $match[3];
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php
index 022464298..1a0df1561 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php
@@ -14,7 +14,8 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin
         $display_settings = $displayed_gallery->display_settings;
 
         // use this over get_included_entities() so we can display images marked 'excluded'
-        $image = array_shift($displayed_gallery->get_entities(1, FALSE, FALSE, 'both'));
+        $displayed_gallery->skip_excluding_globally_excluded_images = TRUE;
+        $image = array_shift($displayed_gallery->get_entities(1, FALSE, FALSE, 'included'));
 
         if (!$image)
             return $this->object->render_partial("photocrati-nextgen_gallery_display#no_images_found", array(), $return);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php
index 0e49fe4cd..b4d0d11d5 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php
@@ -626,7 +626,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
 	 * @param type $filename specifies the name of the file
 	 * @return C_Image
 	 */
-	function upload_base64_image($gallery, $data, $filename=FALSE, $image_id=FALSE)
+    function upload_base64_image($gallery, $data, $filename=FALSE, $image_id=FALSE, $override=FALSE)
 	{
         $settings = C_NextGen_Settings::get_instance();
         $memory_limit = intval(ini_get('memory_limit'));
@@ -663,7 +663,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin
 
             // Prevent duplicate filenames: check if the filename exists and
             // begin appending '-i' until we find an open slot
-            if (!ini_get('safe_mode') && @file_exists($abs_filename))
+            if (!ini_get('safe_mode') && @file_exists($abs_filename) && !$override)
             {
                 $file_exists = TRUE;
                 $i = 0;
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php
index be163442f..225013ee8 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php
@@ -255,9 +255,9 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
 				$mapper->where(array("{$image_key} NOT IN %s", $this->object->exclusions));
 			}
 
-			// Ensure that no images marked as excluded at the gallery level are
-			// returned
-			$mapper->where(array("exclude = %d", 0));
+			// Ensure that no images marked as excluded at the gallery level are returned
+            if (empty($this->object->skip_excluding_globally_excluded_images))
+			    $mapper->where(array("exclude = %d", 0));
 		}
 
 		// When returns is "excluded", it's a little more complicated as the
@@ -349,8 +349,15 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
         // gallery created by randomly selecting X image ids that are then set as the gallery entity_ids
 		elseif ($this->object->source == 'random_images' && empty($this->object->entity_ids)) {
             $table_name = $mapper->get_table_name();
-            $mapper->_where_clauses[] = " /*NGG_NO_EXTRAS_TABLE*/ `{$image_key}` IN (SELECT `{$image_key}` FROM (SELECT `{$image_key}` FROM `{$table_name}` i ORDER BY RAND() LIMIT {$this->object->maximum_entity_count}) o) /*NGG_NO_EXTRAS_TABLE*/";
-		}
+            $where_clauses = array();
+            $sub_where_sql = '';
+            foreach ($mapper->_where_clauses as $where) {
+                $where_clauses[] = '(' . $where . ')';
+            }
+            if ($where_clauses)
+                $sub_where_sql = 'WHERE ' . implode(' AND ', $where_clauses);
+            $mapper->_where_clauses = array(" /*NGG_NO_EXTRAS_TABLE*/ `{$image_key}` IN (SELECT `{$image_key}` FROM (SELECT `{$image_key}` FROM `{$table_name}` i {$sub_where_sql} ORDER BY RAND() LIMIT {$this->object->maximum_entity_count}) o) /*NGG_NO_EXTRAS_TABLE*/");
+        }
 
 		// Apply a sorting order
 		if ($sort_by)  $mapper->order_by($sort_by, $sort_direction);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php
index 7bc8060ca..5b6cee7af 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php
@@ -238,6 +238,9 @@ class M_NextGen_XmlRpc extends C_Base_Module
 		$password   = strval($args[2]);
 		$data		= $args[3];
 		$gallery_id = isset($data['gallery_id']) ? $data['gallery_id'] : $data['gallery'];
+        if (!isset($data['override'])) $data['override'] = FALSE;
+        if (!isset($data['overwrite']))$data['overwrite']= FALSE;
+        $data['override'] = $data['overwrite'];
 
 		// Authenticate the user
 		if ($this->_login($username, $password, $blog_id)) {
@@ -251,7 +254,7 @@ class M_NextGen_XmlRpc extends C_Base_Module
 
 					// Upload the image
 					$storage	= C_Gallery_Storage::get_instance();
-					$image		= $storage->upload_base64_image($gallery, $data['bits'], $data['name'], $data['image_id']);
+                    $image		= $storage->upload_base64_image($gallery, $data['bits'], $data['name'], $data['image_id'], $data['override']);
 					if ($image) {
 						$storage = C_Gallery_Storage::get_instance();
 						$image->imageURL	= $storage->get_image_url($image);
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php
index bd8315e69..bf3ca546d 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php
@@ -83,7 +83,6 @@ class M_Third_Party_Compat extends C_Base_Module
         add_action('plugins_loaded', array(&$this, 'wpml'), PHP_INT_MAX);
         add_action('plugins_loaded', array(&$this, 'wpml_translation_management'), PHP_INT_MAX);
 
-        add_filter('home_url', array(&$this, 'wpml_home_url'), -1, 4);
         add_filter('headway_gzip', array(&$this, 'headway_gzip'), (PHP_INT_MAX - 1));
         add_filter('ckeditor_external_plugins', array(&$this, 'ckeditor_plugins'), 11);
         add_filter('bp_do_redirect_canonical', array(&$this, 'fix_buddypress_routing'));
@@ -114,38 +113,6 @@ class M_Third_Party_Compat extends C_Base_Module
         M_WordPress_Routing::$_use_old_slugs = FALSE;
     }
 
-    /**
-     * WPML's home_url filter causes a conflict with NextGEN's url generation, but doesn't appear to be necessary for
-     * WPML to function. This is necessary until we properly support WP_CONTENT_URL & WP_PLUGINS_URL.
-     *
-     * @param $url
-     * @param $path
-     * @param $orig_scheme
-     * @param $blog_id
-     * @return mixed
-     */
-    function wpml_home_url($url, $path, $orig_scheme, $blog_id)
-    {
-        if (!class_exists('SitePress'))
-            return $url;
-
-        global $wp_filter;
-
-        if (empty($wp_filter['home_url'][1]))
-            return $url;
-
-        foreach ($wp_filter['home_url'][1] as $id => $filter) {
-            if (!strpos($id, 'home_url'))
-                continue;
-            $object = $filter['function'][0];
-            if (is_object($object) && get_class($object) != 'SitePress')
-                continue;
-            remove_filter('home_url', array($object, 'home_url'), 1);
-        }
-
-        return $url;
-    }
-
     /**
      * CKEditor features a custom NextGEN shortcode generator that unfortunately relies on parts of the NextGEN
      * 1.9x API that has been deprecated in NextGEN 2.0
diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php
index eef10b74c..7f906ae9b 100644
--- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php
+++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php
@@ -8,8 +8,8 @@
  ***/
 class M_WordPress_Routing extends C_Base_Module
 {
-    static $_use_canonical_redirect = NULL;
-    static $_use_old_slugs          = NULL;
+    static $_use_canonical_redirect = TRUE;
+    static $_use_old_slugs          = TRUE;
 
     function define()
 	{
@@ -39,11 +39,9 @@ class M_WordPress_Routing extends C_Base_Module
         // in the restore_request_uri() method
         if (has_action('template_redirect', 'wp_old_slug_redirect')) {
             remove_action( 'template_redirect', 'wp_old_slug_redirect');
-            if (!is_null(self::$_use_canonical_redirect)) self::$_use_old_slugs = TRUE;
         }
         if (has_action('template_redirect', 'redirect_canonical')) {
             remove_action( 'template_redirect', 'redirect_canonical');
-            if (!is_null(self::$_use_canonical_redirect)) self::$_use_canonical_redirect = TRUE;
         }
     }
 
diff --git a/wp-content/plugins/nextgen-gallery/readme.txt b/wp-content/plugins/nextgen-gallery/readme.txt
index 030d19082..7c591bc19 100644
--- a/wp-content/plugins/nextgen-gallery/readme.txt
+++ b/wp-content/plugins/nextgen-gallery/readme.txt
@@ -2,7 +2,7 @@
 Contributors: photocrati
 Tags:gallery,image,images,photo,photos,picture,pictures,slideshow,flash,media,thumbnails,photo-albums,nextgen-gallery,nextgen
 Requires at least: 3.6.1
-Tested up to: 3.9.1
+Tested up to: 4.0
 Stable tag: trunk
 License: GPLv2
 
@@ -60,7 +60,7 @@ NextGEN has been the dominant WordPress gallery plugin for years. As a result, t
 *See <a href="http://www.nextgen-gallery.com/help/" target="_blank">NextGEN Gallery Documentation</a><br>
 *Get <a href="http://wordpress.org/tags/nextgen-gallery?forum_id=10" target="_blank">NextGEN Support</a> via the WordPress.org forums<br>
 *Get <a href="http://www.nextgen-gallery.com/languages/" target="_blank">Translations</a> for your own language<br>
-*See <a href="http://www.photocrati.com/photography-wordpress-themes" target="_blank">WordPress Photography Themes</a> by the same author<br>
+*See <a href="http://www.photocrati.com/wordpress-photography-themes" target="_blank">WordPress Photography Themes</a> by the same author<br>
 *Follow NextGEN Gallery on <a title="Follow NextGEN Gallery on Facebook" href="http://www.facebook.com/NextGENGallery" target="_blank">Facebook</a>, <a title="Follow NextGEN Gallery on Twitter" href="http://twitter.com/NextGENGallery" target="_blank">Twitter</a>, and <a title="Follow NextGEN Gallery on Google +" href="http://plus.google.com/101643895780935290171" target="_blank">Google +</a><br>
 
 
@@ -199,6 +199,14 @@ For more information, feel free to visit the official website for the NextGEN Ga
 
 == Changelog ==
 
+= V2.0.66.29 - 09.17.2014 =
+* NEW:     Added skip_excluding_globally_excluded_images property to displayed gallery objects
+* Fixed:   SQL generation for random image selection
+* Fixed:   Adjust regex for replacing displayed gallery placeholder images
+* Fixed:   Removed filters to home_url needed previously for WMPL compatibility
+* Fixed:   Use canonical redirects when appropriate
+* Fixed:   Ability to override image files using XML-RPC
+
 = V2.0.66.27 - 08.18.2014 =
 * Fixed:   Missing class.frame_communication_option_handerl.php error
 
@@ -233,7 +241,7 @@ For more information, feel free to visit the official website for the NextGEN Ga
 * NEW: 	   Spanish (es_ES) language thanks to Andrew Kurtis at WebHostingHub
 * Changed: Updated Czech language thanks to Separatista; additional thanks to Martin Krizek for the original translation who was mistakenly unaccredited
 * Changed: "Upgrade to Pro" page has new design, advertises for NextGEN Plus
-* Changed: Basic Albums templates now given the image counter <p> element the class 'ngg-album-gallery-image-counter' (by user request)
+* Changed: Basic Albums templates now given the image counter P element the class 'ngg-album-gallery-image-counter' (by user request)
 * Changed: Gallery widgets now apply height:auto to their element; fixes compatibility with some themes
 * Changed: Random galleries should be substantially faster now (1000% or more for large image tables)
 * Fixed:   Complete WPML compatibility
@@ -247,7 +255,7 @@ For more information, feel free to visit the official website for the NextGEN Ga
 * Fixed:   Multisite gallery path tooltip gave a wrong default setting
 * Fixed:   Flush 'all' caches when pope_module_list setting changes
 * Fixed:   Don't enqueue related images css in the admin
-* Fixed:   Basic Slideshows fixes WP creating extraneous <p> element above the slideshow display
+* Fixed:   Basic Slideshows fixes WP creating extraneous P element above the slideshow display
 * Fixed:   Basic Singlepic will now display images marked 'excluded' in the admin
 * Fixed:   Admin pages can now update when the "Save" button text has been translated
 
-- 
GitLab