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.
|
||||
*
|
||||
* @param unknown $filename
|
||||
* @param string $filename
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
|
@ -162,7 +162,7 @@ function create_zip($source, $destination, $ignores = [])
|
|||
/**
|
||||
* Controllo dei file zip e gestione errori.
|
||||
*
|
||||
* @param unknown $zip_file
|
||||
* @param string $zip_file
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @param unknown $filename
|
||||
* @param unknown $dir
|
||||
* @param string $filename
|
||||
* @param string $dir
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
@ -410,9 +410,9 @@ function unique_filename($filename, $dir)
|
|||
/**
|
||||
* Crea le thumbnails di $filename da dentro $dir e le salva in $dir.
|
||||
*
|
||||
* @param unknown $tmp
|
||||
* @param unknown $filename
|
||||
* @param unknown $dir
|
||||
* @param string $tmp
|
||||
* @param string $filename
|
||||
* @param string $dir
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -452,7 +452,7 @@ function create_thumbnails($tmp, $filename, $dir)
|
|||
/**
|
||||
* Ottiene l'indirizzo IP del client.
|
||||
*
|
||||
* @return string|unknown
|
||||
* @return string
|
||||
*/
|
||||
function get_client_ip()
|
||||
{
|
||||
|
|
|
@ -86,7 +86,7 @@ if (file_exists($backup_dir)) {
|
|||
$name = basename($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'];
|
||||
|
||||
echo '
|
||||
|
@ -126,7 +126,7 @@ if (file_exists($backup_dir)) {
|
|||
$name = basename($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'];
|
||||
|
||||
echo '
|
||||
|
|
|
@ -8,23 +8,11 @@
|
|||
class Backup
|
||||
{
|
||||
/** @var string Pattern per i nomi dei backup */
|
||||
const PATTERN = 'OSM backup Y-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' => [],
|
||||
];
|
||||
const PATTERN = 'OSM backup YYYY-m-d H_i_s';
|
||||
|
||||
/** @var array Elenco delle varabili che identificano i backup giornalieri */
|
||||
protected static $daily_replaces = [
|
||||
'Y', 'm', 'd',
|
||||
'YYYY', 'm', 'd',
|
||||
];
|
||||
|
||||
/**
|
||||
|
@ -97,19 +85,7 @@ class Backup
|
|||
*/
|
||||
protected static function getReplaces()
|
||||
{
|
||||
$replaces = self::$replaces;
|
||||
|
||||
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;
|
||||
return Util\Generator::getReplaces();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,13 +95,7 @@ class Backup
|
|||
*/
|
||||
protected static function getNextName()
|
||||
{
|
||||
// Costruzione del pattern
|
||||
$replaces = self::getReplaces();
|
||||
$values = array_column($replaces, 'value');
|
||||
|
||||
$pattern = str_replace(array_keys($replaces), array_values($values), self::PATTERN);
|
||||
|
||||
return $pattern;
|
||||
return Util\Generator::generate(self::PATTERN);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -135,23 +105,7 @@ class Backup
|
|||
*/
|
||||
public static function readName($string)
|
||||
{
|
||||
// Costruzione del pattern
|
||||
$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;
|
||||
return Util\Generator::read(self::PATTERN, basename($string));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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