示例#1
0
 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;
 }
示例#2
0
 /**
  * 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];
 }