wp_back/wp-content/plugins/smart-slider-3/Nextend/Framework/Controller/AbstractController.php
2024-05-20 15:37:46 +03:00

198 lines
4.9 KiB
PHP

<?php
namespace Nextend\Framework\Controller;
use Exception;
use Nextend\Framework\Acl\Acl;
use Nextend\Framework\Application\AbstractApplication;
use Nextend\Framework\Application\AbstractApplicationType;
use Nextend\Framework\Asset\AssetManager;
use Nextend\Framework\Asset\Predefined;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Pattern\GetPathTrait;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\Framework\Plugin;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
abstract class AbstractController {
use GetPathTrait;
use MVCHelperTrait;
/**
* @var AbstractApplicationType
*/
protected $applicationType;
/** @var callback[] */
protected $externalActions = array();
/**
* AbstractController constructor.
*
* @param AbstractApplicationType $applicationType
*/
public function __construct($applicationType) {
//PluggableController\Nextend\SmartSlider3\Application\Admin\Slider\ControllerSlider
Plugin::doAction('PluggableController\\' . get_class($this), array($this));
$this->applicationType = $applicationType;
$this->setMVCHelper($this->applicationType);
AssetManager::getInstance();
$this->initialize();
}
/**
* @param $actionName
* @param callback $callable
*/
public function addExternalAction($actionName, $callable) {
$this->externalActions[$actionName] = $callable;
}
/**
* @return AbstractApplication
*/
public function getApplication() {
return $this->applicationType->getApplication();
}
/**
* @return AbstractApplicationType
*/
public function getApplicationType() {
return $this->applicationType;
}
public function getRouter() {
return $this->applicationType->getRouter();
}
/**
* @param $actionName
* @param array $args
*
* @throws Exception
*/
final public function doAction($actionName, $args = array()) {
$originalActionName = $actionName;
if (method_exists($this, 'action' . $actionName)) {
call_user_func_array(array(
$this,
'action' . $actionName
), $args);
} else if (isset($this->externalActions[$actionName]) && is_callable($this->externalActions[$actionName])) {
call_user_func_array($this->externalActions[$actionName], $args);
} else {
$actionName = $this->missingAction($this, $actionName);
if (method_exists($this, 'action' . $actionName)) {
call_user_func_array(array(
$this,
'action' . $actionName
), $args);
} else {
throw new Exception(sprintf('Missing action (%s) for controller (%s)', $originalActionName, static::class));
}
}
}
protected function missingAction($controllerName, $actionName) {
return 'index';
}
public function initialize() {
Predefined::frontend();
}
/**
* Check ACL permissions
*
* @param $action
*
* @return bool
*/
public function canDo($action) {
return Acl::canDo($action, $this);
}
public function redirect($url, $statusCode = 302, $terminate = true) {
Request::redirect($url, $statusCode, $terminate);
}
public function validatePermission($permission) {
if (!$this->canDo($permission)) {
Notification::error(n2_('You are not authorised to view this resource.'));
ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin()
->process('sliders', 'index');
return false;
}
return true;
}
public function validateVariable($condition, $property) {
if (!$condition) {
Notification::error(sprintf(n2_('Missing parameter: %s'), $property));
ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin()
->process('sliders', 'index');
return false;
}
return true;
}
public function validateDatabase($condition, $showError = true) {
if (!$condition) {
if ($showError) {
Notification::error(n2_('Database error'));
ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin()
->process('sliders', 'index');
}
return false;
}
return true;
}
public function validateToken() {
if (!Form::checkToken()) {
Notification::error(n2_('Security token mismatch'));
return false;
}
return true;
}
}