2017-08-04 16:28:16 +02:00
|
|
|
<?php
|
|
|
|
|
2018-06-28 15:52:56 +02:00
|
|
|
// Rimozione header X-Powered-By
|
|
|
|
header_remove('X-Powered-By');
|
|
|
|
|
2017-08-04 16:28:16 +02:00
|
|
|
// Impostazioni di configurazione PHP
|
|
|
|
date_default_timezone_set('Europe/Rome');
|
|
|
|
|
2018-02-22 09:34:46 +01:00
|
|
|
// Controllo sulla versione PHP
|
|
|
|
$minimum = '5.6.0';
|
|
|
|
if (version_compare(phpversion(), $minimum) < 0) {
|
|
|
|
echo '
|
|
|
|
<p>Stai utilizzando la versione PHP '.phpversion().', non compatibile con OpenSTAManager.</p>
|
|
|
|
|
|
|
|
<p>Aggiorna PHP alla versione >= '.$minimum.'.</p>';
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
2017-08-04 16:28:16 +02:00
|
|
|
// Caricamento delle impostazioni personalizzabili
|
|
|
|
if (file_exists(__DIR__.'/config.inc.php')) {
|
|
|
|
include_once __DIR__.'/config.inc.php';
|
|
|
|
}
|
|
|
|
|
|
|
|
// Caricamento delle dipendenze e delle librerie del progetto
|
|
|
|
require_once __DIR__.'/vendor/autoload.php';
|
|
|
|
|
2018-02-14 11:10:03 +01:00
|
|
|
// Individuazione dei percorsi di base
|
|
|
|
App::definePaths(__DIR__);
|
|
|
|
|
|
|
|
$docroot = DOCROOT;
|
|
|
|
$rootdir = ROOTDIR;
|
|
|
|
$baseurl = BASEURL;
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Redirect al percorso HTTPS se impostato nella configurazione
|
|
|
|
if (!empty($redirectHTTPS) && !isHTTPS(true)) {
|
|
|
|
header('HTTP/1.1 301 Moved Permanently');
|
|
|
|
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
2018-07-03 15:39:29 +02:00
|
|
|
// Forza l'abilitazione del debug
|
|
|
|
// $debug = App::debug(true);
|
2017-08-04 16:28:16 +02:00
|
|
|
|
|
|
|
// Logger per la segnalazione degli errori
|
2017-09-15 16:37:19 +02:00
|
|
|
$logger = new Monolog\Logger('Logs');
|
2017-08-04 16:28:16 +02:00
|
|
|
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
|
|
|
|
$logger->pushProcessor(new Monolog\Processor\WebProcessor());
|
|
|
|
|
2017-09-15 16:37:19 +02:00
|
|
|
// Registrazione globale del logger
|
|
|
|
Monolog\Registry::addLogger($logger, 'logs');
|
|
|
|
|
2017-08-04 16:28:16 +02:00
|
|
|
use Monolog\Handler\StreamHandler;
|
2017-09-15 16:37:19 +02:00
|
|
|
use Monolog\Handler\FilterHandler;
|
2017-08-04 16:28:16 +02:00
|
|
|
use Monolog\Handler\RotatingFileHandler;
|
|
|
|
|
|
|
|
$handlers = [];
|
2017-09-04 10:24:44 +02:00
|
|
|
if (!API::isAPIRequest()) {
|
|
|
|
// File di log di base (logs/error.log)
|
2018-02-14 11:10:03 +01:00
|
|
|
$handlers[] = new StreamHandler($docroot.'/logs/error.log', Monolog\Logger::ERROR);
|
|
|
|
$handlers[] = new StreamHandler($docroot.'/logs/setup.log', Monolog\Logger::EMERGENCY);
|
2017-09-04 10:24:44 +02:00
|
|
|
|
2017-09-15 16:37:19 +02:00
|
|
|
// Impostazione dei log estesi (per monitorare in modo completo le azioni degli utenti)
|
2018-02-14 11:10:03 +01:00
|
|
|
$handlers[] = new StreamHandler($docroot.'/logs/info.log', Monolog\Logger::INFO);
|
2017-09-15 16:37:19 +02:00
|
|
|
|
2017-09-04 10:24:44 +02:00
|
|
|
// Impostazioni di debug
|
|
|
|
if (!empty($debug)) {
|
2018-06-23 15:41:32 +02:00
|
|
|
// Ignora gli avvertimenti e le informazioni relative alla deprecazione di componenti
|
2017-09-20 10:33:22 +02:00
|
|
|
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_USER_DEPRECATED);
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-09-04 10:24:44 +02:00
|
|
|
// File di log ordinato in base alla data
|
2018-02-14 11:10:03 +01:00
|
|
|
$handlers[] = new RotatingFileHandler($docroot.'/logs/error.log', 0, Monolog\Logger::ERROR);
|
|
|
|
$handlers[] = new RotatingFileHandler($docroot.'/logs/setup.log', 0, Monolog\Logger::EMERGENCY);
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2018-02-14 11:10:03 +01:00
|
|
|
$prettyPageHandler = new Whoops\Handler\PrettyPageHandler();
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2018-02-14 11:10:03 +01:00
|
|
|
// Imposta Whoops come gestore delle eccezioni di default
|
|
|
|
$whoops = new Whoops\Run();
|
|
|
|
$whoops->pushHandler($prettyPageHandler);
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2018-02-14 11:10:03 +01:00
|
|
|
// Abilita la gestione degli errori nel caso la richiesta sia di tipo AJAX
|
|
|
|
if (Whoops\Util\Misc::isAjaxRequest()) {
|
|
|
|
$whoops->pushHandler(new Whoops\Handler\JsonResponseHandler());
|
2017-09-04 10:24:44 +02:00
|
|
|
}
|
2018-02-14 11:10:03 +01:00
|
|
|
|
|
|
|
$whoops->register();
|
2017-08-04 16:28:16 +02:00
|
|
|
}
|
|
|
|
} else {
|
2018-02-14 11:10:03 +01:00
|
|
|
$handlers[] = new StreamHandler($docroot.'/logs/api.log', Monolog\Logger::ERROR);
|
2017-09-04 10:24:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Disabilita la segnalazione degli errori (se il debug è disabilitato)
|
|
|
|
if (empty($debug)) {
|
2017-08-04 16:28:16 +02:00
|
|
|
error_reporting(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Imposta il formato di salvataggio dei log
|
2018-05-11 14:48:46 +02:00
|
|
|
$pattern = '[%datetime%] %channel%.%level_name%: %message%';
|
|
|
|
if (!empty($debug)) {
|
|
|
|
$pattern .= ' %context%';
|
|
|
|
}
|
|
|
|
$pattern .= PHP_EOL.'%extra% '.PHP_EOL;
|
|
|
|
|
|
|
|
$monologFormatter = new Monolog\Formatter\LineFormatter($pattern);
|
|
|
|
|
|
|
|
if (!empty($debug)) {
|
|
|
|
$monologFormatter->includeStacktraces(true);
|
|
|
|
}
|
|
|
|
|
2017-08-04 16:28:16 +02:00
|
|
|
foreach ($handlers as $handler) {
|
2017-09-15 16:37:19 +02:00
|
|
|
$handler->setFormatter($monologFormatter);
|
|
|
|
$logger->pushHandler(new FilterHandler($handler, [$handler->getLevel()]));
|
2017-08-04 16:28:16 +02:00
|
|
|
}
|
|
|
|
|
2017-09-04 10:24:44 +02:00
|
|
|
// Imposta Monolog come gestore degli errori
|
2017-08-04 16:28:16 +02:00
|
|
|
Monolog\ErrorHandler::register($logger);
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Istanziamento del gestore delle traduzioni del progetto
|
|
|
|
$lang = !empty($lang) ? $lang : 'it';
|
2017-09-19 16:20:44 +02:00
|
|
|
$formatter = !empty($formatter) ? $formatter : [];
|
2017-09-04 12:59:03 +02:00
|
|
|
$translator = Translator::getInstance();
|
2017-08-07 13:07:18 +02:00
|
|
|
$translator->addLocalePath($docroot.'/locale');
|
|
|
|
$translator->addLocalePath($docroot.'/modules/*/locale');
|
2017-09-19 16:20:44 +02:00
|
|
|
$translator->setLocale($lang, $formatter);
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Individuazione di versione e revisione del progetto
|
|
|
|
$version = Update::getVersion();
|
|
|
|
$revision = Update::getRevision();
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-09-04 10:24:44 +02:00
|
|
|
// Inizializzazione della sessione
|
2017-08-07 13:07:18 +02:00
|
|
|
if (!API::isAPIRequest()) {
|
2018-07-08 16:18:44 +02:00
|
|
|
// Sicurezza della sessioni
|
|
|
|
ini_set('session.use_trans_sid', '0');
|
|
|
|
ini_set('session.use_only_cookies', '1');
|
|
|
|
|
2018-07-08 18:25:36 +02:00
|
|
|
session_set_cookie_params(0, $rootdir, null, isHTTPS(true));
|
2017-08-07 13:07:18 +02:00
|
|
|
session_start();
|
2017-08-04 16:28:16 +02:00
|
|
|
}
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
$dbo = Database::getConnection();
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Controllo sulla presenza dei permessi di accesso basilari
|
2017-08-30 11:50:46 +02:00
|
|
|
$continue = $dbo->isInstalled() && !Update::isUpdateAvailable() && (Auth::check() || API::isAPIRequest());
|
|
|
|
|
2018-04-23 09:53:53 +02:00
|
|
|
if (!empty($skip_permissions)) {
|
|
|
|
Permissions::skip();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$continue && getURLPath() != slashes(ROOTDIR.'/index.php') && !Permissions::getSkip()) {
|
2017-09-11 18:12:41 +02:00
|
|
|
if (Auth::check()) {
|
|
|
|
Auth::logout();
|
|
|
|
}
|
|
|
|
|
|
|
|
redirect(ROOTDIR.'/index.php');
|
2017-08-04 16:28:16 +02:00
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Operazione aggiuntive (richieste non API)
|
|
|
|
if (!API::isAPIRequest()) {
|
2018-06-28 15:23:52 +02:00
|
|
|
// Impostazioni di Content-Type e Charset Header
|
|
|
|
header('Content-Type: text/html; charset=UTF-8');
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Controllo CSRF
|
2018-07-08 18:25:36 +02:00
|
|
|
csrfProtector::init();
|
2017-08-07 13:07:18 +02:00
|
|
|
|
|
|
|
// Aggiunta del wrapper personalizzato per la generazione degli input
|
|
|
|
if (!empty($HTMLWrapper)) {
|
|
|
|
HTMLBuilder\HTMLBuilder::setWrapper($HTMLWrapper);
|
|
|
|
}
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Aggiunta dei gestori personalizzati per la generazione degli input
|
|
|
|
foreach ((array) $HTMLHandlers as $key => $value) {
|
|
|
|
HTMLBuilder\HTMLBuilder::setHandler($key, $value);
|
|
|
|
}
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Aggiunta dei gestori per componenti personalizzate
|
|
|
|
foreach ((array) $HTMLManagers as $key => $value) {
|
|
|
|
HTMLBuilder\HTMLBuilder::setManager($key, $value);
|
|
|
|
}
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
// Registrazione globale del template per gli input HTML
|
|
|
|
register_shutdown_function('translateTemplate');
|
2018-06-28 15:23:52 +02:00
|
|
|
ob_start();
|
2017-08-07 13:07:18 +02:00
|
|
|
|
2018-07-07 13:56:22 +02:00
|
|
|
// Compatibilità con le versioni precedenti
|
2018-06-23 15:41:32 +02:00
|
|
|
$_SESSION['infos'] = isset($_SESSION['infos']) ? array_unique($_SESSION['infos']) : [];
|
|
|
|
$_SESSION['warnings'] = isset($_SESSION['warnings']) ? array_unique($_SESSION['warnings']) : [];
|
|
|
|
$_SESSION['errors'] = isset($_SESSION['errors']) ? array_unique($_SESSION['errors']) : [];
|
2017-08-07 13:07:18 +02:00
|
|
|
|
|
|
|
// Impostazione del tema grafico di default
|
|
|
|
$theme = !empty($theme) ? $theme : 'default';
|
|
|
|
|
|
|
|
if ($continue) {
|
|
|
|
$id_module = filter('id_module');
|
|
|
|
$id_record = filter('id_record');
|
|
|
|
$id_plugin = filter('id_plugin');
|
|
|
|
$id_parent = filter('id_parent');
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2018-05-11 14:48:46 +02:00
|
|
|
// Periodo di visualizzazione dei record
|
|
|
|
// Personalizzato
|
|
|
|
if (!empty($_GET['period_start'])) {
|
|
|
|
$_SESSION['period_start'] = $_GET['period_start'];
|
|
|
|
$_SESSION['period_end'] = $_GET['period_end'];
|
|
|
|
}
|
|
|
|
// Dal 01-01-yyy al 31-12-yyyy
|
|
|
|
elseif (!isset($_SESSION['period_start'])) {
|
|
|
|
$_SESSION['period_start'] = date('Y').'-01-01';
|
|
|
|
$_SESSION['period_end'] = date('Y').'-12-31';
|
|
|
|
}
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
$user = Auth::user();
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
if (!empty($id_module)) {
|
2017-09-22 15:19:59 +02:00
|
|
|
$module = Modules::get($id_module);
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
$pageTitle = $module['title'];
|
|
|
|
|
2018-06-23 15:41:32 +02:00
|
|
|
// Segmenti
|
|
|
|
if (!isset($_SESSION['m'.$id_module]['id_segment'])) {
|
|
|
|
$segments = Modules::getSegments($id_module);
|
|
|
|
$_SESSION['m'.$id_module]['id_segment'] = isset($segments[0]['id']) ? $segments[0]['id'] : null;
|
|
|
|
}
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
Permissions::addModule($id_module);
|
2017-08-04 16:28:16 +02:00
|
|
|
}
|
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
if (!empty($skip_permissions)) {
|
|
|
|
Permissions::skip();
|
|
|
|
}
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2017-08-07 13:07:18 +02:00
|
|
|
Permissions::check();
|
2017-08-04 16:28:16 +02:00
|
|
|
}
|
|
|
|
|
2017-09-04 10:24:44 +02:00
|
|
|
// Variabili GET e POST
|
|
|
|
$post = Filter::getPOST();
|
|
|
|
$get = Filter::getGET();
|
|
|
|
}
|