aboutsummaryrefslogtreecommitdiff
path: root/h-source/Library/Controller.php
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2021-10-15 09:52:00 +1100
committerYuchen Pei <hi@ypei.me>2021-10-15 09:52:00 +1100
commit71b0e901f5fb1cfcd162d8acc23120d3f77a3152 (patch)
tree323c00faef1edc7dea2e88ff581cc2258b2b6432 /h-source/Library/Controller.php
parent72cce24864b064b5762f4fe97fdf40d8d2ad4b51 (diff)
parent07f5140771388c9e0c8a99b0dd2e5d950bdb173b (diff)
Merge branch 'development' into h-node
Diffstat (limited to 'h-source/Library/Controller.php')
-rwxr-xr-xh-source/Library/Controller.php321
1 files changed, 0 insertions, 321 deletions
diff --git a/h-source/Library/Controller.php b/h-source/Library/Controller.php
deleted file mode 100755
index b0eef53..0000000
--- a/h-source/Library/Controller.php
+++ /dev/null
@@ -1,321 +0,0 @@
-<?php
-
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2011 Antonio Gallo
-// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-class Controller {
-
- protected $m = array(); //associative array referencing different models
- protected $h = array(); //associative array referencing different helpers
- protected $s = array(); //associative array referencing different sessions objects (users_checkAdmin objects: see library/users/checkAdmin.php)
- protected $c = array(); //associative array referencing different controllers
-
- protected $_queryString = array(); //the array of args coming from the url
-
- public $controller;
- public $action;
- public $currPage; //the URL of the current page
-
- public $request = null; //reference to a Request object
-
- public $modelName;
-
- public $argKeys = array(); //the array of keys representing the status args of the view action of the controller (validate function after colon)
- public $argDefault = array(); //the array containing the default values of the $viewArgs array
-
- public $argFunc = array(); //the array containing the functions to be applied upon the $viewArgs array
-
- public $viewArgs = array(); //the associative array representing the status args of the main action of the controller. It is the combination of $argKeys and $queryString
- public $viewStatus = ''; //string containing the additional url string to get the status of the view action of the controller (derived from $this->viewArgs)
-
- public $theme;
- public $baseUrl = null; //the base url of the website: http://domainname
- public $baseUrlSrc = null; //the base url of the website (http://domainname) if MOD_REWRITE_MODULE has been set to false
-
- public $headerObj; //reference to headerObj class
-
-// protected $_users; //object to manage access
-
- protected $scaffold = null; //the reference to the scaffold object
-
- function __construct($model, $controller, $queryString = array()) {
- $this->controller = $controller;
- $this->modelName = $model;
- $this->_queryString = $queryString;
-
- $this->theme = new Theme($controller);
- $this->baseUrl = $this->theme->baseUrl;
- $this->baseUrlSrc = $this->theme->baseUrlSrc;
-
- $this->headerObj = new HeaderObj(DOMAIN_NAME);
- $this->request = new Request();
- }
-
- //redirect to $path after the time $time
- final public function redirect($path,$time = 0,$string = null)
- {
- $this->headerObj->redirect($path,$time,$string);
- }
-
- //set the $_data structure of the theme
- final public function set($value)
- {
- $this->theme->set($value);
- }
-
- //append values to the $_data structure of the theme
- final public function append($value)
- {
- $this->theme->append($value);
- }
-
- //load a view file
- final public function load($viewFile,$option = 'none') {
- $this->theme->load($viewFile,$option);
- }
-
- //clean the array containing the view files to load
- final public function clean() {
- $this->theme->clean();
- }
-
- //load an helper class
- final function helper($helperName) {
- $args = func_get_args();
- array_shift($args);
- $name = 'Helper_'.$helperName;
- if (class_exists($name))
- {
- $this->h[$helperName] = new $name();
-
- if ($this->h[$helperName] instanceof Helper_Html) {
- $this->h[$helperName]->viewArgs = $this->viewArgs;
- $this->h[$helperName]->viewStatus = $this->viewStatus;
- }
-
- if (method_exists($this->h[$helperName], 'build')) {
- call_user_func_array(array($this->h[$helperName],'build'),$args);
- }
- }
-
- }
-
- //load a model class
- //$name: the name of the model class
- final public function model($name = null) {
- $modelName = isset($name) ? $name : $this->modelName;
- if (class_exists($modelName)) {
- $this->m[$modelName] = new $modelName();
- } else {
- throw new Exception('Error in '.__METHOD__.': class "'.$modelName.'" has not been defined');
- }
- }
-
- //load a controller
- //$controllerName: the name of the controller class to load
- final public function controller($controller)
- {
- if (class_exists($controller)) {
- $model = str_replace('Controller',null,$controller).'Model';
- $application = strtolower(str_replace('Controller',null,$controller));
- $this->c[$controller] = new $controller($model,$application,array());
- $this->c[$controller]->theme = $this->theme;
- }
- }
-
- //load a users_checkAdmin class
- //$sessonType: the type of session. It can be 'admin' (in the case of the access of an admin user) or 'registered' (in the case of the access of a registerd user)
- final public function session($sessionType = 'admin') {
- $sessionTypeArray = array('admin','registered');
- if (!in_array($sessionType,$sessionTypeArray)) {
- throw new Exception('Error in '.__METHOD__.': the session type can be \'admin\' or \'registered\' only');
- }
- //admin session
- if ($sessionType === 'admin') {
- $params = array(
- 'users_controller' => ADMIN_USERS_CONTROLLER,
- 'users_login_action' => ADMIN_USERS_LOGIN_ACTION,
- 'panel_controller' => ADMIN_PANEL_CONTROLLER,
- 'panel_main_action' => ADMIN_PANEL_MAIN_ACTION,
- 'cookie_name' => ADMIN_COOKIE_NAME,
- 'sessionsTable' => ADMIN_SESSIONS_TABLE,
- 'usersTable' => ADMIN_USERS_TABLE,
- 'groupsTable' => ADMIN_GROUPS_TABLE,
- 'manyToManyTable' => ADMIN_MANYTOMANY_TABLE,
- 'accessesTable' => ADMIN_ACCESSES_TABLE,
- 'session_expire' => ADMIN_SESSION_EXPIRE,
- 'cookie_path' => ADMIN_COOKIE_PATH,
- 'database_type' => DATABASE_TYPE,
- 'hijacking_check' => ADMIN_HIJACKING_CHECK,
- 'on_hijacking_event' => ADMIN_ON_HIJACKING_EVENT,
- 'hijacking_action' => ADMIN_HIJACKING_ACTION,
- 'time_after_failure' => ADMIN_TIME_AFTER_FAILURE,
- 'password_hash' => PASSWORD_HASH,
- 'cookie_domain' => ADMIN_COOKIE_DOMAIN,
- 'cookie_secure' => ADMIN_COOKIE_SECURE
- );
- $this->s['admin'] = new Users_CheckAdmin($params);
- }
- //registered session
- if ($sessionType === 'registered') {
- $params = array(
- 'users_controller' => REG_USERS_CONTROLLER,
- 'users_login_action' => REG_USERS_LOGIN_ACTION,
- 'panel_controller' => REG_PANEL_CONTROLLER,
- 'panel_main_action' => REG_PANEL_MAIN_ACTION,
- 'cookie_name' => REG_COOKIE_NAME,
- 'sessionsTable' => REG_SESSIONS_TABLE,
- 'usersTable' => REG_USERS_TABLE,
- 'groupsTable' => REG_GROUPS_TABLE,
- 'manyToManyTable' => REG_MANYTOMANY_TABLE,
- 'accessesTable' => REG_ACCESSES_TABLE,
- 'session_expire' => REG_SESSION_EXPIRE,
- 'cookie_path' => REG_COOKIE_PATH,
- 'database_type' => DATABASE_TYPE,
- 'hijacking_check' => REG_HIJACKING_CHECK,
- 'on_hijacking_event' => REG_ON_HIJACKING_EVENT,
- 'hijacking_action' => REG_HIJACKING_ACTION,
- 'time_after_failure' => REG_TIME_AFTER_FAILURE,
- 'password_hash' => PASSWORD_HASH,
- 'cookie_domain' => REG_COOKIE_DOMAIN,
- 'cookie_secure' => REG_COOKIE_SECURE
- );
- $this->s['registered'] = new Users_CheckAdmin($params);
- }
- }
-
- //method to set $this->argKeys. Chenge the string in the array!
- final public function setArgKeys($argKeys) {
-// $this->argKeys = explode(',',$argKeys);
- $this->argKeys = array_keys($argKeys);
- $this->argDefault = array_values($argKeys);
- }
-
- //shift the $this->_queryString array a number of times equal to the number indicated by the $number variable and build the $this->viewArgs array and the $this->viewStatus string (additional url)
- final public function shift($number = 0) {
-
- //save the query string array
- $oldQueryString = $this->_queryString;
-
- for ($i = 0; $i < $number; $i++)
- {
- array_shift($this->_queryString);
- }
- $this->callInArgKeysFunc();
- for ($i = 0; $i < count($this->argKeys); $i++)
- {
- if (isset($_GET[$this->argKeys[$i]]) and strcmp($_GET[$this->argKeys[$i]],'') !== 0)
- {
- $this->viewArgs[$this->argKeys[$i]] = $this->request->get($this->argKeys[$i],'',$this->argFunc[$i]);
- continue;
- }
- if (!isset($this->_queryString[$i])) {
- $this->viewArgs[$this->argKeys[$i]] = isset($this->argDefault[$i]) ? $this->argDefault[$i] : null;
- continue;
- }
- $this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i];
- }
- $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
- $this->updateHelpers();
-
- //update the theme
- $this->theme->viewStatus = $this->viewStatus;
- $this->theme->viewArgs = $this->viewArgs;
-
- //restore the query string array
- $this->_queryString = $oldQueryString;
- }
-
- //call the functions defined in $this->argKeys after the colon (ex- 'page:forceInt' => apply the forceInt() function upon the $page arg)
- final public function callInArgKeysFunc() {
- for ($i = 0; $i < count($this->argKeys); $i++) {
-
- $this->argFunc[$i] = 'none';
-
- if (strstr($this->argKeys[$i],':')) {
- $temp = explode(':',$this->argKeys[$i]);
-
- $this->argFunc[$i] = $temp[1];
-
- //exception
- if (!in_array($temp[1],explode(',',params::$allowedSanitizeFunc))) {
- throw new Exception('"'.$temp[1]. '" function not allowed in $this->argKeys');
- }
- $this->argKeys[$i] = $temp[0];
- if (!isset($this->_queryString[$i])) {
- continue;
- }
- $this->_queryString[$i] = call_user_func($temp[1],$this->_queryString[$i]);
- }
- }
- }
-
- //function to update all the Helper that are instance of the HtmlHelper class. This function update the $viesArgs and $viewStatus properties. This function is called by the shift method.
- final public function updateHelpers() {
- foreach ($this->h as $Helper) {
- if ($Helper instanceof Helper_Html) {
- $Helper->viewArgs = $this->viewArgs;
- $Helper->viewStatus = $this->viewStatus;
- }
- }
- }
-
- //create the viewStatus property
- final public function buildStatus()
- {
- $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
- //update the theme
- $this->theme->viewStatus = $this->viewStatus;
- $this->theme->viewArgs = $this->viewArgs;
- }
-
- //method to instanciate the scaffold
- final public function loadScaffold($type,$params = null) {
-
- $typeArray = array('main','form');
- if (!in_array($type,$typeArray)) {
- throw new Exception("the type '$type' is not allowed in ".__METHOD__);
- }
- $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params);
-
- $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']);
- $this->scaffold->mainMenu = $this->h['Menu'];
-
- $this->m[$this->modelName]->popupBuild();
- $popupArray = $this->m[$this->modelName]->popupArray;
-
- if ($type === 'main') {
-
- $here = $this->controller.'/'.$this->scaffold->params['mainAction'];
- $this->helper('Pages',$here,$this->scaffold->params['pageVariable']);
- $this->helper('List',$this->m[$this->modelName]->identifierName,$here,$this->scaffold->params['pageVariable']);
-
-
- $this->helper('Popup',$here,$popupArray,$this->scaffold->params['popupType'],$this->scaffold->params['pageVariable'],true);
-
- $this->scaffold->pageList = $this->h['Pages'];
- $this->scaffold->itemList = $this->h['List'];
- $this->scaffold->popupMenu = $this->h['Popup'];
- }
- }
-
-} \ No newline at end of file