source: spip-zone/_plugins_/albums/trunk/formulaires/ajouter_album.php @ 103635

Last change on this file since 103635 was 103635, checked in by kent1@…, 3 years ago

Avant d'essayer de joindre un document, s'assurer du fait qu'il y en a réellement un.

Eviter un warning sur action/ajouter_documents

File size: 8.1 KB
Line 
1<?php
2/**
3 * Gestion du formulaire d'ajout d'albums à un objet
4 *
5 * Le formulaire permet soit de créer et remplir un nouvel album,
6 * soit de choisir un ou plusieurs albums existants.
7 * Dans le premier cas, il s'agit en gros d'un fusion des formulaires
8 * «editer_album» et «joindre_document» : les traitements sont identiques
9 * à ceux de ces 2 formulaires.
10 *
11 * @plugin     Albums
12 * @copyright  2014
13 * @author     Tetue, Charles Razack
14 * @licence    GNU/GPL
15 * @package    SPIP\Albums\Formulaires
16 */
17
18// Sécurité
19if (!defined('_ECRIRE_INC_VERSION')) {
20        return;
21}
22
23/**
24 * Chargement du formulaire d'ajout d'album
25 *
26 * Déclarer les champs postés et y intégrer les valeurs par défaut
27 *
28 * @uses formulaires_editer_album_charger()
29 * @uses formulaires_joindre_document_charger()
30 *
31 * @param int|string $objet
32 *     type de l'objet à associer.
33 * @param int|string $id_objet
34 *     Identifiant de l'objet à associer.
35 * @param string $retour
36 *     URL de redirection après le traitement
37 * @param int $lier_trad
38 *     Identifiant éventuel d'un album source d'une traduction
39 * @return array
40 *     Environnement du formulaire
41 */
42function formulaires_ajouter_album_charger_dist($objet = '', $id_objet = 0, $retour = '', $lier_trad = 0) {
43        $valeurs = array();
44        $valeurs['ids_albums_associer'] = '';
45        $valeurs['objet_associer'] = $objet;
46        $valeurs['id_objet_associer'] = $id_objet;
47
48        // valeurs du formulaire d'édition d'un album
49        $charger_editer_album = charger_fonction('charger', 'formulaires/editer_album');
50        $valeurs_editer_album = $charger_editer_album('new', $retour, $objet.'|'.$id_objet, $lier_trad);
51        if (count($valeurs_editer_album)) {
52                $valeurs = array_merge($valeurs, $valeurs_editer_album);
53        }
54
55        // valeurs du formulaire d'ajout de documents
56        $charger_joindre_document = charger_fonction('charger', 'formulaires/joindre_document');
57        $valeurs_joindre_document = $charger_joindre_document(
58                'new',
59                0-$GLOBALS['visiteur_session']['id_auteur'],
60                'album',
61                'document'
62        );
63        if (count($valeurs_joindre_document)) {
64                $valeurs = array_merge($valeurs, $valeurs_joindre_document);
65        }
66
67        // valeur de l'identifiant négatif pour l'ajout de documents
68        // cf. medias_pipelines.php L.161
69        $valeurs['_id_temporaire'] = 0-$GLOBALS['visiteur_session']['id_auteur'];
70        return $valeurs;
71}
72
73/**
74 * Vérifications du formulaire d'ajout d'album
75 *
76 * Vérifier les champs postés et signaler d'éventuelles erreurs
77 *
78 * @uses formulaires_editer_album_verifier()
79 * @uses formulaires_joindre_document_verifier()
80 *
81 * @param int|string $objet
82 *     type de l'objet à associer.
83 * @param int|string $id_objet
84 *     Identifiant de l'objet à associer.
85 * @param string $retour
86 *     URL de redirection après le traitement
87 * @param int $lier_trad
88 *     Identifiant éventuel d'un album source d'une traduction
89 * @return array
90 *     Tableau des erreurs
91 */
92function formulaires_ajouter_album_verifier_dist($objet = '', $id_objet = 0, $retour = '', $lier_trad = 0) {
93
94        $erreurs = array();
95
96        // onglet créer un album
97        if (!_request('choisir_album')) {
98                // erreurs du formulaire d'édition d'un album
99                $verifier_editer_album = charger_fonction('verifier', 'formulaires/editer_album');
100                $erreurs_editer_album = $verifier_editer_album('new', $retour, $objet.'|'.$id_objet, $lier_trad);
101                if (is_array($erreurs_editer_album)
102                        and count($erreurs_editer_album)
103                ) {
104                        $erreurs = array_merge($erreurs, $erreurs_editer_album);
105                }
106
107                // erreurs du formulaire d'ajout de documents
108                // on autorise le fait de ne pas avoir choisi de fichier (album vide)
109                // FIXME on se base sur le texte du message d'erreur retourné, il y a sans doute plus propre
110                $verifier_joindre_document = charger_fonction('verifier', 'formulaires/joindre_document');
111                $erreurs_joindre_document = $verifier_joindre_document(
112                        'new',
113                        0-$GLOBALS['visiteur_session']['id_auteur'],
114                        'album',
115                        'document'
116                );
117                $messages_aucun_document = array(
118                        _T('medias:erreur_indiquez_un_fichier'),
119                        _T('medias:erreur_aucun_document')
120                );
121                if (is_array($erreurs_joindre_document)
122                        and count($erreurs_joindre_document)
123                        and !in_array($erreurs_joindre_document['message_erreur'], $messages_aucun_document)
124                ) {
125                        $erreurs = array_merge($erreurs, $erreurs_joindre_document);
126                }
127
128        // onglet choisir un album
129        } else {
130                if (!_request('ids_albums_associer')) {
131                        $erreurs['ids_albums_associer'] = _T('info_obligatoire');
132                }
133        }
134
135        return $erreurs;
136}
137
138/**
139 * Traitement du formulaire d'ajout d'album
140 *
141 * Traiter les champs postés
142 *
143 * @uses formulaires_editer_album_traiter()
144 * @uses formulaires_joindre_document_traiter()
145 *
146 * @param int|string $objet
147 *     type de l'objet à associer.
148 * @param int|string $id_objet
149 *     Identifiant de l'objet à associer.
150 * @param string $retour
151 *     URL de redirection après le traitement
152 * @param int $lier_trad
153 *     Identifiant éventuel d'un album source d'une traduction
154 * @return array
155 *     Retours des traitements
156 */
157function formulaires_ajouter_album_traiter_dist($objet = '', $id_objet = 0, $retour = '', $lier_trad = 0) {
158
159        $res = array();
160
161        // onglet créer un album
162        if (!_request('choisir_album')) {
163                // traitement des documents si des fichiers ont été choisis
164                include_spip('inc/joindre_document');
165                $id_temporaire = 0-$GLOBALS['visiteur_session']['id_auteur'];
166                $verifier_joindre_document = charger_fonction('verifier', 'formulaires/joindre_document');
167                $res_verifier_joindre_document = $verifier_joindre_document('new', $id_temporaire, 'album', 'document');
168                if (count($res_verifier_joindre_document) == 0) {
169                        $traiter_joindre_document = charger_fonction('traiter', 'formulaires/joindre_document');
170                        $res_joindre_document = $traiter_joindre_document('new', $id_temporaire, 'album', 'document');
171                        $res = array_merge($res, $res_joindre_document);
172                }
173                // pas besoin du js ajouté dans le message de retour
174                if (isset($res['message_ok']) and $res['message_ok']) {
175                        $res['message_ok'] = preg_replace('/(<script.*<\/script>)/is', '', $res['message_ok']);
176                }
177
178                // traitement de l'album
179                set_request('statut', 'publie');
180                $traiter_editer_album = charger_fonction('traiter', 'formulaires/editer_album');
181                $res_editer_album = $traiter_editer_album('new', $retour, $objet.'|'.$id_objet, $lier_trad);
182                if (is_array($res_editer_album)) {
183                        $res = array_merge($res, $res_editer_album);
184                }
185                if (isset($res['message_ok'])
186                        and $res['message_ok']
187                        and $id_album = $res['id_album']
188                ) {
189                        $res['message_ok'] = _T(
190                                'album:message_id_album_ajoute',
191                                array('id_album' => $id_album, 'url' => ancre_url(self(), 'album'.$id_album))
192                        );
193                        $res['message_ok'] .= js_ajouter_albums($id_album);
194                        // r.a.z des champs
195                        foreach (array('titre','descriptif','refdoc_joindre') as $champ) {
196                                set_request($champ, '');
197                        }
198                }
199
200        // onglet choisir un album
201        } else {
202                $ids = _request('ids_albums_associer');
203                $ids = explode(',', $ids);
204                include_spip('action/editer_liens');
205                if ($nb=objet_associer(array('album'=>$ids), array($objet => $id_objet))) {
206                        // singulier_ou_pluriel ne semble pas aimer les chaines avec parametres
207                        if ($nb == 1) {
208                                $id_album=intval($ids[0]);
209                                $message = _T(
210                                        'album:message_id_album_ajoute',
211                                        array('id_album' => $id_album, 'url' => ancre_url(self(), 'album'.$id_album))
212                                );
213                        } elseif ($nb > 1) {
214                                $message = _T('album:message_nb_albums_ajoutes');
215                        }
216                        $res['message_ok'] = $message;
217                        $res['message_ok'] .= js_ajouter_albums($ids);
218                        // r.a.z du champ
219                        set_request('ids_albums_associer', '');
220                } else {
221                        $res['message_erreur'] = _T('erreur');
222                }
223        }
224        $res['editable'] = true;
225        return $res;
226}
227
228/**
229 * Fonction privée retournant le js pour recharger les blocs adéquats
230 *
231 * @param string|array $ids identifiants des albums ajoutés
232 * @return string message js
233 */
234function js_ajouter_albums($ids = array()) {
235        if (!intval($ids)) {
236                return;
237        }
238        if (!is_array($ids)) {
239                $ids = array($ids);
240        }
241        $divs = array();
242        foreach ($ids as $id) {
243                $divs[] = "#album${id}";
244        }
245        $divs = implode(',', $divs);
246        $callback = "jQuery('${divs}').animateAppend();";
247        $js = "if (window.jQuery) jQuery(function(){ajaxReload('liste_albums',{callback:function(){ $callback }});});";
248        $js = "<script type='text/javascript'>${js}</script>";
249        return $js;
250}
Note: See TracBrowser for help on using the repository browser.