74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\v\bs3\fo;
 | 
						|
 | 
						|
use nur\b\params\Tparametrable;
 | 
						|
use nur\b\ValueException;
 | 
						|
use nur\v\v;
 | 
						|
 | 
						|
class ControlSubmit extends ControlVisual {
 | 
						|
  use Tparametrable;
 | 
						|
 | 
						|
  /** @var string type de champ input */
 | 
						|
  const INPUT_TYPE = null;
 | 
						|
  const AUTOID = false;
 | 
						|
 | 
						|
  const PARAMETRABLE_PARAMS_SCHEMA = [
 | 
						|
    "submit" => ["?content", null, "libellé du bouton"],
 | 
						|
    "type" => ["?string", "button", "type de submit: button, link"],
 | 
						|
    "href" => "?string", # pour le type link
 | 
						|
    "target" => "?string", # pour le type link
 | 
						|
    "class" => ["?array", "btn-default"],
 | 
						|
    #XXX ajouter type pour contrôler le type de bouton (default, primary, etc.)
 | 
						|
  ];
 | 
						|
 | 
						|
  /** @var array|string */
 | 
						|
  protected $ppSubmit;
 | 
						|
 | 
						|
  protected $tag, $tagAttrs;
 | 
						|
 | 
						|
  function pp_setType(?string $type="button"): void {
 | 
						|
    switch ($type) {
 | 
						|
    case "link":
 | 
						|
    case "a":
 | 
						|
      $this->tag = "a";
 | 
						|
      $this->tagAttrs = null;
 | 
						|
      break;
 | 
						|
    case "button":
 | 
						|
    case "submit":
 | 
						|
    case "b":
 | 
						|
      $this->tag = "button";
 | 
						|
      $this->tagAttrs = ["type" => "submit"];
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      throw ValueException::invalid_value($type, "submit type");
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /** @var ?string */
 | 
						|
  protected $ppHref;
 | 
						|
 | 
						|
  /** @var ?string */
 | 
						|
  protected $ppTarget;
 | 
						|
 | 
						|
  function getLayout(array $control): array {
 | 
						|
    return $this->getFgsLayout($control, true);
 | 
						|
  }
 | 
						|
 | 
						|
  function getControl(): array {
 | 
						|
    $control = v::tag($this->tag, [
 | 
						|
      $this->tagAttrs,
 | 
						|
      "id" => $this->ppId,
 | 
						|
      "name" => $this->ppName,
 | 
						|
      "value" => $this->ppValue,
 | 
						|
      "href" => $this->ppHref,
 | 
						|
      "target" => $this->ppTarget,
 | 
						|
      "class" => ["btn", $this->ppClass],
 | 
						|
      "style" => $this->ppStyle,
 | 
						|
      $this->ppAttrs,
 | 
						|
      q($this->ppSubmit),
 | 
						|
    ]);
 | 
						|
    if ($this->ppNaked) return $control;
 | 
						|
    else return $this->getLayout($control);
 | 
						|
  }
 | 
						|
}
 |