Newer
Older

cedric@yterium.com
a validé
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *

cedric@yterium.com
a validé
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
function joindre_determiner_mode($mode,$id_document,$objet){
if ($mode=='auto'){
if (intval($id_document))
$mode = sql_getfetsel('mode','spip_documents','id_document='.intval($id_document));
if (!in_array($mode,array('choix','document','image'))){
$mode='choix';

cedric@yterium.com
a validé
if ($objet AND !in_array(table_objet_sql($objet),explode(',',$GLOBALS['meta']["documents_objets"])))

cedric@yterium.com
a validé
$mode = 'image';
}
}
return $mode;
}
function formulaires_joindre_document_charger_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){
$valeurs = array();
$mode = joindre_determiner_mode($mode,$id_document,$objet);
$valeurs['id'] = $id_document;

cedric@yterium.com
a validé
$valeurs['url'] = 'http://';
$valeurs['fichier_upload'] = '';
$valeurs['_options_upload_ftp'] = '';
$valeurs['_dir_upload_ftp'] = '';
$valeurs['joindre_upload']='';
$valeurs['joindre_distant']='';
$valeurs['joindre_ftp']='';
$valeurs['joindre_mediatheque']='';
$valeurs['editable'] = ' ';
if (intval($id_document)){
$valeurs['editable'] = autoriser('modifier','document',$id_document)?' ':'';
}
$valeurs['proposer_media'] = is_string($proposer_media) ? (preg_match('/^(false|non|no)$/i', $proposer_media) ? false : true) : $proposer_media;
$valeurs['proposer_ftp'] = is_string($proposer_ftp) ? (preg_match('/^(false|non|no)$/i', $proposer_ftp) ? false : true) : $proposer_ftp;
# regarder si un choix d'upload FTP est vraiment possible
if (
$valeurs['proposer_ftp']
AND test_espace_prive() # ??
AND ($mode == 'document' OR $mode == 'choix') # si c'est pour un document
//AND !$vignette_de_doc # pas pour une vignette (NB: la ligne precedente suffit, mais si on la supprime il faut conserver ce test-ci)
AND $GLOBALS['flag_upload']
) {
include_spip('inc/documents');

cedric@yterium.com
a validé
if ($dir = determine_upload('documents')) {
// quels sont les docs accessibles en ftp ?
$valeurs['_options_upload_ftp'] = joindre_options_upload_ftp($dir, $mode);
// s'il n'y en a pas, on affiche un message d'aide
// en mode document, mais pas en mode image
if ($valeurs['_options_upload_ftp'] OR ($mode == 'document' OR $mode=='choix'))
$valeurs['_dir_upload_ftp'] = "<b>".joli_repertoire($dir)."</b>";
}
}
// On ne propose le FTP que si on a des choses a afficher
$valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']);
if ($galerie){

cedric@yterium.com
a validé
# passer optionnellement une galerie jointe au form
# plus utilise nativement, on prefere la mise a jour
# apres upload par ajaxReload('documents')

cedric@yterium.com
a validé
$valeurs['_galerie'] = $galerie;
}
if ($objet AND $id_objet){
$valeurs['id_objet'] = $id_objet;
$valeurs['objet'] = $objet;
$valeurs['refdoc_joindre'] = '';
if ($valeurs['editable']){
include_spip('inc/autoriser');

cedric@yterium.com
a validé
$valeurs['editable'] = autoriser('joindredocument',$objet,$id_objet)?' ':'';

cedric@yterium.com
a validé
}
}

cedric@yterium.com
a validé
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
return $valeurs;
}
function formulaires_joindre_document_verifier_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){
include_spip('inc/joindre_document');
$erreurs = array();
// on joint un document deja dans le site
if (_request('joindre_mediatheque')){
$refdoc_joindre = intval(preg_replace(',^(doc|document|img),','',_request('refdoc_joindre')));
if (!sql_getfetsel('id_document','spip_documents','id_document='.intval($refdoc_joindre)))
$erreurs['message_erreur'] = _T('medias:erreur_aucun_document');
}
// sinon c'est un upload
else {
$files = joindre_trouver_fichier_envoye();
if (is_string($files)){
$erreurs['message_erreur'] = $files;
}
elseif(is_array($files)){
// erreur si on a pas trouve de fichier
if (!count($files))
$erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
else{
// regarder si on a eu une erreur sur l'upload d'un fichier
foreach($files as $file){
if (isset($file['error'])
AND $test = joindre_upload_error($file['error'])){
if (is_string($test))
$erreurs['message_erreur'] = $test;
else
$erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
}
}
// si ce n'est pas deja un post de zip confirme
// regarder si il faut lister le contenu du zip et le presenter
if (!count($erreurs)
AND !_request('joindre_zip')
AND $contenu_zip = joindre_verifier_zip($files)){
list($fichiers,$erreurs,$tmp_zip) = $contenu_zip;

guy.cesaro@gmail.com
a validé
if ($fichiers)
$erreurs['lister_contenu_archive'] = recuperer_fond("formulaires/inc-lister_archive_jointe",array('chemin_zip'=>$tmp_zip,'liste_fichiers_zip'=>$fichiers,'erreurs_fichier_zip'=>$erreurs));
else
$erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');

cedric@yterium.com
a validé
}
}
}
if (count($erreurs) AND defined('_tmp_dir'))
effacer_repertoire_temporaire(_tmp_dir);
}
return $erreurs;
}
function formulaires_joindre_document_traiter_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){
$res = array('editable'=>true);
$ancre = '';
// on joint un document deja dans le site
if (_request('joindre_mediatheque')){

cedric@yterium.com
a validé
$refdoc_joindre = _request('refdoc_joindre');

cedric@yterium.com
a validé
$refdoc_joindre = strtr($refdoc_joindre,";,"," ");
$refdoc_joindre = preg_replace(',\b(doc|document|img),','',$refdoc_joindre);
// expliciter les intervales xxx-yyy
while(preg_match(",\b(\d+)-(\d+)\b,",$refdoc_joindre,$m))
$refdoc_joindre = str_replace($m[0],implode(" ",range($m[1],$m[2])),$refdoc_joindre);

cedric@yterium.com
a validé
$refdoc_joindre = explode(" ",$refdoc_joindre);
include_spip('action/editer_document');
foreach($refdoc_joindre as $j){
if ($j = intval(preg_replace(',^(doc|document|img),','',$j))){
// lier le parent en plus
$champs = array('ajout_parents' => array("$objet|$id_objet"));
document_modifier($j,$champs);

cedric@yterium.com
a validé
if (!$ancre)

cedric@yterium.com
a validé
$ancre = $j;
$sel[] = $j;
$res['message_ok'] = _T('medias:document_attache_succes');
}

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
if ($sel)
$res['message_ok'] = singulier_ou_pluriel(count($sel),'medias:document_attache_succes','medias:nb_documents_attache_succes');
set_request('refdoc_joindre',''); // vider la saisie

cedric@yterium.com
a validé
}
// sinon c'est un upload
else {
$ajouter_documents = charger_fonction('ajouter_documents', 'action');
$mode = joindre_determiner_mode($mode,$id_document,$objet);
include_spip('inc/joindre_document');
$files = joindre_trouver_fichier_envoye();
$nouveaux_doc = $ajouter_documents($id_document,$files,$objet,$id_objet,$mode);

yffic@lefourneau.com
a validé
if (defined('_tmp_zip'))
unlink(_tmp_zip);

cedric@yterium.com
a validé
if (defined('_tmp_dir'))
effacer_repertoire_temporaire(_tmp_dir);
// checker les erreurs eventuelles
$messages_erreur = array();
$nb_docs = 0;
$sel = array();

cedric@yterium.com
a validé
foreach ($nouveaux_doc as $doc) {
if (!is_numeric($doc))
$messages_erreur[] = $doc;

cedric@yterium.com
a validé
// cas qui devrait etre traite en amont
elseif(!$doc){
$messages_erreur[] = _T('medias:erreur_insertion_document_base',array('fichier'=>'<em>???</em>'));
}

cedric@yterium.com
a validé
else{
if (!$ancre)
$ancre = $doc;
$sel[] = $doc;

cedric@yterium.com
a validé
}
}
if (count($messages_erreur))
$res['message_erreur'] = implode('<br />',$messages_erreur);

cedric@yterium.com
a validé
if ($sel){
$res['message_ok'] = singulier_ou_pluriel(count($sel),'medias:document_installe_succes','medias:nb_documents_installe_succes');

cedric@yterium.com
a validé
}
if ($ancre)
$res['redirect'] = "#doc$ancre";
}

cedric@yterium.com
a validé
if (count($sel) OR isset($res['message_ok'])){

cedric@yterium.com
a validé
$callback = "";

cedric@yterium.com
a validé
if ($ancre)

cedric@yterium.com
a validé
$callback .= "jQuery('#doc$ancre a.editbox').eq(0).focus();";

cedric@yterium.com
a validé
if (count($sel)){
$sel = "#doc".implode(",#doc",$sel);

cedric@yterium.com
a validé
$callback .= "jQuery('$sel').animateAppend();";

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
$js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ $callback }});});";

cedric@yterium.com
a validé
$js = "<script type='text/javascript'>$js</script>";

cedric@yterium.com
a validé
if (isset($res['message_erreur']))
$res['message_erreur'].= $js;
else
$res['message_ok'] .= $js;

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
return $res;
}
/**
* Retourner le contenu du select HTML d'utilisation de fichiers envoyes
*
* @param string $dir
* @param string $mode
* @return string
*/
function joindre_options_upload_ftp($dir, $mode = 'document') {
$fichiers = preg_files($dir);
$exts = array();
$dirs = array();
$texte_upload = array();
// en mode "charger une image", ne proposer que les inclus
$inclus = ($mode == 'document' OR $mode =='choix')
? ''
: " AND inclus='image'";
foreach ($fichiers as $f) {
$f = preg_replace(",^$dir,",'',$f);
if (preg_match(",\.([^.]+)$,", $f, $match)) {
$ext = strtolower($match[1]);
if (!isset($exts[$ext])) {
include_spip('action/ajouter_documents');
$ext = corriger_extension($ext);
if (sql_fetsel('extension', 'spip_types_documents', $a = "extension='$ext'" . $inclus))
$exts[$ext] = 'oui';
else $exts[$ext] = 'non';
}
$k = 2*substr_count($f,'/');
$n = strrpos($f, "/");
if ($n === false)
$lefichier = $f;
else {
$lefichier = substr($f, $n+1, strlen($f));
$ledossier = substr($f, 0, $n);
if (!in_array($ledossier, $dirs)) {
$texte_upload[] = "\n<option value=\"$ledossier\">"
. str_repeat(" ",$k)
._T('medias:tout_dossier_upload', array('upload' => $ledossier))

cedric@yterium.com
a validé
."</option>";
$dirs[]= $ledossier;
}
}
if ($exts[$ext] == 'oui')
$texte_upload[] = "\n<option value=\"$f\">" .
str_repeat(" ",$k+2) .
$lefichier .
"</option>";
}

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
$texte = join('', $texte_upload);
if (count($texte_upload)>1) {
$texte = "\n<option value=\"/\" style='font-weight: bold;'>"
._T('medias:info_installer_tous_documents')

cedric@yterium.com
a validé
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
."</option>" . $texte;
}
return $texte;
}
/**
* Lister les fichiers contenus dans un zip
*
* @param unknown_type $files
* @return unknown
*/
function joindre_liste_contenu_tailles_archive($files) {
include_spip('inc/charsets'); # pour le nom de fichier
$res = '';
if (is_array($files))
foreach ($files as $nom => $file) {
$nom = translitteration($nom);
$date = date_interface(date("Y-m-d H:i:s", $file['mtime']));
$taille = taille_en_octets($file['size']);
$res .= "<li title=\"".attribut_html($title)."\"><b>$nom</b> – $taille<br /> $date</li>\n";
}
return $res;
}
function joindre_liste_erreurs_to_li($erreurs){
if (count($erreurs)==1)
return "<p>".reset($erreurs)."</p>";

cedric@yterium.com
a validé
$res = implode("</li><li>",$erreurs);
if (strlen($res)) $res = "<li>$res</li></ul>";

cedric@yterium.com
a validé
if (count($erreurs)>4){
$res = "<p style='cursor:pointer;' onclick='jQuery(this).siblings(\"ul\").toggle();return false;'>"._T("medias:erreurs_voir",array('nb'=>count($erreurs)))."</p><ul class=\"spip none-js\">".$res."</ul>";

cedric@yterium.com
a validé
}
else
$res = "<ul class=\"spip\">$res</ul>";

cedric@yterium.com
a validé
return $res;
}
?>