Current File : /home/pacjaorg/.trash/components/com_tz_portfolio_plus/router.php |
<?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
-------------------------------------------------------------------------*/
defined('_JEXEC') or die;
use Joomla\Registry\Registry;
use Joomla\CMS\Component\Router\RouterBase;
use Joomla\CMS\Application\ApplicationHelper;
class TZ_Portfolio_PlusRouter extends RouterBase
{
protected $addonRouters = array();
protected $cache = array();
public function getAddonRouter($addon, $group = 'content'){
if (!isset($this->addonRouters[$addon]))
{
$addonname = ucfirst($addon);
$class = 'PlgTZ_Portfolio_Plus'.ucfirst($group).$addonname . 'Router';
if (!class_exists($class))
{
// Use the component routing handler if it exists
$path = JPATH_SITE.'/components/com_tz_portfolio_plus/addons/'.$group.'/'.$addon.'/router.php';
// Use the custom routing handler if it exists
if (file_exists($path))
{
require_once $path;
}
}
if (class_exists($class))
{
$reflection = new ReflectionClass($class);
if (in_array('JComponentRouterInterface', $reflection->getInterfaceNames()))
{
$this->addonRouters[$addon] = new $class($this->app, $this->menu);
}
}
}
if(isset($this->addonRouters[$addon]) && $this -> addonRouters[$addon]) {
return $this->addonRouters[$addon];
}
return false;
}
public function build(&$query)
{
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
if($params -> get('tzSef',1)) {
$segments = $this -> sefBuild($query);
// Build addon router
if($query && isset($query['addon_id'])){
$addon_id = $query['addon_id'];
if($addon = TZ_Portfolio_PlusPluginHelper::getPluginById($addon_id)) {
$addonSegments[] = 'addon_' . $query['addon_id'];
if ($router = $this->getAddonRouter($addon->name, $addon->type)) {
$segs = $router->build($query);
$addonSegments = array_merge($addonSegments, $segs);
}
unset($query['addon_id']);
$segments = array_merge($segments, $addonSegments);
}
}
}else{
$segments = $this -> notSefBuild($query);
}
$total = count($segments);
for ($i = 0; $i < $total; $i++)
{
$segments[$i] = str_replace(':', '-', $segments[$i]);
}
return $segments;
}
public function parse(&$segments)
{
$vars = array();
$tmp = null;
$total = count($segments);
for ($i = 0; $i < $total; $i++)
{
if(strpos($segments[$i],'addon_') !== false) {
$tmp = $i;
break;
}
}
// Get addon parse router
$addonVars = array();
if($tmp !== null){
$addonSegments = array_slice($segments, $tmp, $total);
$segments = array_slice($segments, 0, $tmp);
if(count($addonSegments)){
$addon_id = (int) str_replace('addon_','',$addonSegments[0]);
$addonVars['addon_id'] = $addon_id;
$addon = TZ_Portfolio_PlusPluginHelper::getPluginById($addon_id);
if($router = $this -> getAddonRouter($addon -> name, $addon -> type)) {
$_addonVars = $router->parse($addonSegments);
$addonVars = array_merge($addonVars, $_addonVars);
}
}
}
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
if($params -> get('tzSef',1)) {
$vars = $this -> sefParse($segments, $addonVars);
}else{
$vars = $this -> notSefParse($segments);
}
$vars = array_merge($vars, $addonVars);
// Remove all segments
//** @since joomla 4 */
foreach($segments as $i => $segment){
unset($segments[$i]);
}
return $vars;
}
protected function sefBuild(&$query){
$segments = array();
// get a menu item based on Itemid or currently active
$app = JFactory::getApplication();
$menu = $app -> getMenu();
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
$advanced = $params->get('sef_advanced_link', 0);
$queryIdGiven = isset($query['id'])?true:false;
$removeCategory = $params -> get('sef_remove_category', 1);
// we need a menu item. Either the one specified in the query, or the current active one if none specified
if (empty($query['Itemid'])) {
$menuItem = $menu->getActive();
$menuItemGiven = false;
} else {
$menuItem = $menu->getItem((int)$query['Itemid']);
$menuItemGiven = true;
}
// Check again
if ($menuItemGiven && isset($menuItem) && $menuItem->component != 'com_tz_portfolio_plus')
{
$menuItemGiven = false;
unset($query['Itemid']);
}
if (isset($query['view'])) {
$view = $query['view'];
} else {
// we need to have a view in the query or it is an invalid URL
return $segments;
}
// are we dealing with an article or category that is attached to a menu item?
if (($menuItem instanceof stdClass && isset($menuItem->query['view']))
&& $menuItem->query['view'] == $query['view'] && isset($query['id']) && isset($menuItem->query['id'])
&& $menuItem->query['id'] == intval($query['id'])) {
unset($query['view']);
if (isset($query['catid'])) {
unset($query['catid']);
}
unset($query['id']);
return $segments;
}
if ($view == 'article' || $view == 'portfolio') {
if (!$menuItemGiven) {
$segments[] = $view;
}
unset($query['view']);
// Since v2.3.1
if($removeCategory && $queryIdGiven && $view == 'portfolio'){
$segments[] = $params -> get('sef_portfolio_prefix','category');
}
if ($view == 'article') {
if (isset($query['id']) && isset($query['catid']) && $query['catid']) {
$catid = $query['catid'];
// Make sure we have the id and the alias
if (strpos($query['id'], ':') === false) {
$db = JFactory::getDbo();
$aquery = $db->setQuery($db->getQuery(true)
->select('alias')
->from('#__tz_portfolio_plus_content')
->where('id=' . (int)$query['id'])
);
$alias = $db->loadResult();
$query['id'] = $query['id'] . ':' . $alias;
}
} else {
// we should have these two set for this view. If we don't, it is an error
return $segments;
}
} else {
// Build tag router
$this -> _getTagSegment($query, $segments);
// Build user router
$this -> _getUserSegment($query, $segments);
if (isset($query['id'])) {
$catid = $query['id'];
} else {
// we should have id set for this view. If we don't, it is an error
return $segments;
}
}
if ($menuItemGiven) {
if (isset($menuItem->query['id'])) {
$mCatid = $menuItem->query['id'];
} else {
$catids = $menuItem->params->get('catid');
if ($catids) {
$mCatid = $catids;
} else {
$mCatid = 0;
}
}
} else {
$mCatid = 0;
}
$categories = JCategories::getInstance('TZ_Portfolio_Plus');
$category = $categories->get($catid);
if (!$category) {
// we couldn't find the category we were given. Bail.
return $segments;
}
$array = array();
if($params -> get('sef_use_parent_category',1)) {
$path = array_reverse($category->getPath());
foreach ($path as $id) {
list($tmp, $id) = explode(':', $id, 2);
if(!$removeCategory || ($removeCategory && $view != 'article')){ /* Since v2.3.1 */
if($params -> get('sef_remove_category_id', 0)) {
$array[] = $id;
}else{
$array[] = (int) $tmp.':'.$id;
}
}
}
$array = array_reverse($array);
}else{
if(!$removeCategory || ($removeCategory && $view != 'article')){ /* Since v2.3.1 */
if($params -> get('sef_remove_category_id', 0)){
$array[] = $category->alias;
}else {
$array[] = $category -> id.':'.$category -> alias;
}
}
}
$segments = array_merge($segments, $array);
if ($view == 'article') {
$sefArticleSep = $params -> get('sef_article_separator','slash_revert_id');
list($id, $alias) = explode(':', $query['id'], 2);
if($sefArticleSep == 'slash') {
if($params -> get('sef_use_article_id',1)){
$segments[] = $id;
}
if($params -> get('sef_use_article_alias',1)
|| (!$params -> get('sef_use_article_id',1) && !$params -> get('sef_use_article_alias',1))) {
$segments[] = $alias;
}
}elseif($sefArticleSep == 'slash_revert_id'){
if($params -> get('sef_use_article_alias',1)
|| (!$params -> get('sef_use_article_id',1) && !$params -> get('sef_use_article_alias',1))) {
$segments[] = $alias;
}
if($params -> get('sef_use_article_id',1)) {
$segments[] = $id;
}
}else{
if($params -> get('sef_use_article_id',1) && $params -> get('sef_use_article_alias',1)){
$segments[] = $id.':'.$alias;
}elseif($params -> get('sef_use_article_id',1)) {
$segments[] = $id;
}elseif($params -> get('sef_use_article_alias',1)
|| (!$params -> get('sef_use_article_id',1) && !$params -> get('sef_use_article_alias',1))){
$segments[] = $alias;
}
}
}
unset($query['id']);
unset($query['catid']);
}
if ($view == 'tags') {
$segments[] = $params -> get('sef_tags_prefix','tag');
// Make sure we have the id and the alias
if (strpos($query['id'], ':') == false) {
$db = JFactory::getDbo();
$aquery = $db->setQuery($db->getQuery(true)
->select('alias')
->from('#__tz_portfolio_plus_tags')
->where('id=' . (int)$query['id'])
);
$alias = null;
if($params -> get('sef_use_tag_alias',1)) {
if(!$alias = $db->loadResult()){
$alias = null;
}
}
if($params -> get('sef_tag_separator','slash_revert_id') == 'slash_revert_id'){
if($alias && !empty($alias)) {
$segments[] = $alias;
}
$segments[] = (int) $query['id'];
}elseif($params -> get('sef_tag_separator','slash_revert_id') == 'slash'){
$segments[] = $query['id'];
if($alias && !empty($alias)) {
$segments[] = $alias;
}
}else{
$segments[] = ((int)$query['id']).(($alias && !empty($alias))?':'.$alias:'');
}
}else{
list($id, $alias) = explode(':',$query['id']);
if($params -> get('sef_tag_separator','slash_revert_id') == 'slash_revert_id'){
if($params -> get('sef_use_tag_alias',1)) {
$segments[] = $alias;
}
$segments[] = $id;
}elseif($params -> get('sef_tag_separator','slash_revert_id') == 'slash'){
$segments[] = $id;
if($params -> get('sef_use_tag_alias',1)) {
$segments[] = $alias;
}
}else{
if($params -> get('sef_use_tag_alias',1)) {
$segments[] = $query['id'];
}else{
$segments[] = $id;
}
}
}
unset($query['view']);
unset($query['id']);
}
if ($view == 'users') {
$item = $menu->getActive();
if (isset($query['id'])) {
$currentId = $query['id'];
}
$userMenuItemGiven = false;
if (isset($menuItem)) {
if (isset($menuItem->query)) {
$query2 = $menuItem->query;
if (isset($query2['id'])) {
$userMenuItemGiven = true;
}
}
}
if (!$userMenuItemGiven) {
if (isset($query['view'])) {
$segments[] = $params -> get('sef_users_prefix','user');
unset($query['view']);
}
if (isset($query['id'])) {
// Make sure we have the id and the name
if (strpos($query['id'], ':') == false) {
$db = JFactory::getDbo();
$aquery = $db->setQuery($db->getQuery(true)
->select('name')
->from('#__users')
->where('id=' . (int)$query['id'])
);
$alias = null;
if($params -> get('sef_use_user_alias',1)) {
$alias = ApplicationHelper::stringURLSafe($db->loadResult());
}
if($params -> get('sef_user_separator','slash_revert_id') == 'slash_revert_id'){
if($alias && !empty($alias)) {
$segments[] = $alias;
}
$segments[] = $query['id'];
}elseif($params -> get('sef_user_separator','slash_revert_id') == 'slash'){
$segments[] = $query['id'];
if($alias && !empty($alias)) {
$segments[] = $alias;
}
}else{
$segments[] = (int)$query['id'].(($alias && !empty($alias))?':'.$alias:'');
}
}else{
$segments[] = $query['id'];
}
unset($query['id']);
}
}
unset($query['view']);
unset($query['id']);
}
if ($view == 'date') {
if ($view != $params -> get('sef_date_prefix','date')) {
$segments[] = $params -> get('sef_date_prefix','date');
}else {
$segments[] = $view;
}
unset($query['view']);
$bool = false;
if (isset($query['year']) && isset($query['month'])) {
$bool = true;
}
if (isset($query['year'])) {
if ($menuItemGiven) {
$segments[] = $query['year'];
unset($query['year']);
}
}
if ($bool) {
if ($menuItemGiven) {
$segments[] = $query['month'];
unset($query['month']);
}
}
}
if($view == 'search'){
if($menuItemGiven && isset($menuItem->query['view']) && $menuItem->query['view'] != $view){
$segments[] = $query['view'];
}elseif(!$menuItemGiven){
$segments[] = $view;
}
unset($query['view']);
return $segments;
}
if($view == 'myarticles'){
if($menuItemGiven && isset($menuItem->query['view']) && $menuItem->query['view'] != $view){
$segments[] = $query['view'];
}elseif(!$menuItemGiven){
$segments[] = $view;
}
unset($query['view']);
return $segments;
}
if($view == 'addon'){
if($menuItemGiven){
$segments[] = $query['view'];
}else{
$segments[] = $view;
}
unset($query['view']);
return $segments;
}
// if the layout is specified and it is the same as the layout in the menu item, we
// unset it so it doesn't go into the query string.
if (isset($query['layout'])) {
if ($menuItemGiven && isset($menuItem->query['layout'])) {
if ($query['layout'] == $menuItem->query['layout']) {
unset($query['layout']);
}
} else {
if ($query['layout'] == 'default') {
unset($query['layout']);
}
}
}
$total = count($segments);
for ($i = 0; $i < $total; $i++)
{
$segments[$i] = str_replace(':', '-', $segments[$i]);
}
return $segments;
}
protected function notSefBuild(&$query){
$segments = array();
// get a menu item based on Itemid or currently active
$app = JFactory::getApplication();
$menu = $app->getMenu();
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
$advanced = $params->get('sef_advanced_link', 0);
// we need a menu item. Either the one specified in the query, or the current active one if none specified
if (empty($query['Itemid'])) {
$menuItem = $menu->getActive();
$menuItemGiven = false;
} else {
$menuItem = $menu->getItem((int)$query['Itemid']);
$menuItemGiven = true;
}
if (isset($query['view'])) {
$view = $query['view'];
} else {
// we need to have a view in the query or it is an invalid URL
return $segments;
}
// are we dealing with an article or category that is attached to a menu item?
if (($menuItem instanceof stdClass && isset($menuItem->query['view'])) && $menuItem->query['view'] == $query['view'] && isset($query['id']) && isset($menuItem->query['id']) && $menuItem->query['id'] == intval($query['id'])) {
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
unset($query['view']);
if (isset($query['catid'])) {
unset($query['catid']);
}
unset($query['id']);
return $segments;
}
if ($view == 'article' || $view == 'portfolio') {
if (!$menuItemGiven) {
$segments[] = $view;
}
unset($query['view']);
if ($view == 'article') {
if (isset($query['id']) && isset($query['catid']) && $query['catid']) {
$catid = $query['catid'];
// Make sure we have the id and the alias
if (strpos($query['id'], ':') === false) {
$db = JFactory::getDbo();
$aquery = $db->setQuery($db->getQuery(true)
->select('alias')
->from('#__tz_portfolio_plus_content')
->where('id=' . (int)$query['id'])
);
$alias = $db->loadResult();
$query['id'] = $query['id'] . ':' . $alias;
}
} else {
// we should have these two set for this view. If we don't, it is an error
return $segments;
}
} else {
if (isset($query['id'])) {
$catid = $query['id'];
} else {
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
// we should have id set for this view. If we don't, it is an error
return $segments;
}
}
if ($menuItemGiven) {
if (isset($menuItem->query['id'])) {
$mCatid = $menuItem->query['id'];
} else {
$catids = $menuItem->params->get('catid');
if ($catids) {
$mCatid = $catids;
} else {
$mCatid = 0;
}
}
} else {
$mCatid = 0;
}
$categories = JCategories::getInstance('TZ_Portfolio_Plus');
$category = $categories->get($catid);
if (!$category) {
// we couldn't find the category we were given. Bail.
return $segments;
}
$path = array_reverse($category->getPath());
$array = array();
foreach ($path as $id) {
if (isset($mCatid) && is_array($mCatid)) {
$chkCatidk = false;
for ($i = 0; $i < count($mCatid); $i++) {
if ((int)$id == (int)$mCatid[$i]) {
$chkCatidk = true;
break;
}
}
if ($chkCatidk) break;
} elseif ((int)$id == (int)$mCatid) {
break;
}
list($tmp, $id) = explode(':', $id, 2);
$array[] = $id;
}
$array = array_reverse($array);
if (!$advanced && count($array)) {
$array[0] = (int)$catid . ':' . $array[0];
}
$segments = array_merge($segments, $array);
if ($view == 'article') {
if ($advanced) {
list($alias, $id) = explode(':', $query['id'], 2);
} else {
$id = $query['id'];
}
$segments[] = $id;
}
unset($query['id']);
unset($query['catid']);
}
if ($view == 'tags') {
$segments[] = $view;
// Make sure we have the id and the alias
if (strpos($query['id'], ':') == false) {
$db = JFactory::getDbo();
$aquery = $db->setQuery($db->getQuery(true)
->select('alias')
->from('#__tz_portfolio_plus_tags')
->where('id=' . (int)$query['id'])
);
$alias = ApplicationHelper::stringURLSafe($db->loadResult());
$segments[] = (int)$query['id'].':'.$alias;
}else {
$segments[] = $query['id'];
}
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
unset($query['view']);
unset($query['id']);
}
if ($view == 'users') {
$item = $menu->getActive();
if (isset($query['id'])) {
$currentId = $query['id'];
}
// Make sure we have the id and the name
if (strpos($query['id'], ':') == false) {
$db = JFactory::getDbo();
$aquery = $db->setQuery($db->getQuery(true)
->select('name')
->from('#__users')
->where('id=' . (int)$query['id'])
);
$alias = ApplicationHelper::stringURLSafe($db->loadResult());
$query['id'] = $query['id'] . ':' . $alias;
}
$userMenuItemGiven = false;
if (isset($menuItem)) {
if (isset($menuItem->query)) {
$query2 = $menuItem->query;
if (isset($query2['id'])) {
$userMenuItemGiven = true;
}
}
}
if (!$userMenuItemGiven) {
if (isset($query['view'])) {
$segments[] = $view;
unset($query['view']);
}
if (isset($query['id'])) {
$segments[] = $query['id'];
unset($query['id']);
}
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
return $segments;
}
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
unset($query['view']);
unset($query['id']);
return $segments;
}
if ($view == 'date') {
if (!$menuItemGiven) {
$segments[] = $view;
unset($query['view']);
}
if ($view == 'date' && isset($query['view'])) {
$segments[] = $view;
unset($query['view']);
}
$bool = false;
if (isset($query['year']) && isset($query['month'])) {
$bool = true;
}
if (isset($query['year'])) {
if ($menuItemGiven) {
$segments[] = $query['year'];
unset($query['year']);
}
}
if ($bool) {
if ($menuItemGiven) {
$segments[] = $query['month'];
unset($query['month']);
}
}
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
}
if($view == 'search'){
if($menuItemGiven){
$segments[] = $query['view'];
}else{
$segments[] = $view;
}
unset($query['view']);
return $segments;
}
// if the layout is specified and it is the same as the layout in the menu item, we
// unset it so it doesn't go into the query string.
if (isset($query['layout'])) {
if ($menuItemGiven && isset($menuItem->query['layout'])) {
if ($query['layout'] == $menuItem->query['layout']) {
unset($query['layout']);
}
} else {
if ($query['layout'] == 'default') {
unset($query['layout']);
}
}
}
if (isset($query['char'])) {
$segments[] = $query['char'];
unset($query['char']);
}
$total = count($segments);
for ($i = 0; $i < $total; $i++)
{
$segments[$i] = str_replace(':', '-', $segments[$i]);
}
return $segments;
}
protected function _getTagSegment(&$query, &$segments){
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
if(isset($query['tid'])){
$segments[] = $params -> get('sef_tags_prefix', 'tag');
$db = JFactory::getDbo();
$aquery = $db -> getQuery(true);
$aquery -> select('alias');
$aquery -> from('#__tz_portfolio_plus_tags');
$aquery -> where('id='.(int) $query['tid']);
$db -> setQuery($aquery);
$alias = '';
if($params -> get('sef_use_tag_alias',1)) {
$alias = $db->loadResult();
}
switch ($params -> get('sef_tag_separator', 'slash_revert_id')){
default:
case 'dash':
$segments[] = $query['tid'].($alias?':'.$alias:'');
break;
case 'slash':
$segments[] = $query['tid'];
$segments[] = $alias;
break;
case 'slash_revert_id':
$segments[] = $alias;
$segments[] = $query['tid'];
break;
}
unset($query['tid']);
}
}
protected function _getUserSegment(&$query, &$segments){
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
if(isset($query['uid'])){
$uid = $query['uid'];
$segments[] = $params -> get('sef_users_prefix', 'user');
$user = JFactory::getUser($uid);
$alias = '';
if($params -> get('sef_use_user_alias',1)) {
$alias = ApplicationHelper::stringURLSafe($user -> name);
}
switch ($params -> get('sef_user_separator', 'slash_revert_id')){
default:
case 'dash':
$segments[] = $uid.($alias?':'.$alias:'');
break;
case 'slash':
$segments[] = $uid;
$segments[] = $alias;
break;
case 'slash_revert_id':
$segments[] = $alias;
$segments[] = $uid;
break;
}
unset($query['uid']);
}
}
protected function getCategoryByAlias($alias){
$storeId = md5(__METHOD__.':'.$alias);
if(isset($this -> cache[$storeId])){
return $this -> cache[$storeId];
}
if(!$alias){
return false;
}
$db = JFactory::getDbo();
$query = $db -> getQuery(true);
$query -> select('*');
$query -> from('#__tz_portfolio_plus_categories');
$query -> where('alias='.$db -> quote($alias));
$query -> where('extension='.$db -> quote('com_tz_portfolio_plus'));
$db -> setQuery($query);
if($data = $db -> loadObject()){
$this -> cache[$storeId] = $data;
return $data;
}
return false;
}
protected function sefParse(&$segments, $addOnVars = false){
$vars = array();
$total = count($segments);
for ($i = 0; $i < $total; $i++)
{
$segments[$i] = preg_replace('/-/', ':', $segments[$i], 1);
}
//Get the active menu item.
$db = JFactory::getDBO();
$app = JFactory::getApplication();
$menu = $app->getMenu();
$item = $menu->getActive();
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
$advanced = $params->get('sef_advanced_link', 0);
$removeCategory = $params -> get('sef_remove_category',1);
// Standard routing for articles. If we don't pick up an Itemid then we get the view from the segments
// the first segment is the view and the last segment is the id of the article or category.
if (!isset($item)) {
$vars['view'] = $segments[0];
unset($segments[0]);
$segments = array_values($segments);
}
// Count route segments
$count = count($segments);
// if there is only one segment, then it points to either an article or a category
// we test it first to see if it is a category. If the id and alias match a category
// then we assume it is a category. If they don't we assume it is an article
if ($count == 1) {
// if (strlen($segments[0]) == 1) {
// $vars['view'] = $item->query["view"];
// if (isset($item->query['id'])) {
// $vars['id'] = $item->query["id"];
// }
// return $vars;
// }
if($segments[0] == 'search'){
$vars['view'] = 'search';
return $vars;
}
if($segments[0] == $params -> get('sef_date_prefix','date')){
$vars['view'] = 'date';
return $vars;
}
if($addOnVars && $segments[0] == 'addon'){
$vars['view'] = 'addon';
return $vars;
}
// we check to see if an alias is given. If not, we assume it is an article
// Code here remove from v2.0.5
}
// if there was more than one segment, then we can determine where the URL points to
// because the first segment will have the target category id prepended to it. If the
// last segment has a number prepended, it is an article, otherwise, it is a category.
if (!$advanced && $count) {
if ($removeCategory && $segments[0] == $params -> get('sef_portfolio_prefix','category')) {
$vars['view'] = 'portfolio';
}
if ($segments[0] == $params -> get('sef_tags_prefix','tag')) {
$vars['view'] = 'portfolio';
if($params -> get('sef_tag_separator','slash_revert_id') == 'slash_revert_id'
|| $params -> get('sef_tag_separator','slash_revert_id') == 'dash'){
$vars['tid'] = $segments[count($segments) - 1];
}else{
if($params -> get('sef_use_tag_alias',1)){
$vars['tid'] = $segments[count($segments) - 2];
}else{
$vars['tid'] = (int) $segments[count($segments) - 1];
}
}
return $vars;
}
if ($segments[0] == $params -> get('sef_users_prefix','user')) {
$vars['view'] = 'portfolio';
if($params -> get('sef_user_separator','slash_revert_id') == 'slash_revert_id'
|| $params -> get('sef_user_separator','slash_revert_id') == 'dash'){
if($params -> get('sef_use_user_alias',1)) {
$vars['uid'] = $segments[count($segments) - 1];
}else{
$vars['uid'] = (int) $segments[count($segments) - 1];
}
}else{
if($params -> get('sef_use_user_alias',1)){
$vars['uid'] = $segments[count($segments) - 2];
}else{
$vars['uid'] = (int) $segments[count($segments) - 1];
}
}
return $vars;
}
if ($segments[0] == $params -> get('sef_date_prefix','date')) {
$vars['view'] = 'date';
if (count($segments) > 1) {
if (count($segments) > 2) {
$vars['year'] = $segments[1];
$vars['month'] = $segments[2];
}
}
return $vars;
}
$temp = ($item && isset($item -> params))?$item->params:(new Registry());
$menuParams = clone($params);
$menuParams->merge($temp);
$cat_id = (int)$segments[0];
if ($segments[0] == $menuParams->get('view_router_name', 'item')) {
$cat_id = (int)$segments[1];
}
$sefArticleSep = $params -> get('sef_article_separator','slash_revert_id');
if($sefArticleSep == 'dash' || $sefArticleSep == 'slash_revert_id') {
if(isset($segments[$count - 1])) {
$article_id = (int)$segments[$count - 1];
}
}else{
if(isset($segments[$count - 2])) {
$article_id = (int)$segments[$count - 2];
}
}
$lastSegment = end($segments);
if(!is_numeric($lastSegment)){
$lastId = null;
$catAlias = null;
if($params -> get('sef_use_article_id', 1)
|| !$params -> get('sef_remove_category_id', 0)){
$lastId = (int) $lastSegment;
}
if(!$lastId) {
$lastAlias = preg_replace('/:/', '-', $lastSegment, 1);
if(isset($segments[$count - 2])) {
if($params -> get('sef_remove_category_id', 0)) {
$catAlias = preg_replace('/:/', '-', $segments[$count - 2], 1);
}else{
if(strpos($segments[$count - 2], ':') != false) {
list($catId, $catAlias) = explode(':', $segments[$count - 2]);
}
}
}
}else{
$lastAlias = preg_replace('/'.$lastId.':/', '', $lastSegment, 1);
if(isset($segments[$count - 1])) {
if($params -> get('sef_remove_category_id', 0)) {
$catAlias = preg_replace('/:/', '-', $segments[$count - 1], 1);
}else {
if(strpos($segments[$count - 1], ':') != false) {
list($catId, $catAlias) = explode(':', $segments[$count - 1]);
}
}
}
}
// Get category by last segment
if((!$removeCategory || (isset($vars['view']) && $vars['view'] == 'portfolio'))
&& $lastCategory = $this -> getCategoryByAlias($lastAlias)){
if(!$removeCategory) {
$vars['view'] = 'portfolio';
}
$vars['id'] = $lastCategory -> id.':'.$lastCategory -> alias;
return $vars;
}
$db = JFactory::getDbo();
$query = $db -> getQuery(true);
$query -> select('c.*');
$query -> from('#__tz_portfolio_plus_content AS c');
$query -> join('INNER', '#__tz_portfolio_plus_content_category_map AS m ON m.contentid = c.id');
$query -> join('INNER', '#__tz_portfolio_plus_categories AS cc ON cc.id = m.catid AND m.main = 1');
$query -> where('c.alias='.$db -> quote($lastAlias));
$db -> setQuery($query);
if($_article = $db -> loadObject()){
$vars['view'] = 'article';
$vars['id'] = $_article -> id.':'.$_article -> alias;
// Get category by alias
if($_category = $this -> getCategoryByAlias($catAlias)){
$vars['catid'] = $_category -> id;
}
return $vars;
}
}
else{
$article_id = (int) $lastSegment;
}
if((!$params -> get('sef_use_article_id',1) && $params -> get('sef_use_article_alias',1))
|| (!$params -> get('sef_use_article_id',1) && !$params -> get('sef_use_article_alias',1))) {
$article_id = (int)$segments[$count - 1];
$alias = $segments[$count - 1];
$alias = str_replace(':', '-', $alias);
$query = 'SELECT c.id FROM #__tz_portfolio_plus_content AS c'
.' LEFT JOIN #__tz_portfolio_plus_content_category_map AS m ON m.contentid = c.id AND m.main = 1'
.' WHERE m.catid = ' . $cat_id . ' AND c.alias = ' . $db->Quote($alias);
$db->setQuery($query);
if ($_cid = $db->loadResult()) {
$article_id = (int)$_cid;
}
}
if ($article_id > 0) {
$vars['view'] = 'article';
$vars['catid'] = $cat_id;
$vars['id'] = $article_id;
} else {
$vars['view'] = 'portfolio';
$vars['id'] = $cat_id;
}
return $vars;
}
// we get the category id from the menu item and search from there
if($item) {
$id = $item->query['id'];
if ($item->query['view'] == 'portfolio') {
$category = JCategories::getInstance('TZ_Portfolio_Plus')->get($id);
if (!$category) {
JError::raiseError(404, JText::_('COM_TZ_PORTFOLIO_PLUS_ERROR_PARENT_CATEGORY_NOT_FOUND'));
return $vars;
}
$categories = $category->getChildren();
$vars['catid'] = $id;
}
$vars['id'] = $id;
}
$found = 0;
foreach ($segments as $segment) {
$segment = str_replace(':', '-', $segment);
if(isset($categories) && $categories){
foreach ($categories as $category) {
if ($category->alias == $segment) {
$vars['id'] = $category->id;
$vars['catid'] = $category->id;
$vars['view'] = 'portfolio';
$categories = $category->getChildren();
$found = 1;
break;
}
}
}
if ($found == 0) {
if ($advanced) {
$db = JFactory::getDBO();
$query = 'SELECT c.id FROM #__tz_portfolio_plus_content AS c'
.' LEFT JOIN #__tz_portfolio_plus_content_category_map AS m ON m.contenti = c.id AND m.main = 1'
.' WHERE m.catid = ' . $vars['catid'] . ' AND c.alias = ' . $db->Quote($segment);
$db->setQuery($query);
$cid = $db->loadResult();
} else {
$cid = $segment;
}
$vars['id'] = $cid;
if ($item && $item->query['view'] == 'date' && $count != 1) {
$vars['year'] = $count >= 2 ? $segments[$count - 2] : null;
$vars['month'] = $segments[$count - 1];
$vars['view'] = 'date';
} else {
$vars['view'] = 'article';
}
}
$found = 0;
}
if(!isset($vars['view'])){
$vars['view'] = $item?$item -> query['view']:'';
}
return $vars;
}
protected function notSefParse(&$segments, $addOnVars = false){
$total = count($segments);
$vars = array();
for ($i = 0; $i < $total; $i++)
{
$segments[$i] = preg_replace('/-/', ':', $segments[$i], 1);
}
//Get the active menu item.
$app = JFactory::getApplication();
$menu = $app->getMenu();
$item = $menu->getActive();
$params = JComponentHelper::getParams('com_tz_portfolio_plus');
$advanced = $params->get('sef_advanced_link', 0);
$db = JFactory::getDBO();
// Count route segments
$count = count($segments);
// Standard routing for articles. If we don't pick up an Itemid then we get the view from the segments
// the first segment is the view and the last segment is the id of the article or category.
if (!isset($item)) {
$vars['view'] = $segments[0];
if ($vars['view'] == 'users') {
if (!is_numeric($segments[$count - 1])) {
$vars['created_by'] = (int)$segments[$count - 1];
} elseif (strlen($segments[$count - 1]) == 1) {
$vars['char'] = $segments[$count - 1];
}
} else {
if (isset($segments[1]) && strlen($segments[1]) == 1) {
$vars['char'] = $segments[1];
}
$vars['id'] = $segments[$count - 1];
}
return $vars;
}
// if there is only one segment, then it points to either an article or a category
// we test it first to see if it is a category. If the id and alias match a category
// then we assume it is a category. If they don't we assume it is an article
if ($count == 1) {
if (strlen($segments[0]) == 1) {
$vars['char'] = $segments[0];
$vars['view'] = $item->query["view"];
if (isset($item->query['id'])) {
$vars['id'] = $item->query["id"];
}
return $vars;
}
if($segments[0] == 'search'){
$vars['view'] = 'search';
return $vars;
}
if($addOnVars && $segments[0] == 'addon'){
$vars['view'] = 'addon';
return $vars;
}
// we check to see if an alias is given. If not, we assume it is an article
//Old
if (strpos($segments[0], ':') === false) {
$vars['view'] = 'article';
$vars['id'] = (int)$segments[0];
return $vars;
}
list($id, $alias) = explode(':', $segments[0], 2);
// first we check if it is a category
$category = JCategories::getInstance('TZ_Portfolio_Plus')->get($id);
if ($category && $category->alias == $alias) {
$vars['view'] = 'portfolio';
$vars['id'] = $id;
return $vars;
} else {
$query = 'SELECT alias, catid FROM #__content WHERE id = ' . (int)$id;
$db->setQuery($query);
$article = $db->loadObject();
if ($article) {
if ($article->alias == $alias) {
$vars['view'] = 'article';
$vars['catid'] = (int)$article->catid;
$vars['id'] = (int)$id;
return $vars;
}
}
}
}
// if there was more than one segment, then we can determine where the URL points to
// because the first segment will have the target category id prepended to it. If the
// last segment has a number prepended, it is an article, otherwise, it is a category.
if (!$advanced) {
if ($segments[0] == 'tags') {
$vars['view'] = $segments[0];
if (isset($segments[count($segments) - 1])) {
$vars['id'] = (int)$segments[count($segments) - 1];
} else {
$vars['id'] = (int)$segments[count($segments) - 1];
}
return $vars;
}
if ($segments[0] == 'users') {
$vars['view'] = $segments[0];
if (is_numeric($segments[count($segments) - 1])) {
$vars['id'] = $segments[count($segments) - 1];
} else {
$vars['id'] = (int)$segments[count($segments) - 1];
}
return $vars;
}
if ($segments[0] == 'date') {
$vars['view'] = $segments[0];
if (count($segments) > 1) {
if (count($segments) > 2) {
$vars['year'] = $segments[1];
$vars['month'] = $segments[2];
}
if ((isset($vars['year']) && isset($vars['month']) && count($segments) > 3) || (count($segments) < 3))
$vars['char'] = $segments[count($segments) - 1];
}
return $vars;
}
$temp = $item->params;
$menuParams = clone($params);
$menuParams->merge($temp);
$cat_id = (int)$segments[0];
$article_id = (int)$segments[$count - 1];
if ($article_id > 0) {
$vars['view'] = 'article';
$vars['catid'] = $cat_id;
$vars['id'] = $article_id;
} else {
$vars['view'] = 'portfolio';
$vars['id'] = $cat_id;
}
if (isset($segments[$count - 1]) && is_string($segments[$count - 1]) && strlen($segments[$count - 1]) == 1) {
$vars['char'] = $segments[$count - 1];
}
return $vars;
}
// we get the category id from the menu item and search from there
$id = $item->query['id'];
if($item -> query['view'] == 'portfolio') {
$category = JCategories::getInstance('TZ_Portfolio_Plus')->get($id);
if (!$category) {
JError::raiseError(404, JText::_('COM_TZ_PORTFOLIO_PLUS_ERROR_PARENT_CATEGORY_NOT_FOUND'));
return $vars;
}
$categories = $category->getChildren();
$vars['catid'] = $id;
}
$vars['id'] = $id;
$found = 0;
foreach ($segments as $segment) {
$segment = str_replace(':', '-', $segment);
if(isset($categories) && $categories){
foreach ($categories as $category) {
if ($category->alias == $segment) {
$vars['id'] = $category->id;
$vars['catid'] = $category->id;
$vars['view'] = 'portfolio';
$categories = $category->getChildren();
$found = 1;
break;
}
}
}
if ($found == 0) {
if ($advanced) {
$db = JFactory::getDBO();
$query = 'SELECT c.id FROM #__tz_portfolio_plus_content AS c'
.' LEFT JOIN #__tz_portfolio_plus_content_category_map AS m ON m.contentid = c.id AND m.main = 1'
.' WHERE m.catid = ' . $vars['catid'] . ' AND c.alias = ' . $db->Quote($segment);
$db->setQuery($query);
$cid = $db->loadResult();
} else {
$cid = $segment;
}
$vars['id'] = $cid;
if ($item->query['view'] == 'date' && $count != 1) {
$vars['year'] = $count >= 2 ? $segments[$count - 2] : null;
$vars['month'] = $segments[$count - 1];
$vars['view'] = 'date';
} else {
$vars['view'] = 'article';
}
}
$found = 0;
}
if(!isset($vars['view'])){
$vars['view'] = 'article';
}
return $vars;
}
}
/**
* Proxy methods for building urls
*
* @since 2.3.4
*/
function TZ_Portfolio_PlusBuildRoute(&$query)
{
$router = new TZ_Portfolio_PlusRouter();
return $router->build($query);
}
/**
* Proxy methods for parsing urls
*
* @since 2.3.4
*/
function TZ_Portfolio_PlusParseRoute($segments)
{
$router = new TZ_Portfolio_PlusRouter();
return $router->parse($segments);
}