[SPIP] v3.2.7-->v3.2.9
[lhc/web/www.git] / www / plugins-dist / medias / formulaires / editer_document.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2020 *
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')) {
14 return;
15 }
16
17 include_spip('inc/actions');
18 include_spip('inc/editer');
19 include_spip('inc/documents');
20 include_spip('inc/config');
21
22 function formulaires_editer_document_charger_dist(
23 $id_document = 'new',
24 $id_parent = '',
25 $retour = '',
26 $lier_trad = 0,
27 $config_fonc = 'documents_edit_config',
28 $row = array(),
29 $hidden = ''
30 ) {
31 $valeurs = formulaires_editer_objet_charger('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden);
32
33 if (test_formulaire_inclus_par_modele()) {
34 if (intval($id_document) and !autoriser('modifier', 'document', intval($id_document))) {
35 $valeurs['editable'] = '';
36 }
37 }
38
39 // relier les parents
40 $valeurs['parents'] = array();
41 $valeurs['_hidden'] = '';
42 $parents = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document=' . intval($id_document));
43 foreach ($parents as $p) {
44 if (in_array($p['objet'], array('article', 'rubrique')) and $p['id_objet'] > 0) {
45 $valeurs['parents'][] = $p['objet'] . '|' . $p['id_objet'];
46 } else {
47 $valeurs['_hidden'] .= "<input type='hidden' name='parents[]' value='" . $p['objet'] . '|' . $p['id_objet'] . "' />";
48 }
49 }
50
51 // en fonction de la config du site on a le droit ou pas de modifier la date
52 if ($valeurs['_editer_date'] = (lire_config('documents_date') == 'oui' ? ' ' : '')) {
53 $valeurs['saisie_date'] = affdate($valeurs['date'], 'd/m/Y');
54 $valeurs['saisie_heure'] = affdate($valeurs['date'], 'H:i');
55 } elseif (isset($valeurs['date'])) {
56 unset($valeurs['date']);
57 }
58
59 // en fonction du format
60 $valeurs['_editer_dimension'] = autoriser('tailler', 'document', $id_document) ? ' ' : '';
61
62 // type du document et inclusion
63 $row = sql_fetsel(
64 'titre as type_document,inclus',
65 'spip_types_documents',
66 'extension=' . sql_quote($valeurs['extension'])
67 );
68 $valeurs['type_document'] = $row['type_document'];
69 $valeurs['_inclus'] = $row['inclus'];
70 if (in_array($valeurs['extension'], array('jpg', 'gif', 'png'))) {
71 $valeurs['apercu'] = get_spip_doc($valeurs['fichier']);
72 }
73
74 // verifier les infos de taille et dimensions sur les fichiers locaux
75 // cas des maj de fichier directes par ftp
76 if ($valeurs['distant'] !== 'oui') {
77 include_spip('inc/renseigner_document');
78 $infos = renseigner_taille_dimension_image(get_spip_doc($valeurs['fichier']), $valeurs['extension']);
79 if ($infos and is_array($infos) and isset($infos['taille'])) {
80 if ($infos['taille'] != $valeurs['taille']
81 or ($infos['type_image'] && ($infos['largeur'] != $valeurs['largeur']))
82 or ($infos['type_image'] && ($infos['hauteur'] != $valeurs['hauteur']))
83 ) {
84 $valeurs['_taille_modif'] = $infos['taille'];
85 $valeurs['_largeur_modif'] = $infos['largeur'];
86 $valeurs['_hauteur_modif'] = $infos['hauteur'];
87 $valeurs['_hidden'] .=
88 "<input type='hidden' name='_taille_modif' value='" . $infos['taille'] . "' />"
89 . "<input type='hidden' name='_largeur_modif' value='" . $infos['largeur'] . "' />"
90 . "<input type='hidden' name='_hauteur_modif' value='" . $infos['hauteur'] . "' />";
91 }
92 }
93 }
94
95
96 // pour l'upload d'un nouveau doc
97 if ($valeurs['fichier']) {
98 $charger = charger_fonction('charger', 'formulaires/joindre_document');
99 $valeurs = array_merge($valeurs, $charger($id_document, 0, '', 'choix'));
100 $valeurs['_hidden'] .= "<input name='id_document' value='$id_document' type='hidden' />";
101 }
102
103 return $valeurs;
104 }
105
106 // Choix par defaut des options de presentation
107 function documents_edit_config($row) {
108 global $spip_lang;
109
110 $config = array();//$GLOBALS['meta'];
111 $config['lignes'] = 8;
112 $config['langue'] = $spip_lang;
113
114 $config['restreint'] = ($row['statut'] == 'publie');
115
116 return $config;
117 }
118
119 function formulaires_editer_document_verifier_dist(
120 $id_document = 'new',
121 $id_parent = '',
122 $retour = '',
123 $lier_trad = 0,
124 $config_fonc = 'documents_edit_config',
125 $row = array(),
126 $hidden = ''
127 ) {
128 $erreurs = formulaires_editer_objet_verifier('document', $id_document, is_numeric($id_document) ? array() : array('titre'));
129
130 // verifier l'upload si on a demande a changer le document
131 if (_request('joindre_upload') or _request('joindre_ftp') or _request('joindre_distant')) {
132 if (_request('copier_local')) {
133 } else {
134 $verifier = charger_fonction('verifier', 'formulaires/joindre_document');
135 $erreurs = array_merge($erreurs, $verifier($id_document));
136 }
137 }
138
139 // On ne vérifie la date que si on avait le droit de la modifier
140 if (lire_config('documents_date') == 'oui') {
141 if (!$date = recup_date(_request('saisie_date') . ' ' . _request('saisie_heure') . ':00')
142 or !($date = mktime($date[3], $date[4], 0, $date[1], $date[2], $date[0]))
143 ) {
144 $erreurs['saisie_date'] = _T('medias:format_date_incorrect');
145 } else {
146 set_request('saisie_date', date('d/m/Y', $date));
147 set_request('saisie_heure', date('H:i', $date));
148 set_request('date', date('Y-m-d H:i:s', $date));
149 }
150 }
151
152 return $erreurs;
153 }
154
155 // https://code.spip.net/@inc_editer_article_dist
156 function formulaires_editer_document_traiter_dist(
157 $id_document = 'new',
158 $id_parent = '',
159 $retour = '',
160 $lier_trad = 0,
161 $config_fonc = 'documents_edit_config',
162 $row = array(),
163 $hidden = ''
164 ) {
165 if (is_null(_request('parents'))) {
166 set_request('parents', array());
167 }
168
169 // verifier les infos de taille et dimensions sur les fichiers locaux
170 // cas des maj de fichier directes par ftp
171 foreach (array('taille', 'largeur', 'hauteur') as $c) {
172 if (($v = _request("_{$c}_modif")) and !_request($c)) {
173 set_request($c, $v);
174 }
175 }
176
177 $res = formulaires_editer_objet_traiter('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden);
178 set_request('parents');
179 $autoclose = "<script type='text/javascript'>if (window.jQuery) jQuery.modalboxclose();</script>";
180 if (_request('copier_local')
181 or _request('joindre_upload')
182 or _request('joindre_ftp')
183 or _request('joindre_distant')
184 or _request('joindre_zip')
185 ) {
186 $autoclose = '';
187 if (_request('copier_local')) {
188 $copier_local = charger_fonction('copier_local', 'action');
189 $res = array('editable' => true);
190 if (($err = $copier_local($id_document)) === true) {
191 $res['message_ok'] = (isset($res['message_ok']) ? $res['message_ok'] . '<br />' : '') . _T('medias:document_copie_locale_succes');
192 } else {
193 $res['message_erreur'] = (isset($res['message_erreur']) ? $res['message_erreur'] . '<br />' : '') . $err;
194 }
195 set_request('credits'); // modifie par la copie locale
196 } else {
197 // liberer le nom de l'ancien fichier pour permettre le remplacement par un fichier du meme nom
198 if ($ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document))
199 and !tester_url_absolue($ancien_fichier)
200 and @file_exists($rename = get_spip_doc($ancien_fichier))
201 ) {
202 @rename($rename, "$rename--.old");
203 }
204 $traiter = charger_fonction('traiter', 'formulaires/joindre_document');
205 $res2 = $traiter($id_document);
206 if (isset($res2['message_erreur'])) {
207 $res['message_erreur'] = $res2['message_erreur'];
208 // retablir le fichier !
209 if ($rename) {
210 @rename("$rename--.old", $rename);
211 }
212 } else // supprimer vraiment le fichier initial
213 {
214 spip_unlink("$rename--.old");
215 }
216 }
217 // on annule les saisies largeur/hauteur : l'upload a pu charger les siens
218 set_request('largeur');
219 set_request('hauteur');
220 } else {
221 // regarder si une demande de rotation a eu lieu
222 // c'est un bouton image, dont on a pas toujours le name en request, on fait avec
223 $angle = 0;
224 if (_request('tournerL90') or _request('tournerL90_x')) {
225 $angle = -90;
226 }
227 if (_request('tournerR90') or _request('tournerR90_x')) {
228 $angle = 90;
229 }
230 if (_request('tourner180') or _request('tourner180_x')) {
231 $angle = 180;
232 }
233 if ($angle) {
234 $autoclose = '';
235 $tourner = charger_fonction('tourner', 'action');
236 action_tourner_post($id_document, $angle);
237 }
238 }
239
240 if (!isset($res['redirect'])) {
241 $res['editable'] = true;
242 }
243 if (!isset($res['message_erreur'])) {
244 $res['message_ok'] = _T('info_modification_enregistree') . $autoclose;
245 }
246
247 if ($res['message_ok']) {
248 $res['message_ok'] .= '<script type="text/javascript">if (window.jQuery) ajaxReload("document_infos");</script>';
249 }
250
251 return $res;
252 }