Changeset 118189 in spip-zone


Ignore:
Timestamp:
Oct 17, 2019, 11:31:10 PM (5 weeks ago)
Author:
Charles Razack
Message:

Saisies : pour la vérification des valeurs acceptables, prendre en compte l'option , qui ajoute des valeurs possibles aux datas.

Location:
_plugins_/noizetier_layout/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier_layout/trunk

    • Property subgit:lock:a9a242b1e7b5b7eb008acaa911e0ec9118c48857 deleted
    • Property subgit:lock:225580721580a21740a8afb4161b391682a5bcd4 set to 2019-10-18T01:33:52.257
  • _plugins_/noizetier_layout/trunk/saisies/medias_checkbox.php

    r118170 r118189  
    11<?php
    2 
    32/**
    43 * Fonctions spécifiques à une saisie
    54 *
    65 * @package SPIP\Saisies\checkbox
    7 **/
     6 */
    87
    98
     
    2221 */
    2322function medias_checkbox_valeurs_acceptables($valeur, $description) {
    24         include_spip('saisies/selection_multiple');
    25         return selection_multiple_valeurs_acceptables($valeur, $description);
     23
     24        $acceptable = true;
     25
     26        if (!is_array($valeur)) {
     27                if ($valeur) {
     28                        $valeur = explode(' ', $valeur);
     29                } else {
     30                        $valeur = array();
     31                }
     32        } else {
     33                $valeur = array_values($valeur);
     34        }
     35        if (isset($valeur['choix_alternatif']) and isset($description['options']['choix_alternatif']) and $description['options']['choix_alternatif'] == 'on') {
     36                unset ($valeur['choix_alternatif']);
     37        }
     38        if (saisies_verifier_gel_saisie($description) and isset($description['options']['defaut'])) {
     39                // Si valeur gelée, on vérifie qu'il n'y ni plus ni moins dans ce qui a été postée
     40                $defaut = saisies_valeur2tableau($description['options']['defaut']);
     41                $intersection = array_intersect($defaut, $valeur);
     42                // 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é
     43                // 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
     44                // Sinon c'est bon
     45                if (count($intersection) != count($defaut)) {
     46                        $acceptable = false;
     47                } elseif (count($intersection) != count($valeur)) {
     48                        $acceptable = false;
     49                } else {
     50                        $acceptable = true;
     51                }
     52        } else {
     53                // A-t-on essayé des poster des valeurs supplémentaires?
     54                // Ajouter les variantes médias aux datas
     55                $data = saisies_aplatir_tableau(saisies_trouver_data($description, true));
     56                if (!empty($description['options']['medias'])) {
     57                        include_spip('inc/noizetier_layout');
     58                        $medias = array_filter(array_keys(noizetier_layout_decrire_grille('medias')));
     59                        foreach ($data as $classe => $label) {
     60                                foreach ($medias as $media) {
     61                                        $classe_media = noizetier_layout_creer_classe_media($classe, $media);
     62                                        $data[$classe_media] = $label;
     63                                }
     64                        }
     65                }
     66                $choix_possibles = array_keys($data, true);
     67                if (isset($description['options']['disable_choix'])) {
     68                        $disable_choix = explode(',', $description['options']['disable_choix']);
     69                        $choix_possibles = array_diff($choix_possibles, $disable_choix);
     70                }
     71                $diff = array_diff($valeur, $choix_possibles);
     72                if (count($diff)) {
     73                        $acceptable = false;
     74                        // var_dump($valeur);
     75                }
     76        }
     77
     78        return $acceptable;
    2679}
  • _plugins_/noizetier_layout/trunk/saisies/medias_radio.php

    r118170 r118189  
    11<?php
    2 
    32/**
    43 * Fonctions spécifiques à une saisie
    54 *
    65 * @package SPIP\Saisies\checkbox
    7 **/
     6 */
    87
    98
     
    2221 */
    2322function medias_radio_valeurs_acceptables($valeur, $description) {
    24         include_spip('saisies/selection');
    25         return selection_valeurs_acceptables($valeur, $description);
     23        include_spip('saisies/medias_selection');
     24        return medias_selection_valeurs_acceptables($valeur, $description);
    2625}
    27 
  • _plugins_/noizetier_layout/trunk/saisies/medias_selection.php

    r118170 r118189  
    11<?php
    2 
    32/**
    43 * Fonctions spécifiques à une saisie
    54 *
    65 * @package SPIP\Saisies\checkbox
    7 **/
     6 */
    87
    98
     
    1716 * Vérifie que la valeur postée
    1817 * correspond aux valeurs proposées lors de la config de valeur
    19  * @param string $valeur la valeur postée
     18 * @param string|array $valeur la valeur postée
    2019 * @param array $description la description de la saisie
    2120 * @return bool true si valeur ok, false sinon,
    2221 */
    2322function medias_selection_valeurs_acceptables($valeur, $description) {
    24         include_spip('saisies/selection');
    25         return selection_valeurs_acceptables($valeur, $description);
     23
     24        $acceptable = false;
     25        $options = $description['options'];
     26
     27        // La valeur peut être un tableau avec les valeurs pour chaque média.
     28        $valeurs = is_array($valeur) ? array_filter($valeur) : array($valeur);
     29
     30        foreach ($valeurs as $k => $valeur) {
     31                if ($valeur == '' and !isset($options['obligatoire'])) {
     32                        $acceptable = true;
     33                }
     34                if (saisies_verifier_gel_saisie($description) and isset($options['defaut'])) {
     35                        $acceptable = ($valeur == $options['defaut']);
     36                } else {
     37                        $data = saisies_trouver_data($description, true);
     38                        $data = saisies_aplatir_tableau($data);
     39                        $data = array_keys($data);
     40                        // Ajouter les variantes médias aux datas
     41                        if (!empty($description['options']['medias'])) {
     42                                include_spip('inc/noizetier_layout');
     43                                $medias = array_filter(array_keys(noizetier_layout_decrire_grille('medias')));
     44                                foreach ($data as $classe) {
     45                                        foreach ($medias as $media) {
     46                                                $data[] = noizetier_layout_creer_classe_media($classe, $media);
     47                                        }
     48                                }
     49                        }
     50                        if (isset($options['disable_choix'])) {
     51                                $disable_choix = explode(',', $options['disable_choix']);
     52                                $data = array_diff($data, $disable_choix);
     53                        }
     54                        $acceptable = (in_array($valeur, $data));
     55                }
     56                if (!$acceptable) {
     57                        break;
     58                }
     59        }
     60
     61        return $acceptable;
    2662}
Note: See TracChangeset for help on using the changeset viewer.