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'));
}
}