Current File : /home/pacjaorg/public_html/km/administrator/components/com_djclassifieds/models/items.php |
<?php
/**
* @package DJ-Classifieds
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email: contact@dj-extensions.com
*/
defined ('_JEXEC') or die('Restricted access');
class DjClassifiedsModelItems extends JModelList
{
public function __construct($config = array())
{
if (empty($config['filter_fields'])) {
$config['filter_fields'] = array(
'name', 'i.name',
'id', 'i.id',
'cat_id', 'a.cat_id',
'category_name', 'region_name',
'description', 'i.description',
'tooltip', 'i.tooltip',
'art_id', 'i.art_id',
'details', 'i.details',
'ordering', 'i.ordering',
'date_start', 'i.date_start',
'published', 'i.published',
'abuse', 'a.c_abuse','i.promotions',
'special', 'i.special','s_active','u.name',
'active', 'blocked',
'category', 'region', 'type'
);
}
parent::__construct($config);
}
protected function populateState($ordering = null, $direction = null)
{
parent::populateState('i.id', 'desc');
$search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
$this->setState('filter.search', $search);
$published = $this->getUserStateFromRequest($this->context.'.filter.published', 'filter_published', '');
$this->setState('filter.published', $published);
$category = $this->getUserStateFromRequest($this->context.'.filter.category', 'filter_category', '');
$this->setState('filter.category', $category);
$region = $this->getUserStateFromRequest($this->context.'.filter.region', 'filter_region', '');
$this->setState('filter.region', $region);
$published = $this->getUserStateFromRequest($this->context.'.filter.active', 'filter_active', '');
$this->setState('filter.active', $published);
$blocked = $this->getUserStateFromRequest($this->context.'.filter.blocked', 'filter_blocked', '');
$this->setState('filter.blocked', $blocked);
$abuse = $this->getUserStateFromRequest($this->context.'.filter.abuse', 'filter_abuse', '');
$this->setState('filter.abuse', $abuse);
$type = $this->getUserStateFromRequest($this->context.'.filter.type', 'filter_type', '');
$this->setState('filter.type', $type);
$order = $this->getUserStateFromRequest($this->context.'.filter.order', 'filter_order');
if($order){
$this->setState('list.ordering', $order);
}
$order_dir = $this->getUserStateFromRequest($this->context.'.filter.order_Dir', 'filter_order_Dir');
if($order_dir){
$this->setState('list.direction', $order_dir);
}
}
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':'.$this->getState('filter.search');
$id .= ':'.$this->getState('filter.published');
$id .= ':'.$this->getState('filter.category');
$id .= ':'.$this->getState('filter.region');
$id .= ':'.$this->getState('filter.active');
$id .= ':'.$this->getState('filter.ids');
$id .= ':'.$this->getState('filter.blocked');
$id .= ':'.$this->getState('filter.abuse');
$id .= ':'.$this->getState('filter.type');
return parent::getStoreId($id);
}
protected function getListQuery()
{
$date_now = JFactory::getDate()->toSQL();
$orderCol = $this->getState('list.ordering');
$orderDirn = $this->getState('list.direction');
if($orderCol == 'i.ordering'){
$orderCol = 'i.cat_id asc, i.ordering';
}elseif($orderCol == 'category_name'){
$orderCol = 'c.name';
}elseif($orderCol == 'region_name'){
$orderCol = 'r.name';
}elseif($orderCol == 's_active'){
$active = $this->getState('filter.active');
if(is_numeric($active)){
$orderCol = ' i.date_exp ';
}else{
$orderCol = 's_active '.$orderDirn.', i.date_exp DESC';
$orderDirn = '';
}
}
$where = '';
$category = $this->getState('filter.category');
if (is_numeric($category) && $category != 0) {
$catlist = '';
$cats = DJClassifiedsCategory::getSubCatItemsCount((int) $category);
$catlist = (int) $category;
foreach($cats as $c){
$catlist .= ','. $c->id;
}
if(JPluginHelper::isEnabled('djclassifieds', 'multicategories')){
$where .= ' AND (i.cat_id IN ('.$catlist.') OR mc.mcat_c>0) ';
}else{
$where .= ' AND i.cat_id IN ('.$catlist.') ';
}
}
$region = $this->getState('filter.region');
if($region){
$reglist = '';
$regs = DJClassifiedsCategory::getSubCatItemsCount((int) $region);
$reglist = (int) $region;
foreach($regs as $r){
$reglist .= ','. $r->id;
}
$where .= ' AND i.region_id IN ('.$reglist.') ';
}
$search = $this->getState('filter.search');
if (!empty($search)) {
$db = JFactory::getDBO();
$search_id = $db->Quote($db->escape($search, true));
$search = $db->Quote('%'.$db->escape($search, true).'%');
$where .= " AND (CONCAT_WS(' ',i.name,IFNULL(i.alias,''),IFNULL(i.intro_desc,''),IFNULL(i.description,''),IFNULL(i.contact,''),IFNULL(i.address,''),IFNULL(i.post_code,''),IFNULL(i.website,''),IFNULL(i.video,''),IFNULL(c.name,''),IFNULL(r.name,''),IFNULL(u.name,''),IFNULL((CASE i.user_id WHEN 0 THEN i.email ELSE u.email END),'')) LIKE ".$search." OR i.id=".$search_id.")";
//$where .= " AND (i.name LIKE ".$search." OR u.name LIKE ".$search." OR u.username LIKE ".$search." OR u.email LIKE ".$search." OR i.email LIKE ".$search." OR i.id=".$search_id." )";
// $par = JComponentHelper::getParams('com_djclassifieds');
// $par->set('search_by',array(0,1,2,3,4,5,6,7,8,9,10,11,12));
// $where .= " AND (".DJClassifiedsTheme::getSearchPhraseQueryFilter($search, $par).")";
}
$published = $this->getState('filter.published');
if (is_numeric($published) && $published!='-1') {
$where .= ' AND i.published = ' . (int) $published;
}
$active = $this->getState('filter.active');
if (is_numeric($active) && $active!='-1') {
$date_now = JFactory::getDate()->toSQL();
if($active){
$where .= " AND i.date_start <= '".$date_now."' AND i.date_exp >= '".$date_now."' ";
}else{
$where .= " AND (i.date_start >= '".$date_now."' OR i.date_exp <= '".$date_now."' ) ";
}
}
$item_ids = $this->getState('filter.ids');
if ($item_ids != '') {
$where .= ' AND i.id IN ('.$item_ids.') ';
}
$blocked = $this->getState('filter.blocked');
if (is_numeric($blocked) && $blocked!='-1') {
$where .= ' AND i.blocked = ' . (int) $blocked;
}
$abuse = $this->getState('filter.abuse');
if (is_numeric($abuse)) {
$where .= ' AND IFNULL(a.c_abuse,0) = ' . (int) $abuse;
}
$type = $this->getState('filter.type');
if ($type) {
$where .= ' AND i.type_id = ' . (int) $type;
}
$query = "SELECT i.*, c.name as cat_name, c.alias as c_alias, r.name as reg_name, r.alias as r_alias, u.name as user_name, u.email as u_email, a.c_abuse, i.date_start <= '".$date_now."' AND i.date_exp >= '".$date_now."' AS s_active "
."FROM #__djcf_items i "
."LEFT JOIN #__djcf_categories c ON i.cat_id=c.id "
."LEFT JOIN #__djcf_regions r ON i.region_id=r.id "
."LEFT JOIN #__users u ON i.user_id=u.id "
."LEFT JOIN ( SELECT count(a.id) as c_abuse, a.item_id
FROM #__djcf_items_abuse a GROUP BY a.item_id ) a ON i.id=a.item_id "
.(JPluginHelper::isEnabled('djclassifieds', 'multicategories') && !empty($catlist) ? "LEFT JOIN ( SELECT item_id, count(id) as mcat_c FROM #__djcf_items_categories WHERE cat_id IN (".$catlist.") GROUP BY item_id ) mc ON i.id=mc.item_id " : "")
."WHERE 1 ".$where." "
."ORDER BY ".$orderCol." ".$orderDirn;
return $query;
}
function getItems()
{
$items = parent::getItems();
if($items){
$id_list = '';
foreach($items as $item){
$id_list .= ($id_list) ? ','.$item->id : $item->id;
}
$items_img = DJClassifiedsImage::getAdsImages($id_list, true);
for($i=0; $i<count($items); $i++){
$items[$i]->img = !empty($items_img[$items[$i]->id]) ? $items_img[$items[$i]->id][0] : null;
if(JPluginHelper::isEnabled('djclassifieds', 'plans')){
$items[$i]->added_from_plan = $this->getItemPlan($items[$i]->id);
$renewed_from_plans = $this->getItemPlansRenew($items[$i]->id);
if($renewed_from_plans){
$plans_renew_arr = array();
foreach($renewed_from_plans as $key => $r){
$plans_renew_arr['plans_renew'.$key] = array(
'plan_name' => $r->name,
'renew_date' => $r->date,
);
}
$items[$i]->plans_renew_data = $plans_renew_arr;
}
}
}
}
return $items;
}
function getItemPlan($item_id)
{
$db = JFactory::getDBO();
$query = "SELECT p.* "
."FROM #__djcf_plans_subscr_items psi "
."INNER JOIN #__djcf_plans_subscr ps ON psi.subscr_id=ps.id "
."INNER JOIN #__djcf_plans p ON ps.plan_id=p.id WHERE psi.item_id=".$item_id;
$db->setQuery($query);
return $db->loadObject();
}
function getItemPlansRenew($item_id)
{
$db = JFactory::getDBO();
$query = "SELECT p.name, psir.date "
."FROM #__djcf_plans_subscr_items_renew psir "
."INNER JOIN #__djcf_plans_subscr ps ON psir.subscr_id=ps.id "
."INNER JOIN #__djcf_plans p ON ps.plan_id=p.id WHERE psir.item_id=".$item_id;
$db->setQuery($query);
return $db->loadObjectList();
}
protected function getReorderConditions($table)
{
$condition = array();
$condition[] = 'cat_id = '.(int) $table->cat_id;
return $condition;
}
function getBatchForm()
{
return JForm::getInstance('batch_items', JPATH_ROOT.'/administrator/components/com_djclassifieds/models/forms/batch_items.xml');
}
}
?>