Tag - PunBB

jeudi 25 février 2010

La passion du Monde des Logiciels Libres

Je me souviens, Il y a un poil plus longtemps qu'une décennie (12/13ans...) , tel Christophe Colomb découvrant le Nouveau Monde, et ses peuplades, je découvris le "Monde des Logiciels Libres" par le biais de Linux.

Je me souviens que la découverte de ce système d'exploitation libre s'est faite par un biais inattendu, s'il en est, celui d'un magazine de jeux vidéo : joystick. Je me souviens du "noob" ( débutant ) que j'étais alors trouva un article décrivant Linux et un monde " underground " de geeks. Bien évidement l'auteur de l'article était parti sur un délire mais le débutant que j'étais ne connaissant pas Linux se dit "faut que j'essaye ce truc!". Je me souviens de l'attirance de la nouveauté et l'excitation de pouvoir jouer avec un UNIX sur un pc alors que j'en utilisais au boulot sur Hp9000, en autre, attisait ma curiosité.
Je me souviens de partir à la FNAC me procurer une redhat 5.0 (comme monde underground on ne peut pas faire mieux que la FNAC hein ;) et m'installer sur mon premier vrai pc, un 286SX25 avec son super disque dur de 40go et un pauvre windows 3.1 qui allait finir par sombrer rapidement.
Je me souviens, toujours noob, j'acquis un book "admin system Linux" un livre hyper vieux (mais c'est dans les vieux pots tout ça tout ça ), et avec le manuel de là redhat 5.0 en suivant méthodiquement le guide d'installation, je me retrouve au bout de quelques (longues) minutes/heures à recompiler le kernel aussitôt après avoir installé redhat:))). Ben oui je suivais la doc et me disais que ça faisait parti de l'installation :))
La frénésie de l'installation passée, il me fallait aller découvrir un monde dans un monde, l'IRC.
Je me souviens que c'est avec une connexion Internet à 3ko/s que je découvris #linuxfr@ircnet et les factures de téléphone à rallonge.
Vint ensuite le RNIS "doublé" pour atteindre le nirvana de la rapidité à 14ko/s :-) puis peu après une nouvelle techno appelée A D S L.
Je me souviens qu'un hic de taille arriva pour nous autres abonnes wanadoo ADSL d'alors. La belle raie manta était inopérante sous Linux. Et c'est là que j'ai croise Benoît PAPILLAULT et son génial driver Linux.
Je me souviens que c'est là le début de mon implication pleine et entière dans le Monde des Logiciels libres.
Je me souviens proposer à Benoit ma modeste contribution pour son site sur sf.net.
Je me souviens des heure passées ainsi à aider tout à chacun sur Linux, perl, php... dans la mesure de mes petites compétences d'alors.
Je me souviens ensuite du sieur Penso ( mr linuxfr.org) au détour de quelques rencontres fortuites où il me propose de participer au code de linuxfr.org au temps d'avant Templeet ;)
On aura participé à quelques événements tel le salon Linux expo où du "village" associatif nous tenions un stand offert à titre gracieux.
Je me souviens d'un homme au look de soixante-huitard jouant du pipo et déambulant en chaussettes dans les travées du salon, mr stallman;) de même que mr gnome en la personne de Miguel de Icaza montrer son Window manager à une keynote... Etc;) etc;)
Les liens tissés à cette époque marqueront mon présent à plusieurs égards et c'est en toute logique que j'ai été amené à recroiser plus tard Fabien Penso dans le monde professionnel en tant que fournisseur et client dans le monde du streaming vidéo.
A cette époque tout était (encore) si nouveau qu'on sentait un réel esprit communautaire où chacun pouvait trouver sa place juste par la seule force de sa motivation.
Je me souviens des débuts de Linux magazine France et de ses tout premiers numéros où, ceux qui ne disposaient pas d'un accès internet "digne" de ce nom attendait le CDROM avec la plétore de nouveautés qu'on ne pouvait s'empêcher de compiler soit même (tels : une distrib linux, le wm gnome beta3, kde beta et j'en passe ;) juste pour être bien fier de montrer à qui veut, que Linux n'est pas qu'un jouet pour geek :p Je me souviens des tests (d'adoption) de la meilleure distrib Linux avec des cd de redhat, mandrake, debian, slackware, en cherchant celle qui se rapprocherait le plus des standard et le plus en adéquation avec ses habitudes/goûts.
Je me souviens (10ans de cela) dans le même temps monter #phpfr@ircnet et l'engouement étant plus qu'honorable, on me défia de créer alors le site phpfr.org. Forcément, d'aucun ne se défileront ;). A la recherche d'une solution d'hébergement pour le site, je croise le sieur Imil de gcu.info qui de surcroit était également un collègue :) qui m'offrira "le gîte et le couvert" tant le projet lui plu. L'aventure du site d'entraide au php, dont le logo représentait une souris bleue mangeant un gruyère, juste parce que je voulais déjà adresser un pied de nez aux autres sites de l'époque arborrant fièrement le logo de l'éléphant :p, durera 5ans avec un certains ... Nanthrax. (un pote de dix ans et des poussières et à présent collègue).
Je me souviens de l'arrivée de php 4 et de la sortie de dotclear 1 et de la web2mania.
Nouveau joujou que les blogs sur la toile.
Je me souviens avoir rejoint Vin100 qui produisit un portail par dessus le forum punbb : puntal. Ce portail avait la particularité d'être une adaptation de dotclear avec sa souplesse et sa facilité d'utilisation pour qui veut monter un site communautaire clef en mains. Aventure de deux ans avant que chacun ne s'oriente vers de nouveaux horizons, le mien : les framework php5.
Tout ceci semblerait bien trop linéaire et "joyeux" mais le monde des logiciels libres n'est pas le monde des bisounours et il arrive bien souvent d'immenses déceptions, au point de plusieurs fois vouloir disparaitre de la toile à jamais (ce qui fut le cas avec puntal) et retourner à des "vraies" valeurs.
Je me souviens, un jour, au détour d'un mail reçu par un développeur allemand depuis sourceforge.net, qui me fait remarquer un "joli" fork du projet puntal. Ce "piratage" avéré de nos sources (bien que sous licences GPL) ne suffira pas à raisonner le "forker". Autre déception : punbb sur lequel reposait en grande partie le projet puntal fut vendu par Rick Andersson et là, implosa le projet à jamais. La communauté forka punbb pour fluxbb. Rick Andersson ne donna plus jamais signe de vie.
La communauté déjà en attente d'une version 1.3 depuis des années se retrouva complètement noyée dans le système de release de fluxbb.
Aujourd'hui fluxbb est tjs en version de test 1.4 sans jamais avoir sortie de 1.3 ... et surtout toujours en php ... 4!
Par dessus le marché un membre de la Core team fluxbb tenant des propos racistes à l'encontre des francophones (juste parce qu'il est flamand et qu'il avait la langue française en sainte horreur ), c'en était assez pour moi et temps de changer d'air il était.
Mais ces petits avatars sur le parcours ne sont rien en comparaison de ce que vous apporte humainement le Monde des Logiciels Libres. Chaque membre/bénévole qui vous accorde son temps pour vous expliquer telle ou telle chose, vous ne pouvez lui adresser de la reconnaissance qu'en rendant service aux autres à votre tour et c'est la toute la force de l'ensemble. On m'a aidé en donnant de son temps, j'en fait autant avec les autres. Ainsi chacun apporte à l'autre une partie de son savoir.
Mais avant toute chose, si vous voulez participer à l'aventure, il faut être motivé, savoir suivre les règles qui régissent une communauté / un projet. Lire beaucoup tout ce qui touche au sujet qui vous intéresse. Et quand la phase d'observation est passée, vous pouvez alors vous lancer et apprécier :)

lundi 04 février 2008

PunBB 1.3 beta - la magie des 'hameçons' (aka Hook)

Après de très long mois d'attente (près de 18?), PunBB 1.3 sort en version béta avec quelques nouveautés dont :

  • le support de l'utf-8
  • des 'hooks'

cela parait peu dit comme cela mais attention les yeux ....

les hooks permettent dès maintenant, de créer des "extensions" sans toucher au coeur du code de punbb.
Ainsi l'avantage est de pouvoir produire des extensions de son choix qui soit installable / désinstable avec aisance et une maintenance accrue.

un exemple :
dans le script header.php on trouve la ligne suivante :

($hook = get_hook('hd_template_loaded')) ? eval($hook) : null;

celle ci permet d'ajouter ce que l'on veut après que le template se soit chargé.

Pour exploiter ce hook, prennons l'exemple "Random Quote" permettant de changer la description du forum aléatoirement.

le noeud hook id identifie quel hook de punbb on compte exploiter, ici donc hook id vaut hd_template_loaded

une fois installé dans le répertoire extensions, rendez vous dans l'administration du forum puis installez l'extension.

vous verrez immédiatement le hook produire son effet en changeant la description ;)

Pour info, les hooks commençants par :

  1. hd_ sont dans le header
  2. ft_ sont dans le footer
  3. in_ sont dans l'index
  4. li_ sont dans le login
  5. dl_ sont dans delete
  6. ex_ sont dans externe
  7. he_ sont dans l'aide
  8. mi_ sont dans misc
  9. mr_ sont dans moderate
  10. po_ sont dans post
  11. pf_ sont dans profile
  12. rg_ sont dans register
  13. re_ sont dans rewrite
  14. se_ sont dans search
  15. ul_ sont dans userlist
  16. vf_ sont dans viewforum
  17. vt_ sont dans viewtopic

vous voici parés prêt à créer/migrer vos MOD existantes ;-)

mercredi 26 décembre 2007

CakePHP - PunBB - statistique du forum

Quelques conceptes de bases.

Pour pouvoir afficher des info réutilisables dans ses Views CakePHP fourni des "Helpers" et des Elements Le Helper étend les possibilités des Vues et les Elements sont des petits bouts de code php/html qui peuvent étre affichés plusieurs fois dans la même page.

Ainsi donc le "bloc de stats" pourrait très bien être affiché dans plusieurs pages pour chacun des plugins news/articles/lexique etc..

Donc nous allons faire un element "app/views/elements/stats.ctp" comme suit :

<?php
$bloc->startBloc(__('Forums statistics',true), 'stats');				
				
$pt_total_users = $this->requestAction('users/nbUsers');
$pt_last_user 	= $this->requestAction('users/lastUser');	
$pt_total_posts = $this->requestAction('forum/stats');
?>
<ul>
<li><?php echo __('Total numbers of members:',true).' '.$pt_total_users['0']['0']['total_user']?></li>
<li><?php echo __('Newest resgistered user:',true).' <a href="'.pt_forum_url.'profile.php?id='.$pt_last_user['0']['User']['id'].'">'.$pt_last_user['0']['User']['username']?></a></li>
<li><?php echo __('Total numbers of topics:',true).' '.$pt_total_posts['0']['0']['total_topics']?></li>
<li><?php echo __('Total numbers of posts:',true).' '.$pt_total_posts['0']['0']['total_posts']?></li>
</ul>
<?php
$bloc->endBloc();
?>

comment tout cela fonctionne :

dans le script app/app_controller.php de notre applications nous faisons ceci :

class AppController extends Controller {
public $helpers = array ('Bloc','Html');
...
}

et le helper bloc contient ceci (app/views/helpers/bloc.php):

<?php
class BlocHelper extends Helper {
 	 	
 	function startBloc($title='',$id='') {	
		static $i;	
		$id = $id != '' ? $id : $i;		
		$res = '';
		$res .= "\t".'<div class="block" id="'.$id.'">'."\n";		
		if ($title!='')
			$res .= "\t".'<h2><span>'.$title.'</span></h2>'."\n";		
		$res .= 
		"\t\t".'<div class="box" id="box_'.$id.'">'."\n";
		
		if (PT_DEFAULT_THEME == 'punbb') 
			$res .= "\t\t\t".'<div class="inbox">'."\n";
		
		echo $res;
		$i++;
	}
	function endBloc() {
 		if (PT_DEFAULT_THEME == 'punbb') {		
			echo 
			"\t\t\t".'</div>'."\n".
			"\t\t".'</div>'."\n".
			"\t".'</div>';
 		} 
 		else {
 			echo 
			"\t\t".'</div>'."\n".
			"\t".'</div>'; 			
 		}
	} 
 	
}
?>

Ainsi paré : le controlleur principal dispose d'un helper bloc
donc la vue peut utiliser $bloc->endBloc et ->startBloc

ceci est une premiere etape :
suit ensuite dans notre element les 3 lignes :


$pt_total_users = $this->requestAction('users/nbUsers');
$pt_last_user 	= $this->requestAction('users/lastUser');	
$pt_total_posts = $this->requestAction('forum/stats');

ces 3 lignes effectuent des "requestAction" lequelles permettent d'accèder aux methodes nbUser et lastUser de la class UsersController et à la methode stats de la class ForumControllers, en voici le détail :


<?php
class UsersController extends AppController {
	public $name 	= 'Users';
[...]
	public function lastUser () {		
		$strQuery =  'SELECT id, username FROM '.DB_PREFIX.'users as User' .
						' ORDER BY registered DESC LIMIT 1';
		$resultset = $this->User->query($strQuery);
		return $resultset; 									
	}	
	public function nbUsers () {
		
		$strQuery = 'SELECT COUNT(id)-1 AS total_user FROM '.DB_PREFIX.'users AS User ';		  
		$resultset = $this->User->query($strQuery);
		return $resultset; 	
     }
[...]
}

ceci nous permet donc d'avoir facilement les information de stats de notre forum de manière utlra simplissime dans un bloc qui s'affichera ou bon vous semble comme suit :

<?php  echo $this->renderElement('stats');?>

lundi 24 décembre 2007

CakePHP - PunBB - architecture generale

Voici l'architecture générale avec la liste des répertoires de son application

- app
--- config contient les fichiers de config de son application tel database.php, bootstrap.php etc..

--- controllers contient les controllers de votre application

--- locales contient les traductions

--- models contient les models

--- plugins contient des applications nommé plugins (détail plus bas)

--- vendors contient des librairies externes à CakePHP et nécéssaire à son application

--- views contient les views de votre application

--- webroot contient la partie "web" de votre application --- webroot/forum/ l'endroit où est installé punBB !

le répertoire plugins reprend l'integralité de l'arborscence MVC ce qui donne :

  1. plugins
  2. - news
  3. - news/news_app_controller.php class du controller du plugins news
  4. - news/news_app_model.php class du mdel du module du plugin news
  5. - news/controllers/news_controller.php le controlleur du plugin news
  6. - news/models/news.php le model du plugin news
  7. - news/views/themed/punbb/news/index.ctp la vue principale du module news

La configuration apache devra donc définir un VirtualHost sur le répertoire app/webroot/ comme DOCUMENT_ROOT.

jeudi 06 décembre 2007

CakePHP et PunBB : introduction

Après l'édpisode des comparatifs de framework PHP, voici une astuce pour vous permettre de franchir le pas vers CakePHP (un bon framework PHP utilisant MVC) tout en utilisant PunBB comme outil de forum.

L'idée de base est la suivante : je veux créer un portail basé sur le framework CakePHP mais en utilisant une seul et unique session entre mon portail et mon forum.

Donc pour y parvenir, dans le script dispatcher.php de CakePHP je fais le classique include du script common.php de punbb comme suit :

j'edite le script cake/dispatcher.php et au dessus de

 class Dispatcher extends Object {

j'ajoute :

 define('PUN_ROOT',WWW_ROOT. 'forums/');
 require PUN_ROOT.'include/common.php';

de là, partout dans CakePHP nous avons la "main" sur les variables punBB et la gestion de la session.

Donc dans mon controlleur gérant l'utilisateur contiendra ni plus ni moins qu'un copier/coller du code de gestion de la fonction login (avec l'action = in et out selon le cas)

  class UsersController extends AppController {
      public function login ()
    {
    	global $pun, $db, $pun_config, $db_type, $lang_login;
        $this->set('error', false);
       #soumission du formulaire de login
        if (!empty($this->data))
        {
      #analyse du login/pass ; recherche dans la base et creation du cookie
       }
     }
   }

évidement on n'oubliera pas d'ajouter un global $pun_user par exemple, dans la fonction login, pour manipuler les données que cette variable contient.

Dans un prochain billet, j'aborderai les vues (le V de MVC ;) et comment produire un menu et recuperer dans un bloc de son portail les 'n' derniers sujets recents du forum.

dimanche 10 juin 2007

PunBB : la simplicité même ?!

L'équipe de PunBB, l'outil de forum, nous gratifie d'un tuto en vidéo détaillant toutes les étapes possibles sur punBB, allant de l'installation à la gestion de son forum en passant par l'installation de nouveaux thèmes pour finir par l'ajout de liens supplémentaires dans le menu horizontal.