PageRenderTime 54ms CodeModel.GetById 27ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/mod_k2_content/helper.php

http://getk2.googlecode.com/
PHP | 575 lines | 447 code | 100 blank | 28 comment | 95 complexity | f5377b42b93486458d7cef8fbfe650ba MD5 | raw file
  1. <?php
  2. /**
  3. * @version $Id: helper.php 1514 2012-03-06 10:20:04Z 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. require_once (JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'helpers'.DS.'route.php');
  12. require_once (JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'helpers'.DS.'utilities.php');
  13. class modK2ContentHelper
  14. {
  15. function getItems(&$params, $format = 'html')
  16. {
  17. jimport('joomla.filesystem.file');
  18. $mainframe = &JFactory::getApplication();
  19. $limit = $params->get('itemCount', 5);
  20. $cid = $params->get('category_id', NULL);
  21. $ordering = $params->get('itemsOrdering', '');
  22. $componentParams = &JComponentHelper::getParams('com_k2');
  23. $limitstart = JRequest::getInt('limitstart');
  24. $user = &JFactory::getUser();
  25. $aid = $user->get('aid');
  26. $db = &JFactory::getDBO();
  27. $jnow = &JFactory::getDate();
  28. $now = $jnow->toMySQL();
  29. $nullDate = $db->getNullDate();
  30. if ($params->get('source') == 'specific')
  31. {
  32. $value = $params->get('items');
  33. $current = array();
  34. if (is_string($value) && !empty($value))
  35. $current[] = $value;
  36. if (is_array($value))
  37. $current = $value;
  38. $items = array();
  39. foreach ($current as $id)
  40. {
  41. $query = "SELECT i.*, c.name AS categoryname,c.id AS categoryid, c.alias AS categoryalias, c.params AS categoryparams
  42. FROM #__k2_items as i
  43. LEFT JOIN #__k2_categories c ON c.id = i.catid
  44. WHERE i.published = 1 ";
  45. if (K2_JVERSION == '16')
  46. {
  47. $query .= " AND i.access IN(".implode(',', $user->authorisedLevels()).") ";
  48. }
  49. else
  50. {
  51. $query .= " AND i.access<={$aid} ";
  52. }
  53. $query .= " AND i.trash = 0 AND c.published = 1 ";
  54. if (K2_JVERSION == '16')
  55. {
  56. $query .= " AND c.access IN(".implode(',', $user->authorisedLevels()).") ";
  57. }
  58. else
  59. {
  60. $query .= " AND c.access<={$aid} ";
  61. }
  62. $query .= " AND c.trash = 0
  63. AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )
  64. AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )
  65. AND i.id={$id}";
  66. if (K2_JVERSION == '16')
  67. {
  68. if ($mainframe->getLanguageFilter())
  69. {
  70. $languageTag = JFactory::getLanguage()->getTag();
  71. $query .= " AND c.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") AND i.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').")";
  72. }
  73. }
  74. $db->setQuery($query);
  75. $item = $db->loadObject();
  76. if ($item)
  77. $items[] = $item;
  78. }
  79. }
  80. else
  81. {
  82. $query = "SELECT i.*, CASE WHEN i.modified = 0 THEN i.created ELSE i.modified END as lastChanged, c.name AS categoryname,c.id AS categoryid, c.alias AS categoryalias, c.params AS categoryparams";
  83. if ($ordering == 'best')
  84. $query .= ", (r.rating_sum/r.rating_count) AS rating";
  85. if ($ordering == 'comments')
  86. $query .= ", COUNT(comments.id) AS numOfComments";
  87. $query .= " FROM #__k2_items as i LEFT JOIN #__k2_categories c ON c.id = i.catid";
  88. if ($ordering == 'best')
  89. $query .= " LEFT JOIN #__k2_rating r ON r.itemID = i.id";
  90. if ($ordering == 'comments')
  91. $query .= " LEFT JOIN #__k2_comments comments ON comments.itemID = i.id";
  92. if (K2_JVERSION == '16')
  93. {
  94. $query .= " WHERE i.published = 1 AND i.access IN(".implode(',', $user->authorisedLevels()).") AND i.trash = 0 AND c.published = 1 AND c.access IN(".implode(',', $user->authorisedLevels()).") AND c.trash = 0";
  95. }
  96. else
  97. {
  98. $query .= " WHERE i.published = 1 AND i.access <= {$aid} AND i.trash = 0 AND c.published = 1 AND c.access <= {$aid} AND c.trash = 0";
  99. }
  100. $query .= " AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )";
  101. $query .= " AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." )";
  102. if ($params->get('catfilter'))
  103. {
  104. if (!is_null($cid))
  105. {
  106. if (is_array($cid))
  107. {
  108. if ($params->get('getChildren'))
  109. {
  110. require_once (JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'models'.DS.'itemlist.php');
  111. $categories = K2ModelItemlist::getCategoryTree($cid);
  112. $sql = @implode(',', $categories);
  113. $query .= " AND i.catid IN ({$sql})";
  114. }
  115. else
  116. {
  117. JArrayHelper::toInteger($cid);
  118. $query .= " AND i.catid IN(".implode(',', $cid).")";
  119. }
  120. }
  121. else
  122. {
  123. if ($params->get('getChildren'))
  124. {
  125. require_once (JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'models'.DS.'itemlist.php');
  126. $categories = K2ModelItemlist::getCategoryTree($cid);
  127. $sql = @implode(',', $categories);
  128. $query .= " AND i.catid IN ({$sql})";
  129. }
  130. else
  131. {
  132. $query .= " AND i.catid=".(int)$cid;
  133. }
  134. }
  135. }
  136. }
  137. if ($params->get('FeaturedItems') == '0')
  138. $query .= " AND i.featured != 1";
  139. if ($params->get('FeaturedItems') == '2')
  140. $query .= " AND i.featured = 1";
  141. if ($params->get('videosOnly'))
  142. $query .= " AND (i.video IS NOT NULL AND i.video!='')";
  143. if ($ordering == 'comments')
  144. $query .= " AND comments.published = 1";
  145. if (K2_JVERSION == '16')
  146. {
  147. if ($mainframe->getLanguageFilter())
  148. {
  149. $languageTag = JFactory::getLanguage()->getTag();
  150. $query .= " AND c.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") AND i.language IN (".$db->Quote($languageTag).", ".$db->Quote('*').")";
  151. }
  152. }
  153. switch ($ordering)
  154. {
  155. case 'date' :
  156. $orderby = 'i.created ASC';
  157. break;
  158. case 'rdate' :
  159. $orderby = 'i.created DESC';
  160. break;
  161. case 'alpha' :
  162. $orderby = 'i.title';
  163. break;
  164. case 'ralpha' :
  165. $orderby = 'i.title DESC';
  166. break;
  167. case 'order' :
  168. if ($params->get('FeaturedItems') == '2')
  169. $orderby = 'i.featured_ordering';
  170. else
  171. $orderby = 'i.ordering';
  172. break;
  173. case 'rorder' :
  174. if ($params->get('FeaturedItems') == '2')
  175. $orderby = 'i.featured_ordering DESC';
  176. else
  177. $orderby = 'i.ordering DESC';
  178. break;
  179. case 'hits' :
  180. if ($params->get('popularityRange'))
  181. {
  182. $datenow = &JFactory::getDate();
  183. $date = $datenow->toMySQL();
  184. $query .= " AND i.created > DATE_SUB('{$date}',INTERVAL ".$params->get('popularityRange')." DAY) ";
  185. }
  186. $orderby = 'i.hits DESC';
  187. break;
  188. case 'rand' :
  189. $orderby = 'RAND()';
  190. break;
  191. case 'best' :
  192. $orderby = 'rating DESC';
  193. break;
  194. case 'comments' :
  195. if ($params->get('popularityRange'))
  196. {
  197. $datenow = &JFactory::getDate();
  198. $date = $datenow->toMySQL();
  199. $query .= " AND i.created > DATE_SUB('{$date}',INTERVAL ".$params->get('popularityRange')." DAY) ";
  200. }
  201. $query .= " GROUP BY i.id ";
  202. $orderby = 'numOfComments DESC';
  203. break;
  204. case 'modified' :
  205. $orderby = 'lastChanged DESC';
  206. break;
  207. case 'publishUp' :
  208. $orderby = 'i.publish_up DESC';
  209. break;
  210. default :
  211. $orderby = 'i.id DESC';
  212. break;
  213. }
  214. $query .= " ORDER BY ".$orderby;
  215. $db->setQuery($query, 0, $limit);
  216. $items = $db->loadObjectList();
  217. }
  218. require_once (JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'models'.DS.'item.php');
  219. $model = new K2ModelItem;
  220. if (count($items))
  221. {
  222. foreach ($items as $item)
  223. {
  224. //Clean title
  225. $item->title = JFilterOutput::ampReplace($item->title);
  226. //Images
  227. if ($params->get('itemImage'))
  228. {
  229. $date = &JFactory::getDate($item->modified);
  230. $timestamp = '?t='.$date->toUnix();
  231. if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_XS.jpg'))
  232. {
  233. $item->imageXSmall = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_XS.jpg';
  234. if ($componentParams->get('imageTimestamp'))
  235. {
  236. $item->imageXSmall .= $timestamp;
  237. }
  238. }
  239. if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_S.jpg'))
  240. {
  241. $item->imageSmall = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_S.jpg';
  242. if ($componentParams->get('imageTimestamp'))
  243. {
  244. $item->imageSmall .= $timestamp;
  245. }
  246. }
  247. if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_M.jpg'))
  248. {
  249. $item->imageMedium = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
  250. if ($componentParams->get('imageTimestamp'))
  251. {
  252. $item->imageMedium .= $timestamp;
  253. }
  254. }
  255. if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_L.jpg'))
  256. {
  257. $item->imageLarge = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_L.jpg';
  258. if ($componentParams->get('imageTimestamp'))
  259. {
  260. $item->imageLarge .= $timestamp;
  261. }
  262. }
  263. if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_XL.jpg'))
  264. {
  265. $item->imageXLarge = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_XL.jpg';
  266. if ($componentParams->get('imageTimestamp'))
  267. {
  268. $item->imageXLarge .= $timestamp;
  269. }
  270. }
  271. if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_Generic.jpg'))
  272. {
  273. $item->imageGeneric = JURI::base(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_Generic.jpg';
  274. if ($componentParams->get('imageTimestamp'))
  275. {
  276. $item->imageGeneric .= $timestamp;
  277. }
  278. }
  279. $image = 'image'.$params->get('itemImgSize', 'Small');
  280. if (isset($item->$image))
  281. $item->image = $item->$image;
  282. }
  283. //Read more link
  284. $item->link = urldecode(JRoute::_(K2HelperRoute::getItemRoute($item->id.':'.urlencode($item->alias), $item->catid.':'.urlencode($item->categoryalias))));
  285. //Tags
  286. if ($params->get('itemTags'))
  287. {
  288. $tags = $model->getItemTags($item->id);
  289. for ($i = 0; $i < sizeof($tags); $i++)
  290. {
  291. $tags[$i]->link = JRoute::_(K2HelperRoute::getTagRoute($tags[$i]->name));
  292. }
  293. $item->tags = $tags;
  294. }
  295. //Category link
  296. if ($params->get('itemCategory'))
  297. $item->categoryLink = urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($item->catid.':'.urlencode($item->categoryalias))));
  298. //Extra fields
  299. if ($params->get('itemExtraFields'))
  300. {
  301. $item->extra_fields = $model->getItemExtraFields($item->extra_fields);
  302. }
  303. //Comments counter
  304. if ($params->get('itemCommentsCounter'))
  305. $item->numOfComments = $model->countItemComments($item->id);
  306. //Attachments
  307. if ($params->get('itemAttachments'))
  308. $item->attachments = $model->getItemAttachments($item->id);
  309. //Import plugins
  310. if ($format != 'feed')
  311. {
  312. $dispatcher = &JDispatcher::getInstance();
  313. JPluginHelper::importPlugin('content');
  314. }
  315. //Video
  316. if ($params->get('itemVideo') && $format != 'feed')
  317. {
  318. $params->set('vfolder', 'media/k2/videos');
  319. $params->set('afolder', 'media/k2/audio');
  320. $item->text = $item->video;
  321. $dispatcher->trigger('onPrepareContent', array(&$item, &$params, $limitstart));
  322. $item->video = $item->text;
  323. }
  324. // Introtext
  325. $item->text = '';
  326. if ($params->get('itemIntroText'))
  327. {
  328. // Word limit
  329. if ($params->get('itemIntroTextWordLimit'))
  330. {
  331. $item->text .= K2HelperUtilities::wordLimit($item->introtext, $params->get('itemIntroTextWordLimit'));
  332. }
  333. else
  334. {
  335. $item->text .= $item->introtext;
  336. }
  337. }
  338. if ($format != 'feed')
  339. {
  340. $params->set('parsedInModule', 1);
  341. // for plugins to know when they are parsed inside this module
  342. if ($params->get('JPlugins', 1))
  343. {
  344. //Plugins
  345. if (K2_JVERSION == '16')
  346. {
  347. $item->event->BeforeDisplay = '';
  348. $item->event->AfterDisplay = '';
  349. $dispatcher->trigger('onContentPrepare', array('mod_k2_content', &$item, &$params, $limitstart));
  350. $results = $dispatcher->trigger('onContentAfterTitle', array('mod_k2_content', &$item, &$params, $limitstart));
  351. $item->event->AfterDisplayTitle = trim(implode("\n", $results));
  352. $results = $dispatcher->trigger('onContentBeforeDisplay', array('mod_k2_content', &$item, &$params, $limitstart));
  353. $item->event->BeforeDisplayContent = trim(implode("\n", $results));
  354. $results = $dispatcher->trigger('onContentAfterDisplay', array('mod_k2_content', &$item, &$params, $limitstart));
  355. $item->event->AfterDisplayContent = trim(implode("\n", $results));
  356. }
  357. else
  358. {
  359. $results = $dispatcher->trigger('onBeforeDisplay', array(&$item, &$params, $limitstart));
  360. $item->event->BeforeDisplay = trim(implode("\n", $results));
  361. $results = $dispatcher->trigger('onAfterDisplay', array(&$item, &$params, $limitstart));
  362. $item->event->AfterDisplay = trim(implode("\n", $results));
  363. $results = $dispatcher->trigger('onAfterDisplayTitle', array(&$item, &$params, $limitstart));
  364. $item->event->AfterDisplayTitle = trim(implode("\n", $results));
  365. $results = $dispatcher->trigger('onBeforeDisplayContent', array(&$item, &$params, $limitstart));
  366. $item->event->BeforeDisplayContent = trim(implode("\n", $results));
  367. $results = $dispatcher->trigger('onAfterDisplayContent', array(&$item, &$params, $limitstart));
  368. $item->event->AfterDisplayContent = trim(implode("\n", $results));
  369. $dispatcher->trigger('onPrepareContent', array(&$item, &$params, $limitstart));
  370. }
  371. $item->introtext = $item->text;
  372. }
  373. //Init K2 plugin events
  374. $item->event->K2BeforeDisplay = '';
  375. $item->event->K2AfterDisplay = '';
  376. $item->event->K2AfterDisplayTitle = '';
  377. $item->event->K2BeforeDisplayContent = '';
  378. $item->event->K2AfterDisplayContent = '';
  379. $item->event->K2CommentsCounter = '';
  380. if ($params->get('K2Plugins', 1))
  381. {
  382. //K2 plugins
  383. JPluginHelper::importPlugin('k2');
  384. $results = $dispatcher->trigger('onK2BeforeDisplay', array(&$item, &$params, $limitstart));
  385. $item->event->K2BeforeDisplay = trim(implode("\n", $results));
  386. $results = $dispatcher->trigger('onK2AfterDisplay', array(&$item, &$params, $limitstart));
  387. $item->event->K2AfterDisplay = trim(implode("\n", $results));
  388. $results = $dispatcher->trigger('onK2AfterDisplayTitle', array(&$item, &$params, $limitstart));
  389. $item->event->K2AfterDisplayTitle = trim(implode("\n", $results));
  390. $results = $dispatcher->trigger('onK2BeforeDisplayContent', array(&$item, &$params, $limitstart));
  391. $item->event->K2BeforeDisplayContent = trim(implode("\n", $results));
  392. $results = $dispatcher->trigger('onK2AfterDisplayContent', array(&$item, &$params, $limitstart));
  393. $item->event->K2AfterDisplayContent = trim(implode("\n", $results));
  394. $dispatcher->trigger('onK2PrepareContent', array(&$item, &$params, $limitstart));
  395. $item->introtext = $item->text;
  396. if ($params->get('itemCommentsCounter'))
  397. {
  398. $results = $dispatcher->trigger('onK2CommentsCounter', array(&$item, &$params, $limitstart));
  399. $item->event->K2CommentsCounter = trim(implode("\n", $results));
  400. }
  401. }
  402. }
  403. //Clean the plugin tags
  404. $item->introtext = preg_replace("#{(.*?)}(.*?){/(.*?)}#s", '', $item->introtext);
  405. //Author
  406. if ($params->get('itemAuthor'))
  407. {
  408. if (!empty($item->created_by_alias))
  409. {
  410. $item->author = $item->created_by_alias;
  411. $item->authorGender = NULL;
  412. $item->authorDescription = NULL;
  413. if ($params->get('itemAuthorAvatar'))
  414. $item->authorAvatar = K2HelperUtilities::getAvatar('alias');
  415. $item->authorLink = Juri::root(true);
  416. }
  417. else
  418. {
  419. $author = &JFactory::getUser($item->created_by);
  420. $item->author = $author->name;
  421. $query = "SELECT `description`, `gender` FROM #__k2_users WHERE userID=".(int)$author->id;
  422. $db->setQuery($query, 0, 1);
  423. $result = $db->loadObject();
  424. if ($result)
  425. {
  426. $item->authorGender = $result->gender;
  427. $item->authorDescription = $result->description;
  428. }
  429. else
  430. {
  431. $item->authorGender = NULL;
  432. $item->authorDescription = NULL;
  433. }
  434. if ($params->get('itemAuthorAvatar'))
  435. {
  436. $item->authorAvatar = K2HelperUtilities::getAvatar($author->id, $author->email, $componentParams->get('userImageWidth'));
  437. }
  438. //Author Link
  439. $item->authorLink = JRoute::_(K2HelperRoute::getUserRoute($item->created_by));
  440. }
  441. }
  442. // Extra fields plugins
  443. if (is_array($item->extra_fields))
  444. {
  445. foreach ($item->extra_fields as $key => $extraField)
  446. {
  447. if ($extraField->type == 'textarea' || $extraField->type == 'textfield')
  448. {
  449. $tmp = new JObject();
  450. $tmp->text = $extraField->value;
  451. if ($params->get('JPlugins', 1))
  452. {
  453. if (K2_JVERSION == '16')
  454. {
  455. $dispatcher->trigger('onContentPrepare', array('mod_k2_content', &$tmp, &$params, $limitstart));
  456. }
  457. else
  458. {
  459. $dispatcher->trigger('onPrepareContent', array(&$tmp, &$params, $limitstart));
  460. }
  461. }
  462. if ($params->get('K2Plugins', 1))
  463. {
  464. $dispatcher->trigger('onK2PrepareContent', array(&$tmp, &$params, $limitstart));
  465. }
  466. $extraField->value = $tmp->text;
  467. }
  468. }
  469. }
  470. $rows[] = $item;
  471. }
  472. return $rows;
  473. }
  474. }
  475. }