modifs.mineures sans commentaires
This commit is contained in:
parent
cb6ae7d11e
commit
18562c4152
|
@ -16,12 +16,15 @@ class ControlSelect extends ControlVisual {
|
||||||
"items" => ["?iterable", null, "liste d'éléments à afficher"],
|
"items" => ["?iterable", null, "liste d'éléments à afficher"],
|
||||||
"items_func" => ["?callable", null, "fonction fournissant une liste d'éléments à afficher"],
|
"items_func" => ["?callable", null, "fonction fournissant une liste d'éléments à afficher"],
|
||||||
"item_value_key" => ["?key", null, "clé de la valeur d'un élément"],
|
"item_value_key" => ["?key", null, "clé de la valeur d'un élément"],
|
||||||
|
"item_value_pkey" => ["?key", null, "chemin de clé de la valeur d'un élément"],
|
||||||
"item_value_func" => ["?callable", null, "fonction fournissant la valeur d'un élément"],
|
"item_value_func" => ["?callable", null, "fonction fournissant la valeur d'un élément"],
|
||||||
"item_text_key" => ["?key", null, "clé du libellé d'un élément"],
|
"item_text_key" => ["?key", null, "clé du libellé d'un élément"],
|
||||||
|
"item_text_pkey" => ["?key", null, "chemin de clé du libellé d'un élément"],
|
||||||
"item_text_func" => ["?callable", null, "fonction fournissant le libellé d'un élément"],
|
"item_text_func" => ["?callable", null, "fonction fournissant le libellé d'un élément"],
|
||||||
"no_item_value" => ["?string", null, "valeur si aucun élément n'est sélectionné"],
|
"no_item_value" => ["?string", null, "valeur si aucun élément n'est sélectionné"],
|
||||||
"no_item_text" => ["?content", null, "libellé si aucun élément n'est sélectionné"],
|
"no_item_text" => ["?content", null, "libellé si aucun élément n'est sélectionné"],
|
||||||
"group_key" => ["?key", null, "clé d'une valeur sur laquelle grouper les éléments"],
|
"group_key" => ["?key", null, "clé d'une valeur sur laquelle grouper les éléments"],
|
||||||
|
"group_pkey" => ["?key", null, "chemin de clé d'une valeur sur laquelle grouper les éléments"],
|
||||||
"group_func" => ["?callable", null, "fonction fournissant une valeur sur laquelle grouper les éléments"],
|
"group_func" => ["?callable", null, "fonction fournissant une valeur sur laquelle grouper les éléments"],
|
||||||
"required" => ["?bool", null, "ce champ est-il requis?"],
|
"required" => ["?bool", null, "ce champ est-il requis?"],
|
||||||
"show_required" => ["?bool", null, "faut-il afficher la marque de champ requis?"],
|
"show_required" => ["?bool", null, "faut-il afficher la marque de champ requis?"],
|
||||||
|
@ -46,12 +49,18 @@ class ControlSelect extends ControlVisual {
|
||||||
/** @var string|int|null */
|
/** @var string|int|null */
|
||||||
protected $ppItemValueKey;
|
protected $ppItemValueKey;
|
||||||
|
|
||||||
|
/** @var string|int|null */
|
||||||
|
protected $ppItemValuePkey;
|
||||||
|
|
||||||
/** @var ?callable */
|
/** @var ?callable */
|
||||||
protected $ppItemValueFunc;
|
protected $ppItemValueFunc;
|
||||||
|
|
||||||
/** @var string|int|null */
|
/** @var string|int|null */
|
||||||
protected $ppItemTextKey;
|
protected $ppItemTextKey;
|
||||||
|
|
||||||
|
/** @var string|int|null */
|
||||||
|
protected $ppItemTextPkey;
|
||||||
|
|
||||||
/** @var ?callable */
|
/** @var ?callable */
|
||||||
protected $ppItemTextFunc;
|
protected $ppItemTextFunc;
|
||||||
|
|
||||||
|
@ -64,6 +73,9 @@ class ControlSelect extends ControlVisual {
|
||||||
/** @var string|int|null */
|
/** @var string|int|null */
|
||||||
protected $ppGroupKey;
|
protected $ppGroupKey;
|
||||||
|
|
||||||
|
/** @var string|int|null */
|
||||||
|
protected $ppGroupPkey;
|
||||||
|
|
||||||
/** @var ?callable */
|
/** @var ?callable */
|
||||||
protected $ppGroupFunc;
|
protected $ppGroupFunc;
|
||||||
|
|
||||||
|
@ -81,7 +93,7 @@ class ControlSelect extends ControlVisual {
|
||||||
|
|
||||||
protected function vof(
|
protected function vof(
|
||||||
$value, ?callable $func,
|
$value, ?callable $func,
|
||||||
$item=null, $itemKey=null, ?int $itemIndex=null,
|
$item=null, $itemKey=null, $itemPkey = null, ?int $itemIndex=null,
|
||||||
...$funcArgs) {
|
...$funcArgs) {
|
||||||
if ($value !== null) return $value;
|
if ($value !== null) return $value;
|
||||||
if ($func !== null) {
|
if ($func !== null) {
|
||||||
|
@ -95,16 +107,16 @@ class ControlSelect extends ControlVisual {
|
||||||
$value = A::get($item, $itemKey);
|
$value = A::get($item, $itemKey);
|
||||||
if ($value !== null) return $value;
|
if ($value !== null) return $value;
|
||||||
}
|
}
|
||||||
|
if ($itemPkey !== null) {
|
||||||
|
$value = A::pget($item, $itemPkey);
|
||||||
|
if ($value !== null) return $value;
|
||||||
|
}
|
||||||
if ($itemIndex !== null) {
|
if ($itemIndex !== null) {
|
||||||
$index = 0;
|
$itemKeys = array_keys($item);
|
||||||
foreach ($item as $value) {
|
return $item[$itemKeys[$itemIndex]] ?? null;
|
||||||
if ($index === $itemIndex) return $value;
|
|
||||||
$index++;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $item;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getControl(): array {
|
function getControl(): array {
|
||||||
|
@ -124,11 +136,11 @@ class ControlSelect extends ControlVisual {
|
||||||
}
|
}
|
||||||
$haveGroups = $this->ppGroupKey !== null || $this->ppGroupFunc !== null;
|
$haveGroups = $this->ppGroupKey !== null || $this->ppGroupFunc !== null;
|
||||||
foreach ($items as $key => $item) {
|
foreach ($items as $key => $item) {
|
||||||
$itemValue = $this->vof(null, $this->ppItemValueFunc, $item, $this->ppItemValueKey, 0, $item, $key);
|
$itemValue = $this->vof(null, $this->ppItemValueFunc, $item, $this->ppItemValueKey, $this->ppItemValuePkey, 0, $item, $key);
|
||||||
$itemText = $this->vof(null, $this->ppItemTextFunc, $item, $this->ppItemTextKey, 1, $item, $key);
|
$itemText = $this->vof(null, $this->ppItemTextFunc, $item, $this->ppItemTextKey, $this->ppItemTextPkey, 1, $item, $key);
|
||||||
$itemGroup = null;
|
$itemGroup = null;
|
||||||
if ($haveGroups) {
|
if ($haveGroups) {
|
||||||
$itemGroup = $this->vof(null, $this->ppGroupFunc, $item, $this->ppGroupKey, null, $item, $key);
|
$itemGroup = $this->vof(null, $this->ppGroupFunc, $item, $this->ppGroupKey, $this->ppGroupPkey, null, $item, $key);
|
||||||
}
|
}
|
||||||
if (!$itemText) $itemText = $itemValue;
|
if (!$itemText) $itemText = $itemValue;
|
||||||
$options[] = array(
|
$options[] = array(
|
||||||
|
|
|
@ -18,7 +18,7 @@ class A {
|
||||||
if (is_array($array)) return true;
|
if (is_array($array)) return true;
|
||||||
if ($array instanceof IArrayWrapper) $array = $array->wrappedArray();
|
if ($array instanceof IArrayWrapper) $array = $array->wrappedArray();
|
||||||
if ($array === null || $array === false) $array = [];
|
if ($array === null || $array === false) $array = [];
|
||||||
elseif ($array instanceof Traversable) $array = iterator_to_array($array);
|
elseif ($array instanceof Traversable) $array = cl::all($array);
|
||||||
else $array = [$array];
|
else $array = [$array];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -28,10 +28,10 @@ class A {
|
||||||
* $array n'a pas été modifié (s'il était déjà un array ou s'il valait null).
|
* $array n'a pas été modifié (s'il était déjà un array ou s'il valait null).
|
||||||
*/
|
*/
|
||||||
static final function ensure_narray(&$array): bool {
|
static final function ensure_narray(&$array): bool {
|
||||||
if ($array === null || is_array($array)) return true;
|
|
||||||
if ($array instanceof IArrayWrapper) $array = $array->wrappedArray();
|
if ($array instanceof IArrayWrapper) $array = $array->wrappedArray();
|
||||||
|
if ($array === null || is_array($array)) return true;
|
||||||
if ($array === false) $array = [];
|
if ($array === false) $array = [];
|
||||||
elseif ($array instanceof Traversable) $array = iterator_to_array($array);
|
elseif ($array instanceof Traversable) $array = cl::all($array);
|
||||||
else $array = [$array];
|
else $array = [$array];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
102
src/cl.php
102
src/cl.php
|
@ -12,19 +12,69 @@ use Traversable;
|
||||||
* pour retourner un nouveau tableau
|
* pour retourner un nouveau tableau
|
||||||
*/
|
*/
|
||||||
class cl {
|
class cl {
|
||||||
|
/**
|
||||||
|
* retourner un array avec les éléments retournés par l'itérateur. les clés
|
||||||
|
* numériques sont réordonnées, les clés chaine sont laissées en l'état
|
||||||
|
*/
|
||||||
|
static final function all(?iterable $iterable): array {
|
||||||
|
if ($iterable === null) return [];
|
||||||
|
if (is_array($iterable)) return $iterable;
|
||||||
|
$array = [];
|
||||||
|
foreach ($iterable as $key => $value) {
|
||||||
|
if (is_int($key)) $array[] = $value;
|
||||||
|
else $array[$key] = $value;
|
||||||
|
}
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retourner la première valeur de $array ou $default si le tableau est null
|
||||||
|
* ou vide
|
||||||
|
*/
|
||||||
|
static final function first(?iterable $iterable, $default=null) {
|
||||||
|
if (is_array($iterable)) {
|
||||||
|
return $iterable[array_key_first($iterable)];
|
||||||
|
}
|
||||||
|
if (is_iterable($iterable)) {
|
||||||
|
foreach ($iterable as $value) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retourner la dernière valeur de $array ou $default si le tableau est null
|
||||||
|
* ou vide
|
||||||
|
*/
|
||||||
|
static final function last(?iterable $iterable, $default=null) {
|
||||||
|
if (is_array($iterable)) {
|
||||||
|
return $iterable[array_key_last($iterable)];
|
||||||
|
}
|
||||||
|
$value = $default;
|
||||||
|
if (is_iterable($iterable)) {
|
||||||
|
foreach ($iterable as $value) {
|
||||||
|
# parcourir tout l'iterateur pour avoir le dernier élément
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
/** retourner un array non null à partir de $array */
|
/** retourner un array non null à partir de $array */
|
||||||
static final function with($array): array {
|
static final function with($array): array {
|
||||||
|
if ($array instanceof IArrayWrapper) $array = $array->wrappedArray();
|
||||||
if (is_array($array)) return $array;
|
if (is_array($array)) return $array;
|
||||||
elseif ($array === null || $array === false) return [];
|
elseif ($array === null || $array === false) return [];
|
||||||
elseif ($array instanceof Traversable) return iterator_to_array($array);
|
elseif ($array instanceof Traversable) return self::all($array);
|
||||||
else return [$array];
|
else return [$array];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** retourner un array à partir de $array, ou null */
|
/** retourner un array à partir de $array, ou null */
|
||||||
static final function withn($array): ?array {
|
static final function withn($array): ?array {
|
||||||
|
if ($array instanceof IArrayWrapper) $array = $array->wrappedArray();
|
||||||
if (is_array($array)) return $array;
|
if (is_array($array)) return $array;
|
||||||
elseif ($array === null || $array === false) return null;
|
elseif ($array === null || $array === false) return null;
|
||||||
elseif ($array instanceof Traversable) return iterator_to_array($array);
|
elseif ($array instanceof Traversable) return self::all($array);
|
||||||
else return [$array];
|
else return [$array];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,54 +196,6 @@ class cl {
|
||||||
return $array !== null? array_keys($array): [];
|
return $array !== null? array_keys($array): [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* retourner un array avec les éléments retournés par l'itérateur. les clés
|
|
||||||
* numériques sont réordonnées, les clés chaine sont laissées en l'état
|
|
||||||
*/
|
|
||||||
static final function all(?iterable $iterable): array {
|
|
||||||
if ($iterable === null) return [];
|
|
||||||
if (is_array($iterable)) return $iterable;
|
|
||||||
$array = [];
|
|
||||||
foreach ($iterable as $key => $value) {
|
|
||||||
if (is_int($key)) $array[] = $value;
|
|
||||||
else $array[$key] = $value;
|
|
||||||
}
|
|
||||||
return $array;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* retourner la première valeur de $array ou $default si le tableau est null
|
|
||||||
* ou vide
|
|
||||||
*/
|
|
||||||
static final function first(?iterable $iterable, $default=null) {
|
|
||||||
if (is_array($iterable)) {
|
|
||||||
return $iterable[array_key_first($iterable)];
|
|
||||||
}
|
|
||||||
if (is_iterable($iterable)) {
|
|
||||||
foreach ($iterable as $value) {
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $default;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* retourner la dernière valeur de $array ou $default si le tableau est null
|
|
||||||
* ou vide
|
|
||||||
*/
|
|
||||||
static final function last(?iterable $iterable, $default=null) {
|
|
||||||
if (is_array($iterable)) {
|
|
||||||
return $iterable[array_key_last($iterable)];
|
|
||||||
}
|
|
||||||
$value = $default;
|
|
||||||
if (is_iterable($iterable)) {
|
|
||||||
foreach ($iterable as $value) {
|
|
||||||
# parcourir tout l'iterateur pour avoir le dernier élément
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue