Des scripts perso pour se facilité la vie

Sous GNU/Linux un petit script peux souvent facilité la vie, et allégé mais surtout accéléré certaine tâche.

Qu’est-ce qu’un script?

Un script est une suite d’instruction enregistré dans un fichier, qui peuvent être exécuté en lançant ce fichier, dans l’interpréteur de script. Souvent nommé script bash, shell, …

Stocker et accèder facilement à ces scripts

U!ne fois votre script fait, vous pouvez l’enregistrer dans un simple fichier texte, soit avec l’extension .sh, soit sans extension (après tout on est sous Linux!). Personnellement, j’ai un dossier nommé .myScript, dans mon répertoire home (donc /home/grummfy/.myScript/). Afin d’accédé à mes script je doit tapé
~/.myScript/nomduscript.sh.

Ce n’est pas pratique du tout!

Afin de ce facilité la tâche, je désire que le PATH inclut mon dossier de script. Le PATH est une variable système qui défini le chemin (path = chemin en français) vers les différent répertoire contenant, notamment, des exécutables.
Je pourrais très bien tapé
set PATH=.....}}
mais je n’en voix pas l’utilité et surtout je trouve cela lourd.

Reprenons donc à la base. En principe, lorsque vous lancer la console ou interpréteur de commande, vous lancer un programme qui va aller chercher toute une série de préférence utilisateur, notamment dans le fichier script ~/.bashrc

Modifions donc ce fichier, en y ajoutant ceci :

 # set my batch dir PATH=~/.myScript/:"${PATH}" 

La première ligne étant un commentaires, et la deuxième l’instruction qui ajoute le chemin vers mon dossier de script.

Pour rappel, le ~ est un raccourci pour /home/vous/, dans mon cas /home/grummfy/

Aller plus loin

En effectuant divers recherche sur votre moteur de recherche préféré (Google, live search, Yahoo, …), vous devriez pouvoir trouvez énormément de tuto pour des scripts, que se soit linux, windows, bsd, mac ou autre.

Néanmoins, voici quelques pistes :

ps : Non GNU/Linux n’est pas le seul à possédé des scripts, mais ici je m’y réfère car je parle de ce que j’ai sous la main….

FSB RC est sortie!

Je vous le disait il y a peu, la nouvelle RC de FSB 2 allait sortir.

C’est chose faites !

Les principales nouveauté sont les suivantes :

  • Chiffrement RSA pour les identifiant
  • FSBCard (idée dont je suis fier) qui permet l’export de son profil ainsi que de ses préférences
  • Un mode bas débit du forum
  • L’option d’installation rapide, génial pour les développeurs!
  • Plein de fix
  • Possibilité de mettre des sondage dans les map des message, pour rappel les maps des messages étant une présentation d’un nouveau sujet||message à posté
  • Refonte complète du système de procédure modératives

Bref on sent que la version final approche et surtout que FSB2 à un grand avenir devant lui!

Mon seul regret : le thème que je trouve bof bof

L’annonce officiel

ExperienceLibre : Fire Soft Board

Suite à mon billet précédent je vous présente le logiciel libre fire soft board ou simplement FSB.

Késako?

FSB, est un forum programmée en PHP et disponible en deux version. De plsu, il est possible d’ajouter une multitude de mods et de thèmes.

La version 1 est un forum basique et léger, fonctionnant, pur ainsi dire, que avec mysql.
La version 2 est assez léger mais comporte énormément d’options, multi-langue, multi base de données.

Ma découverte

Mon histoire avec FSB, commence à ces débuts, lorsque il était encore en cours d’élaboration. En fait, à l’époque j’utilisai PHPBB que je trouvait intéressant et empli de mods. Avec d’autre j’ai participé à la création d’une communauté belge phpbb-be, disparue aujourd’hui et je voulait créer d’autre projet afin d’aider les gens à programmer des mods et autres via phpbb.

Cependant, plus je m’intéressait, plus je trouvait que phpbb était brouillon et peu modifiable. Je me suis dit il doit bien exister autre chose! Et puis l’idée faisant son chemin, et trainant sur le forum portail-maker (aujourd’hui disparu) que dirigeait le créateur de FSB, j’ai très rapidement accroché à l’idée du nouveau forum qu’était FSB. Certes, la version 1 n’était pas l’idéal que je m’était fixé, cependant elle permettait d’être facilement modifié (vu le peu d’option dispo) et disposait de commentaire en français (ce qui à l’époque, était un problème pour moi).

Ma participation

Depuis la première beta, j’ai participer à la découverte de bug et à leur correction. J’ai donnée pas mal d’idée que se soit de mods ou de fonctionnalité. Mais j’en ai surtout fait la promotion. Pour moi, ce forum était génial dans le sens où il était nettement plus sûr que PHPBB (de part le peu de présence de FSB sur la toile et de part sa conception).

Depuis quelque temps, je suis aussi modérateurs et responsables validations des mods et rédacteurs du wiki (wiki, qui après insistance fut enfin installé!) de FSB.

J’ai aussi créer diverse prémods, mods et aide au modeurs pour FSB 1.*.*. Bref j’ai participé et participe encore a ce projet.

Mon utilisation

Pour ce qui est de l’utilisation du logiciel, je doit dire que j’ai quatre site sur lequel je l’utilise, 2 en version 1 et 2 en version 2! Je ne suis que peu déçus par FSB, même si je regrette l’absence d’une api de programmation!

Statut actuelle du logiciel

Actuellement, FSB va bientôt sortir sa version 2 qui apporte au moins deux nouveautés unique (à ma connaissance):

  • Des procédures modératives
  • Des FSBCard, un système permettant d’exporter/importer son profil utilisateur dans un autre forum (idée dont je en suis pas peu fière)!

Bien entendu cela ne se limite pas à cela.

A noter que FSB recherche des graphistes pour le projet!

Site

Je vous invite à en découvrir plus sur le site officiel est http://www.fire-soft-board.com, en français (qui à l’heure où je parle est en transformation).

Zend Framework (ZF) : un livre d’or, sixième étapes : Conclusions

Créations d’un livre d’or en 6 étapes

  1. Définition
  2. Créations des tables sql et des répertoires
  3. Bases des fichiers
  4. Affichages et ajout de messages
  5. Modification et suppression des messages
  6. Conclusions

Conclusions

Avant de faire la conclusion finale, je vais ajouter deux trois trucs au script : Dans la base de donnée ajouter trois champs : ip(varchar de 15), email(varchar de 60) et site(varchar de 60) et modifier en conséquence le fichier contrôleur

On pourrait ajouter un système de validation des messages… et encore d’autre choses.

On peux ajouter un système de cache (voir archive)

Afin de terminer en plus joli voici une feuille de style à ajouter : /public/style/site.css

 body,html { 	margin: 0px; 	font-family: Verdana,Arial,Helvetica,sans-serif; 	color: #000000; 	background-color: #ffffff; 	text-align: justify; } h1 { 	font-size: 1.4em; 	color: #800000; } #content { 	margin: 0px auto 0px auto; 	width: 500px; } .livre_block_message { 	border: 1px dotted #aaaaaa; 	margin-bottom: 1.5em; 	padding: 0.5em; } a { 	color: #800000; }

et pour qu’elle soit pris en compte on modifie header.phtml :

 ... 	<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $this->baseUrl;?>/public/style/site.css" /> </head> ...

Conclusion

Dans ce tutoriel on a :

  • Utiliser Zend_View
  • Utiliser Zend_View_Helper
  • Utiliser Zend_Db_Table
  • Utiliser Zend_Config_Ini
  • Utiliser Zend_Controller_Front

Maintenant essayer de modifier et de bien comprendre tout cela, lisez le manuel de Zend Framework et vous irez rapidement vers de plus grosses application!

Télécharger

Zend Framework (ZF) : un livre d’or, cinquième étapes : Modification et suppression des messages

Créations d’un livre d’or en 6 étapes

  1. Définition
  2. Créations des tables sql et des répertoires
  3. Bases des fichiers
  4. Affichages et ajout de messages
  5. Modification et suppression des messages
  6. Conclusions

Modification et suppression des messages

Modifions notre contrôleur :

 <?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class LivreController extends Zend_Controller_Action { 	public function indexAction() 	{ 		$livre = new livre(); 		$this->view->livres = $livre->fetchAll(); 	} 	public function ajouterAction() 	{ 		$this->view->title .= ' .: Ajout d\'un message'; 		if ($this->getRequest()->isPost()) 		{ 			Zend_Loader::loadClass('Zend_Filter_StripTags'); 			$filter = new Zend_Filter_StripTags(); 			$livre = $this->_getEmptyMsg(); 			$livre->id = null; 			$livre->nom = trim($filter->filter($this->getRequest()->getPost('nom'))); 			$livre->message = trim($filter->filter($this->getRequest()->getPost('message'))); 			if ($livre->nom != htmlspecialchars('Pseudo')) 			{ 				$livre_ = new Livre(); 				$livre_->insertObject($livre); 				$this->_redirect('/livre'); 				return; 			} 			else 			{ 				$this->view->message = 'Merci de donner votre pseudo!'; 			} 		} 		//création d'un message vide 		$this->view->livre = $this->_getEmptyMsg(); 	} 	public function modifierAction() 	{ 		//si on est aps connecter ->redirection sur le logeur 		if (!$_SESSION['connecter']) 			$this->getResponse()->setRedirect($this->view->baseUrl . '/livre/admin/'); 		$this->view->title .= ' .: Modification d\'un message'; 		//récupération du message correspondant au paramètre id 		$livreTable = new Livre(); 		$where  = $livreTable->getAdapter()->quoteInto('id = ?', intval($this->getRequest()->getParam('id'))); 		$livre = $livreTable->fetchRow($where); 		if ($this->getRequest()->isPost()) 		{ 			Zend_Loader::loadClass('Zend_Filter_StripTags'); 			$filter = new Zend_Filter_StripTags(); 			$livre->nom = trim($filter->filter($this->getRequest()->getPost('nom'))); 			$livre->message = trim($filter->filter($this->getRequest()->getPost('message'))); 			if ($livre->nom != htmlspecialchars('Pseudo')) 			{ 				$livre_ = new Livre(); 				$livre_->updateObject($livre, $livre_->getAdapter()->quoteInto('id = ?', $livre->id)); 				$this->_redirect('/livre/'); 				return; 			} 		} 		$this->view->livre = $livre; 		$this->view->action .= '/id/' . $livre->id; 		$this->render('ajouter'); 	} 	public function adminAction() 	{ 		$this->view->title .= ' .: Administration'; 		if ($this->getRequest()->isPost() && !$_SESSION['connecter']) 		{ 			if ($this->getRequest()->getPost('login') == 'admin' && $this->getRequest()->getPost('pass') == '1234') 			{ 				//bon password et bon login 				$_SESSION['connecter'] = true; 			} 		} 		elseif (!$_SESSION['connecter']) 		{ 			$this->render(); 			return; 		} 		$this->getResponse()->setRedirect($this->view->baseUrl . '/livre/'); 	} 	public function disadminAction() 	{ 		$this->view->title .= ' .: Déconnection'; 		if ($_SESSION['connecter']) 		{ 			$_SESSION['connecter'] = false; 		} 		$this->getResponse()->setRedirect($this->view->baseUrl . '/livre/'); 	} 	public function supprimerAction() 	{ 		//si on est aps connecter ->redirection sur le logeur 		if (!$_SESSION['connecter']) 			$this->getResponse()->setRedirect($this->view->baseUrl . '/livre/admin/'); 		$this->view->title .= ' .: Suppretion d\'un message'; 		$livre = $this->_getEmptyMsg(); 		$livre->id = intval($this->getRequest()->getParam('id')); 		$this->view->action .= '/id/' . $livre->id; 		if ($this->getRequest()->isPost()) 		{ 			$livre_ = new Livre(); 			if ($livre_->delete($livre_->getAdapter()->quoteInto('id = ?', $livre->id))) 				$this->view->message = 'Message supprimé!'; 			else 				$this->view->message = 'Message <b>non</b> supprimé!'; 			$this->view->message .= '<br /> Vous aller être rediriger!<br />'; 			$this->getResponse()->setRawHeader('Refresh:3; url=' . $this->view->baseUrl . '/livre/'); 		} 	} 	function init() 	{ 		session_name('goldbook'); 		session_start(); 		$_SESSION['connecter'] = isset($_SESSION['connecter'])?$_SESSION['connecter']:false; 		$this->view->connecter = $_SESSION['connecter']; 		$this->view->title = 'Livre d\'or'; 		//url de base... 		$this->view->baseUrl = $this->_request->getBaseUrl(); 		$this->view->action = $this->getRequest()->getActionName(); 		//prêt à travailler sur les livres 		Zend_Loader::loadClass('Livre'); 		//ajout des aides de view 		$this->view->addHelperPath('./app/views/helpers', 'MyWsp_View_Helper'); 		$this->view->setEscape('utf8_encode'); 	} 	/** 	 * Créer un message vide 	 * 	 * @return Object 	 */ 	protected function _getEmptyMsg() 	{ 		//création d'un message vide 		$livre = new stdClass(); 		$livre	->id = -99; 		$livre	->nom = 'Pseudo'; 		$livre	->message = 'Entrez votre message'; 		$livre	->date = time(); 		return $livre; 	} }

Il nous faut créer un système de session, et une authentification pour l’administration. Ici les choses sont très basiques, car le but n’y est pas! Donc on utilise els session php et une authentification des plus basique (login: admin, password: 1234)!

Il nous faut encore modifier index.phtml

 <?php echo $this->render('header.phtml'); ?> <?php if ($this->connecter) echo '<a href="' , $this->baseUrl , '/livre/disadmin">Se déconnecter</a>'; ?> 	<div id="livre"> 		<p><a href="<?php echo $this->baseUrl; ?>/livre/ajouter">Ajouter un message</a></p> 		<div id="livre_message"> 		<?php foreach($this->livres as $livre) : ?> 			<div class="livre_block_message"> 				<span class="livre_pseudo"><?php 					echo $this->escape($livre->nom); 				?></span> | 				<span class="livre_date">Le <?php echo $this->date('DDDD DD MMMM YYYY', $this->escape($livre->date)); ?></span> 				<br /> 				<span class="livre_message"><?php echo nl2br($this->escape($livre->message)); ?></span> 				<?php 				if ($this->connecter) 					echo '<br /><a href="' , $this->baseUrl , '/livre/modifier/id/' , $livre->id , '">Modifier</a> 					<a href="' , $this->baseUrl , '/livre/supprimer/id/' , $livre->id , '">Supprimer</a>'; 				?> 			</div> 		<?php endforeach; ?> 		</div> 	</div> <?php echo $this->render('footer.phtml'); ?>

N’oublions pas d’ajouter les fichier admin.phtml et supprimer.phtml

suprimer.html

 <?php echo $this->render('header.phtml'); ?> 	<div id="livre"> 		<strong><?php echo $this->message; ?></strong> 		<form method="post" action="<?php echo $this->baseUrl ?>/livre/<?php echo $this->action ?>" name="form_nom"> 			<div id="livre_haut"> 				<button type="submit" name="del">Supprimer?</button> 			</div> 		</form> 		<br /> 		<br /> 	</div> <?php echo $this->render('footer.phtml'); ?>

admin.phtml

 <?php echo $this->render('header.phtml'); ?> 	<div id="livre"> 		<form method="post" action="<?php echo $this->baseUrl ?>/livre/admin" name="form_nom"> 			<div id="livre_haut"> 				Login : <input type="text" name="login"> 				<br /> 				Password : <input type="password" name="pass"> 				<br /> 				<button type="submit" name="admin">Poster</button> 			</div> 		</form> 		<br /> 		<br /> 	</div> <?php echo $this->render('footer.phtml'); ?>

Comme on peux le remarquer pas besoin d’un fichier modifier.phtml car nous réutilisons ajouter.phtml via $this->render(‘ajouter’);!