PHPWorkGroup

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($sqlSQLITE_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($sqlSQLITE_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($sqlSQLITE_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($sqlSQLITE_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($sqlSQLITE_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($sql1SQLITE_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)
)

Autres

 
Bannière publicitaire