Your IP : 216.73.216.84


Current Path : /home/helpink/www/modules/mod_jbusiness_listings/
Upload File :
Current File : /home/helpink/www/modules/mod_jbusiness_listings/helper.php

<?php
/*------------------------------------------------------------------------
 # JBusinessDirectory
# author CMSJunkie
# copyright Copyright (C) 2012 cmsjunkie.com. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# Websites: http://www.cmsjunkie.com
# Technical Support:  Forum - http://www.cmsjunkie.com/forum/j-businessdirectory/?p=1
-------------------------------------------------------------------------*/

defined('_JEXEC') or die('Restricted access');
JTable::addIncludePath(JPATH_ROOT . '/administrator/components/com_jbusinessdirectory/tables');

abstract class modJBusinessListingsHelper {
	public static function getList($params) {
		$appSettings = JBusinessUtil::getApplicationSettings();
		$enablePackage = $appSettings->enable_packages;
		// Get the database object.
		$db = JFactory::getDBO();

		$catNameFilter = "";
		if(isset($_REQUEST["video_category"])){
			$cat = $_REQUEST["video_category"];
			$catNameFilter = " and cg.name like '%$cat->name%'";
		}
		
		if(isset($_REQUEST["current_listing"]) && $params->get('listing_link')){
			$listing = $_REQUEST["current_listing"];
			$catId = $listing->mainSubcategory;
			$itemId = $listing->id;
			$catNameFilter = " and cg.id = $catId and cp.id!= $itemId";
		}

		$whereCatCond = '';
		$categoriesIds = $params->get('categoryIds');
		if (isset($categoriesIds) && count($categoriesIds)>0 && $categoriesIds[0]!= 0 && $categoriesIds[0]!= "") {
			$categoriesIDs = implode(",", $params->get('categoryIds'));
			$whereCatCond = " and cc.categoryId in ($categoriesIDs)";
		}

		$companyStatusFilter="and cp.approved = ".COMPANY_STATUS_APPROVED;
		if (($appSettings->enable_item_moderation=='0' || ($appSettings->enable_item_moderation=='1' && $appSettings->show_pending_approval == '1'))) {
			$companyStatusFilter = "and (cp.approved = ".COMPANY_STATUS_APPROVED." or cp.approved= ".COMPANY_STATUS_CREATED.") ";
		}

		$whereCompaniesCond = '';
		$companiesIds = $params->get('companiesIds');
		if (isset($companiesIds) && count($companiesIds)>0 && $companiesIds[0]!= 0 && $companiesIds[0]!= "") {
			$companiesIds = implode(",", $companiesIds);
			$whereCompaniesCond = " and cp.id in ($companiesIds)";
		}

		$packageFilter = '';
		if ($appSettings->enable_packages) {
			$packageFilter = " and (
									  (
										(inv.state= ".PAYMENT_STATUS_PAID." and (
											(
												(( now() between inv.start_date and inv.end_date))
									 			or
												(now() between inv.start_trial_date and inv.end_trial_date)
											)
									 ))
									)
									or (
										((p.expiration_type=1 and p.price=0) or (p.id = cp.package_id and p.price=0)))
								)";
		}

		$only_with_logo = $params->get('only_with_logo');
		$whereLogoCond='';
		if (!empty($only_with_logo)) {
			$whereLogoCond=" and cp.logoLocation != '' ";
		}

		$city = $params->get('city');
		$whereCityCond='';
		if (!empty($city)) {
			if ($appSettings->limit_cities_regions) {
				$whereCityCond = " and cty.id = '".$city."'";
			} else {
				$whereCityCond=" and cp.city = '".$db->escape($city)."' ";
			}
		}

		$region = $params->get('region');
		$whereRegionCond='';
		if (!empty($region)) {
			if ($appSettings->limit_cities_regions) {
				$whereRegionCond = " and rg.id = '".$region."'";
			} else {
				$whereRegionCond=" and cp.county = '".$db->escape($region)."' ";
			}
		}

		$countryId = $params->get('country');
		$whereCountryCond='';
		if (!empty($countryId)) {
			$whereCountryCond=" and cp.countryId = ".$db->escape($countryId);
		}

		$type = $params->get('type');
		$whereTypeCond='';
		if (!empty($type)) {
			$type = $db->escape($type);
			$whereTypeCond=" and find_in_set($type,cp.typeId) ";
		}

		$membership = $params->get('membership');
		$leftJoinCompanyMembership = "";
		$leftJoinMemberships = "";
		$whereMembershipCondition = "";
		if (!empty($membership)) {
			$leftJoinMemberships = " left join #__jbusinessdirectory_memberships as mmb on mmb.id = $membership";
			$leftJoinCompanyMembership = " left join #__jbusinessdirectory_company_membership as cmb on cmb.company_id = cp.id";
			$whereMembershipCondition = "and cmb.membership_id = mmb.id";
		}

		$plan = $params->get('plan');
		$onlyCampaigns = $params->get('only_campaign');
		$wherePlanCondition = "";
		$leftJoinCampaign = "";
		$leftJoinCampaignHasPlans = "";
		$leftJoinCampaignPlans = "";
		if (!empty($plan) && !empty($onlyCampaigns) && JBusinessUtil::isAppInstalled(JBD_APP_CAMPAIGNS)) {
			$wherePlanCondition = " and cmp.id = $plan and cmg.published = 1 and cmg.status = ".CAMPAIGN_STATUS_PAID." and cmg.budget > 0";

			$leftJoinCampaign = " left join #__jbusinessdirectory_campaigns as cmg on (cmg.item_id = cp.id AND cmg.type = 1)";
			$leftJoinCampaignHasPlans = " left join #__jbusinessdirectory_campaign_has_plans as chp on chp.campaign_id = cmg.id";
			$leftJoinCampaignPlans = " left join #__jbusinessdirectory_campaign_plans as cmp on cmp.id = chp.campaign_plan_id";
		}

		$ordering = $params->get('order');
		if ($ordering == 1) {
			$orderBy ="slec.creationDate desc";
		} elseif ($ordering == 2) {
			$orderBy ="slec.id asc";
		} elseif ($ordering == 3) {
			$orderBy ="slec.name asc";
		} elseif ($ordering == 4) {
			$orderBy = "slec.review_score desc";
		} else {
			$orderBy = " rand() ";
		}
		$nrResults = $params->get('count');

		$radius = $params->get('radius');
		if(!empty($radius)){
			$radius = $db->escape($radius);
		}
		$jinput = JFactory::getApplication()->input;
		$latitude = $jinput->get("geo-latitude");
		if(!empty($latitude)){
			$latitude = $db->escape($latitude);
		}
		$longitude = $jinput->get("geo-longitude");
		if(!empty($longitude)){
			$longitude = $db->escape($longitude);
		}

		$enableNearby = $params->get('nearby');
		$whereCompanyCond = '';
		if ($enableNearby) {
			$companyId = $jinput->get('companyId');
			if (!empty($companyId)) {
				$company = self::getCompany($companyId);
				$latitude = $company->latitude;
				$longitude = $company->longitude;

				//if the module is in a company details page, exclude that company from the nearby list
				$whereCompanyCond = ' and cp.id not in ('.$companyId.')';


				// if company location is not set while enable nearby is active,
				// the results should be empty
				if (empty($latitude) && empty($longitude)) {
					return null;
				}
			}
		}

		$distance = "";
		if (!empty($latitude) && !empty($longitude) && $radius>0 && ($params->get('geo_location') || $enableNearby)) {
			$distance = ", 3956 * 2 * ASIN(SQRT( POWER(SIN(($latitude -( slec.latitude)) * pi()/180 / 2),2) + COS($latitude * pi()/180 ) * COS( abs( slec.latitude) *  pi()/180) * POWER(SIN(($longitude -  slec.longitude) *  pi()/180 / 2), 2) )) as distance";
		}

		$publishFilter = '';
		$publishFilter = " and (cp.publish_start_date<=DATE(now()) or cp.publish_start_date='0000-00-00' or cp.publish_start_date is null) and (cp.publish_end_date>=DATE(now()) or cp.publish_end_date='0000-00-00' or cp.publish_end_date is null) ";

		$having = "";
		if (!empty($latitude) && !empty($longitude) && $radius>0 && ($params->get('geo_location') || $enableNearby)) {
			$having .= " and distance < $radius";
		} else {
			$having = "";
		}
		
		$whereFeatured = '';
		$featured  = $params->get('only_featured');
		if ($featured) {
			$whereFeatured = ' and featuredListing = 1';
		}

		$searchImages = false;
		if ($params->get('viewtype')=="simple_3") {
			$searchImages = true;
		}

		$wherePackageCond = '';
		$packages  = $params->get('packages');
		if (!empty($packages) && $enablePackage) {
			$packagesIds = implode(",", $packages);
			$wherePackageCond = " and (inv.package_id in ($packagesIds) or p.id in ($packagesIds)) ";
		}

		$weekday = date("N");
		
		
		$whereListingsCond = '';
		if ($params->get('show_recently_viewed') && isset($_COOKIE['jbdViewedListings'])) {
			$listingIds = explode(",", $_COOKIE['jbdViewedListings']);
			$listingIds = array_filter($listingIds);
			if(!empty($listingIds)){
				$listingIds = implode(",",$listingIds);
				$whereListingsCond = "and cp.id in ($listingIds)";
			}
		}
		
		$query = "select slec.*, mainCategory, mainCategoryId, companyName, companyId1".
				($enablePackage?"
                ,features, GREATEST(if(FIND_IN_SET('featured_companies',features) ,1,0), featured) as featuredListing":" ,featured as featuredListing ").
				"
                $distance
				from (
				select  cp.id, cp.name, cp.alias, cp.short_description, cp.description, cp.street_number, cp.area, cp.address, cp.city, cp.county, cp.province, 
				cp.postalCode, cp.website, cp.phone, cp.email, cp.state, cp.fax, cp.business_cover_image,cp.opening_status,
				cp.averageRating, cp.slogan, cp.logoLocation, cp.creationDate, cp.latitude, cp.longitude,cp.mainSubcategory, cp.publish_start_date, cp.publish_end_date, cp.review_score, cp.yelp_id,
				cp.featured,cp.publish_only_city, cp.name as companyName,cp.id as companyId1, cn.country_name as countryName,GROUP_CONCAT(distinct ct.name) as typeName,".
				
				($appSettings->show_open_status?"
                cph.start_hour,cph.end_hour,":"").
				
				($searchImages?" GROUP_CONCAT( DISTINCT CONCAT_WS('#', cpt.picture_path, cpt.picture_title, cpt.picture_info)) as pictures, ":"").

				(!empty($whereCatCond)?"
				GROUP_CONCAT( DISTINCT cg.id) as categoryIds, GROUP_CONCAT(DISTINCT cg.name separator '#') as categoryNames,
				GROUP_CONCAT( DISTINCT cg.id,'|',cg.name,'|',cg.alias ORDER BY cg.name separator '#') as categories,
                ":"").
				($enablePackage?"
				GROUP_CONCAT(DISTINCT pf.feature) as features,":"").
				"    
				bc.name as mainCategory,  bc.id as mainCategoryId, bc.icon as mainCategoryIcon, bc.iconImgLocation as categoryIconImage,  bc.alias as mainCategoryAlias, bc.color as mainCategoryColor
				from #__jbusinessdirectory_companies cp".
				
				(!empty($whereCatCond) || !empty($catNameFilter) ?"
				left join #__jbusinessdirectory_company_category cc on cp.id=cc.companyId
				left join #__jbusinessdirectory_categories cg on cg.id=cc.categoryId
				":"").
				"
                left join #__jbusinessdirectory_categories bc on bc.id=cp.mainSubcategory
				left join #__jbusinessdirectory_countries cn on cp.countryId=cn.id".
				($appSettings->show_open_status?"
                left join #__jbusinessdirectory_company_provider_hours cph on cp.id = cph.provider_id and cph.item_type = ".BUSINESS_HOURS." and cph.type = ".STAFF_WORK_HOURS." and cph.status = 1 and cph.weekday = $weekday
				":"").
				"
				left join #__jbusinessdirectory_company_types ct on find_in_set(ct.id,cp.typeId)".

				($searchImages?" left join #__jbusinessdirectory_company_pictures cpt on cpt.companyId=cp.id and cpt.picture_enable = 1 ":"").

				($enablePackage?"
				left join #__jbusinessdirectory_orders inv on inv.company_id=cp.id
				left join #__jbusinessdirectory_packages p on (inv.package_id=p.id and p.status=1 and $enablePackage) or (p.price=0 and (p.expiration_type=1 or cp.package_id = p.id) and p.status=1 and $enablePackage)
				left join #__jbusinessdirectory_package_fields pf on p.id=pf.package_id
                ":"").
				(($appSettings->limit_cities_regions) ? "
				left join #__jbusinessdirectory_company_activity_city cat on cat.company_id=cp.id
				left join #__jbusinessdirectory_cities cty on cty.id=cat.city_id
				left join #__jbusinessdirectory_company_activity_region car on car.company_id=cp.id
				left join #__jbusinessdirectory_regions rg on rg.id=car.region_id"
					: "")
				."
                $leftJoinCampaign
				$leftJoinCampaignHasPlans
				$leftJoinCampaignPlans
				$leftJoinMemberships
				$leftJoinCompanyMembership
				where 1  $wherePlanCondition $whereCompaniesCond $whereCatCond $packageFilter $whereMembershipCondition and cp.state=1 $companyStatusFilter $whereCityCond $whereRegionCond $whereTypeCond 
						 $whereCountryCond $whereLogoCond $publishFilter $whereCompanyCond
						 $catNameFilter $wherePackageCond $whereListingsCond
				group by cp.id order by cp.name) as slec
				group by companyId1 
				having 1 $having $whereFeatured
				order by $orderBy";

		// Set the query and get the result list.
		$db->setQuery($query, 0, $nrResults);
		$items = $db->loadObjectlist();

		$link_target = $params->get('link_target');
		$selAttributes = $params->get('customAttributes');
		if(!empty($selAttributes)){
			$selAttributes = array_filter($selAttributes);
		}

		foreach ($items as $key => $item) {
			if (!empty($item->features)) {
				$item->package = explode(",", $item->features);
			}else{
				$item->package = array();
			}
			
			if (!empty($item->website) && $link_target == 2) {
				$item->link = $item->website;
			} else {
				$item->link = JBusinessUtil::getCompanyLink($item, true);
			}
				
			$item->mainCategoryLink = JBusinessUtil::getCategoryLink($item->mainCategoryId, $item->mainCategoryAlias);
			if ((!$enablePackage || isset($item->package) && in_array(SHOW_COMPANY_LOGO, $item->package))) {
				$item->logoLocation = 	str_replace(" ", "%20", $item->logoLocation);
			} else {
				// $item->logoLocation = "";
				// if ($only_with_logo) {
				// 	//unset($items[$key]);
				// }
			}

			$categoryId = null;
			if ($appSettings->enable_attribute_category) {
				$categoryId = -1;
				if (!empty($item->mainCategoryId)) {
					$categoryId = $item->mainCategoryId;
				}
			}

			if ($appSettings->limit_cities_regions) {
				$companiesTable = JTable::getInstance('Company');
				$item->regions = $companiesTable->getCompanyRegions($item->id);
				if (!empty($item->regions)) {
					$item->county = $item->regions[0]->name;
				}

				$item->cities  = $companiesTable->getCompanyCities($item->id);
				if (!empty($item->cities)) {
					$item->city = $item->cities[0]->name;
				}
			}
			
			if ($appSettings->show_open_status) {
				$startTime = date("Y-m-d") . " " . $item->start_hour;
				$endTime = date("Y-m-d") . " " . $item->end_hour;
				$currentTime = date('Y-m-d h:i A');
				$item->openStatus =  JBusinessUtil::checkDateInterval($startTime, $endTime, $currentTime, false, true);
			}

			JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_jbusinessdirectory/models', 'Companies');
			$companyModel = JModelLegacy::getInstance('Companies', 'JBusinessDirectoryModel', array('ignore_request' => true));
			
			//$item->business_hours = $companyModel->getWorkingDays($item);

			if(empty($item->time_zone)){
				$item->time_zone = $appSettings->default_time_zone;
			}

			$item->enableWorkingStatus = false;
			if (!empty($item->business_hours) && $item->opening_status == COMPANY_OPEN_BY_TIMETABLE) {
				foreach ($item->business_hours as $day) {
					if ($day->workHours["status"] == '1') {
						$item->enableWorkingStatus = true;
					}
				}
			}

			if ($item->enableWorkingStatus) {
				$item->workingStatus = $companyModel->getWorkingStatus($item->business_hours, $item->time_zone, $item->opening_status);
			} else {
				$item->workingStatus = false;
			}
			
			if(!empty($selAttributes)){
				$attributesTable = JTable::getInstance('CompanyAttributes');
				$customAttributes = $attributesTable->getCompanyAttributes($item->id, $categoryId);
				
				$attributes = array();
				foreach ($customAttributes as $attr){
					if (in_array($attr->id, $selAttributes)){
						$attributes[]=$attr;
					}
				}

				$item->customAttributes = $attributes;
			}
		}

		$listings = array_values($items);

		return $listings;
	}
	
	public static function getCompany($companyId) {
		$db =JFactory::getDbo();
		$query = "select bc.*
		from #__jbusinessdirectory_companies bc
		where bc.id=".$companyId;
	
		$db->setQuery($query);
		$result =  $db->loadObject();
	
		return $result;
	}

}