source: spip-zone/_plugins_/noizetier_layout/trunk/saisies/medias_checkbox.php @ 118189

Last change on this file since 118189 was 118189, checked in by Charles Razack, 9 months ago

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

  • Property svn:eol-style set to native
File size: 2.6 KB
Line 
1<?php
2/**
3 * Fonctions spécifiques à une saisie
4 *
5 * @package SPIP\Saisies\checkbox
6 */
7
8
9// Sécurité
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14
15/**
16 * Vérifie que la valeur postée
17 * correspond aux valeurs proposées lors de la config de valeur
18 * @param string $valeur la valeur postée
19 * @param array $description la description de la saisie
20 * @return bool true si valeur ok, false sinon,
21 */
22function medias_checkbox_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;
79}
Note: See TracBrowser for help on using the repository browser.