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)];
 | 
						|
  }
 | 
						|
}
 |