Composants de cette interface
Les classes
Les classes PHP5 suivantes fournissent la logique métier de cette interface :
Source de la classe faq
<?php
/**
* Classe de gestion de la FAQ
*
*/
class faq extends database {
/**
* Table contenant les questions/réponses de la faq
*
* @var string
*/
protected $faqTable = 'project_faq';
/**
* Table contenant les catégories de la faq
*
* @var string
*/
protected $faqCatTable = 'project_faq_cat';
/**
* Constructeur de la classe
*
*/
public function __construct() {
parent::__construct();
}
/**
* Liste les questions de la FAQ
*
* @param int $limit nombre de questions retournées
* @return array
*/
public function listFAQ($limit = false) {
$sql = 'SELECT A.id AS aid,A.question AS question,A.response AS answer,B.id AS bid,B.name AS cat ';
$sql .= ' FROM '.$this->faqTable.' AS A LEFT JOIN '.$this->faqCatTable.' AS B ON A.cat = B.id ';
$sql .= " WHERE A.valide = '1' ";
$sql .= " ORDER BY bid,aid ";
if($limit) {
$sql .= " LIMIT " . (int)$limit;
}
$r = $this->conn->arrayQuery($sql, SQLITE_ASSOC);
return $r;
}
/**
* Ajoute une question dans la FAQ
*
* @param int $cat id de la catégorie de la question
* @param string $question la question
* @param string $response la réponse
* @param int $valide 0 ou 1 question validée ou non
* @return void résultat de la requète
*/
public function addQuestion($cat, $question, $response='', $valide=0) {
$sql = 'INSERT INTO '.$this->faqTable.'(question,response,cat,valide) ';
$sql .= 'VALUES (';
$sql .= '"'.$this->SQLescape($question).'" , ' ;
$sql .= '"'.$this->SQLescape($response).'" , ' ;
$sql .= '"'.$this->SQLescape($cat).'" , ' ;
$sql .= '"'.$this->SQLescape($valide).'" ' ;
$sql .= ')';
//echo $sql;
return $this->conn->query($sql);
}
/**
* Efface une question
*
* @param int $id ID de la question à supprimer
* @return void résultat de la requète
*/
public function delQuestion($id) {
$sql = "DELETE FROM ".$this->faqTable."WHERE id = '".$this->SQLescape($id)."' ";
return $this->conn->query($sql);
}
/**
* Modifie une question/réponse
*
* @param int $id ID de l'entrée
* @param string $question nouvelle question
* @param string $response nouvelle réponse
* @param int $valide nouvel état de la question/réponse
*/
public function updateQuestion($id,$question,$response,$valide) {
}
/**
* Valide une question/réponse
*
* @param int $id ID de la question/réponse
* @return void Résultat de la requète
*/
public function validateQuestion($id) {
$sql = "UPDATE ".$this->faqTable." SET valide = '1' WHERE id = '".$this->SQLescape($id)."' ";
return $this->conn->query($sql);
}
/**
* Ajoute une catégorie
*
* @param string $name Nom de la catégorie
* @param string $description Description de la catégorie
* @param int $valide Etat de validité (non implémenté)
* @return void Résultat de la requète
*/
public function addCat($name, $description, $valide=1) {
$sql = 'INSERT INTO '.$this->faqCatTable.'(name,description) ';
$sql .= 'VALUES (';
$sql .= '"'.$this->SQLescape($name).'" , ' ;
$sql .= '"'.$this->SQLescape($description).'" ' ;
$sql .= ')';
return $this->conn->query($sql);
}
/**
* Supprime une catégorie
*
* @param int $id ID de la catégorie
* @return void Résultat de la requète
*/
public function delCat($id) {
$sql = "DELETE FROM ".$this->faqCatTable." WHERE id = '".$this->SQLescape($id)."' ";
return $this->conn->query($sql);
}
/**
* Modifie une catégorie
*
* @param int $id ID de la catégorie
* @param string $name Nouveau nom de la catégorie
* @param string $description Nouvelle description de la catégorie
* @param int $valide Nouvel état de validité de la catégorie (non implémenté)
* @return void Résultat de la requète
*/
public function updateCat($id,$name,$description,$valide=1) {
$sql = 'UPDATE '.$this->faqCatTable;
$sql .= " SET name = '".$this->SQLescape($name)."' , ";
$sql .= " description = '".$this->SQLescape($description)."' ";
$sql .= " WHERE id = '".$this->SQLescape($id)."' ";
return $this->conn->query($sql);
}
/**
* Récupère les informations d'une catégorie
*
* @param int $id ID de la catégorie
* @return array Résultats
*/
public function getCatInfos($id) {
$sql = 'SELECT id, name, description FROM '.$this->faqCatTable;
$sql .= " WHERE id = '".$this->SQLescape($id)."' ";
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Liste les catégories
*
* @return array Résultat
*/
public function listCat() {
$sql = 'SELECT id, name, description FROM '.$this->faqCatTable;
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Récupère les questions en attente de validation
*
* @return array Résultat
*/
public function getWaitingQuestions() {
$sql = "SELECT id, question, response FROM ".$this->faqTable." WHERE valide = '0' ";
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Effectue une recherche dans la FAQ
*
* @param string $s la recherche
* @return array Résultat
*/
public function searchFAQ($s) {
$sql = 'SELECT question,response,name FROM '.$this->faqTable.' AS A';
$sql .= ' LEFT JOIN '.$this->faqCatTable.' AS B ON A.cat = B.id WHERE ';
$sql .= "question LIKE '%".$this->SQLescape($s)."%' ";
$sql .= "OR response LIKE '%".$this->SQLescape($s)."%' ";
$sql .= "OR name LIKE '%".$this->SQLescape($s)."%' ";
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Créé la table SQLite de la faq
*
* @return void Résultat de la requète
*/
public function createFaqTable() {
$sql = 'CREATE TABLE '.$this->faqTable.' (
id INTEGER AUTOINCREMENT,
question VARCHAR ,
response VARCHAR ,
cat INTEGER,
valide INT ,
PRIMARY KEY(id)
)';
return $this->conn->query($sql);
}
/**
* Créé la table SQLite des catégories de la faq
*
* @return void Résultat de la requète
*/
public function createFaqCatTable() {
$sql = 'CREATE TABLE '.$this->faqCatTable.' (
id INTEGER AUTOINCREMENT,
name VARCHAR ,
description VARCHAR ,
PRIMARY KEY(id)
)';
return $this->conn->query($sql);
}
} // end class
?>
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) )
