[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / prive / formulaires / editer_logo.php
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 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 global $logo_libelles;
16 // utilise pour le logo du site, donc doit rester ici
17 $logo_libelles['site'] = _T('logo_site');
18 $logo_libelles['racine'] = _T('logo_standard_rubrique');
19
20 /**
21 * Formulaire #EDITER_LOGO
22 *
23 * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP.
24 * - En dehors d'une boucle, ce formulaire modifie le logo du site.
25 * - Dans une boucle, il modifie le logo de la table selectionnee.
26 * Pensez juste que l'appel de #LOGO_{TYPE} s'appuie sur le nom de la cle primaire et non sur le
27 * nom de l'objet reel. Par exemple on ecrira #LOGO_GROUPE (et non #LOGO_GROUPEMOTS) pour afficher
28 * un logo issu du formulaire mis dans une boucle GROUPES_MOTS
29 * - il est possible de lui passer les parametres objet et id : #FORMULAIRE_EDITER_LOGO{article,1}
30 * - il est possible de spécifier une url de redirection apres traitement :
31 * ex. #FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE}
32 */
33
34 /**
35 * Chargement du formulaire
36 *
37 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
38 * @param integer $id_objet Identifiant de l'objet
39 * @param string $retour Url de redirection apres traitement
40 * @param Array $options Tableau d'option (exemple : image_reduire => 50)
41 * @return Array Variables d'environnement pour le fond
42 */
43 function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour='', $options=array()){
44 // pas dans une boucle ? formulaire pour le logo du site
45 // dans ce cas, il faut chercher un 'siteon0.ext'
46 if (!$objet) $objet = 'site';
47
48 $objet = objet_type($objet);
49 $_id_objet = id_table_objet($objet);
50
51 if (!is_array($options))
52 $options = unserialize($options);
53
54 if (!isset ($options['titre'])) {
55 $balise_img = chercher_filtre('balise_img');
56 $img = $balise_img(chemin_image('image-24.png'), "", 'cadre-icone');
57 $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']);
58 $libelle = (($id_objet OR $objet != 'rubrique') ? $objet : 'racine');
59 if (isset($libelles[$libelle])) {
60 $libelle = $libelles[$libelle];
61 } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) {
62 $libelle = _T($libelle);
63 } else {
64 $libelle = _L('Logo');
65 }
66 switch($objet){
67 case 'article':
68 $libelle .= " " . aide ("logoart");
69 break;
70 case 'breve':
71 $libelle .= " " . aide ("breveslogo");
72 break;
73 case 'rubrique':
74 $libelle .= " " . aide ("rublogo");
75 break;
76 default:
77 break;
78 }
79
80 $options['titre'] = $img . $libelle;
81 }
82 if (!isset ($options['editable'])){
83 include_spip('inc/autoriser');
84 $options['editable'] = autoriser('iconifier',$objet,$id_objet);
85 }
86
87 $res = array(
88 'editable'=>($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '')&&(!isset($options['editable']) OR $options['editable']),
89 'logo_survol'=>($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''),
90 'objet'=>$objet,
91 'id_objet'=>$id_objet,
92 '_options'=>$options,
93 '_show_upload_off'=>'',
94 );
95
96 // rechercher le logo de l'objet
97 // la fonction prend un parametre '_id_objet' etrange :
98 // le nom de la cle primaire (et non le nom de la table)
99 // ou directement le nom du raccourcis a chercher
100 $chercher_logo = charger_fonction('chercher_logo', 'inc');
101 $etats = $res['logo_survol'] ? array('on','off') : array('on');
102 foreach($etats as $etat) {
103 $logo = $chercher_logo($id_objet, $_id_objet, $etat);
104 if ($logo){
105 $res['logo_'.$etat] = $logo[0];
106 }
107 }
108 // pas de logo_on -> pas de formulaire pour le survol
109 if (!isset($res['logo_on']))
110 $res['logo_survol']='';
111 elseif (!isset($res['logo_off']) AND _request('logo_up'))
112 $res['_show_upload_off'] = ' ';
113
114 // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire
115 if (!$res['editable']
116 AND !isset($res['logo_off'])
117 AND !isset($res['logo_on']))
118 return false;
119
120 return $res;
121 }
122
123 /**
124 * Identifier le formulaire en faisant abstraction des parametres qui
125 * ne representent pas l'objet edite
126 */
127 function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour='', $options=array()){
128 return serialize(array($objet, $id_objet));
129 }
130
131 /**
132 * Verification avant traitement
133 *
134 * On verifie que l'upload s'est bien passe et
135 * que le document recu est une image (d'apres son extension)
136 *
137 * @param string $objet
138 * @param integer $id_objet
139 * @param string $retour
140 * @return Array Tableau des erreurs
141 */
142 function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour=''){
143 $erreurs = array();
144 // verifier les extensions
145 $sources = formulaire_editer_logo_get_sources();
146 foreach($sources as $etat=>$file) {
147 // seulement si une reception correcte a eu lieu
148 if ($file AND $file['error'] == 0) {
149 if (!in_array(strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)),array('jpg','png','gif','jpeg')))
150 $erreurs['logo_'.$etat] = _L('Extension non reconnue');
151 }
152 }
153 return $erreurs;
154 }
155
156 /**
157 * Traitement de l'upload d'un logo
158 *
159 * Il est affecte au site si la balise n'est pas dans une boucle,
160 * sinon a l'objet concerne par la boucle ou indiquee par les parametres d'appel
161 *
162 * @param string $objet
163 * @param integer $id_objet
164 * @param string $retour
165 * @return Array
166 */
167 function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour=''){
168 $res = array('editable'=>' ');
169
170 // pas dans une boucle ? formulaire pour le logo du site
171 // dans ce cas, il faut chercher un 'siteon0.ext'
172 if (!$objet) $objet = 'site';
173
174 $objet = objet_type($objet);
175 $_id_objet = id_table_objet($objet);
176
177 // supprimer l'ancien logo puis copier le nouveau
178 include_spip('inc/chercher_logo');
179 include_spip('inc/flock');
180 $type = type_du_logo($_id_objet);
181 $chercher_logo = charger_fonction('chercher_logo','inc');
182
183 // effectuer la suppression si demandee d'un logo
184 $on = _request('supprimer_logo_on');
185 if ($on OR _request('supprimer_logo_off')){
186 $logo = $chercher_logo($id_objet, $_id_objet, $on ? 'on' : 'off');
187 if ($logo)
188 spip_unlink($logo[0]);
189 $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle
190 set_request('logo_up',' ');
191 }
192
193 // sinon supprimer ancien logo puis copier le nouveau
194 else {
195 include_spip('action/iconifier');
196 $ajouter_image = charger_fonction('spip_image_ajouter','action');
197 $sources = formulaire_editer_logo_get_sources();
198 foreach($sources as $etat=>$file) {
199 if ($file and $file['error']==0) {
200 $logo = $chercher_logo($id_objet, $_id_objet, $etat);
201 if ($logo)
202 spip_unlink($logo[0]);
203 if ($err = $ajouter_image($type.$etat.$id_objet," ",$file,true))
204 $res['message_erreur'] = $err;
205 else
206 $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle
207 set_request('logo_up',' ');
208 }
209 }
210 }
211
212 if ($retour){
213 include_spip('inc/headers');
214 $res['redirect'] = parametre_url($retour,'var_mode','calcul');
215 }
216
217 return $res;
218 }
219
220
221 /**
222 * Extraction des sources des fichiers uploades correspondant aux 2 logos (normal + survol)
223 * si leur upload s'est bien passé
224 *
225 * @return Array
226 */
227 function formulaire_editer_logo_get_sources(){
228 if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
229 if (!is_array($_FILES)) return array();
230
231 $sources = array();
232 foreach(array('on','off') as $etat) {
233 if ($_FILES['logo_'.$etat]['error'] == 0) {
234 $sources[$etat] = $_FILES['logo_'.$etat];
235 }
236 }
237 return $sources;
238 }
239 ?>