Spade
Mini Shell
PKY��[
5����controllers/gateway.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 .
'/gateways/dispatcher.php';
/**
* Gateway controller class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 3.4
*/
class JeaControllerGateway extends JControllerForm
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JControllerLegacy::__construct()
*/
public function __construct($config = array())
{
parent::__construct($config);
$this->view_item .= '&type=' .
JFactory::getApplication()->input->getCmd('type');
}
/**
* Output current gateway logs
*
* @return void
*/
public function getLogs()
{
$gateway = $this->getGateway();
// @var JApplicationWeb $application
$application = JFactory::getApplication();
$application->setHeader('Content-Type',
'text/plain', true);
$application->sendHeaders();
echo $gateway->getLogs();
$application->close();
}
/**
* Delete current gateway logs
*
* @return void
*/
public function deleteLogs()
{
$gateway = $this->getGateway();
$gateway->deleteLogs();
$this->getLogs();
}
/**
* Serve current gateway logs
*
* @return void
*/
public function downloadLogs()
{
JFactory::getApplication()->setHeader('Content-Disposition',
'attachment; filename="logs.txt"');
$this->getLogs();
}
/**
* Return the current gateway
*
* @return JeaGateway
*/
protected function getGateway()
{
$model = $this->getModel('Gateway', 'JeaModel',
array('ignore_request' => false));
$item = $model->getItem();
$dispatcher = GatewaysEventDispatcher::getInstance();
return $dispatcher->loadGateway($item);
}
}
PKY��[��/��
�
controllers/gateways.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Gateways controller class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 3.4
*/
class JeaControllerGateways extends JControllerAdmin
{
/**
* Ask the gateways to execute their export handlers
*
* @return void
*/
public function export()
{
$this->gatewaysExecute('export');
}
/**
* Ask the gateways to execute their import handlers
*
* @return void
*/
public function import()
{
$this->gatewaysExecute('import');
}
/**
* Ask the gateways to execute their action handlers
*
* @param string $task Action to execute
*
* @return void
*/
protected function gatewaysExecute($task)
{
// Check for request forgeries.
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
$application = JFactory::getApplication();
$application->setHeader('Content-Type',
'text/plain', true);
$application->sendHeaders();
$interpreter =
JFactory::getApplication()->input->getString('php_interpreter',
'php');
$matches = array();
if (preg_match('/^([a-zA-Z0-9-_.\/]+)/', $interpreter,
$matches) !== false)
{
$interpreter = $matches[1];
}
if (strpos($interpreter, 'php') === false)
{
echo "PHP interpreter must contains 'php' in its
name";
$application->close();
}
$command = ($task == 'export' ? $interpreter . ' '
. JPATH_COMPONENT_ADMINISTRATOR . '/cli/gateways.php --export
--basedir="' . JPATH_ROOT . '" --baseurl="' .
JUri::root() . '"' :
$interpreter . ' ' . JPATH_COMPONENT_ADMINISTRATOR .
'/cli/gateways.php --import --basedir="' . JPATH_ROOT .
'"');
echo "> $command\n\n";
$output = array();
$return = 0;
exec($command, $output, $return);
if ($return > 0)
{
echo "Error\n";
}
foreach ($output as $line)
{
echo "$line\n";
}
$application->close();
}
/**
* Method to get a JeaModelGateway model object, loading it if required.
*
* @param string $name The model name.
* @param string $prefix The class prefix.
* @param array $config Configuration array for model.
*
* @return JeaModelGateway|boolean Model object on success; otherwise
false on failure.
*
* @see JControllerForm::getModel()
*/
public function getModel($name = 'Gateway', $prefix =
'JeaModel', $config = array())
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
PKY��[5ݑ�;;controllers/featurelist.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Featurelist controller class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaControllerFeaturelist extends JControllerAdmin
{
/**
* Method to get a JeaModelFeature model object, loading it if required.
*
* @param string $name The model name.
* @param string $prefix The class prefix.
* @param array $config Configuration array for model.
*
* @return JeaModelFeature|boolean Model object on success; otherwise
false on failure.
*
* @see JControllerForm::getModel()
*/
public function getModel($name = 'Feature', $prefix =
'JeaModel', $config = array())
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
PKY��[��^� � controllers/features.json.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Features controller class for AJAX requests.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaControllerFeatures extends JControllerLegacy
{
/**
* Get list of areas in relation with a town
*
* @return void
*/
public function get_areas()
{
$response = false;
// Require town id
if ($town_id = $this->input->getInt('town_id', 0))
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('f.id , f.value');
$query->from('#__jea_areas AS f');
$query->where('town_id=' . $town_id);
$query->order('f.value ASC');
$db->setQuery($query);
$response = $db->loadObjectList();
}
echo json_encode($response);
}
/**
* Get list of towns in relation with a department
*
* @return void
*/
public function get_towns()
{
$response = false;
// Require department id
if ($department_id =
$this->input->getInt('department_id', 0))
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('f.id , f.value');
$query->from('#__jea_towns AS f');
$query->where('department_id=' . $department_id);
$query->order('f.value ASC');
$db->setQuery($query);
$response = $db->loadObjectList();
}
echo json_encode($response);
}
/**
* Get a feature list filtered by language
*
* @return void
*/
public function get_list()
{
// TODO: Check if this method is used
$response = false;
$featName = $this->input->getAlnum('feature');
if (!is_null($featName))
{
$model = $this->getModel('Features', 'JeaModel');
$features = $model->getItems();
if (isset($features[$featName]))
{
if (!$language = $this->input->getString('language',
'*'))
{
$language = '*';
}
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('f.id , f.value');
$query->from($db->quoteName($features[$featName]->table) .
' AS f');
if ($language != '*')
{
$query->where('f.language=' . $db->quote($language) .
'OR f.language=\'*\'');
}
$query->order('f.value ASC');
$db->setQuery($query);
$response = $db->loadObjectList();
}
}
echo json_encode($response);
}
}
PKY��[��q���controllers/properties.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\Utilities\ArrayHelper;
/**
* Properties controller class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 1.0
*/
class JeaControllerProperties extends JControllerAdmin
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JControllerLegacy::__construct()
*/
public function __construct($config = array())
{
parent::__construct($config);
$this->registerTask('unfeatured', 'featured');
}
/**
* Method to toggle the featured setting of a list of properties.
*
* @return void
*/
public function featured()
{
// Check for request forgeries
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
// Initialise variables.
$user = JFactory::getUser();
$ids = $this->input->get('cid', array(),
'array');
$values = array(
'featured' => 1,
'unfeatured' => 0
);
$task = $this->getTask();
$value = ArrayHelper::getValue($values, $task, 0, 'int');
// Access checks.
foreach ($ids as $i => $id)
{
if (!$user->authorise('core.edit.state',
'com_jea.property.' . (int) $id))
{
// Prune items that you can't change.
unset($ids[$i]);
$this->setMessage(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'),
'warning');
}
}
if (empty($ids))
{
$this->setMessage(JText::_('JERROR_NO_ITEMS_SELECTED'),
'warning');
}
else
{
$model = $this->getModel();
try
{
$model->featured($ids, $value);
}
catch (\Exception $e)
{
$this->setMessage($e->getMessage(), 'error');
}
}
$this->setRedirect('index.php?option=com_jea&view=properties');
}
/**
* Method to copy a list of properties.
*
* @return void
*/
public function copy()
{
// Check for request forgeries
JSession::checkToken()or jexit(JText::_('JINVALID_TOKEN'));
// Initialise variables.
$user = JFactory::getUser();
$ids = $this->input->get('cid', array(),
'array');
// Access checks.
if (! $user->authorise('core.create'))
{
$this->setMessage(JText::_('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED'),
'warning');
}
elseif (empty($ids))
{
$this->setMessage(JText::_('JERROR_NO_ITEMS_SELECTED'),
'warning');
}
else
{
$model = $this->getModel();
try
{
$model->copy($ids);
}
catch (\Exception $e)
{
$this->setMessage($e->getMessage(), 'error');
}
}
$this->setRedirect('index.php?option=com_jea&view=properties');
}
/**
* Method to import properties.
*
* @return void
*/
public function import()
{
$app = JFactory::getApplication();
$model = $this->getModel('Import');
$type = $app->input->get('type');
$model->setState('import.type', $type);
$model->setState('param.jea_version',
$app->input->get('jea_version'));
$model->setState('param.joomla_path',
$app->input->get('joomla_path', '',
'string'));
try
{
$model->import();
$app->enqueueMessage(JText::sprintf('COM_JEA_PROPERTIES_FOUND_TOTAL',
$model->total));
$app->enqueueMessage(JText::sprintf('COM_JEA_PROPERTIES_UPDATED',
$model->updated));
$app->enqueueMessage(JText::sprintf('COM_JEA_PROPERTIES_CREATED',
$model->created));
}
catch (Exception $e)
{
$this->setMessage($e->getMessage(), 'warning');
}
$this->setRedirect('index.php?option=com_jea&view=import&layout='
. $type);
}
/**
* Method to get a JeaModelProperty model object, loading it if required.
*
* @param string $name The model name.
* @param string $prefix The class prefix.
* @param array $config Configuration array for model.
*
* @return JeaModelProperty|boolean Model object on success; otherwise
false on failure.
*
* @see JControllerForm::getModel()
*/
public function getModel($name = 'Property', $prefix =
'JeaModel', $config = array())
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
PKY��[���controllers/feature.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Feature controller class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaControllerFeature extends JControllerForm
{
/**
* The default view for the display method.
*
* @var string
*/
protected $view_list = 'featurelist';
/**
* 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.
*
* @see JControllerForm::getRedirectToItemAppend()
*/
protected function getRedirectToItemAppend($recordId = null, $urlVar =
'id')
{
$feature = $this->input->getCmd('feature');
$append = parent::getRedirectToItemAppend($recordId, $urlVar);
if ($feature)
{
$append .= '&feature=' . $feature;
}
return $append;
}
/**
* Method to get a JeaModelFeature model object, loading it if required.
*
* @param string $name The model name.
* @param string $prefix The class prefix.
* @param array $config Configuration array for model.
*
* @return JeaModelFeature|boolean Model object on success; otherwise
false on failure.
*
* @see JControllerForm::getModel()
*/
public function getModel($name = 'Feature', $prefix =
'JeaModel', $config = array())
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
PKZ��[Յ+��controllers/features.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Features controller class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaControllerFeatures extends JControllerLegacy
{
/**
* Method to export features tables as CSV
*
* @return void
*/
public function export()
{
$application = JFactory::getApplication();
$features = $this->input->get('cid', array(),
'array');
if (!empty($features))
{
$config = JFactory::getConfig();
$exportPath = $config->get('tmp_path') .
'/jea_export';
if (JFolder::create($exportPath) === false)
{
$msg = JText::_('JLIB_FILESYSTEM_ERROR_FOLDER_CREATE') .
' : ' . $exportPath;
$this->setRedirect('index.php?option=com_jea&view=features',
$msg, 'warning');
}
else
{
$xmlPath = JPATH_COMPONENT . '/models/forms/features/';
$xmlFiles = JFolder::files($xmlPath);
$model = $this->getModel();
$files = array();
foreach ($xmlFiles as $filename)
{
$matches = array();
if (preg_match('/^[0-9]{2}-([a-z]*).xml/', $filename,
$matches))
{
$feature = $matches[1];
if (in_array($feature, $features))
{
$form = simplexml_load_file($xmlPath . '/' . $filename);
$table = (string) $form['table'];
$files[] = array(
'data' => $model->getCSVData($table),
'name' => $table . '.csv'
);
}
}
}
$zipFile = $exportPath . '/jea_export_' . uniqid() .
'.zip';
$zip = JArchive::getAdapter('zip');
$zip->create($zipFile, $files);
$application->setHeader('Content-Type',
'application/zip', true);
$application->setHeader('Content-Disposition',
'attachment; filename="jea_features.zip"', true);
$application->setHeader('Content-Transfer-Encoding',
'binary', true);
$application->sendHeaders();
echo readfile($zipFile);
// Clean tmp files
JFile::delete($zipFile);
JFolder::delete($exportPath);
$application->close();
}
}
else
{
$msg = JText::_('JERROR_NO_ITEMS_SELECTED');
$this->setRedirect('index.php?option=com_jea&view=features',
$msg);
}
}
/**
* Method to import data in features tables
*
* @return void
*/
public function import()
{
$application = JFactory::getApplication();
$upload = JeaUpload::getUpload('csv');
$validExtensions = array('csv', 'CSV',
'txt', 'TXT');
$xmlPath = JPATH_COMPONENT . '/models/forms/features/';
$xmlFiles = JFolder::files($xmlPath);
$model = $this->getModel();
$tables = array();
// Retrieve the table names
foreach ($xmlFiles as $filename)
{
$matches = array();
if (preg_match('/^[0-9]{2}-([a-z]*).xml/', $filename,
$matches))
{
$feature = $matches[1];
if (!isset($tables[$feature]))
{
$form = simplexml_load_file($xmlPath . '/' . $filename);
$tables[$feature] = (string) $form['table'];
}
}
}
foreach ($upload as $file)
{
if ($file->isPosted() && isset($tables[$file->key]))
{
$file->setValidExtensions($validExtensions);
$file->check();
$fileErrors = $file->getErrors();
if (!$fileErrors)
{
try
{
$rows = $model->importFromCSV($file->temp_name,
$tables[$file->key]);
$msg =
JText::sprintf('COM_JEA_NUM_LINES_IMPORTED_ON_TABLE', $rows,
$tables[$file->key]);
$application->enqueueMessage($msg);
}
catch (Exception $e)
{
$application->enqueueMessage($e->getMessage(),
'warning');
}
}
else
{
foreach ($fileErrors as $error)
{
$application->enqueueMessage($error, 'warning');
}
}
}
}
$this->setRedirect('index.php?option=com_jea&view=features');
}
/**
* Method to get a JeaModelFeatures model object, loading it if required.
*
* @param string $name The model name.
* @param string $prefix The class prefix.
* @param array $config Configuration array for model.
*
* @return JeaModelFeatures|boolean Model object on success; otherwise
false on failure.
*
* @see JControllerForm::getModel()
*/
public function getModel($name = 'Features', $prefix =
'JeaModel', $config = array())
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
PKZ��[�\Ȕ��controllers/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaControllerDefault extends JControllerLegacy
{
/**
* The default view for the display method.
*
* @var string
*/
protected $default_view = 'properties';
}
PKZ��[�MAAcontrollers/property.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaControllerProperty extends JControllerForm
{
/**
* Method 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;
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);
}
}
PKZ��[�66controllers/gateway.json.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 .
'/gateways/dispatcher.php';
/**
* Gateway controller class for AJAX requests.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 3.4
*/
class JeaControllerGateway extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JControllerLegacy::__construct()
*/
public function __construct($config = array())
{
parent::__construct($config);
set_exception_handler(array('JeaControllerGateway',
'error'));
}
/**
* Custom Exception Handler
* displaying Exception in Json format
*
* @param Exception $e An error exception
*
* @return void
*/
public static function error($e)
{
$error = array(
'error' => $e->getmessage(),
'errorCode' => $e->getCode(),
'trace' => $e->getTraceAsString(),
);
echo json_encode($error);
}
/**
* Ask the gateway to execute export
*
* @return void
*/
public function export()
{
$this->gatewayExecute('export');
}
/**
* Ask the gateway to execute import
*
* @return void
*/
public function import()
{
$this->gatewayExecute('import');
}
/**
* Ask the gateway to execute action
*
* @param string $task Action to execute
*
* @return void
*/
protected function gatewayExecute($task)
{
$model = $this->getModel('Gateway', 'JeaModel');
$gateway = $model->getItem();
$dispatcher = GatewaysEventDispatcher::getInstance();
$dispatcher->loadGateway($gateway);
if ($task == 'import')
{
$dispatcher->trigger('activatePersistance');
}
$responses = $dispatcher->trigger($task);
echo isset($responses[0]) ? json_encode($responses[0]) : '{}';
}
}
PKZ��[$Tr��gateways/gateway.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\Registry\Registry;
use Joomla\CMS\Log\Log;
/**
* The base class for all gateways
*
* @since 3.4
*/
abstract class JeaGateway extends JEvent
{
/**
* A Registry object holding the parameters for the gateway
*
* @var Registry
*/
public $params = null;
/**
* The id of the gateway
*
* @var string
*/
public $id = null;
/**
* The provider of the gateway
*
* @var string
*/
public $provider = null;
/**
* The title of the gateway
*
* @var string
*/
public $title = null;
/**
* The gateway type
*
* @var string
*/
public $type = null;
/**
* The gateway log file
*
* @var string
*/
protected $logFile = '';
/**
* Constructor
*
* @param object $subject The object to observe
* @param array $config An optional associative array of
configuration settings.
*/
public function __construct(&$subject, $config = array())
{
if (isset($config['params']) &&
$config['params'] instanceof Registry)
{
$this->params = $config['params'];
}
if (isset($config['id']))
{
$this->id = $config['id'];
}
if (isset($config['type']))
{
$this->type = $config['type'];
}
if (isset($config['provider']))
{
$this->provider = $config['provider'] . '_' .
$this->id;
}
if (isset($config['title']))
{
$this->title = $config['title'];
}
$this->logFile = $this->type . '_' . $this->provider .
'.php';
parent::__construct($subject);
}
/**
* Write a log message
*
* Status codes :
*
* EMERG = 0; // Emergency: system is unusable
* ALERT = 1; // Alert: action must be taken immediately
* CRIT = 2; // Critical: critical conditions
* ERR = 3; // Error: error conditions
* WARN = 4; // Warning: warning conditions
* NOTICE = 5; // Notice: normal but significant condition
* INFO = 6; // Informational: informational messages
* DEBUG = 7; // Debug: debug messages
*
* @param string $message The log message
* @param string $status See status codes above
*
* @return void
*/
public function log($message, $status = '')
{
// A category name
$cat = $this->provider;
Log::addLogger(
array('text_file' => $this->logFile),
Log::ALL,
$cat
);
$status = strtoupper($status);
$levels = array(
'EMERG' => Log::EMERGENCY,
'ALERT' => Log::ALERT,
'CRIT' => Log::CRITICAL,
'ERR' => Log::ERROR,
'WARN' => Log::WARNING,
'NOTICE' => Log::NOTICE,
'INFO' => Log::INFO,
'DEBUG' => Log::DEBUG
);
$status = isset($levels[$status]) ? $levels[$status] : Log::INFO;
Log::add($message, $status, $cat);
}
/**
* Output a message in CLI mode
*
* @param string $message A message
*
* @return void
*/
public function out($message = '')
{
$application = JFactory::getApplication();
if ($application instanceof JApplicationCli)
{
// @var JApplicationCli $application
$application->out($message);
}
}
/**
* Get logs
*
* @return string
*/
public function getLogs()
{
$file = JFactory::getConfig()->get('log_path') .
'/' . $this->logFile;
if (JFile::exists($file))
{
return file_get_contents($file);
}
return '';
}
/**
* Delete logs
*
* @return boolean
*/
public function deleteLogs()
{
$file = JFactory::getConfig()->get('log_path') .
'/' . $this->logFile;
if (JFile::exists($file))
{
return JFile::delete($file);
}
return false;
}
}
PKZ��[p&�``gateways/dispatcher.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\Registry\Registry;
/**
* Custom Event dispatcher class for JEA gateways
*
* @since 3.4
*/
class GatewaysEventDispatcher extends JEventDispatcher
{
/**
* Stores the singleton instance of the dispatcher.
*
* @var GatewaysEventDispatcher
*/
protected static $gInstance = null;
/**
* Get unique Instance of GatewaysEventDispatcher
*
* @return GatewaysEventDispatcher
*/
public static function getInstance()
{
if (self::$gInstance === null)
{
self::$gInstance = new static;
}
return self::$gInstance;
}
/**
* Attach an observer object
*
* @param object $observer An observer object to attach
*
* @return void
*/
public function attach($observer)
{
if (! ($observer instanceof JeaGateway))
{
return;
}
/*
* The main difference with the parent method
* is to attach several instances of the same
* class.
*/
$this->_observers[] = $observer;
$methods = get_class_methods($observer);
end($this->_observers);
$key = key($this->_observers);
foreach ($methods as $method)
{
$method = strtolower($method);
if (! isset($this->_methods[$method]))
{
$this->_methods[$method] = array();
}
$this->_methods[$method][] = $key;
}
}
/**
* Triggers an event by dispatching arguments to all observers that handle
* the event and returning their return values.
*
* @param string $event The event to trigger.
* @param array $args An array of arguments.
*
* @return array An array of results from each function call.
*/
public function trigger($event, $args = array())
{
$result = array();
$args = (array) $args;
$event = strtolower($event);
// Check if any gateways are attached to the event.
if (!isset($this->_methods[$event]) ||
empty($this->_methods[$event]))
{
// No gateways associated to the event!
return $result;
}
// Loop through all gateways having a method matching our event
foreach ($this->_methods[$event] as $key)
{
// Check if the gateway is present.
if (!isset($this->_observers[$key]))
{
continue;
}
if ($this->_observers[$key] instanceof JeaGateway)
{
try
{
$args['event'] = $event;
$value = $this->_observers[$key]->update($args);
}
catch (Exception $e)
{
$application = JFactory::getApplication();
$gateway = $this->_observers[$key];
$gateway->log($e->getMessage(), 'err');
if ($application instanceof JApplicationCli)
{
/*
* In CLI mode, output the error but don't stop the
* execution loop of other gateways
*/
$gateway->out('Error [' . $gateway->title . '] :
' . $e->getMessage());
}
else
{
/*
* In AJAX mode, only one gateway is loaded per request,
* so we can stop the loop.
* Exception will be catched later in a custom Exception handler
*/
throw $e;
}
}
}
if (isset($value))
{
$result[] = $value;
}
}
return $result;
}
/**
* Load JEA gateways
*
* @param string $type If set, must be 'export' or
'import'
*
* @return void
*/
public function loadGateways($type = null)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__jea_gateways');
$query->where('published=1');
if (! empty($type))
{
$query->where('type=' . $db->Quote($type));
}
$query->order('ordering ASC');
$db->setQuery($query);
$rows = $db->loadObjectList();
foreach ($rows as $row)
{
$this->loadGateway($row);
}
}
/**
* Load one JEA gateway
*
* @param $object $gateway he row DB gateway
*
* @return JeaGateway
*
* @throws Exception if gateway cannot be loaded
*/
public function loadGateway($gateway)
{
$gatewayFile = JPATH_ADMINISTRATOR .
'/components/com_jea/gateways/providers/' . $gateway->provider
. '/' . $gateway->type . '.php';
if (JFile::exists($gatewayFile))
{
require_once $gatewayFile;
$className = 'JeaGateway' . ucfirst($gateway->type) .
ucfirst($gateway->provider);
if (class_exists($className))
{
$dispatcher = static::getInstance();
$config = array(
'id' => $gateway->id,
'provider' => $gateway->provider,
'title' => $gateway->title,
'type' => $gateway->type,
'params' => new Registry($gateway->params)
);
return new $className($dispatcher, $config);
}
else
{
throw new Exception('Gateway class not found : ' .
$className);
}
}
else
{
throw new Exception('Gateway file not found : ' .
$gatewayFile);
}
}
}
PKZ��[%��4�4gateways/import.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 .
'/gateways/gateway.php';
/**
* The base class for import gateways
*
* @since 3.4
*/
abstract class JeaGatewayImport extends JeaGateway
{
/**
* Delete Jea properties which are not included in the import set
*
* @var boolean
*/
protected $autoDeletion = true;
/**
* Remember the last import
*
* @var boolean
*/
protected $persistance = false;
/**
* The number of properties to import.
* Used to split the import in several requests (AJAX)
*
* @var integer
*/
protected $propertiesPerStep = 0;
/**
* The number of properties created during import
*
* @var integer
*/
protected $created = 0;
/**
* The number of properties updated during import
*
* @var integer
*/
protected $updated = 0;
/**
* The number of properties created or imported during import
*
* @var integer
*/
protected $imported = 0;
/**
* The number of properties removed during import
*
* @var integer
*/
protected $removed = 0;
/**
* The number of properties that should be imported
*
* @var integer
*/
protected $total = 0;
/**
* Array of properties already imported
*
* @var array
*/
protected $importedProperties = array();
/**
* Constructor
*
* @param object $subject The object to observe
* @param array $config An optional associative array of
configuration settings.
*/
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->autoDeletion = (bool)
$this->params->get('auto_deletion', 0);
}
/**
* Remember the last import
*
* @return void
*/
public function activatePersistance()
{
$this->persistance = true;
$this->propertiesPerStep =
$this->params->get('properties_per_step', 5);
}
/**
* InitWebConsole event handler
*
* @return void
*/
public function initWebConsole()
{
JHtml::script('media/com_jea/js/admin/gateway.js');
$title = addslashes($this->title);
// Register script messages
JText::script('COM_JEA_IMPORT_START_MESSAGE', true);
JText::script('COM_JEA_IMPORT_END_MESSAGE', true);
JText::script('COM_JEA_GATEWAY_PROPERTIES_FOUND', true);
JText::script('COM_JEA_GATEWAY_PROPERTIES_CREATED', true);
JText::script('COM_JEA_GATEWAY_PROPERTIES_UPDATED', true);
JText::script('COM_JEA_GATEWAY_PROPERTIES_DELETED', true);
$script = "jQuery(document).on('registerGatewayAction',
function(event, webConsole, dispatcher) {\n"
. " dispatcher.register(function() {\n"
. " JeaGateway.startImport($this->id,
'$title', webConsole);\n"
. " });\n"
. "});";
JFactory::getDocument()->addScriptDeclaration($script);
}
/**
* Method called before the import
* This could be overriden in child class
*
* @return void
*/
protected function beforeImport()
{
}
/**
* Method called after the import
* This could be overriden in child class
*
* @return void
*/
protected function afterImport()
{
}
/**
* The import handler method
*
* @return array the import summary
*/
public function import()
{
if ($this->persistance == true &&
$this->hasPersistentProperties())
{
$properties = $this->getPersistentProperties();
}
else
{
$this->beforeImport();
$properties = & $this->parse();
}
$this->total = count($properties);
if (empty($this->total))
{
// Do nothing if there is no properties
return $this->getSummary();
}
$idsToRemove = array();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')->from('#__jea_properties');
if (! empty($this->provider))
{
$query->where('provider=' .
$db->quote($this->provider));
}
$db->setQuery($query);
$existingProperties = $db->loadObjectList();
foreach ($existingProperties as $row)
{
if (isset($this->importedProperties[$row->ref]))
{
// Property already been imported
continue;
}
if (isset($properties[$row->ref]) &&
$properties[$row->ref] instanceof JEAPropertyInterface)
{
if ($this->persistance == true &&
$this->propertiesPerStep > 0 && $this->updated ==
$this->propertiesPerStep)
{
break;
}
// Verify update time
$date = new JDate($row->modified);
if ($date->toUnix() < $properties[$row->ref]->modified)
{
// Update needed
if ($properties[$row->ref]->save($this->provider,
$row->id))
{
$this->updated ++;
}
}
$this->imported ++;
$this->importedProperties[$row->ref] = true;
unset($properties[$row->ref]);
}
elseif ($this->autoDeletion === true)
{
// Property not in the $imported_properties
// So we can delete it if the autodeletion option is set to true
$idsToRemove[] = $row->id;
}
}
if ($this->autoDeletion === true)
{
// Remove outdated properties
$this->removeProperties($idsToRemove);
}
foreach ($properties as $ref => $row)
{
if ($this->persistance == true && $this->propertiesPerStep
> 0 && ($this->updated + $this->created) ==
$this->propertiesPerStep)
{
break;
}
if ($row instanceof JEAPropertyInterface)
{
if ($row->save($this->provider))
{
$this->created ++;
$this->importedProperties[$ref] = true;
}
else
{
$msg = "Property can't be saved : ";
foreach ($row->getErrors() as $error)
{
$msg .= " $error\n";
}
$this->log($msg, 'WARN');
JError::raiseNotice(200, "A property cant'be saved. See logs
for more infos");
}
}
$this->imported ++;
unset($properties[$ref]);
}
if ($this->persistance == true && ! empty($properties))
{
$this->setPersistentProperties($properties);
}
elseif ($this->persistance == true && empty($properties))
{
$this->cleanPersistentProperties();
}
if (empty($properties))
{
$msg = JText::sprintf('COM_JEA_IMPORT_END_MESSAGE',
$this->title)
. '. [' .
JText::sprintf('COM_JEA_GATEWAY_PROPERTIES_FOUND',
$this->total)
. ' - ' .
JText::sprintf('COM_JEA_GATEWAY_PROPERTIES_CREATED',
$this->created)
. ' - ' .
JText::sprintf('COM_JEA_GATEWAY_PROPERTIES_UPDATED',
$this->updated)
. ' - ' .
JText::sprintf('COM_JEA_GATEWAY_PROPERTIES_DELETED',
$this->removed)
. ']';
$this->out($msg);
$this->log($msg, 'info');
$this->afterImport();
}
return $this->getSummary();
}
/**
* Return import summary
*
* @return number[]
*/
protected function getSummary()
{
return array(
'gateway_id' => $this->id,
'gateway_title' => $this->title,
'total' => $this->total,
'created' => $this->created,
'updated' => $this->updated,
'imported' => $this->imported,
'removed' => $this->removed
);
}
/**
* The gateway parser method.
* This method must be overriden in child class
*
* @return JEAPropertyInterface[]
*/
protected function &parse()
{
$properties = array();
return $properties;
}
/**
* Check for properties stored in cache
*
* @return boolean
*/
protected function hasPersistentProperties()
{
$cache = JFactory::getCache('jea_import', 'output',
'file');
$cache->setCaching(true);
$properties = $cache->get('properties');
if (is_string($properties))
{
return true;
}
return false;
}
/**
* Get properties stored in cache
*
* @return array
*/
protected function getPersistentProperties()
{
$cache = JFactory::getCache('jea_import', 'output',
'file');
$cache->setCaching(true);
$infos = $cache->get('infos');
if (is_string($infos))
{
$infos = unserialize($infos);
$this->importedProperties = $infos->importedProperties;
}
$properties = $cache->get('properties');
if ($properties === false)
{
return array();
}
return unserialize($properties);
}
/**
* Store properties in cache
*
* @param JEAPropertyInterface[] $properties An array of
JEAPropertyInterface instances
*
* @return void
*/
protected function setPersistentProperties($properties = array())
{
$cache = JFactory::getCache('jea_import', 'output',
'file');
$cache->setCaching(true);
$cache->store(serialize($properties), 'properties');
$infos = $cache->get('infos');
if (! $infos)
{
$infos = new stdClass;
$infos->total = $this->total;
$infos->updated = $this->updated;
$infos->removed = $this->removed;
$infos->created = $this->created;
$infos->imported = $this->imported;
$infos->importedProperties = $this->importedProperties;
$cache->store(serialize($infos), 'infos');
}
else
{
$infos = unserialize($infos);
$infos->updated += $this->updated;
$infos->removed += $this->removed;
$infos->created += $this->created;
$infos->imported += $this->imported;
foreach ($this->importedProperties as $k => $v)
{
$infos->importedProperties[$k] = $v;
}
$cache->store(serialize($infos), 'infos');
}
// Update interface informations
$this->total = $infos->total;
$this->updated = $infos->updated;
$this->removed = $infos->removed;
$this->created = $infos->created;
$this->imported = $infos->imported;
}
/**
* Remove properties stored in cache
*
* @return void
*/
protected function cleanPersistentProperties()
{
$cache = JFactory::getCache('jea_import', 'output',
'file');
$cache->setCaching(true);
$infos = $cache->get('infos');
if (is_string($infos))
{
$infos = @unserialize($infos);
// Update interface informations
$this->total = $infos->total;
$this->updated += $infos->updated;
$this->removed += $infos->removed;
$this->created += $infos->created;
$this->imported += $infos->imported;
}
// Delete cache infos
$cache->clean();
}
/**
* Remove JEA properties
*
* @param array $ids An array of ids to remove
*
* @return boolean
*/
protected function removeProperties($ids = array())
{
if (empty($ids))
{
return false;
}
$dbo = JFactory::getDbo();
$dbo->setQuery('DELETE FROM #__jea_properties WHERE id IN('
. implode(',', $ids) . ')');
$dbo->execute();
// Remove images folder
foreach ($ids as $id)
{
if (JFolder::exists(JPATH_ROOT . '/images/com_jea/images/' .
$id))
{
JFolder::delete(JPATH_ROOT . '/images/com_jea/images/' .
$id);
}
}
$this->removed = count($ids);
return true;
}
/**
* Return the cache path for the gateway instance
*
* @param boolean $createDir If true, the Directory will be created
*
* @return string
*/
protected function getCachePath($createDir = false)
{
$cachePath = JFactory::getApplication()->get('cache_path',
JPATH_CACHE) . '/' . $this->type . '_' .
$this->provider;
if (!JFolder::exists($cachePath) && $createDir)
{
JFolder::create($cachePath);
}
if (!JFolder::exists($cachePath))
{
throw RuntimeException("Cache directory : $cachePath cannot be
created.");
}
return $cachePath;
}
/**
* Parse an xml file
*
* @param string $xmlFile The xml file path
*
* @return SimpleXMLElement
*
* @throws Exception if xml cannot be parsed
*/
protected function parseXmlFile($xmlFile = '')
{
// Disable libxml errors and allow to fetch error information as needed
libxml_use_internal_errors(true);
$xml = simplexml_load_file($xmlFile, 'SimpleXMLElement',
LIBXML_PARSEHUGE);
if (! $xml)
{
$msg = "Cannot load : $xmlFile. ";
$errors = libxml_get_errors();
foreach ($errors as $error)
{
switch ($error->level)
{
case LIBXML_ERR_WARNING:
$msg .= "Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$msg .= "Err Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$msg .= "Fatal Error $error->code: ";
break;
}
$msg .= trim($error->message) . " - Line: $error->line -
Column: $error->column";
if ($error->file)
{
$msg .= " File: $error->file";
}
}
libxml_clear_errors();
throw new Exception($msg, $error->code);
}
return $xml;
}
/**
* Download a file and return the file as local file path
*
* @param string $url The file url to download
* @param string $destFile Optionnal file destination name
*
* @return string the downloaded file destination name
*/
protected function downloadFile($url, $destFile = '')
{
if (empty($destFile))
{
$cachePath = $this->getCachePath(true);
$fileName = JFilterOutput::stringUrlSafe(basename($url));
if (strlen($fileName) > 20)
{
$fileName = substr($fileName, 0, 20);
}
$destFile = $cachePath . '/' . $fileName;
}
if (JFile::exists($destFile))
{
JFile::delete($destFile);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Don't check SSL certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);
if ($data === false)
{
$errno = curl_errno($ch);
$error = curl_error($ch);
$msg = "Cannot download $url. Error code : $errno, Message :
$error";
$this->log($msg, 'ERR');
throw new RuntimeException($msg);
}
curl_close($ch);
JFile::write($destFile, $data);
return $destFile;
}
}
PKZ��[.��@��gateways/export.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 .
'/gateways/gateway.php';
/**
* The base class for export gateways
*
* @since 3.4
*/
abstract class JeaGatewayExport extends JeaGateway
{
/**
* Site base url
*
* @var string
*/
protected $baseUrl = '';
/**
* Constructor
*
* @param object $subject The object to observe
* @param array $config An optional associative array of
configuration settings.
*/
public function __construct(&$subject, $config = array())
{
$application = JFactory::getApplication();
if (defined('BASE_URL'))
{
$this->baseUrl = BASE_URL;
}
if ($application instanceof JApplicationWeb)
{
$this->baseUrl = JUri::root();
}
parent::__construct($subject, $config);
}
/**
* This method must be implemented by child class
*
* @return array containg export summary data
*/
abstract public function export();
/**
* Get all JEA properties
*
* @param boolean $published If true, get only published properties
*
* @return array
*/
protected function getJeaProperties($published = true)
{
$db = JFactory::getDbo();
$query = 'SELECT p.*, t.value AS town, ht.value AS
heating_type'
. ', hwt.value AS hot_water_type, d.value AS department'
. ', a.value AS `area`, s.value AS slogan, c.value AS `condition`,
type.value AS type' . PHP_EOL
. 'FROM #__jea_properties AS p' . PHP_EOL
. 'LEFT JOIN #__jea_towns AS t ON t.id = p.town_id' . PHP_EOL
. 'LEFT JOIN #__jea_departments AS d ON d.id =
p.department_id' . PHP_EOL
. 'LEFT JOIN #__jea_areas AS a ON a.id = p.area_id' . PHP_EOL
. 'LEFT JOIN #__jea_heatingtypes AS ht ON ht.id =
p.heating_type' . PHP_EOL
. 'LEFT JOIN #__jea_hotwatertypes AS hwt ON hwt.id =
p.heating_type' . PHP_EOL
. 'LEFT JOIN #__jea_types AS type ON type.id = p.type_id' .
PHP_EOL
. 'LEFT JOIN #__jea_conditions AS c ON c.id = p.condition_id'
. PHP_EOL
. 'LEFT JOIN #__jea_slogans AS s ON s.id = p.slogan_id' .
PHP_EOL;
if ($published)
{
$query .= 'WHERE p.published = 1';
}
$db->setQuery($query);
$properties = $db->loadAssocList();
$db->setQuery('SELECT `id`, `value` FROM #__jea_amenities');
$amenities = $db->loadObjectList('id');
$unsets = array(
'asset_id',
'town_id',
'area_id',
'department_id',
'slogan_id',
'published',
'access',
'publish_up',
'publish_down',
'checked_out',
'checked_out_time',
'created_by',
'hits'
);
foreach ($properties as &$property)
{
foreach ($unsets as $key)
{
if (isset($property[$key]))
{
unset($property[$key]);
}
}
$exp = explode('-', $property['amenities']);
$tmp = array();
foreach ($exp as $id)
{
if (isset($amenities[$id]))
{
$tmp[$id] = $amenities[$id]->value;
}
}
$property['amenities'] = $tmp;
$property['images'] = $this->getImages((object) $property);
}
return $properties;
}
/**
* Get pictures of a property
*
* @param object $row The property DB row
*
* @return array
*/
private function getImages($row)
{
$result = array();
$images = json_decode($row->images);
if (empty($images) && ! is_array($images))
{
return $result;
}
$imgDir = 'images/com_jea/images/' . $row->id;
if (! JFolder::exists(JPATH_ROOT . '/' . $imgDir))
{
return $result;
}
foreach ($images as $image)
{
$path = JPATH_ROOT . '/' . $imgDir . '/' .
$image->name;
if (JFile::exists($path))
{
$result[] = array(
'path' => $path,
'url' => $this->baseUrl . $imgDir . '/' .
$image->name,
'name' => $image->name,
'title' => $image->title,
'description' => $image->description
);
}
}
return $result;
}
}
PKZ��[���??!gateways/providers/jea/import.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fields name="params">
<field name="import_directory" type="text"
size="50" default=""
label="COM_JEA_FIELD_IMPORT_DIRECTORY_LABEL"
description="COM_JEA_FIELD_IMPORT_DIRECTORY_DESC" />
<field name="auto_deletion" type="radio"
default="0" class="btn-group"
label="COM_JEA_FIELD_AUTO_DELETE_PROPERTIES_LABEL"
description="COM_JEA_FIELD_AUTO_DELETE_PROPERTIES_DESC">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="import_user" type="user"
label="COM_JEA_FIELD_IMPORT_USER_LABEL"
description="COM_JEA_FIELD_IMPORT_USER_DESC" />
<field name="properties_per_step" type="text"
size="4" default="5"
label="COM_JEA_FIELD_PROPERTIES_PER_STEP_LABEL"
description="COM_JEA_FIELD_PROPERTIES_PER_STEP_DESC" />
</fields>
</form>
PKZ��[�,����!gateways/providers/jea/export.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fields name="params">
<field name="export_directory" type="text"
default="tmp"
label="COM_JEA_FIELD_EXPORT_DIRECTORY_LABEL"
description="COM_JEA_FIELD_EXPORT_DIRECTORY_DESC"
size="60" />
<field name="export_images" type="list"
label="COM_JEA_FIELD_EXPORT_IMAGE_AS_LABEL"
description="COM_JEA_FIELD_EXPORT_IMAGE_AS_DESC"
default="url" class="chzn-color">
<option value="url">COM_JEA_OPTION_URL</option>
<option value="file">COM_JEA_OPTION_FILE</option>
</field>
<field name="zip_name" type="text"
default="jea_export_{{date}}.zip"
label="COM_JEA_FIELD_ZIP_NAME_LABEL"
description="COM_JEA_FIELD_ZIP_NAME_DESC" size="60"
/>
<field name="send_by_ftp" type="radio"
label="COM_JEA_FIELD_SEND_OVER_FTP_LABEL"
description="COM_JEA_FIELD_SEND_OVER_FTP_DESC"
default="0" class="btn-group">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="ftp_host" type="text"
default="" label="COM_JEA_FIELD_FTP_HOST_LABEL"
description="COM_JEA_FIELD_FTP_HOST_DESC"
class="inputbox" size="60" />
<field name="ftp_username" type="text"
default="" label="COM_JEA_FIELD_FTP_USERNAME_LABEL"
description="COM_JEA_FIELD_FTP_USERNAME_DESC"
class="inputbox" size="60" />
<field name="ftp_password" type="text"
default="" label="COM_JEA_FIELD_FTP_PASSWORD_LABEL"
description="COM_JEA_FIELD_FTP_PASSWORD_DESC"
class="inputbox" size="60" />
</fields>
</form>
PKZ��[�]M�!gateways/providers/jea/import.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 .
'/gateways/import.php';
require_once JPATH_COMPONENT_ADMINISTRATOR .
'/models/propertyInterface.php';
/**
* The import class for JEA gateway provider
*
* @since 3.4
*/
class JeaGatewayImportJea extends JeaGatewayImport
{
/**
* The gateway parser method.
*
* @return JEAPropertyInterface[]
*/
protected function &parse()
{
// @var JEAPropertyInterface[] $properties
$properties = array();
$importDir = $this->params->get('import_directory');
if (! JFolder::exists($importDir))
{
// Maybe a relative path to Joomla ?
if (! JFolder::exists(JPATH_ROOT . '/' . trim($importDir,
'/')))
{
throw new
Exception(JText::sprintf('COM_JEA_GATEWAY_ERROR_IMPORT_DIRECTORY_NOT_FOUND',
$importDir));
}
$importDir = JPATH_ROOT . '/' . trim($importDir,
'/');
}
$tmpDirs = $this->extractZips($importDir);
if (empty($tmpDirs))
{
return $properties;
}
foreach ($tmpDirs as $dir)
{
$xmlFiles = JFolder::files($dir, '.(xml|XML)$', false, true);
if (empty($xmlFiles))
{
continue;
}
$xmlFile = array_shift($xmlFiles);
$this->parseXML($properties, $xmlFile);
}
return $properties;
}
/**
* Extract Zip files and return extracting directories
*
* @param string $importDir The directory where to find zip files
*
* @return array
*/
protected function extractZips($importDir)
{
$tmpDirs = array();
$tmpPath = JFactory::getConfig()->get('tmp_path');
// Find zip files
$zips = JFolder::files($importDir, '.(zip|ZIP)$', false, true);
if (empty($zips))
{
throw new
Exception(JText::sprintf('COM_JEA_GATEWAY_ERROR_IMPORT_NO_ZIP_FOUND',
$importDir));
}
// Extract zips
foreach ($zips as $zipfile)
{
$tmpDir = $tmpPath . '/' . basename($zipfile);
if (! JFolder::create($tmpDir))
{
throw new
Exception(JText::sprintf('COM_JEA_ERROR_CANNOT_CREATE_DIR',
$tmpDir));
}
$tmpDirs[] = $tmpDir;
if (! JArchive::extract($zipfile, $tmpDir))
{
throw new
Exception(JText::sprintf('COM_JEA_GATEWAY_ERROR_CANNOT_EXTRACT_ZIP',
$zipfile));
}
}
return $tmpDirs;
}
/**
* Xml parser
*
* @param array $properties Will be filled with JEAPropertyInterface
instances
* @param string $xmlFile The xml file path
*
* @return void
*
* @throws Exception if xml cannot be parsed
*/
protected function parseXML(&$properties, $xmlFile = '')
{
$xml = $this->parseXmlFile($xmlFile);
$currentDirectory = dirname($xmlFile);
// Check root tag
if ($xml->getName() != 'jea')
{
throw new Exception("$xmlFile is not an export from JEA");
}
$children = $xml->children();
foreach ($children as $child)
{
if ($child->getName() != 'property')
{
continue;
}
$fields = $child->children();
$property = new JEAPropertyInterface;
$ref = (string) $child->ref;
// Ref must be unique
if (isset($properties[$ref]))
{
$ref .= '-' . (string) $child->id;
}
foreach ($fields as $field)
{
$fieldName = $field->getName();
if ($fieldName == 'id')
{
continue;
}
if ($fieldName == 'images')
{
$images = $field->children();
foreach ($images as $image)
{
if (JFile::exists($currentDirectory . '/' .
$image->name))
{
$property->images[] = $currentDirectory . '/' .
$image->name;
}
}
continue;
}
if ($fieldName == 'amenities')
{
$amenities = $field->children();
foreach ($amenities as $amenity)
{
$property->amenities[] = (string) $amenity;
}
continue;
}
$value = (string) $field;
if ($fieldName == 'ref')
{
$value = $ref;
}
// Filter values
if (ctype_digit($value))
{
$value = (int) $value;
}
if (property_exists($property, $fieldName))
{
$property->$fieldName = $value;
}
else
{
$property->addAdditionalField($fieldName, $value);
}
}
$properties[$ref] = $property;
}
}
}
PKZ��[
�X\{{!gateways/providers/jea/export.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\Archive\Archive;
use Joomla\CMS\Client\FtpClient;
require_once JPATH_COMPONENT_ADMINISTRATOR .
'/gateways/export.php';
/**
* The export class for JEA gateway provider
*
* @since 3.4
*/
class JeaGatewayExportJea extends JeaGatewayExport
{
/**
* The directory where to write data
*
* @var string
*/
protected $exportDirectory = '';
/**
* Get the export directory path
*
* @throws Exception if directory is not found
*
* @return string The export dir
*/
protected function getExportDirectory()
{
if (empty($this->exportDirectory))
{
$dir = $this->params->get('export_directory');
if (! JFolder::exists($dir))
{
// Try to create dir into joomla root dir
$dir = JPATH_ROOT . '/' . trim($dir, '/');
if (JFolder::exists(basename($dir)) && ! JFolder::create($dir))
{
throw new
Exception(JText::sprintf('COM_JEA_GATEWAY_ERROR_EXPORT_DIRECTORY_CANNOT_BE_CREATED',
$dir));
}
}
$this->exportDirectory = $dir;
}
return $this->exportDirectory;
}
/**
* Create the zip file
*
* @param string $filename The zipfile path to create.
* @param array $files A set of files to be included into the
zipfile.
*
* @throws Exception if zip file cannot be created
* @return void
*/
protected function createZip($filename, &$files)
{
$zipAdapter = (new Archive)->getAdapter('zip');
if (!@$zipAdapter->create($filename, $files))
{
throw new
Exception(JText::sprintf('COM_JEA_GATEWAY_ERROR_ZIP_CREATION',
$filename));
}
$this->log("Zip creation : $filename");
}
/**
* Build XML
*
* @param string|array $data The data to convert
* @param string $elementName The element name
*
* @return DOMDocument|DOMElement
*/
protected function buildXMl(&$data, $elementName = '')
{
static $doc;
$rootName = 'jea';
if ($elementName == $rootName)
{
$doc = new DOMDocument('1.0', 'utf-8');
}
$element = $doc->createElement($elementName);
if (is_array($data))
{
foreach ($data as $key => $value)
{
if (is_int($key))
{
$childsName = array(
$rootName => 'property',
'amenities' => 'amenity',
'images' => 'image'
);
if (! isset($childsName[$elementName]))
{
continue;
}
$key = $childsName[$elementName];
}
$child = $this->buildXMl($value, $key);
$element->appendChild($child);
}
}
else
{
$text = ctype_alnum($data) ? $doc->createTextNode((string) $data) :
$doc->createCDATASection((string) $data);
$element->appendChild($text);
}
if ($elementName == $rootName)
{
$doc->appendChild($element);
return $doc;
}
return $element;
}
/**
* Send File over FTP
*
* @param string $file The file to send
*
* @throws Exception if FTP transfer fails
* @return void
*/
protected function ftpSend($file)
{
$ftpClient = new FtpClient(array('timeout' => 5,
'type' => FTP_BINARY));
if
(!$ftpClient->connect($this->params->get('ftp_host')))
{
throw new
Exception(JText::sprintf('COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_CONNECT_TO_HOST',
$this->params->get('ftp_host')));
}
if
(!$ftpClient->login($this->params->get('ftp_username'),
$this->params->get('ftp_password')))
{
throw new
Exception(JText::_('COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_LOGIN'));
}
if (!$ftpClient->store($file))
{
throw new
Exception(JText::_('COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_SEND_FILE'));
}
$ftpClient->quit();
}
/**
* InitWebConsole event handler
*
* @return void
*/
public function initWebConsole()
{
JHtml::script('media/com_jea/js/gateway-jea.js', true);
$title = addslashes($this->title);
// Register script messages
JText::script('COM_JEA_EXPORT_START_MESSAGE', true);
JText::script('COM_JEA_EXPORT_END_MESSAGE', true);
JText::script('COM_JEA_GATEWAY_FTP_TRANSFERT_SUCCESS', true);
JText::script('COM_JEA_GATEWAY_DOWNLOAD_ZIP', true);
$document = JFactory::getDocument();
$script = "jQuery(document).on('registerGatewayAction',
function(event, webConsole, dispatcher) {"
. " dispatcher.register(function() {"
. " JeaGateway.startExport($this->id,
'$title', webConsole);"
. " });"
. "});";
$document->addScriptDeclaration($script);
}
/**
* The export event handler
*
* @return array An array containing the response model
*/
public function export()
{
$dir = $this->getExportDirectory();
$xmlFile = $dir . '/export.xml';
$zipName = $this->params->get('zip_name',
'jea_export_{{date}}.zip');
$zipName = str_replace('{{date}}',
date('Y-m-d-H:i:s'), $zipName);
$zipFile = $dir . '/' . $zipName;
$zipUrl = rtrim($this->baseUrl, '/') .
str_replace(JPATH_ROOT, '', $dir) . '/' . $zipName;
$files = array();
$properties = $this->getJeaProperties();
$exportImages = $this->params->get('export_images');
foreach ($properties as &$property)
{
foreach ($property['images'] as &$image)
{
if ($exportImages == 'file')
{
$name = $property['id'] . '_' .
basename($image['path']);
$files[] = array(
'data' => file_get_contents($image['path']),
'name' => $name
);
$image['name'] = $name;
unset($image['url']);
}
unset($image['path']);
}
}
// Init $xmlFile before DOMDocument::save()
JFile::write($xmlFile, '');
$xml = $this->buildXMl($properties, 'jea');
$xml->formatOutput = true;
$xml->save($xmlFile);
$files[] = array(
'data' => file_get_contents($xmlFile),
'name' => 'export.xml'
);
$this->createZip($zipFile, $files);
$response = array(
'exported_properties' => count($properties),
'zip_url' => $zipUrl,
'ftp_sent' => false
);
$message = JText::_('COM_JEA_EXPORT_END_MESSAGE');
$message = str_replace(
array('{title}', '{count}'),
array($this->title, $response['exported_properties']),
$message
);
if ($this->params->get('send_by_ftp') == '1')
{
$this->ftpSend($zipFile);
$response['ftp_sent'] = true;
$message .= ' ' .
JText::_('COM_JEA_GATEWAY_FTP_TRANSFERT_SUCCESS');
}
$this->out($message);
$this->log($message);
return $response;
}
}
PKZ��[�Xl�helpers/jea.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Jea Helper class
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaHelper
{
/**
* Configure the Linkbar.
*
* @param string $viewName The name of the active view.
*
* @return void
*/
public static function addSubmenu($viewName)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('m.*')
->from('#__menu AS m')
->innerJoin('#__menu AS m2 ON m.parent_id = m2.id')
->where("m2.link='index.php?option=com_jea'")
->order('id ASC');
$db->setQuery($query);
$items = $db->loadObjectList();
foreach ($items as $item)
{
$active = false;
switch ($item->title)
{
case 'com_jea_properties':
$item->title = 'COM_JEA_PROPERTIES_MANAGEMENT';
break;
case 'com_jea_features':
$item->title = 'COM_JEA_FEATURES_MANAGEMENT';
break;
}
$matches = array();
if (preg_match('#&view=([a-z]+)#', $item->link,
$matches))
{
$active = $matches[1] == $viewName;
}
JHtmlSidebar::addEntry(JText::_($item->title), $item->link,
$active);
}
JHtmlSidebar::addEntry(
JText::_('COM_JEA_ABOUT'),
'index.php?option=com_jea&view=about',
$viewName == 'about'
);
}
/**
* Gets a list of actions that can be performed.
*
* @param int $propertyId The property ID.
*
* @return Jobject
*/
public static function getActions($propertyId = 0)
{
$user = JFactory::getUser();
$result = new JObject;
if (empty($propertyId))
{
$assetName = 'com_jea';
}
else
{
$assetName = 'com_jea.property.' . (int) $propertyId;
}
$actions = array(
'core.admin',
'core.manage',
'core.create',
'core.edit',
'core.edit.own',
'core.edit.state',
'core.delete'
);
foreach ($actions as $action)
{
$result->set($action, $user->authorise($action, $assetName));
}
return $result;
}
/**
* Gets the list of tools icons.
*
* @return array A button list
*/
public static function getToolsIcons()
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array('link', 'title AS text',
'icon AS image', 'access'));
$query->from('#__jea_tools');
$query->order('id ASC');
$db->setQuery($query);
$buttons = $db->loadAssocList();
foreach ($buttons as &$button)
{
$button['text'] = JText::_($button['text']);
if (!empty($button['access']))
{
$button['access'] = json_decode($button['access']);
}
}
return $buttons;
}
}
PKZ��[��Ŗ��helpers/utility.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Utility class helper.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaHelperUtility
{
/**
* Transform an array to csv strng
*
* @param array $data An array of data
*
* @return string CSV formatted
*/
public static function arrayToCSV($data)
{
$outstream = fopen("php://temp", 'r+');
fputcsv($outstream, $data, ';', '"');
rewind($outstream);
$csv = fgets($outstream);
fclose($outstream);
return $csv;
}
/**
* Transform csv to array
*
* @param string $data The CSV string
*
* @return array
*/
protected function CSVToArray($data)
{
$instream = fopen("php://temp", 'r+');
fwrite($instream, $data);
rewind($instream);
$csv = fgetcsv($instream, 9999999, ';', '"');
fclose($instream);
return $csv;
}
}
PKZ��[��^&QQhelpers/upload.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\File;
use Joomla\CMS\Filesystem\Folder;
/**
* Upload class helper.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaUpload
{
/**
* The upload key
* (ex: $files[0][{picture}] or $files[0][{1}] or $files[0][{picture1}])
*
* @var string
*/
public $key = '';
/**
* @var string
*/
public $name = '';
/**
* @var string
*/
public $temp_name = '';
/**
* @var string
*/
public $type = '';
/**
* @var integer
*/
public $error;
/**
* Errors list
*
* @var array
*/
protected $errors = array();
/**
* It's a common security risk in pages who has the upload dir
* under the document root
*
* @var array
* @see JeaUpload::setValidExtensions()
*/
protected $extensionsCheck = array();
/**
* @var string
* @see JeaUpload::setValidExtensions()
*/
protected $extensionsMode = 'deny';
/**
* Constructor
*
* @param array $params File upload infos (given by $_FILES)
*/
public function __construct($params)
{
$this->name = isset($params['name']) ?
$params['name'] : '';
$this->temp_name = isset($params['tmp_name']) ?
$params['tmp_name'] : '';
$this->type = isset($params['type']) ?
$params['type'] : '';
$this->error = isset($params['error']) ? (int)
$params['error'] : UPLOAD_ERR_NO_FILE;
$this->extensionsCheck = array('php', 'phtm',
'phtml', 'php3', 'inc');
}
/**
* Return one or multiple instances of JeaUpload
*
* @param string $name The name of the posted file
*
* @return mixed
*/
public static function getUpload($name = '')
{
if (!isset($_FILES[$name]))
{
throw new \RuntimeException('No file with name ' . $name .
' was posted.');
}
$rawUploaded = $_FILES[$name];
if (is_array($rawUploaded['name']))
{
$fields = array(
'name',
'type',
'tmp_name',
'error',
'size'
);
$arrUploaded = array();
$keys = array_keys($rawUploaded['name']);
foreach ($keys as $key)
{
$params = array();
foreach ($fields as $field)
{
$params[$field] = $rawUploaded[$field][$key];
}
$uploaded = new JeaUpload($params);
$uploaded->key = $key;
$arrUploaded[] = $uploaded;
}
return $arrUploaded;
}
else
{
// Single post
$uploaded = new JeaUpload($rawUploaded);
$uploaded->key = $name;
return $uploaded;
}
}
/**
* Verify if the file was uploaded
*
* @return boolean
*/
public function isPosted()
{
if ($this->error === UPLOAD_ERR_NO_FILE)
{
return false;
}
return true;
}
/**
* Check errors
*
* @return JeaUpload
*/
public function check()
{
if ($this->error !== UPLOAD_ERR_OK)
{
switch ($this->error)
{
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$this->errors[] = 'COM_JEA_UPLOAD_ERR_SIZE';
break;
case UPLOAD_ERR_PARTIAL:
$this->errors[] = 'COM_JEA_UPLOAD_ERR_PARTIAL';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$this->errors[] = 'COM_JEA_UPLOAD_ERR_NO_TMP_DIR';
break;
case UPLOAD_ERR_CANT_WRITE:
$this->errors[] = 'COM_JEA_UPLOAD_ERR_CANT_WRITE';
break;
default:
$this->errors[] = 'COM_JEA_UPLOAD_UNKNOWN_ERROR';
}
}
// Valid extensions check
if (! $this->_evalValidExtensions())
{
$this->errors[] =
'COM_JEA_UPLOAD_FILE_EXTENSION_NOT_PERMITTED';
}
return $this;
}
/**
* Get the errors list
*
* @return array
*/
public function getErrors()
{
return $this->errors;
}
/**
* Set the file name
*
* @param string $name The file name
*
* @return JeaUpload
*/
public function setName($name)
{
// Verify extention before change the filename
if ($this->_evalValidExtensions())
{
$this->name = $name;
}
return $this;
}
/**
* Moves the uploaded file to its destination directory.
*
* @param string $dir Destination directory
* @param boolean $overwrite Overwrite if destination file exists?
*
* @return boolean true on success or false on error
*/
public function moveTo($dir = '', $overwrite = true)
{
$this->check();
if (!Folder::exists($dir))
{
$this->errors[] =
'COM_JEA_UPLOAD_DESTINATION_DIRECTORY_DOESNT_EXISTS';
}
if (! is_writable($dir))
{
$this->errors[] =
'COM_JEA_UPLOAD_DESTINATION_DIRECTORY_NOT_WRITABLE';
}
$file = $dir . '/' . $this->name;
if (File::exists($file))
{
if ($overwrite === false)
{
$this->errors[] =
'COM_JEA_UPLOAD_DESTINATION_FILE_ALREADY_EXISTS';
}
elseif (! is_writable($file))
{
$this->errors[] =
'COM_JEA_UPLOAD_DESTINATION_FILE_NOT_WRITABLE';
}
}
if (empty($this->errors))
{
return File::upload($this->temp_name, $file);
}
return false;
}
/**
* Format file name to be safe
*
* @param integer $maxlen Maximun permited string lenght
*
* @return JeaUpload
*/
public function nameToSafe($maxlen = 250)
{
$this->name = substr($this->name, 0, $maxlen);
$this->name = File::makeSafe($this->name);
$this->name = preg_replace('/\s+/', '-',
$this->name);
return $this;
}
/**
* Function to restrict the valid extensions on file uploads
*
* @param array $exts File extensions to validate
* @param string $mode The type of validation :
* 1) 'deny' Will deny only the supplied
extensions
* 2) 'accept' Will accept only the supplied
extensions as valid
*
* @return JeaUpload
*/
public function setValidExtensions($exts, $mode = 'accept')
{
$this->extensionsCheck = $exts;
$this->extensionsMode = $mode;
return $this;
}
/**
* Evaluates the validity of the extensions set by setValidExtensions
*
* @return boolean false on non valid extensions, true if they are valid
*/
protected function _evalValidExtensions()
{
$extension = File::getExt($this->name);
if ($this->extensionsMode == 'deny')
{
if (! in_array($extension, $this->extensionsCheck))
{
return true;
}
}
else
{
if (in_array($extension, $this->extensionsCheck))
{
return true;
}
}
return false;
}
}
PKZ��[����helpers/html/features.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Fatures html helper class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
abstract class JHtmlFeatures
{
/**
* Method to get property types in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
*
* @return string HTML for the select list.
*/
static public function types($value = 0, $name = 'type_id',
$attr = '')
{
$cond = self::getLanguageCondition();
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_PROPERTY_TYPE_LABEL', $attr, 'types',
$cond, 'f.ordering');
}
/**
* Method to get departments in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
*
* @return string HTML for the select list.
*/
static public function departments($value = 0, $name =
'department_id', $attr = '')
{
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_DEPARTMENT_LABEL', $attr,
'departments');
}
/**
* Method to get towns in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element
attributes
* @param string $department_id To get the department town list
*
* @return string HTML for the select list.
*/
static public function towns($value = 0, $name = 'town_id',
$attr = '', $department_id = null)
{
$condition = '';
if ($department_id !== null)
{
// Potentially Too much results so this will give en empty result
$condition = 'f.department_id = -1';
if ($department_id > 0)
{
$condition = 'f.department_id =' . intval($department_id);
}
}
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_TOWN_LABEL', $attr, 'towns',
$condition);
}
/**
* Method to get areas in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
* @param string $town_id To get the town area list
*
* @return string HTML for the select list.
*/
static public function areas($value = 0, $name = 'area_id',
$attr = '', $town_id = null)
{
$condition = '';
if ($town_id !== null)
{
$condition = 'f.town_id = -1';
if ($town_id > 0)
{
$condition = 'f.town_id =' . intval($town_id);
}
}
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_AREA_LABEL', $attr, 'areas',
$condition);
}
/**
* Method to get conditions in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
*
* @return string HTML for the select list.
*/
static public function conditions($value = 0, $name =
'condition_id', $attr = '')
{
$cond = self::getLanguageCondition();
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_CONDITION_LABEL', $attr, 'conditions',
$cond);
}
/**
* Method to get hot water types in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
*
* @return string HTML for the select list.
*/
static public function hotwatertypes($value = 0, $name =
'hot_water_type', $attr = '')
{
$cond = self::getLanguageCondition();
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_HOTWATERTYPE_LABEL', $attr,
'hotwatertypes', $cond);
}
/**
* Method to get hot heating types in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
*
* @return string HTML for the select list.
*/
static public function heatingtypes($value = 0, $name =
'heating_type', $attr = '')
{
$cond = self::getLanguageCondition();
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_HEATINGTYPE_LABEL', $attr,
'heatingtypes', $cond);
}
/**
* Method to get slogans in a HTML <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param mixed $attr An array or a string of element attributes
*
* @return string HTML for the select list.
*/
static public function slogans($value = 0, $name = 'slogan_id',
$attr = '')
{
$cond = self::getLanguageCondition();
return self::getHTMLSelectList($value, $name,
'COM_JEA_FIELD_SLOGAN_LABEL', $attr, 'slogans', $cond);
}
/**
* Generic method to get HTML list of feature in a <select> element
*
* @param string $value The selected value
* @param string $name The element name
* @param string $defaultOptionLabel The first option label
* @param mixed $attr An array or a string of element
attributes
* @param string $featureTable The feature table name without
the prefix "#__jea_"
* @param mixed $conditions A string or an array of where
conditions to filter the database request
* @param string $ordering The list ordering
*
* @return string HTML for the select list.
*/
static public function getHTMLSelectList($value = 0, $name = '',
$defaultOptionLabel = 'JOPTION_ANY',
$attr = '', $featureTable = '', $conditions = null,
$ordering = 'f.value asc'
)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('f.id , f.value');
$query->from('#__jea_' . $featureTable . ' AS f');
if (! empty($conditions))
{
if (is_string($conditions))
{
$query->where($conditions);
}
elseif (is_array($conditions))
{
foreach ($conditions as $condition)
{
$query->where($condition);
}
}
}
$query->order($ordering);
$db->setQuery($query);
$items = $db->loadObjectList();
// Assemble the list options.
$options = array();
$options[] = JHTML::_('select.option', '', '-
' . JText::_($defaultOptionLabel) . ' - ');
foreach ($items as &$item)
{
$options[] = JHtml::_('select.option', $item->id,
$item->value);
}
// Manage attributes
$idTag = false;
if (is_array($attr))
{
if (isset($attr['id']))
{
$idTag = $attr['id'];
unset($attr['id']);
}
if (empty($attr['size']))
{
$attr['size'] = 1;
}
if (empty($attr['class']))
{
$attr['class'] = 'inputbox';
}
$attr['class'] = trim($attr['class']);
}
else
{
if ((float) JVERSION > 3 &&
JFactory::getApplication()->isClient('administrator'))
{
$attr = 'class="inputbox span12 small"
size="1" ' . $attr;
}
else
{
$attr = 'class="inputbox" size="1" ' .
$attr;
}
}
return JHTML::_('select.genericlist', $options, $name, $attr,
'value', 'text', $value, $idTag);
}
/**
* Get language condition
*
* @return string
*/
protected static function getLanguageCondition()
{
$condition = '';
if (JFactory::getApplication()->isClient('site'))
{
$db = JFactory::getDbo();
$condition = 'f.language in (' .
$db->quote(JFactory::getLanguage()->getTag()) . ',' .
$db->quote('*') . ')';
}
return $condition;
}
}
PKZ��[�M�88%helpers/html/contentadministrator.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\Utilities\ArrayHelper;
/**
* Content administrator html helper class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
abstract class JHtmlContentAdministrator
{
/**
* Helper to display the featured icon in a list of items
*
* @param int $value The state value
* @param int $i The list counter value
* @param boolean $canChange The user right to change the state
*
* @return string
*/
static public function featured($value = 0, $i = 0, $canChange = true)
{
// Array of image, task, title, action
$states = array(
0 => array(
'disabled.png',
'properties.featured',
'COM_JEA_UNFEATURED',
'COM_JEA_TOGGLE_TO_FEATURE'
),
1 => array(
'featured.png',
'properties.unfeatured',
'COM_JEA_FEATURED',
'COM_JEA_TOGGLE_TO_UNFEATURE'
)
);
$state = ArrayHelper::getValue($states, (int) $value, $states[1]);
$html = JHtml::_('image', 'admin/' . $state[0],
JText::_($state[2]), null, true);
if ($canChange)
{
$html = '<a href="#" onclick="return
listItemTask(\'cb' . $i . '\',\'' . $state[1]
. '\')" title="' . JText::_($state[3]) .
'">'
. $html . '</a>';
}
return $html;
}
}
PKZ��[�.xQ??$language/es-ES/es-ES.com_jea.sys.ininu�[���;
@author Roberto Segura
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
; @note Complete
; @note All ini files need to be saved as UTF-8
COM_JEA="Joomla Estate Agency"
JEA="Joomla Estate Agency"
COM_JEA_FEATURES="Administrar auxiliares"
COM_JEA_PROPERTIES_DEFAULT_LAYOUT_TITLE="Inmuebles"
COM_JEA_PROPERTIES_DEFAULT_LAYOUT_DESC="Mostrar un listado de
inmuebles"
COM_JEA_PROPERTIES="Administrar inmuebles"
COM_JEA_PROPERTIES_MANAGE_LAYOUT_TITLE="Administración de
inmuebles"
COM_JEA_PROPERTIES_MANAGE_LAYOUT_DESC="Mostrar un listado de
propiedades administrables por un usuario"
COM_JEA_FORM_EDIT_LAYOUT_TITLE="Formulario de inmueble"
COM_JEA_FORM_EDIT_LAYOUT_DESC="Mostrar un formulario para dar de alta
un inmueble"
COM_JEA_PROPERTIES_SEARCH_LAYOUT_TITLE="Búsqueda"
COM_JEA_PROPERTIES_SEARCH_LAYOUT_DESC="Mostrar un formulario de
búsqueda"
COM_JEA_PROPERTIES_SEARCHMAP_LAYOUT_TITLE="Búsqueda
geolocalizada"
COM_JEA_PROPERTIES_SEARCHMAP_LAYOUT_DESC="Mostrar un formulario de
búsqueda interactuando con un mapa de Google"
COM_JEA_TOOLS="Herramientas"PKZ��[i�F>F>
language/es-ES/es-ES.com_jea.ininu�[���; @author Roberto
Segura
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
; @note All ini files need to be saved as UTF-8
COM_JEA_ABOUT="Acerca de"
COM_JEA_AMENITIES="Extras"
COM_JEA_CONFIG_GENERAL="General"
COM_JEA_CONFIG_LIST="Vista listado"
COM_JEA_CONFIG_PICTURES="Imágenes"
COM_JEA_CONFIG_PROPERTY="Vista de inmueble"
COM_JEA_COPY="Copiar"
COM_JEA_CREDITS="Créditos"
COM_JEA_DETAILS="Detalles"
COM_JEA_DIRECTORY_NOT_FOUND="El directorio : %s no se ha
encontrado."
COM_JEA_DOCUMENTATION="Documentación"
COM_JEA_EDIT_PROPERTY="Editar inmueble ID:%s"
COM_JEA_FEATURES_MANAGEMENT="Administrar auxiliares"
COM_JEA_FEATURES_UPDATED_WARNING="ALERTA: Los extras se han recargado
para el idioma actual. Revisa los campos resaltados."
COM_JEA_FIELDSET_RULES="Permisos del inmueble"
COM_JEA_FIELD_ADDRESS_LABEL="Dirección"
COM_JEA_FIELD_AMENITY_LABEL="Extra"
COM_JEA_FIELD_AREA_FILTER_DESC="Filtrar por área"
COM_JEA_FIELD_AREA_LABEL="Área"
COM_JEA_FIELD_CHARGES_LABEL="Cargas"
COM_JEA_FIELD_CONDITION_LABEL="Estado del inmueble"
COM_JEA_FIELD_CONTACT_FORM_DESC="Mostrar u ocultar el formulario de
contacto"
COM_JEA_FIELD_CONTACT_FORM_LABEL="Formulario de contacto"
COM_JEA_FIELD_CREATED_BY_DESC="Puedes cambiar aquí el nombre del
usuario que creó el inmueble."
COM_JEA_FIELD_CROP_THUMBNAILS_DESC="Recortar miniaturas para que
tengan siempre la misma anchura y la misma altura."
COM_JEA_FIELD_CROP_THUMBNAILS_LABEL="Recortar miniaturas"
COM_JEA_FIELD_CURRENCY_SYMBOL_LABEL="Símbolo de moneda"
COM_JEA_FIELD_DECIMALS_NUMBER_DESC="Número de decimales que se
usarán para mostrar números."
COM_JEA_FIELD_DECIMALS_NUMBER_LABEL="Número de decimales"
COM_JEA_FIELD_DECIMALS_SEPARATOR_DESC="Separador que se usará para
mostrar los decimales."
COM_JEA_FIELD_DECIMALS_SEPARATOR_LABEL="Separador de decimales"
COM_JEA_FIELD_DEFAULT_RECIPTIENT_DESC="Email por defecto que se usará
como destinatario del formulario de contacto"
COM_JEA_FIELD_DEFAULT_RECIPTIENT_LABEL="Destinatario por defecto"
COM_JEA_FIELD_DEPARTMENT_FILTER_DESC="Filtro por provincia"
COM_JEA_FIELD_DEPARTMENT_LABEL="Provincia"
COM_JEA_FIELD_DEPOSIT_LABEL="Fianza"
COM_JEA_FIELD_FEATURED_DESC="La marca de destacado es usada por el
módulo Emphasis para mostrar una selección de inmuebles destacados."
COM_JEA_FIELD_FEES_LABEL="Impuestos"
COM_JEA_FIELD_FLOORS_NUMBER_LABEL="Número de pisos"
COM_JEA_FIELD_FLOOR_LABEL="Piso"
COM_JEA_FIELD_GALLERY_ORIENTATION_DESC="<strong>Vertical</strong>
: imágenes en la galería están dispuestos verticalmente junto a la
imagen principal<br /><strong>Horizontal</strong> :
imágenes en la galería están dispuestas horizontalmente debajo de la
imagen principal."
COM_JEA_FIELD_GALLERY_ORIENTATION_LABEL="Orientación de la
galería"
COM_JEA_FIELD_GEOLOCALIZATION_LABEL="Geolocalización"
COM_JEA_FIELD_GOOGLE_MAP_DESC="Mostrar u ocultar mapa de Google"
COM_JEA_FIELD_GOOGLE_MAP_LABEL="Mapa de Google"
COM_JEA_FIELD_HEATINGTYPE_LABEL="Calefacción"
COM_JEA_FIELD_HITS_DESC="Contador de visitas de este inmueble"
COM_JEA_FIELD_HOTWATERTYPE_LABEL="Agua caliente"
COM_JEA_FIELD_IMAGES_LAYOUT_DESC="Tipo de galería que se usará en la
vista de inmueble"
COM_JEA_FIELD_IMAGES_LAYOUT_LABEL="Tipo de galería"
COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_DESC="Número máximo de imágenes
que podrán subirse simultáneamente"
COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_LABEL="Max. imágenes subidas"
COM_JEA_FIELD_JEA_VERSION_DESC="Elige la versión de JEA a la que
pertenecen los datos que quieres importar."
COM_JEA_FIELD_JEA_VERSION_LABEL="Versión de JEA"
COM_JEA_FIELD_JOOMLA_PATH_DESC="Ruta del directorio raíz de Joomla
donde JEA está instalado. Debe ser una ruta absoluta."
COM_JEA_FIELD_JOOMLA_PATH_LABEL="Ruta de Joomla"
COM_JEA_FIELD_LAND_SPACE_LABEL="Metros de terreno"
COM_JEA_FIELD_LANGUAGE_DESC="Idioma asignado a este item"
COM_JEA_FIELD_LATITUDE_LABEL="Latitud"
COM_JEA_FIELD_LIVING_SPACE_LABEL="Metros habitables"
COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_DESC="La relación
entre provincias, poblaciones y áreas puede ser activada o desactivada.
Activa esta opción para mejorar el rendimiento si tienes muchos registros
en estas tablas."
COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_LABEL="Relación
entre provincias, municipios y áreas"
COM_JEA_FIELD_LOGIN_BEHAVIOR_DESC="Establece si el formulario de
acceso debe aparecer antes o después de guardar el inmueble cuando el
usuario no está conectado."
COM_JEA_FIELD_LOGIN_BEHAVIOR_LABEL="Comportamiento del Login"
COM_JEA_FIELD_LONGITUDE_LABEL="Longitud"
COM_JEA_FIELD_NOTES_DESC="Puedes introducir notas relativas a este
inmueble. No serán visibles en la parte pública del sitio."
COM_JEA_FIELD_NOTES_LABEL="Notas privadas"
COM_JEA_FIELD_NUMBER_OF_BATHROOMS_LABEL="Número de baños"
COM_JEA_FIELD_NUMBER_OF_BEDROOMS_LABEL="Número de dormitorios"
COM_JEA_FIELD_NUMBER_OF_ROOMS_LABEL="Número de habitaciones"
COM_JEA_FIELD_NUMBER_OF_TOILETS_LABEL="Número de aseos"
COM_JEA_FIELD_ORIENTATION_LABEL="Orientación"
COM_JEA_FIELD_PRICE_LABEL="Precio"
COM_JEA_FIELD_PRICE_RENT_LABEL="Alquiler"
COM_JEA_FIELD_PRIMARY_ORDER_DESC="Columna por la que se ordenarán los
inmuebles mostrados"
COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_DESC="Dirección del orden para
mostrar los inmuebles"
COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_LABEL="Dirección del orden
primario"
COM_JEA_FIELD_PRIMARY_ORDER_LABEL="Orden primario"
COM_JEA_FIELD_PRINT_ICON_LABEL="Icono de imprimir"
COM_JEA_FIELD_PROPERTY_AVAILABILITY_LABEL="Disponibilidad del
inmueble"
COM_JEA_FIELD_PROPERTY_TYPES_FILTER_DESC="Filtro por tipo de
inmueble"
COM_JEA_FIELD_PROPERTY_TYPES_FILTER_LABEL="Tpos de inmueble"
COM_JEA_FIELD_PROPERTY_TYPE_LABEL="Tipo de inmueble"
COM_JEA_FIELD_PUBLISH_DOWN_DESC="Una fecha opcional de finalización
de publicación del inmueble."
COM_JEA_FIELD_PUBLISH_DOWN_LABEL="Finalización de la
publicación"
COM_JEA_FIELD_PUBLISH_UP_DESC="Una fecha opcional de inicio de
publicación del inmueble."
COM_JEA_FIELD_PUBLISH_UP_LABEL="Inicio de la publicación"
COM_JEA_FIELD_RATE_FREQUENCY_LABEL="Frecuencia de pago"
COM_JEA_FIELD_REF_DESC="Referencia del inmueble"
COM_JEA_FIELD_REF_LABEL="Referencia"
COM_JEA_FIELD_SEARCHFORM_AMENITIES_LABEL="Buscar en extras"
COM_JEA_FIELD_SEARCHFORM_AREAS_LABEL="Buscar en áreas"
COM_JEA_FIELD_SEARCHFORM_BUDGET_LABEL="Buscar en importe"
COM_JEA_FIELD_SEARCHFORM_CONDITION_LABEL="Buscar en estados de
inmueble"
COM_JEA_FIELD_SEARCHFORM_DEFAULT_MAP_AREA_DESC="Establecer la
localización por defecto que se mostrará en el mapa (ej.
«España»)"
COM_JEA_FIELD_SEARCHFORM_DEFAULT_MAP_AREA_LABEL="Localización por
defecto"
COM_JEA_FIELD_SEARCHFORM_DEPARTMENTS_LABEL="Buscar en provincias"
COM_JEA_FIELD_SEARCHFORM_FLOOR_LABEL="Buscar en piso"
COM_JEA_FIELD_SEARCHFORM_FREE_SEARCH_LABEL="Texto libre de
búsqueda"
COM_JEA_FIELD_SEARCHFORM_HEATING_TYPES_LABEL="Buscar en
calefacción"
COM_JEA_FIELD_SEARCHFORM_HOT_WATER_TYPES_LABEL="Buscar en agua
caliente"
COM_JEA_FIELD_SEARCHFORM_LAND_SPACE_LABEL="Buscar en metros
construidos"
COM_JEA_FIELD_SEARCHFORM_LIVING_SPACE_LABEL="Buscar en metros
habitables"
COM_JEA_FIELD_SEARCHFORM_MAP_HEIGHT_DESC="Establecer la altura del
mapa"
COM_JEA_FIELD_SEARCHFORM_MAP_HEIGHT_LABEL="Altura del mapa"
COM_JEA_FIELD_SEARCHFORM_MAP_WIDTH_DESC="Establecer la anchura del
mapa"
COM_JEA_FIELD_SEARCHFORM_MAP_WIDTH_LABEL="Ancho del mapa"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_BATHROOMS_LABEL="Buscar en número
de baños"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_BEDROOMS_LABEL="Buscar en número
de dormitorios"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_ROOMS_LABEL="Buscar en número de
habitaciones"
COM_JEA_FIELD_SEARCHFORM_ORIENTATION_LABEL="Buscar en
orientación"
COM_JEA_FIELD_SEARCHFORM_TOWNS_LABEL="Buscar en municipios"
COM_JEA_FIELD_SEARCHFORM_TRANSACTION_TYPE_DESC="Asignar si desea
buscar sólo en un tipo de transacción"
COM_JEA_FIELD_SEARCHFORM_ZIP_CODES_LABEL="Buscar en códigos
postales"
COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_DESC="Enviar un email al autor del
inmueble."
COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_LABEL="Enviar email al autor"
COM_JEA_FIELD_SHOW_CREATION_DATE_LABEL="Mostrar fecha de
creación"
COM_JEA_FIELD_SLOGAN_LABEL="Eslogan"
COM_JEA_FIELD_SORT_BY_AREA_DESC="Mostrar u ocultar el botón para
ordenar por área"
COM_JEA_FIELD_SORT_BY_AREA_LABEL="Ordenar por área"
COM_JEA_FIELD_SORT_BY_DATE_DESC="Mostrar u ocultar el boton para
ordenar por fecha"
COM_JEA_FIELD_SORT_BY_DATE_LABEL="Ordenar por fecha"
COM_JEA_FIELD_SORT_BY_DEPARTMENT_DESC="Mostrar u ocultar el botón
para ordenar por provincia"
COM_JEA_FIELD_SORT_BY_DEPARTMENT_LABEL="Ordenar por provincia"
COM_JEA_FIELD_SORT_BY_LAND_SPACE_DESC="Mostrar u ocultar el botón
para ordenar por metros de terreno"
COM_JEA_FIELD_SORT_BY_LAND_SPACE_LABEL="Ordenar por metros de
terreno"
COM_JEA_FIELD_SORT_BY_LIVING_SPACE_DESC="Mostrar u ocultar el botón
para ordenar por espacio habitable"
COM_JEA_FIELD_SORT_BY_LIVING_SPACE_LABEL="Ordenar por espacio
habitable"
COM_JEA_FIELD_SORT_BY_POPULARITY_DESC="Mostrar u ocultar el botón
para ordenar por popularidad"
COM_JEA_FIELD_SORT_BY_POPULARITY_LABEL="Orenar por popularidad"
COM_JEA_FIELD_SORT_BY_PRICE_DESC="Mostrar u ocultar el botón para
ordenar por precio"
COM_JEA_FIELD_SORT_BY_PRICE_LABEL="Ordenar por precio"
COM_JEA_FIELD_SORT_BY_TOWN_DESC="Mostrar u ocultar el botón para
ordenar por población"
COM_JEA_FIELD_SORT_BY_TOWN_LABEL="Ordenar por población"
COM_JEA_FIELD_SURFACE_UNIT_DESC="Metros cuadrados o pies
cuadradros"
COM_JEA_FIELD_SURFACE_UNIT_LABEL="Unidad métrica"
COM_JEA_FIELD_SYMBOL_POSITION_DESC="Modifica la posición donde se
muestra la moneda."
COM_JEA_FIELD_SYMBOL_POSITION_LABEL="Posición símbolo moneda"
COM_JEA_FIELD_THOUSANDS_SEPARATOR_DESC="Establece el símbolo que
separará los millares (ej.: 1.000,00 usa el .)."
COM_JEA_FIELD_THOUSANDS_SEPARATOR_LABEL="Separador millares"
COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_DESC="Establece la altura de las
imágenes en miniatura de tamaño mediano."
COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_LABEL="Altura miniaturas
medianas"
COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_DESC="Establece la anchura de las
imágenes en miniatura de tamaño mediano."
COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_LABEL="Anchura miniaturas
medianas"
COM_JEA_FIELD_THUMB_MIN_HEIGHT_DESC="Establece la altura de las
imágenes en miniatura de tamaño pequeño."
COM_JEA_FIELD_THUMB_MIN_HEIGHT_LABEL="Altura miniaturas
pequeñas"
COM_JEA_FIELD_THUMB_MIN_WIDTH_DESC="Establece la anchura de las
imágenes en miniatura de tamaño pequeño."
COM_JEA_FIELD_THUMB_MIN_WIDTH_LABEL="Anchura miniaturas
pequeñas"
COM_JEA_FIELD_THUMB_QUALITY_DESC="La calidad de la miniatura
corresponde a la compresión JPEG. El rango de valores va desde 0 a 100
(mejor calidad)."
COM_JEA_FIELD_THUMB_QUALITY_LABEL="Calidad de las miniaturas"
COM_JEA_FIELD_TOWN_FILTER_DESC="Filtrar por población"
COM_JEA_FIELD_TOWN_LABEL="Población"
COM_JEA_FIELD_TRANSACTION_TYPE_LABEL="Tipo de transacción"
COM_JEA_FIELD_TYPE_LABEL="Tipo de inmueble"
COM_JEA_FIELD_USE_AJAX_DESC="Esta opción actualiza los listados del
formulario y muestra el número de inmuebles, interactuando con la
selección del usuario."
COM_JEA_FIELD_USE_AJAX_LABEL="Usar AJAX"
COM_JEA_FIELD_USE_CAPTCHA_DESC="Usar validación captcha de imagen en
el formulario de contacto"
COM_JEA_FIELD_USE_CAPTCHA_LABEL="Usar captcha"
COM_JEA_FIELD_ZIP_CODE_LABEL="Código postal"
COM_JEA_FINANCIAL_INFORMATIONS="Información financiera"
COM_JEA_FORUM="Foro"
COM_JEA_HEADING_FEATURES_IMPORT_CSV="Importar archivo CSV"
COM_JEA_HEADING_FEATURES_LIST_NAME="Nombre del auxiliar"
COM_JEA_HEIGHT="altura"
COM_JEA_IMPORT_FROM_JEA="Importar desde JEA"
COM_JEA_IMPORT_FROM_JEA_DESC="Esta herramienta sirve para importar
datos de otra instalación de JEA."
COM_JEA_IMPORT_PARAMETERS="Parámetros de importación"
COM_JEA_JOOMLA_CONFIGURATION_FILE_NOT_FOUND="No se ha encontrado el
archivo de configuración de Joomla! "
COM_JEA_LICENCE="Licencia"
COM_JEA_LIST_OF_AMENITY_TITLE="Extras"
COM_JEA_LIST_OF_AREA_TITLE="Áreas"
COM_JEA_LIST_OF_CONDITION_TITLE="Estados del inmueble"
COM_JEA_LIST_OF_DEPARTMENT_TITLE="Provincias"
COM_JEA_LIST_OF_HEATINGTYPE_TITLE="Tipos de calefacción"
COM_JEA_LIST_OF_HOTWATERTYPE_TITLE="Tipos de agua caliente"
COM_JEA_LIST_OF_SLOGAN_TITLE="Eslogans"
COM_JEA_LIST_OF_TOWN_TITLE="Poblaciones"
COM_JEA_LIST_OF_TYPE_TITLE="Tipos de inmueble"
COM_JEA_LOCALIZATION="Localización"
COM_JEA_LOGO="Logo"
COM_JEA_MAIN_DEVELOPER="Desarrollador principal"
COM_JEA_MAP_MARKER_LABEL="Arrastra el marcador para asignar tu
posición"
COM_JEA_MAP_OPEN="Abrir el mapa"
COM_JEA_MENU_PARAMS_LABEL="Parámmetros de JEA"
COM_JEA_MESSAGE_CONFIRM_DELETE="¿Estás seguro de que quieres borrar
este o estos item(s)?"
COM_JEA_MSG_SELECT_PROPERTY_TYPE="Selecciona un tipo de inmueble"
COM_JEA_NEW_PROPERTY="Nuevo inmueble"
COM_JEA_NOTES="Notas"
COM_JEA_NO_ITEM_SELECTED="No se ha seleccionado un item"
COM_JEA_NUM_LINES_IMPORTED_ON_TABLE="%s línea(s) importadas en la
tabla %s"
COM_JEA_N_ITEMS_CHECKED_IN="%d item(s) comprobados correctamente"
COM_JEA_N_ITEMS_COPIED="%s item(s) copiado(s) correctamente"
COM_JEA_N_ITEMS_DELETED="%s item(s) borrado(s) correctamente"
COM_JEA_N_ITEMS_PUBLISHED="%s item(s) publicado(s) correctamente"
COM_JEA_N_ITEMS_UNPUBLISHED="%s item(s) despublicado(s)
correctamente"
COM_JEA_OPTION_AFTER_PRICE="Después del precio"
COM_JEA_OPTION_BEFORE_PRICE="Antes del precio"
COM_JEA_OPTION_DAILY="Diariamente"
COM_JEA_OPTION_EAST="Este"
COM_JEA_OPTION_EAST_WEST="Este oeste"
COM_JEA_OPTION_LOGIN_AFTER_SAVE="Acceder después de guardar"
COM_JEA_OPTION_LOGIN_BEFORE_SAVE="Acceder antes de guardar"
COM_JEA_OPTION_MONTHLY="Mensualmente"
COM_JEA_OPTION_NORTH="Norte"
COM_JEA_OPTION_NORTH_EAST="Noreste"
COM_JEA_OPTION_NORTH_SOUTH="Norte sur"
COM_JEA_OPTION_NORTH_WEST="Noroeste"
COM_JEA_OPTION_ORDER_ASCENDING="Orden ascendente"
COM_JEA_OPTION_ORDER_DESCENDING="Orden descendente"
COM_JEA_OPTION_RENTING="Alquiler"
COM_JEA_OPTION_SELLING="Venta"
COM_JEA_OPTION_SOUTH="Sur"
COM_JEA_OPTION_SOUTH_EAST="Sureste"
COM_JEA_OPTION_SOUTH_WEST="Suroeste"
COM_JEA_OPTION_WEEKLY="Semanalmente"
COM_JEA_OPTION_WEST="Oeste"
COM_JEA_PICTURES="Imágenes"
COM_JEA_PRICE_PER_FREQUENCY_DAILY=" / al día"
COM_JEA_PRICE_PER_FREQUENCY_MONTHLY=" / al mes"
COM_JEA_PRICE_PER_FREQUENCY_WEEKLY=" / a la semana"
COM_JEA_PROJECT_HOME="Página del proyecto"
COM_JEA_PROPERTIES_CREATED="%d inmuebles creados"
COM_JEA_PROPERTIES_FOUND_TOTAL="Encontrados : %d inmuebles"
COM_JEA_PROPERTIES_MANAGEMENT="Administrar inmuebles"
COM_JEA_PROPERTIES_SEARCH_FILTER_DESC="Buscar por ID ref, título o
autor"
COM_JEA_PROPERTIES_UPDATED="%d inmuebles actualizados"
COM_JEA_PUBLICATION_INFO="Información de publicación"
COM_JEA_TOOLS="Utilidades"
COM_JEA_UPLOAD_DESTINATION_DIRECTORY_DOESNT_EXISTS="La subida de
archivos ha fallado porque el directorio de destino no existe."
COM_JEA_UPLOAD_DESTINATION_DIRECTORY_NOT_WRITABLE="La subida de
archivos ha fallado porque el directorio de destino no es escribible."
COM_JEA_UPLOAD_DESTINATION_FILE_ALREADY_EXISTS="La subida ha fallado
porque el archivo de destino ya existe."
COM_JEA_UPLOAD_DESTINATION_FILE_NOT_WRITABLE="La subida de archivos ha
fallado porque el archivo de destino ya existe y no es escribible."
COM_JEA_UPLOAD_ERR_CANT_WRITE="No se puede escribir el archivo
temporal en el disco."
COM_JEA_UPLOAD_ERR_NO_TMP_DIR="Falta un directorio temporal para subir
el archivo."
COM_JEA_UPLOAD_ERR_PARTIAL="El archivo se ha subido sólo
parcialmente."
COM_JEA_UPLOAD_ERR_SIZE="El archivo excede el tamaño máximo de
archivo."
COM_JEA_UPLOAD_FILE_EXTENSION_NOT_PERMITTED="No se permite subir
archivos con esa extensión de archivo."
COM_JEA_UPLOAD_UNKNOWN_ERROR="Error desconocido : Fallo al subir el
archivo."
COM_JEA_VERSIONS="Versiones"
COM_JEA_WIDTH="ancho"
JGLOBAL_NUMBER_ITEMS_LIST_DESC="Número por defecto de inmuebles
listado en la página de resultados"
JGLOBAL_NUMBER_ITEMS_LIST_LABEL="Inmuebles por página"
PKZ��[�
��$language/en-GB/en-GB.com_jea.sys.ininu�[���; Author
Sylvain Philip
; Copyright (C) 2008 PHILIP Sylvain. All rights reserved.
; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
; Note : All ini files need to be saved as UTF-8
COM_JEA="Joomla Estate Agency"
JEA="Joomla Estate Agency"
COM_JEA_FEATURES="Manage features"
COM_JEA_PROPERTIES_DEFAULT_LAYOUT_TITLE="Properties layout"
COM_JEA_PROPERTIES_DEFAULT_LAYOUT_DESC="Display a list of
properties"
COM_JEA_PROPERTIES="Manage properties"
COM_JEA_PROPERTIES_MANAGE_LAYOUT_TITLE="Properties management
layout"
COM_JEA_PROPERTIES_MANAGE_LAYOUT_DESC="Display a list of properties
which can be managed by an user"
COM_JEA_FORM_EDIT_LAYOUT_TITLE="Form layout"
COM_JEA_FORM_EDIT_LAYOUT_DESC="Display a form to submit a new
property"
COM_JEA_PROPERTIES_SEARCH_LAYOUT_TITLE="Search layout"
COM_JEA_PROPERTIES_SEARCH_LAYOUT_DESC="Display a search form"
COM_JEA_PROPERTIES_SEARCHMAP_LAYOUT_TITLE="Geolocalized search
layout"
COM_JEA_PROPERTIES_SEARCHMAP_LAYOUT_DESC="Display a search form
interacting with a Google map"
COM_JEA_TOOLS="Tools"PKZ��[�<!�BLBL
language/en-GB/en-GB.com_jea.ininu�[���; @author Sylvain Philip
; @copyright (C) 2008 - 2020 PHILIP Sylvain. All rights reserved.
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
; @note All ini files need to be saved as UTF-8
COM_JEA_ABOUT="About"
COM_JEA_ACCESS_DELETE_DESC="New setting for <strong>delete
actions</strong> on this property and the calculated setting based on
the parent category and group permissions."
COM_JEA_ACCESS_EDITSTATE_DESC="New setting for <strong>edit
state actions</strong> on this property and the calculated setting
based on the parent category and group permissions."
COM_JEA_ACCESS_EDIT_DESC="New setting for <strong>edit
actions</strong> on this property and the calculated setting based on
the parent category and group permissions."
COM_JEA_AMENITIES="Amenities"
COM_JEA_CONFIG_GENERAL="General"
COM_JEA_CONFIG_LIST="List display"
COM_JEA_CONFIG_PICTURES="Pictures"
COM_JEA_CONFIG_PROPERTY="Property display"
COM_JEA_COPY="Copy"
COM_JEA_CREDITS="Credits"
COM_JEA_DETAILS="Details"
COM_JEA_DIRECTORY_NOT_FOUND="The directory : %s was not found."
COM_JEA_DOCUMENTATION="Documentation"
COM_JEA_DOWNLOAD="Download"
COM_JEA_EDIT_PROPERTY="Edit property ID:%s"
COM_JEA_EDIT_USER="Edit user"
COM_JEA_ERROR_CANNOT_CREATE_DIR="Cannot create directory : %s"
COM_JEA_EXPORT="Export"
COM_JEA_EXPORT_AJAX="AJAX Export"
COM_JEA_EXPORT_CLI="CLI Export"
COM_JEA_EXPORT_END_MESSAGE="Export completed for: %s (%d exported
properties)"
COM_JEA_EXPORT_LAUNCH="Start Export"
COM_JEA_EXPORT_START_MESSAGE="Export started for: %s"
COM_JEA_FEATURES_MANAGEMENT="Manage features"
COM_JEA_FEATURES_UPDATED_WARNING="WARNING: Features have been reloaded
for current language. Please review the highlighted fields."
COM_JEA_FIELDSET_RULES="Property Permissions"
COM_JEA_FIELD_ADDRESS_LABEL="Address"
COM_JEA_FIELD_AMENITY_LABEL="Amenity"
COM_JEA_FIELD_AREA_FILTER_DESC="Filter on area"
COM_JEA_FIELD_AREA_LABEL="Area"
COM_JEA_FIELD_AUTO_DELETE_PROPERTIES_DESC="Delete JEA properties not
found in the import set"
COM_JEA_FIELD_AUTO_DELETE_PROPERTIES_LABEL="Delete properties"
COM_JEA_FIELD_CHARGES_LABEL="Charges"
COM_JEA_FIELD_COMMAND_LABEL="Command:"
COM_JEA_FIELD_CONDITION_LABEL="Property condition"
COM_JEA_FIELD_CONTACT_FORM_DESC="Show or hide the contact form"
COM_JEA_FIELD_CONTACT_FORM_LABEL="Contact form"
COM_JEA_FIELD_CREATED_BY_DESC="You can change here the name of the
user who created the property."
COM_JEA_FIELD_CROP_THUMBNAILS_DESC="Crop thumbnails to fit always to
the same width and the same height."
COM_JEA_FIELD_CROP_THUMBNAILS_LABEL="Crop thumbnails"
COM_JEA_FIELD_CURRENCY_SYMBOL_LABEL="Currency symbol"
COM_JEA_FIELD_DECIMALS_NUMBER_DESC="Sets the number of decimal points
used to format numbers in the application."
COM_JEA_FIELD_DECIMALS_NUMBER_LABEL="Decimals number"
COM_JEA_FIELD_DECIMALS_SEPARATOR_DESC="Sets the separator for the
decimal point used to format numbers in the application."
COM_JEA_FIELD_DECIMALS_SEPARATOR_LABEL="Decimals separator"
COM_JEA_FIELD_DEFAULT_RECIPTIENT_DESC="Set the default recipient email
for the contact form"
COM_JEA_FIELD_DEFAULT_RECIPTIENT_LABEL="Default recipient"
COM_JEA_FIELD_DEPARTMENT_FILTER_DESC="Filter on department"
COM_JEA_FIELD_DEPARTMENT_LABEL="Department"
COM_JEA_FIELD_DEPOSIT_LABEL="Deposit"
COM_JEA_FIELD_EXPORT_DIRECTORY_DESC="The destination directory of the
export files."
COM_JEA_FIELD_EXPORT_DIRECTORY_LABEL="Export directory"
COM_JEA_FIELD_EXPORT_IMAGE_AS_DESC="Export images as plain file or
URL."
COM_JEA_FIELD_EXPORT_IMAGE_AS_LABEL="Export images as"
COM_JEA_FIELD_FEATURED_DESC="The featured marker is used in the
Emphasis module to have a featured selection of properties."
COM_JEA_FIELD_FEES_LABEL="Fees"
COM_JEA_FIELD_FLOORS_NUMBER_LABEL="Floors number"
COM_JEA_FIELD_FLOOR_LABEL="Floor"
COM_JEA_FIELD_FTP_HOST_DESC="The FTP host name."
COM_JEA_FIELD_FTP_HOST_LABEL="FTP host"
COM_JEA_FIELD_FTP_PASSWORD_DESC="FTP account password for this
host."
COM_JEA_FIELD_FTP_PASSWORD_LABEL="FTP password"
COM_JEA_FIELD_FTP_USERNAME_DESC="FTP account username for this
host."
COM_JEA_FIELD_FTP_USERNAME_LABEL="FTP username"
COM_JEA_FIELD_GALLERY_ORIENTATION_DESC="<strong>Vertical</strong>
: images in the gallery are arranged vertically next to the main
image<br /><strong>Horizontal</strong> : images in the
gallery are arranged horizontally below the main image."
COM_JEA_FIELD_GALLERY_ORIENTATION_LABEL="Gallery orientation"
COM_JEA_FIELD_GEOLOCALIZATION_LABEL="Geolocalization"
COM_JEA_FIELD_GOOGLE_MAP_DESC="Show or hide Google map"
COM_JEA_FIELD_GOOGLE_MAP_LABEL="Google map"
COM_JEA_FIELD_GOOGLE_MAP_API_KEY_DESC="An API key is required to use
the Google Map service."
COM_JEA_FIELD_GOOGLE_MAP_API_KEY_LABEL="Google Map Api key"
COM_JEA_FIELD_GOOGLE_MAP_API_KEY_MORE_INFO="<a
href="_QQ_"https://developers.google.com/maps/documentation/javascript/get-api-key?hl=En"_QQ_"
target="_blank">More info to obtain an API key</a>"
COM_JEA_FIELD_HEATINGTYPE_LABEL="Heating type"
COM_JEA_FIELD_HITS_DESC="Number of hits for this property"
COM_JEA_FIELD_HOTWATERTYPE_LABEL="Hot water type"
COM_JEA_FIELD_IMAGES_LAYOUT_DESC="Choose the gallery layout"
COM_JEA_FIELD_IMAGES_LAYOUT_LABEL="Gallery layout"
COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_DESC="Set the number of image which
can be uploaded in one time"
COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_LABEL="Upload image number"
COM_JEA_FIELD_IMPORT_DIRECTORY_DESC="Import directory where to lookup
for zip archive containing jea export files."
COM_JEA_FIELD_IMPORT_DIRECTORY_LABEL="Import directory"
COM_JEA_FIELD_IMPORT_USER_DESC="The creator of the imported
properties."
COM_JEA_FIELD_IMPORT_USER_LABEL="Import user"
COM_JEA_FIELD_JEA_VERSION_DESC="Choose the version of JEA from where
you want to import data."
COM_JEA_FIELD_JEA_VERSION_LABEL="JEA version"
COM_JEA_FIELD_JOOMLA_PATH_DESC="Set the Joomla! base path where JEA is
installed. This field requires an absotute path."
COM_JEA_FIELD_JOOMLA_PATH_LABEL="Joomla path"
COM_JEA_FIELD_LAND_SPACE_LABEL="Land space"
COM_JEA_FIELD_LANGUAGE_DESC="The language that the item is assigned
to"
COM_JEA_FIELD_LATITUDE_LABEL="Latitude"
COM_JEA_FIELD_LIVING_SPACE_LABEL="Living space"
COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_DESC="Relationship
between departments, towns and areas could be deactivated or not. Activate
this option to optimize the performances if you have huge number of rows in
these tables."
COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_LABEL="Relationship
between departments, towns, areas"
COM_JEA_FIELD_LOGIN_BEHAVIOR_DESC="Set whether the login form should
appear before or after the recording of the property when the user is not
connected."
COM_JEA_FIELD_LOGIN_BEHAVIOR_LABEL="Login behavior"
COM_JEA_FIELD_LONGITUDE_LABEL="Longitude"
COM_JEA_FIELD_NOTES_DESC="You can enter notes related to this
property. They will not be visible in the public part of the site."
COM_JEA_FIELD_NOTES_LABEL="Private note"
COM_JEA_FIELD_NUMBER_OF_BATHROOMS_LABEL="Number of bathrooms"
COM_JEA_FIELD_NUMBER_OF_BEDROOMS_LABEL="Number of bedrooms"
COM_JEA_FIELD_NUMBER_OF_ROOMS_LABEL="Number of rooms"
COM_JEA_FIELD_NUMBER_OF_TOILETS_LABEL="Number of toilets"
COM_JEA_FIELD_ORIENTATION_LABEL="Orientation"
COM_JEA_FIELD_PHP_INTERPRETER_LABEL="PHP interpreter:"
COM_JEA_FIELD_PRICE_LABEL="Price"
COM_JEA_FIELD_PRICE_RENT_LABEL="Rent"
COM_JEA_FIELD_PRIMARY_ORDER_DESC="Column that determines the order in
which elements are displayed"
COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_DESC="Ordering direction on
which the items will be displayed in"
COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_LABEL="Primary order
direction"
COM_JEA_FIELD_PRIMARY_ORDER_LABEL="Primary order"
COM_JEA_FIELD_PRINT_ICON_LABEL="Print icon"
COM_JEA_FIELD_PROPERTIES_PER_STEP_DESC="The number of properties
processed during each import AJAX request."
COM_JEA_FIELD_PROPERTIES_PER_STEP_LABEL="Properties per step"
COM_JEA_FIELD_PROPERTY_AVAILABILITY_LABEL="Property availability"
COM_JEA_FIELD_PROPERTY_TYPES_FILTER_DESC="Filter on property
types"
COM_JEA_FIELD_PROPERTY_TYPES_FILTER_LABEL="Property types"
COM_JEA_FIELD_PROPERTY_TYPE_LABEL="Property type"
COM_JEA_FIELD_PUBLISH_DOWN_DESC="An optional date to Finish Publishing
the property."
COM_JEA_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing"
COM_JEA_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing
the property."
COM_JEA_FIELD_PUBLISH_UP_LABEL="Start Publishing"
COM_JEA_FIELD_RATE_FREQUENCY_LABEL="Rate frequency"
COM_JEA_FIELD_REF_DESC="The property reference"
COM_JEA_FIELD_REF_LABEL="Reference"
COM_JEA_FIELD_SEARCHFORM_AMENITIES_LABEL="Search on amenities"
COM_JEA_FIELD_SEARCHFORM_AREAS_LABEL="Search on areas"
COM_JEA_FIELD_SEARCHFORM_BUDGET_LABEL="Search on budget"
COM_JEA_FIELD_SEARCHFORM_CONDITION_LABEL="Search on property
conditions"
COM_JEA_FIELD_SEARCHFORM_DEFAULT_MAP_AREA_DESC="Set the default
location that will be displayed in the the map (eg. «France»)"
COM_JEA_FIELD_SEARCHFORM_DEFAULT_MAP_AREA_LABEL="Default map
area"
COM_JEA_FIELD_SEARCHFORM_DEPARTMENTS_LABEL="Search on
departments"
COM_JEA_FIELD_SEARCHFORM_FLOOR_LABEL="Search on floor"
COM_JEA_FIELD_SEARCHFORM_FREE_SEARCH_DESC="Free search on property
title or ref"
COM_JEA_FIELD_SEARCHFORM_FREE_SEARCH_LABEL="Free text search"
COM_JEA_FIELD_SEARCHFORM_HEATING_TYPES_LABEL="Search on heating
type"
COM_JEA_FIELD_SEARCHFORM_HOT_WATER_TYPES_LABEL="Search on hot water
type"
COM_JEA_FIELD_SEARCHFORM_LAND_SPACE_LABEL="Search on land space"
COM_JEA_FIELD_SEARCHFORM_LIVING_SPACE_LABEL="Search on living
space"
COM_JEA_FIELD_SEARCHFORM_MAP_HEIGHT_DESC="Set the map height"
COM_JEA_FIELD_SEARCHFORM_MAP_HEIGHT_LABEL="Map height"
COM_JEA_FIELD_SEARCHFORM_MAP_WIDTH_DESC="Set the map width"
COM_JEA_FIELD_SEARCHFORM_MAP_WIDTH_LABEL="Map width"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_BATHROOMS_LABEL="Search on number
of bathrooms"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_BEDROOMS_LABEL="Search on number of
bedrooms"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_ROOMS_LABEL="Search on number of
rooms"
COM_JEA_FIELD_SEARCHFORM_ORIENTATION_LABEL="Search on
orientation"
COM_JEA_FIELD_SEARCHFORM_TOWNS_LABEL="Search on towns"
COM_JEA_FIELD_SEARCHFORM_TRANSACTION_TYPE_DESC="Set if you want search
only on one transaction type"
COM_JEA_FIELD_SEARCHFORM_ZIP_CODES_LABEL="Search on zip codes"
COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_DESC="Send email to the author of
the property."
COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_LABEL="Send email to author"
COM_JEA_FIELD_SEND_OVER_FTP_DESC="Send zip archive over FTP."
COM_JEA_FIELD_SEND_OVER_FTP_LABEL="Send over FTP"
COM_JEA_FIELD_SHOW_CREATION_DATE_LABEL="Show creation date"
COM_JEA_FIELD_SLOGAN_LABEL="Slogan"
COM_JEA_FIELD_SORT_BY_AREA_DESC="Display or not the sort by area
button"
COM_JEA_FIELD_SORT_BY_AREA_LABEL="Sort by area"
COM_JEA_FIELD_SORT_BY_DATE_DESC="Display or not the sort by date
button"
COM_JEA_FIELD_SORT_BY_DATE_LABEL="Sort by date"
COM_JEA_FIELD_SORT_BY_DEPARTMENT_DESC="Display or not the sort by
department button"
COM_JEA_FIELD_SORT_BY_DEPARTMENT_LABEL="Sort by department"
COM_JEA_FIELD_SORT_BY_LAND_SPACE_DESC="Display or not the sort by land
space button"
COM_JEA_FIELD_SORT_BY_LAND_SPACE_LABEL="Sort by land space"
COM_JEA_FIELD_SORT_BY_LIVING_SPACE_DESC="Display or not the sort by
living space button"
COM_JEA_FIELD_SORT_BY_LIVING_SPACE_LABEL="Sort by living space"
COM_JEA_FIELD_SORT_BY_POPULARITY_DESC="Display or not the sort by
popularity button"
COM_JEA_FIELD_SORT_BY_POPULARITY_LABEL="Sort by popularity"
COM_JEA_FIELD_SORT_BY_PRICE_DESC="Display or not the sort by price
button"
COM_JEA_FIELD_SORT_BY_PRICE_LABEL="Sort by price"
COM_JEA_FIELD_SORT_BY_TOWN_DESC="Display or not the sort by town
button"
COM_JEA_FIELD_SORT_BY_TOWN_LABEL="Sort by town"
COM_JEA_FIELD_SURFACE_UNIT_DESC="Square meter or Square foot"
COM_JEA_FIELD_SURFACE_UNIT_LABEL="Surface unit"
COM_JEA_FIELD_SYMBOL_POSITION_DESC="Sets the position of the currency
symbol."
COM_JEA_FIELD_SYMBOL_POSITION_LABEL="Symbol position"
COM_JEA_FIELD_THOUSANDS_SEPARATOR_DESC="Sets the thousands separator
used to format numbers in the application."
COM_JEA_FIELD_THOUSANDS_SEPARATOR_LABEL="Thousands Separator"
COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_DESC="Set the medium thumbnails
height."
COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_LABEL="Medium thumbnails
height."
COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_DESC="Set the medium thumbnails
width."
COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_LABEL="Medium thumbnails width."
COM_JEA_FIELD_THUMB_MIN_HEIGHT_DESC="Set the small thumbnails
height."
COM_JEA_FIELD_THUMB_MIN_HEIGHT_LABEL="Small thumbnails height."
COM_JEA_FIELD_THUMB_MIN_WIDTH_DESC="Set the small thumbnails
width."
COM_JEA_FIELD_THUMB_MIN_WIDTH_LABEL="Small thumbnails width."
COM_JEA_FIELD_THUMB_QUALITY_DESC="The thumbnail quality corresponds to
the JPEG compression. The values range go from 0 to 100 (best
quality)."
COM_JEA_FIELD_THUMB_QUALITY_LABEL="Thumbnail quality"
COM_JEA_FIELD_TOWN_FILTER_DESC="Filter on town"
COM_JEA_FIELD_TOWN_LABEL="Town"
COM_JEA_FIELD_TRANSACTION_TYPE_LABEL="Transaction type"
COM_JEA_FIELD_TYPE_LABEL="Property type"
COM_JEA_FIELD_USE_AJAX_DESC="This option refreshes the form lists and
displays the number of properties, interacting with the user choice."
COM_JEA_FIELD_USE_AJAX_LABEL="Use AJAX"
COM_JEA_FIELD_USE_CAPTCHA_DESC="Use captcha image validation on the
contact form"
COM_JEA_FIELD_USE_CAPTCHA_LABEL="Use captcha"
COM_JEA_FIELD_ZIP_CODE_LABEL="Zip code"
COM_JEA_FIELD_ZIP_NAME_DESC="The name of the zip archive containing
the export files."
COM_JEA_FIELD_ZIP_NAME_LABEL="Zip name"
COM_JEA_FINANCIAL_INFORMATIONS="Financial informations"
COM_JEA_FORUM="Forum"
COM_JEA_GATEWAYS="Gateways"
COM_JEA_GATEWAY_DOWNLOAD_ZIP="Download Zip"
COM_JEA_GATEWAY_ERROR_CANNOT_EXTRACT_ZIP="Cannot extract zip archive :
%s"
COM_JEA_GATEWAY_ERROR_EXPORT_DIRECTORY_CANNOT_BE_CREATED="The export
directory %s cannot be created"
COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_CONNECT_TO_HOST="Unable to connect
to FTP host : %s"
COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_LOGIN="FTP: Unable to login"
COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_SEND_FILE="FTP: Unable to send
file"
COM_JEA_GATEWAY_ERROR_IMPORT_DIRECTORY_NOT_FOUND="Import directory :
%s not found"
COM_JEA_GATEWAY_ERROR_IMPORT_NO_ZIP_FOUND="No zip found in import
directory : %s"
COM_JEA_GATEWAY_ERROR_ZIP_CREATION="Zip archive %s cannot be
created"
COM_JEA_GATEWAY_FIELD_PROVIDER_LABEL="Provider"
COM_JEA_GATEWAY_FTP_TRANSFERT_SUCCESS="Successful FTP Transfer"
COM_JEA_GATEWAY_IMPORT_TIME_ELAPSED="Elapsed time: %d sec."
COM_JEA_GATEWAY_IMPORT_TIME_REMAINING="Remaining time: %d sec."
COM_JEA_GATEWAY_PARAMS="Gateway parameters"
COM_JEA_GATEWAY_PARAMS_APPEAR_AFTER_SAVE="Parameters will appear after
the gateway is saved."
COM_JEA_GATEWAY_PROPERTIES_CREATED="Properties created: %s"
COM_JEA_GATEWAY_PROPERTIES_DELETED="Properties deleted: %s"
COM_JEA_GATEWAY_PROPERTIES_FOUND="Properties found: %s"
COM_JEA_GATEWAY_PROPERTIES_UPDATED="Properties updated: %s"
COM_JEA_HEADING_FEATURES_IMPORT_CSV="Import CSV file"
COM_JEA_HEADING_FEATURES_LIST_NAME="List name"
COM_JEA_HEIGHT="height"
COM_JEA_IMPORT="Import"
COM_JEA_IMPORT_AJAX="AJAX import"
COM_JEA_IMPORT_CLI="CLI import"
COM_JEA_IMPORT_END_MESSAGE="Import completed for: %s"
COM_JEA_IMPORT_FROM_CSV="Import from CSV"
COM_JEA_IMPORT_FROM_JEA="Import from JEA"
COM_JEA_IMPORT_FROM_JEA_DESC="The goal of this tool is to import data
from another installation of JEA."
COM_JEA_IMPORT_LAUNCH="Start Import"
COM_JEA_IMPORT_PARAMETERS="Import parameters"
COM_JEA_IMPORT_START_MESSAGE="Import started for: %s"
COM_JEA_JOOMLA_CONFIGURATION_FILE_NOT_FOUND="The Joomla! configuration
file was not found"
COM_JEA_LAUNCH="Launch"
COM_JEA_LICENCE="License"
COM_JEA_LIST_OF_AMENITY_TITLE="Amenities"
COM_JEA_LIST_OF_AREA_TITLE="Areas"
COM_JEA_LIST_OF_CONDITION_TITLE="Properties conditions"
COM_JEA_LIST_OF_DEPARTMENT_TITLE="Departments"
COM_JEA_LIST_OF_HEATINGTYPE_TITLE="Heating types"
COM_JEA_LIST_OF_HOTWATERTYPE_TITLE="Hot water types"
COM_JEA_LIST_OF_SLOGAN_TITLE="Slogans"
COM_JEA_LIST_OF_TOWN_TITLE="Towns"
COM_JEA_LIST_OF_TYPE_TITLE="Property types"
COM_JEA_LOCALIZATION="Localization"
COM_JEA_LOGO="Logo"
COM_JEA_LOGS="Logs"
COM_JEA_MAIN_DEVELOPER="Main developer"
COM_JEA_MAP_MARKER_LABEL="Drag and drop the marker to setup your
position"
COM_JEA_MAP_OPEN="Open the map"
COM_JEA_MENU_PARAMS_LABEL="JEA parameters"
COM_JEA_MESSAGE_CONFIRM_DELETE="Are you sure you want to delete this
or these item(s)?"
COM_JEA_MSG_SELECT_PROPERTY_TYPE="Select a type of property"
COM_JEA_NEW_PROPERTY="New property"
COM_JEA_NOTES="Notes"
COM_JEA_NO_ITEM_SELECTED="No item selected"
COM_JEA_NUM_LINES_IMPORTED_ON_TABLE="%s line(s) imported on table
%s"
COM_JEA_N_ITEMS_CHECKED_IN="%d item(s) successfully checked in"
COM_JEA_N_ITEMS_COPIED="%s item(s) successfully copied"
COM_JEA_N_ITEMS_DELETED="%s item(s) successfully deleted"
COM_JEA_N_ITEMS_PUBLISHED="%s item(s) successfully published"
COM_JEA_N_ITEMS_UNPUBLISHED="%s item(s) successfully unpublished"
COM_JEA_OPTION_AFTER_PRICE="After price"
COM_JEA_OPTION_BEFORE_PRICE="Before price"
COM_JEA_OPTION_DAILY="Daily"
COM_JEA_OPTION_EAST="East"
COM_JEA_OPTION_EAST_WEST="East west"
COM_JEA_OPTION_FILE="File"
COM_JEA_OPTION_LOGIN_AFTER_SAVE="Login after save"
COM_JEA_OPTION_LOGIN_BEFORE_SAVE="Login before save"
COM_JEA_OPTION_MONTHLY="Monthly"
COM_JEA_OPTION_NORTH="North"
COM_JEA_OPTION_NORTH_EAST="Northeast"
COM_JEA_OPTION_NORTH_SOUTH="North south"
COM_JEA_OPTION_NORTH_WEST="Northwest"
COM_JEA_OPTION_ORDER_ASCENDING="Ascending order"
COM_JEA_OPTION_ORDER_DESCENDING="Descending order"
COM_JEA_OPTION_RENTING="Renting"
COM_JEA_OPTION_SELLING="Selling"
COM_JEA_OPTION_SOUTH="South"
COM_JEA_OPTION_SOUTH_EAST="Southeast"
COM_JEA_OPTION_SOUTH_WEST="Southwest"
COM_JEA_OPTION_URL="URL"
COM_JEA_OPTION_WEEKLY="Weekly"
COM_JEA_OPTION_WEST="West"
COM_JEA_PICTURES="Pictures"
COM_JEA_PRICE_PER_FREQUENCY_DAILY=" / day"
COM_JEA_PRICE_PER_FREQUENCY_MONTHLY=" / month"
COM_JEA_PRICE_PER_FREQUENCY_WEEKLY=" / week"
COM_JEA_PROJECT_HOME="Project home"
COM_JEA_PROPERTIES_CREATED="%d created properties"
COM_JEA_PROPERTIES_FOUND_TOTAL="Total found : %d properties"
COM_JEA_PROPERTIES_MANAGEMENT="Manage properties"
COM_JEA_PROPERTIES_SEARCH_FILTER_DESC="Search by ref, ID, title or
author"
COM_JEA_PROPERTIES_UPDATED="%d updated properties"
COM_JEA_PUBLICATION_INFO="Publication info"
COM_JEA_START_IMPORT="Start import"
COM_JEA_TOOLS="Tools"
COM_JEA_UPLOAD_DESTINATION_DIRECTORY_DOESNT_EXISTS="Failed to upload
the file because the destination directory doesn't exists."
COM_JEA_UPLOAD_DESTINATION_DIRECTORY_NOT_WRITABLE="Failed to upload
the file because the destination directory is not writable."
COM_JEA_UPLOAD_DESTINATION_FILE_ALREADY_EXISTS="Failed to upload the
file because the destination file already exists."
COM_JEA_UPLOAD_DESTINATION_FILE_NOT_WRITABLE="Failed to upload the
file because the destination file already exists and is not writable."
COM_JEA_UPLOAD_ERR_CANT_WRITE="Failed to write temporary uploaded file
to disk."
COM_JEA_UPLOAD_ERR_NO_TMP_DIR="Missing a temporary folder to upload
the file."
COM_JEA_UPLOAD_ERR_PARTIAL="The uploaded file was only partially
uploaded."
COM_JEA_UPLOAD_ERR_SIZE="The uploaded file exceeds the maximum size
allowed."
COM_JEA_UPLOAD_FILE_EXTENSION_NOT_PERMITTED="The uploaded file
extension is not permitted."
COM_JEA_UPLOAD_UNKNOWN_ERROR="Unknown error : Failed to upload the
file."
COM_JEA_VERSIONS="Versions"
COM_JEA_WIDTH="width"
JGLOBAL_NUMBER_ITEMS_LIST_DESC="The default number of properties
listed in one page of results"
JGLOBAL_NUMBER_ITEMS_LIST_LABEL="List limit"
PKZ��[��ӓR�R
language/fr-FR/fr-FR.com_jea.ininu�[���; @author Sylvain
Philip
; @copyright (C) 2008 - 2020 PHILIP Sylvain. All rights reserved.
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
; @note Complete
; @note All ini files need to be saved as UTF-8
COM_JEA_ABOUT="À propos"
COM_JEA_ACCESS_DELETE_DESC="Droit de suppression pour ce bien."
COM_JEA_ACCESS_EDITSTATE_DESC="Droit de modification du statut pour ce
bien."
COM_JEA_ACCESS_EDIT_DESC="Droit de modification pour ce bien."
COM_JEA_AMENITIES="Équipements"
COM_JEA_CONFIG_GENERAL="Général"
COM_JEA_CONFIG_LIST="Affichage de la liste"
COM_JEA_CONFIG_PICTURES="Photos"
COM_JEA_CONFIG_PROPERTY="Affichage du bien"
COM_JEA_COPY="Copier"
COM_JEA_CREDITS="Crédits"
COM_JEA_DETAILS="Détails"
COM_JEA_DIRECTORY_NOT_FOUND="Le répertoire : %s n'a pas été
trouvé."
COM_JEA_DOCUMENTATION="Documentation"
COM_JEA_DOWNLOAD="Télécharger"
COM_JEA_EDIT_PROPERTY="Modifier le bien ID:% s"
COM_JEA_EDIT_USER="Modifier l'utilisateur"
COM_JEA_ERROR_CANNOT_CREATE_DIR="Impossible de créer le répertoire :
%s"
COM_JEA_EXPORT="Exporter"
COM_JEA_EXPORT_AJAX="Export en AJAX"
COM_JEA_EXPORT_CLI="Export par la ligne de commande"
COM_JEA_EXPORT_END_MESSAGE="Export terminé pour : %s (%d biens
exportés)"
COM_JEA_EXPORT_LAUNCH="Lancer l'exportation"
COM_JEA_EXPORT_START_MESSAGE="Export en cours pour : %s"
COM_JEA_FEATURES_MANAGEMENT="Gérer les critères"
COM_JEA_FEATURES_UPDATED_WARNING="Attention : Certains éléments
(encadrés en rouge) ont été rechargé pour la langue
sélectionnée."
COM_JEA_FIELDSET_RULES="Autorisations pour cette annonce"
COM_JEA_FIELD_ADDRESS_LABEL="Adresse"
COM_JEA_FIELD_AMENITY_LABEL="Équipement"
COM_JEA_FIELD_AREA_FILTER_DESC="Filtrer sur un quartier"
COM_JEA_FIELD_AREA_LABEL="Quartier"
COM_JEA_FIELD_AUTO_DELETE_PROPERTIES_DESC="Supprime automatiquement
les biens JEA non contenus dans l'import"
COM_JEA_FIELD_AUTO_DELETE_PROPERTIES_LABEL="Supprimer les biens"
COM_JEA_FIELD_CHARGES_LABEL="Charges"
COM_JEA_FIELD_COMMAND_LABEL="Commande :"
COM_JEA_FIELD_CONDITION_LABEL="État du bien"
COM_JEA_FIELD_CONTACT_FORM_DESC="Afficher ou masquer le formulaire de
contact"
COM_JEA_FIELD_CONTACT_FORM_LABEL="Formulaire de contact"
COM_JEA_FIELD_CREATED_BY_DESC="Vous pouvez modifier ici le nom de
l'utilisateur qui a créé le bien."
COM_JEA_FIELD_CROP_THUMBNAILS_DESC="Recadrer les photos pour
s'adapter toujours à la même largeur et à la même hauteur."
COM_JEA_FIELD_CROP_THUMBNAILS_LABEL="Recadrer les photos"
COM_JEA_FIELD_CURRENCY_SYMBOL_LABEL="Symbole monétaire"
COM_JEA_FIELD_DECIMALS_NUMBER_DESC="Définit le nombre de décimales
après la virgule pour formater les nombres dans l'application."
COM_JEA_FIELD_DECIMALS_NUMBER_LABEL="Nombre de décimales"
COM_JEA_FIELD_DECIMALS_SEPARATOR_DESC="Définit le séparateur de
décimale des nombres dans l'application."
COM_JEA_FIELD_DECIMALS_SEPARATOR_LABEL="Séparateur de
décimales"
COM_JEA_FIELD_DEFAULT_RECIPTIENT_DESC="Définit l'email du
destinataire par défaut pour le formulaire de contact"
COM_JEA_FIELD_DEFAULT_RECIPTIENT_LABEL="Destinataire par défaut"
COM_JEA_FIELD_DEPARTMENT_FILTER_DESC="Filtrer sur un
département"
COM_JEA_FIELD_DEPARTMENT_LABEL="Département"
COM_JEA_FIELD_DEPOSIT_LABEL="Dépôt de garantie"
COM_JEA_FIELD_EXPORT_DIRECTORY_DESC="Le répertoire de destination
pour les fichiers exportés"
COM_JEA_FIELD_EXPORT_DIRECTORY_LABEL="Répertoire
d'exportation"
COM_JEA_FIELD_EXPORT_IMAGE_AS_DESC="Exporter les images en tant que
fichiers ou en tant qu'URLs"
COM_JEA_FIELD_EXPORT_IMAGE_AS_LABEL="Exporter les images comme"
COM_JEA_FIELD_FEATURED_DESC="Le marqueur vedette est utilisé pour
mettre en avant le bien sur le site."
COM_JEA_FIELD_FEES_LABEL="Honoraires"
COM_JEA_FIELD_FLOORS_NUMBER_LABEL="Nombre d'étages"
COM_JEA_FIELD_FLOOR_LABEL="Étage"
COM_JEA_FIELD_FTP_HOST_DESC="Le nom de l'hôte FTP"
COM_JEA_FIELD_FTP_HOST_LABEL="Hôte FTP"
COM_JEA_FIELD_FTP_PASSWORD_DESC="Le mot de passe du compte FTP pour
cet hôte"
COM_JEA_FIELD_FTP_PASSWORD_LABEL="Mot de passe"
COM_JEA_FIELD_FTP_USERNAME_DESC="Le nom d'utilisateur du compte
FTP pour cet hôte"
COM_JEA_FIELD_FTP_USERNAME_LABEL="Nom d'utilisateur"
COM_JEA_FIELD_GALLERY_ORIENTATION_DESC="<strong>Vertical</strong>
: les images de la galerie sont disposées verticalement à côté de
l'image principale.<br /><strong>Horizontal</strong>
: les images de la galerie sont disposées horizontalement sous
l'image principale."
COM_JEA_FIELD_GALLERY_ORIENTATION_LABEL="Orientation de la
galerie"
COM_JEA_FIELD_GEOLOCALIZATION_LABEL="Géolocalisation"
COM_JEA_FIELD_GOOGLE_MAP_DESC="Afficher ou masquer la Google map"
COM_JEA_FIELD_GOOGLE_MAP_LABEL="Google map"
COM_JEA_FIELD_GOOGLE_MAP_API_KEY_DESC="Une clé d'API est
obligatoire pour pouvoir utiliser le service Google Map."
COM_JEA_FIELD_GOOGLE_MAP_API_KEY_LABEL="Clé d'API Google
Map"
COM_JEA_FIELD_GOOGLE_MAP_API_KEY_MORE_INFO="<a
href="_QQ_"https://developers.google.com/maps/documentation/javascript/get-api-key?hl=Fr"_QQ_"
target="_blank">Comment obtenir une clé
d'API</a>"
COM_JEA_FIELD_HEATINGTYPE_LABEL="Type de chauffage"
COM_JEA_FIELD_HITS_DESC="Nombre de clics pour ce bien"
COM_JEA_FIELD_HOTWATERTYPE_LABEL="Type d'eau chaude"
COM_JEA_FIELD_IMAGES_LAYOUT_DESC="Choisissez la disposition de la
galerie"
COM_JEA_FIELD_IMAGES_LAYOUT_LABEL="Mise en page de la galerie"
COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_DESC="Définit le nombre
d'images pouvant être uploadées en une fois"
COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_LABEL="Nombre d'uploads
simultanés"
COM_JEA_FIELD_IMPORT_DIRECTORY_DESC="Répertoire où rechercher les
fichiers zip à extraire contenant les fichiers d'exportation de
JEA"
COM_JEA_FIELD_IMPORT_DIRECTORY_LABEL="Répertoire
d'importation"
COM_JEA_FIELD_IMPORT_USER_DESC="L'utilisateur Joomla créateur
des annonces importées"
COM_JEA_FIELD_IMPORT_USER_LABEL="Utilisateur"
COM_JEA_FIELD_JEA_VERSION_DESC="Choisir la version de JEA à partir de
laquelle vous souhaitez importer les données."
COM_JEA_FIELD_JEA_VERSION_LABEL="Version de JEA"
COM_JEA_FIELD_JOOMLA_PATH_DESC="Entrez le chemin du répertoire racine
de Joomla! où JEA est installé. Ce chemin doit être un chemin absolu sur
votre système."
COM_JEA_FIELD_JOOMLA_PATH_LABEL="Répertoire de Joomla"
COM_JEA_FIELD_LAND_SPACE_LABEL="Surface terrain"
COM_JEA_FIELD_LANGUAGE_DESC="La langue pour cet enregistrement"
COM_JEA_FIELD_LATITUDE_LABEL="Latitude"
COM_JEA_FIELD_LIVING_SPACE_LABEL="Surface habitable"
COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_DESC="Activer cette
option afin d'optimiser les performances si vous avez un nombre
élevé d'enregistrements dans ces tables."
COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_LABEL="Relation entre
départements, villes et quartiers"
COM_JEA_FIELD_LOGIN_BEHAVIOR_DESC="Définir si le formulaire de
connexion doit apparaître avant ou après l'enregistrement du bien
lorsque l'utilisateur n'est pas connecté."
COM_JEA_FIELD_LOGIN_BEHAVIOR_LABEL="Connexion"
COM_JEA_FIELD_LONGITUDE_LABEL="Longitude"
COM_JEA_FIELD_NOTES_DESC="Vous pouvez entrer des notes liées à ce
bien. Elles ne seront pas visibles dans la partie publique du site."
COM_JEA_FIELD_NOTES_LABEL="Note privée"
COM_JEA_FIELD_NUMBER_OF_BATHROOMS_LABEL="Nombre de salles de
bains"
COM_JEA_FIELD_NUMBER_OF_BEDROOMS_LABEL="Nombre de chambres"
COM_JEA_FIELD_NUMBER_OF_ROOMS_LABEL="Nombre de pièces"
COM_JEA_FIELD_NUMBER_OF_TOILETS_LABEL="Nombre de wc"
COM_JEA_FIELD_ORIENTATION_LABEL="Exposition"
COM_JEA_FIELD_PHP_INTERPRETER_LABEL="Interpréteur PHP :"
COM_JEA_FIELD_PRICE_LABEL="Prix"
COM_JEA_FIELD_PRICE_RENT_LABEL="Loyer"
COM_JEA_FIELD_PRIMARY_ORDER_DESC="Colonne qui détermine l'ordre
dans lequel les bien seront affichés par défaut"
COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_DESC="Définit la direction du
tri"
COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_LABEL="Direction"
COM_JEA_FIELD_PRIMARY_ORDER_LABEL="Ordre d'affichage"
COM_JEA_FIELD_PRINT_ICON_LABEL="Icône d'impression"
COM_JEA_FIELD_PROPERTIES_PER_STEP_DESC="Nombre de biens traités par
requête AJAX."
COM_JEA_FIELD_PROPERTIES_PER_STEP_LABEL="Nombre de biens par requête
AJAX"
COM_JEA_FIELD_PROPERTY_AVAILABILITY_LABEL="Disponibilité du
bien"
COM_JEA_FIELD_PROPERTY_TYPES_FILTER_DESC="Filtre sur un ou plusieurs
types de bien"
COM_JEA_FIELD_PROPERTY_TYPES_FILTER_LABEL="Filtrer sur des types de
bien"
COM_JEA_FIELD_PROPERTY_TYPE_LABEL="Type de bien"
COM_JEA_FIELD_PUBLISH_DOWN_DESC="Indiquez si nécessaire une date de
fin de publication.<br />Si vous n'indiquez rien, l'annonce
ne sera pas automatiquement dépublié (le système mettant la valeur
'0000-00-00 00:00:00')."
COM_JEA_FIELD_PUBLISH_DOWN_LABEL="Fin de publication"
COM_JEA_FIELD_PUBLISH_UP_DESC="Indiquez si nécessaire une date de
début de publication.<br />Si vous n'indiquez rien, la date de
création est utilisée."
COM_JEA_FIELD_PUBLISH_UP_LABEL="Début de publication"
COM_JEA_FIELD_RATE_FREQUENCY_LABEL="Fréquence"
COM_JEA_FIELD_REF_DESC="La référence du bien"
COM_JEA_FIELD_REF_LABEL="Référence"
COM_JEA_FIELD_SEARCHFORM_AMENITIES_LABEL="Rechercher des
équipements"
COM_JEA_FIELD_SEARCHFORM_AREAS_LABEL="Rechercher quartiers"
COM_JEA_FIELD_SEARCHFORM_BUDGET_LABEL="Rechercher budget"
COM_JEA_FIELD_SEARCHFORM_CONDITION_LABEL="Rechercher états de
bien"
COM_JEA_FIELD_SEARCHFORM_DEFAULT_MAP_AREA_DESC="Définit
l'emplacement par défaut qui s'affichera dans le la carte (par
exemple. « France »)"
COM_JEA_FIELD_SEARCHFORM_DEFAULT_MAP_AREA_LABEL="Région de la carte
par défaut"
COM_JEA_FIELD_SEARCHFORM_DEPARTMENTS_LABEL="Rechercher
département"
COM_JEA_FIELD_SEARCHFORM_FLOOR_LABEL="Rechercher étage"
COM_JEA_FIELD_SEARCHFORM_FREE_SEARCH_DESC="Recherche libre basée sur
le titre ou la référence de l'annonce"
COM_JEA_FIELD_SEARCHFORM_FREE_SEARCH_LABEL="Recherche en texte
libre"
COM_JEA_FIELD_SEARCHFORM_HEATING_TYPES_LABEL="Rechercher type de
chauffage"
COM_JEA_FIELD_SEARCHFORM_HOT_WATER_TYPES_LABEL="Rechercher type
d'eau chaude "
COM_JEA_FIELD_SEARCHFORM_LAND_SPACE_LABEL="Rechercher surface
terrain"
COM_JEA_FIELD_SEARCHFORM_LIVING_SPACE_LABEL="Rechercher surface
habitable"
COM_JEA_FIELD_SEARCHFORM_MAP_HEIGHT_DESC="Définit la hauteur de la
Google map"
COM_JEA_FIELD_SEARCHFORM_MAP_HEIGHT_LABEL="Hauteur de la Google
map"
COM_JEA_FIELD_SEARCHFORM_MAP_WIDTH_DESC="Définit la largeur de la
Google map"
COM_JEA_FIELD_SEARCHFORM_MAP_WIDTH_LABEL="Largeur de la carte"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_BATHROOMS_LABEL="Rechercher nb de
salles de bains"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_BEDROOMS_LABEL="Rechercher nb de
chambres à coucher"
COM_JEA_FIELD_SEARCHFORM_NUMBER_OF_ROOMS_LABEL="Rechercher nombre de
pièces"
COM_JEA_FIELD_SEARCHFORM_ORIENTATION_LABEL="Rechercher
exposition"
COM_JEA_FIELD_SEARCHFORM_TOWNS_LABEL="Rechercher villes"
COM_JEA_FIELD_SEARCHFORM_TRANSACTION_TYPE_DESC="Si vous souhaitez que
la recherche s'applique uniquement un type de transaction"
COM_JEA_FIELD_SEARCHFORM_ZIP_CODES_LABEL="Recherche codes
postaux"
COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_DESC="Envoyez un mail à
l'auteur de l'annonce."
COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_LABEL="Envoyer un mail à
l'auteur"
COM_JEA_FIELD_SEND_OVER_FTP_DESC="Envoyer l'archive zip par
FTP"
COM_JEA_FIELD_SEND_OVER_FTP_LABEL="Envoyer par FTP"
COM_JEA_FIELD_SHOW_CREATION_DATE_LABEL="Afficher la date de
création"
COM_JEA_FIELD_SLOGAN_LABEL="Slogan"
COM_JEA_FIELD_SORT_BY_AREA_DESC="Affichage ou non du bouton de tri par
quartier"
COM_JEA_FIELD_SORT_BY_AREA_LABEL="Trier par quartier"
COM_JEA_FIELD_SORT_BY_DATE_DESC="Affichage ou non du bouton de tri par
date"
COM_JEA_FIELD_SORT_BY_DATE_LABEL="Trier par date"
COM_JEA_FIELD_SORT_BY_DEPARTMENT_DESC="Affichage ou non du bouton de
tri par département"
COM_JEA_FIELD_SORT_BY_DEPARTMENT_LABEL="Trier par département"
COM_JEA_FIELD_SORT_BY_LAND_SPACE_DESC="Affichage ou non du bouton de
tri par surface terrain"
COM_JEA_FIELD_SORT_BY_LAND_SPACE_LABEL="Trier par surface
terrain"
COM_JEA_FIELD_SORT_BY_LIVING_SPACE_DESC="Affichage ou non du bouton de
tri par surface habitable"
COM_JEA_FIELD_SORT_BY_LIVING_SPACE_LABEL="Trier par surface
habitable"
COM_JEA_FIELD_SORT_BY_POPULARITY_DESC="Affichage ou non du bouton de
tri par popularité"
COM_JEA_FIELD_SORT_BY_POPULARITY_LABEL="Trier par popularité"
COM_JEA_FIELD_SORT_BY_PRICE_DESC="Affichage ou non du bouton de tri
par prix"
COM_JEA_FIELD_SORT_BY_PRICE_LABEL="Trier par prix"
COM_JEA_FIELD_SORT_BY_TOWN_DESC="Affichage ou non du bouton de tri par
ville"
COM_JEA_FIELD_SORT_BY_TOWN_LABEL="Trier par ville"
COM_JEA_FIELD_SURFACE_UNIT_DESC="Mètres carrés ou Square feet"
COM_JEA_FIELD_SURFACE_UNIT_LABEL="Unité de surface"
COM_JEA_FIELD_SYMBOL_POSITION_DESC="Définit la position du symbole
monétaire."
COM_JEA_FIELD_SYMBOL_POSITION_LABEL="Position du symbole"
COM_JEA_FIELD_THOUSANDS_SEPARATOR_DESC="Séparateur des milliers
utilisé pour formater les nombres dans l'application."
COM_JEA_FIELD_THOUSANDS_SEPARATOR_LABEL="Séparateur des milliers
"
COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_DESC="Définir la hauteur des photos
moyennes."
COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_LABEL="Hauteur des photos
moyennes."
COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_DESC="Définissez la largeur des
photos moyennes."
COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_LABEL="Largeur des photos
moyennes."
COM_JEA_FIELD_THUMB_MIN_HEIGHT_DESC="Définir la hauteur des petites
photos."
COM_JEA_FIELD_THUMB_MIN_HEIGHT_LABEL="Hauteur de petites photos."
COM_JEA_FIELD_THUMB_MIN_WIDTH_DESC="Définir la largeur des petites
photos."
COM_JEA_FIELD_THUMB_MIN_WIDTH_LABEL="Largeur des petites photos."
COM_JEA_FIELD_THUMB_QUALITY_DESC="Cette valeur correspond à la
compression JPEG. La plage de valeurs va de 0 à 100 (meilleure
qualité)."
COM_JEA_FIELD_THUMB_QUALITY_LABEL="Qualité des photos"
COM_JEA_FIELD_TOWN_FILTER_DESC="Filtrer sur une ville"
COM_JEA_FIELD_TOWN_LABEL="Ville"
COM_JEA_FIELD_TRANSACTION_TYPE_LABEL="Type de transaction"
COM_JEA_FIELD_TYPE_LABEL="Type de bien"
COM_JEA_FIELD_USE_AJAX_DESC="Cette option rafraîchit les listes du
formulaire et affiche le nombre de biens en interagissant avec le choix de
l'utilisateur."
COM_JEA_FIELD_USE_AJAX_LABEL="Activer AJAX"
COM_JEA_FIELD_USE_CAPTCHA_DESC="Utiliser image captcha pour valider le
formulaire de contact."
COM_JEA_FIELD_USE_CAPTCHA_LABEL="Utiliser un captcha"
COM_JEA_FIELD_ZIP_CODE_LABEL="Code postal"
COM_JEA_FIELD_ZIP_NAME_DESC="Le nom de l'archive zip contant les
fichiers de l'export"
COM_JEA_FIELD_ZIP_NAME_LABEL="Nom du zip"
COM_JEA_FINANCIAL_INFORMATIONS="Informations financières"
COM_JEA_FORUM="Forum"
COM_JEA_GATEWAYS="Passerelles"
COM_JEA_GATEWAY_DOWNLOAD_ZIP="Télécharger le zip"
COM_JEA_GATEWAY_ERROR_CANNOT_EXTRACT_ZIP="Impossible d'extraire
l'archive : %s"
COM_JEA_GATEWAY_ERROR_EXPORT_DIRECTORY_CANNOT_BE_CREATED="Le
répertoire d'exportation %s ne peut pas être créé."
COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_CONNECT_TO_HOST="Impossible de se
connecter à l'hôte FTP"
COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_LOGIN="FTP: Impossible de
s'identifier. Veuillez vérifier vos paramètres de connexion."
COM_JEA_GATEWAY_ERROR_FTP_UNABLE_TO_SEND_FILE="FTP: Impossible
d'envoyer le fichier"
COM_JEA_GATEWAY_ERROR_IMPORT_DIRECTORY_NOT_FOUND="Le répertoire
d'importation %s n'a pas été trouvé."
COM_JEA_GATEWAY_ERROR_IMPORT_NO_ZIP_FOUND="Aucun fichier zip trouvé
dans le répertoire d'importation %s."
COM_JEA_GATEWAY_ERROR_ZIP_CREATION="L'archive zip %s ne peut pas
être créé"
COM_JEA_GATEWAY_FIELD_PROVIDER_LABEL="Fournisseur"
COM_JEA_GATEWAY_FTP_TRANSFERT_SUCCESS="Transfert FTP effectué avec
succès"
COM_JEA_GATEWAY_IMPORT_TIME_ELAPSED="Temps écoulé : %d sec."
COM_JEA_GATEWAY_IMPORT_TIME_REMAINING="Temps restant : %d sec."
COM_JEA_GATEWAY_PARAMS="Paramètres de la passerelle"
COM_JEA_GATEWAY_PARAMS_APPEAR_AFTER_SAVE="Les paramètres
apparaîtront après l'enregistrement de la passerelle"
COM_JEA_GATEWAY_PROPERTIES_CREATED="Biens ajoutés : %s"
COM_JEA_GATEWAY_PROPERTIES_DELETED="Biens supprimés : %s"
COM_JEA_GATEWAY_PROPERTIES_FOUND="Biens trouvés : %s"
COM_JEA_GATEWAY_PROPERTIES_UPDATED="Biens mis à jour : %s"
COM_JEA_HEADING_FEATURES_IMPORT_CSV="Importer un fichier CSV"
COM_JEA_HEADING_FEATURES_LIST_NAME="Nom de la liste"
COM_JEA_HEIGHT="hauteur"
COM_JEA_IMPORT="Importer"
COM_JEA_IMPORT_AJAX="Import en AJAX"
COM_JEA_IMPORT_CLI="Import par la ligne de commande"
COM_JEA_IMPORT_END_MESSAGE="Import terminé pour : %s"
COM_JEA_IMPORT_FROM_CSV="Importer depuis un CSV"
COM_JEA_IMPORT_FROM_JEA="Importer depuis JEA"
COM_JEA_IMPORT_FROM_JEA_DESC="Cet outil permet l'importation des
données depuis une autre installation de JEA/Joomla sur le même
serveur."
COM_JEA_IMPORT_LAUNCH="Lancer l'importation"
COM_JEA_IMPORT_PARAMETERS="Paramètres d'importation"
COM_JEA_IMPORT_START_MESSAGE="Import en cours pour : %s"
COM_JEA_JOOMLA_CONFIGURATION_FILE_NOT_FOUND="Le fichier de
configuration de Joomla n'a pas été trouvé."
COM_JEA_LAUNCH="Lancer"
COM_JEA_LICENCE="Licence"
COM_JEA_LIST_OF_AMENITY_TITLE="Équipements"
COM_JEA_LIST_OF_AREA_TITLE="Quartiers"
COM_JEA_LIST_OF_CONDITION_TITLE="États des biens"
COM_JEA_LIST_OF_DEPARTMENT_TITLE="Départements"
COM_JEA_LIST_OF_HEATINGTYPE_TITLE="Types de chauffage"
COM_JEA_LIST_OF_HOTWATERTYPE_TITLE="Types d'eau chaude"
COM_JEA_LIST_OF_SLOGAN_TITLE="Slogans"
COM_JEA_LIST_OF_TOWN_TITLE="Villes"
COM_JEA_LIST_OF_TYPE_TITLE="Types de bien"
COM_JEA_LOCALIZATION="Localisation"
COM_JEA_LOGO="Logo"
COM_JEA_LOGS="Logs"
COM_JEA_MAIN_DEVELOPER="Développeur principal"
COM_JEA_MAP_MARKER_LABEL="Glissez puis déposez le marqueur à la
position souhaitée."
COM_JEA_MAP_OPEN="Ouvrir la carte"
COM_JEA_MENU_PARAMS_LABEL="Paramètres JEA"
COM_JEA_MESSAGE_CONFIRM_DELETE="Êtes-vous sûr de vouloir supprimer
cet ou ces élément(s)?"
COM_JEA_MSG_SELECT_PROPERTY_TYPE="Sélectionnez un type de bien"
COM_JEA_NEW_PROPERTY="Nouveau bien"
COM_JEA_NOTES="Notes"
COM_JEA_NO_ITEM_SELECTED="Aucun élément sélectionné"
COM_JEA_NUM_LINES_IMPORTED_ON_TABLE="%s ligne(s) ont été
importée(s) dans la table %s"
COM_JEA_N_ITEMS_CHECKED_IN="%d élément(s) déverrouillé(s)"
COM_JEA_N_ITEMS_COPIED="%s élément(s) copié(s)"
COM_JEA_N_ITEMS_DELETED="%s élément(s) supprimé(s)"
COM_JEA_N_ITEMS_PUBLISHED="%s élément(s) publié(s)"
COM_JEA_N_ITEMS_UNPUBLISHED="%s élément(s) dépublié(s)"
COM_JEA_OPTION_AFTER_PRICE="Après le prix"
COM_JEA_OPTION_BEFORE_PRICE="Avant le prix"
COM_JEA_OPTION_DAILY="Quotidien"
COM_JEA_OPTION_EAST="Est"
COM_JEA_OPTION_EAST_WEST="Est-ouest"
COM_JEA_OPTION_FILE="Fichier"
COM_JEA_OPTION_LOGIN_AFTER_SAVE="Connexion après
l'enregistrement"
COM_JEA_OPTION_LOGIN_BEFORE_SAVE="Connexion avant
l'enregistrement"
COM_JEA_OPTION_MONTHLY="Mensuel"
COM_JEA_OPTION_NORTH="Nord"
COM_JEA_OPTION_NORTH_EAST="Nord-est"
COM_JEA_OPTION_NORTH_SOUTH="Nord-sud"
COM_JEA_OPTION_NORTH_WEST="Nord-ouest"
COM_JEA_OPTION_ORDER_ASCENDING="Par ordre croissant"
COM_JEA_OPTION_ORDER_DESCENDING="Par ordre décroissant"
COM_JEA_OPTION_RENTING="Location"
COM_JEA_OPTION_SELLING="Vente"
COM_JEA_OPTION_SOUTH="Sud"
COM_JEA_OPTION_SOUTH_EAST="Sud-est"
COM_JEA_OPTION_SOUTH_WEST="Sud-ouest"
COM_JEA_OPTION_URL="URL"
COM_JEA_OPTION_WEEKLY="Hebdomadaire"
COM_JEA_OPTION_WEST="Ouest"
COM_JEA_PICTURES="Photos"
COM_JEA_PRICE_PER_FREQUENCY_DAILY="/ jour"
COM_JEA_PRICE_PER_FREQUENCY_MONTHLY="/ mois"
COM_JEA_PRICE_PER_FREQUENCY_WEEKLY="/ semaine"
COM_JEA_PROJECT_HOME="Accueil du projet"
COM_JEA_PROPERTIES_CREATED="%d biens ajoutés"
COM_JEA_PROPERTIES_FOUND_TOTAL="%d biens trouvés"
COM_JEA_PROPERTIES_MANAGEMENT="Gérer les biens"
COM_JEA_PROPERTIES_SEARCH_FILTER_DESC="Rechercher par ref, ID, titre
ou auteur"
COM_JEA_PROPERTIES_UPDATED="%d biens mis à jour"
COM_JEA_PUBLICATION_INFO="Infos de publication"
COM_JEA_START_IMPORT="Démarrer l'importation"
COM_JEA_TOOLS="Outils"
COM_JEA_UPLOAD_DESTINATION_DIRECTORY_DOESNT_EXISTS="Impossible de
télécharger le fichier car le répertoire de destination n'existe
pas."
COM_JEA_UPLOAD_DESTINATION_DIRECTORY_NOT_WRITABLE="Impossible de
télécharger le fichier car le répertoire de destination n'est pas
accessible en écriture."
COM_JEA_UPLOAD_DESTINATION_FILE_ALREADY_EXISTS="Impossible de
télécharger le fichier car le fichier de destination existe déjà."
COM_JEA_UPLOAD_DESTINATION_FILE_NOT_WRITABLE="Impossible de
télécharger le fichier car le fichier de destination existe déjà et
n'est pas accessible en écriture."
COM_JEA_UPLOAD_ERR_CANT_WRITE="Impossible d'écrire le fichier
temporaire sur le disque."
COM_JEA_UPLOAD_ERR_NO_TMP_DIR="Il manque un dossier temporaire pour
télécharger le fichier."
COM_JEA_UPLOAD_ERR_PARTIAL="Le fichier téléchargé n'a été
que partiellement téléchargé."
COM_JEA_UPLOAD_ERR_SIZE="Le fichier téléchargé excède la taille
maximale autorisée."
COM_JEA_UPLOAD_FILE_EXTENSION_NOT_PERMITTED="L'extension du
fichier téléchargé n'est pas autorisée."
COM_JEA_UPLOAD_UNKNOWN_ERROR="Erreur inconnu : Le fichier n'a pas
été téléchargé."
COM_JEA_VERSIONS="Versions"
COM_JEA_WIDTH="Largeur"
JGLOBAL_NUMBER_ITEMS_LIST_DESC="Définit le nombre d'éléments
par défaut listés sur une page de résultats "
JGLOBAL_NUMBER_ITEMS_LIST_LABEL="Limite des listes"
PKZ��[8,�ekk$language/fr-FR/fr-FR.com_jea.sys.ininu�[���;
@author Sylvain Philip
; @copyright (C) 2008 - 2020 PHILIP Sylvain. All rights reserved.
; @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
; @note Complete
; @note All ini files need to be saved as UTF-8
COM_JEA="Joomla Estate Agency"
JEA="Joomla Estate Agency"
COM_JEA_FEATURES="Gérer les critères"
COM_JEA_PROPERTIES_DEFAULT_LAYOUT_TITLE="Liste des biens"
COM_JEA_PROPERTIES_DEFAULT_LAYOUT_DESC="Affiche une liste de
biens"
COM_JEA_PROPERTIES="Gérer les biens"
COM_JEA_PROPERTIES_MANAGE_LAYOUT_TITLE="Gestion des biens"
COM_JEA_PROPERTIES_MANAGE_LAYOUT_DESC="Affiche une liste de biens
pouvant être administrés par un utilisateur"
COM_JEA_FORM_EDIT_LAYOUT_TITLE="Formulaire"
COM_JEA_FORM_EDIT_LAYOUT_DESC="Affiche un formulaire pour soumettre un
nouveau bien"
COM_JEA_PROPERTIES_SEARCH_LAYOUT_TITLE="Recherche"
COM_JEA_PROPERTIES_SEARCH_LAYOUT_DESC="Affiche un formulaire de
recherche"
COM_JEA_PROPERTIES_SEARCHMAP_LAYOUT_TITLE="Recherche
géolocalisée"
COM_JEA_PROPERTIES_SEARCHMAP_LAYOUT_DESC="Affiche un formulaire de
recherche intéragissant avec une Google map"
COM_JEA_TOOLS="Outils"
PKZ��[�q�I��layouts/jea/gateways/nav.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/* @var $displayData array */
$action = $displayData['action'];
$view = $displayData['view'];
?>
<ul class="nav nav-pills">
<li<?php if ($view == 'console') echo '
class="active"' ?>>
<a href="<?php echo
JRoute::_('index.php?option=com_jea&view=gateways&layout='
. $action) ?>">
<span class="icon-play"></span> <?php echo
JText::_('COM_JEA_'. strtoupper($action))?></a>
</li>
<li<?php if ($view == 'gateways') echo '
class="active"' ?>>
<a href="<?php echo
JRoute::_('index.php?option=com_jea&view=gateways&filter[type]='
. $action) ?>">
<span class="icon-list"></span> <?php echo
JText::_('COM_JEA_GATEWAYS')?></a>
</li>
</ul>PKZ��[�y���!layouts/jea/gateways/consoles.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/* @var $displayData array */
$action = $displayData['action'];
echo JHtml::_('bootstrap.startTabSet',
'consoles-panel', array('active' =>
'console-ajax'));
echo JHtml::_('bootstrap.addTab', 'consoles-panel',
'console-ajax', JText::_('COM_JEA_'.
strtoupper($action) . '_AJAX'));
echo JLayoutHelper::render('jea.gateways.console.ajax',
$displayData);
echo JHtml::_('bootstrap.endTab');
echo JHtml::_('bootstrap.addTab', 'consoles-panel',
'console-cli', JText::_('COM_JEA_'. strtoupper($action)
. '_CLI'));
echo JLayoutHelper::render('jea.gateways.console.cli',
$displayData);
echo JHtml::_('bootstrap.endTab');
echo JHtml::_('bootstrap.endTabSet');
?>
PKZ��[x�Q Q $layouts/jea/gateways/console/cli.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/* @var $displayData array */
$action = $displayData['action'];
$script = <<<JS
jQuery(document).ready(function($) {
$('#php-interpreter').on('keyup', function(e) {
var text =
$('#cli-command').text().replace(/^[a-zA-Z0-9-_./]+/,
this.value);
$('#cli-command').text(text);
});
$( "#cli-form" ).submit(function(e) {
e.preventDefault();
$('#cli-console').empty();
$('#cli-launch').toggleClass('active');
var token =
$(this).find("input[type='hidden']").attr('name');
var data = {
php_interpreter: $('#php-interpreter').val(),
};
data[''+token] = 1;
$.post($(this).attr('action'), data).done(function(data) {
$('#cli-launch').toggleClass('active');
$("#cli-console").text(data);
});
});
});
JS;
$document = JFactory::getDocument();
$document->addScriptDeclaration($script);
?>
<form action="<?php echo
JRoute::_('index.php?option=com_jea&task=gateways.'. $action)
?>" class="form-horizontal" id="cli-form"
method="post" >
<div class="control-group">
<label for="php-interpreter" class="control-label"
><?php echo JText::_('COM_JEA_FIELD_PHP_INTERPRETER_LABEL')
?></label>
<div class="controls">
<input class="input-small" type="text"
name="php_interpreter" id="php-interpreter"
value="php" />
</div>
</div>
<p><?php echo JText::_('COM_JEA_FIELD_COMMAND_LABEL')
?></p>
<?php if ($action == 'export') :?>
<pre id="cli-command"><?php echo 'php ' .
JPATH_COMPONENT_ADMINISTRATOR . '/cli/gateways.php --export
--basedir="' . JPATH_ROOT . '" --baseurl="' .
JUri::root() . '"' ?></pre>
<?php else: ?>
<pre id="cli-command"><?php echo 'php ' .
JPATH_COMPONENT_ADMINISTRATOR . '/cli/gateways.php --import
--basedir="' . JPATH_ROOT . '"' ?></pre>
<?php endif ?>
<div>
<?php echo JHtml::_('form.token'); ?>
<button type="submit" id="cli-launch"
class="btn btn-success has-spinner">
<span class="spinner"><i class="jea-icon-spin
icon-refresh"></i></span>
<?php echo JText::_('COM_JEA_LAUNCH')?>
</button>
</div>
<pre id="cli-console"
class="console"></pre>
</form>
PKZ��[S2k��%layouts/jea/gateways/console/ajax.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/* @var $displayData array */
require_once JPATH_COMPONENT_ADMINISTRATOR .
'/gateways/dispatcher.php';
JHTML::script('media/com_jea/js/console.js');
JText::script('COM_JEA_GATEWAY_IMPORT_TIME_REMAINING', true);
JText::script('COM_JEA_GATEWAY_IMPORT_TIME_ELAPSED', true);
$action = $displayData['action'];
$dispatcher = GatewaysEventDispatcher::getInstance();
$dispatcher->loadGateways($action);
$dispatcher->trigger('initWebConsole');
$script = <<<JS
function GatewaysActionDispatcher() {
this.queue = []
this.register = function(action) {
this.queue.push(action)
}
this.nextAction = function()
{
if (this.queue.length > 0) {
var nextAction = this.queue.shift()
nextAction()
}
}
}
jQuery(document).ready(function($) {
var dispatcher = new GatewaysActionDispatcher();
$(this).on('gatewayActionDone', function(e) {
$('#console').append($('<br>'));
if (dispatcher.queue.length == 0) {
$('#ajax-launch').toggleClass('active');
} else {
dispatcher.nextAction();
}
});
$('#ajax-launch').on('click', function(e) {
$(this).toggleClass('active');
$('#console').empty();
$(document).trigger('registerGatewayAction',
[$('#console').console(), dispatcher]);
dispatcher.nextAction();
});
});
JS;
$document = JFactory::getDocument();
$document->addScriptDeclaration($script);
?>
<button id="ajax-launch" class="btn btn-success
has-spinner">
<span class="spinner"><i class="jea-icon-spin
icon-refresh"></i></span>
<?php echo JText::_('COM_JEA_'. strtoupper($action) .
'_LAUNCH')?>
</button>
<div id="console" class="console"></div>
PKZ��[��Glayouts/jea/fields/gallery.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/* @var $displayData array */
$uploadNumber = (int) $displayData['uploadNumber'];
$images = $displayData['images'];
$name = $displayData['name'];
JHtml::_('behavior.modal');
JHtml::script('media/com_jea/js/admin/gallery.js');
?>
<p>
<?php for ($i = 0; $i < $uploadNumber; $i ++): ?>
<input type="file" name="newimages[]"
value="" size="30" class="fltnone" />
<br />
<?php endfor?>
</p>
<?php if (!extension_loaded('gd')): // Alert & return if
GD library for PHP is not enabled ?>
<div class="alert alert-warning">
<strong>WARNING: </strong>The <a
href="http://php.net/manual/en/book.image.php"
target="_blank">
GD library for PHP</a> was not found. Ensure to install
it.</div>
<?php return ?>
<?php endif ?>
<ul class="gallery">
<?php foreach ($images as $k => $image): ?>
<li class="item-<?php echo $k ?>">
<?php
if (isset($image->error)){
echo $image->error;
continue;
}
?>
<a href="<?php echo $image->url ?>"
title="Zoom" class="imgLink modal" rel="{handler:
'image'}">
<img src="<?php echo $image->thumbUrl ?>"
alt="<?php echo $image->name ?>" />
</a>
<div class="imgInfos">
<?php echo $image->name ?><br />
<?php echo JText::_('COM_JEA_WIDTH') ?> : <?php echo
$image->width ?> px<br />
<?php echo JText::_('COM_JEA_HEIGHT') ?> : <?php echo
$image->height ?> px<br />
</div>
<div class="imgTools">
<a class="img-move-up" title="<?php echo
JText::_('JLIB_HTML_MOVE_UP') ?>">
<?php echo
JHtml::image('media/com_jea/images/sort_asc.png', "Move
up")?>
</a>
<a class="img-move-down" title="<?php echo
JText::_('JLIB_HTML_MOVE_DOWN') ?>">
<?php echo
JHtml::image('media/com_jea/images/sort_desc.png', "Move
down")?>
</a>
<a class="delete-img" title="<?php echo
JText::_('JACTION_DELETE') ?>">
<?php echo
JHtml::image('media/com_jea/images/media_trash.png',
"Delete")?>
</a>
</div>
<div class="clearfix"></div>
<div class="control-group">
<div class="control-label">
<label for="<?php echo $name . $k ?>title">
<?php echo JText::_('JGLOBAL_TITLE') ?></label>
</div>
<div class="controls">
<input id="<?php echo $name. $k ?>title"
type="text"
name="<?php echo $name?>[<?php echo $k
?>][title]"
value="<?php echo $image->title ?>"
size="20"
/>
</div>
</div>
<div class="control-group">
<div class="control-label">
<label for="<?php echo $name . $k
?>desc"><?php echo JText::_('JGLOBAL_DESCRIPTION')
?></label>
</div>
<div class="controls">
<input id="<?php echo $name. $k ?>desc"
type="text"
name="<?php echo $name?>[<?php echo $k
?>][description]"
value="<?php echo $image->description ?>"
size="40"
/>
<input type="hidden" name="<?php echo
$name?>[<?php echo $k ?>][name]" value="<?php echo
$image->name ?>" />
</div>
</div>
</li>
<?php endforeach?>
</ul>
PKZ��[���zzmodels/gateway.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\File;
require_once JPATH_COMPONENT_ADMINISTRATOR .
'/gateways/dispatcher.php';
/**
* Gateway model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelAdmin
*
* @since 3.4
*/
class JeaModelGateway extends JModelAdmin
{
/**
* Overrides parent method
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data
(default case), false if not.
*
* @return JForm|boolean A JForm object on success, false on failure
*
* @see JModelForm::getForm()
*/
public function getForm($data = array(), $loadData = true)
{
$app = JFactory::getApplication();
$type =
$app->getUserStateFromRequest('com_jea.gateway.type',
'type', '', 'cmd');
// @var $form JForm
$form = $this->loadForm('com_jea.' . $type, $type,
array('control' => 'jform', 'load_data'
=> false));
if (empty($form))
{
return false;
}
$item = $this->getItem($app->input->getInt('id', 0));
// Load gateway params
if ($item->id)
{
$formConfigFile = JPATH_COMPONENT_ADMINISTRATOR .
'/gateways/providers/' . $item->provider . '/' .
$item->type . '.xml';
if (File::exists($formConfigFile))
{
// Try to load provider language file
JFactory::getLanguage()->load($item->provider, JPATH_COMPONENT,
null, false, false);
$gatewayForm = $this->loadForm('com_jea.' . $item->type
. '.' . $item->provider, $formConfigFile,
array('load_data' => false));
$form->load($gatewayForm->getXml());
}
$dispatcher = GatewaysEventDispatcher::getInstance();
$dispatcher->loadGateway($item);
$dispatcher->trigger('onPrepareForm',
array('form' => $form));
$data = $this->loadFormData();
$form->bind($data);
}
return $form;
}
/**
* Overrides parent method
*
* @return array The default data is an empty array.
*
* @see JModelForm::loadFormData()
*/
protected function loadFormData()
{
// Check the session for previously entered form data. See
JControllerForm::save()
$data =
JFactory::getApplication()->getUserState('com_jea.edit.gateway.data',
array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
/**
* Overrides parent method
*
* @param array $data The form data.
*
* @return boolean True on success, False on error.
*
* @see JModelAdmin::save()
*/
public function save($data)
{
if (isset($data['params']) &&
is_array($data['params']))
{
$data['params'] = json_encode($data['params']);
}
return parent::save($data);
}
}
PKZ��[3�\�\\models/gateways.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Gateways model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelList
*
* @since 3.4
*/
class JeaModelGateways extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JModelList
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id',
'title',
'provider',
'published',
'ordering',
);
}
parent::__construct($config);
}
/**
* Overrides parent method
*
* @return JDatabaseQuery A JDatabaseQuery object to retrieve the data
set.
*
* @see JModelList::getListQuery()
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__jea_gateways');
if ($type = $this->state->get('filter.type'))
{
$query->where('type=' . $db->Quote($type));
}
// Add the list ordering clause.
$orderCol = $this->state->get('list.ordering',
'id');
$orderDirn = $this->state->get('list.direction',
'desc');
$query->order($db->escape($orderCol . ' ' . $orderDirn));
return $query;
}
}
PKZ��[IC��((models/featurelist.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Feature list model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelList
*
* @since 2.0
*/
class JeaModelFeaturelist extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JModelList
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'f.id',
'f.value',
'f.ordering',
'l.title',
);
}
parent::__construct($config);
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('feature.name');
$id .= ':' . $this->getState('filter.search');
$filters = $this->getState('feature.filters');
if (is_array($filters) && !empty($filters))
{
foreach ($filters as $filter)
{
$state = $this->getState('filter.' . $filter);
if (!empty($state))
{
$id .= ':' . $state;
}
}
}
return parent::getStoreId($id);
}
/**
* Overrides parent method
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @see JModelList::populateState()
*/
protected function populateState($ordering = 'f.id', $direction
= 'desc')
{
// The active feature
$feature = $this->getUserStateFromRequest($this->context .
'.feature.name', 'feature');
$this->setState('feature.name', $feature);
$search = $this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search');
$this->setState('filter.search', $search);
// Retrieve the feature table params
$xmlPath = JPATH_COMPONENT . '/models/forms/features/';
$xmlFiles = Folder::files($xmlPath);
foreach ($xmlFiles as $filename)
{
$matches = array();
if (preg_match('/^[0-9]{2}-([a-z]*).xml/', $filename,
$matches))
{
if ($feature == $matches[1])
{
$form = simplexml_load_file($xmlPath . '/' . $filename);
$this->setState('feature.form', $form);
$this->setState('feature.table', (string)
$form['table']);
$filterFields =
$form->xpath("/form/fields[@name='filter']");
$filters = array();
if (isset($filterFields[0]) && $filterFields[0] instanceof
SimpleXMLElement)
{
foreach ($filterFields[0]->children() as $filterField)
{
$filter = (string) $filterField['name'];
$filterState = $this->getUserStateFromRequest($this->context .
'.filter.' . $filter, 'filter_' . $filter,
'');
$this->setState('filter.' . $filter, $filterState);
$filters[] = $filter;
$this->filter_fields[] = $filter;
}
}
$this->setState('feature.filters', $filters);
// Check if this feature uses language
$lang =
$form->xpath("//field[@name='language']");
if (!empty($lang))
{
$this->setState('language_enabled', true);
}
break;
}
}
}
parent::populateState($ordering, $direction);
}
/**
* Get the filter form
*
* @param array $data data
* @param boolean $loadData load current data
*
* @return \JForm|boolean The \JForm object or false on error
*
* @since 3.2
*/
public function getFilterForm($data = array(), $loadData = true)
{
$form = parent::getFilterForm($data, $loadData);
if ($form instanceof JForm)
{
$featureForm = $this->getState('feature.form');
if ($featureForm instanceof SimpleXMLElement)
{
$form->load($featureForm);
if ($loadData)
{
$data = $this->loadFormData();
$form->bind($data);
}
}
}
return $form;
}
/**
* Overrides parent method
*
* @return JDatabaseQuery A JDatabaseQuery object to retrieve the data
set.
*
* @see JModelList::getListQuery()
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select('f.*')->from($db->escape($this->getState('feature.table'))
. ' AS f');
// Join over the language
if ($this->getState('language_enabled'))
{
$query->select('l.title AS language_title');
$query->join('LEFT',
$db->quoteName('#__languages') . ' AS l ON l.lang_code =
f.language');
}
if ($filters = $this->getState('feature.filters'))
{
foreach ($filters as $filter)
{
if ($filterState = $this->getState('filter.' . $filter,
''))
{
$query->where('f.' . $filter . ' =' .
$db->Quote($filterState));
}
}
}
// Filter by search
if ($search = $this->getState('filter.search'))
{
$search = $db->Quote('%' . $db->escape($search, true) .
'%');
$query->where('f.value LIKE ' . $search);
}
// Add the list ordering clause.
$orderCol = $this->state->get('list.ordering',
'f.id');
$orderDirn = $this->state->get('list.direction',
'desc');
$query->order($db->escape($orderCol . ' ' . $orderDirn));
return $query;
}
}
PKZ��[|��WWmodels/forms/import.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fields
addfieldpath="/administrator/components/com_jea/models/fields">
<field name="id" type="hidden" />
<field name="title" type="text"
label="JGLOBAL_TITLE" description="JFIELD_TITLE_DESC"
class="input-xxlarge input-large-text" size="40"
required="true" />
<field name="published" type="radio"
label="JSTATUS" description="JFIELD_PUBLISHED_DESC"
class="btn-group" filter="intval" size="1"
default="1">
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
</field>
<field name="provider"
type="gatewayproviderlist"
label="COM_JEA_GATEWAY_FIELD_PROVIDER_LABEL"
provider_type="import" required="true" />
<field name="type" type="hidden"
default="import" />
</fields>
<fields name="params" />
</form>PKZ��[0LMۤ�)models/forms/features/08-hotwatertype.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_hotwatertypes">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_HOTWATERTYPE_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
</fieldset>
<fields name="filter">
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
</form>
PKZ��[uk�S��$models/forms/features/05-amenity.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_amenities">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_AMENITY_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
</fieldset>
<fields name="filter">
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
</form>
PKZ��[�o��!models/forms/features/01-type.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_types">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_PROPERTY_TYPE_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
</fieldset>
<fields name="filter">
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
</form>
PKZ��[�<���#models/forms/features/09-slogan.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_slogans">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_SLOGAN_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
</fieldset>
<fields name="filter">
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
</form>
PKZ��[.G�Z��(models/forms/features/07-heatingtype.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_heatingtypes">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_HEATINGTYPE_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
</fieldset>
<fields name="filter">
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
</form>
PKZ��[M�p!models/forms/features/04-area.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_areas">
<fieldset name="feature"
addfieldpath="/administrator/components/com_jea/models/fields">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_AREA_LABEL"
size="50"
/>
<field
name="town_id"
type="featureList"
subtype="towns"
label="COM_JEA_FIELD_TOWN_LABEL"
class="inputbox"
filter="intval"
/>
<field
name="ordering"
type="hidden"
/>
</fieldset>
<fields name="filter">
<field
name="town_id"
type="featurelist"
noajax="noajax"
subtype="towns"
onchange="this.form.submit();"
/>
</fields>
</form>
PKZ��[Z~Z��&models/forms/features/06-condition.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_conditions">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_CONDITION_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
</fieldset>
<fields name="filter">
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
</form>
PKZ��[��%%!models/forms/features/03-town.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_towns">
<fieldset name="feature"
addfieldpath="/administrator/components/com_jea/models/fields">
<field name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_TOWN_LABEL"
size="50"
/>
<field
name="department_id"
type="featureList"
subtype="departments"
label="COM_JEA_FIELD_DEPARTMENT_LABEL"
filter="intval"
/>
<field
name="ordering"
type="hidden"
/>
</fieldset>
<fields name="filter">
<field
name="department_id"
type="featurelist"
noajax="noajax"
subtype="departments"
onchange="this.form.submit();"
/>
</fields>
</form>
PKZ��[�H����'models/forms/features/02-department.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form table="#__jea_departments">
<fieldset name="feature">
<field
name="id"
type="text"
label="JGLOBAL_FIELD_ID_LABEL"
description ="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="value"
type="text"
label="COM_JEA_FIELD_DEPARTMENT_LABEL"
size="50"
/>
<field
name="ordering"
type="hidden"
/>
</fieldset>
</form>
PKZ��[���models/forms/export.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fields
addfieldpath="/administrator/components/com_jea/models/fields">
<field name="id" type="hidden" />
<field name="title" type="text"
label="JGLOBAL_TITLE" description="JFIELD_TITLE_DESC"
class="input-xxlarge input-large-text" size="40"
required="true" />
<field name="published" type="radio"
label="JSTATUS" description="JFIELD_PUBLISHED_DESC"
class="btn-group" filter="intval" size="1"
default="1">
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
</field>
<field name="provider" type="gatewayproviderlist"
label="COM_JEA_GATEWAY_FIELD_PROVIDER_LABEL"
provider_type="export" required="true" />
<field name="type" type="hidden"
default="export" />
</fields>
<fields name="params" />
</form>PK[��[c���"models/forms/filter_properties.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fields name="filter">
<field
name="search"
type="text"
label="JSEARCH_FILTER_LABEL"
hint="COM_JEA_PROPERTIES_SEARCH_FILTER_DESC"
/>
<field
name="transaction_type"
type="list"
label="COM_JEA_FIELD_TRANSACTION_TYPE_LABEL"
onchange="this.form.submit();"
>
<option
value="">COM_JEA_FIELD_TRANSACTION_TYPE_LABEL</option>
<option
value="RENTING">COM_JEA_OPTION_RENTING</option>
<option
value="SELLING">COM_JEA_OPTION_SELLING</option>
</field>
<field
name="type_id"
type="featurelist"
subtype="types"
onchange="this.form.submit();"
/>
<field
name="department_id"
type="featurelist"
noajax="noajax"
subtype="departments"
onchange="this.form.submit();"
/>
<field
name="town_id"
type="featurelist"
noajax="noajax"
subtype="towns"
onchange="this.form.submit();"
/>
<field
name="language"
type="contentlanguage"
label="JOPTION_FILTER_LANGUAGE"
description="JOPTION_FILTER_LANGUAGE_DESC"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_LANGUAGE</option>
<option value="*">JALL</option>
</field>
</fields>
<fields name="list">
<field
name="limit"
type="limitbox"
class="input-mini"
default="25"
label="COM_CONTENT_LIST_LIMIT"
description="COM_CONTENT_LIST_LIMIT_DESC"
onchange="this.form.submit();"
/>
</fields>
</form>PK[��[݅��#models/forms/filter_featurelist.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fields name="filter">
<field
name="search"
type="text"
label="JSEARCH_FILTER_LABEL"
/>
</fields>
<fields name="list">
<field
name="limit"
type="limitbox"
class="input-mini"
default="25"
label="COM_CONTENT_LIST_LIMIT"
description="COM_CONTENT_LIST_LIMIT_DESC"
onchange="this.form.submit();"
/>
</fields>
</form>PK[��[�/�=models/forms/gateway.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fields
addfieldpath="/administrator/components/com_jea/models/fields">
<field name="id" type="hidden" />
<field name="title" type="text"
label="JGLOBAL_TITLE" description="JFIELD_TITLE_DESC"
class="input-xxlarge input-large-text" size="40"
required="true" />
<field name="published" type="radio"
label="JSTATUS" description="JFIELD_PUBLISHED_DESC"
class="btn-group" filter="intval" size="1"
default="1">
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
</field>
<field name="provider" type="gatewayproviderlist"
label="COM_JEA_GATEWAY_FIELD_PROVIDER_LABEL"
provider_type="" required="true" />
<field name="type" type="hidden" />
</fields>
<fields name="params" />
</form>PK[��[��L��models/forms/import-jea.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fieldset name="params">
<field name="jea_version" type="list"
default="1.x" label="COM_JEA_FIELD_JEA_VERSION_LABEL"
description="COM_JEA_FIELD_JEA_VERSION_DESC" >
<option value="1.x">1.x</option>
<option value="2.x">2.x</option>
</field>
<field name="joomla_path" type="text"
default="" label="COM_JEA_FIELD_JOOMLA_PATH_LABEL"
description="COM_JEA_FIELD_JOOMLA_PATH_DESC"
class="inputbox" size="60" />
</fieldset>
</form>
PK[��[�uC)!!models/forms/property.xmlnu�[���<?xml
version="1.0" encoding="UTF-8"?>
<form>
<fieldset
addfieldpath="/administrator/components/com_jea/models/fields">
<field
name="asset_id"
type="hidden"
filter="unset"
/>
<field
name="ref"
type="text"
label="COM_JEA_FIELD_REF_LABEL"
description="COM_JEA_FIELD_REF_DESC"
size="10"
/>
<field
name="title"
type="text"
label="JGLOBAL_TITLE"
description="JFIELD_TITLE_DESC"
class="input-xxlarge input-large-text"
size="40"
/>
<field
name="alias"
type="text"
label="JFIELD_ALIAS_LABEL"
description="JFIELD_ALIAS_DESC"
hint="JFIELD_ALIAS_PLACEHOLDER"
size="40"
/>
<field
name="transaction_type"
type="list"
label="COM_JEA_FIELD_TRANSACTION_TYPE_LABEL"
required="true"
>
<option
value="SELLING">COM_JEA_OPTION_SELLING</option>
<option
value="RENTING">COM_JEA_OPTION_RENTING</option>
</field>
<field
name="type_id"
type="featureList"
subtype="types"
label="COM_JEA_FIELD_PROPERTY_TYPE_LABEL"
required="true"
filter="intval"
/>
<field
name="amenities"
type="amenities"
class="amenity"
/>
<field
name="images"
type="gallery"
/>
<field
name="description"
type="editor"
label="JGLOBAL_DESCRIPTION"
filter="JComponentHelper::filterText"
buttons="true"
/>
<field
name="published"
type="list"
label="JSTATUS"
description="JFIELD_PUBLISHED_DESC"
filter="intval"
size="1"
default="1"
class="chzn-color-state"
>
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
</field>
<field
name="access"
type="accesslevel"
label="JFIELD_ACCESS_LABEL"
description="JFIELD_ACCESS_DESC"
size="1"
/>
<field
name="language"
type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL"
description="COM_JEA_FIELD_LANGUAGE_DESC"
>
<option value="*">JALL</option>
</field>
<field
name="featured"
type="radio"
label="JFEATURED"
description="COM_JEA_FIELD_FEATURED_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="slogan_id"
type="featureList"
subtype="slogans"
label="COM_JEA_FIELD_SLOGAN_LABEL"
filter="intval"
/>
<field
name="rules"
type="rules"
label="JFIELD_RULES_LABEL"
translate_label="false"
filter="rules"
component="com_jea"
section="property"
validate="rules"
/>
<field
name="notes"
type="textarea"
label="COM_JEA_FIELD_NOTES_LABEL"
description="COM_JEA_FIELD_NOTES_DESC"
rows="8"
cols="45"
/>
</fieldset>
<fieldset name="localization">
<field
name="address"
type="text"
label="COM_JEA_FIELD_ADDRESS_LABEL"
size="70"
/>
<field
name="zip_code"
type="text"
label="COM_JEA_FIELD_ZIP_CODE_LABEL"
size="5"
/>
<field
name="department_id"
type="featureList"
subtype="departments"
label="COM_JEA_FIELD_DEPARTMENT_LABEL"
filter="intval"
/>
<field
name="town_id"
type="featureList"
subtype="towns"
label="COM_JEA_FIELD_TOWN_LABEL"
filter="intval"
/>
<field
name="area_id"
type="featureList"
subtype="areas"
label="COM_JEA_FIELD_AREA_LABEL"
filter="intval"
/>
<field
name="latitude"
type="text"
label="COM_JEA_FIELD_LATITUDE_LABEL"
class="numberbox"
size="25"
/>
<field
name="longitude"
type="text"
label="COM_JEA_FIELD_LONGITUDE_LABEL"
class="numberbox"
size="25"
/>
<field
name="geolocalization"
type="geolocalization"
label="COM_JEA_FIELD_GEOLOCALIZATION_LABEL"
/>
</fieldset>
<fieldset name="publication">
<field
name="id"
type="text"
class="readonly"
label="JGLOBAL_FIELD_ID_LABEL"
description="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0"
readonly="true"
/>
<field
name="hits"
type="text"
label="JGLOBAL_HITS"
description="COM_JEA_FIELD_HITS_DESC"
class="readonly"
size="6"
readonly="true"
filter="unset"
/>
<field
name="created"
type="calendar"
label="JGLOBAL_FIELD_CREATED_LABEL"
size="22"
format="%Y-%m-%d %H:%M:%S"
filter="user_utc"
/>
<field
name="modified"
type="calendar"
label="JGLOBAL_FIELD_MODIFIED_LABEL"
size="22"
format="%Y-%m-%d %H:%M:%S"
filter="user_utc"
/>
<field
name="publish_up"
type="calendar"
label="COM_JEA_FIELD_PUBLISH_UP_LABEL"
description="COM_JEA_FIELD_PUBLISH_UP_DESC"
format="%Y-%m-%d %H:%M:%S"
size="22"
filter="user_utc"
/>
<field
name="publish_down"
type="calendar"
label="COM_JEA_FIELD_PUBLISH_DOWN_LABEL"
description="COM_JEA_FIELD_PUBLISH_DOWN_DESC"
format="%Y-%m-%d %H:%M:%S"
size="22"
filter="user_utc"
/>
<field
name="created_by"
type="user"
label="JGLOBAL_FIELD_CREATED_BY_LABEL"
description="COM_JEA_FIELD_CREATED_BY_DESC"
/>
</fieldset>
<fieldset name="financial_informations"
addfieldpath="/administrator/components/com_jea/models/fields">
<field
name="price"
type="price"
label="COM_JEA_FIELD_PRICE_LABEL"
class="numberbox"
size="10"
/>
<field
name="rate_frequency"
type="list"
label="COM_JEA_FIELD_RATE_FREQUENCY_LABEL"
>
<option
value="MONTHLY">COM_JEA_OPTION_MONTHLY</option>
<option
value="WEEKLY">COM_JEA_OPTION_WEEKLY</option>
<option
value="DAILY">COM_JEA_OPTION_DAILY</option>
</field>
<field
name="charges"
type="price"
label="COM_JEA_FIELD_CHARGES_LABEL"
class="numberbox"
size="10"
/>
<field
name="fees"
type="price"
label="COM_JEA_FIELD_FEES_LABEL"
class="numberbox"
size="10"
/>
<field
name="deposit"
type="price"
label="COM_JEA_FIELD_DEPOSIT_LABEL"
class="numberbox"
size="10"
/>
</fieldset>
<fieldset name="details"
addfieldpath="/administrator/components/com_jea/models/fields">
<field
name="living_space"
type="surface"
label="COM_JEA_FIELD_LIVING_SPACE_LABEL"
class="numberbox"
filter="floatval"
size="7"
/>
<field
name="land_space"
type="surface"
label="COM_JEA_FIELD_LAND_SPACE_LABEL"
class="numberbox"
filter="floatval"
size="7"
/>
<field
name="availability"
type="calendar"
label="COM_JEA_FIELD_PROPERTY_AVAILABILITY_LABEL"
size="11"
format="%Y-%m-%d"
filter="user_utc"
/>
<field
name="condition_id"
type="featureList"
subtype="conditions"
label="COM_JEA_FIELD_CONDITION_LABEL"
filter="intval"
/>
<field
name="orientation"
type="list"
label="COM_JEA_FIELD_ORIENTATION_LABEL"
>
<option value="0">JOPTION_DO_NOT_USE</option>
<option value="N">COM_JEA_OPTION_NORTH</option>
<option
value="NW">COM_JEA_OPTION_NORTH_WEST</option>
<option
value="NE">COM_JEA_OPTION_NORTH_EAST</option>
<option
value="NS">COM_JEA_OPTION_NORTH_SOUTH</option>
<option value="E">COM_JEA_OPTION_EAST</option>
<option
value="EW">COM_JEA_OPTION_EAST_WEST</option>
<option value="W">COM_JEA_OPTION_WEST</option>
<option value="S">COM_JEA_OPTION_SOUTH</option>
<option
value="SW">COM_JEA_OPTION_SOUTH_WEST</option>
<option
value="SE">COM_JEA_OPTION_SOUTH_EAST</option>
</field>
<field
name="floor"
type="number"
label="COM_JEA_FIELD_FLOOR_LABEL"
class="numberbox"
filter="floatval"
size="3"
/>
<field
name="floors_number"
type="number"
label="COM_JEA_FIELD_FLOORS_NUMBER_LABEL"
class="numberbox"
filter="floatval"
size="3"
/>
<field
name="rooms"
type="number"
label="COM_JEA_FIELD_NUMBER_OF_ROOMS_LABEL"
class="numberbox"
filter="floatval"
size="3"
/>
<field
name="bedrooms"
type="number"
label="COM_JEA_FIELD_NUMBER_OF_BEDROOMS_LABEL"
class="numberbox"
filter="intval"
size="3"
/>
<field
name="bathrooms"
type="number"
label="COM_JEA_FIELD_NUMBER_OF_BATHROOMS_LABEL"
class="numberbox"
filter="floatval"
size="3"
/>
<field
name="toilets"
type="number"
label="COM_JEA_FIELD_NUMBER_OF_TOILETS_LABEL"
class="numberbox"
filter="intval"
size="3"
/>
<field
name="hot_water_type"
type="featureList"
subtype="hotwatertypes"
label="COM_JEA_FIELD_HOTWATERTYPE_LABEL"
filter="intval"
/>
<field
name="heating_type"
type="featureList"
subtype="heatingtypes"
label="COM_JEA_FIELD_HEATINGTYPE_LABEL"
filter="intval"
/>
</fieldset>
</form>
PK[��[2���models/properties.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelList
*
* @since 2.0
*/
class JeaModelProperties extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JModelList
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'p.id',
'p.ordering',
'p.price',
'p.featured',
'p.published',
'access_level',
'author',
'p.created',
'p.hits',
'language',
'search',
'transaction_type',
'type_id',
'department_id',
'town_id',
'language'
);
}
parent::__construct($config);
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('filter.search');
$id .= ':' .
$this->getState('filter.transaction_type');
$id .= ':' .
$this->getState('filter.department_id');
$id .= ':' . $this->getState('filter.town_id');
$id .= ':' . $this->getState('filter.language');
return parent::getStoreId($id);
}
/**
* Overrides parent method
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @see JModelList::populateState()
*/
protected function populateState($ordering = 'p.id', $direction
= 'desc')
{
$transaction_type = $this->getUserStateFromRequest($this->context .
'.filter.transaction_type', 'filter_transaction_type');
$this->setState('filter.transaction_type',
$transaction_type);
$search = $this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search');
$this->setState('filter.search', $search);
$type_id = $this->getUserStateFromRequest($this->context .
'.filter.type_id', 'filter_type_id');
$this->setState('filter.type_id', $type_id);
$department_id = $this->getUserStateFromRequest($this->context .
'.filter.department_id', 'filter_department_id');
$this->setState('filter.department_id', $department_id);
$town_id = $this->getUserStateFromRequest($this->context .
'.filter.town_id', 'filter_town_id');
$this->setState('filter.town_id', $town_id);
$language = $this->getUserStateFromRequest($this->context .
'.filter.language', 'filter_language', '');
$this->setState('filter.language', $language);
parent::populateState($ordering, $direction);
}
/**
* Overrides parent method
*
* @return JDatabaseQuery A JDatabaseQuery object to retrieve the data
set.
*
* @see JModelList::getListQuery()
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
$dispatcher = JDispatcher::getInstance();
// Include the jea plugins for the onBeforeSearchQuery event.
JPluginHelper::importPlugin('jea');
$query->select(
'p.id, p.ref, p.transaction_type, p.address, p.price,
p.rate_frequency, p.created,
p.featured, p.published, p.publish_up, p.publish_down,
p.access, p.ordering, p.checked_out, p.checked_out_time,
p.created_by, p.hits, p.language '
);
$query->from('#__jea_properties AS p');
// Join viewlevels
$query->select('al.title AS access_level');
$query->join('LEFT', '#__viewlevels AS al ON al.id =
p.access');
// Join departments
$query->select('d.value AS `department`');
$query->join('LEFT', '#__jea_departments AS d ON d.id =
p.department_id');
// Join properties types
$query->select('t.value AS `type`');
$query->join('LEFT', '#__jea_types AS t ON t.id =
p.type_id');
// Join towns
$query->select('town.value AS `town`');
$query->join('LEFT', '#__jea_towns AS town ON town.id =
p.town_id');
// Join users
$query->select('u.username AS `author`');
$query->join('LEFT', '#__users AS u ON u.id =
p.created_by');
// Join over the language
$query->select('l.title AS language_title');
$query->join('LEFT',
$db->quoteName('#__languages') . ' AS l ON l.lang_code =
p.language');
// Filter by transaction type
if ($transactionType =
$this->getState('filter.transaction_type'))
{
$query->where('p.transaction_type =' .
$db->Quote($db->escape($transactionType)));
}
// Filter by property type
if ($typeId = $this->getState('filter.type_id'))
{
$query->where('p.type_id =' . (int) $typeId);
}
// Filter by departments
if ($departmentId = $this->getState('filter.department_id'))
{
$query->where('p.department_id =' . (int) $departmentId);
}
// Filter by town
if ($townId = $this->getState('filter.town_id'))
{
$query->where('p.town_id =' . (int) $townId);
}
// Filter by search
if ($search = $this->getState('filter.search'))
{
$search = $db->Quote('%' . $db->escape($search, true) .
'%');
$search = '(p.ref LIKE ' . $search . ' OR p.title LIKE
' . $search . ' OR p.id LIKE ' . $search . ' OR
u.username LIKE ' . $search . ')';
$query->where($search);
}
// Filter by language.
if ($language = $this->getState('filter.language'))
{
$query->where('p.language = ' . $db->quote($language));
}
// Add the list ordering clause.
$orderCol = $this->state->get('list.ordering',
'p.id');
$orderDirn = $this->state->get('list.direction',
'desc');
// If language order selected order by languagetable title
if ($orderCol == 'language')
{
$orderCol = 'l.title';
}
$query->order($db->escape($orderCol . ' ' . $orderDirn));
$dispatcher->trigger('onBeforeSearch', array(&$query,
&$this->state));
return $query;
}
}
PK[��[�-+�
�
models/feature.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
require_once JPATH_COMPONENT . '/tables/features.php';
/**
* Feature model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelAdmin
*
* @since 2.0
*/
class JeaModelFeature extends JModelAdmin
{
/**
* Overrides parent method
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data
(default case), false if not.
*
* @return JForm|boolean A JForm object on success, false on failure
*
* @see JModelForm::getForm()
*/
public function getForm($data = array(), $loadData = true)
{
$feature = $this->getState('feature.name');
$formFile = $this->getState('feature.form');
$form = $this->loadForm('com_jea.feature.' . $feature,
$formFile, array('control' => 'jform',
'load_data' => $loadData));
$form->setFieldAttribute('ordering', 'filter',
'unset');
if (empty($form))
{
return false;
}
return $form;
}
/**
* Overrides parent method.
*
* @return void
*
* @see JModelAdmin::populateState()
*/
public function populateState()
{
/*
* Be careful to not call parent::populateState() because this will cause
an
* infinite call of this method in JeaModelFeature::getTable()
*/
$input = JFactory::getApplication()->input;
$feature = $input->getCmd('feature');
$this->setState('feature.name', $feature);
// Retrieve the feature table params
$xmlPath = JPATH_COMPONENT . '/models/forms/features/';
$xmlFiles = Folder::files($xmlPath);
foreach ($xmlFiles as $filename)
{
$matches = array();
if (preg_match('/^[0-9]{2}-([a-z]*).xml/', $filename,
$matches))
{
if ($feature == $matches[1])
{
$form = simplexml_load_file($xmlPath . '/' . $filename);
$this->setState('feature.table', (string)
$form['table']);
$this->setState('feature.form', $xmlPath . $filename);
}
}
}
// Get the pk of the record from the request.
$pk = $input->getInt('id');
$this->setState($this->getName() . '.id', $pk);
}
/**
* Overrides parent method
*
* @return array The default data is an empty array.
*
* @see JModelForm::loadFormData()
*/
protected function loadFormData()
{
// Check the session for previously entered form data. See
JControllerForm::save()
$data =
JFactory::getApplication()->getUserState('com_jea.edit.feature.data',
array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
/**
* Overrides parent method
*
* @param string $name The table name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $options Configuration array for model. Optional.
*
* @return JTable A JTable object
*
* @see JModel::getTable()
*/
public function getTable($name = '', $prefix =
'Table', $options = array())
{
static $table;
if ($table === null)
{
$tableName = $this->getState('feature.table');
$db = JFactory::getDbo();
$table = new FeaturesFactory($db->escape($tableName), 'id',
$db);
}
return $table;
}
}
PK[��[�ix��
�
models/features.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
require JPATH_COMPONENT_ADMINISTRATOR . '/tables/features.php';
/**
* Features model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelLegacy
*
* @since 2.0
*/
class JeaModelFeatures extends JModelLegacy
{
/**
* Get the list of features
*
* @return array of stdClass objects
*/
public function getItems()
{
$xmlPath = JPATH_COMPONENT_ADMINISTRATOR .
'/models/forms/features';
$xmlFiles = Folder::files($xmlPath);
$items = array();
foreach ($xmlFiles as $key => $filename)
{
$matches = array();
if (preg_match('/^[0-9]{2}-([a-z]*).xml/', $filename,
$matches))
{
$form = simplexml_load_file($xmlPath . '/' . $filename);
// Generate object
$feature = new stdClass;
$feature->id = $key;
$feature->name = $matches[1];
$feature->table = (string) $form['table'];
$feature->language = false;
// Check if this feature uses language
$lang =
$form->xpath("//field[@name='language']");
if (! empty($lang))
{
$feature->language = true;
}
$items[$feature->name] = $feature;
}
}
return $items;
}
/**
* Return table data as CSV string
*
* @param string $tableName The name of the feature table
*
* @return string CSV formatted
*/
public function getCSVData($tableName = '')
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')->from($db->escape($tableName));
$db->setQuery($query);
$rows = $db->loadRowList();
$csv = '';
foreach ($rows as $row)
{
$csv .= JeaHelperUtility::arrayToCSV($row);
}
return $csv;
}
/**
* Import rows from CSV file and return the number of inserted rows
*
* @param string $file The file path
* @param string $tableName The feature table name to insert csv data
*
* @return integer The number of inserted rows
*/
public function importFromCSV($file = '', $tableName =
'')
{
$row = 0;
if (($handle = fopen($file, 'r')) !== false)
{
$db = JFactory::getDbo();
$tableName = $db->escape($tableName);
$table = new FeaturesFactory($tableName, 'id', $db);
$cols = array_keys($table->getProperties());
$query = $db->getQuery(true);
$query->select('*')->from($tableName);
$db->setQuery($query);
$ids = $db->loadObjectList('id');
$query->clear();
$query->select('ordering')
->from($tableName)
->order('ordering DESC');
$db->setQuery($query);
$maxOrdering = $db->loadResult();
if ($maxOrdering == null)
{
$maxOrdering = 1;
}
while (($data = fgetcsv($handle, 1000, ';',
'"')) !== false)
{
$num = count($data);
$bind = array();
for ($c = 0; $c < $num; $c ++)
{
if (isset($cols[$c]))
{
$bind[$cols[$c]] = $data[$c];
}
}
if (isset($bind['id']) &&
isset($ids[$bind['id']]))
{
// Load row to update
$table->load((int) $bind['id']);
}
elseif (isset($bind['ordering']))
{
$bind['ordering'] = $maxOrdering;
$maxOrdering ++;
}
$table->save($bind, '', 'id');
// To force new insertion
$table->id = null;
$row ++;
}
}
return $row;
}
}
PK[��[�V��models/fields/price.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
/**
* Form Field class for JEA.
* Provides a one line text field with currency symbol
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormFieldText
*
* @since 2.0
*/
class JFormFieldPrice extends JFormFieldText
{
/**
* The form field type.
*
* @var string
*/
protected $type = 'Price';
/**
* Method to change the label
*
* @param string $label The field label
*
* @return void
*/
public function setLabel($label = '')
{
$this->label = $label;
}
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*/
protected function getInput()
{
$input = parent::getInput();
$params = JComponentHelper::getParams('com_jea');
$symbol_place = $params->get('symbol_place', 1);
$currency_symbol = $params->get('currency_symbol',
'€');
if ($symbol_place == 0)
{
return '<span class="input-prefix">' .
$currency_symbol . '</span> ' . $input;
}
return $input . ' <span class="input-suffix">'
. $currency_symbol . '</span>';
}
}
PK[��[�2���models/fields/featurelist.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
/**
* Form Field class for JEA.
* Provides a list of features
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormField
*
* @since 2.0
*/
class JFormFieldFeatureList extends JFormField
{
/**
* The form field type.
*
* @var string
*/
public $type = 'featureList';
/**
* Method to get the list of features.
*
* @return string The field input markup.
*
* @see JHtmlFeatures
*/
protected function getInput()
{
JHtml::addIncludePath(JPATH_ADMINISTRATOR .
'/components/com_jea/helpers/html');
$subtype = (string) $this->element['subtype'];
$params = array(
'id' => $this->id,
'class' => (string) $this->element['class']
);
if (isset($this->element['size']))
{
$params['size'] = (string)
$this->element['size'];
}
if (isset($this->element['multiple']))
{
$params['multiple'] = (string)
$this->element['multiple'];
}
if (isset($this->element['onchange']))
{
$params['onchange'] = (string)
$this->element['onchange'];
}
$group = null;
switch ($this->form->getName())
{
case 'com_menus.item':
$group = 'params';
break;
case 'com_jea.properties.filter':
case 'com_jea.featurelist.filter':
$group = 'filter';
break;
}
// Verify if some fields have relashionship
$hasRelationShip = $this->_hasRelationShip();
switch ($subtype)
{
case 'departments':
if ($hasRelationShip)
{
$this->_ajaxUpdateList('department_id',
'town_id', 'get_towns');
}
break;
case 'towns':
if ($hasRelationShip)
{
$this->_ajaxUpdateList('town_id', 'area_id',
'get_areas');
return JHtml::_('features.towns', $this->value,
$this->name, $params,
$this->form->getValue('department_id', $group, null));
}
case 'areas':
if ($hasRelationShip)
{
return JHtml::_('features.areas', $this->value,
$this->name, $params, $this->form->getValue('town_id',
$group, null));
}
}
return JHtml::_('features.' . $subtype, $this->value,
$this->name, $params);
}
/**
* Verify relationship component parameter
*
* @return boolean
*/
private function _hasRelationShip()
{
if (isset($this->element['norelation']))
{
return false;
}
$params = JComponentHelper::getParams('com_jea');
return (bool) $params->get('relationship_dpts_towns_area',
1);
}
/**
* Add AJAX behavior
*
* @param string $fromId The Element ID where the event come from
* @param string $toId The target Element ID
* @param string $task The AJAX controller task
*
* @return void
*/
private function _ajaxUpdateList($fromId, $toId, $task)
{
if (isset($this->element['noajax']))
{
return;
}
if ($this->form->getName() == 'com_menus.item')
{
$fieldTo = $this->form->getField('filter_' . $toId,
'params');
}
else
{
$fieldTo = $this->form->getField($toId);
}
if (! empty($fieldTo->id))
{
JFactory::getDocument()->addScriptDeclaration(
"
jQuery(document).ready(function($) {
$('#{$this->id}').change(function(e) {
$.ajax({
dataType: 'json',
url: 'index.php',
data:
'option=com_jea&format=json&task=features.{$task}&{$fromId}='
+ this.value,
success: function(response) {
var first = $('#{$fieldTo->id} option').first().clone();
$('#{$fieldTo->id}').empty().append(first);
if (response.length) {
$.each(response, function( idx, item ){
$('#{$fieldTo->id}').append($('<option></option>').text(item.value).attr('value',
item.id));
});
}
$('#{$fieldTo->id}').trigger('liszt:updated.chosen');
// Update jQuery choosen
}
});
});
});
"
);
}
}
}
PK[��[�ip�
�
models/fields/gallery.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
use Joomla\CMS\Image\Image;
/**
* Form Field class for JEA.
* Provides a complete widget to manage a gallery
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormField
*
* @since 2.0
*/
class JFormFieldGallery extends JFormField
{
/**
* The form field type.
*
* @var string
*/
protected $type = 'Gallery';
/**
* Method to get the list of input[type="file"]
*
* @return string The field input markup.
*/
protected function getInput()
{
$params = JComponentHelper::getParams('com_jea');
if (is_string($this->value))
{
$images = (array) json_decode($this->value);
}
else
{
$images = (array) $this->value;
foreach ($images as $k => $image)
{
$images[$k] = (object) $image;
}
}
$propertyId = $this->form->getValue('id');
$baseURL = JUri::root(true);
$imgBaseURL = $baseURL . '/images/com_jea/images/' .
$propertyId;
$imgBasePath = JPATH_ROOT . '/images/com_jea/images/' .
$propertyId;
foreach ($images as $k => &$image)
{
$imgPath = $imgBasePath . '/' . $image->name;
try
{
$infos = Image::getImageFileProperties($imgPath);
}
catch (Exception $e)
{
$image->error = 'Recorded Image ' . $image->name .
' cannot be accessed';
continue;
}
$thumbName = 'thumb-admin-' . $image->name;
// Create the thumbnail
if (!file_exists($imgBasePath . '/' . $thumbName))
{
try
{
// This is where the JImage will be used, so only create it here
$JImage = new JImage($imgPath);
$thumb = $JImage->resize(150, 90);
$thumb->crop(150, 90, 0, 0);
$thumb->toFile($imgBasePath . '/' . $thumbName);
// To avoid memory overconsumption, destroy the JImage. We don't
need it anymore
$JImage->destroy();
$thumb->destroy();
}
catch (Exception $e)
{
$image->error = 'Thumbnail for ' . $image->name .
' cannot be generated';
continue;
}
}
$image->thumbUrl = $imgBaseURL . '/' . $thumbName;
$image->url = $imgBaseURL . '/' . $image->name;
// Kbytes
$image->weight = round($infos->bits / 1024, 1);
$image->height = $infos->height;
$image->width = $infos->width;
}
$layoutModel = array (
'uploadNumber' =>
$params->get('img_upload_number', 3),
'images' => $images,
'name' => $this->name,
);
return JLayoutHelper::render('jea.fields.gallery',
$layoutModel);
}
}
PK[��[1�\&� � models/fields/amenities.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
/**
* Form Field class for JEA.
* Displays amenities as a list of check boxes.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormField
*
* @since 2.0
*/
class JFormFieldAmenities extends JFormField
{
/**
* The form field type.
*
* @var string
*/
protected $type = 'Amenities';
/**
* Flag to tell the field to always be in multiple values mode.
*
* @var boolean
*/
protected $forceMultiple = true;
/**
* Method to get the field input markup for check boxes.
*
* @return string The field input markup.
*/
protected function getInput()
{
$options = $this->getOptions();
$output = '<ul id="amenities">';
if (! empty($this->value))
{
// Preformat data if comes from db
if (! is_array($this->value))
{
$this->value = explode('-', $this->value);
}
}
else
{
$this->value = array();
}
foreach ($options as $k => $row)
{
$checked = '';
$class = '';
if (in_array($row->id, $this->value))
{
$checked = 'checked="checked"';
$class = 'active';
}
$title = '';
$label = JHtml::_('string.truncate', $row->value, 23,
false, false);
if ($row->value != $label)
{
$title = ' title="' . $row->value .
'"';
}
$output .= '<li class="amenity ' . $class .
'">';
$output .= '<input class="am-input"
type="checkbox" name="' . $this->name .
'"'
. ' id="' . $this->id . $k . '"
value="' . $row->id . '" ' . $checked . '
/>'
. '<label class="am-title" for="' .
$this->id . $k . '" ' . $title . '>' .
$label . '</label>';
$output .= '</li>';
}
$output .= '</ul>';
return $output;
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*/
protected function getOptions()
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('f.id , f.value');
$query->from('#__jea_amenities AS f');
if (JFactory::getApplication()->isClient('site'))
{
$query->where('f.language in (' .
$db->quote(JFactory::getLanguage()->getTag()) . ',' .
$db->quote('*') . ')');
}
$query->order('f.value ASC');
$db->setQuery($query);
return $db->loadObjectList();
}
}
PK[��[��+33models/fields/surface.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
/**
* Form Field class for JEA.
* Provides a one line text field with the surface symbol
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormFieldText
*
* @since 2.0
*/
class JFormFieldSurface extends JFormFieldText
{
/**
* The form field type.
*
* @var string
*/
protected $type = 'Surface';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*/
protected function getInput()
{
$input = parent::getInput();
$params = JComponentHelper::getParams('com_jea');
$surface_measure = $params->get('surface_measure',
'm²');
return $input . ' <span class="input-suffix">'
. $surface_measure . '</span>';
}
}
PK[��[>Y�MM%models/fields/gatewayproviderlist.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
use Joomla\CMS\Filesystem\Folder;
JFormHelper::loadFieldClass('list');
/**
* Supports an HTML select list of gateway providers
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormFieldList
*
* @since 2.0
*/
class JFormFieldGatewayProviderList extends JFormFieldList
{
/**
* The form field type.
*
* @var string
*/
protected $type = 'GatewayProviderList';
/**
* The provider type (import or export).
*
* @var string
*/
protected $providerType = '';
/**
* Overrides parent method.
*
* @param string $name The property name for which to the the value.
*
* @return mixed The property value or null.
*
* @see JFormField::__get()
*/
public function __get($name)
{
if ($name == 'providerType')
{
return $this->$name;
}
return parent::__get($name);
}
/**
* Overrides parent method.
*
* @param string $name The property name for which to the the value.
* @param mixed $value The value of the property.
*
* @return void
*
* @see JFormField::__set()
*/
public function __set($name, $value)
{
if ($name == 'providerType')
{
$this->$name = (string) $value;
}
parent::__set($name, $value);
}
/**
* Overrides parent method.
*
* @param SimpleXMLElement $element The SimpleXMLElement object
representing the `<field>` tag for the form field object.
* @param mixed $value The form field value to validate.
* @param string $group The field name group control
value.
*
* @return boolean True on success.
*
* @see JFormField::setup()
*/
public function setup(SimpleXMLElement $element, $value, $group = null)
{
$return = parent::setup($element, $value, $group);
if ($return)
{
$this->providerType = (string)
$this->element['provider_type'];
}
return $return;
}
/**
* Overrides parent method.
*
* @return array The field option objects.
*
* @see JFormFieldList::getOptions()
*/
protected function getOptions()
{
$options = array();
$path = JPATH_ADMINISTRATOR .
'/components/com_jea/gateways/providers';
$folders = Folder::folders($path);
$options[] = JHtml::_('select.option', '',
JText::alt('JOPTION_DO_NOT_USE',
preg_replace('/[^a-zA-Z0-9_\-]/', '_',
$this->fieldname)));
foreach ($folders as $folder)
{
if (file_exists($path . '/' . $folder . '/' .
$this->providerType . '.xml'))
{
$options[] = JHtml::_('select.option', $folder, $folder);
}
}
return $options;
}
}
PK[��[�����!models/fields/geolocalization.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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('JPATH_PLATFORM') or die;
/**
* Form Field class for JEA.
* Displays button to geolocalize coordinates with a map.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JFormField
*
* @since 2.0
*/
class JFormFieldGeolocalization extends JFormField
{
/**
* The form field type.
*
* @var string
*
*/
protected $type = 'Geolocalization';
/**
* Method to get the button to geolocalize coordinates with a map.
*
* @return string The field input markup.
*/
protected function getInput()
{
$params = JComponentHelper::getParams('com_jea');
$ouptut = '';
// TODO : use JLayout
$ouptut = '<div class="button2-left">' .
"\n" .
'<div class="blank"><a class="modal btn
btn-info" href="#map-box-content"' .
' rel="{handler: \'clone\', size: {x: 800, y: 500},
onOpen:initBoxContent, onClose:closeBoxContent }">' .
JText::_('COM_JEA_MAP_OPEN') .
'</a></div>' . "\n" .
'</div>' . "\n" .
'<div id="map-box-content"
class="map-box-content" style="display:none">'
. "\n" . JText::_('COM_JEA_FIELD_LATITUDE_LABEL') .
' : <input type="text" readonly="readonly"
class="readonly input-latitude" value="" />' .
JText::_('COM_JEA_FIELD_LONGITUDE_LABEL') .
' : <input type="text" readonly="readonly"
class="readonly input-longitude" value="" />' .
'<div class="map-box-container" style="width:
100%; height: 480px"></div>' . "\n" .
'</div>' . "\n";
// Load the modal behavior script.
JHtml::_('behavior.modal');
$document = JFactory::getDocument();
$langs = explode('-', $document->getLanguage());
$lang = $langs[0];
$region = $langs[1];
$fieldDepartment =
$this->form->getField('department_id');
$fieldTown = $this->form->getField('town_id');
$fieldAddress = $this->form->getField('address');
$fieldLongitude = $this->form->getField('longitude');
$fieldLatitude = $this->form->getField('latitude');
$markerLabel =
addslashes(JText::_('COM_JEA_MAP_MARKER_LABEL'));
JFactory::getDocument()->addScriptDeclaration(
"
function initBoxContent(elementContent) {
var latitude =
document.id('{$fieldLatitude->id}').value;
var longitude =
document.id('{$fieldLongitude->id}').value;
var address =
document.id('{$fieldAddress->id}').value;
var town =
document.id('{$fieldTown->id}').getSelected().pick();
var department =
document.id('{$fieldDepartment->id}').getSelected().pick();
var zoom = 6;
var request = '{$lang}';
if (address && town &&
town.get('value') > 0){
zoom = 16;
request = address + ', ' +
town.get('text') + ', {$lang}';
} else if (town && town.get('value') >
0){
zoom = 13;
request = town.get('text') + ',
{$lang}';
} else if (department &&
department.get('value') > 0) {
zoom = 8;
request = department.get('text') + ',
{$lang}';
}
var inputLatitude =
elementContent.getElement('.input-latitude');
var inputLongitude =
elementContent.getElement('.input-longitude');
var mapContainer =
elementContent.getElement('.map-box-container');
var initMap = function(myLatlng) {
inputLongitude.set('value', myLatlng.lng());
inputLatitude.set('value', myLatlng.lat());
var options = {
zoom : zoom,
center : myLatlng,
mapTypeId : google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(mapContainer, options);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: '{$markerLabel}',
draggable: true,
cursor: 'move'
});
google.maps.event.addListener(marker,
'dragend', function(mouseEvent) {
inputLongitude.setProperty('value',
mouseEvent.latLng.lng());
inputLatitude.setProperty('value',
mouseEvent.latLng.lat());
});
};
elementContent.getElement('.map-box-content').setStyle('display',
'block');
if (longitude != 0 && latitude != 0) {
var myLatlng = new
google.maps.LatLng(latitude,longitude);
initMap(myLatlng);
} else {
var geocoder = new google.maps.Geocoder();
var opts = {'address':request,
'language':'{$lang}',
'region':'{$region}'};
var retry = 0;
var geocodeCallBack = function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var myLatlng = results[0].geometry.location;
initMap(myLatlng);
} else if (status ==
google.maps.GeocoderStatus.ZERO_RESULTS && retry < 3 ) {
if (town && town.get('value')
> 0 && retry == 0) {
// retry with town
zoom = 13;
request = town.get('text') +
', {$lang}';
} else if (department &&
department.get('value') > 0 && retry == 1) {
// retry with department
zoom = 8;
request = department.get('text')
+ ', {$lang}';
} else {
zoom = 6;
request = '{$lang}';
}
var opts = {'address':request,
'language':'{$lang}',
'region':'{$region}'};
geocoder.geocode(opts, geocodeCallBack);
retry++;
}
};
geocoder.geocode(opts, geocodeCallBack);
}
}
function closeBoxContent(elementContent)
{
document.id('{$fieldLatitude->id}').set('value',
elementContent.getElement('.input-latitude').value);
document.id('{$fieldLongitude->id}').set('value',
elementContent.getElement('.input-longitude').value);
}"
);
JFactory::getDocument()->addScript(
'https://maps.google.com/maps/api/js?key=' .
$params->get('googlemap_api_key') .
'&language=' . $lang . '&region=' .
$region
);
return $ouptut;
}
}
PK[��[�eؤA�Amodels/propertyInterface.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\User\User;
use Joomla\CMS\Mail\MailHelper;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Filesystem\Folder;
require_once JPATH_COMPONENT_ADMINISTRATOR .
'/tables/property.php';
/**
* JEAPropertyInterface model class.
*
* This class provides an interface between JEA data and third party
bridges
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JEAPropertyInterface extends JObject
{
// These public members concern the interface
public $ref = '';
public $title = '';
public $type = '';
public $transaction_type = '';
/**
* Renting or selling price
*
* @var string
*/
public $price = '';
public $address = '';
public $town = '';
public $area = '';
public $zip_code = '';
public $department = '';
public $condition = '';
public $living_space = '';
public $land_space = '';
public $rooms = '';
public $bedrooms = '';
public $charges = '';
public $fees = '';
public $deposit = '';
public $hot_water_type = '';
public $heating_type = '';
public $bathrooms = '';
public $toilets = '';
public $availability = '';
public $floor = 0;
public $floors_number = 0;
public $orientation = '0';
public $amenities = array();
public $description = '';
public $author_name = '';
public $author_email = '';
public $latitude = 0;
public $longitude = 0;
/**
* Timestamp
*
* @var integer
*/
public $created = 0;
/**
* Timestamp
*
* @var integer
*/
public $modified = 0;
public $images = array();
public $language = '*';
/**
* A callback which replace the default implementation to save images.
* This should be a function or a method but not a closure because
* this object needs to be serialised and closures can't be
serialized
*
* @var string|array
*/
public $saveImagesCallback = null;
/**
* Fields which are not in the standard JEA interface
*
* @var array
*/
protected $additionnalsFields = array();
/**
* The users array from Joomla
*
* @var array
*/
protected static $users = null;
/**
* The tables data array from JEA
*
* @var array
*/
protected static $tables = null;
/**
* The features data array from JEA
*
* @var array
*/
protected static $features = array();
/**
* Convert Interface data to JEA data
*
* @return array representing a JEA propery row
*/
protected function toJEAData()
{
$data = array(
'ref' => $this->ref,
'title' => $this->title,
'type_id' => self::getFeatureId('types',
$this->type, $this->language),
'price' => floatval($this->price),
'address' => $this->address,
'department_id' =>
self::getFeatureId('departments', $this->department),
'zip_code' => $this->zip_code,
'condition_id' =>
self::getFeatureId('conditions', $this->condition,
$this->language),
'living_space' => floatval($this->living_space),
'land_space' => floatval($this->land_space),
'rooms' => intval($this->rooms),
'bedrooms' => intval($this->bedrooms),
'charges' => floatval($this->charges),
'fees' => floatval($this->fees),
'deposit' => floatval($this->deposit),
'hot_water_type' =>
self::getFeatureId('hotwatertypes', $this->hot_water_type,
$this->language),
'heating_type' =>
self::getFeatureId('heatingtypes', $this->heating_type,
$this->language),
'bathrooms' => intval($this->bathrooms),
'toilets' => intval($this->toilets),
'availability' =>
$this->_convertTimestampToMysqlDate($this->availability, false),
'floor' => intval($this->floor),
'floors_number' => (int) $this->floors_number,
'orientation' => $this->orientation,
'description' => $this->description,
'published' => 1,
'created' =>
$this->_convertTimestampToMysqlDate($this->created),
'modified' =>
$this->_convertTimestampToMysqlDate($this->modified),
'created_by' => self::getUserId($this->author_email,
$this->author_name),
'latitude' => floatval($this->latitude),
'longitude' => floatval($this->longitude),
'language' => $this->language
);
$this->transaction_type = strtoupper($this->transaction_type);
if ($this->transaction_type == 'RENTING' ||
$this->transaction_type == 'SELLING')
{
$data['transaction_type'] = $this->transaction_type;
}
else
{
$data['transaction_type'] = '0';
}
$data['town_id'] = self::getFeatureId('towns',
$this->town, null, $data['department_id']);
$data['area_id'] = self::getFeatureId('areas',
$this->area, null, $data['town_id']);
$orientations =
array('0','N','NE','NW','NS','E','EW','W','SW','SE');
$orientation = strtoupper($this->orientation);
if (in_array($orientation, $orientations))
{
$data['orientation'] = $orientation;
}
else
{
$data['orientation'] = 'O';
}
if (is_array($this->amenities))
{
$data['amenities'] = array();
foreach ($this->amenities as $value)
{
$data['amenities'][] =
self::getFeatureId('amenities', $value, $this->language);
}
}
$validExtensions = array('jpg', 'JPG',
'jpeg', 'JPEG', 'gif', 'GIF',
'png', 'PNG');
$data['images'] = array();
foreach ($this->images as $image)
{
if (substr($image, 0, 4) == 'http')
{
$uri = new \Joomla\Uri\Uri($image);
$image = $uri->getPath();
}
$image = basename($image);
if (! empty($image))
{
if (in_array(File::getExt($image), $validExtensions))
{
$img = new stdClass;
$img->name = $image;
$img->title = '';
$img->description = '';
$data['images'][] = $img;
}
}
}
return $data;
}
/**
* Add a custom field to the interface
*
* @param string $fieldName The custom field name
* @param string $value The custom field value
*
* @return void
*/
public function addAdditionalField($fieldName = '', $value =
'')
{
$this->additionnalsFields[$fieldName] = $value;
}
/**
* Save the property
*
* @param string $provider A provider name
* @param number $id The property id
* @param boolean $forceUTF8 To force string to be converted into
UTF-8
*
* @return boolean return true if property was saved
*/
public function save($provider = '', $id = 0, $forceUTF8 =
false)
{
$db = JFactory::getDbo();
$property = new TableProperty($db);
$isNew = true;
$dispatcher = JDispatcher::getInstance();
// Include the jea plugins for the on save events.
JPluginHelper::importPlugin('jea');
if (! empty($id))
{
$property->load($id);
$isNew = false;
}
// Prepare data
$data = $this->toJEAData();
foreach ($this->additionnalsFields as $fieldName => $value)
{
$data[$fieldName] = $value;
}
if (! empty($provider))
{
$data['provider'] = $provider;
}
if ($forceUTF8)
{
foreach ($data as $k => $v)
{
switch ($k)
{
case 'title':
case 'description':
case 'address':
$data[$k] = utf8_encode($v);
}
}
}
$property->bind($data);
$property->check();
// Check override created_by
if (! empty($data['created_by']))
{
$property->created_by = $data['created_by'];
}
// Trigger the onContentBeforeSave event.
$result = $dispatcher->trigger('onBeforeSaveProperty',
array('com_jea.propertyInterface', &$property, $isNew));
if (in_array(false, $result, true))
{
$this->_errors = $property->getError();
return false;
}
$property->store();
// Trigger the onContentAfterSave event.
$dispatcher->trigger('onAfterSaveProperty',
array('com_jea.propertyInterface', &$property, $isNew));
$errors = $property->getErrors();
if (! empty($errors))
{
$this->_errors = $errors;
return false;
}
// Save images
if (!empty($this->images) && $this->saveImagesCallback ===
null)
{
$imgDir = JPATH_ROOT . '/images/com_jea/images/' .
$property->id;
if (!Folder::exists($imgDir))
{
Folder::create($imgDir);
}
$validExtensions = array('jpg', 'JPG',
'jpeg', 'JPEG', 'gif', 'GIF',
'png', 'PNG');
foreach ($this->images as $image)
{
$basename = basename($image);
if (substr($image, 0, 4) == 'http')
{
$uri = new \Joomla\Uri\Uri($image);
$basename = basename($uri->getPath());
}
if (!in_array(File::getExt($basename), $validExtensions))
{
// Not a valid Extension
continue;
}
if (substr($image, 0, 4) != 'http' &&
file_exists($image))
{
File::copy($image, $imgDir . '/' . $basename);
}
if (substr($image, 0, 4) == 'http')
{
if (File::exists($imgDir . '/' . $basename))
{
$localtime = $this->getLastModified($imgDir . '/' .
$basename);
$remotetime = $this->getLastModified($image);
if ($remotetime <= $localtime)
{
JLog::add(
sprintf(
"File %s is up to date. [local time: %u - remote time:
%u]",
$imgDir . '/' . $basename,
$localtime,
$remotetime
),
JLog::DEBUG,
'jea'
);
continue;
}
}
$this->downloadImage($image, $imgDir . '/' . $basename);
}
}
}
elseif (!empty($this->images) &&
is_callable($this->saveImagesCallback))
{
call_user_func_array($this->saveImagesCallback,
array($this->images, $property));
}
return true;
}
/**
* Download an image
*
* @param string $url The image URL
* @param string $dest The destination directory
*
* @return boolean
*/
protected function downloadImage($url = '', $dest =
'')
{
JLog::add("Download Image : $url", JLog::DEBUG,
'jea');
if (empty($url) || empty($dest))
{
return false;
}
$buffer = '';
$allow_url_fopen = (bool) ini_get('allow_url_fopen');
if ($allow_url_fopen)
{
$buffer = file_get_contents($url);
}
elseif (function_exists('curl_init'))
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Don't check SSL certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$buffer = curl_exec($ch);
curl_close($ch);
}
return File::write($dest, $buffer);
}
/**
* Get Last modified time as Unix timestamp
*
* @param string $file A local or remote file
*
* @throws RuntimeException
* @return integer Unix timestamp
*/
public function getLastModified($file)
{
if (substr($file, 0, 4) != 'http' &&
file_exists($file))
{
$stat = stat($file);
return $stat['mtime'];
}
$allow_url_fopen = (bool) ini_get('allow_url_fopen');
$headers = array();
if ($allow_url_fopen)
{
$headers = get_headers($file);
}
elseif (function_exists('curl_init'))
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $file);
// Don't check SSL certificate
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FILETIME, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$out = curl_exec($curl);
curl_close($curl);
$headers = explode("\n", $out);
}
if (empty($headers))
{
throw new RuntimeException("Cannot get HTTP headers for
$file");
}
foreach ($headers as $header)
{
if (strpos($header, 'Last-Modified') !== false)
{
$matches = array();
if (preg_match('/:\s?(.*)$/m', $header, $matches) !== false)
{
$matches[1];
JLog::add(sprintf("Last-Modified: %s - Time: %u",
$matches[1], strtotime($matches[1])), JLog::DEBUG, 'jea');
return strtotime($matches[1]);
}
}
}
return 0;
}
/**
* Get Feature id related to its value
*
* @param string $tableName The feature table name
* @param string $fieldValue The value to store
* @param string $language The language code
* @param integer $parentId An optional parent id
*
* @return integer
*/
public static function getFeatureId($tableName = '', $fieldValue
= '', $language = null, $parentId = 0)
{
$fieldValue = trim($fieldValue);
$id = 0;
$r = self::_getJeaRowIfExists($tableName, 'value',
$fieldValue);
static $tablesOrdering = array();
if ($r === false && ! empty($fieldValue) && !
isset(self::$features[$tableName][$fieldValue]))
{
$db = JFactory::getDbo();
if (! isset($tablesOrdering[$tableName]))
{
$db->setQuery('SELECT MAX(ordering) FROM #__jea_' .
$tableName);
$tablesOrdering[$tableName] = intval($db->loadResult());
}
$maxord = $tablesOrdering[$tableName] += 1;
$query = $db->getQuery(true);
$query->insert('#__jea_' . $tableName);
$columns = array('value', 'ordering');
$values = $db->quote($fieldValue) . ',' . $maxord;
if ($tableName == 'towns')
{
$columns[] = 'department_id';
$values .= ',' . (int) $parentId;
}
elseif ($tableName == 'areas')
{
$columns[] = 'town_id';
$values .= ',' . (int) $parentId;
}
if ($language != null)
{
$columns[] = 'language';
$values .= ',' . $query->q($language);
}
$query->columns($columns);
$query->values($values);
$db->setQuery($query);
$db->query();
$id = $db->insertid();
self::$features[$tableName][$fieldValue] = $id;
}
elseif (isset(self::$features[$tableName][$fieldValue]))
{
$id = self::$features[$tableName][$fieldValue];
}
elseif (is_object($r))
{
$id = $r->id;
}
return $id;
}
/**
* Return a feature row if already extis in the database
*
* @param string $tableName The feature table name
* @param string $fieldName The feature field name
* @param string $fieldValue The feature field value
*
* @return boolean|object The feature row object or false if feature not
found
*/
protected static function _getJeaRowIfExists($tableName = '',
$fieldName = '', $fieldValue = '')
{
if (self::$tables === null)
{
$db = JFactory::getDbo();
self::$tables = array();
$tables = array(
'amenities',
'areas',
'conditions',
'departments',
'heatingtypes',
'hotwatertypes',
'properties',
'slogans',
'towns',
'types'
);
foreach ($tables as $tableName)
{
// Get all JEA datas
$db->setQuery('SELECT * FROM #__jea_' . $tableName);
self::$tables[$tableName] = $db->loadObjectList('id');
}
}
if (empty(self::$tables[$tableName]) || empty($fieldName) ||
empty($fieldValue))
{
return false;
}
foreach (self::$tables[$tableName] as $row)
{
if (! isset($row->$fieldName))
{
return false;
}
if ($row->$fieldName == $fieldValue)
{
return $row;
}
}
return false;
}
/**
* Get an user. Try to create an user if not found.
*
* @param string $email The user email
* @param string $name The user name
*
* @return integer Return the user id. Return 0 if the user cannot be
created.
*/
public static function getUserId($email = '', $name =
'')
{
if (self::$users == null)
{
$db = JFactory::getDbo();
$db->setQuery('SELECT `id`, `email` FROM `#__users`');
$rows = $db->loadObjectList();
foreach ($rows as $row)
{
self::$users[$row->email] = $row->id;
}
}
if (isset(self::$users[$email]))
{
return self::$users[$email];
}
else
{
$id = self::_createUser($email, $name);
if ($id != false)
{
self::$users[$email] = $id;
return $id;
}
}
return 0;
}
/**
* Create an user
*
* @param string $email The user email
* @param string $name The user name
*
* @return boolean|number return the user id or false if the user cannot
be created
*/
protected static function _createUser($email = '', $name =
'')
{
if (!MailHelper::isEmailAddress($email))
{
return false;
}
$splitMail = explode('@', $email);
$user = new User;
$params = array(
'username' => $splitMail[0] . uniqid(),
'name' => $name,
'email' => $email,
'block' => 0,
'sendEmail' => 0
);
$user->bind($params);
if (true === $user->save())
{
return $user->id;
}
return false;
}
/**
* Convert Unix timestamp to MYSQL date
*
* @param integer $timestamp An UNIX timestamp
* @param boolean $datetime If true return MYSQL DATETIME else return
MYSQL DATE
*
* @return string
*/
protected function _convertTimestampToMysqlDate($timestamp, $datetime =
true)
{
if (is_int($timestamp) && $timestamp > 0)
{
if ($datetime)
{
return date('Y-m-d H:i:s', $timestamp);
}
return date('Y-m-d', $timestamp);
}
return '';
}
}
PK[��[%��!�!models/property.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\Utilities\ArrayHelper;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Filesystem\Folder;
/**
* Property model class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @see JModelAdmin
*
* @since 2.0
*/
class JeaModelProperty extends JModelAdmin
{
/**
* The event to trigger after saving the data.
*
* @var string
*/
protected $event_after_save = 'onAfterSaveProperty';
/**
* The event to trigger before saving the data.
*
* @var string
*/
protected $event_before_save = 'onBeforeSaveProperty';
/**
* Overrides parent method
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data
(default case), false if not.
*
* @return JForm|boolean A JForm object on success, false on failure
*
* @see JModelForm::getForm()
*/
public function getForm($data = array(), $loadData = true)
{
$dispatcher = JDispatcher::getInstance();
// Include the jea plugins for the on after load property form events.
JPluginHelper::importPlugin('jea');
$form = $this->loadForm('com_jea.property',
'property', array('control' => 'jform',
'load_data' => $loadData));
if (empty($form))
{
return false;
}
$jinput = JFactory::getApplication()->input;
$id = $jinput->get('id', 0);
$user = JFactory::getUser();
$item = $this->getItem($id);
// Remove deposit field if transaction type is not SELLING
if (empty($item->transaction_type) || $item->transaction_type ==
'SELLING')
{
$form->removeField('deposit');
$form->removeField('rate_frequency');
}
elseif ($item->transaction_type == 'RENTING')
{
$form->setFieldAttribute('price', 'label',
'COM_JEA_FIELD_PRICE_RENT_LABEL');
}
// Check for existing article.
// Modify the form based on Edit State access controls.
if ($id != 0 && (!
$user->authorise('core.edit.state',
'com_jea.property.' . (int) $id))
|| ($id == 0 && !
$user->authorise('core.edit.state', 'com_jea')))
{
// Disable fields for display.
$form->setFieldAttribute('featured', 'disabled',
'true');
$form->setFieldAttribute('published', 'disabled',
'true');
// Disable fields while saving. The controller has already verified this
is an article you can edit.
$form->setFieldAttribute('featured', 'filter',
'unset');
$form->setFieldAttribute('published', 'filter',
'unset');
}
// Trigger the onAfterLoadPropertyForm event.
$dispatcher->trigger('onAfterLoadPropertyForm',
array(&$form));
return $form;
}
/**
* Overrides parent method
*
* @param array $data The form data.
*
* @return boolean True on success, False on error.
*
* @see JModelAdmin::save()
*/
public function save($data)
{
// Include the jea plugins for the on save events.
JPluginHelper::importPlugin('jea');
// Alter the title for save as copy
if (JFactory::getApplication()->input->getCmd('task') ==
'save2copy')
{
$data['ref'] = JString::increment($data['ref']);
$data['title'] = JString::increment($data['title']);
$data['alias'] = JString::increment($data['alias'],
'dash');
}
if (empty($data['images']))
{
// Set a default empty json array
$data['images'] = '[]';
}
if (parent::save($data))
{
return $this->processImages();
}
return false;
}
/**
* Method to manage new uploaded images and to remove non existing images
from the gallery
*
* @return boolean true on success otherwise false
*/
public function processImages()
{
$upload = JeaUpload::getUpload('newimages');
$item = $this->getItem();
$images = json_decode($item->images);
if (empty($images))
{
$images = array();
}
$imageNames = array();
foreach ($images as $row)
{
$imageNames[$row->name] = $row->name;
}
$baseUploadDir = JPATH_ROOT . '/images/com_jea/images';
$validExtensions = array('jpg', 'JPG',
'jpeg', 'JPEG', 'gif', 'GIF',
'png', 'PNG');
if (!Folder::exists($baseUploadDir))
{
Folder::create($baseUploadDir);
}
$uploadDir = $baseUploadDir . '/' . $item->id;
if (is_array($upload))
{
foreach ($upload as $file)
{
if ($file->isPosted())
{
$file->setValidExtensions($validExtensions)->nameToSafe();
if (! Folder::exists($uploadDir))
{
Folder::create($uploadDir);
}
if ($file->moveTo($uploadDir))
{
if (! isset($imageNames[$file->name]))
{
$image = new stdClass;
$image->name = $file->name;
$image->title = '';
$image->description = '';
$images[] = $image;
// Update the list of image names
$imageNames[$image->name] = $image->name;
}
}
else
{
$errors = $file->getErrors();
foreach ($errors as $error)
{
$this->setError(JText::_($error));
}
return false;
}
}
}
$table = $this->getTable();
$table->load($item->id);
$table->images = json_encode($images);
$table->store();
}
if (Folder::exists($uploadDir))
{
// Remove image files
$list = Folder::files($uploadDir);
foreach ($list as $filename)
{
if (strpos($filename, 'thumb') === 0)
{
continue;
}
if (! isset($imageNames[$filename]))
{
$removeList = Folder::files($uploadDir, $filename . '$',
false, true);
foreach ($removeList as $removeFile)
{
File::delete($removeFile);
}
}
}
}
return true;
}
/**
* Method to toggle the featured setting of properties.
*
* @param array $pks The ids of the items to toggle.
* @param integer $value The value to toggle to.
*
* @return void.
*/
public function featured($pks, $value = 0)
{
// Sanitize the ids.
$pks = ArrayHelper::toInteger((array) $pks);
$db = $this->getDbo();
$db->setQuery('UPDATE #__jea_properties SET featured = ' .
(int) $value . ' WHERE id IN (' . implode(',', $pks) .
')');
$db->execute();
}
/**
* Method to copy a set of properties.
*
* @param array $pks The ids of the items to copy.
*
* @return void.
*/
public function copy($pks)
{
// Sanitize the ids.
$pks = (array) $pks;
ArrayHelper::toInteger($pks);
$table = $this->getTable();
$nextOrdering = $table->getNextOrder();
$fields = $table->getProperties();
unset($fields['id']);
unset($fields['checked_out']);
unset($fields['checked_out_time']);
$fields = array_keys($fields);
$query = 'SELECT ' . implode(', ', $fields) . '
FROM #__jea_properties WHERE id IN (' . implode(',', $pks) .
')';
$rows = $this->_getList($query);
foreach ($rows as $row)
{
$row = (array) $row;
$row['ref'] = JString::increment($row['ref']);
$row['title'] = JString::increment($row['title']);
$row['alias'] = JString::increment($row['alias'],
'dash');
$row['ordering'] = $nextOrdering;
$row['created'] = date('Y-m-d H:i:s');
$table->bind($row);
$table->store();
$nextOrdering ++;
}
}
/**
* Overrides parent method
*
* @param array $pks An array of record primary keys.
*
* @return boolean True if successful, false if an error occurs.
*
* @see JModelAdmin::delete()
*/
public function delete(&$pks)
{
if (parent::delete($pks))
{
// Remove images folder
foreach ($pks as $id)
{
if (Folder::exists(JPATH_ROOT . '/images/com_jea/images/' .
$id))
{
Folder::delete(JPATH_ROOT . '/images/com_jea/images/' .
$id);
}
}
return true;
}
return false;
}
/**
* Overrides parent method
*
* @return array The default data is an empty array.
*
* @see JModelForm::loadFormData()
*/
protected function loadFormData()
{
// Check the session for previously entered form data. See
// JControllerForm::save()
$data =
JFactory::getApplication()->getUserState('com_jea.edit.property.data',
array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
/**
* Overrides parent method
*
* @param JTable $table A JTable object.
*
* @return array An array of conditions to add to ordering queries.
*
* @see JModelAdmin::getReorderConditions()
*/
protected function getReorderConditions($table)
{
$db = $table->getDbo();
$condition = array();
$condition[] = 'transaction_type = ' .
$db->quote($table->transaction_type);
return $condition;
}
}
PK[��[����sql/uninstall.mysql.utf8.sqlnu�[���
-- DROP TABLE IF EXISTS `#__jea_advantages`;
-- DROP TABLE IF EXISTS `#__jea_areas`;
-- DROP TABLE IF EXISTS `#__jea_conditions`;
-- DROP TABLE IF EXISTS `#__jea_departments`;
-- DROP TABLE IF EXISTS `#__jea_heatingtypes`;
-- DROP TABLE IF EXISTS `#__jea_hotwatertypes`;
-- DROP TABLE IF EXISTS `#__jea_properties`;
-- DROP TABLE IF EXISTS `#__jea_slogans`;
-- DROP TABLE IF EXISTS `#__jea_towns`;
-- DROP TABLE IF EXISTS `#__jea_types`;
TRUNCATE TABLE `#__jea_tools`;
PK[��[ԯJ�KKsql/install.mysql.utf8.sqlnu�[���
-- --------------------------------------------------------
--
-- Table schema `#__jea_advantages`
--
CREATE TABLE IF NOT EXISTS `#__jea_amenities` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
`language` char(7) NOT NULL COMMENT 'language where amenity is
shown',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_areas`
--
CREATE TABLE IF NOT EXISTS `#__jea_areas` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`town_id` int(11) NOT NULL default '0',
`ordering` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_conditions`
--
CREATE TABLE IF NOT EXISTS `#__jea_conditions` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
`language` char(7) NOT NULL COMMENT 'language where condition is
shown',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_departments`
--
CREATE TABLE IF NOT EXISTS `#__jea_departments` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `name` (`value`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_heatingtypes`
--
CREATE TABLE IF NOT EXISTS `#__jea_heatingtypes` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
`language` char(7) NOT NULL COMMENT 'language where heatingtype is
shown',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_hotwatertypes`
--
CREATE TABLE IF NOT EXISTS `#__jea_hotwatertypes` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
`language` char(7) NOT NULL COMMENT 'language where hotwatertype is
shown',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_properties`
--
CREATE TABLE IF NOT EXISTS `#__jea_properties` (
`id` int(11) NOT NULL auto_increment,
`asset_id` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT
'FK to the #__assets table',
`ref` varchar(20) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`alias` varchar(255) NOT NULL default '',
`transaction_type` ENUM('RENTING', 'SELLING') NOT
NULL default 'SELLING',
`type_id` int(11) NOT NULL default '0',
`price` decimal(12,2) NOT NULL default '0.00',
`rate_frequency` ENUM( 'MONTHLY', 'WEEKLY',
'DAILY' ) NOT NULL default 'MONTHLY',
`address` varchar(255) NOT NULL default '',
`town_id` int(11) NOT NULL default '0',
`area_id` int(11) NOT NULL default '0',
`zip_code` varchar(10) NOT NULL default '',
`department_id` int(11) NOT NULL default '0',
`condition_id` int(11) NOT NULL default '0',
`living_space` int(11) NOT NULL default '0',
`land_space` int(11) NOT NULL default '0',
`rooms` int(11) NOT NULL default '0',
`bedrooms` int(11) NOT NULL default '0',
`charges` decimal(12,2) NOT NULL default '0.00',
`fees` decimal(12,2) NOT NULL default '0.00',
`deposit` decimal(12,2) NOT NULL default '0.00',
`hot_water_type` tinyint(1) NOT NULL default '0',
`heating_type` tinyint(2) NOT NULL default '0',
`bathrooms` tinyint(3) NOT NULL default '0',
`toilets` tinyint(3) NOT NULL default '0',
`availability` date NOT NULL default '0000-00-00',
`floor` int(11) NOT NULL default '0',
`floors_number` int(11) NOT NULL default '0',
`orientation` ENUM('0', 'N', 'NE',
'NW', 'NS', 'E', 'W',
'S', 'SW', 'SE', 'EW') NOT NULL
default '0',
`amenities` varchar(255) NOT NULL default '' COMMENT
'amenities list',
`description` text NOT NULL,
`slogan_id` int(11) NOT NULL default '0',
`published` tinyint(1) NOT NULL default '0',
`access` int(11) NOT NULL default '0',
`ordering` int(11) NOT NULL default '0',
`featured` tinyint(1) NOT NULL default '0',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`publish_up` datetime NOT NULL default '0000-00-00 00:00:00',
`publish_down` datetime NOT NULL default '0000-00-00 00:00:00',
`checked_out` int(11) NOT NULL default '0',
`checked_out_time` datetime NOT NULL default '0000-00-00
00:00:00',
`created_by` int(11) NOT NULL default '0',
`hits` int(11) NOT NULL default '0',
`images` TEXT NOT NULL,
`latitude` varchar(20) NOT NULL default '0',
`longitude` varchar(20) NOT NULL default '0',
`notes` TEXT NOT NULL,
`language` char(7) NOT NULL COMMENT 'language where property is
shown',
`provider` varchar(50) NOT NULL default '' COMMENT 'A
gateway provider name',
PRIMARY KEY (`id`),
KEY `idx_jea_transactiontype` (`transaction_type`),
KEY `idx_jea_typeid` (`type_id`),
KEY `idx_jea_departmentid` (`department_id`),
KEY `idx_jea_townid` (`town_id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_tools`
--
CREATE TABLE IF NOT EXISTS `#__jea_tools` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`link` varchar(255) NOT NULL default '',
`icon` varchar(255) NOT NULL default '',
`params` TEXT NOT NULL,
`access` TEXT NOT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
INSERT INTO `#__jea_tools` (`id` , `title` , `link` , `icon` , `params` ,
`access`)
VALUES
('1', 'com_jea_import',
'index.php?option=com_jea&view=gateways&layout=import',
'download', '',
'[''core.manage'',
''com_jea'', ''core.create'',
''com_jea'']'),
('2', 'com_jea_export',
'index.php?option=com_jea&view=gateways&layout=export',
'upload', '',
'[''core.manage'',
''com_jea'', ''core.create'',
''com_jea'']');
-- --------------------------------------------------------
--
-- Table schema `#__jea_slogans`
--
CREATE TABLE IF NOT EXISTS `#__jea_slogans` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
`language` char(7) NOT NULL COMMENT 'language where slogan is
shown',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_towns`
--
CREATE TABLE IF NOT EXISTS `#__jea_towns` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`department_id` int(11) NOT NULL default '0',
`ordering` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_types`
--
CREATE TABLE IF NOT EXISTS `#__jea_types` (
`id` int(11) NOT NULL auto_increment,
`value` varchar(255) NOT NULL default '',
`ordering` int(11) NOT NULL default '0',
`language` char(7) NOT NULL COMMENT 'language where type is
shown',
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table schema `#__jea_gateways`
--
CREATE TABLE IF NOT EXISTS `#__jea_gateways` (
`id` int(11) NOT NULL auto_increment,
`type` varchar(50) NOT NULL default '',
`provider` varchar(50) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`published` tinyint(1) NOT NULL default '0',
`ordering` int(11) NOT NULL default '0',
`params` TEXT NOT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
PK[��[9� jGGsql/updates/mysql/2.0.sqlnu�[���# Dummy
SQL file to set schema version to 2.0 so next update will work
PK[��[~x���sql/updates/mysql/2.1.sqlnu�[���ALTER
TABLE `#__jea_properties` CHANGE `orientation` `orientation` ENUM(
'0', 'N', 'NE', 'NW',
'E', 'W', 'S', 'SW', 'SE'
) NOT NULL DEFAULT '0'
PK[��[~��hsql/updates/mysql/2.2.sqlnu�[���ALTER
TABLE #__jea_properties ADD `publish_down` datetime NOT NULL default
'0000-00-00 00:00:00' AFTER `modified`;
ALTER TABLE #__jea_properties ADD `publish_up` datetime NOT NULL default
'0000-00-00 00:00:00' AFTER `modified`;
ALTER TABLE #__jea_properties ADD `access` int(11) NOT NULL default
'0' AFTER `published`;
UPDATE #__jea_properties SET `publish_up`=`created`, access=1;
PK[��[w�ިddsql/updates/mysql/2.30.sqlnu�[���ALTER
TABLE `#__jea_properties` CHANGE `department_id` `department_id` INT(11)
NOT NULL DEFAULT '0'
PK[��[��TA��sql/updates/mysql/3.1.sqlnu�[���ALTER
TABLE `#__jea_properties` CHANGE `orientation` `orientation` ENUM(
'0', 'N', 'NE', 'NW',
'NS', 'E', 'W', 'S',
'SW', 'SE', 'EW' ) NOT NULL DEFAULT
'0'
PK[��[�/uusql/updates/mysql/3.4.sqlnu�[���UPDATE
`#__jea_tools` SET `title`='com_jea_import',
`link`='index.php?option=com_jea&view=gateways&layout=import',
`icon`='download',
`params`=''
WHERE `title`='com_jea_import_from_jea';
UPDATE `#__jea_tools` SET `title`='com_jea_export',
`link`='index.php?option=com_jea&view=gateways&layout=export',
`icon`='upload',
`params`=''
WHERE `title`='com_jea_import_from_csv';
CREATE TABLE IF NOT EXISTS `#__jea_gateways` (
`id` int(11) NOT NULL auto_increment,
`type` varchar(50) NOT NULL default '',
`provider` varchar(50) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`published` tinyint(1) NOT NULL default '0',
`ordering` int(11) NOT NULL default '0',
`params` TEXT NOT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
ALTER TABLE #__jea_properties ADD `provider` varchar(50) NOT NULL default
'' COMMENT 'A gateway provider name';
PK[��[��zӴ�tables/gateway.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Gateway table class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 1.0
*/
class TableGateway extends JTable
{
/**
* Constructor
*
* @param JDatabaseDriver $db A database diver object
*/
public function __construct(&$db)
{
parent::__construct('#__jea_gateways', 'id', $db);
}
}
PK[��[L5M���tables/features.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* FeaturesFactory table class.
* This class provides a way to instantiate a feature table on the fly
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class FeaturesFactory extends JTable
{
/**
* Method to perform sanity checks before to store in the database.
*
* @return boolean True if the instance is sane and able to be stored in
the database.
*/
public function check()
{
// For new insertion
if (empty($this->id))
{
$this->ordering = $this->getNextOrder();
}
return true;
}
}
PK[��[%Ƌ٢�tables/property.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 table class.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 3.4
*/
class TableProperty extends JTable
{
/**
* Constructor
*
* @param JDatabaseDriver $db A database diver object
*/
public function __construct(&$db)
{
parent::__construct('#__jea_properties', 'id', $db);
}
/**
* Method to compute the default name of the asset.
*
* @see JTable::_getAssetName()
*
* @return string
*/
protected function _getAssetName()
{
$k = $this->_tbl_key;
return 'com_jea.property.' . (int) $this->$k;
}
/**
* Method to return the title to use for the asset table.
*
* @return string
*
* @see JTable::_getAssetTitle()
*/
protected function _getAssetTitle()
{
return $this->title;
}
/**
* Method to get the parent asset under which to register this one.
*
* @param JTable $table A JTable object for the asset parent.
* @param integer $id Id to look up
*
* @return integer
*
* @see JTable::_getAssetParentId()
*/
protected function _getAssetParentId(JTable $table = null, $id = null)
{
$asset = JTable::getInstance('Asset');
$asset->loadByName('com_jea');
return $asset->id;
}
/**
* Method to bind an associative array or object to the JTableInterface
instance.
*
* @param mixed $array An associative array or object to bind to the
JTableInterface instance.
* @param mixed $ignore An optional array or space separated list of
properties to ignore while binding.
*
* @return boolean True on success.
*
* @see JTable::bind()
*/
public function bind($array, $ignore = '')
{
// Bind the images.
if (isset($array['images']) &&
is_array($array['images']))
{
$images = array();
foreach ($array['images'] as &$image)
{
$images[] = (object) $image;
}
$array['images'] = json_encode($images);
}
// Bind the rules.
if (isset($array['rules']) &&
is_array($array['rules']))
{
$rules = new JAccessRules($array['rules']);
$this->setRules($rules);
}
return parent::bind($array, $ignore);
}
/**
* Method to perform sanity checks before to store in the database.
*
* @return boolean True if the instance is sane and able to be stored in
the database.
*
* @see JTable::check()
*/
public function check()
{
if (empty($this->type_id))
{
$this->setError(JText::_('COM_JEA_MSG_SELECT_PROPERTY_TYPE'));
return false;
}
// Check the publish down date is not earlier than publish up.
if ($this->publish_down > $this->_db->getNullDate()
&& $this->publish_down < $this->publish_up)
{
$this->setError(JText::_('JGLOBAL_START_PUBLISH_AFTER_FINISH'));
return false;
}
// Auto Generate a reference if empty
if (empty($this->ref))
{
$this->ref = uniqid();
}
// Alias cleanup
if (empty($this->alias))
{
$this->alias = $this->title;
}
$this->alias = JFilterOutput::stringURLSafe($this->alias);
// Serialize amenities
if (! empty($this->amenities) &&
is_array($this->amenities))
{
// Sort in order to find easily property amenities in sql where clause
sort($this->amenities);
$this->amenities = '-' . implode('-',
$this->amenities) . '-';
}
else
{
$this->amenities = '';
}
// Check availability
if (! preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}/',
trim($this->availability)))
{
$this->availability = '0000-00-00';
}
// Clean description for xhtml transitional compliance
$this->description = str_replace('<br>', '<br
/>', $this->description);
// For new insertion
if (empty($this->id))
{
$user = JFactory::getUser();
$this->ordering = $this->getNextOrder();
$this->created = $this->created ? $this->created :
date('Y-m-d H:i:s');
$this->created_by = $this->created_by ? $this->created_by :
$user->get('id');
}
else
{
$this->modified = date('Y-m-d H:i:s');
}
return true;
}
/**
* Method to delete a row from the database table by primary key value.
*
* @param mixed $pk An optional primary key value to delete.
*
* @return boolean True on success.
*
* @see JTable::check()
*/
public function delete($pk = null)
{
$name = $this->_getAssetName();
$asset = JTable::getInstance('Asset');
// Force to delete even if property asset doesn't exist.
if (! $asset->loadByName($name))
{
$this->_trackAssets = false;
}
return parent::delete($pk);
}
}
PK\��[g�-�''views/gateway/tmpl/edit.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewGateway
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
?>
<form action="" method="post"
id="adminForm" class="form-validate">
<div class="form-horizontal">
<div class="control-group">
<div class="control-label"><?php echo
$this->form->getLabel('title') ?></div>
<div class="controls"><div
class="input-append"><?php echo
$this->form->getInput('title')
?></div></div>
</div>
<div class="control-group">
<div class="control-label"><?php echo
$this->form->getLabel('provider') ?></div>
<div class="controls"><div
class="input-append"><?php echo
$this->form->getInput('provider')
?></div></div>
</div>
<div class="control-group">
<div class="control-label"><?php echo
$this->form->getLabel('published') ?></div>
<div class="controls"><div
class="input-append"><?php echo
$this->form->getInput('published')
?></div></div>
</div>
</div>
<fieldset>
<legend><?php echo
JText::_('COM_JEA_GATEWAY_PARAMS')?></legend>
<?php if (!empty($this->item->id)): ?>
<div class="form-horizontal">
<?php foreach ($this->form->getGroup('params') as
$field) echo $field->renderField() ?>
</div>
<?php else : ?>
<p><?php echo
JText::_('COM_JEA_GATEWAY_PARAMS_APPEAR_AFTER_SAVE')?></p>
<?php endif?>
</fieldset>
<div>
<input type="hidden" name="task"
value="" />
<?php echo $this->form->getInput('id') ?>
<?php echo $this->form->getInput('type') ?>
<?php echo JHtml::_('form.token') ?>
</div>
</form>
PK\��[O��*DDviews/gateway/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Gateway View
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewGateway extends JViewLegacy
{
/**
* The form object
*
* @var JForm
*/
protected $form;
/**
* The database record
*
* @var JObject|boolean
*/
protected $item;
/**
* The model state
*
* @var JObject
*/
protected $state;
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
JeaHelper::addSubmenu('tools');
$this->state = $this->get('State');
$title = JText::_('COM_JEA_GATEWAYS');
$this->item = $this->get('Item');
switch ($this->_layout)
{
case 'edit':
$this->form = $this->get('Form');
JToolBarHelper::apply('gateway.apply');
JToolBarHelper::save('gateway.save');
JToolBarHelper::cancel('gateway.cancel');
$isNew = ($this->item->id == 0);
$title .= ' : ' . ($isNew ?
JText::_('JACTION_CREATE') : JText::_('JACTION_EDIT') .
' : ' . $this->item->title);
break;
}
JToolBarHelper::title($title, 'jea');
parent::display($tpl);
}
}
PK\��[�#)� views/gateways/tmpl/import.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewGateways
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar?>
</div>
<div id="j-main-container" class="span10">
<?php echo JLayoutHelper::render('jea.gateways.nav',
array('action' => 'import', 'view' =>
'console'))?>
<?php echo JLayoutHelper::render('jea.gateways.consoles',
array('action' => 'import')) ?>
</div>PK\��[g���%%views/gateways/tmpl/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewGateways
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
JHtml::_('behavior.multiselect');
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirection =
$this->escape($this->state->get('list.direction'));
if ($listOrder == 'ordering')
{
$saveOrderingUrl =
'index.php?option=com_jea&task=gateways.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'gateways-list',
'adminForm', strtolower($listDirection), $saveOrderingUrl);
}
$script = <<<JS
jQuery(document).ready(function($) {
$('.show-logs').click( function(e) {
$('#modal').data('gatewayId',
$(this).data('gatewayId'));
e.preventDefault();
});
$('#modal').modal({show: false}).on('shown.bs.modal',
function(e) {
var gatewayId = $(this).data('gatewayId');
$.get('index.php', {option : 'com_jea', task
:'gateway.getLogs', id: gatewayId}, function(response) {
$('#logs').text(response);
});
$(this).find('a').each(function() {
this.href = this.href.replace(/id=[0-9]*/, 'id=' + gatewayId);
});
$('.ajax-refresh-logs').click( function(e) {
$.get( this.href, {}, function(response) {
$('#logs').text(response);
});
e.preventDefault();
});
}).on('hide.bs.modal', function () {
$('#logs').empty();
});
});
JS;
$document = JFactory::getDocument();
$document->addScriptDeclaration($script);
?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar ?>
</div>
<div id="j-main-container" class="span10">
<?php echo JLayoutHelper::render('jea.gateways.nav',
array('action' =>
$this->state->get('filter.type'), 'view' =>
'gateways'), JPATH_COMPONENT_ADMINISTRATOR )?>
<hr />
<form action="<?php echo
JRoute::_('index.php?option=com_jea&view=gateways')
?>" method="post" name="adminForm"
id="adminForm">
<table class="table table-striped"
id="gateways-list">
<thead>
<tr>
<th width="1%" class="nowrap center">
<?php echo JHtml::_('grid.sort', '',
'ordering', $listDirection, $listOrder, null, 'asc',
'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?>
</th>
<th width="1%" class="nowrap">
<?php echo JHtml::_('grid.checkall') ?>
</th>
<th width="1%" class="nowrap">
<?php echo JHtml::_('grid.sort', 'JSTATUS',
'published', $listDirection , $listOrder ) ?>
</th>
<th width="86%" class="nowrap">
<?php echo JHtml::_('grid.sort',
'JGLOBAL_TITLE', 'title', $listDirection , $listOrder )
?>
</th>
<th width="5%" class="nowrap center">
<?php echo JText::_('COM_JEA_LOGS') ?>
</th>
<th width="5%" class="nowrap center">
<?php echo JHtml::_('grid.sort',
'COM_JEA_GATEWAY_FIELD_PROVIDER_LABEL', 'provider',
$listDirection , $listOrder ) ?>
</th>
<th width="1%" class="nowrap hidden-phone">
<?php echo JHtml::_('grid.sort',
'JGRID_HEADING_ID', 'id', $listDirection, $listOrder);
?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="12"></td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<tr class="row<?php echo $i % 2 ?>">
<td width="1%" class="order nowrap center
hidden-phone">
<?php
$iconClass = '';
if ($listOrder != 'ordering') $iconClass = ' inactive
tip-top hasTooltip" title="' .
JHtml::tooltipText('JORDERINGDISABLED');
?>
<span class="sortable-handler<?php echo $iconClass
?>"><span
class="icon-menu"></span></span>
<?php if ($listOrder == 'ordering') : ?>
<input type="text" style="display:none"
name="order[]" size="5" value="<?php echo
$item->ordering ?>" class="width-20 text-area-order "
/>
<?php endif ?>
</td>
<td class="nowrap center">
<?php echo JHtml::_('grid.id', $i, $item->id) ?>
</td>
<td width="1%" class="nowrap center">
<?php echo JHtml::_('jgrid.published',
$item->published, $i, 'gateways.', true, 'cb') ?>
</td>
<td width="86%" class="title">
<a href="<?php echo
JRoute::_('index.php?option=com_jea&task=gateway.edit&type='.
$this->state->get('filter.type')
.'&id='.(int) $item->id) ?>">
<?php echo $item->title ?></a>
</td>
<td width="5%" class="nowrap center">
<button class="btn btn-info show-logs"
data-toggle="modal" data-target="#modal"
data-gateway-id="<?php echo $item->id ?>">
<?php echo JText::_('COM_JEA_LOGS') ?>
</button>
</td>
<td width="5%" class="nowrap center">
<?php echo $item->provider ?>
</td>
<td class="hidden-phone">
<?php echo (int) $item->id ?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php echo $this->pagination->getListFooter() ?>
<div>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="type"
value="<?php echo
$this->state->get('filter.type')?>" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="filter_order"
value="<?php echo $listOrder ?>" />
<input type="hidden" name="filter_order_Dir"
value="<?php echo $listDirection ?>" />
<?php echo JHtml::_('form.token') ?>
</div>
</form>
</div>
<?php ob_start()?>
<p>
<a class="ajax-refresh-logs" href="<?php echo
JRoute::_('index.php?option=com_jea&task=gateway.getLogs&id=')
?>">
<?php echo JText::_('JGLOBAL_HELPREFRESH_BUTTON') ?>
</a> |
<a class="ajax-refresh-logs" href="<?php echo
JRoute::_('index.php?option=com_jea&task=gateway.deleteLogs&id=')
?>" id="delete_logs">
<?php echo JText::_('JACTION_DELETE') ?>
</a> |
<a href="<?php echo
JRoute::_('index.php?option=com_jea&task=gateway.downloadLogs&id=')
?>" id="download_logs">
<?php echo JText::_('COM_JEA_DOWNLOAD') ?>
</a>
</p>
<pre id="logs"></pre>
<?php
$modalBody = ob_get_contents();
ob_end_clean();
echo JHtml::_('bootstrap.renderModal', 'modal',
array('title' => JText::_('COM_JEA_LOGS')),
$modalBody);
?>
PK\��[jOn
views/gateways/tmpl/export.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewGateways
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar?>
</div>
<div id="j-main-container" class="span10">
<?php echo JLayoutHelper::render('jea.gateways.nav',
array('action' => 'export', 'view' =>
'console')) ?>
<?php echo JLayoutHelper::render('jea.gateways.consoles',
array('action' => 'export')) ?>
</div>PK\��[�L珥�views/gateways/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* Gateways View
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewGateways extends JViewLegacy
{
/**
* The user object
*
* @var JUser
*/
protected $user;
/**
* Array of database records
*
* @var Jobject[]
*/
protected $items;
/**
* The pagination object
*
* @var JPagination
*/
protected $pagination;
/**
* The model state
*
* @var Jobject
*/
protected $state;
/**
* The sidebar output
*
* @var string
*/
protected $sidebar = '';
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
JeaHelper::addSubmenu('tools');
$this->state = $this->get('State');
$this->sidebar = JHtmlSidebar::render();
$title = JText::_('COM_JEA_GATEWAYS');
switch ($this->_layout)
{
case 'export':
$title = JText::_('COM_JEA_EXPORT');
JToolBarHelper::back('JTOOLBAR_BACK',
'index.php?option=com_jea&view=tools');
break;
case 'import':
$title = JText::_('COM_JEA_IMPORT');
JToolBarHelper::back('JTOOLBAR_BACK',
'index.php?option=com_jea&view=tools');
break;
default:
$this->user = JFactory::getUser();
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
JToolBarHelper::addNew('gateway.add');
JToolBarHelper::editList('gateway.edit');
JToolBarHelper::publish('gateways.publish',
'JTOOLBAR_PUBLISH', true);
JToolBarHelper::unpublish('gateways.unpublish',
'JTOOLBAR_UNPUBLISH', true);
JToolBarHelper::deleteList(JText::_('COM_JEA_MESSAGE_CONFIRM_DELETE'),
'gateways.delete');
}
JToolBarHelper::title($title, 'jea');
parent::display($tpl);
}
}
PK\��[D7�z��views/about/tmpl/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewAbout
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
?>
<?php if (!empty($this->sidebar)) : ?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar; ?>
</div>
<?php endif ?>
<div id="j-main-container" class="span10">
<?php echo JHtml::_('bootstrap.startTabSet',
'aboutTab', array('active' => 'pan1'))
?>
<?php echo JHtml::_('bootstrap.addTab', 'aboutTab',
'pan1', JText::_('COM_JEA_ABOUT')) ?>
<div class="row-fluid">
<div class="span2">
<img src="../media/com_jea/images/logo.png"
alt="logo.png" />
</div>
<div class="span10">
<p>
<strong>Joomla Estate Agency <?php echo $this->getVersion()
?> </strong>
</p>
<p>
<a href="http://jea.sphilip.com/"
target="_blank"><?php echo
JText::_('COM_JEA_PROJECT_HOME') ?></a>
</p>
<p>
<a href="http://jea.sphilip.com/forum/"
target="_blank"><?php echo
JText::_('COM_JEA_FORUM') ?></a>
</p>
<p>
<a
href="https://github.com/JoomlaEstateAgency/com_jea/wiki/"
target="_blank"><?php echo
JText::_('COM_JEA_DOCUMENTATION') ?></a>
</p>
<p>
<?php echo JText::_('COM_JEA_MAIN_DEVELOPER') ?> :
<a href="http://www.sphilip.com"
target="_blank">Sylvain Philip</a><br />
<?php echo JText::_('COM_JEA_CREDITS') ?> : <a
href="https://twitter.com/#!/phproberto"
target="_blank">Roberto Segura</a>
</p>
</div>
</div>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php echo JHtml::_('bootstrap.addTab', 'aboutTab',
'pan2', JText::_('COM_JEA_LICENCE')) ?>
<pre>
<?php require JPATH_COMPONENT . '/LICENCE.txt' ?>
</pre>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php echo JHtml::_('bootstrap.addTab', 'aboutTab',
'pan3', JText::_('COM_JEA_VERSIONS')) ?>
<pre>
<?php require JPATH_COMPONENT . '/NEWS.txt' ?>
</pre>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php echo JHtml::_('bootstrap.endTabSet') ?>
</div>
PK\��[��<nnviews/about/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* JEA about view.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewAbout extends JViewLegacy
{
/**
* The sidebar output
*
* @var string
*/
protected $sidebar = '';
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
JeaHelper::addSubmenu('about');
JToolbarHelper::title('Joomla Estate Agency', 'jea');
$canDo = JeaHelper::getActions();
if ($canDo->get('core.admin'))
{
JToolBarHelper::preferences('com_jea');
}
$this->sidebar = JHtmlSidebar::render();
parent::display($tpl);
}
/**
* Get version of JEA
*
* @return string
*/
protected function getVersion()
{
if (is_file(JPATH_COMPONENT . '/jea.xml'))
{
$xml = simplexml_load_file(JPATH_COMPONENT . '/jea.xml');
return $xml->version;
}
return '';
}
}
PK\��[/vo��views/features/tmpl/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewFeatures
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
JHtml::_('behavior.multiselect');
$count = 0;
?>
<form action="<?php echo
JRoute::_('index.php?option=com_jea&view=properties')
?>" method="post" name="adminForm"
id="adminForm" enctype="multipart/form-data">
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar; ?>
</div>
<div id="j-main-container" class="span10">
<table class="table table-striped">
<thead>
<tr>
<th width="1%" class="center">
<?php echo JHtml::_('grid.checkall') ?>
</th>
<th width="60%">
<?php echo
JText::_('COM_JEA_HEADING_FEATURES_LIST_NAME') ?>
</th>
<th width="39%" class="center">
<?php echo
JText::_('COM_JEA_HEADING_FEATURES_IMPORT_CSV') ?>
</th>
</tr>
</thead>
<tbody>
<?php foreach ($this->items as $i => $item) : $count++ ?>
<tr class="row<?php echo $count % 2 ?>">
<td>
<?php echo JHtml::_('grid.id', $i, $item->name) ?>
</td>
<td>
<a href="<?php echo
JRoute::_('index.php?option=com_jea&view=featurelist&feature='.$item->name)
?>">
<?php echo
JText::_(JString::strtoupper("com_jea_list_of_{$item->name}_title"))
?>
</a>
</td>
<td class="center">
<input type="file" name="csv[<?php echo
$item->name ?>]" value="" size="20" />
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<div>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="boxchecked"
value="0" />
<?php echo JHtml::_('form.token') ?>
</div>
</div>
</form>
PK\��[[�J���views/features/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* View to manage all features tables.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewFeatures extends JViewLegacy
{
/**
* Array of managed features
*
* @var stdClass[]
*/
protected $items;
/**
* The model state
*
* @var Jobject
*/
protected $state;
/**
* The sidebar output
*
* @var string
*/
protected $sidebar = '';
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
$this->items = $this->get('Items');
$this->state = $this->get('State');
JeaHelper::addSubmenu('features');
$this->addToolbar();
$this->sidebar = JHtmlSidebar::render();
parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*/
protected function addToolbar()
{
$canDo = JeaHelper::getActions();
JToolBarHelper::title(JText::_('COM_JEA_FEATURES_MANAGEMENT'),
'jea');
if ($canDo->get('core.manage'))
{
JToolBarHelper::custom('features.import',
'database', '', 'Import', false);
}
JToolBarHelper::custom('features.export', 'download',
'', 'Export', false);
if ($canDo->get('core.admin'))
{
JToolBarHelper::divider();
JToolBarHelper::preferences('com_jea');
}
}
}
PK\��[�y�v��views/feature/tmpl/edit.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewFeature
*/
$app = JFactory::getApplication();
JHtml::_('formbehavior.chosen', 'select');
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
?>
<form action="<?php echo
JRoute::_('index.php?option=com_jea&layout=edit&id='.(int)
$this->item->id) ?>"
method="post" name="adminForm"
id="adminForm" class="form-validate">
<div class="form-horizontal">
<?php foreach ($this->form->getFieldset('feature') as
$field): ?>
<?php echo $field->renderField() ?>
<?php endforeach ?>
</div>
<div>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="feature"
value="<?php echo
$this->state->get('feature.name')?>" />
<input type="hidden" name="return"
value="<?php echo $app->input->getCmd('return')
?>" />
<?php echo JHtml::_('form.token') ?>
</div>
</form>
PK\��[zӓviews/feature/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* View to edit a feature.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewFeature extends JViewLegacy
{
/**
* The form object
*
* @var JForm
*/
protected $form;
/**
* The database record
*
* @var JObject|boolean
*/
protected $item;
/**
* The model state
*
* @var JObject
*/
protected $state;
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
$this->form = $this->get('Form');
$this->item = $this->get('Item');
$this->state = $this->get('State');
$this->addToolbar();
parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*/
protected function addToolbar()
{
JFactory::getApplication()->input->set('hidemainmenu',
true);
$canDo = JeaHelper::getActions();
$title = $this->item->id ? JText::_('JACTION_EDIT') .
' ' . $this->escape($this->item->value) :
JText::_('JACTION_CREATE');
JToolBarHelper::title($title, 'jea');
// For new records, check the create permission.
if ($canDo->get('core.create'))
{
JToolBarHelper::apply('feature.apply');
JToolBarHelper::save('feature.save');
JToolBarHelper::save2new('feature.save2new');
}
JToolBarHelper::cancel('feature.cancel');
}
}
PK\��[h�xOO!views/properties/tmpl/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewProperties
*/
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirection =
$this->escape($this->state->get('list.direction'));
$saveOrder = $listOrder == 'p.ordering';
if ($saveOrder)
{
$saveOrderingUrl =
'index.php?option=com_jea&task=properties.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'propertiesList',
'adminForm', strtolower($listDirection), $saveOrderingUrl);
}
?>
<form action="<?php echo
JRoute::_('index.php?option=com_jea&view=properties')
?>" method="post" name="adminForm"
id="adminForm">
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar ?>
</div>
<div id="j-main-container" class="span10">
<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this)) ?>
<?php if (empty($this->items)) : ?>
<div class="alert alert-no-items">
<?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
</div>
<?php else : ?>
<table class="table table-striped"
id="propertiesList">
<thead>
<tr>
<th width="1%" class="nowrap center
hidden-phone">
<?php echo JHtml::_('searchtools.sort', '',
'p.ordering', $listDirection, $listOrder, null, 'asc',
'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?>
</th>
<th width="1%" class="center">
<?php echo JHtml::_('grid.checkall') ?>
</th>
<th width="10%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'COM_JEA_FIELD_REF_LABEL', 'p.ref', $listDirection ,
$listOrder ) ?>
</th>
<th class="nowrap">
<?php echo JText::_('COM_JEA_FIELD_PROPERTY_TYPE_LABEL')
?>
</th>
<th width="27%" class="nowrap">
<?php echo JText::_('COM_JEA_FIELD_ADDRESS_LABEL') ?>
</th>
<th width="10%" class="nowrap">
<?php echo JText::_('COM_JEA_FIELD_TOWN_LABEL') ?>
</th>
<th width="10%" class="nowrap">
<?php echo JText::_('COM_JEA_FIELD_DEPARTMENT_LABEL')
?>
</th>
<th width="10%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'COM_JEA_FIELD_PRICE_LABEL', 'p.price', $listDirection
, $listOrder ) ?>
</th>
<th width="1%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JFEATURED', 'p.featured', $listDirection , $listOrder
) ?>
</th>
<th width="1%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JSTATUS', 'p.published', $listDirection , $listOrder )
?>
</th>
<th width="5%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ACCESS', 'access_level', $listDirection,
$listOrder); ?>
</th>
<th width="10%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_CREATED_BY', 'author', $listDirection ,
$listOrder ) ?>
</th>
<th width="5%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JDATE', 'p.created', $listDirection , $listOrder )
?>
</th>
<th width="1%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGLOBAL_HITS', 'p.hits', $listDirection , $listOrder )
?>
</th>
<th width="5%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_LANGUAGE', 'language', $listDirection,
$listOrder); ?>
</th>
<th width="1%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ID', 'p.id', $listDirection , $listOrder
) ?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="16"></td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<?php
$canEdit = $this->user->authorise('core.edit',
'com_jea.property.'.$item->id);
$canCheckin = $this->user->authorise('core.manage',
'com_checkin') || $item->checked_out == $this->user->id
|| $item->checked_out == 0;
$canEditOwn = $this->user->authorise('core.edit.own',
'com_jea.property.'.$item->id) && $item->created_by
== $this->user->id;
$canChange = $this->user->authorise('core.edit.state',
'com_jea.property.'.$item->id) && $canCheckin;
?>
<tr class="row<?php echo $i % 2 ?>">
<td class="order nowrap center hidden-phone">
<?php
$iconClass = '';
if (!$canChange)
{
$iconClass = ' inactive';
}
elseif (!$saveOrder)
{
$iconClass = ' inactive tip-top hasTooltip"
title="' . JHtml::_('tooltipText',
'JORDERINGDISABLED');
}
?>
<span class="sortable-handler<?php echo $iconClass
?>">
<span class="icon-menu"
aria-hidden="true"></span>
</span>
<?php if ($canChange && $saveOrder) : ?>
<input type="text" style="display:none"
name="order[]" size="5" value="<?php echo
$item->ordering; ?>" class="width-20 text-area-order"
/>
<?php endif; ?>
</td>
<td class="center">
<?php echo JHtml::_('grid.id', $i, $item->id) ?>
</td>
<td class="has-context">
<?php if ($item->checked_out) : ?>
<?php echo JHtml::_('jgrid.checkedout', $i,
$item->author, $item->checked_out_time, 'properties.',
$canCheckin); ?>
<?php endif ?>
<?php if ($canEdit || $canEditOwn) : ?>
<a href="<?php echo
JRoute::_('index.php?option=com_jea&task=property.edit&id='.(int)
$item->id); ?>">
<?php echo $this->escape($item->ref); ?>
</a>
<?php else : ?>
<?php echo $this->escape($item->ref); ?>
<?php endif ?>
</td>
<td>
<?php echo $this->escape( $item->type ) ?>
</td>
<td>
<?php echo $this->escape( $item->address ) ?>
</td>
<td>
<?php echo $this->escape( $item->town ) ?>
</td>
<td class="left nowrap">
<?php echo $this->escape( $item->department ) ?>
</td>
<td class="right">
<?php echo $item->price ?> <?php echo
$this->params->get('currency_symbol',
'€') ?>
<?php if ($item->transaction_type == 'RENTING') echo
JText::_('COM_JEA_PRICE_PER_FREQUENCY_'.
$item->rate_frequency) ?>
</td>
<td class="center">
<?php echo JHtml::_('contentadministrator.featured',
$item->featured, $i, $canChange) ?>
</td>
<td class="center">
<?php echo JHtml::_('jgrid.published',
$item->published, $i, 'properties.', $canChange,
'cb', $item->publish_up, $item->publish_down) ?>
</td>
<td class="center">
<?php echo $this->escape($item->access_level); ?>
</td>
<td>
<?php if ( $this->user->authorise( 'com_users',
'manage' ) ): ?>
<a href="<?php echo JRoute::_(
'index.php?option=com_users&task=user.edit&id='.
$item->created_by ) ?>" title="<?php echo
JText::_('COM_JEA_EDIT_USER') ?> ">
<?php echo $this->escape( $item->author ) ?>
</a>
<?php else : echo $this->escape( $item->author ) ?>
<?php endif ?>
</td>
<td class="center">
<?php echo JHtml::_('date', $item->created,
JText::_('DATE_FORMAT_LC4')) ?>
</td>
<td class="center"><?php echo $item->hits
?></td>
<td class="center">
<?php if ($item->language=='*'): ?>
<?php echo JText::alt('JALL', 'language')
?>
<?php else: ?>
<?php echo $item->language_title ?
$this->escape($item->language_title) :
JText::_('JUNDEFINED') ?>
<?php endif ?>
</td>
<td class="center">
<?php echo $item->id ?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php echo $this->pagination->getListFooter() ?>
<?php endif ?>
<div>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="boxchecked"
value="0" />
<?php echo JHtml::_('form.token') ?>
</div>
</div>
</form>
PK\��[YG��views/properties/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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 list View.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewProperties extends JViewLegacy
{
/**
* The component parameters
*
* @var Joomla\Registry\Registry
*/
protected $params;
/**
* The user object
*
* @var JUser
*/
protected $user;
/**
* Array of database records
*
* @var Jobject[]
*/
protected $items;
/**
* The pagination object
*
* @var JPagination
*/
protected $pagination;
/**
* The model state
*
* @var Jobject
*/
protected $state;
/**
* The sidebar output
*
* @var string
*/
protected $sidebar = '';
/**
* The form object for search filters
*
* @var JForm
*/
public $filterForm;
/**
* The active search filters
*
* @var array
*/
public $activeFilters;
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
$this->params = JComponentHelper::getParams('com_jea');
JeaHelper::addSubmenu('properties');
$this->user = JFactory::getUser();
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->sidebar = JHtmlSidebar::render();
$this->addToolbar();
parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*/
protected function addToolbar()
{
$canDo = JeaHelper::getActions();
JToolBarHelper::title(JText::_('COM_JEA_PROPERTIES_MANAGEMENT'),
'jea');
if ($canDo->get('core.create'))
{
JToolBarHelper::addNew('property.add');
JToolBarHelper::custom('properties.copy',
'copy.png', 'copy_f2.png', 'COM_JEA_COPY');
}
if (($canDo->get('core.edit')) ||
($canDo->get('core.edit.own')))
{
JToolBarHelper::editList('property.edit');
}
if ($canDo->get('core.edit.state'))
{
JToolBarHelper::divider();
JToolBarHelper::publish('properties.publish',
'JTOOLBAR_PUBLISH', true);
JToolBarHelper::unpublish('properties.unpublish',
'JTOOLBAR_UNPUBLISH', true);
JToolBarHelper::custom('properties.featured',
'featured.png', 'featured_f2.png',
'JFEATURED', true);
}
if ($canDo->get('core.delete'))
{
JToolBarHelper::divider();
JToolBarHelper::deleteList(JText::_('COM_JEA_MESSAGE_CONFIRM_DELETE'),
'properties.delete');
}
if ($canDo->get('core.admin'))
{
JToolBarHelper::divider();
JToolBarHelper::preferences('com_jea');
}
}
}
PK]��[Fx�9��"views/featurelist/tmpl/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewFeaturelist
*/
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirection =
$this->escape($this->state->get('list.direction'));
$saveOrder = $listOrder == 'f.ordering';
if ($saveOrder)
{
$saveOrderingUrl =
'index.php?option=com_jea&task=featurelist.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'featureList',
'adminForm', strtolower($listDirection), $saveOrderingUrl);
}
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
?>
<form action="<?php echo
JRoute::_('index.php?option=com_jea&view=featurelist')
?>" method="post" name="adminForm"
id="adminForm">
<?php if (!empty( $this->sidebar)) : ?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar ?>
</div>
<?php endif ?>
<div id="j-main-container" class="span10">
<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this)) ?>
<?php if (empty($this->items)) : ?>
<div class="alert alert-no-items">
<?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
</div>
<?php else : ?>
<table class="table table-striped"
id="featureList">
<thead>
<tr>
<th width="1%" class="nowrap center
hidden-phone">
<?php echo JHtml::_('searchtools.sort', '',
'f.ordering', $listDirection, $listOrder, null, 'asc',
'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?>
</th>
<th width="1%">
<?php echo JHtml::_('grid.checkall'); ?>
</th>
<th width="88%">
<?php echo JHTML::_('searchtools.sort',
'COM_JEA_FIELD_'.$this->state->get('feature.name').'_LABEL',
'f.value', $listDirection , $listOrder ) ?>
</th>
<?php if ($this->state->get('language_enabled')):
?>
<th width="5%" class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_LANGUAGE', 'l.title', $listDirection,
$listOrder); ?>
</th>
<?php endif ?>
<th width="5%" class="nowrap">
<?php echo JHTML::_('searchtools.sort',
'JGRID_HEADING_ID', 'f.id', $listDirection , $listOrder
) ?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="<?php echo
$this->state->get('language_enabled') ? 5: 4
?>"></td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<?php
$canEdit = $this->user->authorise('core.edit');
$canChange = $this->user->authorise('core.edit.state');
?>
<tr class="row<?php echo $i % 2 ?>">
<td class="order nowrap center hidden-phone">
<?php
$iconClass = '';
if (!$canChange)
{
$iconClass = ' inactive';
}
elseif (!$saveOrder)
{
$iconClass = ' inactive tip-top hasTooltip"
title="' . JHtml::_('tooltipText',
'JORDERINGDISABLED');
}
?>
<span class="sortable-handler<?php echo $iconClass
?>">
<span class="icon-menu"
aria-hidden="true"></span>
</span>
<?php if ($canChange && $saveOrder) : ?>
<input type="text" style="display:none"
name="order[]" size="5" value="<?php echo
$item->ordering ?>" class="width-20 text-area-order"
/>
<?php endif ?>
</td>
<td class="center">
<?php echo JHtml::_('grid.id', $i, $item->id) ?>
</td>
<td>
<?php if ($canEdit) : ?>
<a href="<?php echo
JRoute::_('index.php?option=com_jea&task=feature.edit&id='.(int)
$item->id . '&feature='.
$this->state->get('feature.name')); ?>">
<?php echo $this->escape($item->value) ?>
</a>
<?php else : ?>
<?php echo $this->escape($item->value) ?>
<?php endif ?>
</td>
<?php if ($this->state->get('language_enabled')):
?>
<td>
<?php if ($item->language == '*'): ?>
<?php echo JText::alt('JALL', 'language')
?>
<?php else: ?>
<?php echo $item->language_title ?
$this->escape($item->language_title) :
JText::_('JUNDEFINED') ?>
<?php endif ?>
</td>
<?php endif ?>
<td class="center"><?php echo $item->id
?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php echo $this->pagination->getListFooter() ?>
<?php endif ?>
</div>
<div>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="boxchecked"
value="0" />
<input type="hidden" name="feature"
value="<?php echo
$this->state->get('feature.name')?>" />
<?php echo JHtml::_('form.token') ?>
</div>
</form>
PK]��[��} } views/featurelist/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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\String\StringHelper;
/**
* View to manage a feature list.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewFeaturelist extends JViewLegacy
{
/**
* The user object
*
* @var JUser
*/
protected $user;
/**
* Array of database records
*
* @var Jobject[]
*/
protected $items;
/**
* The pagination object
*
* @var JPagination
*/
protected $pagination;
/**
* The model state
*
* @var Jobject
*/
protected $state;
/**
* The sidebar output
*
* @var string
*/
protected $sidebar = '';
/**
* The form object for search filters
*
* @var JForm
*/
public $filterForm;
/**
* The active search filters
*
* @var array
*/
public $activeFilters;
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
JeaHelper::addSubmenu('features');
$this->user = JFactory::getUser();
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->sidebar = JHtmlSidebar::render();
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->addToolbar();
parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*/
protected function addToolbar()
{
$canDo = JeaHelper::getActions();
$feature = $this->state->get('feature.name');
JToolBarHelper::title(JText::_(StringHelper::strtoupper("com_jea_list_of_{$feature}_title")),
'jea');
if ($canDo->get('core.create'))
{
JToolBarHelper::addNew('feature.add');
}
if ($canDo->get('core.edit'))
{
JToolBarHelper::editList('feature.edit');
}
if ($canDo->get('core.delete'))
{
JToolBarHelper::divider();
JToolBarHelper::deleteList(JText::_('COM_JEA_MESSAGE_CONFIRM_DELETE'),
'featurelist.delete');
}
}
}
PK]��[���9}}views/tools/tmpl/default.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
/**
* @var $this JeaViewTools
*/
?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar ?>
</div>
<div id="j-main-container" class="span10">
<div class="cpanel"><?php echo
$this->getIcons()?></div>
</div>
PK]��[:Ph�BBviews/tools/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* JEA tools view.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewTools extends JViewLegacy
{
/**
* The sidebar output
*
* @var string
*/
protected $sidebar = '';
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
JeaHelper::addSubmenu('tools');
JToolBarHelper::title(JText::_('COM_JEA_TOOLS'),
'jea');
$canDo = JeaHelper::getActions();
if ($canDo->get('core.admin'))
{
JToolBarHelper::preferences('com_jea');
}
$this->sidebar = JHtmlSidebar::render();
parent::display($tpl);
}
/**
* Return tools icons.
*
* @return array An array of icons
*/
protected function getIcons()
{
$buttons = JeaHelper::getToolsIcons();
foreach ($buttons as $button)
{
if (! empty($button['name']))
{
$styleSheet = 'media/com_jea/' . $button['name'] .
'/styles.css';
if (file_exists(JPATH_ROOT . '/' . $styleSheet))
{
JHtml::stylesheet($styleSheet);
}
}
}
return JHtml::_('icons.buttons', $buttons);
}
}
PK]��[}!-8''views/property/tmpl/edit.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* @var $this JeaViewProperty
*/
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin( 'jea' );
JHtml::_('behavior.framework');
JHtml::stylesheet('media/com_jea/css/jea.admin.css');
JHtml::script('media/com_jea/js/property.form.js');
JHtml::_('behavior.keepalive');
JHtml::_('behavior.tabstate');
JHtml::_('formbehavior.chosen', 'select');
?>
<div id="ajaxupdating">
<h3><?php echo
JText::_('COM_JEA_FEATURES_UPDATED_WARNING')?></h3>
</div>
<form action="<?php echo
JRoute::_('index.php?option=com_jea&layout=edit&id='.(int)
$this->item->id) ?>" method="post"
id="adminForm"
class="form-validate"
enctype="multipart/form-data">
<div class="form-inline form-inline-header">
<?php echo $this->form->renderField('title') ?>
<?php echo $this->form->renderField('ref') ?>
<?php echo $this->form->renderField('alias') ?>
</div>
<div class="form-horizontal">
<?php echo JHtml::_('bootstrap.startTabSet',
'propertyTab', array('active' =>
'general')) ?>
<?php echo JHtml::_('bootstrap.addTab',
'propertyTab', 'general',
JText::_('COM_JEA_CONFIG_GENERAL')) ?>
<div class="row-fluid">
<div class="span8">
<fieldset class="adminform">
<?php echo
$this->form->renderField('transaction_type') ?>
<?php echo $this->form->renderField('type_id')
?>
<?php echo $this->form->renderField('description')
?>
</fieldset>
</div>
<div class="span4">
<fieldset class="form-vertical">
<?php echo $this->form->renderField('published')
?>
<?php echo $this->form->renderField('featured')
?>
<?php echo $this->form->renderField('access') ?>
<?php echo $this->form->renderField('language')
?>
<?php echo $this->form->renderField('slogan_id')
?>
</fieldset>
<?php echo JHtml::_('sliders.start',
'property-sliders', array('useCookie'=>1)) ?>
<?php $dispatcher->trigger('onAfterStartPanels',
array(&$this->item)) ?>
<?php echo JHtml::_('sliders.panel',
JText::_('COM_JEA_PICTURES'), 'picture-pane') ?>
<fieldset>
<?php echo $this->form->getInput('images') ?>
</fieldset>
<?php echo JHtml::_('sliders.panel',
JText::_('COM_JEA_NOTES'), 'note-pane') ?>
<fieldset class="form-vertical panelform">
<?php echo $this->form->renderField('notes') ?>
</fieldset>
<?php $dispatcher->trigger('onBeforeEndPanels',
array(&$this->item)) ?>
<?php echo JHtml::_('sliders.end') ?>
</div>
</div>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php echo JHtml::_('bootstrap.addTab',
'propertyTab', 'details',
JText::_('COM_JEA_DETAILS')) ?>
<div class="row-fluid">
<div class="span4">
<fieldset>
<legend><?php echo
JText::_('COM_JEA_FINANCIAL_INFORMATIONS')?></legend>
<?php foreach
($this->form->getFieldset('financial_informations') as
$field) echo $field->renderField() ?>
</fieldset>
<fieldset class="advantages">
<legend><?php echo
JText::_('COM_JEA_AMENITIES')?></legend>
<?php echo $this->form->getInput('amenities')
?>
</fieldset>
</div>
<div class="span4">
<fieldset>
<legend><?php echo
JText::_('COM_JEA_LOCALIZATION')?></legend>
<?php foreach
($this->form->getFieldset('localization') as $field) echo
$field->renderField() ?>
</fieldset>
</div>
<div class="span4">
<fieldset>
<?php foreach ($this->form->getFieldset('details')
as $field) echo $field->renderField() ?>
</fieldset>
</div>
</div>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php echo JHtml::_('bootstrap.addTab',
'propertyTab', 'publication',
JText::_('COM_JEA_PUBLICATION_INFO')) ?>
<?php foreach
($this->form->getFieldset('publication') as $field) echo
$field->renderField() ?>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php if ($this->canDo->get('core.admin')): ?>
<?php echo JHtml::_('bootstrap.addTab',
'propertyTab', 'permissions',
JText::_('COM_JEA_FIELDSET_RULES')) ?>
<?php echo $this->form->getInput('rules') ?>
<?php echo JHtml::_('bootstrap.endTab') ?>
<?php endif ?>
<?php echo JHtml::_('bootstrap.endTabSet'); ?>
</div>
<div>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="return"
value="<?php echo
JFactory::getApplication()->input->getCmd('return')
?>" />
<?php echo JHtml::_('form.token') ?>
</div>
</form>
PK]��[������views/property/view.html.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
/**
* View to edit property.
*
* @package Joomla.Administrator
* @subpackage com_jea
*
* @since 2.0
*/
class JeaViewProperty extends JViewLegacy
{
/**
* The form object
*
* @var JForm
*/
protected $form;
/**
* The database record
*
* @var JObject|boolean
*/
protected $item;
/**
* The model state
*
* @var JObject
*/
protected $state;
/**
* The actions the user is authorised to perform
*
* @var JObject
*/
protected $canDo;
/**
* Overrides parent method.
*
* @param string $tpl The name of the template file to parse.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @see JViewLegacy::display()
*/
public function display($tpl = null)
{
$this->form = $this->get('Form');
$this->item = $this->get('Item');
$this->state = $this->get('State');
$this->canDo = JeaHelper::getActions($this->item->id);
$this->addToolbar();
parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*/
protected function addToolbar()
{
JFactory::getApplication()->input->set('hidemainmenu',
true);
$user = JFactory::getUser();
$isNew = ($this->item->id == 0);
$checkedOut = ! ($this->item->checked_out == 0 ||
$this->item->checked_out == $user->id);
$title = JText::_('COM_JEA_PROPERTIES_MANAGEMENT') . ' :
';
$title .= $isNew ? JText::_('JACTION_CREATE') :
JText::_('JACTION_EDIT');
JToolBarHelper::title($title, 'jea');
// Built the actions for new and existing records.
// For new records, check the create permission.
if ($isNew && ($this->canDo->get('core.create')))
{
JToolBarHelper::apply('property.apply');
JToolBarHelper::save('property.save');
JToolBarHelper::save2new('property.save2new');
JToolBarHelper::cancel('property.cancel');
}
else
{
// Can't save the record if it's checked out.
if (! $checkedOut)
{
// Since it's an existing record, check the edit permission, or
// fall back to edit own if the owner.
if ($this->canDo->get('core.edit') ||
($this->canDo->get('core.edit.own') &&
$this->item->created_by == $user->id))
{
JToolBarHelper::apply('property.apply');
JToolBarHelper::save('property.save');
// We can save this record, but check the create permission
// to see if we can return to make a new one.
if ($this->canDo->get('core.create'))
{
JToolBarHelper::save2new('property.save2new');
}
}
}
// If checked out, we can still save
if ($this->canDo->get('core.create'))
{
JToolBarHelper::save2copy('property.save2copy');
}
JToolBarHelper::cancel('property.cancel',
'JTOOLBAR_CLOSE');
}
}
}
PK]��[��szz
access.xmlnu�[���<?xml version="1.0"
encoding="utf-8"?>
<access component="com_jea">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
<action name="core.create" title="JACTION_CREATE"
description="JACTION_CREATE_COMPONENT_DESC" />
<action name="core.delete" title="JACTION_DELETE"
description="JACTION_DELETE_COMPONENT_DESC" />
<action name="core.edit" title="JACTION_EDIT"
description="JACTION_EDIT_COMPONENT_DESC" />
<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="JACTION_EDITSTATE_COMPONENT_DESC" />
<action name="core.edit.own"
title="JACTION_EDITOWN"
description="JACTION_EDITOWN_COMPONENT_DESC" />
</section>
<section name="property">
<action name="core.delete" title="JACTION_DELETE"
description="COM_JEA_ACCESS_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT"
description="COM_JEA_ACCESS_EDIT_DESC" />
<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="COM_JEA_ACCESS_EDITSTATE_DESC" />
</section>
</access>PK]��[�����%�%
config.xmlnu�[���<?xml version="1.0"
encoding="utf-8"?>
<config>
<fieldset name="general"
label="COM_JEA_CONFIG_GENERAL">
<field
name="surface_measure"
type="list"
default=""
label="COM_JEA_FIELD_SURFACE_UNIT_LABEL"
description="COM_JEA_FIELD_SURFACE_UNIT_DESC"
>
<option value="m²">m²</option>
<option value="Sq. Ft.">Sq. Ft.</option>
</field>
<field
name="currency_symbol"
type="text"
size="5"
default="€"
label="COM_JEA_FIELD_CURRENCY_SYMBOL_LABEL"
description=""
/>
<field
name="symbol_position"
type="list"
default="1"
label="COM_JEA_FIELD_SYMBOL_POSITION_LABEL"
description="COM_JEA_FIELD_SYMBOL_POSITION_DESC"
>
<option
value="0">COM_JEA_OPTION_BEFORE_PRICE</option>
<option
value="1">COM_JEA_OPTION_AFTER_PRICE</option>
</field>
<field
name="thousands_separator"
type="text"
size="1"
default=" "
label="COM_JEA_FIELD_THOUSANDS_SEPARATOR_LABEL"
description="COM_JEA_FIELD_THOUSANDS_SEPARATOR_DESC"
/>
<field
name="decimals_separator"
type="text"
size="1"
default=","
label="COM_JEA_FIELD_DECIMALS_SEPARATOR_LABEL"
description="COM_JEA_FIELD_DECIMALS_SEPARATOR_DESC"
/>
<field
name="decimals_number"
type="text"
size="1"
default="0"
label="COM_JEA_FIELD_DECIMALS_NUMBER_LABEL"
description="COM_JEA_FIELD_DECIMALS_NUMBER_DESC"
/>
<field
name="relationship_dpts_towns_area"
type="radio"
default="1"
label="COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_LABEL"
description="COM_JEA_FIELD_LOCALIZATION_FEATURES_RELATIONSHIP_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
</fieldset>
<fieldset name="lists"
label="COM_JEA_CONFIG_LIST">
<field
name="orderby"
type="list"
default="date_insert"
label="COM_JEA_FIELD_PRIMARY_ORDER_LABEL"
description="COM_JEA_FIELD_PRIMARY_ORDER_DESC"
>
<option
value="created">JGLOBAL_FIELD_CREATED_LABEL</option>
<option
value="price">COM_JEA_FIELD_PRICE_LABEL</option>
<option
value="living_space">COM_JEA_FIELD_LIVING_SPACE_LABEL</option>
<option
value="land_space">COM_JEA_FIELD_LAND_SPACE_LABEL</option>
<option value="hits">JGLOBAL_HITS</option>
<option
value="ordering">JFIELD_ORDERING_LABEL</option>
</field>
<field
name="orderby_direction"
type="list"
default="desc"
label="COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_LABEL"
description="COM_JEA_FIELD_PRIMARY_ORDER_DIRECTION_DESC"
>
<option
value="asc">COM_JEA_OPTION_ORDER_ASCENDING</option>
<option
value="desc">COM_JEA_OPTION_ORDER_DESCENDING</option>
</field>
<field
name="sort_date"
type="radio"
default="1"
label="COM_JEA_FIELD_SORT_BY_DATE_LABEL"
description="COM_JEA_FIELD_SORT_BY_DATE_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_price"
type="radio"
default="1"
label="COM_JEA_FIELD_SORT_BY_PRICE_LABEL"
description="COM_JEA_FIELD_SORT_BY_PRICE_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_livingspace"
type="radio"
default="0"
label="COM_JEA_FIELD_SORT_BY_LIVING_SPACE_LABEL"
description="COM_JEA_FIELD_SORT_BY_LIVING_SPACE_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_landspace"
type="radio"
default="0"
label="COM_JEA_FIELD_SORT_BY_LAND_SPACE_LABEL"
description="COM_JEA_FIELD_SORT_BY_LAND_SPACE_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_hits"
type="radio"
default="1"
label="COM_JEA_FIELD_SORT_BY_POPULARITY_LABEL"
description="COM_JEA_FIELD_SORT_BY_POPULARITY_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_towns"
type="radio"
default="0"
label="COM_JEA_FIELD_SORT_BY_TOWN_LABEL"
description="COM_JEA_FIELD_SORT_BY_TOWN_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_departements"
type="radio"
default="0"
label="COM_JEA_FIELD_SORT_BY_DEPARTMENT_LABEL"
description="COM_JEA_FIELD_SORT_BY_DEPARTMENT_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="sort_areas"
type="radio"
default="0"
label="COM_JEA_FIELD_SORT_BY_AREA_LABEL"
description="COM_JEA_FIELD_SORT_BY_AREA_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="list_limit"
type="text"
size="3"
default="10"
label="JGLOBAL_NUMBER_ITEMS_LIST_LABEL"
description="JGLOBAL_NUMBER_ITEMS_LIST_DESC"/>
</fieldset>
<fieldset name="property"
label="COM_JEA_CONFIG_PROPERTY">
<field
name="images_layout"
type="list"
default="magnificpopup"
label="COM_JEA_FIELD_IMAGES_LAYOUT_LABEL"
description="COM_JEA_FIELD_IMAGES_LAYOUT_DESC"
>
<option value="gallery">Classical</option>
<option value="squeezebox">SqueezeBox</option>
<option value="magnificpopup">Magnific
popup</option>
</field>
<field
name="gallery_orientation"
type="list"
default="vertical"
label="COM_JEA_FIELD_GALLERY_ORIENTATION_LABEL"
description="COM_JEA_FIELD_GALLERY_ORIENTATION_DESC"
>
<option value="horizontal">Horizontal</option>
<option value="vertical">Vertical</option>
</field>
<field
name="show_print_icon"
type="radio"
default="1"
label="COM_JEA_FIELD_PRINT_ICON_LABEL"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="show_creation_date"
type="radio"
default="1"
label="COM_JEA_FIELD_SHOW_CREATION_DATE_LABEL"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="show_googlemap"
type="radio"
default="0"
label="COM_JEA_FIELD_GOOGLE_MAP_LABEL"
description="COM_JEA_FIELD_GOOGLE_MAP_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="googlemap_api_key"
type="text"
default=""
label="COM_JEA_FIELD_GOOGLE_MAP_API_KEY_LABEL"
description="COM_JEA_FIELD_GOOGLE_MAP_API_KEY_DESC"/>
<field
type="note"
description="COM_JEA_FIELD_GOOGLE_MAP_API_KEY_MORE_INFO"/>
<field
name="show_contactform"
type="radio"
default="1"
label="COM_JEA_FIELD_CONTACT_FORM_LABEL"
description="COM_JEA_FIELD_CONTACT_FORM_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
<field
name="default_mail"
type="text"
default=""
label="COM_JEA_FIELD_DEFAULT_RECIPTIENT_LABEL"
description="COM_JEA_FIELD_DEFAULT_RECIPTIENT_DESC"/>
<field
name="send_form_to_agent"
type="radio"
default="0"
label="COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_LABEL"
description="COM_JEA_FIELD_SEND_MAIL_TO_AUTHOR_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="use_captcha"
type="radio"
default="1"
label="COM_JEA_FIELD_USE_CAPTCHA_LABEL"
description="COM_JEA_FIELD_USE_CAPTCHA_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
</fieldset>
<fieldset name="pictures"
label="COM_JEA_CONFIG_PICTURES">
<field
name="jpg_quality"
type="text"
size="3"
default="90"
label="COM_JEA_FIELD_THUMB_QUALITY_LABEL"
description="COM_JEA_FIELD_THUMB_QUALITY_DESC"
/>
<field
name="thumb_min_width"
type="text"
size="3"
default="120"
label="COM_JEA_FIELD_THUMB_MIN_WIDTH_LABEL"
description="COM_JEA_FIELD_THUMB_MIN_WIDTH_DESC"
/>
<field
name="thumb_min_height"
type="text"
size="3"
default="90"
label="COM_JEA_FIELD_THUMB_MIN_HEIGHT_LABEL"
description="COM_JEA_FIELD_THUMB_MIN_HEIGHT_DESC"
/>
<field
name="thumb_medium_width"
type="text"
size="3"
default="400"
label="COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_LABEL"
description="COM_JEA_FIELD_THUMB_MEDIUM_WIDTH_DESC"
/>
<field
name="thumb_medium_height"
type="text"
size="3"
default="400"
label="COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_LABEL"
description="COM_JEA_FIELD_THUMB_MEDIUM_HEIGHT_DESC"
/>
<field
name="crop_thumbnails"
type="radio"
default="0"
label="COM_JEA_FIELD_CROP_THUMBNAILS_LABEL"
description="COM_JEA_FIELD_CROP_THUMBNAILS_DESC"
class="btn-group btn-group-yesno"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="img_upload_number"
type="text"
size="3"
default="3"
label="COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_LABEL"
description="COM_JEA_FIELD_IMAGES_UPLOAD_NUMBER_DESC"
/>
</fieldset>
<fieldset name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC">
<field
name="rules"
type="rules"
label="JCONFIG_PERMISSIONS_LABEL"
class="inputbox"
validate="rules"
filter="rules"
component="com_jea"
section="component"
/>
</fieldset>
</config>
PK]��[!#y��jea.phpnu�[���<?php
/**
* This file is part of Joomla Estate Agency - Joomla! extension for real
estate agency
*
* @package Joomla.Administrator
* @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;
JLoader::register('JeaHelper', __DIR__ .
'/helpers/jea.php');
JLoader::register('JeaUpload', __DIR__ .
'/helpers/upload.php');
JLoader::register('JeaHelperUtility', __DIR__ .
'/helpers/utility.php');
$input = JFactory::getApplication()->input;
if ($input->getCmd('task') == '')
{
// In order to execute controllers/default.php as default controller and
display as default method
$input->set('task', 'default.display');
}
$controller = JControllerLegacy::getInstance('jea');
$controller->execute($input->getCmd('task'));
$controller->redirect();
PK]��[4%a3�E�ELICENCE.txtnu�[���GNU GENERAL PUBLIC
LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at
all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program",
below,
refers to any such program or work, and a "work based on the
Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as
"you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and
"any
later version", you have the option of following the terms and
conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free
Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is
found.
<one line to give the program's name and a brief idea of what it
does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show
w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the
appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could
even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program,
if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James
Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this
License.PK]��[���I*I*NEWS.txtnu�[���Joomla Estate
Agency News
==================================
RELEASE 3.5.1 / 02-2020=
# Fix date modified when saving property
# Fix property type when saving property
# Fix JeaUpload not found in frontend
# Fix warning in gateway
RELEASE 3.5.0 / 01-2020=
# Include Google map scripts using https
# Remove white spaces in images names
^ Backend enhancements
- Remove Mootools dependencies in frontend
+ Convert frontend scripts with Jquery
^ Ability to override medias (css, js) in template
+ Add Magnific popup gallery option in property view
^ CSS enhancements
RELEASE 3.4.3 / 12-2019=
# Fix gateways bugs
# Fix JEA gateway (import images)
# Fix Recaptcha
RELEASE 3.4.2 / 07-2017=
# Fix gateways bugs
# Fix thumbnails generation
RELEASE 3.4.1 / 05-2017=
# Fix gateways bugs
RELEASE 3.4 / 05-2017=
- Remove Joomla 2.5 support
# Fix pagination bug again
# Fix properties filters
+ Import/Export new implementation
^ Update translations
^ The component follows now the Joomla Coding Standards
# Fix Google map issues
RELEASE 3.3 / 06-2016=
# Fix pagination bug
^ Add a callback to save images
^ Modify how onBeforeSendContactForm is triggered
# Fix upload error on Joomla 3.5
# Fix search order and order direction
RELEASE 3.2 / 08-2014=
# Avoid that Joomla 3.x remove the end hyphen in html select lists
# Fix bug in getUserStateFromRequest method when GET method is used in
search form
^ Add the DPE in the frontend edit form
# Fix default option values in search.js
# Add slashes to Google Map marker's label
^ Add the onBeforeSearch event in the backend
# Fix js bug in searchmap : Since MooTools 1.3 the function $$ does not
accept multiple collections or multiple strings as arguments.
# Fix memory overconsumption with thumbnails generation [#33258]
RELEASE 3.1 / 01-2014=
^ Adding Joomla 3.x compatibility
^ Add search by ID in administrator
# Fix TableProperties for bridge compatibility
# Sort property types in AJAX response
# Fix JS issue with filter on transaction type in geoSearch.js
^ Add two plugin events : onBeforeSaveProperty and onAfterSaveProperty
^ Add a geolocalization plugin
^ Add two orientation options : East-West and North-South
# Fix some issues in import process
# Fix ordering issues
RELEASE 2.30 / 05-2013=
# Fix vertical gallery height
# Fix missing alias in import model
# Fix missing Itemid and properties thumbnails in geolocalized map
# Fix missing Itemid in geolocalized map when SEF is activated in global
configuration
# Fix french translation
# Fix javascript bug in IE versions < 9 in search.js
# Fix wrong parameter in slider module
^ Add new event onBeforeLoadProperty
+ Add Joomfish plugin
# Fix Wrong integer type used for department_id in #__jea_properties table
# Fix two bugs in propertyInterface.php and add orientation
^ Update JEA slider module and slideitmoo.js to have a continuous slide
effect
# Fix toggle publish / unpublish state in administrator properties view
RELEASE 2.21 / 01-2013=
# Fix issue on property list default order set in params
# Fix the upgrade process if the component version is 2.0
# Fix pagination bug on list limit
=RELEASE 2.2 / 01-2013=
+ Add access right management for each property
+ Add a published start / end date for each property
+ Add new parameter "Gallery orientation" to choose between
horizontal or vertical layout in property detail.
^ Change JEA logo
^ Backend : add the configuration button in each tab
# Backend : Fix sort by featured properties
# Fix upload errors not displayed when saving a property
^ Activate relationship between departements/towns/area by default
# Fix assets issue when we duplicate properties
# Fix missing and misspelling translations
# Assign the list limit based on the JEA configuration.
# Fix property hit increment
# Fix issue on list limit with previous and next links in property model.
# Fix page title wrong parameter
^ Add redirect behavior when user is not connected on property form
# Load the Mootools More framework if not already inclued
# Fix issue Google Map not showing with negative values in latitude /
longitude
# Fix issue with search reset
# Fix search issue on orientation filter
=RELEASE 2.1 / 10-2012=
# Fix issue on preselected transaction type in search forms
# Fix Next & Prev not translated in Squeezebox
# Fix missing south orientation and add update schema to the component
# Fix missing hot water type in property model
# Fix IE7 bug with the squeezebox
# Fix inversion in latitude / longitude label in the property form
# Fix missing translations
# Fix missing room parameter in search forms
# Fix Towns not fetched in order
=RELEASE 2.0 / 04-2012=
NOTE : This release works only with Joomla! 2.5.x
What's change :
⋅ Global code rewritting
⋅ Joomfish support removed and using native Joomla language management
⋅ Add new columns in property table : rate_frequency, transaction_type,
bedrooms, floors_number, orientation, modified
. More optimized property gallery management : the thumbnails are generated
on the fly
⋅ Add third party bridge import interface
⋅ Using native Joomla captcha support
⋅ Keep the user search in session
⋅ Remove plugin entry "onInitTableProperty" because table
columns are now automatically loaded
⋅ Rename plugin entry "onBeforeEndPane" to
"onBeforeEndPanels"
⋅ Rename plugin entry "onAfterStartPane" to
"onAfterStartPanels"
⋅ Rename plugin entry "onBeforeSearchQuery" to
"onBeforeSearch"
⋅ Add plugin entry "onBeforeSendContactForm"
⋅ Add plugin entry "onAfterLoadPropertyForm"
=RELEASE 1.1 / 07-2011=
# Fix published state & datetime at new property creation
+ Add feed view
+ Add geolocalization management with google map API V3 (no need API key)
^ Make default order by id ASC in backend
# Fix forgotten word in language files
# Fix bug on deleting secondaries images in frontend
^ Search request optimization
+ Geolocalized Search results on Google map
+ Add deposit field for properties to rent
^ Optionnal relationship between departments / towns / areas
# Fix bug when trying to send mail after a search with the property contact
form
^ Multi-upload for secondaries images
# Fix form reset when there is an error (for new properties)
+ CSV import / export implementation to features lists
# Fix bug [#22784] : Renting/Selling filter renders a blank manage page if
option is selected without any properties
# Limit cross request forgery by adding token checking on contact form
submission and By adding captcha plugin support.
+ Add JEA search plugin (made by David Lozano)
+ Add Captcha plugin for JEA
+ Add 8 plugins events entries : onBeforeEndPane,
onAfterStartPane,
onBeforeShowDescription,
onAfterShowDescription,
onBeforeSaveProperty,
onAfterSaveProperty,
onInitTableProperty,
onBeforeSearchQuery
^ Add relationship between towns and departments on the backend filtering
select lists.
This should improve performances when there is massive load of data in
the towns select list.
# Fix wrong cols name in the orderby param in Config.xml
^ Save sorting state in backend and allow to reorder items only if the
sorting state is 'ordering ASC'
^ Module jea_search and module jea_emphasis update
=RELEASE 1.0 / 04-2010=
^ Update search layout and mod_jea_search with more configuration options
^ Remember the last slider opened in backend edit property form
+ Add new gallery layout with Squeezebox
+ Add more configuration options
^ Sort lists improvements in frontend
+ Add Hit counter on properties
- Remove sh40SEF plugin support
+ Add native SEF routing
+ Add title and description management for properties images (IPTC infos)
+ Add property title and alias (for SEF)
+ Ajaxify dropdown lists (departments, towns, areas) in backend property
form
+ Add relation between departments,towns and areas tables
# Escape address for Google map
# Fix charset in mod_jea_emphasis
+ Add height configuration option for thumbnails generation
+ Add height configuration option for preview picture generation
+ Add crop configuration option for thumbnails generation
^ Natural sort of towns / departments in search listings
# Fix XSS issue in properties contact form
=RELEASE 0.9 / 10-2009=
# Fix bug in properties view.pdf if PHP flag "allow_url_fopen" is
set to 0
+ added possibility to clone properties in backend
# Fix bug with Previous and Next when some features are selected in menu
^ mod_jea_emphasis Joomfish compatibility
=RELEASE 0.8 / 03-2009=
-Fix bug in properties ordering
-Allow specials characters in ref field
-Fix issue about advantages list limited at 20 items
-Add Joomfish areas contentElement
-Some language corrections
-Fix missing Mootools declaration for google map
-Fix PDF issue when property has no picture
-Fix Joomfish missing translations
-Fix bug when adding new property in front
=RELEASE 0.7 / 01-2009=
-Add Google map geolocalisation
-Add Pdf view to properties detail
-Fix bug on room min in advanced search
-Fix translations on administrator component menu
-Fix Missing translations
-Fix various bugs on search results
-Fix pagination bug
=RELEASE 0.6 / 12-2008=
-Fix bug on search pagination
-Add english translation
-Add sh404SEF plugin (site/sef_ext/com_jea)
-Add Joomfish contentElements (admin/joomfish)
-Default email to contact form different than administrator email in
component parameters
-Jea Agents could receive contact form in component parameters
=RELEASE 0.5 / 12-2008=
-Fix bug on image deletion (redirect on blank page)
-Fix bug #10490 Error message when mail function cannot send mail
-Fix bug #13089 on module emphasis (break links)
-Users can manage properties in front-office
=RELEASE 0.4 / 06-2008=
0.4 beta (bugfixes release)
- Fix include path for jea library
- Refix bug #10973 -> Warning: cannot yet handle MBCS in
html_entity_decode()
- Move /components/com_jea/upload to /images/com_jea
- Move /components/com_jea/medias to /medias/com_jea
- Refactor entire code to be more Joomla compliant
- Ordering properties columns in admin
- Checked-out on properties (Avoid conflict between users)
- Fix bug when search reference in administration.
- Fix Ordering bug after search in front
=RELEASE 0.3 / 05-2008=
-fix search bugs
-fix bug on menu parameters
-fix bug [#10973] Warning: cannot yet handle MBCS in html_entity_decode()
with PHP4
-fix bug [#10490] Error message when mail function cannot send mail
=RELEASE 0.2 / 04-2008=
-Fix bug on list limit in front
-Search engine implementation
-Language update
-Refactor some code
-Contact form implementation
-Breadcrumb and title supports
-AJAX search support
=RELEASE 0.1 / 26-mar-2008=
- Initial public code
dropPK]��[��:y��jea.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<extension type="component" method="upgrade">
<name>jea</name>
<author>Sylvain Philip</author>
<creationDate>jan 2020</creationDate>
<authorEmail>contact@sphilip.com</authorEmail>
<authorUrl>www.sphilip.com</authorUrl>
<copyright>Copyright (C) PHILIP Sylvain. All rights
reserved.</copyright>
<license>GNU General Public License version 2 or
later</license>
<version>4.0.6</version>
<description>Easy real estate Ads management</description>
<namespace
path="/">sphilip\Component\JEA</namespace>
<!-- Install / Uninstall Database Section -->
<install>
<sql>
<file charset="utf8"
driver="mysql">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall>
<sql>
<file charset="utf8"
driver="mysql">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<!-- Frontend -->
<files folder="site">
<folder>controllers</folder>
<folder>helpers</folder>
<folder>language</folder>
<folder>models</folder>
<folder>views</folder>
<filename>jea.php</filename>
<filename>router.php</filename>
</files>
<!-- Media files -->
<media destination="com_jea" folder="media" >
<folder>css</folder>
<folder>images</folder>
<folder>js</folder>
</media>
<!-- Backend -->
<administration>
<menu>com_jea</menu>
<submenu>
<menu img="icon"
view="properties">com_jea_properties</menu>
<menu img="icon"
view="features">com_jea_features</menu>
<menu img="icon"
view="tools">com_jea_tools</menu>
<menu img="icon"
view="about">com_jea_about</menu>
</submenu>
<files folder="admin">
<folder>controllers</folder>
<folder>gateways</folder>
<folder>helpers</folder>
<folder>language</folder>
<folder>layouts</folder>
<folder>models</folder>
<folder>sql</folder>
<folder>tables</folder>
<folder>views</folder>
<filename>access.xml</filename>
<filename>config.xml</filename>
<filename>jea.php</filename>
<filename>LICENCE.txt</filename>
<filename>NEWS.txt</filename>
</files>
</administration>
<!-- Updateserver definition -->
<updateservers>
<!-- Note: No spaces or linebreaks allowed between the server tags
-->
<server type="extension" priority="1"
name="JEA Update
Site">http://jea.sphilip.com/update/com_jea.xml</server>
</updateservers>
</extension>
PKY��[
5����controllers/gateway.phpnu�[���PKY��[��/��
�
2controllers/gateways.phpnu�[���PKY��[5ݑ�;;controllers/featurelist.phpnu�[���PKY��[��^� � �controllers/features.json.phpnu�[���PKY��[��q����!controllers/properties.phpnu�[���PKY��[����2controllers/feature.phpnu�[���PKZ��[Յ+��1:controllers/features.phpnu�[���PKZ��[�\Ȕ��,Lcontrollers/default.phpnu�[���PKZ��[�MAA�Ncontrollers/property.phpnu�[���PKZ��[�66�Vcontrollers/gateway.json.phpnu�[���PKZ��[$Tr��_gateways/gateway.phpnu�[���PKZ��[p&�``ngateways/dispatcher.phpnu�[���PKZ��[%��4�4��gateways/import.phpnu�[���PKZ��[.��@����gateways/export.phpnu�[���PKZ��[���??!��gateways/providers/jea/import.xmlnu�[���PKZ��[�,����!s�gateways/providers/jea/export.xmlnu�[���PKZ��[�]M�!d�gateways/providers/jea/import.phpnu�[���PKZ��[
�X\{{!��gateways/providers/jea/export.phpnu�[���PKZ��[�Xl���helpers/jea.phpnu�[���PKZ��[��Ŗ���helpers/utility.phpnu�[���PKZ��[��^&QQ�helpers/upload.phpnu�[���PKZ��[����l%helpers/html/features.phpnu�[���PKZ��[�M�88%jDhelpers/html/contentadministrator.phpnu�[���PKZ��[�.xQ??$�Jlanguage/es-ES/es-ES.com_jea.sys.ininu�[���PKZ��[i�F>F>
�Olanguage/es-ES/es-ES.com_jea.ininu�[���PKZ��[�
��$
�language/en-GB/en-GB.com_jea.sys.ininu�[���PKZ��[�<!�BLBL
��language/en-GB/en-GB.com_jea.ininu�[���PKZ��[��ӓR�R
�language/fr-FR/fr-FR.com_jea.ininu�[���PKZ��[8,�ekk$�1language/fr-FR/fr-FR.com_jea.sys.ininu�[���PKZ��[�q�I���6layouts/jea/gateways/nav.phpnu�[���PKZ��[�y���!�:layouts/jea/gateways/consoles.phpnu�[���PKZ��[x�Q Q $3?layouts/jea/gateways/console/cli.phpnu�[���PKZ��[S2k��%�Hlayouts/jea/gateways/console/ajax.phpnu�[���PKZ��[��G�Playouts/jea/fields/gallery.phpnu�[���PKZ��[���zz�]models/gateway.phpnu�[���PKZ��[3�\�\\Fimodels/gateways.phpnu�[���PKZ��[IC��((�omodels/featurelist.phpnu�[���PKZ��[|��WWS�models/forms/import.xmlnu�[���PKZ��[0LMۤ�)�models/forms/features/08-hotwatertype.xmlnu�[���PKZ��[uk�S��$�models/forms/features/05-amenity.xmlnu�[���PKZ��[�o��!ۑmodels/forms/features/01-type.xmlnu�[���PKZ��[�<���#ɕmodels/forms/features/09-slogan.xmlnu�[���PKZ��[.G�Z��(��models/forms/features/07-heatingtype.xmlnu�[���PKZ��[M�p!��models/forms/features/04-area.xmlnu�[���PKZ��[Z~Z��&�models/forms/features/06-condition.xmlnu�[���PKZ��[��%%!�models/forms/features/03-town.xmlnu�[���PKZ��[�H����'��models/forms/features/02-department.xmlnu�[���PKZ��[�����models/forms/export.xmlnu�[���PK[��[c���"�models/forms/filter_properties.xmlnu�[���PK[��[݅��#ֳmodels/forms/filter_featurelist.xmlnu�[���PK[��[�/�=��models/forms/gateway.xmlnu�[���PK[��[��L���models/forms/import-jea.xmlnu�[���PK[��[�uC)!!3�models/forms/property.xmlnu�[���PK[��[2�����models/properties.phpnu�[���PK[��[�-+�
�
e�models/feature.phpnu�[���PK[��[�ix��
�
)models/features.phpnu�[���PK[��[�V��Smodels/fields/price.phpnu�[���PK[��[�2���%models/fields/featurelist.phpnu�[���PK[��[�ip�
�
'models/fields/gallery.phpnu�[���PK[��[1�\&� � 52models/fields/amenities.phpnu�[���PK[��[��+33y<models/fields/surface.phpnu�[���PK[��[>Y�MM%�@models/fields/gatewayproviderlist.phpnu�[���PK[��[�����!�Lmodels/fields/geolocalization.phpnu�[���PK[��[�eؤA�A�hmodels/propertyInterface.phpnu�[���PK[��[%��!�!��models/property.phpnu�[���PK[��[������sql/uninstall.mysql.utf8.sqlnu�[���PK[��[ԯJ�KK��sql/install.mysql.utf8.sqlnu�[���PK[��[9� jGG��sql/updates/mysql/2.0.sqlnu�[���PK[��[~x����sql/updates/mysql/2.1.sqlnu�[���PK[��[~��h��sql/updates/mysql/2.2.sqlnu�[���PK[��[w�ިdd��sql/updates/mysql/2.30.sqlnu�[���PK[��[��TA��g�sql/updates/mysql/3.1.sqlnu�[���PK[��[�/uuL�sql/updates/mysql/3.4.sqlnu�[���PK[��[��zӴ�
�tables/gateway.phpnu�[���PK[��[L5M����tables/features.phpnu�[���PK[��[%Ƌ٢��tables/property.phpnu�[���PK\��[g�-�''�views/gateway/tmpl/edit.phpnu�[���PK\��[O��*DD(views/gateway/view.html.phpnu�[���PK\��[�#)� �views/gateways/tmpl/import.phpnu�[���PK\��[g���%%"views/gateways/tmpl/default.phpnu�[���PK\��[jOn
�:views/gateways/tmpl/export.phpnu�[���PK\��[�L珥��=views/gateways/view.html.phpnu�[���PK\��[D7�z���Fviews/about/tmpl/default.phpnu�[���PK\��[��<nn�Oviews/about/view.html.phpnu�[���PK\��[/vo��~Uviews/features/tmpl/default.phpnu�[���PK\��[[�J���r]views/features/view.html.phpnu�[���PK\��[�y�v���dviews/feature/tmpl/edit.phpnu�[���PK\��[zӓ�iviews/feature/view.html.phpnu�[���PK\��[h�xOO!�pviews/properties/tmpl/default.phpnu�[���PK\��[YG����views/properties/view.html.phpnu�[���PK]��[Fx�9��"��views/featurelist/tmpl/default.phpnu�[���PK]��[��} } ��views/featurelist/view.html.phpnu�[���PK]��[���9}}��views/tools/tmpl/default.phpnu�[���PK]��[:Ph�BB��views/tools/view.html.phpnu�[���PK]��[}!-8''�views/property/tmpl/edit.phpnu�[���PK]��[��������views/property/view.html.phpnu�[���PK]��[��szz
��access.xmlnu�[���PK]��[�����%�%
s�config.xmlnu�[���PK]��[!#y���jea.phpnu�[���PK]��[4%a3�E�EALICENCE.txtnu�[���PK]��[���I*I*VNEWS.txtnu�[���PK]��[��:y����jea.xmlnu�[���PKff$É