Created
February 2, 2013 08:58
-
-
Save proweb/4696660 to your computer and use it in GitHub Desktop.
K2 Router (without "item" in URL)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @version $Id: router.php 1618 2012-09-21 11:23:08Z lefteris.kavadas $ | |
* @package K2 | |
* @author JoomlaWorks http://www.joomlaworks.net | |
* @copyright Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved. | |
* @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html | |
*/ | |
// no direct access | |
defined('_JEXEC') or die ; | |
function K2BuildRoute(&$query) | |
{ | |
$site = JFactory::getApplication(); | |
if($site->isSite()){ | |
$items= array(); | |
$items= getK2ItemsByAlias(); | |
}; | |
$segments = array(); | |
$application = JFactory::getApplication(); | |
$menu = $application->getMenu(); | |
if (empty($query['Itemid'])) | |
{ | |
$menuItem = $menu->getActive(); | |
} | |
else | |
{ | |
$menuItem = $menu->getItem($query['Itemid']); | |
} | |
$mView = ( empty($menuItem->query['view'])) ? null : $menuItem->query['view']; | |
$mTask = ( empty($menuItem->query['task'])) ? null : $menuItem->query['task']; | |
$mId = ( empty($menuItem->query['id'])) ? null : $menuItem->query['id']; | |
$mTag = ( empty($menuItem->query['tag'])) ? null : $menuItem->query['tag']; | |
if (isset($query['layout'])) | |
{ | |
unset($query['layout']); | |
} | |
if ($mView == @$query['view'] && $mTask == @$query['task'] && $mId == @intval($query['id']) && @intval($query['id']) > 0) | |
{ | |
unset($query['view']); | |
unset($query['task']); | |
unset($query['id']); | |
} | |
if ($mView == @$query['view'] && $mTask == @$query['task'] && $mTag == @$query['tag'] && isset($query['tag'])) | |
{ | |
unset($query['view']); | |
unset($query['task']); | |
unset($query['tag']); | |
} | |
if (isset($query['view'])) | |
{ | |
$view = $query['view']; | |
$segments[] = $view; | |
unset($query['view']); | |
} | |
if (@ isset($query['task'])) | |
{ | |
$task = $query['task']; | |
$segments[] = $task; | |
unset($query['task']); | |
} | |
if (isset($query['id'])) | |
{ | |
$id = $query['id']; | |
$segments[] = $id; | |
unset($query['id']); | |
} | |
if (isset($query['cid'])) | |
{ | |
$cid = $query['cid']; | |
$segments[] = $cid; | |
unset($query['cid']); | |
} | |
if (isset($query['tag'])) | |
{ | |
$tag = $query['tag']; | |
$segments[] = $tag; | |
unset($query['tag']); | |
} | |
if (isset($query['year'])) | |
{ | |
$year = $query['year']; | |
$segments[] = $year; | |
unset($query['year']); | |
} | |
if (isset($query['month'])) | |
{ | |
$month = $query['month']; | |
$segments[] = $month; | |
unset($query['month']); | |
} | |
if (isset($query['day'])) | |
{ | |
$day = $query['day']; | |
$segments[] = $day; | |
unset($query['day']); | |
} | |
if (isset($query['task'])) | |
{ | |
$task = $query['task']; | |
$segments[] = $task; | |
unset($query['task']); | |
} | |
if($site->isSite()){ | |
if(isset($segments[0])){ | |
$keys = array(); | |
if ($segments[0] == 'itemlist') | |
{ | |
switch($segments[1]) | |
{ | |
case 'category' : | |
if (isset($segments[2]) && is_array($items) && isset($items['categories']) && is_array($items['categories'])){ | |
$catid = ''; | |
if(JString::strpos($segments[2],':') !== false){ | |
list($catid,$trash) = explode(':',$segments[2],2); | |
$catid = (int)$catid; | |
} else { | |
$catid = intval($segments[2]); | |
} | |
if(!empty($catid) && isset($items['categories'][$catid]) && !empty($items['categories'][$catid]) && !in_array($items['categories'][$catid],$items['items']) && !in_array($items['categories'][$catid],array('itemlist','item','tag','comments','reportSpammer'))){ | |
$segments = array(); | |
$keys = array_keys($items['categories'],$items['categories'][$catid]); | |
if(sizeof($keys) > 1){ | |
$segments[] = $catid.':'.$items['categories'][$catid]; | |
} else { | |
$segments[] = $items['categories'][$catid]; | |
} | |
} | |
} | |
break; | |
case 'tag' : | |
if(isset($items['tags']) && is_array($items['tags']) && sizeof($items['tags']) && !empty($segments[2])){ | |
$languageFilter = JFactory::getLanguage(); | |
$tag = $languageFilter->transliterate($segments[2]); | |
$tag = JApplication::stringURLSafe($tag); | |
if(in_array($tag,$items['tags'])){ | |
$segments = array(); | |
$segments[0] = 'tag'; | |
$segments[1] = $tag; | |
} | |
}; | |
break; | |
} | |
} | |
else if ($segments[0] == 'item') | |
{ | |
if($segments[1] != 'edit' && $segments[1] != 'download'){ | |
if (isset($segments[1]) && is_array($items) && isset($items['items']) && is_array($items['items'])){ | |
$itemid = ''; | |
if(JString::strpos($segments[1],':') !== false){ | |
list($itemid,$trash) = explode(':',$segments[1],2); | |
$itemid = (int)$itemid; | |
} else { | |
$itemid = intval($segments[1]); | |
} | |
if(!empty($itemid) && isset($items['items'][$itemid]) && !empty($items['items'][$itemid]) && !in_array($items['items'][$itemid],array('itemlist','item','tag','comments','reportSpammer'))){ | |
$segments = array(); | |
$keys = array_keys($items['items'],$items['items'][$itemid]); | |
if(sizeof($keys) > 1){ | |
$segments[] = $itemid.':'.$items['items'][$itemid]; | |
} else { | |
$segments[] = $items['items'][$itemid]; | |
} | |
} | |
} | |
}; | |
} | |
} | |
} | |
return $segments; | |
} | |
function getK2ItemsByAlias(){ | |
static $items; | |
static $searched; | |
if(!isset($searched) || empty($searched)){ | |
$items = array('items'=>array(),'categories'=>array(),'tags'=>array(),'tags_xref'=>array()); | |
$user = JFactory::getUser(); | |
$aid = $user->get('aid'); | |
$db = JFactory::getDBO(); | |
$jnow = JFactory::getDate(); | |
$now = $jnow->toSql(); | |
$nullDate = $db->getNullDate(); | |
$mainframe = JFactory::getApplication(); | |
$languageFilter = $mainframe->getLanguageFilter(); | |
$task = JRequest::getCmd('task'); | |
JLoader::register('K2HelperUtilities', JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'helpers'.DS.'utilities.php'); | |
$params = K2HelperUtilities::getParams('com_k2'); | |
$query = ""; | |
$query = "SELECT i.alias,i.id FROM #__k2_items AS i | |
WHERE i.published = 1 | |
AND i.access IN(".implode(',', $user->getAuthorisedViewLevels()).")" | |
." AND i.trash = 0"; | |
if ($languageFilter) | |
{ | |
$languageTag = JFactory::getLanguage()->getTag(); | |
$query .= " AND i.language IN (".$db->quote($languageTag).",".$db->quote('*').")"; | |
} | |
if (!($task == 'user' && !$user->guest && $user->id == JRequest::getInt('id'))) | |
{ | |
$query .= " AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )"; | |
$query .= " AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )"; | |
} | |
$db->setQuery($query); | |
$items['items'] = $db->loadAssocList('id','alias'); | |
$query = ""; | |
$query = "SELECT c.alias,c.id FROM #__k2_categories AS c " | |
." WHERE c.published = 1" | |
." AND c.access IN(".implode(',', $user->getAuthorisedViewLevels()).")"." AND c.trash = 0"; | |
if ($languageFilter) | |
{ | |
$languageTag = JFactory::getLanguage()->getTag(); | |
$query .= " AND c.language IN (".$db->quote($languageTag).",".$db->quote('*').") "; | |
} | |
$db->setQuery($query); | |
$items['categories'] = $db->loadAssocList('id','alias'); | |
$query = ""; | |
$query = "SELECT id, name FROM #__k2_tags AS t WHERE t.published = 1"; | |
$db->setQuery($query); | |
$items['tags'] = $db->loadAssocList('id','name'); | |
$items['tags_xref'] = $items['tags']; | |
$languageFilter = JFactory::getLanguage(); | |
foreach ($items['tags'] as $id=>$tag) { | |
$items['tags'][$id] = $languageFilter->transliterate($tag); | |
$items['tags'][$id] = JApplication::stringURLSafe($items['tags'][$id]); | |
} | |
$searched = true; | |
} | |
return $items; | |
} | |
function K2ParseRoute($segments) | |
{ | |
$site = JFactory::getApplication(); | |
if($site->isSite()){ | |
$items = array(); | |
$items = getK2ItemsByAlias(); | |
$vars = array(); | |
if(!in_array($segments[0],array('itemlist','item','tag','comments','reportSpammer'))){ | |
$new_segments = array(); | |
$sizeof = sizeof($segments); | |
for($i = $sizeof - 1; $i > -1; $i--){ | |
$array = array(); | |
if(JString::strpos($segments[$i],':') !== false){ | |
$array = explode(':',$segments[$i],2); | |
} else { | |
$array = array($segments[$i]); | |
} | |
$id = 0; | |
$found = false; | |
$array[0] = JString::trim($array[0]); | |
$id = $array[0]; | |
$matches = array(); | |
if($id && preg_match('~^[0-9]+$~',$id,$matches) && isset($array[1]) && !empty($array[1])){ | |
$segments[$i] = $array[1]; | |
if(isset($items['items'][$id]) && $items['items'][$id] == $segments[$i]){ | |
$new_segments[] = 'item'; | |
$new_segments[] = $id; | |
$found = true; | |
} else if(isset($items['categories'][$id]) && $items['categories'][$id] == $segments[$i]){ | |
$new_segments[] = 'itemlist'; | |
$new_segments[] = 'category'; | |
$new_segments[] = $id; | |
$found = true; | |
} | |
} | |
if(!$found){ | |
$segments[$i] = JString::str_ireplace(':','-',$segments[$i]); | |
$key = 0; | |
if(($key = array_search($segments[$i],$items['items'])) !== false){ | |
$new_segments[] = 'item'; | |
$new_segments[] = $key; | |
$found = true; | |
} else if(($key = array_search($segments[$i],$items['categories'])) !== false){ | |
$new_segments[] = 'itemlist'; | |
$new_segments[] = 'category'; | |
$new_segments[] = $key; | |
$found = true; | |
} | |
} | |
if($found){ | |
break; | |
} | |
} | |
if(sizeof($new_segments) && $found){ | |
$segments = array(); | |
$segments = $new_segments; | |
} | |
} else if(isset($segments[0]) && $segments[0] == 'tag' && isset($segments[1]) && !empty($segments[1])){ | |
$segments[0] = 'itemlist'; | |
$segments[2] = $segments[1]; | |
$segments[1] = 'tag'; | |
}; | |
}; | |
$vars = array(); | |
$vars['view'] = $segments[0]; | |
if (!isset($segments[1])) | |
$segments[1] = ''; | |
$vars['task'] = $segments[1]; | |
if ($segments[0] == 'itemlist') | |
{ | |
switch($segments[1]) | |
{ | |
case 'category' : | |
if (isset($segments[2])) | |
$vars['id'] = $segments[2]; | |
break; | |
case 'tag' : | |
$key = 0; | |
if($site->isSite()){ | |
if (isset($segments[2]) && !empty($segments[2])){ | |
if(JString::strpos($segments[2],':') !== false){ | |
$segments[2] = JString::str_ireplace(':','-',$segments[2]); | |
} | |
if(($key = array_search($segments[2],$items['tags'])) !== false){ | |
if(isset($items['tags_xref'][$key])){ | |
$segments[2] = $items['tags_xref'][$key]; | |
}; | |
} | |
} | |
}; | |
if (isset($segments[2])) | |
$vars['tag'] = $segments[2]; | |
break; | |
case 'user' : | |
if (isset($segments[2])) | |
$vars['id'] = $segments[2]; | |
break; | |
case 'date' : | |
if (isset($segments[2])) | |
$vars['year'] = $segments[2]; | |
if (isset($segments[3])) | |
$vars['month'] = $segments[3]; | |
if (isset($segments[4])) | |
{ | |
$vars['day'] = $segments[4]; | |
} | |
break; | |
} | |
} | |
else if ($segments[0] == 'item') | |
{ | |
switch($segments[1]) | |
{ | |
case 'edit' : | |
if (isset($segments[2])) | |
$vars['cid'] = $segments[2]; | |
break; | |
case 'download' : | |
if (isset($segments[2])) | |
$vars['id'] = $segments[2]; | |
break; | |
default : | |
$vars['id'] = $segments[1]; | |
break; | |
} | |
} | |
if ($segments[0] == 'comments' && isset($segments[1]) && $segments[1] == 'reportSpammer') | |
{ | |
$vars['id'] = $segments[2]; | |
} | |
return $vars; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment