351 lines
9.6 KiB
PHP
Executable File
351 lines
9.6 KiB
PHP
Executable File
<?php
|
|
/*
|
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
|
* Copyright (C) DevCode s.n.c.
|
|
*
|
|
* This program 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.
|
|
*
|
|
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
use Util\Messages;
|
|
|
|
/**
|
|
* Classe per la gestione delle utenze.
|
|
*
|
|
* @since 2.4
|
|
*/
|
|
class App
|
|
{
|
|
public static $docroot;
|
|
public static $rootdir;
|
|
public static $baseurl;
|
|
|
|
/** @var array Identificativo del modulo corrente */
|
|
protected static $current_module;
|
|
/** @var int Identificativo dell'elemento corrente */
|
|
protected static $current_element;
|
|
|
|
/** @var Messages Gestione dei messaggi flash */
|
|
protected static $flash = null;
|
|
|
|
/** @var bool Stato di debug */
|
|
protected static $config = [];
|
|
|
|
/** @var array Elenco degli assets del progetto */
|
|
protected static $assets = [
|
|
// CSS
|
|
'css' => [
|
|
'app.min.css',
|
|
'style.min.css',
|
|
'themes.min.css',
|
|
'dropzone.min.css',
|
|
],
|
|
|
|
// Print CSS
|
|
'print' => [
|
|
'print.min.css',
|
|
],
|
|
|
|
// JS
|
|
'js' => [
|
|
'app.min.js',
|
|
'functions.min.js',
|
|
'custom.min.js',
|
|
'dropzone.min.js',
|
|
'i18n/parsleyjs/|lang|.min.js',
|
|
'i18n/select2/|lang|.min.js',
|
|
'i18n/moment/|lang|.min.js',
|
|
'i18n/fullcalendar/|lang|.min.js',
|
|
],
|
|
];
|
|
|
|
/**
|
|
* Restituisce la configurazione dell'installazione in utilizzo del progetto.
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getConfig()
|
|
{
|
|
if (empty(self::$config['db_host'])) {
|
|
if (file_exists(base_dir().'/config.inc.php')) {
|
|
include base_dir().'/config.inc.php';
|
|
|
|
$config = get_defined_vars();
|
|
} else {
|
|
$config = [];
|
|
}
|
|
|
|
$defaultConfig = self::getDefaultConfig();
|
|
|
|
$result = array_merge($defaultConfig, $config);
|
|
|
|
// Operazioni di normalizzazione sulla configurazione
|
|
$result['debug'] = isset(self::$config['debug']) ? self::$config['debug'] : !empty($result['debug']);
|
|
$result['lang'] = $result['lang'] == 'it' ? 'it_IT' : $result['lang'];
|
|
|
|
self::$config = $result;
|
|
}
|
|
|
|
return self::$config;
|
|
}
|
|
|
|
/**
|
|
* Imposta e restituisce lo stato di debug del progetto.
|
|
*
|
|
* @param bool $value
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function debug($value = null)
|
|
{
|
|
if (is_bool($value)) {
|
|
self::$config['debug'] = $value;
|
|
}
|
|
|
|
if (!isset(self::$config['debug'])) {
|
|
App::getConfig();
|
|
}
|
|
|
|
return self::$config['debug'];
|
|
}
|
|
|
|
/**
|
|
* Restituisce l'oggetto dedicato alla gestione dei messaggi per l'utente.
|
|
*
|
|
* @return Messages
|
|
*/
|
|
public static function flash()
|
|
{
|
|
if (empty(self::$flash)) {
|
|
$storage = null;
|
|
self::$flash = new Messages($storage, 'messages');
|
|
}
|
|
|
|
return self::$flash;
|
|
}
|
|
|
|
/**
|
|
* Individua i percorsi di base necessari per il funzionamento del gestionale.
|
|
* <b>Attenzione<b>: questo metodo deve essere eseguito all'interno di un file nella cartella principale del progetto per permettere il corretto funzionamento degli URL.
|
|
*/
|
|
public static function definePaths($docroot)
|
|
{
|
|
if (!defined('DOCROOT')) {
|
|
// Individuazione di $rootdir
|
|
$rootdir = substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], '/')).'/';
|
|
if (strrpos($rootdir, '/'.basename($docroot).'/') !== false) {
|
|
$rootdir = substr($rootdir, 0, strrpos($rootdir, '/'.basename($docroot).'/')).'/'.basename($docroot);
|
|
} else {
|
|
$rootdir = '/';
|
|
}
|
|
$rootdir = rtrim($rootdir, '/');
|
|
$rootdir = str_replace('%2F', '/', rawurlencode($rootdir));
|
|
|
|
// Individuazione di $baseurl
|
|
$baseurl = (isHTTPS(true) ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$rootdir;
|
|
|
|
// Impostazione delle variabili globali
|
|
define('DOCROOT', $docroot);
|
|
define('ROOTDIR', $rootdir);
|
|
define('BASEURL', $baseurl);
|
|
|
|
self::$docroot = $docroot;
|
|
self::$rootdir = $rootdir;
|
|
self::$baseurl = $baseurl;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Individua i percorsi principali del progetto.
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getPaths()
|
|
{
|
|
$assets = base_path().'/assets/dist';
|
|
|
|
return [
|
|
'assets' => $assets,
|
|
'css' => $assets.'/css',
|
|
'js' => $assets.'/js',
|
|
'img' => $assets.'/img',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Restituisce l'elenco degli assets del progetto.
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getAssets()
|
|
{
|
|
// Assets aggiuntivi
|
|
$config = self::getConfig();
|
|
|
|
$version = Update::getVersion();
|
|
|
|
// Impostazione dei percorsi
|
|
$paths = self::getPaths();
|
|
$lang = trans()->getCurrentLocale();
|
|
|
|
// Sezioni: nome - percorso
|
|
$sections = [
|
|
'css' => 'css',
|
|
'print' => 'css',
|
|
'js' => 'js',
|
|
];
|
|
|
|
$first_lang = explode('_', $lang);
|
|
$lang_replace = [
|
|
$lang,
|
|
strtolower($lang),
|
|
strtolower($first_lang[0]),
|
|
strtoupper($first_lang[0]),
|
|
str_replace('_', '-', $lang),
|
|
str_replace('_', '-', strtolower($lang)),
|
|
];
|
|
|
|
$assets = [];
|
|
|
|
foreach ($sections as $section => $dir) {
|
|
$result = array_unique(array_merge(self::$assets[$section], $config['assets'][$section]));
|
|
|
|
foreach ($result as $key => $element) {
|
|
$element = $paths[$dir].'/'.$element;
|
|
|
|
foreach ($lang_replace as $replace) {
|
|
$name = str_replace('|lang|', $replace, $element);
|
|
|
|
if (file_exists(base_dir().str_replace(base_path(), '', $name))) {
|
|
$assets_element = $name;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$result[$key] = $assets_element.'?v='.$version;
|
|
}
|
|
|
|
$assets[$section] = $result;
|
|
}
|
|
|
|
return $assets;
|
|
}
|
|
|
|
/**
|
|
* Restituisce il codice HTML per il form contenente il file indicato.
|
|
*
|
|
* @param string $file
|
|
* @param array $result
|
|
* @param array $options
|
|
* @param bool $disableForm
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function load($file, $result, $options, $disableForm = false)
|
|
{
|
|
$form = $disableForm ? '|response|' : self::internalLoad('form.php', $result, $options);
|
|
|
|
$response = self::internalLoad($file, $result, $options);
|
|
|
|
$form = str_replace('|response|', $response, $form);
|
|
|
|
return $form;
|
|
}
|
|
|
|
/**
|
|
* Restituisce il codice HTML generato del file indicato.
|
|
*
|
|
* @param string $file
|
|
* @param array $result
|
|
* @param array $options
|
|
* @param string $directory
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function internalLoad($file, $result, $options, $directory = null)
|
|
{
|
|
$module = Modules::getCurrent();
|
|
|
|
$database = $dbo = database();
|
|
|
|
$id_module = $module['id'];
|
|
$id_record = filter('id_record');
|
|
$id_plugin = $options['id_plugin'];
|
|
|
|
$directory = empty($directory) ? 'include|custom|/common/' : $directory;
|
|
|
|
ob_start();
|
|
include self::filepath($directory, $file);
|
|
$response = ob_get_clean();
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Individua il percorso per il file da includere considerando gli eventuali custom.
|
|
*
|
|
* @param string $path
|
|
* @param string $file
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public static function filepath($path, $file = null)
|
|
{
|
|
$path = str_contains($path, base_dir()) ? $path : base_dir().'/'.ltrim($path, '/');
|
|
$path = empty($file) ? $path : rtrim($path, '/').'/'.$file;
|
|
|
|
$original_file = str_replace('|custom|', '', $path);
|
|
$custom_file = str_replace('|custom|', '/custom', $path);
|
|
|
|
$result = '';
|
|
if (file_exists($custom_file)) {
|
|
$result = $custom_file;
|
|
} elseif (file_exists($original_file)) {
|
|
$result = $original_file;
|
|
}
|
|
|
|
return slashes($result);
|
|
}
|
|
|
|
/**
|
|
* Restituisce la configurazione di default del progetto.
|
|
*
|
|
* @return array
|
|
*/
|
|
protected static function getDefaultConfig()
|
|
{
|
|
if (file_exists(base_dir().'/config.example.php')) {
|
|
include base_dir().'/config.example.php';
|
|
}
|
|
|
|
$db_host = '';
|
|
$db_username = '';
|
|
$db_password = '';
|
|
$db_name = '';
|
|
$port = '';
|
|
$lang = '';
|
|
|
|
$formatter = [
|
|
'timestamp' => 'd/m/Y H:i',
|
|
'date' => 'd/m/Y',
|
|
'time' => 'H:i',
|
|
'number' => [
|
|
'decimals' => ',',
|
|
'thousands' => '.',
|
|
],
|
|
];
|
|
|
|
return get_defined_vars();
|
|
}
|
|
}
|