/** * http://code.spip.net/@action_copier_local_post * * @param $id_document * @return bool|mixed|string */ function action_copier_local_post($id_document) { // Il faut la source du document pour le copier $row = sql_fetsel("mode,fichier, descriptif, credits", "spip_documents", "id_document={$id_document}"); $source = $row['fichier']; include_spip('inc/distant'); // pour 'copie_locale' $fichier = copie_locale($source); if ($fichier) { $fichier = _DIR_RACINE . $fichier; $files[] = array('tmp_name' => $fichier, 'name' => basename($fichier)); $ajouter_documents = charger_fonction('ajouter_documents', 'action'); spip_log("convertit doc {$id_document} en local: {$source} => {$fichier}"); $liste = array(); $ajouter_documents($id_document, $files, '', 0, $row['mode'], $liste); spip_unlink($fichier); // ajouter l'origine du document aux credits include_spip('action/editer_document'); document_modifier($id_document, array('credits' => ($row['credits'] ? $row['credits'] . ', ' : '') . $source)); return true; } else { spip_log("echec copie locale {$source}"); } return _T('medias:erreur_copie_fichier', array('nom' => $source)); }
function formulaires_illustrer_document_traiter_dist($id_document) { $id_vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id_document)); $res = array('editable' => true); if (_request('supprimer')) { $supprimer_document = charger_fonction('supprimer_document', 'action'); if ($id_vignette and $supprimer_document($id_vignette)) { $res['message_ok'] = _T('medias:vignette_supprimee'); } else { $res['message_erreur'] = _T('medias:erreur_suppression_vignette'); } } else { $ajouter_documents = charger_fonction('ajouter_documents', 'action'); include_spip('inc/joindre_document'); $files = joindre_trouver_fichier_envoye(); $ajoute = $ajouter_documents($id_vignette, $files, '', 0, 'vignette'); if (is_numeric(reset($ajoute)) and $id_vignette = reset($ajoute)) { include_spip('action/editer_document'); document_modifier($id_document, array("id_vignette" => $id_vignette, 'mode' => 'document')); $res['message_ok'] = _T('medias:document_installe_succes'); } else { $res['message_erreur'] = reset($ajoute); } } // todo : // generer les case docs si c'est necessaire // rediriger sinon return $res; }
function action_changer_mode_document_post($id_document, $mode) { // - id_document le doc a modifier // - mode le mode a lui donner if ($id_document = intval($id_document) and in_array($mode, array('vignette', 'image', 'document'))) { include_spip('action/editer_document'); document_modifier($id_document, array('mode' => $mode)); } }
function action_supprimer_document_dist($id_document = 0) { if (!$id_document) { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_document = $securiser_action(); } include_spip('inc/autoriser'); if (!autoriser('supprimer', 'document', $id_document)) { spip_log("Echec : Suppression document {$id_document} interdite", _LOG_ERREUR); return false; } // si c'etait une vignette, modifier le document source ! if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette=' . intval($id_document))) { include_spip('action/editer_document'); document_modifier($source, array("id_vignette" => 0)); } include_spip('inc/documents'); if (!($doc = sql_fetsel('*', 'spip_documents', 'id_document=' . intval($id_document)))) { spip_log("Echec : Suppression document {$id_document} : le document n'existe pas en base", _LOG_ERREUR); return false; } spip_log("Suppression du document {$id_document} (" . $doc['fichier'] . ")"); include_spip('action/editer_liens'); // Si c'est un document ayant une vignette, supprimer aussi la vignette if ($doc['id_vignette']) { action_supprimer_document_dist($doc['id_vignette']); objet_dissocier(array('document' => $doc['id_vignette']), '*'); } // Si c'est un document ayant des documents annexes (sous-titre, ...) // les supprimer aussi $annexes = array_map('reset', sql_allfetsel("id_document", "spip_documents_liens", "objet='document' AND id_objet=" . intval($id_document))); foreach ($annexes as $id) { action_supprimer_document_dist($id); } // dereferencer dans la base objet_dissocier(array('document' => $id_document), '*', array('role' => '*')); sql_delete('spip_documents', 'id_document=' . intval($id_document)); // Supprimer le fichier si le doc est local, // et la copie locale si le doc est distant if ($doc['distant'] == 'oui') { include_spip('inc/distant'); if ($local = _DIR_RACINE . copie_locale($doc['fichier'], 'test')) { spip_unlink($local); } } else { spip_unlink(get_spip_doc($doc['fichier'])); } pipeline('post_edition', array('args' => array('operation' => 'supprimer_document', 'action' => 'supprimer_document', 'table' => 'spip_documents', 'id_objet' => $id_document, 'document' => $doc), 'data' => null)); return true; }
function spip_importer_articles($spip_data) { global $tables_conversion; foreach ($spip_data as $entry) { $id_rubrique = null; $type = $entry['metadata']['type']; journaliser(sprintf("Traitement d'un nouvel item : %s - %s", $entry['metadata']['nid'], $type), 2); if (binlog_contient($entry['metadata']['nid'])) { journaliser("L'élément %s a déjà été converti", $entry['metadata']['nid']); continue; } journaliser("Recherche de la catégorie cible pour l'article"); /* FIXME: doit être déplacé hors de cette fonction (spécifique site cible). */ /* CATEGORIE CIBLE */ /* Remarque : les articles de type 'story' sont dispatchés par la * fonction dispatch_story_type() */ $cat_cible = array('video' => 14, 'photos' => 23, 'audio' => 24, 'commission' => 36, 'livre' => 15, 'evenement' => 11); $fct = "dispatch_{$type}_type"; if (function_exists($fct)) { $id_rubrique = call_user_func($fct, $entry); } elseif ($cat_cible[$type]) { $id_rubrique = $cat_cible[$type]; } if ($id_rubrique == null) { journaliser("Catégorie cible introuvable pour le type de contenu " . $type, 4); die; } journaliser("Envoi de l'article dans la rubrique %s", $id_rubrique, 1); /* --- VIDEO --- */ if ($type == "video") { if ($entry['documents']['video']) { /* Si une vidéo est présente dans ce champ, il faut modifier le * texte de l'article et ajouter le lien vers la video à la * fin. */ $entry['article']['texte'] .= sprintf("\n\n%s", $entry['documents']['video']); } } /* --- AUDIO --- */ if ($type == "audio") { journaliser("Gestion des documents audio"); $audio_path = $entry['documents']['audio']; $audio_name = $entry['documents']['audio_name']; $id_document = importer_document($audio_path, $audio_name); journaliser("Import du document : " . $id_document, 1); $entry['article']['texte'] = sprintf("<emb%s>\nRéalisation : %s\n\n%s", $id_document, $entry['documents']['audio_desc'], $entry['article']['texte']); document_modifier($id_document, array('credits' => $entry['documents']['audio_desc'])); } /* --- PIECES JOINTES --- */ if ($entry['documents']['pdf']) { journaliser("Ajout des pièces jointes au format PDF"); foreach ($entry['documents']['pdf'] as $document) { $id_document = importer_document($document['filepath'], $document['filename']); journaliser(sprintf("Document PDF %s importé", $id_document), 1); $entry['article']['texte'] = sprintf("%s\n\n<lecteurpdf%s>", $entry['article']['texte'], $id_document); } } /* --- ARTICLE --- */ journaliser("Création du nouvel article"); $id_article = article_inserer($id_rubrique); journaliser("Nouvel article créee : {$id_article}", 1); //print_r($entry['article']); article_modifier($id_article, $entry['article']); journaliser("Ajout des données dans l'article n° {$id_article}", 1); /* --- AUTEUR => ARTICLE --- */ journaliser("Création ou récupération des auteurs qui doivent être associées à l'article"); $id_auteurs = array(); if ($entry['auteur']['nom']) { foreach ($entry['auteur']['nom'] as $nom_auteur) { journaliser("Recherche de l'auteur « {$nom_auteur} »", 1); if ($id = sql_getfetsel("id_auteur", "spip_auteurs", 'nom LIKE ' . sql_quote("% - {$nom_auteur}"))) { journaliser("« {$nom_auteur} » trouvé : {$id} (REGEXP)", 1); $id_auteurs[] = $id; } elseif ($id = sql_getfetsel("id_auteur", "spip_auteurs", 'nom=' . sql_quote($nom_auteur))) { journaliser("« {$nom_auteur} » trouvé : {$id}", 1); $id_auteurs[] = $id; } else { $id = auteur_inserer(); auteur_modifier($id, array('nom' => $nom_auteur, 'statut' => '1comite')); $id_auteurs[] = $id; journaliser("« {$nom_auteur} » créé : {$id}", 1); } } foreach ($id_auteurs as $id) { journaliser("Association de l'auteur %s à l'article", $id, 1); auteur_associer($id, array('article' => $id_article)); } } if (!in_array(1, $id_auteurs)) { journaliser("Retrait de l'auteur 1", 1); auteur_dissocier(1, array('article' => $id_article)); } /* --- CAMPAGNE --- */ if ($entry['metadata']['campagne']) { journaliser("Ajout des mots-clés de campagne"); foreach ($entry['metadata']['campagne'] as $campagne) { journaliser("Association du mot clé %s à l'article %s", $campagne, $id_article, 1); mot_associer($campagne, array('article' => $id_article)); } } /* --- ATTACPÉDIA --- */ if ($entry['metadata']['attacpedia']) { journaliser("Ajout des mots-clés Attacpédia"); foreach ($entry['metadata']['attacpedia'] as $attacpedia) { journaliser("Association du mot clé %s à l'article %s", $attacpedia, $id_article, 1); mot_associer($attacpedia, array('article' => $id_article)); } } /* EVENEMENT */ if ($type == "evenement") { journaliser("Création de l'évènement"); foreach ($entry['evenement']['dates'] as $dates_evt) { $id_evenement = evenement_inserer($id_article); journaliser("Numéro de l'évènement : %s", $id_evenement, 1); evenement_modifier($id_evenement, array('titre' => $entry['article']['titre'], 'lieu' => $entry['evenement']['lieu'], 'date_debut' => $dates_evt['date_debut'], 'date_fin' => $dates_evt['date_fin'], 'statut' => $entry['article']['statut'])); journaliser("Géolocation GIS", 1); $id_gis = gis_inserer(); journaliser("Création du lieu GIS : %s", $id_gis, 1); gis_modifier($id_gis, $entry['gis']); lier_gis($id_gis, "evenement", $id_evenement); journaliser("Lien de l'évènement %s au lieu %s", $id_evenement, $id_gis, 1); } } /* --- TYPE D'EVENEMENT --- */ if ($type == "evenement") { $id_mot_drupal = $entry['metadata']['type_evenement']; $mod_evt = $tables_conversion['type_evenement'][$id_mot_drupal]; mot_associer($mod_evt, array('article' => $id_article)); journaliser("Association du mot clé %s/%s à l'article %s", $id_mot_drupal, $mod_evt, $id_article, 1); } /* --- PIECES JOINTES --- */ if ($entry['documents']['pj']) { journaliser("Ajout des pièces jointes"); foreach ($entry['documents']['pj'] as $document) { $id_document = importer_document($document['filepath'], $document['filename'], $id_article); journaliser(sprintf("Document %s importé", $id_document), 1); } } /* --- GALERIES PHOTO --- */ if ($entry['documents']['photos']) { journaliser("Ajout des pĥotos jointes"); foreach ($entry['documents']['photos'] as $document) { $id_document = importer_document($document['filepath'], $document['filename'], $id_article, "document"); journaliser(sprintf("Document %s importé", $id_document), 1); } } /* --- URL --- */ journaliser("Gestion des URL"); $urls = array(); $urls[] = "node/" . $entry['metadata']['nid']; $urls[] = $entry['url']['url']; foreach ($urls as $url) { if ($url) { if ($url_existante = sql_fetsel(array('id_objet', 'type'), 'spip_urls', 'url=' . sql_quote($url))) { journaliser(sprintf("URL ({$url}) déjà existante (%s / %s)", $url_existante['type'], $url_existante['id_objet']), 4); } else { $sql_url = array('url' => $url, 'type' => 'article', 'id_objet' => $id_article, 'perma' => 1, 'id_parent' => $id_rubrique); url_insert($sql_url, false, '-'); journaliser(sprintf("URL ajoutée : %s/%s", $GLOBALS['meta']['adresse_site'], $url), 1); } } } /* --- LOGO --- */ if ($entry['logo']['chemin']) { journaliser("Import du logo"); $remote = sprintf("http://www.france.attac.org/%s", $entry['logo']['chemin']); $filename = $entry['logo']['fichier']; $fic = copie_locale($remote, 'auto', determine_upload() . $filename); journaliser("Logo ({$remote}) => {$fic}", 1); $spip_image_ajouter = charger_fonction('spip_image_ajouter', 'action'); $spip_image_ajouter('arton' . $id_article, true, $filename); spip_unlink($fic); } $dest_url = sprintf("%s/%s", $GLOBALS['meta']['adresse_site'], $id_article); journaliser(sprintf("Article publié : <%s>", $dest_url), 2); binlog($entry['metadata']['nid'], $entry['metadata']['type'], $id_article, $entry['article']['titre'], $dest_url); } }
/** * 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; }
/** * Ajouter un document (au format $_FILES) * * @param int $id_document * Document à remplacer, ou pour une vignette, l'id_document de maman * 0 ou 'new' pour une insertion * @param array $file * Propriétes au format $_FILE étendu : * * - string tmp_name : source sur le serveur * - string name : nom du fichier envoye * - bool titrer : donner ou non un titre a partir du nom du fichier * - bool distant : pour utiliser une source distante sur internet * - string mode : vignette|image|documents|choix * @param string $objet * Objet auquel associer le document * @param int $id_objet * id_objet * @param string $mode * Mode par défaut si pas precisé pour le document * @return array|bool|int|mixed|string|unknown * * - int : l'id_document ajouté (opération réussie) * - string : une erreur s'est produit, la chaine est le message d'erreur * */ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet, $mode) { $source = $file['tmp_name']; $nom_envoye = $file['name']; // passer en minuscules le nom du fichier, pour eviter les collisions // si le file system fait la difference entre les deux il ne detectera // pas que Toto.pdf et toto.pdf // et on aura une collision en cas de changement de file system $file['name'] = strtolower(translitteration($file['name'])); // Pouvoir definir dans mes_options.php que l'on veut titrer tous les documents par d?faut if (!defined('_TITRER_DOCUMENTS')) { define('_TITRER_DOCUMENTS', false); } $titrer = isset($file['titrer']) ? $file['titrer'] : _TITRER_DOCUMENTS; $mode = (isset($file['mode']) and $file['mode']) ? $file['mode'] : $mode; include_spip('inc/modifier'); if (isset($file['distant']) and $file['distant'] and !in_array($mode, array('choix', 'auto', 'image', 'document'))) { spip_log("document distant {$source} accepte sans verification, mode={$mode}", "medias" . _LOG_INFO_IMPORTANTE); include_spip('inc/distant'); $file['tmp_name'] = _DIR_RACINE . copie_locale($source); $source = $file['tmp_name']; unset($file['distant']); } // 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 (isset($file['distant']) and $file['distant']) { if (!tester_url_absolue($source)) { return _T('medias:erreur_chemin_distant', array('nom' => $source)); } include_spip('inc/distant'); if (is_array($a = renseigner_source_distante($source))) { $champs = $a; # NB: dans les bonnes conditions (fichier autorise et pas trop gros) # $a['fichier'] est une copie locale du fichier $infos = renseigner_taille_dimension_image($champs['fichier'], $champs['extension'], true); // on ignore erreur eventuelle sur $infos car on est distant, ca ne marche pas forcement if (is_array($infos)) { $champs = array_merge($champs, $infos); } unset($champs['type_image']); } else { spip_log("Echec du lien vers le document {$source}, abandon"); return $a; // message d'erreur } } else { // pas distant $champs = array('distant' => 'non'); $type_image = ''; // au pire $champs['titre'] = ''; if ($titrer) { $titre = substr($nom_envoye, 0, strrpos($nom_envoye, ".")); // Enlever l'extension du nom du fichier $titre = preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre); $champs['titre'] = preg_replace(',\\.([^.]+)$,', '', $titre); } if (!is_array($fichier = fixer_fichier_upload($file, $mode))) { return is_string($fichier) ? $fichier : _T("medias:erreur_upload_type_interdit", array('nom' => $file['name'])); } $champs['inclus'] = $fichier['inclus']; $champs['extension'] = $fichier['extension']; $champs['fichier'] = $fichier['fichier']; /** * Récupère les informations du fichier * -* largeur * -* hauteur * -* type_image * -* taille * -* ses metadonnées si une fonction de metadatas/ est présente */ $infos = renseigner_taille_dimension_image($champs['fichier'], $champs['extension']); if (is_string($infos)) { return $infos; } // c'est un message d'erreur ! $champs = array_merge($champs, $infos); // Si mode == 'choix', fixer le mode image/document if (in_array($mode, array('choix', 'auto'))) { $choisir_mode_document = charger_fonction('choisir_mode_document', 'inc'); $mode = $choisir_mode_document($champs, $champs['inclus'] == 'image', $objet); } $champs['mode'] = $mode; if (($test = verifier_taille_document_acceptable($champs)) !== true) { spip_unlink($champs['fichier']); return $test; // erreur sur les dimensions du fichier } unset($champs['type_image']); unset($champs['inclus']); $champs['fichier'] = set_spip_doc($champs['fichier']); } // si le media est pas renseigne, le faire, en fonction de l'extension if (!isset($champs['media'])) { $champs['media'] = sql_getfetsel('media_defaut', 'spip_types_documents', 'extension=' . sql_quote($champs['extension'])); } // lier le parent si necessaire if ($id_objet = intval($id_objet) and $objet) { $champs['parents'][] = "{$objet}|{$id_objet}"; } // "mettre a jour un document" si on lui // passe un id_document if ($id_document = intval($id_document)) { unset($champs['titre']); // garder le titre d'origine unset($champs['date']); // garder la date d'origine unset($champs['descriptif']); // garder la desc d'origine // unset($a['distant']); # on peut remplacer un doc statique par un doc distant // unset($a['mode']); # on peut remplacer une image par un document ? } include_spip('action/editer_document'); // Installer le document dans la base if (!$id_document) { if ($id_document = document_inserer()) { spip_log("ajout du document " . $file['tmp_name'] . " " . $file['name'] . " (M '{$mode}' T '{$objet}' L '{$id_objet}' D '{$id_document}')", 'medias'); } else { spip_log("Echec insert_document() du document " . $file['tmp_name'] . " " . $file['name'] . " (M '{$mode}' T '{$objet}' L '{$id_objet}' D '{$id_document}')", 'medias' . _LOG_ERREUR); } } if (!$id_document) { return _T('medias:erreur_insertion_document_base', array('fichier' => "<em>" . $file['name'] . "</em>")); } document_modifier($id_document, $champs); // permettre aux plugins de faire des modifs a l'ajout initial // ex EXIF qui tourne les images si necessaire // Ce plugin ferait quand même mieux de se placer dans metadata/jpg.php pipeline('post_edition', array('args' => array('table' => 'spip_documents', 'table_objet' => 'documents', 'spip_table_objet' => 'spip_documents', 'type' => 'document', 'id_objet' => $id_document, 'champs' => array_keys($champs), 'serveur' => '', 'action' => 'ajouter_document', 'operation' => 'ajouter_document'), 'data' => $champs)); return $id_document; }
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 revision_document($id_document, $c = false) { return document_modifier($id_document, $c); }