106 lines
2.8 KiB
PHP
106 lines
2.8 KiB
PHP
<?php
|
|
namespace nur\sery\wip\php\access;
|
|
|
|
use nulib\cl;
|
|
|
|
/**
|
|
* Class FormAccess: accès à une valeur de $_POST puis $_GET, dans cet ordre
|
|
*/
|
|
class FormAccess extends AbstractAccess {
|
|
const ALLOW_EMPTY = false;
|
|
|
|
function __construct($key, ?array $params=null) {
|
|
parent::__construct($params);
|
|
$this->key = $key;
|
|
}
|
|
|
|
/** @var null|int|string|array */
|
|
protected $key;
|
|
|
|
protected function _exists(array $first, ?array $second=null): bool {
|
|
$key = $this->key;
|
|
if ($key === null) return true;
|
|
if (cl::phas($first, $key)) return true;
|
|
return $second !== null && cl::phas($second, $key);
|
|
}
|
|
|
|
function exists(): bool {
|
|
return $this->_exists($_POST, $_GET);
|
|
}
|
|
|
|
protected function _available(array $first, ?array $second=null): bool {
|
|
$key = $this->key;
|
|
if ($key === null) return true;
|
|
if (cl::phas($first, $key)) {
|
|
return $this->allowEmpty || cl::pget($first, $key) !== "";
|
|
} elseif ($second !== null && cl::phas($second, $key)) {
|
|
return $this->allowEmpty || cl::pget($second, $key) !== "";
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function available(): bool {
|
|
return $this->_available($_POST, $_GET);
|
|
}
|
|
|
|
protected function _get($default, array $first, ?array $second=null) {
|
|
$key = $this->key;
|
|
if ($key === null) return cl::merge($first, $second);
|
|
if (cl::phas($first, $key)) {
|
|
$value = cl::pget($first, $key);
|
|
if ($value !== "" || $this->allowEmpty) return $value;
|
|
} elseif ($second !== null && cl::phas($second, $key)) {
|
|
$value = cl::pget($second, $key);
|
|
if ($value !== "" || $this->allowEmpty) return $value;
|
|
}
|
|
return $default;
|
|
}
|
|
|
|
function get($default=null) {
|
|
return $this->_get($default, $_POST, $_GET);
|
|
}
|
|
|
|
function _set($value, array &$first, ?array &$second=null): void {
|
|
$key = $this->key;
|
|
if ($key === null) {
|
|
# interdire la modification de la destination
|
|
return;
|
|
}
|
|
if ($second !== null && !cl::phas($first, $key) && cl::phas($second, $key)) {
|
|
cl::pset($second, $key, $value);
|
|
} else {
|
|
cl::pset($first, $key, $value);
|
|
}
|
|
}
|
|
|
|
function set($value): void {
|
|
$this->_set($value, $_POST, $_GET);
|
|
}
|
|
|
|
function _del(array &$first, ?array &$second=null): void {
|
|
$key = $this->key;
|
|
if ($key === null) {
|
|
# interdire la modification de la destination
|
|
return;
|
|
}
|
|
if ($second !== null && !cl::phas($first, $key) && cl::phas($second, $key)) {
|
|
cl::pdel($second, $key);
|
|
} else {
|
|
cl::pdel($first, $key);
|
|
}
|
|
}
|
|
|
|
function del(): void {
|
|
$this->_del($_POST, $_GET);
|
|
}
|
|
|
|
function addKey($key): self {
|
|
if ($key === null) return $this;
|
|
if ($this->key !== null) $key = cl::merge($this->key, $key);
|
|
return new static($key, [
|
|
"allow_empty" => $this->allowEmpty
|
|
]);
|
|
}
|
|
}
|