#PHP [(#INCLURE{fond=fabrique/entetes/php,env, description=Gestion du formulaire de d'édition de #TYPE, package=Formulaires})] include_spip('inc/actions'); include_spip('inc/editer'); [(#REM) Y a t'il un champ de parent à prendre en compte ? ][(#SET{id_parent,#ENV{parent/id_objet}})][ (#REM) ][(#SET{id_parent_param,#GET{id_parent}|?{#VAL{'$'}|concat{#GET{id_parent}}|concat{' = 0,'}}})][ (#REM) ][(#SET{id_parent_val,#GET{id_parent}|?{$#GET{id_parent}, "''"}})][ (#REM) Y a t'il une association a prendre en compte ? ][(#SET{associer,[(#OBJET|option_presente{vue_liens})]})][ (#REM) ][(#SET{associer_param,#GET{associer}|?{"$associer_objet = '',"}})][ (#REM) ][(#SET{associer_val,#GET{associer}|?{'$associer_objet'}})][ (#REM) Y a t'il des champs obligatoire a verifier ? Il faut qu'il soit obligatoire et dispose d'une saisie ][(#SET{obligatoires,[(#ENV{objet/champs}|champs_options_presentes{#LISTE{obligatoire,saisie},champ})]})][ (#REM) ][(#OBJET|option_presente{liaison_directe}|?{#SET{obligatoires,#GET{obligatoires}|push{#GET{id_parent}}}})][ (#REM) On essaie de placer le formulaire de rubrique (s'il est demandé) apres le titre, s'il est saisissable, sinon en 2e position ][(#SET{titre,''})][(#REM) ][(#SET{parent,[(#OBJET|champ_present{id_rubrique}|ou{#OBJET|option_presente{liaison_directe}})]})][(#REM) ]#SET{titre,' '}[ (#REM) Champs de date à normaliser ][(#SET{champs_date,#ENV{objet/champs}|champs_saisie_presente{date, champ}|sinon{#ARRAY}})][ (#REM) Fonctions de chargement de l'objet ][(#REM) ]/** * Déclaration des saisies de #TYPE * * @param int|string $#ID_OBJET * Identifiant du #TYPE. 'new' pour un nouveau #TYPE.[ * @param int $(#GET{id_parent}|?{#GET{id_parent}}) * Identifiant de l'objet parent (si connu)] * @param string $retour * URL de redirection après le traitement[ * @param string $(#GET{associer}|?{associer_objet}) * Éventuel `objet|x` indiquant de lier le #TYPE créé à cet objet, * tel que `article|3`] * @param int $lier_trad * Identifiant éventuel d'un #TYPE source d'une traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL du #TYPE, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return string * Hash du formulaire */ function formulaires_editer_[(#TYPE)]_saisies_dist($#ID_OBJET = 'new',[ (#GET{id_parent_param})] $retour = '',[ (#GET{associer_param})] $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') { $saisies = array([(#REM) ][(#REM) ] array( 'saisie' => '[(#VALEUR{saisie})]', 'options' => array( 'nom' => '[(#CHAMP)]', [(#VALEUR|champ_option_presente{obligatoire}|oui)'obligatoire' => 'oui',] 'label' => _T\('[(#TYPE)]:champ_[(#CHAMP)]_label'\), [(#EXPLICATION|oui)'explication' => _T\('[(#TYPE)]:champ_[(#CHAMP)]_explication'\),] [(#REM) ][(#SET{option,#VALEUR|trim|explode{=}})][(#REM) ]'[(#GET{option/0})]' => '[(#GET{option/1})]', ),[ (#REM) Une date à normaliser ? ][(#CHAMP|in_any{#GET{champs_date}}|oui) 'verifier' => array( 'type' => 'date', 'options' => array( 'normaliser' => 'datetime', ), ),] ),[ (#REM) On teste donc s'il faut placer le formulaire de parentée ici ][(#REM) ] array( 'saisie' => 'selecteur_rubrique', 'options' => array( 'nom' => 'id_parent', 'label' => _T('entree_interieur_rubrique'), 'conteneur_class' => 'editer_parent', ), ), [(#REM) ] array( 'saisie' => '[(#ENV{parent/objet})]', 'options' => array( 'nom' => '[(#ENV{parent/id_objet})]', 'obligatoire' => 'oui', 'label' => _T\('[(#ENV{parent/type})]:titre_[(#ENV{parent/type})]'\), ), ), [(#REM) ][(#REM) ] ); return $saisies; } /** * Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité * * @param int|string $#ID_OBJET * Identifiant du #TYPE. 'new' pour un nouveau #TYPE.[ * @param int $(#GET{id_parent}|?{#GET{id_parent}}) * Identifiant de l'objet parent (si connu)] * @param string $retour * URL de redirection après le traitement[ * @param string $(#GET{associer}|?{associer_objet}) * Éventuel `objet|x` indiquant de lier le #TYPE créé à cet objet, * tel que `article|3`] * @param int $lier_trad * Identifiant éventuel d'un #TYPE source d'une traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL du #TYPE, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return string * Hash du formulaire */ function formulaires_editer_[(#TYPE)]_identifier_dist($#ID_OBJET = 'new',[ (#GET{id_parent_param})] $retour = '',[ (#GET{associer_param})] $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') { return serialize(array(intval($#ID_OBJET)[, (#GET{associer_val})])); } /** * Chargement du formulaire d'édition de #TYPE * * Déclarer les champs postés et y intégrer les valeurs par défaut * * @uses formulaires_editer_objet_charger() * * @param int|string $#ID_OBJET * Identifiant du #TYPE. 'new' pour un nouveau #TYPE.[ * @param int $(#GET{id_parent}|?{#GET{id_parent}}) * Identifiant de l'objet parent (si connu)] * @param string $retour * URL de redirection après le traitement[ * @param string $(#GET{associer}|?{associer_objet}) * Éventuel `objet|x` indiquant de lier le #TYPE créé à cet objet, * tel que `article|3`] * @param int $lier_trad * Identifiant éventuel d'un #TYPE source d'une traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL du #TYPE, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Environnement du formulaire */ function formulaires_editer_[(#TYPE)]_charger_dist($#ID_OBJET = 'new',[ (#GET{id_parent_param})] $retour = '',[ (#GET{associer_param})] $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') { $valeurs = formulaires_editer_objet_charger('#TYPE', $#ID_OBJET, #GET{id_parent_val}, $lier_trad, $retour, $config_fonc, $row, $hidden);[(#OBJET|option_presente{liaison_directe}|oui) if (![(#VAL{"$valeurs\['"}|concat{#GET{id_parent}}|concat{"'\]"})]) { [(#VAL{"$valeurs\['"}|concat{#GET{id_parent}}|concat{"'\] = "}|concat{#GET{id_parent_val};})] }] $valeurs['saisies'] = call_user_func_array('formulaires_editer_[(#TYPE)]_saisies_dist', func_get_args());[(#REM) ] return $valeurs; } /** * Vérifications du formulaire d'édition de #TYPE * * Vérifier les champs postés et signaler d'éventuelles erreurs * * @uses formulaires_editer_objet_verifier() * * @param int|string $#ID_OBJET * Identifiant du #TYPE. 'new' pour un nouveau #TYPE.[ * @param int $(#GET{id_parent}|?{#GET{id_parent}}) * Identifiant de l'objet parent (si connu)] * @param string $retour * URL de redirection après le traitement[ * @param string $(#GET{associer}|?{associer_objet}) * Éventuel `objet|x` indiquant de lier le #TYPE créé à cet objet, * tel que `article|3`] * @param int $lier_trad * Identifiant éventuel d'un #TYPE source d'une traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL du #TYPE, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Tableau des erreurs */ function formulaires_editer_[(#TYPE)]_verifier_dist($#ID_OBJET = 'new',[ (#GET{id_parent_param})] $retour = '',[ (#GET{associer_param})] $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') { $erreurs = array(); // Normaliser les dates $verifier = charger_fonction('verifier', 'inc'); foreach ([(#ENV{objet/champs}|champs_saisie_presente{date, champ}|ecrire_tableau)] 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('#TYPE', $#ID_OBJET[, (#GET{obligatoires}|ecrire_tableau_sinon_rien)]); $erreurs = formulaires_editer_objet_verifier('#TYPE', $#ID_OBJET[, (#GET{obligatoires}|ecrire_tableau_sinon_rien)]); // 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; } /** * Traitement du formulaire d'édition de #TYPE * * Traiter les champs postés * * @uses formulaires_editer_objet_traiter() * * @param int|string $#ID_OBJET * Identifiant du #TYPE. 'new' pour un nouveau #TYPE.[ * @param int $(#GET{id_parent}|?{#GET{id_parent}}) * Identifiant de l'objet parent (si connu)] * @param string $retour * URL de redirection après le traitement[ * @param string $(#GET{associer}|?{associer_objet}) * Éventuel `objet|x` indiquant de lier le #TYPE créé à cet objet, * tel que `article|3`] * @param int $lier_trad * Identifiant éventuel d'un #TYPE source d'une traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL du #TYPE, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Retours des traitements */ function formulaires_editer_[(#TYPE)]_traiter_dist($#ID_OBJET = 'new',[ (#GET{id_parent_param})] $retour = '',[ (#GET{associer_param})] $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') { $retours = formulaires_editer_objet_traiter('#TYPE', $#ID_OBJET, #GET{id_parent_val}, $lier_trad, $retour, $config_fonc, $row, $hidden);[ (#GET{associer}|oui) // Un lien a prendre en compte ? if ($associer_objet and $#ID_OBJET = $retours\['#ID_OBJET'\]) { list($objet, $id_objet) = explode('|', $associer_objet); if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { include_spip('action/editer_liens'); objet_associer(array('#TYPE' => $#ID_OBJET), array($objet => $id_objet)); if (isset($retours\['redirect'\])) { $retours\['redirect'\] = parametre_url($retours\['redirect'\], 'id_lien_ajoute', $#ID_OBJET, '&'); } } } ] return $retours; }