flatpress/admin/includes/panels.prototypes.php
azett 52bf429a01 Replaced Smarty 2.6.31-dev with v 4.0.4, keeping the FP-specific Smarty plugins.
Updated calls to current Smarty API (register_function()/register_modifier()/register_block() -> registerPlugin(); assign_by_ref() -> assignByRef()).
Fixed file includes in templates with quotes.
Removed SmartyValidate.class.php includes.

Still work in progress as some errors still appear!
2022-01-23 15:02:33 +01:00

283 lines
5.9 KiB
PHP

<?php
define('PANEL_NOREDIRECT', 0);
define('PANEL_REDIRECT_DEFAULT', 1);
define('PANEL_REDIRECT_CURRENT', 2);
/*
*
* GLOBALS: var $action string contains name of current panel action
*
*/
class AdminPanel {
var $panelname = null;
var $smarty = null;
var $actions = array(
'default' => false
);
var $defaultaction = 'default';
var $actionpanel = null;
function __construct(&$smarty) {
$this->smarty = & $smarty;
if (!$this->panelname)
trigger_error("Variable \$panelname is not defined!", E_USER_ERROR);
/* get plugin panels */
$plugactions = admin_getpanelactions($this->panelname);
/* add plugged actions to system-defined */
$this->actions = array_merge($this->actions, $plugactions);
/* if # actions > 1 we won't show it in the submenu bar */
/* this is just for aesthetics ;) */
if ((count($this->actions) > 1) && in_array(true, $this->actions))
$this->smarty->assign('submenu', $this->actions);
}
function &get_action(&$action) {
if (!$action)
$action = $this->defaultaction;
$obj = null;
if (!isset($this->actions [$action])) {
// trigger_error("$action:
// No such an action was defined", E_USER_ERROR);
$action = $this->defaultaction;
}
$this->smarty->assign('actionname', $action);
$class = get_class($this) . "_$action";
if (!class_exists($class)) {
$f = str_replace('_', '.', $class);
$fname = ADMIN_DIR . "panels/{$this->panelname}/$f.php";
if (file_exists($fname)) {
include ($fname);
if (!class_exists($class)) {
trigger_error("No classes for action $action.", E_USER_ERROR);
}
$obj = new $class($this->smarty);
return $obj;
} else
trigger_error("No script found for action $action", E_USER_ERROR);
} else {
$obj = new $class($this->smarty);
}
return $obj;
}
}
class AdminPanelAction {
var $actionname = null;
var $smarty = null;
var $events = array();
var $commands = array();
var $args = array();
var $langres = '';
function __construct(&$smarty) {
$this->smarty = & $smarty;
$the_action_panel = get_class($this);
$this->smarty->assign('admin_panel_id', $the_action_panel);
if (!$this->langres)
$this->langres = 'admin.' . ADMIN_PANEL;
}
function exec() {
global $panel, $action;
foreach ($this->args as $mandatory_argument) {
if (!isset($_REQUEST [$mandatory_argument])) {
return PANEL_REDIRECT_DEFAULT;
}
}
$this->setup();
do_action("admin_{$panel}_{$action}_setup");
$result = 0; // if !=0, defaultaction for this panel is called
if (empty($_POST)) {
if ($this->commands) {
foreach ($this->commands as $cmd) {
if (isset($_GET [$cmd])) {
$result = $this->docommand($cmd, $_GET [$cmd]);
return apply_filters("admin_{$panel}_{$action}_{$cmd}_{$_GET[ $cmd ]}", $result);
// return $result;
}
}
}
$result = $this->main();
do_action("admin_{$panel}_{$action}_main");
lang_load($this->langres);
} else {
$data = apply_filters("admin_{$panel}_{$action}_onsubmit", null);
$result = $this->onsubmit($data);
}
return $result;
}
function setup() {
}
function main() {
return 0;
}
/**
* Method onsubmit <br />
*
* @return int values:
* 1. if you want main() method to be called;
* 2. if you want main() method of the defaultaction
* 0. if you don't want any further action to be called
*
*/
function onsubmit($data = null) {
global $panel, $action;
$returnvalue = 1;
$valid_evts = array_intersect(array_keys($_POST), $this->events);
if ($the_event = array_pop($valid_evts)) {
$event = "on{$the_event}";
if (method_exists($this, $event)) {
$data = apply_filters("admin_{$panel}_{$action}_{$event}", $data);
$returnvalue = call_user_func(array(
&$this,
$event
), $data);
}
}
return $returnvalue;
}
function docommand($the_cmd, $the_val) {
global $panel, $action;
check_admin_referer("admin_{$panel}_{$action}_{$the_cmd}_{$the_val}");
$cmd = "do{$the_cmd}";
if (method_exists($this, $cmd))
return call_user_func(array(
&$this,
$cmd
), $the_val);
return 1;
}
}
class AdminPanelActionValidated extends AdminPanelAction {
var $validators = array();
function dummy() {
}
// just dummy, remove once transition is complete
function exec() {
$this->smarty->registerPlugin('function', 'validate_init', array(
&$this,
'dummy'
));
$this->smarty->registerPlugin('function', 'validate', array(
&$this,
'dummy'
));
return parent::exec();
}
function onsubmit($data = null) {
global $lang, $panel, $action;
$result = 0;
$dummyarr = array();
$errors = array();
$content = array();
$lang_loaded = false;
$l = null;
foreach ($this->validators as $valid_arr) {
// array('subject', 'subject', 'notEmpty', false, false, 'func1,func2');
list ($vid, $field, $validatorname, $empty, $halt, $funcs) = $valid_arr;
$includepath = SMARTY_DIR . 'plugins/';
$string = @$_POST [$field];
// execute functions on string
if ($string) {
$func_arr = explode(',', $funcs);
foreach ($func_arr as $f) {
$string = @$f($string);
}
}
include_once ($includepath . 'validate_criteria.' . $validatorname . '.php');
// smarty_validate_criteria_notEmpty
$valid_f = 'smarty_validate_criteria_' . $validatorname;
if (!$valid_f($string, $empty, $dummyarr, $dummyarr)) {
if (!$lang_loaded) {
$lang = lang_load('admin.' . ADMIN_PANEL);
$l = $lang ['admin'] [ADMIN_PANEL] [ADMIN_PANEL_ACTION];
}
$errors [$field] = isset($l ['error'] [$field]) ? $l ['error'] [$field] : htmlspecialchars($field);
if ($halt)
break;
} else {
$content [$field] = $string;
}
}
if (!$errors) {
$result = parent::onsubmit($content);
} else {
$this->smarty->assign('error', $errors);
$result = apply_filters("admin_{$panel}_{$action}_onerror", $this->onerror());
}
return $result;
}
function onerror() {
return PANEL_NOREDIRECT;
}
}
?>