| Server IP : 54.36.91.62 / Your IP : 216.73.217.111 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/annonces/components/com_jlexreview/models/ |
Upload File : |
<?php
/**
* @package JLex Review
* @version 4.2.3
* @copyright Copyright (c) 2013-2018 JLexArt. All rights reserved
* @license GNU General Public License version 2 or later;
* @author www.jlexart.com
*/
defined ( "_JEXEC" ) or die;
class JLexReviewModelMail extends JModelLegacy
{
protected function _getSectionFile($id)
{
static $section_files = array();
if (array_key_exists($id, $section_files))
{
return $section_files[$id];
}
$query = $this->_db->getQuery(true);
$query->select("params")
->from("#__jlexreview_form")
->where("id=" . $id);
$form = $this->_db->setQuery($query)->loadResult();
if (!$form)
{
return null;
}
$form = json_decode($form);
$section_files[$id] = $form;
return $form;
}
protected function _getReview($id, $sid)
{
$form = $this->_getSectionFile($sid);
if (!$form)
{
return null;
}
$config = JLexReviewHelperAdmin::getConfig ();
$query = $this->_db->getQuery(true);
$query->select("*")
->from("#__jlexreview_fields")
->where("review_id=" . $id);
$body = $this->_db->setQuery($query)->loadObjectList("field_id");
if (!$body)
{
return null;
}
$results = array();
foreach ($form->fs_data as $field)
{
$return = new stdClass();
$return->value = "";
if (!array_key_exists($field->id, $body) || empty($body[$field->id]->field_value))
{
continue;
}
$fieldval = $body[$field->id];
$return->label = JText::_($field->label);
if (isset($field->rating_data))
{
if ($config->get("criteria_display","percent")=="percent")
{
$percent = intval($body[$field->rating_data->id]->field_value*100/$field->rating_data->max);
$return->rating = $percent . "%";
} else {
$return->rating = $body[$field->rating_data->id]->field_value . "/" . $field->rating_data->max;
}
}
switch ($field->type)
{
case "select":
case "checkbox":
case "radio":
$html = "";
$options_data = preg_split("/(\r\n|\n|\r)/", $field->options);
$options = array();
foreach ($options_data as $line)
{
$line = explode("|", $line);
$options[$line[0]] = $line[1];
}
if ($fieldval->field_multiple=="1")
{
$values = explode("|", $fieldval->field_value);
if (count($values))
{
foreach ($values as $selected)
{
$html.= '<span class="_badge">'.$options[$selected].'</span> ';
}
}
} else {
$html .= '<span class="_badge">'.$options[$fieldval->field_value].'</span> ';
}
$return->value = $html;
break;
case "text":
case "textarea":
$return->value = strip_tags($fieldval->field_value);
$return->value = nl2br($return->value);
if (preg_match('/^\s*$/', $return->value))
{
$return->value = JLexReviewHelperSite::subwords($return->value , 20);
}
break;
case "rating":
if ($config->get("criteria_display","percent")=="percent")
{
$percent = intval($fieldval->field_value*100/$field->max);
$return->rating = $percent . "%";
} else {
$return->rating = $fieldval->field_value . "/" . $field->max;
}
break;
}
$results[] = $return;
}
return $results;
}
public function mail_subscribe ()
{
set_time_limit(0);
$person_each_time = 20;
$config = JLexReviewHelperAdmin::getConfig ();
$now = JFactory::getDate ()->toSql ();
if($config->get("enable_subscribe",0)==0) return;
// 1. Select max point
$query = $this->_db->getQuery (true);
$query->select ('point')
->from ('#__jlexreview_subscribe')
->where('sub_type=1')
->group ('point')
->order ('point DESC');
$points = $this->_db->setQuery($query,0,2)->loadColumn();
if(!$points) return;
// 2. Get list people to send
$query->clear ()
->select ('sub.*, item.object_name, item.object_id, item.object, item.url, item.section_file')
->from ('#__jlexreview_subscribe sub')
->leftJoin ('#__jlexreview_entry item ON item.id=sub.sub_value')
->where (array(
'item.id IS NOT NULL',
'sub_type=1',
'item.published=1'
))
->order('sub.id ASC');
if($points && count($points)==2)
{
$query->where('point<'.$points[0]);
}
$items = $this->_db->setQuery($query, 0, $person_each_time)
->loadObjectList ();
$next_point = count($points)==2?$points[0]:($points[0]+1);
// 4. Bind to template
$path = trim($config->get('email_tpl_path',''),'/');
if (preg_match('/^\s*$/', $path))
{
$path = 'administrator/components/com_jlexreview/libs/email_templates';
}
$path = JPATH_ROOT.'/'.$path;
$email_tpl = $path . '/subscribe.tpl.php';
if (! JFile::exists ($email_tpl))
{
return false;
}
// 5. Get Joomla! config
$joomla_config = JFactory::getConfig();
$email_from = $joomla_config->get("mailfrom");
if (! $items)
{
// no user available, reset point
$query = "UPDATE #__jlexreview_subscribe SET point=0 WHERE sub_type=1";
$this->_db->setQuery($query)->execute();
return null;
}
$userClass = JLexReviewHelperSite::getProfile();
foreach ( $items as $k=>&$item )
{
$item->user = $userClass->getUser($item->userid*1, $item->guest_email, $item->guest_name);
$item->point_created = empty ($item->point_created) ? $item->created : $item->point_created;
// entry
if ($config->get("link_type",0)=="1")
{
$up = JLexReviewHelperAdmin::getItemDetail($item->object, $item->object_id, $item->object_name, $item->url);
$item->url = str_replace(JUri::root(true), '', $up->url);
$item->object_name = $up->title;
} else {
$item->url = urldecode($item->url);
}
$item->url = trim($item->url, '/');
$item->url = preg_match("/^https?:\/\//", $item->url) ? $item->url : JUri::root() . $item->url;
$query->clear();
// where clause
$whereClauses = array (
'r.published=1',
'r.created >= ' . $this->_db->quote($item->point_created),
'r.created < ' . $this->_db->quote($now),
'r.entry_id=' . $item->sub_value
);
$query->select ('SQL_CALC_FOUND_ROWS r.id,r.title,r.author_name,r.created,r.created_by')
->from ("#__jlexreview r")
->where ($whereClauses)
->order ('r.id ASC')
->group ('CONCAT(r.created_by,"-",r.ip_address,"-",r.author_name)');
$reviews = $this->_db->setQuery($query, 0, 7)->loadObjectList();
$total = (int) $this->_db->setQuery("SELECT FOUND_ROWS()")->loadResult();
if ($reviews)
{
$names = array();
foreach ($reviews as $k1=>&$review)
{
$review->author = $userClass->getUser($review->created_by, '', $review->author_name);
$review->url = $item->url .(stripos($item->url,'?')!==false?'&':'?'). 'review_id=' . $review->id;
if (!preg_match('/^\s*$/', $review->title))
{
$review->title = JLexReviewHelperAdmin::subwords($review->title,20);
} else {
$review->title = null;
}
$review->body = $this->_getReview($review->id, $item->section_file);
if($k<3)
$names[]=$review->author->get('jname');
}
}
if ($total > 0)
{
// link to unsubscribe
$hash = md5("jlexreview-subscribe-" . $item->id);
$unsubscribe = JRoute::_('index.php?option=com_jlexreview&view=mail&task=unsubscribe&id='.$item->id.'&hash='.$hash, false, 2);
if($total>3)
{
$title = JText::sprintf("JR_ALERT_PEOPLE_POST_REVIEW_IN_AN_ITEM", implode (",", $names), ($total-3), $item->object_name);
} else {
$title = JText::sprintf("JR_ALERT_USER_POST_REVIEW_IN_AN_ITEM", implode (",", $names), $item->object_name);
}
// bind to template
ob_start ();
include $email_tpl;
$body = ob_get_contents();
ob_end_clean ();
// send.
$appConfig = JFactory::getConfig();
JFactory::getMailer()->sendMail($appConfig->get("mailfrom"), $appConfig->get("fromname"), $item->user->get("email"), $title, $body, true);
}
/*---- update point ----*/
$subQuery = "UPDATE #__jlexreview_subscribe SET point=" . $next_point;
$subQuery.= ", point_created=" .$this->_db->quote ($now). " WHERE id=" . $item->id;
$this->_db->setQuery($subQuery)->execute();
}
return true;
}
public function mail_follow()
{
set_time_limit(0);
$person_each_time = 20;
$config = JLexReviewHelperAdmin::getConfig ();
$now = JFactory::getDate ()->toSql ();
if ($config->get("enable_following",0)==0)
{
return false;
}
// 1. Select max point
$query = $this->_db->getQuery(true);
$query->select('point')
->from('#__jlexreview_subscribe')
->where('sub_type=0')
->group('point')
->order('point DESC');
$points = $this->_db->setQuery($query,0,2)->loadColumn();
// 2. Get list people to send
$query->clear()
->select('sub.*')
->from('#__jlexreview_subscribe sub')
->where(array(
'sub_type=0'
))
->order('sub.id ASC');
if($points && count($points)==2)
{
$query->where('point < ' . $points [0]);
}
$items = $this->_db->setQuery($query, 0, $person_each_time)
->loadObjectList();
$next_point = 0;
if($points)
$next_point = count($points)==2 ? $points [0] : $points [0]+1;
// 4. Bind to template
$path = trim($config->get('email_tpl_path',''),'/');
if (preg_match('/^\s*$/', $path))
{
$path = 'administrator/components/com_jlexreview/libs/email_templates';
}
$path = JPATH_ROOT.'/'.$path;
$email_tpl = $path . '/follow.tpl.php';
if (! JFile::exists ($email_tpl))
{
return false;
}
$joomla_config = JFactory::getConfig();
$email_from = $joomla_config->get("mailfrom");
if (! $items)
{
// no user available, reset point
$query = "UPDATE #__jlexreview_subscribe SET point=0 WHERE sub_type=0";
$this->_db->setQuery($query)->execute();
return null;
}
$userClass = JLexReviewHelperSite::getProfile();
foreach ( $items as $k=>$item )
{
$item->user = $userClass->getUser( $item->userid*1, $item->guest_email, $item->guest_name);
$item->author = $userClass->getUser( $item->sub_value*1);
$item->point_created = empty ($item->point_created) ? $item->created : $item->point_created;
$query->clear ();
// where clause
$whereClauses = array (
'item.id IS NOT NULL',
'r.published=1',
'r.created>=' . $this->_db->quote ($item->point_created),
'r.created<' . $this->_db->quote ($now),
'r.created_by=' . $item->sub_value
);
$query->select ('SQL_CALC_FOUND_ROWS r.id, r.title, item.*')
->from ("#__jlexreview r")
->leftJoin ("#__jlexreview_entry item ON item.id=r.entry_id");
$query->where ($whereClauses)
->group ('r.entry_id')
->order ('r.id ASC');
$reviews = $this->_db->setQuery ($query, 0, 7)->loadObjectList ();
$total = $this->_db->setQuery("SELECT FOUND_ROWS()")->loadResult();
if ($reviews)
{
foreach ($reviews as $k1=>&$review)
{
// entry
if ($config->get("link_type",0)=="1")
{
$up = JLexReviewHelperAdmin::getItemDetail($review->object, $review->object_id, $review->object_name, $review->url);
$review->url = str_replace(JUri::root(true), '', $up->url);
$review->object_name = $up->title;
} else {
$review->url = urldecode($item->url);
}
$review->url = trim($review->url, '/');
$review->url = preg_match("/^https?:\/\//", $review->url) ? $review->url : JUri::root() . $review->url;
$review->url = $review->url .(stripos($review->url,'?')!==false?'&':'?'). 'review_id=' . $review->id;
if (!preg_match('/^\s*$/', $review->title))
{
$review->title = JLexReviewHelperAdmin::subwords($review->title,20);
}
$review->body = $this->_getReview($review->id, $review->section_file);
}
}
if ($total > 0)
{
// link to unsubscribe
$hash = md5("jlexreview-subscribe-" . $item->id);
$unsubscribe = JRoute::_('index.php?option=com_jlexreview&view=mail&task=unsubscribe&id='.$item->id.'&hash='.$hash, false, 2);
$title = JText::sprintf("JR_ALERT_USER_POST_REVIEW_IN_AN_ITEM", $item->author->get('jname'), $reviews[0]->object_name);
// bind to template
ob_start ();
include $email_tpl;
$body = ob_get_contents ();
ob_end_clean ();
// send.
$appConfig = JFactory::getConfig();
JFactory::getMailer()->sendMail($appConfig->get("mailfrom"), $appConfig->get("fromname"), $item->user->get("email"), $title, $body, true);
}
/*---- update point ----*/
$subQuery = "UPDATE #__jlexreview_subscribe SET point=" . $next_point;
$subQuery.= ", point_created=" .$this->_db->quote ($now). " WHERE id=" . $item->id;
$this->_db->setQuery ($subQuery)->execute();
}
return true;
}
public function mail_notification ()
{
set_time_limit(0);
$config = JLexReviewHelperAdmin::getConfig();
if ($config->get("admin_alert",0)==0 && $config->get("user_alert",0)==0)
{
return false;
}
// where clause
$point_time = $config->get("alert_date", JFactory::getDate()->toSql ());
$query = $this->_db->getQuery(true);
$query->select('alert.*')
->from('#__jlexreview_notification alert')
->where(array(
'alert.unread=1',
'alert.sent=0'
))
->order( 'alert.id ASC' );
/**
if ($config->get("admin_alert_send_method",1)==0 || $config->get("admin_alert",0)==0) // if set admin method is imelidately
{
$query->where('alert.user_remind>0');
}
**/
if(!$config->get('guest_alert',0))
{
$query->where('alert.user_remind>0');
}
$rows = $this->_db->setQuery($query,0,20)->loadObjectList();
if(!$rows) return null;
$userClass = JLexReviewHelperSite::getProfile();
foreach ($rows as $row)
{
$row->user = $userClass->getUser($row->user_remind, $row->user_email, $row->user_email);
$row->email_dest = $row->user_remind>0?$row->user->get("email"):$row->user_email;
$row->author = $userClass->getUser($row->created_by, '', $row->guest_name);
$emails = explode(",", $config->get("admin_alert_emails",""));
JLexReviewHelperAdmin::getAlert()->set($row)->send($emails, $config->get("admin_alert_quicktask",1)==1?true:false);
}
return null;
}
public function unsubscribe()
{
$app = JFactory::getApplication();
$id = $app->input->getInt("id", 0);
$hash = md5("jlexreview-subscribe-" . $id);
$hash_input = $app->input->getString("hash", "");
if ($hash_input!=$hash || $id<1)
{
$this->setError(JText::_("JR_USER_NOT_FOUND"));
return false;
}
$query = "DELETE FROM #__jlexreview_subscribe WHERE id=" . $this->_db->quote ($id);
$this->_db->setQuery($query)->execute();
$row = $this->_db->setQuery($query)->getAffectedRows();
if($row<1)
{
$this->setError(JText::_("JR_USER_NOT_FOUND"));
return false;
}
return true;
}
public function stop()
{
$app = JFactory::getApplication();
$id = $app->input->getInt("id", 0);
$hash = md5("jlexreview-notification-" . $id);
$hash_input = $app->input->getString("hash", "");
$now = JFactory::getDate()->toSql();
if ($hash_input!=$hash || $id<1)
{
$this->setError(JText::_("JR_USER_NOT_FOUND"));
return false;
}
$row = $this->getTable("NotificationOff", "TableJR");
$row->bind(array(
"uid" => $id,
"created_time" => $now,
"published" => 1
));
if ($row->check())
{
$row->store();
}
return true;
}
}