AnonSec Shell
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/c/o/o/coopiak/amisdesseniors-fr/nice/components/com_rsfeedback/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/c/o/o/coopiak/amisdesseniors-fr/nice/components/com_rsfeedback/models/feedback.php
<?php
/**
 * @package RSFeedback!
 * @copyright (C) 2010-2018 www.rsjoomla.com
 * @license GPL, http://www.gnu.org/copyleft/gpl.html
 */

use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\Mail\MailHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Factory;

defined('_JEXEC') or die('Restricted access');

class RSFeedbackModelFeedback extends AdminModel
{
	/**
	 * Model context string.
	 *
	 * @var		string
	 */
	protected $_context = 'com_rsfeedback.feedback';

	public function getTable($type = 'Feedback', $prefix = 'RSFeedbackTable', $config = array()) {
		return Table::getInstance($type, $prefix, $config);
	}

	protected function populateState() {
		$app = Factory::getApplication();

		// Load the parameters.
		$params = $app->getParams();
		$this->setState('params', $params);

		$param_id 	=  $params->get('feedback_id');
		$id 		= $app->input->get('id', '','int');
		$feedback_id= !empty($param_id) ? $param_id : $id;

		$this->setState('feedback.id',$feedback_id);
	}

	public function getItem($pk = null) {
		$pk 			= !empty($pk) ? (int) $pk : (int) $this->getState('feedback.id');
		$item 			= parent::getItem($pk);
		$item->id 		= $item->id ? $item->id  : 0;

		if ($item->user_id) {
			$user = Factory::getUser($item->user_id);
			$item->username = RSFeedbackHelper::getConfig('user_display') ? $user->get('name') : $user->get('username');
		} else {
			$item->username = empty($item->name) ? Text::_( 'COM_RSFEEDBACK_USER_ANONYMOUS') : $item->name;
		}

		$item->nr_votes = $this->getFeedbackVotes($item->id);

		if (!empty($item->cat_id)) {
			$CategoryDetails 		 = RSFeedbackHelper::getCategoryDetails($item->cat_id);
			$item->max_votes_allowed = $CategoryDetails->max_votes_allowed;
			$item->category_name	 = $CategoryDetails->name;
		}

		$StatusDetails			 = $this->getStatusDetails($item->status_id);
		$item->status_name		 = $StatusDetails->name;
		$item->status_icon		 = $StatusDetails->icon;
		$item->status_default	 = $StatusDetails->default;
		$item->comments  		 = RSFeedbackHelper::getFeedbackCommentsCount($item->id);

		return $item;
	}

	public function getForm($data = array(), $loadData = true) {
		$form = $this->loadForm('com_rsfeedback.feedback', 'feedback', array('control' => 'jform', 'load_data' => $loadData));
		if (empty($form))
			return false;

		return $form;
	}

	protected function loadFormData() {
		// Check the session for previously entered form data.
		$app  = Factory::getApplication();
		$data = $app->getUserState('com_rsfeedback.edit.feedback.data', array());
		$id	  = $app->input->get('id', 0, 'int');

		if (!empty($id))
			$data = $this->getItem();

		return $data;
	}

	public function save($data) {
		$permissions = RSFeedbackHelper::getPermissions();
		$config		 = RSFeedbackHelper::getConfig();
		$jconfig 	 = Factory::getConfig();
		$user		 = Factory::getUser();
		$allowed_categories = RSFeedbackHelper::getAllowedCategories();

		$category_is_allowed = false;
		foreach ($allowed_categories as $cat)
			if ($data['cat_id'] == $cat->id)
				$category_is_allowed = true;

		// do not permit to add feedback in other categories
		if (!$category_is_allowed ) {
			$this->setError(Text::_('COM_RSFEEDBACK_NOT_ALLOWED_CATEGORY'));
			return false;
		}

		// Need to check consent
		if (empty($data['consent'])) {
			$this->setError(Text::_('COM_RSFEEDBACK_FEEDBACK_CONSENT_NEEDED_ERROR'));
			return false;
		}

		// if feedback_moderation is on, set published=0 for new & updated feedbacks before saving
		if ($permissions['feedback_moderation'])
			$data['published'] = 0;

		// send moderation emails if save returned true
		if (parent::save($data)) {
			if ($permissions['feedback_moderation']) {
				// send mail to the feedback_moderation_emails in the config
				$emails = $config->feedback_moderation_emails;
				$emails = str_replace("\r", "", $emails);
				if (!empty($emails)) {
					$from_email	= $jconfig->get('mailfrom');
					$from_name	= $jconfig->get('fromname');

					if ($data['id'] == 0) {
						$subject	= Text::sprintf('COM_RSFEEDBACK_SUBJECT_REQUIRE_MODERATION_FEEDBACK',$user->name);
						$body		= Text::sprintf('COM_RSFEEDBACK_BODY_REQUIRE_MODERATION_FEEDBACK', $user->name, $data['title']);
					} else {
						$subject	= Text::sprintf('COM_RSFEEDBACK_SUBJECT_REQUIRE_MODERATION_UPDATED_FEEDBACK',$user->name);
						$body		= Text::sprintf('COM_RSFEEDBACK_BODY_REQUIRE_MODERATION_UPDATED_FEEDBACK', $user->name, $data['title']);
					}

					$emails = explode("\n",$emails);
					foreach ($emails as $email)
						if (MailHelper::isEmailAddress(trim($email))) {
							try {
								Factory::getMailer()->sendMail($from_email, $from_name, $email, $subject, $body, 1);
							} catch (Exception $e) {}
						}
				}
			}
			return true;
		}
	}

	public function getStatusDetails($status_id) {
		$status 		 = new stdClass();
		$status->name 	 = '';
		$status->default = '';
		$status->icon 	 = '';

		if ($status_id) {
			$db 	= Factory::getDbo();
			$query	= $db->getQuery(true);

			$query->select($db->qn('name').', '.$db->qn('icon').', '.$db->qn('default'))
				->from($db->qn('#__rsfeedback_statuses'))
				->where($db->qn('id') .' = '.$db->q((int) $status_id));
			$db->setQuery($query);
			$status = $db->loadObject();
		}

		return $status;
	}

	public function getHits() {
		$db		= Factory::getDbo();
		$query	= $db->getQuery(true);
		$id		= $this->getState('feedback.id');

		if (!empty($id)) {
			$query->update($db->qn('#__rsfeedback_feedbacks'));
			$query->set($db->qn('hits') . ' = hits + 1');
			$query->where($db->qn('id').' = '.$db->q($id));
			$db->setQuery($query);
			$db->execute();
		}

		return true;
	}

	public function getFeedbackVotes($id) {
		if (!empty($id)) {
			$db 	= Factory::getDbo();
			$query	= $db->getQuery(true);

			$query->select('COALESCE(SUM('.$db->qn('number_points').'),0) as nr_votes')
				->from($db->qn('#__rsfeedback_user_votes'))
				->where($db->qn('feedback_id') .' = '.$db->q((int) $id));

			$db->setQuery($query);
			$votes = $db->loadResult();
		} else
			$votes = 0;

		return $votes;
	}

	public function getUserRemainingVotes() {
		$user 	  = Factory::getUser();
		$db		  = Factory::getDbo();
		$query	  = $db->getQuery(true);
		$config	  = RSFeedbackHelper::getConfig();
		$statuses = RSFeedbackHelper::getStatuses();

		$disabled_voting_statuses = array();
		foreach ($statuses as $status)
			if ($status->permissions->allow_voting == 0) $disabled_voting_statuses[] = $status->id;

		if ($user->guest) {
			$max_votes	= 1;
			$user_id 	= '-1';
			$ip_address = Factory::getApplication()->input->server->get('REMOTE_ADDR', '','string');
			if ($ip_address == '::1') $ip_address = '127.0.0.1';
			
			// Create a hash for the IP address
			$hash = md5($ip_address);

			$query->where($db->qn('uv.hash').' = '.$db->q($hash));
		} else {
			$max_votes 	= (int) $config->user_maxvotes;
			$user_id = $user->id;
		}

		$query->select('SUM('.$db->qn('uv.number_points').')')
			->from($db->qn('#__rsfeedback_user_votes').' uv')
			->join('left', $db->qn('#__rsfeedback_feedbacks').' f ON '.$db->qn('uv.feedback_id').' = '.$db->qn('f.id'))
			->where($db->qn('uv.user_id').' = '.$db->q($user_id))
			->where($db->qn('f.published').' = '.$db->q('1'))
			->where($db->qn('f.status_id').' NOT IN ('.implode(',', $disabled_voting_statuses).')');
		if (isset($config->user_reset_period) && !empty($config->user_reset_period)) {
			$query->where($db->qn('uv.date_voted').' >= ' . $db->q(Factory::getDate('-' . (int) $config->user_reset_period . ' day ' . date('Y-m-d H:i:s'))->toSql()));
		}

		$db->setQuery($query);
		$total_voted = (int) $db->loadResult();

		return $total_voted > $max_votes ? 0 : $max_votes - $total_voted;
	}

	public function getUserVotesOnFeedback($feedback_id) {
		$db			= Factory::getDbo();
		$query		= $db->getQuery(true);
		$user		= Factory::getUser();
		$config	    = RSFeedbackHelper::getConfig();

		if ($user->guest) {
			$ip_address = Factory::getApplication()->input->server->get('REMOTE_ADDR', '','string');
			if ($ip_address == '::1') $ip_address = '127.0.0.1';
			
			// Create a hash for the IP address
			$hash = md5($ip_address);

			$query->select($db->qn('number_points'))->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('feedback_id').' = '.$db->q($feedback_id))->where($db->qn('user_id').' = '.$db->q('-1'))->where($db->qn('hash').' = '.$db->q($hash));
		} else {
			$query->select($db->qn('number_points'))->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('feedback_id').' = '.$db->q($feedback_id))->where($db->qn('user_id').' = '.$db->q($user->id));
		}

		if (isset($config->user_reset_period) && !empty($config->user_reset_period))
			$query->where($db->qn('date_voted').' >= ' . $db->q(Factory::getDate('-' . (int) $config->user_reset_period . ' day ' . date('Y-m-d H:i:s'))->toSql()));

		$db->setQuery($query);
		$votes = (int) $db->loadResult();

		return $votes;
	}

	public function SendVotes() {
		$db			 = Factory::getDbo();
		$query	 = $db->getQuery(true);
		$user		 = Factory::getUser();
		$app		 = Factory::getApplication();
		$date_voted	 = RSFeedbackHelper::showDate(time(), 'Y-m-d H:i:s');
		$feedback_id = $app->input->get('feedback_id', 0, 'int');
		$sent_votes  = $app->input->get('votes', 0, 'int'); // Desired number of points that the user wants to assign to the selected feedback
		$config	     = RSFeedbackHelper::getConfig();

		if (empty($feedback_id)) exit();

		$feedback 		= $this->getItem($feedback_id);
		$category 		= RSFeedbackHelper::getCategoryDetails($feedback->cat_id);
		$statuses 		= RSFeedbackHelper::getStatuses();
		$allow_voting	= $statuses[$feedback->status_id]->permissions->allow_voting;

		//Get the IP address to prevent spam from anonymous visitors
		$ip_address = $app->input->server->get('REMOTE_ADDR', '','string');
		if ($ip_address == '::1') $ip_address = '127.0.0.1';
		
		// Create a hash for the IP address
		$hash = md5($ip_address);
		
		if (!RSFeedbackHelper::getConfig('store_ip')) {
			$ip_address = '0.0.0.0';
		}

		$return = new stdClass();
		$return->message 		 = Text::_('COM_RSFEEDBACK_VOTE_POSTED_SUCCESSFULLY',true);
		$return->message_type 	 = 'success';

		//check if we have anonymous voting
		$anonymous = $category->anonymous_voting;

		if ($allow_voting) {
			//case 1 : guest and allowed anonymous voting
			if ($user->guest && $anonymous) {
				// check to see if the user has already voted
				$query->clear();
				$query->select('SUM(number_points)')->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('hash').' = '.$db->q($hash))->where($db->qn('user_id').' = '.$db->q('-1'));

				// ignore expired voting points ones
				if (isset($config->user_reset_period) && !empty($config->user_reset_period))
					$query->where($db->qn('date_voted').' >= ' . $db->q(Factory::getDate('-' . (int) $config->user_reset_period . ' day ' . date('Y-m-d H:i:s'))->toSql()));

				$db->setQuery($query);
				$voted = (int) $db->loadResult();

				if ($voted == 0) {
					$query->clear()->insert($db->qn('#__rsfeedback_user_votes'))
						->columns(array($db->qn('feedback_id'), $db->qn('user_id'), $db->qn('number_points'), $db->qn('date_voted'), $db->qn('ip'), $db->qn('hash')))
						->values($db->q($feedback_id).', '.$db->q('-1').', '.$db->q('1').', '.$db->q($date_voted).', '.$db->q($ip_address).', '.$db->q($hash));

					$db->setQuery($query);
					$db->execute();
				}

				if ($sent_votes == 0) {
					$query->clear();
					$query->delete($db->qn('#__rsfeedback_user_votes'))->where($db->qn('hash').' = '.$db->q($hash))->where($db->qn('user_id').' = '.$db->q('-1'))->where($db->qn('feedback_id').' = '.$db->q($feedback_id));

					// keep the expired votes
					if (isset($config->user_reset_period) && !empty($config->user_reset_period))
						$query->where($db->qn('date_voted').' >= ' . $db->q(Factory::getDate('-' . (int) $config->user_reset_period . ' day ' . date('Y-m-d H:i:s'))->toSql()));

					$db->setQuery($query);
					$db->execute();
				}
			}

			//case 2 : guest and anonymous voting is not allowed
			if ($user->guest && !$anonymous) {
				$return->message 		 = Text::_('COM_RSFEEDBACK_NOT_ALLOWED_TO_VOTE');
				$return->message_type 	 = 'error';
			}

			//case 3 : user logged in 
			if (!$user->guest) {
				// see if the user has voted on this feedback
				$query->clear();
				$query->select($db->qn('id'))->from($db->qn('#__rsfeedback_user_votes'))->where($db->qn('feedback_id').' = '.$db->q($feedback_id))->where($db->qn('user_id').' = '.$user->id);

				// and votes are not expired
				if (isset($config->user_reset_period) && !empty($config->user_reset_period))
					$query->where($db->qn('date_voted').' >= ' . $db->q(Factory::getDate('-' . (int) $config->user_reset_period . ' day ' . date('Y-m-d H:i:s'))->toSql()));

				$db->setQuery($query);
				$voted = $db->loadResult();

				$user_votes_on_feedback = $this->getUserVotesOnFeedback($feedback_id);
				$user_remaining_votes 	= $this->getUserRemainingVotes();
				$votes = $sent_votes;

				if ($sent_votes > ($user_votes_on_feedback + $user_remaining_votes) && ($user_votes_on_feedback + $user_remaining_votes) <= $category->max_votes_allowed)
					$votes = abs($user_votes_on_feedback + $user_remaining_votes);

				if ($sent_votes > $category->max_votes_allowed)
					$votes = $category->max_votes_allowed;

				if ($category->max_votes_allowed > $user_remaining_votes && $sent_votes > $user_remaining_votes && $sent_votes > ($user_votes_on_feedback + $user_remaining_votes))
					$votes = $user_remaining_votes;

				if (empty($voted)) {
					// insert
					$query->clear();
					$query	->insert($db->qn('#__rsfeedback_user_votes'))
						->columns(array($db->qn('feedback_id'), $db->qn('user_id'), $db->qn('number_points'), $db->qn('date_voted'), $db->qn('ip'), $db->qn('hash')))
						->values($db->q($feedback_id).', '.$db->q($user->id).', '.$db->q($votes).', '.$db->q($date_voted).', '.$db->q($ip_address).', '.$db->q($hash));
					$db->setQuery($query);
					$db->execute();
				} else {
					if ($sent_votes == 0) {
						$query->clear();
						$query->delete($db->qn('#__rsfeedback_user_votes'))->where($db->qn('id').' = '.$db->q($voted));

						// keep the expired votes
						if (isset($config->user_reset_period) && !empty($config->user_reset_period))
							$query->where($db->qn('date_voted').' >= ' . $db->q(Factory::getDate('-' . (int) $config->user_reset_period . ' day ' . date('Y-m-d H:i:s'))->toSql()));

						$db->setQuery($query);
						$db->execute();
					} else {
						// update user's votes on feedback
						$query->clear();
						$query->update($db->qn('#__rsfeedback_user_votes'));
						$query->set($db->qn('number_points') . ' = '.$db->q($votes));
						$query->set($db->qn('date_voted') . ' = '.$db->q($date_voted));
						$query->where($db->qn('id').' = '.$db->q($voted));
						$db->setQuery($query);
						$db->execute();
					}
				}
			}
		} else {
			$return->message 		 = Text::_('COM_RSFEEDBACK_NOT_ALLOWED_TO_VOTE');
			$return->message_type 	 = 'error';
		}
		$return->feedback_votes  		= $this->getFeedbackVotes($feedback_id); // return the number of voted number_points on this feedback
		$return->user_remaining_votes  	= $this->getUserRemainingVotes(); // return the remaining number of votes for this user
		$return->user_votes_on_feedback = $this->getUserVotesOnFeedback($feedback_id);
		echo json_encode($return);
		exit();
	}

	public function Subscribe() {
		$db			 = Factory::getDbo();
		$query		 = $db->getQuery(true);
		$input		 = Factory::getApplication()->input;
		$feedback_id = $input->get('id', '','int');
		$name	 	 = $input->get('name', '','string');
		$consent	 = $input->get('consent', 0,'int');
		$email 		 = $input->get('email', '','sting');
		$return		 = new stdClass();

		$return->message = '';
		$return->success = false;

		if(empty($name)) {
			$return->message = Text::_('COM_RSFEEDBACK_NO_NAME');
			$return->success = false;
		} elseif (empty($email) || !MailHelper::isEmailAddress(trim($email))) {
			$return->message = Text::_('COM_RSFEEDBACK_NO_INVALID_EMAIL');
			$return->success = false;
		} elseif (empty($consent)) {
			$return->message = Text::_('COM_RSFEEDBACK_FEEDBACK_CONSENT_NEEDED_ERROR');
			$return->success = false;
		} else {
			// check if is already subscribed with this email
			$query->select('COUNT('.$db->qn('id').')')->from($db->qn('#__rsfeedback_subscriptions'))->where($db->qn('feedback_id').' = '.$db->q($feedback_id))->where($db->qn('email') .' = '.$db->q($email));
			$db->setQuery($query);

			if ($db->loadResult()) {
				$return->message = Text::_('COM_RSFEEDBACK_ALREADY_SUBSCRIBED');
				$return->success = false;
			} else {
				// add subscriber to database 
				$query->clear();
				$query->insert('#__rsfeedback_subscriptions')
					->set($db->qn('feedback_id').' = '. $db->q($feedback_id))
					->set($db->qn('name').' = '. $db->q($name))
					->set($db->qn('email').' = '. $db->q($email));
				$db->setQuery($query);
				$db->execute();

				$return->message = Text::_('COM_RSFEEDBACK_SUBSCRIBED');
				$return->success = true;
			}
		}

		return $return;
	}

	public function Unsubscribe() {
		$db			 = Factory::getDbo();
		$query		 = $db->getQuery(true);
		$input		 = Factory::getApplication()->input;
		$feedback_id = $input->get('id', '','int');
		$email 		 = $input->get('email', '','sting');
		$consent	 = $input->get('consent', 0,'int');
		$return		 = new stdClass();

		$return->message = '';
		$return->success = false;

		if (empty($email) || !MailHelper::isEmailAddress(trim($email))) {
			$return->message = Text::_('COM_RSFEEDBACK_NO_INVALID_EMAIL');
			$return->success = false;
		} else {
			// check if is already subscribed with this email
			$query->select('COUNT('.$db->qn('id').')')->from($db->qn('#__rsfeedback_subscriptions'))->where($db->qn('feedback_id').' = '.$db->q($feedback_id))->where($db->qn('email') .' = '.$db->q($email));
			$db->setQuery($query);

			if ($db->loadResult()) {
				// add subscriber to database 
				$query->clear();
				$query->delete('#__rsfeedback_subscriptions')
					->where($db->qn('feedback_id').' = '. $db->q($feedback_id))
					->where($db->qn('email').' = '. $db->q($email));
				$db->setQuery($query);
				$db->execute();

				$return->message = Text::_('COM_RSFEEDBACK_UNSUBSCRIBED');
				$return->success = true;
			} else {
				$return->message = Text::_('COM_RSFEEDBACK_NOT_SUBSCRIBED');
				$return->success = false;
			}
		}

		return $return;
	}

	public function getFeedbackFlags($feedback_id) {
		$db			 = Factory::getDbo();
		$query		 = $db->getQuery(true);
		$feedback_id = (int) $feedback_id;
		$flags 		 = array();
		$tmp		 = array();

		if ($feedback_id) {
			$query->select('uf.*, '. $db->qn('fl.name', 'flag_name'))->from($db->qn('#__rsfeedback_user_flags').' uf')->join('left', $db->qn('#__rsfeedback_flags').' fl ON '.$db->qn('uf.flag_id').' = '.$db->qn('fl.id'))->where($db->qn('uf.feedback_id').' = '.$db->q($feedback_id));
			$db->setQuery($query);
			$flags = $db->loadObjectList();

			foreach ($flags as $flag) {
				$flag->username = !empty($flag->user_id) ? Factory::getUser($flag->user_id)->username : Text::_('COM_RSFEEDBACK_USER_ANONYMOUS');
				$tmp[] 			= $flag;
			}

			$flags = $tmp;
		}

		return $flags;
	}

	//Add flags to the feedback
	public function Flag() {
		$db			= Factory::getDbo();
		$query		= $db->getQuery(true);
		$user       = Factory::getUser();
		$input      = Factory::getApplication()->input;
		$session    = Factory::getSession();

		$id			= $input->get('id', 0, 'int');
		$flag_id    = $session->get('com_rsfeedback.flagform.flag_id', '');
		$comment    = $session->get('com_rsfeedback.flagform.comment', '');

		$columns = array('feedback_id', 'user_id', 'flag_id', 'comment');
		$values	 = array($db->q($id), $user->id, $db->q($flag_id), $db->q($comment));

		$query->clear();
		$query->insert($db->qn('#__rsfeedback_user_flags'))
			->columns($columns)
			->values(implode(', ', $values));
		$db->setQuery($query);

		return $db->execute();
	}

	public function DeleteFlag($flag_id) {
		$msg = new stdClass();
		$msg->success = false;
		$permissions = RSFeedbackHelper::getPermissions();

		if ( $permissions['feedback_moderate_flags'] ) {
			if (!empty($flag_id)) {
				$db 	= Factory::getDbo();
				$query 	= $db->getQuery(true);
				$query->delete($db->qn('#__rsfeedback_user_flags'))->where($db->qn('id').' = '.$db->q($flag_id));
				$db->setQuery($query);

				if ($db->execute())
					$msg->success = true;
				else
					$msg->message = Text::_('COM_RSFEEDBACK_FEEDBACK_FLAG_DELETE_ERROR');
			}
		} else $msg->message = Text::_('COM_RSFEEDBACK_FEEDBACK_FLAG_DELETE_PERMISSION_ERROR');

		return $msg;
	}
}

Anon7 - 2022
AnonSec Team