95 lines
2.0 KiB
PHP
95 lines
2.0 KiB
PHP
|
<?php
|
||
|
namespace taskman;
|
||
|
use Exception;
|
||
|
|
||
|
class ConfigScanResult
|
||
|
{
|
||
|
/*var array<string, string[]>*/
|
||
|
public array $base_dir2files = array();
|
||
|
|
||
|
function isEmpty() : bool
|
||
|
{
|
||
|
return empty($this->base_dir2files);
|
||
|
}
|
||
|
|
||
|
function count() : int
|
||
|
{
|
||
|
$total = 0;
|
||
|
foreach($this->base_dir2files as $base_dir => $files)
|
||
|
$total += count($files);
|
||
|
return $total;
|
||
|
}
|
||
|
|
||
|
function apply(callable $fn)
|
||
|
{
|
||
|
foreach($this->base_dir2files as $base_dir => $files)
|
||
|
$this->base_dir2files[$base_dir] = $fn($base_dir, $files);
|
||
|
}
|
||
|
|
||
|
function filter(callable $filter)
|
||
|
{
|
||
|
foreach($this->base_dir2files as $base_dir => $files)
|
||
|
$this->base_dir2files[$base_dir] = array_filter($files, $filter);
|
||
|
}
|
||
|
|
||
|
function forEachFile(callable $fn)
|
||
|
{
|
||
|
foreach($this->base_dir2files as $base_dir => $files)
|
||
|
{
|
||
|
foreach($files as $file)
|
||
|
$fn($base_dir, $file);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function add(string $base_dir, string $file)
|
||
|
{
|
||
|
if(!isset($this->base_dir2files[$base_dir]))
|
||
|
$this->base_dir2files[$base_dir] = array();
|
||
|
|
||
|
$this->base_dir2files[$base_dir][] = $file;
|
||
|
}
|
||
|
|
||
|
//returns [[base_dir, file1], [base_dir, file2], ...]
|
||
|
function getFlatArray() : array
|
||
|
{
|
||
|
$flat = [];
|
||
|
foreach($this->base_dir2files as $base_dir => $files)
|
||
|
{
|
||
|
foreach($files as $file)
|
||
|
$flat[] = [$base_dir, $file];
|
||
|
}
|
||
|
return $flat;
|
||
|
}
|
||
|
|
||
|
function getAllFiles() : array
|
||
|
{
|
||
|
$all_files = [];
|
||
|
foreach($this->base_dir2files as $base_dir => $files)
|
||
|
$all_files = array_merge($all_files, $files);
|
||
|
|
||
|
return $all_files;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function config_scan_files(
|
||
|
array $base_dirs,
|
||
|
string $ext_filter = '.conf.js',
|
||
|
bool $verbose = false
|
||
|
) : ConfigScanResult
|
||
|
{
|
||
|
$t = microtime(true);
|
||
|
|
||
|
$result = new ConfigScanResult();
|
||
|
|
||
|
foreach($base_dirs as $base_dir)
|
||
|
{
|
||
|
$result->base_dir2files[$base_dir] =
|
||
|
scan_files_rec(array($base_dir), array($ext_filter));
|
||
|
}
|
||
|
|
||
|
if($verbose)
|
||
|
echo "[CFG] File scan: {$result->count()}, done " . round(microtime(true) - $t,2) . " sec.\n";
|
||
|
|
||
|
return $result;
|
||
|
}
|