172 lines
4.6 KiB
PHP
172 lines
4.6 KiB
PHP
|
<?php
|
||
|
namespace nur\v\bs3;
|
||
|
|
||
|
use nur\A;
|
||
|
use nur\b\IllegalAccessException;
|
||
|
use nur\data\types\md_utils;
|
||
|
use nur\v\bs3\fo\Form;
|
||
|
use nur\v\bs3\fo\FormManager;
|
||
|
use nur\v\model\IFormManager;
|
||
|
use nur\v\v;
|
||
|
|
||
|
class Bs3FormManager implements IFormManager {
|
||
|
function __construct($options=null, ?array $schema=null) {
|
||
|
$this->fm = new FormManager();
|
||
|
$this->resetManager($options, $schema);
|
||
|
}
|
||
|
|
||
|
/** @var FormManager */
|
||
|
protected $fm;
|
||
|
|
||
|
const MANAGER_OPTIONS_SCHEMA = [
|
||
|
"type" => [null, FormManager::TYPE_BASIC, "type de formulaire par défaut"],
|
||
|
];
|
||
|
private static $manager_options_md;
|
||
|
|
||
|
function resetManager($options=null, ?array $schema=null): void {
|
||
|
md_utils::ensure_md(self::$manager_options_md
|
||
|
, self::MANAGER_OPTIONS_SCHEMA)->ensureSchema($options);
|
||
|
$this->fm->setInNavbar(false);
|
||
|
$type = A::getdel($options, "type");
|
||
|
$this->inForm = false;
|
||
|
$this->type = $type;
|
||
|
$this->form = null;
|
||
|
}
|
||
|
|
||
|
function push($options=null, ?array $schema=null): void {
|
||
|
throw IllegalAccessException::not_implemented();
|
||
|
}
|
||
|
|
||
|
function pop(): void {
|
||
|
throw IllegalAccessException::not_implemented();
|
||
|
}
|
||
|
|
||
|
/** @var bool */
|
||
|
protected $inForm;
|
||
|
|
||
|
/** @var ?string */
|
||
|
protected $type;
|
||
|
|
||
|
/** @var Form */
|
||
|
protected $form;
|
||
|
|
||
|
function started(): bool {
|
||
|
return $this->inForm;
|
||
|
}
|
||
|
|
||
|
function start($options=null, ?array $schema=null): array {
|
||
|
$vs = [];
|
||
|
if ($this->inForm) $vs[] = $this->form->getEnd();
|
||
|
md_utils::ensure_md(self::$manager_options_md
|
||
|
, self::MANAGER_OPTIONS_SCHEMA)->ensureSchema($options);
|
||
|
$type = A::getdel($options, "type");
|
||
|
if ($type === null) $type = $this->type;
|
||
|
$this->form = $this->fm->get($type, $options);
|
||
|
$vs[] = $this->form->getStart();
|
||
|
$this->inForm = true;
|
||
|
return $vs;
|
||
|
}
|
||
|
|
||
|
function end(): array {
|
||
|
if (!$this->inForm) return [];
|
||
|
$vs = [];
|
||
|
$vs[] = $this->form->getEnd();
|
||
|
$this->inForm = false;
|
||
|
return $vs;
|
||
|
}
|
||
|
|
||
|
function section($options=null): array {
|
||
|
return v::h2($options); #XXX
|
||
|
}
|
||
|
|
||
|
function endSection(): array {
|
||
|
return []; #XXX
|
||
|
}
|
||
|
|
||
|
function group($options=null): array {
|
||
|
return []; #XXX
|
||
|
}
|
||
|
|
||
|
function endGroup(): array {
|
||
|
return []; #XXX
|
||
|
}
|
||
|
|
||
|
function fixed($label, string $name, $value, ?array $options=null): array {
|
||
|
return [$this->form->fixed($label, $name, $value, $options)];
|
||
|
}
|
||
|
|
||
|
function hidden(string $name, $value, ?array $options=null): array {
|
||
|
return [$this->form->hidden($name, $value, $options)];
|
||
|
}
|
||
|
|
||
|
function hiddens(array $values, string ...$names): array {
|
||
|
if (!$names) $names = null;
|
||
|
return $this->form->hiddens($values, $names);
|
||
|
}
|
||
|
|
||
|
function text($label, string $name, $value, ?array $options=null): array {
|
||
|
return [$this->form->text($label, $name, $value, $options)];
|
||
|
}
|
||
|
|
||
|
function texts($label, array $values, string ...$names): array {
|
||
|
$vs = [];
|
||
|
if (!$names) $names = array_keys($values);
|
||
|
foreach ($names as $name) {
|
||
|
$vs[] = $this->form->text($label, $name, $values[$name]);
|
||
|
}
|
||
|
return $vs;
|
||
|
}
|
||
|
|
||
|
function password($label, string $name, $value, ?array $options=null): array {
|
||
|
return [$this->form->password($label, $name, $value, $options)];
|
||
|
}
|
||
|
|
||
|
function select($label, string $name, $value, ?array $options=null): array {
|
||
|
return [$this->form->select($label, $name, $value, $options)];
|
||
|
}
|
||
|
|
||
|
function checkbox($text, string $name, $value, ?bool $checked=null, ?array $options=null): array {
|
||
|
return [$this->form->checkbox($text, $name, $value, $checked, $options)];
|
||
|
}
|
||
|
|
||
|
function checkboxes($label, string $name, $values, ?array $options=null): array {
|
||
|
throw IllegalAccessException::not_implemented();
|
||
|
}
|
||
|
|
||
|
function radiobutton($text, string $name, $value, ?bool $checked=null, ?array $options=null): array {
|
||
|
return [$this->form->radiobutton($text, $name, $value, $checked, $options)];
|
||
|
}
|
||
|
|
||
|
function radiobuttons($label, string $name, $value, ?array $options): array {
|
||
|
throw IllegalAccessException::not_implemented();
|
||
|
}
|
||
|
|
||
|
function textarea($label, string $name, $value, ?array $options=null): array {
|
||
|
return [$this->form->textarea($label, $name, $value, $options)];
|
||
|
}
|
||
|
|
||
|
function file($label, string $name, ?array $options=null): array {
|
||
|
return [$this->form->file($label, $name, $options)];
|
||
|
}
|
||
|
|
||
|
function submit($options=null): array {
|
||
|
if (is_array($options)) {
|
||
|
$submit = null;
|
||
|
} else {
|
||
|
$submit = $options;
|
||
|
$options = null;
|
||
|
}
|
||
|
return [$this->form->submit($submit, $options)];
|
||
|
}
|
||
|
|
||
|
function reset($options=null): array {
|
||
|
if (is_array($options)) {
|
||
|
$submit = null;
|
||
|
} else {
|
||
|
$submit = $options;
|
||
|
$options = null;
|
||
|
}
|
||
|
return [$this->form->reset($submit, $options)];
|
||
|
}
|
||
|
}
|