Changeset 115681 in spip-zone


Ignore:
Timestamp:
Jun 15, 2019, 7:09:13 PM (5 months ago)
Author:
eric@…
Message:

Généralisation de la gestion des filtres

Location:
_plugins_/svp_api/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/svp_api/trunk/http/svp.php

    r115585 r115681  
    103103
    104104                                // -- on construit le contenu de la collection.
    105                                 $contenu['donnees'] = $collectionner($contenu['requete']['filtres']);
     105                                $contenu['donnees'] = $collectionner($contenu['requete']['filtres'], $configuration);
    106106                        }
    107107                }
  • _plugins_/svp_api/trunk/svpapi/svpapi.php

    r115588 r115681  
    2222 * @param array $filtres
    2323 *      Tableau des critères de filtrage additionnels à appliquer au select.
     24 * @param array $configuration
     25 *      Configuration de la collection plugins utile pour savoir quelle fonction appeler pour construire chaque filtre.
    2426 *
    2527 * @return array
     
    2729 *      Les champs de type id ou maj ne sont pas renvoyés.
    2830 */
    29 function plugins_collectionner($filtres) {
     31function plugins_collectionner($filtres, $configuration) {
    3032
    3133        // Initialisation de la collection
     
    4446        // -- Initialisation du where avec les conditions sur la table des dépots.
    4547        $where = array('spip_depots_plugins.id_depot>0', 'spip_depots_plugins.id_plugin=spip_plugins.id_plugin');
    46         // -- Si il y a des critères additionnels on complète le where en conséquence.
     48        // -- Si il y a des critères additionnels on complète le where en conséquence en fonction de la configuration.
    4749        if ($filtres) {
     50                // Extraire la configuration des critères
     51                $criteres = array_column($configuration['filtres'], null, 'critere');
    4852                foreach ($filtres as $_critere => $_valeur) {
    4953                        if ($_critere == 'compatible_spip') {
     
    5155                                $where[] = $filtrer($_valeur, 'spip_plugins', '>');
    5256                        } else {
    53                                 $where[] = "spip_plugins.${_critere}=" . sql_quote($_valeur);
     57                                // On regarde si il y une fonction particulière permettant le calcul du critère ou si celui-ci
     58                                // est calculé de façon standard.
     59                                $module = !empty($criteres[$_critere]['module'])
     60                                        ? $criteres[$_critere]['module']
     61                                        : $configuration['module'];
     62                                include_spip("svpapi/${module}");
     63                                $construire = "plugins_construire_critere_${_critere}";
     64                                if (function_exists($construire)) {
     65                                        $where[] = $construire($_valeur);
     66                                } else {
     67                                        $where[] = "spip_plugins.${_critere}=" . sql_quote($_valeur);
     68                                }
    5469                        }
    5570                }
     
    231246 * @param array $filtres
    232247 *      Tableau des critères additionnels à appliquer au select (non utilisé).
     248 * @param array $configuration
     249 *      Configuration de la collection dépôts utile pour savoir quelle fonction appeler pour construire chaque filtre.
    233250 *
    234251 * @return array
     
    236253 *      Les champs de type id ou maj ne sont pas renvoyés.
    237254 */
    238 function depots_collectionner($filtres) {
     255function depots_collectionner($filtres, $configuration) {
    239256
    240257        // Récupérer la liste des dépôts (filtrée ou pas).
     
    250267        // -- Si il y a des critères additionnels on complète le where en conséquence.
    251268        if ($filtres) {
     269                // Extraire la configuration des critères
     270                $criteres = array_column($configuration['filtres'], null, 'critere');
    252271                foreach ($filtres as $_critere => $_valeur) {
    253                         $where[] = "${_critere}=" . sql_quote($_valeur);
     272                        // On regarde si il y une fonction particulière permettant le calcul du critère ou si celui-ci
     273                        // est calculé de façon standard.
     274                        $module = !empty($criteres[$_critere]['module'])
     275                                ? $criteres[$_critere]['module']
     276                                : $configuration['module'];
     277                        include_spip("svpapi/${module}");
     278                        $construire = "depots_construire_critere_${_critere}";
     279                        if (function_exists($construire)) {
     280                                $where[] = $construire($_valeur);
     281                        } else {
     282                                $where[] = "spip_plugins.${_critere}=" . sql_quote($_valeur);
     283                        }
    254284                }
    255285        }
Note: See TracChangeset for help on using the changeset viewer.