Accueil > Documentation incomplète > Documentation pour les administrateurs > Configuration du canal > Gestion d’une ferme de MediaSPIP > Gestion générale de la ferme > Récupération d’informations sur le site maître à l’installation d’une (...)

Récupération d’informations sur le site maître à l’installation d’une instance

Utilité

Sur le site principal, une instance de mutualisation est définie par plusieurs choses :

  • Les données dans la table spip_mutus ;
  • Son logo ;
  • Son auteur principal (id_admin dans la table spip_mutus correspondant à un id_auteur de la table spip_auteurs)qui sera le seul à pouvoir créer définitivement l’instance de mutualisation ;

Il peut donc être tout à fait judicieux de vouloir récupérer certaines de ces informations afin de compléter l’installation d’une instance pour, par exemple :

  • récupérer le titre de l’instance et le placer comme titre du site dès l’installation ;
  • récupérer le descriptif d’une instance et le placer comme descriptif du site dès l’installation ;
  • ...

Pour ce faire, le plugin de gestion de la mutualisation fournit une page spécifique en xml, accessible uniquement lorsquelle est appelée par la même adresse IP que le serveur (afin de sécuriser les données qu’elle contient).

Cette page est spip.php?page=mutu_infos_instances et doit être appelé avec un paramètre d’URL url correspondant à l’URL de base (sans http://) du site dont on souhaite récupérer les informations (par exemple : test.mediaspip.net).

Il est donc alors tout à fait imaginable de créer un petit plugin complémentaire que l’on déposera dans le dossier extensions/ à la racine de la mutualisation, ce plugin sera automatiquement installé et activé à la création d’une instance, et de mettre une fonction dans son installation permettant de récupérer ces données.

Exemple de contenu fournit par cette page

L’exemple ci dessous est ce que retourne cette page en l’appelant de la sorte : http://site.maitre.tld/spip.php?page=mutu_infos_instances&url=test.mediaspip.net.

  1. <?xml
  2. version="1.0" encoding="utf-8"?>
  3.  
  4. <infos>
  5. <titre>Test</titre>
  6. <descriptif>Description de test</descriptif>
  7. <logo>http://site.maitre.tld/IMG/mutuon32.jpg?1290814584</logo>
  8. <email_webmaster>contact@mediaspip.net</email_webmaster>
  9. <admin>
  10.     <nom>Admin de mediaspip.net</nom>
  11.     <bio>Biographie de l'admin</bio>
  12.     <email>contact@mediaspip.net</email>
  13.     <nom_site>mediaspip.net</nom_site>
  14.     <url_site>http://www.mediaspip.net</url_site>
  15.     <login>admin_mediaspip.net</login>
  16.     <pass>eea83c778953b750302a923bffbb923c4a7b0c581ec0f01a832c1a5d7cf641b2</pass>
  17.     <low_sec>FZ5KX7vG</low_sec>
  18.     <pgp>Clé PGP de l'admin s'il y a lieu</pgp>
  19.     <htpass>$1$9djYgabX$5.AeLQbdRQdCToSEJalDB0</htpass>
  20.     <alea_actuel>19054803554ceed96024b415.45307843</alea_actuel>
  21.     <alea_futur>5975604334ceeda5829e783.10831622</alea_futur>
  22.     <prefs>a:3:{s:7:"couleur";s:1:"6";s:7:"display";i:0;s:3:"cnx";s:0:"";}</prefs>
  23.     <lang>fr</lang>
  24.     <logo_auteur>http://site.maitre.tld/local/cache-gravatar/fe69a5d0c8df13115116d9dac44364c8.jpg</logo_auteur>
  25. </admin>
  26. </infos>

Télécharger

Ce contenu comme expliqué plus haut ne sera pas accessible via votre navigateur mais uniquement via un appel de la même machine sur laquelle est hébergée la mutualisation (par un script PHP par exemple).

Cas d’utilisation

Voici le code documenté de MediaSPIP Init qui utilise cette possibilité. Pour rappel, ce plugin sert à initialiser divers éléments de configuration de SPIP dès son installation. Il est placé dans le dossier extensions de la mutualisation et est donc appelée installé à chaque installation.

Cette partie de code fait partie de la fonction d’installation du plugin, elle est assez documentée dans le code pour se suffire à elle même.

  1.     /**
  2.      * On vérifie tout d'abord que l'on est bien dans une mutualisation et que l'on n'a qu'un seul site maitre
  3.      */
  4.     if(defined('_SITES_ADMIN_MUTUALISATION') && (count(explode(',',_SITES_ADMIN_MUTUALISATION)) == 1)){
  5.         include_spip('inc/xml');
  6.         include_spip('inc/distant');
  7.         include_spip('action/iconifier');
  8.        
  9.         /**
  10.          * On utilisera notre adresse sans http pour fournir de quoi à la mutu pour nous reconnaitre
  11.          */
  12.         $url_site = str_replace('http://','',$GLOBALS['meta']['adresse_site']);
  13.         /**
  14.          * On génère l'URL à appeler sur la mutu
  15.          */
  16.         $url_distant = 'http://'._SITES_ADMIN_MUTUALISATION.'/spip.php?page=mutu_infos_instances&url='.$url_site;
  17.         /**
  18.          * On crée l'arbre xml de ce que l'on récupère sur le site principale de la mutualisation
  19.          */
  20.         $infos_mutus = spip_xml_load($url_distant, true, true, $taille_max = 1048576, $datas='', $profondeur = -1);
  21.         if(is_array($infos_mutus)){
  22.             include_spip('inc/meta');
  23.             /**
  24.              * Le nom du site
  25.              */
  26.             if(isset($infos_mutus['infos'][0]['titre'])){
  27.                 ecrire_meta("nom_site", $infos_mutus['infos'][0]['titre'][0]);
  28.             }
  29.             /**
  30.              * Le descriptif du site
  31.              */
  32.             if(isset($infos_mutus['infos'][0]['descriptif'][0])){
  33.                 ecrire_meta("descriptif_site", $infos_mutus['infos'][0]['descriptif'][0]);
  34.             }
  35.             /**
  36.              * L'email du webmaster
  37.              */
  38.             if(isset($infos_mutus['infos'][0]['email_webmaster'][0])){
  39.                 ecrire_meta("email_webmaster", $infos_mutus['infos'][0]['email_webmaster'][0]);
  40.             }
  41.             /**
  42.              * Le logo du site
  43.              */
  44.             if(isset($infos_mutus['infos'][0]['logo'])){
  45.                 $ajouter_image = charger_fonction('spip_image_ajouter','action');
  46.                 $source = copie_locale($infos_mutus['infos'][0]['logo'][0]);
  47.                 if (file_exists($source)) {
  48.                     $new_source = determine_upload().basename($source);
  49.                     @rename($source,$new_source);
  50.                     $chercher_logo = charger_fonction('chercher_logo','inc');
  51.                     $logo = $chercher_logo('', 'site', 'on');
  52.                     $type = type_du_logo('site');
  53.                     if ($logo)
  54.                         spip_unlink($logo[0]);
  55.                     $ajouter_image($type.'on0',true,basename($new_source));
  56.                 }
  57.             }
  58.             /**
  59.              * Les informations de l'id_admin qui doit être le premier auteur créé
  60.              */
  61.             if(is_array($admin = $infos_mutus['infos'][0]['admin'][0])){
  62.                 foreach($admin as $info => $value){
  63.                     $admin_final[$info] = $value[0];
  64.                 }
  65.                 $admin_final['statut'] = '0minirezo';
  66.                 $admin_final['webmestre'] = 'oui';
  67.                 /**
  68.                  * On enlève le logo_auteur si présent et on le stock dans une variable
  69.                  */
  70.                 if(isset($admin_final['logo_auteur'])){
  71.                     $logo_auteur = $admin_final['logo_auteur'];
  72.                     unset($admin_final['logo_auteur']);
  73.                 }
  74.                 /**
  75.                  * Si le même auteur avec la même adresse email a été créé à l'installation
  76.                  * On met seulement à jour avec les informations récupérées
  77.                  */
  78.                 if($id_auteur = sql_getfetsel('id_auteur','spip_auteurs','email='.sql_quote($admin_final['email']))){
  79.                     $infos_actuelles = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_auteur));
  80.                     $infos_admin = array_merge($admin_final,$infos_actuelles);
  81.                     sql_updateq('spip_auteurs',$infos_admin,'id_auteur='.intval($id_auteur));
  82.                 }
  83.                 /**
  84.                  * S'il n'y a pas eu de création d'auteur à l'installation,
  85.                  * on en crée un depuis les informations récupérées
  86.                  * Attention : cet auteur ne sera pas automatiquement fonctionnel, il devra demander un rappel de
  87.                  * mot de passe avant de pouvoir se loguer sur le site
  88.                  */
  89.                 else{
  90.                     $id_auteur = sql_insertq('spip_auteurs',$admin_final);
  91.                 }
  92.                 /**
  93.                  * Si on a un logo, on l'ajoute à l'auteur
  94.                  */
  95.                 if($logo_auteur){
  96.                     $ajouter_image = charger_fonction('spip_image_ajouter','action');
  97.                     $source = copie_locale($logo_auteur);
  98.                     if (file_exists($source)) {
  99.                         $new_source = determine_upload().basename($source);
  100.                         @rename($source,$new_source);
  101.                         $chercher_logo = charger_fonction('chercher_logo','inc');
  102.                         $logo = $chercher_logo($id_auteur, 'auteur', 'on');
  103.                         $type = 'aut';
  104.                         if ($logo)
  105.                             spip_unlink($logo[0]);
  106.                         $ajouter_image($type.'on'.$id_auteur,true,basename($new_source));
  107.                     }
  108.                 }
  109.             }
  110.         }
  111.     }

Télécharger

  • Auteur :
  • Publié le :
  • Mis à jour : 25/04/11
  • Révisé par : 2 anonymes

Aucun commentaire


Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document