2021-04-22 02:19:52 +02:00
< ? php
/**-----------------------------------------------
*
* Rooty , 2018 < rooty @ rooty . me >
*
*
* This software is protected by copyright , please
* read the file COPYRIGHT .
* This program is distributed in the hope that it
* will be useful , but without any warranty ; without
* even the implied warranty of merchantability or
* fitness for a particular purpose . Please
* read the file LICENCE .
*
* Fichier package . upload . php
* Ce fichier contient les classe de gestion d ' upload
* Il est a inclure dans votre script avec l ' instruction includePackage ( upload . php )
*
* @ author Rooty < www . rooty . me | rooty @ rooty . me >
* @ since 2005 / 03 / 09
* @ link www . rooty . me
* @ version 0.3
* @ package package
* @ subpackage upload
* @ copyright Copyright & copy ; 2009 - 2018 , Rooty
*/
if ( ! defined ( 'SYSTEM_IN' ) )
{
die ( " Hacking attempt " );
}
/**
* Temps autorisé pour l ' upload
*/
define ( 'CONF_UPLOAD_TIME' , 10000 );
/**
* Permet la gestion des limites d ' upload
* Cette classe n ' est pas à utiliser directement < br />
* Voir ses extention :
* - UploadToDir
* - UploadToDb
* Le fichier est a inclure dans votre script avec l ' instruction includePackage ( upload . php )
* @ package package
* @ subpackage upload
*/
class UploadLimit
{
/** #@+
* @ access private
*/
/**
* @ var chaine
* @ desc identifiant du noeud de limitation
*/
var $nid = 0 ;
/**
* @ var chaine
* @ desc objet treeNode ...
*/
var $treeNode = null ;
/**
* @ var chaine
* @ desc identifiant de l ' utilisateur courant
*/
var $uid = 0 ;
/**#@-*/
/**
* Constructeur de la classe Upload PHP4
*
* @ access public
* @ param chaine nom du champ
*/
function UploadLimit ( $nid = " " , $uid = " " )
{
$this -> __construct ( $nid , $uid );
}
/**
* Constructeur de la classe Upload PHP5
*
* @ access public
* @ param chaine nom du champ
*/
function __construct ( $nid = " " , $uid = " " )
{
$this -> setNid ( (( $nid != " " ) && ( is_numeric ( $nid ))) ? $nid : nid () );
$this -> setUid ( (( $uid != " " ) && ( is_numeric ( $uid ))) ? $uid : nid () );
}
/**
* setteur du nid , indique a quel endroit on prend une limitation
* @ access public
* @ param entier id du noeud
*/
function setNid ( $id )
{
$this -> nid = $id ;
$this -> treeNode = $GLOBALS [ " SYSTEM_MANAGER " ][ " TREE_NODE " ] -> createInstance ( $id );
}
/**
* getteur du nid , indique a quel endroit on prend une limitation
* @ access public
* @ param entier id du noeud
*/
function getNid ()
{
return $this -> nid ;
}
/**
* setteur de l ' uid , indique a quel endroit on prend une limitation
* @ access public
* @ param entier id du noeud
*/
function setUid ( $id )
{
$this -> uid = $id ;
}
/**
* getteur de l ' uid , indique a quel endroit on prend une limitation
* @ access public
* @ param entier id du noeud
*/
function getUid ()
{
return $this -> uid ;
}
/**
* recupere l ' espace utilisé pour le noeud
* @ access protected
* @ todo modifier pour que la gestion se fasse sur l ' oid
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param entier id du noeud
*/
function getUseSpace ( $nid = " " , $uid = " " )
{
$nid = ( isset ( $nid ) && is_numeric ( $nid )) ? $nid : $this -> getNid (); // par défaut le nid de l'obj
$uid = ( isset ( $uid ) && is_numeric ( $uid )) ? $uid : 0 ; // par défaut 0
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$treeNode = $GLOBALS [ " SYSTEM_MANAGER " ][ " TREE_NODE " ] -> createInstance ( $nid );
$tabNode = $treeNode -> getSonArray ();
$tabNode [] = $treeNode -> getId ();
/* Consultation dans la table des entête de fichier du poid des docs pour ces noeuds */
$sql = " SELECT sum(file_size) as sum FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE " ;
/* Calcul des opt pour les noeuds */
$sql .= " ( file_nid= " . $this -> getNid ();
if ( count ( $tabNode ) > 1 )
{
for ( $i = 0 ; $i < count ( $tabNode ); $i ++ )
{
$sql .= " OR file_nid= " . $tabNode [ $i ];
}
}
$sql .= " ) " ;
/* si c uniquement pour 1 utilisateur */
if ( $uid != 0 )
{
$sql .= " AND (file_uid= " . $uid . " ) AND file_limit_owner=1 " ;
}
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
return $row [ " sum " ];
} else {
return 0 ;
}
}
/**
* recupere la taille affectée à un utilisateur
* fonctionne récursivement si la limite utilisateur n ' est pas fixée sur le noeud mm < br />
* consulte la table user_space
* @ access public
* @ param entier id du noeud
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function getMaxSpaceForUser ( $nid = " " , $uid = 0 )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$nid = ( $nid != " " ) ? $nid : $this -> getNid ();
$sql = " SELECT user_space FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " user_space WHERE " ;
$sql .= " user_space_nid= " . $nid . " AND ( user_space_uid= " . $this -> getUid () . " OR user_space_uid=0 ) ORDER BY user_space_uid DESC " ; # l'ordre permet de gérer si l'uid de l'utilisateur existe
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () > 0 )
{
for ( $i = 0 ; $i < $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows (); $i ++ )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
return $row [ " user_space " ];
} else {
if ( $nid != 0 )
{
$Node = $this -> treeNode -> getNodeId ( $nid );
return $this -> getMaxSpaceForUser ( $Node -> getIdPere () );
} else {
return false ;
}
}
}
/**
* recupere la taille affectée à un utilisateur
* fonctionne récursivement si la limite utilisateur n ' est pas fixée sur le noeud mm < br />
* consulte la table user_space
* @ access public
* @ param entier id du noeud
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function getSingleMaxSpaceForUser ( $nid = " " , $uid = 0 )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$nid = ( $nid != " " ) ? $nid : $this -> getNid ();
$sql = " SELECT user_space FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " user_space WHERE " ;
$sql .= " user_space_nid= " . $nid . " AND ( user_space_uid= " . $uid . " ) ORDER BY user_space_uid DESC " ; # l'ordre permet de gérer si l'uid de l'utilisateur existe
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () > 0 )
{
for ( $i = 0 ; $i < $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows (); $i ++ )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
return $row [ " user_space " ];
} else {
return false ;
}
}
/**
* recupere la taille affectée à un noeud
* fonctionne récursivement si la limite n ' est pas fixée sur le noeud mm < br />
* consulte la table user_space
* @ access public
* @ param entier id du noeud
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function getMaxSpaceForNode ( $nid = " " )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$nid = ( $nid != " " ) ? $nid : $this -> getNid ();
$sql = " SELECT node_space FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space WHERE " ;
$sql .= " node_space_nid= " . $nid . " " ; # l'ordre permet de gérer si l'uid de l'utilisateur existe
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () > 0 )
{
for ( $i = 0 ; $i < $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows (); $i ++ )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
return $row [ " node_space " ];
} else {
if ( $nid != 0 )
{
$Node = $this -> treeNode -> getNodeId ( $nid );
return $this -> getMaxSpaceForNode ( $Node -> getIdPere () );
} else {
return false ;
}
}
}
/**
* recupere la taille affectée à un noeud
* fonctionne récursivement si la limite n ' est pas fixée sur le noeud mm < br />
* consulte la table user_space
* @ access public
* @ param entier id du noeud
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function getSingleMaxSpaceForNode ( $nid = " " )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$nid = ( $nid != " " ) ? $nid : $this -> getNid ();
$sql = " SELECT node_space FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space WHERE " ;
$sql .= " node_space_nid= " . $nid . " " ; # l'ordre permet de gérer si l'uid de l'utilisateur existe
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () > 0 )
{
for ( $i = 0 ; $i < $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows (); $i ++ )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
return $row [ " node_space " ];
} else {
return false ;
}
}
/**
* recupere la taille affectée à un noeud
* fonctionne récursivement si la limite n ' est pas fixée sur le noeud mm < br />
* consulte la table node_space
* @ access public
* @ param entier id du noeud
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function isSetNodeLimit ( $nid = " " )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$nid = ( $nid != " " ) ? $nid : $this -> getNid ();
$sql = " SELECT node_space FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space WHERE " ;
$sql .= " node_space_nid= " . $nid . " " ; # l'ordre permet de gérer si l'uid de l'utilisateur existe
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () > 0 )
{
return true ;
} else {
return false ;
}
}
/**
* recupere la taille affectée à un noeud
* fonctionne récursivement si la limite n ' est pas fixée sur le noeud mm < br />
* consulte la table user_space
* @ access public
* @ param entier id du noeud
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function getDownMaxSpaceForNode ( & $tree , $nid = " " )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$nid = ( $nid != " " ) ? $nid : $this -> getNid ();
/* Génération de l'option */
$opt = " " ;
$tab = $tree -> getSonOfIdPereArray ( $nid );
$tabtmp = $tree -> getSonOfIdPereArray ( $nid );
/* on exploite tous les sous noeud */
while ( count ( $tabtmp ) > 0 )
{
$tabtoTest = array ();
$tab = array_merge ( $tab , $tabtmp );
for ( $i = 0 ; $i < count ( $tabtmp ); $i ++ )
{
$tabtoTest = array_merge ( $tree -> getSonOfIdPereArray ( $tabtmp [ $i ]), $tabtoTest );
}
$tabtmp = $tabtoTest ;
}
$tab = array_merge ( $tab , array ( $nid ));
$opt = " " ;
for ( $i = 0 ; $i < count ( $tab ); $i ++ )
{
if ( $i > 0 )
$opt .= " OR " ;
$opt .= " node_space_nid= " . $tab [ $i ];
}
$sql = " SELECT * FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space WHERE " ;
$sql .= " " . $opt ; # l'ordre permet de gérer si l'uid de l'utilisateur existe
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
if ( $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows () == 0 || ( count ( $tab ) == 0 ) )
return 0 ;
// Alimentation du tableau de résultat
for ( $i = 0 ; $i < $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_numrows (); $i ++ )
{
$row [ $i ] = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
return $this -> treeTabSizeForNid ( $row , $tree , $nid );
}
// Traitement en fonction de l'arbo
function treeTabSizeForNid ( & $tabRow , & $tree , $nid )
{
$val = 0 ;
$tabSonOfNid = $tree -> getSonOfIdPereArray ( $nid );
// on recupere la valeur associée
for ( $j = 0 ; $j < count ( $tabRow ); $j ++ )
{
if ( $tabRow [ $j ][ " node_space_nid " ] == $nid )
{
$find = true ;
return $tabRow [ $j ][ " node_space " ];
}
}
// Pour chaque fils du noeud courant
for ( $i = 0 ; $i < count ( $tabSonOfNid ); $i ++ )
{
$find = false ;
// on recupere la valeur associée
for ( $j = 0 ; $j < count ( $tabRow ); $j ++ )
{
if ( $tabRow [ $j ][ " node_space_nid " ] == $tabSonOfNid [ $i ])
{
$find = true ;
$val += $tabRow [ $j ][ " node_space " ];
break ;
}
}
if ( ! $find )
$val += $this -> treeTabSizeForNid ( $tabRow , $tree , $tabSonOfNid [ $i ]);
}
return $val ;
}
/**
* recupere la taille restante pour 1 noeud &&|| 1 utilisateur
* on indiquera ici si on fonctionne en mode :
* - user ( le poids s 'applique pour l' utilisateur ) < br />
* - node ( le poids est relatif a l ' arbo uniquement )
*
* @ access public
* @ param chaine " NODE " || " USER "
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function getFreeSpace ( $mode = " NODE " )
{
$nid = ( isset ( $nid ) && is_numeric ( $nid )) ? $nid : $this -> getNid (); // par défaut le nid de l'obj
if ( $mode == " NODE " ){
$useSpace = $this -> getUseSpace ( $nid , " " );
$maxSpaceNode = $this -> getMaxSpaceForNode ();
/* on renvoi la valeur min entre quota sur noeud ou utilisateur */
return ( $maxSpaceNode - $useSpace );
2021-04-22 02:25:26 +02:00
} elseif ( $mode == " USER " ){
$maxSpaceNode = $this -> getMaxSpaceForNode ();
$useUserSpace = $this -> getUseSpace ( $nid , $this -> getUid () ); // spaceUsed By user
$useNodeSpace = $this -> getUseSpace ( $nid , " " ); // spaceUsed By node
$maxSpaceUser = $this -> getMaxSpaceForUser ();
2021-04-22 02:19:52 +02:00
/* on renvoi la valeur min entre quota sur noeud ou utilisateur */
return ( ( $maxSpaceNode - $useNodeSpace ) < ( $maxSpaceUser - $useUserSpace ) ) ? ( $maxSpaceNode - $useNodeSpace ) : ( $maxSpaceUser - $useUserSpace );
}
}
/**
* la taille du fichier est valide pour la communautée ( et l ' utilisateur si celui - ci remplis )
* si on remplis l ' utilisateur , on passe en mode , utilisateur propriétaire du fichier
* @ access public
* @ param entier taille du fichier
* @ param chaine NODE || USER ( gestion de la propriété pour 1 utilisateur ou 1 noeud )
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function isValidSize ( $size , $mode = " NODE " )
{
return ( $this -> getFreeSpace ( $mode ) < $size ) ? true : false ;
}
/**
* ajoute la creation d ' une limite sur utilisateur
* @ access public
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param limite
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function createUserLimit ( $nid , $uid , $limit )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$sql = " INSERT INTO " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " user_space (user_space_uid, user_space_nid, user_space) VALUES ( " . $uid . " , " . $nid . " , " . $limit . " ) " ;
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
}
/**
* modification d ' une limite sur utilisateur
* @ access public
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param limite
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function updateUserLimit ( $nid , $uid , $limit )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$sql = " UPDATE " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " user_space SET user_space= " . $limit . " WHERE user_space_uid= " . $uid . " AND user_space_nid= " . $nid ;
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
}
/**
* modification d ' une limite sur utilisateur
* @ access public
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param limite
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function deleteUserLimit ( $nid , $uid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$sql = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " user_space WHERE user_space_uid= " . $uid . " AND user_space_nid= " . $nid ;
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
}
/**
* ajoute la creation d ' une limite sur noeud
* @ access public
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param limite
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function createNodeLimit ( $nid , $limit )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$sql = " INSERT INTO " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space (node_space_nid, node_space) VALUES ( " . $nid . " , " . $limit . " ) " ;
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
}
/**
* modification d ' une limite sur noeud
* @ access public
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param limite
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function updateNodeLimit ( $nid , $limit )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
2021-04-22 02:26:34 +02:00
$sql = " UPDATE " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space SET node_space= " . $limit . " WHERE node_space_nid= " . $nid ;
2021-04-22 02:19:52 +02:00
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
}
/**
* destruction d ' une limite sur noeud
* @ access public
* @ param entier id du noeud
* @ param entier id de l ' utilisateur
* @ param limite
* @ return entier taille pour l ' utilisateur , ou faux si aucune affectée
*/
function deleteNodeLimit ( $nid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$sql = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " node_space WHERE node_space_nid= " . $nid ;
/* gestion du resultat */
$GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $sql );
}
}
/**
* Permet la gestion des upload
* Cette classe n ' est pas à utiliser directement < br />
* Voir ses extention :
* - UploadToDir
* - UploadToDb
* Le fichier est a inclure dans votre script avec l ' instruction includePackage ( upload . php )
* @ package package
* @ subpackage file
*/
class Upload
{
/** #@+
* @ access private
*/
/**
* @ var chaine
* @ desc entier gére la limitation sur le noeud ou l ' utilisateur
*/
var $limitOwner = 0 ;
/**
* @ var chaine
* @ desc nom de l ' élément du formulaire
*/
var $fieldName = " upload " ;
/**
* @ var chaine
* @ desc nom du fichier ( est transformé si celui - ci existe ) ( fonctionnement fichier )
*/
var $fileName ;
/**#@-*/
//
// Constructor
//
/**
* Constructeur de la classe Upload PHP4
*
* @ access public
* @ param chaine nom du champ
*/
function Upload ( $fieldName = " upload " )
{
$this -> __construct ( $fieldName );
}
/**
* Constructeur de la classe Upload PHP5
*
* @ access public
* @ param chaine nom du champ
*/
function __construct ( $fieldName = " upload " )
{
$this -> fieldName = $fieldName ;
$this -> fileName = ( $this -> originalFileName ());
$this -> setLimitOwner ( false ); # la gestion des quotas se fé d'abord sur la communautée
}
/**
* getteur du nid , indique a quel endroit on prend une limitation
* @ access public
* @ param entier id du noeud
*/
function getLimitOwner ()
{
return ( $this -> limitOwner == 0 ) ? false : true ;
}
/**
* setteur de l ' uid , indique a quel endroit on prend une limitation
* @ access public
* @ param booleen active la limite de quota sur l ' utilisateur ...
*/
function setLimitOwner ( $bool )
{
$this -> limitOwner = ( $bool == true ) ? 1 : 0 ;
}
/**
* uploadFile : retourne la clé du fichier enregistré ... id ou nom ...
* @ access public
* @ return retourne la clé du fichier enregistré ... id ou nom ...
*/
function uploadFile ()
{
return " " ;
}
/**
* getFileInfo : retourne un tableau des infos fichier ( nom , id , size , type => extention )
* @ access public
* @ return tableau tableau des infos fichier ( nom , id , size , type => extention )
*/
function getFileInfo ( $id )
{
return array ();
}
/**
* getFileContent : retourne les données du fichier
* pour l ' affichage utiliser printHeaders pour forcer les headers en " application/octet-stream "
* @ access public
* @ return data
*/
function getFileContent ( $id )
{
return " " ;
}
/**
* removeFile : detruit le fichier correspondant
* @ access public
* @ return booleen
*/
function removeFile ( $id )
{
return true ;
}
/**
* removeFileFromOid : detruit les fichiers correspondant a l ' objet de coordination
* @ access public
* @ return booleen
*/
function removeFileFromOid ( $oid )
{
return true ;
}
/**
* validfileName : retourne le nom " valide " du fichier
* sans caractères spèciaux et avec un seul point dans la chaine .
* @ access public
* @ return chaine nom du fichier
*/
function validfileName ()
{
$s = strtolower ( $this -> fileName );
$s = preg_replace ( '/[^a-z0-9_\-\.]/i' , '' , $s );
//$s=$this->pointReplace($s);
return $s ;
}
/**
* pointReplace : retourne le nom " valide " du fichier
* remplace tous les points en trop sur le nom du fichier
* @ access public
* @ return data
*/
function pointReplace ( $chaine )
{
$posdeb = strpos ( $chaine , " . " );
$posfin = strlen ( $chaine );
// fin chaine sans le point
$chainefin = substr ( $chaine , $posdeb + 1 , $posfin );
// s'il existe un autre point
if ( strpos ( $chainefin , " . " ) == false )
{
// cas pas d'autre point !!!
return $chaine ;
}
else
{
// cas un autre point existe
// -- on remplace le point et on rapelle la fction !!
$modif = substr ( $chaine , 0 , $posdeb ) . $this -> PointReplace ( $chainefin );
return $modif ;
}
}
/**
* extentionFinder : retourne l ' extention du fichier
* retourne l ' extention à partir de la chaine ( type " php, html etc. " ) ...
* @ access public
* @ return data
*/
function extentionFinder ( $chaine )
{
$posdeb = strpos ( $chaine , " . " );
$posfin = strlen ( $chaine );
// fin chaine sans le point c-a-d l'extension
$extension = substr ( $chaine , $posdeb + 1 , $posfin );
return $extension ;
}
/**
* formatfileName : a partir du nom du fichier courant propose un nom de fichier
* charte le nom de fichier de type nom + " _n " + extention ( $this -> fileName )
* si n existe on a alors il est incrémenté sinon ajouté
* @ access public
* @ return booleen
*/
function formatfileName ()
{
// remarque le fileName de fichier est déjà testé sans carac spéciaux
$chaine = $this -> fileName ;
$len = strlen ( $chaine );
$posPoint = strpos ( $chaine , " . " , 0 ); // position du point dans la chaine
if ( $posPoint === false )
{
$posPoint = $len ;
$extChaine = " " ;
}
else
{
$extChaine = substr ( $chaine , $posPoint ,( $len - $posPoint ));
}
$fileNameChaine = substr ( $chaine , 0 , $posPoint );
// récupération de l'indice si existant
$boolIndice = false ;
if ( $posPoint > 2 )
{
// on recherche "_"
if ( substr ( $fileNameChaine , $posPoint - 3 , 1 ) == " _ " )
{
// on essaye de récupérer l'indice
if ( Is_numeric ( substr ( $fileNameChaine , $posPoint - 2 , 2 )))
{
// cas l'indice existe
$indice = substr ( $fileNameChaine , $posPoint - 2 , 2 );
$indice ++ ;
if ( $indice < 10 )
$indice = " 0 " . $indice ;
//fileName de chaine résultant !!!
$fileNameChaine = substr ( $fileNameChaine , 0 , $posPoint - 2 ) . $indice ;
$boolIndice = true ;
}
}
}
// cas nouveau fichier sans indice
if ( $boolIndice == false )
{
$fileNameChaine .= " _01 " ;
}
$this -> fileName = $fileNameChaine . $extChaine ;
return true ;
}
/**
* originalFileName : durant l ' upload donne le nom réel du fichié téléchargé
* @ access public
* @ return booleen
*/
function originalFileName ()
{
if ( isset ( $_FILES [ $this -> fieldName ]))
return $_FILES [ $this -> fieldName ][ " name " ];
else
return " " ;
}
/**
* isValidPostFile : indique pour le champ de l ' objet si un upload à été effectué
* @ access public
* @ return booleen
*/
function isValidPostFile ()
{
if ( ( isset ( $_FILES [ $this -> fieldName ][ " tmp_name " ])) && ( $_FILES [ $this -> fieldName ][ " tmp_name " ] != " none " ) )
return true ;
else
return false ;
}
/**
* setPhpPerms : affecte le permission PHP ( si possible ) pour le bon déroulement de l ' upload
* @ access public
* @ return booleen
*/
function verifPhpPerms ()
{
$retour = 0 ;
if ( ( ini_get ( " file_uploads " ) == false ) )
{
addError ( 1 , get_class ( $this ), " Les uploads sont interdits et ne peuvent être modifiés-> voir php.ini " , __line__ , __file__ );
$retour ++ ;
}
return $retour ;
}
/**
* printHeaders : force le navigateur de l ' utilisateur à télécharger le document .
* @ param chaine nom du fichier
* @ param entier taille du fichier
* @ param chaine type du fichier ( par défaut : application / octet - stream )
* @ access public
* @ return booleen
*/
function printHeaders ( $fileName , $fileSize , $fileType = " application/octet-stream " )
{
if ( ! headers_sent ())
{
header ( " Pragma: public " );
header ( " Expires: 0 " );
header ( " Cache-Control: private " );
$filename = basename ( $fileName );
header ( " Content-Type: $fileType " );
header ( " Content-Disposition: attachment; filename= $filename " );
header ( " Accept-Ranges: bytes " );
header ( " Content-Length: $fileSize " );
header ( " Content-Description: PHP Generated Data " );
return true ;
} else {
return false ;
}
}
/**
* affichage du formulaire de saisie
* @ todo l ' affichage devrait avoir une template propre ou un système de bloc permettant de le customiser
* @ param chaine nom du bloc a utiliser pour l ' affichage
* @ param chaine nom / id du fichier
* @ param chaine url de redirection pour lire le fichier
* @ return booleen
*/
function MxPrintFormUpload ( $blocPath = " upload " , $docId = " " , $urlRead = " " )
{
// On affiche le nom
$str = " <input type='hidden' name='MAX_FILE_SIZE' value='10000000000000'/> \n <input type='file' name=' " . $this -> fieldName . " ' value=''/> " ;
$str .= '<input type="hidden" name="' . $this -> fieldName . '_id" value=""/>' ;
// On affiche le document
if ( $docId != " " || $docId == 0 )
{
$tabInfo = $this -> getFileInfo ( $docId );
if ( count ( $tabInfo ) > 0 )
{
$str = '<table class="tabledetail"><tr><td>' ;
// Récupération du type de fichier à partir de l'extention
// --- recuperation de l'extension
$extention = $this -> extentionFinder ( $tabInfo [ " name " ]);
$nomIcone = $extention . " .png " ;
$dirImage = $GLOBALS [ 'CONF_DATA_PATH' ] . " data/image/icons/ " ;
if ( file_exists ( $dirImage . strtolower ( $nomIcone )) == true )
$img = " <img src=' " . $dirImage . $nomIcone . " '/> " ;
else
$img = " <img src=' " . $dirImage . " default.png'/> " ;
$str .= $img . " " ;
// Fin récupération du picto
$str .= '</td><td><a href="' . $urlRead . '">' . $tabInfo [ " name " ] . '</a></td></tr>' ;
$str .= " </table> " ;
$str .= '<p><mx:text id="TxtFileDelete"/> :</p>' ;
$str .= '<div class="boxcheck"><label><mx:text id="BtnYes"/></label>' ;
$str .= '<input type="radio" name="' . $this -> fieldName . '" value="1"/></div>' ;
$str .= '<div class="boxcheck"><label><mx:text id="BtnNo"/></label>' ;
$str .= '<input type="radio" name="' . $this -> fieldName . '" value="0" checked/></div>' ;
$str .= '<div><input type="hidden" name="' . $this -> fieldName . '_id" value="' . $tabInfo [ " file_id " ] . '"/>' ;
$str .= '</div>' ;
$str .= " " ;
}
}
$GLOBALS [ " SYSTEM_TEMPLATE " ] -> MxBloc ( $blocPath , " modify " , $str );
return true ;
}
/**
* recupere le chemin de l ' icone
*/
function getImagePath ( $name )
{
$extention = $this -> extentionFinder ( $name );
$nomIcone = $extention . " .png " ;
$dirImage = $GLOBALS [ 'CONF_DATA_PATH' ] . " data/image/icons/ " ;
if ( file_exists ( $dirImage . strtolower ( $nomIcone )) == true )
$img = " " . $dirImage . $nomIcone . " " ;
else
$img = " " . $dirImage . " default.png " ;
return $img ;
}
}
/**
* Classe UploadToDb
*
* Permet la gestion des upload dans une bd < br />
* Le fichier est a inclure dans votre script avec l ' instruction includePackage ( upload . php )
* @ package package
* @ subpackage upload
*/
class UploadToDb extends Upload
{
/** #@+
* @ access private
*/
/**
* @ var entier
* @ desc taille max des paquets sql ( fonctionnement Bd )
*/
var $maxSqlSize = 40000 ;
/**
* @ var chaine
* @ desc chemin du repertoire de telechargement ( fonctionnement bd )
*/
var $file_id = 0 ;
/**#@-*/
/**
* Constructeur de la classe UploadToBd
*
*< p > Initialise la classe </ p >
* @ access public
* @ param chaine nom du champ
* @ param entier taille max des paquets sql
*/
function UploadToDb ( $fieldName = " upload " , $maxSqlSize = 40000 )
{
$this -> __construct ( $fieldName , $maxSqlSize );
}
/**
* Constructeur de la classe UploadToBd
*
*< p > Initialise la classe </ p >
* @ access public
* @ param chaine nom du champ
* @ param entier taille max des paquets sql
*/
function __construct ( $fieldName = " upload " , $maxSqlSize = 40000 )
{
parent :: __construct ( $fieldName );
$this -> maxSqlSize = $maxSqlSize ;
}
/**
* uploadFile : retourne la clé du fichier enregistré ... ( id automatique de la Bd )
* se sert des Tables " prefixe systeme " + files et " prefixe systeme " filesdata < br />
* la table " prefixe systeme " files contient :< br />
* - file_id : identifiant auto < br />
* - name : nom du fichier < br />
* - type : extention du fichier < br />
* - size : taille du fichier < br />
*< i > Cette table stocke les infos générales du fichier </ i >
* la table " prefixe systeme " filedata contient :< br />
* - id : identifiant auto < br />
* - file_id : identifiant du fichier correspondant < br />
* - type : extention du fichier < br />
* - size : taille du fichier < br />
*< i > Cette table stocke les données du fichier sous forme de ligne
* la taille de ces lignes est déterminée par maxSqlSize ( par défaut 50000 )
*</ i >
* @ access public
* @ param entier node id ( noeud ou l ' upload est effectué )
* @ param entier object id ( objet propriétaire du fichier )
* @ param chaine fonction pour les test d ' upload a NODE || USER si = false -> pas de test ... / defaut NODE
* @ return retourne la clé du fichier enregistré ... id de l ' enregistrement
*/
function uploadFile ( $nid , $oid , $uid = " " , $mode = " NODE " )
{
$uid = ( $uid == " " ) ? $GLOBALS [ " SYSTEM_USER_SESSION " ] -> user -> getId () : $uid ;
set_time_limit ( CONF_UPLOAD_TIME );
/* préfixe de la table */
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$boolUploaded = false ;
/* Récupération de la valeur */
$erreur = 0 ;
if ( $this -> isValidPostFile ())
{
$tmp = $_FILES [ $this -> fieldName ][ " tmp_name " ];
/* Vérification de la taille restante */
$uploadLimit = new UploadLimit ( $nid , $uid );
if ( filesize ( $tmp ) < $uploadLimit -> getFreeSpace ( $mode ) || $mode == false )
{
// Max packet size
if ( file_exists ( $tmp ))
$filehandle = fopen ( $tmp , " rb " );
else
return false ;
$query = " INSERT INTO " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file (file_name, file_type, file_extention, file_size, file_location, file_nid, file_oid, file_uid, file_limit_owner) VALUES(' " . $this -> validfileName () . " ', ' " . $_FILES [ $this -> fieldName ][ " type " ] . " ', ' " . $this -> extentionFinder ( $this -> validfileName ()) . " ', " . filesize ( $tmp ) . " , 'BD', $nid , $oid , $uid , " . $this -> limitOwner . " ) " ;
// Execute Query
$result = $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $query );
$file_id = $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_nextid ();
while ( ! feof ( $filehandle )) {
$data = base64_encode ( fread ( $filehandle , $this -> maxSqlSize ));
$query = " INSERT INTO " . $prefixe . " filedata (file_id, filedata_data, nid, oid) VALUES( $file_id , \" " . $data . " \" , $nid , $oid ) " ;
$result = $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $query );
}
fclose ( $filehandle );
$boolUploaded = true ;
}
}
return ( $boolUploaded == true ) ? $file_id : false ;
}
/**
* getFileInfo : retourne un tableau des infos fichier ( nom , id , size , type => extention )
* @ access public
* @ return tableau tableau des infos fichier ( nom , id , size , type => extention )
*/
function getFileInfo ( $id )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $id ) && ( $id != 0 ) )
{
$query = " SELECT * from " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE file_id= $id " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
}
return $row ;
}
/**
* getFileContent : retourne les données du fichier
* pour l ' affichage utiliser voir printHeaders
* @ access public
* @ return data
*/
function getFileContent ( $id , $nid , $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$data = " " ;
if ( is_numeric ( $id ) && ( $id != 0 ) )
{
$query = " select file_id, name, type, size from " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file where file_id=' $id ' " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
$GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_freeresult ();
/* recupere les éléments du fichier */
$query = " select file_id, filedata_data from " . $prefixe . " filedata where file_id=' $id ' AND oid= $oid ORDER BY file_id ASC " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
/* decode les fragments et recombine le fichier */
$data = " " ;
while ( $row = mysql_fetch_array ( $result )) {
$data .= base64_decode ( $row [ " data " ]);
}
$GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_freeresult ();
}
}
}
return $data ;
}
/**
* removeFile : detruit le fichier correspondant
* pour l ' affichage utiliser printHeaders
* @ access public
* @ param entier identifiant du fichier
* @ param entier identifiant du noeud
* @ param entier identifiant de l ' objet
* @ return booleen
*/
function removeFile ( $id , $nid , $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $id ) && ( $id != 0 ) )
{
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file where file_id=' $id ' AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " filedata where file_id=' $id ' AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
return true ;
} else {
return false ;
}
}
/**
* removeFileFromOid : detruit les fichiers correspondant a l ' objet de coordination
* @ param entier identifiant de l ' objet
* @ access public
* @ return booleen
*/
function removeFileFromOid ( $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $oid ) && ( $oid != 0 ) )
{
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " filedata WHERE oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
return true ;
} else {
return false ;
}
}
/**
* checkStruct : verifie que la structure de BD existe , sinon cet élément la crée
*
* @ access public
* @ return tableau tableau des infos fichier ( nom , id , size , type => extention )
*/
function checkStruct ()
{
$sql = " SHOW TABLE STATUS " ;
$GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $sql );
}
}
/**
* Classe UploadToDb
*
* Permet la gestion de Wyzis
* @ todo Les tests ne sont pas encore fait pour la gestion de fichier sur disque ...
* @ package package
* @ subpackage file
*/
class UploadToDir extends Upload
{
/** #@+
* @ access private
*/
/**
* @ var chaine
* @ desc chemin du repertoire de telechargement ( fonctionnement fichier )
*/
var $uploadDir = " ./data/upload/ " ;
/**#@-*/
/**
* Constructeur de la classe UploadToDir
*
*< p > Initialise la classe </ p >
*
* @ param chaine nom du champ
* @ param chaine nom du repertoire
*/
function UploadToDir ( $fieldName = " upload " , $uploadDir = null )
{
$this -> __construct ( $fieldName , $uploadDir );
}
/**
* Constructeur de la classe UploadToDir
*
*< p > Initialise la classe </ p >
* le fichier est a inclure dans votre script avec l ' instruction includePackage ( upload . php )
* @ param chaine nom du champ
* @ param chaine nom du repertoire
*/
function __construct ( $fieldName = " upload " , $uploadDir = null )
{
parent :: __construct ( $fieldName );
$this -> uploadDir = ( ! is_null ( $uploadDir )) ? $uploadDir : $GLOBALS [ " CONF_DATA_PATH " ] . " data/upload/ " ;
}
/**
* uploadFile : retourne la clé du fichier enregistré ... nom du fichier ou faux
* enregistre le fichier uploade si existant dans le repertoire upload dir < br />
* on notera que le nom du fichier est formaté et que 1 fichier ne peut pas être écraser < br />
*
* @ access public
* @ param entier identifiant du noeud
* @ param entier identifiant de l ' objet
* @ param entier identifiant de l ' utilisateur
* @ param chaine mode de fonctionement false
* @ return retourne la clé du fichier enregistré ... nom du fichier
*/
function uploadFile ( $nid , $oid , $uid , $mode = " NODE " , $chmod = " " )
{
$uid = ( $uid == " " ) ? $GLOBALS [ " SYSTEM_USER_SESSION " ] -> user -> getId () : $uid ;
set_time_limit ( CONF_UPLOAD_TIME );
$boolUploaded = false ;
/* Récupération de la valeur */
$erreur = 0 ;
if ( $this -> isValidPostFile ())
{
$tmp = $_FILES [ $this -> fieldName ][ " tmp_name " ];
/* Vérification de la taille restante */
$uploadLimit = new UploadLimit ( $nid , $uid );
if ( filesize ( $tmp ) < $uploadLimit -> getFreeSpace ( $mode ) || $mode == false || $mode == " NONE " )
{
/* Initialisation du fileName de fichier */
$this -> fileName = $this -> validfileName ();
/* jusqu'a ce que le fileName de fichier soit correct (par rapport au disque) */
do
{
/* Cas changement du fileName de fichier (si existant) */
if ( $erreur == 2 )
{
$this -> formatfileName ();
}
$erreur = $this -> isUploadedFile ();
} while ( $erreur != 0 && $erreur != 1 );
/* fonction depuis Php4 qui test en mm temps si le fichier a été uploadé */
$boolUploaded = move_uploaded_file ( $_FILES [ $this -> fieldName ][ " tmp_name " ] , $this -> uploadDir . $this -> fileName );
if ( $boolUploaded == true )
{
if ( $chmod != " " )
chmod ( $this -> uploadDir . $this -> fileName , $chmod );
if ( $mode != " NONE " )
{
$query = " INSERT INTO " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file (file_name, file_type, file_extention, file_size, file_location, nid, oid, uid, file_limit_owner) " ;
$query .= " VALUES(' " . $this -> uploadDir . $this -> fichier . " ', ' " . $_FILES [ $this -> fieldName ][ " type " ] . " ', ' " . $this -> extentionFinder ( $this -> fichier ) . " ', " ;
$query .= filesize ( $_FILES [ $this -> fieldName ][ " tmp_name " ]) . " , 'FILE', " . $nid . " , " . $oid . " , " . $uid . " , " . $this -> limitOwner . " ) " ;
// Execute Query
$result = $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_query ( $query );
$file_id = $GLOBALS [ " SYSTEM_DATABASE_CONN " ] -> sql_nextid ();
}
}
}
}
return ( $boolUploaded == true ) ? $this -> fileName : false ;
}
/**
* getFileInfo : retourne un tableau des infos fichier ( nom , id , size , type => extention )
*
* @ access public
* @ param entier identifiant du fichier
* @ param entier identifiant du noeud
* @ param entier identifiant de l ' objet
* @ return tableau tableau des infos fichier ( nom , id , size , type => extention )
*/
function getFileInfo ( $id , $nid , $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $id ) && ( $id != 0 ) )
{
$query = " SELECT * from " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE file_id= $id AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
}
}
return $row ;
}
/**
* getFileContent : retourne les données du fichier
* pour l ' affichage utiliser voir printHeaders
*
* @ access public
* @ param entier identifiant du fichier
* @ param entier identifiant du noeud
* @ param entier identifiant de l ' objet
* @ return data
*/
function getFileContent ( $id , $nid , $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $id ) && ( $id != 0 ) )
{
$query = " SELECT * from " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE file_id= $id AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
if ( file_exists ( $this -> uploadDir . $row [ " name " ]))
{
$file = new File ( $this -> uploadDir . $row [ " name " ], " r " );
return $file -> readAll ();
} else {
return false ;
}
}
}
return false ;
}
/**
* removeFile : detruit le fichier correspondant
* pour l ' affichage utiliser printHeaders
*
* @ access public
* @ param entier identifiant du fichier
* @ param entier identifiant du noeud
* @ param entier identifiant de l ' objet
* @ return booleen
*/
function removeFile ( $id , $nid , $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $id ) && ( $id != 0 ) )
{
$query = " SELECT * from " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE file_id= $id AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
if ( file_exists ( $this -> uploadDir . $row [ " name " ]))
{
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file where file_id=' $id ' AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " filedata where file_id=' $id ' AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
delete ( $this -> uploadDir . $row [ " name " ]);
return true ;
}
}
}
return false ;
}
/**
* removeFileFromOid : detruit les fichiers correspondant a l ' objet de coordination
* @ access public
* @ param entier identifiant de l ' objet
* @ return booleen
*/
function removeFileFromOid ( $oid )
{
//$prefixe=(!defined("DATA_ACCES_TABLE_PREFIX"))?"": DATA_ACCES_TABLE_PREFIX ;
$row = array ();
if ( is_numeric ( $oid ) && ( $oid != 0 ) )
{
$query = " SELECT * from " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
if ( $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_numrows () > 0 )
{
$row = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_fetchrow ();
if ( file_exists ( $this -> uploadDir . $row [ " name " ]))
{
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " file WHERE file_id=' $id ' AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
$query = " DELETE FROM " . DATA_ACCES_TABLE_PREFIX . DATA_ACCES_PACKAGE_PREFIX . " filedata WHERE file_id=' $id ' AND oid= $oid " ;
$result = $GLOBALS [ 'SYSTEM_DATABASE_CONN' ] -> sql_query ( $query );
delete ( $this -> uploadDir . $row [ " name " ]);
return true ;
}
}
}
return false ;
}
// verification de l'existance du fichier sur disque !!!
// sert a ne pas dupliquer la clé sur le nom du fichier... on garde les anciens...
function isUploadedFile ()
{
$erreur = 0 ;
$perms_dest = fileperms ( $this -> uploadDir );
if ( $perms_dest != false )
{
$perms_dest = $perms_dest & 07 ;
/* Le répertoire doit être lisible, inscriptible et éxécutable*/
if ( ! (( $perms_dest & 01 ) && ( $perms_dest & 02 ) && ( $perms_dest & 04 )))
{
/* Le répertoire doit être lisible, inscriptible et éxécutable*/
return 1 ;
}
clearstatcache ();
//echo $uploadDirImage.$this->fichier;
if ( file_exists ( $this -> uploadDir . $this -> fileName ) == true )
{
return 2 ;
}
} else {
/* repertoire non lisible */
return 1 ;
}
return 0 ;
}
}
/**
* Converti un num ( en octect ) en valeur affichable
*/
function convertOctToPrint ( $num )
{
return round (( $num / 1024 ), 0 );
}
/**
* Converti une valeur affichable en un num ( oct )
*/
function convertPrintToOct ( $num )
{
return round (( $num * 1024 ), 0 );
}
?>