コード例 #1
0
/**
 * Pour une description de plugin donnée (issue de la dtd de paquet.xml),
 * prépare les données à installer en bdd
 *
 * Les données sont parfois sérialisées, parfois compilées
 * pour tenir compte des spécificités de cette DTD et du stockage en bdd.
 *
 * @param array $plugin
 *     Description de plugin
 * @return array
 *     Couples clés => valeurs de description du paquet
 **/
function plugins_preparer_sql_paquet($plugin)
{
    include_spip('inc/svp_outiller');
    $champs = array();
    if (!$plugin) {
        return $champs;
    }
    // On initialise les champs ne necessitant aucune transformation
    foreach (array('categorie' => 'categorie', 'etat' => 'etat', 'version_base' => 'schema', 'logo' => 'logo', 'lien_doc' => 'documentation', 'lien_demo' => 'demonstration', 'lien_dev' => 'developpement') as $cle_champ => $cle_plugin) {
        $champs[$cle_champ] = (isset($plugin[$cle_plugin]) and $plugin[$cle_plugin]) ? $plugin[$cle_plugin] : '';
    }
    // on normalise la version 1.3.12 => 001.003.012
    $champs['version'] = (isset($plugin['version']) and $plugin['version']) ? normaliser_version($plugin['version']) : '';
    // On passe le prefixe en lettres majuscules comme ce qui est fait dans SPIP
    // Ainsi les valeurs dans la table spip_plugins coincideront avec celles de la meta plugin
    $champs['prefixe'] = strtoupper($plugin['prefix']);
    // Indicateurs d'etat numerique (pour simplifier la recherche des maj de STP)
    static $num = array('stable' => 4, 'test' => 3, 'dev' => 2, 'experimental' => 1);
    $champs['etatnum'] = isset($num[$plugin['etat']]) ? $num[$plugin['etat']] : 0;
    // On passe en utf-8 avec le bon charset les champs pouvant contenir des entites html
    foreach (array('nom' => 'nom', 'description' => 'description', 'slogan' => 'slogan') as $cle_champ => $cle_plugin) {
        $champs[$cle_champ] = (isset($plugin[$cle_plugin]) and $plugin[$cle_plugin]) ? entite2charset($plugin[$cle_plugin], 'utf-8') : '';
    }
    // Cles necessitant d'etre serialisees
    // Tags : liste de mots-cles
    // Traitement des auteurs, credits, licences et copyright
    foreach (array('tags' => 'tags', 'auteur' => 'auteur', 'credit' => 'credit', 'licence' => 'licence', 'copyright' => 'copyright') as $cle_champ => $cle_plugin) {
        $champs[$cle_champ] = (isset($plugin[$cle_plugin]) and $plugin[$cle_plugin]) ? serialize($plugin[$cle_plugin]) : '';
    }
    // Extraction de la compatibilite SPIP et construction de la liste des branches spip supportees
    $champs['compatibilite_spip'] = (isset($plugin['compatibilite']) and $plugin['compatibilite']) ? $plugin['compatibilite'] : '';
    $champs['branches_spip'] = (isset($plugin['compatibilite']) and $plugin['compatibilite']) ? compiler_branches_spip($plugin['compatibilite']) : '';
    // Construction du tableau des dependances necessite, lib et utilise
    $dependances['necessite'] = $plugin['necessite'];
    $dependances['librairie'] = $plugin['lib'];
    $dependances['utilise'] = $plugin['utilise'];
    $champs['dependances'] = serialize($dependances);
    // Calculer le champ 'procure' (tableau sérialisé prefixe => version)
    $champs['procure'] = '';
    if (!empty($plugin['procure'][0])) {
        $champs['procure'] = array();
        foreach ($plugin['procure'][0] as $procure) {
            $p = strtoupper($procure['nom']);
            if (!isset($champs['procure'][$p]) or spip_version_compare($procure['version'], $champs['procure'][$p], '>')) {
                $champs['procure'][$p] = $procure['version'];
            }
        }
        $champs['procure'] = serialize($champs['procure']);
    }
    return $champs;
}
コード例 #2
0
/**
 * Pour une description de plugin donnée (issue de la dtd de plugin.xml),
 * prépare les données à installer en bdd
 *
 * Les données sont parfois sérialisées, parfois transcodées, parfois compilées
 * pour tenir compte des spécificités de cette DTD et du stockage en bdd.
 *
 * @uses  compiler_branches_spip()
 * @param array $plugin
 *     Description de plugin
 * @return array
 *     Couples clés => valeurs de description du paquet
 **/
function plugins_preparer_sql_plugin($plugin)
{
    include_spip('inc/svp_outiller');
    $champs = array();
    if (!$plugin) {
        return $champs;
    }
    // On initialise les champs ne necessitant aucune transformation
    $champs['categorie'] = (isset($plugin['categorie']) and $plugin['categorie']) ? $plugin['categorie'] : '';
    $champs['etat'] = (isset($plugin['etat']) and $plugin['etat']) ? $plugin['etat'] : '';
    $champs['version'] = $plugin['version'] ? normaliser_version($plugin['version']) : '';
    $champs['version_base'] = (isset($plugin['schema']) and $plugin['schema']) ? $plugin['schema'] : '';
    // Renommage de certains champs
    $champs['logo'] = (isset($plugin['logo']) and $plugin['logo']) ? $plugin['logo'] : '';
    $champs['lien_doc'] = (isset($plugin['documentation']) and $plugin['documentation']) ? normaliser_lien($plugin['documentation']) : '';
    // On passe le prefixe en lettres majuscules comme ce qui est fait dans SPIP
    // Ainsi les valeurs dans la table spip_plugins coincideront avec celles de la meta plugin
    $champs['prefixe'] = strtoupper($plugin['prefix']);
    // Indicateurs d'etat numerique (pour simplifier la recherche des maj de STP)
    static $num = array('stable' => 4, 'test' => 3, 'dev' => 2, 'experimental' => 1);
    $champs['etatnum'] = (isset($plugin['etat']) and isset($num[$plugin['etat']])) ? $num[$plugin['etat']] : 0;
    // Tags : liste de mots-cles
    $champs['tags'] = (isset($plugin['tags']) and $plugin['tags']) ? serialize($plugin['tags']) : '';
    // On passe en utf-8 avec le bon charset les champs pouvant contenir des entites html
    $champs['description'] = entite2charset($plugin['description'], 'utf-8');
    // Traitement des auteurs, credits, licences et copyright
    // -- on extrait les auteurs, licences et copyrights sous forme de tableaux
    // -- depuis le commit 18294 du core la balise auteur est renvoyee sous forme de tableau mais
    //    contient toujours qu'un seul index
    $balise_auteur = entite2charset($plugin['auteur'][0], 'utf-8');
    $auteurs = normaliser_auteur_licence($balise_auteur, 'auteur');
    $balise_licence = isset($plugin['licence'][0]) ? entite2charset($plugin['licence'][0], 'utf-8') : '';
    $licences = normaliser_auteur_licence($balise_licence, 'licence');
    // -- on merge les tableaux recuperes dans auteur et licence
    $champs['auteur'] = $champs['licence'] = $champs['copyright'] = '';
    if ($t = array_merge($auteurs['auteur'], $licences['auteur'])) {
        $champs['auteur'] = serialize($t);
    }
    if ($t = array_merge($auteurs['licence'], $licences['licence'])) {
        $champs['licence'] = serialize($t);
    }
    if ($t = array_merge($auteurs['copyright'], $licences['copyright'])) {
        $champs['copyright'] = serialize($t);
    }
    // Extrait d'un nom et un slogan normalises
    // Slogan : si vide on ne fait plus rien de special, on traitera ça a l'affichage
    $champs['slogan'] = $plugin['slogan'] ? entite2charset($plugin['slogan'], 'utf-8') : '';
    // Nom :	on repere dans le nom du plugin un chiffre en fin de nom
    //			et on l'ampute de ce numero pour le normaliser
    //			et on passe tout en unicode avec le charset du site
    $champs['nom'] = trim(entite2charset($plugin['nom'], 'utf-8'));
    // Extraction de la compatibilite SPIP et construction de la liste des branches spip supportees
    $champs['compatibilite_spip'] = $plugin['compatibilite'] ? $plugin['compatibilite'] : '';
    $champs['branches_spip'] = $plugin['compatibilite'] ? compiler_branches_spip($plugin['compatibilite']) : '';
    // Construction du tableau des dependances necessite, lib et utilise
    $dependances['necessite'] = $plugin['necessite'];
    $dependances['librairie'] = $plugin['lib'];
    $dependances['utilise'] = $plugin['utilise'];
    $champs['dependances'] = serialize($dependances);
    // Calculer le champ 'procure' (tableau sérialisé prefixe => version)
    $champs['procure'] = '';
    if (!empty($plugin['procure'][0])) {
        $champs['procure'] = array();
        foreach ($plugin['procure'][0] as $procure) {
            $p = strtoupper($procure['nom']);
            if (!isset($champs['procure'][$p]) or spip_version_compare($procure['version'], $champs['procure'][$p], '>')) {
                $champs['procure'][$p] = $procure['version'];
            }
        }
        $champs['procure'] = serialize($champs['procure']);
    }
    // Champs non supportes par la DTD plugin et ne pouvant etre deduits d'autres balises
    $champs['lien_demo'] = '';
    $champs['lien_dev'] = '';
    $champs['credit'] = '';
    return $champs;
}