Comme nous l'avons vu précédemment notre blog est capable de communiquer avec notre serveur ldap qui gère les utilisateurs de la plateforme. Maintenant il nous reste à écrire le code en php, qui automatisera la création des blogs sur le serveur. Les blogs seront accessibles sous la forme : http://monblog.mdl29.net
Pour avoir un blog de la forme http://monblog.mdl29.net et non http://mdl29.net/monblog, il faudra modifier notre vhost apache en conséquence. La documentation à sujet est disponible ici : http://mdl29.net/doku.php?id=braveo:blogadresses
Pour l'installation du multiblog, nous avons utilisé la documentation officielle de dotclear : http://fr.dotclear.org/documentation/2.0/admin/clean-install. Une fois notre multiblog mis en place, on se retrouve avec une arboresence suivante :
Arborescence de notre multiblog :
/www_ |___ all-blogs # répertoire de partage des thèmes et plugins | |_ themes | |_ plugins | |_ index.php | |___ blogs # répertoire où seront stocké tous les blogs | |_ blog1 | |_themes | |_pugins | |_index.php | |___ dotclear # répertoire d'installation de dotclear
Le fichier index.php du dossier blog1
<?php define('DC_BLOG_ID','blog1'); require dirname(__FILE__).'/../../dotclear/inc/public/prepend.php'; ?>
Ce code sera automatiquement générer en php.
Fichier : createblog.php
<?php require '/var/www/dotclear/inc/admin/prepend.php'; /* dans config-blog.php, on met les identifiants administrateur de dotclear $admin_dc = "compte_admin"; $pwd_dc = "motdepasse"; */ require_once("config-blog.php"); $blog_id=$argv[1]; $blog_url = "http://$blog_id.mdl29.net/index.php?"; // le nom du blog $blog_name = $blog_id; // Description du blog $blog_desc = "Ici, Je mets la description de mon blog"; // chemin des blogs $Path_blogs ='/var/www/blogs'; $public_path = "$Path_blogs/$blog_id/public"; $themes_path = "/var/www/all-blogs/themes"; /* Adresse url des thèmes Pour le moment les utilisateurs n'ont pas la possibilité de modifier leur thèmes mais par la suite, cela sera possible */ $themes_url = "http://themes.mdl29.net"; // on récupère les identifiants du fichier config-blog.php $user_id = $admin_dc; $pwd = $pwd_dc; # authentification en admin obligatoire $check_user = $core->auth->checkUser($user_id,$pwd,null) === true; if ( ! $check_user) { echo "impossible de s'authentifier"; return NULL; } # authentification en admin obligatoire $check_user = $core->auth->checkUser($user_id,$pwd,null) === true; # Est-ce que le blog existe $ifBlogExiste = $core->getBlog($blog_id); if ( $ifBlogExiste) { echo "le blog existe"; return NULL; } # Création du blog $cur = $core->con->openCursor($core->prefix.'blog'); if (!$cur) { echo "création du blog impossible"; return NULL; }else{ $blog_id = $cur->blog_id = $blog_id ; $blog_url = $cur->blog_url = $blog_url ; $blog_name = $cur->blog_name = $blog_name; $blog_desc = $cur->blog_desc = $blog_desc ; $cur_add_blog=$core->addBlog($cur); if ( $cur_add_blog) { echo "impossible de créer le blog"; return NULL; } # Paramètres du blog $core->blogDefaults($cur->blog_id); $blog_settings = new dcSettings($core,$cur->blog_id); $blog_settings->addNamespace('system'); $blog_settings->system->put('public_path',$public_path); $blog_settings->system->put('themes_path',$themes_path); $blog_settings->system->put('themes_url',$themes_url); $blog_settings->system->put('lang','fr'); # Création des répertoires sur le serveur # le répertoire aura le nom de la variable $blog_id if ( ! mkdir ("$Path_blogs/$blog_id", 0330)) { echo "impossible de créer le répertoire du blog"; return NULL; } if ( ! mkdir ("$Path_blogs/$blog_id/public/", 0750)) { echo "impossible de créer le répertoire du blog"; return NULL; } if ( ! mkdir ("$Path_blogs/$blog_id/themes/", 0750)) { echo "impossible de créer le répertoire du blog"; return NULL; } # Création d'un lien symbolique dans le répertoire créé # On utilise le thème dotclear par défaut symlink("/var/www/all-blogs/themes/default", "/var/www/blogs/$blog_id/themes/default" ); $inF = fopen("/var/www/blogs/$blog_id/index.php","w"); fwrite($inF,"<?php\ndefine('DC_BLOG_ID','$blog_id');\nrequire dirname(__FILE__).'/../../dotclear/inc/public/prepend.php';\n?>"); fclose($inF); return true; } ?>
Maintenant que notre fichier createblog.php est créé, nous allons voir comment l'utiliser.
Nous supposons que vous utilisez un serveur ldap pour gérer vos utilisateurs. Le code fonctionne bien entendu, même si vous utilisez simplement la de base de données de dotclear.
1. Nous disposons d'un utilisateur nommé "testeur" dans le ldap 2. Création d'un fichier monblog.php 3. Le blog sera accessible à l'adresse : http://testeur.mdl29.net
Le fichier monblog.php :
<?php $identifiant = 'testeur' /* on fait appel à une fonction système exec Bien entendu c'est à éviter, ayant essayé d'utiliser des fonctions et des classes cela ne fonctionnait pas. On avait des problèmes d'include. */ exec("php createblog.php $identifiant"); ?>
Et voilà, c'est fini. Dorénavant sur votre serveur, vous devriez avoir :
/www_ |___ all-blogs | |_ themes | |_ plugins | |_ index.php | |___ blogs | |_ testeur | |_themes | |_pugins | |_index.php | |___ dotclear