Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/jobs/plugins/auto/saisies/saisies/ |
<?php /** * Fonctions spécifiques à une saisie * * @package SPIP\Saisies\selection_multiple **/ // Sécurité if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Vérifie que la valeur postée * correspond aux valeurs proposées lors de la config de valeur * @param string $valeur la valeur postée * @param array $description la description de la saisie * @return bool true si valeur ok, false sinon, **/ function selection_multiple_valeurs_acceptables($valeur, $description) { if (!is_array($valeur)) { if ($valeur) { $valeur = explode(' ', $valeur); } else { $valeur = []; } } $data = saisies_aplatir_tableau(saisies_trouver_data($description, true)); $depublie = saisies_normaliser_liste_choix($description['options']['depublie_choix'] ?? ''); // ... sauf si c'était une valeur précédement enregistré en base $ancienne_valeur = $description['options']['ancienne_valeur'] ?? []; if ($ancienne_valeur) {//Potentiellement '' lors de la première soumission du formulaire $depublie = array_diff($depublie, $ancienne_valeur); } $choix_possibles = array_keys($data, true); $choix_possibles = array_diff($choix_possibles, $depublie);// Ce qui a été dépublié n'est pas acceptable if ( isset($valeur['choix_alternatif']) && ($description['options']['choix_alternatif'] ?? '') ) { unset($valeur['choix_alternatif']); } if ( saisies_saisie_est_gelee($description) && isset($description['options']['defaut']) ) { // Si valeur gelée, on vérifie qu'il n'y ni plus ni moins dans ce qui a été postée $defaut = saisies_valeur2tableau($description['options']['defaut']); $intersection = array_intersect($defaut, $valeur); // L'intersection doit avoir le même nombre de valeur que le défaut. S'il a moins, c'est qu'on supprimé des valeurs, ou renommé // L'intersection doit avoir le même nombre de valeur que posté. S'il y en a moins, c'est qu'on a posté de nouvelle valeur // Sinon c'est bon if (count($intersection) != count($defaut)) { return false; } elseif (count($intersection) != count($valeur)) { return false; } else { return true; } } if (isset($description['options']['disable_choix'])) { include_spip('inc/saisies'); $disable_choix = saisies_normaliser_liste_choix($description['options']['disable_choix']); $choix_possibles = array_diff($choix_possibles, $disable_choix); } $diff = array_diff($valeur, $choix_possibles); if (count($diff)) { return false; } return true; }