Changeset 42214 in spip-zone


Ignore:
Timestamp:
Nov 11, 2010, 8:38:41 PM (10 years ago)
Author:
eric@…
Message:

Une version alternative pour la recherche des plugins qui fonctionne en utilisant la fonction rechercher_en_base de SPIP
Correction du nom du champ utilisé dans la recherche pour la table spip_paquets

Location:
_plugins_/svp
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/svp/base/svp_declarer.php

    r42139 r42214  
    128128        $tables['plugin']['slogan'] = 4;
    129129        // -- Table spip_paquets
    130         $tables['paquet']['descriptif'] = 2;
     130        $tables['paquet']['description'] = 2;
    131131
    132132        return $tables;
  • _plugins_/svp/formulaires/charger_plugin.html

    r42182 r42214  
    3939                                                                </select>
    4040                                                        </li>
     41                                                        <li class="editer_mode obligatoire[(#ENV{erreurs}|table_valeur{mode}|oui) erreur]">
     42                                                                <label for="mode">Mode</label>
     43                                                                [<span class="erreur_message">(#ENV{erreurs}|table_valeur{mode})</span>]
     44                                                                <select name="mode" id="mode">
     45                                                                        <option value="spip"[ (#ENV{mode}|=={spip}|oui)selected="selected"]>Recherche type SPIP</option>
     46                                                                        <option value="svp"[ (#ENV{mode}|=={svp}|oui)selected="selected"]>Recherche type SVP</option>
     47                                                                </select>
     48                                                        </li>
    4149                                                </ul>
    4250                                        </fieldset>
  • _plugins_/svp/formulaires/charger_plugin.php

    r42182 r42214  
    2121        $categorie = _request('categorie');
    2222        $etat = _request('etat');
     23        $mode = _request('mode');
    2324
    2425        // On recupere la liste des paquets:
     
    2728        // - compatible avec la version SPIP installee sur le site
    2829        // - et n'etant pas deja installes
    29         $plugins = svp_rechercher_plugins($phrase, $categorie, $etat, false, svp_lister_plugins_installes());
     30        if ($mode == 'spip')
     31                $plugins = svp_rechercher_plugins_spip($phrase, $categorie, $etat, false, svp_lister_plugins_installes());
     32        else
     33                $plugins = svp_rechercher_plugins($phrase, $categorie, $etat, false, svp_lister_plugins_installes());
    3034
    3135        // Determination des messages de retour
  • _plugins_/svp/inc/svp_depoter.php

    r42182 r42214  
    567567
    568568// ----------------------- Recherches de plugins ---------------------------------
     569
     570function svp_rechercher_plugins_spip($phrase, $categorie, $etat, $doublons=false, $exclusions=array(), $version='') {
     571
     572        include_spip('inc/rechercher');
     573        $plugins = array();
     574
     575        // On prepare l'utilisation de la recherche en base SPIP en la limitant aux tables spip_plugins
     576        // et spip_paquets
     577        $liste = liste_des_champs();
     578        $tables = array('plugin' => $liste['plugin'], 'paquet' =>$liste['paquet']);
     579        $options = array('jointures' => true, 'score' => true);
     580
     581        // On cherche dans tous les enregistrements de ces tables des correspondances les plugins qui
     582        // correspondent a la phrase recherchee
     583        // -- On obtient une liste d'id de plugins et d'id de paquets
     584        $resultats = recherche_en_base($phrase, $tables, $options);
     585        // -- On convertit les id de plugins en id de paquets
     586        $ids_plugin = array_keys($resultats['plugin']);
     587        $where[] = sql_in('id_plugin', $ids_plugin);
     588        $ids_paquets = sql_allfetsel('id_paquet', 'spip_paquets', $where);
     589        $ids_paquets = array_map('reset', $ids_paquets);
     590        $ids_paquets = array_map('intval', $ids_paquets);
     591        // -- On merge les deux tableaux de paquets sans doublon
     592        $ids_paquets = array_unique(array_merge(array_keys($resultats['paquet']), $ids_paquets));
     593        sort($ids_paquets);
     594
     595        // Maintenant, on continue la recherche en appliquant, sur la liste des id de paquets,
     596        // les filtres complementaires : categorie, etat, exclusions et compatibilite spip
     597        // -- Preparation de la requete
     598        $from = array('spip_plugins AS t1', 'spip_paquets AS t2');
     599        $select = array('t1.nom AS nom', 't1.slogan AS slogan', 't1.prefixe AS prefixe',
     600                                        't2.id_paquet AS id_paquet', 't2.description AS description', 't2.version_spip AS version_spip',
     601                                        't2.auteur AS auteur', 't2.licence AS licence', 't2.etat AS etat',
     602                                        't2.logo AS logo', 't2.version AS version', 't2.id_paquet AS id_paquet');
     603        $where = array('t1.id_plugin=t2.id_plugin');
     604        if ($ids_paquets)
     605                $where[] = sql_in('t2.id_paquet', $ids_paquets);
     606        if (($categorie) AND ($categorie != 'toute_categorie'))
     607                $where[] = 't1.categorie=' . sql_quote($categorie);
     608        if (($etat) AND ($etat != 'tout_etat'))
     609                $where[] = 't2.etat=' . sql_quote($etat);
     610        if ($exclusions)
     611                $where[] = sql_in('t2.id_plugin', $exclusions, 'NOT');
     612
     613        if ($resultats = sql_select($select, $from, $where)) {
     614                while ($paquets = sql_fetch($resultats)) {
     615                        $prefixe = $paquets['prefixe'];
     616                        $version = $paquets['version'];
     617                        $nom = extraire_multi($paquets['nom']);
     618                        $slogan = extraire_multi($paquets['slogan']);
     619                        $description = extraire_multi($paquets['description']);
     620                        if (svp_verifier_compatibilite_spip($paquets['version_spip'])) {
     621                                // Le paquet remplit tous les criteres, on peut le selectionner
     622                                // -- on utilise uniquement la langue du site et on ajoute le score
     623                                $paquets['nom'] = $nom;
     624                                $paquets['slogan'] = $slogan;
     625                                $paquets['description'] = $description;
     626                                $paquets['score'] = $score;
     627                                if ($doublons)
     628                                        // ajout systematique du paquet
     629                                        $plugins[] = $paquets;
     630                                else {
     631                                        // ajout
     632                                        // - si pas encore trouve
     633                                        // - ou si sa version est inferieure (on garde que la derniere version)
     634                                        if (!$plugins[$prefixe]
     635                                        OR ($plugins[$prefixe] AND spip_version_compare($plugins[$prefixe]['version'], $version, '<'))) {
     636                                                $plugins[$prefixe] = $paquets;
     637                                        }
     638                                }
     639                        }
     640                }
     641        }
     642
     643        return $plugins;
     644}
     645
    569646
    570647/**
     
    640717}
    641718
     719
    642720/**
    643721 * Recuperation des id des plugins a exclure car deja installes
Note: See TracChangeset for help on using the changeset viewer.