Commit dd84bc0c authored by Feu's avatar Feu
Browse files

tags dans news et debut gestion emprunt fichiers

parent d8366c01
<?php <?php
/* Copyright 2006 /* Copyright 2006,2007
* *
* - Maxime Petazzoni < sam at bulix dot org > * - Maxime Petazzoni < sam at bulix dot org >
* - Laurent Colnat < laurent dot colnat at utbm dot fr > * - Laurent Colnat < laurent dot colnat at utbm dot fr >
...@@ -206,7 +206,8 @@ if ( $_REQUEST["action"] == "davmount" ) ...@@ -206,7 +206,8 @@ if ( $_REQUEST["action"] == "davmount" )
if ( $site->user->is_valid() if ( $site->user->is_valid()
/*&& !preg_match('/^\/var\/www\/ae\/www\/(taiste|taiste21)\//', $_SERVER['SCRIPT_FILENAME'])*/ ) /*&& !preg_match('/^\/var\/www\/ae\/www\/(taiste|taiste21)\//', $_SERVER['SCRIPT_FILENAME'])*/ )
echo " <dm:username>".htmlspecialchars($site->user->email,ENT_NOQUOTES,"UTF-8")."</dm:username>\n"; echo " <dm:username>".htmlspecialchars($site->user->email,ENT_NOQUOTES,"UTF-8")."</dm:username>\n";
echo "</dm:mount>\n";
echo "</dm:mount>\n";
exit(); exit();
} }
...@@ -287,7 +288,39 @@ elseif ( $_REQUEST["action"] == "addfile" && $folder->is_right($site->user,DROIT ...@@ -287,7 +288,39 @@ elseif ( $_REQUEST["action"] == "addfile" && $folder->is_right($site->user,DROIT
if ( $file->is_valid() ) if ( $file->is_valid() )
{ {
if ( $_REQUEST["action"] == "save" && $file->is_right($site->user,DROIT_ECRITURE) ) if ( $_REQUEST["action"] == "cancelborrow" && $file->is_right($site->user,DROIT_ECRITURE) )
{
$file->unlock($site->user);
$Notice = "Emprunt annulé";
}
elseif ( $_REQUEST["action"] == "returnfile" && $file->is_right($site->user,DROIT_ECRITURE) )
{
//ErreurReturn
if ( $file->is_locked($site->user) )
$ErreurReturn="Impossible de restituer le fichier";
elseif( !is_uploaded_file($_FILES['file']['tmp_name']) || ($_FILES['file']['error'] != UPLOAD_ERR_OK ) )
$ErreurReturn="Erreur lors du transfert";
else
{
$file->new_revision ( $_FILES["file"], $site->user, $_REQUEST["comment"] );
$file->unlock($site->user);
$Notice = "Fichier restitué";
}
}
elseif ( $_REQUEST["action"] == "borrow" && $file->is_right($site->user,DROIT_ECRITURE) )
{
if ( $file->is_locked($site->user) )
$Notice="Impossible d'emprunter le fichier";
else
{
$file->lock($site->user);
$Notice = "Fichier emprunté";
header("Location: d.php?id_file=".$file->id."&action=download");
}
}
elseif ( $_REQUEST["action"] == "save" && $file->is_right($site->user,DROIT_ECRITURE) )
{ {
if ( $_REQUEST["nom"] ) if ( $_REQUEST["nom"] )
{ {
...@@ -364,8 +397,48 @@ if ( $file->is_valid() ) ...@@ -364,8 +397,48 @@ if ( $file->is_valid() )
"Date d'ajout: ".date("d/m/Y",$file->date_ajout), "Date d'ajout: ".date("d/m/Y",$file->date_ajout),
"Nom r&eacute;el: ".$file->nom_fichier, "Nom r&eacute;el: ".$file->nom_fichier,
"Nombre de t&eacute;l&eacute;chargements: ".$file->nb_telechargement, "Nombre de t&eacute;l&eacute;chargements: ".$file->nb_telechargement,
"Propos&eacute; par : ". classlink($user) "Propos&eacute; par : ". $user->get_html_link()
)),true); )),true);
if ( $file->is_right($site->user,DROIT_ECRITURE) )
{
$lock = $file->get_lock();
if ( $lock )
{
if ( $lock['id_utilisateur'] == $site->user->id )
{
$cts->add_title(2,"Restituer le fichier");
$frm = new form("addfile","d.php?id_file=".$file->id);
$frm->allow_only_one_usage();
$frm->add_hidden("action","returnfile");
if ( $ErreurReturn )
$frm->error($ErreurReturn);
$frm->add_file_field("file","Fichier",true);
$frm->add_text_area("commentaire","Commentaire","");
$frm->add_submit("valid","Restituer");
$cts->add_paragraph("<a href=\"d.php?id_file=".$file->id."&amp;action=cancelborrow\">Annuler l'emprunt</a>");
}
else
{
$cts->add_title(2,"Fichier emprunté");
$user = new utilisateur($site->db);
$user->load_by_id($lock['id_utilisateur']);
$cts->add_paragraph(
"Emprunté par ".$user->get_html_link().
" depuis le ".date("d/m/Y H:i",strtotime($lock['time_file_lock'])));
}
}
else
{
$cts->add_title(2,"Emprunter le fichier");
$cts->add_paragraph("<a href=\"d.php?id_file=".$file->id."&amp;action=borrow\">Emprunter et télécharger le fichier</a>");
}
}
$cts->add(new taglist($file),true); $cts->add(new taglist($file),true);
......
<?php <?php
/* Copyright 2006 /* Copyright 2006,2007
* - Julien Etelain < julien at pmad dot net > * - Julien Etelain < julien at pmad dot net >
* - Pierre Mauduit <pierre POINT mauduit CHEZ utbm POINT fr> * - Pierre Mauduit <pierre POINT mauduit CHEZ utbm POINT fr>
* *
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
* Donnés sur les différents objets traités : * Donnés sur les différents objets traités :
* nom de la classe => array ( * nom de la classe => array (
* 0 nom du champ SQL d'identification * 0 nom du champ SQL d'identification
* 1 nom du champ SQl du nom * 1 nom du champ SQl du nom (ou alias systèmatiquement utilisé)
* 2 url de l'icone associée * 2 url de l'icone associée
* 3 url de la page d'information * 3 url de la page d'information
* 4 nom de table SQL (facultatif) * 4 nom de table SQL (facultatif)
...@@ -87,7 +87,9 @@ $GLOBALS["entitiescatalog"] = array ( ...@@ -87,7 +87,9 @@ $GLOBALS["entitiescatalog"] = array (
"efact"=>array("id_efact","titre_facture","file.png","compta/efact.php","cpta_facture","efact.inc.php"), "efact"=>array("id_efact","titre_facture","file.png","compta/efact.php","cpta_facture","efact.inc.php"),
"uv" => array ( "id_uv", "code_uv", "misc.png", "uvs/uvs.php", "edu_uv", "uv.inc.php" ) "uv" => array ( "id_uv", "code_uv", "misc.png", "uvs/uvs.php", "edu_uv", "uv.inc.php" ),
"nouvelle"=>array("d_nouvelle", "titre_nvl", "misc.png", "news.php", "nvl_nouvelles", "news.inc.php", "nvl_nouvelles_tag")
); );
......
...@@ -295,8 +295,19 @@ class dfile extends fs ...@@ -295,8 +295,19 @@ class dfile extends fs
} }
function update_contents ( $filesize, $mime_type ) /**
* Insère une nouvelle révision du fichier à partir d'un élément de $_FILES (pas totalement implémenté)
* Fonction à usage interne
* @param $user Utilisateur faisant la révision
* @param $filesize Taille du nouveau fichier
* @param $mime_type Type MIME du nouveau fichier
* @param $comment Commentaire
* @todo Implementer la gestion des résivions (table d_file_rev)
*/
function _new_revision ( &$user, $filesize, $mime_type, $comment="" )
{ {
$this->backup_for_overwrite();
$this->date_modif = time(); $this->date_modif = time();
$this->modere=0; $this->modere=0;
$this->taille=$filesize; $this->taille=$filesize;
...@@ -314,8 +325,34 @@ class dfile extends fs ...@@ -314,8 +325,34 @@ class dfile extends fs
), ),
array("id_file"=>$this->id) array("id_file"=>$this->id)
); );
}
/**
* Insère une nouvelle révision du fichier à partir d'un élément de $_FILES (pas totalement implémenté)
* @param $file Element de $_FILES
* @param $user Utilisateur faisant la révision
* @param $comment Commentaire
* @return false en cas d'erreur, sinon true
*/
function new_revision ( &$file, &$user, $comment="" )
{
if ( $this->is_locked($user) )
return false;
if ( !is_uploaded_file($file['tmp_name']) )
return false;
$this->_new_revision($user,$file['size'],$file['type'],$comment);
move_uploaded_file ( $file['tmp_name'], $this->get_real_filename() );
$this->generate_thumbs();
return true;
} }
function create_copy_of ( &$source, $id_parent, $new_nom_fichier=null, $depth=0 ) function create_copy_of ( &$source, $id_parent, $new_nom_fichier=null, $depth=0 )
{ {
$this->id_utilisateur = $source->id_utilisateur; $this->id_utilisateur = $source->id_utilisateur;
...@@ -571,6 +608,69 @@ class dfile extends fs ...@@ -571,6 +608,69 @@ class dfile extends fs
rename ( $f, $f1); rename ( $f, $f1);
} }
function is_locked(&$user)
{
$req = new requete($this->dbrw,
"SELECT id_utilisateur FROM d_file_lock ".
"WHERE `id_file` = '" . mysql_real_escape_string($this->id) . "' ".
/*"AND time_file_lock >= '".date("Y-m-d H:i:s",time()-WIKI_LOCKTIME)."' ".*/
"LIMIT 1");
if ( $req->lines == 0 )
{
//new delete($this->dbrw,"d_file_lock",array("id_file"=>$this->id)); // Nettoyage
return false;
}
list($uid) = $req->get_row();
if ( $uid == $user->id )
return false;
return $uid;
}
function get_lock()
{
$req = new requete($this->dbrw,
"SELECT id_utilisateur, time_file_lock FROM d_file_lock ".
"WHERE `id_file` = '" . mysql_real_escape_string($this->id) . "' ".
"LIMIT 1");
if ( $req->lines == 0 )
{
return false;
}
return $req->get_row();
}
function lock(&$user)
{
$this->unlock($user); // Supprime d'eventuels vieux verrous...
new insert($this->dbrw,"d_file_lock",
array(
"id_file"=>$this->id,
"id_utilisateur"=>$user->id,
"time_file_lock"=>date("Y-m-d H:i:s")));
}
function unlock(&$user)
{
new delete($this->dbrw,"d_file_lock",
array(
"id_file"=>$this->id,
"id_utilisateur"=>$user->id
));
}
function force_unlock()
{
new delete($this->dbrw,"d_file_lock",array("id_file"=>$this->id));
}
} }
......
...@@ -74,8 +74,6 @@ class fs extends basedb ...@@ -74,8 +74,6 @@ class fs extends basedb
return $filename; return $filename;
} }
} }
......
<?php <?php
/* Copyright 2005,2006,2007
* - Julien Etelain < julien at pmad dot net >
* - Pierre Mauduit <pierre POINT mauduit CHEZ utbm POINT fr>
*
* Ce fichier fait partie du site de l'Association des Étudiants de
* l'UTBM, http://ae.utbm.fr.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* 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. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
*/
/** @file /** @file
* Gestion des nouvelles * Gestion des nouvelles
* *
...@@ -21,22 +42,43 @@ define("NEWS_TYPE_APPEL",3); ...@@ -21,22 +42,43 @@ define("NEWS_TYPE_APPEL",3);
* @} * @}
*/ */
/**
* Nouvelle du site
*/
class nouvelle extends stdentity class nouvelle extends stdentity
{ {
/** Auteur de la nouvelle */
var $id_utilisateur; var $id_utilisateur;
/** Association/club concerné */
var $id_asso; var $id_asso;
/** Titre */
var $titre; var $titre;
/** Résumé */
var $resume; var $resume;
/** Contenu */
var $contenu; var $contenu;
/** Date d'ajout */
var $date; var $date;
/** Etat de modération: true modéré, false non modéré */
var $modere; var $modere;
/** Utilisateur ayant modéré la nouvelle */
var $id_utilisateur_moderateur; var $id_utilisateur_moderateur;
/** Afficher seulement dans AECMS : true sur AECMS seulement, false sur le site général et AECMS */
var $asso_seule; var $asso_seule;
/** Lieu concerné par la nouvelle */
var $id_lieu; var $id_lieu;
/** Charge une nouvelle en fonction de son id /** Charge une nouvelle en fonction de son id
* $this->id est égal à -1 en cas d'erreur * $this->id est égal à null en cas d'erreur
* @param $id id de la fonction * @param $id id de la fonction
*/ */
function load_by_id ( $id ) function load_by_id ( $id )
...@@ -263,7 +305,11 @@ class nouvelle extends stdentity ...@@ -263,7 +305,11 @@ class nouvelle extends stdentity
return ($req != false); return ($req != false);
} }
/**
* Associe la nouvelle à une date
* @param $debut Timestamp de début
* @param $fin Timestamp de fin
*/
function add_date($debut,$fin) function add_date($debut,$fin)
{ {
$req = new insert ($this->dbrw, $req = new insert ($this->dbrw,
...@@ -274,6 +320,10 @@ class nouvelle extends stdentity ...@@ -274,6 +320,10 @@ class nouvelle extends stdentity
)); ));
} }
/**
* Desassocie la nouvelle à une date
* @param $id_date Numéro de date
*/
function delete_date ( $id_date ) function delete_date ( $id_date )
{ {
$req = new delete ($this->dbrw, $req = new delete ($this->dbrw,
...@@ -281,10 +331,12 @@ class nouvelle extends stdentity ...@@ -281,10 +331,12 @@ class nouvelle extends stdentity
array ("id_nouvelle" => $this->id, array ("id_nouvelle" => $this->id,
"id_dates_nvl" => $id_date, "id_dates_nvl" => $id_date,
)); ));
} }
/**
* Modifie la nouvelle
*
*/
function save_news( function save_news(
$id_asso = null, $id_asso = null,
$titre, $titre,
......
...@@ -89,12 +89,15 @@ elseif ( ($_REQUEST["action"] == "save") && $can_edit ) ...@@ -89,12 +89,15 @@ elseif ( ($_REQUEST["action"] == "save") && $can_edit )
if ( $_REQUEST["title"] && $_REQUEST["content"] ) if ( $_REQUEST["title"] && $_REQUEST["content"] )
{
$news->save_news( $news->save_news(
$_REQUEST['id_asso'], $_REQUEST['id_asso'],
$_REQUEST['title'], $_REQUEST['title'],
$_REQUEST['resume'], $_REQUEST['resume'],
$_REQUEST['content'], $_REQUEST['content'],
false,null,$_REQUEST["type"],false,$lieu->id); false,null,$_REQUEST["type"],false,$lieu->id);
$news->set_tags($_REQUEST["tags"]);
}
} }
if ( $_REQUEST["page"] == "edit" && $can_edit ) if ( $_REQUEST["page"] == "edit" && $can_edit )
...@@ -118,6 +121,7 @@ if ( $_REQUEST["page"] == "edit" && $can_edit ) ...@@ -118,6 +121,7 @@ if ( $_REQUEST["page"] == "edit" && $can_edit )
$frm->add_text_field("title", "Titre",$news->titre,true); $frm->add_text_field("title", "Titre",$news->titre,true);
$frm->add_entity_select("id_asso", "Association concern&eacute;e", $site->db, "asso",$news->id_asso,true); $frm->add_entity_select("id_asso", "Association concern&eacute;e", $site->db, "asso",$news->id_asso,true);
$frm->add_entity_select("id_lieu", "Lieu", $site->db, "lieu",$news->id_lieu,true); $frm->add_entity_select("id_lieu", "Lieu", $site->db, "lieu",$news->id_lieu,true);
$frm->add_text_field("tags", "Tags",$news->get_tags());
$frm->add_text_area ("resume","Resume",$news->resume); $frm->add_text_area ("resume","Resume",$news->resume);
$frm->add_dokuwiki_toolbar('content'); $frm->add_dokuwiki_toolbar('content');
$frm->add_text_area ("content", "Contenu",$news->contenu,80,10,true); $frm->add_text_area ("content", "Contenu",$news->contenu,80,10,true);
...@@ -299,7 +303,9 @@ if ( $suitable && isset($_REQUEST["submit"]) ) ...@@ -299,7 +303,9 @@ if ( $suitable && isset($_REQUEST["submit"]) )
$_REQUEST['resume'], $_REQUEST['resume'],
$_REQUEST['content'], $_REQUEST['content'],
$_REQUEST['type'],false,$lieu->id); $_REQUEST['type'],false,$lieu->id);
$news->set_tags($_REQUEST["tags"]);
if ( $_REQUEST["type"] == 3 ) if ( $_REQUEST["type"] == 3 )
$news->add_date($_REQUEST["t3_debut"],$_REQUEST["t3_fin"]); $news->add_date($_REQUEST["t3_debut"],$_REQUEST["t3_fin"]);
elseif ( $_REQUEST["type"] == 1 ) elseif ( $_REQUEST["type"] == 1 )
...@@ -422,6 +428,7 @@ $frm->add($sfrm,false,true, $type==0 ,0 ,false,true); ...@@ -422,6 +428,7 @@ $frm->add($sfrm,false,true, $type==0 ,0 ,false,true);
$frm->add_text_field("title", "Titre de la nouvelle",$_REQUEST["title"],true); $frm->add_text_field("title", "Titre de la nouvelle",$_REQUEST["title"],true);
$frm->add_entity_select("id_asso", "Association concern&eacute;e", $site->db, "asso",$_REQUEST["id_asso"],true); $frm->add_entity_select("id_asso", "Association concern&eacute;e", $site->db, "asso",$_REQUEST["id_asso"],true);
$frm->add_entity_select("id_lieu", "Lieu", $site->db, "lieu",false,true); $frm->add_entity_select("id_lieu", "Lieu", $site->db, "lieu",false,true);
$frm->add_text_field("tags", "Tags",$_REQUEST["tags"]);
$frm->add_text_area ("resume","Resum&eacute;",$_REQUEST["resume"]); $frm->add_text_area ("resume","Resum&eacute;",$_REQUEST["resume"]);
$frm->add_dokuwiki_toolbar('content'); $frm->add_dokuwiki_toolbar('content');
$frm->add_text_area ("content", "Contenu",$_REQUEST["content"],80,10,true); $frm->add_text_area ("content", "Contenu",$_REQUEST["content"],80,10,true);
......
...@@ -267,12 +267,13 @@ class serverwebdavaedrive extends webdavserverae ...@@ -267,12 +267,13 @@ class serverwebdavaedrive extends webdavserverae
if ( !$ent->is_right($this->user,DROIT_ECRITURE) ) if ( !$ent->is_right($this->user,DROIT_ECRITURE) )
return "403 Forbidden"; return "403 Forbidden";
$stat = "204 No Content"; if ( $ent->is_locked($this->user) )
return "409 Conflict";
$ent->backup_for_overwrite(); $stat = "204 No Content";
// Mise à jour du contenu // Mise à jour du contenu
$ent->update_contents($options["content_length"],$options["content_type"]); $ent->_new_revision($this->user,$options["content_length"],$options["content_type"]);
} }
else else
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment