/** * Insertion dans le pipeline formulaire_charger (SPIP) * * Chargement de la valeur du champ date_depublie du formulaire dater * * @param array $flux * @return array $flux */ function depublie_formulaire_charger($flux) { // si formulaire dater, charger les données des champs supplémentaires if ($flux['args']['form'] == 'dater') { $objet = $flux['data']['objet']; $id_objet = $flux['data']['id_objet']; $row = sql_fetsel("date_depublie,statut", "spip_depublies", "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet)); $possedeDateDepublie = false; if (isset($row['date_depublie']) and list($annee_depublie, $mois_depublie, $jour_depublie, $heure_depublie, $minute_depublie) = recup_date($row['date_depublie'], false)) { $possedeDateDepublie = true; // attention : les vrais dates de l'annee 1 sont stockee avec +9000 => 9001 // mais reviennent ici en annee 1 par recup_date // on verifie donc que le intval($row['date_depublie']) qui ressort l'annee // est bien lui aussi <=1 : dans ce cas c'est une date sql 'nulle' ou presque, selon // le gestionnnaire sql utilise (0001-01-01 pour PG par exemple) if (intval($row['date_depublie']) <= 1 and $annee_depublie <= 1 and $mois_depublie <= 1 and $jour_depublie <= 1) { $possedeDateDepublie = false; } } else { $annee_depublie = $mois_depublie = $jour_depublie = 0; $heure_depublie = $minute_depublie = 00; } // attention, si la variable s'appelle date ou date_depublie, le compilo va // la normaliser, ce qu'on ne veut pas ici. $flux['data']['afficher_date_depublie'] = $possedeDateDepublie ? $row['date_depublie'] : ''; $flux['data']['date_depublie_jour'] = dater_formater_saisie_jour($jour_depublie, $mois_depublie, $annee_depublie); $flux['data']['date_depublie_heure'] = "{$heure_depublie}:{$minute_depublie}"; $flux['data']['sans_depublie'] = !$possedeDateDepublie; } return $flux; }
/** * Chargement du formulaire d'édition d'une date * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param array|string $options * Options. Si string, unserialize pour obtenir un tableau. * * - date_redac : Permet de modifier en plus la date de rédaction antérieure * @return array * Environnement du formulaire **/ function formulaires_dater_charger_dist($objet, $id_objet, $retour = '', $options = array()) { $objet = objet_type($objet); if (!$objet or !intval($id_objet)) { return false; } if (!is_array($options)) { $options = unserialize($options); } $_id_objet = id_table_objet($objet); $table = table_objet($objet); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); if (!$desc) { return false; } $champ_date = $desc['date'] ? $desc['date'] : 'date'; if (!isset($desc['field'][$champ_date])) { return false; } $valeurs = array('objet' => $objet, 'id_objet' => $id_objet, 'id' => $id_objet); $select = "{$champ_date} as date"; if (isset($desc['field']['date_redac'])) { $select .= ",date_redac"; } if (isset($desc['field']['statut'])) { $select .= ",statut"; } $row = sql_fetsel($select, $desc['table'], "{$_id_objet}=" . intval($id_objet)); $statut = isset($row['statut']) ? $row['statut'] : 'publie'; // pas de statut => publie $valeurs['editable'] = autoriser('dater', $objet, $id_objet, null, array('statut' => $statut)); $possedeDateRedac = false; if (isset($row['date_redac']) and $regs = recup_date($row['date_redac'], false)) { $annee_redac = $regs[0]; $mois_redac = $regs[1]; $jour_redac = $regs[2]; $heure_redac = $regs[3]; $minute_redac = $regs[4]; $possedeDateRedac = true; // attention : les vrai dates de l'annee 1 sont stockee avec +9000 => 9001 // mais reviennent ici en annee 1 par recup_date // on verifie donc que le intval($row['date_redac']) qui ressort l'annee // est bien lui aussi <=1 : dans ce cas c'est une date sql 'nulle' ou presque, selon // le gestionnnaire sql utilise (0001-01-01 pour PG par exemple) if (intval($row['date_redac']) <= 1 and $annee_redac <= 1 and $mois_redac <= 1 and $jour_redac <= 1) { $possedeDateRedac = false; } } else { $annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0; } if ($regs = recup_date($row['date'], false)) { $annee = $regs[0]; $mois = $regs[1]; $jour = $regs[2]; $heure = $regs[3]; $minute = $regs[4]; } // attention, si la variable s'appelle date ou date_redac, le compilo va // la normaliser, ce qu'on ne veut pas ici. $valeurs['afficher_date_redac'] = $possedeDateRedac ? $row['date_redac'] : ''; $valeurs['date_redac_jour'] = dater_formater_saisie_jour($jour_redac, $mois_redac, $annee_redac); $valeurs['date_redac_heure'] = "{$heure_redac}:{$minute_redac}"; $valeurs['afficher_date'] = $row['date']; $valeurs['date_jour'] = dater_formater_saisie_jour($jour, $mois, $annee); $valeurs['date_heure'] = "{$heure}:{$minute}"; $valeurs['sans_redac'] = !$possedeDateRedac; if (isset($options['date_redac'])) { $valeurs['_editer_date_anterieure'] = $options['date_redac']; } else { $valeurs['_editer_date_anterieure'] = ($objet == 'article' and ($GLOBALS['meta']["articles_redac"] != 'non' or $possedeDateRedac)); } $valeurs['_label_date'] = $statut == 'publie' ? _T('texte_date_publication_objet') : _T('texte_date_creation_objet'); $valeurs['_saisie_en_cours'] = (_request('_saisie_en_cours') !== null or _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; }