<?php
/**
 * @version		2.6.x
 * @package		K2
 * @author		JoomlaWorks http://www.joomlaworks.net
 * @copyright	Copyright (c) 2006 - 2014 JoomlaWorks Ltd. All rights reserved.
 * @license		GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
 */

// no direct access
defined('_JEXEC') or die;

if (!function_exists('getCategoryPath'))
{

	function getCategoryPath($catid, $begin = false)
	{
		static $array = array();
		if (intval($catid) == 0)
		{
			return false;
		}
		if ($begin)
		{
			$array = array();
		}

		$user = JFactory::getUser();
		$aid = (int)$user->get('aid');
		$catid = (int)$catid;
		$db = JFactory::getDBO();
		$query = "SELECT * FROM #__k2_categories WHERE id={$catid} AND published=1";

		if (version_compare(JVERSION, '1.6.0', 'ge'))
		{
			$query .= " AND access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
		}
		else
		{
			$query .= " AND access<={$aid} ";
		}

		$db->setQuery($query);
		$rows = $db->loadObjectList();
		if ($db->getErrorNum())
		{
			echo $db->stderr();
			return false;
		}

		foreach ($rows as $row)
		{
			array_push($array, $row->alias);
			getCategoryPath($row->parent, false);
		}

		return array_reverse($array);
	}

}

// ------------------ Standard plugin initialize function - don't change ---------------------------
global $sh_LANG;
$sefConfig = shRouter::shGetConfig();
$shLangName = '';
$shLangIso = '';
$title = array();
$shItemidString = '';
$dosef = shInitializePlugin($lang, $shLangName, $shLangIso, $option);
if ($dosef == false)
	return;

$shHomePageFlag = false;
$shHomePageFlag = !$shHomePageFlag ? shIsHomepage($string) : $shHomePageFlag;

// Remove common URL from GET vars list, so that they don't show up as query string in the URL
shRemoveFromGETVarsList('option');
shRemoveFromGETVarsList('lang');
if (!empty($Itemid))
	shRemoveFromGETVarsList('Itemid');
if (!empty($limit))
	shRemoveFromGETVarsList('limit');
if (isset($limitstart))
	shRemoveFromGETVarsList('limitstart');
// limitstart can be zero

// Start by inserting the menu element title (just an idea, this is not required at all)
$task = isset($task) ? @$task : null;
$view = isset($view) ? @$view : null;
$Itemid = isset($Itemid) ? @$Itemid : null;

// Set dummy task for module feeds
if ($view == 'itemlist' && isset($moduleID))
{
	$task = 'module';
}

// K2 parameters
$params = JComponentHelper::getParams('com_k2');
$authorPrefix = $params->get('sh404SefLabelUser', 'blog');
$itemlistPrefix = $params->get('sh404SefLabelCat', '');
$itemPrefix = $params->get('sh404SefLabelItem', 2);
$sh404SefTitleAlias = $params->get('sh404SefTitleAlias', 'alias');
$sh404SefModK2ContentFeedAlias = $params->get('sh404SefModK2ContentFeedAlias', 'feed');
$sh404SefInsertItemId = $params->get('sh404SefInsertItemId');
$sh404SefInsertUniqueItemId = $params->get('sh404SefInsertUniqueItemId');

$database = JFactory::getDBO();
$menu = JFactory::getApplication()->getMenu();
$menuparams = NULL;
$menuparams = $menu->getParams($Itemid);

if (isset($task) && ($task == 'calendar' || $task == 'edit' || $task == 'add' || $task == 'save' || $task == 'deleteAttachment' || $task == 'extraFields' || $task == 'checkin' || $task == 'vote' || $task == 'getVotesNum' || $task == 'getVotesPercentage' || $task == 'comment' || $task == 'download'))
	$dosef = false;

if ($view == 'item' && $task == 'tag')
	$dosef = false;

if ($view == 'comments')
	$dosef = false;

switch ($view)
{

	case 'item' :
		if (isset($id) && $id > 0 && $task != 'download')
		{
			$id = (int)$id;

			if ($sh404SefInsertUniqueItemId)
			{
				$query = 'SELECT id, catid, created FROM #__k2_items WHERE id = '.$database->Quote($id);
				$database->setQuery($query);
				if (shTranslateUrl($option, $shLangName))
				{
					$contentElement = $database->loadObject();
				}
				else
				{
					$contentElement = $database->loadObject(false);
				}
				$shTemp = explode(' ', $contentElement->created);
				$title[] = str_replace('-', '', $shTemp[0]).$contentElement->id;
			}

			if (!shTranslateUrl($option, $shLangName))
			{
				$query = 'SELECT '.$sh404SefTitleAlias.', catid FROM #__k2_items WHERE id = '.$id;
			}
			else
			{
				$query = 'SELECT id, '.$sh404SefTitleAlias.', catid FROM #__k2_items WHERE id = '.$id;
			}

			$database->setQuery($query);
			if (shTranslateUrl($option, $shLangName))
				$row = $database->loadObject();
			else
				$row = $database->loadObject(false);

			switch($itemPrefix)
			{
				case 0 :
					break;
				case 1 :
					$fullPath = getCategoryPath($row->catid, true);
					$title[] = array_pop($fullPath);
					break;
				default :
				case 2 :
					$fullPath = getCategoryPath($row->catid, true);
					foreach ($fullPath as $path)
					{
						$title[] = $path;
					}
					break;
			}

			if ($sh404SefInsertItemId)
			{
				$title[] = $row->id.'-'.$row->$sh404SefTitleAlias;
			}
			else
			{
				$title[] = $row->$sh404SefTitleAlias;
			}

			shMustCreatePageId('set', true);
		}
		break;

	case 'itemlist' :
		switch ($task)
		{

			case 'category' :
				if (!empty($itemlistPrefix))
				{
					$title[] = $itemlistPrefix;
				}
				$fullPath = getCategoryPath($id, true);
				foreach ($fullPath as $path)
				{
					$title[] = $path;
				}
				shMustCreatePageId('set', true);
				break;

			case 'user' :
				$user = JFactory::getUser($id);
				if (!empty($authorPrefix))
				{
					$title[] = $authorPrefix;
				}
				$title[] = $user->name;
				break;

			case 'tag' :
				$title[] = 'tag';
				$tag = str_replace('%20', '-', $tag);
				$tag = str_replace('+', '-', $tag);
				$title[] = $tag;
				shMustCreatePageId('set', true);
				break;

			case 'search' :
				$title[] = 'search';
				if (!empty($searchword))
					$title[] = $searchword;
				break;

			case 'date' :
				$title[] = 'date';
				if (!empty($year))
					$title[] = $year;

				if (!empty($month))
					$title[] = $month;

				if (!empty($day))
					$title[] = $day;
				break;

			case 'module' :
				$query = 'SELECT title FROM #__modules WHERE id = '.(int)$moduleID;
				$database->setQuery($query);
				$moduleTitle = $database->loadResult();
				$moduleTitle = str_replace(' ', '-', $moduleTitle);
				if ($sh404SefModK2ContentFeedAlias)
				{
					$title[] = $sh404SefModK2ContentFeedAlias;
				}
				$title[] = $moduleTitle;
				break;

			default :
				if (isset($Itemid))
				{
					$title[] = $menu->getItem($Itemid)->alias;
					shMustCreatePageId('set', true);
				}
				break;
		}

		break;

	case 'latest' :
		if (isset($Itemid))
		{
			$title[] = $menu->getItem($Itemid)->alias;
			shMustCreatePageId('set', true);
		}
		break;
}

if (!empty($format) && $format == 'feed')
{
	$title[] = $format;
	if (!empty($type) && $format != $type)
	{
		$title[] = $type;
	}
}

if (isset($layout))
	shRemoveFromGETVarsList('layout');
if (isset($task))
	shRemoveFromGETVarsList('task');
if (isset($tag))
	shRemoveFromGETVarsList('tag');
if (isset($searchword))
	shRemoveFromGETVarsList('searchword');
if (isset($view))
	shRemoveFromGETVarsList('view');
if (isset($Itemid))
	shRemoveFromGETVarsList('Itemid');
if (isset($year))
	shRemoveFromGETVarsList('year');
if (isset($month))
	shRemoveFromGETVarsList('month');
if (isset($day))
	shRemoveFromGETVarsList('day');
if (isset($id))
	shRemoveFromGETVarsList('id');

/*
 * Only remove format variable if form is html. In all other situations, leave it there as some system plugins
 * may cause pdf and rss to break if they call JFactory::getDocument() in the onAfterInitialize event handler
 * because at this time SEF url are not decoded yet.
 *
 */
if (isset($format) && (!sh404SEF_PROTECT_AGAINST_DOCUMENT_TYPE_ERROR || (sh404SEF_PROTECT_AGAINST_DOCUMENT_TYPE_ERROR && $format == 'html')))
{
	shRemoveFromGETVarsList('format');
}

if (isset($moduleID))
{
	shRemoveFromGETVarsList('moduleID');
}

// ------------------ Standard plugin finalize function - don't change ---------------------------
if ($dosef)
{
	$string = shFinalizePlugin($string, $title, $shAppendString, $shItemidString, (isset($limit) ? @$limit : null), (isset($limitstart) ? @$limitstart : null), (isset($shLangName) ? @$shLangName : null));
}
// ------------------ Standard plugin finalize function - don't change ---------------------------
