function action_pdf2swf_convert() { global $visiteur_session; $id_auteur = $visiteur_session['id_auteur']; $arg = _request('arg'); $args = explode(":",$arg); // le 1er element de _request('arg') est id_article=XXX $Targs = explode("=", $args[0]); $id_article = $Targs[1]; $hash = _request('hash'); $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); // if (!autoriser('creerarticledans', 'rubrique', $id_rubrique)) die(_T('avis_non_acces_page')); // ss-rep temporaire specifique de l'auteur en cours: tmp/pdf2swf/id_auteur/ => le creer si il n'existe pas $base_dezip = _DIR_TMP."pdf2swf/"; // avec / final if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'pdf2swf')) die (_T('pdfswf:err_repertoire_tmp')); $rep_dezip = $base_dezip.$id_auteur.'/'; if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('pdfswf:err_repertoire_tmp')); // traitement d'un fichier pdf envoye par $_POST $fichier_zip = addslashes($_FILES['fichier_pdf']['name']); if ($_FILES['fichier_pdf']['name'] == '' OR $_FILES['fichier_pdf']['error'] != 0 OR !move_uploaded_file($_FILES['fichier_pdf']['tmp_name'], $rep_dezip.$fichier_zip) ) die(_T('pdfswf:err_telechargement_fichier')); // conversion du fichier pdf en swf // $command='pdf2swf -t '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; $command='pdf2swf -t -B '. _DIR_PLUGIN_PDF2SWF.'fdplayer.swf '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; exec($command); //attacher le fichier pdf original a l'article if (!isset($ajouter_documents)) $ajouter_documents = charger_fonction('ajouter_documents','inc'); // la y'a un bogue super-bizarre avec la fonction spip_abstract_insert() qui est donnee comme absente lors de l'appel de ajouter_document() if (!function_exists('spip_abstract_insert')) include_spip('base/abstract_sql'); $id_doc_swf = $ajouter_documents($rep_dezip.$fichier_zip.'.swf', $fichier_zip.'.swf', "article", $id_article, 'document', 0, $toto=''); // si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant if (_request('attacher_pdf') == '1') { $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto=''); } if (!function_exists('effacer_repertoire_temporaire')) include_spip('inc/getdocument'); // vider le contenu du rep de dezippage effacer_repertoire_temporaire($rep_dezip); // aller sur la page de l'article qui vient d'etre cree redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'id_article',$id_article,'&')); }
function effacer_repertoire_temporaire($nom) { $d = opendir($nom); while (($f = readdir($d)) !== false) { if (is_file("$nom/$f")) spip_unlink("$nom/$f"); else if ($f <> '.' AND $f <> '..' AND is_dir("$nom/$f")) effacer_repertoire_temporaire("$nom/$f"); } closedir($d); @rmdir($nom); }
function couteau_suisse_vider_tables($nom_meta_base_version) { effacer_meta($nom_meta_base_version); // effacement de toutes les metas du Couteau Suisse foreach(array_keys($GLOBALS['meta']) as $meta) { if(strpos($meta, 'tweaks_') === 0) effacer_meta($meta); if(strpos($meta, 'cs_') === 0) effacer_meta($meta); } ecrire_metas(); # Pour SPIP 1.92 // effacement des repertoires temporaires include_spip('inc/getdocument'); foreach(array(_DIR_CS_TMP, _DIR_VAR.'couteau-suisse') as $dir) if(@file_exists($dir)) effacer_repertoire_temporaire($dir); // fichier RSS temporaire include_spip('cout_define'); @unlink(_CS_TMP_RSS); // retrait de l'inclusion eventuelle dans config/mes_options.php include_spip('cout_utils'); cs_verif_FILE_OPTIONS(false, true); }
function joindre_deballes($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs) { $ajouter_documents = charger_fonction('ajouter_documents', 'inc'); define('_tmp_dir', creer_repertoire_documents($hash)); if (_tmp_dir == _DIR_IMG) {include_spip('inc/minipres'); echo minipres(_T('avis_operation_impossible')); exit; } include_spip('inc/pclzip'); $archive = new PclZip($path); $archive->extract( PCLZIP_OPT_PATH, _tmp_dir, PCLZIP_CB_PRE_EXTRACT, 'callback_deballe_fichier' ); $contenu = verifier_compactes($archive); $titrer = _request('titrer') == 'on'; foreach ($contenu as $fichier => $size) { $f = basename($fichier); $x = $ajouter_documents(_tmp_dir. $f, $f, $type, $id, $mode, $id_document, $actifs, $titrer); } effacer_repertoire_temporaire(_tmp_dir); return $x; }
/** * Ajouter un document (au format $_FILES)<br> * (n'ajoute pas le contenu en base dans spip_documents...) * * @param string $source Le fichier sur le serveur (/var/tmp/xyz34) * @param string $nom_envoye Son nom chez le client (portequoi.pdf) * @param string $nom_dest Le nom sous lequel le sauvegarder * @param string $dans Où l'enregistrer * @return string */ function cfg_ajoute_un_document($source, $nom_envoye, $nom_dest, $dans='config') { include_spip('inc/modifier'); include_spip('inc/ajouter_documents'); $type_image = ''; // au pire // tester le type de document : // - interdit a l'upload ? // - quelle extension dans spip_types_documents ? // - est-ce "inclus" comme une image ? preg_match(",^(.*)\.([^.]+)$,", $nom_envoye, $match); @list(,$titre,$ext) = $match; $ext = corriger_extension(strtolower($ext)); // ajouter l'extension au nom propose... $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'"); if ($row) { $type_inclus_image = ($row['inclus'] == 'image'); // hum stocke dans IMG/$ext ? $fichier = cfg_copier_document($ext, $nom_dest.'.'.$ext, $source, $dans); } else { /* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */ $type_inclus_image = false; if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) { spip_log("Extension $ext interdite a l'upload"); return; } $ext = 'zip'; if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return; spip_unlink($tmp_dir); @mkdir($tmp_dir); $tmp = $tmp_dir.'/'.translitteration($nom_envoye); $nom_envoye .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip _COMPAT_CFG_192 ? cfg_deplacer_fichier_upload($source, $tmp) : deplacer_fichier_upload($source, $tmp); include_spip('inc/pclzip'); $source = _DIR_TMP . 'archive.zip'; $archive = new PclZip($source); $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, ''); effacer_repertoire_temporaire($tmp_dir); if (!$v_list) { spip_log("Echec creation du zip "); return; } // hum too ? $fichier = cfg_copier_document($ext, $nom_dest.'.zip', $source, $dans); spip_unlink($source); } if ($ext == "svg") { // supprimer les scripts traite_svg($fichier); } elseif ($ext != "mov") {// image ? // Si c'est une image, recuperer sa taille et son type (detecte aussi swf) $size_image = @getimagesize($fichier); $type_image = decoder_type_image($size_image[2]); } // Quelques infos sur le fichier if (!$fichier OR !@file_exists($fichier) OR !$taille = @intval(filesize($fichier))) { spip_log ("Echec copie du fichier $fichier"); return; } if (!$type_image) { if (_DOC_MAX_SIZE > 0 AND $taille > _DOC_MAX_SIZE*1024) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024), 'actuel' => taille_en_octets($taille)))); } } else { // image if (_IMG_MAX_SIZE > 0 AND $taille > _IMG_MAX_SIZE*1024) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024), 'actuel' => taille_en_octets($taille)))); } if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT AND ($size_image[0] > _IMG_MAX_WIDTH OR $size_image[1] > _IMG_MAX_HEIGHT)) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_taille', array( 'maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _IMG_MAX_WIDTH, 'hauteur_vignette' => _IMG_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size_image[0], 'hauteur_vignette' => $size_image[1])) ))); } } return $fichier; }
/** * Efface le répertoire de manière récursive ! * * @param string $nom */ function effacer_repertoire_temporaire($nom) { $d = opendir($nom); while (($f = readdir($d)) !== false) { if (is_file("{$nom}/{$f}")) { spip_unlink("{$nom}/{$f}"); } else { if ($f != '.' and $f != '..' and is_dir("{$nom}/{$f}")) { effacer_repertoire_temporaire("{$nom}/{$f}"); } } } closedir($d); @rmdir($nom); }
/** * Traitement du formulaire * * @param int|string $id_document * L'identidiant numérique du document s'il est à remplacer, sinon "new" * @param int $id_objet * L'identifiant numérique de l'objet sur lequel on ajoute le document * @param string $objet * Le type de l'objet sur lequel on ajoute le document * @param string $mode * Le mode du document (auto,choix,document,image,vignette...), par défaut auto * @param string $galerie * Passer optionnellement une galerie jointe au form, plus utilise nativement, * on prefere la mise a jour apres upload par ajaxReload('documents') * @param bool|string $proposer_media * Doit on afficher la médiathèque ? par défaut oui * Valeurs possibles si string : false,'non','no'. * @param bool|string $proposer_ftp * Doit on afficher le ftp ? par défaut oui * Valeurs possibles si string : false,'non','no'. * @return array $res * Le tableau renvoyé par les CVT avec le message et editable */ 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')) { $refdoc_joindre = _request('refdoc_joindre'); $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); } $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); if (!$ancre) { $ancre = $j; } $sel[] = $j; $res['message_ok'] = _T('medias:document_attache_succes'); } } 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 } 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); if (defined('_tmp_zip')) { unlink(_tmp_zip); } if (defined('_tmp_dir')) { effacer_repertoire_temporaire(_tmp_dir); } // checker les erreurs eventuelles $messages_erreur = array(); $nb_docs = 0; $sel = array(); foreach ($nouveaux_doc as $doc) { if (!is_numeric($doc)) { $messages_erreur[] = $doc; } elseif (!$doc) { $messages_erreur[] = _T('medias:erreur_insertion_document_base', array('fichier' => '<em>???</em>')); } else { if (!$ancre) { $ancre = $doc; } $sel[] = $doc; } } if (count($messages_erreur)) { $res['message_erreur'] = implode('<br />', $messages_erreur); } if ($sel) { $res['message_ok'] = singulier_ou_pluriel(count($sel), 'medias:document_installe_succes', 'medias:nb_documents_installe_succes'); } if ($ancre) { $res['redirect'] = "#doc{$ancre}"; } } if (count($sel) or isset($res['message_ok'])) { $callback = ""; if ($ancre) { $callback .= "jQuery('#doc{$ancre} a.editbox').eq(0).focus();"; } if (count($sel)) { // passer les ids document selectionnes aux pipelines $res['ids'] = $sel; $sel = "#doc" . implode(",#doc", $sel); $callback .= "jQuery('{$sel}').animateAppend();"; } $js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ {$callback} }});});"; $js = "<script type='text/javascript'>{$js}</script>"; if (isset($res['message_erreur'])) { $res['message_erreur'] .= $js; } else { $res['message_ok'] .= $js; } } return $res; }
/** * Tester le type de document * * - le document existe et n'est pas de taille 0 ? * - interdit a l'upload ? * - quelle extension dans spip_types_documents ? * - est-ce "inclus" comme une image ? * * Le zipper si necessaire * * @param array $file * Au format $_FILES * @param string $mode * Mode d'inclusion du fichier, si connu * @return array */ function fixer_fichier_upload($file, $mode = '') { /** * On vérifie que le fichier existe et qu'il contient quelque chose */ if (is_array($row = verifier_upload_autorise($file['name'], $mode))) { if (!isset($row['autozip'])) { $row['fichier'] = copier_document($row['extension'], $file['name'], $file['tmp_name']); /** * On vérifie que le fichier a une taille * si non, on le supprime et on affiche une erreur */ if ($row['fichier'] && !($taille = @intval(filesize(get_spip_doc($row['fichier']))))) { spip_log("Echec copie du fichier " . $file['tmp_name'] . " (taille de fichier indéfinie)"); spip_unlink(get_spip_doc($row['fichier'])); return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name'])); } else { return $row; } } else { unset($row['autozip']); $ext = 'zip'; if (!($tmp_dir = tempnam(_DIR_TMP, 'tmp_upload'))) { return false; } spip_unlink($tmp_dir); @mkdir($tmp_dir); include_spip('inc/charsets'); $tmp = $tmp_dir . '/' . translitteration($file['name']); $file['name'] .= '.' . $ext; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip // deplacer le fichier tmp_name dans le dossier tmp deplacer_fichier_upload($file['tmp_name'], $tmp, true); include_spip('inc/pclzip'); $source = _DIR_TMP . basename($tmp_dir) . '.' . $ext; $archive = new PclZip($source); $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, ''); effacer_repertoire_temporaire($tmp_dir); if (!$v_list) { spip_log("Echec creation du zip "); return false; } $row['fichier'] = copier_document($row['extension'], $file['name'], $source); spip_unlink($source); /** * On vérifie que le fichier a une taille * si non, on le supprime et on affiche une erreur */ if ($row['fichier'] && !($taille = @intval(filesize(get_spip_doc($row['fichier']))))) { spip_log("Echec copie du fichier " . $file['tmp_name'] . " (taille de fichier indéfinie)"); spip_unlink(get_spip_doc($row['fichier'])); return _T('medias:erreur_copie_fichier', array('nom' => $file['tmp_name'])); } else { return $row; } } } else { return $row; } // retourner le message d'erreur }
function action_odt2spip_importe() { global $visiteur_session; $id_auteur = $visiteur_session['id_auteur']; $arg = _request('arg'); $args = explode(":",$arg); // le 1er element de _request('arg') est id_rubrique=XXX $Targs = explode("=", $args[0]); $id_rubrique = $Targs[1]; $hash = _request('hash'); $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (!autoriser('creerarticledans', 'rubrique', $id_rubrique)) die(_T('avis_non_acces_page')); // ss-rep temporaire specifique de l'auteur en cours: tmp/odt2spip/id_auteur/ => le creer si il n'existe pas $base_dezip = _DIR_TMP."odt2spip/"; // avec / final if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'odt2spip')) die (_T('odtspip:err_repertoire_tmp')); $rep_dezip = $base_dezip.$id_auteur.'/'; if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('odtspip:err_repertoire_tmp')); // traitement d'un fichier odt envoye par $_POST $fichier_zip = addslashes($_FILES['fichier_odt']['name']); if ($_FILES['fichier_odt']['name'] == '' OR $_FILES['fichier_odt']['error'] != 0 OR !move_uploaded_file($_FILES['fichier_odt']['tmp_name'], $rep_dezip.$fichier_zip) ) die(_T('odtspip:err_telechargement_fichier')); // dezipper le fichier odt a la mode SPIP include_spip("inc/pclzip"); $zip = new PclZip($rep_dezip.$fichier_zip); $ok = $zip->extract( PCLZIP_OPT_PATH, $rep_dezip, PCLZIP_OPT_SET_CHMOD, _SPIP_CHMOD, PCLZIP_OPT_REPLACE_NEWER ); if ($zip->error_code < 0) { spip_log('charger_decompresser erreur zip ' . $zip->error_code .' pour fichier ' . $rep_dezip.$fichier_zip); die($zip->errorName(true)); //$zip->error_code } // Creation du fichier necessaire a snippets $odt2spip_generer_sortie = charger_fonction('odt2spip_generer_sortie','inc'); list($fichier_sortie,$xml_sortie) = $odt2spip_generer_sortie($id_auteur,$rep_dezip); // generer l'article a partir du fichier xml de sortie (code pompe sur plugins/snippets/action/snippet_importe.php) include_spip('inc/snippets'); $table = $id = 'articles'; $contexte = $args[0]; $source = $fichier_sortie; if (!$f = snippets_fonction_importer($table)) die(_T('odtspip:err_import_snippet')); include_spip('inc/xml'); $arbre = spip_xml_load($source, false); $translations = $f($id,$arbre,$contexte); snippets_translate_raccourcis_modeles($translations); $id_article = $translations[0][2]; // si on est en 2.0 passer le statut de l'article en prepa sql_updateq('spip_articles', array('statut' => 'prop'), 'id_article='.$id_article); // si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant if (_request('attacher_odt') == '1') { // recuperer le titre preg_match('/<titre>(.*?)<\/titre>/', $xml_sortie, $match); $titre = $match[1]; if (!isset($ajouter_documents)) $ajouter_documents = charger_fonction('ajouter_documents','inc'); // la y'a un bogue super-bizarre avec la fonction spip_abstract_insert() qui est donnee comme absente lors de l'appel de ajouter_document() if (!function_exists('spip_abstract_insert')) include_spip('base/abstract_sql'); $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto=''); $c = array( 'titre' => $titre, 'descriptif' => _T('odtspip:cet_article_version_odt') ); include_spip('inc/modifier'); revision_document($id_doc_odt,$c); } if (!function_exists('effacer_repertoire_temporaire')) include_spip('inc/getdocument'); // vider le contenu du rep de dezippage effacer_repertoire_temporaire($rep_dezip); // aller sur la page de l'article qui vient d'etre cree redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'id_article',$id_article,'&')); }
function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document, &$documents_actifs, $titrer=false) { include_spip('inc/modifier'); // Documents distants : pas trop de verifications bloquantes, mais un test // via une requete HEAD pour savoir si la ressource existe (non 404), si le // content-type est connu, et si possible recuperer la taille, voire plus. if ($mode == 'distant') { include_spip('inc/distant'); if ($a = recuperer_infos_distantes($source)) { # NB: dans les bonnes conditions (fichier autorise et pas trop gros) # $a['fichier'] est une copie locale du fichier $type_image = $a['type_image']; unset($a['type_image']); unset($a['body']); $a['date'] = date('Y-m-d H:i:s'); $a['distant'] = 'oui'; $a['mode'] = 'document'; $a['fichier'] = set_spip_doc($source); } else { spip_log("Echec du lien vers le document $source, abandon"); return; } } else { // pas distant $type_image = ''; // au pire // tester le type de document : // - interdit a l'upload ? // - quelle extension dans spip_types_documents ? // - est-ce "inclus" comme une image ? list($nom_envoye, $ext, $titre, $inclus) = corriger_extension_et_nom($nom_envoye, $titrer); if ($inclus !== false) { $type_inclus_image = ($inclus == 'image'); $fichier = copier_document($ext, $nom_envoye, $source); } else { /* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */ $type_inclus_image = false; if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) { spip_log("Extension $ext interdite a l'upload"); return; } $ext = 'zip'; if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return; spip_unlink($tmp_dir); @mkdir($tmp_dir); $tmp = $tmp_dir.'/'.translitteration($nom_envoye); $nom_envoye .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip deplacer_fichier_upload($source, $tmp); include_spip('inc/pclzip'); $source = _DIR_TMP . 'archive.zip'; $archive = new PclZip($source); $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, ''); effacer_repertoire_temporaire($tmp_dir); if (!$v_list) { spip_log("Echec creation du zip "); return; } $fichier = copier_document($ext, $nom_envoye, $source); spip_unlink($source); } // Prevoir traitement specifique pour videos // (http://www.getid3.org/ peut-etre if ($ext == "mov") { $largeur = 0; $hauteur = 0; } else if ($ext == "svg") { // recuperer les dimensions et supprimer les scripts list($largeur,$hauteur)= traite_svg($fichier); } else { // image ? // Si c'est une image, recuperer sa taille et son type (detecte aussi swf) $size_image = @getimagesize($fichier); $largeur = intval($size_image[0]); $hauteur = intval($size_image[1]); $type_image = decoder_type_image($size_image[2]); } // Quelques infos sur le fichier if (!$fichier OR !@file_exists($fichier) OR !$taille = @intval(filesize($fichier))) { spip_log ("Echec copie du fichier $fichier"); return; } // _INTERFACE_DOCUMENTS // Si mode == 'choix', fixer le mode image/document if ($mode == 'choix') { $choisir_mode_document = charger_fonction('choisir_mode_document','inc'); $mode = $choisir_mode_document($fichier, $type_lien, $type_image, $largeur, $hauteur); } if (!$type_image) { if (_DOC_MAX_SIZE > 0 AND $taille > _DOC_MAX_SIZE*1024) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024), 'actuel' => taille_en_octets($taille)))); } if ($mode == 'image') { spip_log ("le format de $fichier ne convient pas pour une image"); spip_unlink($fichier); return; } } else { // image if (_IMG_MAX_SIZE > 0 AND $taille > _IMG_MAX_SIZE*1024) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024), 'actuel' => taille_en_octets($taille)))); } if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT AND ($size_image[0] > _IMG_MAX_WIDTH OR $size_image[1] > _IMG_MAX_HEIGHT)) { spip_unlink ($fichier); check_upload_error(6, _T('info_logo_max_taille', array( 'maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _IMG_MAX_WIDTH, 'hauteur_vignette' => _IMG_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size_image[0], 'hauteur_vignette' => $size_image[1])) ))); } } // Si on veut uploader une vignette, il faut qu'elle ait ete bien lue if ($mode == 'vignette') { if (!$type_inclus_image) { spip_log ("le format de $fichier ne convient pas pour une image"); # SVG spip_unlink($fichier); return; } if (!($largeur OR $hauteur)) { spip_log('erreur upload vignette '.$fichier); spip_unlink($fichier); return; } } elseif (!in_array($mode, array('distant', 'image', 'document'))) { if ($type_image AND $type_inclus_image) $mode = 'image'; else $mode = 'document'; } $a = array( 'date' => date('Y-m-d H:i:s'), 'distant' => 'non', 'mode' => $mode, 'titre'=> $titre, 'largeur' => $largeur, 'hauteur' => $hauteur, 'taille' => $taille, 'extension'=> $ext, 'fichier' => set_spip_doc($fichier)); } if (($id_document=intval($id_document)) AND $mode!='vignette') { // Mise a jour des descripteurs d'un vieux doc unset($a['titre']); unset($a['date']); unset($a['distant']); unset($a['mode']); sql_updateq('spip_documents', $a, "id_document=$id_document"); $id = $id_document; } else { // Installer le document dans la base // attention piege semantique : les images s'installent en mode 'vignette' // note : la fonction peut "mettre a jour un document" si on lui // passe "mode=document" et "id_document=.." (pas utilise) // Envoyer aux plugins $a = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_documents', ), 'data' => $a ) ); if (strlen($a['fichier']) > 255) { spip_log("Upload avec nom > 255 : " . $a['fichier']); return; } $id = sql_insertq("spip_documents", $a); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_documents', 'id_objet' => $id_document ), 'data' => $a ) ); spip_log ("ajout du document $source $nom_envoye (M '$mode' T '$type_lien' L '$id_lien' D '$id')"); if ($id_lien AND $id AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite ) { sql_insertq('spip_documents_liens', array('id_document' => $id, 'id_objet' => $id_lien, 'objet' => $type_lien)); } else spip_log("Pb d'insertion $id_lien $type_lien"); if ($id_document) { sql_updateq("spip_documents", array("id_vignette" => $id, "mode" => 'document'), "id_document=$id_document"); } else $id_document = $id; // Appliquer l'exif orientation // http://trac.rezo.net/trac/spip/ticket/1494 define('_TOURNER_SELON_EXIF', false); # par defaut non, risque memoire if (defined('_TOURNER_SELON_EXIF') AND _TOURNER_SELON_EXIF AND $mode == 'document' AND $a['distant'] == 'non' AND $a['extension'] == 'jpg') { include_spip('action/tourner'); tourner_selon_exif_orientation($id_document, $fichier); } } // pour que le retour vers ecrire/ active le bon doc. $documents_actifs[$fichier] = $id_document; // Notifications, gestion des revisions, reindexation... pipeline('post_edition', array( 'args' => array( 'operation' => 'ajouter_document', 'table' => 'spip_documents', 'id_objet' => $id, 'type_image' => $type_image ), 'data' => null ) ); return $id ; }