/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2014 *
+ * Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$valeurs['_label_date'] = (($statut == 'publie')? _T('texte_date_publication_objet'): _T('texte_date_creation_objet'));
$valeurs['_saisie_en_cours'] = (_request('date_jour')!==null);
+ // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure
+ // https://core.spip.net/issues/3494
+ $valeurs['_editer_date'] = $valeurs['editable'];
+ if ($valeurs['_editer_date_anterieure'] AND !$valeurs['editable']){
+ $valeurs['editable'] = autoriser('modifier',$objet,$id_objet);
+ }
return $valeurs;
}
function formulaires_dater_verifier_dist($objet, $id_objet, $retour=''){
$erreurs = array();
- foreach(array('date','date_redac') as $k)
- if ($v=_request($k."_jour") AND !dater_recuperer_date_saisie($v))
+ foreach(array('date','date_redac') as $k){
+ if ($v=_request($k."_jour") AND !dater_recuperer_date_saisie($v, $k))
$erreurs[$k] = _T('format_date_incorrecte');
elseif ($v=_request($k."_heure") AND !dater_recuperer_heure_saisie($v))
$erreurs[$k] = _T('format_heure_incorrecte');
+ }
if (!_request('date_jour'))
$erreurs['date'] = _T('info_obligatoire');
$set = array();
- if (!$d = dater_recuperer_date_saisie(_request('date_jour')))
- $d = array(date('Y'),date('m'),date('d'));
- if (!$h = dater_recuperer_heure_saisie(_request('date_heure')))
- $h = array(0,0);
+ $charger = charger_fonction("charger","formulaires/dater/");
+ $v = $charger($objet, $id_objet, $retour, $options);
- $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
+ if ($v['_editer_date']){
+ if (!$d = dater_recuperer_date_saisie(_request('date_jour')))
+ $d = array(date('Y'),date('m'),date('d'));
+ if (!$h = dater_recuperer_heure_saisie(_request('date_heure')))
+ $h = array(0,0);
- if (isset($desc['field']['date_redac'])){
+ $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
+ }
+
+ if (isset($desc['field']['date_redac']) AND $v['_editer_date_anterieure']){
if (!_request('date_redac_jour') OR _request('sans_redac'))
$set['date_redac'] = sql_format_date(0,0,0,0,0,0);
else {
- if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour')))
+ if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour'), "date_redac"))
$d = array(date('Y'),date('m'),date('d'));
if (!$h = dater_recuperer_heure_saisie(_request('date_redac_heure')))
$h = array(0,0);
$set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
}
}
- include_spip('action/editer_objet');
- objet_modifier($objet, $id_objet, $set);
+
+ if (count($set)){
+ $publie_avant = objet_test_si_publie($objet,$id_objet);
+ include_spip('action/editer_objet');
+ objet_modifier($objet, $id_objet, $set);
+ $publie_apres = objet_test_si_publie($objet,$id_objet);
+ if ($publie_avant !== $publie_apres){
+ // on refuse ajax pour forcer le rechargement de la page ici
+ // on refera traiter une 2eme fois, mais c'est sans consequence
+ refuser_traiter_formulaire_ajax();
+ }
+ }
}
if ($retour)
/**
* Recuperer annee,mois,jour sur la date saisie
* @param string $post
+ * @param string $quoi
* @return array
*/
-function dater_recuperer_date_saisie($post) {
+function dater_recuperer_date_saisie($post, $quoi="date") {
if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs))
return '';
- if ($regs[3]<>'' AND $regs[3] < 1001)
- $regs[3] += 9000;
+ if ($quoi=="date_redac") {
+ if ($regs[3]<>'' AND $regs[3] < 1001)
+ $regs[3] += 9000;
+
+ return array($regs[3],$regs[2],$regs[1]);
+ }
+ else {
+ $t = mktime(0,0,0,$regs[2],$regs[1],$regs[3]);
+ // si la date n'est pas valide selon mktime, la refuser
+ if (!$t) return '';
+ return array(date('Y',$t),date('m',$t),date('d',$t));
+ }
- return array($regs[3],$regs[2],$regs[1]);
}
/**