((defined('SYS_LANG') && SYS_LANG != '') ? SYS_LANG : 'en'), 'skin' => SYS_SKIN ))); } define('SYS_URI', '/sys' . SYS_TEMP . '/' . SYS_LANG . '/' . SYS_SKIN . '/'); // defining the serverConf singleton if (defined('PATH_DB') && file_exists(PATH_DB)) { //Instance Server Configuration Singleton $oServerConf = ServerConf::getSingleton(); } // Create headPublisher singleton $oHeadPublisher = headPublisher::getSingleton(); // Installer, redirect to install if we don't have a valid shared data folder if (!defined('PATH_DB') || !file_exists(PATH_DB)) { // new installer, extjs based //important to start laravel classes app()->useStoragePath(realpath(PATH_DATA)); app()->make(Kernel::class)->bootstrap(); restore_error_handler(); $pathFile = PATH_CONTROLLERS . 'InstallerModule.php'; require_once ($pathFile); $controller = InstallerModule::class; // if the method name is empty set default to index method if (strpos(SYS_TARGET, '/') !== false) { list($controller, $controllerAction) = explode('/', SYS_TARGET); } else { $controllerAction = SYS_TARGET; } $controllerAction = ($controllerAction != '' && $controllerAction != 'login') ? $controllerAction : 'index'; // create the installer controller and call its method if (method_exists(InstallerModule::class, $controllerAction)) { $installer = new $controller(); $installer->setHttpRequestData($_REQUEST); $installer->call($controllerAction); } else { $_SESSION['phpFileNotFound'] = $_SERVER['REQUEST_URI']; header("location: /errors/error404.php?url=" . urlencode($_SERVER['REQUEST_URI'])); } exit(); } app()->useStoragePath(realpath(PATH_DATA)); app()->make(Kernel::class)->bootstrap(); restore_error_handler(); //Overwrite with the Processmaker env.ini configuration used in production environments //@todo: move env.ini configuration to .env ini_set('display_errors', $config['display_errors']); ini_set('error_reporting', $config['error_reporting']); ini_set('short_open_tag', 'On'); ini_set('default_charset', "UTF-8"); ini_set('soap.wsdl_cache_enabled', $config['wsdl_cache']); ini_set('date.timezone', TIME_ZONE); //Set Time Zone date_default_timezone_set(TIME_ZONE); config(['app.timezone' => TIME_ZONE]); // Load Language Translation Bootstrap::LoadTranslationObject(defined('SYS_LANG') ? SYS_LANG : "en"); // look for a disabled workspace if ($oServerConf->isWSDisabled(SYS_TEMP)) { $aMessage['MESSAGE'] = Bootstrap::LoadTranslation('ID_DISB_WORKSPACE'); $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage); Bootstrap::RenderPage('publish'); die(); } // database and workspace definition // if SYS_TEMP exists, the URL has a workspace, now we need to verify if exists their db.php file if (defined('SYS_TEMP') && SYS_TEMP != '') { //this is the default, the workspace db.php file is in /shared/workflow/sites/SYS_SYS $pathFile = PATH_DB . SYS_TEMP . '/db.php'; if (file_exists($pathFile)) { require_once($pathFile); define('SYS_SYS', SYS_TEMP); config(["system.workspace" => SYS_TEMP]); // defining constant for workspace shared directory define('PATH_WORKSPACE', PATH_DB . config("system.workspace") . PATH_SEP); // including workspace shared classes -> particularlly for pmTables set_include_path(get_include_path() . PATH_SEPARATOR . PATH_WORKSPACE); } else { if (SYS_LANG != '' && SYS_SKIN != '') { Bootstrap::SendTemporalMessage('ID_NOT_WORKSPACE', "error"); Bootstrap::header('location: /sys/' . SYS_LANG . '/' . SYS_SKIN . '/main/sysLogin?errno=2'); } else { header('location: /errors/error404.php?url=' . urlencode($_SERVER['REQUEST_URI'])); } die(); } } else { //when we are in global pages, outside any valid workspace if (SYS_TARGET === 'newSite') { $phpFile = G::ExpandPath('methods') . SYS_COLLECTION . "/" . SYS_TARGET . '.php'; require_once($phpFile); die(); } else { if (substr(SYS_SKIN, 0, 2) === 'ux' && SYS_TARGET != 'sysLoginVerify') { // new ux sysLogin - extjs based form $pathFile = PATH_CONTROLLERS . 'main.php'; require_once $pathFile; $controllerClass = 'Main'; $controllerAction = SYS_TARGET == 'sysLoginVerify' ? SYS_TARGET : 'sysLogin'; //if the method exists if (method_exists( $controllerClass, $controllerAction )) { $controller = new $controllerClass(); $controller->setHttpRequestData($_REQUEST); $controller->call($controllerAction); } } else { // classic sysLogin interface $pathFile = PATH_METHODS . "login/sysLogin.php"; require_once($pathFile); die(); } if (DEBUG_TIME_LOG) { Bootstrap::logTimeByPage(); } //log this page die(); } } // PM Paths DATA define('PATH_DATA_SITE', PATH_DATA . 'sites/' . config("system.workspace") . '/'); define('PATH_DOCUMENT', PATH_DATA_SITE . 'files/'); define('PATH_DATA_MAILTEMPLATES', PATH_DATA_SITE . 'mailTemplates/'); define('PATH_DATA_PUBLIC', PATH_DATA_SITE . 'public/'); define('PATH_DATA_REPORTS', PATH_DATA_SITE . 'reports/'); define('PATH_DYNAFORM', PATH_DATA_SITE . 'xmlForms/'); define('PATH_IMAGES_ENVIRONMENT_FILES', PATH_DATA_SITE . 'usersFiles' . PATH_SEP); define('PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE . 'usersPhotographies' . PATH_SEP); define('SERVER_NAME', $_SERVER['SERVER_NAME']); define('SERVER_PORT', $_SERVER['SERVER_PORT']); // create memcached singleton $memcache = PMmemcached::getSingleton(config("system.workspace")); // load Plugins base class // setup propel definitions and logging //changed to autoloader if (defined('DEBUG_SQL_LOG') && DEBUG_SQL_LOG) { define('PM_PID', mt_rand(1, 999999)); require_once 'Log.php'; // register debug connection decorator driver Creole::registerDriver('*', 'creole.contrib.DebugConnection'); // initialize Propel with converted config file Propel::init(PATH_CORE . "config/databases.php"); // unified log file for all databases $logFile = PATH_DATA . 'log' . PATH_SEP . 'propel.log'; $logger = Log::singleton('file', $logFile, 'wf ' . config("system.workspace"), null, PEAR_LOG_INFO); Propel::setLogger($logger); // log file for workflow database $con = Propel::getConnection('workflow'); if ($con instanceof DebugConnection) { $con->setLogger($logger); } // log file for rbac database $con = Propel::getConnection('rbac'); if ($con instanceof DebugConnection) { $con->setLogger($logger); } // log file for report database $con = Propel::getConnection('rp'); if ($con instanceof DebugConnection) { $con->setLogger($logger); } } else { Propel::init(PATH_CORE . "config/databases.php"); } /** * JobsManager */ JobsManager::getSingleton()->init(); //here we are loading all plugins registered //the singleton has a list of enabled plugins $oPluginRegistry = PluginRegistry::loadSingleton(); $attributes = $oPluginRegistry->getAttributes(); Bootstrap::LoadTranslationPlugins(defined('SYS_LANG') ? SYS_LANG : "en", $attributes); // Initialization functions plugins $oPluginRegistry->init(); $_GET = \ProcessMaker\Util\DateTime::convertDataToUtc($_GET); $_POST = \ProcessMaker\Util\DateTime::convertDataToUtc($_POST); $_REQUEST = \ProcessMaker\Util\DateTime::convertDataToUtc($_REQUEST); Creole::registerDriver('dbarray', 'creole.contrib.DBArrayConnection'); // Session Initializations ini_set('session.auto_start', '1'); // The register_globals feature has been DEPRECATED as of PHP 5.3.0. default value Off. // ini_set( 'register_globals', 'Off' ); //session_start(); ob_start(); // Rebuild the base Workflow translations if not exists if (!is_file(PATH_LANGUAGECONT . 'translation.en')) { $pathFile = PATH_CLASSES . "model" . PATH_SEP . "Translation.php"; require_once($pathFile); $pmTranslation = new Translation(); $fields = $pmTranslation->generateFileTranslation("en"); // Load Language Translation Bootstrap::LoadTranslationObject("en"); } // TODO: Verify if the language set into url is defined in translations env. if (SYS_LANG != 'en' && !is_file(PATH_LANGUAGECONT . 'translation.' . SYS_LANG)) { $pathFile = PATH_CLASSES . "model" . PATH_SEP . "Translation.php"; require_once($pathFile); $pmTranslation = new Translation(); $fields = $pmTranslation->generateFileTranslation(SYS_LANG); // Load Language Translation Bootstrap::LoadTranslationObject(SYS_LANG); } // Setup plugins $oPluginRegistry->setupPlugins(); //get and setup enabled plugins $avoidChangedWorkspaceValidation = false; // Load custom Classes and Model from Plugins. Bootstrap::LoadAllPluginModelClasses(); // jump to php file in methods directory $collectionPlugin = ''; if ($oPluginRegistry->isRegisteredFolder(SYS_COLLECTION)) { $phpFile = PATH_PLUGINS . SYS_COLLECTION . PATH_SEP . SYS_TARGET . '.php'; $targetPlugin = explode('/', SYS_TARGET); $collectionPlugin = $targetPlugin[0]; $avoidChangedWorkspaceValidation = true; } else { $phpFile = Bootstrap::ExpandPath('methods') . SYS_COLLECTION . PATH_SEP . SYS_TARGET . '.php'; } // services is a special folder, if (SYS_COLLECTION == 'services') { $avoidChangedWorkspaceValidation = true; $targetPlugin = explode('/', SYS_TARGET); if ($targetPlugin[0] == 'webdav') { $phpFile = Bootstrap::ExpandPath('methods') . SYS_COLLECTION . PATH_SEP . 'webdav.php'; } } if (SYS_COLLECTION == 'login' && SYS_TARGET == 'login') { $avoidChangedWorkspaceValidation = true; } $bWE = false; $isControllerCall = false; $isPluginController = false; if (substr(SYS_COLLECTION, 0, 8) === 'gulliver') { $phpFile = PATH_GULLIVER_HOME . 'methods/' . substr(SYS_COLLECTION, 8) . SYS_TARGET . '.php'; } else { //when the file is part of the public directory of any PROCESS, this a ProcessMaker feature if (preg_match('/^[0-9][[:alnum:]]+$/', SYS_COLLECTION) == 1) { //the pattern is /sysSYS/LANG/SKIN/PRO_UID/file $auxPart = explode('/', $_SERVER['REQUEST_URI']); $aAux = explode('?', $auxPart[count($auxPart) - 1]); //$extPart = explode ( '.' , $auxPart[ count($auxPart)-1] ); $extPart = explode('.', $aAux[0]); $queryPart = isset($aAux[1]) ? $aAux[1] : ""; $extension = $extPart[count($extPart) - 1]; $phpFile = PATH_DATA_SITE . 'public' . PATH_SEP . SYS_COLLECTION . PATH_SEP . urldecode($auxPart[count($auxPart) - 1]); $aAux = explode('?', $phpFile); $phpFile = $aAux[0]; if ($extension != 'php') { Bootstrap::streamFile($phpFile); die(); } $isWebEntry = \ProcessMaker\BusinessModel\WebEntry::isWebEntry(SYS_COLLECTION, $phpFile); if (\Bootstrap::getDisablePhpUploadExecution() === 1 && !$isWebEntry) { $message = \G::LoadTranslation('ID_THE_PHP_FILES_EXECUTION_WAS_DISABLED'); $context = [ 'filename' => $phpFile, 'url' => $_SERVER["REQUEST_URI"] ?? '' ]; Log::channel(':phpExecution')->alert($message, \Bootstrap::context($context)); echo $message; die(); } else { //Backward compatibility: Preload PmDynaform for old generated webentry files. class_exists('PmDynaform'); $message = 'Php Execution'; $context = [ 'filename' => $phpFile, 'url' => $_SERVER["REQUEST_URI"] ?? '' ]; Log::channel(':phpExecution')->info($message, \Bootstrap::context($context)); } $avoidChangedWorkspaceValidation = true; $bWE = true; //$phpFile = PATH_DATA_SITE . 'public' . PATH_SEP . SYS_COLLECTION . PATH_SEP . $auxPart[ count($auxPart)-1]; } //erik: verify if it is a Controller Class or httpProxyController Class if (is_file(PATH_CONTROLLERS . SYS_COLLECTION . '.php')) { $pathFile = PATH_CONTROLLERS . SYS_COLLECTION . '.php'; require_once $pathFile; $controllerClass = SYS_COLLECTION; //if the method name is empty set default to index method $controllerAction = SYS_TARGET != '' ? SYS_TARGET : 'index'; //if the method exists if (method_exists($controllerClass, $controllerAction)) { $isControllerCall = true; } if (substr(SYS_SKIN, 0, 2) != "ux" && $controllerClass == "main") { $isControllerCall = false; } } if (is_dir(PATH_PLUGINS . SYS_COLLECTION) && $oPluginRegistry->isRegisteredFolder(SYS_COLLECTION)) { $pluginName = SYS_COLLECTION; $pluginResourceRequest = explode('/', rtrim(SYS_TARGET, '/')); $isPluginController = true; if ($pluginResourceRequest > 0) { $controllerClass = $pluginResourceRequest[0]; if (count($pluginResourceRequest) == 1) { $controllerAction = 'index'; } else { $controllerAction = $pluginResourceRequest[1]; } } $pluginControllerPath = PATH_PLUGINS . $pluginName . PATH_SEP . 'controllers' . PATH_SEP; $pathFile = $pluginControllerPath . $controllerClass . '.php'; if (is_file($pathFile)) { require_once $pathFile; } elseif (is_file($pluginControllerPath . ucfirst($controllerClass) . '.php')) { $controllerClass = ucfirst($controllerClass); require_once $pathFile; } elseif (is_file($pluginControllerPath . ucfirst($controllerClass) . 'Controller.php')) { $controllerClass = ucfirst($controllerClass) . 'Controller'; require_once $pathFile; } //if the method exists if (method_exists($controllerClass, $controllerAction)) { $isControllerCall = true; } } if (!$isControllerCall && !file_exists($phpFile)) { $_SESSION['phpFileNotFound'] = $_SERVER['REQUEST_URI']; header("location: /errors/error404.php?url=" . urlencode($_SERVER['REQUEST_URI'])); die(); } } //redirect to login, if user changed the workspace in the URL if (!$avoidChangedWorkspaceValidation && isset($_SESSION['WORKSPACE']) && $_SESSION['WORKSPACE'] != config("system.workspace")) { $_SESSION['WORKSPACE'] = config("system.workspace"); Bootstrap::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', "error"); // verify if the current skin is a 'ux' variant $urlPart = substr(SYS_SKIN, 0, 2) == 'ux' && SYS_SKIN != 'uxs' ? '/main/login' : '/login/login'; header('Location: /sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . $urlPart); die(); } // enable rbac $RBAC = RBAC::getSingleton(PATH_DATA, session_id()); $RBAC->sSystem = 'PROCESSMAKER'; // define and send Headers for all pages if (!defined('EXECUTE_BY_CRON')) { header("Expires: " . gmdate("D, d M Y H:i:s", mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'))) . " GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // get the language direction from ServerConf define('SYS_LANG_DIRECTION', $oServerConf->getLanDirection()); if ((isset($_SESSION['USER_LOGGED'])) && (!(isset($_GET['sid'])))) { if ((preg_match("/msie/i", $_SERVER ['HTTP_USER_AGENT']) != 1 || $config['ie_cookie_lifetime'] == 1) && (!(preg_match("/safari/i", $_SERVER ['HTTP_USER_AGENT']) == 1 && preg_match("/chrome/i", $_SERVER ['HTTP_USER_AGENT']) == 0) || $config['safari_cookie_lifetime'] == 1)) { // Determine session lifetime $sessionLifetime = isset($config['session.gc_maxlifetime']) ? $config['session.gc_maxlifetime'] : ini_get('session.gc_maxlifetime'); // Default to 1440 seconds (24 minutes) if lifetime is not set if (is_null($sessionLifetime)) { $sessionLifetime = 1440; } $cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + $sessionLifetime, 'httponly' => true]); setcookie(session_name(), session_id(), $cookieOptions); } $RBAC->initRBAC(); //using optimization with memcache, the user data will be in memcache 8 hours, or until session id goes invalid $memKey = 'rbacSession' . session_id(); if (($RBAC->aUserInfo = $memcache->get($memKey)) === false) { $RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']); $RBAC->verifyDueDateUserLogged(); $memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS); } } else { // this is the blank list to allow execute scripts with no login (without session started) $noLoginFiles = $noLoginFolders = []; $noLoginFiles[] = 'login'; $noLoginFiles[] = 'authentication'; $noLoginFiles[] = 'authenticationSso'; $noLoginFiles[] = 'login_Ajax'; $noLoginFiles[] = 'sysLoginVerify'; $noLoginFiles[] = 'processes_Ajax'; $noLoginFiles[] = 'showLogoFile'; $noLoginFiles[] = 'forgotPassword'; $noLoginFiles[] = 'retrivePassword'; $noLoginFiles[] = 'steps_Ajax'; $noLoginFiles[] = 'proxyCasesList'; $noLoginFiles[] = 'proxyNewCasesList'; $noLoginFiles[] = 'casesStartPage_Ajax'; $noLoginFiles[] = 'cases_Ajax'; $noLoginFiles[] = 'casesList_Ajax'; $noLoginFiles[] = 'proxyReassignCasesList'; $noLoginFiles[] = 'ajaxListener'; $noLoginFiles[] = 'cases_Step'; $noLoginFiles[] = 'cases_ShowOutputDocument'; $noLoginFiles[] = 'cases_ShowDocument'; $noLoginFiles[] = 'cases_CatchExecute'; $noLoginFiles[] = 'cases_SaveData'; $noLoginFiles[] = 'cases_Derivate'; $noLoginFiles[] = 'cases_NextStep'; $noLoginFiles[] = 'casesShowCaseNotes'; $noLoginFiles[] = 'genericAjax'; $noLoginFiles[] = 'casesSaveDataView'; $noLoginFiles[] = 'propelTableAjax'; $noLoginFiles[] = 'casesStreamingFile'; $noLoginFiles[] = 'opencase'; $noLoginFiles[] = 'defaultAjaxDynaform'; $noLoginFolders[] = 'services'; $noLoginFolders[] = 'tracker'; $noLoginFolders[] = 'InstallerModule'; $data = new stdClass(); $data->noLoginFiles = &$noLoginFiles; $data->noLoginFolders = &$noLoginFolders; AppEvent::getAppEvent()->dispatch(AppEvent::SCRIPTS_WITH_NO_LOGIN, $data); // This sentence is used when you lost the Session if (!in_array(SYS_TARGET, $noLoginFiles) && !in_array(SYS_COLLECTION, $noLoginFolders) && $bWE != true && $collectionPlugin != 'services') { $bRedirect = true; if (isset($_GET['sid'])) { $oSessions = new Sessions(); if ($aSession = $oSessions->verifySession($_GET['sid'])) { require_once 'classes/model/Users.php'; $oUser = new Users(); $aUser = $oUser->load($aSession['USR_UID']); initUserSession( $aUser['USR_UID'], $aUser['USR_USERNAME'] ); $bRedirect = false; if ((preg_match("/msie/i", $_SERVER ['HTTP_USER_AGENT']) != 1 || $config['ie_cookie_lifetime'] == 1) && (!(preg_match("/safari/i", $_SERVER ['HTTP_USER_AGENT']) == 1 && preg_match("/chrome/i", $_SERVER ['HTTP_USER_AGENT']) == 0) || $config['safari_cookie_lifetime'] == 1)) { $cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + $timelife, 'httponly' => true]); setcookie(session_name(), session_id(), $cookieOptions); } $RBAC->initRBAC(); $RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']); $memKey = 'rbacSession' . session_id(); $memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS); } } if (isset($_GET['tracker_designer']) && intval($_GET['tracker_designer']) !== 1) { unset($_GET['tracker_designer']); } if ($bRedirect && (!isset($_GET['tracker_designer']) || (!isset($_SESSION['CASE']) && !isset($_SESSION['PIN'])))) { if (substr(SYS_SKIN, 0, 2) === 'ux' && SYS_SKIN !== 'uxs') { // verify if the current skin is a 'ux' variant $loginUrl = 'main/login'; } else if (strpos($_SERVER['REQUEST_URI'], '/home') !== false) { //verify is it is using the uxs skin for simplified interface $loginUrl = 'home/login'; } else { $loginUrl = 'login/login'; // just set up the classic login } if (empty($_POST)) { $headerString = 'location: ' . SYS_URI . $loginUrl . '?u=' . urlencode($_SERVER['REQUEST_URI']); AppEvent::getAppEvent()->dispatch(AppEvent::LOGIN, $headerString); header($headerString); } else { if ($isControllerCall) { header("HTTP/1.0 302 session lost in controller"); } else { header('location: ' . SYS_URI . $loginUrl); } } die(); } } } $_SESSION['phpLastFileFound'] = $_SERVER['REQUEST_URI']; // Check if the timezone for the user is valid if (!empty($_SESSION['USER_LOGGED']) && isset($_SESSION['__TIME_ZONE_FAILED__']) && $_SESSION['__TIME_ZONE_FAILED__'] && (SYS_COLLECTION != 'login' && SYS_TARGET != 'login')) { $userTimeZone = $_SESSION['USR_TIME_ZONE']; $browserTimeZone = $_SESSION['BROWSER_TIME_ZONE']; $dateTime = new \ProcessMaker\Util\DateTime(); $userTimeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($userTimeZone); $browserTimeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($browserTimeZone); $userUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($userTimeZoneOffset); $browserUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($browserTimeZoneOffset); $arrayTimeZoneId = $dateTime->getTimeZoneIdByTimeZoneOffset($browserTimeZoneOffset); array_unshift($arrayTimeZoneId, 'false'); array_walk($arrayTimeZoneId, function (&$value, $key, $parameter) { $value = ['TZ_UID' => $value, 'TZ_NAME' => '(UTC ' . $parameter . ') ' . $value]; }, $browserUtcOffset); $_SESSION['_DBArray'] = ['TIME_ZONE' => $arrayTimeZoneId]; $arrayData = [ 'USR_TIME_ZONE' => '(UTC ' . $userUtcOffset . ') ' . $userTimeZone, 'BROWSER_TIME_ZONE' => $browserTimeZone ]; global $G_PUBLISH; $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/TimeZoneAlert', '', $arrayData, SYS_URI . 'login/updateTimezone'); G::RenderPage('publish'); exit(0); } // Initialization functions plugins $oPluginRegistry->init(); if ($isControllerCall) { //Instance the Controller object and call the request method ValidationUploadedFiles::getValidationUploadedFiles() ->runRulesToAllUploadedFiles(); $controller = new $controllerClass(); $controller->setHttpRequestData($_REQUEST); if ($isPluginController) { $controller->setPluginName($pluginName); $controller->setPluginHomeDir(PATH_PLUGINS . $pluginName . PATH_SEP); } $controller->call($controllerAction); } else { ChangeLog::getChangeLog() ->setSourceId(ChangeLog::FromWeb) ->setSkin(SYS_SKIN) ->setLanguage(SYS_LANG) ->getUsrIdByUsrUid(empty($_SESSION['USER_LOGGED']) ? '' : $_SESSION['USER_LOGGED']); ValidationUploadedFiles::getValidationUploadedFiles() ->runRulesToAllUploadedFiles(); require_once $phpFile; } if (defined('SKIP_HEADERS')) { header("Expires: " . gmdate("D, d M Y H:i:s", mktime(0, 0, 0, date('m'), date('d'), date('Y') + 1)) . " GMT"); header('Cache-Control: public'); header('Pragma: '); } @ob_end_flush(); if (DEBUG_TIME_LOG) { bootstrap::logTimeByPage(); //log this page } }