page = $gmCore->_get( 'page' ); $this->url = add_query_arg( array( 'page' => $this->page ), admin_url( 'admin.php' ) ); if ( 'media.php' === $pagenow ) { add_filter( 'wp_redirect', array( $this, 'redirect' ), 10, 2 ); } if ( 'edit-comments.php' === $pagenow ) { add_filter( 'get_comment_text', array( $this, 'gmedia_comment_text' ), 10, 3 ); } add_action( 'init', array( $this, 'controller' ) ); if ( ! $this->page || strpos( $this->page, 'GrandMedia' ) === false ) { return; } $this->gmediablank = $gmCore->_get( 'gmediablank' ); if ( $this->gmediablank ) { $this->url = add_query_arg( array( 'gmediablank' => $this->gmediablank ), $this->url ); } switch ( $this->page ) { case 'GrandMedia_Albums': $this->taxonomy = 'gmedia_album'; break; case 'GrandMedia_Categories': $this->taxonomy = 'gmedia_category'; break; case 'GrandMedia_Tags': $this->taxonomy = 'gmedia_tag'; break; case 'GrandMedia_Galleries': $this->taxonomy = 'gmedia_gallery'; break; } if ( $this->taxonomy ) { $this->taxterm = str_replace( 'gmedia_', '', $this->taxonomy ); $this->edit_term = $gmCore->_get( 'edit_term' ); } } /** * @param string $key * @param string $post_key * * @return array */ public static function selected_items( $key, $post_key = 'selected_items' ) { $selected_items = array(); if ( $key ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Read-only selection parser; library/term/gallery mutation handlers verify their action nonce and permissions separately. if ( isset( $_POST[ $post_key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Also used to display selected items; this helper performs no state changes. $sel_string = sanitize_text_field( wp_unslash( $_POST[ $post_key ] ) ); $selected_items = array_filter( explode( ',', $sel_string ), 'is_numeric' ); } elseif ( isset( $_COOKIE[ $key ] ) ) { $sel_string = sanitize_text_field( wp_unslash( $_COOKIE[ $key ] ) ); $selected_items = array_filter( explode( '.', $sel_string ), 'is_numeric' ); } } return $selected_items; } /** * @param bool|string|array $author_id_list * * @return array */ public static function filter_by_author( $author_id_list = false ) { global $user_ID, $gmCore; if ( false === $author_id_list ) { $author = false; if ( ! $gmCore->caps['gmedia_show_others_media'] ) { $author = array( $user_ID, 0 ); } } else { $author = wp_parse_id_list( $author_id_list ); if ( ! $gmCore->caps['gmedia_show_others_media'] ) { $author = array_intersect( array( $user_ID, 0 ), $author ); if ( empty( $author ) ) { // The requested authors are all off-limits for this user. Fall // back to their own scope: an empty list would be read by the // query layer as "no author restriction" and leak everyone. $author = array( $user_ID, 0 ); } } } return $author; } /** * Autoloader */ public static function autoload() { global $gmCore; $path_ = GMEDIA_ABSPATH . 'admin/processor/class.processor.'; $page = $gmCore->_get( 'page', '' ); switch ( $page ) { case 'GrandMedia': /** @var $gmProcessorLibrary */ include_once $path_ . 'library.php'; return $gmProcessorLibrary; case 'GrandMedia_AddMedia': /** @var $gmProcessorAddMedia */ include_once $path_ . 'addmedia.php'; return $gmProcessorAddMedia; case 'GrandMedia_Albums': case 'GrandMedia_Categories': /** @var $gmProcessorTerms */ include_once $path_ . 'terms.php'; /** @var $gmProcessorLibrary */ include_once $path_ . 'library.php'; return $gmProcessorTerms; case 'GrandMedia_Tags': /** @var $gmProcessorTerms */ include_once $path_ . 'terms.php'; return $gmProcessorTerms; case 'GrandMedia_Galleries': /** @var $gmProcessorGalleries */ include_once $path_ . 'galleries.php'; return $gmProcessorGalleries; case 'GrandMedia_Modules': /** @var $gmProcessorModules */ include_once $path_ . 'modules.php'; return $gmProcessorModules; case 'GrandMedia_Settings': /** @var $gmProcessorSettings */ include_once $path_ . 'settings.php'; return $gmProcessorSettings; case 'GrandMedia_WordpressLibrary': /** @var $gmProcessorWPMedia */ include_once $path_ . 'wpmedia.php'; return $gmProcessorWPMedia; default: if ( null === self::$me ) { self::$me = new GmediaProcessor(); } return self::$me; } } /** * Load only on Gmedia admin pages */ public function controller() { $this->user_options = self::user_options(); $view = $this->gmediablank ? '_frame' : ''; $this->display_mode = $this->user_options["display_mode_gmedia{$view}"]; if ( ! $this->page || strpos( $this->page, 'GrandMedia' ) === false ) { return; } auth_redirect(); $this->processor(); } /** * @return array|mixed */ public static function user_options() { global $user_ID, $gmGallery; $screen_options = get_user_meta( $user_ID, 'gm_screen_options', true ); if ( ! is_array( $screen_options ) ) { $screen_options = array(); } return array_merge( $gmGallery->options['gm_screen_options'], $screen_options ); } /** * Do diff process before lib shell */ protected function processor() {} /** * @param string $cookie_key * * @return array */ public function clear_selected_items( $cookie_key ) { if ( $cookie_key ) { setcookie( $cookie_key, '', time() - 3600 ); unset( $_COOKIE[ $cookie_key ] ); } return array(); } /** * redirect to original referer after update * * @param string $location * @param string $status * * @return mixed */ public function redirect( $location, $status ) { global $pagenow, $gmCore; $ref = $gmCore->_post( '_wp_original_http_referer' ); if ( 'media.php' === $pagenow && $ref ) { if ( strpos( $ref, 'GrandMedia' ) !== false ) { return $ref; } else { return $location; } } return $location; } /** * Add thumb to gmedia comment text in admin * * @param string $comment_content * @param string $comment * @param array $args * * @return string $comment_content */ public function gmedia_comment_text( $comment_content, $comment, $args ) { global $post; if ( ! $post ) { return $comment_content; } //if('gmedia' === substr($post->post_type, 0, 6)) { if ( 'gmedia' === $post->post_type ) { global $gmDB, $gmCore; $gmedia = $gmDB->get_post_gmedia( $post->ID ); $thumb = '