From b9b2a34746df124204d0a549fd238def4474cd8f Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 12 Nov 2006 20:36:03 +0000 Subject: [PATCH] debut d'API generique pour modifier un objet; on commence avec les documents --- .gitattributes | 1 + ecrire/action/editer_auteurs.php | 2 +- ecrire/inc/modifier.php | 102 +++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 ecrire/inc/modifier.php diff --git a/.gitattributes b/.gitattributes index 257a0bfa8c..cf4591b555 100644 --- a/.gitattributes +++ b/.gitattributes @@ -484,6 +484,7 @@ ecrire/inc/legender_auteur.php -text ecrire/inc/maintenance.php -text ecrire/inc/message_select.php -text ecrire/inc/minipres.php -text +ecrire/inc/modifier.php -text ecrire/inc/notifications.php -text ecrire/inc/petitionner.php -text ecrire/inc/plonger.php -text diff --git a/ecrire/action/editer_auteurs.php b/ecrire/action/editer_auteurs.php index 75bf73fee0..7e094f6f1a 100644 --- a/ecrire/action/editer_auteurs.php +++ b/ecrire/action/editer_auteurs.php @@ -144,7 +144,7 @@ function revisions_auteurs($id_auteur, $c=false) { // marquer le fait que l'auteur est travaille par toto a telle date // une alerte sera donnee aux autres administrateurs sur exec=auteur_infos - if ($GLOBALS['meta']['auteurs_modif'] != 'non') { + if ($GLOBALS['meta']['articles_modif'] != 'non') { include_spip('inc/drapeau_edition'); signale_edition ($id_auteur, $GLOBALS['auteur_session'], 'auteur'); } diff --git a/ecrire/inc/modifier.php b/ecrire/inc/modifier.php new file mode 100644 index 0000000000..3eff6b25bd --- /dev/null +++ b/ecrire/inc/modifier.php @@ -0,0 +1,102 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2006 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + + +// Une fonction generique pour l'API de modification de contenu +// $options est un array() avec toutes les options +// +// Pour l'instant fonctionne pour les types : document +// +// http://doc.spip.org/@modifier_contenu +function modifier_contenu($type, $id, $options, $c=false) { + include_spip('inc/filtres'); + + $table_objet = table_objet($type); + $id_table_objet = id_table_objet($type); + + // Gerer les champs non vides + if (is_array($options['nonvide'])) + foreach ($options['nonvide'] as $champ => $sinon) { + if (_request($champ, $c) === '') { + $c = set_request($champ, $sinon, $c); + } + } + + $champs = array(); + if (is_array($options['champs'])) + foreach ($options['champs'] as $champ) { + $val = _request($champ, $c); + if ($val !== NULL) + $champs[$champ] = corriger_caracteres($val); + } + + // recuperer les extras + if ($GLOBALS['champs_extra']) { + include_spip('inc/extra'); + if ($extra = extra_update($table_objet, $id, $c)) + $champs['extra'] = $extra; + } + + // Envoyer aux plugins + $champs = pipeline('pre_edition', + array( + 'args' => array( + 'table' => 'spip_'.$table_objet, + 'id_objet' => $id + ), + 'data' => $champs + ) + ); + + $update = array(); + foreach ($champs as $champ => $val) + $update[] = $champ . '=' . _q($val); + + if (!count($update)) return; + + spip_query($q = "UPDATE spip_$table_objet SET ".join(', ',$update)." WHERE $id_table_objet=$id"); + + + // marquer le fait que l'objet est travaille par toto a telle date + if ($GLOBALS['meta']['articles_modif'] != 'non') { + include_spip('inc/drapeau_edition'); + signale_edition ($id, $GLOBALS['auteur_session'], $type); + } + + // Notification ? + pipeline('post_edition', + array( + 'args' => array( + 'table' => 'spip_'.$table_objet, + 'id_objet' => $id + ), + 'data' => $champs + ) + ); + +} + +// http://doc.spip.org/@revisions_documents +function revision_document($id_document, $c=false) { + + return modifier_contenu('document', $id_document, + array( + 'champs' => array('titre', 'descriptif') + //,'nonvide' => array('titre' => _T('info_sans_titre')) + ), + $c); + +} + +?> -- GitLab