/** * 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; }
/** * 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; }