ACC SHELL
<?php
// Author: Jakub Macek, CZ; Copyright: Poski.com s.r.o.; Code is 100% my work. Do not copy.
class Application
{
private static $current = null;
public static function current()
{
if (self::$current === null)
{
if (class_exists('WebApplication'))
self::$current = new WebApplication();
else
self::$current = new Application();
}
return self::$current;
}
public function module($id, $modulefile = null)
{
if ($modulefile === null)
$modulefile = $id;
$class = str_replace(array('@'), array(''), strtolower($modulefile));
//$id = str_replace(array('@'), array(''), strtolower($id));
$file = U::fef('modules/' . $modulefile . '.override.php');
if (!$file)
$file = U::fef('modules/' . $modulefile . '.php');
if (!$file)
die("module class '{$modulefile}' is missing");
require_once ($file);
if (!isset($GLOBALS['settings']['modules'][$id]))
$GLOBALS['settings']['modules'][$id] = array();
$GLOBALS['settings']['modules'][$id]['id'] = $id;
if ($file = U::fef('modules/' . $id . '.objects.override.php'))
require_once($file);
else if ($file = U::fef('modules/' . $id . '.objects.php'))
require_once($file);
else if ($file = U::fef('modules/' . $modulefile . '.objects.override.php'))
require_once($file);
else if ($file = U::fef('modules/' . $modulefile . '.objects.php'))
require_once($file);
if ($file = U::fef('modules/' . $id . '.models.override.php'))
require_once($file);
else if ($file = U::fef('modules/' . $id . '.models.php'))
require_once($file);
else if ($file = U::fef('modules/' . $modulefile . '.models.override.php'))
require_once($file);
else if ($file = U::fef('modules/' . $modulefile . '.models.php'))
require_once($file);
if ($file = U::fef('modules/' . $id . '.actions.override.php'))
require_once($file);
else if ($file = U::fef('modules/' . $id . '.actions.php'))
require_once($file);
else if ($file = U::fef('modules/' . $modulefile . '.actions.override.php'))
require_once($file);
else if ($file = U::fef('modules/' . $modulefile . '.actions.php'))
require_once($file);
if (class_exists('x'.$class))
$class = 'x'.$class;
$GLOBALS['modules'][$id] = new $class();
Locale::module($id);
Locale::module($modulefile);
$GLOBALS['modules'][$id]->id = $id;
lll('core', 'modules: __construct', $id, Log::EVENT_CORE_MODULE);
}
protected function initializeSubsystems()
{
Session::initialize();
ViewState::initialize();
History::initialize();
register_shutdown_function(array('History', 'save'));
Locale::initialize();
Locale::module('@core');
Locale::module('@meta');
page()->location();
}
protected function initializeRouter()
{
Router::add(Router::TYPE_EQUALS, 'captcha', array('page.location' => 'captcha'));
Router::add(Router::TYPE_EQUALS, '404', array('page.location' => '404'));
Router::add(Router::TYPE_REGEX, 'data/image/([^/]+)/(.*)', array('page.location' => 'data_image'), array('file', 'method'));
Router::add(Router::TYPE_REGEX, 'data/blob-rename/([^/]+)/(.*)', array('page.location' => 'data_blob_rename'), array('file', 'new-name'));
Router::add(Router::TYPE_EQUALS, 'ListColumnCheckbox', array('page.location' => 'ListColumnCheckbox'));
Router::process();
if (page()->location == 'captcha')
view()->templates[0] = new Template(0, array('Captcha', 'template'), 'callback', 'php', Template::TYPE_DEFAULT);
if (page()->location == 'data_image')
view()->templates[0] = new Template(0, array('CoreTemplates', 'data_image'), 'callback', 'php', Template::TYPE_DEFAULT);
if (page()->location == 'data_blob_rename')
view()->templates[0] = new Template(0, array('CoreTemplates', 'data_blob_rename'), 'callback', 'php', Template::TYPE_DEFAULT);
if (page()->location == 'ListColumnCheckbox')
{
History::$save_current = false;
page()->administration = true;
}
if (!page()->simple)
{
Router::add(Router::TYPE_EQUALS, 'a/', array('page.location' => 'a'));
Router::add(Router::TYPE_EQUALS, 'aa/', array('page.location' => 'aa'));
Router::add(Router::TYPE_EQUALS, 'apda/', array('page.location' => 'apda'));
Router::add(Router::TYPE_EQUALS, 'admin/', array('page.location' => 'administration')); //HACK: different location
Router::add(Router::TYPE_EQUALS, 'administration/', array('page.location' => 'administration'));
Router::process();
if ((page()->location == 'a') || (page()->location == 'aa') || (page()->location == 'administration') || (page()->location == 'apda'))
{
//History::$save_current = false;
page()->administration = true;
page()->title = __('administration', '@core');
}
}
}
protected function initializeLoadModules()
{
$this->module('@users');
}
protected function initializeModules()
{
for ($p = -3; $p <= 0; $p++)
foreach ($GLOBALS['modules'] as $module)
{
lll('core', 'modules: initialize (' . $p . ')', $module->id, Log::EVENT_MODULE_INITIALIZE);
Locale::module($module->id);
$module->initialize($p);
}
}
protected function initializeActions()
{
for ($p = 1; $p < 10; $p++)
foreach ($GLOBALS['modules'] as $module)
{
lll('core', 'modules: initialize (' . $p . ')', $module->id, Log::EVENT_MODULE_INITIALIZE);
Locale::module($module->id);
$module->initialize($p);
}
foreach ($GLOBALS['modules'] as $module)
{
lll('core', 'modules: index', $module->id, Log::EVENT_MODULE_INDEX);
Locale::module($module->id);
$module->index();
}
}
public function initialize()
{
mb_internal_encoding('UTF-8');
$this->initializeSubsystems();
if (!page()->simple)
qconnect(site()->dsn);
$this->initializeRouter();
if (!page()->simple)
{
$this->initializeLoadModules();
$this->initializeModules();
$this->initializeActions();
}
}
protected function initializeInvocation()
{
$action = null;
if ($actionId = U::request('page.invocation'))
$action = Action::find($actionId);
else if (page()->location)
$action = Action::find(page()->location);
if ($action)
{
$module = $action->module();
$i = $GLOBALS['invocation'] = new Invocation($action);
$i->active = true;
foreach ($action->optionsUnsafe as $k)
if (isset($_REQUEST[$k]))
$i->options[$k] = $_REQUEST[$k];
if (page()->administration)
page()->title = __('administration', '@core') . ' - ' . __('module-name', $module->id) . ' - ' . __($action->id, $module->id);
if (page()->title === null)
page()->title = __('module-name', $module->id) . ' - ' . __($action->id, $module->id);
}
}
public function runMeta()
{
if (__('breadcrumbs*0*'.page()->location, '@meta', false) !== false)
{
$counter = 0;
while (($temp = __('breadcrumbs*'.$counter++.'*'.page()->location, '@meta', false)))
{
$temp = explode("\t", $temp);
$url = array_shift($temp); if ($url == '~') $url = false;
$text = array_pop($temp); if ($text == '~') $text = false;
if ($url)
{
$temp = Router::url($url, array(), false);
if ($temp)
{
if (!$text)
{
$route = Router::find($url);
if (isset($route['args']['page.title']))
$text = $route['args']['page.title'];
else
$text = __('title*'.$url, '@meta', false);
}
$url = $temp;
}
}
page()->breadcrumb($text, $url);
}
View::title();
}
if (($temp = __('title*'.page()->location, '@meta', false)) !== false)
page()->breadcrumb(page()->title = $temp);
if (($temp = __('keywords*'.page()->location, '@meta', false)) !== false)
page()->keywords = $temp;
if (($temp = __('description*'.page()->location, '@meta', false)) !== false)
page()->description = $temp;
}
public function run()
{
if (!view()->getTemplateOfType(Template::TYPE_HTML_HEAD))
view()->templates['head'] = new Template(false, array('CoreTemplates', 'head'), 'callback', 'php', Template::TYPE_HTML_HEAD);
if (page()->simple)
{
if (!view()->getTemplateOfType(Template::TYPE_MAIN))
View::frame('{#locale#}/s/' . page()->location);
}
if (!page()->simple && page()->administration)
{
foreach ($GLOBALS['modules'] as $module)
$module->generateAdministrationMenu();
$this->initializeInvocation();
view()->templates[0] = new Template(0, array('CoreTemplates', 'html'), 'callback', 'php', Template::TYPE_DEFAULT | Template::TYPE_HTML);
if (page()->location == 'administration')
{
$administration_version = page()->get('administrationTheme', 4);
$template = 'web/_administration/'.page()->location.'_v'.$administration_version.'.php';
}
else
$template = 'web/_administration/'.page()->location.'.php';
view()->templates['main'] = new Template(false, $template, 'file', 'php', Template::TYPE_MAIN);
if (page()->location == 'apda')
U::flagSet('reduced-meta', true);
}
if (page()->location === null)
{
page()->location = '404';
page()->location();
}
if (page()->location('404') ||
!view()->getTemplateOfType(Template::TYPE_DEFAULT) ||
(view()->getTemplateOfType(Template::TYPE_FRAME) && !view()->getTemplateOfType(Template::TYPE_MAIN)))
{
page()->simple = true;
page()->title = '404 ' . __('http-404', '@core');
//view()->templates[0] = new Template(0, array('CoreTemplates', 'html'), 'callback', 'php', Template::TYPE_DEFAULT | Template::TYPE_HTML);
//view()->templates['head'] = new Template(null, '', 'string', 'html', Template::TYPE_HTML_HEAD);
//unset(view()->templates['frame']);
header('HTTP/1.1 404 Not Found');
header('Status: 404');
if (U::fef('web/'.L.'/404.php'))
View::frame('{#locale#}/404');
else if (U::fef('web/404.php'))
View::frame('404');
else
View::frame(new Template(null, array('CoreTemplates', 'error404'), 'callback', 'php', Template::TYPE_MAIN));
}
if (page()->location('ListColumnCheckbox'))
{
view()->templates[0] = new Template(0, array('ListColumnCheckbox', 'template'), 'callback', 'php', Template::TYPE_DEFAULT | Template::TYPE_HTML);
}
if (isset($GLOBALS['logs'][0]))
$GLOBALS['logs'][0]->rename($_SERVER['REMOTE_ADDR'] . '-' . date('Ymd-His') . '-' . strtr(page()->location, '/', '-'));
if (!page()->simple)
{
if (!i())
$this->initializeInvocation();
for ($p = 0; $p < 10; $p++)
foreach ($GLOBALS['modules'] as $module)
{
lll('core', 'module: process (' . $p . ')', $module->id, Log::EVENT_MODULE_PROCESS);
Locale::module($module->id);
$module->process($p);
}
}
$this->runMeta();
$file = 'controllers/' . strtr(page()->location, '/-', '__') . '.php';
if ($file = U::fef($file))
{
include($file);
$GLOBALS['R'] = array();
controller();
}
print(view()->render());
}
public static function getG($key, $value = null)
{
$parts = explode('.', $key);
if (count($parts) == 1)
return page()->get($key, $value);
else if (isset($GLOBALS[$parts[0]]) && isset($GLOBALS[$parts[0]][$parts[1]]))
return $GLOBALS[$parts[0]][$parts[1]];
else
return $value;
}
public static function setG($key, $value)
{
$parts = explode('.', $key);
if (count($parts) == 1)
page()->set($key, $value);
else if (isset($GLOBALS[$parts[0]]))
$GLOBALS[$parts[0]][$parts[1]] = $value;
}
}
function isUser($user) { return (USER == $user); }
function isRole($role) { return (strpos(ROLES, ';'.$role.';') !== false); }
function isAdministrator() { return (isUser('administrator') || isRole('administrator')); }
function isRoleOrAdministrator($role) { return (isAdministrator() || isRole($role)); }
function user($id = null) { if ($id) return $GLOBALS['modules']['@users']->user($id); else return $GLOBALS['modules']['@users']->user;}
function __autoload($class)
{
$file = str_replace('_', '/', $class) . '.php';
@include_once ($file);
}
function application()
{
return Application::current();
}
?>
ACC SHELL 2018