<?php
/**
* @package VikBooking
* @subpackage core
* @author E4J s.r.l.
* @copyright Copyright (C) 2021 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!');
/**
* VikBooking cron jobs controller.
*
* @since 1.5.10
*/
class VikBookingControllerCronjob extends JControllerAdmin
{
/**
* Task used to access the creation page of a new record.
*
* @return boolean
*/
public function add()
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
// check user permissions
if (!$user->authorise('core.create', 'com_vikbooking') || !$user->authorise('core.vbo.management', 'com_vikbooking'))
{
// back to main list, not authorised to create records
$app->enqueueMessage(JText::translate('JERROR_ALERTNOAUTHOR'), 'error');
$this->cancel();
return false;
}
$this->setRedirect('index.php?option=com_vikbooking&view=managecron');
return true;
}
/**
* Task used to access the management page of an existing record.
*
* @return boolean
*/
public function edit()
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
// check user permissions
if (!$user->authorise('core.edit', 'com_vikbooking') || !$user->authorise('core.vbo.management', 'com_vikbooking'))
{
// back to main list, not authorised to edit records
$app->enqueueMessage(JText::translate('JERROR_ALERTNOAUTHOR'), 'error');
$this->cancel();
return false;
}
$cid = $app->input->getUint('cid', array(0));
$this->setRedirect('index.php?option=com_vikbooking&view=managecron&cid[]=' . $cid[0]);
return true;
}
/**
* Task used to save the record data set in the request.
* After saving, the user is redirected to the main list.
*
* @return void
*/
public function saveclose()
{
if ($this->save())
{
$this->cancel();
}
}
/**
* 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();
$user = JFactory::getUser();
if (!JSession::checkToken())
{
// back to main list, missing CSRF-proof token
$app->enqueueMessage(JText::translate('JINVALID_TOKEN'), 'error');
$this->cancel();
return false;
}
$data = [];
$data['id'] = $app->input->get('id', 0, 'uint');
$data['cron_name'] = $app->input->get('cron_name', '', 'string');
$data['class_file'] = $app->input->get('class_file', '', 'string');
$data['published'] = $app->input->get('published', 0, 'uint');
$data['params'] = $app->input->get('vikcronparams', [], 'array');
$rule = 'core.' . ($data['id'] > 0 ? 'edit' : 'create');
// check user permissions
if (!$user->authorise($rule, 'com_vikbooking') || !$user->authorise('core.vbo.management', 'com_vikbooking'))
{
// back to main list, not authorised to create/edit records
$app->enqueueMessage(JText::translate('JERROR_ALERTNOAUTHOR'), 'error');
$this->cancel();
return false;
}
$model = VBOMvcModel::getInstance('cronjob');
// try to save data
$id = $model->save($data);
if (!$id)
{
$error = $model->getError(null, true) ?: 'Unknown error.';
// display error message
$app->enqueueMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $error), 'error');
$url = 'index.php?option=com_vikbooking&view=managecron';
if ($data['id'])
{
$url .= '&cid[]=' . $data['id'];
}
// redirect to new/edit page
$this->setRedirect($url);
return false;
}
// display generic successful message
$app->enqueueMessage(JText::translate('JLIB_APPLICATION_SAVE_SUCCESS'));
// redirect to edit page
$this->setRedirect('index.php?option=com_vikbooking&task=cronjob.edit&cid[]=' . $id);
return true;
}
/**
* Deletes a list of records set in the request.
*
* @return boolean
*/
public function delete()
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
if (!JSession::checkToken() && !JSession::checkToken('get'))
{
// back to main list, missing CSRF-proof token
$app->enqueueMessage(JText::translate('JINVALID_TOKEN'), 'error');
$this->cancel();
return false;
}
$cid = $app->input->get('cid', array(), 'uint');
// check user permissions
if (!$user->authorise('core.delete', 'com_vikbooking') || !$user->authorise('core.vbo.management', 'com_vikbooking'))
{
// back to main list, not authorised to delete records
$app->enqueueMessage(JText::translate('JERROR_ALERTNOAUTHOR'), 'error');
$this->cancel();
return false;
}
// delete selected records
VBOMvcModel::getInstance('cronjob')->delete($cid);
// back to main list
$this->cancel();
return true;
}
/**
* Redirects the users to the main records list.
*
* @return void
*/
public function cancel()
{
$this->setRedirect('index.php?option=com_vikbooking&view=crons');
}
}