Support » Plugin: WordPress Gallery Plugin - NextGEN Gallery » Update 3.9.0 gives Warning: Invalid argument supplied for foreach()

  • Resolved imp_squared

    (@imp_squared)


    after updating to 3.9.0 my website shows the following errors on the homepage.

    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 87
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317
    
    Warning: Invalid argument supplied for foreach() in /homepages/29/d172220343/htdocs/impsquaredcom/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/package.module.widget.php on line 317

    The page I need help with: [log in to see the link]

Viewing 14 replies - 1 through 14 (of 14 total)
  • Replace the content of the file package.module.widget.php with this content than it should Work our u just create a new package.module.widget.php with Notepad and paste this content, the old _package.module.widget.php just rename it

    <?php
    /**
     * Class C_Widget
     * @mixin Mixin_Widget
     * @implements I_Widget
     */
    class C_Widget extends C_MVC_Controller
    {
        public static $_instances = array();
        function define($context = FALSE)
        {
            parent::define($context);
            $this->add_mixin('Mixin_Widget');
            $this->implement('I_Widget');
        }
        /**
         * @param bool|string $context
         * @return C_Widget
         */
        public static function get_instance($context = FALSE)
        {
            if (!isset(self::$_instances[$context])) {
                self::$_instances[$context] = new C_Widget($context);
            }
            return self::$_instances[$context];
        }
    }
    class Mixin_Widget extends Mixin
    {
        /**
         * Function for templates without widget support
         *
         * @return C_Widget_Gallery
         */
        function echo_widget_random($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail')
        {
            $options = array('title' => FALSE, 'items' => $number, 'show' => $show, 'type' => 'random', 'width' => $width, 'height' => $height, 'exclude' => $exclude, 'list' => $list, 'webslice' => FALSE);
            $widget = new C_Widget_Gallery();
            $widget->widget($args = array('widget_id' => 'sidebar_1'), $options);
            return $widget;
        }
        /**
         * Function for templates without widget support
         *
         * @return C_Widget_Gallery
         */
        function echo_widget_recent($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail')
        {
            $options = array('title' => FALSE, 'items' => $number, 'show' => $show, 'type' => 'recent', 'width' => $width, 'height' => $height, 'exclude' => $exclude, 'list' => $list, 'webslice' => FALSE);
            $widget = new C_Widget_Gallery();
            $widget->widget($args = array('widget_id' => 'sidebar_1'), $options);
            return $widget;
        }
        /**
         * Function for templates without widget support
         *
         * @param integer $galleryID
         * @param string $width
         * @param string $height
         * @return C_Widget_Slideshow
         */
        function echo_widget_slideshow($galleryID, $width = '', $height = '')
        {
            $widget = new C_Widget_Slideshow();
            $widget->render_slideshow($galleryID, $width, $height);
            return $widget;
        }
    }
    class C_Widget_Gallery extends WP_Widget
    {
        function __construct()
        {
            $widget_ops = array('classname' => 'ngg_images', 'description' => __('Add recent or random images from the galleries', 'nggallery'));
            parent::__construct('ngg-images', __('NextGEN Widget', 'nggallery'), $widget_ops);
        }
        function form($instance)
        {
            // used for rendering utilities
            $parent = C_Widget::get_instance();
            // defaults
            $instance = wp_parse_args((array) $instance, array('exclude' => 'all', 'height' => '75', 'items' => '4', 'list' => '', 'show' => 'thumbnail', 'title' => 'Gallery', 'type' => 'recent', 'webslice' => TRUE, 'width' => '100'));
            return $parent->render_partial('photocrati-widget#form_gallery', array('self' => $this, 'instance' => $instance, 'title' => esc_attr($instance['title']), 'items' => intval($instance['items']), 'height' => esc_attr($instance['height']), 'width' => esc_attr($instance['width'])));
        }
        function update($new_instance, $old_instance)
        {
            $instance = $old_instance;
            // do not allow 0 or less
            if ((int) $new_instance['items'] <= 0) {
                $new_instance['items'] = 4;
            }
            // for clarity: empty the list if we're showing every gallery anyway
            if ($new_instance['exclude'] == 'all') {
                $new_instance['list'] = '';
            }
            // remove gallery ids that do not exist
            if (in_array($new_instance['exclude'], array('denied', 'allow'))) {
                // do search
                $mapper = C_Gallery_Mapper::get_instance();
                $ids = explode(',', $new_instance['list']);
                foreach ($ids as $ndx => $id) {
                    if (!$mapper->find($id)) {
                        unset($ids[$ndx]);
                    }
                }
                $new_instance['list'] = implode(',', $ids);
            }
            // reset to show all galleries IF there are no valid galleries in the list
            if ($new_instance['exclude'] !== 'all' && empty($new_instance['list'])) {
                $new_instance['exclude'] = 'all';
            }
            $instance['title'] = strip_tags($new_instance['title']);
            $instance['items'] = (int) $new_instance['items'];
            $instance['type'] = $new_instance['type'];
            $instance['show'] = $new_instance['show'];
            $instance['width'] = (int) $new_instance['width'];
            $instance['height'] = (int) $new_instance['height'];
            $instance['exclude'] = $new_instance['exclude'];
            $instance['list'] = $new_instance['list'];
            $instance['webslice'] = (bool) $new_instance['webslice'];
            return $instance;
        }
        function widget($args, $instance)
        {
            $settings = C_NextGen_Settings::get_instance();
            $router = C_Router::get_instance();
            wp_enqueue_style('nextgen_widgets_style', $router->get_static_url('photocrati-widget#widgets.css'), array(), NGG_SCRIPT_VERSION);
            wp_enqueue_style('nextgen_basic_thumbnails_style', $router->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails.css'), array(), NGG_SCRIPT_VERSION);
            // 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']) ? '&nbsp;' : $instance['title'], $instance, $this->id_base);
            $renderer = C_Displayed_Gallery_Renderer::get_instance();
            $factory = C_Component_Factory::get_instance();
            $view = $factory->create('mvc_view', '');
            // IE8 webslice support if needed
            if (!empty($instance['webslice'])) {
                $before_widget .= '<div class="hslice" id="ngg-webslice">';
                $before_title = str_replace('class="', 'class="entry-title ', $before_title);
                $after_widget = '</div>' . $after_widget;
            }
            $source = $instance['type'] == 'random' ? 'random_images' : 'recent';
            $template = !empty($instance['template']) ? $instance['template'] : $view->get_template_abspath('photocrati-widget#display_gallery');
            $params = array('slug' => 'widget-' . $args['widget_id'], 'source' => $source, 'display_type' => NGG_BASIC_THUMBNAILS, 'images_per_page' => $instance['items'], 'maximum_entity_count' => $instance['items'], 'template' => $template, 'image_type' => $instance['show'] == 'original' ? 'full' : 'thumb', 'show_all_in_lightbox' => FALSE, 'show_slideshow_link' => FALSE, 'show_thumbnail_link' => FALSE, 'use_imagebrowser_effect' => FALSE, 'disable_pagination' => TRUE, 'image_width' => $instance['width'], 'image_height' => $instance['height'], 'ngg_triggers_display' => 'never', 'widget_setting_title' => $title, 'widget_setting_before_widget' => $before_widget, 'widget_setting_before_title' => $before_title, 'widget_setting_after_widget' => $after_widget, 'widget_setting_after_title' => $after_title, 'widget_setting_width' => $instance['width'], 'widget_setting_height' => $instance['height'], 'widget_setting_show_setting' => $instance['show'], 'widget_setting_widget_id' => $widget_id);
            switch ($instance['exclude']) {
                case 'all':
                    break;
                case 'denied':
                    $mapper = C_Gallery_Mapper::get_instance();
                    $gallery_ids = array();
                    $list = explode(',', $instance['list']);
                    foreach ($mapper->find_all() as $gallery) {
                        if (!in_array($gallery->{$gallery->id_field}, $list)) {
                            $gallery_ids[] = $gallery->{$gallery->id_field};
                        }
                    }
                    $params['container_ids'] = implode(',', $gallery_ids);
                    break;
                case 'allow':
                    $params['container_ids'] = $instance['list'];
                    break;
            }
            // "Random" galleries are a bit resource intensive when querying the database and widgets are generally
            // going to be on every page a site may serve. Because the displayed gallery renderer does *NOT* cache the
            // HTML of random galleries the following is a bit of a workaround: for random widgets we create a displayed
            // gallery object and then cache the results of get_entities() so that, for at least as long as
            // NGG_RENDERING_CACHE_TTL seconds, widgets will be temporarily cached
            if (in_array($params['source'], array('random', 'random_images')) && (float) $settings->random_widget_cache_ttl > 0) {
                $displayed_gallery = $renderer->params_to_displayed_gallery($params);
                if (is_null($displayed_gallery->id())) {
                    $displayed_gallery->id(md5(json_encode($displayed_gallery->get_entity())));
                }
                $cache_group = 'random_widget_gallery_ids';
                $cache_params = array($displayed_gallery->get_entity());
                $transientM = C_Photocrati_Transient_Manager::get_instance();
                $key = $transientM->generate_key($cache_group, $cache_params);
                $ids = $transientM->get($key, FALSE);
                if (!empty($ids)) {
                    $params['image_ids'] = $ids;
                } else {
                    $ids = array();
                    foreach ($displayed_gallery->get_entities($instance['items'], FALSE, TRUE) as $item) {
                        $ids[] = $item->{$item->id_field};
                    }
                    $params['image_ids'] = implode(',', $ids);
                    $transientM->set($key, $params['image_ids'], (float) $settings->random_widget_cache_ttl * 60);
                }
                $params['source'] = 'images';
                unset($params['container_ids']);
            }
            print $renderer->display_images($params);
        }
    }
    class C_Widget_MediaRSS extends WP_Widget
    {
        var $options;
        function __construct()
        {
            $widget_ops = array('classname' => 'ngg_mrssw', 'description' => __('Widget that displays Media RSS links for NextGEN Gallery.', 'nggallery'));
            parent::__construct('ngg-mrssw', __('NextGEN Media RSS', 'nggallery'), $widget_ops);
        }
        function form($instance)
        {
            // used for rendering utilities
            $parent = C_Widget::get_instance();
            // defaults
            $instance = wp_parse_args((array) $instance, array('mrss_text' => __('Media RSS', 'nggallery'), 'mrss_title' => __('Link to the main image feed', 'nggallery'), 'show_global_mrss' => TRUE, 'show_icon' => TRUE, 'title' => 'Media RSS'));
            return $parent->render_partial('photocrati-widget#form_mediarss', array('self' => $this, 'instance' => $instance, 'title' => esc_attr($instance['title']), 'mrss_text' => esc_attr($instance['mrss_text']), 'mrss_title' => esc_attr($instance['mrss_title'])));
        }
        function update($new_instance, $old_instance)
        {
            $instance = $old_instance;
            $instance['title'] = strip_tags($new_instance['title']);
            $instance['show_global_mrss'] = $new_instance['show_global_mrss'];
            $instance['show_icon'] = $new_instance['show_icon'];
            $instance['mrss_text'] = $new_instance['mrss_text'];
            $instance['mrss_title'] = $new_instance['mrss_title'];
            return $instance;
        }
        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);
            $settings = C_NextGen_Settings::get_instance();
            $parent = C_Component_Registry::get_instance()->get_utility('I_Widget');
            $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title'], $instance, $this->id_base);
            $parent->render_partial('photocrati-widget#display_mediarss', array('self' => $this, 'instance' => $instance, 'title' => $title, 'settings' => $settings, 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id));
        }
        function get_mrss_link($mrss_url, $show_icon = TRUE, $title, $text)
        {
            $out = '';
            if ($show_icon) {
                $icon_url = NGGALLERY_URLPATH . 'images/mrss-icon.gif';
                $out .= "<a href='{$mrss_url}' title='{$title}' class='ngg-media-rss-link'>";
                $out .= "<img src='{$icon_url}' alt='MediaRSS Icon' title='" . $title . "' class='ngg-media-rss-icon' />";
                $out .= "</a> ";
            }
            if ($text != '') {
                $out .= "<a href='{$mrss_url}' title='{$title}' class='ngg-media-rss-link'>";
                $out .= $text;
                $out .= "</a>";
            }
            return $out;
        }
    }
    class C_Widget_Slideshow extends WP_Widget
    {
        function __construct()
        {
            $widget_ops = array('classname' => 'widget_slideshow', 'description' => __('Show a NextGEN Gallery Slideshow', 'nggallery'));
            parent::__construct('slideshow', __('NextGEN Slideshow', 'nggallery'), $widget_ops);
        }
        function form($instance)
        {
            global $wpdb;
            // used for rendering utilities
            $parent = C_Widget::get_instance();
            // defaults
            $instance = wp_parse_args((array) $instance, array('galleryid' => '0', 'height' => '120', 'title' => 'Slideshow', 'width' => '160', 'limit' => '10'));
            return $parent->render_partial('photocrati-widget#form_slideshow', array('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")));
        }
        function update($new_instance, $old_instance)
        {
            $nh = $new_instance['height'];
            $nw = $new_instance['width'];
            if (empty($nh) || (int) $nh === 0) {
                $new_instance['height'] = 120;
            }
            if (empty($nw) || (int) $nw === 0) {
                $new_instance['width'] = 160;
            }
            if (empty($new_instance['limit'])) {
                $new_instance['limit'] = 10;
            }
            $instance = $old_instance;
            $instance['title'] = strip_tags($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;
        }
        function widget($args, $instance)
        {
            $router = C_Router::get_instance();
            wp_enqueue_style('nextgen_widgets_style', $router->get_static_url('photocrati-widget#widgets.css'), array(), NGG_SCRIPT_VERSION);
            wp_enqueue_style('nextgen_basic_slideshow_style', $router->get_static_url('photocrati-nextgen_basic_gallery#slideshow/ngg_basic_slideshow.css'), array(), NGG_SCRIPT_VERSION);
            // 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);
            $parent = C_Component_Registry::get_instance()->get_utility('I_Widget');
            $title = apply_filters('widget_title', empty($instance['title']) ? __('Slideshow', 'nggallery') : $instance['title'], $instance, $this->id_base);
            if (empty($instance['limit'])) {
                $instance['limit'] = 10;
            }
            $out = $this->render_slideshow($instance['galleryid'], $instance['width'], $instance['height'], $instance['limit'], $args);
            $parent->render_partial('photocrati-widget#display_slideshow', array('self' => $this, 'instance' => $instance, 'title' => $title, 'out' => $out, 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id));
        }
        function render_slideshow($galleryID, $irWidth = '', $irHeight = '', $limit = 10, $args)
        {
            $registry = C_Component_Registry::get_instance();
            $renderer = C_Displayed_Gallery_Renderer::get_instance();
            $params = array(
                'container_ids' => $galleryID,
                'display_type' => 'photocrati-nextgen_basic_slideshow',
                'gallery_width' => $irWidth,
                'gallery_height' => $irHeight,
                'source' => 'galleries',
                'slug' => 'widget-' . $args['widget_id'],
                'entity_types' => array('image'),
                'show_thumbnail_link' => FALSE,
                'show_slideshow_link' => FALSE,
                'use_imagebrowser_effect' => FALSE,
                // just to be safe
                'ngg_triggers_display' => 'never',
            );
            if (0 === $galleryID) {
                $params['source'] = 'random_images';
                $params['maximum_entity_count'] = $limit;
                unset($params['container_ids']);
            }
            $retval = $renderer->display_images($params, NULL);
            $retval = apply_filters('ngg_show_slideshow_widget_content', $retval, $galleryID, $irWidth, $irHeight);
            return $retval;
        }
    }
    Thread Starter imp_squared

    (@imp_squared)

    Thanks @bulet1n

    I did exactly as you said and it worked.

    marked as resolved.

    Thread Starter imp_squared

    (@imp_squared)

    It looks like version 3.9.1 has the same issue.
    I had to apply the fix above as well to v3.9.1

    fyi for anyone having this issue the .php file that needs to be replace is located in the following folder “nextgen-gallery/products/photocrati_nextgen/modules/widget”

    Buongiorno,

    ho rilevato questo problema anche io: Warning: Invalid argument supplied for foreach() in /web/htdocs wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php on line 148

    come devo fare per risolverlo?

    Thread Starter imp_squared

    (@imp_squared)

    @umbraforni follow @bulet1n post above.

    ok proverò! per il momento ho reinstallato la versione precedente.

    • This reply was modified 4 months, 2 weeks ago by umbraforni.
    • This reply was modified 4 months, 2 weeks ago by umbraforni.

    Can you confirm where the “package.module.widget.php” is located?

    Thread Starter imp_squared

    (@imp_squared)

    @hashah3 I posted the location of the php file above! Please read the entire thread carefully before posting a dumb question.

    I am sorry for the dumb question, I am new to web development and using WordPress.
    Could you confirm the exact steps I need to follow from, the WordPress web site admin page, to edit the file you refer to?

    Thanks

    Running Version 3.11 and get following error:

    Warning: Invalid argument supplied for foreach() in /homepages/1/d144866785/htdocs/clickandbuilds/ScottishAquaticsArchive/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php on line 148

    Tried patch above for package.module.widget.php and still get same error message.
    Working to launch website shortly, any help appreciated.

    Thread Starter imp_squared

    (@imp_squared)

    @archiveadmin I’m running 3.11 as well, no issues with my setup.

    Thread Starter imp_squared

    (@imp_squared)

    @hashah3 sorry I didn’t know you were new
    do you still need help?

    • This reply was modified 3 months, 3 weeks ago by imp_squared.

    I am OK now, I cleared all Nimble Builder section in my pages, deactivated Nimble Builder plugin, and I no loger get the error.
    Thanks for coming back to me.

    I still have problem – running Nimble Builder, but assumed latest version of Gallery was compatible based on Changelog, so far through developing website don’t want to switch plugin off – All plugins at latest update as is WordPress, any suggestions from developers ?

Viewing 14 replies - 1 through 14 (of 14 total)
  • You must be logged in to reply to this topic.