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 = '&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 = 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 = '&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 = 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; }