Generalizzazione della gestione stringhe
Miglioramento della gestione delle stringhe con pattern personalizzati. Possibile soluzione alla issue #180 e ai relativi problemi con la generazione dei numeri consecutivi.
This commit is contained in:
parent
fbd053c39b
commit
038c9e767b
|
@ -24,7 +24,7 @@ function redirect($url, $type = 'php')
|
||||||
/**
|
/**
|
||||||
* Verifica e corregge il nome di un file.
|
* Verifica e corregge il nome di un file.
|
||||||
*
|
*
|
||||||
* @param unknown $filename
|
* @param string $filename
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
|
@ -162,7 +162,7 @@ function create_zip($source, $destination, $ignores = [])
|
||||||
/**
|
/**
|
||||||
* Controllo dei file zip e gestione errori.
|
* Controllo dei file zip e gestione errori.
|
||||||
*
|
*
|
||||||
* @param unknown $zip_file
|
* @param string $zip_file
|
||||||
*
|
*
|
||||||
* @return string|bool
|
* @return string|bool
|
||||||
*/
|
*/
|
||||||
|
@ -390,8 +390,8 @@ function get_next_code($str, $qty = 1, $mask = '')
|
||||||
/**
|
/**
|
||||||
* Verifica che il nome del file non sia già usato nella cartella inserita, nel qual caso aggiungo un suffisso.
|
* Verifica che il nome del file non sia già usato nella cartella inserita, nel qual caso aggiungo un suffisso.
|
||||||
*
|
*
|
||||||
* @param unknown $filename
|
* @param string $filename
|
||||||
* @param unknown $dir
|
* @param string $dir
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -410,9 +410,9 @@ function unique_filename($filename, $dir)
|
||||||
/**
|
/**
|
||||||
* Crea le thumbnails di $filename da dentro $dir e le salva in $dir.
|
* Crea le thumbnails di $filename da dentro $dir e le salva in $dir.
|
||||||
*
|
*
|
||||||
* @param unknown $tmp
|
* @param string $tmp
|
||||||
* @param unknown $filename
|
* @param string $filename
|
||||||
* @param unknown $dir
|
* @param string $dir
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
@ -452,7 +452,7 @@ function create_thumbnails($tmp, $filename, $dir)
|
||||||
/**
|
/**
|
||||||
* Ottiene l'indirizzo IP del client.
|
* Ottiene l'indirizzo IP del client.
|
||||||
*
|
*
|
||||||
* @return string|unknown
|
* @return string
|
||||||
*/
|
*/
|
||||||
function get_client_ip()
|
function get_client_ip()
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,7 +86,7 @@ if (file_exists($backup_dir)) {
|
||||||
$name = basename($backup);
|
$name = basename($backup);
|
||||||
$info = Backup::readName($backup);
|
$info = Backup::readName($backup);
|
||||||
|
|
||||||
$data = $info['Y'].'-'.$info['m'].'-'.$info['d'];
|
$data = $info['YYYY'].'-'.$info['m'].'-'.$info['d'];
|
||||||
$ora = $info['H'].':'.$info['i'].':'.$info['s'];
|
$ora = $info['H'].':'.$info['i'].':'.$info['s'];
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
@ -126,7 +126,7 @@ if (file_exists($backup_dir)) {
|
||||||
$name = basename($backup);
|
$name = basename($backup);
|
||||||
$info = Backup::readName($backup);
|
$info = Backup::readName($backup);
|
||||||
|
|
||||||
$data = $info['Y'].'-'.$info['m'].'-'.$info['d'];
|
$data = $info['YYYY'].'-'.$info['m'].'-'.$info['d'];
|
||||||
$ora = $info['H'].':'.$info['i'].':'.$info['s'];
|
$ora = $info['H'].':'.$info['i'].':'.$info['s'];
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
|
|
@ -8,23 +8,11 @@
|
||||||
class Backup
|
class Backup
|
||||||
{
|
{
|
||||||
/** @var string Pattern per i nomi dei backup */
|
/** @var string Pattern per i nomi dei backup */
|
||||||
const PATTERN = 'OSM backup Y-m-d H_i_s';
|
const PATTERN = 'OSM backup YYYY-m-d H_i_s';
|
||||||
|
|
||||||
/** @var array Elenco delle varabili da sostituire nel pattern */
|
|
||||||
protected static $replaces = [
|
|
||||||
'Y' => [
|
|
||||||
'regex' => '([0-9]{4})',
|
|
||||||
],
|
|
||||||
'm' => [],
|
|
||||||
'd' => [],
|
|
||||||
'H' => [],
|
|
||||||
'i' => [],
|
|
||||||
's' => [],
|
|
||||||
];
|
|
||||||
|
|
||||||
/** @var array Elenco delle varabili che identificano i backup giornalieri */
|
/** @var array Elenco delle varabili che identificano i backup giornalieri */
|
||||||
protected static $daily_replaces = [
|
protected static $daily_replaces = [
|
||||||
'Y', 'm', 'd',
|
'YYYY', 'm', 'd',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,19 +85,7 @@ class Backup
|
||||||
*/
|
*/
|
||||||
protected static function getReplaces()
|
protected static function getReplaces()
|
||||||
{
|
{
|
||||||
$replaces = self::$replaces;
|
return Util\Generator::getReplaces();
|
||||||
|
|
||||||
foreach ($replaces as $key => $value) {
|
|
||||||
if (!isset($replaces[$key]['value'])) {
|
|
||||||
$replaces[$key]['value'] = date($key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($replaces[$key]['regex'])) {
|
|
||||||
$replaces[$key]['regex'] = '(.{'.strlen($replaces[$key]['value']).'})';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $replaces;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -119,13 +95,7 @@ class Backup
|
||||||
*/
|
*/
|
||||||
protected static function getNextName()
|
protected static function getNextName()
|
||||||
{
|
{
|
||||||
// Costruzione del pattern
|
return Util\Generator::generate(self::PATTERN);
|
||||||
$replaces = self::getReplaces();
|
|
||||||
$values = array_column($replaces, 'value');
|
|
||||||
|
|
||||||
$pattern = str_replace(array_keys($replaces), array_values($values), self::PATTERN);
|
|
||||||
|
|
||||||
return $pattern;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,23 +105,7 @@ class Backup
|
||||||
*/
|
*/
|
||||||
public static function readName($string)
|
public static function readName($string)
|
||||||
{
|
{
|
||||||
// Costruzione del pattern
|
return Util\Generator::read(self::PATTERN, basename($string));
|
||||||
$replaces = self::getReplaces();
|
|
||||||
$values = array_column($replaces, 'regex');
|
|
||||||
|
|
||||||
$pattern = str_replace(array_keys($replaces), array_values($values), self::PATTERN);
|
|
||||||
|
|
||||||
// Individuazione dei valori
|
|
||||||
preg_match('/^'.$pattern.'/', basename($string), $m);
|
|
||||||
|
|
||||||
$keys = array_keys($replaces);
|
|
||||||
|
|
||||||
$results = [];
|
|
||||||
for ($i = 1; $i < count($m); ++$i) {
|
|
||||||
$results[$keys[$i - 1]] = $m[$i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe dedicata alla gestione e all'interpretazione delle stringhe personalizzate.
|
||||||
|
*
|
||||||
|
* @since 2.3
|
||||||
|
*/
|
||||||
|
class Generator
|
||||||
|
{
|
||||||
|
/** @var array Elenco delle varabili da sostituire nel pattern */
|
||||||
|
protected static $replaces = [
|
||||||
|
'YYYY' => [
|
||||||
|
'date' => 'Y',
|
||||||
|
],
|
||||||
|
'yy' => [
|
||||||
|
'date' => 'y',
|
||||||
|
],
|
||||||
|
'm' => [
|
||||||
|
'date' => 'm',
|
||||||
|
],
|
||||||
|
'd' => [
|
||||||
|
'date' => 'd',
|
||||||
|
],
|
||||||
|
'H' => [
|
||||||
|
'date' => 'H',
|
||||||
|
],
|
||||||
|
'i' => [
|
||||||
|
'date' => 'i',
|
||||||
|
],
|
||||||
|
's' => [
|
||||||
|
'date' => 'd',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Predispone la struttura per il salvataggio dei contenuti INI a partire da una struttura precedente.
|
||||||
|
*
|
||||||
|
* @param string $pattern
|
||||||
|
* @param string $last
|
||||||
|
* @param array|int $quantity
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function generate($pattern, $last = null, $quantity = 1)
|
||||||
|
{
|
||||||
|
// Costruzione del pattern
|
||||||
|
$replaces = self::getReplaces();
|
||||||
|
$regexs = array_column($replaces, 'regex');
|
||||||
|
|
||||||
|
$result = self::complete($pattern);
|
||||||
|
$length = substr_count($result, '#');
|
||||||
|
|
||||||
|
// Individuazione dei valori precedenti
|
||||||
|
$previous = self::read($pattern, $last);
|
||||||
|
|
||||||
|
$number = 1;
|
||||||
|
if (isset($previous['number'])) {
|
||||||
|
$number = intval($previous['number']) + $quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = preg_replace('/#{1,}/', str_pad($number, $length, '0', STR_PAD_LEFT), $result);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Completa un determinato pattern con le informazioni di base.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function complete($pattern)
|
||||||
|
{
|
||||||
|
// Costruzione del pattern
|
||||||
|
$replaces = self::getReplaces();
|
||||||
|
$values = array_column($replaces, 'value');
|
||||||
|
|
||||||
|
$result = str_replace(array_keys($replaces), array_values($values), $pattern);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce i valori utilizzati sul pattern.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function read($pattern, $string)
|
||||||
|
{
|
||||||
|
// Costruzione del pattern
|
||||||
|
$replaces = self::getReplaces();
|
||||||
|
|
||||||
|
$replaces['#'] = [
|
||||||
|
'regex' => '(?<number>[0-9]+)',
|
||||||
|
];
|
||||||
|
|
||||||
|
$values = array_column($replaces, 'regex');
|
||||||
|
|
||||||
|
$pattern = preg_replace('/#{1,}/', '#', $pattern);
|
||||||
|
$pattern = preg_quote($pattern, '/');
|
||||||
|
$pattern = str_replace(array_keys($replaces), array_values($values), $pattern);
|
||||||
|
|
||||||
|
// Individuazione dei valori
|
||||||
|
preg_match('/^'.$pattern.'/', $string, $m);
|
||||||
|
|
||||||
|
return array_filter($m, 'is_string', ARRAY_FILTER_USE_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce l'elenco delle variabili da sostituire normalizzato per l'utilizzo.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getReplaces()
|
||||||
|
{
|
||||||
|
$replaces = self::$replaces;
|
||||||
|
|
||||||
|
foreach ($replaces as $key => $value) {
|
||||||
|
if (!isset($replaces[$key]['value'])) {
|
||||||
|
if (isset($replaces[$key]['date'])) {
|
||||||
|
$replaces[$key]['value'] = date($replaces[$key]['date']);
|
||||||
|
} else {
|
||||||
|
$replaces[$key]['value'] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($replaces[$key]['regex'])) {
|
||||||
|
$replaces[$key]['regex'] = '(?<'.preg_quote($key).'>.{'.strlen($replaces[$key]['value']).'})';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $replaces;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue