File manager - Edit - /home/capoccitel/www/components/com_tz_portfolio_plus/models/article.php
Back
<?php /*------------------------------------------------------------------------ # TZ Portfolio Plus Extension # ------------------------------------------------------------------------ # author DuongTVTemPlaza # copyright Copyright (C) 2015 templaza.com. All Rights Reserved. # @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL # Websites: http://www.templaza.com # Technical Support: Forum - http://templaza.com/Forum -------------------------------------------------------------------------*/ // No direct access defined('_JEXEC') or die; use Joomla\Registry\Registry; jimport('joomla.application.component.modelitem'); /** * Content Component Article Model. */ class TZ_Portfolio_PlusModelArticle extends JModelItem { /** * Model context string. * * @var string */ protected $_context = 'com_tz_portfolio_plus.article'; /** * Method to auto-populate the model state. * * Note. Calling getState in this method will result in recursion. * * @since 1.6 */ protected function populateState() { $app = JFactory::getApplication('site'); // Load state from the request. $pk = $app -> input -> getInt('id'); $this->setState('article.id', $pk); $this -> setState('article.catid',null); $offset = $app -> input -> getUInt('limitstart'); $this->setState('list.offset', $offset); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); // TODO: Tune these values based on other permissions. $user = TZ_Portfolio_PlusUser::getUser(); if ((!$user->authorise('core.edit.state', 'com_tz_portfolio_plus')) && (!$user->authorise('core.edit', 'com_tz_portfolio_plus'))){ $this->setState('filter.published', 1); $this->setState('filter.archived', 2); } $this->setState('filter.language', JLanguageMultilang::isEnabled()); } function getItemRelated($pk=null){ try{ // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id'); if($pk){ $_params = $this -> getState('params'); $article = $this -> getItem($pk); $params = $article -> params; $limit = $article -> params -> get('related_limit',5); $orderBy = null; switch($params -> get('related_orderby','rdate')){ default: case 'rdate': $orderBy = 'c.created DESC'; break; case 'date': $orderBy = 'c.created ASC'; break; case 'hits': $orderBy = 'c.hits DESC'; break; case 'rhits': $orderBy = 'c.hits ASC'; break; } $db = JFactory::getDbo(); $query = $db -> getQuery(true); $query -> select('DISTINCT c.*, cc.id AS catid,CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(":", c.id, c.alias) ELSE c.id END as slug'); $query -> select('CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug'); $query -> from($db -> quoteName('#__tz_portfolio_plus_content').' AS c'); $query -> join('INNER', '#__tz_portfolio_plus_content_category_map AS m ON m.contentid = c.id AND m.main = 1'); $query -> join('LEFT',$db -> quoteName('#__tz_portfolio_plus_categories').' AS cc ON cc.id = m.catid'); $query -> where('c.state = 1'); $query -> where('NOT c.id='.$pk); $query -> where('cc.id='.$article -> catid); if(!$article -> params -> get('show_related_featured', 1)){ $query -> where('c.featured <> 1'); }elseif($article -> params -> get('show_related_featured', 1) == 2){ $query -> where('c.featured = 1'); } if($article -> params -> get('related_article_by', 'tag') == 'tag'){ $query -> join('INNER', '#__tz_portfolio_plus_tag_content_map AS tm ON tm.contentid = c.id'); $query -> join('INNER', '#__tz_portfolio_plus_tags AS t ON t.id = tm.tagsid'); $subquery = $db -> getQuery(true); $subquery -> select('t2.id'); $subquery -> from('#__tz_portfolio_plus_tags AS t2'); $subquery -> join('INNER', '#__tz_portfolio_plus_tag_content_map AS tm2 ON tm2.tagsid = t2.id'); $subquery -> join('INNER', '#__tz_portfolio_plus_content AS c2 ON c2.id = tm2.contentid'); $subquery -> where('c2.id = '. $pk); $query -> where('t.id IN('.(string) $subquery.')'); } // Filter by language if ($this->getState('filter.language')) { $query->where('c.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')'); } if($orderBy) { $query->order($orderBy); } $db -> setQuery($query,0,$limit); return $db -> loadObjectList(); } }catch (Exception $e){ $this -> setError($e -> getMessage()); return false; } 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, ' . // If badcats is not null, this means that the article is inside an unpublished category // In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published) 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END AS state, ' . 'a.created, a.created_by, a.created_by_alias, ' . // use created if modified is 0 '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.id AS author_id, 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 (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'); // Convert parameter fields to objects. $registry = new JRegistry; $registry->loadString($data->attribs); $data->params = clone $params; /*** Merge category params to menu params ***/ $categories = JCategories::getInstance('TZ_Portfolio_Plus'); 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); } // Now check if edit.own is available. 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(); if(isset($item -> author_params) && !empty($item -> author_params)) { $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 -> twitter = $author_registry -> get('tz_portfolio_plus_user_twitter'); $author_info -> facebook = $author_registry -> get('tz_portfolio_plus_user_facebook'); $author_info -> instagram = $author_registry -> get('tz_portfolio_plus_user_instagram'); $author_info -> googleplus = $author_registry -> get('tz_portfolio_plus_user_googleplus'); $author_info -> description = $author_registry -> get('tz_portfolio_plus_user_description'); $item -> author_info = $author_info; $this -> _item[$pk] = $item; return $this->_item[$pk]; } /** * Increment the hit counter for the article. * * @param int Optional primary key of the article to increment. * * @return boolean True if successful; false otherwise and internal error set. */ public function hit($pk = 0) { $hitcount = JFactory::getApplication() -> input -> getInt('hitcount', 1); if ($hitcount) { // Initialise variables. $pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id'); $db = $this->getDbo(); $db->setQuery( 'UPDATE #__tz_portfolio_plus_content' . ' SET hits = hits + 1' . ' WHERE id = '.(int) $pk ); try{ return $db -> execute(); }catch (Exception $exception){ $this -> setError($exception -> getMessage()); return false; } } return true; } }
| ver. 1.6 |
Github
|
.
| PHP 7.4.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings