Beispiel #1
0
 public static function getList(&$params)
 {
     global $modfc_jprof, $mod_fc_run_times;
     $forced_itemid = $params->get('forced_itemid');
     $db = JFactory::getDBO();
     $user = JFactory::getUser();
     // Get IDs of user's access view levels
     if (!FLEXI_J16GE) {
         $aid = (int) $user->get('aid');
     } else {
         $aid_arr = JAccess::getAuthorisedViewLevels($user->id);
     }
     // get the component parameters
     $flexiparams = JComponentHelper::getParams('com_flexicontent');
     // get module ordering parameters
     $ordering = $params->get('ordering', array());
     $count = (int) $params->get('count', 5);
     $featured = (int) $params->get('count_feat', 1);
     // Default ordering is 'added' if none ordering is set. Also make sure $ordering is an array (of ordering groups)
     if (empty($ordering)) {
         $ordering = array('added');
     }
     if (!is_array($ordering)) {
         $ordering = explode(',', $ordering);
     }
     // get other module parameters
     $method_curlang = (int) $params->get('method_curlang', 0);
     // standard
     $display_title = $params->get('display_title');
     $link_title = $params->get('link_title');
     $cuttitle = $params->get('cuttitle');
     $display_date = $params->get('display_date');
     $display_text = $params->get('display_text');
     $display_hits = $params->get('display_hits');
     $display_voting = $params->get('display_voting');
     $display_comments = $params->get('display_comments');
     $mod_readmore = $params->get('mod_readmore');
     $mod_cut_text = $params->get('mod_cut_text');
     $mod_do_stripcat = $params->get('mod_do_stripcat', 1);
     $mod_use_image = $params->get('mod_use_image');
     $mod_image = $params->get('mod_image');
     $mod_link_image = $params->get('mod_link_image');
     $mod_default_img_show = $params->get('mod_default_img_show', 1);
     $mod_default_img_path = $params->get('mod_default_img_path', 'components/com_flexicontent/assets/images/image.png');
     $mod_width = (int) $params->get('mod_width', 80);
     $mod_height = (int) $params->get('mod_height', 80);
     $mod_method = (int) $params->get('mod_method', 1);
     // featured
     $display_title_feat = $params->get('display_title_feat');
     $link_title_feat = $params->get('link_title_feat');
     $cuttitle_feat = $params->get('cuttitle_feat');
     $display_date_feat = $params->get('display_date_feat');
     $display_text_feat = $params->get('display_text');
     $display_hits_feat = $params->get('display_hits_feat');
     $display_voting_feat = $params->get('display_voting_feat');
     $display_comments_feat = $params->get('display_comments_feat');
     $mod_readmore_feat = $params->get('mod_readmore_feat');
     $mod_cut_text_feat = $params->get('mod_cut_text_feat');
     $mod_do_stripcat_feat = $params->get('mod_do_stripcat_feat', 1);
     $mod_use_image_feat = $params->get('mod_use_image_feat');
     $mod_link_image_feat = $params->get('mod_link_image_feat');
     $mod_width_feat = (int) $params->get('mod_width_feat', 140);
     $mod_height_feat = (int) $params->get('mod_height_feat', 140);
     $mod_method_feat = (int) $params->get('mod_method_feat', 1);
     // Common for image of standard/feature image
     $mod_image_custom_display = $params->get('mod_image_custom_display');
     $mod_image_custom_url = $params->get('mod_image_custom_url');
     $mod_image_fallback_img = $params->get('mod_image_fallback_img');
     // Retrieve default image for the image field and also create field parameters so that they can be used
     if ($mod_image) {
         $query = 'SELECT attribs, name FROM #__flexicontent_fields WHERE id = ' . (int) $mod_image;
         $db->setQuery($query);
         $mod_image_dbdata = $db->loadObject();
         $mod_image_name = $mod_image_dbdata->name;
         //$img_fieldparams = new JRegistry($mod_image_dbdata->attribs);
     }
     if ($mod_default_img_show) {
         $src = $mod_default_img_path;
         // Default image featured
         $h = '&h=' . $mod_height;
         $w = '&w=' . $mod_width;
         $aoe = '&aoe=1';
         $q = '&q=95';
         $zc = $mod_method ? '&zc=' . $mod_method : '';
         $ext = strtolower(pathinfo($src, PATHINFO_EXTENSION));
         $f = in_array($ext, array('png', 'ico', 'gif')) ? '&f=' . $ext : '';
         $conf = $w . $h . $aoe . $q . $zc . $f;
         $base_url = !preg_match("#^http|^https|^ftp|^/#i", $src) ? JURI::base(true) . '/' : '';
         $thumb_default = JURI::base() . 'components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=' . $base_url . $src . $conf;
         // Default image standard
         $h = '&h=' . $mod_height_feat;
         $w = '&w=' . $mod_width_feat;
         $aoe = '&aoe=1';
         $q = '&q=95';
         $zc = $mod_method_feat ? '&zc=' . $mod_method_feat : '';
         $ext = strtolower(pathinfo($src, PATHINFO_EXTENSION));
         $f = in_array($ext, array('png', 'ico', 'gif')) ? '&f=' . $ext : '';
         $conf = $w . $h . $aoe . $q . $zc . $f;
         $base_url = !preg_match("#^http|^https|^ftp|^/#i", $src) ? JURI::base(true) . '/' : '';
         $thumb_default_feat = JURI::base() . 'components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=' . $base_url . $src . $conf;
     }
     // Retrieve custom displayed field data (including their parameters and access):  hits/voting/etc
     if ($display_hits || $display_hits_feat || $display_voting || $display_voting_feat) {
         $query = 'SELECT * FROM #__flexicontent_fields';
         $disp_field_where = array();
         if ($display_hits || $display_hits_feat) {
             $disp_field_where[] = 'field_type="hits"';
         }
         if ($display_voting || $display_voting_feat) {
             $disp_field_where[] = 'field_type="voting"';
         }
         $query .= ' WHERE ' . implode($disp_field_where, ' OR ');
         $db->setQuery($query);
         $disp_fields_data = $db->loadObjectList('field_type');
         if ($display_hits || $display_hits_feat) {
             $hitsfield = $disp_fields_data['hits'];
             $hitsfield->parameters = new JRegistry($hitsfield->attribs);
             $has_access_hits = in_array($hitsfield->access, $aid_arr);
         }
         if ($display_voting || $display_voting_feat) {
             $votingfield = $disp_fields_data['voting'];
             $votingfield->parameters = new JRegistry($votingfield->attribs);
             $has_access_voting = in_array($votingfield->access, $aid_arr);
         }
     }
     // get module fields parameters
     $use_fields = $params->get('use_fields', 1);
     $display_label = $params->get('display_label');
     $fields = array_map('trim', explode(',', $params->get('fields')));
     if ($fields[0] == '') {
         $fields = array();
     }
     // get fields that when empty cause an item to be skipped
     $skip_items = (int) $params->get('skip_items', 0);
     $skiponempty_fields = array_map('trim', explode(',', $params->get('skiponempty_fields')));
     if ($skiponempty_fields[0] == '') {
         $skiponempty_fields = array();
     }
     if ($params->get('maxskipcount', 50) > 100) {
         $params->set('maxskipcount', 100);
     }
     $striptags_onempty_fields = $params->get('striptags_onempty_fields');
     $onempty_fields_combination = $params->get('onempty_fields_combination');
     // featured
     $use_fields_feat = $params->get('use_fields_feat', 1);
     $display_label_feat = $params->get('display_label_feat');
     $fields_feat = array_map('trim', explode(',', $params->get('fields_feat')));
     if ($fields_feat[0] == '') {
         $fields_feat = array();
     }
     //$mod_fc_run_times['query_items']= $modfc_jprof->getmicrotime();
     $cat_items_arr = array();
     if (!is_array($ordering)) {
         $ordering = explode(',', $ordering);
     }
     foreach ($ordering as $ord) {
         $items_arr = modFlexicontentHelper::getItems($params, $ord);
         if (empty($items_arr)) {
             continue;
         }
         foreach ($items_arr as $catid => $items) {
             if (!isset($cat_items_arr[$catid])) {
                 $cat_items_arr[$catid] = array();
             }
             for ($i = 0; $i < count($items); $i++) {
                 $items[$i]->featured = $i < $featured ? 1 : 0;
                 $items[$i]->fetching = $ord;
                 $cat_items_arr[$catid][] = $items[$i];
             }
         }
     }
     //$mod_fc_run_times['query_items'] = $modfc_jprof->getmicrotime() - $mod_fc_run_times['query_items'];
     // Impementation of Empty Field Filter.
     // The cost of the following code is minimal.
     // The big time cost goes into rendering the fields ...
     // We need to create the display of the fields before examining if they are empty.
     // The hardcoded limit of max items skipped is 100.
     if ($skip_items && count($skiponempty_fields)) {
         $mod_fc_run_times['empty_fields_filter'] = $modfc_jprof->getmicrotime();
         // 0. Add ONLY skipfields to the list of fields to be rendered
         $fields_list = implode(',', $skiponempty_fields);
         //$skip_params = new JRegistry();
         //$skip_params->set('fields',$fields_list);
         foreach ($cat_items_arr as $catid => $cat_items) {
             // 1. The filtered rows
             $filtered_rows = array();
             $order_count = array();
             // 2. Get field values (we pass null parameters to only retrieve field values and not render (YET) the 'skip-onempty' fields
             FlexicontentFields::getFields($cat_items, 'module', $skip_params = null);
             // 3. Skip Items with empty fields (if this filter is enabled)
             foreach ($cat_items as $i => $item) {
                 //echo "$i . {$item->title}<br/>";
                 // Check to initialize counter for this ordering
                 if (!isset($order_count[$item->fetching])) {
                     $order_count[$item->fetching] = 0;
                 }
                 // Check if enough encountered for this ordering
                 if ($order_count[$item->fetching] >= $count) {
                     continue;
                 }
                 // Initialize skip property ZERO for 'any' and ONE for 'all'
                 $skip_curritem = $onempty_fields_combination == 'any' ? 0 : 1;
                 // Now check for empty field display or empty field values, if so item must be skipped
                 foreach ($skiponempty_fields as $skipfield_name) {
                     if ($skip_items == 2) {
                         // We will check field's display
                         FlexicontentFields::getFieldDisplay($item, $skipfield_name, null, 'display', 'module');
                         $skipfield_data = @$item->fields[$skipfield_name]->display;
                     } else {
                         // We will check field's value
                         $skipfield_iscore = $item->fields[$skipfield_name]->iscore;
                         $skipfield_id = $item->fields[$skipfield_name]->id;
                         $skipfield_data = $skipfield_iscore ? $item->{$skipfield_name} : @$item->fieldvalues[$skipfield_id];
                     }
                     // Strip HTML Tags
                     if ($striptags_onempty_fields) {
                         $skipfield_data = strip_tags($skipfield_data);
                     }
                     // Decide if field is empty
                     $skipfield_isempty = is_array($skipfield_data) ? !count($skipfield_data) : !strlen(trim($skipfield_data));
                     if ($skipfield_isempty) {
                         if ($onempty_fields_combination == 'any') {
                             $skip_curritem = 1;
                             break;
                         }
                     } else {
                         if ($onempty_fields_combination == 'all') {
                             $skip_curritem = 0;
                             break;
                         }
                     }
                 }
                 if ($skip_curritem) {
                     //echo "Skip: $i . {$item->title}<br/>";
                     if (!isset($order_skipcount[$item->fetching])) {
                         $order_skipcount[$item->fetching] = 0;
                     }
                     $order_skipcount[$item->fetching]++;
                     continue;
                 }
                 // 4. Increment counter for item's ordering and Add item to list of displayed items
                 $order_count[$item->fetching]++;
                 $filtered_rows[] = $item;
             }
             $filtered_rows_arr[$catid] = $filtered_rows;
         }
         $mod_fc_run_times['empty_fields_filter'] = $modfc_jprof->getmicrotime() - $mod_fc_run_times['empty_fields_filter'];
     } else {
         $filtered_rows_arr =& $cat_items_arr;
     }
     $mod_fc_run_times['item_list_creation'] = $modfc_jprof->getmicrotime();
     // *** OPTIMIZATION: we only render the fields after skipping unwanted items
     if ($use_fields && count($fields) || $use_fields_feat && count($fields_feat)) {
         $all_fields = array();
         if ($use_fields && count($fields)) {
             $all_fields = array_merge($all_fields, $fields);
         }
         if ($use_fields_feat && count($fields_feat)) {
             $all_fields = array_merge($all_fields, $fields_feat);
         }
         $all_fields = array_unique($all_fields);
         $fields_list = implode(',', $all_fields);
         $params->set('fields', $fields_list);
     }
     // *** OPTIMIZATION: we should create some variables outside the loop ... TODO MORE
     if (($display_hits_feat || $display_hits) && $has_access_hits) {
         $hits_icon = FLEXI_J16GE ? JHTML::image('components/com_flexicontent/assets/images/' . 'user.png', JText::_('FLEXI_HITS_L')) : JHTML::_('image.site', 'user.png', 'components/com_flexicontent/assets/images/', NULL, NULL, JText::_('FLEXI_HITS_L'));
     }
     if ($display_comments_feat || $display_comments) {
         $comments_icon = FLEXI_J16GE ? JHTML::image('components/com_flexicontent/assets/images/' . 'comments.png', JText::_('FLEXI_COMMENTS_L')) : JHTML::_('image.site', 'comments.png', 'components/com_flexicontent/assets/images/', NULL, NULL, JText::_('FLEXI_COMMENTS_L'));
     }
     $option = JRequest::getVar('option');
     $view = JRequest::getVar('view');
     $isflexi_itemview = $option == 'com_flexicontent' && $view == FLEXI_ITEMVIEW;
     $active_item_id = JRequest::getInt('id', 0);
     $lists_arr = array();
     foreach ($filtered_rows_arr as $catid => $filtered_rows) {
         if (empty($filtered_rows)) {
             $rows = array();
         } else {
             if ($use_fields && count($fields) || $use_fields_feat && count($fields_feat)) {
                 $rows = FlexicontentFields::getFields($filtered_rows, 'module', $params);
             } else {
                 $rows =& $filtered_rows;
             }
         }
         // For Debuging
         /*foreach ($order_skipcount as $skipordering => $skipcount) {
         		  echo "SKIPS $skipordering ==> $skipcount<br>\n";
         		}*/
         $lists = array();
         foreach ($ordering as $ord) {
             $lists[$ord] = array();
         }
         $ord = "__start__";
         foreach ($rows as $row) {
             if ($ord != $row->fetching) {
                 // Detect change of next ordering group
                 $ord = $row->fetching;
                 $i = 0;
             }
             if ($row->featured) {
                 // image processing
                 $thumb = '';
                 $thumb_rendered = '';
                 if ($mod_use_image_feat) {
                     if ($mod_image_custom_display) {
                         @(list($fieldname, $varname) = preg_split('/##/', $mod_image_custom_display));
                         $fieldname = trim($fieldname);
                         $varname = trim($varname);
                         $varname = $varname ? $varname : 'display';
                         $thumb_rendered = FlexicontentFields::getFieldDisplay($row, $fieldname, null, $varname, 'module');
                         $src = '';
                     } else {
                         if ($mod_image_custom_url) {
                             @(list($fieldname, $varname) = preg_split('/##/', $mod_image_custom_url));
                             $fieldname = trim($fieldname);
                             $varname = trim($varname);
                             $varname = $varname ? $varname : 'display';
                             $src = FlexicontentFields::getFieldDisplay($row, $fieldname, null, $varname, 'module');
                         } else {
                             if ($mod_image) {
                                 FlexicontentFields::getFieldDisplay($row, $mod_image_name, null, 'display_large_src', 'module');
                                 // just makes sure thumbs are created by requesting a '*_src' display
                                 $img_field =& $row->fields[$mod_image_name];
                                 if ($mod_use_image_feat == 1) {
                                     $src = str_replace(JURI::root(), '', @$img_field->thumbs_src['large'][0]);
                                 } else {
                                     $src = '';
                                     $thumb = @$img_field->thumbs_src[$mod_use_image_feat][0];
                                 }
                                 if (!$src && $mod_image_fallback_img == 1 || $src && $mod_image_fallback_img == 2 && $img_field->using_default_value) {
                                     $src = flexicontent_html::extractimagesrc($row);
                                 }
                             } else {
                                 $src = flexicontent_html::extractimagesrc($row);
                             }
                         }
                     }
                     if (!$thumb && !$src && $mod_default_img_show) {
                         $thumb = $thumb_default_feat;
                     }
                     if ($src) {
                         $h = '&amp;h=' . $mod_height_feat;
                         $w = '&amp;w=' . $mod_width_feat;
                         $aoe = '&amp;aoe=1';
                         $q = '&amp;q=95';
                         $zc = $mod_method_feat ? '&amp;zc=' . $mod_method_feat : '';
                         $ext = strtolower(pathinfo($src, PATHINFO_EXTENSION));
                         $f = in_array($ext, array('png', 'ico', 'gif')) ? '&amp;f=' . $ext : '';
                         $conf = $w . $h . $aoe . $q . $zc . $f;
                         $base_url = !preg_match("#^http|^https|^ftp|^/#i", $src) ? JURI::base(true) . '/' : '';
                         $thumb = JURI::base() . 'components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=' . $base_url . $src . $conf;
                     }
                 }
                 $lists[$ord]['featured'][$i] = new stdClass();
                 $lists[$ord]['featured'][$i]->_row = $row;
                 $lists[$ord]['featured'][$i]->id = $row->id;
                 $lists[$ord]['featured'][$i]->is_active_item = $isflexi_itemview && $row->id == $active_item_id;
                 //date
                 if ($display_date_feat == 1) {
                     $dateformat = JText::_($params->get('date_format_feat', 'DATE_FORMAT_LC3'));
                     if ($dateformat == JText::_('custom')) {
                         $dateformat = $params->get('custom_date_format_feat', JText::_('DATE_FORMAT_LC3'));
                     }
                     $date_fields_feat = $params->get('date_fields_feat', array('created'));
                     $date_fields_feat = !is_array($date_fields_feat) ? array($date_fields_feat) : $date_fields_feat;
                     $lists[$ord]['featured'][$i]->date_created = "";
                     if (in_array('created', $date_fields_feat)) {
                         // Created
                         $lists[$ord]['featured'][$i]->date_created .= $params->get('date_label_feat', 1) ? '<span class="date_label_feat">' . JText::_('FLEXI_DATE_CREATED') . '</span> ' : '';
                         $lists[$ord]['featured'][$i]->date_created .= '<span class="date_value_feat">' . JHTML::_('date', $row->created, $dateformat) . '</span>';
                     }
                     $lists[$ord]['featured'][$i]->date_modified = "";
                     if (in_array('modified', $date_fields_feat)) {
                         // Modified
                         $lists[$ord]['featured'][$i]->date_modified .= $params->get('date_label_feat', 1) ? '<span class="date_label_feat">' . JText::_('FLEXI_DATE_MODIFIED') . '</span> ' : '';
                         $modified_date = $row->modified != $db->getNullDate() ? JHTML::_('date', $row->modified, $dateformat) : JText::_('FLEXI_DATE_NEVER');
                         $lists[$ord]['featured'][$i]->date_modified .= '<span class="date_value_feat">' . $modified_date . '</span>';
                     }
                 }
                 $lists[$ord]['featured'][$i]->image_rendered = $thumb_rendered;
                 $lists[$ord]['featured'][$i]->image = $thumb;
                 $lists[$ord]['featured'][$i]->hits = $row->hits;
                 $lists[$ord]['featured'][$i]->hits_rendered = '';
                 if ($display_hits_feat && $has_access_hits) {
                     FlexicontentFields::loadFieldConfig($hitsfield, $row);
                     $lists[$ord]['featured'][$i]->hits_rendered .= $params->get('hits_label_feat') ? '<span class="hits_label_feat">' . JText::_($hitsfield->label) . '</span> ' : '';
                     $lists[$ord]['featured'][$i]->hits_rendered .= $hits_icon;
                     $lists[$ord]['featured'][$i]->hits_rendered .= ' (' . $row->hits . (!$params->get('hits_label_feat') ? ' ' . JTEXT::_('FLEXI_HITS_L') : '') . ')';
                 }
                 $lists[$ord]['featured'][$i]->voting = '';
                 if ($display_voting_feat && $has_access_voting) {
                     FlexicontentFields::loadFieldConfig($votingfield, $row);
                     $lists[$ord]['featured'][$i]->voting .= $params->get('voting_label_feat') ? '<span class="voting_label_feat">' . JText::_($votingfield->label) . '</span> ' : '';
                     $lists[$ord]['featured'][$i]->voting .= '<div class="voting_value_feat">' . flexicontent_html::ItemVoteDisplay($votingfield, $row->id, $row->rating_sum, $row->rating_count, 'main', '', $params->get('vote_stars_feat', 1), $params->get('allow_vote_feat', 0), $params->get('vote_counter_feat', 1), !$params->get('voting_label_feat')) . '</div>';
                 }
                 if ($display_comments_feat) {
                     $lists[$ord]['featured'][$i]->comments = $row->comments_total;
                     $lists[$ord]['featured'][$i]->comments_rendered = $params->get('comments_label_feat') ? '<span class="comments_label_feat">' . JText::_('FLEXI_COMMENTS') . '</span> ' : '';
                     $lists[$ord]['featured'][$i]->comments_rendered .= $comments_icon;
                     $lists[$ord]['featured'][$i]->comments_rendered .= ' (' . $row->comments_total . (!$params->get('comments_label_feat') ? ' ' . JTEXT::_('FLEXI_COMMENTS_L') : '') . ')';
                 }
                 $lists[$ord]['featured'][$i]->catid = $row->catid;
                 $lists[$ord]['featured'][$i]->itemcats = explode(",", $row->itemcats);
                 $lists[$ord]['featured'][$i]->link = JRoute::_(FlexicontentHelperRoute::getItemRoute($row->slug, $row->categoryslug, $forced_itemid, $row) . ($method_curlang == 1 ? "&lang=" . substr($row->language, 0, 2) : ""));
                 $lists[$ord]['featured'][$i]->title = strlen($row->title) > $cuttitle_feat ? JString::substr($row->title, 0, $cuttitle_feat) . '...' : $row->title;
                 $lists[$ord]['featured'][$i]->alias = $row->alias;
                 $lists[$ord]['featured'][$i]->fulltitle = $row->title;
                 $lists[$ord]['featured'][$i]->text = $mod_do_stripcat_feat ? flexicontent_html::striptagsandcut($row->introtext, $mod_cut_text_feat) : $row->introtext;
                 $lists[$ord]['featured'][$i]->typename = $row->typename;
                 $lists[$ord]['featured'][$i]->access = $row->access;
                 $lists[$ord]['featured'][$i]->featured = 1;
                 if ($use_fields_feat && @$row->fields && $fields_feat) {
                     $lists[$ord]['featured'][$i]->fields = array();
                     foreach ($fields_feat as $field) {
                         if (!isset($row->fields[$field])) {
                             continue;
                         }
                         /*$lists[$ord]['featured'][$i]->fields[$field] = new stdClass();
                         		$lists[$ord]['featured'][$i]->fields[$field]->display 	= @$row->fields[$field]->display ? $row->fields[$field]->display : '';
                         		$lists[$ord]['featured'][$i]->fields[$field]->name = $row->fields[$field]->name;
                         		$lists[$ord]['featured'][$i]->fields[$field]->id   = $row->fields[$field]->id;*/
                         // Expose field to the module template  ... the template should NOT modify this ...
                         if (!isset($row->fields[$field]->display)) {
                             $row->fields[$field]->display = '';
                         }
                         $lists[$ord]['featured'][$i]->fields[$field] = $row->fields[$field];
                     }
                 }
                 $i++;
             } else {
                 // image processing
                 $thumb = '';
                 $thumb_rendered = '';
                 if ($mod_use_image) {
                     if ($mod_image_custom_display) {
                         @(list($fieldname, $varname) = preg_split('/##/', $mod_image_custom_display));
                         $fieldname = trim($fieldname);
                         $varname = trim($varname);
                         $varname = $varname ? $varname : 'display';
                         $thumb_rendered = FlexicontentFields::getFieldDisplay($row, $fieldname, null, $varname, 'module');
                         $src = '';
                         // Clear src no rendering needed
                     } else {
                         if ($mod_image_custom_url) {
                             @(list($fieldname, $varname) = preg_split('/##/', $mod_image_custom_url));
                             $fieldname = trim($fieldname);
                             $varname = trim($varname);
                             $varname = $varname ? $varname : 'display';
                             $src = FlexicontentFields::getFieldDisplay($row, $fieldname, null, $varname, 'module');
                         } else {
                             if ($mod_image) {
                                 FlexicontentFields::getFieldDisplay($row, $mod_image_name, null, 'display_large_src', 'module');
                                 // just makes sure thumbs are created by requesting a '*_src' display
                                 $img_field =& $row->fields[$mod_image_name];
                                 if ($mod_use_image == 1) {
                                     $src = str_replace(JURI::root(), '', @$img_field->thumbs_src['large'][0]);
                                 } else {
                                     $src = '';
                                     $thumb = @$img_field->thumbs_src[$mod_use_image][0];
                                 }
                                 if (!$src && $mod_image_fallback_img == 1 || $src && $mod_image_fallback_img == 2 && $img_field->using_default_value) {
                                     $src = flexicontent_html::extractimagesrc($row);
                                 }
                             } else {
                                 $src = flexicontent_html::extractimagesrc($row);
                             }
                         }
                     }
                     if (!$thumb && !$src && $mod_default_img_show) {
                         $thumb = $thumb_default;
                     }
                     if ($src) {
                         $h = '&amp;h=' . $mod_height;
                         $w = '&amp;w=' . $mod_width;
                         $aoe = '&amp;aoe=1';
                         $q = '&amp;q=95';
                         $zc = $mod_method ? '&amp;zc=' . $mod_method : '';
                         $ext = strtolower(pathinfo($src, PATHINFO_EXTENSION));
                         $f = in_array($ext, array('png', 'ico', 'gif')) ? '&amp;f=' . $ext : '';
                         $conf = $w . $h . $aoe . $q . $zc . $f;
                         $base_url = !preg_match("#^http|^https|^ftp|^/#i", $src) ? JURI::base(true) . '/' : '';
                         $thumb = JURI::base() . 'components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=' . $base_url . $src . $conf;
                     }
                 }
                 // START population of item's custom properties
                 $lists[$ord]['standard'][$i] = new stdClass();
                 $lists[$ord]['standard'][$i]->_row = $row;
                 $lists[$ord]['standard'][$i]->id = $row->id;
                 $lists[$ord]['standard'][$i]->is_active_item = $isflexi_itemview && $row->id == $active_item_id;
                 //date
                 if ($display_date == 1) {
                     $dateformat = JText::_($params->get('date_format', 'DATE_FORMAT_LC3'));
                     if ($dateformat == JText::_('custom')) {
                         $dateformat = $params->get('custom_date_format', JText::_('DATE_FORMAT_LC3'));
                     }
                     $date_fields = $params->get('date_fields', array('created'));
                     $date_fields = !is_array($date_fields) ? array($date_fields) : $date_fields;
                     $lists[$ord]['standard'][$i]->date_created = "";
                     if (in_array('created', $date_fields)) {
                         // Created
                         $lists[$ord]['standard'][$i]->date_created .= $params->get('date_label', 1) ? '<span class="date_label">' . JText::_('FLEXI_DATE_CREATED') . '</span> ' : '';
                         $lists[$ord]['standard'][$i]->date_created .= '<span class="date_value">' . JHTML::_('date', $row->created, $dateformat) . '</span>';
                     }
                     $lists[$ord]['standard'][$i]->date_modified = "";
                     if (in_array('modified', $date_fields)) {
                         // Modified
                         $lists[$ord]['standard'][$i]->date_modified .= $params->get('date_label', 1) ? '<span class="date_label">' . JText::_('FLEXI_DATE_MODIFIED') . '</span> ' : '';
                         $modified_date = $row->modified != $db->getNullDate() ? JHTML::_('date', $row->modified, $dateformat) : JText::_('FLEXI_DATE_NEVER');
                         $lists[$ord]['standard'][$i]->date_modified .= '<span class="date_value_feat">' . $modified_date . '</span>';
                     }
                 }
                 $lists[$ord]['standard'][$i]->image_rendered = $thumb_rendered;
                 $lists[$ord]['standard'][$i]->image = $thumb;
                 $lists[$ord]['standard'][$i]->hits = $row->hits;
                 $lists[$ord]['standard'][$i]->hits_rendered = '';
                 if ($display_hits && $has_access_hits) {
                     FlexicontentFields::loadFieldConfig($hitsfield, $row);
                     $lists[$ord]['standard'][$i]->hits_rendered .= $params->get('hits_label') ? '<span class="hits_label">' . JText::_($hitsfield->label) . '</span> ' : '';
                     $lists[$ord]['standard'][$i]->hits_rendered .= $hits_icon;
                     $lists[$ord]['standard'][$i]->hits_rendered .= ' (' . $row->hits . (!$params->get('hits_label') ? ' ' . JTEXT::_('FLEXI_HITS_L') : '') . ')';
                 }
                 $lists[$ord]['standard'][$i]->voting = '';
                 if ($display_voting && $has_access_voting) {
                     FlexicontentFields::loadFieldConfig($votingfield, $row);
                     $lists[$ord]['standard'][$i]->voting .= $params->get('voting_label') ? '<span class="voting_label">' . JText::_($votingfield->label) . '</span> ' : '';
                     $lists[$ord]['standard'][$i]->voting .= '<div class="voting_value">' . flexicontent_html::ItemVoteDisplay($votingfield, $row->id, $row->rating_sum, $row->rating_count, 'main', '', $params->get('vote_stars', 1), $params->get('allow_vote', 0), $params->get('vote_counter', 1), !$params->get('voting_label')) . '</div>';
                 }
                 if ($display_comments) {
                     $lists[$ord]['standard'][$i]->comments = $row->comments_total;
                     $lists[$ord]['standard'][$i]->comments_rendered = $params->get('comments_label') ? '<span class="comments_label">' . JText::_('FLEXI_COMMENTS') . '</span> ' : '';
                     $lists[$ord]['standard'][$i]->comments_rendered .= $comments_icon;
                     $lists[$ord]['standard'][$i]->comments_rendered .= ' (' . $row->comments_total . (!$params->get('comments_label') ? ' ' . JTEXT::_('FLEXI_COMMENTS_L') : '') . ')';
                 }
                 $lists[$ord]['standard'][$i]->catid = $row->catid;
                 $lists[$ord]['standard'][$i]->itemcats = explode(",", $row->itemcats);
                 $lists[$ord]['standard'][$i]->link = JRoute::_(FlexicontentHelperRoute::getItemRoute($row->slug, $row->categoryslug, $forced_itemid, $row) . ($method_curlang == 1 ? "&lang=" . substr($row->language, 0, 2) : ""));
                 $lists[$ord]['standard'][$i]->title = strlen($row->title) > $cuttitle ? JString::substr($row->title, 0, $cuttitle) . '...' : $row->title;
                 $lists[$ord]['standard'][$i]->alias = $row->alias;
                 $lists[$ord]['standard'][$i]->fulltitle = $row->title;
                 $lists[$ord]['standard'][$i]->text = $mod_do_stripcat ? flexicontent_html::striptagsandcut($row->introtext, $mod_cut_text) : $row->introtext;
                 $lists[$ord]['standard'][$i]->typename = $row->typename;
                 $lists[$ord]['standard'][$i]->access = $row->access;
                 $lists[$ord]['standard'][$i]->featured = 0;
                 if ($use_fields && @$row->fields && $fields) {
                     $lists[$ord]['standard'][$i]->fields = array();
                     foreach ($fields as $field) {
                         if (!isset($row->fields[$field])) {
                             continue;
                         }
                         /*$lists[$ord]['standard'][$i]->fields[$field] = new stdClass();
                         		$lists[$ord]['standard'][$i]->fields[$field]->display 	= @$row->fields[$field]->display ? $row->fields[$field]->display : '';
                         		$lists[$ord]['standard'][$i]->fields[$field]->name = $row->fields[$field]->name;
                         		$lists[$ord]['standard'][$i]->fields[$field]->id   = $row->fields[$field]->id;*/
                         // Expose field to the module template  ... the template should NOT modify this ...
                         if (!isset($row->fields[$field]->display)) {
                             $row->fields[$field]->display = '';
                         }
                         $lists[$ord]['standard'][$i]->fields[$field] = $row->fields[$field];
                         // Expose field to the module template  ... but template may modify it ...
                     }
                 }
                 $i++;
             }
         }
         $lists_arr[$catid] = $lists;
     }
     $mod_fc_run_times['item_list_creation'] = $modfc_jprof->getmicrotime() - $mod_fc_run_times['item_list_creation'];
     return $lists_arr;
 }
 /**
  * Creates the ajax voting stars system
  *
  * @param array $field
  * @param int or string $xid
  * @since 1.0
  */
 static function ItemVote(&$field, $xid, $vote)
 {
     // Check for invalid xid
     if ($xid != 'main' && $xid != 'extra' && $xid != 'all' && !(int) $xid) {
         $html .= "ItemVote(): invalid xid '" . $xid . "' was given";
         return;
     }
     if (!$vote) {
         $vote = new stdClass();
         $vote->rating_sum = $vote->rating_count = 0;
     } else {
         if (!isset($vote->rating_sum) || !isset($vote->rating_sum)) {
             $vote->rating_sum = $vote->rating_count = 0;
         }
     }
     $html = '';
     $int_xid = (int) $xid;
     $item_id = $field->item_id;
     // Get extra voting option (composite voting)
     $xids = array();
     if (($xid == 'all' || $xid == 'extra' || $int_xid) && ($enable_extra_votes = $field->parameters->get('enable_extra_votes', ''))) {
         // Retrieve and split-up extra vote types, (removing last one if empty)
         $extra_votes = $field->parameters->get('extra_votes', '');
         $extra_votes = preg_split("/[\\s]*%%[\\s]*/", $extra_votes);
         if (empty($extra_votes[count($extra_votes) - 1])) {
             unset($extra_votes[count($extra_votes) - 1]);
         }
         // Split extra voting ids (xid) and their titles
         foreach ($extra_votes as $extra_vote) {
             @(list($extra_id, $extra_title, $extra_desc) = explode("##", $extra_vote));
             $xids[$extra_id] = new stdClass();
             $xids[$extra_id]->id = (int) $extra_id;
             $xids[$extra_id]->title = JText::_($extra_title);
             $xids[$extra_id]->desc = JText::_($extra_desc);
         }
     }
     // Get user current history so that it is reflected on the voting
     $vote_history = JFactory::getSession()->get('vote_history', array(), 'flexicontent');
     if (!isset($vote_history[$item_id]) || !is_array($vote_history[$item_id])) {
         $vote_history[$item_id] = array();
     }
     // Add main vote option
     if ($xid == 'main' || $xid == 'all') {
         $vote_label = JText::_($field->parameters->get('main_label', 'FLEXI_VOTE_AVERAGE_RATING'));
         $counter_show_label = $field->parameters->get('main_counter_show_label', 1);
         $add_review_form = $field->parameters->get('allow_reviews', 0);
         $html .= flexicontent_html::ItemVoteDisplay($field, $item_id, $vote->rating_sum, $vote->rating_count, 'main', $vote_label, $stars_override = 0, $allow_vote = true, $vote_counter = 'default', $counter_show_label, $add_review_form, $xids, $review_type = 'item');
     }
     if ($xid == 'all' || $xid == 'extra' || $int_xid && isset($xids[$xid])) {
         if ($int_xid) {
             $_xids = array($int_xid => $xids[$int_xid]);
         } else {
             $_xids =& $xids;
         }
         $counter_show_label = $field->parameters->get('extra_counter_show_label', 1);
         foreach ($_xids as $extra_id => $xid_obj) {
             if (!isset($vote->extra[$extra_id])) {
                 $extra_vote = new stdClass();
                 $extra_vote->rating_sum = $extra_vote->rating_count = 0;
                 $extra_vote->extra_id = $extra_id;
             } else {
                 $extra_vote = $vote->extra[$extra_id];
             }
             // Display incomplete vote
             if ((int) $extra_id && !isset($vote_history[$item_id]['main']) && isset($vote_history[$item_id][$extra_id])) {
                 $_rating_sum = $vote_history[$item_id][$extra_id];
                 $rating_count = 1;
             } else {
                 $_rating_sum = 0;
                 $rating_count = 0;
             }
             $html .= flexicontent_html::ItemVoteDisplay($field, $item_id, $extra_vote->rating_sum + $_rating_sum, $extra_vote->rating_count + $rating_count, $extra_vote->extra_id, $xid_obj, $stars_override = 0, $allow_vote = true, $vote_counter = 'default', $counter_show_label);
         }
     }
     return '<div class="' . $field->name . '-group">' . $html . '</div>';
 }
	/**
	 * Creates the ajax voting stars system
	 *
	 * @param array $field
	 * @param int or string $xid
	 * @since 1.0
	 */
	static function ItemVote( &$field, $xid, $vote )
	{
		// Check for invalid xid
		if ($xid!='main' && $xid!='extra' && $xid!='all' && !(int)$xid) {
			$html .= "ItemVote(): invalid xid '".$xid."' was given";
			return;
		}

		$db	= JFactory::getDBO();
  	$id  = $field->item_id;

  	$enable_extra_votes = $field->parameters->get('extra_votes', '');
		$extra_votes = !$enable_extra_votes ? '' : $field->parameters->get('extra_votes', '');
		$main_label  = !$enable_extra_votes ? '' : $field->parameters->get('main_label', '');
		// Set a Default main label if one was not given but extra votes exist
		$main_label  = (!$main_label && $extra_votes) ? JText::_('FLEXI_OVERALL') : $main_label;

		$html = '';

		if (!$vote) {
			// These are mass retrieved for multiple items, to optimize performance
			//$db->setQuery( 'SELECT * FROM #__content_rating WHERE content_id=' . $id );
			//$vote = $db->loadObject();
			$vote = new stdClass();
			$vote->rating_sum = $vote->rating_count = 0;
		} else if (!isset($vote->rating_sum) || !isset($vote->rating_sum)) {
			$vote->rating_sum = $vote->rating_count = 0;
		}

		if ($xid=='main' || $xid=='all') {
			$html .= flexicontent_html::ItemVoteDisplay( $field, $id, $vote->rating_sum, $vote->rating_count, 'main', $main_label );
		}

		if ($xid=='all' || $xid=='extra' || (int)$xid) {

			// Retrieve and split-up extra vote types, (removing last one if empty)
			$extra_votes = preg_split("/[\s]*%%[\s]*/", $extra_votes);
			if ( empty($extra_votes[count($extra_votes)-1]) )  unset( $extra_votes[count($extra_votes)-1] );

			// Split extra voting ids (xid) and their titles
			$xid_arr = array();
			foreach ($extra_votes as $extra_vote) {
				list($extra_id, $extra_title) = explode("##", $extra_vote);
				$xid_arr[$extra_id] = $extra_title;
			}

			// Query the database
			if ( (int)$xid )
			{
				if ( !isset($vote->extra[(int)$xid]) ) {
					$extra_vote = new stdClass();
					$extra_vote->rating_sum = $extra_vote->rating_count = 0;
					$extra_vote->extra_id = (int)$xid;
				} else {
					$extra_vote = $vote->extra[(int)$xid];
				}
				$html .= flexicontent_html::ItemVoteDisplay( $field, $id, $extra_vote->rating_sum, $extra_vote->rating_count, $extra_vote->extra_id, $xid_arr[(int)$xid] );
			}
			else
			{
				foreach ( $xid_arr as $extra_id => $extra_title) {
					if ( !isset($vote->extra[$extra_id]) ) {
						$extra_vote = new stdClass();
						$extra_vote->rating_sum = $extra_vote->rating_count = 0;
						$extra_vote->extra_id = $extra_id;
					} else {
						$extra_vote = $vote->extra[$extra_id];
					}
					$html .= flexicontent_html::ItemVoteDisplay( $field, $id, $extra_vote->rating_sum, $extra_vote->rating_count, $extra_vote->extra_id, $extra_title );
				}
			}
		}

		return $html;
 	}