Table des matières

Création d'un blog en php

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

Note

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

Préparation du multiblog

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 :

Par rapport à la documentation de dotclear, nous mettrons nos blogs (ex: blog1) dans un dossier blogs et non au même niveau que dotclear et all-blogs.

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.

Le code 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;
	}
?>

Utilisation de notre code

Maintenant que notre fichier createblog.php est créé, nous allons voir comment l'utiliser.

Exemple

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