403Webshell
Server IP : 46.105.57.169  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux webm002.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User : verseaumee ( 152031)
PHP Version : 8.5.7
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/verseaumee/ptitsanes/plugins/solidres/feedback/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/verseaumee/ptitsanes/plugins/solidres/feedback/feedback.php
<?php

/* ------------------------------------------------------------------------
  Solidres - Hotel booking extension for Joomla
  ------------------------------------------------------------------------
  @Author    Solidres Team
  @Website   http://www.solidres.com
  @Copyright Copyright (C) 2013 - 2017 Solidres. All Rights Reserved.
  @License   GNU General Public License version 3, or later
  ------------------------------------------------------------------------ */

defined('_JEXEC') or die;

/**
 * Solidres Feedback
 *
 * @package        Solidres
 * @subpackage     Feedback
 * @since          0.8.0
 */
class plgSolidresFeedback extends SRPlugin
{
	protected $db;

	public function __construct(&$subject, $config = array())
	{
		parent::__construct($subject, $config);
		jimport('joomla.filesystem.file');
		JLoader::register('SRLayoutHelper', JPATH_ADMINISTRATOR . '/components/com_solidres/helpers/layout.php');
		SRLayoutHelper::addIncludePath($this->_getSitePath() . '/layouts');
		JHtml::_('stylesheet', 'plg_solidres_feedback/assets/flags.css', array(), true);
		JHtml::_('stylesheet', 'plg_solidres_feedback/assets/feedbacks.css', array(), true);
	}

	public function onSolidresSendRequestFeedback($scope, $reservationId, $forceSend = false)
	{
		$params = JComponentHelper::getParams('com_solidres');

		if ($scope)
		{
			if (!SRPlugin::isEnabled('experience'))
			{
				return;
			}

			JTable::addIncludePath(SRPlugin::getAdminPath('experience') . '/tables');
			$table      = 'ExpReservation';
			$checkState = $params->get('exp_status_trigger_feedback_email', 0);
		}
		else
		{
			$table      = 'Reservation';
			$checkState = $params->get('asset_status_trigger_feedback_email', 2);
		}

		$reservation = JTable::getInstance($table, 'SolidresTable');
		$reservation->load($reservationId);

		if ($reservation->state != $checkState && !$forceSend)
		{
			return;
		}

		if ($scope)
		{
			$experience = SRExperienceHelper::getItem($reservation->experience_id);

			if (!$experience->id)
			{
				return;
			}

			$token          = $this->getToken($reservation);
			$subjectArray   = ['SR_EMAIL_REQUEST_FOR_EXPERIENCE_SUBJECT', $experience->name];
			$layoutId       = 'emails.request_customer_exp_feedback_html_inliner';
			$customerFields = array();
			$fieldContext   = SRExperienceHelper::getCustomFieldContext($reservation->id);

			if ($fields = SRCustomFieldHelper::getValues(array('context' => $fieldContext)))
			{
				foreach ($fields as $field)
				{
					$fieldName                  = $field->field->get('field_name');
					$customerFields[$fieldName] = $field->value;

					if ($fieldName == 'customer_email')
					{
						$customerEmail = $field->value;
						break;
					}
				}
			}

			$customer         = new stdClass;
			$customer->fields = $customerFields;
			$customer->name   = $reservation->customer_name;
			$displayData      = array(
				'experience' => $experience,
				'customer'   => $customer,
			);

			$reservation->set('token', $token);
		}
		else
		{
			JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_solidres/models', 'SolidresModel');
			$model = JModelLegacy::getInstance('ReservationAsset', 'SolidresModel');
			$asset = $model->getItem($reservation->reservation_asset_id);

			if (!$asset->id)
			{
				return;
			}

			$displayData   = array('asset' => $asset);
			$token         = $this->getToken($reservation);
			$subjectArray  = ['SR_EMAIL_REQUEST_FOR_FEEDBACK_SUBJECT', $asset->name];
			$layoutId      = 'emails.request_customer_feedback_html_inliner';
			$customerEmail = $reservation->customer_email;
			$reservation->set('token', $token);
		}

		if (empty($customerEmail))
		{
			return;
		}

		$cmsLanguage = JFactory::getLanguage();
		$cmsLangTag  = $cmsLanguage->getTag();

		if ($reservation->store())
		{
			try
			{
				if (!empty($reservation->customer_language)
					&& $reservation->customer_language != $cmsLangTag
				)
				{
					$lang = JLanguage::getInstance($reservation->customer_language);

					foreach ($cmsLanguage->getPaths() as $extension => $langPaths)
					{
						foreach ($langPaths as $langFile => $loaded)
						{
							$lang->load($extension, preg_replace('#/language/' . $cmsLangTag . '/.*$#', '', $langFile));
						}
					}

					// Override CMS language
					JFactory::$language = $lang;
				}

				$feedbackURL                = JUri::getInstance()->toString(['scheme', 'host', 'port']) . JRoute::link('site', 'index.php?option=com_solidres&view=feedback&filter_scope=' . (int) $scope . '&feedbackToken=' . $token . '&lang=' . JFactory::getLanguage()->getTag(), false);
				$displayData['reservation'] = $reservation;
				$displayData['feedbackURL'] = $feedbackURL;
				$body                       = SRLayoutHelper::render($layoutId, $displayData);
				$sender                     = array(
					0 => $this->app->get('mailfrom'),
					1 => $this->app->get('fromname'),
				);

				$mail = JFactory::getMailer();
				$mail->setSender($sender)
					->isHtml(true)
					->addRecipient($customerEmail)
					->setSubject(JText::sprintf($subjectArray[0], $subjectArray[1]))
					->setBody($body)
					->Send();

				if (isset($lang))
				{
					JFactory::$language = $cmsLanguage;
				}
			}
			catch (RuntimeException $ex)
			{
				$options = array(
					'format'    => '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}',
					'text_file' => 'solidres_feedback.php',
				);

				JLog::addLogger($options, JLog::ALL, array('feedback'));
				JLog::add($ex->getMessage(), JLog::DEBUG, 'feedback');

				if (isset($lang))
				{
					JFactory::$language = $cmsLanguage;
				}

				return false;
			}
		}

		return true;
	}

	public function onReservationChangeState($context, $pks, $value, $oldValue = 0)
	{
		if ($context == 'com_solidres.experience')
		{
			$this->onSolidresSendRequestFeedback($context === 'com_solidres.experience', $pks[0], false);
		}
	}

	public function onAjaxFeedback()
	{
		$scope    = (int) $this->app->input->getInt('scope');
		$itemName = $this->app->input->getString('itemName', '');
		$buffer   = $this->onSolidresFeedbackLoadForm($scope, $itemName);
		echo json_encode(array($buffer));
		$this->app->close();
	}

	public function onSolidresFeedbackLoadForm($scope = 0, $itemName = '')
	{
		$this->loadLanguage('com_solidres', JPATH_SITE . '/components/com_solidres');
		$this->loadLanguage('com_solidres', JPATH_ADMINISTRATOR . '/components/com_solidres');
		JForm::addFormPath(SRPlugin::getSitePath('feedback') . '/models/forms');
		JForm::addFieldPath(SRPlugin::getAdminPath('feedback') . '/models/fields');
		$form = JForm::getInstance('plg_solidres_feedback.feedback', 'feedbackguest', array('control' => 'jform'));
		$form->setValue('scope', null, $scope);
		$form->setFieldAttribute('feedback_type_value_id', 'scope', $scope);
		$form->setFieldAttribute('feedback_score_rate', 'scope', $scope);
		SRLayoutHelper::addIncludePath(SRPlugin::getSitePath('feedback') . '/layouts');
		$buffer = SRLayoutHelper::render('feedbacks.form', array(
			'form'     => $form,
			'itemName' => $itemName,
			'scope'    => $scope,
		));

		return $buffer;
	}

	private function getToken(JTable $reservation)
	{
		$secret = join(':', $reservation->getProperties()) . ':' . time();

		return sha1($secret);
	}

	public function onContentPrepare($context, &$item, &$params)
	{
		$this->onSolidresFeedbackPrepare($context, $item);
	}

	public function onSolidresFeedbackPrepare($context, $item)
	{
		$allowContexts = [
			'com_solidres.asset',
			'com_solidres.experience',
			'com_solidres.hubFilter',
			'com_solidres.search',
		];

		if (!in_array($context, $allowContexts)
			|| $this->app->isClient('administrator')
			|| empty($item->id)
		)
		{
			return;
		}

		JModelLegacy::addIncludePath($this->_getSitePath() . '/models', 'SolidresModel');
		JModelLegacy::addIncludePath($this->_getAdminPath() . '/models', 'SolidresModel');
		JTable::addIncludePath($this->_getAdminPath() . '/tables');
		JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_solidres/tables');
		$scope          = $context == 'com_solidres.experience' && SRPlugin::isEnabled('experience') ? 1 : 0;
		$modelFeedbacks = JModelLegacy::getInstance('FeedbackList', 'SolidresModel', array('ignore_request' => true));
		$modelFeedbacks->setState('filter.state', 1);
		$modelFeedbacks->setState('filter.scope', $scope);

		if ($scope)
		{
			$modelFeedbacks->setState('filter.experience_id', $item->id);
		}
		else
		{
			$modelFeedbacks->setState('filter.reservation_asset_id', $item->id);
		}

		$modelFeedbacks->setListStart($item->id, $scope);
		$feedbacks = $modelFeedbacks->getItems();
		$scoreList = $modelFeedbacks->getScores($item->id, $scope);
		$countAll  = $modelFeedbacks->getCountCondition($item->id, $scope);

		if ($feedbacks && $scoreList)
		{
			$maxScore = (int) JComponentHelper::getParams('com_solidres')->get('feedback_max_scores', 10);
			$scores   = array();

			foreach ($scoreList as $val)
			{
				if (!isset($scores[$val->field]))
				{
					$scores[$val->field] = array();
				}

				$scores[$val->field][] = (int) $val->score;
			}

			foreach ($scores as $field => $score)
			{
				$scores[$field] = array_sum($score) / count($score);
			}

			$totalScore  = array_sum(array_values($scores)) / count($scores);
			$displayData = array(
				'items'      => $feedbacks,
				'itemId'     => $item->id,
				'scope'      => $scope,
				'start'      => $modelFeedbacks->getState('list.start'),
				'limit'      => $modelFeedbacks->getState('list.limit'),
				'total'      => $modelFeedbacks->getTotal(),
				'scores'     => $scores,
				'maxScore'   => $maxScore,
				'totalScore' => $totalScore,
			);

			if (!$scope)
			{
				$this->__prepareDocument($item, $maxScore, $totalScore, $countAll);
			}

			SRLayoutHelper::addIncludePath(SRPlugin::getSitePath('feedback') . '/layouts');
			$modelFeedbacks->render   = SRLayoutHelper::render('feedbacks.listasset', $displayData);
			$modelFeedbacks->scores   = SRLayoutHelper::render('feedbacks.scores', $displayData);
			$item->feedbacks          = $modelFeedbacks;
			$item->feedbackMaxScore   = $maxScore;
			$item->feedbackTotalScore = $totalScore;
			$item->feedbackCount      = $countAll;
			$item->reviewFields       = $scores;

			$item->reviewCount   = (int) $displayData['total'];
			$item->reviewScores  = round($totalScore, 1);
			$item->reviewComment = $this->displayScore($maxScore, $item->reviewScores);
			$item->reviewWidget  = SRLayoutHelper::render('feedbacks.reviewwidget_style1', array(
				'reviewScores'  => $item->reviewScores,
				'reviewComment' => $item->reviewComment,
				'reviewCount'   => $item->reviewCount,
				'scope'         => $scope,
			));
		}
	}

	protected function __prepareDocument($asset, $bestRating, $rating_value, $ratingCount)
	{
		$document = JFactory::getDocument();

		if ($document->getType() == 'html')
		{
			$jsonLD = array(
				'@context'        => 'http://schema.org/',
				'@type'           => 'Hotel',
				'name'            => htmlspecialchars($asset->name),
				'description'     => htmlspecialchars(strip_tags($asset->description)),
				'aggregateRating' => array(
					'@type'       => 'AggregateRating',
					'ratingValue' => number_format($rating_value, 1),
					'bestRating'  => (int) $bestRating,
					'ratingCount' => (int) $ratingCount,
				)
			);

			if (!empty($asset->media[0]))
			{
				$jsonLD['image'] = SRURI_MEDIA . '/assets/images/system/thumbnails/1/' . $asset->media[0]->value;
			}

			$jsonLD['address'] = $asset->address_1 . ', ' .
				(!empty($asset->city) ? $asset->city . ', ' : '') .
				(!empty($asset->postcode) ? $asset->postcode . ', ' : '') .
				$asset->country_name;

			if (!empty($asset->phone))
			{
				$jsonLD['telephone'] = $asset->phone;
			}

			$document->addScriptDeclaration('
				(function(){
					var script = document.createElement("script");
					script.type = "application/ld+json";
					script.innerHTML = JSON.stringify(' . json_encode($jsonLD) . ');
					document.getElementsByTagName("head")[0].appendChild(script);
				})(document);
			');
		}
	}

	protected function displayScore($maxScore, $value)
	{
		switch ($maxScore)
		{
			case 5:

				if ($value >= 2.5 && $value < 3.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_QUITE_GOOD');
				}

				if ($value >= 3.0 && $value < 4.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_GOOD');
				}

				if ($value >= 4.0 && $value < 4.5)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_VERY_GOOD');
				}

				if ($value >= 4.5)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_EXCELLENT');
				}

			case 100:

				if ($value >= 60.0 && $value < 70.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_QUITE_GOOD');
				}

				if ($value >= 70.0 && $value < 80.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_GOOD');
				}

				if ($value >= 80.0 && $value < 90)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_VERY_GOOD');
				}

				if ($value >= 90.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_EXCELLENT');
				}

			default:

				if ($value >= 6.0 && $value < 7.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_QUITE_GOOD');
				}

				if ($value >= 7.0 && $value < 8.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_GOOD');
				}

				if ($value >= 8.0 && $value < 9.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_VERY_GOOD');
				}

				if ($value >= 9.0)
				{
					return JText::_('SR_FEEDBACK_REVIEW_COMMENT_EXCELLENT');
				}
		}

		return '';
	}

	public static function getReviewRange()
	{
		$maxScore = (int) JComponentHelper::getParams('com_solidres')->get('feedback_max_scores', 10);

		switch ($maxScore)
		{
			case 5:
				$reviewRange = array(
					'4.5-0.0' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_EXCELLENT', '4.5+'),
					'4.0-4.4' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_VERY_GOOD', '4.0+'),
					'3.0-3.9' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_GOOD', '3.0+'),
					'2.5-2.9' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_QUITE_GOOD', '2.5+'),
				);
				break;

			case 100:
				$reviewRange = array(
					'90.0-0.0'  => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_EXCELLENT', '90+'),
					'80.0-89.0' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_VERY_GOOD', '80+'),
					'70.0-79.0' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_GOOD', '70+'),
					'60.0-69.0' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_QUITE_GOOD', '60+'),
				);
				break;

			default:
				$reviewRange = array(
					'9.0-0.0' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_EXCELLENT', '9+'),
					'8.0-8.9' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_VERY_GOOD', '8+'),
					'7.0-7.9' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_GOOD', '7+'),
					'6.0-6.9' => JText::sprintf('SR_FEEDBACK_REVIEW_COMMENT_QUITE_GOOD', '6+'),
				);
				break;
		}

		return $reviewRange;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit