Ticket #8 : ajout d'une option pour générer les saisies en PHP
Ajout d'une option pour générer les saisies en PHP pour les robots. Pour les humains, c'est toujours en HTML par défaut.
La configuration se trouve dans l'onglet « Plugin », dans la section « Options » à la fin.
La seule différence visible de la version PHP, c'est qu'elle utilise la saisie « sélecteur de rubrique » qui se repose sur le picker ajax du sélecteur générique (donc UX différente).
Ci-dessous les 2 versions du code produit pour le formulaire d'édition d'un objet simple avec une date et une rubrique parente, pour comparer.
Pour la version PHP, le code produit pourra être un peu simplifié plus tard avec de modestes adaptations sur Saisies et Vérifier, en attendant ça fait le job.
Nb1 : sans les commentaire phpdoc pour simplifier.
Nb2 : des lignes vides à retirer, mais plus tard, c'est la prise de tête ces [(#REM)]
partout dans les squelettes :p
Version saisies HTML
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_patate_identifier_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
return serialize(array(intval($id_patate)));
}
function formulaires_editer_patate_charger_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$valeurs = formulaires_editer_objet_charger('patate', $id_patate, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden);
return $valeurs;
}
function formulaires_editer_patate_verifier_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$erreurs = array();
// Normaliser les dates
$verifier = charger_fonction('verifier', 'inc');
foreach (array('date_creation') AS $champ) {
$normaliser = null;
if ($erreur = $verifier(_request($champ), 'date', array('normaliser'=>'datetime'), $normaliser)) {
$erreurs[$champ] = $erreur;
// si une valeur de normalisation a ete transmis, la prendre.
} elseif (!is_null($normaliser)) {
set_request($champ, $normaliser);
// si pas de normalisation ET pas de date soumise, il ne faut pas tenter d'enregistrer ''
} else {
set_request($champ, null);
}
}
$erreurs += formulaires_editer_objet_verifier('patate', $id_patate, array('titre'));
return $erreurs;
}
function formulaires_editer_patate_traiter_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$retours = formulaires_editer_objet_traiter('patate', $id_patate, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden);
return $retours;
}
Version saisies PHP
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/actions');
include_spip('inc/editer');
function formulaires_editer_patate_saisies_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$saisies = array(
array(
'saisie' => 'input',
'options' => array(
'nom' => 'titre',
'obligatoire' => 'oui',
'label' => _T('patate:champ_titre_label'),
),
),
array(
'saisie' => 'selecteur_rubrique',
'options' => array(
'nom' => 'id_parent',
'label' => _T('entree_interieur_rubrique'),
'conteneur_class' => 'editer_parent',
),
),
array(
'saisie' => 'date',
'options' => array(
'nom' => 'date_creation',
'label' => _T('patate:champ_date_creation_label'),
),
'verifier' => array(
'type' => 'date',
'options' => array(
'normaliser' => 'datetime',
),
),
),
array(
'saisie' => 'textarea',
'options' => array(
'nom' => 'texte',
'label' => _T('patate:champ_texte_label'),
'inserer_barre' => 'edition',
'rows' => '6',
),
),
);
return $saisies;
}
function formulaires_editer_patate_identifier_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
return serialize(array(intval($id_patate)));
}
function formulaires_editer_patate_charger_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$valeurs = formulaires_editer_objet_charger('patate', $id_patate, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden);
// Adapter la valeur de la rubrique pour le picker ajax du sélecteur générique
if (is_numeric($valeurs['id_parent'])) {
$valeurs['id_parent'] = 'rubrique|' . $valeurs['id_parent'];
}
return $valeurs;
}
function formulaires_editer_patate_verifier_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$erreurs = formulaires_editer_objet_verifier('patate', $id_patate, array('titre'));
// Normaliser la rubrique si le champ n'est pas en erreur :
// le picker ajax du sélecteur générique retourne un tableau de la forme array('rubrique|1')
if (
empty($erreurs['id_parent'])
and $picker_id_parent = _request('id_parent')
and is_numeric($id_parent = array_shift(picker_selected($picker_id_parent, 'rubrique')))
) {
set_request('id_parent', $id_parent);
}
return $erreurs;
}
function formulaires_editer_patate_traiter_dist($id_patate = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$retours = formulaires_editer_objet_traiter('patate', $id_patate, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden);
return $retours;
}