Current File : /home/pacjaorg/wpt.pacja.org/km/plugins/djclassifieds/searchalerts/searchalerts.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/djseo.php');

class plgDJClassifiedsSearchalerts extends JPlugin
{
	public function __construct(& $subject, $config)
	{
		parent::__construct( $subject, $config );
		$this->loadLanguage();
	}

	private static function _getDefaultUri()
	{
		$app = JFactory::getApplication();
		$cid = $app->input->getInt('cid', 0);
		$rid = $app->input->getInt('rid', 0);

		$juri = JUri::getInstance();
		$uri = DJClassifiedsSEO::getCategoryRoute('0:all').'&'.$juri->getQuery();
		if($cid && $juri->getVar('se_cats') === null){
			$uri .= '&se_cats='.$cid;
		}
		if($rid && $juri->getVar('se_regs') === null){
			$uri .= '&se_regs='.$rid;
		}

		return $uri;
	}

	private static function _getHtml($uri = null)
	{
		$document = JFactory::getDocument();
		$document->addStylesheet(JURI::root(true).'/plugins/djclassifieds/searchalerts/assets/css/style.css', array('version' => 'auto'));

		if(!$uri){
			$uri = self::_getDefaultUri();
		}
		
		$content = '<div class="save_search_link">';
		$content .= '<a href="'.DJClassifiedsSEO::getViewUri('searchalerts').'&task=addSearch&url='.base64_encode($uri).'">'.JText::_('COM_DJCLASSIFIEDS_ADD_SEARCH_ALERT').'</a>';
		$content .= '</div>';

		return $content;
	}
	
	function onBeforeDJClassifiedsDisplay($items, $par, $event_view)
	{
		$app = JFactory::getApplication();
		$se = $app->input->getInt('se', 0);
		$cid = $app->input->getInt('cid', 0);

		$content = '';
		if($event_view=='items' || $event_view=='blog' ||  $event_view=='item'){
			if($se && $this->params->get('sa_display_search',1)>0 && ($this->params->get('sa_list_position',0)==0 || $this->params->get('sa_list_position',0)==2)){
				$content .= self::_getHtml();
			}else if(($event_view=='items' || $event_view=='blog') && $cid && $this->params->get('sa_display_category',1)>0 && ($this->params->get('sa_list_position',0)==0 || $this->params->get('sa_list_position',0)==2)){					
				$content .= self::_getHtml(DJClassifiedsSEO::getCategoryRoute('0:all').'&se=1&se_cats='.$cid);
			}
			
			if($event_view=='item' && $cid && $this->params->get('sa_display_advert',1)>0 && ($this->params->get('sa_advert_position',0)==0 || $this->params->get('sa_advert_position',0)==2)){
				$content .= self::_getHtml(DJClassifiedsSEO::getCategoryRoute('0:all').'&se=1&se_cats='.$cid);
			}
		}
		
		return $content;	
	}
	
	function onAfterDJClassifiedsDisplay($items, $par, $event_view)
	{
		$app = JFactory::getApplication();
		$se = $app->input->getInt('se',0);
		$cid = $app->input->getInt('cid',0);
	
		$content = '';
		if($event_view=='items' || $event_view=='blog' ||  $event_view=='item'){
			if($se && $this->params->get('sa_display_search',1)>0 && ($this->params->get('sa_list_position',0)==1 || $this->params->get('sa_list_position',0)==2)){
				$content .= self::_getHtml();
			}
			
			if(($event_view=='items' || $event_view=='blog') && $cid && $this->params->get('sa_display_category',1)>0 && ($this->params->get('sa_list_position',0)==1 || $this->params->get('sa_list_position',0)==2)){						
				$content .= self::_getHtml(DJClassifiedsSEO::getCategoryRoute('0:all').'&se=1&se_cats='.$cid);
			}
			
			if($event_view=='item' && $cid && $this->params->get('sa_display_advert',1)>0 && ($this->params->get('sa_advert_position',0)==1 || $this->params->get('sa_advert_position',0)==2)){
				$content .= self::_getHtml(DJClassifiedsSEO::getCategoryRoute('0:all').'&se=1&se_cats='.$cid);
			}
		}
	
		return $content;
	}
	
	function onAfterDJClassifiedsDisplayProfile($profile, $par, $event_view)
	{
		$content = '';							
		if($this->params->get('sa_display_profile',0)>0 && ($this->params->get('sa_profile_position',0)==0 || $this->params->get('sa_profile_position',0)==2)){
			$content .= self::_getHtml(DJClassifiedsSEO::getCategoryRoute('0:all').'&se=1&uid='.$profile['id']);
		}
	
		return $content;
	}

	function onAfterDJClassifiedsDisplayProfileItems($profile, $par, $event_view)
	{
		$content = '';							
		if($this->params->get('sa_display_profile',0)>0 && ($this->params->get('sa_profile_position',0)==1 || $this->params->get('sa_profile_position',0)==2)){
			$content .= self::_getHtml(DJClassifiedsSEO::getCategoryRoute('0:all').'&se=1&uid='.$profile['id']);
		}
	
		return $content;
	}	
	
	public static function onUpdateSearchAlerts()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user_items = array();
	
		JModelLegacy::addIncludePath(JPATH_ROOT.'/components/com_djclassifieds/models/items.php');
		$items_model = JModelLegacy::getInstance('Items','DjclassifiedsModel');
	
		$query = "SELECT s.*, u.name as u_name, u.email as u_email, u.username as u_username "
				."FROM #__djcf_search_alerts s "
				."LEFT JOIN #__users u ON u.id=s.user_id "
				."ORDER BY last_check ASC";
		$db->setQuery($query);
		$alerts = $db->loadObjectList();
		
		$app->input->set('limit',100);
		$app->input->set('order','date_a');
		$app->input->set('ord_t','desc');

		foreach($alerts as $f){
			$se_query = json_decode($f->search_query);

			foreach($se_query as $val=>$se_q){
				if($val!='option' && $val!='view' && $val!='Itemid' && $val!='se_geoloc'){
					$app->input->set($val,$se_q);
				}
			}

			$items = $items_model->getItems();

			foreach($se_query as $val=>$se_q){
				if($val!='option' && $val!='view' && $val!='Itemid' && $val!='se_geoloc'){
					$app->input->set($val,'');
				}
			}

			$date_now = JFactory::getDate()->toSQL();
			$query_ins = 'INSERT IGNORE INTO #__djcf_search_notifications (`search_id` , `user_id` , `item_id`, `created` ) VALUES ';
			$ins = 0;
			foreach($items as $item){
				if($item->date_start>$f->last_check){
					if(!isset($user_items[$f->user_id])){
						$user_items[$f->user_id] = array();
						$user_items[$f->user_id][] = $item->id;
					}else{
						if(in_array($item->id, $user_items[$f->user_id])){
							continue;
						}else{
							$user_items[$f->user_id][] = $item->id;
						}
					}
					$query_ins .= "('".$f->id."','".$f->user_id."','".$item->id."','".$date_now."'), ";
					$ins ++;
				}
			}

			if($ins){
				$query_ins = substr($query_ins, 0, -2).';';
				$db->setQuery($query_ins);
				$db->execute();
			}

			$query = "UPDATE #__djcf_search_alerts SET `last_check`='".$date_now."' WHERE id=".$f->id;
			$db->setQuery($query);
			$db->execute();
		}

		return true;
	}

	// yt support

	public static function get_search_alerts_url()
    {
        return DJClassifiedsSEO::getViewUri('searchalerts') . '&task=addSearch&url=' . base64_encode(self::_getDefaultUri());
    }

	public function onDJClassifiedsInitSourceListener(&$source, &$query, &$types)
    {
        $fields = [
            'cf_search_alerts_url' => [
                'type' => 'String',
                'name' => 'cf_search_alerts_url',
                'metadata' => [
                    'label' => 'Search Alerts Save URL',
                    'group' => 'DJ-Classifieds',
                    'filters' => []
                ],
                'extensions' => [
                    'call' => [
                        'func' => __CLASS__ . '::get_search_alerts_url'
                    ],
                ],
            ]];

        $source->objectType('Site', compact('fields'));
    }
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!