Example #1
0
/**
 * Supprimer un lien entre un document et un objet
 *
 * @param int $id_document
 * @param string $objet
 * @param int $id_objet
 * @param bool $supprime
 *   si true, le document est supprime si plus lie a aucun objet
 * @param bool $check
 *   si true, on verifie les documents references dans le texte de l'objet
 *   et on les associe si pas deja fait
 * @return bool
 */
function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false)
{
    if (!($id_document = intval($id_document))) {
        return false;
    }
    // D'abord on ne supprime pas, on dissocie
    include_spip('action/editer_liens');
    objet_dissocier(array('document' => $id_document), array($objet => $id_objet));
    // Si c'est une vignette, l'eliminer du document auquel elle appartient
    // cas tordu peu probable
    sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=" . $id_document);
    // verifier son statut apres une suppression de lien
    include_spip('action/editer_document');
    document_instituer($id_document);
    pipeline('post_edition', array('args' => array('operation' => 'delier_document', 'action' => 'delier_document', 'table' => 'spip_documents', 'id_objet' => $id_document, 'objet' => $objet, 'id' => $id_objet), 'data' => null));
    if ($check) {
        // si demande, on verifie que ses documents vus sont bien lies !
        $spip_table_objet = table_objet_sql($objet);
        $table_objet = table_objet($objet);
        $id_table_objet = id_table_objet($objet, $serveur);
        $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . "=" . intval($id_objet));
        $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
        $marquer_doublons_doc($champs, $id_objet, $objet, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur);
    }
    // On supprime ensuite s'il est orphelin
    // et si demande
    // ici on ne bloque pas la suppression d'un document rattache a un autre
    if ($supprime and !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=" . $id_document)) {
        $supprimer_document = charger_fonction('supprimer_document', 'action');
        return $supprimer_document($id_document);
    }
}
Example #2
0
function instituer_document($id_document, $champs = array())
{
    return document_instituer($id_document, $champs);
}
/**
 * Institue ou met à jour les liens de documents après l'édition d'un objet
 *
 * @pipeline post_edition
 * @param array $flux
 *     Données du pipeline
 * @return array
 *     Données du pipeline
 **/
function medias_post_edition($flux)
{
    // le serveur n'est pas toujours la
    $serveur = isset($flux['args']['serveur']) ? $flux['args']['serveur'] : '';
    // si on ajoute un document, mettre son statut a jour
    if (isset($flux['args']['action']) and $flux['args']['action'] == 'ajouter_document') {
        include_spip('action/editer_document');
        // mettre a jour le statut si necessaire
        document_instituer($flux['args']['id_objet']);
    } elseif (isset($flux['args']['table']) and $flux['args']['table'] !== 'spip_documents') {
        $type = isset($flux['args']['type']) ? $flux['args']['type'] : objet_type($flux['args']['table']);
        // verifier d'abord les doublons !
        include_spip('inc/autoriser');
        if (autoriser('autoassocierdocument', $type, $flux['args']['id_objet'])) {
            $table_objet = isset($flux['args']['table_objet']) ? $flux['args']['table_objet'] : table_objet($flux['args']['table'], $serveur);
            $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
            $marquer_doublons_doc($flux['data'], $flux['args']['id_objet'], $type, id_table_objet($type, $serveur), $table_objet, $flux['args']['table'], '', $serveur);
        }
        if ($flux['args']['action'] and $flux['args']['action'] == 'instituer' or isset($flux['data']['statut'])) {
            include_spip('base/abstract_sql');
            $id = $flux['args']['id_objet'];
            $docs = array_map('reset', sql_allfetsel('id_document', 'spip_documents_liens', 'id_objet=' . intval($id) . ' AND objet=' . sql_quote($type)));
            include_spip('action/editer_document');
            foreach ($docs as $id_document) {
                document_instituer($id_document);
            }
        }
    } else {
        if (isset($flux['args']['table']) and $flux['args']['table'] !== 'spip_documents') {
            // verifier les doublons !
            $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
            $marquer_doublons_doc($flux['data'], $flux['args']['id_objet'], $flux['args']['type'], id_table_objet($flux['args']['type'], $serveur), $flux['args']['table_objet'], $flux['args']['spip_table_objet'], '', $serveur);
        }
    }
    return $flux;
}