Commit 7a67a2c0 authored by Ad Schellevis's avatar Ad Schellevis

(mvc) some refactoring for https://github.com/opnsense/core/pull/1124

parent 3235ee26
<?php <?php
/** /**
* Copyright (C) 2016 IT-assistans Sverige AB * Copyright (C) 2016 IT-assistans Sverige AB
* Copyright (C) 2016 Deciso B.V.
* *
* All rights reserved. * All rights reserved.
* *
...@@ -28,7 +29,6 @@ ...@@ -28,7 +29,6 @@
*/ */
namespace OPNsense\Base; namespace OPNsense\Base;
use OPNsense\Base\ApiControllerBase;
/** /**
* Class ApiModelControllerBase, inherit this class to implement * Class ApiModelControllerBase, inherit this class to implement
...@@ -40,22 +40,71 @@ use OPNsense\Base\ApiControllerBase; ...@@ -40,22 +40,71 @@ use OPNsense\Base\ApiControllerBase;
*/ */
abstract class ApiModelControllerBase extends ApiControllerBase abstract class ApiModelControllerBase extends ApiControllerBase
{ {
/**
* @var string this implementations internal model name to use (in set/get output)
*/
protected $internalModelName = null;
/**
* @var string model class name to use
*/
protected $internalModelClass = null;
/**
* @var null|BaseModel model object to work on
*/
private $modelHandle = null;
/**
* validate on initialization
* @throws Exception
*/
public function initialize()
{
parent::initialize();
if (empty($this->internalModelClass)) {
throw new \Exception('cannot instantiate without internalModelClass defined.');
}
if (empty($this->internalModelName)) {
throw new \Exception('cannot instantiate without internalModelName defined.');
}
}
/**
* retrieve model settings
* @return array settings
*/
public function getAction() public function getAction()
{ {
// define list of configurable settings // define list of configurable settings
$result = array(); $result = array();
if ($this->request->isGet()) { if ($this->request->isGet()) {
$mdl = $this->getModel(); $mdl = $this->getModel();
$result[$this->getModelName()] = $this->getModelNodes($mdl); $result[$this->internalModelName] = $this->getModelNodes();
} }
return $result; return $result;
} }
abstract protected function getModel();
abstract protected function getModelName();
/** /**
* override this to customize what part of the model gets exposed * override this to customize what part of the model gets exposed
* @return array
*/
protected function getModelNodes()
{
return $this->getModel()->getNodes();
}
/**
* override this to customize the model binding behavior
* @return null|BaseModel
*/ */
protected function getModelNodes($mdl) { protected function getModel()
return $mdl->getNodes(); {
if ($this->modelHandle == null) {
$this->modelHandle = (new \ReflectionClass($this->internalModelClass))->newInstance();
}
return $this->modelHandle;
} }
} }
<?php <?php
/** /**
* Copyright (C) 2016 IT-assistans Sverige AB * Copyright (C) 2016 IT-assistans Sverige AB
* Copyright (C) 2016 Deciso B.V.
* *
* All rights reserved. * All rights reserved.
* *
...@@ -28,7 +29,7 @@ ...@@ -28,7 +29,7 @@
*/ */
namespace OPNsense\Base; namespace OPNsense\Base;
use OPNsense\Base\ApiModelControllerBase; use \OPNsense\Core\Config;
/** /**
* Class ApiMutableModelControllerBase, inherit this class to implement * Class ApiMutableModelControllerBase, inherit this class to implement
...@@ -40,13 +41,17 @@ use OPNsense\Base\ApiModelControllerBase; ...@@ -40,13 +41,17 @@ use OPNsense\Base\ApiModelControllerBase;
*/ */
abstract class ApiMutableModelControllerBase extends ApiModelControllerBase abstract class ApiMutableModelControllerBase extends ApiModelControllerBase
{ {
/**
* update model settings
* @return array status / validation errors
*/
public function setAction() public function setAction()
{ {
$result = array("result"=>"failed"); $result = array("result"=>"failed");
if ($this->request->isPost()) { if ($this->request->isPost()) {
// load model and update with provided data // load model and update with provided data
$mdl = $this->getModel(); $mdl = $this->getModel();
$mdl->setNodes($this->request->getPost(getModelName())); $mdl->setNodes($this->request->getPost($this->internalModelName));
// perform validation // perform validation
$valMsgs = $mdl->performValidation(); $valMsgs = $mdl->performValidation();
...@@ -54,7 +59,7 @@ abstract class ApiMutableModelControllerBase extends ApiModelControllerBase ...@@ -54,7 +59,7 @@ abstract class ApiMutableModelControllerBase extends ApiModelControllerBase
if (!array_key_exists("validations", $result)) { if (!array_key_exists("validations", $result)) {
$result["validations"] = array(); $result["validations"] = array();
} }
$result["validations"][$this->getModelName().".".$msg->getField()] = $msg->getMessage(); $result["validations"][$this->internalModelName.".".$msg->getField()] = $msg->getMessage();
} }
// serialize model to config and save // serialize model to config and save
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment