taskman_config/scan.inc.php

95 lines
2.0 KiB
PHP
Raw Permalink Normal View History

<?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)
config_log("File scan: {$result->count()}, done " . round(microtime(true) - $t,2) . " sec.");
return $result;
}