Jump to content
×
×
  • Create New...

Class - kConfigEditor : Un Editeur de Configuration pour kowFramework


Sgt Fatality
 Share

Recommended Posts

  • Retraité

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

De plus en plus l'idée de créer un CMS basé sur mon framework kowFramework devient réalité. Que ce soit pour l'émulation Dofus, Metin2 ou en général j'ai envie de travailler sur un CMS générique facile d'utilisation. kowFramework a été conçu dans l'optique d'être une base de développement simple et légère. Mais également de pouvoir devenir un outil puissant grâce aux nombreuses librairies, plugins et modules qui seront développé par la suite (que ce soit par la communauté ou par moi-même). Je vous présente donc une des premières librairies qui permet l'édition des fichiers de configuration (actuellement ajout et modification des paramètres d'un fichier de configuration).

 

GitHub :

Hidden Content

    Give reaction to this post to see the hidden content.

 

KCONFIGEDITOR.PHP

 

Révélation


<?php
/**
 * New BSD License
 *
 * Copyright (C) 2013 Kevin Ryser (http://framework.koweb.ch) All rights reserved
 * See the LICENSE file for the full license text.
 */
Class ConfigEditor
{
	private $_file_path = '';
	private $_file_data = '';
	private $_array_depth = 0;
	public function __construct($file_path)
	{
		$this->_file_path = $file_path;
	}
	public function open()
	{
		if (is_file($this->_file_path))
			$this->_file_data = file_get_contents($this->_file_path);
		if ($this->_file_data)
			return true;
		return false;
	}
	public function to_text_array($value)
	{
		$arr = '';
		++$this->_array_depth;
		foreach ($value as $k => $v)
		{
			if (empty($arr))
				$arr .= "array(\r\n";
			for ($i = 0; $i < $this->_array_depth; ++$i)
				$arr .= '	';
			if (is_array($v))
				$arr .= ((is_string($k)) ? '\'' . $k . '\'' : $k) . ' => ' . $this->to_text_array($v);
			else
			{
				// Not very clean but constant function throw an excepetion if the constant doesn't exist...
				if (DEBUG_MODE)
					error_reporting(0);
				if (is_string($k))
				{
					$arr .= ((!constant($k)) ? '\'' . $k . '\'' : $k) . ' => ';
					$arr .= ((is_string($v) and !constant($v)) ? '\'' . $v . '\'' : $v) . ",\r\n";
				}
				else
					$arr .= ((is_string($v) and !constant($v)) ? '\'' . $v . '\'' : $v) . ",\r\n";
				// Enable debug mode again
				if (DEBUG_MODE)
					error_reporting(E_ALL | E_STRICT);
			}
		}
		--$this->_array_depth;
		for ($i = 0; $i < $this->_array_depth; ++$i)
			$arr .= '	';
		$value = $arr . ')';
		if ($this->_array_depth != 0)
			$value .= "\r\n";
		return $value;
	}
	public function set($key, $value, $comment = null)
	{
		if (is_array($value))
			$value = $this->to_text_array($value);
		elseif (is_bool($value))
			$value = ($value) ? 'true' : 'false';
		elseif (is_float($value))
			$value = floatval($value);
		elseif (is_int($value))
			$value = intval($value);
		elseif (empty($value))
			$value = 'false';
		else
			$value = '\'' . addslashes($value) . '\'';
		if (preg_match('/\$config\[["\']' . $key . '["\']\](.*);/msU', $this->_file_data))
			$this->_file_data = preg_replace('/\$config\[["\']' . $key . '["\']\](.*);/msU', "\$config['" . $key . "'] = " . $value . ";", $this->_file_data);
		else
			$this->_file_data .= PHP_EOL . '$config[\'' .  $key . '\'] = ' . $value . ';';
		$this->_array_depth = 0;
	}
	public function save()
	{
		return file_put_contents($this->_file_path, $this->_file_data, LOCK_EX) !== false;
	}
}
?>

 

 

TUTORIEL

 

Révélation

Une librairie pour l'édition des fichiers de configuration pour le framework PHP kowFramework. Placer la librairie dans le dossier "librairies" de kowFramework. Charger la librairie dans le contrôleur, passer en paramètre le chemin vers le fichier et ouvrir le fichier :



<?php
	$configEditor = $this->load()->library('kConfigEditor/ConfigEditor', 'test.php');
	if (!$configEditor->open()){
		echo 'Erreur lors de l\'ouverture du fichier de configuration. Si vous décidez de sauvegarder le fichier celui-ci sera créé.';
	}
?>

Modifier et / ou ajouter des paramètres du fichier de configurations :



<?php
	// Si le paramètre existe, il est modifié.
	$configEditor->set('default_controller', 'page');
	// S'il n'existe pas, il est ajouté à la fin du fichier.
	$configEditor->set('plugins', array('MyPlugins1', 'MyPlugins2'));
?>

Sauvegarder les changements dans le fichier :



<?php
	// Si le fichier n'existe pas, il est créé automatiquement.
	$configEditor->save();
?>

Résultat : fichier test.php :



<?php
	// Avant
	$config['default_controller'] = 'news';
	
	// Après
	$config['default_controller'] = 'page';

	$config['plugins'] = array('MyPlugins1', 'MyPlugins2');
?>

Les constantes sont supportées mais il faut les déclarer en tant que chaîne de caractères (string) :



<?php
	// Exemple
	$configEditor->set('database', array(
		'PDO::MYSQL_ATTR_INIT_COMMAND' => 'SET NAMES utf8',
		'PDO::ATTR_ERRMODE',
		'PDO::ERRMODE_WARNING',
	));
	
	// Résultat dans le fichier de configuration
	$config['database'] = array(
		PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
		PDO::ATTR_ERRMODE,
		PDO::ERRMODE_WARNING,
	);
?>

Cas concret, édition / ajout de la configuration d'une base de données :



<?php
	// A noter les constantes PDO définie comme chaîne de caractères (string).
	$configEditor->set('database', array(
		'kowcms' => array(
			'host' 		=> 'localhost',
			'port'		=> 3306,
			'username'	=> 'root',
			'password'	=> '',
			'options'	=> array(
				'PDO::MYSQL_ATTR_INIT_COMMAND' => 'SET NAMES utf8',
				'PDO::ATTR_ERRMODE', 'PDO::ERRMODE_WARNING'
			)
		)
	));
	
	// Résultat dans le fichier de configuration
	$config['database'] = array(
		'kowcms' => array(
			'host' => 'localhost',
			'port' => 3306,
			'username' => 'root',
			'password' => '',
			'options' => array(
				PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
				PDO::ATTR_ERRMODE,
				PDO::ERRMODE_WARNING,
			)
		)
	);
?>

 

 

Bonne journée,

Sgt Fatality

Link to comment
Share on other sites

  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

  • Retraité

Je vais améliorer la librairie très prochainement pour ajouter la lecture et l'écriture sur plusieurs lignes (plus lisible pour les tableaux par exemple) et je vais également voir pour ajouter le support des commentaires.

Link to comment
Share on other sites

  • Retraité

Bonjour,

 

J'ai mis à jour ce matin la librairie pour supporter les paramètres sur plusieurs lignes (tableau par exemple) et les tableaux sont maintenant écris sur plusieurs lignes dans le fichier de configuration pour une meilleure lisibilité. La librairie supporte maintenant les constantes (PDO par exemple), il faut juste définir la constante comme chaîne de caractères (string), à placer entre guillemet.

 

La documentation se trouve sur le dépôt Github.

 

Bonne journée,

Sgt Fatality

Link to comment
Share on other sites

Yop !

Tout d'abords, superbe taf' de ta part :).

 

Ensuite j'ai remarqué une erreur dans ta doc :

$configEditor = $this->load()->library('kConfigEditor/ConfigEditor', 'test.php');
if (!$configEditor->open())
   echo 'Erreur lors de l'ouverture du fichier de configuration. Si vous décidez de sauvegarder le fichier celui-ci sera créé.';

 

L'apostrophe n'est pas échappé donc mal compilé (voir pas du tout :P).

 

Je vais voir tes avancements sur le kfw ;). J'essayerais peut-être de coder un de mes projets (aussi nombreux soit-ils) avec le kfw :P.

 

Cordialement,

ThanosS.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share



  • Flux d'Activité

    1. 30

      AresiaCMS

    2. 30

      AresiaCMS

    3. 30

      AresiaCMS

    4. 66

      Decay 2.51

    5. 0

      PACK Dofus Arcenciel

    6. 0

      Partage Ornament L'attaque des Titans

  • Recently Browsing

    • No registered users viewing this page.

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.