PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/components/com_k2/sef_ext/com_k2.php

http://getk2.googlecode.com/
PHP | 327 lines | 261 code | 44 blank | 22 comment | 88 complexity | b0334639dc42cffec57f518a135ac743 MD5 | raw file
  1. <?php
  2. /**
  3. * @version $Id: com_k2.php 1530 2012-03-20 10:13:38Z lefteris.kavadas $
  4. * @package K2
  5. * @author JoomlaWorks http://www.joomlaworks.net
  6. * @copyright Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved.
  7. * @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
  8. */
  9. // no direct access
  10. defined('_JEXEC') or die('Restricted access');
  11. if (!function_exists('getCategoryPath'))
  12. {
  13. function getCategoryPath($catid, $begin = false)
  14. {
  15. static $array = array();
  16. if (intval($catid) == 0)
  17. {
  18. return false;
  19. }
  20. if ($begin)
  21. {
  22. $array = array();
  23. }
  24. $user = &JFactory::getUser();
  25. $aid = (int)$user->get('aid');
  26. $catid = (int)$catid;
  27. $db = &JFactory::getDBO();
  28. $query = "SELECT * FROM #__k2_categories WHERE id={$catid} AND published=1";
  29. if (version_compare(JVERSION, '1.6.0', 'ge'))
  30. {
  31. $query .= " AND access IN(".implode(',', $user->authorisedLevels()).") ";
  32. }
  33. else
  34. {
  35. $query .= " AND access<={$aid} ";
  36. }
  37. $db->setQuery($query);
  38. $rows = $db->loadObjectList();
  39. if ($db->getErrorNum())
  40. {
  41. echo $db->stderr();
  42. return false;
  43. }
  44. foreach ($rows as $row)
  45. {
  46. array_push($array, $row->alias);
  47. getCategoryPath($row->parent, false);
  48. }
  49. return array_reverse($array);
  50. }
  51. }
  52. // ------------------ Standard plugin initialize function - don't change ---------------------------
  53. global $sh_LANG;
  54. $sefConfig = shRouter::shGetConfig();
  55. $shLangName = '';
  56. $shLangIso = '';
  57. $title = array();
  58. $shItemidString = '';
  59. $dosef = shInitializePlugin($lang, $shLangName, $shLangIso, $option);
  60. if ($dosef == false)
  61. return;
  62. $shHomePageFlag = false;
  63. $shHomePageFlag = !$shHomePageFlag ? shIsHomepage($string) : $shHomePageFlag;
  64. // Remove common URL from GET vars list, so that they don't show up as query string in the URL
  65. shRemoveFromGETVarsList('option');
  66. shRemoveFromGETVarsList('lang');
  67. if (!empty($Itemid))
  68. shRemoveFromGETVarsList('Itemid');
  69. if (!empty($limit))
  70. shRemoveFromGETVarsList('limit');
  71. if (isset($limitstart))
  72. shRemoveFromGETVarsList('limitstart');
  73. // limitstart can be zero
  74. // Start by inserting the menu element title (just an idea, this is not required at all)
  75. $task = isset($task) ? @$task : null;
  76. $view = isset($view) ? @$view : null;
  77. $Itemid = isset($Itemid) ? @$Itemid : null;
  78. // Set dummy task for module feeds
  79. if ($view == 'itemlist' && isset($moduleID))
  80. {
  81. $task = 'module';
  82. }
  83. // K2 parameters
  84. $params = &JComponentHelper::getParams('com_k2');
  85. $authorPrefix = $params->get('sh404SefLabelUser', 'blog');
  86. $itemlistPrefix = $params->get('sh404SefLabelCat', '');
  87. $itemPrefix = $params->get('sh404SefLabelItem', 2);
  88. $sh404SefTitleAlias = $params->get('sh404SefTitleAlias', 'alias');
  89. $sh404SefModK2ContentFeedAlias = $params->get('sh404SefModK2ContentFeedAlias', 'feed');
  90. $sh404SefInsertItemId = $params->get('sh404SefInsertItemId');
  91. $sh404SefInsertUniqueItemId = $params->get('sh404SefInsertUniqueItemId');
  92. $database = JFactory::getDBO();
  93. $menu = JSite::getMenu();
  94. $menuparams = NULL;
  95. $menuparams = $menu->getParams($Itemid);
  96. 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'))
  97. $dosef = false;
  98. if ($view == 'item' && $task == 'tag')
  99. $dosef = false;
  100. if ($view == 'comments')
  101. $dosef = false;
  102. switch ($view)
  103. {
  104. case 'item' :
  105. if (isset($id) && $id > 0 && $task != 'download')
  106. {
  107. $id = (int)$id;
  108. if ($sh404SefInsertUniqueItemId)
  109. {
  110. $query = 'SELECT id, catid, created FROM #__k2_items WHERE id = '.$database->Quote($id);
  111. $database->setQuery($query);
  112. if (shTranslateUrl($option, $shLangName))
  113. {
  114. $contentElement = $database->loadObject();
  115. }
  116. else
  117. {
  118. $contentElement = $database->loadObject(false);
  119. }
  120. $shTemp = explode(' ', $contentElement->created);
  121. $title[] = str_replace('-', '', $shTemp[0]).$contentElement->id;
  122. }
  123. if (!shTranslateUrl($option, $shLangName))
  124. {
  125. $query = 'SELECT '.$sh404SefTitleAlias.', catid FROM #__k2_items WHERE id = '.$id;
  126. }
  127. else
  128. {
  129. $query = 'SELECT id, '.$sh404SefTitleAlias.', catid FROM #__k2_items WHERE id = '.$id;
  130. }
  131. $database->setQuery($query);
  132. if (shTranslateUrl($option, $shLangName))
  133. $row = $database->loadObject();
  134. else
  135. $row = $database->loadObject(false);
  136. switch($itemPrefix)
  137. {
  138. case 0 :
  139. break;
  140. case 1 :
  141. $fullPath = getCategoryPath($row->catid, true);
  142. $title[] = array_pop($fullPath);
  143. break;
  144. default :
  145. case 2 :
  146. $fullPath = getCategoryPath($row->catid, true);
  147. foreach ($fullPath as $path)
  148. {
  149. $title[] = $path;
  150. }
  151. break;
  152. }
  153. if ($sh404SefInsertItemId)
  154. {
  155. $title[] = $row->id.'-'.$row->$sh404SefTitleAlias;
  156. }
  157. else
  158. {
  159. $title[] = $row->$sh404SefTitleAlias;
  160. }
  161. shMustCreatePageId('set', true);
  162. }
  163. break;
  164. case 'itemlist' :
  165. switch ($task)
  166. {
  167. case 'category' :
  168. if (!empty($itemlistPrefix))
  169. {
  170. $title[] = $itemlistPrefix;
  171. }
  172. $fullPath = getCategoryPath($id, true);
  173. foreach ($fullPath as $path)
  174. {
  175. $title[] = $path;
  176. }
  177. shMustCreatePageId('set', true);
  178. break;
  179. case 'user' :
  180. $user = &JFactory::getUser($id);
  181. if (!empty($authorPrefix))
  182. {
  183. $title[] = $authorPrefix;
  184. }
  185. $title[] = $user->name;
  186. break;
  187. case 'tag' :
  188. $title[] = 'tag';
  189. $tag = str_replace('%20', '-', $tag);
  190. $tag = str_replace('+', '-', $tag);
  191. $title[] = $tag;
  192. shMustCreatePageId('set', true);
  193. break;
  194. case 'search' :
  195. $title[] = 'search';
  196. if (!empty($searchword))
  197. $title[] = $searchword;
  198. break;
  199. case 'date' :
  200. $title[] = 'date';
  201. if (!empty($year))
  202. $title[] = $year;
  203. if (!empty($month))
  204. $title[] = $month;
  205. if (!empty($day))
  206. $title[] = $day;
  207. break;
  208. case 'module' :
  209. $query = 'SELECT title FROM #__modules WHERE id = '.(int)$moduleID;
  210. $database->setQuery($query);
  211. $moduleTitle = $database->loadResult();
  212. $moduleTitle = str_replace(' ', '-', $moduleTitle);
  213. if ($sh404SefModK2ContentFeedAlias)
  214. {
  215. $title[] = $sh404SefModK2ContentFeedAlias;
  216. }
  217. $title[] = $moduleTitle;
  218. break;
  219. default :
  220. if (isset($Itemid))
  221. {
  222. $title[] = $menu->getItem($Itemid)->alias;
  223. shMustCreatePageId('set', true);
  224. }
  225. break;
  226. }
  227. break;
  228. case 'latest' :
  229. if (isset($Itemid))
  230. {
  231. $title[] = $menu->getItem($Itemid)->alias;
  232. shMustCreatePageId('set', true);
  233. }
  234. break;
  235. }
  236. if (!empty($format) && $format == 'feed')
  237. {
  238. $title[] = $format;
  239. if (!empty($type) && $format != $type)
  240. {
  241. $title[] = $type;
  242. }
  243. }
  244. if (isset($layout))
  245. shRemoveFromGETVarsList('layout');
  246. if (isset($task))
  247. shRemoveFromGETVarsList('task');
  248. if (isset($tag))
  249. shRemoveFromGETVarsList('tag');
  250. if (isset($searchword))
  251. shRemoveFromGETVarsList('searchword');
  252. if (isset($view))
  253. shRemoveFromGETVarsList('view');
  254. if (isset($Itemid))
  255. shRemoveFromGETVarsList('Itemid');
  256. if (isset($year))
  257. shRemoveFromGETVarsList('year');
  258. if (isset($month))
  259. shRemoveFromGETVarsList('month');
  260. if (isset($day))
  261. shRemoveFromGETVarsList('day');
  262. if (isset($id))
  263. shRemoveFromGETVarsList('id');
  264. /*
  265. * Only remove format variable if form is html. In all other situations, leave it there as some system plugins
  266. * may cause pdf and rss to break if they call JFactory::getDocument() in the onAfterInitialize event handler
  267. * because at this time SEF url are not decoded yet.
  268. *
  269. */
  270. if (isset($format) && (!sh404SEF_PROTECT_AGAINST_DOCUMENT_TYPE_ERROR || (sh404SEF_PROTECT_AGAINST_DOCUMENT_TYPE_ERROR && $format == 'html')))
  271. {
  272. shRemoveFromGETVarsList('format');
  273. }
  274. if (isset($moduleID))
  275. {
  276. shRemoveFromGETVarsList('moduleID');
  277. }
  278. // ------------------ Standard plugin finalize function - don't change ---------------------------
  279. if ($dosef)
  280. {
  281. $string = shFinalizePlugin($string, $title, $shAppendString, $shItemidString, (isset($limit) ? @$limit : null), (isset($limitstart) ? @$limitstart : null), (isset($shLangName) ? @$shLangName : null));
  282. }
  283. // ------------------ Standard plugin finalize function - don't change ---------------------------