/**
 * 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;
}
Example #2
0
File: dater.php Project: JLuc/SPIP
/**
 * 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;
}