PK!%mddController.phpnu[parent = \C_NextGen_Admin_Page_Controller::get_instance(); $this->_load_displayed_gallery(); if ( ! has_action( 'wp_print_scripts', [ $this, 'filter_scripts' ] ) ) { add_action( 'wp_print_scripts', [ $this, 'filter_scripts' ] ); } if ( ! has_action( 'wp_print_scripts', [ $this, 'filter_styles' ] ) ) { add_action( 'wp_print_scripts', [ $this, 'filter_styles' ] ); } } static function get_instance( string $context = 'all' ): Controller { if ( ! isset( self::$_instances[ $context ] ) ) { self::$_instances[ $context ] = new Controller( $context ); } return self::$_instances[ $context ]; } /** * Necessary for compatibility with Pro. * * @TODO Remove when use of this method has been removed from Pro */ public static function has_method(): bool { return false; } public function _load_displayed_gallery() { $mapper = DisplayedGalleryMapper::get_instance(); // Fetch the displayed gallery by ID. if ( ( $id = $this->parent->param( 'id' ) ) ) { $this->displayed_gallery = $mapper->find( $id ); } elseif ( isset( $_REQUEST['shortcode'] ) && isset( $_REQUEST['nonce'] ) && \wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['nonce'] ) ), 'ngg_attach_to_post_iframe' ) ) { // Fetch the displayed gallery by shortcode. $shortcode = base64_decode( $_REQUEST['shortcode'] ); // $shortcode lacks the opening and closing brackets but still begins with 'ngg ' or 'ngg_images ' which are not parameters. $params = preg_replace( '/^(ngg|ngg_images) /i', '', $shortcode, 1 ); $params = stripslashes( $params ); $params = str_replace( [ '[', ']' ], [ '[', ']' ], $params ); $params = shortcode_parse_atts( $params ); $this->displayed_gallery = Renderer::get_instance()->params_to_displayed_gallery( $params ); } // If all else fails, then create fresh with a new displayed gallery. if ( empty( $this->displayed_gallery ) ) { $this->displayed_gallery = $mapper->create(); } } /** * Gets all dependencies for a particular resource that has been registered using wp_register_style/wp_register_script * * @param $handle * @param $type * * @return array */ public function get_resource_dependencies( $handle, $type ) { $retval = []; $wp_resources = $GLOBALS[ $type ]; if ( ( $index = array_search( $handle, $wp_resources->registered ) ) !== false ) { $registered_script = $wp_resources->registered[ $index ]; if ( $registered_script->deps ) { foreach ( $registered_script->deps as $dep ) { $retval[] = $dep; $retval = array_merge( $retval, $this->get_script_dependencies( $handle ) ); } } } return $retval; } public function get_script_dependencies( $handle ) { return $this->get_resource_dependencies( $handle, 'wp_scripts' ); } public function get_style_dependencies( $handle ) { return $this->get_resource_dependencies( $handle, 'wp_styles' ); } public function get_ngg_provided_resources( $type ) { $wp_resources = $GLOBALS[ $type ]; $retval = []; foreach ( $wp_resources->queue as $handle ) { $script = $wp_resources->registered[ $handle ]; if ( strpos( $script->src, plugin_dir_url( NGG_PLUGIN_BASENAME ) ) !== false ) { $retval[] = $handle; } if ( defined( 'NGG_PRO_PLUGIN_BASENAME' ) && strpos( $script->src, plugin_dir_url( NGG_PRO_PLUGIN_BASENAME ) ) !== false ) { $retval[] = $handle; } if ( defined( 'NGG_PLUS_PLUGIN_BASENAME' ) && strpos( $script->src, plugin_dir_url( NGG_PLUS_PLUGIN_BASENAME ) ) !== false ) { $retval[] = $handle; } } return array_unique( $retval ); } public function get_ngg_provided_scripts() { return $this->get_ngg_provided_resources( 'wp_scripts' ); } public function get_ngg_provided_styles() { return $this->get_ngg_provided_resources( 'wp_styles' ); } public function get_igw_allowed_scripts() { $retval = []; foreach ( $this->get_ngg_provided_scripts() as $handle ) { $retval[] = $handle; $retval = array_merge( $retval, $this->get_script_dependencies( $handle ) ); } foreach ( $this->get_display_type_scripts() as $handle ) { $retval[] = $handle; $retval = array_merge( $retval, $this->get_script_dependencies( $handle ) ); } foreach ( $this->attach_to_post_scripts as $handle ) { $retval[] = $handle; $retval = array_merge( $retval, $this->get_script_dependencies( $handle ) ); } return array_unique( apply_filters( 'ngg_igw_approved_scripts', $retval ) ); } public function get_display_type_scripts() { global $wp_scripts; $wp_scripts->old_queue = $wp_scripts->queue; $wp_scripts->queue = []; $mapper = DisplayTypeMapper::get_instance(); foreach ( $mapper->find_all() as $display_type ) { $form = \C_Form::get_instance( $display_type->name ); $form->enqueue_static_resources(); } $retval = $wp_scripts->queue; $wp_scripts->queue = $wp_scripts->old_queue; unset( $wp_scripts->old_queue ); return $retval; } public function get_display_type_styles() { global $wp_styles; $wp_styles->old_queue = $wp_styles->queue; $wp_styles->queue = []; $mapper = DisplayTypeMapper::get_instance(); foreach ( $mapper->find_all() as $display_type ) { $form = \C_Form::get_instance( $display_type->name ); $form->enqueue_static_resources(); } $retval = $wp_styles->queue; $wp_styles->queue = $wp_styles->old_queue; unset( $wp_styles->old_queue ); return $retval; } public function get_igw_allowed_styles() { $retval = []; foreach ( $this->get_ngg_provided_styles() as $handle ) { $retval[] = $handle; $retval = array_merge( $retval, $this->get_style_dependencies( $handle ) ); } foreach ( $this->get_display_type_styles() as $handle ) { $retval[] = $handle; $retval = array_merge( $retval, $this->get_style_dependencies( $handle ) ); } foreach ( $this->attach_to_post_styles as $handle ) { $retval[] = $handle; $retval = array_merge( $retval, $this->get_style_dependencies( $handle ) ); } return array_unique( apply_filters( 'ngg_igw_approved_styles', $retval ) ); } public function filter_scripts() { global $wp_scripts; $new_queue = []; $current_queue = $wp_scripts->queue; $approved = $this->get_igw_allowed_scripts(); foreach ( $current_queue as $handle ) { if ( in_array( $handle, $approved ) ) { $new_queue[] = $handle; } } $wp_scripts->queue = $new_queue; } public function filter_styles() { global $wp_styles; $new_queue = []; $current_queue = $wp_styles->queue; $approved = $this->get_igw_allowed_styles(); foreach ( $current_queue as $handle ) { if ( in_array( $handle, $approved ) ) { $new_queue[] = $handle; } } $wp_styles->queue = $new_queue; } /** * Necessary for compatibility with Pro. * * @TODO Remove when use of this method has been removed from Pro * @return false */ public function mark_script( $handle ) { return false; } public function enqueue_display_tab_js() { // Enqueue backbone.js library, required by the Attach to Post display tab. wp_enqueue_script( 'backbone' ); // provided by WP. // Enqueue the backbone app for the display tab. Get all entities used by the display tab. $context = 'attach_to_post'; $gallery_mapper = GalleryMapper::get_instance(); $album_mapper = AlbumMapper::get_instance(); $image_mapper = ImageMapper::get_instance(); $display_type_mapper = DisplayTypeMapper::get_instance(); $sources = SourceManager::get_instance(); $router = Router::get_instance(); $settings = Settings::get_instance(); // Get the nextgen tags. global $wpdb; $tags = $wpdb->get_results( "SELECT DISTINCT name AS 'id', name FROM {$wpdb->terms} WHERE term_id IN ( SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'ngg_tag' )" ); $all_tags = new \stdClass(); $all_tags->name = 'All'; $all_tags->id = 'All'; array_unshift( $tags, $all_tags ); $display_types = []; $display_type_mapper->flush_query_cache(); $all_display_types = $display_type_mapper->find_all(); if ( \C_NextGEN_Bootstrap::get_pro_api_version() >= 4.0 ) { foreach ( $all_display_types as $display_type ) { $available = ControllerFactory::has_controller( $display_type->name ); if ( ! \apply_filters( 'ngg_atp_show_display_type', $available, $display_type ) ) { continue; } if ( ! ControllerFactory::has_controller( $display_type->name ) ) { continue; } $controller = ControllerFactory::get_controller( $display_type->name ); if ( $controller->is_hidden_from_igw() ) { continue; } $display_type->preview_image_url = $controller->get_preview_image_url(); $display_types[] = $display_type; } } else { foreach ( $all_display_types as $display_type ) { if ( ( isset( $display_type->hidden_from_igw ) && $display_type->hidden_from_igw ) || ( isset( $display_type->hidden_from_ui ) && $display_type->hidden_from_ui ) ) { continue; } $available = ControllerFactory::has_controller( $display_type->name ); if ( ! $available && class_exists( '\C_Component_Registry' ) ) { $available = \C_Component_Registry::get_instance()->is_module_loaded( $display_type->name ); if ( ! $available && defined( 'NGG_PRO_ALBUMS' ) && in_array( $display_type->name, [ \NGG_PRO_LIST_ALBUM, \NGG_PRO_GRID_ALBUM ] ) ) { $available = true; } } if ( ! \apply_filters( 'ngg_atp_show_display_type', $available, $display_type ) ) { continue; } if ( ControllerFactory::has_controller( $display_type->name ) ) { $controller = ControllerFactory::get_controller( $display_type->name ); $display_type->preview_image_url = $controller->get_preview_image_url(); } else { $display_type->preview_image_url = StaticPopeAssets::get_url( $display_type->preview_image_relpath ); } $display_types[] = $display_type; } } usort( $display_types, [ $this, '_display_type_list_sort' ] ); \wp_enqueue_script( 'ngg_display_tab', StaticAssets::get_url( 'AttachToPost/display_tab.js', 'photocrati-attach_to_post#display_tab.js' ), [ 'jquery', 'backbone', 'photocrati_ajax' ], NGG_SCRIPT_VERSION ); \wp_localize_script( 'ngg_display_tab', 'igw_data', [ 'displayed_gallery_preview_url' => $router->get_url( '/' . NGG_ATTACH_TO_POST_SLUG . '/preview', false ), 'displayed_gallery' => $this->displayed_gallery->get_entity(), 'sources' => $sources->get_all(), 'gallery_primary_key' => $gallery_mapper->get_primary_key_column(), 'galleries' => $gallery_mapper->find_all(), 'albums' => $album_mapper->find_all(), 'tags' => $tags, 'display_types' => $display_types, 'nonce' => wp_create_nonce( 'wp_rest' ), 'image_primary_key' => $image_mapper->get_primary_key_column(), 'display_type_priority_base' => NGG_DISPLAY_PRIORITY_BASE, 'display_type_priority_step' => NGG_DISPLAY_PRIORITY_STEP, // Nonce verification has already been performed by the methods that invoke this method. // phpcs:ignore WordPress.Security.NonceVerification.Recommended 'shortcode_ref' => isset( $_REQUEST['ref'] ) ? floatval( $_REQUEST['ref'] ) : null, 'shortcode_defaults' => [ 'order_by' => $settings->get( 'galSort' ), 'order_direction' => $settings->get( 'galSortDir' ), 'returns' => 'included', 'maximum_entity_count' => $settings->get( 'maximum_entity_count' ), ], 'shortcode_attr_replacements' => [ 'source' => 'src', 'container_ids' => 'ids', 'display_type' => 'display', ], 'i18n' => [ 'sources' => \__( 'Are you inserting a Gallery (default), an Album, or images based on Tags?', 'nggallery' ), 'optional' => \__( '(optional)', 'nggallery' ), 'slug_tooltip' => \__( 'Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox', 'nggallery' ), 'slug_label' => \__( 'Slug', 'nggallery' ), 'no_entities' => \__( 'No entities to display for this source', 'nggallery' ), 'exclude_question' => \__( 'Exclude?', 'nggallery' ), 'select_gallery' => \__( 'Select a Gallery', 'nggallery' ), 'galleries' => \__( 'Select one or more galleries (click in box to see available galleries).', 'nggallery' ), 'albums' => \__( 'Select one album (click in box to see available albums).', 'nggallery' ), ], ] ); } public function start_resource_monitoring() { global $wp_scripts, $wp_styles; $this->attach_to_post_scripts = []; $this->attach_to_post_styles = []; $wp_styles->before_monitoring = $wp_styles->queue; $wp_scripts->before_monitoring = $wp_styles->queue; } public function stop_resource_monitoring() { global $wp_scripts, $wp_styles; $this->attach_to_post_scripts = array_diff( $wp_scripts->queue, $wp_scripts->before_monitoring ); $this->attach_to_post_styles = array_diff( $wp_styles->queue, $wp_styles->before_monitoring ); } public function enqueue_backend_resources() { $this->start_resource_monitoring(); // Enqueue frame event publishing. \wp_enqueue_script( 'frame_event_publisher' ); \wp_enqueue_script( 'ngg_tabs', StaticAssets::get_url( 'AttachToPost/ngg_tabs.js', 'photocrati-attach_to_post#ngg_tabs.js' ), [ 'jquery-ui-tabs', 'jquery-ui-sortable', 'jquery-ui-tooltip', 'jquery-ui-accordion' ], NGG_SCRIPT_VERSION ); \wp_enqueue_style( 'buttons' ); // Ensure select2. \wp_enqueue_style( 'ngg_select2' ); \wp_enqueue_script( 'ngg_select2' ); // Ensure that the Photocrati AJAX library is loaded. \wp_enqueue_script( 'photocrati_ajax' ); // Enqueue logic for the Attach to Post interface as a whole. \wp_enqueue_script( 'ngg_attach_to_post_js', StaticAssets::get_url( 'AttachToPost/attach_to_post.js', 'photocrati-attach_to_post#attach_to_post.js' ), [], NGG_SCRIPT_VERSION ); \wp_enqueue_style( 'ngg_attach_to_post', StaticAssets::get_url( 'AttachToPost/attach_to_post.css', 'photocrati-attach_to_post#attach_to_post.css' ), [], NGG_SCRIPT_VERSION ); \wp_dequeue_script( 'debug-bar-js' ); \wp_dequeue_style( 'debug-bar-css' ); $this->enqueue_display_tab_js(); if ( ! \M_Marketing::is_plus_or_pro_enabled() ) { $marketing = new Marketing(); $marketing->enqueue_display_tab_js(); } \do_action( 'ngg_igw_enqueue_scripts' ); \do_action( 'ngg_igw_enqueue_styles' ); $this->stop_resource_monitoring(); } /** * Renders the interface * * @param bool $return * @return string */ public function index_action( $return = true ) { $parent = \C_NextGen_Admin_Page_Controller::get_instance(); $parent->enqueue_backend_resources(); $parent->do_not_cache(); $this->enqueue_backend_resources(); \wp_enqueue_style( 'nggadmin', NGGALLERY_URLPATH . 'admin/css/nggadmin.css', [], NGG_SCRIPT_VERSION, 'screen' ); \do_action( 'admin_enqueue_scripts' ); // If Elementor is also active a fatal error is generated due to this method not existing. if ( ! function_exists( 'wp_print_media_templates' ) ) { require_once ABSPATH . WPINC . '/media-template.php'; } $view = new View( 'AttachToPost/attach_to_post', [ 'page_title' => $this->_get_page_title(), 'tabs' => $this->_get_main_tabs(), 'logo' => StaticPopeAssets::get_url( 'photocrati-nextgen_admin#imagely_icon.png' ), ], 'photocrati-attach_to_post#attach_to_post' ); return $view->render( $return ); } /** * Returns the page title of the Attach to Post interface * * @return string */ public function _get_page_title() { return \__( 'NextGEN Gallery - Attach To Post', 'nggallery' ); } /** * Returns the main tabs displayed on the Attach to Post interface * * @return array */ public function _get_main_tabs() { $retval = []; if ( Security::is_allowed( 'NextGEN Manage gallery' ) ) { $retval['displayed_tab'] = [ 'content' => $this->_render_display_tab(), 'title' => \__( 'Insert Into Page', 'nggallery' ), ]; } if ( Security::is_allowed( 'NextGEN Upload images' ) ) { $retval['create_tab'] = [ 'content' => $this->_render_create_tab(), 'title' => \__( 'Upload Images', 'nggallery' ), ]; } if ( Security::is_allowed( 'NextGEN Manage others gallery' ) && Security::is_allowed( 'NextGEN Manage gallery' ) ) { $retval['galleries_tab'] = [ 'content' => $this->_render_galleries_tab(), 'title' => \__( 'Manage Galleries', 'nggallery' ), ]; } if ( Security::is_allowed( 'NextGEN Edit album' ) ) { $retval['albums_tab'] = [ 'content' => $this->_render_albums_tab(), 'title' => \__( 'Manage Albums', 'nggallery' ), ]; } return apply_filters( 'ngg_attach_to_post_main_tabs', $retval ); } /** * Renders a NextGen Gallery page in an iframe, suited for the attach to post * interface * * @param string $page * @param null|int $tab_id (optional) * @return string */ public function _render_ngg_page_in_frame( $page, $tab_id = null ) { $frame_url = \admin_url( "/admin.php?page={$page}&attach_to_post" ); $frame_url = Router::esc_url( $frame_url ); if ( $tab_id ) { $tab_id = " id='ngg-iframe-{$tab_id}'"; } return ""; } /** * Renders the display tab for adjusting how images/galleries will be displayed * * @return string */ public function _render_display_tab() { $view = new View( 'AttachToPost/display_tab', [ 'messages' => [], 'displayed_gallery' => $this->displayed_gallery, 'tabs' => $this->_get_display_tabs(), ], 'photocrati-attach_to_post#display_tab' ); return $view->render( true ); } /** * Renders the tab used primarily for Gallery and Image creation * * @return string */ public function _render_create_tab() { return $this->_render_ngg_page_in_frame( 'ngg_addgallery', 'create_tab' ); } /** * Renders the tab used for Managing Galleries * * @return string */ public function _render_galleries_tab() { return $this->_render_ngg_page_in_frame( 'nggallery-manage-gallery', 'galleries_tab' ); } /** * Renders the tab used for Managing Albums. */ public function _render_albums_tab() { return $this->_render_ngg_page_in_frame( 'nggallery-manage-album', 'albums_tab' ); } public function _display_type_list_sort( $type_1, $type_2 ) { $order_1 = $type_1->view_order; $order_2 = $type_2->view_order; if ( $order_1 == null ) { $order_1 = NGG_DISPLAY_PRIORITY_BASE; } if ( $order_2 == null ) { $order_2 = NGG_DISPLAY_PRIORITY_BASE; } if ( $order_1 > $order_2 ) { return 1; } if ( $order_1 < $order_2 ) { return -1; } return 0; } /** * Gets a list of tabs to render for the "Display" tab */ public function _get_display_tabs() { // The ATP requires more memmory than some applications, somewhere around 60MB. // Because it's such an important feature of NextGEN Gallery, we temporarily disable // any memory limits. if ( ! extension_loaded( 'suhosin' ) ) { @ini_set( 'memory_limit', -1 ); } return [ 'choose_display_tab' => $this->_render_choose_display_tab(), 'display_settings_tab' => $this->_render_display_settings_tab(), 'preview_tab' => $this->_render_preview_tab(), ]; } /** * Renders the accordion tab, "What would you like to display?" */ public function _render_choose_display_tab() { return [ 'id' => 'choose_display', 'title' => \__( 'Choose Display', 'nggallery' ), 'content' => $this->_render_display_source_tab_contents() . $this->_render_display_type_tab_contents(), ]; } /** * Renders the contents of the source tab * * @return string */ public function _render_display_source_tab_contents() { $view = new View( 'AttachToPost/display_tab_source', [ 'i18n' => [], ], 'photocrati-attach_to_post#display_tab_source' ); return $view->render( true ); } /** * Renders the contents of the display type tab */ public function _render_display_type_tab_contents() { $view = new View( 'AttachToPost/display_tab_type', [], 'photocrati-attach_to_post#display_tab_type' ); return $view->render( true ); } /** * Renders the display settings tab for the Attach to Post interface * * @return array */ public function _render_display_settings_tab() { return [ 'id' => 'display_settings_tab', 'title' => \__( 'Customize Display Settings', 'nggallery' ), 'content' => $this->_render_display_settings_contents(), ]; } /** * If editing an existing displayed gallery, retrieves the name * of the display type * * @return string */ public function _get_selected_display_type_name() { $retval = ''; if ( $this->displayed_gallery ) { $retval = $this->displayed_gallery->display_type; } return $retval; } /** * Is the displayed gallery that's being edited using the specified display * type? * * @param string $name name of the display type * @return bool */ public function is_displayed_gallery_using_display_type( $name ) { $retval = false; if ( $this->displayed_gallery ) { $retval = $this->displayed_gallery->display_type == $name; } return $retval; } /** * Renders the contents of the display settings tab * * @return string */ public function _render_display_settings_contents() { $retval = []; // Get all display setting forms. $form_manager = FormManager::get_instance(); $forms = $form_manager->get_forms( NGG_DISPLAY_SETTINGS_SLUG, true ); // Display each form. foreach ( $forms as $form ) { // Enqueue the form's static resources. $form->enqueue_static_resources(); // Determine which classes to use for the form's "class" attribute. $model = $form->get_model(); if ( null === $model ) { continue; } $current = $this->is_displayed_gallery_using_display_type( $model->name ); $css_class = $current ? 'display_settings_form' : 'display_settings_form hidden'; $defaults = $model->settings; // If this form is used to provide the display settings for the current // displayed gallery, then we need to override the forms settings // with the displayed gallery settings. if ( $current ) { $settings = $this->parent->array_merge_assoc( $model->settings, $this->displayed_gallery->display_settings, true ); $model->settings = $settings; } // Output the display settings form. $view = new View( 'AttachToPost/display_settings_form', [ 'settings' => $form->render(), 'display_type_name' => $model->name, 'css_class' => $css_class, 'defaults' => $defaults, ], 'photocrati-attach_to_post#display_settings_form' ); $retval[] = $view->render( true ); } // In addition, we'll render a form that will be displayed when no display type has been selected in the // Attach to Post interface. Render the default "no display type selected" view. $css_class = $this->_get_selected_display_type_name() ? 'display_settings_form hidden' : 'display_settings_form'; $view = new View( 'AttachToPost/no_display_type_selected', [ 'no_display_type_selected' => \__( 'No display type selected', 'nggallery' ), 'css_class' => $css_class, ], 'photocrati-attach_to_post#no_display_type_selected' ); $retval[] = $view->render( true ); // Return all display setting forms. return implode( "\n", $retval ); } /** * Renders the tab used to preview included images * * @return array */ public function _render_preview_tab() { return [ 'id' => 'preview_tab', 'title' => \__( 'Sort or Exclude Images', 'nggallery' ), 'content' => $this->_render_preview_tab_contents(), ]; } /** * Renders the contents of the "Preview" tab. * * @return string */ public function _render_preview_tab_contents() { $view = new View( 'AttachToPost/preview_tab', [], 'photocrati-attach_to_post#preview_tab' ); return $view->render( true ); } } PK!ںEventPublisher.phpnu[setting_name = Settings::get_instance()->get( 'frame_event_cookie_name' ); } public function register_hooks() { add_action( 'init', [ $this, 'register_script' ] ); add_filter( 'ngg_admin_script_handles', [ $this, 'add_script_to_ngg_pages' ] ); add_action( 'ngg_enqueue_frame_event_publisher_script', [ $this, 'enqueue_script' ] ); // Elementor's editor.php runs `new \WP_Scripts()` which requires we register scripts on both init and this // action if we want the attach-to-post code to function (which relies on frame_event_publisher). add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'register_script' ] ); // Emit frame communication events. if ( $this->does_request_require_frame_communication() ) { add_action( 'ngg_created_new_gallery', [ $this, 'new_gallery_event' ] ); add_action( 'ngg_after_new_images_added', [ $this, 'images_added_event' ] ); add_action( 'ngg_page_event', [ $this, 'nextgen_page_event' ] ); add_action( 'ngg_manage_tags', [ $this, 'manage_tags_event' ] ); } } public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new EventPublisher(); } return self::$instance; } /** * Encodes data for a setting * * @param array $data * @return string */ protected function encode( $data ) { return \rawurlencode( \json_encode( $data ) ); } /** * Decodes data from a setting * * @param string $data * @return array */ protected function decode( $data ) { return (array) \json_decode( \rawurldecode( $data ) ); } /** * Adds a setting to the frame events * * @param array $data * @return array */ public function add_event( $data ) { $id = \md5( \serialize( $data ) ); $data['context'] = 'attach_to_post'; $write_cookie = true; if ( \defined( 'XMLRPC_REQUEST' ) ) { $write_cookie = XMLRPC_REQUEST == false; } if ( $write_cookie ) { \setrawcookie( $this->setting_name . '_' . $id, $this->encode( $data ), \time() + 10800, '/', \parse_url( \site_url(), PHP_URL_HOST ) ); } return $data; } /* TODO: Determine if this is necessary and remove it */ public function add_script_to_ngg_pages( $scripts ) { $scripts['frame_event_publisher'] = NGG_SCRIPT_VERSION; return $scripts; } public function enqueue_script() { wp_enqueue_script( 'frame_event_publisher' ); wp_localize_script( 'frame_event_publisher', 'frame_event_publisher_domain', [ parse_url( site_url(), PHP_URL_HOST ) ] ); } public function register_script() { wp_register_script( 'frame_event_publisher', StaticAssets::get_url( 'IGW/frame_event_publisher.js', 'photocrati-frame_communication#frame_event_publisher.js' ), [ 'jquery' ], NGG_SCRIPT_VERSION ); } public function does_request_require_frame_communication(): bool { // phpcs:ignore WordPress.Security.NonceVerification.Recommended return ( strpos( $_SERVER['REQUEST_URI'], 'attach_to_post' ) !== false or ( isset( $_SERVER['HTTP_REFERER'] ) && strpos( $_SERVER['HTTP_REFERER'], 'attach_to_post' ) !== false ) or array_key_exists( 'attach_to_post', $_REQUEST ) ); } /** * Notify frames that a new gallery has been created * * @param int $gallery_id */ public function new_gallery_event( $gallery_id ) { $gallery = GalleryMapper::get_instance()->find( $gallery_id ); if ( $gallery ) { $this->add_event( [ 'event' => 'new_gallery', 'gallery_id' => intval( $gallery_id ), 'gallery_title' => $gallery->title, ] ); } } /** * Notifies a frame that images have been added to a gallery * * @param int $gallery_id * @param array $image_ids */ public function images_added_event( $gallery_id, $image_ids = [] ) { $this->add_event( [ 'event' => 'images_added', 'gallery_id' => intval( $gallery_id ), ] ); } /** * Notifies a frame that an action has been performed on a particular NextGEN page * * @param array $event */ public function nextgen_page_event( $event ) { $this->add_event( $event ); } /** * Notifies a frame that the tags have changed * * @param array $tags */ public function manage_tags_event( $tags = [] ) { $this->add_event( [ 'event' => 'manage_tags', 'tags' => $tags, ] ); } } PK!w[9 9 Marketing.phpnu[ $id, 'default_source' => 'galleries', 'entity_types' => [ 'image' ], 'hidden_from_igw' => false, 'hidden_from_ui' => false, 'name' => $name, 'title' => $title, 'preview_image_url' => $preview_mvc_path ? StaticAssets::get_url( $preview_mvc_path ) : '', ]; } public function get_pro_display_types() { return [ $this->new_pro_display_type_upsell( -1, 'pro-tile', __( 'Pro Tile', 'nggallery' ), 'IGW/Marketing/pro-tile-preview.jpg' ), $this->new_pro_display_type_upsell( -2, 'pro-mosaic', __( 'Pro Mosaic', 'nggallery' ), 'IGW/Marketing/pro-mosaic-preview.jpg' ), $this->new_pro_display_type_upsell( -3, 'pro-masonry', __( 'Pro Masonry', 'nggallery' ), 'IGW/Marketing/pro-masonry-preview.jpg' ), $this->new_pro_display_type_upsell( -4, 'igw-promo' ), ]; } public function get_marketing_cards() { $pro_tile = new \C_Marketing_Block_Popup( __( 'Pro Tile Gallery', 'nggallery' ), \M_Marketing::get_i18n_fragment( 'feature_not_available', __( 'the Pro Tile Gallery', 'nggallery' ) ), \M_Marketing::get_i18n_fragment( 'lite_coupon' ), StaticAssets::get_url( 'IGW/Marketing/pro-tile-preview.jpg' ), 'igw', 'tiledgallery' ); $pro_masonry = new \C_Marketing_Block_Popup( __( 'Pro Masonry Gallery', 'nggallery' ), \M_Marketing::get_i18n_fragment( 'feature_not_available', __( 'the Pro Masonry Gallery', 'nggallery' ) ), \M_Marketing::get_i18n_fragment( 'lite_coupon' ), StaticAssets::get_url( 'IGW/Marketing/pro-masonry-preview.jpg' ), 'igw', 'masonrygallery' ); $pro_mosaic = new \C_Marketing_Block_Popup( __( 'Pro Mosaic Gallery', 'nggallery' ), \M_Marketing::get_i18n_fragment( 'feature_not_available', __( 'the Pro Mosaic Gallery', 'nggallery' ) ), \M_Marketing::get_i18n_fragment( 'lite_coupon' ), StaticAssets::get_url( 'IGW/Marketing/pro-mosaic-preview.jpg' ), 'igw', 'mosaicgallery' ); return [ 'pro-tile' => '
' . $pro_tile->render() . '
', 'pro-masonry' => '
' . $pro_masonry->render() . '
', 'pro-mosaic' => '
' . $pro_mosaic->render() . '
', ]; } public function enqueue_display_tab_js() { $view = new View( 'IGW/marketing' ); $data = [ 'display_types' => $this->get_pro_display_types(), 'i18n' => [ 'get_pro' => __( 'Requires NextGEN Pro', 'nggallery' ), ], 'templates' => $this->get_marketing_cards(), 'igw_promo' => $view->render( true ), ]; \wp_enqueue_style( 'jquery-modal' ); \wp_enqueue_script( 'igw_display_type_upsells', StaticAssets::get_url( 'IGW/Marketing/igw_display_type_upsells.js' ), [ 'ngg_display_tab', 'jquery-modal' ], NGG_SCRIPT_VERSION ); \wp_localize_script( 'igw_display_type_upsells', 'igw_display_type_upsells', $data ); \M_Marketing::enqueue_blocks_style(); \wp_add_inline_style( 'ngg_attach_to_post', '.display_type_preview:nth-child(5) {clear: both;} .ngg-marketing-block-display-type-settings label {color: darkgray !important;}' ); } } PK!HUhhBlockManager.phpnu[ 'integer', 'single' => true, 'show_in_rest' => true, ] ); add_action( 'rest_insert_' . $post_type, [ $this, 'set_or_remove_ngg_post_thumbnail' ], PHP_INT_MAX - 1, 2 ); }, get_post_types_by_support( 'thumbnail' ) ); }, 11 ); } public function ngg_enqueue_block_assets() { // Check if we are in the admin area. if ( is_admin() ) { // Get the current screen. $current_screen = get_current_screen(); // Check if we are in the Block Editor or the Site Editor. if ( $current_screen && ( $current_screen->is_block_editor() || $current_screen->id === 'site-editor' ) ) { \wp_enqueue_script( 'nextgen-block-js', StaticAssets::get_url( 'IGW/Block/build/block.min.js', 'photocrati-nextgen_block#build/block.min.js' ), [ 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-compose' ], NGG_SCRIPT_VERSION, true ); \wp_localize_script( 'nextgen-block-js', 'add_ngg_gallery_block_i18n', [ 'edit' => \__( 'Edit', 'nggallery' ), 'delete' => \__( 'Delete', 'nggallery' ), 'create' => \__( 'Add NextGEN Gallery', 'nggallery' ), 'h3' => \__( 'NextGEN Gallery', 'nggallery' ), 'nonce' => \wp_create_nonce( 'ngg_attach_to_post_iframe' ), ] ); \wp_enqueue_style( 'nextgen-block-css', StaticAssets::get_url( 'IGW/Block/editor.css', 'photocrati-nextgen_block#editor.css' ), [ 'wp-edit-blocks' ], NGG_SCRIPT_VERSION ); } } } public function set_or_remove_ngg_post_thumbnail( $post, $request ) { $json = @json_decode( $request->get_body() ); $target = null; if ( ! is_object( $json ) ) { return; } // WordPress 5.3 changed how the featured-image metadata was submitted to the server. if ( isset( $json->meta ) && property_exists( $json->meta, 'ngg_post_thumbnail' ) ) { $target = $json->meta; } elseif ( property_exists( $json, 'ngg_post_thumbnail' ) ) { $target = $json; } if ( ! $target ) { return; } if( 0 === $target->ngg_post_thumbnail) { // Thumbnail ID is zero, skip deleting. return; } $storage = StorageManager::get_instance(); // Was the post thumbnail removed? if ( ! $target->ngg_post_thumbnail ) { \delete_post_thumbnail( $post->ID ); $storage->delete_from_media_library( $target->ngg_post_thumbnail ); } else { // Was it added? $storage->set_post_thumbnail( $post->ID, $target->ngg_post_thumbnail ); } } public function enqueue_post_thumbnails() { \add_thickbox(); \wp_enqueue_script( 'ngg-post-thumbnails', StaticAssets::get_url( 'IGW/Block/build/post-thumbnail.min.js', 'photocrati-nextgen_block#build/post-thumbnail.min.js' ), [ 'lodash', 'wp-element', 'wp-data', 'wp-editor', 'wp-components', 'wp-i18n', 'photocrati_ajax' ], NGG_SCRIPT_VERSION ); $nonce = \wp_create_nonce( 'ngg_set_post_thumbnails' ); \wp_localize_script( 'ngg-post-thumbnails', 'ngg_featured_image', [ 'modal_url' => \admin_url( "/media-upload.php?nonce={$nonce}&post_id=%post_id%&type=image&tab=nextgen&from=block-editor&TB_iframe=true" ), ] ); // Nonce verification is not necessary: this injects some extra CSS on the add/edit page/post page. // phpcs:disable WordPress.Security.NonceVerification.Recommended if ( preg_match( '/media-upload\.php/', $_SERVER['REQUEST_URI'] ) && 'nextgen' === $_GET['tab'] ) { \wp_add_inline_style( 'wp-admin', '#media-upload-header {display: none; }' ); if ( isset( $_GET['from'] ) && 'block-editor' === sanitize_text_field( wp_unslash( $_GET['from'] ) ) ) { \add_action( 'admin_enqueue_scripts', [ $this, 'media_upload_footer' ] ); } } // phpcs:enable WordPress.Security.NonceVerification.Recommended } public function media_upload_footer() { \wp_add_inline_script( 'image-edit', 'window.NGGSetAsThumbnail = top.set_ngg_post_thumbnail' ); } } PK! 11ATPManager.phpnu[index_action(); exit(); } } /** * Renders the underscore template used by TinyMCE for IGW placeholders */ public function print_tinymce_placeholder_template() { $view = new View( 'AttachToPost/tinymce_placeholder', [], 'photocrati-attach_to_post#tinymce_placeholder' ); $template = $view->find_template_abspath( 'AttachToPost/tinymce_placeholder', 'photocrati-attach_to_post#tinymce_placeholder' ); readfile( $template ); } /** * Prevents ATP preview image placeholders from being used as opengraph / twitter metadata * * @param string $image * @return null|string */ public function hide_preview_image_from_yoast( $image ) { if ( strpos( $image, NGG_ATTACH_TO_POST_SLUG ) !== false ) { return null; } return $image; } /** * Removes IGW preview/placeholder images from Yoast's sitemap * * @param $images * @param $post_id * @return array */ public function remove_preview_images_from_yoast_sitemap( $images, $post_id ) { $retval = []; foreach ( $images as $image ) { if ( strpos( $image['src'], NGG_ATTACH_TO_POST_SLUG ) === false ) { $retval[] = $image; } else { // Lookup images for the displayed gallery. if ( preg_match( '/(\d+)$/', $image['src'], $match ) ) { $displayed_gallery_id = $match[1]; $mapper = DisplayedGalleryMapper::get_instance(); $displayed_gallery = $mapper->find( $displayed_gallery_id, true ); if ( $displayed_gallery ) { $gallery_storage = StorageManager::get_instance(); $settings = Settings::get_instance(); $source_obj = $displayed_gallery->get_source(); if ( in_array( 'image', $source_obj->returns ) ) { foreach ( $displayed_gallery->get_entities() as $image ) { $named_image_size = $settings->get( 'imgAutoResize' ) ? 'full' : 'thumb'; $sitemap_image = [ 'src' => $gallery_storage->get_image_url( $image, $named_image_size ), 'alt' => $image->alttext, 'title' => $image->description ? $image->description : $image->alttext, ]; $retval[] = $sitemap_image; } } } } } } return $retval; } /** * In 2.0.66.X and earlier, ATP placeholder images used a different url than what 2.0.69 uses and must be converted. * * @param string $content * @return string */ public function fix_preview_images( $content ) { $content = str_replace( site_url( '/' . NGG_ATTACH_TO_POST_SLUG . '/preview/id--' ), admin_url( '/?' . NGG_ATTACH_TO_POST_SLUG . '=' . NGG_ATTACH_TO_POST_SLUG . '/preview/id--' ), $content ); $content = str_replace( site_url( '/index.php/' . NGG_ATTACH_TO_POST_SLUG . '/preview/id--' ), admin_url( '/?' . NGG_ATTACH_TO_POST_SLUG . '=' . NGG_ATTACH_TO_POST_SLUG . '/preview/id--' ), $content ); return $content; } public function add_media_button() { $search = [ Security::is_allowed( 'NextGEN Attach Interface' ), Security::is_allowed( 'NextGEN Use TinyMCE' ), ]; if ( in_array( false, $search ) ) { return; } $button_url = StaticAssets::get_url( 'AttachToPost/igw_button.png', 'photocrati-attach_to_post#igw_button.png' ); $label = \__( 'Add Gallery', 'nggallery' ); $igw_url = admin_url( '/?' . NGG_ATTACH_TO_POST_SLUG . '=1' ); $igw_url .= '&nonce=' . \wp_create_nonce( 'ngg_attach_to_post_iframe' ); $igw_url .= '&KeepThis=true&TB_iframe=true&height=600&width=1000'; printf( '%s', $igw_url, $button_url, $label ); } /** * Substitutes the gallery placeholder content with the gallery type frontend * view, returns a list of static resources that need to be loaded * * @param string $content */ public function substitute_placeholder_imgs( $content ) { $content = $this->fix_preview_images( $content ); // To match ATP entries we compare the stored url against a generic path; entries MUST have a gallery ID. if ( preg_match_all( '##mi', $content, $matches, PREG_SET_ORDER ) ) { $mapper = DisplayedGalleryMapper::get_instance(); foreach ( $matches as $match ) { // Find the displayed gallery. $displayed_gallery_id = $match[6]; $displayed_gallery = $mapper->find( $displayed_gallery_id, true ); // Get the content for the displayed gallery. $retval = '

' . _( 'Invalid Displayed Gallery' ) . '

'; if ( $displayed_gallery ) { $retval = ''; $renderer = Renderer::get_instance(); if ( defined( 'NGG_SHOW_DISPLAYED_GALLERY_ERRORS' ) && NGG_SHOW_DISPLAYED_GALLERY_ERRORS && ! $displayed_gallery->is_valid() ) { $retval .= var_export( $displayed_gallery->validation(), true ); } if ( self::$substitute_placeholders ) { $retval .= $renderer->render( $displayed_gallery, true ); } } $content = str_replace( $match[0], $retval, $content ); } } return $content; } /** * Enqueues static resources required by the Attach-To-Post interface */ public function enqueue_static_resources() { // Enqueue resources needed at post/page level. if ( $this->is_new_or_edit_post_screen() ) { \wp_enqueue_script( 'nextgen_admin_js' ); \wp_enqueue_style( 'nextgen_admin_css' ); \wp_enqueue_script( 'frame_event_publisher' ); DisplayManager::enqueue_fontawesome(); \wp_register_script( 'Base64', StaticAssets::get_url( 'AttachToPost/base64.js', 'photocrati-attach_to_post#base64.js' ), [], NGG_SCRIPT_VERSION ); \wp_enqueue_style( 'ngg_attach_to_post_dialog', StaticAssets::get_url( 'AttachToPost/attach_to_post_dialog.css', 'photocrati-attach_to_post#attach_to_post_dialog.css' ), [ 'gritter' ], NGG_SCRIPT_VERSION ); \wp_enqueue_script( 'ngg-igw', StaticAssets::get_url( 'AttachToPost/igw.js', 'photocrati-attach_to_post#igw.js' ), [ 'jquery', 'Base64', 'gritter' ], NGG_SCRIPT_VERSION ); \wp_localize_script( 'ngg-igw', 'ngg_igw_i18n', [ 'nextgen_gallery' => \__( 'NextGEN Gallery', 'nggallery' ), 'edit' => \__( 'Edit', 'nggallery' ), 'remove' => \__( 'Delete', 'nggallery' ), ] ); // Nonce verification is not necessary here: we are only enqueueing resources for the IGW iframe children. // phpcs:disable WordPress.Security.NonceVerification.Recommended } elseif ( isset( $_REQUEST['attach_to_post'] ) || isset( $_REQUEST['nextgen-attach_to_post'] ) || ( isset( $_REQUEST['page'] ) && false !== strpos( $_REQUEST['page'], 'nggallery' ) ) ) { // phpcs:enable WordPress.Security.NonceVerification.Recommended \wp_enqueue_script( 'iframely', StaticAssets::get_url( 'AttachToPost/iframely.js', 'photocrati-attach_to_post#iframely.js' ), [], NGG_SCRIPT_VERSION ); \wp_enqueue_style( 'iframely', StaticAssets::get_url( 'AttachToPost/iframely.css', 'photocrati-attach_to_post#iframely.css' ), [], NGG_SCRIPT_VERSION ); \wp_enqueue_style( 'nextgen_addgallery_page' ); \wp_enqueue_style( 'ngg_marketing_blocks_style' ); \wp_enqueue_style( 'uppy' ); \wp_enqueue_script( 'nextgen_admin_js' ); \wp_enqueue_style( 'nextgen_admin_css' ); } } public function is_new_or_edit_post_screen() { return preg_match( '/\/wp-admin\/(post|post-new|site-editor)\.php$/', $_SERVER['SCRIPT_NAME'] ); } public function can_use_tinymce() { $checks = [ Security::is_allowed( 'NextGEN Attach Interface' ), Security::is_allowed( 'NextGEN Use TinyMCE' ), \get_user_option( 'rich_editing' ) == 'true', ]; return ! in_array( false, $checks ); } /** * Enqueues resources needed by the TinyMCE editor */ public function enqueue_tinymce_resources() { if ( $this->is_new_or_edit_post_screen() ) { \add_editor_style( 'https://fonts.googleapis.com/css?family=Lato' ); \add_editor_style( StaticAssets::get_url( 'AttachToPost/ngg_attach_to_post_tinymce_plugin.css', 'photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.css' ) ); \wp_enqueue_script( 'photocrati_ajax' ); \wp_localize_script( 'media-editor', 'igw', [ 'url' => \admin_url( '/?' . NGG_ATTACH_TO_POST_SLUG . '=1' ), ] ); \wp_localize_script( 'photocrati_ajax', 'ngg_tinymce_plugin', [ 'url' => add_query_arg( 'ver', NGG_SCRIPT_VERSION, StaticAssets::get_url( 'AttachToPost/ngg_attach_to_post_tinymce_plugin.js', 'photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.js' ) ), 'i18n' => [ 'button_label' => \__( 'Add NextGEN Gallery', 'nggallery' ), ], 'name' => $this->attach_to_post_tinymce_plugin, 'nonce' => \wp_create_nonce( 'ngg_attach_to_post_iframe' ), ] ); } } /** * Adds a TinyMCE button for the Attach To Post plugin * * @param array $buttons * @return array */ public function add_attach_to_post_button( $buttons ) { if ( $this->can_use_tinymce() ) { array_push( $buttons, 'separator', $this->attach_to_post_tinymce_plugin ); } return $buttons; } /** * Adds the Attach To Post TinyMCE plugin * * @param array $plugins * @return array * @uses mce_external_plugins filter */ public function add_attach_to_post_tinymce_plugin( $plugins ) { if ( $this->can_use_tinymce() ) { $plugins[ $this->attach_to_post_tinymce_plugin ] = \add_query_arg( 'ver', NGG_SCRIPT_VERSION, StaticAssets::get_url( 'AttachToPost/ngg_attach_to_post_tinymce_plugin.js', 'photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.js' ) ); } return $plugins; } /** * Adds the Attach To Post TinyMCE i18n strings * * @param $mce_translation * @return mixed */ public function add_attach_to_post_tinymce_i18n( $mce_translation ) { $mce_translation['ngg_attach_to_post.title'] = \__( 'Attach NextGEN Gallery to Post', 'nggallery' ); return $mce_translation; } } PK!?ۿframe_event_publisher.jsnu[(function(g,f){'use strict';var h=function(e){if("object"!==typeof e.document)throw Error("Cookies.js requires a `window` with a `document` object");var b=function(a,d,c){return 1===arguments.length?b.get(a):b.set(a,d,c)};b._document=e.document;b._cacheKeyPrefix="cookey.";b._maxExpireDate=new Date("Fri, 31 Dec 9999 23:59:59 UTC");b.defaults={path:"/",secure:!1};b.get=function(a){b._cachedDocumentCookie!==b._document.cookie&&b._renewCache();a=b._cache[b._cacheKeyPrefix+a];return a===f?f:decodeURIComponent(a)}; b.set=function(a,d,c){c=b._getExtendedOptions(c);c.expires=b._getExpiresDate(d===f?-1:c.expires);b._document.cookie=b._generateCookieString(a,d,c);return b};b.expire=function(a,d){return b.set(a,f,d)};b._getExtendedOptions=function(a){return{path:a&&a.path||b.defaults.path,domain:a&&a.domain||b.defaults.domain,expires:a&&a.expires||b.defaults.expires,secure:a&&a.secure!==f?a.secure:b.defaults.secure}};b._isValidDate=function(a){return"[object Date]"===Object.prototype.toString.call(a)&&!isNaN(a.getTime())}; b._getExpiresDate=function(a,d){d=d||new Date;"number"===typeof a?a=Infinity===a?b._maxExpireDate:new Date(d.getTime()+1E3*a):"string"===typeof a&&(a=new Date(a));if(a&&!b._isValidDate(a))throw Error("`expires` parameter cannot be converted to a valid Date instance");return a};b._generateCookieString=function(a,b,c){a=a.replace(/[^#$&+\^`|]/g,encodeURIComponent);a=a.replace(/\(/g,"%28").replace(/\)/g,"%29");b=(b+"").replace(/[^!#$&-+\--:<-\[\]-~]/g,encodeURIComponent);c=c||{};a=a+"="+b+(c.path?";path="+ c.path:"");a+=c.domain?";domain="+c.domain:"";a+=c.expires?";expires="+c.expires.toUTCString():"";return a+=c.secure?";secure":""};b._getCacheFromString=function(a){var d={};a=a?a.split("; "):[];for(var c=0;cb?a.length:b,c=a.substr(0,b),e;try{e=decodeURIComponent(c)}catch(f){console&&"function"=== typeof console.error&&console.error('Could not decode cookie with key "'+c+'"',f)}return{key:e,value:a.substr(b+1)}};b._renewCache=function(){b._cache=b._getCacheFromString(b._document.cookie);b._cachedDocumentCookie=b._document.cookie};b._areEnabled=function(){var a="1"===b.set("cookies.js",1).get("cookies.js");b.expire("cookies.js");return a};b.enabled=b._areEnabled();return b},e="object"===typeof g.document?h(g):h;"function"===typeof define&&define.amd?define(function(){return e}):"object"===typeof exports? ("object"===typeof module&&"object"===typeof module.exports&&(exports=module.exports=e),exports.Cookies=e):g.Cookies=e})("undefined"===typeof window?this:window); window.Frame_Event_Publisher = { id: window.name, cookie_name: 'X-Frame-Events', received: [], initialized: false, children: {}, window: false, ajax_handlers_setup: false, is_parent: function() { return window.parent.document === window.document; }, is_child: function(){ return !this.is_parent(); }, setup_ajax_handlers: function() { if (!this.ajax_handlers_setup) { var publisher = this; jQuery(document).ajaxComplete(function(e, xhr, settings) { setTimeout(function() { publisher.ajax_handler(); }, 0); }); } }, ajax_handler: function() { this.broadcast(this.get_events(document.cookie)); }, initialize: function(){ this.setup_ajax_handlers(); // Provided by wp_localize_script() this lets us delete cookies set by the server if (typeof window.frame_event_publisher_domain !== 'undefined') { Cookies.defaults.domain = window.frame_event_publisher_domain; } this.window = window; if (typeof(this.window.id) != 'undefined' && this.window.id.length != null && this.window.id.length > 0) this.id = this.window.id; else this.id == 'Unknown'; this.received = this.get_events(document.cookie); this.initialized = true; if (this.is_parent()) this.emit(this.received, true); return this.received; }, register_child: function(child) { this.children[child.id] = child; }, broadcast: function(events, child){ if (!this.initialized) events = this.initialize(); if (this.id == "Unknown") { this.initialized = false; setTimeout(function(){ this.broadcast(events, child); }, 100); } // Broad cast events else { if (this.is_child()) { if (arguments.length <= 1) child = window; this.find_parent(child).register_child(child.Frame_Event_Publisher); this.notify_parent(events, child); } else { if (arguments.length == 0) events = this.received; this.notify_children(events); } } }, /** * Notifies the parent with a list of events to broadcast */ notify_parent: function(events, child){ this.find_parent(child).broadcast(events, child); }, /** * Notifies (broadcasts) to children the list of available events */ notify_children: function(events){ this.emit(events); for (var index in this.children) { var child = this.children[index]; try { child.emit(events); } catch (ex) { if (typeof(console) != "undefined") console.log(ex); delete this.children.index; } } }, /** * Finds the parent window for the current child window */ find_parent: function(child){ var retval = child; try { while (retval.document !== retval.parent.document) retval = retval.parent; } catch (ex){ if (typeof(console) != "undefined") console.log(ex); } return retval.Frame_Event_Publisher; }, /** * Emits all known events to all children */ emit: function(events, forced){ if (typeof(forced) == "undefined") forced = false; for (var event_id in events) { var event = events[event_id]; if (!forced && !this.has_received_event(event_id)) { if (typeof(console) != "undefined") console.log("Emitting "+event_id+":"+event.event+" to "+this.id); this.trigger_event(event_id, events[event_id]); } } }, has_received_event: function(id){ return this.received[id] != undefined; }, trigger_event: function(id, event){ var signal = event.context+':'+event.event; event.id = id; if (typeof(window) != "undefined") jQuery(window).trigger(signal, event); this.received[id] = event; }, /** * Parses the events found in the cookie */ get_events: function(cookie){ var frame_events = {}; var cookies = unescape(cookie).split(' '); for (var i=0; i.editor-block-list__block-edit:before, div[data-type="imagely/nextgen-gallery"].is-hovered>.editor-block-list__block-edit:before { outline: none !important; } div[data-type="imagely/nextgen-gallery"] .editor-block-list__breadcrumb { display: none !important; } div[data-type="imagely/nextgen-gallery"]:focus::after { box-shadow: none !important; } /* Popup modal when IGW is open */ #add-ngg-gallery-modal { background: white; position: fixed; top: 50px; bottom: 50px; right: 35px; left: 35px; z-index: 99999; } #add-ngg-gallery-modal-background { background: black; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 99988; opacity: 70%; } #add-ngg-gallery-modal p { color: white; } #add-ngg-gallery-modal iframe { height: 100%; width: 100%; } #add-ngg-gallery-modal-close { position: absolute; top: 10px; right: 25px; background-color: #9fbb1a; border-radius: 50%; color: white; padding: 1px; } #add-ngg-gallery-modal-spinner { position: absolute; top: 0; left: 0; bottom: 0; right: 0; display: flex; justify-content: center; align-items: center; z-index: 2; background: white; opacity: 1; transition: visibility 0.5s linear 0.6s, opacity 0.4s linear, font-size 0.3s linear; visibility: visible; font-size: 15vh; } #add-ngg-gallery-modal-spinner.add-ngg-gallery-modal-spinner-hidden { opacity: 0; visibility: hidden; transition-delay: 0s; font-size: .5vh; } #add-ngg-gallery-modal-spinner i.fa.fa-spin { } /* Customize the NextGEN Gallery placeholder */ div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-parent { outline: none !important; } div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-block { background-color: #ffffff; border-radius: 2px; box-shadow: 0 0 4px 2px rgba(0,0,0,.05); box-sizing: border-box; border-top: 5px solid #b8d330; color: #fff; font-family: sans-serif; font-size: 20px; outline: none !important; min-height: 210px; padding: 60px 60px 70px; display: flex; justify-content: center; align-items: center; flex-wrap: wrap; } div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-block h3 { color: black !important; font-family: "Lato", sans-serif !important; font-size: 21px; font-weight: 700 !important; letter-spacing: 3px !important; margin-bottom: 15px; margin-top: 0; text-align: center; text-transform: uppercase; width: 100%; } /* Styling for Add NextGEN Gallery buttons */ div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button { font-size: 14px; letter-spacing: 1.2px; line-height: 20px; font-family: "Lato", sans-serif; font-weight: 900; color: #fff; background-color: black; border: none; box-shadow: none; padding: 12px 24px; text-transform: uppercase; text-align: center; cursor: pointer; flex: 1; flex-grow: 0; margin: 0 0 0 15px; } div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button:only-of-type { flex-grow: 1; width: 300px; max-width: 300px; } div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button:first-of-type { margin-left: 0; } div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button:hover { background: #383838; }PK!3$8' Block/editor.min.cssnu[@font-face{font-family:Lato;src:url(../../nextgen_admin/static/Lato-Regular.ttf) format('truetype')}div[data-type="imagely/nextgen-gallery"]{z-index:30}div[data-type="imagely/nextgen-gallery"].is-hovered>.editor-block-list__block-edit:before,div[data-type="imagely/nextgen-gallery"].is-selected>.editor-block-list__block-edit:before{outline:0!important}div[data-type="imagely/nextgen-gallery"] .editor-block-list__breadcrumb{display:none!important}div[data-type="imagely/nextgen-gallery"]:focus::after{box-shadow:none!important}#add-ngg-gallery-modal{background:#fff;position:fixed;top:50px;bottom:50px;right:35px;left:35px;z-index:99999}#add-ngg-gallery-modal-background{background:#000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:99988;opacity:70%}#add-ngg-gallery-modal p{color:#fff}#add-ngg-gallery-modal iframe{height:100%;width:100%}#add-ngg-gallery-modal-close{position:absolute;top:10px;right:25px;background-color:#9fbb1a;border-radius:50%;color:#fff;padding:1px}#add-ngg-gallery-modal-spinner{position:absolute;top:0;left:0;bottom:0;right:0;display:flex;justify-content:center;align-items:center;z-index:2;background:#fff;opacity:1;transition:visibility .5s linear .6s,opacity .4s linear,font-size .3s linear;visibility:visible;font-size:15vh}#add-ngg-gallery-modal-spinner.add-ngg-gallery-modal-spinner-hidden{opacity:0;visibility:hidden;transition-delay:0s;font-size:.5vh}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-parent{outline:0!important}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-block{background-color:#fff;border-radius:2px;box-shadow:0 0 4px 2px rgba(0,0,0,.05);box-sizing:border-box;border-top:5px solid #b8d330;color:#fff;font-family:sans-serif;font-size:20px;outline:0!important;min-height:210px;padding:60px 60px 70px;display:flex;justify-content:center;align-items:center;flex-wrap:wrap}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-block h3{color:#000!important;font-family:Lato,sans-serif!important;font-size:21px;font-weight:700!important;letter-spacing:3px!important;margin-bottom:15px;margin-top:0;text-align:center;text-transform:uppercase;width:100%}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button{font-size:14px;letter-spacing:1.2px;line-height:20px;font-family:Lato,sans-serif;font-weight:900;color:#fff;background-color:#000;border:none;box-shadow:none;padding:12px 24px;text-transform:uppercase;text-align:center;cursor:pointer;flex:1;flex-grow:0;margin:0 0 0 15px}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button:only-of-type{flex-grow:1;width:300px;max-width:300px}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button:first-of-type{margin-left:0}div[data-type="imagely/nextgen-gallery"] .add-ngg-gallery-button:hover{background:#383838}PK!pk;$;$Block/build/block.min.jsnu[(()=>{"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;n0}},{key:"removeGallery",value:function(){this.props.onInsertGallery("")}},{key:"closeIGW",value:function(){this.setState({open:!1})}},{key:"openIGW",value:function(){this.setState({open:!0})}},{key:"render",value:function(){return React.createElement("div",{className:"add-ngg-gallery-parent"},this.state.open?React.createElement(f,{content:this.props.content,onCloseModal:this.closeIGW,onInsertGallery:this.props.onInsertGallery}):"",this.hasGallery()?React.createElement("div",{className:"add-ngg-gallery-block"},React.createElement("h3",null,add_ngg_gallery_block_i18n.h3),React.createElement("button",{className:"add-ngg-gallery-button",onClick:this.openIGW},add_ngg_gallery_block_i18n.edit),React.createElement("button",{className:"add-ngg-gallery-button",onClick:this.removeGallery},add_ngg_gallery_block_i18n.delete)):React.createElement("div",{className:"add-ngg-gallery-block"},React.createElement("div",{className:"add-ngg-gallery-button",onClick:this.openIGW},add_ngg_gallery_block_i18n.create)))}}])}(),p={};p.nextgen=React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",version:"1.1",viewBox:"0 0 240 240",width:"240.0pt",height:"240.0pt"},React.createElement("path",{d:"M 0.00 0.00 L 240.00 0.00 L 240.00 240.00 L 0.00 240.00 L 0.00 0.00 Z",fill:"#ffffff"}),React.createElement("path",{d:"M 116.97 3.45 C 155.78 2.17 194.29 21.78 215.90 54.07 C 226.92 70.43 234.08 89.34 236.07 109.00 C 239.08 140.20 228.61 172.42 208.14 196.12 C 191.73 215.41 168.66 228.79 143.97 234.16 C 125.25 238.08 105.37 237.44 87.04 231.86 C 67.00 226.07 48.82 214.65 34.69 199.32 C 14.08 177.26 2.88 147.13 3.50 117.00 C 4.36 95.58 10.72 74.49 22.55 56.55 C 35.03 37.69 52.63 22.36 73.52 13.50 C 87.07 6.87 101.94 3.80 116.97 3.45 Z",fill:"#9fbb1a"}),React.createElement("path",{d:"M 69.17 61.47 C 70.78 61.56 72.37 61.91 73.97 62.05 C 80.30 62.27 86.66 62.04 93.00 62.14 C 96.81 62.23 100.65 61.35 104.18 62.75 C 108.45 64.30 111.62 68.44 111.67 73.03 C 111.78 81.35 111.66 89.68 111.72 98.00 C 111.65 101.03 111.87 104.65 110.30 107.35 C 108.22 110.91 104.17 113.41 100.02 113.40 C 90.68 113.43 81.33 113.42 71.99 113.40 C 65.66 113.41 59.85 108.54 59.66 102.04 C 59.55 92.36 59.70 82.67 59.58 72.99 C 59.41 67.44 63.60 62.15 69.17 61.47 Z",fill:"#ffffff"}),React.createElement("path",{d:"M 138.98 61.27 C 148.33 61.42 157.69 61.22 167.04 61.37 C 173.28 61.31 178.81 66.69 178.70 72.96 C 178.72 82.65 178.75 92.34 178.68 102.02 C 178.48 108.28 173.18 112.96 167.02 113.04 C 157.69 113.25 148.33 113.02 138.99 113.15 C 132.77 113.56 126.76 108.35 126.66 102.04 C 126.55 94.37 126.67 86.68 126.62 79.00 C 126.63 76.33 126.42 73.60 126.72 70.94 C 127.60 65.24 133.25 60.88 138.98 61.27 Z",fill:"#ffffff"}),React.createElement("path",{d:"M 70.97 72.97 C 80.41 72.70 89.87 72.92 99.31 72.86 C 99.39 82.36 99.34 91.87 99.34 101.38 C 89.85 101.36 80.36 101.42 70.87 101.35 C 70.90 91.90 70.70 82.42 70.97 72.97 Z",fill:"#9fbb1a"}),React.createElement("path",{d:"M 138.39 72.91 C 147.80 72.79 157.23 72.85 166.65 72.88 C 166.65 82.41 166.85 91.97 166.55 101.49 C 157.18 101.27 147.79 101.39 138.41 101.42 C 138.30 91.92 138.36 82.41 138.39 72.91 Z",fill:"#9fbb1a"}),React.createElement("path",{d:"M 69.96 128.72 C 77.95 128.35 86.00 128.68 94.00 128.66 C 97.84 128.75 101.40 128.12 104.93 129.93 C 109.12 131.86 111.63 136.43 111.39 141.00 C 111.31 150.34 111.48 159.70 111.31 169.04 C 111.25 175.45 105.33 180.72 99.01 180.44 C 90.00 180.43 81.00 180.42 71.99 180.44 C 67.16 180.64 62.37 177.99 60.28 173.57 C 59.04 171.04 59.32 167.76 59.27 165.00 C 59.38 156.70 59.15 148.39 59.37 140.10 C 59.59 134.25 64.10 129.27 69.96 128.72 Z",fill:"#ffffff"}),React.createElement("path",{d:"M 137.96 128.68 C 146.96 128.36 156.00 128.45 165.00 128.61 C 167.68 128.64 170.26 129.00 172.61 130.36 C 176.44 132.46 178.51 136.68 178.41 140.99 C 178.39 150.33 178.47 159.67 178.37 169.01 C 178.48 174.84 173.95 180.48 167.95 180.68 C 159.31 180.89 150.65 180.67 142.00 180.78 C 139.64 180.74 137.05 180.91 134.76 180.27 C 129.71 178.66 126.48 173.17 126.62 168.01 C 126.61 161.01 126.64 154.00 126.62 147.00 C 126.71 143.40 126.11 139.00 127.75 135.73 C 129.57 131.70 133.51 128.85 137.96 128.68 Z",fill:"#ffffff"}),React.createElement("path",{d:"M 70.98 140.01 C 80.41 139.71 89.87 139.94 99.31 139.89 C 99.40 149.41 99.33 158.93 99.35 168.45 C 89.85 168.43 80.36 168.47 70.86 168.42 C 70.91 158.96 70.69 149.47 70.98 140.01 Z",fill:"#9fbb1a"}),React.createElement("path",{d:"M 138.45 140.41 C 147.84 140.29 157.27 140.44 166.67 140.35 C 166.70 149.82 166.71 159.29 166.67 168.77 C 157.24 168.71 147.81 168.71 138.38 168.77 C 138.39 159.32 138.24 149.85 138.45 140.41 Z",fill:"#9fbb1a"}));const g=p;var y=wp.i18n.__;wp.element.RawHTML,(0,wp.blocks.registerBlockType)("imagely/nextgen-gallery",{title:y("NextGEN Gallery"),description:y("A block for adding NextGEN Galleries."),icon:g.nextgen,category:"common",attributes:{content:{type:"string",source:"html"}},supports:{className:!1,customClassName:!1},edit:function(e){var t=e.attributes,n=e.setAttributes;return React.createElement(u,{content:t.content,onInsertGallery:function(e){n({content:e})}})},save:function(e){return e.attributes.content}})})(); //# sourceMappingURL=block.min.js.mapPK! :77Block/build/block.min.js.mapnu[{"version":3,"file":"block.min.js","mappings":"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","sources":["webpack://@envira/nextgen-gallery/./build/nextgen-gallery/static/IGW/Block/src/edit.jsx","webpack://@envira/nextgen-gallery/./build/nextgen-gallery/static/IGW/Block/src/icons.min.js","webpack://@envira/nextgen-gallery/./build/nextgen-gallery/static/IGW/Block/src/block.jsx"],"sourcesContent":["const body = document.body;\n\nclass NGGModal extends React.Component {\n\n constructor(props) {\n super(props)\n this.closeModal = this.closeModal.bind(this);\n\n this.background_layer = document.createElement('div');\n this.background_layer.setAttribute('id', 'add-ngg-gallery-modal-background');\n }\n\n componentDidMount() {\n body.style.overflow = 'hidden';\n body.appendChild(this.background_layer);\n\n const self = this;\n\n const iframe = document.getElementById('add-ngg-gallery-block-iframe');\n\n iframe.addEventListener('NGG_Iframe_Ready', function() {\n document.getElementById(\"add-ngg-gallery-modal-spinner\").classList.add(\"add-ngg-gallery-modal-spinner-hidden\");\n });\n\n iframe.addEventListener('NGG_Insert_Gallery', function(event) {\n self.props.onInsertGallery(event.detail.shortcode);\n\n })\n\n iframe.addEventListener('NGG_Close_Modal', function() {\n self.props.onCloseModal();\n })\n }\n\n componentWillUnmount() {\n body.style.overflow = 'auto';\n body.removeChild(this.background_layer);\n }\n\n closeModal() {\n this.props.onCloseModal();\n }\n\n render() {\n let attach_to_post_url = window.igw.url + '&origin=block';\n attach_to_post_url += '&nonce=' + window.add_ngg_gallery_block_i18n.nonce;\n\n if (this.props.content) {\n attach_to_post_url += '&shortcode=';\n let shortcode = this.props.content.replace(/\\\\\"/g, '\"');\n shortcode = shortcode.replace(/^\\[ngg_images/, '');\n shortcode = shortcode.replace(/^\\[ngg/, '');\n shortcode = shortcode.replace(/]$/, '');\n attach_to_post_url += Base64.encode(shortcode);\n }\n\n // use createPortal to insert the modal div as a child of to prevent the WP-Admin sidebar\n // menu from getting in the way and causing annoying z-index issues\n return ReactDOM.createPortal(\n