Browse Source

Lors de la création et modification d'un objet éditorial déclaré (utilisant l'action editer_objet)

- on ne traite pas la clé primaire dans la collecte des request, car elle vaut 'oui' et du coup cela enregistre id_x = 0 dans la table.

- collecter_request() ne récupère par défaut que les valeurs effectivement postées (il me semble que cela est plus logique)
svn/root/tags/spip-3.0.0-alpha1
Matthieu Marcillaud 11 years ago
parent
commit
ac56816dec
  1. 9
      ecrire/action/editer_objet.php
  2. 1
      ecrire/inc/editer.php
  3. 20
      ecrire/inc/modifier.php
  4. 2
      prive/formulaires/editer_article.html

9
ecrire/action/editer_objet.php

@ -35,7 +35,7 @@ function action_editer_objet_dist($id=null, $objet=null, $set=null) {
if (!$id = intval($id)) {
// on ne sait pas si un parent existe mais on essaye
$id_parent = _request('id_parent');
$id = objet_inserer($objet, $id_parent);
$id = objet_inserer($objet, $id_parent);
}
if (!($id = intval($id))>0)
@ -75,8 +75,13 @@ function objet_modifier($objet, $id, $set=null) {
$champ_date = 'date';
$white = array_keys($desc['field']);
if (isset($desc['champs_editables']) AND is_array($desc['champs_editables']))
// on ne traite pas la cle primaire par defaut, notamment car
// sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
$white = array_diff($white, array($desc['key']['PRIMARY KEY']));
if (isset($desc['champs_editables']) AND is_array($desc['champs_editables'])) {
$white = $desc['champs_editables'];
}
$c = collecter_requests(
// white list
$white,

1
ecrire/inc/editer.php

@ -377,6 +377,7 @@ function display_conflit_champ($x) {
function signaler_conflits_edition($conflits, $redirect='') {
include_spip('inc/minipres');
include_spip('inc/revisions');
include_spip('afficher_diff/champ');
include_spip('inc/suivi_versions');
include_spip('inc/diff');
foreach ($conflits as $champ=>$a) {

20
ecrire/inc/modifier.php

@ -19,23 +19,31 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param array $white_list
* @param array $black_list
* @param array|null $set
* @param bool $tous Recuperer tous les champs de white_list meme ceux n'ayant pas ete postes
* @return array
*/
function collecter_requests($white_list, $black_list, $set=null){
function collecter_requests($white_list, $black_list, $set=null, $tous=false){
$c = $set;
if (!$c){
$c = array();
foreach($white_list as $champ)
$c[$champ] = _request($champ);
foreach($white_list as $champ) {
// on ne collecte que les champs reellement envoyes par defaut.
// le cas d'un envoi de valeur NULL peut du coup poser probleme.
$val = _request($champ);
if ($tous OR $val !== NULL) {
$c[$champ] = $val;
}
}
// on ajoute toujours la lang en saisie possible
// meme si pas prevu au depart pour l'objet concerne
if ($l = _request('changer_lang')){
$c['lang'] = $l;
}
}
foreach($black_list as $champ)
foreach($black_list as $champ) {
unset($c[$champ]);
}
return $c;
}
@ -242,4 +250,4 @@ function revision_objet($objet,$id_objet,$c=null){
}
?>
?>

2
prive/formulaires/editer_article.html

@ -27,7 +27,7 @@
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{soustitre})</span>
]<input type='text' class='text' name='soustitre' id='soustitre'[ lang='(#LANGUE)'] value="[(#ENV**{soustitre})]" />
</li>]
[<li class="editer_parent[ (#ENV**{erreurs}|table_valeur{id_parent}|oui)erreur]">
[<li class="editer_parent[ (#ENV**{erreurs}|table_valeur{id_parent}|oui)erreur]">
<label for="id_parent"><:titre_cadre_interieur_rubrique:><em class="aide">#AIDER{id_parent}</em></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{id_parent})</span>
]

Loading…
Cancel
Save