Composants de cette interface
Les classes
Les classes PHP5 suivantes fournissent la logique métier de cette interface :
Source de la classe wall
<?php
/**
* Gestion du wall
*
* @author fab
* @version 0.3
* @since 2006-02-12
*/
class wall extends database {
/**
* Table contenant les wall
*
* @var string
*/
protected $wallTable = 'project_wall';
/**
* Dernier wall ajouté
*
* @var int
*/
public $lastWall = false;
/**
* Constructeur de la classe
*
*/
public function __construct() {
parent::__construct();
}
/**
* Vérifie les données POST
*
* @return bool
*/
public function verifPOST() {
if(empty($_POST['description']) || empty($_POST['code'])) {
return false;
} else {
return true;
}
}
/**
* Récupère un wall selon son ID
*
* @param int $id ID du wall
* @return array Résultat
*/
public function getWallByID($id) {
$id = $this->SQLescape($id);
$sql = "SELECT id,add_date,name,description,code FROM $this->wallTable WHERE id = $id ";
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Récupère les derniers walls proposés
*
* @param int $limit Nombre de résultats retournés
* @return array Résultats
*/
public function getLastWalls($limit=5) {
$sql = "SELECT id,add_date,name,description,code FROM $this->wallTable ORDER BY id DESC LIMIT $limit";
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Sauvegarde un wall
*
* @param string $description description du wall
* @param string $code code source
* @param string $name posteur
* @return int ID inséré
*/
public function saveWallToDB($description,$code,$name='') {
$date = date('Y-m-d H:i:s');
$sql = " INSERT INTO $this->wallTable (add_date,name,description,code)
VALUES ('$date', '".$this->SQLescape($name)."',
'".$this->SQLescape($description)."', '".$this->SQLescape($code)."') ";
$r = $this->conn->query($sql);
return $this->lastWall = $this->conn->lastInsertRowid();
}
/**
* Construie le code html pour l'affichage d'un wall
*
* @param int $id ID du wall
* @param bool $ln avec ou sans les numéros de ligne
* @return string HTML
*/
public function displayWall($id, $ln=true) {
$ww = $this->getWallByID($id);
if(!isset($ww[0])) {
return '<p class="form_error">Le wall demandé n\'éxiste pas.</p>';
}
$h = new highlight();
$h->loadString($ww[0]['code']);
$r = '<h3>Wall N° '.htmlspecialchars($id).'</h3>';
$r .= '<div style="margin:1em;">';
if($ln) {
$r .= '<a href="/wall-'.htmlspecialchars($id).'-nln.html#wall" title="">Afficher sans les numéros de ligne</a>';
} else {
$r .= '<a href="/wall-'.htmlspecialchars($id).'.html#wall" title="">Afficher avec les numéros de ligne</a>';
}
$r .= '</div>';
$r .= '<div class="walldescription">
<!-- <strong>Description du problème</strong> : <br/><br/>
'.nl2br(htmlentities($ww[0]['description'])).'
<br/><br/>--></div>';
$r .= '<div class="code">';
if($ln) {
$r .= $h->toList();
} else {
$r .= $h->toHtml();
}
$r .= '</div>';
return $r;
}
}
?>
Les tables SQLite
Cette interface utilise uniquement des bases de données SQLite, voici les tables utilisées :
CREATE TABLE project_users ( id INTEGER AUTOINCREMENT, user VARCHAR , email VARCHAR , firstname VARCHAR , lastname VARCHAR , passhash VARCHAR, controlhash VARCHAR, inscription DATETIME, level INT , description TEXT, PRIMARY KEY(id) )
CREATE TABLE project_lost_pass ( id INTEGER AUTOINCREMENT, user INTEGER , controlhash VARCHAR, modification DATETIME, PRIMARY KEY(id) )
CREATE TABLE pub ( id INTEGER AUTOINCREMENT, nom_site VARCHAR , url_site VARCHAR , description_site VARCHAR, contact_site VARCHAR, url_banniere VARCHAR, url_logo VARCHAR, date_debut DATETIME, date_fin DATETIME, affichages INT, limite_affichages INT, valide INT , PRIMARY KEY(id) )
CREATE TABLE project_faq ( id INTEGER AUTOINCREMENT, question VARCHAR , response VARCHAR , cat INTEGER, valide INT , PRIMARY KEY(id) )
CREATE TABLE project_faq_cat ( id INTEGER AUTOINCREMENT, name VARCHAR , description VARCHAR , PRIMARY KEY(id) )
CREATE TABLE project_files ( id INTEGER AUTOINCREMENT, user VARCHAR , file VARCHAR , directory VARCHAR, add_date DATETIME, hash VARCHAR, valide INT , PRIMARY KEY(id) )
CREATE TABLE old_project_files ( id INTEGER AUTOINCREMENT, user VARCHAR , file VARCHAR , directory VARCHAR, add_date DATETIME, del_date DATETIME, hash VARCHAR, PRIMARY KEY(id) )
CREATE TABLE project_wall ( id INTEGER AUTOINCREMENT, name VARCHAR , add_date DATETIME, description VARCHAR, code TEXT, valide INT , PRIMARY KEY(id) )
