Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
vikbooking
/
admin
/
controllers
:
report.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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 report controller. * * @since 1.17.1 (J) - 1.7.1 (WP) */ class VikBookingControllerReport extends JControllerAdmin { /** * AJAX endpoint to render the custom settings of a report. * * @return void */ public function renderSettings() { $app = JFactory::getApplication(); if (!JSession::checkToken()) { // missing CSRF-proof token VBOHttpDocument::getInstance($app)->close(403, JText::translate('JINVALID_TOKEN')); } $report = $app->input->getString('report', ''); $report_obj = VikBooking::getReportInstance($report); if (!$report_obj) { // invalid report requested VBOHttpDocument::getInstance($app)->close(404, sprintf('Could not find the report [%s] to load the settings from.', $report)); } // fetch the report form settings $layout_data = [ 'report' => $report, 'fields' => $report_obj->getSettingFields(), 'settings' => $report_obj->loadSettings(), 'instance' => $report_obj, ]; $form_html = JLayoutHelper::render('reports.report.settings', $layout_data); // send the response to output VBOHttpDocument::getInstance($app)->json([ 'html' => $form_html, ]); } /** * AJAX endpoint to save the custom settings of a report. * * @return void */ public function saveSettings() { $app = JFactory::getApplication(); if (!JSession::checkToken()) { // missing CSRF-proof token VBOHttpDocument::getInstance($app)->close(403, JText::translate('JINVALID_TOKEN')); } $report = $app->input->getString('report', ''); $data = $app->input->get('data', [], 'array'); $profile = $app->input->getString('_profile', ''); $profile_name = $app->input->getString('_newprofile', ''); $report_obj = VikBooking::getReportInstance($report); if (!$report_obj) { // invalid report requested VBOHttpDocument::getInstance($app)->close(404, sprintf('Could not find the report [%s] to save the settings for.', $report)); } // check for settings profile identifier $use_profile_id = null; if ($report_obj->allowsProfileSettings() && !empty($profile)) { if ($profile == '_new' && empty($profile_name)) { VBOHttpDocument::getInstance($app)->close(500, 'Please specify the name for the new settings profile.'); } // set active profile $use_profile_id = $profile; if (!empty($profile_name)) { // add the new profile list($use_profile_id, $profile_name) = $report_obj->setSettingProfile($profile_name); } // update active profile $report_obj->setActiveProfile($use_profile_id); } // save report settings $report_obj->saveSettings($data, $merge = true, $use_profile_id); // send the response to output VBOHttpDocument::getInstance($app)->json([ 'success' => 1, 'profiles' => $report_obj->getSettingProfiles(), 'active_profile' => $use_profile_id, ]); } /** * AJAX endpoint to execute a custom scoped action of a report. * * @return void */ public function executeCustomAction() { $app = JFactory::getApplication(); if (!JSession::checkToken()) { // missing CSRF-proof token VBOHttpDocument::getInstance($app)->close(403, JText::translate('JINVALID_TOKEN')); } $report = $app->input->getString('report_file', ''); $action = $app->input->getString('report_action', ''); $scope = $app->input->getString('report_scope', ''); $data = $app->input->get('report_data', [], 'array'); $report_obj = VikBooking::getReportInstance($report); if (!$report_obj) { // invalid report requested VBOHttpDocument::getInstance($app)->close(404, sprintf('Could not find the report [%s] for executing the action.', $report)); } // get all the available scoped actions, hidden and visible $actions = $report_obj->getScopedActions($scope, $visible = false); if (!in_array($action, array_column($actions, 'id'))) { // unsupported action VBOHttpDocument::getInstance($app)->close(403, sprintf('Unsupported report action [%s].', $action)); } try { $result = $report_obj->executeAction($action, $scope, $data); } catch (Exception $e) { VBOHttpDocument::getInstance($app)->close($e->getCode(), $e->getMessage()); } // send the response to output VBOHttpDocument::getInstance($app)->json($result); } /** * AJAX endpoint to set the report active profile settings identifier. * * @return void * * @since 1.17.7 (J) - 1.7.7 (WP) */ public function setActiveProfile() { $app = JFactory::getApplication(); if (!JSession::checkToken()) { // missing CSRF-proof token VBOHttpDocument::getInstance($app)->close(403, JText::translate('JINVALID_TOKEN')); } $report = $app->input->getString('report_file', ''); $profile = $app->input->getString('report_profile', ''); $report_obj = VikBooking::getReportInstance($report); if (!$report_obj) { // invalid report requested VBOHttpDocument::getInstance($app)->close(404, sprintf('Could not find the report [%s].', $report)); } $report_obj->setActiveProfile($profile); // send response to output VBOHttpDocument::getInstance($app)->json([ 'profile' => $profile, ]); } /** * AJAX endpoint to clear all report profile settings. * * @return void * * @since 1.17.7 (J) - 1.7.7 (WP) */ public function clearProfiles() { $app = JFactory::getApplication(); if (!JSession::checkToken()) { // missing CSRF-proof token VBOHttpDocument::getInstance($app)->close(403, JText::translate('JINVALID_TOKEN')); } $report = $app->input->getString('report_file', ''); $report_obj = VikBooking::getReportInstance($report); if (!$report_obj) { // invalid report requested VBOHttpDocument::getInstance($app)->close(404, sprintf('Could not find the report [%s].', $report)); } $report_obj->clearProfiles(); // send response to output VBOHttpDocument::getInstance($app)->json([ 'success' => true, ]); } }