1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-16 19:40:44 +01:00

Aggiornamento della documentazione integrata

Miglioramento della documentazione integrata delle classi principali.
This commit is contained in:
Thomas Zilio 2017-08-31 11:32:49 +02:00
parent 78484220fe
commit aaabb18fe6
13 changed files with 354 additions and 78 deletions

View File

@ -293,31 +293,6 @@ class Auth extends \Util\Singleton
return password_hash($password, self::$passwordOptions['algorithm'], self::$passwordOptions['options']); return password_hash($password, self::$passwordOptions['algorithm'], self::$passwordOptions['options']);
} }
public static function check()
{
return self::getInstance()->isAuthenticated();
}
public static function admin()
{
return self::getInstance()->isAdmin();
}
public static function user()
{
return self::getInstance()->getUser();
}
public static function logout()
{
return self::getInstance()->destory();
}
public static function firstModule()
{
return self::getInstance()->getFirstModule();
}
/** /**
* Restituisce l'elenco degli stati del sistema di autenticazione. * Restituisce l'elenco degli stati del sistema di autenticazione.
* *
@ -327,4 +302,52 @@ class Auth extends \Util\Singleton
{ {
return self::$status; return self::$status;
} }
/**
* Controlla se l'utente è autenticato.
*
* @return bool
*/
public static function check()
{
return self::getInstance()->isAuthenticated();
}
/**
* Controlla se l'utente appartiene al gruppo degli Amministratori.
*
* @return bool
*/
public static function admin()
{
return self::getInstance()->isAdmin();
}
/**
* Restituisce le informazioni riguardanti l'utente autenticato.
*
* @return array
*/
public static function user()
{
return self::getInstance()->getUser();
}
/**
* Distrugge le informazioni riguardanti l'utente autenticato, forzando il logout.
*/
public static function logout()
{
return self::getInstance()->destory();
}
/**
* Restituisce il nome del primo modulo navigabile dall'utente autenticato.
*
* @return string
*/
public static function firstModule()
{
return self::getInstance()->getFirstModule();
}
} }

View File

@ -7,19 +7,28 @@
*/ */
class Database extends Util\Singleton class Database extends Util\Singleton
{ {
/** @var string Host del database */
protected $host; protected $host;
/** @var int Porta di accesso del database */
protected $port; protected $port;
/** @var string Username di accesso */
protected $username; protected $username;
/** @var string Password di accesso */
protected $password; protected $password;
/** @var string Nome del database */
protected $database_name; protected $database_name;
/** @var string Charset della comunicazione */
protected $charset; protected $charset;
/** @var array Opzioni riguardanti la comunicazione (PDO) */
protected $option = []; protected $option = [];
protected static $connection; /** @var DebugBar\DataCollector\PDO\TraceablePDO Classe PDO tracciabile */
protected $pdo; protected $pdo;
/** @var bool Stato di installazione del database */
protected $is_installed; protected $is_installed;
/** @var string Versione corrente di MySQL */
protected $mysql_version; protected $mysql_version;
/** /**
@ -37,7 +46,7 @@ class Database extends Util\Singleton
* *
* @return Database * @return Database
*/ */
protected function __construct($server, $username, $password, $database_name, $charset = 'utf8mb4', $option = [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]) protected function __construct($server, $username, $password, $database_name, $charset = null, $option = [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION])
{ {
if (is_array($server)) { if (is_array($server)) {
$host = $server['host']; $host = $server['host'];
@ -62,21 +71,28 @@ class Database extends Util\Singleton
if (!empty($this->host) && !empty($this->database_name)) { if (!empty($this->host) && !empty($this->database_name)) {
try { try {
$this->pdo = new PDO( $this->pdo = new \DebugBar\DataCollector\PDO\TraceablePDO(new PDO(
'mysql:host='.$this->host.(!empty($this->port) ? ';port='.$this->port : '').';dbname='.$this->database_name, 'mysql:host='.$this->host.(!empty($this->port) ? ';port='.$this->port : '').';dbname='.$this->database_name,
$this->username, $this->username,
$this->password, $this->password,
$this->option $this->option
); ));
if (empty($this->charset) && version_compare($this->getMySQLVersion(), '5.5.3') >= 0) {
$this->charset = 'utf8mb4';
}
// Fix per problemi di compatibilità delle password MySQL 4.1+ (da versione precedente) // Fix per problemi di compatibilità delle password MySQL 4.1+ (da versione precedente)
$this->query('SET SESSION old_passwords = 0'); $this->pdo->query('SET SESSION old_passwords = 0');
//$this->query('SET PASSWORD = PASSWORD('.$this->prepare($this->password).')'); //$this->pdo->query('SET PASSWORD = PASSWORD('.$this->prepare($this->password).')');
$this->pdo = new \DebugBar\DataCollector\PDO\TraceablePDO($this->pdo); // Impostazione del charset della comunicazione
if (!empty($this->charset)) {
$this->pdo->query("SET NAMES '".$this->charset."'");
}
//$this->query("SET NAMES '".$this->charset."'"); // Reset della modalità di esecuzione MySQL per la sessione corrente
$this->query("SET sql_mode = ''"); $this->pdo->query("SET sql_mode = ''");
} catch (PDOException $e) { } catch (PDOException $e) {
if ($e->getCode() == 1049 || $e->getCode() == 1044) { if ($e->getCode() == 1049 || $e->getCode() == 1044) {
$e = new PDOException(($e->getCode() == 1049) ? _('Database non esistente!') : _('Credenziali di accesso invalide!')); $e = new PDOException(($e->getCode() == 1049) ? _('Database non esistente!') : _('Credenziali di accesso invalide!'));
@ -494,6 +510,15 @@ class Database extends Util\Singleton
} }
} }
/**
* Sincronizza i valori indicati associati alle condizioni, rimuovendo le combinazioni aggiuntive e inserendo quelle non ancora presenti.
*
* @since 2.3
*
* @param string $table
* @param array $conditions Condizioni di sincronizzazione
* @param array $list Valori da sincronizzare
*/
public function sync($table, $conditions, $list) public function sync($table, $conditions, $list)
{ {
if ( if (
@ -517,6 +542,15 @@ class Database extends Util\Singleton
} }
} }
/**
* Inserisce le le combinazioni tra i valori indicati e le condizioni.
*
* @since 2.3
*
* @param string $table
* @param array $conditions Condizioni
* @param array $list Valori da aggiungere
*/
public function attach($table, $conditions, $list) public function attach($table, $conditions, $list)
{ {
if ( if (
@ -540,6 +574,15 @@ class Database extends Util\Singleton
} }
} }
/**
* Rimuove le le combinazioni tra i valori indicati e le condizioni.
*
* @since 2.3
*
* @param string $table
* @param array $conditions Condizioni
* @param array $list Valori da rimuovere
*/
public function detach($table, $conditions, $list) public function detach($table, $conditions, $list)
{ {
if ( if (

View File

@ -10,9 +10,9 @@ class Filter
/** @var HTMLPurifier */ /** @var HTMLPurifier */
protected static $purifier; protected static $purifier;
/** @var array Lista dei contenuti inviati via POST */ /** @var array Elenco dei contenuti inviati via POST */
protected static $post; protected static $post;
/** @var array Lista dei contenuti inviati via GET */ /** @var array Elenco dei contenuti inviati via GET */
protected static $get; protected static $get;
/** /**

View File

@ -5,6 +5,8 @@ namespace HTMLBuilder;
/** /**
* Classe dedicata alla gestione della conversione di tag in codice HTML. * Classe dedicata alla gestione della conversione di tag in codice HTML.
* *
* <b>Tag di input</b>
*
* Campo di input generico: * Campo di input generico:
* {[ "type": "text", "required": 1, "value": "$idintervento$" ]} * {[ "type": "text", "required": 1, "value": "$idintervento$" ]}
* *
@ -16,6 +18,11 @@ namespace HTMLBuilder;
* *
* La sostituzione dei parametri compresi tra $$ viene effettuata attraverso il parametro $records. * La sostituzione dei parametri compresi tra $$ viene effettuata attraverso il parametro $records.
* *
* <b>Tag personalizzati</b>
*
* Struttura per l'inserimento e la visualizzazione dei file:
* {( "name": "filelist_and_upload", "id_module": "3", "id_record": "17" )}
*
* @since 2.3 * @since 2.3
*/ */
class HTMLBuilder class HTMLBuilder
@ -32,7 +39,7 @@ class HTMLBuilder
'manager' => ')}', 'manager' => ')}',
]; ];
/** @var array Lista degli attributi inseriit nel formato che necessitano solo di essere presenti */ /** @var array Elenco degli attributi che necessitano esclusivamente di essere presenti */
protected static $specifics = [ protected static $specifics = [
'multiple', 'multiple',
'checked', 'checked',
@ -41,7 +48,7 @@ class HTMLBuilder
'required', 'required',
]; ];
/** @var array Lista dei gestori dei campi HTML */ /** @var array Elenco dei gestori dei campi HTML */
protected static $handlers = [ protected static $handlers = [
'list' => [ 'list' => [
'default' => 'HTMLBuilder\Handler\DefaultHandler', 'default' => 'HTMLBuilder\Handler\DefaultHandler',
@ -63,7 +70,7 @@ class HTMLBuilder
'istance' => null, 'istance' => null,
]; ];
/** @var array Lista dei gestori delle strutture HTML */ /** @var array Elenco dei gestori delle strutture HTML */
protected static $managers = [ protected static $managers = [
'list' => [ 'list' => [
'filelist_and_upload' => 'HTMLBuilder\Manager\FileManager', 'filelist_and_upload' => 'HTMLBuilder\Manager\FileManager',
@ -72,6 +79,13 @@ class HTMLBuilder
'instances' => [], 'instances' => [],
]; ];
/**
* Esegue la sostituzione dei tag personalizzati con il relativo codice HTML.
*
* @param string $html
*
* @return string
*/
public static function replace($html) public static function replace($html)
{ {
preg_match_all('/'.preg_quote(self::$open['manager']).'(.+?)'.preg_quote(self::$close['manager']).'/i', $html, $managers); preg_match_all('/'.preg_quote(self::$open['manager']).'(.+?)'.preg_quote(self::$close['manager']).'/i', $html, $managers);
@ -93,6 +107,13 @@ class HTMLBuilder
return $html; return $html;
} }
/**
* Genera il codice HTML per i singoli tag di input.
*
* @param string $json
*
* @return string
*/
protected static function generate($json) protected static function generate($json)
{ {
// Elaborazione del formato // Elaborazione del formato
@ -118,6 +139,14 @@ class HTMLBuilder
return $result; return $result;
} }
/**
* Decodifica i tag personalizzati e li converte in un array basato sul formato JSON.
*
* @param string $string
* @param string $type
*
* @return array
*/
protected static function decode($string, $type) protected static function decode($string, $type)
{ {
$string = '{'.substr($string, strlen(self::$open[$type]), -strlen(self::$close[$type])).'}'; $string = '{'.substr($string, strlen(self::$open[$type]), -strlen(self::$close[$type])).'}';
@ -127,6 +156,13 @@ class HTMLBuilder
return $json; return $json;
} }
/**
* Elabora l'array contenente le impostazioni del tag per renderlo fruibile alla conversione in HTML (per i tag di input).
*
* @param array $json
*
* @return array
*/
protected static function elaborate($json) protected static function elaborate($json)
{ {
global $records; global $records;
@ -203,6 +239,15 @@ class HTMLBuilder
return [$values, $extras]; return [$values, $extras];
} }
/**
* Sostituisce i placeholder delle impostazioni con i relativi valori (per i tag di input).
*
* @param string $result
* @param array $values
* @param array $extras
*
* @return string
*/
protected static function process($result, $values, $extras) protected static function process($result, $values, $extras)
{ {
unset($values['label']); unset($values['label']);
@ -226,6 +271,13 @@ class HTMLBuilder
return $result; return $result;
} }
/**
* Restituisce il nome della classe resposabile per la gestione di una determinata tipologia di tag di input.
*
* @param string $input
*
* @return string
*/
public static function getHandlerName($input) public static function getHandlerName($input)
{ {
$result = empty(self::$handlers['list'][$input]) ? self::$handlers['list']['default'] : self::$handlers['list'][$input]; $result = empty(self::$handlers['list'][$input]) ? self::$handlers['list']['default'] : self::$handlers['list'][$input];
@ -233,6 +285,13 @@ class HTMLBuilder
return $result; return $result;
} }
/**
* Restituisce l'istanza della classe resposabile per la gestione di una determinata tipologia di tag di input.
*
* @param string $input
*
* @return mixed
*/
public static function getHandler($input) public static function getHandler($input)
{ {
$class = self::getHandlerName($input); $class = self::getHandlerName($input);
@ -243,6 +302,12 @@ class HTMLBuilder
return self::$handlers['instances'][$class]; return self::$handlers['instances'][$class];
} }
/**
* Imposta una determinata classe come resposabile per la gestione di una determinata tipologia di tag di input.
*
* @param string $input
* @param string|mixed $class
*/
public static function setHandler($input, $class) public static function setHandler($input, $class)
{ {
$original = $class; $original = $class;
@ -255,6 +320,11 @@ class HTMLBuilder
} }
} }
/**
* Restituisce l'oggetto responsabile per la costruzione del codice HTML contenente gli input effettivi.
*
* @return mixed
*/
public static function getWrapper() public static function getWrapper()
{ {
if (empty(self::$wrapper['instance'])) { if (empty(self::$wrapper['instance'])) {
@ -265,6 +335,11 @@ class HTMLBuilder
return self::$wrapper['instance']; return self::$wrapper['instance'];
} }
/**
* Imposta l'oggetto responsabile per la costruzione del codice HTML contenente gli input effettivi.
*
* @param string|mixed $class
*/
public static function setWrapper($class) public static function setWrapper($class)
{ {
$original = $class; $original = $class;
@ -277,6 +352,13 @@ class HTMLBuilder
} }
} }
/**
* Restituisce l'oggetto responsabile per la costruzione del codice HTML per il tag personalizzato.
*
* @param string $input
*
* @return mixed
*/
public static function getManager($input) public static function getManager($input)
{ {
$result = null; $result = null;
@ -293,6 +375,12 @@ class HTMLBuilder
return $result; return $result;
} }
/**
* Imposta l'oggetto responsabile per la costruzione del codice HTML per il tag personalizzato.
*
* @param string $input
* @param string|mixed $class
*/
public static function setManager($input, $class) public static function setManager($input, $class)
{ {
$original = $class; $original = $class;
@ -306,6 +394,13 @@ class HTMLBuilder
} }
} }
/**
* Predispone un testo per l'inserimento all'interno di un attributo HTML.
*
* @param string $string
*
* @return string
*/
function prepareToField($string) function prepareToField($string)
{ {
return str_replace('"', '&quot;', $string); return str_replace('"', '&quot;', $string);

View File

@ -7,16 +7,20 @@ use UnexpectedValueException;
use Exception; use Exception;
/** /**
* Classe per gestire le conversione di date e numeri tra diversi formati. * Classe per gestire la formattazione di date e numeri in convenzioni differenti.
* *
* @since 2.3 * @since 2.3
*/ */
class Formatter class Formatter
{ {
/** @var array Separatori per la formattazione dei numeri */
protected $numberSeparators; protected $numberSeparators;
/** @var string Pattern per le date */
protected $datePattern; protected $datePattern;
/** @var string Pattern per gli orari */
protected $timePattern; protected $timePattern;
/** @var string Pattern per i timestamp */
protected $timestampPattern; protected $timestampPattern;
public function __construct($numberSeparators = [], $date = null, $time = null, $timestamp = null) public function __construct($numberSeparators = [], $date = null, $time = null, $timestamp = null)
@ -356,7 +360,7 @@ class Formatter
* *
* @return string * @return string
*/ */
public function convertNumberTo($formatter, $value) public function formatNumberTo($formatter, $value)
{ {
$pieces = $this->toNumberObject($value); $pieces = $this->toNumberObject($value);
@ -379,7 +383,7 @@ class Formatter
* *
* @return string * @return string
*/ */
public function convertTimestampTo($formatter, $value) public function formatTimestampTo($formatter, $value)
{ {
$result = $this->toTimestampObject($value); $result = $this->toTimestampObject($value);
@ -394,7 +398,7 @@ class Formatter
* *
* @return string * @return string
*/ */
public function convertDateTo($formatter, $value) public function formatDateTo($formatter, $value)
{ {
$result = $this->toDateObject($value); $result = $this->toDateObject($value);
@ -409,7 +413,7 @@ class Formatter
* *
* @return string * @return string
*/ */
public function convertTimeTo($formatter, $value) public function formatTimeTo($formatter, $value)
{ {
$result = $this->toTimeObject($value); $result = $this->toTimeObject($value);
@ -424,9 +428,9 @@ class Formatter
* *
* @return string * @return string
*/ */
public function getNumberFrom($formatter, $value) public function formatNumberFrom($formatter, $value)
{ {
return $formatter->convertNumberTo($this, $value); return $formatter->formatNumberTo($this, $value);
} }
/** /**
@ -437,9 +441,9 @@ class Formatter
* *
* @return string * @return string
*/ */
public function getTimestampFrom($formatter, $value) public function formatTimestampFrom($formatter, $value)
{ {
return $formatter->convertTimestampTo($this, $value); return $formatter->formatTimestampTo($this, $value);
} }
/** /**
@ -450,9 +454,9 @@ class Formatter
* *
* @return string * @return string
*/ */
public function getDateFrom($formatter, $value) public function formatDateFrom($formatter, $value)
{ {
return $formatter->convertDateTo($this, $value); return $formatter->formatDateTo($this, $value);
} }
/** /**
@ -463,8 +467,8 @@ class Formatter
* *
* @return string * @return string
*/ */
public function getTimeFrom($formatter, $value) public function formatTimeFrom($formatter, $value)
{ {
return $formatter->convertTimeTo($this, $value); return $formatter->formatTimeTo($this, $value);
} }
} }

View File

@ -7,15 +7,23 @@
*/ */
class Modules class Modules
{ {
/** @var int Identificativo del modulo corrente */
protected static $current_module; protected static $current_module;
/** @var int Identificativo dell'elemento corrente */
protected static $current_element; protected static $current_element;
/** @var array Elenco dei moduli disponibili */
protected static $modules = []; protected static $modules = [];
/** @var array Elenco delle condizioni aggiuntive disponibili */
protected static $additionals = []; protected static $additionals = [];
/** @var array Elenco delle query generiche dei moduli */
protected static $queries = []; protected static $queries = [];
/** @var array Elenco gerarchico dei moduli */
protected static $hierarchy = []; protected static $hierarchy = [];
/** @var array Profondità dell'elenco gerarchico */
protected static $depth; protected static $depth;
/** @var array Struttura HTML dedicata al menu principale */
protected static $menu; protected static $menu;
/** /**

View File

@ -7,7 +7,9 @@
*/ */
class Permissions class Permissions
{ {
/** @var array Elenco dei permessi necessari */
protected static $permissions = []; protected static $permissions = [];
/** @var bool Condizione riguardante il controllo effettivo dei permessi */
protected static $skip_permissions = false; protected static $skip_permissions = false;
/** /**

View File

@ -7,7 +7,9 @@
*/ */
class Plugins class Plugins
{ {
/** @var array Elenco dei plugin disponibili */
protected static $plugins = []; protected static $plugins = [];
/** @var array Elenco delle query generiche dei plugin */
protected static $queries = []; protected static $queries = [];
/** /**

View File

@ -7,6 +7,7 @@
*/ */
class Settings class Settings
{ {
/** @var array Elenco delle impostazioni ottenute */
protected static $values = []; protected static $values = [];
/** /**

View File

@ -236,7 +236,7 @@ class Translator extends Util\Singleton
*/ */
public static function numberToEnglish($string) public static function numberToEnglish($string)
{ {
return floatval(self::getLocaleFormatter()->convertNumberTo(self::getEnglishFormatter(), $string)); return floatval(self::getLocaleFormatter()->formatNumberTo(self::getEnglishFormatter(), $string));
} }
/** /**
@ -257,7 +257,7 @@ class Translator extends Util\Singleton
$string = number_format($string, $decimals, self::getEnglishFormatter()->getNumberSeparators()['decimals'], self::getEnglishFormatter()->getNumberSeparators()['thousands']); $string = number_format($string, $decimals, self::getEnglishFormatter()->getNumberSeparators()['decimals'], self::getEnglishFormatter()->getNumberSeparators()['thousands']);
} }
return self::getEnglishFormatter()->convertNumberTo(self::getLocaleFormatter(), $string); return self::getEnglishFormatter()->formatNumberTo(self::getLocaleFormatter(), $string);
} }
/** /**
@ -269,7 +269,7 @@ class Translator extends Util\Singleton
*/ */
public static function dateToEnglish($string) public static function dateToEnglish($string)
{ {
return self::getLocaleFormatter()->convertDateTo(self::getEnglishFormatter(), $string); return self::getLocaleFormatter()->formatDateTo(self::getEnglishFormatter(), $string);
} }
/** /**
@ -286,7 +286,7 @@ class Translator extends Util\Singleton
return $fail; return $fail;
} }
return self::getEnglishFormatter()->convertDateTo(self::getLocaleFormatter(), $string); return self::getEnglishFormatter()->formatDateTo(self::getLocaleFormatter(), $string);
} }
/** /**
@ -298,7 +298,7 @@ class Translator extends Util\Singleton
*/ */
public static function timeToEnglish($string) public static function timeToEnglish($string)
{ {
return self::getLocaleFormatter()->convertTimeTo(self::getEnglishFormatter(), $string); return self::getLocaleFormatter()->formatTimeTo(self::getEnglishFormatter(), $string);
} }
/** /**
@ -315,7 +315,7 @@ class Translator extends Util\Singleton
return $fail; return $fail;
} }
return self::getEnglishFormatter()->convertTimeTo(self::getLocaleFormatter(), $string); return self::getEnglishFormatter()->formatTimeTo(self::getLocaleFormatter(), $string);
} }
/** /**
@ -327,7 +327,7 @@ class Translator extends Util\Singleton
*/ */
public static function timestampToEnglish($string) public static function timestampToEnglish($string)
{ {
return self::getLocaleFormatter()->convertTimestampTo(self::getEnglishFormatter(), $string); return self::getLocaleFormatter()->formatTimestampTo(self::getEnglishFormatter(), $string);
} }
/** /**
@ -344,7 +344,7 @@ class Translator extends Util\Singleton
return $fail; return $fail;
} }
return self::getEnglishFormatter()->convertTimestampTo(self::getLocaleFormatter(), $string); return self::getEnglishFormatter()->formatTimestampTo(self::getLocaleFormatter(), $string);
} }
/** /**

View File

@ -7,9 +7,12 @@
*/ */
class Update class Update
{ {
/** @var array Lista degli aggiornamenti da completare */ /** @var array Elenco degli aggiornamenti da completare */
protected static $updates; protected static $updates;
/**
* Controlla la presenza di aggiornamenti e prepara il database per la procedura.
*/
protected static function prepareToUpdate() protected static function prepareToUpdate()
{ {
$database = Database::getConnection(); $database = Database::getConnection();
@ -53,6 +56,7 @@ class Update
$reset = count(array_intersect($results, $versions)) != count($results); $reset = count(array_intersect($results, $versions)) != count($results);
// Memorizzazione degli aggiornamenti
if ($reset && $database->isConnected()) { if ($reset && $database->isConnected()) {
// Individua le versioni che sono state installate, anche solo parzialmente // Individua le versioni che sono state installate, anche solo parzialmente
$done = ($database_ready) ? $database->fetchArray('SELECT version, done FROM updates WHERE `done` IS NOT NULL') : []; $done = ($database_ready) ? $database->fetchArray('SELECT version, done FROM updates WHERE `done` IS NOT NULL') : [];
@ -85,6 +89,11 @@ class Update
} }
} }
/**
* Restituisce l'elenco degli aggiornamento incompleti o non ancora effettuati.
*
* @return array
*/
public static function getTodos() public static function getTodos()
{ {
if (!is_array(self::$updates)) { if (!is_array(self::$updates)) {
@ -109,6 +118,11 @@ class Update
return self::$updates; return self::$updates;
} }
/**
* Restituisce il primo aggiornamento che deve essere completato.
*
* @return array
*/
public static function getUpdate() public static function getUpdate()
{ {
if (!empty(self::getTodos())) { if (!empty(self::getTodos())) {
@ -116,21 +130,43 @@ class Update
} }
} }
/**
* Controlla che la stringa inserita possieda una struttura corrispondente a quella di una versione.
*
* @param string $string
*
* @return bool
*/
public static function isVersion($string) public static function isVersion($string)
{ {
return preg_match('/^\d+(?:\.\d+)+$/', $string); return preg_match('/^\d+(?:\.\d+)+$/', $string);
} }
/**
* Controlla ci sono aggiornamenti da fare per il database.
*
* @return bool
*/
public static function isUpdateAvailable() public static function isUpdateAvailable()
{ {
return !empty(self::getTodos()); return !empty(self::getTodos());
} }
/**
* Controlla se la procedura di aggiornamento è conclusa.
*
* @return bool
*/
public static function isUpdateCompleted() public static function isUpdateCompleted()
{ {
return !self::isUpdateAvailable(); return !self::isUpdateAvailable();
} }
/**
* Controlla se l'aggiornamento è in esecuzione.
*
* @return bool
*/
public static function isUpdateLocked() public static function isUpdateLocked()
{ {
$todos = array_column(self::getTodos(), 'done'); $todos = array_column(self::getTodos(), 'done');
@ -143,6 +179,11 @@ class Update
return false; return false;
} }
/**
* Restituisce la versione corrente del software gestita dal database.
*
* @return string
*/
public static function getDatabaseVersion() public static function getDatabaseVersion()
{ {
$database = Database::getConnection(); $database = Database::getConnection();
@ -152,16 +193,33 @@ class Update
return $results[0]['version']; return $results[0]['version'];
} }
/**
* Restituisce la versione corrente del software gestita dal file system (file VERSION nella root).
*
* @return string
*/
public static function getVersion() public static function getVersion()
{ {
return self::getFile('VERSION'); return self::getFile('VERSION');
} }
/**
* Restituisce la revisione corrente del software gestita dal file system (file REVISION nella root).
*
* @return string
*/
public static function getRevision() public static function getRevision()
{ {
return self::getFile('REVISION'); return self::getFile('REVISION');
} }
/**
* Ottiene i contenuti di un file.
*
* @param string $file
*
* @return string
*/
protected static function getFile($file) protected static function getFile($file)
{ {
$file = (str_contains($file, DOCROOT.DIRECTORY_SEPARATOR)) ? $file : DOCROOT.DIRECTORY_SEPARATOR.$file; $file = (str_contains($file, DOCROOT.DIRECTORY_SEPARATOR)) ? $file : DOCROOT.DIRECTORY_SEPARATOR.$file;
@ -177,6 +235,11 @@ class Update
return trim($result); return trim($result);
} }
/**
* Effettua una pulizia del database a seguito del completamento dell'aggiornamento.
*
* @return bool
*/
public static function updateCleanup() public static function updateCleanup()
{ {
if (self::isUpdateCompleted()) { if (self::isUpdateCompleted()) {
@ -194,6 +257,14 @@ class Update
return false; return false;
} }
/**
* Esegue una precisa sezione dell'aggiornamento fa fare, partendo dalle query e passando poi allo script relativo.
* Prima dell'esecuzione dello script viene inoltre eseguita un'operazione di normalizzazione dei campi delle tabelle del database finalizzata a generalizzare la gestione delle informazioni per l'API: vengono quindi aggiunti i campi <b>created_at</b> e, se permesso dalla versione di MySQL, <b>updated_at</b> ad ogni tabella registrata del software.
*
* @param int $rate Numero di singole query da eseguire dell'aggiornamento corrente
*
* @return array|bool
*/
public static function doUpdate($rate = 20) public static function doUpdate($rate = 20)
{ {
global $logger; global $logger;
@ -209,7 +280,7 @@ class Update
$database = Database::getConnection(); $database = Database::getConnection();
try { try {
// Esecuzione query release // Esecuzione delle query
if (!empty($update['sql']) && (!empty($update['done']) || is_null($update['done'])) && file_exists($file.'.sql')) { if (!empty($update['sql']) && (!empty($update['done']) || is_null($update['done'])) && file_exists($file.'.sql')) {
$queries = readSQLFile($file.'.sql', ';'); $queries = readSQLFile($file.'.sql', ';');
$count = count($queries); $count = count($queries);
@ -224,6 +295,7 @@ class Update
$database->query('UPDATE `updates` SET `done` = '.prepare($i + 3).' WHERE id = '.prepare($update['id'])); $database->query('UPDATE `updates` SET `done` = '.prepare($i + 3).' WHERE id = '.prepare($update['id']));
} }
// Restituisce l'indice della prima e dell'ultima query eseguita, con la differenza relativa per l'avanzamento dell'aggiornamento
return [ return [
$start, $start,
$end, $end,
@ -232,16 +304,18 @@ class Update
} }
} }
// Imposta l'aggiornamento nello stato di esecuzione dello script
$database->query('UPDATE `updates` SET `done` = 0 WHERE id = '.prepare($update['id'])); $database->query('UPDATE `updates` SET `done` = 0 WHERE id = '.prepare($update['id']));
// Normalizzazione dei campi per l'API // Normalizzazione dei campi per l'API
self::executeScript(DOCROOT.'/update/api.php'); self::executeScript(DOCROOT.'/update/api.php');
// Esecuzione script release // Esecuzione dello script
if (!empty($update['script']) && file_exists($file.'.php')) { if (!empty($update['script']) && file_exists($file.'.php')) {
self::executeScript($file.'.php'); self::executeScript($file.'.php');
} }
// Imposta l'aggiornamento come completato
$database->query('UPDATE `updates` SET `done` = 1 WHERE id = '.prepare($update['id'])); $database->query('UPDATE `updates` SET `done` = 1 WHERE id = '.prepare($update['id']));
// Normalizzazione di charset e collation // Normalizzazione di charset e collation
@ -256,6 +330,12 @@ class Update
} }
} }
/**
* Normalizza l'infrastruttura del database indicato, generalizzando charset e collation all'interno del database e delle tabelle ed effettuando una conversione delle tabelle all'engine InnoDB.
* <b>Attenzione</b>: se l'engine InnoDB non è supportato, il server ignorerà la conversione dell'engine e le foreign key del gestionale non funzioneranno adeguatamente.
*
* @param [type] $database_name
*/
protected static function normalizeDatabase($database_name) protected static function normalizeDatabase($database_name)
{ {
set_time_limit(0); set_time_limit(0);
@ -301,11 +381,15 @@ class Update
} }
} }
/**
* Esegue uno script PHP in un'ambiente il più possibile protetto.
*
* @param string $script
*/
protected static function executeScript($script) protected static function executeScript($script)
{ {
include __DIR__.'/../../core.php'; $database = Database::getConnection();
$dbo = $database;
$database = $dbo;
// Informazioni relative a MySQL // Informazioni relative a MySQL
$mysql_ver = $database->getMySQLVersion(); $mysql_ver = $database->getMySQLVersion();

View File

@ -3,13 +3,18 @@
namespace Util; namespace Util;
/** /**
* Classe astratta per la generazione di oggetti istanziabili una singola volta.
*
* @since 2.3 * @since 2.3
*/ */
abstract class Singleton abstract class Singleton
{ {
/** @var \Util\Singleton Oggetti istanziati */ /** @var Util\Singleton Oggetti istanziati */
protected static $instance = []; protected static $instance = [];
/**
* Protected constructor to prevent creating a new instance of the <b>Singleton</b> via the `new` operator from outside of this class.
*/
protected function __construct() protected function __construct()
{ {
} }
@ -21,7 +26,7 @@ abstract class Singleton
*/ */
public static function getInstance() public static function getInstance()
{ {
$class = get_called_class(); // late-static-bound class name $class = get_called_class();
if (!isset(self::$instance[$class])) { if (!isset(self::$instance[$class])) {
self::$instance[$class] = new static(); self::$instance[$class] = new static();
@ -30,10 +35,16 @@ abstract class Singleton
return self::$instance[$class]; return self::$instance[$class];
} }
/**
* Private clone method to prevent cloning of the instance of the <b>Singleton</b> instance.
*/
private function __clone() private function __clone()
{ {
} }
/**
* Private unserialize method to prevent unserializing of the <b>Singleton</b> instance.
*/
private function __wakeup() private function __wakeup()
{ {
} }

View File

@ -7,14 +7,14 @@
*/ */
class Widgets class Widgets
{ {
/** @var array Elenco delle strutture HTML dei widget */
public static $widgets = []; public static $widgets = [];
/** /**
* Funzione addModuleWidgets * Prende da database tutti i widget associati al modulo passato come parametro e li aggiunge alla pagina.
* $id_modulo: modulo in cui ci si trova *
* $location: location all'interno del modulo, per esempio controller oppure inserimento/modifica * @param string $id_module Modulo a cui aggiungere i widget
* Prende da database tutti i widget associati al modulo passato come parametro e li aggiunge con createWidget * @param string $location Posizione all'interno del modulo
* alla pagina.
*/ */
public static function addModuleWidgets($id_module, $location) public static function addModuleWidgets($id_module, $location)
{ {
@ -55,11 +55,14 @@ class Widgets
} }
/** /**
* Funzione createWidget * A seconda del tipo di widget inserisce il codice HTML per la sua creazione nella pagina.
* $id_widget: l'id numerico del widget da creare ed inserire nella pagina * Ottiene i dati per la creazione del widget dalla tabella, in maniera da crearli in maniera dinamica a seconda dei campi.
* Sa seconda del tipo di widget inserisce il codice HTML per la sua creazione nella pagina. *
* Ottiene i dati per la creazione * @param int $id_widget Identificativo numerico del widget
* del widget da tabella, in maniera da crearli in maniera dinamica a seconda dei campi. * @param string $class
* @param int $totalNumber
*
* @return string
*/ */
protected static function createWidget($id_widget, $class, $totalNumber = 4) protected static function createWidget($id_widget, $class, $totalNumber = 4)
{ {