PluginProbe
Gmedia Photo Gallery / trunk
Gmedia Photo Gallery vtrunk
trunk 0.6.3 0.8.6 0.9.23 1.1.1 1.12.4 1.13.4 1.14.7 1.16.4 1.16.6 1.16.7 1.17.6 1.18.0 1.2.6 1.20.0 1.21.6 1.21.8 1.21.9 1.22.0 1.23.0 1.24.0 1.24.1 1.25.0 1.25.1 1.3.7 All 37 releases
grand-media / admin / processor / class.processor.galleries.php

class.processor.galleries.php in Gmedia Photo Gallery trunk, at admin/processor/class.processor.galleries.php

416 lines 15.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit;
4 }
5
6 /**
7 * GmediaProcessor_Galleries
8 */
9 class GmediaProcessor_Galleries extends GmediaProcessor {
10
11 public static $cookie_key = false;
12
13 private static $me = null;
14
15 public $taxonomy;
16 public $selected_items = array();
17 public $query_args = array();
18
19 /**
20 * GmediaProcessor_Library constructor.
21 */
22 public function __construct() {
23 $this->taxonomy = 'gmedia_gallery';
24 self::$cookie_key = 'gmedia_terms:gallery';
25 $this->selected_items = parent::selected_items( self::$cookie_key );
26
27 parent::__construct();
28 }
29
30 public static function getMe() {
31 if ( null === self::$me ) {
32 self::$me = new GmediaProcessor_Galleries();
33 }
34
35 return self::$me;
36 }
37
38 protected function processor() {
39 global $user_ID, $gmCore, $gmDB, $gmGallery;
40
41 if ( ! $gmCore->caps['gmedia_library'] ) {
42 wp_die( esc_html__( 'You are not allowed to be here', 'grand-media' ) );
43 }
44
45 if ( ! $gmCore->caps['gmedia_gallery_manage'] ) {
46 wp_die( esc_html__( 'You are not allowed to manage gmedia galleries', 'grand-media' ) );
47 }
48
49 include_once GMEDIA_ABSPATH . 'admin/pages/galleries/functions.php';
50
51 $this->query_args = $this->query_args();
52
53 if ( isset( $_POST['select_author'] ) ) {
54 $authors = $gmCore->_post( 'author_ids' );
55 $location = $gmCore->get_admin_url( array( 'author' => (int) $authors ) );
56 wp_safe_redirect( $location );
57 exit;
58 }
59 if ( isset( $_POST['gmedia_gallery_module'] ) && '' !== $_POST['gmedia_gallery_module'] ) {
60 check_admin_referer( 'gmedia_gallery_module', '_wpnonce_gallery_module' );
61 $taxonomy = 'gmedia_gallery';
62 $ids = $gmCore->_get( 'ids', 'selected' );
63 $selected_items = ( 'selected' === $ids ) ? $this->selected_items : wp_parse_id_list( $ids );
64 if ( ! $gmCore->caps['gmedia_delete_others_media'] ) {
65 $_selected_items = $gmDB->get_terms( $taxonomy, array( 'fields' => 'ids', 'global' => $user_ID, 'include' => $selected_items ) );
66 if ( count( $_selected_items ) < count( $selected_items ) ) {
67 $this->error[] = esc_html__( 'You are not allowed to delete others media', 'grand-media' );
68 }
69 $selected_items = $_selected_items;
70 }
71 $count = count( $selected_items );
72 if ( $count ) {
73 $preset = $gmCore->getModulePreset( $gmCore->_post( 'gmedia_gallery_module' ) );
74 $gallery_meta = array(
75 '_edited' => gmdate( 'Y-m-d H:i:s' ),
76 '_module' => $preset['module'],
77 '_settings' => $preset['settings'],
78 );
79 foreach ( $selected_items as $term_id ) {
80 foreach ( $gallery_meta as $key => $value ) {
81 $gmDB->update_metadata( 'gmedia_term', $term_id, $key, $value );
82 }
83 }
84 // translators: 1 - preset name; 2 - module name; 3 - number.
85 $this->msg[] = sprintf( esc_html__( 'Preset "%1$s" of module "%2$s" was applied to %3$d galleries', 'grand-media' ), esc_html( $preset['name'] ), esc_html( $preset['module'] ), (int) $count );
86 }
87 }
88 if ( isset( $_POST['gmedia_gallery_save'] ) ) {
89 check_admin_referer( 'GmediaGallery' );
90
91 if ( isset( $_POST['preview_bgcolor'] ) ) {
92 $gmGallery->options['preview_bgcolor'] = $gmCore->sanitize_hex_color( $gmCore->_post( 'preview_bgcolor' ), 'ffffff' );
93 update_option( 'gmediaOptions', $gmGallery->options );
94 }
95
96 $edit_gallery = (int) $gmCore->_get( 'edit_term' );
97 do {
98 $term = $gmCore->_post( 'term' );
99 if ( ( (int) $term['global'] !== $user_ID ) && ! $gmCore->caps['gmedia_edit_others_media'] ) {
100 $this->error[] = esc_html__( 'You are not allowed to edit others media', 'grand-media' );
101 break;
102 }
103 $term['name'] = trim( $term['name'] );
104 if ( empty( $term['name'] ) ) {
105 $this->error[] = esc_html__( 'Gallery Name is not specified', 'grand-media' );
106 break;
107 }
108 if ( $gmCore->is_digit( $term['name'] ) ) {
109 $this->error[] = esc_html__( "Gallery name can't be only digits", 'grand-media' );
110 break;
111 }
112 if ( empty( $term['module'] ) ) {
113 $this->error[] = esc_html__( 'Something goes wrong... Choose module, please', 'grand-media' );
114 break;
115 }
116 $taxonomy = 'gmedia_gallery';
117 if ( $edit_gallery && ! $gmDB->term_exists( $edit_gallery ) ) {
118 $this->error[] = esc_html__( 'A term with the id provided does not exists', 'grand-media' );
119 $edit_gallery = false;
120 }
121 $term_id = $gmDB->term_exists( $term['name'], $taxonomy, $term['global'] );
122 if ( $term_id ) {
123 if ( $term_id !== $edit_gallery ) {
124 $this->error[] = esc_html__( 'A term with the name provided already exists', 'grand-media' );
125 break;
126 }
127 }
128 $meta = $gmCore->_post( 'meta' );
129 if ( $meta ) {
130 $term = array_merge_recursive( array( 'meta' => $meta ), $term );
131 }
132 if ( $edit_gallery ) {
133 $term_id = $gmDB->update_term( $edit_gallery, $term );
134 } else {
135 $term_id = $gmDB->insert_term( $term['name'], $taxonomy, $term );
136 }
137 if ( is_wp_error( $term_id ) ) {
138 $this->error[] = $term_id->get_error_message();
139 break;
140 }
141
142 $module_settings = $gmCore->_post( 'module', array() );
143 $module_path = $gmCore->get_module_path( $term['module'] );
144 $default_options = array();
145 if ( is_file( $module_path['path'] . '/settings.php' ) ) {
146 /** @noinspection PhpIncludeInspection */
147 include $module_path['path'] . '/settings.php';
148 } else {
149 // translators: module name.
150 $this->error[] = sprintf( esc_html__( 'Can\'t load data from `%s` module' , 'grand-media'), esc_html( $term['module'] ) );
151 break;
152 }
153 foreach ( $module_settings as &$setting ) {
154 if ( is_string( $setting ) && 7 === strlen( $setting ) && '#' === $setting[0] ) {
155 $setting = ltrim( $setting, '#' );
156 }
157 }
158 $module_settings = $gmCore->array_replace_recursive( $default_options, $module_settings );
159 wp_parse_str( $term['query'], $_query );
160 $gallery_meta = array(
161 '_edited' => gmdate( 'Y-m-d H:i:s' ),
162 '_query' => $_query,
163 '_module' => $term['module'],
164 '_settings' => array( $term['module'] => $module_settings ),
165 );
166 foreach ( $gallery_meta as $key => $value ) {
167 $gmDB->update_metadata( 'gmedia_term', $term_id, $key, $value );
168 }
169 if ( $edit_gallery ) {
170 // translators: number.
171 $this->msg[] = sprintf( esc_html__( 'Gallery #%d successfully saved', 'grand-media' ), (int) $term_id );
172 } else {
173 $location = add_query_arg( array( 'edit_term' => $term_id, 'message' => 'save' ), $this->url );
174 set_transient( 'gmedia_new_gallery_id', $term_id, 60 );
175 wp_safe_redirect( $location );
176 exit;
177 }
178 } while ( 0 );
179 }
180 $term_id = $gmCore->_get( 'edit_term' );
181 if ( ( 'save' === $gmCore->_get( 'message' ) ) && $term_id ) {
182 $gmedia_new_gallery_id = get_transient( 'gmedia_new_gallery_id' );
183 if ( false !== $gmedia_new_gallery_id ) {
184 delete_transient( 'gmedia_new_gallery_id' );
185 // translators: number.
186 $this->msg[] = sprintf( esc_html__( 'Gallery #%d successfully saved', 'grand-media' ), (int) $term_id );
187 }
188 }
189
190 if ( isset( $_POST['module_preset_restore_original'] ) ) {
191 $preset_id = intval( $gmCore->_post( 'preset_default', 0 ) );
192 $gmDB->delete_term( $preset_id );
193 $this->msg[] = esc_html__( 'Original module settings restored. Click "Reset to default" button to save original module settings for gallery', 'grand-media' );
194 }
195
196 if ( isset( $_POST['gmedia_gallery_reset'] ) ) {
197 check_admin_referer( 'GmediaGallery' );
198 $edit_gallery = (int) $gmCore->_get( 'edit_term' );
199 do {
200 if ( ! $gmDB->term_exists( $edit_gallery ) ) {
201 $this->error[] = esc_html__( 'A term with the id provided does not exists', 'grand-media' );
202 break;
203 }
204 if ( ! $gmCore->caps['gmedia_edit_others_media'] ) {
205 $term = $gmDB->get_term( $edit_gallery );
206 if ( $term->global !== $user_ID ) {
207 $this->error[] = esc_html__( 'You are not allowed to edit others media', 'grand-media' );
208 break;
209 }
210 }
211 $gallery_settings = $gmDB->get_metadata( 'gmedia_term', $edit_gallery, '_settings', true );
212 reset( $gallery_settings );
213 $gallery_module = key( $gallery_settings );
214 $module_path = $gmCore->get_module_path( $gallery_module );
215 /**
216 * @var $default_options
217 */
218 if ( is_file( $module_path['path'] . '/settings.php' ) ) {
219 /** @noinspection PhpIncludeInspection */
220 include $module_path['path'] . '/settings.php';
221 $preset = $gmDB->get_term( '[' . $gallery_module . ']', array( 'taxonomy' => 'gmedia_module', 'global' => '0' ) );
222 if ( $preset ) {
223 $default_preset = maybe_unserialize( $preset->description );
224 $default_options = $gmCore->array_replace_recursive( $default_options, $default_preset );
225 }
226 $preset = $gmDB->get_term( '[' . $gallery_module . ']', 'gmedia_module' );
227 if ( $preset ) {
228 $default_preset = maybe_unserialize( $preset->description );
229 $default_options = $gmCore->array_replace_recursive( $default_options, $default_preset );
230 }
231 } else {
232 // translators: module name.
233 $this->error[] = sprintf( esc_html__( 'Can\'t load data from `%s` module' , 'grand-media'), esc_html( $gallery_module ) );
234 break;
235 }
236
237 $gallery_meta = array(
238 '_edited' => gmdate( 'Y-m-d H:i:s' ),
239 '_settings' => array( $gallery_module => $default_options ),
240 );
241 foreach ( $gallery_meta as $key => $value ) {
242 $gmDB->update_metadata( 'gmedia_term', $edit_gallery, $key, $value );
243 }
244 $this->msg[] = esc_html__( 'Gallery settings are reset', 'grand-media' );
245
246 } while ( 0 );
247
248 }
249
250 if ( isset( $_POST['module_preset_save'] ) || isset( $_POST['module_preset_save_default'] ) || isset( $_POST['module_preset_save_global'] ) ) {
251 check_admin_referer( 'GmediaGallery' );
252 do {
253 $term = $gmCore->_post( 'term' );
254 if ( empty( $term['module'] ) ) {
255 $this->error[] = esc_html__( 'Something goes wrong... Choose module, please', 'grand-media' );
256 break;
257 }
258 $module_settings = $gmCore->_post( 'module', array() );
259 $module_path = $gmCore->get_module_path( $term['module'] );
260 $default_options = array();
261 if ( is_file( $module_path['path'] . '/settings.php' ) ) {
262 /** @noinspection PhpIncludeInspection */
263 include $module_path['path'] . '/settings.php';
264 } else {
265 // translators: module name.
266 $this->error[] = sprintf( esc_html__( 'Can\'t load data from `%s` module' , 'grand-media'), esc_html( $term['module'] ) );
267 break;
268 }
269 $module_settings = $gmCore->array_replace_recursive( $default_options, $module_settings );
270
271 $preset_name = $gmCore->_post( 'module_preset_name', '' );
272 if ( isset( $_POST['module_preset_save_default'] ) || isset( $_POST['module_preset_save_global'] ) ) {
273 $preset_name = '[' . $term['module'] . ']';
274 } else {
275 $preset_name = trim( $preset_name );
276 if ( empty( $preset_name ) ) {
277 $preset_name = current_time( 'mysql' );
278 }
279 $preset_name = '[' . $term['module'] . '] ' . $preset_name;
280 }
281 $args = array();
282 $args['description'] = $module_settings;
283 $args['status'] = $term['module'];
284 $args['global'] = $user_ID;
285 if ( current_user_can( 'manage_options' ) && isset( $_POST['module_preset_save_global'] ) ) {
286 $args['global'] = '0';
287 }
288
289 $taxonomy = 'gmedia_module';
290 $term_id = $gmDB->term_exists( $preset_name, $taxonomy, $args['global'] );
291 if ( $term_id ) {
292 $term_id = $gmDB->update_term( $term_id, $args );
293 } else {
294 $term_id = $gmDB->insert_term( $preset_name, $taxonomy, $args );
295 }
296 if ( is_wp_error( $term_id ) ) {
297 $this->error[] = $term_id->get_error_message();
298 break;
299 } else {
300 // translators: preset name.
301 $this->msg[] = sprintf( esc_html__( 'Preset `%s` successfully saved', 'grand-media' ), esc_html( $preset_name ) );
302 }
303 } while ( 0 );
304 }
305
306 $do_gmedia_terms = $gmCore->_get( 'do_gmedia_terms' );
307 if ( 'delete' === $do_gmedia_terms ) {
308 check_admin_referer( 'gmedia_delete', '_wpnonce_delete' );
309 $taxonomy = 'gmedia_gallery';
310 $ids = $gmCore->_get( 'ids', 'selected' );
311 $selected_items = ( 'selected' === $ids ) ? $this->selected_items : wp_parse_id_list( $ids );
312 if ( ! $gmCore->caps['gmedia_delete_others_media'] ) {
313 $_selected_items = $gmDB->get_terms( $taxonomy, array( 'fields' => 'ids', 'global' => $user_ID, 'include' => $selected_items ) );
314 if ( count( $_selected_items ) < count( $selected_items ) ) {
315 $this->error[] = esc_html__( 'You are not allowed to delete others media', 'grand-media' );
316 }
317 $selected_items = $_selected_items;
318 }
319 $count = count( $selected_items );
320 if ( $count ) {
321 foreach ( $selected_items as $item ) {
322 $delete = $gmDB->delete_term( $item );
323 if ( ! $delete ) {
324 // translators: number.
325 $this->error[] = sprintf( esc_html__( 'Error while delete gallery #%d', 'grand-media' ), (int) $item );
326 $count --;
327 } elseif ( is_wp_error( $delete ) ) {
328 $this->error[] = $delete->get_error_message();
329 $count --;
330 }
331 }
332 if ( $count ) {
333 // translators: number.
334 $this->msg[] = sprintf( esc_html__( '%d item(s) deleted successfully', 'grand-media' ), (int) $count );
335 }
336 setcookie( self::$cookie_key, '', time() - 3600 );
337 unset( $_COOKIE[ self::$cookie_key ] );
338 $this->selected_items = array();
339 }
340 if ( ! empty( $this->msg ) ) {
341 set_transient( 'gmedia_action_msg', $this->msg, 30 );
342 }
343 if ( ! empty( $this->error ) ) {
344 set_transient( 'gmedia_action_error', $this->error, 30 );
345 }
346 }
347 if ( $do_gmedia_terms ) {
348 $_wpnonce = array();
349 foreach ( $_GET as $key => $value ) {
350 if ( strpos( $key, '_wpnonce' ) !== false ) {
351 $_wpnonce[ $key ] = $value;
352 }
353 }
354 $remove_args = array_merge( array( 'do_gmedia_terms', 'ids' ), $_wpnonce );
355 $location = remove_query_arg( $remove_args );
356 $location = add_query_arg( 'did_gmedia_terms', $do_gmedia_terms, $location );
357 wp_safe_redirect( $location );
358 exit;
359 }
360 if ( $gmCore->_get( 'did_gmedia_terms' ) ) {
361 $msg = get_transient( 'gmedia_action_msg' );
362 if ( $msg ) {
363 delete_transient( 'gmedia_action_msg' );
364 $this->msg = $msg;
365 }
366 $error = get_transient( 'gmedia_action_error' );
367 if ( $error ) {
368 delete_transient( 'gmedia_action_error' );
369 $this->error = $error;
370 }
371 }
372 }
373
374 /**
375 * @return array
376 */
377 public function query_args() {
378 global $gmCore;
379
380 $args['status'] = $gmCore->_get( 'status' );
381 $args['page'] = $gmCore->_get( 'pager', 1 );
382 $args['number'] = $gmCore->_get( 'per_page', $this->user_options['per_page_gmedia_gallery'] );
383 $args['offset'] = ( $args['page'] - 1 ) * $args['number'];
384 $args['global'] = parent::filter_by_author( $gmCore->_get( 'author' ) );
385 $args['include'] = $gmCore->_get( 'include' );
386 $args['search'] = $gmCore->_get( 's' );
387 $args['orderby'] = $gmCore->_get( 'orderby', $this->user_options['orderby_gmedia_gallery'] );
388 $args['order'] = $gmCore->_get( 'order', $this->user_options['sortorder_gmedia_gallery'] );
389
390 if ( $args['search'] && ( '#' === substr( $args['search'], 0, 1 ) ) ) {
391 $args['include'] = substr( $args['search'], 1 );
392 $args['search'] = false;
393 }
394
395 if ( ( 'selected' === $gmCore->_req( 'filter' ) ) && ! empty( $this->selected_items ) ) {
396 $args['include'] = $this->selected_items;
397 $args['orderby'] = $gmCore->_get( 'orderby', 'include' );
398 $args['order'] = $gmCore->_get( 'order', 'ASC' );
399 }
400
401 $query_args = apply_filters( 'gmedia_gallery_query_args', $args );
402 $query_args['hide_empty'] = false;
403
404 foreach ( $query_args as $key => $val ) {
405 if ( empty( $val ) && ( '0' !== $val ) && ( 0 !== $val ) ) {
406 unset( $query_args[ $key ] );
407 }
408 }
409
410 return $query_args;
411 }
412 }
413
414 global $gmProcessorGalleries;
415 $gmProcessorGalleries = GmediaProcessor_Galleries::getMe();
416