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 tablespip_mutus
correspondant à unid_auteur
de la tablespip_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
.
- <?xml
- version="1.0" encoding="utf-8"?>
- <infos>
- <titre>Test</titre>
- <descriptif>Description de test</descriptif>
- <logo>http://site.maitre.tld/IMG/mutuon32.jpg?1290814584</logo>
- <email_webmaster>contact@mediaspip.net</email_webmaster>
- <admin>
- <nom>Admin de mediaspip.net</nom>
- <bio>Biographie de l'admin</bio>
- <email>contact@mediaspip.net</email>
- <nom_site>mediaspip.net</nom_site>
- <url_site>http://www.mediaspip.net</url_site>
- <login>admin_mediaspip.net</login>
- <pass>eea83c778953b750302a923bffbb923c4a7b0c581ec0f01a832c1a5d7cf641b2</pass>
- <low_sec>FZ5KX7vG</low_sec>
- <pgp>Clé PGP de l'admin s'il y a lieu</pgp>
- <htpass>$1$9djYgabX$5.AeLQbdRQdCToSEJalDB0</htpass>
- <alea_actuel>19054803554ceed96024b415.45307843</alea_actuel>
- <alea_futur>5975604334ceeda5829e783.10831622</alea_futur>
- <prefs>a:3:{s:7:"couleur";s:1:"6";s:7:"display";i:0;s:3:"cnx";s:0:"";}</prefs>
- <lang>fr</lang>
- <logo_auteur>http://site.maitre.tld/local/cache-gravatar/fe69a5d0c8df13115116d9dac44364c8.jpg</logo_auteur>
- </admin>
- </infos>
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.
- /**
- * 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
- */
- include_spip('inc/xml');
- include_spip('inc/distant');
- include_spip('action/iconifier');
- /**
- * On utilisera notre adresse sans http pour fournir de quoi à la mutu pour nous reconnaitre
- */
- /**
- * On génère l'URL à appeler sur la mutu
- */
- $url_distant = 'http://'._SITES_ADMIN_MUTUALISATION.'/spip.php?page=mutu_infos_instances&url='.$url_site;
- /**
- * On crée l'arbre xml de ce que l'on récupère sur le site principale de la mutualisation
- */
- $infos_mutus = spip_xml_load($url_distant, true, true, $taille_max = 1048576, $datas='', $profondeur = -1);
- include_spip('inc/meta');
- /**
- * Le nom du site
- */
- ecrire_meta("nom_site", $infos_mutus['infos'][0]['titre'][0]);
- }
- /**
- * Le descriptif du site
- */
- ecrire_meta("descriptif_site", $infos_mutus['infos'][0]['descriptif'][0]);
- }
- /**
- * L'email du webmaster
- */
- ecrire_meta("email_webmaster", $infos_mutus['infos'][0]['email_webmaster'][0]);
- }
- /**
- * Le logo du site
- */
- $ajouter_image = charger_fonction('spip_image_ajouter','action');
- $source = copie_locale($infos_mutus['infos'][0]['logo'][0]);
- $chercher_logo = charger_fonction('chercher_logo','inc');
- $logo = $chercher_logo('', 'site', 'on');
- $type = type_du_logo('site');
- if ($logo)
- spip_unlink($logo[0]);
- }
- }
- /**
- * Les informations de l'id_admin qui doit être le premier auteur créé
- */
- foreach($admin as $info => $value){
- $admin_final[$info] = $value[0];
- }
- $admin_final['statut'] = '0minirezo';
- $admin_final['webmestre'] = 'oui';
- /**
- * On enlève le logo_auteur si présent et on le stock dans une variable
- */
- $logo_auteur = $admin_final['logo_auteur'];
- }
- /**
- * Si le même auteur avec la même adresse email a été créé à l'installation
- * On met seulement à jour avec les informations récupérées
- */
- if($id_auteur = sql_getfetsel('id_auteur','spip_auteurs','email='.sql_quote($admin_final['email']))){
- }
- /**
- * S'il n'y a pas eu de création d'auteur à l'installation,
- * on en crée un depuis les informations récupérées
- * Attention : cet auteur ne sera pas automatiquement fonctionnel, il devra demander un rappel de
- * mot de passe avant de pouvoir se loguer sur le site
- */
- else{
- $id_auteur = sql_insertq('spip_auteurs',$admin_final);
- }
- /**
- * Si on a un logo, on l'ajoute à l'auteur
- */
- if($logo_auteur){
- $ajouter_image = charger_fonction('spip_image_ajouter','action');
- $source = copie_locale($logo_auteur);
- $chercher_logo = charger_fonction('chercher_logo','inc');
- $logo = $chercher_logo($id_auteur, 'auteur', 'on');
- $type = 'aut';
- if ($logo)
- spip_unlink($logo[0]);
- }
- }
- }
- }
- }