source: spip-zone/_plugins_/roles_documents/trunk/formulaires/editer_logo.php @ 111458

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

$img n'est pas défini.

Evite une notice du genre :

Notice: Undefined variable: img in /plugins/roles_documents/formulaires/editer_logo.php on line 87

Version 1.2.16

File size: 10.3 KB
Line 
1<?php
2
3
4/**
5 * Gestion du formulaire d'édition de logo
6 *
7 * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP.
8 *
9 * - En dehors d'une boucle, ce formulaire modifie le logo du site (lié à un pseudo-objet 'site_spip').
10 * - Dans une boucle, il modifie le logo de la table selectionnée.
11 *
12 * - il est possible de lui passer les paramètres objet et id : `#FORMULAIRE_EDITER_LOGO{article,1}`
13 * - il est possible de spécifier une URL de redirection apres traitement :
14 *   `#FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE}`
15 *
16 * @package SPIP\Core\Formulaires
17 **/
18
19if (!defined('_ECRIRE_INC_VERSION')) {
20        return;
21}
22
23global $logo_libelles;
24// utilise pour le logo du site, donc doit rester ici
25$logo_libelles['site_spip'] = _T('logo_site');
26$logo_libelles['racine'] = _T('logo_standard_rubrique');
27
28
29/**
30 * Chargement du formulaire d'édition de logo
31 *
32 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
33 * @param int $id_objet Identifiant de l'objet
34 * @param string $retour Url de redirection apres traitement
35 * @param array $options Tableau d'option (exemple : image_reduire => 50)
36 * @return array               Variables d'environnement pour le fond
37 */
38function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = array()) {
39
40        include_spip('inc/config');
41        include_spip('inc/roles');
42
43        // Pas dans une boucle ? formulaire pour le logo du site
44        if (!$objet
45                or (
46                        $objet == 'site'
47                        and intval($id_objet) <= 0
48                )
49        ) {
50                $objet = 'site_spip';
51                $id_objet = -1;
52        }
53        $objet = objet_type($objet);
54        $id_table_objet = id_table_objet($objet);
55
56        // Options
57        if (!is_array($options)) {
58                $options = unserialize($options);
59        }
60
61        // Retrouver le titre
62        if (!isset($options['titre'])) {
63                $balise_img = chercher_filtre('balise_img');
64                $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']);
65                $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine');
66                if (isset($libelles[$libelle])) {
67                        $libelle = $libelles[$libelle];
68                } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) {
69                        $libelle = _T($libelle);
70                } else {
71                        $libelle = _L('Logo');
72                }
73                switch ($objet) {
74                        case 'article':
75                                $libelle .= ' ' . aider('logoart');
76                                break;
77                        case 'breve':
78                                $libelle .= ' ' . aider('breveslogo');
79                                break;
80                        case 'rubrique':
81                                $libelle .= ' ' . aider('rublogo');
82                                break;
83                        default:
84                                break;
85                }
86
87                $options['titre'] = $libelle;
88        }
89
90        // Chercher les logos
91        $logos = array();
92        $config = array(
93                lire_config('activer_logos'),
94                lire_config('activer_logos_survol'),
95        );
96
97        // =====================================
98        // 1) Cherchons en pririté les documents
99        // =====================================
100        // Rôles principaux de l'objet (= rôles de logos)
101        $infos_roles = roles_presents('document', $objet);
102        $roles_principaux = isset($infos_roles['roles']['principaux']) ? $infos_roles['roles']['principaux'] : array('logo', 'logo_survol');
103        $chercher_logo = charger_fonction('chercher_logo', 'inc');
104        // Rôles principaux attribués...
105        $roles_logos = roles_documents_presents_sur_objet($objet, $id_objet, 0, true);
106        // Cherchons le document pour chaque rôle attribué
107        foreach ($roles_logos['attribues'] as $role) {
108                // Vérifier la config : si le rôle est dans la liste des rôles principaux, on regarde à quelle position il se trouve et on prend la config correspondante, sinon on ignore.
109                $position = array_search($role, $roles_principaux);
110                $config_actif = isset($config[$position]) ? $config[$position] == 'oui' : true;
111                if ($config_actif
112                        and $logo = $chercher_logo($id_objet, $id_table_objet, $role)
113                ) {
114                        $logos[] = $logo;
115                }
116        }
117
118        // ====================================
119        // 2) Cherchons ensuite les vieux logos
120        // ====================================
121        $etats = array('on', 'off');
122        foreach($etats as $k => $etat) {
123                if ($config[$k] == 'oui'
124                        and $logo = $chercher_logo($id_objet, $id_table_objet, $etat, true)
125                ) {
126                        $logos[] = $logo;
127                        // On ajuste les rôles attribués (en faisant correspondre avec les rôles principaux)
128                        if (isset($roles_principaux[$k])) {
129                                array_push($roles_logos['attribues'], $roles_principaux[$k]);
130                                unset($roles_logos['attribuables'], $roles_principaux[$k]);
131                        }
132                }
133        }
134        $roles_logos['attribues'] = array_unique($roles_logos['attribues']);
135
136        // S'il y a moins de rôles attribués que de rôles possibles, on peut en ajouter
137        $joindre_documents = count($roles_logos['possibles']) > count($roles_logos['attribues']);
138
139        // Autorisation
140        if (!isset($options['editable'])) {
141                include_spip('inc/autoriser');
142                $options['editable'] = autoriser('iconifier', $objet, $id_objet);
143        }
144        $editable = (
145                (lire_config('activer_logos') == 'oui' ? true : false)
146                and (!isset($options['editable']) or $options['editable'])
147                and $joindre_documents
148        );
149
150        // Valeurs initiales
151        $valeurs = array(
152                'editable'           => $editable,
153                'logos'              => $logos,
154                'objet'              => $objet,
155                'id_objet'           => $id_objet,
156                'roles'              => '', // le rôle qui sera sélectionné
157                'roles_attribuables' => $roles_logos['attribuables'], // rôles attribuables
158                '_options'           => $options,
159                'editer_logo'        => true, // Un flag pour identifier le contexte
160        );
161
162        // Valeurs du formulaire d'ajout de document
163        $charger_joindre_document = charger_fonction('charger', 'formulaires/joindre_document');
164        $valeurs_joindre_document = $charger_joindre_document('new', $id_objet, $objet, 'choix');
165
166        // On fusionne les valeurs
167        $valeurs = array_merge($valeurs_joindre_document, $valeurs);
168
169        // Si le logo n'est pas editable et qu'il n'y en a pas,
170        // on n'affiche pas du tout le formulaire
171        if ((!$valeurs['editable']
172                        and empty($logos)
173                )
174                or (lire_config('activer_logos') != 'oui')
175        ) {
176                return false;
177        }
178
179        return $valeurs;
180}
181
182/**
183 * Identifier le formulaire en faisant abstraction des parametres qui
184 * ne representent pas l'objet edite
185 *
186 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
187 * @param int $id_objet Identifiant de l'objet
188 * @param string $retour Url de redirection apres traitement
189 * @param array $options Tableau d'option (exemple : image_reduire => 50)
190 * @return string              Hash du formulaire
191 */
192function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = array()) {
193        return serialize(array($objet, $id_objet));
194}
195
196/**
197 * Verification avant traitement du formulaire d'édition de logo
198 *
199 * On verifie que l'upload s'est bien passe et
200 * que le document recu est une image (d'apres son extension)
201 *
202 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
203 * @param int $id_objet Identifiant de l'objet
204 * @param string $retour Url de redirection apres traitement
205 * @param array $options Tableau d'option (exemple : image_reduire => 50)
206 * @return array               Erreurs du formulaire
207 */
208function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = array()) {
209
210        // Vérifications propres aux logos
211        $erreurs = array();
212
213        // Vérifications du formulaire d'ajout de document
214        $verifier_joindre_document = charger_fonction('verifier', 'formulaires/joindre_document');
215        $erreurs_joindre_document = $verifier_joindre_document('new', $id_objet, $objet, 'choix');
216
217        // On fusionnes les erreurs
218        $erreurs = array_merge($erreurs_joindre_document, $erreurs);
219
220        return $erreurs;
221}
222
223/**
224 * Traitement de l'upload d'un logo
225 *
226 * Il est affecte au site si la balise n'est pas dans une boucle,
227 * sinon a l'objet concerne par la boucle ou indiquee par les parametres d'appel
228 *
229 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
230 * @param int $id_objet Identifiant de l'objet
231 * @param string $retour Url de redirection apres traitement
232 * @param array $options Tableau d'option (exemple : image_reduire => 50)
233 * @return array               Retour des traitements
234 */
235function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = array()) {
236
237        // Retours
238        $res = array('editable' => true);
239
240        // Pas dans une boucle ? formulaire pour le logo du site
241        if (!$objet
242                or (
243                        $objet == 'site'
244                        and intval($id_objet) <= 0
245                )
246        ) {
247                $objet = 'site_spip';
248                $id_objet = -1;
249        }
250
251        // Redirection
252        if ($retour) {
253                $res['redirect'] = $retour;
254        }
255
256        // refdoc_joindre peut être un identifiant saisi à la main, ou une référence
257        // retournée par la modale de sélection de la médiathèque, sous la forme docXX.
258        preg_match('/^(doc)?([0-9]+)$/i', _request('refdoc_joindre'), $m);
259        $refdoc_joindre = isset($m[2]) ? $m[2] : 0;
260
261        // Si c'est un doc de la médiathèque, notons s'il est déjà lié
262        $doc_deja_present = (
263                _request('joindre_mediatheque')
264                and sql_countsel(
265                        'spip_documents_liens',
266                        array(
267                                'objet = ' . sql_quote($objet),
268                                'id_objet = ' . intval($id_objet),
269                                'id_document = ' . intval($refdoc_joindre),
270                                'id_document > 0'
271                        )
272                )
273        );
274
275        // Traitements génériques du formulaire d'ajout de documents
276        // (ajout du doc dans la table, liaison avec l'objet, etc.)
277        $traiter_joindre_document = charger_fonction('traiter', 'formulaires/joindre_document');
278        $res_joindre_document = $traiter_joindre_document('new', $id_objet, $objet, 'choix');
279
280        // En cas de succès, on ajoute le rôle sélectionné
281        if ($roles = _request('roles')
282                and isset($res_joindre_document['message_ok'])
283                and !empty($res_joindre_document['ids'])
284        ) {
285
286                // Un seul rôle peut être sélectionné, mais on ne sait jamais
287                if (is_array($roles)) {
288                        $roles = array_shift($roles);
289                }
290
291                // On ne prend qu'un seul document
292                $id_document = intval(array_shift($res_joindre_document['ids']));
293
294                // Cas 1 : le document n'était pas déjà lié, on requalifie le lien créé
295                if (!$doc_deja_present) {
296                        $update = sql_updateq(
297                                'spip_documents_liens',
298                                array('role' => $roles),
299                                array(
300                                        'id_document=' . intval($id_document),
301                                        'objet='       . sql_quote($objet),
302                                        'id_objet='    . intval($id_objet),
303                                        'role='        . sql_quote('document'),
304                                )
305                        );
306
307                // Cas 2 : le document était déjà lié, on crée un nouveau lien qualifié
308                } else {
309                        $insert = sql_insertq(
310                                'spip_documents_liens',
311                                array(
312                                        'id_document' => intval($id_document),
313                                        'objet'       => $objet,
314                                        'id_objet'    => intval($id_objet),
315                                        'role'        => $roles,
316                                )
317                        );
318                }
319
320                // Invalider les caches de l'objet
321                include_spip('inc/invalideur');
322                suivre_invalideur("id='$objet/$id_objet'");
323
324        }
325
326        // On fusionne les retours
327        $res = array_merge($res_joindre_document, $res);
328
329        return $res;
330}
Note: See TracBrowser for help on using the repository browser.