public function getItems() { if ($items = parent::getItems()) { $categories = new TZ_Portfolio_PlusCategories(); foreach ($items as &$item) { $params = clone $this->getState('params'); $temp = clone $this->getState('params'); // Get the global params $globalParams = JComponentHelper::getParams('com_tz_portfolio_plus', true); /*** New source ***/ $category = $categories->get($item->catid); $catParams = new JRegistry($category->params); $articleParams = new JRegistry(); $articleParams->loadString($item->attribs); // if($temp -> get('menuInheritFrom', 'none') == 'articles'){ // // if($inheritCatid = $catParams -> get('inheritFrom')){ // if($inheritCategory = $categories -> get($inheritCatid)){ // $inheritCatParams = new JRegistry($inheritCategory -> params); // $item -> params = clone($inheritCatParams); // } // }else{ // $item -> params = clone($catParams); // } // $item -> params -> merge($articleParams); // }else{ $item->params = clone $params; // } // Create new options "link" and "fullLink" for article $tmpl = null; if ($item->params->get('tz_use_lightbox', 0)) { $tmpl = '&tmpl=component'; } $config = JFactory::getConfig(); $ssl = -1; if ($config->get('force_ssl')) { $ssl = 1; } $item->link = JRoute::_(TZ_Portfolio_PlusHelperRoute::getArticleRoute($item->slug, $item->catid) . $tmpl); $item->fullLink = JRoute::_(TZ_Portfolio_PlusHelperRoute::getArticleRoute($item->slug, $item->catid), true, $ssl); /** End Create new options **/ $media = $item->media; $registry = new JRegistry(); $registry->loadString($media); $media = $registry->toObject(); $item->media = $media; $item->mediatypes = array(); } return $items; } return false; }
/** * Method to get article data. * * @param integer The id of the article. * * @return mixed Menu item data object on success, false on failure. */ public function &getItem($pk = null) { // Initialise variables. $pk = !empty($pk) ? $pk : (int) $this->getState('article.id'); if ($this->_item === null) { $this->_item = array(); } if (!isset($this->_item[$pk])) { try { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select($this->getState('item.select', 'a.id, a.asset_id, a.title, a.alias, a.type, a.media, a.introtext, a.fulltext, ' . 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END AS state, ' . 'a.created, a.created_by, a.created_by_alias, ' . 'CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, ' . 'a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, ' . 'a.images, a.urls, a.attribs, a.version, a.ordering, ' . 'a.metakey, a.metadesc, a.access, a.hits, a.metadata, a.featured, a.language, a.xreference')); $query->from('#__tz_portfolio_plus_content AS a'); $query->join('INNER', '#__tz_portfolio_plus_content_category_map AS m ON m.contentid = a.id AND m.main = 1'); // Join on category table. $query->select('c.id AS catid, c.title AS category_title, c.alias AS category_alias, c.access AS category_access'); $query->join('LEFT', '#__tz_portfolio_plus_categories AS c on c.id = m.catid'); // Join on user table. $query->select('u.name AS author, u.params AS author_params, u.email AS author_email'); $query->join('LEFT', '#__users AS u on u.id = a.created_by'); // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')'); } // Join on contact table $subQuery = $db->getQuery(true); $subQuery->select('contact.user_id, MAX(contact.id) AS id, contact.language'); $subQuery->from('#__contact_details AS contact'); $subQuery->where('contact.published = 1'); $subQuery->group('contact.user_id, contact.language'); $query->select('contact.id as contactid'); $query->join('LEFT', '(' . $subQuery . ') AS contact ON contact.user_id = a.created_by'); // Join over the categories to get parent category titles $query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias'); $query->join('LEFT', '#__tz_portfolio_plus_categories as parent ON parent.id = c.parent_id'); // Join on voting table // $query->select('ROUND(v.rating_sum / v.rating_count, 1) AS rating, v.rating_count as rating_count'); // $query->join('LEFT', '#__content_rating AS v ON a.id = v.content_id'); $query->where('a.id = ' . (int) $pk); // Filter by start and end dates. $nullDate = $db->Quote($db->getNullDate()); $date = JFactory::getDate(); $nowDate = $db->Quote($date->toSql()); $query->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')'); $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); // Join to check for category published state in parent categories up the tree // If all categories are published, badcats.id will be null, and we just use the article state $subquery = ' (SELECT cat.id as id FROM #__tz_portfolio_plus_categories AS cat JOIN #__tz_portfolio_plus_categories AS parent '; $subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt '; $subquery .= 'WHERE parent.extension = ' . $db->quote('com_tz_portfolio_plus'); $subquery .= ' AND parent.published <= 0 GROUP BY cat.id)'; $query->join('LEFT OUTER', $subquery . ' AS badcats ON badcats.id = c.id'); // Filter by published state. $published = $this->getState('filter.published'); $archived = $this->getState('filter.archived'); if (is_numeric($published)) { $query->where('(a.state = ' . (int) $published . ' OR a.state =' . (int) $archived . ')'); } $db->setQuery($query); $data = $db->loadObject(); if ($error = $db->getErrorMsg()) { throw new Exception($error); } if (empty($data)) { return JError::raiseError(404, JText::_('COM_TZ_PORTFOLIO_PLUS_ERROR_ARTICLE_NOT_FOUND')); } // Check for published state if filter set. if ((is_numeric($published) || is_numeric($archived)) && ($data->state != $published && $data->state != $archived)) { return JError::raiseError(404, JText::_('COM_TZ_PORTFOLIO_PLUS_ERROR_ARTICLE_NOT_FOUND')); } $params = $this->getState('params'); include_once JPATH_SITE . '/components/com_tz_portfolio_plus/helpers/category.php'; // Convert parameter fields to objects. $registry = new JRegistry(); $registry->loadString($data->attribs); $data->params = clone $params; /*** Merge category params to menu params ***/ $categories = new TZ_Portfolio_PlusCategories(); if ($category = $categories->get($data->catid)) { $catParams = new JRegistry($category->params); if ($inheritCatid = $catParams->get('inheritFrom')) { if ($inheritCategory = $categories->get($inheritCatid)) { $inheritParams = new JRegistry(); $inheritParams->loadString($inheritCategory->params); $data->params->merge($inheritParams); } } else { $data->params->merge($catParams); } } $data->params->merge($registry); $registry = new JRegistry(); $registry->loadString($data->metadata); $data->metadata = $registry; $media = $data->media; $registry = new JRegistry(); $registry->loadString($media); $media = $registry->toObject(); $data->media = $media; // Compute selected asset permissions. $user = JFactory::getUser(); // Technically guest could edit an article, but lets not check that to improve performance a little. if (!$user->get('guest')) { $userId = $user->get('id'); $asset = 'com_tz_portfolio_plus.article.' . $data->id; // Check general edit permission first. if ($user->authorise('core.edit', $asset)) { $data->params->set('access-edit', true); } elseif (!empty($userId) && $user->authorise('core.edit.own', $asset)) { // Check for a valid user and that they are the owner. if ($userId == $data->created_by) { $data->params->set('access-edit', true); } } } // Compute view access permissions. if ($access = $this->getState('filter.access')) { // If the access filter has been set, we already know this user can view. $data->params->set('access-view', true); } else { // If no access filter is set, the layout takes some responsibility for display of limited information. $user = JFactory::getUser(); $groups = $user->getAuthorisedViewLevels(); if ($data->catid == 0 || $data->category_access === null) { $data->params->set('access-view', in_array($data->access, $groups)); } else { $data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups)); } } $this->_item[$pk] = $data; } catch (JException $e) { if ($e->getCode() == 404) { // Need to go thru the error handler to allow Redirect to work. JError::raiseError(404, $e->getMessage()); } else { $this->setError($e); $this->_item[$pk] = false; } } } $item = $this->_item[$pk]; $author_registry = new Registry(); $author_registry->loadString($item->author_params); $author_info = new stdClass(); $author_info->url = $author_registry->get('tz_portfolio_plus_user_url'); $author_info->email = $item->author_email; $author_info->gender = $author_registry->get('tz_portfolio_plus_user_gender'); $author_info->avatar = $author_registry->get('tz_portfolio_plus_user_avatar'); $author_info->social_links = null; if ($social_links = $author_registry->get('tz_portfolio_plus_user_social_link')) { foreach ($social_links as &$social_link) { $social_link = json_decode($social_link); } $author_info->social_links = $social_links; } $author_info->description = $author_registry->get('tz_portfolio_plus_user_description'); $item->author_info = $author_info; $this->_item[$pk] = $item; return $this->_item[$pk]; }