%PDF- %PDF-
Direktori : /backups/router/usr/local/opnsense/mvc/app/controllers/OPNsense/Cron/Api/ |
Current File : //backups/router/usr/local/opnsense/mvc/app/controllers/OPNsense/Cron/Api/SettingsController.php |
<?php /** * Copyright (C) 2015 Deciso B.V. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ namespace OPNsense\Cron\Api; use OPNsense\Base\ApiMutableModelControllerBase; use OPNsense\Core\Config; use OPNsense\Cron\Cron; /** * Class SettingsController Handles settings related API actions for the Cron * @package OPNsense\Cron */ class SettingsController extends ApiMutableModelControllerBase { protected static $internalModelName = 'job'; protected static $internalModelClass = '\OPNsense\Cron\Cron'; /** * retrieve job settings or return defaults * @param $uuid item unique id * @return array job contents * @throws \ReflectionException when not bound to model */ public function getJobAction($uuid = null) { return $this->getBase("job", "jobs.job", $uuid); } /** * update job with given properties * @param $uuid item unique id * @return array */ public function setJobAction($uuid) { if ($this->request->isPost() && $this->request->hasPost("job")) { if ($uuid != null) { $node = $this->getModel()->getNodeByReference('jobs.job.' . $uuid); if ($node != null) { $result = array("result" => "failed", "validations" => array()); $jobInfo = $this->request->getPost("job"); if ((string)$node->origin != "cron") { if ($jobInfo["command"] != (string)$node->command) { $result["validations"]["job.command"] = gettext("This item has been created by " . "another service, command and parameter may not be changed."); } if ($jobInfo["parameters"] != (string)$node->parameters) { $result["validations"]["job.parameters"] = sprintf( gettext("This item has been created by " . "another service, command and parameter may not be changed. (was: %s)"), (string)$node->parameters ); } } $node->setNodes($jobInfo); $valMsgs = $this->getModel()->performValidation(); foreach ($valMsgs as $field => $msg) { $fieldnm = str_replace($node->__reference, "job", $msg->getField()); $result["validations"][$fieldnm] = $msg->getMessage(); } if (count($result['validations']) == 0) { $result = $this->save(); } return $result; } } } return array("result" => "failed"); } /** * add new job and set with attributes from post * @return array save result + validation output * @throws \OPNsense\Base\ModelException when not bound to model * @throws \OPNsense\Base\ValidationException when field validations fail * @throws \ReflectionException */ public function addJobAction() { return $this->addBase("job", "jobs.job"); } /** * delete job by uuid ( only if origin is cron) * @param string $uuid item unique id * @return array status * @throws \OPNsense\Base\ValidationException when field validations fail * @throws \ReflectionException when not bound to model * @throws \OPNsense\Base\ModelException when not bound to model */ public function delJobAction($uuid) { if ($uuid != null) { $node = (new Cron())->getNodeByReference('jobs.job.' . $uuid); if ($node->origin == "cron") { return $this->delBase("jobs.job", $uuid); } } return array("result" => "failed"); } /** * toggle job by uuid (enable/disable) * @param $uuid item unique id * @param $enabled desired state enabled(1)/disabled(1), leave empty for toggle * @return array status * @throws \OPNsense\Base\ValidationException when field validations fail * @throws \ReflectionException when not bound to model */ public function toggleJobAction($uuid, $enabled = null) { return $this->toggleBase("jobs.job", $uuid, $enabled); } /** * search cron jobs * @return array search results * @throws \ReflectionException */ public function searchJobsAction() { return $this->searchBase( "jobs.job", array("enabled", "minutes","hours", "days", "months", "weekdays", "description", "command", "origin"), "description" ); } }