Current File : /home/pacjaorg/public_html/km/modules/mod_djclassifieds_items/helper.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');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djimage.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djseo.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djtheme.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djcategory.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djregion.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djfield.php');
require_once(JPATH_ROOT.'/components/com_djclassifieds/model.php');
class modDjClassifiedsItemsHelper
{
public static function getItems($params, $cfpar = null)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$date_now = JFactory::getDate()->toSQL();
$djmodel = new DJClassifiedsModel();
if(!$cfpar){
$cfpar = JComponentHelper::getParams('com_djclassifieds');
}
$select = "";
$join = "";
$where = "";
$ord = "i.date_sort DESC";
if($params->get('items_ord')==1){
$ord = "i.display DESC";
}else if($params->get('items_ord')==2){
$ord = "rand()";
}else if($params->get('items_ord')==3){
$ord = "i.name";
}else if($params->get('items_ord')==4){
$join .= "LEFT JOIN (SELECT item_id, max(date_exp) date_exp FROM #__djcf_items_promotions WHERE prom_id=5 GROUP BY item_id) ip ON i.id=ip.item_id ";
$ord = "ip.date_exp DESC";
}else if($params->get('items_ord')==5){
$ord = "i.last_view DESC, i.date_sort DESC";
}else if($params->get('items_ord')==6 && $app->input->get('view') == 'item' && $app->input->get('id')){
$item = $djmodel->getItemById($app->input->getInt('id'));
$ord = "(6371 * acos( cos( radians(".$item->latitude.") ) * cos( radians( i.latitude ) ) * cos( radians( i.longitude ) - radians(".$item->longitude.") ) + sin( radians(".$item->latitude.") ) * sin( radians( i.latitude ) ) ) ) ASC, i.date_sort DESC";
}else if($params->get('items_ord')==7){
$join .= "LEFT JOIN #__users u ON i.user_id=u.id ";
$ord = "u.lastvisitDate DESC, i.date_sort DESC";
}
$prom_list = array();
if($params->get('only_p_special','0')==1){
$prom_list[] = "i.promotions LIKE '%p_special%'";
}
if($params->get('only_p_first','0')==1){
$prom_list[] = "i.promotions LIKE '%p_first%'";
}
if($params->get('only_p_bold','0')==1){
$prom_list[] = "i.promotions LIKE '%p_bold%'";
}
if($params->get('only_p_border','0')==1){
$prom_list[] = "i.promotions LIKE '%p_border%'";
}
if($params->get('only_p_bg','0')==1){
$prom_list[] = "i.promotions LIKE '%p_bg%'";
}
if($prom_list){
$where .= 'AND ('.implode(' OR ', $prom_list).') ';
}
if($params->get('items_ids')){
$where .= 'AND i.id IN ('.$params->get('items_ids').') ';
}
if($params->get('users_ids')){
$where .= 'AND i.user_id IN ('.$params->get('users_ids').') ';
}
$user_groups = $params->get('user_groups','');
if($user_groups){
$users_in_groups = array();
foreach($user_groups as $group){
$users_in_group = JAccess::getUsersByGroup($group);
foreach($users_in_group as $user_id) {
if (!in_array($user_id, $users_in_groups)) {
array_push($users_in_groups, $user_id);
}
}
}
$users_in_groups = !empty($users_in_groups) ? implode(", ", $users_in_groups) : 0;
$where .= 'AND i.user_id IN ('.$users_in_groups.') ';
}
if($params->get('type_id')){
$where .= 'AND i.type_id IN ('.implode(',', $params->get('type_id')).') ';
}
$catlist = '';
if($params->get('fallow_category')==1 && $app->input->getVar('option','')=='com_djclassifieds' && ($app->input->getInt('cid',0) || $app->input->getVar('view','') == 'item')){
if($app->input->getVar('view','') == 'item'){
$item = $djmodel->getItemById($app->input->getInt('id', 0));
$cid = $item->cat_id;
}else{
$cid = $app->input->getInt('cid',0);
}
$cats = DJClassifiedsCategory::getSubCat($cid,1);
$catlist = $cid;
foreach($cats as $c){
$catlist .= ','. $c->id;
}
}elseif($params->get('follow_search') && in_array('category', $params->get('follow_search')) && $app->input->get('se_cats',0)){
$cid = DJClassifiedsTheme::getIdFromTree($app->input->getVar('se_cats'));
$cats = DJClassifiedsCategory::getSubCat($cid,1);
$catlist = $cid;
foreach($cats as $c){
$catlist .= ','. $c->id;
}
}else if($params->get('cat_id','0')){
$cat_ids = $params->get('cat_id','0');
$catlist = implode(',', $cat_ids);
foreach($cat_ids as $cat_i){
$cats = DJClassifiedsCategory::getSubCat($cat_i,1);
foreach($cats as $c){
$catlist .= ','. $c->id;
}
}
}
if($catlist){
if(JPluginHelper::isEnabled('djclassifieds', 'multicategories')){
$where .= 'AND (i.cat_id IN ('.$catlist.') OR mc.mcat_c>0) ';
$join .= "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 ";
}else{
$where .= 'AND i.cat_id IN ('.$catlist.') ';
}
}
$reglist = '';
if($params->get('fallow_region')==1 && $app->input->getVar('option','')=='com_djclassifieds' && ($app->input->getInt('rid',0) || $app->input->getVar('view','') == 'item')){
if($app->input->getInt('rid',0)){
$rid = $app->input->getInt('rid',0);
}else{
$item = $djmodel->getItemById($app->input->getInt('id', 0));
$rid = $item->region_id;
}
$regs = DJClassifiedsRegion::getSubReg($rid,1);
$reglist = $rid;
foreach($regs as $r){
$reglist .= ','. $r->id;
}
}elseif($params->get('follow_search') && in_array('region', $params->get('follow_search')) && $app->input->get('se_regs',0)){
$rid = DJClassifiedsTheme::getIdFromTree($app->input->getVar('se_regs'));
$regs = DJClassifiedsRegion::getSubReg($rid,1);
$reglist = $rid;
foreach($regs as $r){
$reglist .= ','. $r->id;
}
}else if($params->get('region_id','0')){
$reg_ids = $params->get('region_id','0');
$reglist = implode(',', $reg_ids);
foreach($reg_ids as $reg_i){
$regs = DJClassifiedsRegion::getSubReg($reg_i,1);
foreach($regs as $r){
$reglist .= ','. $r->id;
}
}
}else{
$reglist = DJClassifiedsRegion::getDefaultRegionsIds();
}
if($reglist){
$where .= 'AND i.region_id IN ('.$reglist.') ';
}
if($params->get('follow_user')==1 && $app->input->getVar('option','')=='com_djclassifieds' && $app->input->getVar('view','')=='item' && $app->input->getInt('id',0)){
$item = $djmodel->getItemById($app->input->getInt('id', 0));
if($item->user_id){
$where .= "AND i.user_id=".$item->user_id." ";
}else if($item->email){
$where .= "AND i.email='".$item->email."' ";
}
}
if($params->get('follow_type','0')==1 && $app->input->get('option') == 'com_djclassifieds'){
if($app->input->get('view') == 'items' && $app->input->get('Itemid')){
$menus = $app->getMenu('site');
$menu_item = $menus->getItem($app->input->get('Itemid'));
$it_par = $menu_item->getParams();
if($it_par->get('type_id')){
$where .= "AND i.type_id IN (".implode(',',$it_par->get('type_id')).") ";
}
}elseif($app->input->getVar('view') == 'item' && $app->input->getInt('id')){
$item = $djmodel->getItemById($app->input->getInt('id'));
$where .= "AND i.type_id=".$item->type_id." ";
}
}
if($params->get('only_with_img','0')==1){
$where .= "AND img.img_c>0 ";
$join .= "LEFT JOIN (SELECT COUNT(img.id) as img_c, img.item_id FROM #__djcf_images img WHERE img.type='item' GROUP BY item_id) img ON i.id=img.item_id ";
}
if($app->input->getVar('option','')=='com_djclassifieds' && $app->input->getVar('view','')=='item' && $app->input->getInt('id',0)){
$join .= 'LEFT JOIN (SELECT id FROM #__djcf_items WHERE id='.$app->input->getInt('id',0).') ca ON i.id=ca.id '; // more efficient than standard where
$where .= 'AND ca.id IS NULL ';
}
if($params->get('items_source','0')==1 && $user->id){
$where .= 'AND i.user_id='.$user->id.' ';
}else if($params->get('items_source','0')==2 && $user->id){
$select .= ',f.id as f_id ';
$join .= "LEFT JOIN #__djcf_favourites f ON i.id=f.item_id AND f.user_id=".$user->id." ";
$where .= "AND f.id IS NOT NULL ";
}elseif($params->get('items_source','0')==3){
$latest_items = $app->input->cookie->get('djcf_lastitems', '');
if($latest_items){
$items_ids = '';
$latest_items_ids = explode('_', $latest_items);
foreach($latest_items_ids as $latest_id){
if($items_ids){
$items_ids .=',';
}
$items_ids .= intval($latest_id);
}
}else{
$items_ids = 0;
}
$where .= 'AND i.id IN ('.$items_ids.') ';
}else if($params->get('items_source','0')==4 && $app->input->get('option','')=='com_djclassifieds' && $app->input->getVar('view','')=='item' && $app->input->getInt('id',0)){
$item = $djmodel->getItemById($app->input->getInt('id', 0));
if($item->user_id){
$where .= 'AND i.user_id = '.$item->user_id.' AND i.id != '.$app->input->getInt('id').' ';
}else{
return null;
}
}else if($params->get('items_source','0')!=0){
return null;
}
if($cfpar->get('favourite','1') && $params->get('show_fav_icon','0')==1 && $user->id && $params->get('items_source','0')!=2){
$select .= ',f.id as f_id ';
$join .= "LEFT JOIN #__djcf_favourites f ON i.id=f.item_id AND f.user_id=".$user->id." ";
}
$groups_acl = '0,'.implode(',', $user->getAuthorisedViewLevels());
$where .= "AND c.access_view IN (".$groups_acl.") ";
if(!isset($_COOKIE["djcf_warning18"])){
$where .= "AND c.restriction_18=0 ";
}
if($params->get('only_auctions','0')){
$where .= "AND i.auction=1 ";
}
if($params->get('only_verified','0')){
$where .= "AND IFNULL(p.verified,0)=1 ";
}
if($cfpar->get('show_archived',0)==2){
$where .= "AND (( i.published=1 AND i.date_exp > '".$date_now."') OR i.published=2) ";
}else{
$where .= "AND i.published=1 AND i.date_exp > '".$date_now."' ";
}
$select = "SELECT i.*, c.id c_id, c.name c_name, c.alias c_alias, r.id r_id, r.name r_name, r.alias r_alias, p.verified p_verified ".$select;
$from = "FROM #__djcf_items i "
."JOIN #__djcf_categories c ON c.id=i.cat_id "
."LEFT JOIN #__djcf_regions r ON r.id=i.region_id "
."LEFT JOIN #__djcf_profiles p ON i.user_id=p.user_id "
.$join;
$where = "WHERE i.blocked=0 AND c.published!=0 ".$where;
$app->triggerEvent('onPrepareDJClassifiedsItemsModuleListingQueryWhere', array(&$where, &$params));
if($ord == 'rand()'){
$query = $select.$from."JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM #__djcf_items)) AS num, @num:=@num+1 FROM (SELECT @num:=0) AS a, #__djcf_items LIMIT ".$params->get('items_nr').") AS tmp ON tmp.num = i.id ".$where;
}else{
$query = $select.$from.$where."ORDER BY ".$ord." LIMIT ".$params->get('items_nr');
}
// custom backward compatibility
$limitstart = null;
$limit = null;
$app->triggerEvent('onDJClassifiedsListingQuery', array(&$query, &$limitstart, &$limit, 'module.items', $params));
$app->triggerEvent('onDJClassifiedsItemsModuleListingQuery', array(&$query, $params));
$db->setQuery($query);
$items = $db->loadObjectList();
if($ord == 'rand()'){
if(count($items) != $params->get('items_nr')){
$db->setQuery("SELECT count(*) FROM (".$select.$from.$where.") v");
$items_c = $db->loadResult();
if($items_c > $params->get('items_nr')){
$db->setQuery($query); // retry query with random sort join
$items = $db->loadObjectList();
}
}
if(count($items) != $params->get('items_nr')){ // standard rand() order
$query = $select.$from.$where."ORDER BY rand() LIMIT ".$params->get('items_nr');
$app->triggerEvent('onDJClassifiedsItemsModuleListingQuery', array(&$query, $params));
$db->setQuery($query);
$items = $db->loadObjectList();
}
}
if($items){
$items_img = DJClassifiedsImage::getAdsImages(implode(',', array_map(function($v){return $v->id;}, $items)));
for($i=0;$i<count($items);$i++){
$img_found = 0;
$items[$i]->images = array();
foreach($items_img as $img){
if($items[$i]->id == $img->item_id){
$img_found = 1;
if(count($items[$i]->images)==0){
$items[$i]->img_path = $img->path;
$items[$i]->img_name = $img->name;
$items[$i]->img_ext = $img->ext;
$items[$i]->img_caption = $img->caption;
}
$items[$i]->images[] = $img;
}else if($img_found){
break;
}
}
if($items[$i]->auction){
$items[$i]->highest_bid = $djmodel->getHighestBid($items[$i]->id);
}
DJClassifiedsField::convertOverwritableFieldsValues($items[$i], $cfpar);
$items[$i]->item_uri = DJClassifiedsSEO::getItemRoute($items[$i]->id.':'.$items[$i]->alias,$items[$i]->cat_id.':'.$items[$i]->c_alias,$items[$i]->region_id.':'.$items[$i]->r_alias, true);
}
}
return $items;
}
static function getFields($id_list, $params, $cfpar)
{
$db = JFactory::getDBO();
$user = JFactory::getUser();
$ug = implode(',', $user->getAuthorisedViewLevels());
$par = clone $cfpar; // clone in case of set
$query = $db->getQuery(true);
$query->select(array('fv.*', 'f.*'))
->from('#__djcf_fields f')
->join('INNER', '#__djcf_fields_values fv ON f.id = fv.field_id')
->where('f.published = 1')
->where('f.access IN ('.$ug.')')
->where('f.in_module = 1')
//->where('f.name NOT IN ('.implode(',', DJClassifiedsField::getOverwritableFieldNames(true)).')')
->order('f.ordering, f.label');
if($id_list){
$query->where('fv.item_id IN ('.$id_list.')');
}
if($params->get('custom_fields','0') == '1'){
$query->where('f.source = 0');
}elseif($params->get('custom_fields','0') == '2'){
$query->where('f.source = 1');
}elseif($params->get('custom_fields','0') == '3'){
$query->where('f.source IN (0, 1)');
}
$db->setQuery($query);
$fields = $db->loadObjectList();
if($params->get('show_empty_cf','') != ''){
$par->set('show_empty_cf', $params->get('show_empty_cf'));
}
DJClassifiedsAccess::filterFieldsByGroupAccess($fields);
DJClassifiedsField::convertFieldsValues($fields, $par);
return $fields;
}
static function getTypes() // backward compatibility
{
return DJClassifiedsType::getTypes();
}
static function getModuleWithAjaxAjax()
{
$app = JFactory::getApplication();
$mod_name = $app->input->get('mod_name');
$mod_id = $app->input->get('mod_id');
$app->setUserState($mod_name.$mod_id.'.ajaxload', true);
$module = JModuleHelper::getModuleById((string)$mod_id);
echo JModuleHelper::renderModule($module);
$app->close();
}
}
class modDjClassifiedsItems extends modDjClassifiedsItemsHelper // backward compatibility
{}