NextGEN Gallery – WordPress Gallery Plugin - Version 3.3.2

Version Description

  • 04.07.2020 =
  • Fixed: Gallery paths were calculated incorrectly on wordpress.com hosting
  • Fixed: Insert Gallery Window could not edit an existing displayed gallery with a legacy template without breaking the displayed gallery
  • Fixed: Manage Albums page could generate lengthy PHP warnings if galleries or other albums did not have a preview image assigned
  • Fixed: NextGen was forcing the 'screen_options_show_screen' filter to always be true
  • Fixed: Plugin would not load and would throw an error due to C_Component_Registry not being found
  • Fixed: Removed last traces of javascript that were in display type templates
Download this release

Release Info

Developer photocrati
Plugin Icon 128x128 NextGEN Gallery – WordPress Gallery Plugin
Version 3.3.2
Comparing to
See all releases

Code changes from version 3.3.0 to 3.3.2

Files changed (25) hide show
  1. changelog.txt +8 -0
  2. nggallery.php +3 -3
  3. products/photocrati_nextgen/modules/attach_to_post/package.module.attach_to_post.php +4 -2
  4. products/photocrati_nextgen/modules/fs/module.fs.php +1 -1
  5. products/photocrati_nextgen/modules/fs/package.module.fs.php +7 -1
  6. products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php +3 -3
  7. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php +77 -106
  8. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php +6 -17
  9. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/imagebrowser.js +11 -0
  10. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/imagebrowser.min.js +1 -0
  11. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.css +3 -0
  12. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.min.css +1 -1
  13. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/default-view.php +63 -57
  14. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php +64 -58
  15. products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php +1 -1
  16. products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php +2 -2
  17. products/photocrati_nextgen/modules/ngglegacy/admin/album.php +10 -6
  18. products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php +1 -1
  19. products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php +1 -6
  20. products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php +1 -6
  21. products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php +1 -6
  22. readme.txt +11 -3
  23. vendor/autoload.php +1 -1
  24. vendor/composer/autoload_real.php +7 -7
  25. vendor/composer/autoload_static.php +3 -3
changelog.txt CHANGED
@@ -1,6 +1,14 @@
1
  NextGEN Gallery
2
  by Imagely
3
 
 
 
 
 
 
 
 
 
4
  = V3.3.0 - 03.10.2020 =
5
  * NEW: Added feature on Manage Galleries page to search gallery names
6
  * NEW: Added filter 'ngg_disable_shortcodes_in_request_api' to disable rendering of NextGen shortcodes in REST
1
  NextGEN Gallery
2
  by Imagely
3
 
4
+ = V3.3.2 - 04.07.2020 =
5
+ * Fixed: Gallery paths were calculated incorrectly on wordpress.com hosting
6
+ * Fixed: Insert Gallery Window could not edit an existing displayed gallery with a legacy template without breaking the displayed gallery
7
+ * Fixed: Manage Albums page could generate lengthy PHP warnings if galleries or other albums did not have a preview image assigned
8
+ * Fixed: NextGen was forcing the 'screen_options_show_screen' filter to always be true
9
+ * Fixed: Plugin would not load and would throw an error due to C_Component_Registry not being found
10
+ * Fixed: Removed last traces of javascript that were in display type templates
11
+
12
  = V3.3.0 - 03.10.2020 =
13
  * NEW: Added feature on Manage Galleries page to search gallery names
14
  * NEW: Added filter 'ngg_disable_shortcodes_in_request_api' to disable rendering of NextGen shortcodes in REST
nggallery.php CHANGED
@@ -4,7 +4,7 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You
4
  /**
5
  * Plugin Name: NextGEN Gallery
6
  * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 28 million downloads.
7
- * Version: 3.3.0
8
  * Author: Imagely
9
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
10
  * Author URI: https://www.imagely.com
@@ -270,7 +270,7 @@ class C_NextGEN_Bootstrap
270
  if ($tmp && (int)$tmp <= 300) @ini_set('xdebug.max_nesting_level', 300);
271
 
272
  // Include pope framework
273
- require_once('vendor/autoload.php');
274
 
275
  // Enable/disable pope caching. For now, the pope cache will not be used in multisite environments
276
  if (class_exists('C_Pope_Cache')) {
@@ -713,7 +713,7 @@ class C_NextGEN_Bootstrap
713
  define('NGG_PRODUCT_URL', path_join(str_replace("\\" , '/', NGG_PLUGIN_URL), 'products'));
714
  define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
715
  define('NGG_PLUGIN_STARTED_AT', microtime());
716
- define('NGG_PLUGIN_VERSION', '3.3.0');
717
 
718
  define(
719
  'NGG_SCRIPT_VERSION',
4
  /**
5
  * Plugin Name: NextGEN Gallery
6
  * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 28 million downloads.
7
+ * Version: 3.3.2
8
  * Author: Imagely
9
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
10
  * Author URI: https://www.imagely.com
270
  if ($tmp && (int)$tmp <= 300) @ini_set('xdebug.max_nesting_level', 300);
271
 
272
  // Include pope framework
273
+ require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'vendor/autoload.php');
274
 
275
  // Enable/disable pope caching. For now, the pope cache will not be used in multisite environments
276
  if (class_exists('C_Pope_Cache')) {
713
  define('NGG_PRODUCT_URL', path_join(str_replace("\\" , '/', NGG_PLUGIN_URL), 'products'));
714
  define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
715
  define('NGG_PLUGIN_STARTED_AT', microtime());
716
+ define('NGG_PLUGIN_VERSION', '3.3.2');
717
 
718
  define(
719
  'NGG_SCRIPT_VERSION',
products/photocrati_nextgen/modules/attach_to_post/package.module.attach_to_post.php CHANGED
@@ -273,8 +273,10 @@ class Mixin_Attach_To_Post extends Mixin
273
  $this->object->_displayed_gallery = $mapper->find($id, TRUE);
274
  } else {
275
  if (isset($_REQUEST['shortcode'])) {
276
- $params = str_replace('ngg_images', '', base64_decode($_REQUEST['shortcode']));
277
- $params = str_replace('ngg', '', base64_decode($_REQUEST['shortcode']));
 
 
278
  $params = stripslashes($params);
279
  $params = str_replace(array('[', ']'), array('&#91;', '&#93;'), $params);
280
  $params = shortcode_parse_atts($params);
273
  $this->object->_displayed_gallery = $mapper->find($id, TRUE);
274
  } else {
275
  if (isset($_REQUEST['shortcode'])) {
276
+ // Fetch the displayed gallery by shortcode
277
+ $shortcode = base64_decode($_REQUEST['shortcode']);
278
+ // $shortcode lacks the opening and closing brackets but still begins with 'ngg ' or 'ngg_images ' which are not parameters
279
+ $params = preg_replace('/^(ngg|ngg_images) /i', '', $shortcode, 1);
280
  $params = stripslashes($params);
281
  $params = str_replace(array('[', ']'), array('&#91;', '&#93;'), $params);
282
  $params = shortcode_parse_atts($params);
products/photocrati_nextgen/modules/fs/module.fs.php CHANGED
@@ -19,7 +19,7 @@ class M_Fs extends C_Base_Module
19
  'photocrati-fs',
20
  'Filesystem',
21
  'Provides a filesystem abstraction layer for Pope modules',
22
- '3.1.8',
23
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
24
  'Imagely',
25
  'https://www.imagely.com'
19
  'photocrati-fs',
20
  'Filesystem',
21
  'Provides a filesystem abstraction layer for Pope modules',
22
+ '3.3.2',
23
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
24
  'Imagely',
25
  'https://www.imagely.com'
products/photocrati_nextgen/modules/fs/package.module.fs.php CHANGED
@@ -34,7 +34,13 @@ class C_Fs extends C_Component
34
  function initialize()
35
  {
36
  parent::initialize();
37
- $this->_document_root = $this->set_document_root(ABSPATH);
 
 
 
 
 
 
38
  }
39
  }
40
  class Mixin_Fs_Instance_Methods extends Mixin
34
  function initialize()
35
  {
36
  parent::initialize();
37
+ // Special hack for wordpress.com hosted accounts where ABSPATH is outside the DOCUMENT_ROOT
38
+ if (!empty($_SERVER['DOCUMENT_ROOT']) && strpos(ABSPATH, $_SERVER['DOCUMENT_ROOT']) === FALSE) {
39
+ $root = $_SERVER['DOCUMENT_ROOT'];
40
+ } else {
41
+ $root = ABSPATH;
42
+ }
43
+ $this->_document_root = $this->set_document_root($root);
44
  }
45
  }
46
  class Mixin_Fs_Instance_Methods extends Mixin
products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php CHANGED
@@ -26,7 +26,7 @@ class M_NextGen_Admin extends C_Base_Module
26
  'photocrati-nextgen_admin',
27
  'NextGEN Administration',
28
  'Provides a framework for adding Administration pages',
29
- '3.2.21',
30
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
31
  'Imagely',
32
  'https://www.imagely.com'
@@ -410,9 +410,9 @@ class M_NextGen_Admin extends C_Base_Module
410
  return C_NextGen_Admin_Page_Manager::is_requested_post_type() ? "$classes ngg-post-type" : $classes;
411
  }
412
 
413
- function remove_post_type_screen_options()
414
  {
415
- return C_NextGen_Admin_Page_Manager::is_requested_post_type() ? FALSE : TRUE;
416
  }
417
 
418
  /* Add common admin markup to top of custom post type pages */
26
  'photocrati-nextgen_admin',
27
  'NextGEN Administration',
28
  'Provides a framework for adding Administration pages',
29
+ '3.3.2',
30
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
31
  'Imagely',
32
  'https://www.imagely.com'
410
  return C_NextGen_Admin_Page_Manager::is_requested_post_type() ? "$classes ngg-post-type" : $classes;
411
  }
412
 
413
+ function remove_post_type_screen_options($show)
414
  {
415
+ return C_NextGen_Admin_Page_Manager::is_requested_post_type() ? FALSE : $show;
416
  }
417
 
418
  /* Add common admin markup to top of custom post type pages */
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php CHANGED
@@ -1,19 +1,10 @@
1
  <?php
2
- /***
3
- {
4
- Module: photocrati-nextgen_basic_imagebrowser,
5
- Depends: { photocrati-nextgen_gallery_display }
6
- }
7
- ***/
8
 
9
- define(
10
- 'NGG_BASIC_IMAGEBROWSER',
11
- 'photocrati-nextgen_basic_imagebrowser'
12
- );
13
 
14
  class M_NextGen_Basic_ImageBrowser extends C_Base_Module
15
  {
16
- function define($id = 'pope-module',
17
  $name = 'Pope Module',
18
  $description = '',
19
  $version = '',
@@ -21,82 +12,59 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module
21
  $author = '',
22
  $author_uri = '',
23
  $context = FALSE)
24
- {
25
- parent::define(
26
- 'photocrati-nextgen_basic_imagebrowser',
27
- 'NextGEN Basic ImageBrowser',
28
- 'Provides the NextGEN Basic ImageBrowser Display Type',
29
- '3.1.8',
30
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
31
  'Imagely',
32
  'https://www.imagely.com'
33
- );
34
 
35
- C_Photocrati_Installer::add_handler($this->module_id, 'C_NextGen_Basic_ImageBrowser_Installer');
36
- }
37
 
38
  function initialize()
39
  {
40
  parent::initialize();
41
- if (is_admin()) {
 
 
42
  $forms = C_Form_Manager::get_instance();
43
- $forms->add_form(
44
- NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_IMAGEBROWSER
45
- );
46
  }
47
  }
48
 
49
- /**
50
- * Register adapters required for the NextGen Basic ImageBrowser
51
- */
52
- function _register_adapters()
53
- {
54
- $this->get_registry()->add_adapter(
55
- 'I_Display_Type_Mapper', 'A_NextGen_Basic_ImageBrowser_Mapper'
56
- );
57
-
58
- // Add validation for the display type
59
- $this->get_registry()->add_adapter(
60
- 'I_Display_Type', 'A_NextGen_Basic_ImageBrowser'
61
- );
62
-
63
- // Add imagebrowser ngglegacy-compatible urls
64
- $this->get_registry()->add_adapter(
65
- 'I_Routing_App', 'A_NextGen_Basic_ImageBrowser_Urls'
66
- );
67
 
68
  if (M_Attach_To_Post::is_atp_url() || is_admin())
69
- {
70
- // Provide the imagebrowser form
71
- $this->get_registry()->add_adapter(
72
- 'I_Form',
73
- 'A_NextGen_Basic_ImageBrowser_Form',
74
- $this->module_id
75
- );
76
- }
77
 
78
- if (!is_admin() && apply_filters('ngg_load_frontend_logic', TRUE, $this->module_id))
79
- {
80
- // Add rendering logic
81
- $this->get_registry()->add_adapter(
82
- 'I_Display_Type_Controller',
83
- 'A_NextGen_Basic_ImageBrowser_Controller',
84
- $this->module_id
85
- );
86
- }
87
- }
88
 
89
- function _register_hooks()
90
- {
91
- if (apply_filters('ngg_load_frontend_logic', TRUE, $this->module_id)
92
  && (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES))
93
- {
94
- C_NextGen_Shortcode_Manager::add('imagebrowser', array(&$this, 'render_shortcode'));
95
- C_NextGen_Shortcode_Manager::add('nggimagebrowser', array(&$this, 'render_shortcode'));
96
  }
97
 
98
  add_action('ngg_routes', array(&$this, 'define_routes'));
99
- }
100
 
101
  function define_routes($router)
102
  {
@@ -117,7 +85,7 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module
117
  return (isset($params[$name])) ? $params[$name] : $default;
118
  }
119
 
120
- function render_shortcode($params, $inner_content=NULL)
121
  {
122
  $params['gallery_ids'] = $this->_get_param('id', NULL, $params);
123
  $params['source'] = $this->_get_param('source', 'galleries', $params);
@@ -132,12 +100,12 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module
132
  function get_type_list()
133
  {
134
  return array(
135
- 'A_Nextgen_Basic_Imagebrowser' => 'adapter.nextgen_basic_imagebrowser.php',
136
  'A_Nextgen_Basic_Imagebrowser_Controller' => 'adapter.nextgen_basic_imagebrowser_controller.php',
137
- 'A_Nextgen_Basic_Imagebrowser_Form' => 'adapter.nextgen_basic_imagebrowser_form.php',
138
- 'C_Nextgen_Basic_Imagebrowser_Installer' => 'class.nextgen_basic_imagebrowser_installer.php',
139
- 'A_Nextgen_Basic_Imagebrowser_Mapper' => 'adapter.nextgen_basic_imagebrowser_mapper.php',
140
- 'A_Nextgen_Basic_Imagebrowser_Urls' => 'adapter.nextgen_basic_imagebrowser_urls.php',
141
  );
142
  }
143
  }
@@ -150,14 +118,14 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module
150
  */
151
  function nggShowImageBrowser($galleryID, $template = '')
152
  {
153
- $renderer = C_Displayed_Gallery_Renderer::get_instance();
154
- $retval = $renderer->display_images(array(
155
- 'gallery_ids' => array($galleryID),
156
- 'display_type' => 'photocrati-nextgen_basic_imagebrowser',
157
- 'template' => $template
158
- ));
159
-
160
- return apply_filters('ngg_show_imagebrowser_content', $retval, $galleryID);
161
  }
162
 
163
  /**
@@ -168,35 +136,38 @@ function nggShowImageBrowser($galleryID, $template = '')
168
  */
169
  function nggCreateImageBrowser($picturelist, $template = '')
170
  {
171
- $renderer = C_Displayed_Gallery_Renderer::get_instance();
172
- $image_ids = array();
173
- foreach ($picturelist as $image) $image_ids[] = $image->pid;
174
- return $renderer->display_images(array(
175
- 'image_ids' => $image_ids,
176
- 'display_type' => 'photocrati-nextgen_basic_imagebrowser',
177
- 'template' => $template
178
- ));
179
  }
180
 
 
 
 
181
  class C_NextGen_Basic_ImageBrowser_Installer extends C_Gallery_Display_Installer
182
  {
183
- function install($reset = FALSE)
184
- {
185
- $this->install_display_type(
186
- NGG_BASIC_IMAGEBROWSER, array(
187
- 'title' => __('NextGEN Basic ImageBrowser', 'nggallery'),
188
- 'entity_types' => array('image'),
189
- 'preview_image_relpath' => 'photocrati-nextgen_basic_imagebrowser#preview.jpg',
190
- 'default_source' => 'galleries',
191
- 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 20,
192
- 'aliases' => array(
193
- 'basic_imagebrowser',
194
- 'imagebrowser',
195
- 'nextgen_basic_imagebrowser'
196
- )
197
- )
198
- );
199
- }
200
  }
201
 
202
  new M_NextGen_Basic_ImageBrowser();
1
  <?php
 
 
 
 
 
 
2
 
3
+ define('NGG_BASIC_IMAGEBROWSER', 'photocrati-nextgen_basic_imagebrowser');
 
 
 
4
 
5
  class M_NextGen_Basic_ImageBrowser extends C_Base_Module
6
  {
7
+ function define($id = 'pope-module',
8
  $name = 'Pope Module',
9
  $description = '',
10
  $version = '',
12
  $author = '',
13
  $author_uri = '',
14
  $context = FALSE)
15
+ {
16
+ parent::define(
17
+ NGG_BASIC_IMAGEBROWSER,
18
+ 'NextGEN Basic ImageBrowser',
19
+ 'Provides the NextGEN Basic ImageBrowser Display Type',
20
+ '3.3.2',
21
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
22
  'Imagely',
23
  'https://www.imagely.com'
24
+ );
25
 
26
+ C_Photocrati_Installer::add_handler($this->module_id, 'C_NextGen_Basic_ImageBrowser_Installer');
27
+ }
28
 
29
  function initialize()
30
  {
31
  parent::initialize();
32
+
33
+ if (is_admin())
34
+ {
35
  $forms = C_Form_Manager::get_instance();
36
+ $forms->add_form(NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_IMAGEBROWSER);
 
 
37
  }
38
  }
39
 
40
+ /**
41
+ * Register adapters required for the NextGen Basic ImageBrowser
42
+ */
43
+ function _register_adapters()
44
+ {
45
+ $registry = $this->get_registry();
46
+ $registry->add_adapter('I_Display_Type_Mapper', 'A_NextGen_Basic_ImageBrowser_Mapper');
47
+ $registry->add_adapter('I_Display_Type', 'A_NextGen_Basic_ImageBrowser');
48
+ $registry->add_adapter('I_Routing_App', 'A_NextGen_Basic_ImageBrowser_Urls');
 
 
 
 
 
 
 
 
 
49
 
50
  if (M_Attach_To_Post::is_atp_url() || is_admin())
51
+ $registry->add_adapter('I_Form', 'A_NextGen_Basic_ImageBrowser_Form', $this->module_id);
 
 
 
 
 
 
 
52
 
53
+ if (!is_admin() && apply_filters('ngg_load_frontend_logic', TRUE, $this->module_id))
54
+ $registry->add_adapter('I_Display_Type_Controller', 'A_NextGen_Basic_ImageBrowser_Controller', $this->module_id);
55
+ }
 
 
 
 
 
 
 
56
 
57
+ function _register_hooks()
58
+ {
59
+ if (apply_filters('ngg_load_frontend_logic', TRUE, $this->module_id)
60
  && (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES))
61
+ {
62
+ C_NextGen_Shortcode_Manager::add('imagebrowser', array($this, 'render_shortcode'));
63
+ C_NextGen_Shortcode_Manager::add('nggimagebrowser', array($this, 'render_shortcode'));
64
  }
65
 
66
  add_action('ngg_routes', array(&$this, 'define_routes'));
67
+ }
68
 
69
  function define_routes($router)
70
  {
85
  return (isset($params[$name])) ? $params[$name] : $default;
86
  }
87
 
88
+ function render_shortcode($params, $inner_content=NULL)
89
  {
90
  $params['gallery_ids'] = $this->_get_param('id', NULL, $params);
91
  $params['source'] = $this->_get_param('source', 'galleries', $params);
100
  function get_type_list()
101
  {
102
  return array(
103
+ 'A_Nextgen_Basic_Imagebrowser' => 'adapter.nextgen_basic_imagebrowser.php',
104
  'A_Nextgen_Basic_Imagebrowser_Controller' => 'adapter.nextgen_basic_imagebrowser_controller.php',
105
+ 'A_Nextgen_Basic_Imagebrowser_Form' => 'adapter.nextgen_basic_imagebrowser_form.php',
106
+ 'A_Nextgen_Basic_Imagebrowser_Mapper' => 'adapter.nextgen_basic_imagebrowser_mapper.php',
107
+ 'A_Nextgen_Basic_Imagebrowser_Urls' => 'adapter.nextgen_basic_imagebrowser_urls.php',
108
+ 'C_Nextgen_Basic_Imagebrowser_Installer' => 'class.nextgen_basic_imagebrowser_installer.php'
109
  );
110
  }
111
  }
118
  */
119
  function nggShowImageBrowser($galleryID, $template = '')
120
  {
121
+ $renderer = C_Displayed_Gallery_Renderer::get_instance();
122
+ $retval = $renderer->display_images(array(
123
+ 'gallery_ids' => array($galleryID),
124
+ 'display_type' => NGG_BASIC_IMAGEBROWSER,
125
+ 'template' => $template
126
+ ));
127
+
128
+ return apply_filters('ngg_show_imagebrowser_content', $retval, $galleryID);
129
  }
130
 
131
  /**
136
  */
137
  function nggCreateImageBrowser($picturelist, $template = '')
138
  {
139
+ $renderer = C_Displayed_Gallery_Renderer::get_instance();
140
+ $image_ids = array();
141
+ foreach ($picturelist as $image) $image_ids[] = $image->pid;
142
+ return $renderer->display_images(array(
143
+ 'image_ids' => $image_ids,
144
+ 'display_type' => NGG_BASIC_IMAGEBROWSER,
145
+ 'template' => $template
146
+ ));
147
  }
148
 
149
+ /**
150
+ * @mixin C_Display_Type_Installer
151
+ */
152
  class C_NextGen_Basic_ImageBrowser_Installer extends C_Gallery_Display_Installer
153
  {
154
+ function install($reset = FALSE)
155
+ {
156
+ $this->install_display_type(
157
+ NGG_BASIC_IMAGEBROWSER, array(
158
+ 'title' => __('NextGEN Basic ImageBrowser', 'nggallery'),
159
+ 'entity_types' => array('image'),
160
+ 'preview_image_relpath' => NGG_BASIC_IMAGEBROWSER . '#preview.jpg',
161
+ 'default_source' => 'galleries',
162
+ 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 20,
163
+ 'aliases' => array(
164
+ 'basic_imagebrowser',
165
+ 'imagebrowser',
166
+ 'nextgen_basic_imagebrowser'
167
+ )
168
+ )
169
+ );
170
+ }
171
  }
172
 
173
  new M_NextGen_Basic_ImageBrowser();
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php CHANGED
@@ -1,6 +1,5 @@
1
  <?php
2
  /**
3
- * Adds validation for the NextGen Basic ImageBrowser display type
4
  * @mixin C_Display_Type
5
  * @adapts I_Display_Type
6
  */
@@ -12,34 +11,30 @@ class A_NextGen_Basic_ImageBrowser extends Mixin
12
  }
13
  }
14
  /**
15
- * Provides rendering logic for the NextGen Basic ImageBrowser
16
- * @mixin C_Display_Type_Controller
17
  * @adapts I_Display_Type_Controller for "photocrati-nextgen_basic_imagebrowser" context
18
  */
19
  class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
20
  {
21
  /**
22
- * Renders the front-end display for the imagebrowser display type
23
- *
24
  * @param C_Displayed_Gallery $displayed_gallery
25
  * @param bool $return
26
  * @return string
27
  */
28
  function index_action($displayed_gallery, $return = FALSE)
29
  {
30
- // We now hide option for triggers on this display type.
31
- // This ensures they do not show based on past settings.
32
  $displayed_gallery->display_settings['ngg_triggers_display'] = 'never';
33
  $picture_list = array();
34
  foreach ($displayed_gallery->get_included_entities() as $image) {
35
  $picture_list[$image->{$image->id_field}] = $image;
36
  }
37
  if ($picture_list) {
38
- $retval = $this->render_image_browser($displayed_gallery, $picture_list);
39
  if ($return) {
40
  return $retval;
41
  } else {
42
- echo $retval;
43
  }
44
  } else {
45
  return $this->object->render_partial('photocrati-nextgen_gallery_display#no_images_found', array(), $return);
@@ -47,11 +42,9 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
47
  return '';
48
  }
49
  /**
50
- * Returns the rendered template of an image browser display
51
- *
52
  * @param C_Displayed_Gallery $displayed_gallery
53
  * @param array $picture_list
54
- * @return string Rendered HTML (probably)
55
  */
56
  function render_image_browser($displayed_gallery, $picture_list)
57
  {
@@ -149,19 +142,17 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
149
  }
150
  }
151
  /**
152
- * Enqueues all static resources required by this display type
153
- *
154
  * @param C_Displayed_Gallery $displayed_gallery
155
  */
156
  function enqueue_frontend_resources($displayed_gallery)
157
  {
158
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
159
  wp_enqueue_style('nextgen_basic_imagebrowser_style', $this->get_static_url('photocrati-nextgen_basic_imagebrowser#style.css'), array(), NGG_SCRIPT_VERSION);
 
160
  $this->enqueue_ngg_styles();
161
  }
162
  }
163
  /**
164
- * Class A_NextGen_Basic_ImageBrowser_Form
165
  * @mixin C_Form
166
  * @adapts I_Form for "photocrati-nextgen_basic_imagebrowser" context
167
  */
@@ -180,7 +171,6 @@ class A_NextGen_Basic_ImageBrowser_Form extends Mixin_Display_Type_Form
180
  }
181
  }
182
  /**
183
- * Class A_NextGen_Basic_ImageBrowser_Mapper
184
  * @mixin C_Display_Type_Mapper
185
  * @adapts I_Display_Type_Mapper
186
  */
@@ -200,7 +190,6 @@ class A_NextGen_Basic_ImageBrowser_Mapper extends Mixin
200
  }
201
  }
202
  /**
203
- * Class A_NextGen_Basic_ImageBrowser_Urls
204
  * @mixin C_Routing_App
205
  * @adapts I_Routing_App
206
  */
1
  <?php
2
  /**
 
3
  * @mixin C_Display_Type
4
  * @adapts I_Display_Type
5
  */
11
  }
12
  }
13
  /**
14
+ * @property C_MVC_Controller|C_Display_Type_Controller|A_NextGen_Basic_ImageBrowser_Controller $object
 
15
  * @adapts I_Display_Type_Controller for "photocrati-nextgen_basic_imagebrowser" context
16
  */
17
  class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
18
  {
19
  /**
 
 
20
  * @param C_Displayed_Gallery $displayed_gallery
21
  * @param bool $return
22
  * @return string
23
  */
24
  function index_action($displayed_gallery, $return = FALSE)
25
  {
26
+ // Force the trigger icon display off, regardless of past settings
 
27
  $displayed_gallery->display_settings['ngg_triggers_display'] = 'never';
28
  $picture_list = array();
29
  foreach ($displayed_gallery->get_included_entities() as $image) {
30
  $picture_list[$image->{$image->id_field}] = $image;
31
  }
32
  if ($picture_list) {
33
+ $retval = $this->object->render_image_browser($displayed_gallery, $picture_list);
34
  if ($return) {
35
  return $retval;
36
  } else {
37
+ print $retval;
38
  }
39
  } else {
40
  return $this->object->render_partial('photocrati-nextgen_gallery_display#no_images_found', array(), $return);
42
  return '';
43
  }
44
  /**
 
 
45
  * @param C_Displayed_Gallery $displayed_gallery
46
  * @param array $picture_list
47
+ * @return string Rendered HTML
48
  */
49
  function render_image_browser($displayed_gallery, $picture_list)
50
  {
142
  }
143
  }
144
  /**
 
 
145
  * @param C_Displayed_Gallery $displayed_gallery
146
  */
147
  function enqueue_frontend_resources($displayed_gallery)
148
  {
149
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
150
  wp_enqueue_style('nextgen_basic_imagebrowser_style', $this->get_static_url('photocrati-nextgen_basic_imagebrowser#style.css'), array(), NGG_SCRIPT_VERSION);
151
+ wp_enqueue_script('nextgen_basic_imagebrowser_script', $this->object->get_static_url(NGG_BASIC_IMAGEBROWSER . '#imagebrowser.js'), array('ngg_common'), NGG_SCRIPT_VERSION);
152
  $this->enqueue_ngg_styles();
153
  }
154
  }
155
  /**
 
156
  * @mixin C_Form
157
  * @adapts I_Form for "photocrati-nextgen_basic_imagebrowser" context
158
  */
171
  }
172
  }
173
  /**
 
174
  * @mixin C_Display_Type_Mapper
175
  * @adapts I_Display_Type_Mapper
176
  */
190
  }
191
  }
192
  /**
 
193
  * @mixin C_Routing_App
194
  * @adapts I_Routing_App
195
  */
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/imagebrowser.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener(
2
+ "DOMContentLoaded",
3
+ function(event) {
4
+ document.querySelectorAll('div.ngg-imagebrowser')
5
+ .forEach(function (gallery) {
6
+ new NggPaginatedGallery(
7
+ gallery.dataset.nextgenGalleryId,
8
+ '.ngg-imagebrowser'
9
+ );
10
+ });
11
+ });
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/imagebrowser.min.js ADDED
@@ -0,0 +1 @@
 
1
+ document.addEventListener("DOMContentLoaded",function(e){document.querySelectorAll("div.ngg-imagebrowser").forEach(function(e){new NggPaginatedGallery(e.dataset.nextgenGalleryId,".ngg-imagebrowser")})});
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.css CHANGED
@@ -136,6 +136,9 @@
136
  text-decoration: none;
137
  padding: 0;
138
  border: none;
 
 
 
139
  }
140
 
141
  .ngg-imagebrowser.default-view .ngg-imagebrowser-nav .counter {
136
  text-decoration: none;
137
  padding: 0;
138
  border: none;
139
+ display: inline-block;
140
+ width: 100%;
141
+ height: 100%;
142
  }
143
 
144
  .ngg-imagebrowser.default-view .ngg-imagebrowser-nav .counter {
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/static/style.min.css CHANGED
@@ -1 +1 @@
1
- .ngg-imagebrowser{margin-top:20px;margin-bottom:30px}.ngg-imagebrowser h3{text-align:center}.ngg-imagebrowser-desc{clear:both}.ngg-imagebrowser .pic{max-width:100%;margin-top:10px;margin-bottom:10px;border:1px solid #A9A9A9}.ngg-imagebrowser .pic a{display:block!important;font-size:0;margin:5px;text-align:center}.ngg-imagebrowser img{max-width:100%;margin:0 auto;padding:0;border:none}.ngg-imagebrowser-nav{padding:5px}.ngg-imagebrowser-nav .back{float:left;border:1px solid #DDD;padding:3px 7px}.ngg-imagebrowser-nav .next{float:right;border:1px solid #DDD;padding:3px 7px}.ngg-imagebrowser-nav .counter{text-align:center;font-size:.9em!important}.exif-data{margin-left:auto!important;margin-right:auto!important}.ngg-imagebrowser.default-view{padding:0;margin:40px 0!important;text-align:center;max-width:1200px;box-sizing:border-box}.ngg-imagebrowser.default-view h3{font-size:18px!important;margin:0!important;padding:20px!important;text-align:center;font-weight:700}.ngg-imagebrowser.default-view img{max-height:500px}.ngg-imagebrowser.default-view .pic,.ngg-imagebrowser.default-view .pic a{margin:0;border:none;box-shadow:none}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav{text-align:center;padding:20px 20px 5px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .back,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .next{float:none;display:inline-block;border:none;height:30px;padding:0;width:80px;border-radius:2px;cursor:pointer;background:#999}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .back:hover,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .next:hover{background:#666}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .fa{font-size:16px;color:#fff;padding:0!important;line-height:30px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .fa-chevron-right{margin-left:2px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .fa-chevron-left{margin-right:2px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav a,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav a:focus,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav a:hover{box-shadow:none;text-decoration:none;padding:0;border:none}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .counter{font-size:12px!important;color:rgba(150,150,150,.7);margin:10px 0 6px}.ngg-imagebrowser.default-view .ngg-imagebrowser-desc{text-align:center;padding:0 50px;font-size:14px}.ngg-imagebrowser.default-view .ngg-imagebrowser-desc p:first-of-type{margin-top:0;padding-top:0}@media (max-width:800px){.ngg-imagebrowser.default-view .ngg-imagebrowser-nav{text-align:center;padding:20px 10px 5px}.ngg-imagebrowser.default-view .ngg-imagebrowser-desc{padding:0;font-size:12px}}
1
+ .ngg-imagebrowser{margin-top:20px;margin-bottom:30px}.ngg-imagebrowser h3{text-align:center}.ngg-imagebrowser-desc{clear:both}.ngg-imagebrowser .pic{max-width:100%;margin-top:10px;margin-bottom:10px;border:1px solid #A9A9A9}.ngg-imagebrowser .pic a{display:block!important;font-size:0;margin:5px;text-align:center}.ngg-imagebrowser img{max-width:100%;margin:0 auto;padding:0;border:none}.ngg-imagebrowser-nav{padding:5px}.ngg-imagebrowser-nav .back{float:left;border:1px solid #DDD;padding:3px 7px}.ngg-imagebrowser-nav .next{float:right;border:1px solid #DDD;padding:3px 7px}.ngg-imagebrowser-nav .counter{text-align:center;font-size:.9em!important}.exif-data{margin-left:auto!important;margin-right:auto!important}.ngg-imagebrowser.default-view{padding:0;margin:40px 0!important;text-align:center;max-width:1200px;box-sizing:border-box}.ngg-imagebrowser.default-view h3{font-size:18px!important;margin:0!important;padding:20px!important;text-align:center;font-weight:700}.ngg-imagebrowser.default-view img{max-height:500px}.ngg-imagebrowser.default-view .pic,.ngg-imagebrowser.default-view .pic a{margin:0;border:none;box-shadow:none}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav{text-align:center;padding:20px 20px 5px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .back,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .next{float:none;display:inline-block;border:none;height:30px;padding:0;width:80px;border-radius:2px;cursor:pointer;background:#999}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .back:hover,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .next:hover{background:#666}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .fa{font-size:16px;color:#fff;padding:0!important;line-height:30px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .fa-chevron-right{margin-left:2px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .fa-chevron-left{margin-right:2px}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav a,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav a:focus,.ngg-imagebrowser.default-view .ngg-imagebrowser-nav a:hover{box-shadow:none;text-decoration:none;padding:0;border:none;display:inline-block;width:100%;height:100%}.ngg-imagebrowser.default-view .ngg-imagebrowser-nav .counter{font-size:12px!important;color:rgba(150,150,150,.7);margin:10px 0 6px}.ngg-imagebrowser.default-view .ngg-imagebrowser-desc{text-align:center;padding:0 50px;font-size:14px}.ngg-imagebrowser.default-view .ngg-imagebrowser-desc p:first-of-type{margin-top:0;padding-top:0}@media (max-width:800px){.ngg-imagebrowser.default-view .ngg-imagebrowser-nav{text-align:center;padding:20px 10px 5px}.ngg-imagebrowser.default-view .ngg-imagebrowser-desc{padding:0;font-size:12px}}
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/default-view.php CHANGED
@@ -1,71 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?>
2
- <div class='ngg-imagebrowser default-view' id='<?php echo $anchor; ?>' data-nextgen-gallery-id="<?php echo $displayed_gallery->id(); ?>">
3
 
4
- <h3><?php echo esc_attr($image->alttext); ?></h3>
 
 
5
 
6
- <?php
7
-
8
- $template_params = array(
9
- 'index' => 0,
10
- 'class' => 'pic',
11
- 'image' => $image,
12
- );
13
 
14
- $this->include_template('photocrati-nextgen_gallery_display#image/before', $template_params);
15
-
16
- ?>
17
- <a href='<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE)); ?>'
18
- title='<?php echo esc_attr($image->description); ?>'
19
- data-src="<?php echo esc_attr($storage->get_image_url($image)); ?>"
20
- data-thumbnail="<?php echo esc_attr($storage->get_image_url($image, 'thumb')); ?>"
21
- data-image-id="<?php echo esc_attr($image->{$image->id_field}); ?>"
22
- data-title="<?php echo esc_attr($image->alttext); ?>"
23
- data-description="<?php echo esc_attr(stripslashes($image->description)); ?>"
24
- <?php echo $effect_code ?>>
25
- <img title='<?php echo esc_attr($image->alttext); ?>'
26
- alt='<?php echo esc_attr($image->alttext); ?>'
27
- src='<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE)); ?>'/>
28
  </a>
29
- <?php
 
30
 
31
- $this->include_template('photocrati-nextgen_gallery_display#image/after', $template_params);
32
 
33
- ?>
 
 
 
 
 
 
34
 
35
- <div class='ngg-imagebrowser-nav'>
 
 
 
 
 
 
36
 
37
- <div class='back'>
38
- <a class='ngg-browser-prev'
39
- id='ngg-prev-<?php echo $previous_pid; ?>'
40
- href='<?php echo $previous_image_link; ?>'>
41
- <i class="fa fa-chevron-left" aria-hidden="true"></i>
42
- </a>
43
- </div>
44
 
45
- <div class='next'>
46
- <a class='ngg-browser-next'
47
- id='ngg-next-<?php echo $next_pid; ?>'
48
- href='<?php echo $next_image_link; ?>'>
49
- <i class="fa fa-chevron-right" aria-hidden="true"></i>
50
- </a>
51
- </div>
52
 
53
- <div class='counter'>
54
- <?php _e('Image', 'nggallery'); ?> <?php echo $number; ?> <?php _e('of', 'nggallery'); ?> <?php echo $total; ?>
55
  </div>
56
-
57
- <div class='ngg-imagebrowser-desc'>
58
- <p>
59
- <?php print wp_kses($image->description, M_I18N::get_kses_allowed_html()); ?>
60
- </p>
61
- </div>
62
-
63
  </div>
64
 
65
- </div>
66
- <?php $this->end_element(); ?>
67
- <script type='text/javascript'>
68
- jQuery(function($) {
69
- new NggPaginatedGallery('<?php echo $displayed_gallery->id() ?>', '.ngg-imagebrowser');
70
- });
71
- </script>
1
+ <?php
2
+ /**
3
+ * @var C_Displayed_Gallery $displayed_gallery
4
+ * @var C_Image|stdClass $image
5
+ * @var int $next_pid
6
+ * @var int $number
7
+ * @var int $previous_pid
8
+ * @var int $total
9
+ * @var string $anchor
10
+ * @var string $next_image_link
11
+ * @var string $previous_image_link
12
+ */
13
+
14
+ $template_params = array(
15
+ 'index' => 0,
16
+ 'class' => 'pic',
17
+ 'image' => $image,
18
+ ); ?>
19
+
20
  <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?>
 
21
 
22
+ <div class='ngg-imagebrowser default-view'
23
+ id='<?php print $anchor; ?>'
24
+ data-nextgen-gallery-id="<?php print $displayed_gallery->id(); ?>">
25
 
26
+ <h3><?php print esc_attr($image->alttext); ?></h3>
 
 
 
 
 
 
27
 
28
+ <?php $this->include_template('photocrati-nextgen_gallery_display#image/before', $template_params); ?>
29
+
30
+ <a href='<?php print esc_attr($storage->get_image_url($image, 'full')); ?>'
31
+ title='<?php print esc_attr($image->description); ?>'
32
+ data-src="<?php print esc_attr($storage->get_image_url($image)); ?>"
33
+ data-thumbnail="<?php print esc_attr($storage->get_image_url($image, 'thumb')); ?>"
34
+ data-image-id="<?php print esc_attr($image->{$image->id_field}); ?>"
35
+ data-title="<?php print esc_attr($image->alttext); ?>"
36
+ data-description="<?php print esc_attr(stripslashes($image->description)); ?>"
37
+ <?php print $effect_code ?>>
38
+ <img title='<?php print esc_attr($image->alttext); ?>'
39
+ alt='<?php print esc_attr($image->alttext); ?>'
40
+ src='<?php print esc_attr($storage->get_image_url($image, 'full')); ?>'/>
 
41
  </a>
42
+
43
+ <?php $this->include_template('photocrati-nextgen_gallery_display#image/after', $template_params); ?>
44
 
45
+ <div class='ngg-imagebrowser-nav'>
46
 
47
+ <div class='back'>
48
+ <a class='ngg-browser-prev'
49
+ id='ngg-prev-<?php print $previous_pid; ?>'
50
+ href='<?php print $previous_image_link; ?>'>
51
+ <i class="fa fa-chevron-left" aria-hidden="true"></i>
52
+ </a>
53
+ </div>
54
 
55
+ <div class='next'>
56
+ <a class='ngg-browser-next'
57
+ id='ngg-next-<?php print $next_pid; ?>'
58
+ href='<?php print $next_image_link; ?>'>
59
+ <i class="fa fa-chevron-right" aria-hidden="true"></i>
60
+ </a>
61
+ </div>
62
 
63
+ <div class='counter'>
64
+ <?php print __('Image', 'nggallery'); ?>
65
+ <?php print $number; ?>
66
+ <?php print __('of', 'nggallery'); ?>
67
+ <?php print $total; ?>
68
+ </div>
 
69
 
70
+ <div class='ngg-imagebrowser-desc'>
71
+ <p><?php print wp_kses($image->description, M_I18N::get_kses_allowed_html()); ?></p>
72
+ </div>
 
 
 
 
73
 
 
 
74
  </div>
 
 
 
 
 
 
 
75
  </div>
76
 
77
+ <?php $this->end_element(); ?>
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php CHANGED
@@ -1,72 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?>
2
- <div class='ngg-imagebrowser' id='<?php echo $anchor; ?>' data-nextgen-gallery-id="<?php echo $displayed_gallery->id(); ?>">
3
 
4
- <h3><?php echo esc_attr($image->alttext); ?></h3>
 
 
 
 
 
 
5
 
6
- <?php
7
-
8
- $template_params = array(
9
- 'index' => 0,
10
- 'class' => 'pic',
11
- 'image' => $image,
12
- );
13
-
14
- $this->include_template('photocrati-nextgen_gallery_display#image/before', $template_params);
15
-
16
- ?>
17
- <a href='<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE)); ?>'
18
- title='<?php echo esc_attr($image->description); ?>'
19
- data-src="<?php echo esc_attr($storage->get_image_url($image)); ?>"
20
- data-thumbnail="<?php echo esc_attr($storage->get_image_url($image, 'thumb')); ?>"
21
- data-image-id="<?php echo esc_attr($image->{$image->id_field}); ?>"
22
- data-title="<?php echo esc_attr($image->alttext); ?>"
23
- data-description="<?php echo esc_attr(stripslashes($image->description)); ?>"
24
- <?php echo $effect_code ?>>
25
- <img title='<?php echo esc_attr($image->alttext); ?>'
26
- alt='<?php echo esc_attr($image->alttext); ?>'
27
- src='<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE)); ?>'/>
28
  </a>
29
- <?php
30
 
31
- $this->include_template('photocrati-nextgen_gallery_display#image/after', $template_params);
32
 
33
- ?>
34
 
35
- <div class='ngg-imagebrowser-nav'>
 
 
 
 
 
 
36
 
37
- <div class='back'>
38
- <a class='ngg-browser-prev'
39
- id='ngg-prev-<?php echo $previous_pid; ?>'
40
- href='<?php echo $previous_image_link; ?>'>
41
- &#9668; <?php _e('Back', 'nggallery'); ?>
42
- </a>
43
- </div>
 
44
 
45
- <div class='next'>
46
- <a class='ngg-browser-next'
47
- id='ngg-next-<?php echo $next_pid; ?>'
48
- href='<?php echo $next_image_link; ?>'>
49
- <?php _e('Next', 'nggallery'); ?>
50
- &#9658;
51
- </a>
52
- </div>
53
 
54
- <div class='counter'>
55
- <?php _e('Picture', 'nggallery'); ?> <?php echo $number; ?> <?php _e('of', 'nggallery'); ?> <?php echo $total; ?>
56
- </div>
57
 
58
- <div class='ngg-imagebrowser-desc'>
59
- <p>
60
- <?php echo $image->description; ?>
61
- </p>
62
  </div>
63
-
64
  </div>
65
 
66
- </div>
67
- <?php $this->end_element(); ?>
68
- <script type='text/javascript'>
69
- jQuery(function($) {
70
- new NggPaginatedGallery('<?php echo $displayed_gallery->id() ?>', '.ngg-imagebrowser');
71
- });
72
- </script>
1
+ <?php
2
+ /**
3
+ * @var C_Displayed_Gallery $displayed_gallery
4
+ * @var C_Image|stdClass $image
5
+ * @var int $next_pid
6
+ * @var int $number
7
+ * @var int $previous_pid
8
+ * @var int $total
9
+ * @var string $anchor
10
+ * @var string $next_image_link
11
+ * @var string $previous_image_link
12
+ */
13
+
14
+ $template_params = array(
15
+ 'index' => 0,
16
+ 'class' => 'pic',
17
+ 'image' => $image,
18
+ ); ?>
19
+
20
  <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?>
 
21
 
22
+ <div class='ngg-imagebrowser'
23
+ id='<?php print $anchor; ?>'
24
+ data-nextgen-gallery-id="<?php print $displayed_gallery->id(); ?>">
25
+
26
+ <h3><?php print esc_attr($image->alttext); ?></h3>
27
+
28
+ <?php $this->include_template('photocrati-nextgen_gallery_display#image/before', $template_params); ?>
29
 
30
+ <a href='<?php print esc_attr($storage->get_image_url($image, 'full')); ?>'
31
+ title='<?php print esc_attr($image->description); ?>'
32
+ data-src="<?php print esc_attr($storage->get_image_url($image)); ?>"
33
+ data-thumbnail="<?php print esc_attr($storage->get_image_url($image, 'thumb')); ?>"
34
+ data-image-id="<?php print esc_attr($image->{$image->id_field}); ?>"
35
+ data-title="<?php print esc_attr($image->alttext); ?>"
36
+ data-description="<?php print esc_attr(stripslashes($image->description)); ?>"
37
+ <?php print $effect_code ?>>
38
+ <img title='<?php print esc_attr($image->alttext); ?>'
39
+ alt='<?php print esc_attr($image->alttext); ?>'
40
+ src='<?php print esc_attr($storage->get_image_url($image, 'full')); ?>'/>
 
 
 
 
 
 
 
 
 
 
 
41
  </a>
 
42
 
43
+ <?php $this->include_template('photocrati-nextgen_gallery_display#image/after', $template_params); ?>
44
 
45
+ <div class='ngg-imagebrowser-nav'>
46
 
47
+ <div class='back'>
48
+ <a class='ngg-browser-prev'
49
+ id='ngg-prev-<?php print $previous_pid; ?>'
50
+ href='<?php print $previous_image_link; ?>'>
51
+ &#9668; <?php _e('Back', 'nggallery'); ?>
52
+ </a>
53
+ </div>
54
 
55
+ <div class='next'>
56
+ <a class='ngg-browser-next'
57
+ id='ngg-next-<?php print $next_pid; ?>'
58
+ href='<?php print $next_image_link; ?>'>
59
+ <?php _e('Next', 'nggallery'); ?>
60
+ &#9658;
61
+ </a>
62
+ </div>
63
 
64
+ <div class='counter'>
65
+ <?php print __('Picture', 'nggallery'); ?>
66
+ <?php print $number; ?>
67
+ <?php print __('of', 'nggallery'); ?>
68
+ <?php print $total; ?>
69
+ </div>
 
 
70
 
71
+ <div class='ngg-imagebrowser-desc'>
72
+ <p><?php print $image->description; ?></p>
73
+ </div>
74
 
 
 
 
 
75
  </div>
 
76
  </div>
77
 
78
+ <?php $this->end_element(); ?>
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php CHANGED
@@ -22,7 +22,7 @@ class M_NextGen_Data extends C_Base_Module
22
  'photocrati-nextgen-data',
23
  'NextGEN Data Tier',
24
  "Provides a data tier for NextGEN gallery based on the DataMapper module",
25
- '3.2.17',
26
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
27
  'Imagely',
28
  'https://www.imagely.com'
22
  'photocrati-nextgen-data',
23
  'NextGEN Data Tier',
24
  "Provides a data tier for NextGEN gallery based on the DataMapper module",
25
+ '3.3.2',
26
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
27
  'Imagely',
28
  'https://www.imagely.com'
products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php CHANGED
@@ -714,7 +714,7 @@ class Mixin_NextGen_Gallery_Validation
714
  }
715
  $ABSPATH = wp_normalize_path(ABSPATH);
716
  // Disallow galleries from being under these directories at all
717
- $not_ever_in = array('plugins' => wp_normalize_path(WP_PLUGIN_DIR), 'must use plugins' => wp_normalize_path(WPMU_PLUGIN_DIR), 'wp-admin' => $fs->join_paths($ABSPATH, 'wp-admin'), 'wp-includes' => $fs->join_paths($ABSPATH, 'wp-admin'), 'themes' => get_theme_root());
718
  foreach ($not_ever_in as $label => $dir) {
719
  if (strpos($abspath, $dir) === 0) {
720
  $this->object->add_error(sprintf(__("Gallery path cannot be under %s directory", 'nggallery'), $label), 'gallerypath');
@@ -4256,7 +4256,7 @@ class Mixin_GalleryStorage_Base_Getters extends Mixin
4256
  }
4257
  function get_gallery_root()
4258
  {
4259
- return wp_normalize_path(NGG_GALLERY_ROOT_TYPE == 'content' ? WP_CONTENT_DIR : ABSPATH);
4260
  }
4261
  function _get_computed_gallery_abspath($gallery)
4262
  {
714
  }
715
  $ABSPATH = wp_normalize_path(ABSPATH);
716
  // Disallow galleries from being under these directories at all
717
+ $not_ever_in = array('plugins' => wp_normalize_path(WP_PLUGIN_DIR), 'must use plugins' => wp_normalize_path(WPMU_PLUGIN_DIR), 'wp-admin' => $fs->join_paths($ABSPATH, 'wp-admin'), 'wp-includes' => $fs->join_paths($ABSPATH, 'wp-includes'), 'themes' => get_theme_root());
718
  foreach ($not_ever_in as $label => $dir) {
719
  if (strpos($abspath, $dir) === 0) {
720
  $this->object->add_error(sprintf(__("Gallery path cannot be under %s directory", 'nggallery'), $label), 'gallerypath');
4256
  }
4257
  function get_gallery_root()
4258
  {
4259
+ return wp_normalize_path(C_Fs::get_instance()->get_document_root('galleries'));
4260
  }
4261
  function _get_computed_gallery_abspath($gallery)
4262
  {
products/photocrati_nextgen/modules/ngglegacy/admin/album.php CHANGED
@@ -729,9 +729,11 @@ function ngg_confirm_delete_album(form) {
729
  // for speed reason we limit it to 50
730
  if ( $this->num_albums < 50 ) {
731
  $thumbURL = "";
732
- if ($album->previewpic) {
733
- $image = $nggdb->find_image( $album->previewpic );
734
- if ($image) $thumbURL = @add_query_arg('timestamp', time(), $image->thumbURL);
 
 
735
  }
736
  $preview_image = $thumbURL ? '<div class="inlinepicture"><img rel="'.$album->previewpic.'" src="' . nextgen_esc_url( $thumbURL ). '" /></div>' : '';
737
  }
@@ -756,9 +758,11 @@ function ngg_confirm_delete_album(form) {
756
  if ( $this->num_galleries < 50 ) {
757
  // set image url
758
  $thumbURL = "";
759
- if ($gallery->previewpic) {
760
- $image = $nggdb->find_image( $gallery->previewpic );
761
- $thumbURL = @add_query_arg('timestamp', time(), $image->thumbURL);
 
 
762
  }
763
  $preview_image = ( !is_null($thumbURL) ) ? '<div class="inlinepicture"><img rel="'.$gallery->previewpic.'" src="' . nextgen_esc_url( $thumbURL ). '" /></div>' : '';
764
  }
729
  // for speed reason we limit it to 50
730
  if ( $this->num_albums < 50 ) {
731
  $thumbURL = "";
732
+ if ($album->previewpic)
733
+ {
734
+ $image = $nggdb->find_image($album->previewpic);
735
+ if ($image && $image->thumbURL)
736
+ $thumbURL = @add_query_arg('timestamp', time(), $image->thumbURL);
737
  }
738
  $preview_image = $thumbURL ? '<div class="inlinepicture"><img rel="'.$album->previewpic.'" src="' . nextgen_esc_url( $thumbURL ). '" /></div>' : '';
739
  }
758
  if ( $this->num_galleries < 50 ) {
759
  // set image url
760
  $thumbURL = "";
761
+ if ($gallery->previewpic)
762
+ {
763
+ $image = $nggdb->find_image($gallery->previewpic);
764
+ if ($image && $image->thumbURL)
765
+ $thumbURL = @add_query_arg('timestamp', time(), $image->thumbURL);
766
  }
767
  $preview_image = ( !is_null($thumbURL) ) ? '<div class="inlinepicture"><img rel="'.$gallery->previewpic.'" src="' . nextgen_esc_url( $thumbURL ). '" /></div>' : '';
768
  }
products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php CHANGED
@@ -23,7 +23,7 @@ class M_NggLegacy extends C_Base_Module
23
  'photocrati-nextgen-legacy',
24
  'NextGEN Legacy',
25
  'Embeds the original version of NextGEN 1.9.3 by Alex Rabe',
26
- '3.2.1',
27
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
28
  'Imagely',
29
  'https://www.imagely.com'
23
  'photocrati-nextgen-legacy',
24
  'NextGEN Legacy',
25
  'Embeds the original version of NextGEN 1.9.3 by Alex Rabe',
26
+ '3.3.2',
27
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
28
  'Imagely',
29
  'https://www.imagely.com'
products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php CHANGED
@@ -34,9 +34,4 @@ Follow variables are useable :
34
 
35
  </div>
36
 
37
- <?php endif; ?>
38
- <script type='text/javascript'>
39
- jQuery(function($) {
40
- new NggPaginatedGallery('<?php echo $displayed_gallery->id() ?>', '.ngg-imagebrowser');
41
- });
42
- </script>
34
 
35
  </div>
36
 
37
+ <?php endif; ?>
 
 
 
 
 
products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php CHANGED
@@ -64,9 +64,4 @@ Please note : A Image resize or watermarking operation will remove all meta info
64
 
65
  </div>
66
 
67
- <?php endif; ?>
68
- <script type='text/javascript'>
69
- jQuery(function($) {
70
- new NggPaginatedGallery('<?php echo $displayed_gallery->id() ?>', '.ngg-imagebrowser');
71
- });
72
- </script>
64
 
65
  </div>
66
 
67
+ <?php endif; ?>
 
 
 
 
 
products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php CHANGED
@@ -34,9 +34,4 @@ Follow variables are useable :
34
 
35
  </div>
36
 
37
- <?php endif; ?>
38
- <script type='text/javascript'>
39
- jQuery(function($) {
40
- new NggPaginatedGallery('<?php echo $displayed_gallery->id() ?>', '.ngg-imagebrowser');
41
- });
42
- </script>
34
 
35
  </div>
36
 
37
+ <?php endif; ?>
 
 
 
 
 
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: photocrati, imagely
3
  Tags: wordpress gallery plugin, gallery, nextgen, nextgen gallery, photo gallery, image gallery, photography, slideshow, images, photo, photo album, watermark
4
  Requires at least: 4.0.0
5
- Stable tag: 3.3.0
6
- Tested up to: 5.3.2
7
  License: GPLv2
8
  Requires PHP: 5.4
9
 
@@ -180,7 +180,15 @@ For more information, feel free to visit the official website for the NextGEN Ga
180
 
181
  == Changelog ==
182
 
183
- = V3.2.24 - 03.10.2020 =
 
 
 
 
 
 
 
 
184
  * NEW: Added feature on Manage Galleries page to search gallery names
185
  * NEW: Added filter 'ngg_disable_shortcodes_in_request_api' to disable rendering of NextGen shortcodes in REST
186
  * NEW: Added option to automatically watermark images during upload
2
  Contributors: photocrati, imagely
3
  Tags: wordpress gallery plugin, gallery, nextgen, nextgen gallery, photo gallery, image gallery, photography, slideshow, images, photo, photo album, watermark
4
  Requires at least: 4.0.0
5
+ Stable tag: 3.3.2
6
+ Tested up to: 5.4.0
7
  License: GPLv2
8
  Requires PHP: 5.4
9
 
180
 
181
  == Changelog ==
182
 
183
+ = V3.3.2 - 04.07.2020 =
184
+ * Fixed: Gallery paths were calculated incorrectly on wordpress.com hosting
185
+ * Fixed: Insert Gallery Window could not edit an existing displayed gallery with a legacy template without breaking the displayed gallery
186
+ * Fixed: Manage Albums page could generate lengthy PHP warnings if galleries or other albums did not have a preview image assigned
187
+ * Fixed: NextGen was forcing the 'screen_options_show_screen' filter to always be true
188
+ * Fixed: Plugin would not load and would throw an error due to C_Component_Registry not being found
189
+ * Fixed: Removed last traces of javascript that were in display type templates
190
+
191
+ = V3.3.0 - 03.10.2020 =
192
  * NEW: Added feature on Manage Galleries page to search gallery names
193
  * NEW: Added filter 'ngg_disable_shortcodes_in_request_api' to disable rendering of NextGen shortcodes in REST
194
  * NEW: Added option to automatically watermark images during upload
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitb2e9b6c6be0bcb0789f9a2c43c2d9861::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
- $includeFiles = Composer\Autoload\ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequirecbd038d0e6fda9665671ad46ec9594a2($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequirecbd038d0e6fda9665671ad46ec9594a2($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitb2e9b6c6be0bcb0789f9a2c43c2d9861
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitb2e9b6c6be0bcb0789f9a2c43c2d9861', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitb2e9b6c6be0bcb0789f9a2c43c2d9861', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInitb2e9b6c6be0bcb0789f9a2c43c2d9861::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInitb2e9b6c6be0bcb0789f9a2c43c2d9861::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequireb2e9b6c6be0bcb0789f9a2c43c2d9861($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequireb2e9b6c6be0bcb0789f9a2c43c2d9861($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2
8
  {
9
  public static $files = array (
10
  'c4ed057a6919e316c176e816418cc6a3' => __DIR__ . '/..' . '/reactr-io/pope-framework/lib/autoload.php',
@@ -27,8 +27,8 @@ class ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2
27
  public static function getInitializer(ClassLoader $loader)
28
  {
29
  return \Closure::bind(function () use ($loader) {
30
- $loader->prefixLengthsPsr4 = ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::$prefixLengthsPsr4;
31
- $loader->prefixDirsPsr4 = ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::$prefixDirsPsr4;
32
 
33
  }, null, ClassLoader::class);
34
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitb2e9b6c6be0bcb0789f9a2c43c2d9861
8
  {
9
  public static $files = array (
10
  'c4ed057a6919e316c176e816418cc6a3' => __DIR__ . '/..' . '/reactr-io/pope-framework/lib/autoload.php',
27
  public static function getInitializer(ClassLoader $loader)
28
  {
29
  return \Closure::bind(function () use ($loader) {
30
+ $loader->prefixLengthsPsr4 = ComposerStaticInitb2e9b6c6be0bcb0789f9a2c43c2d9861::$prefixLengthsPsr4;
31
+ $loader->prefixDirsPsr4 = ComposerStaticInitb2e9b6c6be0bcb0789f9a2c43c2d9861::$prefixDirsPsr4;
32
 
33
  }, null, ClassLoader::class);
34
  }