ACC SHELL

Path : /srv/www/vhosts/alfa-com/engine/
File Upload :
Current File : /srv/www/vhosts/alfa-com/engine/Application.php

<?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