61 lines
1.8 KiB
PHP
61 lines
1.8 KiB
PHP
<?php
|
|
namespace nur\sery\web;
|
|
|
|
use nur\sery\cl;
|
|
|
|
class uploads {
|
|
private static function parse_files(array &$files, string $pkey, array $values, string $lastkey): void {
|
|
foreach ($values as $key => $value) {
|
|
if (is_array($value)) {
|
|
self::parse_files($files, "$pkey.$key", $value, $lastkey);
|
|
} else {
|
|
cl::pset($files, "$pkey.$key.$lastkey", $value);
|
|
}
|
|
}
|
|
}
|
|
|
|
/** @var array */
|
|
private static $_files;
|
|
|
|
static function _files(?array $_files=null): ?array {
|
|
if (self::$_files === null) {
|
|
$files = [];
|
|
if ($_files === null) $_files = $_FILES;
|
|
foreach ($_files as $pkey => $values) {
|
|
$name = $values["name"] ?? null;
|
|
$type = $values["type"] ?? null;
|
|
$error = $values["error"] ?? null;
|
|
if (is_scalar($name) && is_scalar($type) && is_scalar($error)) {
|
|
$files[$pkey] = $values;
|
|
} else {
|
|
self::parse_files($files, $pkey, $values["name"], "name");
|
|
self::parse_files($files, $pkey, $values["type"], "type");
|
|
self::parse_files($files, $pkey, $values["tmp_name"], "tmp_name");
|
|
self::parse_files($files, $pkey, $values["error"], "error");
|
|
self::parse_files($files, $pkey, $values["size"], "size");
|
|
$full_path = $values["full_path"] ?? null;
|
|
if ($full_path !== null) {
|
|
self::parse_files($files, $pkey, $full_path, "full_path");
|
|
}
|
|
}
|
|
}
|
|
self::$_files = $files;
|
|
}
|
|
return self::$_files;
|
|
}
|
|
|
|
static function get(string $pkey, bool $required=true): Upload {
|
|
$_files = self::_files();
|
|
return new Upload(cl::pget($_files, $pkey));
|
|
}
|
|
|
|
static function all(string $pkey) {
|
|
$_files = self::_files();
|
|
$uploads = [];
|
|
foreach (cl::pget($_files, $pkey) as $file) {
|
|
$uploads[] = new Upload($file);
|
|
}
|
|
return $uploads;
|
|
}
|
|
}
|