66 lines
1.9 KiB
PHP
66 lines
1.9 KiB
PHP
<?php
|
|
namespace nur\v\bs3\fo;
|
|
|
|
use nur\b\params\Tparametrable;
|
|
use nur\v\v;
|
|
|
|
class ControlFile extends ControlVisualInput {
|
|
use Tparametrable;
|
|
|
|
const INPUT_TYPE = "file";
|
|
|
|
const PARAMETRABLE_PARAMS_SCHEMA = [
|
|
"accept" => ["?string", ".pdf,image/*", "types MIME acceptés"],
|
|
"btn_class" => ["?string", "btn-default", "Classe du bouton"],
|
|
"btn_style" => ["?string", null, "Style du bouton"],
|
|
"btn_label" => ["content", null, "Texte du bouton"],
|
|
"multiple" => ["?bool", null, "est-il possible de sélectionner plusieurs fichiers?"],
|
|
];
|
|
|
|
function __construct(Form $form, ?array $params=null) {
|
|
parent::__construct($form, $params);
|
|
$this->ppPlaceholder = null;
|
|
}
|
|
|
|
function pp_setAccept(?string $accept) {
|
|
$this->ppAttrs["accept"] = $accept;
|
|
}
|
|
|
|
/** @var ?string */
|
|
protected $ppBtnClass;
|
|
|
|
/** @var string|array */
|
|
protected $ppBtnLabel;
|
|
|
|
/** @var ?bool */
|
|
protected $ppMultiple;
|
|
|
|
function buildControl(): array {
|
|
$name = $this->ppName;
|
|
$value = $this->ppValue;
|
|
$multiple = $this->ppMultiple;
|
|
$defaultLabel = $multiple ? "Sélectionner des fichiers" : "Sélectionner un fichier";
|
|
$btnLabel = $this->ppBtnLabel ?? $defaultLabel;
|
|
return v::tag("label", [
|
|
"class" => ["btn btn-file", $this->ppBtnClass],
|
|
v::tag1("input", [
|
|
"type" => static::INPUT_TYPE,
|
|
"id" => $this->ppId,
|
|
"name" => $name,
|
|
"value" => $value,
|
|
"readonly" => $this->ppReadonly? "readonly": false,
|
|
"disabled" => $this->ppDisabled? "disabled": false,
|
|
"required" => $this->ppRequired? "required": false,
|
|
"multiple" => $multiple ? "multiple": false,
|
|
"style" => "display: inline; visibility: hidden; width: 0px; height: 0px; vertical-align: middle;",
|
|
$this->ppAttrs,
|
|
]),
|
|
v::span([
|
|
"class" => ["file-label", $this->ppClass],
|
|
"style" => $this->ppStyle,
|
|
$btnLabel,
|
|
]),
|
|
]);
|
|
}
|
|
}
|