PageRenderTime 53ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/K2/modules/mod_k2_content/helper.php

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