Spade

Mini Shell

Directory:~$ /proc/self/root/home/lmsyaran/public_html/pusher/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ //proc/self/root/home/lmsyaran/public_html/pusher/controllers.tar

index.html000064400000000032151167377640006555
0ustar00<html><body></body></html>thumbnail.php000064400000005447151167605200007255
0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Image\Image;

/**
 * Thumbnail controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerThumbnail extends JControllerLegacy
{
	/**
	 * Create a thumbnail
	 *
	 * @return void
	 *
	 * @throws Exception
	 */
	public function create()
	{
		// @var JApplicationWeb  $application

		$application = JFactory::getApplication();
		$output      = '';
		$size        = $this->input->getCmd('size',
'');
		$image       = $_REQUEST['image'];
		$id          = $this->input->getInt('id', 0);
		$imagePath   = JPATH_ROOT . '/images/com_jea/images/' . $id .
'/' . $image;
		$thumbDir    = JPATH_ROOT . '/images/com_jea/thumb-' . $size;
		$thumbPath   = $thumbDir . '/' . $id . '-' . $image;

		if (empty($image))
		{
			throw new RuntimeException('Empty \'image\'
parameter', 500);
		}

		if (!in_array($size, array('min', 'medium')))
		{
			throw new RuntimeException('The image size is not recognized',
500);
		}

		if (file_exists($thumbPath))
		{
			$output = readfile($thumbPath);
		}
		elseif (file_exists($imagePath))
		{
			if (!Folder::exists($thumbPath))
			{
				Folder::create($thumbDir);
			}

			$params = JComponentHelper::getParams('com_jea');

			if ($size == 'medium')
			{
				$width = $params->get('thumb_medium_width', 400);
				$height = $params->get('thumb_medium_height', 300);
			}
			else
			{
				$width = $params->get('thumb_min_width', 120);
				$height = $params->get('thumb_min_height', 90);
			}

			$quality = (int) $params->get('jpg_quality', 90);
			$cropThumbnails = (bool) $params->get('crop_thumbnails',
0);
			$image = new Image($imagePath);

			if ($cropThumbnails)
			{
				$thumb = $image->resize($width, $height, true,
JImage::SCALE_OUTSIDE);
				$left = $thumb->getWidth() > $width ?
intval(($thumb->getWidth() - $width) / 2) : 0;
				$top = $thumb->getHeight() > $height ?
intval(($thumb->getHeight() - $height) / 2) : 0;
				$thumb->crop($width, $height, $left, $top, false);
			}
			else
			{
				$thumb = $image->resize($width, $height);
			}

			$thumb->toFile($thumbPath, IMAGETYPE_JPEG, array('quality'
=> $quality));

			$output = readfile($thumbPath);
		}
		else
		{
			throw new RuntimeException('The image ' . $image . ' was
not found', 500);
		}

		$application->setHeader('Content-Type',
'image/jpeg', true);
		$application->setHeader('Content-Transfer-Encoding',
'binary', true);
		$application->sendHeaders();

		echo $output;

		$application->close();
	}
}
properties.xml.php000064400000010012151167605200010245 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Properties xml controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerProperties extends JControllerLegacy
{
	/**
	 * Generate KML
	 *
	 * @return void
	 */
	public function kml()
	{
		$app = JFactory::getApplication();
		$Itemid = $app->input->getInt('Itemid', 0);

		$model = $this->getModel('Properties', 'JeaModel',
array('ignore_request' => true));

		$filters = array_keys($model->getFilters());

		// Set the Model state
		foreach ($filters as $filter)
		{
			$model->setState('filter.' . $filter,
$app->input->get('filter_' . $filter, null,
'default'));
		}

		// Deactivate pagination
		$model->setState('list.start', 0);
		$model->setState('list.limit', 0);

		// Set language state
		$model->setState('filter.language',
$app->getLanguageFilter());

		$items = $model->getItems();

		$doc = new DomDocument;

		$kmlNode = $doc->createElement('kml');
		$kmlNode->setAttribute('xmlns',
'http://www.opengis.net/kml/2.2');
		$documentNode = $doc->createElement('Document');

		foreach ($items as $row)
		{
			if (abs($row->latitude) > 0 && abs($row->longitude)
> 0)
			{
				$placemarkNode = $doc->createElement('Placemark');
				$nameNode = $doc->createElement('name');
				$descrNode = $doc->createElement('description');
				$pointNode = $doc->createElement('Point');

				/*
																 *
Http://code.google.com/intl/fr/apis/kml/documentation/kml_tut.html#placemarks
				 * (longitude, latitude, and optional altitude)
				 */

				$coordinates = $row->longitude . ',' . $row->latitude .
',0.000000';
				$coordsNode = $doc->createElement('coordinates',
$coordinates);

				$row->slug = $row->alias ? ($row->id . ':' .
$row->alias) : $row->id;

				$url =
JRoute::_('index.php?option=com_jea&view=property&id=' .
$row->slug . '&Itemid=' . $Itemid);

				if (empty($row->title))
				{
					$name =
ucfirst(JText::sprintf('COM_JEA_PROPERTY_TYPE_IN_TOWN',
$row->type, $row->town));
				}
				else
				{
					$name = $row->title;
				}

				$description = '<div
style="clear:both"></div>';

				$images = json_decode($row->images);
				$image = null;

				if (! empty($images) && is_array($images))
				{
					$image = array_shift($images);
					$imagePath = JPATH_ROOT . '/images/com_jea';
					$imageUrl = '';

					if (file_exists($imagePath . '/thumb-min/' . $row->id .
'-' . $image->name))
					{
						// If the thumbnail already exists, display it directly
						$baseURL = JURI::root(true);
						$imageUrl = $baseURL . '/images/com_jea/thumb-min/' .
$row->id . '-' . $image->name;
					}
					elseif (file_exists($imagePath . '/images/' . $row->id .
'/' . $image->name))
					{
						// If the thumbnail doesn't exist, generate it and output it on
the fly
						$url =
'index.php?option=com_jea&task=thumbnail.create&size=min&id='
. $row->id . '&image=' . $image->name;
						$imageUrl = JRoute::_($url);
					}

					$description .= '<img src="' . $imageUrl .
'" alt="' . $image->name . '.jpg"
style="float:left;margin-right:10px" />';
				}

				$description .= substr(strip_tags($row->description), 0, 255)
							. ' ...<p><a href="' . $url .
'">' . JText::_('COM_JEA_DETAIL')
							. '</a></p><div
style="clear:both"></div>';

				$nameCDATA = $doc->createCDATASection($name);
				$descriptionCDATA = $doc->createCDATASection($description);
				$nameNode->appendChild($nameCDATA);
				$descrNode->appendChild($descriptionCDATA);
				$pointNode->appendChild($coordsNode);

				$placemarkNode->appendChild($nameNode);
				$placemarkNode->appendChild($descrNode);
				$placemarkNode->appendChild($pointNode);

				$documentNode->appendChild($placemarkNode);
			}
		}

		$kmlNode->appendChild($documentNode);
		$doc->appendChild($kmlNode);

		echo $doc->saveXML();
	}
}
properties.json.php000064400000007352151167605200010433 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Properties controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerProperties extends JControllerLegacy
{
	/**
	 * Search action
	 *
	 * @return void
	 */
	public function search()
	{
		$app = JFactory::getApplication();
		$model = $this->getModel();
		$filters = array_keys($model->getFilters());

		// Set the Model state
		foreach ($filters as $filter)
		{
			$model->setState('filter.' . $filter,
$app->input->get('filter_' . $filter, null,
'default'));
		}

		// Deactivate pagination
		$model->setState('list.start', 0);
		$model->setState('list.limit', 0);

		// Set language state
		$model->setState('filter.language',
$app->getLanguageFilter());

		$items = $model->getItems();

		$result = array();
		$result['total'] = count($items);

		if (JDEBUG)
		{
			$result['query'] = (string) JFactory::getDbo()->getQuery();
		}

		$result['types'] = array();
		$result['towns'] = array();
		$result['departments'] = array();
		$result['areas'] = array();

		$temp = array();
		$temp['types'] = array();
		$temp['towns'] = array();
		$temp['departments'] = array();
		$temp['areas'] = array();

		foreach ($items as $row)
		{
			if ($row->type_id && !
isset($temp['types'][$row->type_id]))
			{
				$result['types'][] = array('value' =>
$row->type_id, 'text' => $row->type);
				$temp['types'][$row->type_id] = true;
			}

			if ($row->town_id && !
isset($temp['towns'][$row->town_id]))
			{
				$result['towns'][] = array('value' =>
$row->town_id, 'text' => $row->town);
				$temp['towns'][$row->town_id] = true;
			}

			if ($row->department_id && !
isset($temp['departments'][$row->department_id]))
			{
				$result['departments'][] = array('value' =>
$row->department_id, 'text' => $row->department);
				$temp['departments'][$row->department_id] = true;
			}

			if ($row->area_id && !
isset($temp['areas'][$row->area_id]))
			{
				$result['areas'][] = array('value' =>
$row->area_id, 'text' => $row->area);
				$temp['areas'][$row->area_id] = true;
			}
		}

		// TODO: User preference : Alpha ou order

		if (isset($result['types']))
		{
			usort($result['types'],
array('JeaControllerProperties', '_ajaxAlphaSort'));
		}

		if (isset($result['departments']))
		{
			usort($result['departments'],
array('JeaControllerProperties', '_ajaxAlphaSort'));
		}

		if (isset($result['towns']))
		{
			usort($result['towns'],
array('JeaControllerProperties', '_ajaxAlphaSort'));
		}

		if (isset($result['areas']))
		{
			usort($result['areas'],
array('JeaControllerProperties', '_ajaxAlphaSort'));
		}

		echo json_encode($result);
	}

	/**
	 * Sort method for usort
	 *
	 * @param   array  $arg1  Sort data 1
	 * @param   array  $arg2  Sort data 2
	 *
	 * @return number
	 */
	public function _ajaxAlphaSort(&$arg1, &$arg2)
	{
		$val1 = strtolower($arg1['text']);
		$val2 = strtolower($arg2['text']);

		return strnatcmp($val1, $val2);
	}

	/**
	 * Overrides parent method.
	 *
	 * @param   string  $name    The model name. Optional.
	 * @param   string  $prefix  The class prefix. Optional.
	 * @param   array   $config  Configuration array for model. Optional.
	 *
	 * @return  JeaModelProperties|boolean  Model object on success; otherwise
false on failure.
	 *
	 * @see JControllerLegacy::getModel()
	 */
	public function getModel($name = 'Properties', $prefix =
'JeaModel', $config = array('ignore_request' =>
true))
	{
		$model = parent::getModel($name, $prefix, $config);

		return $model;
	}
}
features.json.php000064400000000753151167605200010053 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

require_once JPATH_COMPONENT_ADMINISTRATOR .
'/models/features.php';
require_once JPATH_COMPONENT_ADMINISTRATOR .
'/controllers/features.json.php';
properties.php000064400000001463151167605200007460 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Properties controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerProperties extends JControllerLegacy
{
	/**
	 * The default view for the display method.
	 *
	 * @var   string
	 */
	protected $default_view = 'properties';

	/**
	 * Search action
	 *
	 * @return void
	 */
	public function search()
	{
		$app = JFactory::getApplication();
		$app->input->set('layout', 'default');
		$this->display();
	}
}
default.php000064400000005370151167605200006711 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Default controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerDefault extends JControllerLegacy
{
	/**
	 * The default view for the display method.
	 *
	 * @var   string
	 */
	protected $default_view = 'properties';

	/**
	 * Overrides parent method.
	 *
	 * @param   boolean  $cachable   If true, the view output will be cached
	 * @param   array    $urlparams  An array of safe URL parameters and their
variable types, for valid values see {@link JFilterInput::clean()}.
	 *
	 * @return  JControllerLegacy.
	 *
	 * @since   3.0
	 */
	public function display($cachable = false, $urlparams = array())
	{
		$layout =
JFactory::getApplication()->input->get('layout');

		if ($layout == 'manage' || $layout == 'edit')
		{
			$user = JFactory::getUser();
			$uri = JUri::getInstance();
			$return = base64_encode($uri);
			$access = false;

			if ($layout == 'manage')
			{
				$access = $user->authorise('core.edit.own',
'com_jea');
			}
			elseif ($layout == 'edit')
			{
				$params = JFactory::getApplication()->getParams();

				if ($params->get('login_behavior', 'before') ==
'before')
				{
					$access = $user->authorise('core.create',
'com_jea');
				}
				else
				{
					// If the login_behavior is set after save,
					// so all users can see the property form.
					$access = true;
				}
			}

			if (!$access)
			{
				if ($user->id)
				{
					$this->setMessage(JText::_('JERROR_ALERTNOAUTHOR'),
'warning');
				}
				else
				{
					$this->setMessage(JText::_('JGLOBAL_YOU_MUST_LOGIN_FIRST'));
				}

				return
$this->setRedirect(JRoute::_('index.php?option=com_users&view=login&return='
. $return, false));
			}
		}

		return parent::display($cachable, $urlparams);
	}

	/**
	 * Send contact form action
	 *
	 * @return JControllerLegacy
	 */
	public function sendContactForm()
	{
		$model = $this->getModel('Property', 'JeaModel');
		$returnURL = $model->getState('contact.propertyURL');

		// Check for request forgeries
		if (!JSession::checkToken())
		{
			return $this->setRedirect($returnURL,
JText::_('JINVALID_TOKEN'), 'warning');
		}

		if (!$model->sendContactForm())
		{
			$errors = $model->getErrors();
			$msg = '';

			foreach ($errors as $error)
			{
				$msg .= $error . "\n";
			}

			return $this->setRedirect($returnURL, $msg, 'warning');
		}

		$msg = JText::_('COM_JEA_CONTACT_FORM_SUCCESSFULLY_SENT');

		return $this->setRedirect($returnURL, $msg);
	}
}
property.php000064400000013252151167605200007147 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Property controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerProperty extends JControllerForm
{
	/**
	 * The URL view item variable.
	 *
	 * @var string
	 */
	protected $view_item = 'form';

	/**
	 * The URL view list variable.
	 *
	 * @var string
	 */
	protected $view_list = 'properties';

	/**
	 * Overrides parent method.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @see JControllerForm::allowAdd()
	 */
	protected function allowAdd($data = array())
	{
		$user = JFactory::getUser();

		if (!$user->authorise('core.create', 'com_jea'))
		{
			$app = JFactory::getApplication();
			$uri = JFactory::getURI();
			$return = base64_encode($uri);

			if ($user->get('id'))
			{
				$this->setMessage(JText::_('JERROR_ALERTNOAUTHOR'),
'warning');
			}
			else
			{
				$this->setMessage(JText::_('JGLOBAL_YOU_MUST_LOGIN_FIRST'));
			}

			// Save the data in the session.
			$app->setUserState('com_jea.edit.property.data', $data);
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login&return='
. $return, false));

			return $this->redirect();
		}

		return true;
	}

	/**
	 * Overrides parent method.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @see JControllerForm::allowEdit()
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// Initialise variables.
		$recordId = (int) isset($data[$key]) ? $data[$key] : 0;
		$user = JFactory::getUser();
		$asset = 'com_jea.property.' . $recordId;

		// Check general edit permission first.
		if ($user->authorise('core.edit', $asset))
		{
			return true;
		}

		// Fallback on edit.own. First test if the permission is available.
		if ($user->authorise('core.edit.own', $asset))
		{
			// Now test the owner is the user.
			$ownerId = (int) isset($data['created_by']) ?
$data['created_by'] : 0;

			if (empty($ownerId) && $recordId)
			{
				// Need to do a lookup from the model.
				$record = $this->getModel()->getItem($recordId);

				if (empty($record))
				{
					return false;
				}

				$ownerId = $record->created_by;
			}

			// If the owner matches 'me' then do the test.
			if ($ownerId == $user->id)
			{
				return true;
			}
		}

		// Since there is no asset tracking, revert to the component permissions.
		return parent::allowEdit($data, $key);
	}

	/**
	 * Unpublish a property
	 *
	 * @return void
	 */
	public function unpublish()
	{
		$this->publish(0);
	}

	/**
	 * Publish/Unpublish a property
	 *
	 * @param   integer  $action  0 -> unpublish, 1 -> publish
	 *
	 * @return  void
	 */
	public function publish($action = 1)
	{
		$id = JFactory::getApplication()->input->get('id', 0,
'int');
		$this->getModel()->publish($id, $action);
		$this->setRedirect(JRoute::_('index.php?option=com_jea&view=properties'
. $this->getRedirectToListAppend(), false));
	}

	/**
	 * Delete a property
	 *
	 * @return void
	 */
	public function delete()
	{
		$id = JFactory::getApplication()->input->get('id', 0,
'int');

		if ($this->getModel()->delete($id))
		{
			$this->setMessage(JText::_('COM_JEA_SUCCESSFULLY_REMOVED_PROPERTY'));
		}

		$this->setRedirect(JRoute::_('index.php?option=com_jea&view=properties'
. $this->getRedirectToListAppend(), false));
	}

	/**
	 * Overrides parent method.
	 *
	 * @param   string  $name    The model name. Optional.
	 * @param   string  $prefix  The class prefix. Optional.
	 * @param   array   $config  Configuration array for model. Optional.
	 *
	 * @return  JeaModelForm|boolean  Model object on success; otherwise false
on failure.
	 *
	 * @see JControllerLegacy::getModel()
	 */
	public function getModel($name = 'form', $prefix = '',
$config = array('ignore_request' => true))
	{
		$model = parent::getModel($name, $prefix, $config);

		return $model;
	}

	/**
	 *  Overrides parent method.
	 *
	 * @param   integer  $recordId  The primary key id for the item.
	 * @param   string   $urlVar    The name of the URL variable for the id.
	 *
	 * @return  string  The arguments to append to the redirect URL.
	 *
	 * @see JControllerForm::getRedirectToItemAppend()
	 */
	protected function getRedirectToItemAppend($recordId = null, $urlVar =
'id')
	{
		$tmpl = $this->input->getCmd('tmpl');
		$append = '&layout=edit';

		// Setup redirect info.
		if ($tmpl)
		{
			$append .= '&tmpl=' . $tmpl;
		}

		if ($recordId)
		{
			$append .= '&' . $urlVar . '=' . $recordId;
		}

		return $append;
	}

	/**
	 * Overrides parent method.
	 *
	 * @return  string  The arguments to append to the redirect URL.
	 *
	 * @see JControllerForm::getRedirectToListAppend()
	 */
	protected function getRedirectToListAppend()
	{
		$tmpl = $this->input->getCmd('tmpl');
		$append = '&layout=manage';

		// Try to redirect to the manage menu item if found
		$app = JFactory::getApplication();
		$menu = $app->getMenu();
		$activeItem = $menu->getActive();

		if (isset($activeItem->query['layout']) &&
$activeItem->query['layout'] != 'manage')
		{
			$items = $menu->getItems('component', 'com_jea');

			foreach ($items as $item)
			{
				$layout = isset($item->query['layout']) ?
$item->query['layout'] : '';

				if ($layout == 'manage')
				{
					$append .= '&Itemid=' . $item->id;
				}
			}
		}

		// Setup redirect info.
		if ($tmpl)
		{
			$append .= '&tmpl=' . $tmpl;
		}

		return $append;
	}
}
default.feed.php000064400000001177151167605200007614 0ustar00<?php
/**
 * This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 * @copyright   Copyright (C) 2008 - 2020 PHILIP Sylvain. All rights
reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Default feed controller class.
 *
 * @package     Joomla.Site
 * @subpackage  com_jea
 *
 * @since       2.0
 */
class JeaControllerDefault extends JControllerLegacy
{
	/**
	 * The default view for the display method.
	 *
	 * @var    string
	 */
	protected $default_view = 'properties';
}
profile.php000064400000013641151171032460006722 0ustar00<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_users
 *
 * @copyright   (C) 2009 Open Source Matters, Inc.
<https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JLoader::register('UsersController', JPATH_COMPONENT .
'/controller.php');

/**
 * Profile controller class for Users.
 *
 * @since  1.6
 */
class UsersControllerProfile extends UsersController
{
	/**
	 * Method to check out a user for editing and redirect to the edit form.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	public function edit()
	{
		$app         = JFactory::getApplication();
		$user        = JFactory::getUser();
		$loginUserId = (int) $user->get('id');

		// Get the previous user id (if any) and the current user id.
		$previousId = (int)
$app->getUserState('com_users.edit.profile.id');
		$userId     = $this->input->getInt('user_id');

		// Check if the user is trying to edit another users profile.
		if ($userId != $loginUserId)
		{
			$app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'),
'error');
			$app->setHeader('status', 403, true);

			return false;
		}

		$cookieLogin = $user->get('cookieLogin');

		// Check if the user logged in with a cookie
		if (!empty($cookieLogin))
		{
			// If so, the user must login to edit the password and other data.
			$app->enqueueMessage(JText::_('JGLOBAL_REMEMBER_MUST_LOGIN'),
'message');
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false));

			return false;
		}

		// Set the user id for the user to edit in the session.
		$app->setUserState('com_users.edit.profile.id', $userId);

		// Get the model.
		$model = $this->getModel('Profile', 'UsersModel');

		// Check out the user.
		if ($userId)
		{
			$model->checkout($userId);
		}

		// Check in the previous user.
		if ($previousId)
		{
			$model->checkin($previousId);
		}

		// Redirect to the edit screen.
		$this->setRedirect(JRoute::_('index.php?option=com_users&view=profile&layout=edit',
false));

		return true;
	}

	/**
	 * Method to save a user's profile data.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	public function save()
	{
		// Check for request forgeries.
		$this->checkToken();

		$app    = JFactory::getApplication();
		$model  = $this->getModel('Profile',
'UsersModel');
		$user   = JFactory::getUser();
		$userId = (int) $user->get('id');

		// Get the user data.
		$requestData = $app->input->post->get('jform',
array(), 'array');

		// Force the ID to this user.
		$requestData['id'] = $userId;

		// Validate the posted data.
		$form = $model->getForm();

		if (!$form)
		{
			JError::raiseError(500, $model->getError());

			return false;
		}

		// Send an object which can be modified through the plugin event
		$objData = (object) $requestData;
		$app->triggerEvent(
			'onContentNormaliseRequestData',
			array('com_users.user', $objData, $form)
		);
		$requestData = (array) $objData;

		// Validate the posted data.
		$data = $model->validate($form, $requestData);

		// Check for errors.
		if ($data === false)
		{
			// Get the validation messages.
			$errors = $model->getErrors();

			// Push up to three validation messages out to the user.
			for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++)
			{
				if ($errors[$i] instanceof Exception)
				{
					$app->enqueueMessage($errors[$i]->getMessage(),
'warning');
				}
				else
				{
					$app->enqueueMessage($errors[$i], 'warning');
				}
			}

			// Unset the passwords.
			unset($requestData['password1'],
$requestData['password2']);

			// Save the data in the session.
			$app->setUserState('com_users.edit.profile.data',
$requestData);

			// Redirect back to the edit screen.
			$userId = (int)
$app->getUserState('com_users.edit.profile.id');
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=profile&layout=edit&user_id='
. $userId, false));

			return false;
		}

		// Attempt to save the data.
		$return = $model->save($data);

		// Check for errors.
		if ($return === false)
		{
			// Save the data in the session.
			$app->setUserState('com_users.edit.profile.data', $data);

			// Redirect back to the edit screen.
			$userId = (int)
$app->getUserState('com_users.edit.profile.id');
			$this->setMessage(JText::sprintf('COM_USERS_PROFILE_SAVE_FAILED',
$model->getError()), 'warning');
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=profile&layout=edit&user_id='
. $userId, false));

			return false;
		}

		// Redirect the user and adjust session state based on the chosen task.
		switch ($this->getTask())
		{
			case 'apply':
				// Check out the profile.
				$app->setUserState('com_users.edit.profile.id', $return);
				$model->checkout($return);

				// Redirect back to the edit screen.
				$this->setMessage(JText::_('COM_USERS_PROFILE_SAVE_SUCCESS'));

				$redirect =
$app->getUserState('com_users.edit.profile.redirect');

				// Don't redirect to an external URL.
				if (!JUri::isInternal($redirect))
				{
					$redirect = null;
				}

				if (!$redirect)
				{
					$redirect =
'index.php?option=com_users&view=profile&layout=edit&hidemainmenu=1';
				}

				$this->setRedirect(JRoute::_($redirect, false));
				break;

			default:
				// Check in the profile.
				$userId = (int)
$app->getUserState('com_users.edit.profile.id');

				if ($userId)
				{
					$model->checkin($userId);
				}

				// Clear the profile id from the session.
				$app->setUserState('com_users.edit.profile.id', null);

				$redirect =
$app->getUserState('com_users.edit.profile.redirect');

				// Don't redirect to an external URL.
				if (!JUri::isInternal($redirect))
				{
					$redirect = null;
				}

				if (!$redirect)
				{
					$redirect =
'index.php?option=com_users&view=profile&user_id=' .
$return;
				}

				// Redirect to the list screen.
				$this->setMessage(JText::_('COM_USERS_PROFILE_SAVE_SUCCESS'));
				$this->setRedirect(JRoute::_($redirect, false));
				break;
		}

		// Flush the data from the session.
		$app->setUserState('com_users.edit.profile.data', null);
	}
}
registration.php000064400000015420151171032460007771 0ustar00<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_users
 *
 * @copyright   (C) 2009 Open Source Matters, Inc.
<https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JLoader::register('UsersController', JPATH_COMPONENT .
'/controller.php');

/**
 * Registration controller class for Users.
 *
 * @since  1.6
 */
class UsersControllerRegistration extends UsersController
{
	/**
	 * Method to activate a user.
	 *
	 * @return  boolean  True on success, false on failure.
	 *
	 * @since   1.6
	 */
	public function activate()
	{
		$user  	 = JFactory::getUser();
		$input 	 = JFactory::getApplication()->input;
		$uParams = JComponentHelper::getParams('com_users');

		// Check for admin activation. Don't allow non-super-admin to delete
a super admin
		if ($uParams->get('useractivation') != 2 &&
$user->get('id'))
		{
			$this->setRedirect('index.php');

			return true;
		}

		// If user registration or account activation is disabled, throw a 403.
		if ($uParams->get('useractivation') == 0 ||
$uParams->get('allowUserRegistration') == 0)
		{
			JError::raiseError(403,
JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'));

			return false;
		}

		$model = $this->getModel('Registration',
'UsersModel');
		$token = $input->getAlnum('token');

		// Check that the token is in a valid format.
		if ($token === null || strlen($token) !== 32)
		{
			JError::raiseError(403, JText::_('JINVALID_TOKEN'));

			return false;
		}

		// Get the User ID
		$userIdToActivate = $model->getUserIdFromToken($token);

		if (!$userIdToActivate)
		{
			$this->setMessage(JText::_('COM_USERS_ACTIVATION_TOKEN_NOT_FOUND'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false));

			return false;
		}

		// Get the user we want to activate
		$userToActivate = JFactory::getUser($userIdToActivate);

		// Admin activation is on and admin is activating the account
		if (($uParams->get('useractivation') == 2) &&
$userToActivate->getParam('activate', 0))
		{
			// If a user admin is not logged in, redirect them to the login page
with an error message
			if (!$user->authorise('core.create', 'com_users')
|| !$user->authorise('core.manage', 'com_users'))
			{
				$activationUrl =
'index.php?option=com_users&task=registration.activate&token='
. $token;
				$loginUrl      =
'index.php?option=com_users&view=login&return=' .
base64_encode($activationUrl);

				// In case we still run into this in the second step the user does not
have the right permissions
				$message =
JText::_('COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION_PERMISSIONS');

				// When we are not logged in we should login
				if ($user->guest)
				{
					$message =
JText::_('COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION');
				}

				$this->setMessage($message);
				$this->setRedirect(JRoute::_($loginUrl, false));

				return false;
			}
		}

		// Attempt to activate the user.
		$return = $model->activate($token);

		// Check for errors.
		if ($return === false)
		{
			// Redirect back to the home page.
			$this->setMessage(JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED',
$model->getError()), 'error');
			$this->setRedirect('index.php');

			return false;
		}

		$useractivation = $uParams->get('useractivation');

		// Redirect to the login screen.
		if ($useractivation == 0)
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_SAVE_SUCCESS'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false));
		}
		elseif ($useractivation == 1)
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_ACTIVATE_SUCCESS'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false));
		}
		elseif ($return->getParam('activate'))
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_VERIFY_SUCCESS'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete',
false));
		}
		else
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete',
false));
		}

		return true;
	}

	/**
	 * Method to register a user.
	 *
	 * @return  boolean  True on success, false on failure.
	 *
	 * @since   1.6
	 */
	public function register()
	{
		// Check for request forgeries.
		$this->checkToken();

		// If registration is disabled - Redirect to login page.
		if
(JComponentHelper::getParams('com_users')->get('allowUserRegistration')
== 0)
		{
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false));

			return false;
		}

		$app   = JFactory::getApplication();
		$model = $this->getModel('Registration',
'UsersModel');

		// Get the user data.
		$requestData = $this->input->post->get('jform',
array(), 'array');

		// Validate the posted data.
		$form = $model->getForm();

		if (!$form)
		{
			JError::raiseError(500, $model->getError());

			return false;
		}

		$data = $model->validate($form, $requestData);

		// Check for validation errors.
		if ($data === false)
		{
			// Get the validation messages.
			$errors = $model->getErrors();

			// Push up to three validation messages out to the user.
			for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++)
			{
				if ($errors[$i] instanceof Exception)
				{
					$app->enqueueMessage($errors[$i]->getMessage(),
'error');
				}
				else
				{
					$app->enqueueMessage($errors[$i], 'error');
				}
			}

			// Save the data in the session.
			$app->setUserState('com_users.registration.data',
$requestData);

			// Redirect back to the registration screen.
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=registration',
false));

			return false;
		}

		// Attempt to save the data.
		$return = $model->register($data);

		// Check for errors.
		if ($return === false)
		{
			// Save the data in the session.
			$app->setUserState('com_users.registration.data', $data);

			// Redirect back to the edit screen.
			$this->setMessage($model->getError(), 'error');
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=registration',
false));

			return false;
		}

		// Flush the data from the session.
		$app->setUserState('com_users.registration.data', null);

		// Redirect to the profile screen.
		if ($return === 'adminactivate')
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_COMPLETE_VERIFY'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete',
false));
		}
		elseif ($return === 'useractivate')
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_COMPLETE_ACTIVATE'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=registration&layout=complete',
false));
		}
		else
		{
			$this->setMessage(JText::_('COM_USERS_REGISTRATION_SAVE_SUCCESS'));
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false));
		}

		return true;
	}
}
remind.php000064400000002621151171032460006534 0ustar00<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_users
 *
 * @copyright   (C) 2010 Open Source Matters, Inc.
<https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JLoader::register('UsersController', JPATH_COMPONENT .
'/controller.php');

/**
 * Reset controller class for Users.
 *
 * @since  1.6
 */
class UsersControllerRemind extends UsersController
{
	/**
	 * Method to request a username reminder.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	public function remind()
	{
		// Check the request token.
		$this->checkToken('post');

		$model = $this->getModel('Remind', 'UsersModel');
		$data  = $this->input->post->get('jform', array(),
'array');

		// Submit the password reset request.
		$return	= $model->processRemindRequest($data);

		// Check for a hard error.
		if ($return == false && JDEBUG)
		{
			// The request failed.
			// Go back to the request form.
			$message = JText::sprintf('COM_USERS_REMIND_REQUEST_FAILED',
$model->getError());
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=remind',
false), $message, 'notice');

			return false;
		}

		// To not expose if the user exists or not we send a generic message.
		$message = JText::_('COM_USERS_REMIND_REQUEST');
		$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false), $message, 'notice');

		return true;
	}
}
reset.php000064400000011203151171032460006374 0ustar00<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_users
 *
 * @copyright   (C) 2009 Open Source Matters, Inc.
<https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JLoader::register('UsersController', JPATH_COMPONENT .
'/controller.php');

/**
 * Reset controller class for Users.
 *
 * @since  1.6
 */
class UsersControllerReset extends UsersController
{
	/**
	 * Method to request a password reset.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	public function request()
	{
		// Check the request token.
		$this->checkToken('post');

		$app   = JFactory::getApplication();
		$model = $this->getModel('Reset', 'UsersModel');
		$data  = $this->input->post->get('jform', array(),
'array');

		// Submit the password reset request.
		$return	= $model->processResetRequest($data);

		// Check for a hard error.
		if ($return instanceof Exception && JDEBUG)
		{
			// Get the error message to display.
			if ($app->get('error_reporting'))
			{
				$message = $return->getMessage();
			}
			else
			{
				$message = JText::_('COM_USERS_RESET_REQUEST_ERROR');
			}

			// Go back to the request form.
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset',
false), $message, 'error');

			return false;
		}
		elseif ($return === false && JDEBUG)
		{
			// The request failed.
			// Go back to the request form.
			$message = JText::sprintf('COM_USERS_RESET_REQUEST_FAILED',
$model->getError());
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset',
false), $message, 'notice');

			return false;
		}

		// To not expose if the user exists or not we send a generic message.
		$message = JText::_('COM_USERS_RESET_REQUEST');
		$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset&layout=confirm',
false), $message, 'notice');

		return true;
	}

	/**
	 * Method to confirm the password request.
	 *
	 * @return  boolean
	 *
	 * @access	public
	 * @since   1.6
	 */
	public function confirm()
	{
		// Check the request token.
		$this->checkToken('request');

		$app   = JFactory::getApplication();
		$model = $this->getModel('Reset', 'UsersModel');
		$data  = $this->input->get('jform', array(),
'array');

		// Confirm the password reset request.
		$return	= $model->processResetConfirm($data);

		// Check for a hard error.
		if ($return instanceof Exception)
		{
			// Get the error message to display.
			if ($app->get('error_reporting'))
			{
				$message = $return->getMessage();
			}
			else
			{
				$message = JText::_('COM_USERS_RESET_CONFIRM_ERROR');
			}

			// Go back to the confirm form.
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset&layout=confirm',
false), $message, 'error');

			return false;
		}
		elseif ($return === false)
		{
			// Confirm failed.
			// Go back to the confirm form.
			$message = JText::sprintf('COM_USERS_RESET_CONFIRM_FAILED',
$model->getError());
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset&layout=confirm',
false), $message, 'notice');

			return false;
		}
		else
		{
			// Confirm succeeded.
			// Proceed to step three.
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset&layout=complete',
false));

			return true;
		}
	}

	/**
	 * Method to complete the password reset process.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	public function complete()
	{
		// Check for request forgeries
		$this->checkToken('post');

		$app   = JFactory::getApplication();
		$model = $this->getModel('Reset', 'UsersModel');
		$data  = $this->input->post->get('jform', array(),
'array');

		// Complete the password reset request.
		$return	= $model->processResetComplete($data);

		// Check for a hard error.
		if ($return instanceof Exception)
		{
			// Get the error message to display.
			if ($app->get('error_reporting'))
			{
				$message = $return->getMessage();
			}
			else
			{
				$message = JText::_('COM_USERS_RESET_COMPLETE_ERROR');
			}

			// Go back to the complete form.
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset&layout=complete',
false), $message, 'error');

			return false;
		}
		elseif ($return === false)
		{
			// Complete failed.
			// Go back to the complete form.
			$message = JText::sprintf('COM_USERS_RESET_COMPLETE_FAILED',
$model->getError());
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=reset&layout=complete',
false), $message, 'notice');

			return false;
		}
		else
		{
			// Complete succeeded.
			// Proceed to the login form.
			$message = JText::_('COM_USERS_RESET_COMPLETE_SUCCESS');
			$this->setRedirect(JRoute::_('index.php?option=com_users&view=login',
false), $message);

			return true;
		}
	}
}
user.php000064400000004210151171032460006230 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 userController extends hikashopController{
	var $delete = array();
	var $modify = array();
	var $modify_views = array();
	var $add = array();
	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		if(!$skip){
			$this->registerDefaultTask('cpanel');
		}
		$this->display[]='cpanel';
		$this->display[]='form';
		$this->display[]='register';
		$this->display[]='downloads';
	}

	function register(){
		if(empty($_REQUEST['data'])){
			return $this->form();
		}
		$class = hikashop_get('class.user');
		$status = $class->register($this,'user');
		if($status){
			$app = JFactory::getApplication();
			$app->enqueueMessage(JText::sprintf('THANK_YOU_FOR_REGISTERING',HIKASHOP_LIVE));
			JRequest::setVar( 'layout', 'after_register'  );
			return parent::display();
		}
		$this->form();
	}

	function cpanel(){
		$user = JFactory::getUser();
		if ($user->guest) {
			$app=JFactory::getApplication();
			$app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST'));
			global $Itemid;
			$url = '';
			if(!empty($Itemid)){
				$url='&Itemid='.$Itemid;
			}
			if(!HIKASHOP_J16){
				$url = 'index.php?option=com_user&view=login'.$url;
			}else{
				$url = 'index.php?option=com_users&view=login'.$url;
			}
			$app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('',false))),false));
			return false;
		}
		JRequest::setVar( 'layout', 'cpanel'  );
		return parent::display();
	}

	function form(){
		$user = JFactory::getUser();
		if ($user->guest) {
			JRequest::setVar( 'layout', 'form'  );
			return $this->display();
		}else{
			$app=JFactory::getApplication();
			$app->redirect(hikashop_completeLink('user&task=cpanel',false,true));
			return false;
		}
	}

	function downloads(){
		JRequest::setVar( 'layout', 'downloads'  );
		return parent::display();
	}

}
ajax.json.php000064400000022366151173560170007167 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		ajax.json.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Ajax Controller
 */
class ReservationControllerAjax extends JControllerLegacy
{
	public function __construct($config)
	{
		parent::__construct($config);
		// make sure all json stuff are set
		JFactory::getDocument()->setMimeEncoding( 'application/json'
);
		JResponse::setHeader('Content-Disposition','attachment;filename="getajax.json"');
		JResponse::setHeader("Access-Control-Allow-Origin",
"*");
		// load the tasks 
		$this->registerTask('saveChat', 'ajax');
		$this->registerTask('conversation', 'ajax');
		$this->registerTask('ajaxReadMessage', 'ajax');
		$this->registerTask('deleteChat', 'ajax');
		$this->registerTask('goToClass', 'ajax');
		$this->registerTask('getCatLevelOne', 'ajax');
		$this->registerTask('getCatLevelTwo', 'ajax');
	}

	public function ajax()
	{
		$user 		= JFactory::getUser();
		$jinput 	= JFactory::getApplication()->input;
		// Check Token!
		$token 		= JSession::getFormToken();
		$call_token	= $jinput->get('token', 0, 'ALNUM');
		if($jinput->get($token, 0, 'ALNUM') || $token ===
$call_token)
		{
			$task = $this->getTask();
			switch($task)
			{
				case 'saveChat':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$messageValue = $jinput->get('message', NULL,
'RAW');
						$fromValue = $jinput->get('from', NULL,
'STRING');
						$toValue = $jinput->get('to', NULL, 'STRING');
						$seidValue = $jinput->get('seid', NULL,
'INT');
						$pidValue = $jinput->get('pid', NULL, 'INT');
						$replyidValue = $jinput->get('replyid', 0,
'INT');
						$pmidValue = $jinput->get('pmid', 0, 'INT');
						if($messageValue && $user->id != 0 && $fromValue
&& $toValue && $seidValue && $pidValue)
						{
							$result =
$this->getModel('ajax')->saveChat($messageValue,
$fromValue, $toValue, $seidValue, $pidValue, $replyidValue, $pmidValue);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
				case 'conversation':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$user1Value = $jinput->get('user1', NULL,
'INT');
						$user2Value = $jinput->get('user2', NULL,
'INT');
						$seidValue = $jinput->get('seid', NULL,
'INT');
						$pidValue = $jinput->get('pid', NULL, 'INT');
						if($user1Value && $user->id != 0 && $user2Value
&& $seidValue && $pidValue)
						{
							$result =
$this->getModel('ajax')->conversation($user1Value,
$user2Value, $seidValue, $pidValue);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
				case 'ajaxReadMessage':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$midValue = $jinput->get('mid', NULL, 'INT');
						$seidValue = $jinput->get('seid', NULL,
'INT');
						if($midValue && $user->id != 0 && $seidValue)
						{
							$result =
$this->getModel('ajax')->ajaxReadMessage($midValue,
$seidValue);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
				case 'deleteChat':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$midValue = $jinput->get('mid', NULL, 'INT');
						if($midValue && $user->id != 0)
						{
							$result =
$this->getModel('ajax')->deleteChat($midValue);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
				case 'goToClass':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$user1Value = $jinput->get('user1', NULL,
'INT');
						$user2Value = $jinput->get('user2', NULL,
'INT');
						$seidValue = $jinput->get('seid', NULL,
'INT');
						$pidValue = $jinput->get('pid', NULL, 'INT');
						if($user1Value && $user->id != 0 && $user2Value
&& $seidValue && $pidValue)
						{
							$result =
$this->getModel('ajax')->goToClass($user1Value,
$user2Value, $seidValue, $pidValue);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
				case 'getCatLevelOne':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$extensionValue = $jinput->get('extension', NULL,
'STRING');
						if($extensionValue)
						{
							$result =
$this->getModel('ajax')->getCatLevelOne($extensionValue);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
				case 'getCatLevelTwo':
					try
					{
						$returnRaw = $jinput->get('raw', false,
'BOOLEAN');
						$catIdLevel1Value = $jinput->get('catIdLevel1', NULL,
'INT');
						if($catIdLevel1Value)
						{
							$result =
$this->getModel('ajax')->getCatLevelTwo($catIdLevel1Value);
						}
						else
						{
							$result = false;
						}
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback . "(".json_encode($result).");";
						}
						elseif($returnRaw)
						{
							echo json_encode($result);
						}
						else
						{
							echo "(".json_encode($result).");";
						}
					}
					catch(Exception $e)
					{
						if($callback = $jinput->get('callback', null,
'CMD'))
						{
							echo $callback."(".json_encode($e).");";
						}
						else
						{
							echo "(".json_encode($e).");";
						}
					}
				break;
			}
		}
		else
		{
			if($callback = $jinput->get('callback', null,
'CMD'))
			{
				echo $callback."(".json_encode(false).");";
			}
			else
  			{
				echo "(".json_encode(false).");";
			}
		}
	}
}
comment.php000064400000011243151173560170006726 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		comment.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Comment Controller
 */
class ReservationControllerComment extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.32.$$$$]***/
public function save($key = NULL, $urlVar = NULL)
{
    $app= JFactory::getApplication();
    $data=
$app->input->get('jform',array(),'array');
    $uid= $app->input->get('uid', 0);
    $userid= JFactory::getUser()->get('id', 0);
    $seid= $app->input->get('seid', 0);
    $currentUrl= (string)JUri::getInstance();


    \JPluginHelper::importPlugin('reservation');
    $dispatcher = \JEventDispatcher::getInstance();
    $result=
$dispatcher->trigger('onBeforeSaveComment',array($uid,$userid,$seid));


    $data['seid']= $seid;
    $data['sickid']= $result[0]['sickid'];
    $data['consultantid']= $result[0]['consultantid'];
    $data['token']= md5(uniqid(rand(), true));

   
JLoader::register('ReservationModelComment',JPATH_COMPONENT_ADMINISTRATOR.'/models/comment.php');
    $commentModel= new ReservationModelComment();
    \JForm::addFormPath(JPATH_COMPONENT_ADMINISTRATOR .
'/models/forms');
    $form= $commentModel->getForm($data,false);


    $filterData= $form->filter($data);
    $filterData['published']= 0;
    $validData= $commentModel->validate($form,$filterData);

    if ($validData === false)
    {
        $errors= $commentModel->getErrors();
        foreach ($errors as $error) {
           
$app->enqueueMessage($error->getMessage(),'warning');
        }
        $app->setUserState('comment.data',$filterData);
        $app->redirect($currentUrl);
    }

    if($commentModel->save($filterData))
    {
        $app->setUserState('status',1);
        $app->setUserState('comment.data','');
        $app->redirect($currentUrl);
    }


}/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
consultantsignup.php000064400000016352151173560200010704 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		consultantsignup.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Consultantsignup Controller
 */
class ReservationControllerConsultantsignup extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.31.$$$$]***/
public function signup()
{


    $app= JFactory::getApplication();

    if(!JFactory::getUser()->guest)
    {
        $app->enqueueMessage('برای ساخت حساب جدید
ابتدا از حساب فعلی خود خارج
شوید','warning');
        $app->redirect(JUri::root());
    }



    $uri = (string)JUri::getInstance();
    JLoader::register('ReservationModelConsultant',
JPATH_COMPONENT_ADMINISTRATOR.'/models/consultant.php');
    \JForm::addFormPath(JPATH_COMPONENT_ADMINISTRATOR .
'/models/forms');
    $data=
JFactory::getApplication()->input->get('jform',array(),'array');

    $consultantModel= new ReservationModelConsultant;
    $form = $consultantModel->getForm($data, false);

    $xml = new SimpleXMLElement('<field name="password"
validate="password"/>');
    $form->setField($xml);

//    $rule= JFormHelper::loadRuleType('password');
//    $res= $rule->test($xml,$data['password']);

//    $filteredData = $form->filter($data);

    $filter= JFilterInput::getInstance();


    $data['name']=  preg_replace('/[0-9]+/',
'', $data['name']);
    $data['capital']=  preg_replace('/[0-9]+/',
'', $data['capital']);
    $data['msn']= $filter->clean( $data['msn'],
'int');
    $data['nationalnumber']= $filter->clean(
$data['nationalnumber'], 'int');
    $data['experience']= $filter->clean(
$data['experience'], 'int');


    $model= $this->getModel();
    if($model->checkPhoneExist($data['phonenumber']))
    {
        $app->enqueueMessage('این شماره تلفن قبلا
در این سامانه ثبت شده است لطفا با شماره
تلفن دیگری ثبت نام کنید','warning');
        $app->setUserState('consultant.data',$data);
        $app->redirect($uri);
    }

    $validData = $consultantModel->validate($form, $data);
    if ($validData === false)
    {
        $errors = $consultantModel->getErrors();

        foreach ($errors as $error) {
           
$app->enqueueMessage($error->getMessage(),'warning');
        }
        $app->setUserState('consultant.data',$data);
        $app->redirect($uri);
    }
    else{

        $userdata = array(
            "name"=> $data['name'],
            "username"=> $data['phonenumber'],
            "password"=> $data['password'],
            "password2"=> $data['password'],
            "email"=>
'R_'.$data['phonenumber'].'@gmail.com',
            "block"=> 0,
        );


        jimport('joomla.user.helper');
        $params= $app->getparams('com_reservation');

        $userGroup= $params->get('consultantgroup');


        if(!isset($userGroup))
            $userGroup = 2;

        $userdata["groups"] = $userGroup;
        $user = new JUser;


        if(!$user->bind($userdata)) {
            $app->enqueueMessage($user->getError(),
'warning');
            $app->redirect($uri);
            return false;

        }

        if (!$user->save()) {
            $app->enqueueMessage($user->getError(),
'warning');
            $app->redirect($uri);
            return false;

        }

        $app->setUserState('consultant.data',$data);

        $userId= $user->id;

        $consultantInfo= array(
            'userid'=> $userId,
            'msn' => $data['msn'],
            'nationalnumber' =>
$data['nationalnumber'],
            'catid' => $data['catid'],
            'capital' => $data['capital'],
            'phonenumber' => $data['phonenumber'],
            'experience' => $data['experience']
        );

        if(!$consultantModel->save($consultantInfo))
        {
            $app->enqueueMessage('اطلاعات خود را
تصحیح کرده و سپس وارد نمایید',
'warning');
            $app->redirect($uri);
        }
        $app->setUserState('consultant.data','');




        echo 'user saved successfully';


    }

    $credentials = array();
    $credentials['username'] = $data['phonenumber'];
    $credentials['password'] = $data['password'];
    $login_site = JFactory::getApplication('site');
    $login_site->login($credentials, $options=array());
    $redirect = JUri::root();
    $login_site->redirect($redirect);
    
}/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
consultant_plan.php000064400000014344151173560200010467 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		consultant_plan.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Consultant_plan Controller
 */
class ReservationControllerConsultant_plan extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.37.$$$$]***/
  public function delete($key = NULL, $urlVar = NULL)
  {
    $app= JFactory::getApplication();
    $uri= (string)JUri::getInstance();
    $user= JFactory::getUser();
    $jform=
$app->input->get('jform',array(),'array');


    $consultant=
ReservationHelper::getConsultant($jform['consultantid']);

    if ($consultant->userid != $user->get('id', 0))
      $app->redirect(JUri::root());


    $filename = __DIR__ . '/delete.txt';


    $plans = array_keys($jform['plans']);
    $plans = array_map(function ($a) { return intval(substr($a, 5)); },
$plans);

    // file_put_contents($filename, 'plans = ' . print_r($plans,
true) . "\n" , FILE_APPEND);



    JLoader::register('ReservationModelPlan', JPATH_ADMINISTRATOR
. '/components/com_reservation/models/plan.php');
    JLoader::register('ReservationTablePlan', JPATH_ADMINISTRATOR
. '/components/com_reservation/tables/plan.php');
    JPluginHelper::importPlugin('reservation');
    $dispatcher = JEventDispatcher::getInstance();
    foreach($plans as $pid)
    {
      $db = JFactory::getDbo();
      $planmodel = new ReservationTablePlan($db);
      $pkco = array(
        'id' => $pid
      );
      $planmodel->publish($pkco, -2);
      $pks = array($pid);
      $dispatcher->trigger('onReservationPlanStateChanged',
array($pks, -2));
      $planmodel->delete($pkco);
    }




    $app->redirect($uri);
  }
  public function save($key = NULL, $urlVar = NULL)
  {
    $filename = __DIR__ . '/save.txt';
    // file_put_contents($filename, 'key = ' . print_r($key,
true) . "\n" , FILE_APPEND);


    $uri= (string)JUri::getInstance();
    $user= JFactory::getUser();
    $app= JFactory::getApplication();
    $jform=
$app->input->get('jform',array(),'array');


    $consultant=
ReservationHelper::getConsultant($jform['consultantid']);

    if ($consultant->userid != $user->get('id', 0))
      $app->redirect(JUri::root());

    JLoader::register('ReservationModelPlan',
JPATH_ADMINISTRATOR.'/components/com_reservation/models/plan.php');
    if(isset($jform['planid']) &&
$jform['planid'])
    {
      $jform['id'] = $jform['planid'];
      $planmodel = new ReservationModelPlan();
      $planObj = $planmodel->getItem($jform['id']);
      $consultant=
ReservationHelper::getConsultant($planObj->consultantid);
      if ($consultant->userid != $user->get('id', 0))
        $app->redirect(JUri::root());
    }
    unset($jform['planid']);

    // file_put_contents($filename, 'jform = ' . print_r($jform,
true) . "\n" , FILE_APPEND);

    $planmodel= new ReservationModelPlan;
    if (!$planmodel->save($jform))
    {
     
$app->enqueueMessage(JText::_('COM_RESERVATION_FAILED_TO_SAVE_PLAN',
'danger')); // failed to save plan
      $app->redirect($uri);
    }

    $validData = (array)$planmodel->getItem();

    JPluginHelper::importPlugin('reservation');
    $dispatcher = JEventDispatcher::getInstance();
    $dispatcher->trigger('onReservationPlanCreated',
array($validData));


   
$app->enqueueMessage(JText::_('COM_RESERVATION_PLAN_SAVED_SUCCESSFULLY',
'success')); // plan saved successfully
    $app->redirect($uri);
  }
/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
doctors.php000064400000010162151173560200006732 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.22
	@build			1st March, 2021
	@created		17th December, 2020
	@package		Reservation
	@subpackage		doctors.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Doctors Controller
 */
class ReservationControllerDoctors extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'doctor'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.33.$$$$]***/
public function check()
{
    $app= JFactory::getApplication();
    $uid= $app->input->get('uid');
    $params= $app->getparams('com_reservation');
    $userGroups= !empty($params->get('doctorgroup'))?
$params->get('doctorgroup'): [0];
    
    $db= JFactory::getDbo();
    $query= $db->getQuery(true)
        ->select($db->quoteName('d.id'))
       
->from($db->quoteName('#__reservation_doctor','d'))
       
->join('inner',$db->quoteName('#__user_usergroup_map','uu').'on'.$db->quoteName('uu.user_id').'='.$db->quoteName('d.userid'))
       
->where($db->quoteName('d.userid').'='.$db->quote($uid))
       
->where($db->quoteName('uu.group_id').'IN('.implode(',',$userGroups).')');

    $db->setQuery($query);
    $result= $db->loadObject();

    if (empty($result))
        $app->redirect(JUri::root());

   
$app->redirect(JRoute::_('index.php?option=com_reservation&view=doctor&uid'.$uid,false));
   
}/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData =
array())
	{
	}
}
doctorsignup.php000064400000016121151173560200007776 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		doctorsignup.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Doctorsignup Controller
 */
class ReservationControllerDoctorsignup extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.34.$$$$]***/
    public function signup()
    {


        $app= JFactory::getApplication();

        if(!JFactory::getUser()->guest)
        {
            $app->enqueueMessage('برای ساخت حساب
جدید ابتدا از حساب فعلی خود خارج
شوید','warning');
            $app->redirect(JUri::root());
        }



        $uri = (string)JUri::getInstance();
        JLoader::register('ReservationModelDoctor',
JPATH_COMPONENT_ADMINISTRATOR.'/models/doctor.php');
        \JForm::addFormPath(JPATH_COMPONENT_ADMINISTRATOR .
'/models/forms');
        $data=
JFactory::getApplication()->input->get('jform',array(),'array');

        $doctorsModel= new ReservationModelDoctor;
        $form = $doctorsModel->getForm($data, false);

        $xml = new SimpleXMLElement('<field
name="password" validate="password"/>');
        $form->setField($xml);

//    $rule= JFormHelper::loadRuleType('password');
//    $res= $rule->test($xml,$data['password']);

//    $filteredData = $form->filter($data);

        $filter= JFilterInput::getInstance();


        $data['name']=  preg_replace('/[0-9]+/',
'', $data['name']);
        $data['msn']= $filter->clean( $data['msn'],
'int');


        $model= $this->getModel();
        if($model->checkPhoneExist($data['phonenumber']))
        {
            $app->enqueueMessage('این شماره تلفن
قبلا در این سامانه ثبت شده است لطفا با
شماره تلفن دیگری ثبت نام
کنید','warning');
            $app->setUserState('doctor.data',$data);
            $app->redirect($uri);
        }

        $validData = $doctorsModel->validate($form, $data);
        if ($validData === false)
        {
            $errors = $doctorsModel->getErrors();

            foreach ($errors as $error) {
               
$app->enqueueMessage($error->getMessage(),'warning');
            }
            $app->setUserState('doctor.data',$data);
            $app->redirect($uri);
        }
        else{

            $userdata = array(
                "name"=> $data['name'],
                "username"=> $data['phonenumber'],
                "password"=> $data['password'],
                "password2"=> $data['password'],
                "email"=>
'R_'.$data['phonenumber'].'@gmail.com',
                "block"=> 0,
            );


            $userGroup = 2;


            $userdata["groups"] = array($userGroup);
            $user = new JUser;


            if(!$user->bind($userdata)) {
                $app->enqueueMessage($user->getError(),
'warning');
                $app->redirect($uri);

            }

            if (!$user->save()) {
                $app->enqueueMessage($user->getError(),
'warning');
                $app->redirect($uri);

            }

            $app->setUserState('doctor.data',$data);

            $userId= $user->id;

            $doctorInfo= array(
                'userid'=> $userId,
                'msn' => $data['msn'],
                'catid' => $data['catid'],
                'capitalid' => $data['capitalid'],
                'cityid' => $data['cityid'],
                'phonenumber' =>
$data['phonenumber'],
                'officephone' =>
$data['officephone'],
                'address' => $data['address'],
            );

            if(!$doctorsModel->save($doctorInfo))
            {
                $app->enqueueMessage('اطلاعات خود را
تصحیح کرده و سپس وارد نمایید',
'warning');
                $app->redirect($uri);
            }
            $app->setUserState('doctor.data','');




            echo 'user saved successfully';


        }

        $credentials = array();
        $credentials['username'] =
$data['phonenumber'];
        $credentials['password'] = $data['password'];
        $login_site = JFactory::getApplication('site');
        $login_site->login($credentials, $options=array());
        $redirect = JUri::root();
        $login_site->redirect($redirect);

    }/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
fileupload.php000064400000005636151173560200007413 0ustar00<?php

define('_JEXEC', 1);

define('JPATH_BASE',
dirname(dirname(dirname(dirname(__FILE__)))));
require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';
$app = JFactory::getApplication('site');


use Joomla\CMS\Filesystem\File;


// var_dump(function_exists('gd_info')); // check GD extension
installed and enabled on php
// var_dump(function_exists('getimagesize'));
// die();

$filename = __DIR__ . '/log.txt';
// file_put_contents($filename, '$_FILES = ' . print_r($_FILES,
True) . "\n", FILE_APPEND);
// file_put_contents($filename, '$_POST = ' . print_r($_POST,
True) . "\n", FILE_APPEND);
// file_put_contents($filename, '$_req = ' . file_get_contents(
'php://input' ) . "\n", FILE_APPEND);
// file_put_contents($filename, 'input files = ' .
print_r($app->input->files->get('atachedfile'), True) .
"\n", FILE_APPEND);



function getName($n)
{
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $randomString = '';
    for ($i = 0; $i < $n; $i++)
    {
        $index = rand(0, strlen($characters) - 1);
        $randomString .= $characters[$index];
    }
    return $randomString;
}



$file = $app->input->files->get('atachedfile');


$info = pathinfo($file['name']);
if(isset($info['extension']))
{
    $ext = $info['extension']; // get the extension of the file
    $newname = getName(10) . ".$ext";
    $target = dirname(dirname(__FILE__)) . '/files/' . $newname;

    $allowUnsafe = false;

    // if (move_uploaded_file($file['tmp_name'], $target))
    if(JFile::upload($file['tmp_name'], $target, false,
$allowUnsafe))
    {
        if(function_exists('gd_info') &&
!function_exists('compress_image'))
        {
            function compress_image($src, $dest , $quality) 
            {
                $info = getimagesize($src);
             
                if ($info['mime'] == 'image/jpeg') 
                {
                    $image = imagecreatefromjpeg($src);
                }
                elseif ($info['mime'] == 'image/gif') 
                {
                    $image = imagecreatefromgif($src);
                }
                elseif ($info['mime'] == 'image/png') 
                {
                    $image = imagecreatefrompng($src);
                }
                else
                {
                    die('Unknown image file format');
                }
             
                //compress and save file to jpg
                imagejpeg($image, $dest, $quality);
             
                //return destination file
                return $dest;
            }
            compress_image($target, $target, 30);
        }
        echo $newname;
        // file_put_contents($filename, 'File is valid, and was
successfully uploaded'. "\n", FILE_APPEND);
    } 
    else
    {
        // file_put_contents($filename, 'Upload failed'.
"\n", FILE_APPEND);
    }
}

?>firstqst.php000064400000021213151173560200007133 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		firstqst.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Firstqst Controller
 */
class ReservationControllerFirstqst extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.30.$$$$]***/
  public function save($key = NULL, $urlVar = NULL){
    $app = JFactory::getApplication();
    $input = $app->input;
    $firsttext = $input->get('chatMessage', '',
'string');
    $pid = $input->get('pid', 0);
    //    $uid = $app->input->get('uid', 0);

    $app->setUserState('first_chatMessage', $firsttext);
    //    $app->setUserState('pid', $pid);
    //    $app->setUserState('uid', $uid);


    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('product_id');
    $query->from($db->quoteName('#__hikashop_product'));
    $query->where($db->quoteName('product_code') . '=
"reserve' . $pid.'"');

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


    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('id');
    $query->from($db->quoteName('#__reservation_sick'));
    $query->where($db->quoteName('userid') . '='
. $db->quote(JFactory::getUser()->id));
    $db->setQuery($query);
    $sick_id = $db->loadResult();



    JLoader::register('ReservationModelSession',
JPATH_ADMINISTRATOR.'/components/com_reservation/models/session.php');
    $data = array(
      'sickid'        => $sick_id,
      'planid'        => $pid,
      'firsttext'     => $firsttext,
      'channel_token' =>  JUserHelper::genRandomPassword(16)
    );

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select(array('id', 'channel_token'));
   
$query->from($db->quoteName('#__reservation_session'));
    $query->where($db->quoteName('planid') . '='
. $db->quote($pid));
    $query->where($db->quoteName('sickid') . '='
. $db->quote($sick_id));
    $query->where($db->quoteName('published') . '=
1');
    $db->setQuery($query);
    $session = $db->loadAssoc();
    if($session)
    {
      $data['id'] = $session['id'];
      $data['channel_token'] =
$session['channel_token'];
    }

    $session_model = new ReservationModelSession();
    $session_model->save($data);

    //           
$app->redirect(JRoute::_('index.php?option=com_reservation&view=payment&seid='.$sessionId));
   
$app->redirect(JRoute::_('index.php?option=com_hikashop&ctrl=product&task=show&cid='
. $product_id));




  }

  public function createSession($pid)
  {
    require_once
JPATH_SITE.'/components/com_reservation/helpers/reservation.php';
    $app= JFactory::getApplication();
    $firsttext=
$app->getUserState('first_chatMessage',0,'string');
    //        $pid= $app->getUserState('pid',0);
    //        $uid= $app->getUserState('uid',0);
    $user_id= JFactory::getUser()->get('id',0);
    //$consultantid=
ReservationHelper::exist('#__reservation_consultant',
'userid', JFactory::getUser()->get('id', 0));

    if (!$user_id)
    {
      $app->enqueueMessage('برای رزرو نوبت مشاوره
وارد حساب کاربری مخصوص کاربران عادی خود
شوید','warning');
      $app->redirect(JUri::root());
    }

    //        if (!$pid || !$uid)
    //        {
    //            $app->enqueueMessage('مراحل خرید به
درستی طی نشده است ، لطفا مراحل را مجدد
تکرار کنید','warning');
    //            $app->redirect(JUri::root());
    //        }


    $db = JFactory::getDbo();
    $query= $db->getQuery(true)
      ->select('s.id')
     
->from($db->quoteName('#__reservation_sick','s'))
     
->where($db->quoteName('s.userid').'='.$user_id);

    $db->setQuery($query);
    $res= $db->loadObject();


    //        $db = JFactory::getDbo();
    //        $query= $db->getQuery(true)
    //            ->select('c.id')
    //           
->from($db->quoteName('#__reservation_consultant','c'))
    //           
->where($db->quoteName('c.userid').'='.$uid)
    //           
->where('('.$db->quoteName('c.account').'='.$db->quote('consultant').'
or
'.$db->quoteName('c.account').'='.$db->quote('both').')');
    //
    //        $db->setQuery($query);
    //
    //        $res2= $db->loadObject();


    if(empty($res)) {
      $app->enqueueMessage('برای رزرو نوبت مشاوره
وارد حساب کاربری مخصوص کاربران عادی خود
شوید','warning');
      JFactory::getApplication()->redirect(JUri::root());
    }

    $sickid = (int)$res->id;
    //        $cid = (int)$res2->id;
    //
    //
    //        $db = JFactory::getDbo();
    //        $query= $db->getQuery(true)
    //            ->select('p.id')
    //           
->from($db->quoteName('#__reservation_plan','p'))
    //           
->where($db->quoteName('p.id').'='.$pid)
    //           
->where($db->quoteName('p.consultantid').'='.$db->quote($cid));
    //
    //        $db->setQuery($query);
    //        $res= $db->loadObject();
    //
    //        if (empty($res)) {
    //
    //            $app->enqueueMessage('از پارامتر های
معتبر استفاده کنید','warning');
    //            JFactory::getApplication()->redirect(JUri::root());
    //        }


    $data= [
      'firsttext'=> $firsttext,
      'planid'=> $pid,
      'sickid'=> $sickid,
      'pay' => 0,
      'finish' => 0
    ];

    require_once
JPATH_ADMINISTRATOR.'/components/com_reservation/models/session.php';

    $adminSessionModel= new ReservationModelSession;

    if (!$adminSessionModel->save($data))
    {
      $app->enqueueMessage('از پارامتر های معتبر
استفاده کنید','warning');
      JFactory::getApplication()->redirect(JUri::root());
    }

    $sessionId=$adminSessionModel->getState('session.id');
    return $sessionId;
  }/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
log23.txt000064400000131353151173560200006241 0ustar00messageValue =
fgdagfag
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 11:37:54
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = test
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = aaaaa
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = test
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = testes
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = tttt
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = yrtyrdeyr
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = kkkkkk
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 68
    [name] => komeil abasi
    [username] => komeil
    [email] => komeil@gmal.com
    [password] =>
$2y$10$u0BC/UQlWaxID7o.OY8PTOS72n6btXRLsFrrcf3ntOPVpkNnmqEh6
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:13
    [lastvisitDate] => 2023-02-22 11:41:01
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 68
toValue = 70
seidValue = 49
pidValue = 5
result = 23
messageValue = jjjj
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 68
seidValue = 49
pidValue = 5
result = 23
messageValue = testtttt
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
result = 23
messageValue = salam
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = 
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
messageValue = <img
src="/components/com_reservation/files/IMG_2058.JPG">
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
result = 23
messageValue = 
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
messageValue = <img
src="/components/com_reservation/files/irnicverif.jpg">
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
result = 23
messageValue = 
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
messageValue = <img
src="/components/com_reservation/files/laseronconvayer.jpg">
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
result = 23
messageValue = test
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = t
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:01:53
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = t
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:31:21
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = tt
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:31:21
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = ttt
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:31:21
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = ttttt
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:31:21
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = aaaaa
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:31:21
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = qqqq
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 70
    [name] => فرهاد پاشایی
    [username] => 09212428467
    [email] => fa@g.com
    [password] =>
$2y$10$hiXCMTOadhf3gDxYAtDo0ObemDVavHAYYG/PXpiTRgYosgIyMxfAm
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:55
    [lastvisitDate] => 2023-02-22 12:31:21
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 70
toValue = 78
seidValue = 50
pidValue = 1
result = 23
messageValue = تست
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
result = 23
messageValue = تست جدید
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 78
    [name] => mahdi
    [username] => mahdi
    [email] => mahdi@gmail.com
    [password] =>
$2y$10$5hti/TLYaz4pcqgqtBwFSOvpkaquJ93nPABi5jPNrebaLzXpLxjV2
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-06-20 05:23:52
    [lastvisitDate] => 2023-02-22 11:54:18
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 78
toValue = 70
seidValue = 50
pidValue = 1
result = 23
messageValue = تست
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 68
    [name] => komeil abasi
    [username] => komeil
    [email] => komeil@gmal.com
    [password] =>
$2y$10$u0BC/UQlWaxID7o.OY8PTOS72n6btXRLsFrrcf3ntOPVpkNnmqEh6
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:13
    [lastvisitDate] => 2023-02-22 11:41:01
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 68
toValue = 70
seidValue = 49
pidValue = 5
result = 23
messageValue = کلام جدید
user = Joomla\CMS\User\User Object
(
    [isRoot:protected] => 
    [id] => 68
    [name] => komeil abasi
    [username] => komeil
    [email] => komeil@gmal.com
    [password] =>
$2y$10$u0BC/UQlWaxID7o.OY8PTOS72n6btXRLsFrrcf3ntOPVpkNnmqEh6
    [password_clear] => 
    [block] => 0
    [sendEmail] => 0
    [registerDate] => 2021-02-23 04:37:13
    [lastvisitDate] => 2023-02-22 11:41:01
    [activation] => 
    [params] =>
{"admin_style":"","admin_language":"","language":"","editor":"","timezone":""}
    [groups] => Array
        (
            [2] => 2
        )

    [guest] => 0
    [lastResetTime] => 0000-00-00 00:00:00
    [resetCount] => 0
    [requireReset] => 0
    [_params:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [admin_style] => 
                    [admin_language] => 
                    [language] => 
                    [editor] => 
                    [timezone] => 
                )

            [initialized:protected] => 1
            [separator] => .
        )

    [_authGroups:protected] => 
    [_authLevels:protected] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

    [_authActions:protected] => 
    [_errorMsg:protected] => 
    [userHelper:protected] => Joomla\CMS\User\UserWrapper Object
        (
        )

    [_errors:protected] => Array
        (
        )

    [otpKey] => 
    [otep] => 
)

fromValue = 68
toValue = 70
seidValue = 49
pidValue = 5
result = 23
login.php000064400000033323151173560200006371 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		login.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Login Controller
 */
class ReservationControllerLogin extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.43.$$$$]***/
  public function loginRegister()
  {

    $app = JFactory::getApplication();
    $phoneNumber = $app->input->get('phonenumber', 0);
    $uri = (string)JUri::getInstance();

    $info= [
      'phonenumber' => $phoneNumber,
      'userExist' => false,
      'table' => false,
      'validate' => false
    ];
    $app->setUserState('info',$info );

   
Joomla\CMS\Form\Form::addRulePath('administrator/components/com_reservation/models/rules');
    $xml = new SimpleXMLElement('<field
name="phonenumber" validate="mobile"/>');
    $rule = JFormHelper::loadRuleType('mobile');
    $validate = $rule->test($xml, $phoneNumber);

    if (!$validate) {
      $app->enqueueMessage('شماره موبایل معتبر
وارد نمایید', 'warning');
      $app->redirect($uri);
    }




    //    $view = $this->getView('login', 'html');
    $model= $this->getModel();
    list($userExist, $table)= $model->userExist($phoneNumber);
    // $userExist= $model->userExist($phoneNumber)[0];
    // $table= $model->userExist($phoneNumber)[1];

    $info= [
      'phonenumber' => $phoneNumber,
      'userExist' => $userExist,
      'table' => $table,
      'validate' => $validate,
    ];
    $app->setUserState('info',$info );


    if(!$userExist)
    {
      ReservationHelper::setExpireTime();
      $verify= ReservationHelper::setVerifyCode();


      \JPluginHelper::importPlugin('ejra');
      $dispatcher = \JEventDispatcher::getInstance();
     
$dispatcher->trigger('onAfterMobileValidate',array($phoneNumber,
$verify));
     
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_register',false));
    }
    else
    {
      $app->setUserState('loginWith', 'password');
     
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_password',false));
    }


  }
  public function register()
  {
    $app= JFactory::getApplication();
    $data=
$app->input->get('jform',array(),'array');

    $info= $app->getUserState('info');
    if (!$info['phonenumber'] || !$info['validate'] ||
$info['userExist'] || !JFactory::getUser()->guest)
     
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login',false));

    $app->setUserState('owner.data',$data);

    $xml = new SimpleXMLElement('<field name="password"
type="text" required="true"
validate="password" minimum_length="4"
message="رمز عبور حداقل باید 4 کاراکتر
باشد" />');
    $rule = JFormHelper::loadRuleType('password');
    $validate = $rule->test($xml, $data['password']);



    if (empty($data['name']) || !$validate)
    {
      $app->enqueueMessage('اطلاعات خود را به
درستی وارد نمایید','warning');
     
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_register',false));
    }

    date_default_timezone_set('asia/tehran');
    $verify= $app->getUserState('verify');
    $expire= $app->getUserState('expire');


    if (strtotime($expire) < time())
    {
      $app->enqueueMessage('زمان کد تایید به
پایان رسیده لطفا بر روی ارسال مجدد کد
کلیک نمایید','warning');
     
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_register',false));
    }


    if ($data['verify'] != $verify)
    {
      $app->enqueueMessage('کد تایید را به درستی
وارد کنید','warning');
     
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_register',false));
    }




    $userdata = array(
      "name"=> $data['name'],
      "username"=> $info['phonenumber'],
      "password"=> $data['password'],
      "password2"=> $data['password'],
      "email"=>
'E_'.$info['phonenumber'].'@gmail.com',
      "block"=> 0,
    );


    jimport('joomla.user.helper');
    $params= $app->getparams('com_Reservation');

    //       $userGroup= $params->get('ownerrgroup');
    $userGroup= 2;



    // if(!isset($userGroup))
    // $userGroup = 2;

    // $userdata["groups"] = [$userGroup];
    // $user = new JUser;


    // if(!$user->bind($userdata)) {
    // $app->enqueueMessage($user->getError(), 'warning');
    //
$app->redirect(JRoute::_('index.php?option=com_Reservation&view=login',false));
    // }

    // if (!$user->save()) {
    // $app->enqueueMessage($user->getError(), 'warning');
    //
$app->redirect(JRoute::_('index.php?option=com_Reservation&view=login',false));
    // }



    if ( ( ! file_exists( JPATH_SITE .
'/libraries/CBLib/CBLib/Core/CBLib.php' ) ) || ( ! file_exists(
JPATH_ADMINISTRATOR .
'/components/com_comprofiler/plugin.foundation.php' ) ) ) {
      echo 'CB not installed';
      return;
    }

    include_once( JPATH_ADMINISTRATOR .
'/components/com_comprofiler/plugin.foundation.php' );
    cbimport( 'cb.html' );
    global $_CB_framework, $_PLUGINS, $ueConfig;
    $_PLUGINS->loadPluginGroup($data["username"]); // for
using cb trigering
    jimport('joomla.user.helper');
    $post = isset($data["post"]) ? $data["post"] :
$data;
    $post["name"] = $post["firstname"] . " "
. $post["lastname"];



    $_PLUGINS->loadPluginGroup( 'user' );

    $user					=	new \CB\Database\Table\UserTable();
    $user->set( 'username', $userdata['username']
);
    $user->set( 'email', $userdata["email"] );
    // /* $user->set( 'firstName',
$post["firstname"] );*/
    // /* $user->set( 'lastName', $post["lastname"]
);*/
    $user->set( 'name', $userdata['name'] );
    $user->set( 'gids', array($userGroup) );
    $user->set( 'sendEmail', 0 );
    $user->set( 'registerDate',
$_CB_framework->getUTCDate() );
    $user->set( 'password',
$user->hashAndSaltPassword($userdata["password"]) );
    $user->set( 'approved', 1 );
    $user->set( 'confirmed', 1 );
    $user->set( 'block', 0 );

    if ( $user->store() ) {
      if ( $user->get( 'confirmed' ) == 0 ) {
        $user->store();
      }
    }
    // dump($user, 'user');
    // dump($userdata, 'userdata');

    $userId= $user->id;

    $sickInfo= array(
      'userid'=> $userId,
      'phonenumber' => $info['phonenumber'],
    );


    JLoader::register('ReservationModelSick',
JPATH_COMPONENT_ADMINISTRATOR.'/models/sick.php');
    $sickModel= new ReservationModelSick();
    if(!$sickModel->save($sickInfo))
    {
      $app->enqueueMessage('اطلاعات خود را تصحیح
کرده و سپس وارد نمایید', 'warning');
     
$app->redirect(JRoute::_('index.php?option=com_Reservation&view=login',false));
    }
    $app->setUserState('info','');


    $credentials = array();
    $credentials['username'] = $info['phonenumber'];
    $credentials['password'] = $data['password'];
    $login_site = JFactory::getApplication('site');
    $login_site->login($credentials, $options=array());
    $redirect = JUri::root();
    $login_site->redirect($redirect);



  }

  public function resetExpireTime()
  {
    $app= JFactory::getApplication();
    $uri= (string)JUri::getInstance();
    $data=
$app->input->get('jform',array(),'array');
    $app->setUserState('owner.data',$data);

    date_default_timezone_set('asia/tehran');
    $expire= $app->getUserState('expire');

    if (strtotime($expire) < time())
    {
      ReservationHelper::setExpireTime();
      $verify= ReservationHelper::setVerifyCode();
      $phoneNumber=
$app->getUserState('info')['phonenumber'];


      \JPluginHelper::importPlugin('ejra');
      $dispatcher = \JEventDispatcher::getInstance();
     
$dispatcher->trigger('onAfterMobileValidate',array($phoneNumber,
$verify));
    }

    $app->redirect($uri);
  }
  public function login()
  {


    $app= JFactory::getApplication();
    $info= $app->getUserState('info');
    if (!$info['phonenumber'] || !$info['validate'] ||
!$info['userExist'] || !JFactory::getUser()->guest)
    {
     
$this->app->redirect(JRoute::_('index.php?option=com_reservation&view=login',false));
    }

    $loginWith= $app->getUserState('loginWith');

    $phoneNumber=
$app->getUserState('info')['phonenumber'];
    $data=
$app->input->get('jform',array(),'array');

    $credentials = array();
    if ($loginWith== 'password')
    {


      $credentials['username'] = $phoneNumber;
      $credentials['password'] = $data['password'];
      $credentials['loginWith'] = 'password';
      $login_site = JFactory::getApplication('site');

    }
    elseif($loginWith== 'verifyCode')
    {

      date_default_timezone_set('asia/tehran');
      $verify= $app->getUserState('verify');
      $expire= $app->getUserState('expire');


      if (strtotime($expire) < time())
      {
        $app->enqueueMessage('زمان کد تایید به
پایان رسیده لطفا بر روی ارسال مجدد کد
کلیک نمایید','warning');
       
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_password',false));
      }


      if ($data['password'] != $verify)
      {
        $app->enqueueMessage('کد تایید را به درستی
وارد کنید','warning');
       
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_password',false));
      }

      $model= $this->getModel();
      $table= $app->getUserState('info')['table'];
      $userid= $model->getUserId($table, $phoneNumber);

      $credentials['username'] = $phoneNumber;
      $credentials['password'] = $data['password'];
      $credentials['userid'] = $userid;
      $credentials['loginWith'] = 'verifyCode';
      $login_site = JFactory::getApplication('site');

    }

    $result= $login_site->login($credentials, $options=array());

    if(!$result)
     
$login_site->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_password',false));


    $redirect = JUri::root();
    $app->redirect($redirect);
  }

  public function verifyCode()
  {
    $app= JFactory::getApplication();
    $app->setUserState('loginWith', 'verifyCode');

    ReservationHelper::setExpireTime();
    $verify= ReservationHelper::setVerifyCode();
    $phoneNumber=
$app->getUserState('info')['phonenumber'];


    \JPluginHelper::importPlugin('ejra');
    $dispatcher = \JEventDispatcher::getInstance();
   
$dispatcher->trigger('onAfterMobileValidate',array($phoneNumber,
$verify));

   
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_password',false));
  }
  public function password()
  {
    $app= JFactory::getApplication();
    $app->setUserState('loginWith', 'password');
   
$app->redirect(JRoute::_('index.php?option=com_reservation&view=login&layout=default_password',false));
  }
/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
plan.php000064400000021111151173560200006203 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		plan.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Plan Controller
 */
class ReservationControllerPlan extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	/**
	 * Class constructor.
	 *
	 * @param   array  $config  A named array of configuration variables.
	 *
	 * @since   1.6
	 */
	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// Get user object.
		$user = JFactory::getUser();
		// Access check.
		$access = $user->authorise('plan.access',
'com_reservation');
		if (!$access)
		{
			return false;
		}

		// In the absense of better information, revert to the component
permissions.
		return parent::allowAdd($data);
	}

	/**
	 * Method override to check if you can edit an existing record.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// get user object.
		$user = JFactory::getUser();
		// get record id.
		$recordId = (int) isset($data[$key]) ? $data[$key] : 0;


		if ($recordId)
		{
			// The record has been set. Check the record permissions.
			$permission = $user->authorise('core.edit',
'com_reservation.plan.' . (int) $recordId);
			if (!$permission)
			{
				if ($user->authorise('core.edit.own',
'com_reservation.plan.' . $recordId))
				{
					// Now test the owner is the user.
					$ownerId = (int) isset($data['created_by']) ?
$data['created_by'] : 0;
					if (empty($ownerId))
					{
						// Need to do a lookup from the model.
						$record = $this->getModel()->getItem($recordId);

						if (empty($record))
						{
							return false;
						}
						$ownerId = $record->created_by;
					}

					// If the owner matches 'me' then allow.
					if ($ownerId == $user->id)
					{
						if ($user->authorise('core.edit.own',
'com_reservation'))
						{
							return true;
						}
					}
				}
				return false;
			}
		}
		// Since there is no permission, revert to the component permissions.
		return parent::allowEdit($data, $key);
	}

	/**
	 * Gets the URL arguments to append to an item redirect.
	 *
	 * @param   integer  $recordId  The primary key id for the item.
	 * @param   string   $urlVar    The name of the URL variable for the id.
	 *
	 * @return  string  The arguments to append to the redirect URL.
	 *
	 * @since   1.6
	 */
	protected function getRedirectToItemAppend($recordId = null, $urlVar =
'id')
	{
		// get the referral options (old method use return instead see parent)
		$ref = $this->input->get('ref', 0, 'string');
		$refid = $this->input->get('refid', 0, 'int');

		// get redirect info.
		$append = parent::getRedirectToItemAppend($recordId, $urlVar);

		// set the referral options
		if ($refid && $ref)
                {
			$append = '&ref=' . (string)$ref .
'&refid='. (int)$refid . $append;
		}
		elseif ($ref)
		{
			$append = '&ref='. (string)$ref . $append;
		}

		return $append;
	}

	/**
	 * Method to run batch operations.
	 *
	 * @param   object  $model  The model.
	 *
	 * @return  boolean   True if successful, false otherwise and internal
error is set.
	 *
	 * @since   2.5
	 */
	public function batch($model = null)
	{
		JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

		// Set the model
		$model = $this->getModel('Plan', '', array());

		// Preset the redirect
		$this->setRedirect(JRoute::_('index.php?option=com_reservation&view=plans'
. $this->getRedirectToListAppend(), false));

		return parent::batch($model);
	}

	/**
	 * Method to cancel an edit.
	 *
	 * @param   string  $key  The name of the primary key of the URL variable.
	 *
	 * @return  boolean  True if access level checks pass, false otherwise.
	 *
	 * @since   12.2
	 */
	public function cancel($key = null)
	{
		// get the referral options
		$this->ref = $this->input->get('ref', 0,
'word');
		$this->refid = $this->input->get('refid', 0,
'int');

		// Check if there is a return value
		$return = $this->input->get('return', null,
'base64');

		$cancel = parent::cancel($key);

		if (!is_null($return) &&
JUri::isInternal(base64_decode($return)))
		{
			$redirect = base64_decode($return);

			// Redirect to the return value.
			$this->setRedirect(
				JRoute::_(
					$redirect, false
				)
			);
		}
		elseif ($this->refid && $this->ref)
		{
			$redirect = '&view=' . (string)$this->ref .
'&layout=edit&id=' . (int)$this->refid;

			// Redirect to the item screen.
			$this->setRedirect(
				JRoute::_(
					'index.php?option=' . $this->option . $redirect, false
				)
			);
		}
		elseif ($this->ref)
		{
			$redirect = '&view=' . (string)$this->ref;

			// Redirect to the list screen.
			$this->setRedirect(
				JRoute::_(
					'index.php?option=' . $this->option . $redirect, false
				)
			);
		}
		return $cancel;
	}

	/**
	 * Method to save a record.
	 *
	 * @param   string  $key     The name of the primary key of the URL
variable.
	 * @param   string  $urlVar  The name of the URL variable if different
from the primary key (sometimes required to avoid router collisions).
	 *
	 * @return  boolean  True if successful, false otherwise.
	 *
	 * @since   12.2
	 */
	public function save($key = null, $urlVar = null)
	{
		// get the referral options
		$this->ref = $this->input->get('ref', 0,
'word');
		$this->refid = $this->input->get('refid', 0,
'int');

		// Check if there is a return value
		$return = $this->input->get('return', null,
'base64');
		$canReturn = (!is_null($return) &&
JUri::isInternal(base64_decode($return)));

		if ($this->ref || $this->refid || $canReturn)
		{
			// to make sure the item is checkedin on redirect
			$this->task = 'save';
		}

		$saved = parent::save($key, $urlVar);

		// This is not needed since parent save already does this
		// Due to the ref and refid implementation we need to add this
		if ($canReturn)
		{
			$redirect = base64_decode($return);

			// Redirect to the return value.
			$this->setRedirect(
				JRoute::_(
					$redirect, false
				)
			);
		}
		elseif ($this->refid && $this->ref)
		{
			$redirect = '&view=' . (string)$this->ref .
'&layout=edit&id=' . (int)$this->refid;

			// Redirect to the item screen.
			$this->setRedirect(
				JRoute::_(
					'index.php?option=' . $this->option . $redirect, false
				)
			);
		}
		elseif ($this->ref)
		{
			$redirect = '&view=' . (string)$this->ref;

			// Redirect to the list screen.
			$this->setRedirect(
				JRoute::_(
					'index.php?option=' . $this->option . $redirect, false
				)
			);
		}
		return $saved;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModel  &$model     The data model object.
	 * @param   array   $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   11.1
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{

/***[JCBGUI.admin_view.php_postsavehook.112.$$$$]***/
		$id = $model->getState()->{'plan.id'};
		$validData['id'] = $id;
		JPluginHelper::importPlugin('reservation');
		$dispatcher = JEventDispatcher::getInstance();
		$dispatcher->trigger('onReservationPlanCreated',
array($validData));/***[/JCBGUI$$$$]***/


		return;
	}

}
reserve.php000064400000013156151173560200006736 0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.32
	@build			14th June, 2021
	@created		17th December, 2020
	@package		Reservation
	@subpackage		reserve.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Reserve Controller
 */
class ReservationControllerReserve extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'reserve'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.36.$$$$]***/
public function default_personalinfo()
{
    $function_to_be_executed= $this->check(__FUNCTION__);
  echo '<pre>';
  var_dump($function_to_be_executed);
  echo '</pre>';
  exit();
}

public function check($funcname)
{
    JSession::checkToken('post') or die;

    $uri= (string)JUri::getInstance();
  
    $app= JFactory::getApplication();
    $params= JComponentHelper::getParams('com_reservation');
    $chekout= $params->get('checkout');
    $function_to_be_executed=
$app->getUserState('function_to_be_executed',0);
    $step= 'checkout'.$function_to_be_executed;
    $layout= $chekout->$step->reservetemplate;
    $layout= preg_replace('/\.php$/','',$layout);

    if ($layout != $funcname)
    {
        $app->setUserState('function_to_be_executed',0);
        $app->redirect($uri);
    }

    return ++$function_to_be_executed;
}

public function reserve()
{
    require
JPATH_SITE.'/components/com_reservation/helpers/reserve.php';
    $reserve= new reserve();

}
public function reordering($checkout)
    {
        $checkout= (array) $checkout;

        $reordering= [];
        foreach ($checkout as $item) {
            $reordering[]= $item;
        }

        return $reordering;
    }

    public function getLayout()
    {
        $app= JFactory::getApplication();
        $params= JComponentHelper::getParams('com_reservation');
        $chekout= $params->get('checkout');
        $chekout= $this->reordering($chekout);
        $function_to_be_executed=
$app->getUserState('function_to_be_executed',0);
        $layout= $chekout[$function_to_be_executed]->reservetemplate;
        $layout= preg_replace('/\.php$/','',$layout);
        return $layout;
    }
  public function back()
    {
        JSession::checkToken('post') or die;
        $app= JFactory::getApplication();
        $function_to_be_executed=
$app->getUserState('function_to_be_executed',0);
       
$app->setUserState('function_to_be_executed',--$function_to_be_executed);
        $app->redirect(JUri::getInstance());
    }/***[/JCBGUI$$$$]***/


    public function payment()
    {
        require_once
JPATH_SITE.'/components/com_reservation/helpers/payment.php';
        $obj= new strategy();
        $obj->do_request();
    }

    public function paymentverify()
    {
        require_once
JPATH_SITE.'/components/com_reservation/helpers/payment.php';
        $obj= new strategy();
        $obj->do_verify();
    }


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData =
array())
	{
	}
}
reserve_appointment.php000064400000012622151173560200011351
0ustar00<?php
/*----------------------------------------------------------------------------------|
 www.vdm.io  |----/
				fdsh 
/-------------------------------------------------------------------------------------------------------/

	@version		1.0.39
	@build			4th April, 2023
	@created		17th December, 2020
	@package		Reservation
	@subpackage		reserve_appointment.php
	@author			farhad shahbazi <http://farhad.com>	
	@copyright		Copyright (C) 2015. All Rights Reserved
	@license		GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
  ____  _____  _____  __  __  __      __       ___  _____  __  __  ____ 
_____  _  _  ____  _  _  ____ 
 (_  _)(  _  )(  _  )(  \/  )(  )    /__\     / __)(  _  )(  \/  )(  _ \( 
_  )( \( )( ___)( \( )(_  _)
.-_)(   )(_)(  )(_)(  )    (  )(__  /(__)\   ( (__  )(_)(  )    (  )___/
)(_)(  )  (  )__)  )  (   )(  
\____) (_____)(_____)(_/\/\_)(____)(__)(__)   \___)(_____)(_/\/\_)(__) 
(_____)(_)\_)(____)(_)\_) (__) 

/------------------------------------------------------------------------------------------------------*/

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

use Joomla\Utilities\ArrayHelper;

/**
 * Reservation Reserve_appointment Controller
 */
class ReservationControllerReserve_appointment extends JControllerForm
{
	/**
	 * Current or most recently performed task.
	 *
	 * @var    string
	 * @since  12.2
	 * @note   Replaces _task.
	 */
	protected $task;

	public function __construct($config = array())
	{
		$this->view_list = 'login'; // safeguard for setting the
return view listing to the default site view.
		parent::__construct($config);
	}


/***[JCBGUI.site_view.php_controller.36.$$$$]***/
public function default_personalinfo()
{
    $function_to_be_executed= $this->check(__FUNCTION__);
  echo '<pre>';
  var_dump($function_to_be_executed);
  echo '</pre>';
  exit();
}

public function check($funcname)
{
    JSession::checkToken('post') or die;

    $uri= (string)JUri::getInstance();
  
    $app= JFactory::getApplication();
    $params= JComponentHelper::getParams('com_reservation');
    $chekout= $params->get('checkout');
    $function_to_be_executed=
$app->getUserState('function_to_be_executed',0);
    $step= 'checkout'.$function_to_be_executed;
    $layout= $chekout->$step->reservetemplate;
    $layout= preg_replace('/\.php$/','',$layout);

    if ($layout != $funcname)
    {
        $app->setUserState('function_to_be_executed',0);
        $app->redirect($uri);
    }

    return ++$function_to_be_executed;
}

public function reserve()
{
    require
JPATH_SITE.'/components/com_reservation/helpers/reserve.php';
    $reserve= new reserve();

}
public function reordering($checkout)
    {
        $checkout= (array) $checkout;

        $reordering= [];
        foreach ($checkout as $item) {
            $reordering[]= $item;
        }

        return $reordering;
    }

    public function getLayout()
    {
        $app= JFactory::getApplication();
        $params= JComponentHelper::getParams('com_reservation');
        $chekout= $params->get('checkout');
        $chekout= $this->reordering($chekout);
        $function_to_be_executed=
$app->getUserState('function_to_be_executed',0);
        $layout= $chekout[$function_to_be_executed]->reservetemplate;
        $layout= preg_replace('/\.php$/','',$layout);
        return $layout;
    }
  public function back()
    {
        JSession::checkToken('post') or die;
        $app= JFactory::getApplication();
        $function_to_be_executed=
$app->getUserState('function_to_be_executed',0);
       
$app->setUserState('function_to_be_executed',--$function_to_be_executed);
        $app->redirect(JUri::getInstance());
    }
  public function reset()
    {

        $uri= JUri::getInstance();
        $app= JFactory::getApplication();
        $app->setUserState('function_to_be_executed',0);
        $uri->delVar('start');
        $app->redirect((string)$uri);
    }/***[/JCBGUI$$$$]***/


	/**
	 * Method to check if you can edit an existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key;
default is id.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

        /**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Method to check if you can save a new or existing record.
	 *
	 * Extended classes can override this if necessary.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   12.2
	 */
	protected function allowSave($data, $key = 'id')
	{
		// to insure no other tampering
		return false;
	}

	/**
	 * Function that allows child controller access to model data
	 * after the data has been saved.
	 *
	 * @param   JModelLegacy  $model      The data model object.
	 * @param   array         $validData  The validated data.
	 *
	 * @return  void
	 *
	 * @since   12.2
	 */
	protected function postSaveHook(JModelLegacy $model, $validData = array())
	{
	}
}
address.php000064400000012124151200171270006676 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 addressController extends hikashopController{

	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->modify_views = array('edit');
		$this->add = array('add');
		$this->modify = array('save','setdefault');
		$this->delete = array('delete');
	}

	function listing(){
		$user = JFactory::getUser();
		if ($user->guest) {
			$app=JFactory::getApplication();
			$app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST'));
			global $Itemid;
			$url = '';
			if(!empty($Itemid)){
				$url='&Itemid='.$Itemid;
			}
			if(version_compare(JVERSION,'1.6','<')){
				$url = 'index.php?option=com_user&view=login'.$url;
			}else{
				$url = 'index.php?option=com_users&view=login'.$url;
			}
			$app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('',false))),false));
			return false;
		}
		return parent::listing();
	}

	function delete(){
		$addressdelete = JRequest::getInt('address_id',0);
		if($addressdelete){
			JRequest::checkToken('request') || jexit( 'Invalid
Token' );
			$addressClass = hikashop_get('class.address');
			$oldData = $addressClass->get($addressdelete);
			if(!empty($oldData)){
				$user_id = hikashop_loadUser();
				if($user_id==$oldData->address_user_id){
					$addressClass->delete($addressdelete);
				}
			}
		}
		$this->listing();
	}

	function setdefault(){
		$newDefaultId = JRequest::getInt('address_default', 0);
		if($newDefaultId){
			JRequest::checkToken('request') || jexit( 'Invalid
Token' );
			$addressClass = hikashop_get('class.address');
			$oldData = $addressClass->get($newDefaultId);
			if(!empty($oldData)){
				$user_id = hikashop_loadUser();
				if($user_id==$oldData->address_user_id){
					$oldData->address_default = 1;
					$addressClass->save($oldData);
				}
			}
		}
		$this->listing();
	}

	function save(){
		JRequest::checkToken('request') || jexit( 'Invalid
Token' );
		$addressClass = hikashop_get('class.address');
		$app = JFactory::getApplication();
		$oldData = null;
		$already = @$_REQUEST['address']['address_id'];
		if(!empty($already)){
			$oldData = $class->get($already);
		}
		$fieldClass = hikashop_get('class.field');
		$addressData = $fieldClass->getInput('address',$oldData);
		$ok = true;

		if(empty($addressData)){
			$ok=false;
		}else{

			$user_id = hikashop_loadUser();
			$addressData->address_user_id=$user_id;
			JRequest::setVar( 'fail', $addressData );
			$address_id = $addressClass->save($addressData);
		}
		if(!$ok || !$address_id){
			$message = '';
			if(isset($addressClass->message))
$message='alert(\''.addslashes($addressClass->message).'\');';
			if(version_compare(JVERSION,'1.6','<')){
				$app = JFactory::getApplication();
				$session = JFactory::getSession();
				$session->set('application.queue',
$app->_messageQueue);
			}

			$this->edit();
			return;
		}
		$redirect = JRequest::getWord('redirect','');
		global $Itemid;
		$url = '';
		if(!empty($Itemid)){
			$url='&Itemid='.$Itemid;
		}

		if($redirect=='checkout'){
			$makenew = JRequest::getInt('makenew');
			switch(JRequest::getVar('type')){
				case 'shipping':
					if(JRequest::getVar('action')== 'add' &&
$makenew){
						$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address',$address_id );
					}
					$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address', $address_id );
					break;
				case 'billing':
					if(JRequest::getVar('action')== 'add' &&
$makenew){
						$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address',$address_id );
					}
					$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address', $address_id );
					break;
				default:
					$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address',$address_id );
					$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address',$address_id );
					break;
			}

			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_data',
'');
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
'');
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0);
			if(!$already){
				$controller = hikashop_get('controller.checkout');
				$cart = $controller->initCart();
				$controller->update_cart = true;
				if($cart->has_shipping){
					$controller->before_shipping(true);
				}
				$controller->before_payment(true);
			}
			$url =
hikashop_completeLink('checkout&task=step&step='.JRequest::getInt('step',0).$url,false,true);
		}else{
			$url = hikashop_completeLink('address'.$url,false,true);
		}
		ob_clean();
		echo '<html><head><script
type="text/javascript">window.parent.location.href=\''.$url.'\';</script></head><body></body></html>';
		exit;
	}
}
affiliate.php000064400000004306151200171270007200 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 affiliateController extends hikashopController{
	var $type='user';
	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->display =
array('clicks','leads','sales','cancel');
		$this->modify_views = array('show');
		$this->add = array();
		$this->modify = array('save','apply');
		$this->delete = array();
		if(!$skip){
			$this->registerDefaultTask('show');
		}
	}
	function cancel(){
		$app = JFactory::getApplication();
		global $Itemid;
		$url = '';
		if(!empty($Itemid)){
			$url='&Itemid='.$Itemid;
		}
		$app->redirect(hikashop_completeLink('user'.$url,false,true));
	}

	function listing(){
		return $this->show();
	}

	function show(){
		$this->_checkProgramActive('show');
	}
	function apply(){
		$status = $this->store();
		return $this->show();
	}

	function clicks(){
		return $this->_checkStats('clicks');
	}

	function leads(){
		return $this->_checkStats('leads');
	}

	function sales(){
		return $this->_checkStats('sales');
	}

	function store($new=false){
		if(hikashop_getCID('user_id')!=hikashop_loadUser()){
			return false;
		}
		return parent::store();
	}

	function _checkStats($type=''){
		$config =& hikashop_config();
		$advanced_stats =
$config->get('affiliate_advanced_stats',1);
		if($advanced_stats && hikashop_loadUser()){
			if($this->_checkProgramActive()){
				JRequest::setVar( 'layout', $type );
				return $this->display();
			}else{
				return false;
			}
		}else{
			return $this->show();
		}
	}

	function _checkProgramActive($type=''){
		$plugin = JPluginHelper::getPlugin('system',
'hikashopaffiliate');
		if(empty($plugin)){
			$app =& JFactory::getApplication();
			$app->enqueueMessage('Affiliate program not available. Please
make sure the HikaShop Affiliate System plugin is
enabled.','error');
			return false;
		}
		if(!empty($type)){
			parent::$type();
		}
		return true;
	}
}
cart.php000064400000016320151200171270006204 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 CartController extends hikashopController {
	var $modify_views = array();
	var $add = array();
	var $modify = array();
	var $delete = array();

	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		if(!$skip){
			$this->registerDefaultTask('display');
		}
		$this->display[]='display';
		$this->display[]='convert';
		$this->display[]='newcart';
		$this->display[]='showcarts';
		$this->display[]='showcart';
		$this->display[]='setcurrent';
		$this->display[]='delete';
		$this->display[]='savecart';
		$this->display[]='addtocart';
	}

	function display($cachable = false, $urlparams = array()){
		$cart_type =
JRequest::getString('cart_type','cart');
		$empty='';
		jimport('joomla.html.parameter');
		$params = new HikaParameter($empty);
		$js = '';
		$params->set('cart_type',$cart_type);
		$html =
trim(hikashop_getLayout('product','cart',$params,$js));
		if(!empty($html)){
			JRequest::setVar('savecart','1');
			echo '<div class="hikashop_cart_display"
id="hikashop_cart_display">'.$html.'</div>';
		}
	}

	function convert(){
		$app = JFactory::getApplication();
		$cart_type =
JRequest::getString('cart_type','cart');
		$cart_id = JRequest::getInt('cart_id','0');
		$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_id',
0);
		$cartClass = hikashop_get('class.cart');
		$cartClass->convert($cart_id, $cart_type);


		if($cart_type != 'wishlist'){
			JRequest::setVar('cart_type','wishlist');
		}
		JRequest::setVar('cart_id',$cart_id);
		JRequest::setVar('layout', 'showcart');
		return parent::display();
	}

	function newcart(){
		$app = JFactory::getApplication();
		$cartClass = hikashop_get('class.cart');
		$cart_type =
JRequest::getString('cart_type','cart');

		$result = $cartClass->setCurrent('0',$cart_type);
		if($result){
			$session = JFactory::getSession();
			$curUser = hikashop_loadUser(true);
			$newCart = new stdClass();
			if($curUser == null)
				$newCart->user_id = 0;
			else
				$newCart->user_id = $curUser->user_cms_id;
			$newCart->session_id = $session->getId();
			$newCart->cart_modified = time();
			$newCart->cart_type = $cart_type;
			$newCart->cart_current = 1;
			$newCart->cart_share = 'nobody';
			$cartClass->save($newCart);

			$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_id',
'0');
			$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_new',
'1');

			if($cart_type == 'cart')
				$app->enqueueMessage(JText::sprintf(
'HIKASHOP_CART_CREATED'), 'notice');
			else
				$app->enqueueMessage(JText::sprintf(
'HIKASHOP_WISHLIST_CREATED'), 'notice');
		}
		$this->showcarts();
	}

	function showcarts(){
		JRequest::setVar('layout', 'showcarts');
		return parent::display();
	}

	function showcart(){
		JRequest::setVar('layout', 'showcart');
		return parent::display();
	}

	function addtocart(){
		global $Itemid;
		$app = JFactory::getApplication();
		$from_id = JRequest::getInt('cart_id',0);
		$cart_type =
JRequest::getString('cart_type','cart');
		$action = JRequest::getString('action','');
		if($action != 'compare'){
			$cart_type_id = $cart_type.'_id';
			if($cart_type == 'cart') $addTo = 'wishlist';
			else $addTo = 'cart';
			JRequest::setVar('from_id',$from_id);
			$cart_type_id = $addTo.'_id';
			$cart_id =
$app->getUserState(HIKASHOP_COMPONENT.'.'.$cart_type_id,'0');
			$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_new',
'0');
			if(empty($cart_id))$cart_id=0;
			JRequest::setVar('cart_type', $addTo);
			JRequest::setVar($cart_type_id, $cart_id);

			$cartClass = hikashop_get('class.cart');
			$formData = JRequest::getVar('data', array(), '',
'array');
			$i = 0;

			if(isset($formData['products'])){
				foreach($formData['products'] as $product_id =>
$product){
					if(!empty($product['checked'])) {
						$i++;
						if(!isset($product['quantity']))
$product['quantity'] = 1;
						$cartClass->update((int)$product_id,
(int)$product['quantity'],1);
					}
				}
			}
			if($i == 0){
				$app->enqueueMessage(JText::_('PLEASE_SELECT_A_PRODUCT_FIRST'));
			}

			if($action != '')
				$url = $action;
			else{
				$url =
'cart&task=showcart&cart_type='.$cart_type.'&cart_id='.$from_id.'&Itemid='.$Itemid;
				$url = hikashop_completeLink($url,false,true);
			}
		}
		else{
			$formData = JRequest::getVar('data', array(), '',
'array');
			if(isset($formData['products'])){
				$cidList = '';
				foreach($formData['products'] as $product_id =>
$product){
					if(!empty($product['checked'])) {
						$cidList .= "&cid[]=".$product_id;
					}
				}
				$url =
hikashop_completeLink('product&task=compare'.$cidList.'&Itemid='.$Itemid,false,true);
			}else{
				$url =
'cart&task=showcart&cart_type='.$cart_type.'&cart_id='.$from_id.'&Itemid='.$Itemid;
				$url = hikashop_completeLink($url,false,true);
			}
		}

		$this->setRedirect($url);
	}

	function savecart(){
		$app = JFactory::getApplication();
		$cartClass = hikashop_get('class.cart');
		$user = JFactory::getUser();
		$session = JFactory::getSession();

		$formData = JRequest::getVar('data', array(), '',
'array');
		$cart_id = JRequest::getInt('cart_id','0');
		$cart_type =
JRequest::getString('cart_type','cart');
		$cart_name = JRequest::getString('cart_name','');
		$cart_share =
JRequest::getString('cart_share','nobody');
		if($cart_share == 'email'){
			$cart_share =
JRequest::getString('hikashop_wishlist_token','nobody');
		}

		$cart= new stdClass();
		$cart->cart_id = $cart_id;
		$cart->user_id = $user->id;
		$cart->cart_modified = time();
		$cart->session_id = $session->getId();
		$cart->cart_type = $cart_type;
		$cart->cart_name = $cart_name;
		$cart->cart_share = $cart_share;
		$status = $cartClass->save($cart);

		if($status && !empty($formData['products'])){
			JRequest::setVar($cart_type.'_id',$cart_id);
			JRequest::setVar('cart_type',$cart_type);
			foreach($formData['products'] as $product_id => $product){
				$cartClass->update((int)$product_id,
(int)$product['quantity']);
			}
		}
		$this->showcart();
	}

	function setcurrent(){
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$cart_id = JRequest::getInt('cart_id',0,'GET');
		$cart_type =
JRequest::getString('cart_type','cart','GET');

		$cartClass = hikashop_get('class.cart');
		$result = $cartClass->setCurrent($cart_id, $cart_type);

		if($result)$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_id',
$cart_id);

		JRequest::setVar('layout', 'showcarts');
		return parent::display();
	}

	function delete(){ //delete a cart with the id given
		$cart_id = JRequest::getInt('cart_id','0');
		$cart_type =
JRequest::getString('cart_type','cart');

		$app = JFactory::getApplication();
		if($app->getUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_id')
== $cart_id){
			$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_id',
'0');
		}

		$cartClass = hikashop_get('class.cart');
		$cartClass->delete($cart_id, 'old');
		$this->showcarts();
	}
}
category.php000064400000001031151200171270007061 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 categoryController extends hikashopController{
	var $modify = array();
	var $delete = array();
	var $modify_views = array();
	function authorize($task){
		if($this->isIn($task,array('display'))){
			return true;
		}
		return false;
	}
}
checkout.php000064400000161130151200171270007060 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 checkoutController extends hikashopController {
	var $cart_update = false;
	var $modify_views = array();
	var $add = array();
	var $modify = array();
	var $delete = array();

	function __construct($config = array(),$skip=false) {
		parent::__construct($config,$skip);
		$this->display=array('convert','step','notice','state','deleteaddress','notify','after_end','activate_page','activate','resetcart','threedsecure','printcart','');
		if(!$skip){
			$this->registerDefaultTask('step');
		}
		$conf =& hikashop_config();
		$this->checkout_workflow =
trim($conf->get('checkout','login_address_shipping_payment_coupon_cart_status_confirm,end'));
		$this->steps=explode(',',$this->checkout_workflow);
		$this->redirect_url =
$conf->get('redirect_url_when_cart_is_empty');
		if(empty($this->redirect_url)){
			global $Itemid;
			$url = '';
			if(!empty($Itemid)){
				$url='&Itemid='.$Itemid;
			}
			$this->redirect_url=hikashop_completeLink('product&task=listing'.$url,false,true);
		}else{
			if(!preg_match('#^https?://#',$this->redirect_url))
$this->redirect_url =
JURI::base().ltrim($this->redirect_url,'/');
			$this->redirect_url = JRoute::_($this->redirect_url,false);
		}


	}
	function authorize($task){

		if($this->isIn($task,array('display'))){
			return true;
		}
		return false;
	}

	function printcart(){
		JRequest::setVar( 'layout', 'printcart' );
		return parent::display();
	}

	function notice(){
		$cart_type =
JRequest::getVar('cart_type','','post');
		if(!empty($cart_type)){
			$app = JFactory::getApplication();
			$app->setUserState(
HIKASHOP_COMPONENT.'.popup_cart_type',$cart_type);
		}
		JRequest::setVar( 'layout', 'notice' );
		return parent::display();
	}

	function resetcart(){
		$cart = hikashop_get('class.cart');
		$cart->resetCart();
		$app = JFactory::getApplication();
		$app->redirect( $this->redirect_url );
	}

	function activate(){
		$app = JFactory::getApplication();
		$db			= JFactory::getDBO();
		$user 		= JFactory::getUser();
		$usersConfig = JComponentHelper::getParams( 'com_users' );
		$userActivation			= $usersConfig->get('useractivation');
		$allowUserRegistration	=
$usersConfig->get('allowUserRegistration');

		if ($user->get('id')) {
			$app->redirect(
hikashop_completeLink('checkout',false,true) );
		}

		if ($allowUserRegistration == '0' || $userActivation ==
'0') {
			JError::raiseError( 403, JText::_( 'Access Forbidden' ));
			return;
		}

		$lang = JFactory::getLanguage();
		$lang->load('com_user',JPATH_SITE);
		jimport('joomla.user.helper');

		$activation =
hikashop_getEscaped(JRequest::getVar('activation', '',
'', 'alnum' ));

		if (empty( $activation )){
			$app->enqueueMessage(JText::_(
'HIKA_REG_ACTIVATE_NOT_FOUND' ));
			return;
		}
		if(version_compare(JVERSION,'1.6','<')){
			$result = JUserHelper::activateUser($activation);
		}else{
			if(HIKASHOP_J30){
				JModelLegacy::addIncludePath(HIKASHOP_ROOT . DS .
'components' . DS . 'com_users' . DS .
'models');
			}else{
				JModel::addIncludePath(HIKASHOP_ROOT . DS . 'components' . DS
. 'com_users' . DS . 'models');
			}
			$model = $this->getModel('Registration',
'UsersModel',array(),true);
			$language = JFactory::getLanguage();
			$language->load('com_users', JPATH_SITE,
$language->getTag(), true);
			if($model) $result = $model->activate($activation);
		}

		if(!$result){
			$app->enqueueMessage(JText::_(
'HIKA_REG_ACTIVATE_NOT_FOUND' ));
			return;
		}else{
			$app->enqueueMessage(JText::_( 'HIKA_REG_ACTIVATE_COMPLETE'
));
			$id = JRequest::getInt('id',0);
			$class = hikashop_get('class.user');
			$user = $class->get($id);
			if($id &&
file_exists(JPATH_ROOT.DS.'components'.DS.'com_comprofiler'.DS.'comprofiler.php')
&& $userActivation<2){
				$class->addAndConfirmUserInCB($user);
			}
			$infos = JRequest::getVar('infos','');
			global $Itemid;
			$url = '';
			if(!empty($Itemid)){
				$url='&Itemid='.$Itemid;
			}

			if(!empty($infos)){
				$infos = unserialize(base64_decode($infos));
				JPluginHelper::importPlugin('user');
				if($userActivation<2 && !empty($infos['passwd'])
&& !empty($infos['username']) &&
$this->_doLogin($infos['username'],$infos['passwd'],false)){
					$page = JRequest::getString('page','checkout');
					if($page=='checkout'){
						$this->before_address();
						$app->redirect(
hikashop_completeLink('checkout'.$url,false,true) );
					}else{
						return true;
					}
				}elseif($userActivation>=2){
					$app->enqueueMessage(JText::_(
'HIKA_ADMIN_CONFIRM_ACTIVATION' ));
				}
			}
			if(version_compare(JVERSION,'1.6','<')){
				$url = 'index.php?option=com_user&view=login'.$url;
			}else{
				$url = 'index.php?option=com_users&view=login'.$url;
			}
			$app->redirect( JRoute::_($url,false) );
		}
	}

	function activate_page(){
		JRequest::setVar( 'layout', 'activate_page' );
		return parent::display();
	}

	function state(){
		JRequest::setVar( 'layout', 'state' );
		return parent::display();
	}

	function deleteaddress(){
		$addressdelete = JRequest::getInt('address_id',0);
		if($addressdelete){
			JRequest::checkToken('request') || jexit( 'Invalid
Token' );
			$addressClass = hikashop_get('class.address');
			$oldData = $addressClass->get($addressdelete);
			if(!empty($oldData)){
				$user_id = hikashop_loadUser();
				if($user_id==$oldData->address_user_id){
					$addressClass->delete($addressdelete);
					$app=JFactory::getApplication();
					$oldShip = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address');
					$oldBill = $app->getUserState(
HIKASHOP_COMPONENT.'.billing_address');
					if($oldShip==$addressdelete){
						$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address',0);
					}
					if($oldBill==$addressdelete){
						$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address',0);
					}
				}
			}
		}
		$this->step();
	}

	function convert(){
		$class = hikashop_get('class.cart');
		$class->get();
		$cart_type =
JRequest::getString('cart_type','cart');

		$result = $class->convert($class->cart->cart_id,$cart_type);

		$app=JFactory::getApplication();
		if($result){
			$app->setUserState(HIKASHOP_COMPONENT.'.cart_id', 0);
			$app->setUserState(HIKASHOP_COMPONENT.'.wishlist_id',
$class->cart->cart_id);
		}

		global $Itemid;
		$url = '';
		if(!empty($Itemid)){
			$url='&Itemid='.$Itemid;
		}


		$url = 'wishlist&refresh=true';
		$url = hikashop_completeLink($url,false,true);
		$this->setRedirect($url);

	}
	function step(){
		if(isset($_POST['unique_id'])){
			$unique_id = $_POST['unique_id'];
			$ck_submital = isset($_SESSION['ck_submital']) ?
$_SESSION['ck_submital'] : array();
			static $done = false;
			if(!$done && isset($ck_submital[$unique_id])){
				JRequest::setVar('step',JRequest::getInt('previous',0));
				JRequest::setVar( 'layout', 'step' );
				return $this->display();
			}
			else{
				$ck_submital[$unique_id] = true;
				$_SESSION['ck_submital'] = $ck_submital;
				$done=true;
			}
		}

		$class = hikashop_get('class.cart');
		$class->get();
		if(empty($class->cart->cart_id)){
			$this->setRedirect( $this->redirect_url,
JText::_('CART_EMPTY'));
			return true;
		}
		$config =& hikashop_config();

		global $Itemid;
		$redirect = false;
		$ssl = false;
		$new_item_id = $Itemid;
		$itemid_for_checkout =
$config->get('checkout_itemid','0');
		if(!empty($itemid_for_checkout)){
			if($new_item_id!=$itemid_for_checkout &&
empty($_SESSION['hikashop_new_itemid'])){
				$new_item_id=$itemid_for_checkout;
				$_SESSION['hikashop_new_itemid']=$new_item_id;
				$redirect = true;
			}else{
				$_SESSION['hikashop_new_itemid']='';
			}
		}

		$app = JFactory::getApplication();
		if(($config->get('force_ssl',0)==1 ||
$config->get('force_ssl',0)=='url') &&
$app->getUserState('com_hikashop.ssl_redirect')!=1){
			if (!hikashop_isSSL()){
				$ssl = 1;
				$redirect = true;
				$app->setUserState('com_hikashop.ssl_redirect',1);
			}
		}

		if($redirect){
			$url = '';
			if(!empty($new_item_id)){
				$url='&Itemid='.$new_item_id;
			}
			if($config->get('force_ssl',0)=='url'){
				$url=$config->get('force_ssl_url');
				$url=str_replace('http://', 'https://', $url);
				if (strpos($url,"https://")===false){ $url =
"https://" . $url;  }
				$app = JFactory::getApplication();
				$requestUri = $_SERVER['PHP_SELF'];
				$str_start=strpos($requestUri,'index.php');
				if(strpos($requestUri,'index.php')!=0){
$requestUri=substr($requestUri, $str_start-1, strlen($requestUri)); }
				if (!empty($_SERVER['QUERY_STRING'])) $requestUri =
rtrim($requestUri,'/').'?'.$_SERVER['QUERY_STRING'];
				$app->redirect($url.$requestUri);
			}else{
				$this->setRedirect(
JRoute::_('index.php?option='.HIKASHOP_COMPONENT.'&ctrl=checkout'.$url,false,$ssl));
			}
			return true;
		}

		$go_back = false;
		$this->previous = JRequest::getInt('previous',0);
		$this->current = JRequest::getInt('step',0);

		JPluginHelper::importPlugin('hikashop');
		$dispatcher = JDispatcher::getInstance();

		if(isset($_REQUEST['previous'])){
			if(!isset($this->steps[$this->previous])){
				$this->previous = 0;
			}
			$this->controllers = trim($this->steps[$this->previous]);
			$this->controllers = explode('_',$this->controllers);
			$newArray = array();
			$found = false;
			$cart = false;
			$coupon = false;
			$login = false;
			$address = false;
			foreach($this->controllers as $v) {
				if($v=='confirm'){
					$found = true;
				}elseif($v=='cart'){
					$cart = true;
				}elseif($v=='login'){
					$login = true;
				}elseif($v=='address'){
					$address = true;
				}elseif($v=='coupon'){
					$coupon = true;
				}else{
					$newArray[]=$v;
				}
			}

			if($cart)
				array_unshift($newArray, 'cart');
			if($coupon)
				array_unshift($newArray, 'coupon');
			if($login)
				array_unshift($newArray, 'login');
			if($address)
				array_unshift($newArray, 'address');
			if($found)
				$newArray[] = 'confirm';

			$this->controllers = $newArray;
			$this->beforeControllers = $newArray;
			foreach($this->controllers as $controller){
				$method = 'after_'.trim($controller);
				$original_go_back = $go_back;
				if(method_exists($this,$method)){
					if(!$this->$method(!$go_back)){
						$go_back = true;
					}
				} else {
					$dispatcher->trigger('onAfterCheckoutStep',
array($controller, &$go_back, $original_go_back, &$this));
				}
			}
		} else if($this->previous == 0) {
			$auto_select_default =
$config->get('auto_select_default',2);
			if($auto_select_default){
				$this->before_shipping(true);
				$this->before_payment(true);
			}
		}
		if($go_back){
			JRequest::setVar('step',$this->previous);
		}else{
			$this->controllers = trim(@$this->steps[$this->current]);
			$this->controllers=explode('_',$this->controllers);

			foreach($this->controllers as $controller){
				$method = 'before_'.trim($controller);
				$original_go_back = $go_back;
				if(method_exists($this,$method)){
					if(!$this->$method()){
						$go_back = true;
					}
				} else {
					$dispatcher->trigger('onBeforeCheckoutStep',
array($controller, &$go_back, $original_go_back, &$this));
				}
			}

			if($go_back && isset($this->previous)){
				JRequest::setVar('step',$this->previous);
			}
		}

		JRequest::setVar( 'layout', 'step' );

		return $this->display();
	}

	function before_coupon(){
		return true;
	}

	function after_coupon($success){
		$coupon = JRequest::getString('coupon','');
		$qty = 1;

		if(empty($coupon)){
			$coupon = JRequest::getInt('removecoupon',0);
			$qty = 0;
		}
		if(!empty($coupon)){
			$class = hikashop_get('class.cart');
			if($class->update($coupon,$qty,0,'coupon')){
				if(strpos($this->checkout_workflow,'shipping')!==false){
					$this->before_shipping(true);
				}
				if(strpos($this->checkout_workflow,'payment')!==false){
					$this->before_payment(true);
				}
				$this->initCart(true);
				$this->cart_update = true;
				return false;
			}
		}
		return true;
	}

	function check_coupon(){
		return true;
	}

	function before_terms(){
		return true;
	}
	function after_terms($success){
		$app = JFactory::getApplication();
		$app->setUserState( HIKASHOP_COMPONENT.'.checkout_terms',
JRequest::getInt('hikashop_checkout_terms',0) );
		if(!$this->cart_update && $success){
			return $this->check_terms();
		}
		return true;
	}

	function check_terms(){
		$app = JFactory::getApplication();
		$status = (bool)$app->getUserState(
HIKASHOP_COMPONENT.'.checkout_terms',0 );
		if(!$status){
			$app->enqueueMessage(JText::_('PLEASE_ACCEPT_TERMS_BEFORE_FINISHING_ORDER'));
		}
		return $status;
	}

	function before_fields(){
		return true;
	}

	function after_fields(){
		if(hikashop_level(2)){
			$app = JFactory::getApplication();

			$old = $app->getUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok',0);
			$oldData = $app->getUserState(
HIKASHOP_COMPONENT.'.checkout_fields');
			$fieldClass = hikashop_get('class.field');
			$orderData =
$fieldClass->getInput('order',$oldData,!$this->cart_update);
			if($orderData!==false){
				$app->setUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok',1);
				$app->setUserState(
HIKASHOP_COMPONENT.'.checkout_fields',$orderData);
				$changed = false;
			}

			if((!$old&&$orderData===false) || (!empty($orderData) &&
$changed &&
$this->_getStep('confirm',(int)$this->previous)===(int)$this->previous)){
				return false;
			}
		}
		return true;
	}

	function check_fields(){
		if(hikashop_level(2)){
			$app = JFactory::getApplication();
			$status = (bool)$app->getUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok',0 );
			if(!$status){
				$app->enqueueMessage(JText::_('PLEASE_FILL_ADDITIONAL_INFO'));
			}
		}else{
			$status = true;
		}
		return $status;
	}

	function before_cart(){
		return true;
	}

	function after_cart($success){

		$modified = false;
		$formData = JRequest::getVar( 'item', array(), '',
'array' );
		$class = hikashop_get('class.cart');
		if(!empty($formData)){
			$modified = $class->update($formData,0,0,'item');
		}else{
			$formData = JRequest::getVar( 'data', array(), '',
'array' );
			if(!empty($formData)){
				$modified = $class->update($formData,0,0);
			}
		}
		if($modified){
			$class->get();
			if(strpos($this->checkout_workflow,'shipping')!==false){
				$this->before_shipping(true);
			}
			if(strpos($this->checkout_workflow,'payment')!==false){
				$this->before_payment(true);
			}
			$this->initCart(true);
			$this->cart_update = true;
			return false;
		}

		return true;
	}

	function check_cart(){
		return true;
	}

	function before_login(){
		if(count($this->controllers) == 1) {
			$user = JFactory::getUser();
			$app = JFactory::getApplication();
			$user_id = $app->getUserState(
HIKASHOP_COMPONENT.'.user_id' );
			if(!$user->guest || $user_id){

				$controllersCheck = trim($this->steps[$this->previous]);
				$controllersCheck = explode('_', $controllersCheck);
				$current = $this->current + 1;
				if(count($controllersCheck) == 1 && $controllersCheck[0] ==
'login')
					$current = $this->previous + 1;

				JRequest::setVar('step', $current);
				JRequest::setVar('previous', 0);

				$this->step();
			}
		}
		return true;
	}

	function after_login($success){
		$user = JFactory::getUser();
		$status = true;
		$app = JFactory::getApplication();
		$user_id=$app->getUserState( HIKASHOP_COMPONENT.'.user_id'
);
		if(!$this->cart_update && $user->guest &&
empty($user_id)){
			JPluginHelper::importPlugin('user');
			$register=JRequest::getString('register','');
			$action =
JRequest::getString('login_view_action','');
			if($action=='register' || ($action!='login'
&& !empty($register))){
				$status = $this->_doRegister();
			}else{
				$login=JRequest::getString('login','');
				if($action=='login' || !empty($login)){
					$status = $this->_doLogin();

				}else{
					$name =
@$_REQUEST['data']['register']['email'];
					$username = JRequest::getVar('username', '',
'request', 'username');
					if(!empty($name)){
						$status = $this->_doRegister();
					}elseif(!empty($username)){
						$status = $this->_doLogin();
					}
				}
			}
			if($status){
				if($this->_getStep('address',$this->previous)!==false
||
$this->_getStep('confirm',(int)$this->previous)===(int)$this->previous){
					$status = false;
				}
				if(!$this->before_address()){
					$status = false;
				}
				$this->before_login();
			}
		}
		return $status;
	}

	function _doRegister(){

		$class = hikashop_get('class.user');
		$status = $class->register($this);
		$app = JFactory::getApplication();
		if($status){
			$this->cart_update=true;
			$app->setUserState(
HIKASHOP_COMPONENT.'.user_id',$class->user_id );
			$config =& hikashop_config();
			$simplified = $config->get('simplified_registration',0);
			$display = $config->get('display_method',0);
			if(!hikashop_level(1)) $display = 0;
			if($display==1){
				$simplified = explode(',',$simplified);
				if($config->get('display_login',1)){
					$simplified[]='login';
				}
				if(count($simplified)==1){
					$simplified = array_shift($simplified);
				}else{
					$formData = JRequest::getVar( 'data', array(), '',
'array' );
					$simplified =
@$formData['register']['registration_method'];
				}
			}
			if($simplified!=2){
				$usersConfig = JComponentHelper::getParams( 'com_users' );
				$useractivation = $usersConfig->get( 'useractivation' );
				if ( $useractivation != 1 ) {
					$this->_doLogin($class->registerData->username,$class->registerData->password);
				}
			}
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_address',
0);
			$app->setUserState(HIKASHOP_COMPONENT.'.billing_address',
0);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0);
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_data',
null);
		}
		return $status;
	}

	function
_doLogin($user='',$pass='',$checkToken=true){
		$options = array();
		$options['remember'] = JRequest::getBool('remember',
false);
		$options['return'] = false;
		$credentials = array();
		if(empty($user)){
			$credentials['username'] =
JRequest::getVar('username', '', 'request',
'username');
		}else{
			$credentials['username'] = $user;
		}
		if(empty($pass)){
			$credentials['password'] =
JRequest::getString('passwd', '', 'request',
JREQUEST_ALLOWRAW);
		}else{
			$credentials['password'] = $pass;
		}

		$mainframe = JFactory::getApplication();
		$error = $mainframe->login($credentials, $options);

		$user = JFactory::getUser();

		if(JError::isError($error) || $user->guest){
			return false;
		}

		$this->cart_update=true;

		$class = hikashop_get('class.user');
		$user_id = $class->getID($user->get('id'));

		if($user_id){
			$app = JFactory::getApplication();
			$app->setUserState( HIKASHOP_COMPONENT.'.user_id',$user_id
);
		}
		return true;
	}

	function check_login() {
		$logged=(bool)hikashop_loadUser();
		if(!$logged){
			$app = JFactory::getApplication();
			$app->enqueueMessage( JText::_('LOGIN_OR_REGISTER_ACCOUNT')
);
		}
		return $logged;
	}

	function before_address() {
		$status = $this->_checkLogin();
		if($status) {
			$user_id = hikashop_loadUser();
			if($user_id){
				$app = JFactory::getApplication();
				$shipping = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address',0 );
				$billing = $app->getUserState(
HIKASHOP_COMPONENT.'.billing_address',0 );
				if(empty($shipping) || empty($billing)){

					$db = JFactory::getDBO();
					$db->setQuery('SELECT address_id FROM
'.hikashop_table('address').' WHERE address_published=1
AND address_user_id='.$user_id);
					$address_id = $db->loadResult();
					$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address',$address_id );
					$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address',$address_id );

					if(strpos($this->checkout_workflow,'shipping')!==false){
						if(!$this->before_shipping(true) &&
$this->_getStep('shipping',$this->previous)!==false){
							$status = false;
						}
					}
					if(strpos($this->checkout_workflow,'payment')!==false){
						if(!$this->before_payment(true) &&
$this->_getStep('payment',$this->previous)!==false){
							$status = false;
						}
					}
					$this->initCart(true);
					$this->cart_update = true;
					$this->initCart();
				}
			}
		}

		return $status;
	}

	function after_address($success){
		if($this->cart_update){
			return true;
		}
		$logged=(bool)hikashop_loadUser();
		if(!$logged){
			return true;
		}
		$billing = JRequest::getInt('hikashop_address_billing',0);

		if(empty($billing)){
			if(!$this->cart_update &&
!JRequest::getInt('removecoupon',0)){
				$app = JFactory::getApplication();
				JRequest::setVar( HIKASHOP_COMPONENT.'.address_error',1 );
				$app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS')
);
			}
			return false;
		}

		$shipping = JRequest::getInt('hikashop_address_shipping',0);
		if(JRequest::getString('same_address','')=='yes'||empty($shipping)){
			$shipping = $billing;
		}
		$app = JFactory::getApplication();
		$oldShippingAddress = (int)$app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address' );
		$oldBillingAddress = (int)$app->getUserState(
HIKASHOP_COMPONENT.'.billing_address' );
		$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address',$shipping );
		$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address',$billing );

		$shipping_address = (int)$app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address' );
		$billing_address = (int)$app->getUserState(
HIKASHOP_COMPONENT.'.billing_address' );

		if($shipping!=$oldShippingAddress){
			$cart = $this->initCart();
			if($cart->has_shipping){

				$this->cart_update=true;
				if(strpos($this->checkout_workflow,'shipping')!==false){
					$this->before_shipping(true);
				}
				if(strpos($this->checkout_workflow,'payment')!==false){
					$this->before_payment(true);
				}
				return false;
			}
		}
		if($billing!=$oldBillingAddress){
			return false;
		}

		return true;
	}

	function check_address(){
		$app = JFactory::getApplication();
		$shipping_address=$app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address' );
		if(empty($shipping_address)){
			JRequest::setVar( HIKASHOP_COMPONENT.'.address_error',1 );
			$app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS')
);
			return false;
		}
		return true;
	}

	function before_shipping($directCall = false) {
		$ok = true;
		if(!$directCall) {
			$ok = $this->_checkLogin();
			if(!$ok)
				return $ok;
		} else {
			$this->initCart(true);
		}
		$app = JFactory::getApplication();
		$shipping_address = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address');

		if(empty($shipping_address) && !$directCall) {
			$found = $this->_getStep('address');
			if($found !== false && $found != $this->current) {
				JRequest::setVar('step',$found);
				JRequest::setVar('previous',0);
				$this->step();
				return false;
			}
		}

		$shipping_methods =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
		$shipping_ids =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_id', null);

		if(empty($shipping_methods) || $this->cart_update) {
			$cart = $this->initCart();
			if($cart->has_shipping){
				$shippingClass = hikashop_get('class.shipping');
				$methods =& $shippingClass->getShippings($cart, $directCall);
				if(empty($methods))
					return $ok;

				$shipping_groups = $cart->shipping_groups; //
$shippingClass->getShippingGroups($cart, $methods);

				$reset_shipping = true;
				if($this->cart_update && !empty($shipping_methods)) {
					$found = false;
					$rates = array();
					foreach($shipping_groups as $key => $shipping_group) {
						$p = reset($shipping_group);
						foreach($methods as $m) {
								if(is_array($shipping_ids) && is_array($shipping_methods)
&& in_array($m->shipping_id.'@'.$key, $shipping_ids)
&& in_array($m->shipping_type.'@'.$key,
$shipping_methods)) {
									$found = true;
									$rates[] = $m;
								}
						}
					}
					if($found)
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
$rates);
					$reset_shipping = !$found;
				}

				if($reset_shipping) {
					$config =& hikashop_config();
					$auto_select_default =
$config->get('auto_select_default', 2);
					if($auto_select_default == 1 && count($methods) > 1)
						$auto_select_default = 0;
					$ok = false;
					if($auto_select_default) {
						$method = reset($methods);

						$shipping_methods = array();
						$shipping_ids = array();
						$rates = array();
						foreach($shipping_groups as $key => $shipping_group) {
							$p = reset($shipping_group->shippings);
							foreach($methods as $rate) {
								if($rate->shipping_id == $p &&
(!isset($rate->shipping_warehouse_id) || $rate->shipping_warehouse_id
=== $key)) {
									$rates[] = $rate;
									$shipping_ids[] = $rate->shipping_id.'@'.$key;
									$shipping_methods[] = $rate->shipping_type.'@'.$key;

									break;
								}
							}
						}
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
$shipping_methods);
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
$shipping_ids);
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
$rates);

						$this->initCart(true);
					} else {
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
						$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);
						if((empty($shipping_methods) && empty($shipping_ids)) ||
$directCall || isset($this->beforeControllers) &&
count($this->beforeControllers)==1)
							$ok = true;
					}

				}
			}
		}
		return $ok;
	}

	function after_shipping($success) {
		if($this->cart_update)
			return true;

		$cart = $this->initCart();
		if(!$cart->has_shipping)
			return true;

		$shipping = JRequest::getString('hikashop_shippings',
'');

		$app = JFactory::getApplication();
		$shippingClass = hikashop_get('class.shipping');
		$methods =& $shippingClass->getShippings($cart);
		if(empty($methods))
			return false;

		if($shipping != implode(';',
array_keys($cart->shipping_groups)) && !(empty($shipping)
&& implode(';', array_keys($cart->shipping_groups)) ==
'0')) {
			return false;
		}

		$shippings = array();
		$shipping_ids = array();
		$shipping_datas = array();
		$several_shipping = (count($cart->shipping_groups) > 1);
		if($several_shipping)
			$order_products = $cart->products;

		foreach($cart->shipping_groups as $group_key => $shipping_group) {
			$input_name = 'hikashop_shipping';
			if($several_shipping)
				$input_name .= '_'.$group_key;
			$shipping = JRequest::getString($input_name, null);
			if(empty($shipping))
				return false;

			$key_lng = strlen($group_key) + 1;
			if(substr($shipping, -$key_lng) == '_' . $group_key) {
				$shipping = substr($shipping, 0, strlen($shipping) - $key_lng);
			}

			$shipping = explode('_', $shipping);
			if(count($shipping) <= 1)
				return false;

			$shipping_id = array_pop($shipping);

			$shipping = implode('_', $shipping);
			if(empty($shipping))
				return false;

			$data = hikashop_import('hikashopshipping', $shipping);

			if($several_shipping) {
				$cart->products = $shipping_group->products;
				$rates_copy = array();
				foreach($methods as $rate) {
					if(!isset($rate->shipping_warehouse_id) ||
$rate->shipping_warehouse_id == $group_key)
						$rates_copy[] = clone($rate);
				}
				$shipping_data = $data->onShippingSave($cart, $rates_copy,
$shipping_id, $group_key);
				unset($rates_copy);
			} else {
				$shipping_data = $data->onShippingSave($cart, $methods,
$shipping_id);
			}

			if($shipping_data === false) {
				$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
				$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
				$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);
				return false;
			}

			$shippings[] = $shipping . '@' . $group_key;
			$shipping_ids[] = $shipping_id . '@' . $group_key;
			$shipping_datas[] = $shipping_data;
		}
		if($several_shipping)
			$cart->products = $order_products;

		$old_shipping_methods =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_method');
		$old_shipping_ids =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_id');
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
$shippings);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
$shipping_ids);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
$shipping_datas);

		if(($old_shipping_ids !== $shipping_ids || $old_shipping_methods !==
$shippings) && strpos($this->checkout_workflow,
'payment') !== false) {
			$this->cart_update = true;
			$this->initCart(true);
			$this->before_payment(true);
		}

		if(($old_shipping_ids !== $shipping_ids || $old_shipping_methods !==
$shippings) &&
($this->_getStep('cart',(int)$this->previous)===(int)$this->previous
||
$this->_getStep('confirm',(int)$this->previous)===(int)$this->previous))
{
			return false;
		}

		return true;
	}

	function check_shipping(){
		$app = JFactory::getApplication();
		$shipping_done=$app->getUserState(
HIKASHOP_COMPONENT.'.shipping_method');
		if(empty($shipping_done)){
			$shipping_done=false;
		}else{
			$shipping_done=true;
		}
		if(!$shipping_done){
			$cart = $this->initCart();
			if(!$cart->has_shipping){
				return true;
			}
			$app->enqueueMessage( JText::_('SELECT_SHIPPING') );
		}
		return $shipping_done;
	}

	function initCart($reset = false) {
		static $done = false;
		if($reset) {
			$done = false;
			return true;
		}
		if(!$done) {
			$cartClass = hikashop_get('class.cart');
			$done = $cartClass->loadFullCart(true);
			if(empty($done->products)) {
				$app = JFactory::getApplication();
				$app->redirect( $this->redirect_url,
JText::_('CART_EMPTY'));
			}
			$shippingClass = hikashop_get('class.shipping');
			$usable_rates =& $shippingClass->getShippings($done);
			if(empty($usable_rates) && empty($shippingClass->errors)) {
				$shipping = false;
			} else {
				$shipping = true;
			}
			$config =& hikashop_config();
			$done->has_shipping = $shipping ||
$config->get('force_shipping');
		}
		return $done;
	}

	function before_payment($directCall=false){
		$ok = true;
		if(!$directCall){
			$ok = $this->_checkLogin();
			if(!$ok){
				return $ok;
			}
		}

		$app = JFactory::getApplication();

		$payment_method = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_method','');
		$payment_id = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_id','');

		$cart = $this->initCart();

		if(empty($cart->full_total->prices[0]->price_value_with_tax) ||
bccomp($cart->full_total->prices[0]->price_value_with_tax,0,5)==0){
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method','');
			$app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0);
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data','');

			return true;
		}

		if(!empty($payment_method) &&
@$cart->payment->payment_params->payment_percentage != 0){
			$pluginsClass = hikashop_get('class.plugins');
			$rates = $pluginsClass->getMethods('payment');
			$price_all =
@$cart->full_total->prices[0]->price_value_with_tax;
			if(isset($cart->full_total->prices[0]->price_value_without_payment_with_tax)){
				$price_all =
@$cart->full_total->prices[0]->price_value_without_payment_with_tax;
			}
			$currencyClass = hikashop_get('class.currency');
			$currencyClass->convertPayments($rates);
			$cart->payment->payment_price = ($price_all *
(float)@$cart->payment->payment_params->payment_percentage / 100)
+ $rates[$payment_id]->payment_price;
		}

		if(empty($payment_method) || $this->cart_update){

			$payment =
JRequest::getString('hikashop_payment','');
			if(!empty($payment)){
				$payment = explode('_',$payment);
				if(count($payment)>1){
					$new_payment_id = array_pop($payment);
					$payment = implode('_',$payment);
					if($new_payment_id!=$payment_id || $payment!=$payment_method){
						$payment_method = $payment;
						$payment_id = $new_payment_id;
						$status = $this->_readPayment();
						if(!$directCall){
							return $status;
						}
					}
				}
			}

			$class = hikashop_get('class.payment');
			$methods = $class->getPayments($cart,$this->cart_update);

			if(!empty($methods)){
				$reset_payment=true;
				if($this->cart_update){
					$found = false;
					foreach($methods as $m){
						if($m->payment_id==$payment_id&&$m->payment_type==$payment_method){
							$found=true;
						}
					}
					$reset_payment = !$found;
				}
				if($reset_payment){
					$config =& hikashop_config();
					$auto_select_default =
$config->get('auto_select_default',2);
					if($auto_select_default==1 && count($methods)>1)
$auto_select_default=0;
					$ok = false;
					if($auto_select_default){
						$method = reset($methods);

						$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method',$method->payment_type);
						$app->setUserState(
HIKASHOP_COMPONENT.'.payment_id',$method->payment_id);
						$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data',$method);
					}else{
						$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method','');
						$app->setUserState(
HIKASHOP_COMPONENT.'.payment_id',0);
						$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data','');
						if(($payment_method=='' &&
$payment_id=='') || $directCall ||
!empty($this->beforeControllers) &&
count($this->beforeControllers)==1){
							$ok = true;
						}
					}
				}
			}
		}

		return $ok;
	}

	function after_payment($success){
		if($this->cart_update){
			return true;
		}
		$cart = $this->initCart();
		if(empty($cart->full_total->prices[0]->price_value_with_tax) ||
bccomp($cart->full_total->prices[0]->price_value_with_tax,0,5)==0){
			$app = JFactory::getApplication();
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method','');
			$app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0);
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data','');
			return true;
		}

		return $this->_readPayment();
	}

	function _readPayment(){

		$payment =
JRequest::getString('hikashop_payment','');
		if(empty($payment)){
			return false;
		}
		$payment = explode('_',$payment);
		if(count($payment)>1){
			$payment_id = array_pop($payment);
			$payment = implode('_',$payment);
			if(empty($payment)){
				return false;
			}

			$cart = $this->initCart();
			$pluginsClass = hikashop_get('class.plugins');
			$rates = $pluginsClass->getMethods('payment');

			$data = hikashop_import('hikashoppayment',$payment);
			$paymentData = $data->onPaymentSave($cart,$rates,$payment_id);
			if($paymentData===false){
				return false;
			}

			$app = JFactory::getApplication();
			$old_payment_method =
$app->getUserState(HIKASHOP_COMPONENT.'.payment_method');
			$old_payment_id =
$app->getUserState(HIKASHOP_COMPONENT.'.payment_id');
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method',$payment);
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_id',$payment_id);
			$price_all =
@$cart->full_total->prices[0]->price_value_with_tax;
			if(isset($cart->full_total->prices[0]->price_value_without_payment_with_tax)){
				$price_all =
@$cart->full_total->prices[0]->price_value_without_payment_with_tax;
			}
			$currencyClass = hikashop_get('class.currency');
			$currencyClass->convertPayments($rates);
			$paymentData->payment_price = ($price_all *
(float)@$paymentData->payment_params->payment_percentage / 100) +
$paymentData->payment_price;
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data',$paymentData);

			if(!empty($paymentData->ask_cc)){
				$paymentClass = hikashop_get('class.payment');
				$paymentClass->readCC();
			}

			if(($old_payment_id!=$payment_id || $old_payment_method!=$payment)
&&
($this->_getStep('cart',(int)$this->previous)===(int)$this->previous
||
$this->_getStep('confirm',(int)$this->previous)===(int)$this->previous)){
				return false;
			}
			return true;
		}else{
			return false;
		}
	}

	function check_payment(){
		$cart = $this->initCart();
		$app = JFactory::getApplication();
		if(empty($cart->full_total->prices[0]->price_value_with_tax) ||
bccomp($cart->full_total->prices[0]->price_value_with_tax,0,5)==0){
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method','');
			$app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0);
			$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data','');
			return true;
		}

		$payment=$app->getUserState(
HIKASHOP_COMPONENT.'.payment_method');
		if(empty($payment)){
			$payment_done=false;
		}else{
			$payment_done=true;
		}
		if(!$payment_done){
			$app = JFactory::getApplication();
			$app->enqueueMessage( JText::_('SELECT_PAYMENT') );
		}else{
			$paymentData = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_data');
			if(!empty($paymentData->ask_cc)){
				$cc_number=$app->getUserState(
HIKASHOP_COMPONENT.'.cc_number');
				$cc_month=$app->getUserState(
HIKASHOP_COMPONENT.'.cc_month');
				$cc_year=$app->getUserState(
HIKASHOP_COMPONENT.'.cc_year');
				$cc_CCV=$app->getUserState(
HIKASHOP_COMPONENT.'.cc_CCV');
				$cc_owner=$app->getUserState(
HIKASHOP_COMPONENT.'.cc_owner');
				if(empty($cc_number) || empty($cc_month) || empty($cc_year) ||
(empty($cc_CCV)&&!empty($paymentData->ask_ccv)) ||
(empty($cc_owner)&&!empty($paymentData->ask_owner))){
					$app =& JFactory::getApplication();
					$app->enqueueMessage( JText::_('FILL_CREDIT_CARD_INFO')
);
					$payment_done=false;
				}
			}
		}
		return $payment_done;
	}

	function _checkToken(){
		static $done = false;
		if(!$done){
			$done = true;
			JRequest::checkToken('request') || jexit( 'Invalid
Token' );
		}
	}

	function notify(){
		ob_start();
		$payment = JRequest::getCmd('notif_payment');
		$data = hikashop_import('hikashoppayment',$payment);
		if(!empty($data)){
			$trans = hikashop_get('helper.translation');
			$cleaned_statuses = $trans->getStatusTrans();
			$data = $data->onPaymentNotification($cleaned_statuses);
		}
		$dbg=ob_get_clean();
		if(!empty($dbg)){
			$config =& hikashop_config();
			jimport('joomla.filesystem.file');
			$file = $config->get('payment_log_file','');

			$file = rtrim(JPath::clean(html_entity_decode($file)),DS.'
');
			if(!preg_match('#^([A-Z]:)?/.*#',$file)){
				if(!$file[0]=='/' || !file_exists($file)){
					$file = JPath::clean(HIKASHOP_ROOT.DS.trim($file,DS.' '));
				}
			}

			if(!empty($file) && defined('FILE_APPEND')){
				if (!file_exists(dirname($file))) {
					jimport('joomla.filesystem.folder');
					JFolder::create(dirname($file));
				}
				file_put_contents($file,$dbg,FILE_APPEND);
			}
		}
		if(is_string($data) && !empty($data)){
			echo $data;
		}
	}
	function threedsecure(){
		ob_start();
		$payment = JRequest::getCmd('3dsecure_payment');
		$data = hikashop_import('hikashoppayment',$payment);
		if(!empty($data)){
			$trans = hikashop_get('helper.translation');
			$cleaned_statuses = $trans->getStatusTrans();
			$data = $data->onThreeDSecure($cleaned_statuses);
		}
		$dbg=ob_get_clean();
		if(!empty($dbg)){
			$config =& hikashop_config();
			jimport('joomla.filesystem.file');
			$file = $config->get('payment_log_file','');
			$file = rtrim(JPath::clean(html_entity_decode($file)),DS.'
');
			if(!preg_match('#^([A-Z]:)?/.*#',$file)){
				if(!$file[0]=='/' || !file_exists($file)){
					$file = JPath::clean(HIKASHOP_ROOT.DS.trim($file,DS.' '));
				}
			}
			if(!empty($file) && defined('FILE_APPEND')){
				if (!file_exists(dirname($file))) {
					jimport('joomla.filesystem.folder');
					JFolder::create(dirname($file));
				}
				file_put_contents($file,$dbg,FILE_APPEND);
			}
		}
		if(is_string($data) && !empty($data)){
			echo $data;
		}
	}
	function before_confirm(){
		foreach($this->steps as $i => $step){
			if(intval($i)!=intval($this->current)){
				$this->_checkStep(trim($step),$i);
			}
		}
		return true;
	}

	function _checkStep($step,$i){
		$controllers = explode('_',$step);
		$ok = true;
		foreach($controllers as $controller){
			$fct = 'check_'.trim($controller);
			if(method_exists($this,$fct)){
				if(!$this->$fct()){
					$ok = false;

				}
			}
		}

		if(!$ok){
			$this->setRedirect(
hikashop_completeLink('checkout&task=step&step='.$i,false,true));
			$this->redirect();
		}
	}

	function after_confirm($success){
		if(!$success){
			return false;
		}
		if(!JRequest::getVar('hikashop_validate',1)){
			return false;
		}
		if($this->current==$this->previous){
			return true;
		}
		foreach($this->steps as $i => $step){
			$this->_checkStep(trim($step),$i);
		}

		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$config =& hikashop_config();
		$pluginsClass = hikashop_get('class.plugins');

		$cart = $this->initCart();

		$shippings = array();
		$shipping = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_method');
		$shipping_id = $app->getUserState(
HIKASHOP_COMPONENT.'.shipping_id');
		if(!empty($shipping)) {
			foreach($shipping as $ship) {
				$ship = explode('@', $ship, 2);
				$current_id = 0;
				foreach($shipping_id as $sid) {
					list($i, $k) = explode('@', $sid, 2);
					if($k == $ship[1]) {
						$current_id = $i;
						break;
					}
				}
				$shippings[$ship[1]] = array('id' => $current_id,
'name' => $ship[0]);
			}

			$shippingClass = hikashop_get('class.shipping');
			$methods =& $shippingClass->getShippings($cart);
			$shipping_groups = $shippingClass->getShippingGroups($cart,
$methods);
		}

		$payment = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_method');
		$payment_id = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_id');

		$ids = array();
		foreach($cart->products as $product){
			if($product->cart_product_quantity>0 &&
$product->product_type=='variant'){
				$ids[$product->product_id]=$product->product_id;
			}
		}
		if(!empty($ids)){
			$database = JFactory::getDBO();
			$query = 'SELECT a.variant_product_id as
product_id,b.characteristic_id as value_id,b.characteristic_value as
value,c.characteristic_id as name_id,c.characteristic_value as name FROM
'.hikashop_table('variant').' AS a LEFT JOIN
'.hikashop_table('characteristic').' AS b ON
a.variant_characteristic_id=b.characteristic_id LEFT JOIN
'.hikashop_table('characteristic').' AS c ON
b.characteristic_parent_id = c.characteristic_id WHERE a.variant_product_id
IN ('.implode(',',$ids).')';
			$database->setQuery($query);
			$characteristics = $database->loadObjectList();
			if(!empty($characteristics)){
				foreach($characteristics as $characteristic){
					foreach($cart->products as $k => $product){
						if($product->product_id == $characteristic->product_id){
							if(empty($product->characteristics)){
								$product->characteristics = array($characteristic->name =>
$characteristic->value);
							}else{
								$product->characteristics[$characteristic->name] =
$characteristic->value;
							}
						}
					}
				}
			}
		}
		if(hikashop_level(2)){
			$element=null;
			$fieldsClass = hikashop_get('class.field');
			$itemFields =
$fieldsClass->getFields('',$element,'item');
		}

		$products = array();
		foreach($cart->products as $product) {
			if($product->cart_product_quantity > 0) {
				$orderProduct = new stdClass();
				$orderProduct->product_id = $product->product_id;
				$orderProduct->order_product_quantity =
$product->cart_product_quantity;
				$orderProduct->order_product_name = $product->product_name;
				$orderProduct->cart_product_id = $product->cart_product_id;
				$orderProduct->cart_product_option_parent_id =
$product->cart_product_option_parent_id;
				$orderProduct->order_product_code = $product->product_code;
				$orderProduct->order_product_price =
@$product->prices[0]->unit_price->price_value;
				$orderProduct->order_product_wishlist_id =
$product->cart_product_wishlist_id;
				$orderProduct->product_subscription_id =
@$product->product_subscription_id;

				$tax = 0;
				if(!empty($product->prices[0]->unit_price->price_value_with_tax)
&&
bccomp($product->prices[0]->unit_price->price_value_with_tax,0,5))
					$tax =
$product->prices[0]->unit_price->price_value_with_tax-$product->prices[0]->unit_price->price_value;
				$orderProduct->order_product_tax = $tax;

				$characteristics = '';
				if(!empty($product->characteristics))
					$characteristics = serialize($product->characteristics);
				$orderProduct->order_product_options = $characteristics;

				if(!empty($product->discount))
					$orderProduct->discount = $product->discount;

				if(!empty($itemFields)) {
					foreach($itemFields as $field) {
						$namekey = $field->field_namekey;
						if(isset($product->$namekey))
							$orderProduct->$namekey = $product->$namekey;
					}
				}

				if(isset($product->prices[0]->unit_price->taxes))
					$orderProduct->order_product_tax_info =
$product->prices[0]->unit_price->taxes;

				if(isset($product->files))
					$orderProduct->files =& $product->files;

				if(!empty($shipping)) {
					$shipping_done = false;
					foreach($shipping_groups as $group_key => $group_products) {
						foreach($group_products->products as $group_product) {
							if((int)$group_product->cart_product_id ==
(int)$product->cart_product_id) {
								$orderProduct->order_product_shipping_id =
$shippings[$group_key]['id'] . '@' . $group_key;
								$orderProduct->order_product_shipping_method =
$shippings[$group_key]['name'];
								$shipping_done = true;
								break;
							}
						}
						if($shipping_done)
							break;
					}
				}
				$products[] = $orderProduct;
			}
		}
		$cart->products = &$products;

		foreach($cart->products as $cartContent){
			if((int)$cartContent->order_product_wishlist_id != 0){
				$query = 'SELECT * FROM
'.hikashop_table('cart_product').' WHERE  cart_id
='.(int)$cartContent->order_product_wishlist_id.' AND
product_id='.(int)$cartContent->product_id;
				$db->setQuery($query);
				$wishlistData = $db->loadObject();
				$quantity = $wishlistData->cart_product_quantity -
$cartContent->order_product_quantity;
				if($quantity < 0)
					$quantity = 0;

				$query = 'UPDATE
'.hikashop_table('cart_product').' SET
cart_product_quantity = '.(int)$quantity.' WHERE cart_id
='.(int)$cartContent->order_product_wishlist_id.' AND
product_id='.(int)$cartContent->product_id;
			}
		}

		$shipping_address=$app->getUserState(
HIKASHOP_COMPONENT.'.shipping_address');
		$billing_address=$app->getUserState(
HIKASHOP_COMPONENT.'.billing_address');
		$main_currency = (int)$config->get('main_currency',1);
		$currency_id = (int)$app->getUserState(
HIKASHOP_COMPONENT.'.currency_id', $main_currency);

		$order = new stdClass();
		$order->order_user_id = @hikashop_loadUser();
		$order->order_status =
$config->get('order_created_status');
		$order->order_shipping_address_id = $shipping_address;
		$order->order_billing_address_id = $billing_address;
		$order->order_discount_code = @$cart->coupon->discount_code;
		$order->order_currency_id =
$cart->full_total->prices[0]->price_currency_id;
		$order->order_type = 'sale';
		$order->order_full_price =
$cart->full_total->prices[0]->price_value_with_tax;
		$order->order_tax_info =
@$cart->full_total->prices[0]->taxes;

		$order->order_shipping_price = 0.0;
		$order->order_shipping_tax = 0.0;
		$order->order_shipping_params = null;
		if(!empty($cart->shipping)) {
			$order->order_shipping_params = new stdClass();
			$order->order_shipping_params->prices = array();
			foreach($cart->shipping as $cart_shipping) {
				$price_key = $cart_shipping->shipping_id;
				if(isset($cart_shipping->shipping_warehouse_id))
					$price_key .= '@' .
$cart_shipping->shipping_warehouse_id;

				$order->order_shipping_params->prices[$price_key] = new
stdClass();
				$order->order_shipping_params->prices[$price_key]->price_with_tax
= $cart_shipping->shipping_price_with_tax;

				$order->order_shipping_price +=
$cart_shipping->shipping_price_with_tax;

				if(!empty($cart_shipping->shipping_price_with_tax) &&
!empty($cart_shipping->shipping_price)) {
					$order->order_shipping_tax +=
$cart_shipping->shipping_price_with_tax -
$cart_shipping->shipping_price;
					$order->order_shipping_params->prices[$price_key]->tax =
$cart_shipping->shipping_price_with_tax -
$cart_shipping->shipping_price;
					if(!empty($cart_shipping->taxes)) {
						$order->order_shipping_params->prices[$price_key]->taxes =
array();
						foreach($cart_shipping->taxes as $tax) {
							$order->order_shipping_params->prices[$price_key]->taxes[$tax->tax_namekey]
= $tax->tax_amount;
							if(isset($order->order_tax_info[$tax->tax_namekey])) {
								if(empty($order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping))
									$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
= 0;
								$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
+= $tax->tax_amount;
							} else {
								$order->order_tax_info[$tax->tax_namekey] = $tax;
								$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
								$order->order_tax_info[$tax->tax_namekey]->tax_amount =
0;
							}
						}
					}
				}
			}
		}

		$order->order_payment_price = @$cart->payment->payment_price;
		$discount_price = 0;
		$discount_tax=0;

		if(!empty($cart->coupon)&&
!empty($cart->coupon->total->prices[0]->price_value_without_discount_with_tax)){
			$discount_price=@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_with_tax;
			if(!empty($cart->coupon->total->prices[0]->price_value_with_tax)&&!empty($cart->coupon->total->prices[0]->price_value)){
				$discount_tax =
(@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_without_discount)-(@$cart->coupon->total->prices[0]->price_value_with_tax-@$cart->coupon->total->prices[0]->price_value);
				if(isset($cart->coupon->taxes)){
					foreach($cart->coupon->taxes as $tax){
						if(isset($order->order_tax_info[$tax->tax_namekey])){
							$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon
= $tax->tax_amount;
						}else{
							$order->order_tax_info[$tax->tax_namekey]=$tax;
							$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
							$order->order_tax_info[$tax->tax_namekey]->tax_amount = 0;
						}
					}
				}
			}
		}
		$order->order_discount_tax = $discount_tax;
		$order->order_discount_price = $discount_price;
		$order->order_shipping_id = $shipping_id;
		$order->order_shipping_method = $shipping;
		$order->order_payment_id = $payment_id;
		$order->order_payment_method = $payment;
		$order->cart =& $cart;
		$order->history = new stdClass();
		$order->history->history_reason =
JText::_('ORDER_CREATED');
		$order->history->history_notified = 0;
		$order->history->history_type = 'creation';
		$app = JFactory::getApplication();
		if(hikashop_level(2)) {
			$orderData = $app->getUserState(
HIKASHOP_COMPONENT.'.checkout_fields');
			if(!empty($orderData)){
				foreach(get_object_vars($orderData) as $key => $val){
					$order->$key = $val;
				}
			}

		}

		if(!empty($shippings)) {
			if(count($shippings) == 1) {
				$s = reset($shippings);
				$order->order_shipping_id = $s['id'];
				$order->order_shipping_method = $s['name'];
			} else {
				$ids = array();
				foreach($shippings as $key => $ship)
					$ids[] = $ship['id'] . '@' . $key;
				$order->order_shipping_id = implode(';', $ids);
				$order->order_shipping_method = '';
			}
		}

		$orderClass = hikashop_get('class.order');
		$order->order_id = $orderClass->save($order);
		$removeCart = false;
		if(empty($order->order_id))
			return false;
		$app->setUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok',0);
		$entriesData = $app->getUserState(
HIKASHOP_COMPONENT.'.entries_fields');
		if(!empty($entriesData)){
			$entryClass = hikashop_get('class.entry');
			foreach($entriesData as $entryData){
				$entryData->order_id = $order->order_id;
				$entryClass->save($entryData);
			}
			$app->setUserState(
HIKASHOP_COMPONENT.'.entries_fields',null);
		}

		if(!empty($payment)){
			$query = 'SELECT * FROM
'.hikashop_table('payment').' WHERE
payment_type='.$db->Quote($payment);
			$db->setQuery($query);
			$paymentData = $db->loadObjectList('payment_id');
			$pluginsClass->params($paymentData,'payment');
		}else{
			$paymentData = null;
		}
		if(!empty($shipping)) {
			$shippings_quoted = array();
			foreach($shippings as $ship) {
				$shippings_quoted[] = $db->Quote($ship['name']);
			}
			$query = 'SELECT * FROM
'.hikashop_table('shipping').' WHERE shipping_type IN
(' . implode(',', $shippings_quoted) . ')';
			$db->setQuery($query);
			$shippingData = $db->loadObjectList('shipping_id');
			$pluginsClass->params($shippingData,'shipping');
		} else {
			$shippingData = null;
		}

		ob_start();
		if(!empty($shippingData)) {
			foreach($shippings as $ship) {
				$data = hikashop_import('hikashopshipping',
$ship['name']);
				$data->onAfterOrderConfirm($order, $shippingData,
$ship['id']);
				if(!empty($data->removeCart))
					$removeCart = true;
			}
		}
		if(!empty($paymentData)){
			$data = hikashop_import('hikashoppayment',$payment);
			$data->onAfterOrderConfirm($order, $paymentData, $payment_id);
			if(!empty($data->removeCart)){
				$removeCart = true;
			}
		}
		JRequest::setVar('hikashop_plugins_html',ob_get_clean());

		$app->setUserState( HIKASHOP_COMPONENT.'.order_id',
$order->order_id);

		if($config->get('clean_cart','order_created') ==
'order_created' || $removeCart) {
			$cart_id = $app->getUserState(
HIKASHOP_COMPONENT.'.cart_id');
			if($cart_id) {
				$class = hikashop_get('class.cart');
				$class->delete($cart_id);
				$app->setUserState( HIKASHOP_COMPONENT.'.cart_id',0);
			}
			$app->setUserState( HIKASHOP_COMPONENT.'.coupon_code',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_number',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_month',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_year',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_CCV',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_type',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_owner',
'');
			$app->setUserState( HIKASHOP_COMPONENT.'.cc_valid', 0);
			$app->setUserState( HIKASHOP_COMPONENT.'.checkout_terms',
0);
			$app->setUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok', 0);
			$app->setUserState( HIKASHOP_COMPONENT.'.checkout_fields',
null);
			$user = JFactory::getUser();
			if($user->guest) {
				$app->setUserState( HIKASHOP_COMPONENT.'.user_id', 0);
			}
		}
		return true;
	}

	function before_status(){
		return true;
	}

	function after_status(){
		return true;
	}

	function check_status(){
		return true;
	}

	function before_end(){
		$app = JFactory::getApplication();
		$order = $app->getUserState(
HIKASHOP_COMPONENT.'.order_id',0);
		if(empty($order)){
			return $this->after_confirm(true);
		}
		return true;
	}

	function after_end(){
		if(!isset($this->current)){
			$class = hikashop_get('class.cart');
			$class->cleanCartFromSession();
			JRequest::setVar( 'layout', 'after_end' );
			return $this->display();
		}
		return true;
	}

	function _checkLogin(){
		if(count($this->controllers)==1){
			$user = JFactory::getUser();
			$app = JFactory::getApplication();
			$user_id=$app->getUserState( HIKASHOP_COMPONENT.'.user_id'
);
			if($user->guest && empty($user_id)){
				$found = $this->_getStep('login');
				if($found!==false){
					JRequest::setVar('step',$found);
					JRequest::setVar('previous',0);
					unset($_REQUEST['previous']);
					$this->step();
					return false;
				}else{
					$userData = new stdClass();
					$userData->user_created_ip = hikashop_getIP();
					$class=hikashop_get('class.user');
					$userData->user_id = $class->save($userData);
					$app->setUserState(
HIKASHOP_COMPONENT.'.user_id',$userData->user_id );
				}

			}
		}
		return true;
	}

	function _getStep($search,$onStep=null){
		$found = false;
		foreach($this->steps as $k => $step){

			if(isset($onStep) && $onStep!=$k) continue;
			if(strpos($step,$search)!==false){
				$found = $k;
				break;
			}
		}
		return $found;
	}
	function display($cachable = false, $urlparams = array()){
		static $done = false;
		$result = true;
		if(!$done){
			$done = true;
			$result = parent::display();
		}
		return $result;
	}
}
checkout_legacy.php000064400000164761151200171270010421 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	4.4.1
 * @author	hikashop.com
 * @copyright	(C) 2010-2021 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 checkoutLegacyController extends hikashopController {
	var $cart_update = false;
	var $modify_views = array();
	var $add = array();
	var $modify = array();
	var $delete = array();
	var $controllers = array();

	var $checkout_workflow = null;
	var $steps = null;
	var $redirect_url = null;

	function __construct($config = array(), $skip = false) {
		parent::__construct($config, $skip);
		$this->display =
array('convert','step','notice','state','deleteaddress','notify','after_end','activate_page','activate','resetcart','threedsecure','printcart','termsandconditions','show','privacyconsent','');
		if(!$skip) {
			$this->registerDefaultTask('step');
		}

		$conf =& hikashop_config();
		$this->checkout_workflow =
trim($conf->get('checkout','login_address_shipping_payment_coupon_cart_status_confirm,end'));
		$this->steps = explode(',',$this->checkout_workflow);
		$this->redirect_url =
$conf->get('redirect_url_when_cart_is_empty');
		$this->redirect_url = hikashop_translate($this->redirect_url);

		if(!empty($this->redirect_url)) {
			if(!preg_match('#^https?://#',$this->redirect_url))
				$this->redirect_url =
JURI::base().ltrim($this->redirect_url,'/');
			$this->redirect_url = JRoute::_($this->redirect_url,false);
		} else {
			global $Itemid;
			$url = '';
			$itemid_to_use = $Itemid;
			$menuClass = hikashop_get('class.menus');
			if(!empty($itemid_to_use))
				$ok = $menuClass->loadAMenuItemId('product',
'listing', $itemid_to_use);
			if(empty($ok))
				$ok = $menuClass->loadAMenuItemId('product',
'listing');
			if($ok)
				$itemid_to_use = $ok;

			if(!empty($itemid_to_use))
				$url = '&Itemid=' . $itemid_to_use;
			$this->redirect_url =
hikashop_completeLink('product&task=listing' . $url, false,
true);
		}
	}

	function authorize($task) {
		return $this->isIn($task, array('display'));
	}

	public function privacyconsent() {
		hikaInput::get()->set('layout',
'privacyconsent');
		return $this->display();
	}

	function printcart() {
		hikaInput::get()->set('layout', 'printcart');
		return parent::display();
	}
	function activate_page() {
		hikaInput::get()->set('layout', 'activate_page');
		return parent::display();
	}

	function state() {
		hikaInput::get()->set('layout', 'state');
		return parent::display();
	}

	function notice() {
		$cart_type =
hikaInput::get()->post->getVar('cart_type','');
		if(!empty($cart_type)){
			$app = JFactory::getApplication();
			$app->setUserState(
HIKASHOP_COMPONENT.'.popup_cart_type',$cart_type);
		}
		hikaInput::get()->set( 'layout', 'notice' );
		return parent::display();
	}

	function resetcart() {
		$cart = hikashop_get('class.cart');
		$cart->resetCart();
		$app = JFactory::getApplication();
		$app->redirect( $this->redirect_url );
	}

	function activate() {
		$app = JFactory::getApplication();
		$db			= JFactory::getDBO();
		$user 		= JFactory::getUser();
		$usersConfig = JComponentHelper::getParams( 'com_users' );
		$userActivation			= $usersConfig->get('useractivation');
		$allowUserRegistration	=
$usersConfig->get('allowUserRegistration');

		if ($user->get('id')) {
			$app->redirect(
hikashop_completeLink('checkout',false,true) );
		}

		if ($allowUserRegistration == '0' || $userActivation ==
'0') {
			$app->enqueueMessage(JText::_('Access Forbidden'),
'error');
			return;
		}

		$lang = JFactory::getLanguage();
		$lang->load('com_user',JPATH_SITE);
		jimport('joomla.user.helper');

		$activation =
hikashop_getEscaped(hikaInput::get()->getVar('activation',
'', '', 'alnum'));
		if (empty($activation)) {
			$app->enqueueMessage(JText::_('HIKA_REG_ACTIVATE_NOT_FOUND'));
			return;
		}

		if(HIKASHOP_J30) {
			JModelLegacy::addIncludePath(HIKASHOP_ROOT . DS . 'components'
. DS . 'com_users' . DS . 'models');
		} else {
			JModel::addIncludePath(HIKASHOP_ROOT . DS . 'components' . DS
. 'com_users' . DS . 'models');
		}
		$model = $this->getModel('Registration',
'UsersModel',array(),true);
		$language = JFactory::getLanguage();
		$language->load('com_users', JPATH_SITE,
$language->getTag(), true);
		if($model)
			$result = $model->activate($activation);


		if(!$result) {
			$app->enqueueMessage(JText::_(
'HIKA_REG_ACTIVATE_NOT_FOUND' ));
			return;
		}

		$app->enqueueMessage(JText::_( 'HIKA_REG_ACTIVATE_COMPLETE'
));
		$id = hikaInput::get()->getInt('id',0);

		$userClass = hikashop_get('class.user');
		$user = $userClass->get($id);
		if($id &&
file_exists(JPATH_ROOT.DS.'components'.DS.'com_comprofiler'.DS.'comprofiler.php')
&& $userActivation < 2) {
			$userClass->addAndConfirmUserInCB($user);
		}

		$infos = hikaInput::get()->getVar('infos','');
		global $Itemid;
		$url = (!empty($Itemid) ? '&Itemid='.$Itemid :
'');

		if(!empty($infos) && function_exists('json_decode')) {
			$infos = json_decode(base64_decode($infos), true);

			if(empty($infos['pass']) &&
!empty($infos['passwd']))
				$infos['pass'] = $infos['passwd'];

			JPluginHelper::importPlugin('user');
			if($userActivation < 2 && !empty($infos['pass'])
&& !empty($infos['username']) &&
$this->_doLogin($infos['username'], $infos['pass'],
false)) {
				$page =
hikaInput::get()->getString('page','checkout');

				if($page == 'checkout'){
					$this->before_address();
					$app->redirect(
hikashop_completeLink('checkout'.$url,false,true) );
					return;
				}

				hikaInput::get()->set('layout', 'activate');
				return parent::display();

			} elseif($userActivation >= 2) {
				$app->enqueueMessage(JText::_(
'HIKA_ADMIN_CONFIRM_ACTIVATION' ));
			}
		}

		$url = 'index.php?option=com_users&view=login'.$url;
		$app->redirect( JRoute::_($url, false) );
	}

	function deleteaddress() {
		$addressdelete = hikaInput::get()->getInt('address_id', 0);
		if(empty($addressdelete)) {
			$this->step();
			return;
		}

		JSession::checkToken('request') || die('Invalid
Token');
		$addressClass = hikashop_get('class.address');
		$oldData = $addressClass->get($addressdelete);
		if(empty($oldData)) {
			$this->step();
			return;
		}

		$user_id = hikashop_loadUser();
		if($user_id != $oldData->address_user_id) {
			$this->step();
			return;
		}

		$addressClass->delete($addressdelete);

		$app = JFactory::getApplication();

		$oldShip =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_address');
		if($oldShip == $addressdelete) {
			$app->setUserState( HIKASHOP_COMPONENT.'.shipping_address',
0);
		}
		$oldBill =
$app->getUserState(HIKASHOP_COMPONENT.'.billing_address');
		if($oldBill == $addressdelete) {
			$app->setUserState( HIKASHOP_COMPONENT.'.billing_address',
0);
		}

		$this->step();
		return;
	}

	function convert() {
		$cartClass = hikashop_get('class.cart');
		$cart = $cartClass->get();

		$result = $cartClass->convert($cart->cart_id);

		if($result) {
			$app = JFactory::getApplication();
			$app->setUserState(HIKASHOP_COMPONENT.'.cart_id', 0);
			$app->setUserState(HIKASHOP_COMPONENT.'.wishlist_id',
$cart->cart_id);
		}

		global $Itemid;
		$url = (!empty($Itemid) ? '&Itemid=' . $Itemid :
'');

		$url = hikashop_completeLink('wishlist&refresh=true',
false, true);
		$this->setRedirect($url);
	}

	function step() {
		hikashop_nocache();

		if(isset($_POST['unique_id'])) {
			$unique_id = $_POST['unique_id'];
			$ck_submital = isset($_SESSION['ck_submital']) ?
$_SESSION['ck_submital'] : array();
			static $done = false;

			if(!$done && isset($ck_submital[$unique_id])) {
				hikaInput::get()->set('step',
hikaInput::get()->getInt('previous', 0));
				hikaInput::get()->set('layout', 'step');
				return $this->display();
			}

			$ck_submital[$unique_id] = true;
			$_SESSION['ck_submital'] = $ck_submital;
			$done = true;
		}

		$cartClass = hikashop_get('class.cart');
		$cart = $cartClass->get(0);

		if(empty($cart->cart_id)) {
			$this->setRedirect($this->redirect_url,
JText::_('CART_EMPTY'));
			return true;
		}

		$config =& hikashop_config();
		$app = JFactory::getApplication();

		global $Itemid;
		$redirect = false;
		$ssl = false;
		$new_item_id = (int)$Itemid;
		$itemid_for_checkout = $config->get('checkout_itemid', 0);

		if(!empty($itemid_for_checkout)) {
			if($new_item_id != $itemid_for_checkout &&
empty($_SESSION['hikashop_new_itemid'])) {
				$new_item_id = $itemid_for_checkout;
				$_SESSION['hikashop_new_itemid'] = $new_item_id;
				$redirect = true;
			} else {
				$_SESSION['hikashop_new_itemid'] = '';
			}
		}

		if(($config->get('force_ssl', 0) == 1 ||
$config->get('force_ssl', 0) == 'url') &&
$app->getUserState('com_hikashop.ssl_redirect') != 1) {
			if( !hikashop_isSSL()) {
				$ssl = 1;
				$redirect = true;

				$app->setUserState('com_hikashop.ssl_redirect', 1);
			}
		}

		if($redirect) {
			$url = (!empty($new_item_id) ? '&Itemid='.$new_item_id :
'');

			if($config->get('force_ssl', 0) != 'url') {
				$this->setRedirect(
JRoute::_('index.php?option='.HIKASHOP_COMPONENT.'&ctrl=checkout'.$url,
false, $ssl));
				return true;
			}

			$url = $config->get('force_ssl_url');
			$url = str_replace('http://', 'https://', $url);

			if(strpos($url, 'https://') === false)
				$url = 'https://' . $url;

			$requestUri = $_SERVER['PHP_SELF'];
			$str_start = strpos($requestUri,'index.php');
			if(strpos($requestUri, 'index.php') != 0)
				$requestUri = substr($requestUri, $str_start-1, strlen($requestUri));
			if(!empty($_SERVER['QUERY_STRING']))
				$requestUri = rtrim($requestUri, '/') . '?' .
$_SERVER['QUERY_STRING'];

			$app->redirect($url . $requestUri);
			return true;
		}

		$go_back = false;
		$this->previous = hikaInput::get()->getInt('previous',
0);
		$this->current = hikaInput::get()->getInt('step', 0);

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

		if(isset($_REQUEST['previous'])) {
			if(!isset($this->steps[$this->previous]))
				$this->previous = 0;

			$this->controllers = trim($this->steps[$this->previous]);
			$this->controllers = explode('_', $this->controllers);

			$newArray = array();
			$found = false;
			$cart = false;
			$coupon = false;
			$login = false;
			$address = false;

			foreach($this->controllers as $v) {
				if($v == 'confirm') {
					$found = true;
				} elseif($v == 'cart') {
					$cart = true;
				} elseif($v=='login') {
					$login = true;
				} elseif($v == 'address') {
					$address = true;
				} elseif($v == 'coupon') {
					$coupon = true;
				} else {
					$newArray[] = $v;
				}
			}

			if($cart)
				array_unshift($newArray, 'cart');
			if($coupon)
				array_unshift($newArray, 'coupon');
			if($login)
				array_unshift($newArray, 'login');
			if($address)
				array_unshift($newArray, 'address');
			if($found)
				$newArray[] = 'confirm';

			$this->controllers = $newArray;
			$this->beforeControllers = $newArray;

			foreach($this->controllers as $controller) {
				$method = 'after_'.trim($controller);
				$original_go_back = $go_back;

				if(method_exists($this,$method)) {
					if(!$this->$method(!$go_back)) {
						$go_back = true;
					}
				} else {
					$obj =& $this;
					$app->triggerEvent('onAfterCheckoutStep',
array($controller, &$go_back, $original_go_back, &$obj));
				}
			}
		} elseif($this->previous == 0) {
			$auto_select_default = $config->get('auto_select_default',
2);
			if($auto_select_default) {
				$this->before_shipping(true);
				$this->before_payment(true);
			}
		}

		if(!$go_back) {
			$this->controllers = trim(@$this->steps[$this->current]);
			$this->controllers = explode('_', $this->controllers);

			foreach($this->controllers as $controller) {
				$method = 'before_'.trim($controller);
				$original_go_back = $go_back;

				if(method_exists($this, $method)) {
					if(!$this->$method()) {
						$go_back = true;
					}
				} else {
					$obj =& $this;
					$app->triggerEvent('onBeforeCheckoutStep',
array($controller, &$go_back, $original_go_back, &$obj));
				}
			}
		}

		if($go_back && isset($this->previous)) {
			hikaInput::get()->set('step', $this->previous);
		}

		hikaInput::get()->set('layout', 'step');
		return $this->display();
	}

	function before_coupon() {
		return true;
	}

	function after_coupon($success) {
		$coupon =
hikaInput::get()->getString('coupon','');
		$qty = 1;

		if(empty($coupon)){
			$coupon = hikaInput::get()->getInt('removecoupon', 0);
			$qty = 0;
		}
		if(empty($coupon))
			return true;

		$cartClass = hikashop_get('class.cart');
		if(!$cartClass->update($coupon, $qty, 0, 'coupon'))
			return true;

		if(strpos($this->checkout_workflow, 'shipping') !== false)
			$this->before_shipping(true);

		if(strpos($this->checkout_workflow, 'payment') !== false)
			$this->before_payment(true);

		$this->initCart(true);
		$this->cart_update = true;
		return false;
	}

	function check_coupon() {
		return true;
	}

	function before_terms() {
		return true;
	}

	function termsandconditions() {
		hikaInput::get()->set('layout',
'termsandconditions');
		return $this->display();
	}

	function after_terms($success) {
		$app = JFactory::getApplication();
		$app->setUserState(HIKASHOP_COMPONENT.'.checkout_terms',
hikaInput::get()->getInt('hikashop_checkout_terms', 0));
		if(!$this->cart_update && $success) {
			return $this->check_terms();
		}
		return true;
	}

	function check_terms() {
		$app = JFactory::getApplication();
		$status = (bool)$app->getUserState(
HIKASHOP_COMPONENT.'.checkout_terms', 0);
		if(!$status) {
			$app->enqueueMessage(JText::_('PLEASE_ACCEPT_TERMS_BEFORE_FINISHING_ORDER'));
		}
		return $status;
	}

	function before_fields() {
		return true;
	}

	function after_fields() {
		if(!hikashop_level(2))
			return true;

		$app = JFactory::getApplication();
		$fieldClass = hikashop_get('class.field');

		$old =
$app->getUserState(HIKASHOP_COMPONENT.'.checkout_fields_ok',
0);
		$oldData =
$app->getUserState(HIKASHOP_COMPONENT.'.checkout_fields');

		if(is_null($oldData))
			$oldData = new stdClass();
		$cart = $this->initCart();
		$oldData->products = $cart->products;

		$orderData = $fieldClass->getFilteredInput('order',
$oldData, !$this->cart_update);
		if($orderData !== false) {
			$app->setUserState(HIKASHOP_COMPONENT.'.checkout_fields_ok',
1);
			$app->setUserState(HIKASHOP_COMPONENT.'.checkout_fields',
$orderData);
			$changed = false;
		}

		if((!$old && $orderData === false) || (!empty($orderData)
&& $changed && $this->_getStep('confirm',
(int)$this->previous) === (int)$this->previous)) {
			return false;
		}
		return true;
	}

	function check_fields() {
		if(!hikashop_level(2))
			return true;

		$app = JFactory::getApplication();
		$status = (bool)$app->getUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok',0 );
		if(!$status){
			$app->enqueueMessage(JText::_('PLEASE_FILL_ADDITIONAL_INFO'));
		}
		return $status;
	}

	function before_cart() {
		return true;
	}

	function after_cart($success) {
		$modified = false;
		$cartClass = hikashop_get('class.cart');

		$formData = hikaInput::get()->get('item', array(),
'array');
		if(!empty($formData)) {
			$modified = $cartClass->update($formData, 0, 0, 'item');
		} else {
			$formData = hikaInput::get()->get('data', array(),
'array');
			if(!empty($formData)) {
				$modified = $cartClass->update($formData, 0, 0);
			}
		}

		if($modified === 0)
			return true;
		if(!$modified)
			return false;

		$cartClass->get(0);

		if(strpos($this->checkout_workflow, 'shipping') !== false)
{
			$this->before_shipping(true);
		}
		if(strpos($this->checkout_workflow, 'payment') !== false) {
			$this->before_payment(true);
		}
		$this->initCart(true);
		$this->cart_update = true;
		return false;
	}

	function check_cart() {
		$cart = $this->initCart();
		if(empty($cart->products) || !is_array($cart->products) ||
!count($cart->products)){
			$app = JFactory::getApplication();
			$app->redirect( $this->redirect_url,
JText::_('CART_EMPTY'));
		}
		return true;
	}

	function before_login() {
		if(count($this->controllers) != 1)
			return true;

		$user = JFactory::getUser();
		$app = JFactory::getApplication();
		$user_id = $app->getUserState(HIKASHOP_COMPONENT.'.user_id',
0);
		if($user->guest && empty($user_id))
			return true;

		$controllersCheck = trim($this->steps[$this->previous]);
		$controllersCheck = explode('_', $controllersCheck);
		$current = $this->current + 1;
		if(count($controllersCheck) == 1 && $controllersCheck[0] ==
'login')
			$current = $this->previous + 1;

		hikaInput::get()->set('step', $current);
		hikaInput::get()->set('previous', 0);
		$this->step();
		return true;
	}

	function after_login($success) {
		$app = JFactory::getApplication();
		$user = JFactory::getUser();

		$status = true;
		$user_id =
$app->getUserState(HIKASHOP_COMPONENT.'.user_id');

		global $messDisplay;
		$messDisplay = (is_null($messDisplay) ? 0 : 1);

		if($this->cart_update || !$user->guest || !empty($user_id))
			return true;

		JPluginHelper::importPlugin('user');
		$register = hikaInput::get()->getString('register',
'');
		$action = hikaInput::get()->getString('login_view_action',
'');
		$login = hikaInput::get()->getString('login',
'');
		$username =
hikaInput::get()->request->getUsername('username',
'');

		if($action == 'register' || ($action != 'login'
&& !empty($register))) {
			$status = $this->_doRegister();
		} elseif(($action == 'login' || !empty($login)) &&
!empty($username)) {
			$status = $this->_doLogin();
		} else {
			$name =
@$_REQUEST['data']['register']['email'];
			if(!empty($name)) {
				$status = $this->_doRegister();
			} elseif(!empty($username)) {
				$status = $this->_doLogin();
			} elseif(empty($name) && empty($username) &&
$messDisplay == 0) {
				$app->enqueueMessage(JText::_('PLEASE_FILL_FORM_BEFORE_PROCEEDING'),
'error');
			}
		}

		if(!$status)
			return $status;

		if($this->_getStep('address',$this->previous) !== false
|| $this->_getStep('confirm', (int)$this->previous) ===
(int)$this->previous) {
			$status = false;
		}
		if(!$this->before_address()) {
			$status = false;
		}
		if(!$status || $this->_getStep('shipping',
$this->previous) !== false) {
			$this->before_shipping();
		}
		$this->before_login();

		return $status;
	}

	function _doRegister() {
		$userClass = hikashop_get('class.user');
		$status = $userClass->registerLegacy($this);
		$app = JFactory::getApplication();
		if(!$status)
			return $status;

		$this->cart_update = true;
		$app->setUserState(HIKASHOP_COMPONENT.'.user_id',
(int)$userClass->user_id);

		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_address',
0);
		$app->setUserState(HIKASHOP_COMPONENT.'.billing_address',
0);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);
		$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
null);
		$app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0);
		$app->setUserState(HIKASHOP_COMPONENT.'.payment_data',
null);

		return $status;
	}

	function _doLogin($user = '', $pass = '', $checkToken
= true) {
		$options = array(
			'remember' =>
hikaInput::get()->getBool('remember', false),
			'return' => false,
		);

		$credentials = array();
		if(empty($user)) {
			$credentials['username'] =
hikaInput::get()->request->getUsername('username',
'');
		} else {
			$credentials['username'] = $user;
		}
		if(empty($pass)) {
			$credentials['password'] =
hikaInput::get()->request->getRaw('passwd', '');
		} else {
			$credentials['password'] = $pass;
		}

		$app = JFactory::getApplication();
		$result = $app->login($credentials, $options);

		$user = JFactory::getUser();

		if($result!==true || $user->guest) {
			return false;
		}

		$userClass = hikashop_get('class.user');
		$user_id = $userClass->getID($user->get('id'));
		if(!empty($user_id)) {
			$app->setUserState(HIKASHOP_COMPONENT.'.user_id',
$user_id);
			$hk_user = hikashop_loadUser(true, true);
		}

		$cartClass = hikashop_get('class.cart');
		$cartClass->get('reset_cache');
		$this->initCart(true);

		$this->cart_update = true;

		return true;
	}

	function check_login() {
		$logged = (bool)hikashop_loadUser();
		if(!$logged) {
			$app = JFactory::getApplication();
			$app->enqueueMessage( JText::_('LOGIN_OR_REGISTER_ACCOUNT')
);
		}
		return $logged;
	}

	public function getShippingAddress() {
		$app = JFactory::getApplication();
		$ret =
(int)$app->getUserState(HIKASHOP_COMPONENT.'.shipping_address',
0);

		if(empty($this->cartClass))
			$this->cartClass = hikashop_get('class.cart');
		$cart = $this->cartClass->get(0);
		if(empty($cart))
			return 0;
		if((int)$cart->cart_shipping_address_ids != $ret) {
			$this->cartClass->updateAddress(0, 'shipping', $ret);
		}
		return $ret;
	}
	public function getBillingAddress() {
		$app = JFactory::getApplication();
		$ret =
(int)$app->getUserState(HIKASHOP_COMPONENT.'.billing_address',
0);

		if(empty($this->cartClass))
			$this->cartClass = hikashop_get('class.cart');
		$cart = $this->cartClass->get(0);
		if(empty($cart))
			return $ret;
		if((int)$cart->cart_billing_address_id != $ret) {
			$this->cartClass->updateAddress(0, 'billing', $ret);
		}
		return $ret;
	}

	public function setShippingAddress($address_id) {
		if(empty($this->cartClass))
			$this->cartClass = hikashop_get('class.cart');
		$this->cartClass->updateAddress(0, 'shipping',
$address_id);

		$app = JFactory::getApplication();
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_address',
$address_id);
	}
	public function setBillingAddress($address_id) {
		if(empty($this->cartClass))
			$this->cartClass = hikashop_get('class.cart');
		$this->cartClass->updateAddress(0, 'billing',
$address_id);

		$app = JFactory::getApplication();
		$app->setUserState(HIKASHOP_COMPONENT.'.billing_address',
$address_id);
	}

	function before_address() {
		$status = $this->_checkLogin();
		if(!$status)
			return $status;

		$user_id = hikashop_loadUser();
		if(empty($user_id))
			return $status;

		$app = JFactory::getApplication();
		$shipping = $this->getShippingAddress(); //
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_address',
0);
		$billing = $this->getBillingAddress(); // 
$app->getUserState(HIKASHOP_COMPONENT.'.billing_address', 0);

		if(!empty($billing)) {
			$db = JFactory::getDBO();
			$db->setQuery('SELECT address_id FROM
'.hikashop_table('address').' WHERE address_published=1
AND address_id='.$billing);
			$result = $db->loadResult();
			if($billing == $shipping) {
				$billing = $shipping = $result;
				$shipping_done = true;
			} else {
				$billing = $result;
			}
		}

		if(!empty($shipping) && empty($shipping_done)) {
			$db = JFactory::getDBO();
			$db->setQuery('SELECT address_id FROM
'.hikashop_table('address').' WHERE address_published=1
AND address_id='.$shipping);
			$shipping = $db->loadResult();
		}

		if(empty($shipping) || empty($billing)) {
			$db = JFactory::getDBO();
			$db->setQuery('SELECT address_id FROM
'.hikashop_table('address').' WHERE address_published=1
AND address_user_id='.$user_id);
			$address_id = $db->loadResult();

			$this->setBillingAddress($address_id);
			$this->setShippingAddress($address_id);

			if(strpos($this->checkout_workflow,'shipping') !== false)
{
				if(!$this->before_shipping(true) &&
$this->_getStep('shipping', $this->previous) !== false) {
					$status = false;
				}
			}
			if(strpos($this->checkout_workflow, 'payment') !== false)
{
				if(!$this->before_payment(true) &&
$this->_getStep('payment', $this->previous) !== false) {
					$status = false;
				}
			}

			$this->initCart(true);
			$this->cart_update = true;
			$this->initCart();
		}

		return $status;
	}

	function after_address($success) {
		if($this->cart_update) {
			return true;
		}
		$logged = (bool)hikashop_loadUser();
		if(!$logged) {
			return true;
		}

		$addressClass = hikashop_get('class.address');
		$result = $addressClass->frontSaveForm();
		if($result === false) {
			return false;
		}

		$billing =
hikaInput::get()->getInt('hikashop_address_billing', 0);
		$shipping =
hikaInput::get()->getInt('hikashop_address_shipping', 0);

		if(!empty($result) && count($result)) {
			if(isset($result['billing_address'])) {
				$billing = $result['billing_address']->id;
			}
			if(isset($result['shipping_address'])) {
				$shipping = $result['shipping_address']->id;
			}
		}

		if(empty($billing)) {
			if(!$this->cart_update &&
!hikaInput::get()->getInt('removecoupon', 0)) {
				hikaInput::get()->set(HIKASHOP_COMPONENT.'.address_error',
1);

				$app = JFactory::getApplication();
				$app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS')
);
			}
			return false;
		}

		if(hikaInput::get()->getString('same_address','')
== 'yes' || empty($shipping)) {
			$shipping = $billing;
		}
		$old_billing_address = $this->getBillingAddress();
		$old_shipping_address = $this->getShippingAddress();

		if($billing != $old_billing_address) {
			$this->setBillingAddress($billing);
		}

		if($shipping != $old_shipping_address) {
			$this->setShippingAddress($shipping);
		}

		if($shipping != $old_shipping_address) {
			$cart = $this->initCart();
			if($cart->has_shipping) {
				$this->cart_update=true;
				if(strpos($this->checkout_workflow, 'shipping') !== false)
{
					$this->before_shipping(true);
				}
				if(strpos($this->checkout_workflow, 'payment') !== false)
{
					$this->before_payment(true);
				}
				return false;
			}
		}
		if($billing != $old_billing_address) {
			return false;
		}
		return true;
	}

	function check_address() {
		$shipping_address = $this->getShippingAddress();

		if(!empty($shipping_address))
			return true;

		hikaInput::get()->set(HIKASHOP_COMPONENT.'.address_error',
1);

		$app = JFactory::getApplication();
		$app->enqueueMessage( JText::_('CREATE_OR_SELECT_ADDRESS')
);

		return false;
	}

	function before_shipping($directCall = false) {
		$app = JFactory::getApplication();
		$ok = true;

		if(!$directCall) {
			$ok = $this->_checkLogin();
			if(!$ok)
				return $ok;
		} else {
			$this->initCart(true);
		}

		$shipping_address = $this->getShippingAddress();

		if(empty($shipping_address) && !$directCall) {
			$found = $this->_getStep('address');
			if($found !== false && $found != $this->current) {
				static $done = false;
				hikaInput::get()->set('step', $found);
				hikaInput::get()->set('previous', 0);
				if(!$done) {
					$done = true;
					$this->step();
				}
				return false;
			}
		}

		$config = hikashop_config();
		$cartClass = hikashop_get('class.cart');
		$cart = $cartClass->getFullCart(0);

		$hasShipping = !empty($cart->usable_methods->shipping) ||
!empty($cart->package['weight']['value']) ||
$config->get('force_shipping', 0);

		if(!$hasShipping) {
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
			$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);
			return true;
		}

		$shipping_methods = array();
		foreach($cart->cart_shipping_ids as $shipping_id) {
			if(strpos($shipping_id, '@') === false) {
				$extra = '';
				$i = (int)$shipping_id;
			} else {
				list($i, $extra) = explode('@', $shipping_id);
				$i = (int)$i;
				$extra = '@'.$extra;
			}
			foreach($cart->shipping as $shipping) {
				if((int)$shipping->shipping_id != $i)
					continue;
	 			$shipping_methods[] = $shipping->shipping_type . $extra;
				break;
			}
		}
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
$shipping_methods);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
$cart->cart_shipping_ids);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
$cart->shipping);

		return true;
	}

	function after_shipping($success) {
		if($this->cart_update)
			return true;

		$cart = $this->initCart();
		if(!$cart->has_shipping)
			return true;

		$shipping =
hikaInput::get()->getString('hikashop_shippings',
'');

		$app = JFactory::getApplication();
		$shippingClass = hikashop_get('class.shipping');
		$methods =& $shippingClass->getShippings($cart);
		if(empty($methods))
			return false;

		if($shipping != implode(';',
array_keys($cart->shipping_groups)) && !(empty($shipping)
&& implode(';', array_keys($cart->shipping_groups)) ==
'0')) {
			return false;
		}

		$shippings = array();
		$shipping_ids_cart = array();
		$shipping_ids = array();
		$shipping_datas = array();
		$several_shipping = (count($cart->shipping_groups) > 1);
		if($several_shipping)
			$order_products = $cart->products;

		foreach($cart->shipping_groups as $group_key => $shipping_group) {
			$input_name = 'hikashop_shipping';
			if($several_shipping)
				$input_name .= '_'.$group_key;
			$shipping = hikaInput::get()->getString($input_name, null);
			if(empty($shipping))
				return false;

			$key_lng = strlen($group_key) + 1;
			if($several_shipping && substr($shipping, -$key_lng) ==
'_' . $group_key) {
				$shipping = substr($shipping, 0, strlen($shipping) - $key_lng);
			}

			if($shipping == '-' &&
empty($shipping_group->shippings))
				continue;

			$shipping = explode('_', $shipping);
			if(count($shipping) <= 1)
				return false;

			$shipping_id = array_pop($shipping);

			$shipping = implode('_', $shipping);
			if(empty($shipping))
				return false;

			$data = hikashop_import('hikashopshipping', $shipping);

			if($several_shipping) {
				$cart->products = $shipping_group->products;
				$rates_copy = array();
				foreach($methods as $rate) {
					if(!isset($rate->shipping_warehouse_id) ||
$rate->shipping_warehouse_id == $group_key)
						$rates_copy[] = clone($rate);
				}
				$shipping_data = $data->onShippingSave($cart, $rates_copy,
$shipping_id, $group_key);
				unset($rates_copy);
			} else {
				$shipping_data = $data->onShippingSave($cart, $methods,
$shipping_id);
			}

			if($shipping_data === false) {
				$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
null);
				$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
null);
				$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
null);

				$cartClass = hikashop_get('class.cart');
				$cartClass->updateShipping(0, array());

				return false;
			}

			$shippings[] = $shipping . '@' . $group_key;
			$shipping_ids[] = $shipping_id . '@' . $group_key;
			$shipping_datas[] = $shipping_data;

			$shipping_ids_cart[$group_key] = $shipping_id;
		}
		if($several_shipping)
			$cart->products = $order_products;

		$old_shipping_methods =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_method');
		$old_shipping_ids =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_id');
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_method',
$shippings);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_id',
$shipping_ids);
		$app->setUserState(HIKASHOP_COMPONENT.'.shipping_data',
$shipping_datas);

		$cartClass = hikashop_get('class.cart');
		$cartClass->updateShipping(0, $shipping_ids_cart);

		if(($old_shipping_ids !== $shipping_ids || $old_shipping_methods !==
$shippings) && strpos($this->checkout_workflow,
'payment') !== false) {
			$this->cart_update = true;
			$this->initCart(true);
			$this->before_payment(true);
		}

		if(($old_shipping_ids !== $shipping_ids || $old_shipping_methods !==
$shippings) && ($this->_getStep('cart',
(int)$this->previous) === (int)$this->previous ||
$this->_getStep('confirm', (int)$this->previous) ===
(int)$this->previous)) {
			return false;
		}

		return true;
	}

	function check_shipping() {
		$app = JFactory::getApplication();
		$shipping_done =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_method');
		$shipping_done = !empty($shipping_done);

		if($shipping_done)
			return $shipping_done;

		$cart = $this->initCart();
		if(!$cart->has_shipping) {
			return true;
		}

		$app->enqueueMessage( JText::_('SELECT_SHIPPING') );
		return $shipping_done;
	}

	function initCart($reset = false) {
		static $cart = false;
		if($reset) {
			$cart = false;
			return true;
		}
		if(!empty($cart))
			return $cart;

		$cartClass = hikashop_get('class.cart');
		$config = hikashop_config();

		$cart = $cartClass->getFullCart(0);
		if(empty($cart->products)) {
			$app = JFactory::getApplication();
			$app->redirect( $this->redirect_url,
JText::_('CART_EMPTY'));
		}

		$cart->has_shipping = (!empty($cart->usable_methods->shipping)
|| !empty($cart->package['weight']['value']) ||
$config->get('force_shipping', 0));
		return $cart;
	}

	function before_payment($directCall = false) {
		$ok = true;
		if(!$directCall) {
			$ok = $this->_checkLogin();
			if(!$ok)
				return $ok;
		}

		$app = JFactory::getApplication();

		$cart = $this->initCart();

		if(empty($cart->payment) &&
!empty($cart->usable_methods->payment_valid))
			return true;

		$payment_method = !empty($cart->payment->payment_type) ?
$cart->payment->payment_type : '';
		$payment_id = $cart->cart_payment_id;

		if(!empty($payment_method) && !$this->cart_update)
			return $ok;

		$payment = hikaInput::get()->getString('hikashop_payment',
'');
		if(!empty($payment)){
			$payment = explode('_', $payment);
			if(count($payment) > 1) {
				$new_payment_id = array_pop($payment);
				$payment = implode('_',$payment);
				if($new_payment_id != $payment_id || $payment != $payment_method) {
					$payment_method = $payment;
					$payment_id = $new_payment_id;
					$status = $this->_readPayment();
					if(!$directCall)
						return $status;
				}
			}
		}

		$methods = $cart->usable_methods->payment;

		if(!empty($methods)) {
			$reset_payment = true;
			if($this->cart_update) {
				$found = false;
				foreach($methods as $m) {
					if($m->payment_id == $payment_id && $m->payment_type ==
$payment_method) {
						$found = true;
						break;
					}
				}
				$reset_payment = !$found;
			}

			if($reset_payment) {
				$config =& hikashop_config();
				$auto_select_default =
$config->get('auto_select_default',2);
				if($auto_select_default == 1 && count($methods) > 1)
$auto_select_default = 0;
				$ok = false;
				if($auto_select_default) {
					$method = reset($methods);

					$app->setUserState( HIKASHOP_COMPONENT.'.payment_method',
$method->payment_type);
					$app->setUserState( HIKASHOP_COMPONENT.'.payment_id',
$method->payment_id);
					$app->setUserState( HIKASHOP_COMPONENT.'.payment_data',
$method);
				} else {
					$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method','');
					$app->setUserState( HIKASHOP_COMPONENT.'.payment_id',0);
					$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data','');
					if(($payment_method == '' && $payment_id ==
'') || $directCall || !empty($this->beforeControllers)
&& count($this->beforeControllers) == 1) {
						$ok = true;
					}
				}
			}
		}

		return $ok;
	}

	function after_payment($success) {
		if($this->cart_update)
			return true;

		$cart = $this->initCart();
		if(empty($cart->full_total->prices[0]->price_value_with_tax) ||
bccomp($cart->full_total->prices[0]->price_value_with_tax, 0, 5)
== 0) {
			$app = JFactory::getApplication();
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
'');
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0);
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_data',
'');
			return true;
		}

		return $this->_readPayment();
	}

	function _readPayment() {
		$payment =
hikaInput::get()->getString('hikashop_payment','');
		if(empty($payment))
			return false;

		$payment = explode('_', $payment);
		if(empty($payment) || count($payment) == 0)
			return false;

		$payment_id = array_pop($payment);
		$payment = implode('_', $payment);
		if(empty($payment))
			return false;


		$cart = $this->initCart();

		$pluginsClass = hikashop_get('class.plugins');
		$rates = $pluginsClass->getMethods('payment');

		$data = hikashop_import('hikashoppayment', $payment);
		$paymentData = $data->onPaymentSave($cart, $rates, $payment_id);
		if($paymentData === false)
			return false;

		$old_payment_id = $cart->cart_payment_id;

		$app = JFactory::getApplication();
		$cartClass = hikashop_get('class.cart');
		$ret = $cartClass->updatePayment($cart->cart_id, $payment_id);
		if($ret === false)
			return false;
		$this->initCart(true);

		$currencyClass = hikashop_get('class.currency');
		$currencyClass->convertPayments($rates);
		$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
$payment);
		$app->setUserState(HIKASHOP_COMPONENT.'.payment_id',
$payment_id);
		$app->setUserState(HIKASHOP_COMPONENT.'.payment_data',
$paymentData);

		if(!empty($paymentData->ask_cc)) {
			$paymentClass = hikashop_get('class.payment');
			if(!$paymentClass->readCC()) {
				$app->enqueueMessage( JText::_('FILL_CREDIT_CARD_INFO')
);
				return false;
			}
		}

		if($old_payment_id != $payment_id &&
($this->_getStep('cart', (int)$this->previous) ===
(int)$this->previous || $this->_getStep('confirm',
(int)$this->previous) === (int)$this->previous))
			return false;

		return true;
	}

	function check_payment() {
		$cart = $this->initCart();
		$app = JFactory::getApplication();
		if(empty($cart->full_total->prices[0]->price_value_with_tax) ||
bccomp($cart->full_total->prices[0]->price_value_with_tax, 0, 5)
== 0) {
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
'');
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_id', 0);
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_data',
'');
			return true;
		}

		$payment_method = !empty($cart->payment->payment_type) ?
$cart->payment->payment_type : '';
		$payment_session =
$app->getUserState(HIKASHOP_COMPONENT.'.payment_method');
		if(empty($payment_session) || $payment_session != $payment_method)
			$app->setUserState(HIKASHOP_COMPONENT.'.payment_method',
$payment_method);

		$payment_done = !empty($cart->payment);

		if(!$payment_done) {
			$app->enqueueMessage( JText::_('SELECT_PAYMENT') );
			return $payment_done;
		}

		$paymentData = $cart->payment;
		if(!empty($paymentData->ask_cc)) {
			$cc_number =
$app->getUserState(HIKASHOP_COMPONENT.'.cc_number');
			$cc_month =
$app->getUserState(HIKASHOP_COMPONENT.'.cc_month');
			$cc_year =
$app->getUserState(HIKASHOP_COMPONENT.'.cc_year');
			$cc_CCV =
$app->getUserState(HIKASHOP_COMPONENT.'.cc_CCV');
			$cc_owner =
$app->getUserState(HIKASHOP_COMPONENT.'.cc_owner');
			if(empty($cc_number) || empty($cc_month) || empty($cc_year) ||
(empty($cc_CCV) && !empty($paymentData->ask_ccv)) ||
(empty($cc_owner) && !empty($paymentData->ask_owner))) {
				$app->enqueueMessage( JText::_('FILL_CREDIT_CARD_INFO')
);
				$payment_done = false;
			}
		}
		return $payment_done;
	}

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

		$done = true;
		JSession::checkToken('request') || die('Invalid
Token');
	}

	function notify() {
		hikashop_nocache();

		ob_start();

		$plugin = hikaInput::get()->getCmd('notif_payment');
		$type = 'payment';

		if(empty($plugin)) {
			$plugin = hikaInput::get()->getCmd('notif_shipping');
			$type = 'shipping';
		}

		if(empty($plugin)) {
			$plugin = hikaInput::get()->getCmd('notif_hikashop');
			$type = '';
		}

		$pluginInstance = hikashop_import('hikashop' . $type,
$plugin);
		if(empty($pluginInstance))
			return false;

		$function = 'on'.ucfirst($type).'Notification';
		if(!method_exists($pluginInstance, $function))
			return false;

		$translationHelper = hikashop_get('helper.translation');
		$cleaned_statuses = $translationHelper->getStatusTrans();

		$data = $pluginInstance->$function($cleaned_statuses);

		$dbg = ob_get_clean();
		if(!empty($dbg)) {
			hikashop_logData($dbg, ucfirst($type). 'Notification: ' .
$plugin);
		}
		if(is_string($data) && !empty($data)) {
			echo $data;
		}
	}

	function threedsecure() {
		hikashop_nocache();

		ob_start();
		$payment = hikaInput::get()->getCmd('3dsecure_payment');

		$pluginInstance = hikashop_import('hikashoppayment',
$payment);
		if(empty($pluginInstance))
			return false;

		if(!method_exists($pluginInstance, 'onThreeDSecure'))
			return false;

		$trans = hikashop_get('helper.translation');
		$cleaned_statuses = $trans->getStatusTrans();

		$data = $pluginInstance->onThreeDSecure($cleaned_statuses);

		$dbg = ob_get_clean();
		if(!empty($dbg)) {
			hikashop_logData($dbg, '3DSecure: ' . $payment);
		}
		if(is_string($data) && !empty($data)) {
			echo $data;
		}
	}

	function before_confirm() {
		foreach($this->steps as $i => $step) {
			if(intval($i)!=intval($this->current)) {
				$this->_checkStep(trim($step), $i);
			}
		}
		return true;
	}

	function _checkStep($step,$i) {
		$controllers = explode('_', $step);
		$ok = true;
		foreach($controllers as $controller) {
			$fct = 'check_'.trim($controller);

			if(!method_exists($this, $fct))
				continue;

			if(!$this->$fct()) {
				$ok = false;
			}
		}

		if($ok)
			return true;

		$this->setRedirect(
hikashop_completeLink('checkout&task=step&step='.$i,
false, true) );
		$this->redirect();
	}

	function after_confirm($success) {
		if(!$success){
			return false;
		}
		if(!hikaInput::get()->getVar('validate', 0)) {
			return false;
		}
		if($this->current==$this->previous) {
			return true;
		}

		foreach($this->steps as $i => $step) {
			$this->_checkStep(trim($step), $i);
		}

		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$config =& hikashop_config();
		$pluginsClass = hikashop_get('class.plugins');

		$cart = $this->initCart();

		$shippings = array();
		$shipping =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_method');
		$shipping_id =
$app->getUserState(HIKASHOP_COMPONENT.'.shipping_id');
		if(!empty($shipping)) {
			foreach($shipping as $ship) {
				$ship = explode('@', $ship, 2);
				$current_id = 0;
				foreach($shipping_id as $sid) {
					list($i, $k) = explode('@', $sid, 2);
					if($k == $ship[1]) {
						$current_id = $i;
						break;
					}
				}
				$shippings[$ship[1]] = array('id' => $current_id,
'name' => $ship[0]);
			}

			$shippingClass = hikashop_get('class.shipping');
			$methods =& $shippingClass->getShippings($cart);
			$shipping_groups = $shippingClass->getShippingGroups($cart,
$methods);
		}

		$payment = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_method');
		$payment_id = $app->getUserState(
HIKASHOP_COMPONENT.'.payment_id');

		$ids = array();
		foreach($cart->products as $product){
			if($product->cart_product_quantity > 0 &&
$product->product_type == 'variant') {
				$ids[$product->product_id] = (int)$product->product_id;
			}
		}
		if(!empty($ids)){
			$database = JFactory::getDBO();
			$query = 'SELECT a.variant_product_id as product_id,
b.characteristic_id as value_id, b.characteristic_value as value,
c.characteristic_id as name_id, c.characteristic_value as name '.
					' FROM '.hikashop_table('variant').' AS a
'.
					' LEFT JOIN
'.hikashop_table('characteristic').' AS b ON
a.variant_characteristic_id = b.characteristic_id '.
					' LEFT JOIN
'.hikashop_table('characteristic').' AS c ON
b.characteristic_parent_id = c.characteristic_id '.
					' WHERE a.variant_product_id IN ('.implode(',',
$ids).')';
			$database->setQuery($query);
			$characteristics = $database->loadObjectList();

			if(!empty($characteristics)) {
				foreach($characteristics as $characteristic) {
					foreach($cart->products as $k => $product) {
						if($product->product_id != $characteristic->product_id)
							continue;

						if(empty($product->characteristics)) {
							$product->characteristics = array($characteristic->name =>
$characteristic->value);
						} else {
							$product->characteristics[$characteristic->name] =
$characteristic->value;
						}
					}
				}
			}
		}
		if(hikashop_level(2)) {
			$element = null;
			$fieldsClass = hikashop_get('class.field');
			$itemFields = $fieldsClass->getFields('', $element,
'item');
		}

		$cart->full_products =& $cart->products;
		unset($cart->products);
		$cart->products = array();
		foreach($cart->full_products as &$product) {
			if((int)$product->cart_product_quantity <= 0)
				continue;

			$orderProduct = new stdClass();
			$orderProduct->product_id = $product->product_id;
			$orderProduct->order_product_quantity =
$product->cart_product_quantity;
			$orderProduct->order_product_name = $product->product_name;
			$orderProduct->cart_product_id = $product->cart_product_id;
			$orderProduct->cart_product_option_parent_id =
$product->cart_product_option_parent_id;
			$orderProduct->order_product_code = $product->product_code;
			$orderProduct->order_product_price =
@$product->prices[0]->unit_price->price_value;
			$orderProduct->order_product_wishlist_id =
@$product->cart_product_wishlist_id;
			$orderProduct->product_subscription_id =
@$product->product_subscription_id;

			$tax = 0;
			if(!empty($product->prices[0]->unit_price->price_value_with_tax)
&&
bccomp($product->prices[0]->unit_price->price_value_with_tax,0,5))
				$tax =
$product->prices[0]->unit_price->price_value_with_tax-$product->prices[0]->unit_price->price_value;
			$orderProduct->order_product_tax = $tax;

			$characteristics = '';
			if(!empty($product->characteristics))
				$characteristics = serialize($product->characteristics);
			$orderProduct->order_product_options = $characteristics;

			if(!empty($product->discount)) {
				$orderProduct->discount = clone($product->discount);
				$orderProduct->discount->price_value_without_discount =
$product->prices[0]->unit_price->price_value_without_discount;
				$orderProduct->discount->price_value_without_discount_with_tax =
@$product->prices[0]->unit_price->price_value_without_discount_with_tax;
				$orderProduct->discount->taxes_without_discount =
@$product->prices[0]->unit_price->taxes_without_discount;
			}

			if(!empty($cart->item_fields)) {
				foreach($cart->item_fields as $field) {
					$namekey = $field->field_namekey;
					if(isset($product->$namekey))
						$orderProduct->$namekey = $product->$namekey;
				}
			}elseif(!empty($itemFields)) {
				foreach($itemFields as $field) {
					$namekey = $field->field_namekey;
					if(isset($product->$namekey))
						$orderProduct->$namekey = $product->$namekey;
				}
			}

			if(isset($product->prices[0]->unit_price->taxes))
				$orderProduct->order_product_tax_info =
$product->prices[0]->unit_price->taxes;

			if(isset($product->files))
				$orderProduct->files =& $product->files;

			if(!empty($shipping)) {
				$shipping_done = false;
				foreach($shipping_groups as $group_key => $group_products) {
					if(!isset($shippings[$group_key]))
						continue;
					foreach($group_products->products as $group_product) {
						if((int)$group_product->cart_product_id ==
(int)$product->cart_product_id) {
							$orderProduct->order_product_shipping_id =
$shippings[$group_key]['id'] . '@' . $group_key;
							$orderProduct->order_product_shipping_method =
$shippings[$group_key]['name'];
							$shipping_done = true;
							break;
						}
					}
					if($shipping_done)
						break;
				}
			}
			$cart->products[] = $orderProduct;
		}
		unset($product);

		$shipping_address = (int)$cart->cart_shipping_address_ids;
		$billing_address = $cart->cart_billing_address_id;
		$main_currency = (int)$config->get('main_currency',1);
		$currency_id =
(int)$app->getUserState(HIKASHOP_COMPONENT.'.currency_id',
$main_currency);

		$order = new stdClass();
		$order->order_user_id = @hikashop_loadUser();
		$order->order_status =
$config->get('order_created_status');
		$order->order_shipping_address_id = $shipping_address;
		$order->order_billing_address_id = $billing_address;
		$order->order_discount_code = @$cart->coupon->discount_code;
		$order->order_currency_id =
$cart->full_total->prices[0]->price_currency_id;

		$order->order_currency_info = new stdClass();
		$currencyClass = hikashop_get('class.currency');
		$currencies = null;
		$currencies =
$currencyClass->getCurrencies($order->order_currency_id,
$currencies);
		$currency = $currencies[$order->order_currency_id];
		$order->order_currency_info->currency_code =
$currency->currency_code;
		$order->order_currency_info->currency_rate =
$currency->currency_rate;
		$order->order_currency_info->currency_percent_fee =
$currency->currency_percent_fee;
		$order->order_currency_info->currency_modified =
$currency->currency_modified;

		$order->order_type = 'sale';
		$order->order_full_price =
$cart->full_total->prices[0]->price_value_with_tax;
		$order->order_tax_info =
@$cart->full_total->prices[0]->taxes;

		$order->order_shipping_price = 0.0;
		$order->order_shipping_tax = 0.0;
		$order->order_shipping_params = null;
		if(!empty($cart->shipping)) {
			$order->order_shipping_params = new stdClass();
			$order->order_shipping_params->prices = array();
			foreach($cart->shipping as $cart_shipping) {
				$price_key = $cart_shipping->shipping_id;
				if(isset($cart_shipping->shipping_warehouse_id)) {
					if(is_string($cart_shipping->shipping_warehouse_id) ||
is_int($cart_shipping->shipping_warehouse_id)) {
						$price_key .= '@' .
$cart_shipping->shipping_warehouse_id;
					} else {
						$price_key .= '@';
						foreach($cart_shipping->shipping_warehouse_id as $k => $v) {
							$price_key .= $k . $v;
						}
					}
				}

				$order->order_shipping_params->prices[$price_key] = new
stdClass();
				$order->order_shipping_params->prices[$price_key]->price_with_tax
= $cart_shipping->shipping_price_with_tax;

				$order->order_shipping_price +=
$cart_shipping->shipping_price_with_tax;

				if(!empty($cart_shipping->shipping_price_with_tax) &&
!empty($cart_shipping->shipping_price)) {
					$order->order_shipping_tax +=
$cart_shipping->shipping_price_with_tax -
$cart_shipping->shipping_price;
					$order->order_shipping_params->prices[$price_key]->tax =
$cart_shipping->shipping_price_with_tax -
$cart_shipping->shipping_price;
					if(!empty($cart_shipping->taxes)) {
						$order->order_shipping_params->prices[$price_key]->taxes =
array();
						foreach($cart_shipping->taxes as $tax) {
							$order->order_shipping_params->prices[$price_key]->taxes[$tax->tax_namekey]
= $tax->tax_amount;
							if(isset($order->order_tax_info[$tax->tax_namekey])) {
								if(empty($order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping))
									$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
= 0;
								$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
+= $tax->tax_amount;
							}
elseif(!empty($order->order_tax_info[$tax->tax_namekey]->tax_amount)
&&
$order->order_tax_info[$tax->tax_namekey]->tax_amount>0) {
								$order->order_tax_info[$tax->tax_namekey] = $tax;
								$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_shipping
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
								$order->order_tax_info[$tax->tax_namekey]->tax_amount =
0;
							}
						}
					}
				}
			}
		}

		$order->order_payment_price =
@$cart->payment->payment_price_with_tax;
		if(!empty($cart->payment) &&
!empty($cart->payment->payment_price_with_tax) &&
!empty($cart->payment->payment_price)) {
			$order->order_payment_tax =
$cart->payment->payment_price_with_tax -
$cart->payment->payment_price;
			if(!empty($cart->payment->taxes)) {
				foreach($cart->payment->taxes as $tax) {
					if(isset($order->order_tax_info[$tax->tax_namekey])) {
						$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_payment
= $tax->tax_amount;
					}
elseif(!empty($order->order_tax_info[$tax->tax_namekey]->tax_amount)
&&
$order->order_tax_info[$tax->tax_namekey]->tax_amount>0) {
						$order->order_tax_info[$tax->tax_namekey] = $tax;
						$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_payment
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
						$order->order_tax_info[$tax->tax_namekey]->tax_amount = 0;
					}
				}
			}
		}
		$discount_price = 0;
		$discount_tax = 0;

		if(!empty($cart->coupon)&&
!empty($cart->coupon->total->prices[0]->price_value_without_discount_with_tax)){
			$discount_price=@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_with_tax;
			if(!empty($cart->coupon->total->prices[0]->price_value_with_tax)&&!empty($cart->coupon->total->prices[0]->price_value)){
				$discount_tax =
(@$cart->coupon->total->prices[0]->price_value_without_discount_with_tax-@$cart->coupon->total->prices[0]->price_value_without_discount)-(@$cart->coupon->total->prices[0]->price_value_with_tax-@$cart->coupon->total->prices[0]->price_value);
				if(isset($cart->coupon->taxes)){
					foreach($cart->coupon->taxes as $tax){
						if(isset($order->order_tax_info[$tax->tax_namekey])){
							$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon
= $tax->tax_amount;
						}else{
							$order->order_tax_info[$tax->tax_namekey]=$tax;
							$order->order_tax_info[$tax->tax_namekey]->tax_amount_for_coupon
= $order->order_tax_info[$tax->tax_namekey]->tax_amount;
							$order->order_tax_info[$tax->tax_namekey]->tax_amount = 0;
						}
					}
				}
			}
		}
		$order->order_discount_tax = $discount_tax;
		$order->order_discount_price = $discount_price;
		$order->order_shipping_id = $shipping_id;
		$order->order_shipping_method = $shipping;
		$order->order_payment_id = $payment_id;
		$order->order_payment_method = $payment;
		$order->cart =& $cart;
		$order->history = new stdClass();
		$order->history->history_reason =
JText::_('ORDER_CREATED');
		$order->history->history_notified = 0;
		$order->history->history_type = 'creation';
		$app = JFactory::getApplication();
		if(hikashop_level(2)) {
			$orderData = $app->getUserState(
HIKASHOP_COMPONENT.'.checkout_fields');
			if(!empty($orderData)){
				foreach(get_object_vars($orderData) as $key => $val){
					$order->$key = $val;
				}
			}
		}

		if(!empty($shippings)) {
			if(count($shippings) == 1) {
				$s = reset($shippings);
				$order->order_shipping_id = $s['id'];
				$order->order_shipping_method = $s['name'];
			} else {
				$ids = array();
				foreach($shippings as $key => $ship)
					$ids[] = $ship['id'] . '@' . $key;
				$order->order_shipping_id = implode(';', $ids);
				$order->order_shipping_method = '';
			}
		}

		$paymentClass = hikashop_get('class.payment');
		$paymentClass->checkPaymentOptions($order);

		$orderClass = hikashop_get('class.order');
		$order->order_id = $orderClass->save($order);
		$removeCart = false;
		if(empty($order->order_id))
			return false;
		$app->setUserState(
HIKASHOP_COMPONENT.'.checkout_fields_ok',0);
		$entriesData = $app->getUserState(
HIKASHOP_COMPONENT.'.entries_fields');
		if(!empty($entriesData)){
			$entryClass = hikashop_get('class.entry');
			foreach($entriesData as $entryData){
				$entryData->order_id = $order->order_id;
				$entryClass->save($entryData);
			}
			$app->setUserState(
HIKASHOP_COMPONENT.'.entries_fields',null);
		}

		if(!empty($payment)){
			$query = 'SELECT * FROM
'.hikashop_table('payment').' WHERE
payment_type='.$db->Quote($payment);
			$db->setQuery($query);
			$paymentData = $db->loadObjectList('payment_id');
			$pluginsClass->params($paymentData,'payment');
		}else{
			$paymentData = null;
		}
		if(!empty($shipping)) {
			$shippings_quoted = array();
			foreach($shippings as $ship) {
				$shippings_quoted[] = $db->Quote($ship['name']);
			}
			$query = 'SELECT * FROM
'.hikashop_table('shipping').' WHERE shipping_type IN
(' . implode(',', $shippings_quoted) . ')';
			$db->setQuery($query);
			$shippingData = $db->loadObjectList('shipping_id');
			$pluginsClass->params($shippingData,'shipping');
		} else {
			$shippingData = null;
		}

		ob_start();
		if(!empty($shippingData)) {
			foreach($shippings as $ship) {
				$data = hikashop_import('hikashopshipping',
$ship['name']);
				$data->onAfterOrderConfirm($order, $shippingData,
$ship['id']);
				if(!empty($data->removeCart))
					$removeCart = true;
			}
		}
		if(!empty($paymentData)){
			$data = hikashop_import('hikashoppayment',$payment);
			$data->onAfterOrderConfirm($order, $paymentData, $payment_id);
			if(!empty($data->removeCart)){
				$removeCart = true;
			}
		}
		hikaInput::get()->set('hikashop_plugins_html',ob_get_clean());

		$app->setUserState( HIKASHOP_COMPONENT.'.order_id',
$order->order_id);

		if($config->get('clean_cart','order_created') ==
'order_created' || $removeCart) {

			$cartClass = hikashop_get('class.cart');
			$cartClass->cleanCartFromSession(false);

			$user = JFactory::getUser();
			if($user->guest)
				$this->app->setUserState(
HIKASHOP_COMPONENT.'.user_id', 0);
		}
		return true;
	}

	function before_status() {
		return true;
	}

	function after_status() {
		return true;
	}

	function check_status() {
		return true;
	}

	function before_end() {
		$app = JFactory::getApplication();
		$order = $app->getUserState( HIKASHOP_COMPONENT.'.order_id',
0);
		if(empty($order)) {
			return $this->after_confirm(true);
		}
		return true;
	}

	function after_end() {
		if(isset($this->current))
			return true;

		$cartClass = hikashop_get('class.cart');
		$cartClass->cleanCartFromSession();
		hikaInput::get()->set('layout', 'after_end');
		return $this->display();
	}

	function _checkLogin() {
		if(count($this->controllers) != 1)
			return true;

		$user = JFactory::getUser();
		$app = JFactory::getApplication();
		$user_id = $app->getUserState(
HIKASHOP_COMPONENT.'.user_id');
		if($user->guest && empty($user_id)) {
			$found = $this->_getStep('login');

			if($found !== false) {
				hikaInput::get()->set('step',$found);
				hikaInput::get()->set('previous',0);
				unset($_REQUEST['previous']);
				$this->step();
				return false;
			} else {
				$userData = new stdClass();
				$userData->user_created_ip = hikashop_getIP();
				$userClass = hikashop_get('class.user');
				$userData->user_id = $userClass->save($userData);
				$app->setUserState( HIKASHOP_COMPONENT.'.user_id',
$userData->user_id);
			}

		}
		return true;
	}

	function _getStep($search, $onStep = null) {
		$found = false;
		foreach($this->steps as $k => $step){
			if(isset($onStep) && $onStep!=$k)
				continue;

			if(strpos($step, $search) !== false) {
				$found = $k;
				break;
			}
		}
		return $found;
	}

	function display($cachable = false, $urlparams = array()){
		static $done = false;
		$result = true;
		if(!$done) {
			$done = true;
			$result = parent::display();
		}
		return $result;
	}
}
cron.php000064400000001602151200171270006211 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 CronController extends hikashopController{
	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->display[]='cron';
		if(!$skip){
			$this->registerDefaultTask('cron');
		}
		JRequest::setVar('tmpl','component');
	}
	function cron(){
		$config =& hikashop_config();
		if($config->get('cron') == 'no'){
			hikashop_display(JText::_('CRON_DISABLED'),'info');
			return false;
		}
		$cronHelper = hikashop_get('helper.cron');
		$cronHelper->report = true;
		$launched = $cronHelper->cron();
		if($launched){
			$cronHelper->report();
		}
	}
}
currency.php000064400000002046151200171270007105 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 CurrencyController extends hikashopController{
	var $modify = array();
	var $delete = array();
	var $modify_views = array();
	function __construct($config = array(),$skip=false){
		$this->display[]='update';
		if(!$skip){
			parent::__construct($config,$skip);
			$this->registerDefaultTask('update');
		}
		JRequest::setVar('tmpl','component');
	}
	function update(){
		$currency=JRequest::getInt('hikashopcurrency',0);
		if(!empty($currency)){
			$app = JFactory::getApplication();
			$app->setUserState( HIKASHOP_COMPONENT.'.currency_id',
$currency );
			$url = JRequest::getString('return_url','');
			if(!empty($url)){
				if(hikashop_disallowUrlRedirect($url)) return false;
				$app->redirect(urldecode($url));
			}
		}
		return true;
	}
}
entry.php000064400000002777151200171270006427 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 entryController extends hikashopController{
	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->display = array();
		$this->modify_views =
array('edit','newentry','save');
		$this->add = array();
		$this->modify = array();
		$this->delete = array();
		if(!$skip){
			$this->registerDefaultTask('edit');
		}
	}

	function newentry(){
		JRequest::setVar( 'layout', 'newentry'  );
		return $this->display();
	}

	function save(){

		global $Itemid;
		$url = 'checkout';
		if(!empty($Itemid)){
			$url.='&Itemid='.$Itemid;
		}
		$app = JFactory::getApplication();

		$fieldClass = hikashop_get('class.field');
		$null = null;
		$entriesData = $fieldClass->getInput('entry',$null);

		$app->setUserState(
HIKASHOP_COMPONENT.'.entries_fields',null);
		$ok = true;

		if(empty($entriesData)){
			$app->redirect( hikashop_completeLink('entry',false,true)
);
		}

		$cartClass = hikashop_get('class.cart');
		$fields =&
$fieldClass->getData('frontcomp','entry');
		$cartClass->addToCartFromFields($entriesData,$fields);

		$app->setUserState(
HIKASHOP_COMPONENT.'.entries_fields',$entriesData);
		$app->redirect( hikashop_completeLink($url,false,true) );
	}
}
order.php000064400000036540151200171270006374 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 orderController extends hikashopController{
	var $modify = array();
	var $delete = array();
	var $modify_views = array();
	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->display[]='cancel';
		$this->display[]='invoice';
		$this->display[]='download';
		$this->display[]='pay';
		$this->display[]='cancel_order';
	}
	function authorize($task){
		if($this->isIn($task,array('display'))){
			return true;
		}
		return false;
	}

	function listing(){
		$user_id = hikashop_loadUser();
		if(empty($user_id)){
			$app=JFactory::getApplication();
			$app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST'));
			global $Itemid;
			$url = '';
			if(!empty($Itemid)){
				$url='&Itemid='.$Itemid;
			}
			if(version_compare(JVERSION,'1.6','<')){
				$url = 'index.php?option=com_user&view=login'.$url;
			}else{
				$url = 'index.php?option=com_users&view=login'.$url;
			}
			$app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('',false))),false));
			return true;
		}
		return parent::listing();
	}

	function show(){
		if($this->_check()){
			return parent::show();
		}
		return true;
	}

	function cancel_order(){
		$app = JFactory::getApplication();
		$order_id = hikashop_getCID('order_id');
		if(empty($order_id)){
			$order_id = $app->getUserState(
HIKASHOP_COMPONENT.'.order_id');
		}
		$class = hikashop_get('class.order');
		$order = $class->get($order_id);
		$config =& hikashop_config();
		$checkout =
explode(',',$config->get('checkout'));
		$step = max(count($checkout)-2,0);
		$itemid_for_checkout =
$config->get('checkout_itemid','0');
		$item ='';
		if(!empty($itemid_for_checkout)){
			$item='&Itemid='.(int)$itemid_for_checkout;
		}
		$cancel_url = 
hikashop_completeLink('checkout&step='.$step.$item,false,true);

		if(!empty($order)){
			$user_id = hikashop_loadUser();
			if($order->order_user_id==$user_id){
				$status = $config->get('cancelled_order_status');
				$created_status = $config->get('order_created_status');
				$cancellable_statuses =
explode(',',$config->get('cancellable_order_status'));

				if( $order->order_status == $created_status ||
in_array($order->order_status, $cancellable_statuses) ) {
					if(!empty($status)){
						$statuses = explode(',',$status);
						$newOrder = new stdClass();
						$newOrder->order_status = reset($statuses);
						$newOrder->order_id = $order_id;
						$class->save($newOrder);

						if( JRequest::getVar('email',false) ) {
							$mailClass = hikashop_get('class.mail');
							$infos = null;
							$infos =& $order;
							$mail = $mailClass->get('order_cancel',$infos);
							if( !empty($mail) ) {
								$mail->subject =
JText::sprintf($mail->subject,HIKASHOP_LIVE);
								$config =& hikashop_config();
								if(!empty($infos->email)){
									$mail->dst_email = $infos->email;
								}else{
									$mail->dst_email = $config->get('from_email');
								}
								if(!empty($infos->name)){
									$mail->dst_name = $infos->name;
								}else{
									$mail->dst_name = $config->get('from_name');
								}
								$mailClass->sendMail($mail);
							}
						}
					}
				}
			}
			$db = JFactory::getDBO();
			$query = 'SELECT * FROM
'.hikashop_table('payment').' WHERE
payment_type='.$db->Quote($order->order_payment_method).'
AND payment_id='.$db->Quote($order->order_payment_id);
			$db->setQuery($query);
			$paymentData = $db->loadObjectList();
			$pluginsClass = hikashop_get('class.plugins');
			$pluginsClass->params($paymentData,'payment');
			$paymentOptions=reset($paymentData);
			if(!empty($paymentOptions->payment_params->cancel_url)){
				$cancel_url = $paymentOptions->payment_params->cancel_url;
			}
		}
		$redirect_url = JRequest::getVar('redirect_url');
		if( !empty($redirect_url) )
			$cancel_url = $redirect_url;

		$app->redirect($cancel_url);
		return true;
	}

	function invoice(){
		if($this->_check()){
			JRequest::setVar( 'layout', 'invoice'  );
			return parent::display();
		}
		return true;
	}

	function pay(){
		if(!$this->_check()){
			return false;
		}
		$order_id = hikashop_getCID('order_id');
		if(empty($order_id)){
			parent::listing();
			return false;
		}

		$class = hikashop_get('class.order');
		$order = $class->loadFullOrder($order_id,true);
		if(empty($order->order_id)){
			$app =& JFactory::getApplication();
			$app->enqueueMessage('The order '.$order_id.' could
not be found');
			parent::listing();
			return false;
		}

		$config =& hikashop_config();
		$default_status =
$config->get('order_created_status','created');
		if($order->order_status!=$default_status){
			$app =& JFactory::getApplication();
			$app->enqueueMessage('The order
'.$order->order_number.' cannot be paid anymore.');
			parent::listing();
			return false;
		}

		if(empty($order->order_currency_id)){
			$null = new stdClass();
			$null->order_currency_id = hikashop_getCurrency();
			$null->order_id = $order->order_id;
			$order->order_currency_id = $null->order_currency_id;
			$class->save($null);
		}
		$new_payment_method =
JRequest::getVar('new_payment_method','');
		$config =& hikashop_config();
		if($config->get('allow_payment_change',1) &&
!empty($new_payment_method)){
			$new_payment_method = explode('_',$new_payment_method);
			$payment_id = array_pop($new_payment_method);
			$payment_method = implode('_',$new_payment_method);
			if($payment_id!=$order->order_payment_id ||
$payment_method!=$order->order_payment_method){
				$updateOrder=new stdClass();
				$updateOrder->order_id=$order->order_id;
				$updateOrder->order_payment_id = $payment_id;
				$updateOrder->order_payment_method = $payment_method;
				$paymentClass = hikashop_get('class.payment');
				$payment = $paymentClass->get($payment_id);
				if(!empty($payment->payment_params)&&is_string($payment->payment_params)){
					$payment->payment_params=unserialize($payment->payment_params);
				}
				$full_price_without_payment =
$order->order_full_price-$order->order_payment_price;
				$new_payment_price = ($full_price_without_payment *
(float)@$payment->payment_params->payment_percentage / 100) +
@$payment->payment_price;
				$updateOrder->order_payment_price = $new_payment_price;
				$updateOrder->order_full_price =
$full_price_without_payment+$new_payment_price;
				$updateOrder->history = new stdClass();
				$updateOrder->history->history_payment_id = $payment_id;
				$updateOrder->history->history_payment_method = $payment_method;
				$class->save($updateOrder);
				$order->order_payment_id = $payment_id;
				$order->order_payment_method = $payment_method;
				$order->order_payment_price = $updateOrder->order_payment_price;
				$order->order_full_price = $updateOrder->order_full_price;
			}
		}

		$userClass = hikashop_get('class.user');
		$order->customer = $userClass->get($order->order_user_id);
		$db = JFactory::getDBO();
		$query = 'SELECT * FROM
'.hikashop_table('payment').' WHERE
payment_type='.$db->Quote($order->order_payment_method);
		$db->setQuery($query);
		$paymentData = $db->loadObjectList('payment_id');
		$pluginsClass = hikashop_get('class.plugins');
		$pluginsClass->params($paymentData,'payment');
		if(empty($paymentData)){
			$app =& JFactory::getApplication();
			$app->enqueueMessage('The payment method
'.$order->order_payment_method.' could not be found');

			parent::listing();
			return false;
		}
		$order->cart =& $order;
		$order->cart->coupon = new stdClass();
		$price = new stdClass();
		$price->price_value_with_tax = $order->order_full_price;
		$order->cart->full_total = new stdClass();
		$order->cart->full_total->prices = array($price);
		$price2 = new stdClass();
		$total = 0;
		$class = hikashop_get('class.currency');
		$order->cart->total = new stdClass();
		$price2 =
$class->calculateTotal($order->products,$order->cart->total,$order->order_currency_id);
		$order->cart->coupon->discount_value =&
$order->order_discount_price;

		$shippingClass = hikashop_get('class.shipping');
		$methods = $shippingClass->getMethods($order->cart);
		$data =
hikashop_import('hikashopshipping',$order->order_shipping_method);
		if(!empty($data))
			$order->cart->shipping =
$data->onShippingSave($order->cart,$methods,$order->order_shipping_id);

		$app = JFactory::getApplication();
		$app->setUserState(
HIKASHOP_COMPONENT.'.shipping_address',$order->order_shipping_address_id);
		$app->setUserState(
HIKASHOP_COMPONENT.'.billing_address',$order->order_billing_address_id);
		ob_start();
		$data =
hikashop_import('hikashoppayment',$order->order_payment_method);
		if(!empty($data)){
			$needCC = false;
			if( method_exists($data, 'needCC') ) {
				$method =& $paymentData[$order->order_payment_id];
				$needCC = $data->needCC($method);
			}
			if( !$needCC ) {
				$itemid_for_checkout =
$config->get('checkout_itemid','0');
				if($itemid_for_checkout){
					global $Itemid;
					$Itemid = $itemid_for_checkout;
				}
				if(method_exists($data,'onAfterOrderConfirm'))
$data->onAfterOrderConfirm($order,$paymentData,$order->order_payment_id);
			} else {
				$paymentClass = hikashop_get('class.payment');
				$do = false;

				$app->setUserState(
HIKASHOP_COMPONENT.'.payment_method',$order->order_payment_method);
				$app->setUserState(
HIKASHOP_COMPONENT.'.payment_id',$order->order_payment_id);
				$app->setUserState(
HIKASHOP_COMPONENT.'.payment_data',$method);

				if( $paymentClass->readCC() ) {
					$do = true;
					if(method_exists($data,'onBeforeOrderCreate'))
$data->onBeforeOrderCreate($order, $do);
				}

				if( !$do ) {
					$app->setUserState(
HIKASHOP_COMPONENT.'.cc_number','');
					$app->setUserState(
HIKASHOP_COMPONENT.'.cc_month','');
					$app->setUserState(
HIKASHOP_COMPONENT.'.cc_year','');
					$app->setUserState(
HIKASHOP_COMPONENT.'.cc_CCV','');
					$app->setUserState(
HIKASHOP_COMPONENT.'.cc_type','');
					$app->setUserState(
HIKASHOP_COMPONENT.'.cc_owner','');

					$params = '';
					$js = '';
					echo
hikashop_getLayout('checkout','ccinfo',$params,$js);
				} else {
					$order->history->history_notified = 1;
					$class = hikashop_get('class.order');
					$updateOrder=new stdClass();
					$updateOrder->order_id=$order->order_id;
					$updateOrder->order_status=$order->order_status;
					$updateOrder->order_payment_id = $payment_id;
					$updateOrder->order_payment_method = $payment_method;
					$updateOrder->history =& $order->history;

					$class->save($updateOrder);

					$app->redirect(
hikashop_completeLink('checkout&task=after_end', false, true)
);
				}
			}
		}
		$html = ob_get_clean();
		if(empty($html)){
			$app =& JFactory::getApplication();
			$app->enqueueMessage('The payment method
'.$order->order_payment_method.' does not handle payments
after the order has been created');
			parent::listing();
			return false;
		}
		echo $html;
		return true;
	}

	function download(){
		$file_id = JRequest::getInt('file_id');
		if(empty($file_id)){
			$field_table = JRequest::getWord('field_table');
			$field_namekey =
base64_decode(urldecode(JRequest::getString('field_namekey')));
			$name =
base64_decode(urldecode(JRequest::getString('name')));
			if(empty($field_table)||empty($field_namekey)||empty($name)){
				$app=JFactory::getApplication();
				$app->enqueueMessage(JText::_('FILE_NOT_FOUND'));
				return false;
			}else{
				$fileClass = hikashop_get('class.file');
				$fileClass->downloadFieldFile($name,$field_table,$field_namekey);
			}

		}

		$order_id = hikashop_getCID('order_id');
		if(empty($order_id)){
			parent::listing();
			return false;
		}

		$file_pos = JRequest::getInt('file_pos', 1);

		$fileClass = hikashop_get('class.file');
		if(!$fileClass->download($file_id, $order_id, $file_pos)){
			switch($fileClass->error_type){
				case 'login':
					$this->_check(false);
					break;
				case 'no_order';
					parent::listing();
					break;
				default:
					parent::show();
					break;
			}
		}
		return true;
	}

	function _check($message = true){
		$user_id = hikashop_loadUser();
		if(empty($user_id)){
			$app = JFactory::getApplication();
			if($message)
$app->enqueueMessage(JText::_('PLEASE_LOGIN_FIRST'));
			global $Itemid;
			$url = '';
			if(!empty($Itemid)){
				$url='&Itemid='.$Itemid;
			}
			if(version_compare(JVERSION,'1.6','<')){
				$url = 'index.php?option=com_user&view=login'.$url;
			}else{
				$url = 'index.php?option=com_users&view=login'.$url;
			}
			$app->redirect(JRoute::_($url.'&return='.urlencode(base64_encode(hikashop_currentUrl('',false))),false));
			return false;
		}
		$order_id = hikashop_getCID('order_id');
		if(empty($order_id)){
			parent::listing();
			return false;
		}
		return true;
	}

	function cancel(){
		$cancel_redirect = JRequest::getString('cancel_redirect');
		if(empty($cancel_redirect)){
			$cancel_url = JRequest::getString('cancel_url');
			if(!empty($cancel_url)){
				$this->setRedirect(base64_decode(urldecode($cancel_url)));
			}else{
				$order_id = hikashop_getCID('order_id');
				if(empty($order_id)){
					global $Itemid;
					$url = '';
					if(!empty($Itemid)){
						$url='&Itemid='.$Itemid;
					}
					$this->setRedirect(hikashop_completeLink('user'.$url,false,true));
				}else{
					return $this->listing();
				}
			}
		}else{
			$this->setRedirect(urldecode($cancel_redirect));
		}
	}

	function getUploadSetting($upload_key, $caller = '') {
		if(empty($upload_key))
			return false;
		if(strpos($upload_key, '-') === false)
			return false;
		if(in_array($caller, array('galleryimage',
'galleryselect', 'image')))
			return false;

		list($field_table, $field_namekey) = explode('-', $upload_key,
2);

		$fieldClass = hikashop_get('class.field');
		$field = $fieldClass->getField($field_namekey, $field_table);

		if(empty($field) || ($field->field_type != 'ajaxfile'
&& $field->field_type != 'ajaximage'))
			return false;

		$map = JRequest::getString('field_map', '');
		if(empty($map))
			return false;

		$config = hikashop_config();
		$options = array(
			'upload_dir' =>
$config->get('uploadsecurefolder')
		);

		$type = ($field->field_type == 'ajaxfile') ?
'file' : 'image';

		return array(
			'limit' => 1,
			'type' => $type,
			'options' => $options,
			'extra' => array(
				'field_name' => $map
			)
		);
	}

	function manageUpload($upload_key, &$ret, $uploadConfig, $caller =
'') {
		if(empty($ret) || empty($ret->name))
			return;

		if(empty($upload_key))
			return;
		if(strpos($upload_key, '-') === false)
			return;

		list($field_table, $field_namekey) = explode('-',
$upload_key);

		$fieldClass = hikashop_get('class.field');
		$field = $fieldClass->getField($field_namekey, $field_table);

		if(empty($field) || ($field->field_type != 'ajaxfile'
&& $field->field_type != 'ajaximage'))
			return;

		$map = JRequest::getString('field_map', '');
		if(empty($map))
			return;

		if($field->field_type == 'ajaxfile')
			$ajaxFileClass = new hikashopAjaxfile($fieldClass);
		else
			$ajaxFileClass = new hikashopAjaximage($fieldClass);
		$ajaxFileClass->_manageUpload($field, $ret, $map, $uploadConfig,
$caller);
	}
}
plugins.php000064400000001670151200171270006736 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 PluginsController extends hikashopController {
	var $type = 'plugins';
	var $listing = true;

	function __construct($config = array()){
		parent::__construct($config);
		$this->modify[]='trigger';
	}

	function trigger(){
		$cid= JRequest::getInt('cid', 0);
		$function = 'productDisplay';
		if(empty($cid) || empty($function)){
			return false;
		}
		$pluginsClass = hikashop_get('class.plugins');
		$plugin = $pluginsClass->get($cid);
		if(empty($plugin)){
			return false;
		}
		$plugin = hikashop_import($plugin->folder, $plugin->element);
		if(method_exists($plugin, $function))
			return $plugin->$function();
		return false;
	}
}
product.php000064400000044220151200171270006733 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 productController extends hikashopController{
	var $modify = array();
	var $delete = array();
	var $modify_views = array();

	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->display[]='updatecart';
		$this->display[]='cart';
		$this->display[]='cleancart';
		$this->display[]='contact';
		$this->display[]='compare';
		$this->display[]='waitlist';
		$this->display[]='send_email';
		$this->display[]='add_waitlist';
		$this->display[]='price';
		$this->display[]='download';
		$this->display[]='printcart';
		$this->display[]='sendcart';
	}
	function authorize($task){
		if($this->isIn($task,array('display'))){
			return true;
		}
		return false;
	}

	function printcart(){
		JRequest::setVar( 'layout', 'printcart' );
		return parent::display();
	}
	function sendcart(){
		JRequest::setVar( 'layout', 'sendcart' );
		return parent::display();
	}

	function contact(){
		JRequest::setVar( 'layout', 'contact' );
		return $this->display();
	}

	function compare(){
		JRequest::setVar( 'layout', 'compare' );
		return $this->display();
	}

	function waitlist(){
		JRequest::setVar( 'layout', 'waitlist' );
		return $this->display();
	}

	function price(){
		JRequest::setVar( 'layout', 'option_price' );
		return $this->display();
	}

	function send_email(){
		JRequest::checkToken('request') || jexit( 'Invalid
Token' );
		$element = new stdClass();
		$formData = JRequest::getVar( 'data', array(), '',
'array' );
		if(empty($formData['contact'])) $formData['contact']
= @$formData['register'];
		foreach($formData['contact'] as $column => $value) {
			hikashop_secureField($column);
			$element->$column = strip_tags($value);
		}
		$app = JFactory::getApplication();
		if(empty($element->email)){
			$app->enqueueMessage(JText::_('VALID_EMAIL'));
			return $this->contact();
		}
		$config =& hikashop_config();
		if(!$config->get('product_contact',0)){
			return $this->contact();
		}

		$dispatcher = JDispatcher::getInstance();
		$send = true;
		$dispatcher->trigger( 'onBeforeSendContactRequest', array(
& $element,& $send ) );
		if($send){
			$subject = JText::_('CONTACT_REQUEST');
			if(!empty($element->product_id)){
				$productClass = hikashop_get('class.product');
				$product = $productClass->get((int)$element->product_id);
				if(!empty($product)){
					if($product->product_type=='variant'){
						$db = JFactory::getDBO();
						$db->setQuery('SELECT * FROM
'.hikashop_table('variant').' AS a LEFT JOIN
'.hikashop_table('characteristic') .' AS b ON
a.variant_characteristic_id=b.characteristic_id WHERE
a.variant_product_id='.(int)$element->product_id.' ORDER BY
a.ordering');
						$product->characteristics = $db->loadObjectList();
						$parentProduct =
$productClass->get((int)$product->product_parent_id);
						$productClass->checkVariant($product,$parentProduct);
					}
					if(!empty($product->product_name)){
						$subject =
JText::sprintf('CONTACT_REQUEST_FOR_PRODUCT',strip_tags($product->product_name));
					}
				}
			}

			$mailClass = hikashop_get('class.mail');
			$infos = new stdClass();
			$infos->element =& $element;
			$infos->product =& $product;
			$mail = $mailClass->get('contact_request',$infos);
			$mail->subject = $subject;
			$mail->from_email = $config->get('from_email');
			$mail->from_name = $config->get('from_name');
			$mail->reply_email = $element->email;
			$mail->dst_email = array($config->get('from_email'));
			$status = $mailClass->sendMail($mail);

			if($status){
				$app->enqueueMessage(JText::_('CONTACT_REQUEST_SENT'));
				if(JRequest::getString('tmpl', '') ==
'component') {
					$doc = JFactory::getDocument();
					$doc->addScriptDeclaration('setTimeout(function(){
window.parent.hikashop.closeBox(); }, 4000);');
					return true;
				}
				if(!empty($product->product_id)){
					$url_itemid = '';
					if(!empty($Itemid)){
						$url_itemid = '&Itemid='.(int)$Itemid;
					}
					if(!isset($productClass))
						$productClass = hikashop_get('class.product');
					$productClass->addAlias($product);
					$app->enqueueMessage(JText::sprintf('CLICK_HERE_TO_GO_BACK_TO_PRODUCT',hikashop_completeLink('product&task=show&cid='.$product->product_id.'&name='.$product->alias.$url_itemid)));
				}
			}
		}
		$url = JRequest::getVar('redirect_url');
		if($send && !empty($url)) {
			$app->redirect($url);
		} else {
			$this->contact();
		}

	}

	function add_waitlist() {
		JRequest::checkToken('request') || jexit( 'Invalid
Token' );
		$element = new stdClass();
		$formData = JRequest::getVar( 'data', array(), '',
'array' );
		foreach($formData['register'] as $column => $value){
			hikashop_secureField($column);
			$element->$column = strip_tags($value);
		}
		$user = JFactory::getUser();
		$app= JFactory::getApplication();
		if(empty($element->email) && $user->guest){
			$app->enqueueMessage(JText::_('VALID_EMAIL'));
			return $this->waitlist();
		}
		$config =& hikashop_config();
		if(!$config->get('product_waitlist',0)){
			return $this->waitlist();
		}
		$waitlist_subscribe_limit =
$config->get('product_waitlist_sub_limit',10);

		$product_id = 0;
		$itemId = JRequest::getVar('Itemid');
		$alias = '';
		if(!empty($element->product_id)){
			$class = hikashop_get('class.product');
			$product = $class->get((int)$element->product_id);
			if(!empty($product)){
				if($product->product_type=='variant'){
					$db = JFactory::getDBO();
					$db->setQuery('SELECT * FROM
'.hikashop_table('variant').' AS a LEFT JOIN
'.hikashop_table('characteristic') .' AS b ON
a.variant_characteristic_id=b.characteristic_id WHERE
a.variant_product_id='.(int)$element->product_id.' ORDER BY
a.ordering');
					$product->characteristics = $db->loadObjectList();
					$parentProduct = $class->get((int)$product->product_parent_id);
					$class->checkVariant($product,$parentProduct);
				}
				$product_id = (int)$product->product_id;
				$class->addAlias($product);
				$alias = $product->alias;
			}
		}
		if( $product_id == 0 ) {
			return $this->waitlist();
		}

		$email = (!empty($element->email)) ? $element->email :
'';
		$name = (!empty($element->name)) ? $element->name : '';

		$db = JFactory::getDBO();

		$sql = 'SELECT waitlist_id FROM
'.hikashop_table('waitlist').' WHERE
email='.$db->quote($email).' AND
product_id='.(int)$product_id;
		$db->setQuery($sql);
		$subscription = $db->loadResult();
		if(empty($subscription)) {
			$sql = 'SELECT count(*) FROM
'.hikashop_table('waitlist').' WHERE
product_id='.(int)$product_id;
			$db->setQuery($sql);
			$subscriptions = $db->loadResult();

			if( $subscriptions < $waitlist_subscribe_limit ||
$waitlist_subscribe_limit <= 0 ) {
				$sql = 'INSERT IGNORE INTO
'.hikashop_table('waitlist').'
(`product_id`,`date`,`email`,`name`,`product_item_id`) VALUES
('.(int)$product_id.', '.time().',
'.$db->quote($email).', '.$db->quote($name).',
'.(int)$itemId.');';
				$db->setQuery($sql);
				$db->query();
				$app->enqueueMessage(JText::_('WAITLIST_SUBSCRIBE'));
			} else {
				$app->enqueueMessage(JText::_('WAITLIST_FULL'));
			}
		} else {
			$app->enqueueMessage(JText::_('ALREADY_REGISTER_WAITLIST'));
		}
		$app->enqueueMessage(JText::sprintf('CLICK_HERE_TO_GO_BACK_TO_PRODUCT',hikashop_completeLink('product&task=show&cid='.$product->product_id.'&name='.$alias)));

		$url = JRequest::getVar('redirect_url');
		if(!empty($url)){
			$app->redirect($url);
		}else{
			$this->waitlist();
		}
	}

	function cleancart(){
		$class = hikashop_get('class.cart');
		if($class->hasCart()){
			$class->delete($class->cart->cart_id);
		}

		$url = JRequest::getVar('return_url','');
		if(empty($url)){
			$url = JRequest::getVar('url','');
			$url = urldecode($url);
		}else{
			$url = base64_decode(urldecode($url));
		}

		if(!empty($url)){
			if(strpos($url,'tmpl=component')!==false ||
strpos($url,'tmpl-component')!==false){
				if(!empty($_SERVER['HTTP_REFERER'])){
					$app =& JFactory::getApplication();
					$app->redirect($_SERVER['HTTP_REFERER']);
				}else{
					echo '<html><head><script
type="text/javascript">history.back();</script></head><body></body></html>';
					exit;
				}
			}
			if(hikashop_disallowUrlRedirect($url)) return false;
			$this->setRedirect($url);
		}else{
			echo '<html><head><script
type="text/javascript">history.go(-1);</script></head><body></body></html>';
			exit;
		}
	}

	function updatecart(){
		$app = JFactory::getApplication();
		$product_id = (int)JRequest::getCmd('product_id',0);
		$module_id = (int)JRequest::getCmd('module_id',0);

		$cart_type =
JRequest::getString('hikashop_cart_type_'.$product_id.'_'.$module_id,'null');

		if($cart_type == 'null')
			$cart_type =
JRequest::getString('hikashop_cart_type_'.$module_id,'null');

		if($cart_type == 'null'){
			$cart_type =
JRequest::getString('cart_type','cart');
		}

		$cart_type_id = $cart_type.'_id';

		if(JRequest::getInt('cart_id',0,'GET') != 0){
			$cart_id = JRequest::getInt('cart_id',0,'GET');
		}else{
			$cart_id =
$app->getUserState(HIKASHOP_COMPONENT.'.'.$cart_type_id,0);
		}

		$addTo = JRequest::getString('add_to','');
		if($addTo != ''){
			$from_id = $cart_id;
			if($addTo == 'cart')
				JRequest::setVar('from_id',$cart_id);
			$cart_id =
$app->getUserState(HIKASHOP_COMPONENT.'.'.$addTo.'_id',0);
			$cart_type_id = $addTo.'_id';
			JRequest::setVar('cart_type', $addTo);
		}else{
			JRequest::setVar('cart_type', $cart_type);
		}
		JRequest::setVar($cart_type_id, $cart_id);


		$char = JRequest::getString('characteristic','');
		if(!empty($char)){
			return $this->show();
		}else{
			$tmpl = JRequest::getCmd('tmpl','index');
			$add = JRequest::getCmd('add','');
			if(!empty($add)){
				$add=1;
			}else{
				$add=0;
			}


			if(empty($product_id)){
				$product_id = JRequest::getCmd('cid',0);
			}
			$cart_product_id = JRequest::getCmd('cart_product_id',0);
			$quantity = JRequest::getInt('quantity',1);
			$class = hikashop_get('class.cart');

			if(hikashop_loadUser() != null || $cart_type != 'wishlist'){
				if(!empty($product_id)){
					$type = JRequest::getWord('type','product');
					if($type=='product'){
						$product_id=(int)$product_id;
					}
					$status = $class->update($product_id,$quantity,$add,$type);
				}elseif(!empty($cart_product_id)){
					$status =
$class->update($cart_product_id,$quantity,$add,'item');
				}else{
					$formData = JRequest::getVar( 'item', array(), '',
'array' );
					if(!empty($formData)){
						$class->update($formData,0,$add,'item');
					}else{
						$formData = JRequest::getVar( 'data', array(),
'', 'array' );
						if(!empty($formData)){

							$class->update($formData,0,$add);
						}
					}
				}
			}

			$app->setUserState(HIKASHOP_COMPONENT.'.'.$cart_type.'_new',
'1');

			if(@$class->errors && $tmpl!='component'){
				if(!empty($_SERVER['HTTP_REFERER'])){
					if(strpos($_SERVER['HTTP_REFERER'],HIKASHOP_LIVE)===false
&&
preg_match('#^https?://.*#',$_SERVER['HTTP_REFERER']))
return false;
					$app->redirect(
str_replace('&popup=1','',$_SERVER['HTTP_REFERER']));
				}else{
					echo '<html><head><script
type="text/javascript">history.back();</script></head><body></body></html>';
					exit;
				}
			}
			$app->setUserState( HIKASHOP_COMPONENT.'.shipping_method',
null);
			$app->setUserState( HIKASHOP_COMPONENT.'.shipping_id',
null);
			$app->setUserState( HIKASHOP_COMPONENT.'.shipping_data',
null);
			$app->setUserState( HIKASHOP_COMPONENT.'.payment_method',
null);
			$app->setUserState( HIKASHOP_COMPONENT.'.payment_id',
null);
			$app->setUserState( HIKASHOP_COMPONENT.'.payment_data',
null);
			$config =& hikashop_config();
			$checkout = JRequest::getString('checkout','');

			if(!empty($checkout)){
				global $Itemid;
				$url = 'checkout';
				if(!empty($Itemid)){
					$url.='&Itemid='.$Itemid;
				}
				$url = hikashop_completeLink($url,false,true);
				$this->setRedirect($url);
			}
			else if($cart_type == 'wishlist'){
				if(hikashop_loadUser() == null){
					$url = JRequest::getVar('return_url','');
					if(!empty($url)){
						$url=base64_decode(urldecode($url));
					}
					$url =
str_replace(array('&popup=1','?popup=1'),'',$url);
					if($config->get('redirect_url_after_add_cart','stay_if_cart')
!= 'ask_user'){
						$app->enqueueMessage(JText::_('LOGIN_REQUIRED_FOR_WISHLISTS'));
					}
					echo 'notLogged';
					exit;
				}else{
					$redirectConfig =
$config->get('redirect_url_after_add_cart','stay_if_cart');
					$url='';
					$stay = 0;
					switch($redirectConfig){
						case 'ask_user':
							$url = JRequest::getVar('return_url','');
							if(!empty($url)){
								$url=base64_decode(urldecode($url));
							}
							$url =
str_replace(array('&popup=1','?popup=1'),'',$url);
							if(JRequest::getInt('popup',0) ||
JRequest::getInt('quantity',0)){
								if(strpos($url,'?')){
									$url.='&';
								}else{
									$url.='?';
								}
								$url.='popup=1';
								$app->setUserState(
HIKASHOP_COMPONENT.'.popup','1');
							}
							JRequest::setVar('cart_type','wishlist');
							$app->setUserState(
HIKASHOP_COMPONENT.'.popup_cart_type','wishlist');
							break;
						case 'stay':
							$stay = 1;
							break; //$stay = 1; && $url ='';
						case 'checkout':
							break; //$stay = 0; && $url ='';
						case 'stay_if_cart':
						default:
							$module =
JModuleHelper::getModule('hikashop_cart',false);
							if($module != null){
								$stay = 1;
							}
							break;
					}
					if($redirectConfig != 'checkout'){
						$params = new HikaParameter( @$module->params );
						if(!empty($module)){
							$module_options =
$config->get('params_'.$module->id);
						}
						if(empty($module_options)){
							$module_options = $config->get('default_params');
						}
						foreach($module_options as $key => $optionElement){
							$params->set($key,$optionElement);
						}
						if(!empty($module)){
							foreach(get_object_vars($module) as $k => $v){
								if(!is_object($v)){
									$params->set($k,$v);
								}
							}
							$params->set('from','module');
						}
						$params->set('return_url',$url);
						$params->set('cart_type','wishlist');
						$js ='';
						hikashop_getLayout('product','cart',$params,$js);
					}
				}
				if(empty($url)){
					global $Itemid;
					if(isset($from_id))$cart_id = $from_id;
					if(JRequest::getInt('new_'.$cart_type.'_id',0)!= 0
&& JRequest::getInt('delete',0) == 0)$cart_id =
JRequest::getInt('new_'.$cart_type.'_id',0);
					$cart = $class->get($cart_id,false,$cart_type);
					if(!empty($cart) && (int)$cart_id != 0){
						$url =
'cart&task=showcart&cart_type=wishlist&cart_id='.$cart_id.'&Itemid='.$Itemid;
					}else{
						$url =
'cart&task=showcarts&cart_type=wishlist&Itemid='.$Itemid;
					}
					$url = hikashop_completeLink($url,false,true);
				}
				$stay = JRequest::getInt('stay',0);
				if($stay == 0){
					if(hikashop_disallowUrlRedirect($url)) return false;
					if(JRequest::getVar('from_form',false)){
						JRequest::setVar('cart_type','wishlist');
						$this->setRedirect($url);
						return false;
					}else{
						ob_clean();
						echo 'URL|'.$url;
						exit;
					}
				}else{
					echo '<html><head><script
type="text/javascript">history.back();</script></head><body></body></html>';
					exit;
				}
			}else{
				$url = JRequest::getVar('return_url','');
				if(empty($url)){
					$url = JRequest::getVar('url','');
					$url = urldecode($url);
				}else{
					$url = base64_decode(urldecode($url));
				}
				$url =
str_replace(array('&popup=1','?popup=1'),'',$url);

				if(empty($url)){
					global $Itemid;
					$url = 'checkout';
					if(!empty($Itemid)){
						$url.='&Itemid='.$Itemid;
					}
					$url = hikashop_completeLink($url,false,true);
				}
				$params = new HikaParameter( @$module->params );
				if($tmpl=='component' &&
$config->get('redirect_url_after_add_cart','stay_if_cart')
!= 'checkout'){
					$js ='';
					jimport('joomla.application.module.helper');
					global $Itemid;
					if(isset($Itemid) && empty($Itemid)){
						$Itemid=null;
						JRequest::setVar('Itemid',null);
					}
					$module = JModuleHelper::getModule('hikashop_cart',false);
					$config =& hikashop_config();
					$params = new HikaParameter( @$module->params );
					if(!empty($module)){
						$module_options =
$config->get('params_'.$module->id);
					}
					if(empty($module_options)){
						$module_options = $config->get('default_params');
					}
					foreach($module_options as $key => $optionElement){
						$params->set($key,$optionElement);
					}
					if(!empty($module)){
						foreach(get_object_vars($module) as $k => $v){
							if(!is_object($v)){
								$params->set($k,$v);
							}
						}
						$params->set('from','module');
					}
					$params->set('return_url',$url);
					hikashop_getLayout('product','cart',$params,$js);
					return true;
				}else{
					$config =& hikashop_config();
					$url =
str_replace(array('&popup=1','?popup=1'),'',$url);
					if(JRequest::getInt('popup',0) ||
(@JRequest::getInt('quantity',0) &&
$config->get('redirect_url_after_add_cart','stay_if_cart')
== 'ask_user')){
						if(strpos($url,'?')){
							$url.='&';
						}else{
							$url.='?';
						}
						$url.='popup=1';
						$app->setUserState(
HIKASHOP_COMPONENT.'.popup','1');
					}
					if(hikashop_disallowUrlRedirect($url)) return false;
					if($config->get('ajax_add_to_cart','1') ==
'0'){
						$this->setRedirect($url);
						return false;
					}else{
						ob_clean();
						if($params->get('from','module') ==
'module'){
							$this->setRedirect($url);
							return false;
						}else{
							echo 'URL|'.$url;
							exit;
						}
					}
				}
			}
		}
	}

	function download() {
		$file_id = JRequest::getInt('file_id');
		if(!$file_id){ return false; }
		$fileClass = hikashop_get('class.file');
		$fileClass->download($file_id);
		return true;
	}
}
translations.php000064400000002050151200171270007767 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	4.4.1
 * @author	hikashop.com
 * @copyright	(C) 2010-2021 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 TranslationsController extends hikashopController{
	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		$this->display[]='load';
		if(!$skip){
			$this->registerDefaultTask('load');
		}
		hikaInput::get()->set('tmpl','component');
	}
	function load(){
		hikashop_nocache();
		hikashop_cleanBuffers();
		header('X-Robots-Tag: noindex');
		$translations = (string)
hikaInput::get()->getVar('translations');
		if(empty($translations)) {
			echo '{No translation keys found}';
			exit;
		}
		$translations = explode(',',$translations);
		$results = array();
		foreach($translations as $translation) {
			$results[$translation] = JText::_('HIKA_JS_'.$translation);
		}
		echo json_encode($results);
		exit;
	}
}
upload.php000064400000030611151200171270006536 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 uploadController extends hikashopController {

	var $display =
array('upload','image','galleryimage','');
	var $modify_views =
array('addimage','galleryselect');
	var $add = array();
	var $modify = array('upload');
	var $delete = array();

	protected $base_controller = null;

	public function __construct($config = array(),$skip=false) {
		parent::__construct($config,$skip);
		if(!$skip)
			$this->registerDefaultTask('galleryimage');
		$this->config = hikashop_config();

		$controllerName = JRequest::getCmd('uploader', '');
		if(!empty($controllerName)) {
			$this->base_controller =
hikashop_get('controller.'.$controllerName);
			if(!method_exists($this->base_controller,
'getUploadSetting'))
				$this->base_controller = null;
		}
	}

	public function image() {
		$upload_key = JRequest::getVar('field', '');
		if(empty($this->base_controller))
			return false;

		$uploadConfig =
$this->base_controller->getUploadSetting($upload_key,
'image');
		if($uploadConfig === false)
			return false;

		if(!empty($uploadConfig['type']) &&
$uploadConfig['type'] != 'image')
			return false;

		JRequest::setVar('layout', 'sendfile');
		JRequest::setVar('uploadConfig', $uploadConfig);
		return parent::display();
	}

	public function galleryimage() {
		$upload_key = JRequest::getVar('field', '');
		if(empty($this->base_controller))
			return false;

		$uploadConfig =
$this->base_controller->getUploadSetting($upload_key,
'galleryimage');
		if($uploadConfig === false)
			return false;

		if(!empty($uploadConfig['type']) &&
$uploadConfig['type'] != 'image')
			return false;

		JRequest::setVar('layout', 'galleryimage');
		JRequest::setVar('uploadConfig', $uploadConfig);
		return parent::display();
	}

	public function addImage() {
		$upload_key = JRequest::getVar('field', '');
		if(empty($this->base_controller))
			return false;

		$uploadConfig =
$this->base_controller->getUploadSetting($upload_key,
'addimage');
		if($uploadConfig === false)
			return false;

		if(!empty($uploadConfig['type']) &&
$uploadConfig['type'] != 'image')
			return false;

		$layout = 'upload';
		if(!empty($uploadConfig['layout']))
			$layout = $uploadConfig['layout'];
		$viewName = '';
		if(!empty($uploadConfig['view']))
			$viewName = $uploadConfig['view'];
		$type = 'image';
		if(!empty($uploadConfig['type']))
			$type = $uploadConfig['type'];
		if(empty($viewName))
			$viewName = ($type == 'image') ? 'image_entry' :
'file_entry';

		$extra_data = array();
		if(!empty($uploadConfig['extra']))
			$extra_data = $uploadConfig['extra'];

		if(empty($extra_data['field']))
			$extra_data['field'] = $upload_key;

		$this->processUploadOption($options, $type);
		if(empty($options) || empty($options['upload_dir']))
			return false;

		$uploadHelper = hikashop_get('helper.upload');
		$ret = $uploadHelper->processFallback($options);

		$output = '[]';
		if($ret !== false && empty($ret->error)) {
			$helperImage = null;
			if($type == 'image') {
				$helperImage = hikashop_get('helper.image');
			}

			$out = array();
			foreach($ret as &$r) {
				if(!empty($r->error))
					continue;

				$file = new stdClass();
				$file->file_description = '';
				$file->file_name = $r->name;
				$file->file_type = $type;
				$file->file_path = $options['sub_folder'].$r->name;
				$file->file_url =
$options['upload_url'].$options['sub_folder'];

				foreach($extra_data as $k => $v) {
					$file->$k = $v;
				}

				if(strpos($file->file_name, '.') !== false) {
					$file->file_name = substr($file->file_name, 0,
strrpos($file->file_name, '.'));
				}

				$r->html = '';
				$js = '';

				if($type == 'image') {
					$img = $helperImage->getThumbnail($file->file_path, array(100,
100), array('default' => true));
					$r->thumbnail_url = $img->url;

					$params = new stdClass();
					$params->file_path = $file->file_path;
					$params->file_name = $file->file_name;
					$params->file_url = $file->file_url;
				} else {
					$params = new stdClass();
					$params->file_name = $file->file_name;
					$params->file_path = $file->file_path;
					$params->file_url = $file->file_url;
					$params->file_limit = -1;
					$params->file_size = @filesize($options['upload_dir'] .
$options['sub_folder'] . $file->file_name);
				}

				foreach($extra_data as $k => $v) {
					$params->$k = $v;
				}

				$r->params = $params;
				$this->base_controller->manageUpload($upload_key, $r,
$uploadConfig, 'addimage');

				if(empty($r->html))
					$r->html = hikashop_getLayout($layout, $viewName, $params, $js);

				$out[] = $r->html;

				unset($r->path);
				unset($r->params);
				unset($r);
			}

			if(!empty($out))
				$output = json_encode($out);
			unset($out);
			unset($ret);
		}

		$js =
'window.hikashop.ready(function(){window.parent.hikashop.submitBox({images:'.$output.'});});';
		$doc = JFactory::getDocument();
		$doc->addScriptDeclaration($js);
		return true;
	}

	public function galleryselect() {
		$upload_key = JRequest::getVar('field', '');
		if(empty($this->base_controller))
			return false;

		$uploadConfig =
$this->base_controller->getUploadSetting($upload_key,
'galleryselect');
		if($uploadConfig === false)
			return false;

		if(!empty($uploadConfig['type']) &&
$uploadConfig['type'] != 'image')
			return false;

		$layout = 'upload';
		if(!empty($uploadConfig['layout']))
			$layout = $uploadConfig['layout'];
		$viewName = '';
		if(!empty($uploadConfig['view']))
			$viewName = $uploadConfig['view'];
		$type = 'image';
		if(!empty($uploadConfig['type']))
			$type = $uploadConfig['type'];
		if(empty($viewName))
			$viewName = ($type == 'image') ? 'image_entry' :
'file_entry';

		$options = array();
		if(!empty($uploadConfig['options']))
			$options = $uploadConfig['options'];

		$extra_data = array();
		if(!empty($uploadConfig['extra']))
			$extra_data = $uploadConfig['extra'];

		if(empty($extra_data['field']))
			$extra_data['field'] = $upload_key;

		$this->processUploadOption($options, $type);
		if(empty($options) || empty($options['upload_dir']))
			return false;

		$filesData = JRequest::getVar('files', array(), '',
'array');

		$output = '[]';
		if(!empty($filesData)) {
			$helperImage = hikashop_get('helper.image');
			$ret = array();
			$out = array();
			foreach($filesData as $filename) {
				$r = new stdClass();
				$r->name = $filename;
				$r->url =
$options['upload_url'].$options['sub_folder'].rawurlencode($filename);
				$r->path =
$options['upload_dir'].$options['sub_folder'].$filename;
				$r->type = $type;
				$r->size = filesize($r->path);

				$params = new stdClass();
				$params->file_path = $options['sub_folder'].$filename;
				$params->file_name = $filename;
				$params->file_url = $r->url;

				foreach($extra_data as $k => $v) {
					$params->$k = $v;
				}

				$r->params = $params;
				$this->base_controller->manageUpload($upload_key, $r,
$uploadConfig, 'galleryselect');

				if(empty($r->html))
					$r->html = hikashop_getLayout($layout, $viewName, $r->params,
$js);

				unset($r->params);
				$ret[] = $r;
				$out[] = $r->html;
				unset($r);
			}
			if(!empty($out))
				$output = json_encode($out);
			unset($out);
			unset($ret);
		}

		$js =
'window.hikashop.ready(function(){window.parent.hikashop.submitBox({images:'.$output.'});});';
		$doc = JFactory::getDocument();
		$doc->addScriptDeclaration($js);
		return true;
	}

	public function upload() {
		JRequest::checkToken() || die('Invalid Token');

		$config = hikashop_config();
		$upload_key = JRequest::getVar('field', '');
		if(empty($this->base_controller))
			exit;

		$uploadConfig =
$this->base_controller->getUploadSetting($upload_key,
'upload');
		if($uploadConfig === false) {
			header('HTTP/1.1 403 Forbidden');
			exit;
		}

		$layout = 'upload';
		if(!empty($uploadConfig['layout']))
			$layout = $uploadConfig['layout'];

		$viewName = '';
		if(!empty($uploadConfig['view']))
			$viewName = $uploadConfig['view'];

		$type = 'image';
		if(!empty($uploadConfig['type']))
			$type = $uploadConfig['type'];

		$options = array();
		if(!empty($uploadConfig['options']))
			$options = $uploadConfig['options'];

		$extra_data = array();
		if(!empty($uploadConfig['extra']))
			$extra_data = $uploadConfig['extra'];

		if(empty($extra_data['field']))
			$extra_data['field'] = $upload_key;

		if(empty($viewName))
			$viewName = ($type == 'image') ? 'image_entry' :
'file_entry';

		$this->processUploadOption($options, $type);
		if(empty($options) || empty($options['upload_dir']))
			return false;

		$max_width = (int)$config->get('max_image_size_width', 0);
		$max_height = (int)$config->get('max_image_size_height',
0);

		$uploadHelper = hikashop_get('helper.upload');
		$ret = $uploadHelper->process($options);
		if($ret !== false && empty($ret->error)) {
			$helperImage = null;
			if($type == 'image') {
				$helperImage = hikashop_get('helper.image');
			}

			foreach($ret as &$r) {
				if(!empty($r->error))
					continue;

				$file = new stdClass();
				$file->file_description = '';
				$file->file_name = $r->name;
				$file->file_type = $type;
				$file->file_path = $options['sub_folder'].$r->name;
				$file->file_url =
$options['upload_url'].$options['sub_folder'];

				foreach($extra_data as $k => $v) {
					$file->$k = $v;
				}

				if(strpos($file->file_name, '.') !== false) {
					$file->file_name = substr($file->file_name, 0,
strrpos($file->file_name, '.'));
				}

				$r->file = $file;
				$r->html = '';
				$js = '';

				if($type == 'image') {
					if($max_height > 0 || $max_width > 0) {

					}

					$img = $helperImage->getThumbnail($file->file_path, array(100,
100), array('default' => true));
					$r->thumbnail_url = $img->url;

					$params = new stdClass();
					$params->file_path = $file->file_path;
					$params->file_name = $file->file_name;
					$params->file_url = $file->file_url;
				} else {
					$params = new stdClass();
					$params->file_name = $file->file_name;
					$params->file_path = $file->file_path;
					$params->file_url = $file->file_url;
					$params->file_limit = -1;
					$params->file_size = @filesize($options['upload_dir'] .
$options['sub_folder'] . $file->file_name);
				}

				foreach($extra_data as $k => $v) {
					$params->$k = $v;
				}

				$r->params = $params;

				$this->base_controller->manageUpload($upload_key, $r,
$uploadConfig, 'upload');

				if(empty($r->html))
					$r->html = hikashop_getLayout($layout, $viewName, $r->params,
$js);

				unset($r->path);
				unset($r->params);
				unset($r);
			}
		}

		echo json_encode($ret);
		exit;
	}

	private function processUploadOption(&$options, $type =
'image') {
		$shopConfig = hikashop_config(false);

		if($type == 'image') {
			if(empty($options['upload_dir']))
				$options['upload_dir'] =
$shopConfig->get('uploadfolder');
			if(empty($options['type']))
				$options['type'] = 'image';
		} else {
			if(empty($options['upload_dir']))
				$options['upload_dir'] =
$shopConfig->get('uploadsecurefolder');
			if(empty($options['type']))
				$options['type'] = 'file';
		}

		if(empty($options) || empty($options['upload_dir']))
			return false;

		if(empty($options['sub_folder']))
			$options['sub_folder'] = '';
		else
			$options['sub_folder'] =
str_replace(DS,'/',rtrim($options['sub_folder'],
DS).DS);

		$options['upload_url'] =
ltrim(JPath::clean(html_entity_decode($options['upload_dir'])),DS);
		$options['upload_url'] =
str_replace(DS,'/',rtrim($options['upload_url'],DS).DS);
		$app = JFactory::getApplication();
		if($app->isAdmin()) {
			$options['upload_url'] =
'../'.$options['upload_url'];
		} else {
			$options['upload_url'] =
rtrim(JURI::base(true),'/').'/'.$options['upload_url'];
		}

		$options['upload_dir'] =
rtrim(JPath::clean(html_entity_decode($options['upload_dir'])),
DS.' ').DS;
		if(!preg_match('#^([A-Z]:)?/.*#',$options['upload_dir'])
&& (substr($options['upload_dir'], 0, 1) != '/'
|| !is_dir($options['upload_dir']))) {
			$options['upload_dir'] =
JPath::clean(HIKASHOP_ROOT.DS.trim($options['upload_dir'],
DS.' ').DS);
		}

		return true;
	}
}
vote.php000064400000003664151200171270006237 0ustar00<?php
/**
 * @package	HikaShop for Joomla!
 * @version	2.2.3
 * @author	hikashop.com
 * @copyright	(C) 2010-2013 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 VoteController extends hikashopController {
	var $modify_views = array();
	var $add = array();
	var $modify = array();
	var $delete = array();

	function __construct($config = array(),$skip=false){
		parent::__construct($config,$skip);
		if(!$skip){
			$this->registerDefaultTask('save');
		}
		$this->display[] = 'save';
	}

	function save() {
		$voteClass = hikashop_get('class.vote');

		$element = new stdClass();
		$element->hikashop_vote_type =
JRequest::getVar('hikashop_vote_type', 0, 'default',
'string', 0);
		$element->vote_ref_id 		 =
JRequest::getVar('hikashop_vote_ref_id', 0, 'default',
'int');
		if(empty($element->vote_ref_id))
			$element->vote_ref_id	 =
JRequest::getVar('hikashop_vote_product_id', 0,
'default', 'int');
		$element->user_id 			 =
JRequest::getVar('hikashop_vote_user_id', 0, 'default',
'int');
		$element->pseudo_comment	 =
JRequest::getVar('pseudo_comment', 0, 'default',
'string', 0);
		$element->email_comment		 =
JRequest::getVar('email_comment', 0, 'default',
'string', 0);
		$element->vote_type			 = JRequest::getVar('vote_type', 0,
'default', 'string', 0);
		$element->vote 				 = JRequest::getVar('hikashop_vote', 0,
'default', 'int');
		$element->comment 			 =
JRequest::getVar('hikashop_vote_comment','','','string',JREQUEST_ALLOWRAW);
// JRequest::getVar('hikashop_vote_comment', 0,
'default', 'string', 0);
		$element->comment			 = urldecode($element->comment);
		if(!empty($element->comment) || !empty($element->vote) ||
!empty($element->email_comment) || !empty($element->pseudo_comment)
|| $element->hikashop_vote_type == 'useful')
			$voteClass->save($element);
		else
			echo '0';
		exit;
	}
}