You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

251 lines
8.7 KiB

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