| 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/nimes/components/com_rsfeedback/models/ |
Upload File : |
<?php
/**
* @package RSFeedback!
* @copyright (C) 2010-2018 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
class RSFeedbackModelFeedbacks extends ListModel
{
/**
* Model context string.
*
* @var string
*/
public $_context = 'com_rsfeedback.feedbacks';
protected function getListQuery() {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$user = Factory::getUser();
$params = Factory::getApplication()->getParams();
$SortBy = $params->get('SortBy', 'votes');
$direction = $params->get('OrderDirection', 'DESC');
switch($SortBy) {
case 'votes':
$order = $db->qn('nr_votes')." ".$direction;
break;
case 'username':
$order = $db->qn('u.username')." ".$direction;
break;
case 'date':
$order = $db->qn('f.created')." ".$direction;
break;
case 'title' :
$order = $db->qn('f.title')." ".$direction;
break;
}
$columns[] = 'f.*';
$columns[] = $db->qn('s.name','status_name');
$columns[] = $db->qn('s.icon','status_icon');
$columns[] = $db->qn('s.default','status_default');
$columns[] = $db->qn('u.username');
$columns[] = $db->qn('u.name','user_name');
$columns[] = 'COALESCE(SUM('.$db->qn('uv.number_points').'),0) as nr_votes';
$columns[] = $db->qn('c.max_votes_allowed');
$columns[] = $db->qn('c.anonymous_voting');
$columns[] = $db->qn('c.ordering');
$columns[] = $db->qn('c.id').' as category_id';
$columns[] = $db->qn('c.name').' as category_name';
$columns = implode(',',$columns);
$query->select($columns)
->from($db->qn('#__rsfeedback_feedbacks').' f')
->join('left', $db->qn('#__rsfeedback_statuses').' s ON '.$db->qn('s.id').' = '.$db->qn('f.status_id'))
->join('left', $db->qn('#__rsfeedback_user_votes').' uv ON '.$db->qn('uv.feedback_id').' = '.$db->qn('f.id'))
->join('left', $db->qn('#__rsfeedback_categories').' c ON '.$db->qn('c.id').' = '.$db->qn('f.cat_id'))
->join('left', $db->qn('#__users').' u ON '.$db->qn('u.id').' = '.$db->qn('f.user_id'));
// published feedbacks
$query->where($db->qn('f.published') .' = '.$db->q('1'));
// published categories
$query->where($db->qn('c.published') .' = '.$db->q('1'));
// display feedbacks from category
$ShowFromCategories = $this->getState('filter.ShowFromCategories', array());
$categories = implode('\',\'',$ShowFromCategories);
if (!empty($ShowFromCategories))
$query->where($db->qn('f.cat_id').' IN (\''.$categories.'\')');
// statuses
if ($Status = $params->get('Status', ''))
$query->where($db->qn('s.id').' = '.$db->q($Status));
$query->group($db->qn('f.id'));
// group feedback by category ordering
$CategoryOrderBy = $params->get('CategoryOrderBy', 'DESC');
$GroupByCategory = $params->get('GroupByCategory', 1);
if ($GroupByCategory)
$query->order($db->qn('c.ordering').' '.$CategoryOrderBy);
// search filter
if ($search = $this->getState('filter.search', ''))
$query->where(" (".$db->qn("f.title")." LIKE ".$db->q("%".$search."%")." OR ".$db->qn("f.text")." LIKE ".$db->q("%".$search."%").") ");
// display feedbacks where the user voted
if (Factory::getApplication()->input->get('action') == 'votes') {
$userID = $user->guest ? -1 : $user->id;
$query->where($db->qn('uv.user_id').' = '.$db->q($userID));
if ($userID == -1) {
$ip_address = Factory::getApplication()->input->server->get('REMOTE_ADDR', '','string');
if ($ip_address == '::1') $ip_address = '127.0.0.1';
$query->where($db->qn('uv.ip').' = '.$db->q($ip_address));
}
}
$query->order($order);
return $query;
}
protected function populateState($ordering = 'votes', $direction = 'DESC') {
$app = Factory::getApplication();
$params = $app->getParams();
// category filter
$cat_id = $app->input->get('cat_id', 0, 'int');
if ($cat_id)
$this->setState('filter.ShowFromCategories', array($cat_id));
else
$this->setState('filter.ShowFromCategories', $params->get('ShowFromCategories', array()));
// List state information
$limit = $params->get('DisplayNum', $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit', 10), 'uint'));
$this->setState('list.limit', $limit);
$lstart = $app->input->get('limitstart', 0, 'uint');
$this->setState('list.start', $lstart);
// Search filter
$search = $app->input->get('search', '', 'string');
$this->setState('filter.search', $search);
}
public function getItems() {
$items = parent::getItems();
$feedback_model = BaseDatabaseModel::getInstance('Feedback', 'RSFeedbackModel');
$tmp = array();
foreach ($items as $item) {
$item->comments = RSFeedbackHelper::getFeedbackCommentsCount($item->id);
$item->feedback_flags = $feedback_model->getFeedbackFlags($item->id);
$item->user_votes_on_feedback = $feedback_model->getUserVotesOnFeedback($item->id);
$tmp[] = $item;
}
return $tmp;
}
public function getStart() {
return $this->getState('list.start');
}
public function getFeedbackCategory() {
$cat_id = Factory::getApplication()->input->get('cat_id', '', 'int');
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from($db->qn('#__rsfeedback_categories'))
->where($db->qn('id') .' = '.$db->q($cat_id));
$db->setQuery($query);
return $db->loadObject();
}
//Move the feedback
public function MoveFeedback() {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$app = Factory::getApplication();
$id = $app->input->get('id', 0, 'int');
$target = $app->input->get('target', 0, 'int');
$response = new stdClass();
$permissions = RSFeedbackHelper::getPermissions();
$response->success = false;
if ($target == 0) {
$response->error = Text::_('COM_RSFEEDBACK_PLEASE_SELECT_MOVE_DESTINATION',true);
echo json_encode($response); exit();
}
if ($permissions['feedback_move'] == 1) {
$query->update('#__rsfeedback_feedbacks')
->set($db->qn('cat_id').' = '.$db->q($target))
->where($db->qn('id').' = '.$db->q($id));
$db->setQuery($query);
if ($db->execute()) {
$response->success = true;
$response->message = Text::_('COM_RSFEEDBACK_FEEDBACK_MOVED_SUCCESSFULLY',true);
} else $response->error = Text::_('COM_RSFEEDBACK_FEEDBACK_MOVE_NOTOK', true);
} else $response->error = Text::_('COM_RSFEEDBACK_FEEDBACK_MOVE_NO_PERMISSION', true);
echo json_encode($response); exit();
}
public function UpdateFeedbackStatus($feedback_id, $status_id) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$permissions = RSFeedbackHelper::getPermissions();
$statuses = RSFeedbackHelper::getStatuses();
$response = new stdClass();
if ($permissions['feedback_update_status']) {
$query->update($db->qn('#__rsfeedback_feedbacks'))
->set($db->qn('status_id').' = '.$db->q($status_id))
->where($db->qn('id').' = '.$db->q($feedback_id));
$db->setQuery($query);
$db->execute();
$response->message = Text::_('COM_RSFEEDBACK_STATUS_UPDATE_SUCCESS',true);
// remove user votes for this feedback
if (isset($statuses[$status_id]->permissions->automatically_remove_votes) && $statuses[$status_id]->permissions->automatically_remove_votes == 1) {
$query->clear()->delete()->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('feedback_id') . ' = ' .$db->q($feedback_id));
$db->setQuery($query);
$db->execute();
$response->message .= "\r\n".Text::_('COM_RSFEEDBACK_STATUS_UPDATE_INFO_VOTES_AUTOMATICALLY_REMOVED', true);
}
} else
$response->message = Text::_('COM_RSFEEDBACK_STATUS_UPDATE_ERROR_PERMISSION', true);
echo json_encode($response); exit();
}
/*
function delete
$id = the feedbacks id
$moderation_delete = in order for the auto-moderation rules to apply they need to be independent from the user/guest permissions
*/
public function delete($id, $moderation_delete = false) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$permissions = RSFeedbackHelper::getPermissions();
if ((($permissions['feedback_delete'] || $permissions['category_delete']) || $moderation_delete) && $id != 0) {
// delete flags
$query->clear()->delete()->from($db->qn('#__rsfeedback_user_flags'))->where($db->qn('feedback_id').' = '.$db->q($id));
$db->setQuery($query);
$db->execute();
// delete votes
$query->clear()->delete()->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('feedback_id').' = '.$db->q($id));
$db->setQuery($query);
$db->execute();
//delete feedback
$query->clear()->delete()->from($db->qn('#__rsfeedback_feedbacks'))->where($db->qn('id').' = '.$db->q($id));
$db->setQuery($query);
$db->execute();
return true;
} else
return false;
}
/*
* delete all user feedback votes
* return number of deleted votes
* */
public function deleteVotes()
{
$user = Factory::getUser();
$db = Factory::getDBO();
$query = $db->getQuery(true);
$config = RSFeedbackHelper::getConfig();
$ip_address = Factory::getApplication()->input->server->get('REMOTE_ADDR', '', 'string');
if ($ip_address == '::1') $ip_address = '127.0.0.1';
$query->select('uv.id')->from($db->qn('#__rsfeedback_user_votes', 'uv'));
if (!$user->guest) {
$query->where($db->qn('uv.user_id') . ' = ' . $db->q($user->id));
} else {
$query->where($db->qn('uv.ip').' = '.$db->q($ip_address))->where($db->qn('uv.user_id') . ' = ' . $db->q('-1'));
}
if ($config->display_reset_my_votes && $config->reset_my_votes_condition == 'status_voting_disabled'){
$statuses = RSFeedbackHelper::getStatuses();
$status_disabled_voting = array();
foreach ($statuses as $status) {
if ($status->permissions->allow_voting == '0')
$status_disabled_voting[] = $status->id;
}
if (!empty($status_disabled_voting)) {
$query
->join('left', $db->qn('#__rsfeedback_feedbacks', 'f').' ON uv.feedback_id = f.id')
->where('f.status_id NOT IN ('.RSFeedbackHelper::qi($status_disabled_voting).')');
}
}
// only active votes
if (isset($config->user_reset_period) && !empty($config->user_reset_period))
$query->where($db->qn('uv.date_voted').' >= CURRENT_TIME - INTERVAL '.(int) $config->user_reset_period.' DAY');
$db->setQuery($query);
$user_deleted_votes = $db->loadColumn();
if (!empty($user_deleted_votes)) {
$query->clear()->delete()->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('id') . ' IN (' . RSFeedbackHelper::qi($user_deleted_votes).')');
$db->setQuery($query);
$db->execute();
}
return count($user_deleted_votes);
}
}