1189 lines
42 KiB
PHP
1189 lines
42 KiB
PHP
<?php
|
|
/**
|
|
* @version $Id: itemlist.php 1885 2013-02-08 11:45:29Z lefteris.kavadas $
|
|
* @package K2
|
|
* @author JoomlaWorks http://www.joomlaworks.net
|
|
* @copyright Copyright (c) 2006 - 2013 JoomlaWorks Ltd. All rights reserved.
|
|
* @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
|
|
*/
|
|
|
|
// no direct access
|
|
defined('_JEXEC') or die ;
|
|
|
|
jimport('joomla.application.component.model');
|
|
|
|
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables');
|
|
|
|
class K2ModelItemlist extends K2Model
|
|
{
|
|
|
|
function getData($ordering = NULL)
|
|
{
|
|
|
|
$user = JFactory::getUser();
|
|
$aid = $user->get('aid');
|
|
$db = JFactory::getDBO();
|
|
$params = K2HelperUtilities::getParams('com_k2');
|
|
$limitstart = JRequest::getInt('limitstart');
|
|
$limit = JRequest::getInt('limit');
|
|
$task = JRequest::getCmd('task');
|
|
if ($task == 'search' && $params->get('googleSearch'))
|
|
return array();
|
|
|
|
$jnow = JFactory::getDate();
|
|
$now = K2_JVERSION == '15' ? $jnow->toMySQL() : $jnow->toSql();
|
|
$nullDate = $db->getNullDate();
|
|
|
|
if (JRequest::getWord('format') == 'feed')
|
|
$limit = $params->get('feedLimit');
|
|
|
|
$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";
|
|
if ($ordering == 'best')
|
|
$query .= ", (r.rating_sum/r.rating_count) AS rating";
|
|
|
|
$query .= " FROM #__k2_items as i RIGHT JOIN #__k2_categories AS c ON c.id = i.catid";
|
|
|
|
if ($ordering == 'best')
|
|
$query .= " LEFT JOIN #__k2_rating r ON r.itemID = i.id";
|
|
|
|
//Changed the query for the tag case for better performance
|
|
//if ($task == 'tag')
|
|
// $query .= " LEFT JOIN #__k2_tags_xref AS tags_xref ON tags_xref.itemID = i.id LEFT JOIN #__k2_tags AS tags ON tags.id = tags_xref.tagID";
|
|
|
|
if ($task == 'user' && !$user->guest && $user->id == JRequest::getInt('id'))
|
|
{
|
|
$query .= " WHERE ";
|
|
}
|
|
else
|
|
{
|
|
$query .= " WHERE i.published = 1 AND ";
|
|
}
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
|
|
$query .= "i.access IN(".implode(',', $user->getAuthorisedViewLevels()).")"." AND i.trash = 0"." AND c.published = 1"." AND c.access IN(".implode(',', $user->getAuthorisedViewLevels()).")"." AND c.trash = 0";
|
|
|
|
$mainframe = JFactory::getApplication();
|
|
$languageFilter = $mainframe->getLanguageFilter();
|
|
if ($languageFilter)
|
|
{
|
|
$languageTag = JFactory::getLanguage()->getTag();
|
|
$query .= " AND c.language IN (".$db->quote($languageTag).",".$db->quote('*').")
|
|
AND i.language IN (".$db->quote($languageTag).",".$db->quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= "i.access <= {$aid}"." AND i.trash = 0"." AND c.published = 1"." AND c.access <= {$aid}"." AND c.trash = 0";
|
|
}
|
|
|
|
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)." )";
|
|
}
|
|
|
|
//Build query depending on task
|
|
switch ($task)
|
|
{
|
|
|
|
case 'category' :
|
|
$id = JRequest::getInt('id');
|
|
|
|
$category = JTable::getInstance('K2Category', 'Table');
|
|
$category->load($id);
|
|
$cparams = class_exists('JParameter') ? new JParameter($category->params) : new JRegistry($category->params);
|
|
|
|
if ($cparams->get('inheritFrom'))
|
|
{
|
|
|
|
$parent = JTable::getInstance('K2Category', 'Table');
|
|
$parent->load($cparams->get('inheritFrom'));
|
|
$cparams = class_exists('JParameter') ? new JParameter($parent->params) : new JRegistry($parent->params);
|
|
}
|
|
|
|
if ($cparams->get('catCatalogMode'))
|
|
{
|
|
$query .= " AND c.id={$id} ";
|
|
}
|
|
else
|
|
{
|
|
$categories = $this->getCategoryTree($id);
|
|
$sql = @implode(',', $categories);
|
|
$query .= " AND c.id IN ({$sql})";
|
|
}
|
|
|
|
break;
|
|
|
|
case 'user' :
|
|
$id = JRequest::getInt('id');
|
|
$query .= " AND i.created_by={$id} AND i.created_by_alias=''";
|
|
$categories = $params->get('userCategoriesFilter', NULL);
|
|
if (is_array($categories))
|
|
{
|
|
$categories = array_filter($categories);
|
|
JArrayHelper::toInteger($categories);
|
|
$query .= " AND c.id IN(".implode(',', $categories).")";
|
|
}
|
|
if (is_string($categories) && $categories > 0)
|
|
{
|
|
$query .= " AND c.id = {$categories}";
|
|
}
|
|
break;
|
|
|
|
case 'search' :
|
|
$badchars = array('#', '>', '<', '\\');
|
|
$search = JString::trim(JString::str_ireplace($badchars, '', JRequest::getString('searchword', null)));
|
|
$sql = $this->prepareSearch($search);
|
|
if (!empty($sql))
|
|
{
|
|
$query .= $sql;
|
|
}
|
|
else
|
|
{
|
|
$rows = array();
|
|
return $rows;
|
|
}
|
|
break;
|
|
|
|
case 'date' :
|
|
if ((JRequest::getInt('month')) && (JRequest::getInt('year')))
|
|
{
|
|
$month = JRequest::getInt('month');
|
|
$year = JRequest::getInt('year');
|
|
$query .= " AND MONTH(i.created) = {$month} AND YEAR(i.created)={$year} ";
|
|
if (JRequest::getInt('day'))
|
|
{
|
|
$day = JRequest::getInt('day');
|
|
$query .= " AND DAY(i.created) = {$day}";
|
|
}
|
|
|
|
if (JRequest::getInt('catid'))
|
|
{
|
|
$catid = JRequest::getInt('catid');
|
|
$query .= " AND c.id={$catid}";
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
case 'tag' :
|
|
$tag = JRequest::getString('tag');
|
|
jimport('joomla.filesystem.file');
|
|
if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $task == 'tag')
|
|
{
|
|
|
|
$registry = JFactory::getConfig();
|
|
$lang = K2_JVERSION == '30' ? $registry->get('jflang') : $registry->getValue('config.jflang');
|
|
|
|
$sql = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
|
|
$sql .= " WHERE jfc.value = ".$db->Quote($tag);
|
|
$sql .= " AND jfc.reference_table = 'k2_tags'";
|
|
$sql .= " AND jfc.reference_field = 'name' AND jfc.published=1";
|
|
|
|
$db->setQuery($sql, 0, 1);
|
|
$result = $db->loadResult();
|
|
|
|
}
|
|
|
|
if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_falang'.DS.'falang.php') && $task == 'tag')
|
|
{
|
|
|
|
$registry = JFactory::getConfig();
|
|
$lang = K2_JVERSION == '30' ? $registry->get('jflang') : $registry->getValue('config.jflang');
|
|
|
|
$sql = " SELECT reference_id FROM #__falang_content as fc LEFT JOIN #__languages as fl ON fc.language_id = fl.lang_id";
|
|
$sql .= " WHERE fc.value = ".$db->Quote($tag);
|
|
$sql .= " AND fc.reference_table = 'k2_tags'";
|
|
$sql .= " AND fc.reference_field = 'name' AND fc.published=1";
|
|
|
|
$db->setQuery($sql, 0, 1);
|
|
$result = $db->loadResult();
|
|
|
|
}
|
|
|
|
if (!isset($result) || $result < 1)
|
|
{
|
|
$sql = "SELECT id FROM #__k2_tags WHERE name=".$db->Quote($tag);
|
|
$db->setQuery($sql, 0, 1);
|
|
$result = $db->loadResult();
|
|
}
|
|
|
|
$query .= " AND i.id IN (SELECT itemID FROM #__k2_tags_xref WHERE tagID=".(int)$result.")";
|
|
|
|
/*if (isset($result) && $result > 0) {
|
|
$query .= " AND (tags.id) = {$result}";
|
|
} else {
|
|
$query .= " AND (tags.name) = ".$db->Quote($tag);
|
|
}*/
|
|
|
|
$categories = $params->get('categoriesFilter', NULL);
|
|
if (is_array($categories))
|
|
{
|
|
JArrayHelper::toInteger($categories);
|
|
$query .= " AND c.id IN(".implode(',', $categories).")";
|
|
}
|
|
if (is_string($categories))
|
|
$query .= " AND c.id = {$categories}";
|
|
break;
|
|
|
|
default :
|
|
$searchIDs = $params->get('categories');
|
|
|
|
if (is_array($searchIDs) && count($searchIDs))
|
|
{
|
|
|
|
if ($params->get('catCatalogMode'))
|
|
{
|
|
$sql = @implode(',', $searchIDs);
|
|
$query .= " AND c.id IN ({$sql})";
|
|
}
|
|
else
|
|
{
|
|
|
|
$result = $this->getCategoryTree($searchIDs);
|
|
if (count($result))
|
|
{
|
|
$sql = @implode(',', $result);
|
|
$query .= " AND c.id IN ({$sql})";
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//Set featured flag
|
|
if ($task == 'category' || empty($task))
|
|
{
|
|
if (JRequest::getInt('featured') == '0')
|
|
{
|
|
$query .= " AND i.featured != 1";
|
|
}
|
|
else if (JRequest::getInt('featured') == '2')
|
|
{
|
|
$query .= " AND i.featured = 1";
|
|
}
|
|
}
|
|
|
|
//Remove duplicates
|
|
//$query .= " GROUP BY i.id";
|
|
|
|
//Set ordering
|
|
switch ($ordering)
|
|
{
|
|
|
|
case 'date' :
|
|
$orderby = 'i.created ASC';
|
|
break;
|
|
|
|
case 'rdate' :
|
|
$orderby = 'i.created DESC';
|
|
break;
|
|
|
|
case 'alpha' :
|
|
$orderby = 'i.title';
|
|
break;
|
|
|
|
case 'ralpha' :
|
|
$orderby = 'i.title DESC';
|
|
break;
|
|
|
|
case 'order' :
|
|
if (JRequest::getInt('featured') == '2')
|
|
$orderby = 'i.featured_ordering';
|
|
else
|
|
$orderby = 'c.ordering, i.ordering';
|
|
break;
|
|
|
|
case 'rorder' :
|
|
if (JRequest::getInt('featured') == '2')
|
|
$orderby = 'i.featured_ordering DESC';
|
|
else
|
|
$orderby = 'c.ordering DESC, i.ordering DESC';
|
|
break;
|
|
|
|
case 'featured' :
|
|
$orderby = 'i.featured DESC, i.created DESC';
|
|
break;
|
|
|
|
case 'hits' :
|
|
$orderby = 'i.hits DESC';
|
|
break;
|
|
|
|
case 'rand' :
|
|
$orderby = 'RAND()';
|
|
break;
|
|
|
|
case 'best' :
|
|
$orderby = 'rating DESC';
|
|
break;
|
|
|
|
case 'modified' :
|
|
$orderby = 'lastChanged DESC';
|
|
break;
|
|
|
|
case 'publishUp' :
|
|
$orderby = 'i.publish_up DESC';
|
|
break;
|
|
|
|
case 'id' :
|
|
default :
|
|
$orderby = 'i.id DESC';
|
|
break;
|
|
}
|
|
|
|
$query .= " ORDER BY ".$orderby;
|
|
$dispatcher = JDispatcher::getInstance();
|
|
JPluginHelper::importPlugin('k2');
|
|
$dispatcher->trigger('onK2BeforeSetQuery', array(&$query));
|
|
$db->setQuery($query, $limitstart, $limit);
|
|
$rows = $db->loadObjectList();
|
|
return $rows;
|
|
}
|
|
|
|
function getTotal()
|
|
{
|
|
|
|
$user = JFactory::getUser();
|
|
$aid = $user->get('aid');
|
|
$db = JFactory::getDBO();
|
|
$params = K2HelperUtilities::getParams('com_k2');
|
|
$task = JRequest::getCmd('task');
|
|
|
|
if ($task == 'search' && $params->get('googleSearch'))
|
|
return 0;
|
|
|
|
$jnow = JFactory::getDate();
|
|
$now = K2_JVERSION == '15' ? $jnow->toMySQL() : $jnow->toSql();
|
|
$nullDate = $db->getNullDate();
|
|
|
|
$query = "SELECT COUNT(*) FROM #__k2_items as i RIGHT JOIN #__k2_categories c ON c.id = i.catid";
|
|
|
|
if ($task == 'tag')
|
|
$query .= " LEFT JOIN #__k2_tags_xref tags_xref ON tags_xref.itemID = i.id LEFT JOIN #__k2_tags tags ON tags.id = tags_xref.tagID";
|
|
|
|
if ($task == 'user' && !$user->guest && $user->id == JRequest::getInt('id'))
|
|
{
|
|
$query .= " WHERE ";
|
|
}
|
|
else
|
|
{
|
|
$query .= " WHERE i.published = 1 AND ";
|
|
}
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= "i.access IN(".implode(',', $user->getAuthorisedViewLevels()).")"." AND i.trash = 0"." AND c.published = 1"." AND c.access IN(".implode(',', $user->getAuthorisedViewLevels()).")"." AND c.trash = 0";
|
|
|
|
$mainframe = JFactory::getApplication();
|
|
$languageFilter = $mainframe->getLanguageFilter();
|
|
if ($languageFilter)
|
|
{
|
|
$languageTag = JFactory::getLanguage()->getTag();
|
|
$query .= " AND c.language IN (".$db->quote($languageTag).",".$db->quote('*').")
|
|
AND i.language IN (".$db->quote($languageTag).",".$db->quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= "i.access <= {$aid}"." AND i.trash = 0"." AND c.published = 1"." AND c.access <= {$aid}"." AND c.trash = 0";
|
|
}
|
|
|
|
$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)." )";
|
|
|
|
//Build query depending on task
|
|
switch ($task)
|
|
{
|
|
|
|
case 'category' :
|
|
$id = JRequest::getInt('id');
|
|
|
|
$category = JTable::getInstance('K2Category', 'Table');
|
|
$category->load($id);
|
|
$cparams = class_exists('JParameter') ? new JParameter($category->params) : new JRegistry($category->params);
|
|
|
|
if ($cparams->get('inheritFrom'))
|
|
{
|
|
|
|
$parent = JTable::getInstance('K2Category', 'Table');
|
|
$parent->load($cparams->get('inheritFrom'));
|
|
$cparams = class_exists('JParameter') ? new JParameter($parent->params) : new JRegistry($parent->params);
|
|
}
|
|
|
|
if ($cparams->get('catCatalogMode'))
|
|
{
|
|
$query .= " AND c.id={$id} ";
|
|
}
|
|
else
|
|
{
|
|
$categories = $this->getCategoryTree($id);
|
|
$sql = @implode(',', $categories);
|
|
$query .= " AND c.id IN ({$sql})";
|
|
}
|
|
|
|
break;
|
|
|
|
case 'user' :
|
|
$id = JRequest::getInt('id');
|
|
$query .= " AND i.created_by={$id} AND i.created_by_alias=''";
|
|
$categories = $params->get('userCategoriesFilter', NULL);
|
|
if (is_array($categories))
|
|
{
|
|
$categories = array_filter($categories);
|
|
JArrayHelper::toInteger($categories);
|
|
$query .= " AND c.id IN(".implode(',', $categories).")";
|
|
}
|
|
if (is_string($categories) && $categories > 0)
|
|
{
|
|
$query .= " AND c.id = {$categories}";
|
|
}
|
|
break;
|
|
|
|
case 'search' :
|
|
$badchars = array('#', '>', '<', '\\');
|
|
$search = trim(str_replace($badchars, '', JRequest::getString('searchword', null)));
|
|
$sql = $this->prepareSearch($search);
|
|
if (!empty($sql))
|
|
{
|
|
$query .= $sql;
|
|
}
|
|
else
|
|
{
|
|
$result = 0;
|
|
return $result;
|
|
}
|
|
break;
|
|
|
|
case 'date' :
|
|
if ((JRequest::getInt('month')) && (JRequest::getInt('year')))
|
|
{
|
|
$month = JRequest::getInt('month');
|
|
$year = JRequest::getInt('year');
|
|
$query .= " AND MONTH(i.created) = {$month} AND YEAR(i.created)={$year} ";
|
|
if (JRequest::getInt('day'))
|
|
{
|
|
$day = JRequest::getInt('day');
|
|
$query .= " AND DAY(i.created) = {$day}";
|
|
}
|
|
|
|
if (JRequest::getInt('catid'))
|
|
{
|
|
$catid = JRequest::getInt('catid');
|
|
$query .= " AND c.id={$catid}";
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
case 'tag' :
|
|
$tag = JRequest::getString('tag');
|
|
jimport('joomla.filesystem.file');
|
|
if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $task == 'tag')
|
|
{
|
|
|
|
$registry = JFactory::getConfig();
|
|
$lang = K2_JVERSION == '30' ? $registry->get('jflang') : $registry->getValue('config.jflang');
|
|
|
|
$sql = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
|
|
$sql .= " WHERE jfc.value = ".$db->Quote($tag);
|
|
$sql .= " AND jfc.reference_table = 'k2_tags'";
|
|
$sql .= " AND jfc.reference_field = 'name' AND jfc.published=1";
|
|
|
|
$db->setQuery($sql, 0, 1);
|
|
$result = $db->loadResult();
|
|
|
|
}
|
|
|
|
if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_falang'.DS.'falang.php') && $task == 'tag')
|
|
{
|
|
|
|
$registry = JFactory::getConfig();
|
|
$lang = K2_JVERSION == '30' ? $registry->get('jflang') : $registry->getValue('config.jflang');
|
|
|
|
$sql = " SELECT reference_id FROM #__falang_content as fc LEFT JOIN #__languages as fl ON fc.language_id = fl.lang_id";
|
|
$sql .= " WHERE fc.value = ".$db->Quote($tag);
|
|
$sql .= " AND fc.reference_table = 'k2_tags'";
|
|
$sql .= " AND fc.reference_field = 'name' AND fc.published=1";
|
|
|
|
$db->setQuery($sql, 0, 1);
|
|
$result = $db->loadResult();
|
|
|
|
}
|
|
|
|
if (isset($result) && $result > 0)
|
|
{
|
|
$query .= " AND (tags.id) = {$result}";
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND (tags.name) = ".$db->Quote($tag);
|
|
}
|
|
$categories = $params->get('categoriesFilter', NULL);
|
|
if (is_array($categories))
|
|
$query .= " AND c.id IN(".implode(',', $categories).")";
|
|
if (is_string($categories))
|
|
$query .= " AND c.id = {$categories}";
|
|
break;
|
|
|
|
default :
|
|
$searchIDs = $params->get('categories');
|
|
|
|
if (is_array($searchIDs) && count($searchIDs))
|
|
{
|
|
|
|
if ($params->get('catCatalogMode'))
|
|
{
|
|
$sql = @implode(',', $searchIDs);
|
|
$query .= " AND c.id IN ({$sql})";
|
|
}
|
|
else
|
|
{
|
|
$result = $this->getCategoryTree($searchIDs);
|
|
if (count($result))
|
|
{
|
|
$sql = @implode(',', $result);
|
|
$query .= " AND c.id IN ({$sql})";
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//Set featured flag
|
|
if ($task == 'category' || empty($task))
|
|
{
|
|
if (JRequest::getVar('featured') == '0')
|
|
{
|
|
$query .= " AND i.featured != 1";
|
|
}
|
|
else if (JRequest::getVar('featured') == '2')
|
|
{
|
|
$query .= " AND i.featured = 1";
|
|
}
|
|
}
|
|
$dispatcher = JDispatcher::getInstance();
|
|
JPluginHelper::importPlugin('k2');
|
|
$dispatcher->trigger('onK2BeforeSetQuery', array(&$query));
|
|
$db->setQuery($query);
|
|
$result = $db->loadResult();
|
|
return $result;
|
|
}
|
|
|
|
function getCategoryTree($categories)
|
|
{
|
|
$mainframe = JFactory::getApplication();
|
|
$db = JFactory::getDBO();
|
|
$user = JFactory::getUser();
|
|
$aid = (int)$user->get('aid');
|
|
if (!is_array($categories))
|
|
{
|
|
$categories = (array)$categories;
|
|
}
|
|
JArrayHelper::toInteger($categories);
|
|
$categories = array_unique($categories);
|
|
sort($categories);
|
|
$key = implode('|', $categories);
|
|
$clientID = $mainframe->getClientId();
|
|
static $K2CategoryTreeInstances = array();
|
|
if (isset($K2CategoryTreeInstances[$clientID]) && array_key_exists($key, $K2CategoryTreeInstances[$clientID]))
|
|
{
|
|
return $K2CategoryTreeInstances[$clientID][$key];
|
|
}
|
|
$array = $categories;
|
|
while (count($array))
|
|
{
|
|
$query = "SELECT id
|
|
FROM #__k2_categories
|
|
WHERE parent IN (".implode(',', $array).")
|
|
AND id NOT IN (".implode(',', $array).") ";
|
|
if ($mainframe->isSite())
|
|
{
|
|
$query .= "
|
|
AND published=1
|
|
AND trash=0";
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND access IN(".implode(',', $user->getAuthorisedViewLevels()).")";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND access<={$aid}";
|
|
}
|
|
}
|
|
$db->setQuery($query);
|
|
$array = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
|
|
$categories = array_merge($categories, $array);
|
|
}
|
|
JArrayHelper::toInteger($categories);
|
|
$categories = array_unique($categories);
|
|
$K2CategoryTreeInstances[$clientID][$key] = $categories;
|
|
return $categories;
|
|
}
|
|
|
|
// Deprecated function, left for compatibility reasons
|
|
function getCategoryChildren($catid, $clear = false)
|
|
{
|
|
|
|
static $array = array();
|
|
if ($clear)
|
|
$array = array();
|
|
$user = JFactory::getUser();
|
|
$aid = (int)$user->get('aid');
|
|
$catid = (int)$catid;
|
|
$db = JFactory::getDBO();
|
|
$query = "SELECT * FROM #__k2_categories WHERE parent={$catid} AND published=1 AND trash=0 AND access<={$aid} ORDER BY ordering ";
|
|
$db->setQuery($query);
|
|
$rows = $db->loadObjectList();
|
|
|
|
foreach ($rows as $row)
|
|
{
|
|
array_push($array, $row->id);
|
|
if ($this->hasChildren($row->id))
|
|
{
|
|
$this->getCategoryChildren($row->id);
|
|
}
|
|
}
|
|
return $array;
|
|
}
|
|
|
|
// Deprecated function, left for compatibility reasons
|
|
function hasChildren($id)
|
|
{
|
|
|
|
$user = JFactory::getUser();
|
|
$aid = (int)$user->get('aid');
|
|
$id = (int)$id;
|
|
$db = JFactory::getDBO();
|
|
$query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ";
|
|
$db->setQuery($query);
|
|
$rows = $db->loadObjectList();
|
|
|
|
if (count($rows))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function getCategoryFirstChildren($catid, $ordering = NULL)
|
|
{
|
|
|
|
$mainframe = JFactory::getApplication();
|
|
$user = JFactory::getUser();
|
|
$aid = $user->get('aid');
|
|
$db = JFactory::getDBO();
|
|
$query = "SELECT * FROM #__k2_categories WHERE parent={$catid} AND published=1 AND trash=0";
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND access<={$aid} ";
|
|
}
|
|
|
|
switch ($ordering)
|
|
{
|
|
|
|
case 'order' :
|
|
$order = " ordering ASC";
|
|
break;
|
|
|
|
case 'alpha' :
|
|
$order = " name ASC";
|
|
break;
|
|
|
|
case 'ralpha' :
|
|
$order = " name DESC";
|
|
break;
|
|
|
|
case 'reversedefault' :
|
|
$order = " id DESC";
|
|
break;
|
|
|
|
default :
|
|
$order = " id ASC";
|
|
break;
|
|
}
|
|
|
|
$query .= " ORDER BY {$order}";
|
|
|
|
$db->setQuery($query);
|
|
$rows = $db->loadObjectList();
|
|
if ($db->getErrorNum())
|
|
{
|
|
echo $db->stderr();
|
|
return false;
|
|
}
|
|
|
|
return $rows;
|
|
}
|
|
|
|
function countCategoryItems($id)
|
|
{
|
|
|
|
$mainframe = JFactory::getApplication();
|
|
$user = JFactory::getUser();
|
|
$aid = (int)$user->get('aid');
|
|
$id = (int)$id;
|
|
$db = JFactory::getDBO();
|
|
|
|
$jnow = JFactory::getDate();
|
|
$now = K2_JVERSION == '15' ? $jnow->toMySQL() : $jnow->toSql();
|
|
$nullDate = $db->getNullDate();
|
|
|
|
$categories = $this->getCategoryTree($id);
|
|
$query = "SELECT COUNT(*) FROM #__k2_items WHERE catid IN (".implode(',', $categories).") AND published=1 AND trash=0";
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND access<=".$aid;
|
|
}
|
|
|
|
$query .= " AND ( publish_up = ".$db->Quote($nullDate)." OR publish_up <= ".$db->Quote($now)." )";
|
|
$query .= " AND ( publish_down = ".$db->Quote($nullDate)." OR publish_down >= ".$db->Quote($now)." )";
|
|
$db->setQuery($query);
|
|
$total = $db->loadResult();
|
|
return $total;
|
|
}
|
|
|
|
function getUserProfile($id = NULL)
|
|
{
|
|
|
|
$db = JFactory::getDBO();
|
|
if (is_null($id))
|
|
$id = JRequest::getInt('id');
|
|
else
|
|
$id = (int)$id;
|
|
$query = "SELECT id, gender, description, image, url, `group`, plugins FROM #__k2_users WHERE userID={$id}";
|
|
$db->setQuery($query);
|
|
$row = $db->loadObject();
|
|
return $row;
|
|
}
|
|
|
|
function getAuthorLatest($itemID, $limit, $userID)
|
|
{
|
|
|
|
$mainframe = JFactory::getApplication();
|
|
$user = JFactory::getUser();
|
|
$aid = (int)$user->get('aid');
|
|
$itemID = (int)$itemID;
|
|
$userID = (int)$userID;
|
|
$limit = (int)$limit;
|
|
$db = JFactory::getDBO();
|
|
|
|
$jnow = JFactory::getDate();
|
|
$now = K2_JVERSION == '15' ? $jnow->toMySQL() : $jnow->toSql();
|
|
$nullDate = $db->getNullDate();
|
|
|
|
$query = "SELECT i.*, c.alias as categoryalias FROM #__k2_items as i
|
|
LEFT JOIN #__k2_categories c ON c.id = i.catid
|
|
WHERE i.id != {$itemID}
|
|
AND i.published = 1
|
|
AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )
|
|
AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." ) ";
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND i.access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND i.language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND i.access <= {$aid} ";
|
|
}
|
|
|
|
$query .= " AND i.trash = 0
|
|
AND i.created_by = {$userID}
|
|
AND i.created_by_alias=''
|
|
AND c.published = 1 ";
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND c.access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND c.language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND c.access <= {$aid} ";
|
|
}
|
|
|
|
$query .= " AND c.trash = 0
|
|
ORDER BY i.created DESC";
|
|
|
|
$db->setQuery($query, 0, $limit);
|
|
$rows = $db->loadObjectList();
|
|
|
|
foreach ($rows as $item)
|
|
{
|
|
//Image
|
|
$item->imageXSmall = '';
|
|
$item->imageSmall = '';
|
|
$item->imageMedium = '';
|
|
$item->imageLarge = '';
|
|
$item->imageXLarge = '';
|
|
|
|
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_XS.jpg'))
|
|
$item->imageXSmall = JURI::root(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_XS.jpg';
|
|
|
|
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_S.jpg'))
|
|
$item->imageSmall = JURI::root(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_S.jpg';
|
|
|
|
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_M.jpg'))
|
|
$item->imageMedium = JURI::root(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_M.jpg';
|
|
|
|
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_L.jpg'))
|
|
$item->imageLarge = JURI::root(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_L.jpg';
|
|
|
|
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_XL.jpg'))
|
|
$item->imageXLarge = JURI::root(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_XL.jpg';
|
|
|
|
if (JFile::exists(JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_Generic.jpg'))
|
|
$item->imageGeneric = JURI::root(true).'/media/k2/items/cache/'.md5("Image".$item->id).'_Generic.jpg';
|
|
}
|
|
|
|
return $rows;
|
|
}
|
|
|
|
function getRelatedItems($itemID, $tags, $params)
|
|
{
|
|
|
|
$mainframe = JFactory::getApplication();
|
|
$limit = $params->get('itemRelatedLimit', 10);
|
|
$itemID = (int)$itemID;
|
|
foreach ($tags as $tag)
|
|
{
|
|
$tagIDs[] = $tag->id;
|
|
}
|
|
JArrayHelper::toInteger($tagIDs);
|
|
$sql = implode(',', $tagIDs);
|
|
|
|
$user = JFactory::getUser();
|
|
$aid = (int)$user->get('aid');
|
|
$db = JFactory::getDBO();
|
|
|
|
$jnow = JFactory::getDate();
|
|
$now = K2_JVERSION == '15' ? $jnow->toMySQL() : $jnow->toSql();
|
|
$nullDate = $db->getNullDate();
|
|
|
|
$query = "SELECT DISTINCT itemID FROM #__k2_tags_xref WHERE tagID IN ({$sql}) AND itemID!={$itemID}";
|
|
$db->setQuery($query);
|
|
$itemsIDs = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
|
|
|
|
if (!count($itemsIDs))
|
|
return array();
|
|
|
|
$sql = implode(',', $itemsIDs);
|
|
|
|
$query = "SELECT i.*, c.alias as categoryalias FROM #__k2_items as i
|
|
LEFT JOIN #__k2_categories c ON c.id = i.catid
|
|
WHERE i.published = 1
|
|
AND ( i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now)." )
|
|
AND ( i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now)." ) ";
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND i.access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND i.language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND i.access <= {$aid} ";
|
|
}
|
|
|
|
$query .= " AND i.trash = 0
|
|
AND c.published = 1 ";
|
|
|
|
if (K2_JVERSION != '15')
|
|
{
|
|
$query .= " AND c.access IN(".implode(',', $user->getAuthorisedViewLevels()).") ";
|
|
if ($mainframe->getLanguageFilter())
|
|
{
|
|
$query .= " AND c.language IN(".$db->Quote(JFactory::getLanguage()->getTag()).", ".$db->Quote('*').")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$query .= " AND c.access <= {$aid} ";
|
|
}
|
|
|
|
$query .= " AND c.trash = 0
|
|
AND (i.id) IN ({$sql})
|
|
ORDER BY i.created DESC";
|
|
|
|
$db->setQuery($query, 0, $limit);
|
|
$rows = $db->loadObjectList();
|
|
K2Model::addIncludePath(JPATH_COMPONENT.DS.'models');
|
|
$model = K2Model::getInstance('Item', 'K2Model');
|
|
for ($key = 0; $key < sizeof($rows); $key++)
|
|
{
|
|
$rows[$key] = $model->prepareItem($rows[$key], 'relatedByTag', '');
|
|
$rows[$key] = $model->execPlugins($rows[$key], 'relatedByTag', '');
|
|
K2HelperUtilities::setDefaultImage($rows[$key], 'relatedByTag', $params);
|
|
}
|
|
return $rows;
|
|
}
|
|
|
|
function prepareSearch($search)
|
|
{
|
|
|
|
jimport('joomla.filesystem.file');
|
|
$db = JFactory::getDBO();
|
|
$language = JFactory::getLanguage();
|
|
$defaultLang = $language->getDefault();
|
|
$currentLang = $language->getTag();
|
|
$length = JString::strlen($search);
|
|
$sql = '';
|
|
|
|
if (JRequest::getVar('categories'))
|
|
{
|
|
$categories = @explode(',', JRequest::getVar('categories'));
|
|
JArrayHelper::toInteger($categories);
|
|
$sql .= " AND c.id IN (".@implode(',', $categories).") ";
|
|
}
|
|
|
|
if (empty($search))
|
|
{
|
|
return $sql;
|
|
}
|
|
|
|
if (JString::substr($search, 0, 1) == '"' && JString::substr($search, $length - 1, 1) == '"')
|
|
{
|
|
$type = 'exact';
|
|
}
|
|
else
|
|
{
|
|
$type = 'any';
|
|
}
|
|
|
|
if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $currentLang != $defaultLang)
|
|
{
|
|
|
|
$conditions = array();
|
|
$search_ignore = array();
|
|
|
|
$ignoreFile = $language->getLanguagePath().DS.$currentLang.DS.$currentLang.'.ignore.php';
|
|
|
|
if (JFile::exists($ignoreFile))
|
|
{
|
|
include $ignoreFile;
|
|
}
|
|
|
|
if ($type == 'exact')
|
|
{
|
|
|
|
$word = JString::substr($search, 1, $length - 2);
|
|
|
|
if (JString::strlen($word) > 3 && !in_array($word, $search_ignore))
|
|
{
|
|
$escaped = K2_JVERSION == '15' ? $db->getEscaped($word, true) : $db->escape($word, true);
|
|
$langField = K2_JVERSION == '15' ? 'code' : 'lang_code';
|
|
$word = $db->Quote('%'.$escaped.'%', false);
|
|
|
|
$jfQuery = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
|
|
$jfQuery .= " WHERE jfc.reference_table = 'k2_items'";
|
|
$jfQuery .= " AND jfl.".$langField."=".$db->Quote($currentLang);
|
|
$jfQuery .= " AND jfc.published=1";
|
|
$jfQuery .= " AND jfc.value LIKE ".$word;
|
|
$jfQuery .= " AND (jfc.reference_field = 'title'
|
|
OR jfc.reference_field = 'introtext'
|
|
OR jfc.reference_field = 'fulltext'
|
|
OR jfc.reference_field = 'image_caption'
|
|
OR jfc.reference_field = 'image_credits'
|
|
OR jfc.reference_field = 'video_caption'
|
|
OR jfc.reference_field = 'video_credits'
|
|
OR jfc.reference_field = 'extra_fields_search'
|
|
OR jfc.reference_field = 'metadesc'
|
|
OR jfc.reference_field = 'metakey'
|
|
)";
|
|
$db->setQuery($jfQuery);
|
|
$result = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
|
|
$result = @array_unique($result);
|
|
JArrayHelper::toInteger($result);
|
|
if (count($result))
|
|
{
|
|
$conditions[] = "i.id IN(".implode(',', $result).")";
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
$search = explode(' ', JString::strtolower($search));
|
|
foreach ($search as $searchword)
|
|
{
|
|
|
|
if (JString::strlen($searchword) > 3 && !in_array($searchword, $search_ignore))
|
|
{
|
|
|
|
$escaped = K2_JVERSION == '15' ? $db->getEscaped($searchword, true) : $db->escape($searchword, true);
|
|
$word = $db->Quote('%'.$escaped.'%', false);
|
|
$langField = K2_JVERSION == '15' ? 'code' : 'lang_code';
|
|
|
|
$jfQuery = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
|
|
$jfQuery .= " WHERE jfc.reference_table = 'k2_items'";
|
|
$jfQuery .= " AND jfl.".$langField."=".$db->Quote($currentLang);
|
|
$jfQuery .= " AND jfc.published=1";
|
|
$jfQuery .= " AND jfc.value LIKE ".$word;
|
|
$jfQuery .= " AND (jfc.reference_field = 'title'
|
|
OR jfc.reference_field = 'introtext'
|
|
OR jfc.reference_field = 'fulltext'
|
|
OR jfc.reference_field = 'image_caption'
|
|
OR jfc.reference_field = 'image_credits'
|
|
OR jfc.reference_field = 'video_caption'
|
|
OR jfc.reference_field = 'video_credits'
|
|
OR jfc.reference_field = 'extra_fields_search'
|
|
OR jfc.reference_field = 'metadesc'
|
|
OR jfc.reference_field = 'metakey'
|
|
)";
|
|
$db->setQuery($jfQuery);
|
|
$result = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
|
|
$result = @array_unique($result);
|
|
foreach ($result as $id)
|
|
{
|
|
$allIDs[] = $id;
|
|
}
|
|
|
|
if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $currentLang != $defaultLang)
|
|
{
|
|
|
|
if (isset($allIDs) && count($allIDs))
|
|
{
|
|
JArrayHelper::toInteger($allIDs);
|
|
$conditions[] = "i.id IN(".implode(',', $allIDs).")";
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (count($conditions))
|
|
{
|
|
$sql .= " AND (".implode(" OR ", $conditions).")";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
$sql .= " AND MATCH(i.title, i.introtext, i.`fulltext`,i.image_caption,i.image_credits,i.video_caption,i.video_credits,i.extra_fields_search,i.metadesc,i.metakey) ";
|
|
if ($type == 'exact')
|
|
{
|
|
$text = JString::trim($search, '"');
|
|
$escaped = K2_JVERSION == '15' ? $db->getEscaped($text, true) : $db->escape($text, true);
|
|
$text = $db->Quote('"'.$db->getEscaped($text, true).'"', false);
|
|
}
|
|
else
|
|
{
|
|
$search = JString::str_ireplace('*', '', $search);
|
|
$words = explode(' ', $search);
|
|
for ($i = 0; $i < count($words); $i++)
|
|
{
|
|
$words[$i] .= '*';
|
|
}
|
|
$search = implode(' ', $words);
|
|
$escaped = K2_JVERSION == '15' ? $db->getEscaped($search, true) : $db->escape($search, true);
|
|
$text = $db->Quote($escaped, false);
|
|
}
|
|
$sql .= " AGAINST ({$text} IN BOOLEAN MODE)";
|
|
|
|
}
|
|
|
|
return $sql;
|
|
}
|
|
|
|
function getModuleItems($moduleID)
|
|
{
|
|
|
|
$db = JFactory::getDBO();
|
|
$query = "SELECT * FROM #__modules WHERE id={$moduleID} AND published=1 AND client_id=0";
|
|
$db->setQuery($query, 0, 1);
|
|
$module = $db->loadObject();
|
|
$format = JRequest::getWord('format');
|
|
if (is_null($module))
|
|
JError::raiseError(404, JText::_('K2_NOT_FOUND'));
|
|
else
|
|
{
|
|
$params = class_exists('JParameter') ? new JParameter($module->params) : new JRegistry($module->params);
|
|
switch ($module->module)
|
|
{
|
|
|
|
case 'mod_k2_content' :
|
|
require_once (JPATH_SITE.DS.'modules'.DS.'mod_k2_content'.DS.'helper.php');
|
|
$helper = new modK2ContentHelper;
|
|
$items = $helper->getItems($params, $format);
|
|
break;
|
|
|
|
case 'mod_k2_comments' :
|
|
if ($params->get('module_usage') == 1)
|
|
JError::raiseError(404, JText::_('K2_NOT_FOUND'));
|
|
|
|
require_once (JPATH_SITE.DS.'modules'.DS.'mod_k2_comments'.DS.'helper.php');
|
|
$helper = new modK2CommentsHelper;
|
|
$items = $helper->getLatestComments($params);
|
|
|
|
foreach ($items as $item)
|
|
{
|
|
$item->title = $item->userName.' '.JText::_('K2_COMMENTED_ON').' '.$item->title;
|
|
$item->introtext = $item->commentText;
|
|
$item->created = $item->commentDate;
|
|
$item->id = $item->itemID;
|
|
}
|
|
break;
|
|
|
|
default :
|
|
JError::raiseError(404, JText::_('K2_NOT_FOUND'));
|
|
}
|
|
|
|
$result = new JObject;
|
|
$result->items = $items;
|
|
$result->title = $module->title;
|
|
$result->module = $module->module;
|
|
$result->params = $module->params;
|
|
return $result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|