/**
 * 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;
}
Esempio n. 5
0
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;
}
Esempio n. 8
0
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;
}
Esempio n. 9
0
function revision_document($id_document, $c = false)
{
    return document_modifier($id_document, $c);
}