| Server IP : 54.36.91.62 / Your IP : 216.73.217.111 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/bordeaux/components/com_djcatalog2/ |
Upload File : |
<?php
/**
* @package DJ-Catalog2
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email contact@dj-extensions.com
*
*/
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Factory;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Session\Session;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Helper\ModuleHelper;
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.controller');
jimport('joomla.filesystem.file');
class DJCatalog2Controller extends BaseController
{
protected $default_view = 'items';
function __construct($config = array())
{
$config['default_view'] = 'items';
parent::__construct($config);
$lang = Factory::getApplication()->getLanguage();
$lang->load('com_djcatalog2');
$this->registerTask('modfp', 'getFrontpageXMLData');
$this->registerTask('search_reset', 'search');
$this->registerTask('search_reset_filters', 'search_filters');
$this->registerTask('search_reset_filters', 'search_filters_wizard');
$this->registerTask('psearch_reset', 'filterproducers');
}
function display($cachable = true, $urlparams = null)
{
$app = Factory::getApplication();
$view = $app->input->get('view');
if (($view == '' || $view == 'featured') /*&& $app->input->get('task') == ''*/) {
$this->input->set('view', 'items');
}
$user = Factory::getUser();
$params = Djcatalog2Helper::getParams();
$cached_views = (array)$params->get('cache_options', array('items', 'item', 'producers', 'producer', 'map'));
if ($view == 'itemform') {
$id = $app->input->getInt('id');
if ($app->input->getCmd('format', 'html') == 'html' && $id > 0 && !$this->checkEditId('com_djcatalog2.edit.itemform', $id)) {
$this->setRedirect(Route::_(DJCatalogHelperRoute::getMyItemsRoute(), false), Text::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
return true;
}
}
$noncachable = array('itemform', 'myitems', 'cart', 'order', 'orders', 'query', 'checkout', 'query', 'questions', 'question', 'compare', 'orderform');
if (in_array($view, $noncachable) || !in_array($view, $cached_views) || $user->id) {
$cachable = false;
} else if ($view == 'items' || $view == 'map') {
$hasSearch = (bool)(
$app->input->getString('search', '') != ''
|| $app->input->getString('mapsearch', '') != ''
|| $app->input->getString('ind', '') != ''
|| $app->input->getString('tag', '') != ''
);
$hasFilters = (bool)($app->input->getString('cm', '') !== '');
$hasSort = (bool)($app->input->getString('order', '') != '' || $app->input->getString('dir', '') != '');
if ($hasSearch) {
$cachable = false;
}
if ($hasFilters && !in_array('filters', $cached_views)) {
$cachable = false;
}
if ($hasSort && !in_array('sort', $cached_views)) {
$cachable = false;
}
} else if ($app->input->get('ic'))
$cachable = false;
DJCatalog2ThemeHelper::setThemeAssets();
$urlparams = array(
'id' => 'STRING',
'cid' => 'STRING',
'pid' => 'STRING',
'pcid' => 'STRING',
'aid' => 'STRING',
'search' => 'STRING',
'task' => 'STRING',
'order' => 'STRING',
'dir' => 'STRING',
'cm' => 'INT',
'l' => 'STRING',
'Itemid' => 'INT',
'limit' => 'UINT',
'limitstart' => 'UINT',
'start' => 'UINT',
'lang' => 'CMD',
'tmpl' => 'CMD',
'ind' => 'RAW',
'template' => 'STRING',
'price_from' => 'STRING',
'price_to' => 'STRING',
'type' => 'STRING',
'print' => 'INT',
'pdf' => 'INT',
'layout' => 'STRING',
'ms_unit' => 'STRING',
'ms_radius' => 'INT',
'mapsearch' => 'STRING',
'eid' => 'STRING',
'ecid' => 'STRING',
'oid' => 'INT',
'plg' => 'STRING',
'plgid' => 'INT',
'billing' => 'INT',
'error' => 'RAW',
'success' => 'RAW',
'view' => 'STRING',
'layout' => 'STRING',
'qid' => 'UINT',
'token' => 'STRING',
'tag' => 'STRING',
'pic_only' => 'INT',
'cntid' => 'INT',
'stid' => 'INT',
'combination_id' => 'INT',
'pks' => 'STRING',
'filter' => 'ARRAY'
);
$db = Factory::getDbo();
$db->setQuery('select alias from #__djc2_items_extra_fields where type=\'checkbox\' or type=\'radio\' or type=\'select\'');
$extra_fields = $db->loadColumn();
if (count($extra_fields) > 0) {
foreach ($extra_fields as $extra_field) {
$urlparams['f_' . $extra_field] = 'RAW';
// stupid, stupid, stupid me
$urlparams[str_replace('-', '_', 'f_' . $extra_field)] = 'RAW';
}
}
Djcatalog2HelperPrice::triggerCurrencyExAPI();
parent::display($cachable, $urlparams);
}
function getFrontpageXMLData()
{
$model = $this->getModel('modfrontpage');
$xml = $model->getXml();
if (!count(array_diff(ob_list_handlers(), array('default output handler'))) || ob_get_length()) {
@ob_clean();
}
if (!headers_sent()) {
$document = Factory::getDocument();
header('Content-Type: \'text/xml\'; charset=' . $document->_charset);
}
echo $xml;
Factory::getApplication()->close();
}
function search()
{
$app = Factory::getApplication();
$db = Factory::getDbo();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
$search = $post['search'];
if ($app->input->getCmd('task') != 'search_reset') {
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'cid' && $key != 'pid' && $key != 'Itemid') {
if ($key == 'search') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
if (is_numeric($k)) {
$params[] = $key . '[]=' . $v;
} else {
$params[] = $key . '[' . $k . ']=' . $v;
}
}
} else {
$params[] = $key . '=' . $value;
}
}
}
}
if (!array_key_exists('cm', $post) && $app->input->getCmd('task') != 'search_reset') {
$params[] = 'cm=0';
}
$categoryId = $app->input->get('cid', '0', 'string');
if (is_numeric($categoryId) && $categoryId > 0 && strstr($categoryId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_categories')->where('id=' . (int)$categoryId);
$db->setQuery($query);
$category = $db->loadObject();
if ($category) {
$categoryId .= ':' . $category->alias;
$app->setUserState('com_djcatalog.items.filter.category', $category->id);
}
}
$producerId = $app->input->get('pid', '0', 'string');
if (is_numeric($producerId) && $producerId > 0 && strstr($producerId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_producers')->where('id=' . (int)$producerId);
$db->setQuery($query);
$producer = $db->loadObject();
if ($producer) {
$producerId .= ':' . $producer->alias;
$app->setUserState('com_djcatalog.items.filter.producer', $producer->id);
}
}
$menu = Factory::getApplication('site')->getMenu('site');
$uri = DJCatalogHelperRoute::getCategoryRoute($categoryId, $producerId);
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$app->redirect(Route::_($uri . $get, false) . $jumpToSfx);
}
function search_filters()
{
$app = Factory::getApplication();
$db = Factory::getDbo();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
if ($app->input->getCmd('task') != 'search_reset_filters') {
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'cid' && $key != 'pid' && $key != 'Itemid') {
if ($key == 'search') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
if (is_numeric($k)) {
$params[] = $key . '[]=' . $v;
} else {
$params[] = $key . '[' . $k . ']=' . $v;
}
}
} else {
$params[] = $key . '=' . $value;
}
}
}
}
if($app->input->get("cid")){
$cid = $app->input->get('cid', '0', 'string');
$parts = explode(':', $cid);
$params[] = 'cid='.(int)$parts[0];
}
if (!array_key_exists('cm', $post) && $app->input->getCmd('task') != 'search_reset_filters') {
$params[] = 'cm=0';
}
$categoryId = (int)$parts[0];
$catTmpId = $categoryId;
if (is_numeric($categoryId) && $categoryId > 0 && strstr($categoryId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_categories')->where('id=' . (int)$categoryId);
$db->setQuery($query);
$category = $db->loadObject();
if ($category) {
$categoryId .= ':' . $category->alias;
$app->setUserState('com_djcatalog.items.filter.category', $category->id);
}
}
$producerId = $app->input->get('pid', '0', 'string');
if (is_numeric($producerId) && $producerId > 0 && strstr($producerId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_producers')->where('id=' . (int)$producerId);
$db->setQuery($query);
$producer = $db->loadObject();
if ($producer) {
$producerId .= ':' . $producer->alias;
$app->setUserState('com_djcatalog.items.filter.producer', $producer->id);
}
}
$menu = Factory::getApplication('site')->getMenu('site');
$uri = DJCatalogHelperRoute::getCategoryRoute($categoryId);
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$get = preg_replace('/^&/', '?', $get);
$app->redirect(Route::_($uri , false) . $get .$jumpToSfx);
}
function search_filters_wizard(){
$app = Factory::getApplication();
$db = Factory::getDbo();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
if ($app->input->getCmd('task') != 'search_reset_filters') {
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'cid' && $key != 'pid' && $key != 'Itemid') {
if ($key == 'search') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
if (is_numeric($k)) {
$params[] = $key . '[]=' . $v;
} else {
$params[] = $key . '[' . $k . ']=' . $v;
}
}
} else {
$params[] = $key . '=' . $value;
}
}
}
}
if (!array_key_exists('cm', $post) && $app->input->getCmd('task') != 'search_reset_filters') {
$params[] = 'cm=0';
}
$cid = $app->input->get('cid', '0', 'string');
$parts = explode(':', $cid);
$categoryId = (int)$parts[0];
if (is_numeric($categoryId) && $categoryId > 0 && strstr($categoryId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_categories')->where('id=' . (int)$categoryId);
$db->setQuery($query);
$category = $db->loadObject();
if ($category) {
$categoryId .= ':' . $category->alias;
$app->setUserState('com_djcatalog.items.filter.category', $category->id);
}
}
$producerId = $app->input->get('pid', '0', 'string');
if (is_numeric($producerId) && $producerId > 0 && strstr($producerId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_producers')->where('id=' . (int)$producerId);
$db->setQuery($query);
$producer = $db->loadObject();
if ($producer) {
$producerId .= ':' . $producer->alias;
$app->setUserState('com_djcatalog.items.filter.producer', $producer->id);
}
}
$menu = Factory::getApplication('site')->getMenu('site');
$uri = DJCatalogHelperRoute::getCategoryRoute($categoryId, $producerId);
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$app->redirect(Route::_($uri . $get, false) . $jumpToSfx);
}
function search_filters_categories(){
$app = Factory::getApplication();
$db = Factory::getDbo();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
if ($app->input->getCmd('task') != 'search_reset_filters') {
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'cid' && $key != 'pid' && $key != 'Itemid') {
if ($key == 'search') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
if (is_numeric($k)) {
$params[] = $key . '[]=' . $v;
} else {
$params[] = $key . '[' . $k . ']=' . $v;
}
}
} else {
$params[] = $key . '=' . $value;
}
}
}
}
if (!array_key_exists('cm', $post) && $app->input->getCmd('task') != 'search_reset_filters') {
$params[] = 'cm=0';
}
$categoryId = $app->input->get('cid', '0', 'string');
if (is_numeric($categoryId) && $categoryId > 0 && strstr($categoryId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_categories')->where('id=' . (int)$categoryId);
$db->setQuery($query);
$category = $db->loadObject();
if ($category) {
$categoryId .= ':' . $category->alias;
$app->setUserState('com_djcatalog.items.filter.category', $category->id);
}
}
$producerId = $app->input->get('pid', '0', 'string');
if (is_numeric($producerId) && $producerId > 0 && strstr($producerId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_producers')->where('id=' . (int)$producerId);
$db->setQuery($query);
$producer = $db->loadObject();
if ($producer) {
$producerId .= ':' . $producer->alias;
$app->setUserState('com_djcatalog.items.filter.producer', $producer->id);
}
}
$menu = Factory::getApplication('site')->getMenu('site');
$uri = DJCatalogHelperRoute::getCategoryRoute($categoryId, $producerId);
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$app->redirect(Route::_($uri . $get, false) . $jumpToSfx);
}
function producersearch()
{
$app = Factory::getApplication();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'pid' && $key != 'cid' && $key != 'Itemid') {
if ($key == 'search') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
$params[] = $key . '[]=' . $v;
}
} else {
$params[] = $key . '=' . $value;
}
}
}
$producer_id = $app->input->get('pid', null, 'string');
if ((int)$producer_id == 0) {
return $this->search();
} else {
if (strpos($producer_id, ':') === false) {
$db = Factory::getDbo();
$db->setQuery('select alias from #__djc2_producers where id =' . (int)$producer_id);
if ($alias = $db->loadResult()) {
$producer_id = (int)$producer_id . ':' . $alias;
}
}
}
$menu = Factory::getApplication('site')->getMenu('site');
$uri = DJCatalogHelperRoute::getProducerRoute($producer_id);
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$app->redirect(Route::_($uri . $get, false) . $jumpToSfx);
}
function mapsearch()
{
$app = Factory::getApplication();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'cid' && $key != 'pid' && $key != 'Itemid') {
if ($key == 'search' || $key == 'mapsearch') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
$params[] = $key . '[]=' . $v;
}
} else {
$params[] = $key . '=' . $value;
}
}
}
$menu = Factory::getApplication('site')->getMenu('site');
//$uri = DJCatalogHelperRoute::getCategoryRoute( $app->input->get( 'cid','0','string' ), $app->input->get( 'pid',null,'string' ));
$uri = 'index.php?option=com_djcatalog2&view=map';
if ($app->input->get('cid', false) !== false) {
$uri .= '&cid=' . $app->input->getInt('cid', 0);
}
if ($app->input->get('pid', false) !== false) {
$uri .= '&pid=' . $app->input->getString('pid', '');
}
if ($app->input->get('Itemid', false) !== false) {
$uri .= '&Itemid=' . $app->input->getInt('Itemid', '');
}
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$app->redirect(Route::_($uri . $get, false) . $jumpToSfx);
}
function filterproducers()
{
$app = Factory::getApplication();
$db = Factory::getDbo();
//$post = JRequest::get('post');
$post = $app->input->getMethod() == 'POST' ? $app->input->getArray($_POST) : $app->input->getArray($_GET);
$params = array();
foreach ($post as $key => $value) {
if ($key != 'task' && $key != 'option' && $key != 'view' && $key != 'pcid' && $key != 'Itemid') {
if ($key == 'search') {
$params[] = $key . '=' . urlencode($value);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
if (is_numeric($k)) {
$params[] = $key . '[]=' . $v;
} else {
$params[] = $key . '[' . $k . ']=' . $v;
}
}
} else {
$params[] = $key . '=' . $value;
}
}
}
if (!array_key_exists('cm', $post) && $app->input->getCmd('task') != 'search_reset') {
$params[] = 'cm=0';
}
$categoryId = $app->input->get('pcid', '0', 'string');
if (is_numeric($categoryId) && $categoryId > 0 && strstr($categoryId, ':') === false) {
$query = $db->getQuery(true);
$query->select('id, alias')->from('#__djc2_producer_categories')->where('id=' . (int)$categoryId);
$db->setQuery($query);
$category = $db->loadObject();
if ($category) {
$categoryId .= ':' . $category->alias;
}
}
$menu = Factory::getApplication('site')->getMenu('site');
$uri = DJCatalogHelperRoute::getProducerCategoryRoute($categoryId);
if (strpos($uri, '?') === false) {
$get = (count($params)) ? '?' . implode('&', $params) : '';
} else {
$get = (count($params)) ? '&' . implode('&', $params) : '';
}
$cparams = ComponentHelper::getParams('com_djcatalog2');
$jumpToSfx = $cparams->get('search_jump', true) ? '#tlb' : '';
$app->redirect(Route::_($uri . $get, false) . $jumpToSfx);
}
function download()
{
$app = Factory::getApplication();
$user = Factory::getUser();
$db = Factory::getDbo();
$file_id = $app->input->getInt('fid', 0);
$query = 'select i.id, i.created_by, f.access, i.product_type ' .
'from #__djc2_items as i, ' .
'#__djc2_files as f where f.item_id = i.id and f.id=' . (int)$file_id;
$db->setQuery($query);
$itemFile = $db->loadObject();
if (empty($itemFile)) {
throw new Exception('', 404);
return false;
}
$owner = $itemFile->created_by;
$access = $itemFile->access;
$groups = $user->getAuthorisedViewLevels();
$authorised = false;
if (($user->id && $user->id == $owner && $user->id > 0) || $user->authorise('core.admin', 'com_djcatalog2')) {
$authorised = true;
} else if ($itemFile->product_type == 'virtual' || $itemFile->product_type == 'hybrid') {
$token = $app->getUserStateFromRequest('com_djcatalog2.order.token', 'token', null, 'string');
if ($user->guest == false || $token != '') {
$query = $db->getQuery(true);
$query->select('o.*');
$query->from('#__djc2_orders AS o');
$query->join('inner', '#__djc2_order_items AS oi ON oi.order_id=o.id');
if ($user->guest) {
$query->where('o.token=' . $db->quote($token));
} else {
$query->where('o.user_id=' . $user->id);
}
$query->where('oi.item_id = ' . $itemFile->id);
$query->order('o.id DESC');
$db->setQuery($query);
$fileOrders = $db->loadObjectList();
foreach ($fileOrders as $order) {
if ($order->status == 'C' || $order->status == 'P' || $order->status == 'F') {
$authorised = true;
break;
}
}
if (!$authorised) {
if (count($fileOrders) > 0) {
$fileOrder = $fileOrders[0];
$msg = Text::_('COM_DJCATALOG2_VIRTUAL_PRODUCT_DOWNLOAD_NOT_AUTH');
if ($token != '') {
$this->setRedirect(Route::_(DJCatalog2HelperRoute::getOrderRoute($fileOrder->id) . '&token=' . $token, false), $msg);
} else {
$this->setRedirect(Route::_(DJCatalog2HelperRoute::getOrderRoute($fileOrder->id), false), $msg);
}
return true;
}
$itemModel = BaseDatabaseModel::getInstance('Item', 'DJCatalog2Model', ['ignore_request' => true]);
$item = $itemModel->getItem($itemFile->id);
$msg = Text::_('COM_DJCATALOG2_VIRTUAL_PRODUCT_DOWNLOAD_NOT_AUTH');
$this->setRedirect(Route::_(DJCatalog2HelperRoute::getItemRoute($item->slug, $item->catslug), false), $msg);
return true;
}
}
} else {
if ($user->authorise('djcatalog2.filedownload', 'com_djcatalog2')) {
$authorised = (bool)(in_array($access, $groups));
}
}
if ($authorised !== true) {
if ($user->guest) {
$return_url = base64_encode(Uri::getInstance()->toString());
$app->enqueueMessage(Text::_('COM_DJCATALOG2_PLEASE_LOGIN'));
$app->redirect(Route::_('index.php?option=com_users&view=login&return=' . $return_url, false), 303);
return true;
} else {
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
return false;
}
}
if (!DJCatalog2FileHelper::getFile($file_id)) {
throw new Exception('', 404);
return false;
}
// Close the application instead of returning from it.
$app->close();
//return true;
}
public function multiupload()
{
$app = Factory::getApplication();
// todo: secure upload from injections
$user = Factory::getUser();
if (!$user->authorise('core.manage', 'com_djcatalog2')
&& !$user->authorise('core.create', 'com_djcatalog2')
&& !$user->authorise('core.edit', 'com_djcatalog2')
&& !$user->authorise('core.edit.own', 'com_djcatalog2')
// not really protection but rather making sure that uploaded file is related to product customisation
&& strpos($app->input->getString('upload_id'), 'customValues_') === false) {
$app = Factory::getApplication();
$app->setHeader('status', 403, true);
$app->sendHeaders();
echo '{"jsonrpc" : "2.0", "error" : {"code": 403, "message": "' . Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN') . '"}}';
$app->close();
}
DJCatalog2UploadHelper::upload();
return true;
}
public function getStatesByCountry()
{
$app = Factory::getApplication();
$country = $app->input->getInt('country');
$results = array();
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('cs.*')->from('#__djc2_countries_states AS cs')->where('cs.published=1')->order('cs.name asc');
if ($country > 0) {
$query->join('inner', '#__djc2_countries AS c ON c.id=cs.country_id AND c.published=1');
$query->where('cs.country_id=' . (int)$country);
} else {
$query->join('inner', '#__djc2_countries AS c ON c.id=cs.country_id AND c.is_default=1 AND c.published=1');
}
$db->setQuery($query);
$results = $db->loadObjectList();
echo json_encode($results);
$app->close();
}
public function paymentProcess()
{
$app = Factory::getApplication();
$db = Factory::getDbo();
$order_id = $app->input->getInt('oid');
$plugin = $app->input->getString('plg');
$plugin_id = $app->input->getInt('plgid');
if (!$order_id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_INVALID_REQUEST'), 400);
}
if (!$plugin || !$plugin_id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_INVALID_REQUEST'), 400);
}
$model = BaseDatabaseModel::getInstance('Order', 'DJCatalog2Model', array('ignore_request' => true));
$order = $model->getItem($order_id);
$paymentMethod = $model->getPaymentMethod($plugin_id);
if ($order == false || empty($order) || empty($order->id) || $order->payment_method_id != $paymentMethod->id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_ORDER_NOT_FOUND'), 404);
}
$transaction = new stdClass();
$transaction->id = null;
$transaction->user_id = (int)Factory::getUser()->id;
$transaction->order_id = $order_id;
$transaction->created = Factory::getDate()->toSql();
$transaction->paid = 0;
$transaction->total = $order->grand_total;
$db->insertObject('#__djc2_transactions', $transaction, 'id');
PluginHelper::importPlugin('djcatalog2payment');
$dispatcher = Joomla\CMS\Factory::getApplication()->getDispatcher();
// payment processing
$paymentResponse = Joomla\CMS\Factory::getApplication()->triggerEvent('onDJC2PaymentProcess', array('com_djcatalog2.order.payment', $order, $paymentMethod));
$app->close();
}
public function paymentResponse()
{
$app = Factory::getApplication();
$plugin = $app->input->getString('plg');
$plugin_id = $app->input->getInt('plgid');
if (!$plugin || !$plugin_id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_INVALID_REQUEST'), 400);
}
PluginHelper::importPlugin('djcatalog2payment');
$dispatcher = Joomla\CMS\Factory::getApplication()->getDispatcher();
$model = BaseDatabaseModel::getInstance('Order', 'DJCatalog2Model', array('ignore_request' => true));
$paymentMethod = $model->getPaymentMethod($plugin_id);
if (!$paymentMethod || $paymentMethod->plugin != $plugin) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_INVALID_REQUEST'), 400);
}
$order_id = false;
// this should go through all the plugins and return order id
$paymentDiscovery = Joomla\CMS\Factory::getApplication()->triggerEvent('onDJC2PaymentDiscover', array('com_djcatalog2.order.payment', $paymentMethod));
foreach ($paymentDiscovery as $result) {
if (!empty($result) && is_numeric($result)) {
$order_id = (int)$result;
break;
}
}
if (!$order_id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_ORDER_NOT_FOUND'), 404);
}
$order = $model->getItem($order_id);
if ($order == false || empty($order) || empty($order->id) || $order->payment_method_id != $paymentMethod->id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_ORDER_NOT_FOUND'), 404);
}
// payment response validation
$paymentResponse = Joomla\CMS\Factory::getApplication()->triggerEvent('onDJC2PaymentResponse', array('com_djcatalog2.order.payment', $order, $model, $paymentMethod));
$app->close();
}
public function getUserData()
{
$app = Factory::getApplication();
$juser = Factory::getUser();
$salesman = $juser->authorise('djcatalog2.salesman', 'com_djcatalog2') || $juser->authorise('core.admin', 'com_djcatalog2');
if (!$salesman) {
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
$user_id = $app->input->getInt('user_id');
if (!$user_id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_INVALID_REQUEST'), 400);
}
$user = Djcatalog2Helper::getUser($user_id);
echo json_encode($user);
$app->close();
}
public function user_login()
{
Session::checkToken() or jexit(Text::_('JINVALID_TOKEN'));
$app = Factory::getApplication();
$input = $app->input;
$method = $input->getMethod();
// Populate the data array:
$data = array();
$data['return'] = base64_decode($app->input->post->get('return', '', 'BASE64'));
$data['username'] = $input->$method->get('username', '', 'USERNAME');
$data['password'] = $input->$method->get('password', '', 'RAW');
$data['secretkey'] = $input->$method->get('secretkey', '', 'RAW');
// Check for a simple menu item id
if (is_numeric($data['return'])) {
if (Multilanguage::isEnabled()) {
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select('language')
->from($db->quoteName('#__menu'))
->where('client_id = 0')
->where('id =' . $data['return']);
$db->setQuery($query);
try {
$language = $db->loadResult();
} catch (RuntimeException $e) {
return;
}
if ($language !== '*') {
$lang = '&lang=' . $language;
} else {
$lang = '';
}
} else {
$lang = '';
}
$data['return'] = 'index.php?Itemid=' . $data['return'] . $lang;
} else {
// Don't redirect to an external URL.
if (!Uri::isInternal($data['return'])) {
$data['return'] = '';
}
}
// Set the return URL if empty.
if (empty($data['return'])) {
$data['return'] = DJCatalog2HelperRoute::getCartRoute() . '&layout=login';
}
// Set the return URL in the user state to allow modification by plugins
$app->setUserState('users.login.form.return', $data['return']);
// Get the log in options.
$options = array();
$options['remember'] = $this->input->getBool('remember', false);
$options['return'] = $data['return'];
// Get the log in credentials.
$credentials = array();
$credentials['username'] = $data['username'];
$credentials['password'] = $data['password'];
$credentials['secretkey'] = $data['secretkey'];
// Perform the log in.
if (true !== $app->login($credentials, $options)) {
// Login failed !
// Clear user name, password and secret key before sending the login form back to the user.
$data['remember'] = (int)$options['remember'];
$data['username'] = '';
$data['password'] = '';
$data['secretkey'] = '';
$app->setUserState('users.login.form.data', $data);
$app->redirect(Route::_(DJCatalog2HelperRoute::getCartRoute() . '&layout=login', false));
}
// Success
if ($options['remember'] == true) {
$app->setUserState('rememberLogin', true);
}
$app->setUserState('users.login.form.data', array());
$app->redirect(Route::_($app->getUserState('users.login.form.return'), false));
}
public function user_register()
{
Session::checkToken() or jexit(Text::_('JINVALID_TOKEN'));
$app = Factory::getApplication();
$app->setUserState('com_djcatalog2.cart_registration', true);
// TODO: should we do sth about that?
//require_once JPATH_ROOT.'/components/com_users/helpers/route.php';
//$link = 'index.php?option=com_users&view=registration&from_cart=1';
//$link = 'index.php?option=com_users&view=registration&from_cart=1&Itemid='. UsersHelperRoute::getRegistrationRoute() . '&from_cart=1';
$link = 'index.php?option=com_users&view=registration&from_cart=1';
$this->setRedirect(Route::_($link, false));
return true;
}
public function getFilterModules()
{
$app = Factory::getApplication();
$moduleIds = $app->input->get('module_id', array(), 'array');
Joomla\Utilities\ArrayHelper::toInteger($moduleIds);
if (empty($moduleIds)) {
$app->close();
}
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('*')->from('#__modules')->where('client_id=0')->where('id IN (' . implode(',', $moduleIds) . ')');
$db->setQuery($query);
$modules = $db->loadObjectList('id');
if (empty($modules)) {
$app->close();
}
Uri::getInstance()->setVar('task', null);
$app->input->set('task', null);
$output = '';
foreach ($modules as $module) {
$output .= '<div data-filtersmodule="' . $module->id . '">' . ModuleHelper::renderModule($module) . '</div>';
}
echo '<div>' . $output . '</div>';
$app->close();
/*require_once (JPATH_BASE.'/modules/mod_djc2filters/helper.php');
$lang = Factory::getApplication()->getLanguage();
$lang->load('mod_djc2filters', JPATH_BASE, null, false, true) ||
$lang->load('mod_djc2filters', JPATH_BASE.'/modules/mod_djc2filters', null, false, true);
$output = array();
foreach($modules as $module) {
$params = new Registry($module->params);
$items = DJC2FiltersModuleHelper::getData($params);
ob_start();
require ModuleHelper::getLayoutPath('mod_djc2filters', $params->get('layout', 'default'));
$output[] = ob_get_contents();
ob_end_clean();
}
echo json_encode($output);
*/
$app->close();
}
public function cronjobs()
{
$params = ComponentHelper::getParams('com_djcatalog2');
if ($params->get('cron_recurring')) {
$this->processRecurringOrders();
}
if ($params->get('cron_abandonedcart')) {
$this->userCartsNotify();
}
if ($params->get('cron_unpaid')) {
$this->unPaidOrdersNotify();
}
if ($params->get('cron_rate') && $params->get('product_rating')) {
$this->rateOrdersNotify();
}
if ($params->get('cron_subscriptions')) {
DJCatalog2Subscription::checkExpirations();
}
if ($params->get('cron_avg_prices')) {
$this->calculateAveragePrices();
}
Factory::getApplication()->close();
}
public function calculateAveragePrices() {
$app = Factory::getApplication();
$start = $app->input->get('start', 0);
$limit = $app->input->get('limit', 50);
$db = Factory::getDbo();
$params = ComponentHelper::getParams('com_djcatalog2');
$pricesDateFrom = date("Y-m-d", strtotime('now - ' . $params->get('cron_avg_prices_delay') . ' days'));
$query = $db->getQuery(true);
$query->select(['i.id','i.name'])->from($db->quoteName('#__djc2_items','i'))->order('id ASC')->setLimit($limit, $start);
$db->setQuery($query);
$items = $db->loadObjectList();
if(count($items)) {
$model = BaseDatabaseModel::getInstance('Item', 'DJCatalog2Model');
echo '<table>';
echo '<thead><th>ID</th><th>Name</th><th>Price</th><th>Min. Price</th></thead>';
echo '<tbody>';
foreach ($items as $item) {
$calculatedItem = $model->getItem($item->id);
$combinations = $model->getCombinations($item->id);
$today = date('Y-m-d');
$query = $db->getQuery(true);
$query->select('count(item_id) as price_count,price')
->from($db->quoteName('#__djc2_items_avg_prices'))
->where($db->quoteName('item_id') . ' = ' . $item->id)
->andWhere($db->quoteName('date') . ' = ' . $db->quote($today));
$db->setQuery($query);
$data = $db->loadObject();
if ($data->price_count === 0) {
$columns = ['item_id', 'combination_id', 'price', 'date'];
$query = $db->getQuery(true);
$values = array((int) $item->id, 0, $calculatedItem->final_price, $db->quote($today));
$query->insert($db->quoteName('#__djc2_items_avg_prices'))->columns($db->quoteName($columns))->values(implode(',', $values));
$db->setQuery($query);
$db->execute();
}else{
if ($data->price > $calculatedItem->final_price) {
$query = $db->getQuery(true);
$update_query = 'UPDATE ' . $db->quoteName('#__djc2_items_avg_prices') . ' SET '.$db->quoteName('price') .' = ' . $calculatedItem->final_price . ' WHERE '. $db->quoteName('item_id'). ' = ' .(int) $item->id. ' AND ' . $db->quoteName('date') . ' = ' . $db->quote($today);
$db->setQuery($update_query);
$db->execute();
}
}
$query = $db->getQuery(true);
$db->setQuery('SELECT min(price) as lowest_price, count(item_id) as number_of_days FROM #__djc2_items_avg_prices WHERE item_id = ' . (int) $item->id . ' AND combination_id = 0 AND date >= ' . $db->quote($pricesDateFrom) . ' AND date <= ' . $db->quote($today));
$lowestPrice = $db->loadObject();
$query = $db->getQuery(true);
$db->setQuery('UPDATE #__djc2_items SET avg_price = ' . $lowestPrice->lowest_price . ', avg_of_days = ' . $params->get('cron_avg_prices_delay') . ' WHERE id = ' . (int) $item->id);
$db->execute();
echo '<tr>';
echo '<td>'.$item->id.'</td>';
echo '<td>'.$item->name.'</td>';
echo '<td>'.$calculatedItem->final_price.'</td>';
echo '<td>'.$lowestPrice->lowest_price.'</td>';
echo '</tr>';
if (count($combinations)) {
foreach ($combinations as $combination) {
$query = $db->getQuery(true);
$query->select('count(item_id) as price_count,price')
->from($db->quoteName('#__djc2_items_avg_prices'))
->where($db->quoteName('item_id') . ' = ' .(int) $item->id)
->andWhere($db->quoteName('combination_id') . ' = ' . (int) $combination->id)
->andWhere($db->quoteName('date') . ' = ' . $db->quote($today));
$db->setQuery($query);
$data = $db->loadObject();
if ($data->price_count === 0) {
$columns = ['item_id', 'combination_id', 'price', 'date'];
$query = $db->getQuery(true);
$values = array((int) $item->id,(int) $combination->id, $calculatedItem->final_price, $db->quote($today));
$query->insert($db->quoteName('#__djc2_items_avg_prices'))->columns($db->quoteName($columns))->values(implode(',', $values));
$db->setQuery($query);
$db->execute();
}else{
if ($data->price > $calculatedItem->final_price) {
$query = $db->getQuery(true);
$update_query = 'UPDATE ' . $db->quoteName('#__djc2_items_avg_prices') . ' SET '.$db->quoteName('price') .' = ' . $calculatedItem->final_price . ' WHERE '. $db->quoteName('item_id'). ' = ' .(int) $item->id. ' AND ' . $db->quoteName('combination_id'). ' = ' .(int) $combination->id . ' AND ' . $db->quoteName('date') . ' = ' . $db->quote($today);
$db->setQuery($update_query);
$db->execute();
}
}
$query = $db->getQuery(true);
$db->setQuery('SELECT min(price) as lowest_price FROM '.$db->quoteName('#__djc2_items_avg_prices').' WHERE item_id = ' . (int) $item->id . ' AND combination_id = '.(int) $combination->id.' AND date >= ' . $db->quote($pricesDateFrom) . ' AND date <= ' . $db->quote($today));
$lowestPrice = $db->loadObject();
$query = $db->getQuery(true);
$db->setQuery('UPDATE #__djc2_items_combinations SET avg_price = ' . $lowestPrice->lowest_price . ', avg_of_days = ' . $params->get('cron_avg_prices_delay') . ' WHERE id = ' . (int) $combination->id);
$db->execute();
}
}
$start++;
}
echo '</tbody></table>';
header( "refresh:2;url=index.php?option=com_djcatalog2&task=calculateAveragePrices&start=" . $start );
}
exit();
}
protected function userCartsNotify()
{
require_once(JPATH_ROOT . '/administrator/components/com_djcatalog2/helpers/messenger.php');
$app = Factory::getApplication();
$db = Factory::getDbo();
$session_time = $app->getCfg('lifetime', '30');
$query = $db->getQuery(true);
$query->select('uc.*, u.email');
$query->from('#__djc2_usercarts AS uc');
$query->join('INNER', '#__users AS u ON uc.user_id = u.id');
$query->where('uc.time < now() - INTERVAL ' . $session_time . ' MINUTE AND uc.email_sent IS NULL');
$db->setQuery($query);
$usercarts = $db->loadObjectList();
foreach ($usercarts as $usercart) {
$items = json_decode((string)$usercart->items);
$ids = [];
foreach ($items as $key => $qty) {
$temp = explode('.', $key, 2);
if (isset($temp[0])) {
$ids[$temp[0]] = $qty;
}
}
if (!empty($ids)) {
$query = $db->getQuery(true);
$query->select('i.id, i.alias, i.name, i.cat_id, c.alias as category_alias');
$query->from('#__djc2_items as i');
$query->join('inner', '#__djc2_categories as c ON c.id=i.cat_id');
$query->where('i.id IN (' . implode(',', array_keys($ids)) . ')');
$db->setQuery($query);
$list = $db->loadObjectList('id');
if (count($list) > 0) {
$data = array();
$data['items'] = $list;
$data['quantities'] = $ids;
$mailopts = [
'cart_link' => Route::_(DJCatalog2HelperRoute::getCartRoute(), true, (Uri::getInstance()->isSsl() ? 1 : -1)),
'cart_items' => DJCatalog2HtmlHelper::getThemeLayout($data, 'cart_items', 'email/layouts')
];
$messenger = new DJCatalog2HelperMessenger();
$messenger->notify($usercart->email, ['type' => 'cart_abandoned'], [], $mailopts);
}
}
$query = $db->getQuery(true);
$query->update('#__djc2_usercarts');
$query->set('email_sent=NOW()');
$query->where('user_id=' . $usercart->user_id);
$db->setQuery($query);
$db->execute();
}
return true;
}
protected function unPaidOrdersNotify()
{
require_once(JPATH_ROOT . '/administrator/components/com_djcatalog2/helpers/messenger.php');
$app = Factory::getApplication();
$db = Factory::getDbo();
$params = ComponentHelper::getParams('com_djcatalog2');
$status1 = $params->get('cart_status_new_reg', 'A');
$status2 = $params->get('cart_status_new_guest', 'N');
$daysOld = (int)$params->get('cron_upaid_days', 1);
$daysOld = min(30, max(1, $daysOld));
$maxDate = Factory::getDate('-' . $daysOld . ' day');
$minDate = Factory::getDate('-31 days');
$query = $db->getQuery(true);
$query->select('o.*');
$query->from('#__djc2_orders AS o');
// leaving room for more notifications to send
$query->where('(o.paynotify_cnt != -1 AND o.paynotify_cnt < 1)');
// give them some time
$query->where('o.created_date < ' . $db->quote($maxDate->toSql()));
// ... but let's be serious
$query->where('o.created_date >= ' . $db->quote($minDate->toSql()));
// include only "new" statuses
$query->where('( o.status = ' . $db->quote($status1) . ' OR o.status = ' . $db->quote($status2) . ') ');
$db->setQuery($query);
$orders = $db->loadObjectList();
foreach ($orders as $order) {
$mailopts = [
'recipient_name' => ($order->firstname != '') ? $order->firstname : ($order->lastname != '' ? $order->lastname : $order->company),
'order_link' => Route::_(DJCatalog2HelperRoute::getOrderRoute($order->id) . '&token=' . $order->token, true, (Uri::getInstance()->isSsl() ? 1 : -1)),
'order_number' => str_pad($order->order_number, 6, '0', STR_PAD_LEFT)
];
$messenger = new DJCatalog2HelperMessenger();
$messenger->notify($order->email, ['type' => 'order_payment'], [], $mailopts);
$query = $db->getQuery(true);
$query->update('#__djc2_orders');
$query->set('paynotify_cnt = paynotify_cnt + 1');
$query->where('id=' . $order->id);
$db->setQuery($query);
$db->execute();
}
return true;
}
protected function rateOrdersNotify()
{
require_once(JPATH_ROOT . '/administrator/components/com_djcatalog2/helpers/messenger.php');
$app = Factory::getApplication();
$db = Factory::getDbo();
$params = ComponentHelper::getParams('com_djcatalog2');
$invoiceStatuses = (array)$params->get('cart_status_invoice', array('C', 'P', 'F'));
$orStatuses = [];
foreach ($invoiceStatuses as $status) {
$orStatuses[] = 'o.status = ' . $db->quote($status);
}
if (empty($orStatuses)) return;
$daysOld = (int)$params->get('cron_rating_days', 1);
$daysOld = min(30, max(1, $daysOld));
$maxDate = Factory::getDate('-' . $daysOld . ' day');
$minDate = Factory::getDate('-31 day');
$query = $db->getQuery(true);
$query->select('o.*');
$query->from('#__djc2_orders AS o');
// leaving room for more notifications to send
$query->where('(o.ratingnotify_cnt != -1 AND o.ratingnotify_cnt < 1)');
// give them some time
$query->where('o.created_date < ' . $db->quote($maxDate->toSql()));
// ... but let's be serious
$query->where('o.created_date >= ' . $db->quote($minDate->toSql()));
// include only "completed" statuses
$query->where('( ' . implode(' OR ', $orStatuses) . ' )');
// only registered user are able to rate order items
$query->where('o.user_id > 0');
$db->setQuery($query);
$orders = $db->loadObjectList();
foreach ($orders as $order) {
$data = Joomla\Utilities\ArrayHelper::fromObject($order);
$query = $db->getQuery(true);
$query->select('oi.*');
$query->from('#__djc2_order_items AS oi');
$query->where('oi.order_id=' . $order->id);
$db->setQuery($query);
$data['items'] = $db->loadAssocList();
if (count($data['items'])) {
$mailopts = [
'recipient_name' => ($order->firstname != '') ? $order->firstname : ($order->lastname != '' ? $order->lastname : $order->company),
'order_link' => Route::_(DJCatalog2HelperRoute::getOrderRoute($order->id) . '&layout=rating&token=' . $order->token, true, (Uri::getInstance()->isSsl() ? 1 : -1)),
'order_number' => str_pad($order->order_number, 6, '0', STR_PAD_LEFT),
'order_items' => DJCatalog2HtmlHelper::getThemeLayout($data, 'order_items', 'email/layouts')
];
$messenger = new DJCatalog2HelperMessenger();
$messenger->notify($order->email, ['type' => 'order_rating'], [], $mailopts);
}
$query = $db->getQuery(true);
$query->update('#__djc2_orders');
$query->set('ratingnotify_cnt = ratingnotify_cnt + 1');
$query->where('id=' . $order->id);
$db->setQuery($query);
$db->execute();
}
return true;
}
protected function processRecurringOrders() {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('ro.id, ro.order_id, ro.start');
$query->from('#__djc2_orders_recurring AS ro');
$query->join('left', '#__djc2_orders_recurring AS ro2 ON ro2.id != ro.id AND ro2.start > ro.start AND ro2.order_id = ro.order_id AND ro2.executed=0');
$query->where('ro.executed=0');
$query->where('ro.start <= ' . $db->quote(Factory::getDate()->toSql()));
$query->group('ro.order_id');
$db->setQuery($query);
$orders = $db->loadObjectList();
if (!count($orders)) {
return;
}
$model = $this->getModel('Order', 'DJCatalog2Model');
foreach($orders as $orderRepeat) {
$order = $model->getItem($orderRepeat->order_id);
if (empty($order)) {
continue;
}
if ($model->repeatOrder($order)) {
$query = $db->getQuery(true);
$query->update('#__djc2_orders_recurring')->set('executed=1')->where('id='.$orderRepeat->id);
$db->setQuery($query);
$db->execute();
}
}
}
private function importTCPDF()
{
$libfile = JPATH_LIBRARIES . '/tcpdf/tcpdf.php';
if (File::exists($libfile) == false) {
return false;
}
require_once $libfile;
return true;
}
public function getInvoice()
{
$user = Factory::getUser();
$db = Factory::getDbo();
$app = Factory::getApplication();
$invoice_id = $app->input->getInt('oid', false);
$return_url = base64_encode(Route::_(DJCatalogHelperRoute::getOrdersRoute(), false));
if (!$invoice_id) {
throw new Exception(Text::_('COM_DJCATALOG2_ERROR_INVALID_REQUEST'), 400);
}
if ($user->guest) {
$app->enqueueMessage(Text::_('COM_DJCATALOG2_PLEASE_LOGIN'));
$app->redirect(Route::_('index.php?option=com_users&view=login&return=' . $return_url, false), 303);
return false;
}
$model = $this->getModel('Order', 'DJCatalog2Model');
$salesman = $user->authorise('djcatalog2.salesman', 'com_djcatalog2');
$invoice = $model->getItem($invoice_id);
if ($invoice->user_id != $user->id && !($user->authorise('core.admin') || $salesman)) {
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
if (!$this->importTCPDF()) {
$this->setRedirect(Route::_(DJCatalogHelperRoute::getOrdersRoute(), false), Text::_('COM_DJCATALOG2_TCPDF_LIB_IS_MISSING'), 'error');
return false;
}
$filename = File::makeSafe('invoice-' . str_replace('/', '-', $invoice->invoice_number)) . '.pdf';
$task = $this->getTask();
$layout = ($task == 'proforma_selected') ? 'proforma' : 'invoice';
error_reporting(0);
@ini_set('display_errors', 0);
$pdf = new TCPDF();
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->setFontSubsetting(true);
$pdf->SetFont('freesans', '', 9, '', true);
$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(true);
$pdf->SetFooterMargin('15px');
$db = Factory::getDbo();
$db->setQuery('select * from #__djc2_order_items where order_id=' . $invoice->id);
$invoice->items = $db->loadObjectList();
$pdf->AddPage();
$pdf->_intCurPage = 1;
$pdf->_intFootNo = $invoice->invoice_number;
$html = DJCatalog2HtmlHelper::getThemeLayout($invoice, $layout, 'pdf');
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->Output($filename, 'D');
$app->close();
}
public function pixelMsg()
{
$app = Factory::getApplication();
$pixel = $app->input->getInt('pixel');
$code = $app->input->getString('code');
if ($pixel > 0 && $code != '') {
$code = base64_decode($code);
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->update('#__djc2_messages');
$query->set('is_opened=1');
$query->where('id=' . (int)$pixel);
$query->where('sent_time=' . $db->quote($code));
$db->setQuery($query);
$db->execute();
}
header('Content-Type: image/gif');
readfile(JPATH_ROOT . '/media/djcatalog2/assets/tracking.gif');
$app->close();
}
public function accesslogin()
{
$app = Factory::getApplication();
$user = Factory::getUser();
$id = $app->input->getInt('id');
$response = [
'redirect' => false,
'body' => '',
'message' => '',
'error' => false
];
if ($user->guest) {
$module = ModuleHelper::getModule('mod_login', 'Please login!');
$response['body'] = ModuleHelper::renderModule($module);
} else {
$orders = Djcatalog2HelperUser::getUserOrders($user->id);
$auth = false;
if (!empty($orders['items'])) {
foreach ($orders['items'] as $purchasedItem) {
if ($purchasedItem->item_type != 'item' || $purchasedItem->item_id != $id) continue;
$auth = true;
break;
}
}
if (!$auth) {
$response['message'] = Text::_('COM_DJCATALOG2_AUTH_ERROR_ORDER_NOT_AUTHORISED');
} else {
$response['message'] = Text::_('COM_DJCATALOG2_AUTH_MSG_ALREADY_LOGGED_IN_REDIRECT');
$response['redirect'] = Uri::current();
}
}
echo json_encode($response);
$app->close();
}
function select_currency()
{
$app = Factory::getApplication();
$return = $app->input->getBase64('return');
$currency_id = $app->input->getInt('currency');
$currency = Djcatalog2HelperPrice::getCurrencyById($currency_id);
if (!empty($currency)) {
$app->setUserState('com_djcatalog2.checkout.currency', $currency->id);
}
if ($return) {
$this->setRedirect(base64_decode($return));
}
return true;
}
}