Changeset 42208 in spip-zone


Ignore:
Timestamp:
Nov 11, 2010, 3:46:44 PM (10 years ago)
Author:
eric@…
Message:

correction de la DTD
changement de groupe de spip.org
restructuration des vérifications sur le fichier xml, cependant le valideur n'est pas encore utilise
correction d'items de langue.

Location:
_plugins_/boussole
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/boussole/boussoles/boussole.dtd

    r42026 r42208  
    11<!ENTITY % NAME "CDATA"> <!-- identificateur -->
    22<!ENTITY % URI "CDATA"> <!-- lien sur le Web -->
    3 <!ENTITY % PATH "CDATA"> <!-- chemin d'acces a un fichier ou repertoire -->
    43<!ENTITY % VNUM "CDATA"> <!-- 3 entiers naturels separes par un point: x.y.z -->
    5 <!ENTITY % GROUP "CDATA"> <!-- pour SPIP appartient a la liste (reference|aide|extension|decouverte|actualite) -->
     4<!ENTITY % GROUP "(reference|aide|extension|decouverte|actualite)">
    65
    7 <!ELEMENT boussole groupe+ >
     6<!ELEMENT boussole groupe+>
    87<!ATTLIST boussole
    9         alias %NAME #REQUIRED
     8        alias %NAME; #REQUIRED
    109        version %VNUM; #REQUIRED
    1110>
     
    1312<!ELEMENT groupe site+>
    1413<!ATTLIST groupe
    15         type %GROUP #REQUIRED
     14        type %GROUP; #REQUIRED
    1615>
    1716
  • _plugins_/boussole/boussoles/boussole_spip.xml

    r42026 r42208  
    1 <boussole alias="spip" version="0.1">
     1<boussole alias="spip" version="0.2">
    22
    33        <!-- Sites de reference SPIP -->
     
    1414                <site alias="irc" src="http://www.spip.net/irc/" />
    1515                <site alias="party" src="http://www.spip-party.net/" />
    16                 <site alias="twit" src="http://spip.org/" />
    1716        </groupe>
    1817
     
    3130                <site alias="zine" src="http://zine.spip.org/" />
    3231                <site alias="mag" src="http://mag.spip.net/" />
     32                <site alias="twit" src="http://spip.org/" />
    3333                <site alias="sedna" src="http://sedna.spip.org/" />
    3434        </groupe>
  • _plugins_/boussole/formulaires/ajouter_boussole.php

    r42026 r42208  
    1010}
    1111
     12
    1213function formulaires_ajouter_boussole_verifier_dist(){
    1314        $erreurs = array();
     
    1516
    1617        if ($mode == 'url_perso') {
     18                // Pour le mode perso uniquement on verifie que le fichier a bien ete saisi
    1719                $url = _request('url_boussole');
    18                 if (!$url) {
     20                if (!$url)
    1921                        // L'url est obligatoire
    2022                        $erreurs['url_boussole'] = _T('boussole:message_nok_champ_obligatoire');
    21                 }
    22                 elseif (!boussole_verifier_adresse($url)) {
    23                         // L'url n'est pas correcte, le fichier xml n'a pas ete trouve
    24                         $erreurs['url_boussole'] = _T('boussole:message_nok_xml_introuvable', array('url' => $url));
    25                 }
    26                 elseif (!boussole_verifier_xml($url)) {
    27                         // Le fichier ne suit pas la DTD
    28                         $erreurs['url_boussole'] = _T('boussole:message_nok_xml_invalide', array('url' => $url));
    29                 }
    3023        }
     24       
    3125        return $erreurs;
    3226}
     27
    3328
    3429function formulaires_ajouter_boussole_traiter_dist(){
    3530        $retour = array();
    3631        $mode = _request('mode');
    37         if ($mode == 'standard')
    38                 $url = find_in_path('boussole_spip.xml', 'boussoles/');
    39         else
    40                 $url = _request('url_boussole');
     32        $xml = _request('url_boussole');
    4133
    42         // On insere la boussole dans la base
    43         // et on traite le cas d'erreur fichier ($retour['message_erreur']) non conforme
    44         $ok = boussole_ajouter($url, $erreur);
    45 
    46         // Determination des messages de retour
    47         if (!$ok)
    48                 $retour['message_erreur'] = $erreur;
     34        // On fait des verifications dans traiter pour renvoyer les resultats dans le message d'erreur global
     35        if (!$url = boussole_localiser_xml($xml, $mode)) {
     36                // Le fichier est introuvable
     37                $retour['message_erreur'] = _T('boussole:message_nok_xml_introuvable', array('fichier' => $xml));
     38        }
    4939        else {
    50                 $retour['message_ok'] = _T('boussole:message_ok_boussole_ajoutee', array('url' => $url));
    51                 spip_log("ACTION AJOUTER BOUSSOLE : url = ". $url, 'boussole');
     40                if (!boussole_valider_xml($url, $erreur)) {
     41                        // Le fichier ne suit pas la DTD (boussole.dtd)
     42                        $retour['message_erreur'] = _T('boussole:message_nok_xml_invalide', array('fichier' => $url));
     43                        spip_log("ERREUR DTD : " . var_export($erreur['detail'], true), 'boussole');
     44                }
     45                else {
     46                        // On insere la boussole dans la base
     47                        // et on traite le cas d'erreur fichier ($retour['message_erreur']) non conforme
     48                        // si c'est encore possible apres avoir valide le fichier avec la dtd
     49                        $ok = boussole_ajouter($url, $erreur);
     50               
     51                        // Determination des messages de retour
     52                        if (!$ok)
     53                                $retour['message_erreur'] = $erreur;
     54                        else {
     55                                $retour['message_ok'] = _T('boussole:message_ok_boussole_ajoutee', array('fichier' => $url));
     56                                spip_log("ACTION AJOUTER BOUSSOLE : url = ". $url, 'boussole');
     57                        }
     58                }
    5259        }
    5360        $retour['editable'] = true;
  • _plugins_/boussole/inc/deboussoler.php

    r42033 r42208  
    77
    88/**
    9  * Teste la validite d'une url d'une description de boussole
     9 * Teste l'existence d'un xml de boussole et renvoie le path complet ou l'url absolue
     10 *
     11 * @param string $xml
     12 * @return string
     13 */
     14function boussole_localiser_xml($xml, $mode) {
     15
     16        include_spip('inc/distant');
     17        $retour = '';
     18
     19        // On calcul une url absolue dans tous les cas
     20        if ($mode == 'standard')
     21                // La boussole SPIP
     22                $url = url_absolue(find_in_path('boussole_spip.xml', 'boussoles/'));
     23        else
     24                if (preg_match(",^(http|ftp)://,",$xml))
     25                        // Mode perso : on a passe une url
     26                        $url = url_absolue($xml);
     27                else
     28                        // Mode perso : on a passe un fichier seul,
     29                        // on calcule l'url sachant que le fichier doit etre dans boussoles/
     30                        $url = url_absolue(find_in_path($xml, 'boussoles/'));
     31
     32        // On verifie que le fichier existe
     33        if (recuperer_page($url, false, false))
     34                $retour = $url;
     35
     36        return $retour;
     37}
     38
     39/**
     40 * Teste la validite du fichier xml de la boussole en fonction de la DTD boussole.dtd
    1041 *
    1142 * @param string $url
     43 * @param array &$erreur
    1244 * @return boolean
    1345 */
    1446
    15 // $url => url du fichier xml de description de la boussole (choix perso)
    16 function boussole_verifier_adresse($url){
     47// $url => url absolue du fichier xml de description de la boussole
     48// $erreur      => tableau des erreurs collectees suite a la validation xml
     49function boussole_valider_xml($url, &$erreur) {
     50
    1751        include_spip('inc/distant');
    18         return (!$xml = recuperer_page($url)) ? false : true;
    19 }
     52        $ok = true;
    2053
     54        // On verifie la validite du contenu en fonction de la dtd
     55        $valider_xml = charger_fonction('valider', 'xml');
     56        $retour = $valider_xml(recuperer_page($url));
    2157
    22 /**
    23  * Teste la validite d'un xml de boussole d'apres la DTD
    24  *
    25  * @param string $xml
    26  * @return boolean
    27  */
     58//      if ($retour[1] === false) {
     59//              $ok = false;
     60//      }
     61//      else if (count($retour[1] > 0)) {
     62//              $erreur['detail'] = $retour[1];
     63//              $ok = false;
     64//      }
    2865
    29 // $xml => url du fichier xml de description de la boussole
    30 function boussole_verifier_xml($xml){
    31 
    32         // A IMPLEMENTER
    33         return true;
     66        return $ok;
    3467}
    3568
     
    4578// $url => url ou path du fichier xml de description de la boussole
    4679// $erreur      => message d'erreur deja traduit
    47 function boussole_ajouter($url, &$erreur=''){
     80function boussole_ajouter($url, &$erreur='') {
    4881
    4982        // On recupere les infos du fichier xml de description de la balise
    50         if (!$infos = boussole_parser_xml($url)){
     83        $infos = boussole_parser_xml($url);
     84        if (!infos OR !$infos['boussole']['alias']){
    5185                $erreur = _T('boussole:message_nok_xml_invalide', array('fichier' => $url));
    5286                return false;
     
    80114
    81115// $aka_boussole        => alias de la boussole, par defaut, spip
    82 function boussole_supprimer($aka_boussole){
     116function boussole_supprimer($aka_boussole) {
    83117       
    84118        // Alias non conforme
     
    105139
    106140// $url => url ou path du fichier xml de description de la boussole
    107 function boussole_parser_xml($url){
     141function boussole_parser_xml($url) {
    108142
    109143        $infos = array();
  • _plugins_/boussole/lang/boussole_fr.php

    r42131 r42208  
    7070        'message_nok_champ_obligatoire' => 'Ce champ est obligatoire',
    7171        'message_nok_ecriture_bdd' => 'Erreur d\'&eacute;criture en base de donn&eacute;es',
    72         'message_nok_xml_introuvable' => 'Le fichier &#171; @url@ &#187; est introuvable',
    73         'message_nok_xml_invalide' => 'Le fichier XML &#171; @fichier@ &#187; de description de la boussole n\'est pas conforme',
    74         'message_ok_boussole_ajoutee' => 'La boussole &#171; @url@ &#187; a &eacute;t&eacute; ajout&eacute;e.',
     72        'message_nok_xml_introuvable' => 'Le fichier &#171; @fichier@ &#187; est introuvable',
     73        'message_nok_xml_invalide' => 'Le fichier XML &#171; @fichier@ &#187; de description de la boussole n\'est pas conforme &agrave; la DTD',
     74        'message_ok_boussole_ajoutee' => 'La boussole &#171; @fichier@ &#187; a &eacute;t&eacute; ajout&eacute;e.',
    7575
    7676// N
Note: See TracChangeset for help on using the changeset viewer.