$params['maximum_entity_count'] = $instance['limit']; unset( $params['container_ids'] ); } $displayed_gallery = Renderer::get_instance()->params_to_displayed_gallery( $params ); if ( is_null( $displayed_gallery->id() ) ) { $displayed_gallery->id( \md5( \json_encode( $displayed_gallery->get_entity() ) ) ); } return $displayed_gallery; } /** * @param array $instance */ public function form( $instance ) { global $wpdb; // Default settings. $instance = \wp_parse_args( (array) $instance, [ 'galleryid' => '0', 'height' => '120', 'title' => 'Slideshow', 'width' => '160', 'limit' => '10', ] ); $view = new View( 'Widget/Form/Slideshow', [ 'self' => $this, 'instance' => $instance, 'title' => \esc_attr( $instance['title'] ), 'height' => \esc_attr( $instance['height'] ), 'width' => \esc_attr( $instance['width'] ), 'limit' => \esc_attr( $instance['limit'] ), 'tables' => $wpdb->get_results( "SELECT * FROM {$wpdb->nggallery} ORDER BY 'name' ASC" ), ], 'photocrati-widget#form_slideshow' ); return $view->render(); } /** * @param array $new_instance * @param array $old_instance * @return array */ public function update( $new_instance, $old_instance ) { $nh = $new_instance['height']; $nw = $new_instance['width']; if ( empty( $nh ) || 0 === (int) $nh ) { $new_instance['height'] = 120; } if ( empty( $nw ) || 0 === (int) $nw ) { $new_instance['width'] = 160; } if ( empty( $new_instance['limit'] ) ) { $new_instance['limit'] = 10; } $instance = $old_instance; $instance['title'] = esc_attr( $new_instance['title'] ); $instance['galleryid'] = (int) $new_instance['galleryid']; $instance['height'] = (int) $new_instance['height']; $instance['width'] = (int) $new_instance['width']; $instance['limit'] = (int) $new_instance['limit']; return $instance; } /** * @param array $args * @param array $instance */ public function widget( $args, $instance ) { // these are handled by extract() but I want to silence my IDE warnings that these vars don't exist. $before_widget = null; $before_title = null; $after_widget = null; $after_title = null; $widget_id = null; \extract( $args ); $title = \apply_filters( 'widget_title', empty( $instance['title'] ) ? \__( 'Slideshow', 'nggallery' ) : $instance['title'], $instance, $this->id_base ); $view = new View( 'Widget/Display/Slideshow', [ 'self' => $this, 'instance' => $instance, 'title' => $title, 'out' => $this->render_slideshow( $args, $instance ), 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id, ], 'photocrati-widget#display_slideshow' ); $view->render(); } /** * @param $args * @param $instance * @return string */ public function render_slideshow( $args, $instance ) { // Get widget_id from args (WordPress standard) or fallback to $this->id (WP_Widget property) // This ensures cache key matches what was stored during pre-caching in wp_enqueue_scripts $widget_id = ! empty( $args['widget_id'] ) ? $args['widget_id'] : ( ! empty( $this->id ) ? $this->id : 'slideshow-' . $this->number ); // This displayed gallery is created dynamically at runtime. if ( empty( self::$displayed_gallery_ids[ $widget_id ] ) ) { $displayed_gallery = $this->get_displayed_gallery( $args, $instance ); self::$displayed_gallery_ids[ $displayed_gallery->id() ] = $displayed_gallery; } else { // The displayed gallery was created during the action wp_enqueue_resources and was cached to avoid ID conflicts. $displayed_gallery = self::$displayed_gallery_ids[ $widget_id ]; } return \apply_filters( 'ngg_show_slideshow_widget_content', Renderer::get_instance()->display_images( $displayed_gallery ), $instance['galleryid'], $instance['width'], $instance['height'] ); } }