Changeset 113605 in spip-zone


Ignore:
Timestamp:
Jan 24, 2019, 8:22:45 PM (3 weeks ago)
Author:
eric@…
Message:

Création d'une API page_noizetier_repertorier sur le modèlme des API types de noisette et noisettes. La petite particularité c'est qu'on peut passer une liste de champs souhaités et pas uniquement un champ ou vide.
On applique cette fonction au formulaire etendre_noisette avant de l'utiliser partout où cela est utile.

Location:
_plugins_/noizetier/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier/trunk/formulaires/etendre_noisette.php

    r113585 r113605  
    3939        // - dont le bloc concerné est bien configurable
    4040        // - pouvant être configurées par l'utilisateur
    41         $select = array('nom', 'page', 'blocs_exclus');
    42         $where = array();
     41        include_spip('inc/noizetier_page');
     42        $informations = array('nom', 'blocs_exclus');
     43        $filtres = array();
    4344        if (!empty($type_noisette['type'])) {
    44                 $where[] = 'type=' . sql_quote($type_noisette['type']);
     45                $filtres['type'] = $type_noisette['type'];
    4546        }
    4647        if (!empty($type_noisette['composition'])) {
    47                 $where[] = 'composition=' . sql_quote($type_noisette['composition']);
     48                $filtres['composition'] = $type_noisette['composition'];
    4849        }
    49         $pages = sql_allfetsel($select, 'spip_noizetier_pages', $where);
     50        $pages = page_noizetier_repertorier($informations, $filtres);
     51
    5052        $valeurs['_pages'] = array();
    5153        if ($pages) {
    52                 foreach ($pages as $_page) {
    53                         if (($_page['page'] != $page_noisette)
     54                foreach ($pages as $_id_page => $_page) {
     55                        if (($_id_page != $page_noisette)
    5456                        and (!in_array($bloc, unserialize($_page['blocs_exclus'])))
    55                         and autoriser('configurerpage', 'noizetier', 0, '', array('page' => $_page['page']))) {
    56                                 $valeurs['_pages'][$_page['page']] = typo($_page['nom']) . " (<em>{$_page['page']}</em>)";
     57                        and autoriser('configurerpage', 'noizetier', 0, '', array('page' => $_id_page))) {
     58                                $valeurs['_pages'][$_id_page] = typo($_page['nom']) . " (<em>{$_id_page}</em>)";
    5759                        }
    5860                }
    5961        }
    6062
    61         if ($valeurs['_pages']) {
    62                 $valeurs['editable'] = true;
    63         } else {
     63        // On désactive le formulaire si aucune page n'est disponible pour la copie et on envoie un message d'erreur.
     64        $valeurs['editable'] = true;
     65        if (!$valeurs['_pages']) {
     66                $valeurs['message_erreur'] = _T('noizetier:erreur_etendre_aucune_page', array('page' => $page_noisette));
    6467                $valeurs['editable'] = false;
    6568        }
  • _plugins_/noizetier/trunk/inc/noizetier_page.php

    r113522 r113605  
    230230}
    231231
     232/**
     233 * Retourne la description complète ou partielle d'une liste de pages explicites, compositions explicite et
     234 * compositions virtuelles filtrées sur une liste de critères.
     235 *
     236 * @api
     237 *
     238 * @param string  $information
     239 *        Information spécifique à retourner ou vide pour retourner toute la description. L'information peut être une
     240 *        chaine correspondant à un champ de la page ou un tableau avec une liste de champs.
     241 * @param array  $filtres
     242 *        Tableau associatif `[champ] = valeur` de critères de filtres sur les descriptions de types de noisette.
     243 *        Le seul opérateur possible est l'égalité.
     244 *
     245 * @return array
     246 *        Tableau des descriptions des pages et compositions trouvées indexé par l'identifiant de la page.
     247 */
     248function page_noizetier_repertorier($information = array(), $filtres = array()) {
     249
     250        // Initialiser la sortie.
     251        $pages = array();
     252
     253        // On initialise la liste des champs de la table des pages
     254        $trouver_table = charger_fonction('trouver_table', 'base');
     255        $table = $trouver_table('spip_noizetier_pages');
     256
     257        // On vérifie les champs à retourner et on calcule le contenu du select.
     258        $champs = array_diff(array_keys($table['field']), array('maj'));
     259        $information_valide = true;
     260        $information_unique = false;
     261        if (!$information) {
     262                $select = $champs;
     263        } else {
     264                if (is_string($information)) {
     265                        $select = array($information);
     266                        $information_unique = true;
     267                } else {
     268                        $select = $information;
     269                }
     270
     271                // On vérifie que les champs sont bien valides.
     272                foreach ($select as $_champ) {
     273                        if (!in_array($_champ, $champs)) {
     274                                $information_valide = false;
     275                                break;
     276                        }
     277                }
     278
     279                // On ajoute toujours l'identifiant page car il sert à l'indexation du tableau de sortie.
     280                if ($information_valide) {
     281                        $select = array_merge($select, array('page'));
     282                }
     283        }
     284
     285        if ($information_valide) {
     286                // On calcule le where à partir des filtres sachant que tous les champs sont des chaines.
     287                $where = array();
     288                if ($filtres) {
     289                        foreach ($filtres as $_champ => $_valeur) {
     290                                $where[] = $_champ . '=' . sql_quote($_valeur);
     291                        }
     292                }
     293
     294                // Chargement des pages et compositions.
     295                $pages = sql_allfetsel($select, 'spip_noizetier_pages', $where);
     296
     297                // On renvoie l'information demandée indexée par page.
     298                if ($information_unique) {
     299                        $pages = array_column($pages, $information, 'page');
     300                } else {
     301                        $pages = array_column($pages, null, 'page');
     302                        if ($information and !in_array('page', $information)) {
     303                                // On supprime le champ 'page' qui n'a pas été demandé
     304                                foreach ($pages as $_id_page => $_page) {
     305                                        unset($pages[$_id_page]['page']);
     306                                }
     307                        }
     308                }
     309        }
     310
     311        return $pages;
     312}
    232313
    233314
  • _plugins_/noizetier/trunk/paquet.xml

    r113585 r113605  
    22        prefix="noizetier"
    33        categorie="maintenance"
    4         version="3.0.77"
     4        version="3.0.78"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.