Composants de cette interface
Les classes
Les classes PHP5 suivantes fournissent la logique métier de cette interface :
Source de la classe projectFiles
<?php
/**
* Classe de gestion des fichiers
*
* @author fab
* @since 2006-01-23
* @version 0.2
*/
class projectFiles extends database{
/**
* Table des fichiers
*
* @var string
*/
public $projectFilesTable = 'project_files';
/**
* Table des anciens fichiers
*
* @var string
*/
public $projectOldFilesTable = 'old_project_files';
/**
* Constructeur de la classe
*
*/
public function __construct() {
parent::__construct();
}
/**
* Retourne le hash SHA1 d'un fichier
*
* @param string $file Chemin vers le fichier
* @return string Hash
*/
public function buildHash($file) {
$f = sha1_file($file);
return $f;
}
/**
* Insère les informations d'un fichier dans la table sqlite
*
* @param string $dir
* @param string $file
* @param unknown_type $user
* @param unknown_type $hash
* @param unknown_type $date
* @param unknown_type $valide
* @return void Résultat de la requète
*/
public function insertFile($dir,$file,$user,$hash,$date,$valide=0) {
$sql = 'INSERT INTO '.$this->projectFilesTable.' (user,file,directory,add_date,hash,valide) VALUES ';
$sql .= '(';
$sql .= '"' . $this->SQLescape($user) . '",';
$sql .= '"' . $this->SQLescape($file) . '",';
$sql .= '"' . $this->SQLescape($dir) . '",';
$sql .= '"' . $this->SQLescape($date) . '",';
$sql .= '"' . $hash . '",';
$sql .= '"'.$valide.'"';
$sql .= ')';
$r = $this->conn->query($sql);
if($r) {
return $this->conn->lastInsertRowid();
} else {
return false;
}
}
/**
* Récupère les anciennes versions d'un fichier
*
* @param string $dir Le répertoire
* @param string $file Le fichier
* @return array Résultat
*/
public function getLastVersions($dir,$file) {
$sql = 'SELECT id, add_date FROM '.$this->projectOldFilesTable.' WHERE ';
$sql .= "directory = '".$this->SQLescape($dir)."' ";
$sql .= "AND file = '".$this->SQLescape($file)."' ";
$r = $this->conn->arrayQuery($sql, SQLITE_ASSOC);
return $r;
}
/**
* Récupère l'ancienne versions d'un fichier selon son ID
*
* @param int $id ID du fichier
* @return array Résultat
*/
public function getLastVersionByID($id) {
$sql = 'SELECT id,directory,hash,del_date,file FROM '.$this->projectOldFilesTable.' WHERE ';
$sql .= "id = '".$this->SQLEscape($id)."' ";
$r = $this->conn->arrayQuery($sql, SQLITE_ASSOC);
return $r;
}
/**
* Récupère les informations d'un fichier selon son ID
*
* @param int $id ID du fichier
* @return array Résultat
*/
public function getFileByID($id) {
$sql = 'SELECT id,directory,hash,add_date,file,user FROM '.$this->projectFilesTable.' WHERE ';
$sql .= "id = '".$this->SQLEscape($id)."' ";
$r = $this->conn->arrayQuery($sql, SQLITE_ASSOC);
return $r;
}
/**
* Récupère la liste des fichiers en attente de validation pour un fichier préçis
*
* @param string $dir Répertoire
* @param string $file Fichier
* @return array Résultat
*/
public function getWaitingVersions($dir,$file) {
$sql = 'SELECT id,add_date FROM '.$this->projectFilesTable.' WHERE ';
$sql .= "directory = '".$this->SQLEscape($dir)."' ";
$sql .= "AND file = '".$this->SQLEscape($file)."' ";
$sql .= "AND valide='0'";
$r = $this->conn->arrayQuery($sql, SQLITE_ASSOC);
return $r;
}
/**
* Récupère tous les fichiers en attente
*
* @return array Résultat
*/
public function getFilesToValidate() {
$sql = "SELECT id,directory,file,user,hash FROM ".$this->projectFilesTable." WHERE valide = '0' ";
$sql .= 'ORDER BY directory ASC, file ASC,add_date DESC, id DESC';
return $this->conn->arrayQuery($sql, SQLITE_ASSOC);
}
/**
* Valide un fichier en attente et le deplace
*
* @param int $id ID du fichier
* @return array Résultat - Informations sur le fichier
*/
public function updateFile($id) {
$sql1 = "SELECT directory,file,id,hash,user,add_date
FROM ".$this->projectFilesTable." WHERE id = '".$this->SQLescape($id)."' ";
$r1 = $this->conn->arrayQuery($sql1, SQLITE_ASSOC);
if(!$r1) {
return false;
}
$oldpage = PROJECT_DIR .$r1[0]['directory'] . $r1[0]['file'];
if(file_exists($oldpage)) {
$hash = $this->buildHash($oldpage);
// fichier en attente
$tmppage = 'uploads/' . $r1[0]['hash'] . '-'. $r1[0]['id']. '.hash';
$hash2 = $this->buildHash($tmppage);
$newid = $this->replaceFile($r1[0]['directory'], $r1[0]['file'],$r1[0]['user'],$hash2,$r1[0]['add_date']);
// deplcaement du fichier actuel vers le OLD
copy($oldpage, 'oldpages/' . $hash . '-'.$newid.'.hash');
// deplacement du fichier en attente vers le fichier courant
copy($tmppage, $oldpage);
// effacement du fichier en attente
unlink($tmppage);
}
$sql = "UPDATE ".$this->projectFilesTable." SET valide = '1' WHERE id = '".$this->SQLescape($id)."' ";
$this->conn->query($sql);
return $r1;
}
/**
* Insère les informations du fichier dans la table des "vieux" fichiers
*
* @param string $dir Répertoire
* @param string $file fichier
* @param int $user ID de l'utilisateur
* @param string $hash SHA1 hash du fichier
* @param string $date Date du premier ajout du fichier
* @return void ID ajouté ou false
*/
protected function replaceFile($dir,$file,$user,$hash,$date) {
$sql = 'INSERT INTO '.$this->projectOldFilesTable.' (user,file,directory,add_date,hash,del_date) VALUES ';
$sql .= '(';
$sql .= '"' . $this->SQLescape($user) . '",';
$sql .= '"' . $this->SQLescape($file) . '",';
$sql .= '"' . $this->SQLescape($dir) . '",';
$sql .= '"' . $this->SQLescape($date) . '",';
$sql .= '"' . $hash . '",';
$sql .= '"'.date('Y-m-d H:i:s').'"';
$sql .= ')';
$r = $this->conn->query($sql);
if($r) {
return $this->conn->lastInsertRowid();
} else {
return false;
}
}
/**
* Liste les derniers fichiers ajoutés
*
* @return array Résultats
*/
public function listLastAddedFiles() {
$sql = ' SELECT directory,file,id,hash,user,add_date
FROM '.$this->projectFilesTable.' WHERE valide = 1 ORDER BY add_date DESC LIMIT 10';
return $this->conn->arrayQuery($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) )
