source: spip-zone/_plugins_/logos_roles/trunk/action/editer_logo.php @ 103781

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

vraiment éviter d'effacer les logos par défaut

On l'empêche directement dans l'API, sinon remplacer un logo par défaut le
supprime définitivement.

File size: 4.8 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2016                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13/**
14 * Gestion de l'API de modification/suppression des logos
15 *
16 * @package SPIP\Core\Logo\Edition
17 */
18
19/**
20 * Supprimer le logo d'un objet
21 *
22 * @param string $objet
23 * @param int $id_objet
24 * @param string $role
25 *     Un rôle de logo. `on` ou `off` sont aussi admis pour rétro-compatibilité
26 *
27 * @return string|null
28 *     Erreur, sinon rien
29 */
30function logo_supprimer($objet, $id_objet, $role) {
31        $chercher_logo = charger_fonction('chercher_logo', 'inc');
32        $objet = objet_type($objet);
33        $primary = id_table_objet($objet);
34
35        if ($role === 'on') {
36                $role = 'logo';
37        } elseif ($role === 'off') {
38                $role = 'logo_survol';
39        }
40
41        $logo = $chercher_logo($id_objet, $primary, $role);
42        // si pas de logo ou qu'on est dans le cas d'un logo par défaut, on ne fait rien
43        if ((! $logo) or est_logo_par_defaut($logo[0], $id_objet, $objet, $role)) {
44                return;
45        }
46
47        include_spip('base/abstract_sql');
48        include_spip('action/editer_liens');
49        // S'il n'y pas de document qui gère le logo, on le supprime avec la méthode
50        // historique
51        if (! objet_trouver_liens(array('document' => '*'), array($objet => $id_objet), array('role' => $role))) {
52                spip_unlink($logo[0]);
53        } else {
54                // Si le logo est géré par un document on ne supprime que le lien
55                if ($objet === 'site') {
56                        sql_delete(
57                                'spip_documents_liens',
58                                array('objet="site"', 'id_objet=0', 'role='.sql_quote($role))
59                        );
60                } else {
61                        objet_dissocier(
62                                array('document' => '*'),
63                                array($objet => $id_objet),
64                                array('role' => $role)
65                        );
66                }
67
68                // Si le plugin massicot est installé, on doit aussi supprimer le
69                // massicotage correspondant.
70                if (test_plugin_actif('massicot')) {
71                        if ($err = massicot_supprimer($objet, $id_objet, $role)) {
72                                return $err;
73                        }
74                }
75        }
76}
77
78/**
79 * Modifier le logo d'un objet à partir d'un fichier uploadé
80 *
81 * @param string $objet
82 * @param int $id_objet
83 * @param string $role
84 *     le role, ou `on` ou `off` pour la rétro-compatibilité
85 * @param string|array $source
86 *     - array : sous tableau de `$_FILE` issu de l'upload
87 *     - string : fichier source (chemin complet ou chemin relatif a `tmp/upload`)
88 * @return string
89 *     Erreur, sinon ''
90 */
91function logo_modifier($objet, $id_objet, $role, $source) {
92        $chercher_logo = charger_fonction('chercher_logo', 'inc');
93        $objet = objet_type($objet);
94        $primary = id_table_objet($objet);
95        include_spip('inc/chercher_logo');
96        $type = type_du_logo($primary);
97
98        // supprimer le logo éventuel existant
99        logo_supprimer($objet, $id_objet, $role);
100
101        if (!$source) {
102                spip_log('spip_image_ajouter : source inconnue');
103                return $erreur = 'source inconnue';
104        }
105
106        include_spip('action/ajouter_documents');
107        $ajouter_un_document = charger_fonction('ajouter_un_document', 'action');
108        // On ne passe pas l'objet, pour éviter de créer un lien avec le rôle par
109        // défaut. On fait le lien à la main un peu plus bas.
110        $id_document = $ajouter_un_document('new', $source, null, null, 'image');
111        if (is_string($id_document)) {
112                return $erreur = $id_document;
113        }
114
115        return logo_modifier_document($objet, $id_objet, $role, $id_document);
116}
117
118/**
119 * Modifier le logo d'un objet à partir d'un document
120 *
121 * @param string $objet
122 * @param int $id_objet
123 * @param string $role
124 *     le role, ou `on` ou `off` pour la rétro-compatibilité
125 * @param integer $id_document : l'identifiant du document
126 * @return string
127 *     Erreur, sinon ''
128 */
129function logo_modifier_document($objet, $id_objet, $role, $id_document) {
130
131        // Cas du LOGO_SITE_SPIP..
132        if (($objet === 'site') and ($id_objet == 0)) {
133                include_spip('base/abstract_sql');
134
135                // On supprime d'éventuels liens existants
136                sql_delete(
137                        'spip_documents_liens',
138                        array('objet="site"', 'id_objet=0', 'role='.sql_quote($role))
139                );
140
141                // Puis on insère le nouveau
142                sql_insertq(
143                        'spip_documents_liens',
144                        array(
145                                'id_document' => intval($id_document),
146                                'objet' => 'site',
147                                'id_objet' => 0,
148                                'role' => $role,
149                        )
150                );
151
152        // Cas des autres logos
153        } else {
154                include_spip('action/editer_liens');
155                objet_associer(
156                        array('document' => $id_document),
157                        array($objet => $id_objet),
158                        array('role' => $role)
159                );
160        }
161
162        return $erreur = '';
163}
Note: See TracBrowser for help on using the repository browser.