Changeset 96873 in spip-zone
- Timestamp:
- Apr 29, 2016, 8:17:18 PM (5 years ago)
- Location:
- _plugins_/svp_api/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/svp_api/trunk/http/svp.php
r96842 r96873 77 77 $format_reponse = 'json'; 78 78 79 // Vérification du format de sortie demandé 79 // Vérification du mode SVP du serveur : celui-ci ne doit pas être en mode runtime pour 80 // renvoyer des données complètes 80 81 if (requete_verifier_format($contenu['requete']['format'], $erreur)) { 81 // On positionne cette fois le format de sortie car on sait que celui demandé est valide 82 $format_reponse = $contenu['requete']['format']; 83 // Vérification du nom de la collection 84 if (requete_verifier_collection($contenu['requete']['collection'], $erreur)) { 85 $items = array(); 86 // On vérifie les critères de filtre additionnels si la requête en contient 87 $where = array(); 88 if (requete_verifier_criteres($contenu['requete']['criteres'], $erreur)) { 89 // Si il y a des critères additionnels on complète le where en conséquence 90 if ($contenu['requete']['criteres']) { 91 foreach ($contenu['requete']['criteres'] as $_critere => $_valeur) { 92 if ($_critere == 'compatible_spip') { 93 $f_critere = charger_fonction('where_compatible_spip', 'inc'); 94 $where[] = $f_critere($_valeur, 'spip_plugins', '>'); 95 } else { 96 $where[] = "spip_plugins.${_critere}=" . sql_quote($_valeur); 82 // Vérification du format de sortie demandé 83 if (requete_verifier_format($contenu['requete']['format'], $erreur)) { 84 // On positionne cette fois le format de sortie car on sait que celui demandé est valide 85 $format_reponse = $contenu['requete']['format']; 86 // Vérification du nom de la collection 87 if (requete_verifier_collection($contenu['requete']['collection'], $erreur)) { 88 $donnees = array(); 89 // On vérifie les critères de filtre additionnels si la requête en contient 90 $where = array(); 91 if (requete_verifier_criteres($contenu['requete']['criteres'], $erreur)) { 92 // Si il y a des critères additionnels on complète le where en conséquence 93 if ($contenu['requete']['criteres']) { 94 foreach ($contenu['requete']['criteres'] as $_critere => $_valeur) { 95 if ($_critere == 'compatible_spip') { 96 $f_critere = charger_fonction('where_compatible_spip', 'inc'); 97 $where[] = $f_critere($_valeur, 'spip_plugins', '>'); 98 } else { 99 $where[] = "spip_plugins.${_critere}=" . sql_quote($_valeur); 100 } 97 101 } 98 102 } 103 104 // Récupération de la collection spécifiée en fonction des critères appliqués 105 $collectionner = 'reponse_collectionner_' . $contenu['requete']['collection']; 106 $donnees = $collectionner($where); 107 108 $contenu['donnees'] = $donnees; 99 109 } 100 101 // Récupération de la collection spécifiée en fonction des critères appliqués102 $collectionner = 'reponse_collectionner_' . $contenu['requete']['collection'];103 $items = $collectionner($where);104 105 $contenu['items'] = $items;106 110 } 107 111 } … … 144 148 $format_reponse = 'json'; 145 149 146 // Vérification du format de sortie demandé 150 // Vérification du mode SVP du serveur : celui-ci ne doit pas être en mode runtime pour 151 // renvoyer des données complètes 147 152 if (requete_verifier_format($contenu['requete']['format'], $erreur)) { 148 // On positionne le format de sortie qui sera utilisé car on sait que celui demandé est valide 149 $format_reponse = $contenu['requete']['format']; 150 // Vérification du nom de la collection 151 if (requete_verifier_ressource($contenu['requete']['collection'], $erreur)) { 152 // Vérification du préfixe de la ressource 153 if (requete_verifier_prefixe($contenu['requete']['ressource'], $erreur)) { 154 $prefixe = strtoupper($contenu['requete']['ressource']); 155 $items = array(); 156 // On recherche d'abord le plugin par son préfixe dans la table spip_plugins en vérifiant que 157 // c'est bien un plugin fourni pas un dépôt et pas un plugin installé sur le serveur uniquement 158 $from = array('spip_plugins', 'spip_depots_plugins AS dp'); 159 $select = array('*'); 160 $where = array( 161 'prefixe=' . sql_quote($prefixe), 162 'dp.id_depot>0', 163 'dp.id_plugin=spip_plugins.id_plugin' 164 ); 165 $group_by = array('spip_plugins.id_plugin'); 166 $plugin = sql_fetsel($select, $from, $where, $group_by); 167 if ($plugin) { 168 // On refactore le tableau de sortie du fetsel en supprimant les colonnes id_depot et id_plugin qui ne 169 // sont d'aucune utilité pour le service. 170 unset($plugin['id_plugin']); 171 unset($plugin['id_depot']); 172 $items['plugin'] = normaliser_champs('plugin', $plugin); 173 174 // On recherche maintenant les paquets du plugin 175 $from = array('spip_paquets'); 153 // Vérification du format de sortie demandé 154 if (requete_verifier_format($contenu['requete']['format'], $erreur)) { 155 // On positionne le format de sortie qui sera utilisé car on sait que celui demandé est valide 156 $format_reponse = $contenu['requete']['format']; 157 // Vérification du nom de la collection 158 if (requete_verifier_ressource($contenu['requete']['collection'], $erreur)) { 159 // Vérification du préfixe de la ressource 160 if (requete_verifier_prefixe($contenu['requete']['ressource'], $erreur)) { 161 $prefixe = strtoupper($contenu['requete']['ressource']); 162 $donnees = array(); 163 // On recherche d'abord le plugin par son préfixe dans la table spip_plugins en vérifiant que 164 // c'est bien un plugin fourni pas un dépôt et pas un plugin installé sur le serveur uniquement 165 $from = array('spip_plugins', 'spip_depots_plugins AS dp'); 176 166 $select = array('*'); 177 167 $where = array( 178 168 'prefixe=' . sql_quote($prefixe), 179 'id_depot>0' 169 'dp.id_depot>0', 170 'dp.id_plugin=spip_plugins.id_plugin' 180 171 ); 181 $paquets = sql_allfetsel($select, $from, $where); 182 $items['paquets'] = array(); 183 if ($paquets) { 184 // On refactore le tableau de sortie du allfetsel en un tableau associatif indexé par archives zip. 185 $champs_inutiles = array( 186 'id_paquet', 'id_plugin', 'id_depot', 187 'actif', 'installe', 'recent', 'maj_version', 'superieur', 'obsolete', 'attente', 'constante', 'signature' 172 $group_by = array('spip_plugins.id_plugin'); 173 $plugin = sql_fetsel($select, $from, $where, $group_by); 174 if ($plugin) { 175 // On refactore le tableau de sortie du fetsel en supprimant les colonnes id_depot et id_plugin qui ne 176 // sont d'aucune utilité pour le service. 177 unset($plugin['id_plugin']); 178 unset($plugin['id_depot']); 179 $donnees['plugin'] = normaliser_champs('plugin', $plugin); 180 181 // On recherche maintenant les paquets du plugin 182 $from = array('spip_paquets'); 183 $select = array('*'); 184 $where = array( 185 'prefixe=' . sql_quote($prefixe), 186 'id_depot>0' 188 187 ); 189 foreach ($paquets as $_paquet) { 190 foreach ($champs_inutiles as $_champ) { 191 unset($_paquet[$_champ]); 188 $paquets = sql_allfetsel($select, $from, $where); 189 $donnees['paquets'] = array(); 190 if ($paquets) { 191 // On refactore le tableau de sortie du allfetsel en un tableau associatif indexé par archives zip. 192 $champs_inutiles = array( 193 'id_paquet', 'id_plugin', 'id_depot', 194 'actif', 'installe', 'recent', 'maj_version', 'superieur', 'obsolete', 'attente', 'constante', 'signature' 195 ); 196 foreach ($paquets as $_paquet) { 197 foreach ($champs_inutiles as $_champ) { 198 unset($_paquet[$_champ]); 199 } 200 $donnees['paquets'][$_paquet['nom_archive']] = normaliser_champs('paquet', $_paquet); 192 201 } 193 $items['paquets'][$_paquet['nom_archive']] = normaliser_champs('paquet', $_paquet);194 202 } 203 } else { 204 // On renvoie une erreur 404 pour indiquer que le plugin n'existe pas 205 $erreur = array( 206 'status' => 404, 207 'type' => 'plugin_nok', 208 'element' => 'plugin', 209 'valeur' => $contenu['requete']['ressource'] 210 ); 195 211 } 196 } else { 197 // On renvoie une erreur 404 pour indiquer que le plugin n'existe pas 198 $erreur = array( 199 'status' => 404, 200 'type' => 'plugin_nok', 201 'element' => 'plugin', 202 'valeur' => $contenu['requete']['ressource'] 203 ); 212 $contenu['donnees'] = $donnees; 204 213 } 205 $contenu['items'] = $items;206 214 } 207 215 } -
_plugins_/svp_api/trunk/inc/svpapi_reponse.php
r96872 r96873 87 87 'erreur' => $erreur, 88 88 'schema' => $schema, 89 ' items' => array());89 'donnees' => array()); 90 90 91 91 return $contenu; … … 177 177 foreach($objet as $_champ => $_valeur) { 178 178 if (in_array($_champ, $champs_multi)) { 179 // Passer un champ multi en tableau indexé par la langue 179 180 $objet_normalise[$_champ] = normaliser_multi($_valeur); 180 181 } 181 182 182 183 if (in_array($_champ, $champs_serialises)) { 184 // Désérialiser un champ sérialisé 183 185 $objet_normalise[$_champ] = unserialize($_valeur); 184 186 } 185 187 186 188 if (in_array($_champ, $champs_version)) { 189 // Retourne la chaine de la version x.y.z sous sa forme initiale, sans 190 // remplissage à gauche avec des 0. 187 191 $objet_normalise[$_champ] = denormaliser_version($_valeur); 188 192 } 189 193 190 194 if (in_array($_champ, $champs_liste)) { 195 // Passer une chaine liste en tableau 191 196 $objet_normalise[$_champ] = explode(',', $_valeur); 192 197 } … … 228 233 $reponse->setCharset('utf-8'); 229 234 $reponse->setStatusCode($contenu['erreur']['status']); 235 if ($contenu['erreur']['status'] == 200) { 236 $contenu['erreur'] = array(); 237 } 230 238 231 239 if ($format_reponse == 'json') { -
_plugins_/svp_api/trunk/inc/svpapi_requete.php
r96842 r96873 2 2 3 3 if (!defined('_ECRIRE_INC_VERSION')) return; 4 5 6 /** 7 * Détermine si le serveur est en mode run-time ou pas. 8 * On considère qu'un serveur en mode run-time n'est pas valide pour 9 * traiter les requêtes. 10 * 11 * @param &array $erreur 12 * Tableau initialisé avec les index identifiant l'erreur ou vide si pas d'erreur. 13 * Les index mis à jour sont: 14 * - status : le code de l'erreur HTTP, soit 501 15 * - type : chaine identifiant l'erreur plus précisément, soit serveur_nok 16 * - element : type d'objet sur lequel porte l'erreur, soit serveur 17 * - valeur : la valeur du mode runtime 18 * 19 * @return boolean 20 * True si le serveur est valide, false sinon. 21 */ 22 function requete_verifier_serveur(&$erreur) { 23 $serveur_valide = true; 24 25 include_spip('inc/svp_phraser'); 26 if (!_SVP_MODE_RUNTIME) { 27 $erreur = array( 28 'status' => 501, 29 'type' => 'serveur_nok', 30 'element' => 'serveur', 31 'valeur' => _SVP_MODE_RUNTIME); 32 $serveur_valide = false; 33 } 34 35 return $serveur_valide; 36 } 4 37 5 38 -
_plugins_/svp_api/trunk/paquet.xml
r96872 r96873 2 2 prefix="svpapi" 3 3 categorie="outil" 4 version="0. 2.4"4 version="0.3.0" 5 5 etat="test" 6 6 compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset
for help on using the changeset viewer.