File "override.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/libraries/mvc/admin/controllers/override.php
File size: 7.74 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage core
* @author E4J s.r.l.
* @copyright Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* @link https://vikwp.com
*/
// No direct access
defined('ABSPATH') or die('No script kiddies please!');
JLoader::import('adapter.mvc.controllers.admin');
/**
* VikBooking plugin Override controller.
*
* @since 1.6.5
*/
class VikBookingControllerOverride extends JControllerAdmin
{
/**
* Task used to save the record data set in the request.
* After saving, the user is redirected to the management
* page of the record that has been saved.
*
* @return boolean
*/
public function save()
{
$app = JFactory::getApplication();
$ajax = wp_doing_ajax();
if (!JSession::checkToken())
{
// missing CSRF-proof token
if ($ajax)
{
// ajax request
VBOHttpDocument::getInstance($app)->close(403, JText::translate('JINVALID_TOKEN'));
}
else
{
// post request
throw new Exception(JText::translate('JINVALID_TOKEN'), 403);
}
}
// make sure the user is authorised to manage overrides
if (!JFactory::getUser()->authorise('core.admin', 'com_vikbooking'))
{
// action denied
if ($ajax)
{
// ajax request
VBOHttpDocument::getInstance($app)->close(403, JText::translate('JERROR_ALERTNOAUTHOR'));
}
else
{
// post request
throw new Exception(JText::translate('JERROR_ALERTNOAUTHOR'), 403);
}
}
// get selected file and override
$client = $app->input->getString('client', 'site');
$status = $app->input->getString('status', '');
$file = $app->input->getBase64('selectedfile', '');
$override = $app->input->getBase64('overridefile', '');
// build return URL
$url = sprintf(
'admin.php?page=vikbooking&view=overrides&client=%s&selectedfile=%s&overridefile=%s',
$client,
$file,
$override
);
if ($status !== '')
{
$url .= '&status=' . (int) $status;
}
// register redirect URL
$this->setRedirect($url);
// build save data
$data = [];
$data['file'] = base64_decode($override);
$data['code'] = $app->input->get('code', '', 'raw');
/**
* Preserve the current status.
*
* @since 1.6.10
*/
$data['published'] = $status;
if (empty($data['code']))
{
$error = __('No code received', 'vikbooking');
// missing code data
if ($ajax)
{
// ajax request
VBOHttpDocument::getInstance($app)->close(400, $error);
}
else
{
// post request, enqueue message and do redirect
$app->enqueueMessage($error, 'error');
return false;
}
}
// load overrides model
$overridesModel = $this->getModel('overrides', 'VikBookingModel');
// make sure the override we are going to create/update is supported
$supported = $overridesModel->isSupported($client, $data['file']);
if (!$supported)
{
$error = sprintf(__('Cannot use the file as destination: [%s]', 'vikbooking'), $data['file']);
// path not supported
if ($ajax)
{
// ajax request
VBOHttpDocument::getInstance($app)->close(500, $error);
}
else
{
// post request, enqueue message and do redirect
$app->enqueueMessage($error, 'error');
return false;
}
}
// dispatch model to save the item
if (!$this->model->save($data))
{
// get string error
$error = $this->model->getError(null, false);
if (!$error instanceof Exception)
{
$error = new Exception($error ?: 'Unknown', 500);
}
$string = JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $error->getMessage());
if ($ajax)
{
// ajax request
VBOHttpDocument::getInstance($app)->close($error->getCode() ?: 500, $string);
}
else
{
// post request, enqueue message and do redirect
$app->enqueueMessage($string, 'error');
return false;
}
}
if ($ajax)
{
// exit in case of AJAX request
VBOHttpDocument::getInstance($app)->json(1);
}
// display generic successful message
$app->enqueueMessage(JText::translate('JLIB_APPLICATION_SAVE_SUCCESS'));
return true;
}
/**
* Deletes a list of records set in the request.
*
* @return boolean
*/
public function delete()
{
$app = JFactory::getApplication();
if (!JSession::checkToken() && !JSession::checkToken('get'))
{
// missing CSRF-proof token
throw new Exception(JText::translate('JINVALID_TOKEN'), 403);
}
// make sure the user is authorised to manage overrides
if (!JFactory::getUser()->authorise('core.admin', 'com_vikbooking'))
{
// action denied
throw new Exception(JText::translate('JERROR_ALERTNOAUTHOR', 403));
}
// get selected file and override
$client = $app->input->getString('client', 'site');
$status = $app->input->getString('status', '');
$file = $app->input->getBase64('selectedfile', '');
$override = $app->input->getBase64('overridefile', '');
// build return URL
$url = sprintf(
'admin.php?page=vikbooking&view=overrides&client=%s&selectedfile=%s&overridefile=%s',
$client,
$file,
$override
);
if ($status !== '')
{
$url .= '&status=' . (int) $status;
}
// register redirect URL
$this->setRedirect($url);
// fetch file PK
$pk = base64_decode($override);
// load overrides model
$overridesModel = $this->getModel('overrides', 'VikBookingModel');
// make sure the override we are going to delete is supported
$supported = $overridesModel->isSupported($client, $pk);
if (!$supported)
{
// invalid file
$app->enqueueMessage(sprintf('The file to remove is not an override: [%s]', $pk), 'error');
return false;
}
// dispatch model to delete the item
if ($this->model->delete($pk))
{
$app->enqueueMessage(__('1 item deleted.', 'vikbooking'));
}
return true;
}
/**
* Task used to publish/unpublish an existing override.
*
* @return boolean
*/
public function publish()
{
$app = JFactory::getApplication();
if (!JSession::checkToken() && !JSession::checkToken('get'))
{
// missing CSRF-proof token
throw new Exception(JText::translate('JINVALID_TOKEN'), 403);
}
$state = $app->input->get('task') == 'unpublish' ? false : true;
// make sure the user is authorised to manage overrides
if (!JFactory::getUser()->authorise('core.admin', 'com_vikbooking'))
{
// action denied
throw new Exception(JText::translate('JERROR_ALERTNOAUTHOR', 403));
}
// get selected file and override
$client = $app->input->getString('client', 'site');
$status = $app->input->getString('status', '');
$file = $app->input->getBase64('selectedfile', '');
$override = $app->input->getBase64('overridefile', '');
// build return URL
$url = sprintf(
'admin.php?page=vikbooking&view=overrides&client=%s&selectedfile=%s&overridefile=%s',
$client,
$file,
$override
);
if ($status !== '')
{
$url .= '&status=' . (int) $status;
}
// register redirect URL
$this->setRedirect($url);
// fetch file PK
$pk = base64_decode($override);
// load overrides model
$overridesModel = $this->getModel('overrides', 'VikBookingModel');
// make sure the override we are going to toggle is supported
$supported = $overridesModel->isSupported($client, $pk);
if (!$supported)
{
// invalid file
$app->enqueueMessage(sprintf('The file to publish is not an override: [%s]', $pk), 'error');
return false;
}
// dispatch model to toggle the item
$this->model->publish($pk, $state);
return true;
}
/**
* AJAX end-point used to dismiss the breaking changes.
*
* @return void
*/
public function dismissbc()
{
$app = JFactory::getApplication();
// get a list of specified files, if any
$files = $app->input->get('files', null, 'string');
// unregister breaking changes
VikBookingInstaller::unregisterBreakingChanges($files);
$this->sendJSON(1);
}
}