/**
  * Displays the 'singlepic' display type
  *
  * @param stdClass|C_Displayed_Gallery|C_DataMapper_Model $displayed_gallery
  */
 public function index_action($displayed_gallery, $return = FALSE)
 {
     $storage = C_Gallery_Storage::get_instance();
     $dynthumbs = C_Dynamic_Thumbnails_Manager::get_instance();
     $display_settings = $displayed_gallery->display_settings;
     // use this over get_included_entities() so we can display images marked 'excluded'
     $displayed_gallery->skip_excluding_globally_excluded_images = TRUE;
     $image = array_shift($displayed_gallery->get_entities(1, FALSE, FALSE, 'included'));
     if (!$image) {
         return $this->object->render_partial('photocrati-nextgen_gallery_display#no_images_found', array(), $return);
     }
     switch ($display_settings['float']) {
         case 'left':
             $display_settings['float'] = 'ngg-left';
             break;
         case 'right':
             $display_settings['float'] = 'ngg-right';
             break;
         case 'center':
             $display_settings['float'] = 'ngg-center';
             break;
         default:
             $display_settings['float'] = '';
             break;
     }
     $params = array();
     if (!empty($display_settings['link'])) {
         $target = $display_settings['link_target'];
         $effect_code = '';
     } else {
         $display_settings['link'] = $storage->get_image_url($image, 'full', TRUE);
         $target = '_self';
         $effect_code = $this->object->get_effect_code($displayed_gallery);
     }
     $params['target'] = $target;
     // mode is a legacy parameter
     if (!is_array($display_settings['mode'])) {
         $display_settings['mode'] = explode(',', $display_settings['mode']);
     }
     if (in_array('web20', $display_settings['mode'])) {
         $display_settings['display_reflection'] = TRUE;
     }
     if (in_array('watermark', $display_settings['mode'])) {
         $display_settings['display_watermark'] = TRUE;
     }
     if (isset($display_settings['w'])) {
         $display_settings['width'] = $display_settings['w'];
     } elseif (isset($display_settings['h'])) {
         unset($display_settings['width']);
     }
     if (isset($display_settings['h'])) {
         $display_settings['height'] = $display_settings['h'];
     } elseif (isset($display_settings['w'])) {
         unset($display_settings['height']);
     }
     // legacy assumed no width/height meant full size unlike generate_thumbnail: force a full resolution
     if (!isset($display_settings['width']) && !isset($display_settings['height'])) {
         $display_settings['width'] = $image->meta_data['width'];
     }
     if (isset($display_settings['width'])) {
         $params['width'] = $display_settings['width'];
     }
     if (isset($display_settings['height'])) {
         $params['height'] = $display_settings['height'];
     }
     $params['quality'] = $display_settings['quality'];
     $params['crop'] = $display_settings['crop'];
     $params['watermark'] = $display_settings['display_watermark'];
     $params['reflection'] = $display_settings['display_reflection'];
     // Fall back to full in case dynamic images aren't available
     $size = 'full';
     if ($dynthumbs != null) {
         $size = $dynthumbs->get_size_name($params);
     }
     $thumbnail_url = $storage->get_image_url($image, $size);
     if (!empty($display_settings['template']) && $display_settings['template'] != 'default') {
         $this->object->add_mixin('A_NextGen_Basic_Template_Form');
         $this->object->add_mixin('Mixin_NextGen_Basic_Templates');
         $params = $this->object->prepare_legacy_parameters(array($image), $displayed_gallery, array('single_image' => TRUE));
         // the wrapper is a lazy-loader that calculates variables when requested. We here override those to always
         // return the same precalculated settings provided
         $params['image']->container[0]->_cache_overrides['caption'] = $displayed_gallery->inner_content;
         $params['image']->container[0]->_cache_overrides['classname'] = 'ngg-singlepic ' . $display_settings['float'];
         $params['image']->container[0]->_cache_overrides['imageURL'] = $display_settings['link'];
         $params['image']->container[0]->_cache_overrides['thumbnailURL'] = $thumbnail_url;
         $params['target'] = $target;
         // if a link is present we temporarily must filter out the effect code
         if (empty($effect_code)) {
             add_filter('ngg_get_thumbcode', array(&$this, 'strip_thumbcode'), 10);
         }
         $retval = $this->object->legacy_render($display_settings['template'], $params, $return, 'singlepic');
         if (empty($effect_code)) {
             remove_filter('ngg_get_thumbcode', array(&$this, 'strip_thumbcode'), 10);
         }
         return $retval;
     } else {
         $params = $display_settings;
         $params['storage'] =& $storage;
         $params['image'] =& $image;
         $params['effect_code'] = $effect_code;
         $params['inner_content'] = $displayed_gallery->inner_content;
         $params['settings'] = $display_settings;
         $params['thumbnail_url'] = $thumbnail_url;
         $params['target'] = $target;
         $params = $this->object->prepare_display_parameters($displayed_gallery, $params);
         return $this->object->render_partial('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic', $params, $return);
     }
 }