Ok, merci pour tes infos. Alors voici un peu de code.
La classe
Database
<?php
final class Database
{
private static $dataBasePath = 'db/';
private static $protectedLine = '<?php exit();?>';
public static function get($fileName, $fileType = 'txt') {
$path = (self::$dataBasePath).$fileName.'.'.$fileType;
if(file_exists($path))
return file_get_contents($path);
else
return false;
}
public function set($fileName, $rawData, $fileType = 'txt') {
file_put_contents((self::$dataBasePath).$fileName.'.'.$fileType, $rawData);
//return true;
}
public static function getProtected($fileName) {
$path = (self::$dataBasePath).$fileName.'.php';
if(file_exists($path)) {
$raw = file_get_contents($path);
$raw = str_replace(self::$protectedLine.PHP_EOL, '', $raw);
return $raw;
} else {
return false;
}
}
public function setProtected($fileName, $rawData) {
$fp = fopen((self::$dataBasePath).$fileName.'.php', 'w+');
fwrite($fp, self::$protectedLine.PHP_EOL);
fwrite($fp, $rawData);
fclose($fp);
}
}
classe
Article
<?php
class Article
{
private $articleName;
private $articleDir = 'articles';
public function __construct($articleName = null) {
$this->articleName = $articleName;
}
private function getArticleFileName($articleName) {
//TODO ex : "J'aime noël !" -> "j_aime_noel__"
$articleFileName = strtolower($articleName);
$articleFileName = str_replace(' ', '_', $articleFileName);
return $articleFileName;
}
public function getArticle($articleName = null) {
$articleName = empty($articleName) ? ($this->articleName) : ($this->articleName = $articleName);
$articleContent = DataBase::get(($this->articleDir).'/'.$articleName);
return unserialize($articleContent);
}
public function setArticle($articleName, $articleContent, $option = null) {
$article['name'] = $articleName;
$article['content'] = $articleContent;
$article['author'] = $_SESSION['login']->login;
//$article['author'] = $author;
$article['date_last'] = date('d-m-y|H:i');
$article['option'] = $option;
$articleFileName = $this->getArticleFileName($articleName);
$articleRaw = serialize($article);
Database::set(($this->articleDir).'/'.$articleFileName, $articleRaw);
}
}
Et la classe
Member
<?php
///todo : catch...try
class Member
{
public $logged;
public $login;
private $memberDir = 'members';
private $dateFormat = 'd-m-y|H:i';
private $salt = '?²#-';
public function __construct($login = '')
{
if(isset($_SESSION['login']) && strlen($_SESSION['login'])>0) {
$this->logged = true;
$this->login = $login;
}
}
//To login
public function login($login, $password = null)
{
$path = $this->memberDir.'/members';
$raw = (DataBase::getProtected($path));
$members = unserialize($raw);
if(@$members[$login]==$this->hash($password) || $this->logged)
{
$this->logged = true;
$this->login = $login;
$this->setMemberOption('lastCo', date($this->dateFormat));
return true;
} else {
echo "{DEBUG:not login}";//DEBUG
//catch error
return false;
}
}
//Get Member Option (lang, flag...)
public function getMemberOption($option) { //Heritage:masquage pour admin -> ($option, $login)
if($this->logged) {
$path = $this->memberDir.'/'.$this->login;
$data = unserialize(DataBase::getProtected($path));
return $data[$option];
} else {
return false;
}
}
public function setMemberOption($option, $value) {
if($this->logged) {
$path = $this->memberDir.'/'.$this->login;
$data = unserialize(DataBase::getProtected($path));
$data[$option] = $value;
DataBase::setProtected($path, serialize($data));
return true;
} else {
return false;
}
}
//return the hash of plain text
private function hash($plain)
{
return md5($this->salt.md5($plain));
}
//create new member (if not exist)
//TODO:admin only (flag 'a')
public function newMember($login, $password, $flag = 1, $lang = 'en')
{
$path = $this->memberDir.'/members';
$raw = (DataBase::get($path));
$members = unserialize($raw);
if(!file_exists($path) || !in_array($login, $members))
{
$members[$login] = $this->hash($password);
DataBase::setProtected($path, serialize($members));
/* Options */
$path = $this->memberDir.'/'.$login;
$data = array();
$data['lang'] = $lang;
$data['lastCo'] = '';
$data['flag'] = $flag;
DataBase::setProtected($path, serialize($data));
return true;
} else {
//error
return false;
}
}
}
Puis plutôt que t'utiliser l’héritage et faire une classe Admin j'utilise un système de "flags" (un peut comme le chmod) comme ça c'est plus simple si je veux ajouter un niveau par la suite (ex: utilisateur, modérateur, admin, super-admin).
Merci !
PS: Oui, je n'utilise pas de SRGB mais je fais tout en serialize
