/** * Method to bind fields to an items object * * @access private * @return object * @since 1.5 */ static function &getFields(&$_items, $view = FLEXI_ITEMVIEW, $params = null, $aid = false, $use_tmpl = true) { static $expired_cleaned = false; if (!$_items) { return $_items; } if (!is_array($_items)) { $items = array(&$_items); } else { $items =& $_items; } $user = JFactory::getUser(); $cparams = JComponentHelper::getParams('com_flexicontent'); $print_logging_info = $cparams->get('print_logging_info'); if ($print_logging_info) { global $fc_run_times; $start_microtime = microtime(true); } // Calculate access for current user if it was not given or if given access is invalid if (FLEXI_J16GE) { $aid = is_array($aid) ? $aid : JAccess::getAuthorisedViewLevels($user->id); } else { $aid = $aid !== false ? (int) $aid : (int) $user->get('aid'); } // Apply cache to public (unlogged) users only /*$apply_cache = !$user->id && FLEXI_CACHE; if ($apply_cache) { $itemcache = JFactory::getCache('com_flexicontent_items'); // Get Joomla Cache of '...items' Caching Group $itemcache->setCaching(1); // Force cache ON $itemcache->setLifeTime(FLEXI_CACHE_TIME); // Set expire time (default is 1 hour) $filtercache = JFactory::getCache('com_flexicontent_filters'); // Get Joomla Cache of '...filters' Caching Group $filtercache->setCaching(1); // Force cache ON $filtercache->setLifeTime(FLEXI_CACHE_TIME); // Set expire time (default is 1 hour) // Auto-clean expired item & filters cache, only done here once if (FLEXI_GC && !$expired_cleaned) { $itemcache->gc(); $filtercache->gc(); $expired_cleaned = true; } // ... now retrieved CACHED ... code removed ... }*/ // @TODO : move to the constructor // This is optimized regarding the use of SINGLE QUERY to retrieve the core item data $vars['tags'] = FlexicontentFields::_getTags($items); $vars['cats'] = FlexicontentFields::_getCategories($items); $vars['favourites'] = FlexicontentFields::_getFavourites($items); $vars['favoured'] = FlexicontentFields::_getFavoured($items); $vars['authors'] = FlexicontentFields::_getAuthors($items); $vars['modifiers'] = FlexicontentFields::_getModifiers($items); $vars['typenames'] = FlexicontentFields::_getTypenames($items); $vars['votes'] = FlexicontentFields::_getVotes($items); $vars['custom'] = FlexicontentFields::_getCustomValues($items); FlexicontentFields::getItemFields($items, $vars, $view, $aid); if ($print_logging_info) { @($fc_run_times['field_values_params'] += round(1000000 * 10 * (microtime(true) - $start_microtime)) / 10); } $_rendered = array(); if ($params) { $always_create_fields_display = $cparams->get('always_create_fields_display', 0); $flexiview = JRequest::getVar('view'); // CHECK if 'always_create_fields_display' enabled and create the display for all item's fields // *** This should be normally set to ZERO (never), to avoid a serious performance penalty !!! // 0: never, 1: always, 2: only in item view, 3: never unless in a template position, this effects function: renderPositions() if ($always_create_fields_display == 1 || $always_create_fields_display == 2 && $flexiview == FLEXI_ITEMVIEW && $view == FLEXI_ITEMVIEW) { $field_names = array(); foreach ($items as $i => $item) { if ($items[$i]->fields) { foreach ($items[$i]->fields as $field) { $values = isset($items[$i]->fieldvalues[$field->id]) ? $items[$i]->fieldvalues[$field->id] : array(); $field = FlexicontentFields::renderField($items[$i], $field, $values, $method = 'display', $view); $field_names[$field->name] = 1; } } } foreach ($field_names as $field_name => $_ignore) { $_rendered['ALL'][$field_name] = 1; } } // Render field positions $items = FlexicontentFields::renderPositions($items, $view, $params, $use_tmpl, $_rendered); } return $items; }
/** * Method to fetch the fields from an item object * * @access private * @return object * @since 1.5 */ static function &getItemFields(&$items, &$vars = null, $view = FLEXI_ITEMVIEW, $aid = false) { if (empty($items)) { return; } static $type_fields = array(); $dispatcher = JDispatcher::getInstance(); $db = JFactory::getDBO(); $user = JFactory::getUser(); // This is optimized regarding the use of SINGLE QUERY to retrieve the core item data if ($vars == null) { $vars['tags'] = FlexicontentFields::_getTags($items, $view); $vars['cats'] = FlexicontentFields::_getCategories($items, $view); $vars['favourites'] = FlexicontentFields::_getFavourites($items, $view); $vars['favoured'] = FlexicontentFields::_getFavoured($items, $view); $vars['authors'] = FlexicontentFields::_getAuthors($items, $view); $vars['modifiers'] = FlexicontentFields::_getModifiers($items, $view); $vars['typenames'] = FlexicontentFields::_getTypenames($items, $view); $vars['votes'] = FlexicontentFields::_getVotes($items, $view); $vars['custom'] = FlexicontentFields::_getCustomValues($items, $view); } foreach ($items as $i => $item) { if (!FLEXI_J16GE && $item->sectionid != FLEXI_SECTION) { continue; } $item_id = $item->id; $cats = isset($vars['cats'][$item_id]) ? $vars['cats'][$item_id] : array(); $tags = isset($vars['tags'][$item_id]) ? $vars['tags'][$item_id] : array(); $favourites = isset($vars['favourites'][$item_id]) ? $vars['favourites'][$item_id]->favs : 0; $favoured = isset($vars['favoured'][$item_id]) ? $vars['favoured'][$item_id]->fav : 0; $author = isset($vars['authors'][$item_id]) ? $vars['authors'][$item_id] : ''; $modifier = isset($vars['modifiers'][$item_id]) ? $vars['modifiers'][$item_id] : ''; $typename = isset($vars['typenames'][$item_id]) ? $vars['typenames'][$item_id] : ''; $vote = isset($vars['votes'][$item_id]) ? $vars['votes'][$item_id] : ''; $custom = isset($vars['custom'][$item_id]) ? $vars['custom'][$item_id] : array(); // ONCE per Content Item Type if (!isset($type_fields[$item->type_id])) { // Field's has_access flag $aid_arr = is_array($aid) ? $aid : JAccess::getAuthorisedViewLevels($user->id); $aid_list = implode(",", $aid_arr); $select_access = ', CASE WHEN fi.access IN (0,' . $aid_list . ') THEN 1 ELSE 0 END AS has_access'; $query = 'SELECT fi.*' . $select_access . ' FROM #__flexicontent_fields AS fi' . ' JOIN #__flexicontent_fields_type_relations AS ftrel ON ftrel.field_id = fi.id AND ftrel.type_id = ' . $item->type_id . ' WHERE fi.published = 1' . ' GROUP BY fi.id' . ' ORDER BY ftrel.ordering, fi.ordering, fi.name'; $db->setQuery($query); $type_fields[$item->type_id] = $db->loadObjectList('name'); //echo "<pre>"; print_r( array_keys($type_fields[$item->type_id]) ); exit; } $item->fields = array(); if ($type_fields[$item->type_id]) { foreach ($type_fields[$item->type_id] as $field_name => $field_data) { $item->fields[$field_name] = clone $field_data; } } $item->fields = $item->fields ? $item->fields : array(); if (!isset($item->parameters)) { $item->parameters = new JRegistry($item->attribs); } $item->params = $item->parameters; $item->text = $item->introtext . chr(13) . chr(13) . $item->fulltext; $item->tags = $tags; $item->cats = $cats; $item->favs = $favourites; $item->fav = $favoured; $item->creator = @$author->alias ? $author->alias : (@$author->name ? $author->name : ''); $item->author =& $item->creator; // An alias ... of creator $item->modifier = @$modifier->name ? $modifier->name : $item->creator; // If never modified, set modifier to be the creator $item->modified = $item->modified != $db->getNulldate() ? $item->modified : $item->created; // If never modified, set modification date to be the creation date $item->cmail = @$author->email ? $author->email : ''; $item->cuname = @$author->username ? $author->username : ''; $item->mmail = @$modifier->email ? $modifier->email : $item->cmail; $item->muname = @$modifier->muname ? $modifier->muname : $item->cuname; $item->typename = @$typename->name ? $typename->name : JText::_('Article'); $item->vote = @$vote ? $vote : ''; // some aliases to much CORE field names $item->categories =& $item->cats; $item->favourites =& $item->favs; $item->document_type =& $item->typename; $item->voting =& $item->vote; // custom field values $item->fieldvalues = $custom; } return $items; }