/** * 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; }
function joindre_documents($files, $mode, $type, $id, $id_document, $hash, $redirect, &$actifs, $iframe_redirect) { $ajouter_documents = charger_fonction('ajouter_documents', 'inc'); if (function_exists('gzopen') AND !($mode == 'distant') AND (count($files) == 1) AND (preg_match('/\.zip$/i', $files[0]['name']) OR ($files[0]['type'] == 'application/zip'))) { // on pose le fichier dans le repertoire zip // (nota : copier_document n'ecrase pas un fichier avec lui-meme // ca autorise a boucler) $desc = $files[0]; $zip = copier_document("zip", $desc['name'], $desc['tmp_name'] ); // Est-ce qu'on sait le lire ? include_spip('inc/pclzip'); $archive = $zip ? new PclZip($zip) : ''; if ($archive) { $valables = verifier_compactes($archive); if ($valables) { if (rename($zip, $tmp = _DIR_TMP.basename($zip))) { echo $ajouter_documents($valables, $tmp, $type, $id, $mode, $id_document, $actifs, $hash, $redirect, $iframe_redirect); // a tout de suite en joindre4, joindre5, ou joindre6 exit; } } } } foreach ($files as $arg) { // verifier l'extension du fichier en fonction de son type mime list($extension,$arg['name']) = fixer_extension_document($arg); check_upload_error($arg['error']); $x = $ajouter_documents($arg['tmp_name'], $arg['name'], $type, $id, $mode, $id_document, $actifs); } // un invalideur a la hussarde qui doit marcher au moins pour article, breve, rubrique include_spip('inc/invalideur'); suivre_invalideur("id='id_$type/$id'"); return $x; }
function action_spip_image_ajouter_dist($arg,$sousaction2,$source) { global $formats_logos; include_spip('inc/getdocument'); if (!$sousaction2) { if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES']; $source = (is_array($_FILES) ? array_pop($_FILES) : ""); } if ($source) { $f =_DIR_LOGOS . $arg . '.tmp'; if (!is_array($source)) // fichier dans upload/ $source = @copy(determine_upload() . $source, $f); else { // Intercepter une erreur a l'envoi if (check_upload_error($source['error'])) $source =""; else // analyse le type de l'image (on ne fait pas confiance au nom de // fichier envoye par le browser : pour les Macs c'est plus sur) $source = deplacer_fichier_upload($source['tmp_name'], $f); } } if (!$source) spip_log("pb de copie pour $f"); else { $size = @getimagesize($f); $type = !$size ? '': ($size[2] > 3 ? '' : $formats_logos[$size[2]-1]); if ($type) { $poids = filesize($f); if (_LOGO_MAX_SIZE > 0 AND $poids > _LOGO_MAX_SIZE*1024) { spip_unlink ($f); check_upload_error(6, _T('info_logo_max_poids', array('maxi' => taille_en_octets(_LOGO_MAX_SIZE*1024), 'actuel' => taille_en_octets($poids)))); } if (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT AND ($size[0] > _LOGO_MAX_WIDTH OR $size[1] > _LOGO_MAX_HEIGHT)) { spip_unlink ($f); check_upload_error(6, _T('info_logo_max_taille', array( 'maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _LOGO_MAX_WIDTH, 'hauteur_vignette' => _LOGO_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size[0], 'hauteur_vignette' => $size[1])) ))); } @rename ($f, _DIR_LOGOS . $arg . ".$type"); } else { spip_unlink ($f); check_upload_error(6,_T('info_logo_format_interdit', array('formats' => join(', ', $formats_logos)))); } } }
/** * @param string $objet * @param int $id_objet * @param string $etat * on ou off * @param string|array $source * array : sous tableau de $_FILE issu de l'upload * string : fichier source (chemin complet ou chemin relatif a tmp/upload) * @return string */ function logo_modifier($objet, $id_objet, $etat, $source) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); $objet = objet_type($objet); $primary = id_table_objet($objet); include_spip('inc/chercher_logo'); $type = type_du_logo($primary); // nom du logo $nom = $type . $etat . $id_objet; // supprimer le logo eventueel existant logo_supprimer($objet, $id_objet, $etat); include_spip('inc/documents'); $erreur = ""; if (!$source) { spip_log("spip_image_ajouter : source inconnue"); $erreur = "source inconnue"; return $erreur; } $file_tmp = _DIR_LOGOS . $nom . '.tmp'; $ok = false; // fichier dans upload/ if (is_string($source)) { if (file_exists($source)) { $ok = @copy($source, $file_tmp); } elseif (file_exists($f = determine_upload() . $source)) { $ok = @copy($f, $file_tmp); } } elseif (!($erreur = check_upload_error($source['error'], "", true))) { // analyse le type de l'image (on ne fait pas confiance au nom de // fichier envoye par le browser : pour les Macs c'est plus sur) $ok = deplacer_fichier_upload($source['tmp_name'], $file_tmp); } if ($erreur) { return $erreur; } if (!$ok or !file_exists($file_tmp)) { spip_log($erreur = "probleme de copie pour {$file_tmp} "); return $erreur; } $size = @getimagesize($file_tmp); $type = !$size ? '' : ($size[2] > 3 ? '' : $GLOBALS['formats_logos'][$size[2] - 1]); if ($type) { @rename($file_tmp, $file_tmp . ".{$type}"); $file_tmp = $file_tmp . ".{$type}"; $poids = filesize($file_tmp); if (defined('_LOGO_MAX_WIDTH') or defined('_LOGO_MAX_HEIGHT')) { if (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH or defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT) { $max_width = (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH) ? _LOGO_MAX_WIDTH : '*'; $max_height = (defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT) ? _LOGO_MAX_HEIGHT : '*'; // pas la peine d'embeter le redacteur avec ca si on a active le calcul des miniatures // on met directement a la taille maxi a la volee if (isset($GLOBALS['meta']['creer_preview']) and $GLOBALS['meta']['creer_preview'] == 'oui') { include_spip('inc/filtres'); $img = filtrer('image_reduire', $file_tmp, $max_width, $max_height); $img = extraire_attribut($img, 'src'); $img = supprimer_timestamp($img); if (@file_exists($img) and $img !== $file_tmp) { spip_unlink($file_tmp); @rename($img, $file_tmp); $size = @getimagesize($file_tmp); } } // verifier au cas ou image_reduire a echoue if (defined('_LOGO_MAX_WIDTH') and _LOGO_MAX_WIDTH and $size[0] > _LOGO_MAX_WIDTH or defined('_LOGO_MAX_HEIGHT') and _LOGO_MAX_HEIGHT and $size[1] > _LOGO_MAX_HEIGHT) { spip_unlink($file_tmp); $erreur = _T('info_logo_max_poids', array('maxi' => _T('info_largeur_vignette', array('largeur_vignette' => $max_width, 'hauteur_vignette' => $max_height)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $size[0], 'hauteur_vignette' => $size[1])))); } } } if (!$erreur and defined('_LOGO_MAX_SIZE') and _LOGO_MAX_SIZE and $poids > _LOGO_MAX_SIZE * 1024) { spip_unlink($file_tmp); $erreur = _T('info_logo_max_poids', array('maxi' => taille_en_octets(_LOGO_MAX_SIZE * 1024), 'actuel' => taille_en_octets($poids))); } if (!$erreur) { @rename($file_tmp, _DIR_LOGOS . $nom . ".{$type}"); } } else { spip_unlink($file_tmp); $erreur = _T('info_logo_format_interdit', array('formats' => join(', ', $GLOBALS['formats_logos']))); } return $erreur; }
function vignette_revision($id, $data, $type, $ref) { $s = sql_fetsel("id_document,id_vignette", "spip_documents", "id_document=" . intval($id)); if (!is_array($s)) { return false; } include_spip('inc/modifier'); include_spip('inc/documents'); include_spip('action/editer_document'); //pour revision_document // Chargement d'un nouveau doc ? if ($data['vignette']) { define('FILE_UPLOAD', true); if (is_numeric($s['id_vignette']) && $s['id_vignette'] > 0) { spip_log('suppression de la vignette'); // Suppression du document $vignette = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($s['id_vignette'])); if (@file_exists($f = get_spip_doc($vignette))) { spip_log("efface {$f}"); supprimer_fichier($f); } sql_delete('spip_documents', 'id_document=' . intval($s['id_vignette'])); sql_delete('spip_documents_liens', 'id_document=' . intval($s['id_vignette'])); pipeline('post_edition', array('args' => array('operation' => 'supprimer_document', 'table' => 'spip_documents', 'id_objet' => $s['id_vignette']), 'data' => null)); $id_vignette = 0; } $arg = $data['vignette']; check_upload_error($arg['error']); // Ajout du document comme vignette /** * Méthode >= SPIP 3.0 * ou SPIP 2.x + Mediatheque */ if ($ajouter_documents = charger_fonction('ajouter_documents', 'action', true)) { $x = $ajouter_documents(null, array($arg), '', 0, 'vignette'); $vignette = reset($x); if (intval($vignette)) { document_modifier($id, array('id_vignette' => $vignette)); } else { if ($id_vignette) { document_modifier($id, array('id_vignette' => $id_vignette)); } } } else { if ($ajouter_documents = charger_fonction('ajouter_documents', 'inc', true)) { // On remet l'id_vignette a 0 si on l'a supprimé if ($id_vignette) { revision_document($s['id_document'], array('id_vignette' => 0)); } $x = $ajouter_documents($arg['tmp_name'], $arg['name'], '', '', 'vignette', $id, $actifs); } } } else { // Suppression de la vignette ? if ($wid = array_pop($ref) and $_POST['content_' . $wid . '_vignette_supprimer'] == 'on') { if (is_numeric($s['id_vignette']) && $s['id_vignette'] > 0) { // Suppression du document $vignette = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($s['id_vignette'])); if (@file_exists($f = get_spip_doc($vignette))) { spip_log("efface {$f}"); supprimer_fichier($f); } sql_delete('spip_documents', 'id_document=' . intval($s['id_vignette'])); sql_delete('spip_documents_liens', 'id_document=' . intval($s['id_vignette'])); pipeline('post_edition', array('args' => array('operation' => 'supprimer_document', 'table' => 'spip_documents', 'id_objet' => $s['id_vignette']), 'data' => null)); // On remet l'id_vignette a 0 revision_document($s['id_document'], array('id_vignette' => 0)); } } } return true; }
function vignette_revision($id, $data, $type, $ref) { $s = sql_fetsel("*","spip_documents","id_document=".intval($id)); if (!is_array($s)) return false; include_spip('inc/modifier'); include_spip('inc/documents'); // Chargement d'un nouveau doc ? if ($data['vignette']) { define('FILE_UPLOAD', true); if(is_numeric($s['id_vignette']) && ($s['id_vignette']>0)){ spip_log('suppression de la vignette'); // Suppression du document $vignette = sql_getfetsel('fichier', 'spip_documents', 'id_document='.intval($s['id_vignette'])); if (@file_exists($f = get_spip_doc($vignette))) { spip_log("efface $f"); supprimer_fichier($f); } sql_delete('spip_documents', 'id_document='.intval($s['id_vignette'])); sql_delete('spip_documents_liens', 'id_document='.intval($s['id_vignette'])); pipeline('post_edition', array( 'args' => array( 'operation' => 'supprimer_document', 'table' => 'spip_documents', 'id_objet' => $s['id_vignette'] ), 'data' => null ) ); // On remet l'id_vignette a 0 revision_document($s['id_document'], array('id_vignette'=>0)); } // Ajout du document comme vignette $ajouter_documents = charger_fonction('ajouter_documents', 'inc'); $arg = $data['vignette']; check_upload_error($arg['error']); $x = $ajouter_documents($arg['tmp_name'], $arg['name'],'','', 'vignette', $id, $actifs); }else // Suppression de la vignette ? if ($wid = array_pop($ref) AND $_POST['content_'.$wid.'_vignette_supprimer'] == 'on') { if(is_numeric($s['id_vignette']) && ($s['id_vignette']>0)){ // Suppression du document $vignette = sql_getfetsel('fichier', 'spip_documents', 'id_document='.intval($s['id_vignette'])); if (@file_exists($f = get_spip_doc($vignette))) { spip_log("efface $f"); supprimer_fichier($f); } sql_delete('spip_documents', 'id_document='.intval($s['id_vignette'])); sql_delete('spip_documents_liens', 'id_document='.intval($s['id_vignette'])); pipeline('post_edition', array( 'args' => array( 'operation' => 'supprimer_document', 'table' => 'spip_documents', 'id_objet' => $s['id_vignette'] ), 'data' => null ) ); // On remet l'id_vignette a 0 revision_document($s['id_document'], array('id_vignette'=>0)); } } return true; }
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 ; }