| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 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/administrator/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 JLexReviewModelCm extends JModelLegacy
{
public $limitstart = 0;
public $limit = 20;
public $total = 0;
public $filters = [];
public $sort = "cm.created DESC";
public function getComments()
{
$app = JFactory::getApplication ();
$config = JLexReviewHelperAdmin::getConfig();
$query = $this->_db->getQuery(true);
$query->select("SQL_CALC_FOUND_ROWS cm.*")
->select("IF(u.id,u.name,cm.author_name) author,u.username")
->from("#__jlexreview_cm cm")
->leftJoin("#__jlexreview r ON cm.review_id=r.id")
->select("entry.object_name AS entry_name, entry.url AS entry_url, entry.object, entry.object_id")
->leftJoin("#__jlexreview_entry entry ON cm.entry_id=entry.id")
->leftJoin("#__users u ON cm.created_by=u.id");
$wClauses = array(
"entry.id IS NOT NULL",
"r.id IS NOT NULL"
);
// filters
if(array_key_exists("uid", $this->filters))
{
$wClauses[]="cm.created_by=".$this->_db->quote($filters["uid"]);
}
if(array_key_exists("state", $this->filters))
{
$wClauses[]="cm.published=".$this->_db->quote($this->filters["state"]);
}
if(array_key_exists("q", $this->filters))
{
$wClauses[]="cm.comment LIKE " . $this->_db->quote('%'.$this->filters["q"].'%');
}
if(array_key_exists("review_id", $this->filters))
{
$wClauses[]="cm.review_id=".$this->_db->quote($this->filters["review_id"]);
}
if(array_key_exists("except_cm", $this->filters))
{
$wClauses[]="cm.id!=".$this->_db->quote($this->filters["except_cm"]);
}
if(array_key_exists("entry_id", $this->filters))
{
$wClauses[]="cm.entry_id=".$this->_db->quote($this->filters["entry_id"]);
}
$query->where($wClauses)
->order($this->sort);
$comments = $this->_db->setQuery($query, $this->limitstart, $this->limit)->loadObjectList();
$this->total = (int) $this->_db->setQuery("SELECT FOUND_ROWS()")->loadResult();
if(!$comments) return null;
foreach($comments as $cm)
{
if($config->get("link_type",0)=="1")
{
$up = JLexReviewHelperAdmin::getItemDetail($cm->object, $cm->object_id, $cm->entry_name, $cm->entry_url);
$cm->entry_name = $up->title;
$cm->entry_url = $up->url;
} else {
$cm->entry_url = trim(urldecode($cm->entry_url), "/");
$cm->entry_url = preg_match("/^https?:\/\//", $cm->entry_url) ? $cm->entry_url : JUri::root(true) . "/" . $cm->entry_url;
}
$cm->urlPreview = $cm->entry_url . (preg_match("/\?/", $cm->entry_url)?"&":"?") . "review_id=".$cm->review_id.",".$cm->id;
$cm->urlEdit = JUri::base(true)."/index.php?option=com_jlexreview&view=cm&layout=form&id=".$cm->id;
$cm->created = JHtml::date($cm->created, $this->_db->getDateFormat());
}
return $comments;
}
public function getPagaNav()
{
jimport('joomla.html.pagination');
return new JPagination($this->total, $this->limitstart, $this->limit);
}
public $id = 0;
public function getCm()
{
if($this->id<1) return null;
$query = $this->_db->getQuery(true);
$query->select("*")
->from("#__jlexreview_cm")
->where("id=".$this->_db->quote($this->id));
$row = $this->_db->setQuery($query)->loadObject();
return $row;
}
public function getForm()
{
$app = JFactory::getApplication();
$config = JLexReviewHelperAdmin::getConfig();
$user = JFactory::getUser();
$path = dirname(__FILE__)."/forms/comment.xml";
$form = JForm::getInstance("jreview_comment", $path, array('control' => 'jform'));
$form->addFieldPath(dirname (__FILE__)."/fields");
$form->addRulePath(dirname (__FILE__)."/rules");
if($config->get("u_edit_any_comment",false)==true && $app->isClient("administrator"))
{
$form->loadFile(dirname(__FILE__)."/forms/comment_admin.xml");
}
if($user->guest)
{
$xml = '<form>';
$xml.= '<fieldset name="basic">';
$xml .= '<field type="text" name="author_name" label="JR_AUTHOR_NAME" required="true" />';
if($config->get("email_field",1)) $xml .= '<field type="text" name="author_email" label="JR_AUTHOR_EMAIL" required="true" />';
$xml.= '</fieldset>';
$xml.= '</form>';
$form->load($xml);
}
return $form;
}
public function save()
{
$app = JFactory::getApplication();
$row = $this->getTable("comment", "TableJR" );
$config = JLexReviewHelperAdmin::getConfig();
$user = JFactory::getUser();
$session= JFactory::getSession();
$query = $this->_db->getQuery(true);
$form = $this->getForm();
$data = array_key_exists("jform", $_POST) ? $_POST["jform"] : array();
$id = array_key_exists("id", $data) && is_numeric($data["id"]) && $data["id"]>0 ? intval($data["id"]) : 0;
$row->load($id);
$isNew = $row->id>0?false:true;
// permission to post review
if($isNew && $config->get("u_post_comment", true)==false)
{
$this->setError(JText::_("JR_PERMISSION_DENIED"));
return false;
}
// disable for guest
if(!$isNew && $user->guest)
{
$this->setError(JText::_("JR_PERMISSION_DENIED"));
return false;
}
// permission to edit review
if(!$isNew && $config->get("u_edit_own_comment",true)==false && $config->get("u_edit_any_comment",false)==false && $row->created_by!=$user->id)
{
$this->setError(JText::_("JR_PERMISSION_DENIED"));
return false;
}
// adjust admin form
if ($config->get("u_edit_any_comment",false)==true && $app->isClient("administrator"))
{
$user_type = array_key_exists("user_type", $data) ? $data["user_type"] : 1;
if(!$user_type)
{
// make two field author_name and author_email is require.
$form->setFieldAttribute("author_name", "required", "true");
$form->setFieldAttribute("author_email", "required", "true");
$form->removeField("created_by");
} else {
// remove these fields.
$form->removeField("author_email");
$form->removeField("author_name");
$form->setFieldAttribute("created_by", "required", "true");
}
} else {
if($user->guest)
{
$form->setFieldAttribute("author_name", "required", "true");
$form->setFieldAttribute("author_email", "required", "true");
$form->removeField("created_by");
} else {
$form->removeField("author_email");
$form->removeField("author_name");
}
if(!$isNew)
{
$form->removeField("review_id");
$form->removeField("reply_id");
} else {
$form->setFieldAttribute("review_id", "required", "true");
}
}
// restriction
if($app->isClient("site") && $config->get("u_edit_any_comment",false)==false && $isNew)
{
$second = (int) $config->get("between_comment_post",30)*1;
$ip_address = JLexReviewHelperAdmin::ip_address();
// time between post
if($second>0)
{
$query->clear()
->select("MAX(created)")
->from("#__jlexreview_cm")
->where($user->guest ? "ip_address=" . $this->_db->quote($ip_address) : "created_by=" . $user->id);
$lastpost = $this->_db->setQuery($query)->loadResult();
if($lastpost)
{
$delta = JFactory::getDate()->toUnix() - JFactory::getDate($lastpost)->toUnix();
if($delta <= $second)
{
if($second<60)
{
$left_time = JText::plural("JR_SECONDS_COUNT", $second);
} else {
$left_time = JText::plural("JR_MIN_COUNT", intval($second/60));
}
$this->setError(JText::sprintf("JR_BETWEEN_TWO_TIMES_POST",$left_time));
return false;
}
}
}
// check guest name
if($user->guest && $config->get("check_guest_name",1)==1)
{
$deniedNames = explode(",", $config->def("forbidden_name",""));
if(count($deniedNames) && in_array(strtolower(@$data["author_name"]), $deniedNames))
{
$this->setError(JText::_("JR_CHOOSE_ANOTHER_NAME"));
return false;
}
}
}
try {
$events = JLexReviewHelperAdmin::dispatcherPlugin("onBeforeSave", array(
&$data, $isNew,
"com_jlexreview.cm.save"
), "checking");
} catch(Exception $e) {
$this->setError($e->getMessage());
return false;
}
$data = $form->filter($data);
$return = $form->validate($data);
if($return===false)
{
// Get the validation messages.
$errors = $form->getErrors();
foreach($errors as $error)
{
if($error instanceof Exception)
{
$this->setError($error->getMessage());
} else {
$this->setError($error);
}
}
return false;
}
if(array_key_exists("review_id", $data))
{
$review_id = intval($data["review_id"]);
$reviewTable = $this->getTable("Review", "TableJR");
$reviewTable->load($review_id);
if($reviewTable->id<1)
{
$this->setError(JText::_("JR_REVIEW_NOT_FOUND"));
return false;
}
$data["entry_id"] = $reviewTable->entry_id;
}
// parent_id
if(array_key_exists("reply_id", $data) && $data["reply_id"]>0)
{
$pid = intval($data["reply_id"]);
$query->clear()
->select("id, parent_id, created_by, author_email")
->from("#__jlexreview_cm")
->where("id=".$this->_db->quote($pid));
$pCm = $this->_db->setQuery($query)->loadObject();
if($pCm)
{
$data["parent_id"] = $pCm->parent_id<1 ? $pCm->id : $pCm->parent_id;
} else {
$data["reply_id"] = 0;
}
}
if($config->get("u_edit_any_comment",false)==true && $app->isClient("administrator"))
{
if(array_key_exists("created_by", $data))
{
$data["author_name"] = "";
$data["author_email"] = "";
} else {
$data["created_by"] = 0;
}
} else {
if($isNew)
{
$data["created_by"] = $user->id;
$data["published"] = $config->get("u_auto_publish_cm", true)==false?0:1;
}
}
$row->bind($data);
if(!$row->check())
{
$this->setError($row->getError());
return false;
}
if(!$row->store())
{
$this->setError("An error appear when saving.");
return false;
}
JLexReviewHelperAdmin::updateCommentOfRating($row->review_id);
JLexReviewHelperAdmin::updateUserParams($row->created_by);
// user notification
if($app->isClient("site") && $isNew==true && $config->get("user_alert", 0)==1)
{
$alertTable = $this->getTable("notification", "TableJR");
$alertData = array(
"entry_id" => $row->entry_id,
"type_id" => $row->review_id . "," . $row->id,
"created_time" => JFactory::getDate()->toSql(),
"guest_name" => $row->author_name,
"created_by" => $row->created_by,
"published" => $row->published
);
if($config->get("user_alert_comment",0)==1 && !$row->reply_id && ($reviewTable->created_by>0 || (!$reviewTable->created_by && $config->get('guest_alert',0)==1)))
{
$alertData["action_type"] = "CM_REVIEW";
$alertData["user_remind"] = $reviewTable->created_by;
if(!$reviewTable->created_by)
$alertData["user_email"]=$reviewTable->author_email;
}
if($config->get("user_alert_reply",0)==1 && $row->reply_id>0 && ($pCm->created_by>0 || (!$pCm->created_by && $config->get('guest_alert',0)==1)))
{
$alertData["action_type"] = "CM_REPLY";
$alertData["user_remind"] = $pCm?$pCm->created_by:0;
if(!$pCm->created_by)
$alertData["user_email"]=$pCm->author_email;
}
if(($alertData["user_remind"] && $alertData["user_remind"]!=$row->created_by) || (!$alertData["user_remind"] && $alertData["user_email"]!=$row->author_email))
{
$alertTable->bind($alertData);
$alertTable->store();
$alertTable->alert();
}
}
// admin notification
if($app->isClient("site") && $config->get("admin_alert",0)==1)
{
$alertTable = $this->getTable("notification", "TableJR");
$alertData = array(
"entry_id" => $row->entry_id,
"type_id" => $row->review_id . "," . $row->id,
"created_time" => JFactory::getDate()->toSql(),
"created_by" => $row->created_by,
"guest_name" => $row->author_name,
"action_type" => $isNew ? "CM_ADDED" : "CM_MODIFIED"
);
$alertCmStatus = $config->get("admin_alert_comment","both");
if ($alertCmStatus=="both" || ($alertCmStatus=="added" && $isNew) || ($alertCmStatus=="modified" && !$isNew))
{
$alertTable->bind($alertData);
$alertTable->store();
$alertTable->alert();
}
}
try {
$events = JLexReviewHelperAdmin::dispatcherPlugin("onAfterSave", array(
&$data, $isNew,
"com_jlexreview.cm.save"
), "checking");
} catch(Exception $e){
$this->setError($e->getMessage());
return false;
}
// clear cache
if($config->get("cache",1)==0) JFactory::getCache()->clean();
// end
$session->set('jreview_cmid_passed', $row->id);
return $row->id;
}
public function cmCmd($cmd)
{
$app = JFactory::getApplication();
$cid = $app->getInput()->get("cid", null, "array");
if(empty($cid) || !count($cid))
{
$this->setError(JText::_('JR_SELECT_ROW_TO_TASK'));
return false;
}
$row = $this->getTable("Comment", "TableJR");
foreach ($cid as $id) {
if(!preg_match("/^[1-9][0-9]*$/", $id)) continue;
$id = (int) $id;
$row->load($id);
switch($cmd)
{
case "publish":
case "unpublish":
$row->do_publish($cmd=="publish"?1:0);
break;
case "delete":
$row->do_remove();
break;
}
}
return true;
}
}