PageRenderTime 44ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/serendipity_admin_image_selector.php

http://github.com/s9y/Serendipity
PHP | 306 lines | 285 code | 17 blank | 4 comment | 13 complexity | 36998202ff5fa437a97789ff7294e791 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-3.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, Apache-2.0
  1. <?php
  2. # Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
  3. # All rights reserved. See LICENSE file for licensing details
  4. include('serendipity_config.inc.php');
  5. if (IN_serendipity !== true) {
  6. die ("Don't hack!");
  7. }
  8. header('Content-Type: text/html; charset=' . LANG_CHARSET);
  9. if ($_SESSION['serendipityAuthedUser'] !== true && $serendipity['GET']['step'] != 'showItem') {
  10. die(HAVE_TO_BE_LOGGED_ON);
  11. }
  12. if (!isset($serendipity['GET']['adminModule'])) {
  13. $serendipity['GET']['adminModule'] = (isset($serendipity['POST']['adminModule']) ? $serendipity['POST']['adminModule'] : '');
  14. }
  15. if (!isset($serendipity['GET']['step'])) {
  16. $serendipity['GET']['step'] = (isset($serendipity['POST']['step']) ? $serendipity['POST']['step'] : '');
  17. }
  18. if (empty($serendipity['GET']['step']) && isset($serendipity['GET']['adminAction'])) {
  19. $serendipity['GET']['step'] = $serendipity['GET']['adminAction'];
  20. }
  21. serendipity_smarty_init();
  22. if (empty($serendipity['GET']['step']) && $serendipity['GET']['page'] < 1) {
  23. $media = array(
  24. 'GET_STRING' => serendipity_build_query($_GET),
  25. 'frameset' => true
  26. );
  27. $serendipity['smarty']->assignByRef('media', $media);
  28. $serendipity['smarty']->display(serendipity_getTemplateFile('admin/media_choose.tpl', 'serendipityPath'));
  29. return;
  30. }
  31. $import_vars = $serendipity['GET'];
  32. unset($import_vars['step']);
  33. unset($import_vars['only_path']);
  34. $showFile = 'admin/media_choose.tpl';
  35. $body_id = 'serendipityAdminBodyImageSelector';
  36. if ($serendipity['GET']['step'] === 'tree') {
  37. $body_id = 'serendipityAdminBodyImageSelectorTree';
  38. }
  39. $media = array(
  40. 'body_id' => $body_id,
  41. 'only_path' => $serendipity['GET']['only_path'],
  42. 'css' => serendipity_rewriteURL('serendipity_admin.css'),
  43. 'css_tree' => serendipity_getTemplateFile('treeview/tree.css'),
  44. 'css_front' => serendipity_rewriteURL('serendipity.css'),
  45. 'token_url' => serendipity_setFormToken('url'),
  46. 'imgID' => (int)$serendipity['GET']['image'],
  47. 'from' => $serendipity['GET']['from'],
  48. 'GET_STRING' => serendipity_build_query($import_vars, 'serendipity', '&'),
  49. 'paths' => serendipity_getMediaPaths()
  50. );
  51. switch ($serendipity['GET']['step']) {
  52. case '1':
  53. if (isset($serendipity['GET']['adminAction'])) { // Embedded upload form
  54. if (!empty($serendipity['POST']['textarea'])) {
  55. $serendipity['GET']['textarea'] = $serendipity['POST']['textarea'];
  56. }
  57. if (!empty($serendipity['POST']['htmltarget'])) {
  58. $serendipity['GET']['htmltarget'] = $serendipity['POST']['htmltarget'];
  59. }
  60. if (!empty($serendipity['POST']['filename_only'])) {
  61. $serendipity['GET']['filename_only'] = $serendipity['POST']['filename_only'];
  62. }
  63. $image_selector_addvars = array(
  64. 'step' => 1,
  65. 'textarea' => (!empty($serendipity['GET']['textarea']) ? $serendipity['GET']['textarea'] : ''),
  66. 'htmltarget' => (!empty($serendipity['GET']['htmltarget']) ? $serendipity['GET']['htmltarget'] : ''),
  67. 'filename_only' => (!empty($serendipity['GET']['filename_only']) ? $serendipity['GET']['filename_only'] : '')
  68. );
  69. switch ($serendipity['GET']['adminAction']) {
  70. case 'addSelect':
  71. $media['case'] = 'external';
  72. ob_start();
  73. include S9Y_INCLUDE_PATH . 'include/admin/images.inc.php';
  74. $media['external'] = ob_get_contents();
  75. ob_end_clean();
  76. break 2;
  77. case 'add':
  78. $media['case'] = 'external';
  79. ob_start();
  80. include S9Y_INCLUDE_PATH . 'include/admin/images.inc.php';
  81. $media['external'] = ob_get_contents();
  82. ob_end_clean();
  83. if (isset($created_thumbnail) && isset($image_id)) {
  84. $media['is_uploaded'] = true;
  85. $serendipity['GET']['image'] = $media['imgID'] = (int)$image_id; // $image_id is passed from images.inc.php
  86. break;
  87. } else {
  88. break 2;
  89. }
  90. }
  91. }
  92. $media['case'] = 'choose';
  93. $file = serendipity_fetchImageFromDatabase($serendipity['GET']['image']);
  94. $media['file'] = &$file;
  95. if (!is_array($file)) {
  96. $media['perm_denied'] = true;
  97. break;
  98. }
  99. serendipity_prepareMedia($file);
  100. $media['file']['props'] =& serendipity_fetchMediaProperties((int)$serendipity['GET']['image']);
  101. serendipity_plugin_api::hook_event('media_getproperties_cached', $media['file']['props']['base_metadata'], $media['file']['realfile']);
  102. if ($file['is_image']) {
  103. $file['finishJSFunction'] = $file['origfinishJSFunction'] = 'serendipity.serendipity_imageSelector_done(\'' . serendipity_specialchars($serendipity['GET']['textarea']) . '\')';
  104. if (!empty($serendipity['GET']['filename_only']) && $serendipity['GET']['filename_only'] !== 'true') {
  105. $file['fast_select'] = true;
  106. }
  107. }
  108. break;
  109. case 'directoryDoCreate':
  110. case 'directoryDoDelete':
  111. $is_created = true;
  112. if ($serendipity['GET']['step'] == 'directoryDoDelete') {
  113. $is_deleted = true;
  114. }
  115. case 'directoryCreate':
  116. $serendipity['GET']['adminAction'] = $serendipity['GET']['step'];
  117. $media['case'] = 'external';
  118. ob_start();
  119. include S9Y_INCLUDE_PATH . 'include/admin/images.inc.php';
  120. if ($is_created || $is_deleted) {
  121. $media['is_created'] = $is_created;
  122. $media['is_deleted'] = $is_deleted;
  123. $media['new_dir'] = $new_dir;
  124. }
  125. $media['external'] = ob_get_contents();
  126. ob_end_clean();
  127. break;
  128. case 'tree':
  129. $media['case'] = 'tree';
  130. break;
  131. case 'showItem':
  132. serendipity_plugin_api::hook_event('frontend_media_showitem_init', $media);
  133. if ($media['perm_denied']) {
  134. break;
  135. }
  136. $media['case'] = 'showitem';
  137. $file = serendipity_fetchImageFromDatabase((int)$serendipity['GET']['image']);
  138. $media['file'] = &$file;
  139. $keywords = $dprops = '';
  140. if (!is_array($file)) {
  141. $media['perm_denied'] = true;
  142. break;
  143. }
  144. serendipity_prepareMedia($file);
  145. $showfile = null;
  146. if (($serendipity['GET']['resizeWidth'] || $serendipity['GET']['resizeHeight']) && $serendipity['dynamicResize'] && $media['file']['is_image']) {
  147. $width = (int)$serendipity['GET']['resizeWidth'];
  148. $height = (int)$serendipity['GET']['resizeHeight'];
  149. if (empty($width)) {
  150. $width = NULL;
  151. }
  152. if (empty($height)) {
  153. $height = NULL;
  154. }
  155. $showfile = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . '/mediacache/cache_img' . (int)$serendipity['GET']['image'] . '_' . $width . '_' . $height;
  156. if (!file_exists($showfile)) {
  157. serendipity_makeThumbnail(
  158. $media['file']['realname'],
  159. $media['file']['path'],
  160. array(
  161. 'width' => $width,
  162. 'height' => $height
  163. ),
  164. $showfile,
  165. true
  166. );
  167. }
  168. }
  169. $hit = serendipity_db_query("SELECT id
  170. FROM {$serendipity['dbPrefix']}references
  171. WHERE link = '" . serendipity_db_escape_string($_SERVER['HTTP_REFERER']) . "'
  172. AND entry_id = " . (int)$serendipity['GET']['image'] . "
  173. AND type = 'media'", true, 'assoc');
  174. if (!is_array($hit) || !isset($hit['id'])) {
  175. serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}references
  176. (entry_id, link, name, type)
  177. VALUES (" . (int)$serendipity['GET']['image'] . ", '" . serendipity_db_escape_string($_SERVER['HTTP_REFERER']) . "', 1, 'media')");
  178. } else {
  179. serendipity_db_query("UPDATE {$serendipity['dbPrefix']}references
  180. SET name = name + 1
  181. WHERE id = " . (int)$hit['id']);
  182. }
  183. $curl = ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . ($_SERVER['HTTP_PORT'] != 80 ? ':' . $_SERVER['HTTP_PORT'] : '');
  184. switch($serendipity['GET']['show']) {
  185. case 'redirect':
  186. header('Status: 302 Found');
  187. header('Location: ' . $curl . $file['links']['imagelinkurl']);
  188. exit;
  189. break;
  190. case 'redirectThumb':
  191. header('Status: 302 Found');
  192. header('Location: ' . $curl . $file['show_thumb']);
  193. exit;
  194. break;
  195. case 'full':
  196. $showfile = $file['realfile'];
  197. break;
  198. case 'thumb':
  199. $showfile = $file['location'];
  200. break;
  201. }
  202. if (!empty($showfile) && file_exists($showfile)) {
  203. header('Content-Type: ' . $file['displaymime']);
  204. header('Content-Length: ' . filesize($showfile));
  205. header('Content-Disposition: ' . ($serendipity['GET']['disposition'] == 'attachment' ? 'attachment' : 'inline') . '; filename=' . basename($showfile));
  206. $fp = fopen($showfile, 'rb');
  207. fpassthru($fp);
  208. exit;
  209. }
  210. $media['file']['props'] =& serendipity_fetchMediaProperties((int)$serendipity['GET']['image']);
  211. serendipity_plugin_api::hook_event('media_getproperties_cached', $media['file']['props']['base_metadata'], $media['file']['realfile']);
  212. serendipity_parseMediaProperties($keywords, $dprops, $media['file'], $media['file']['props'], 0, false);
  213. serendipity_plugin_api::hook_event('frontend_media_showitem', $media);
  214. if ($media['perm_denied']) {
  215. unset($media['file']);
  216. unset($file);
  217. }
  218. $showFile = 'media_showitem.tpl';
  219. break;
  220. case 'start':
  221. $media['case'] = 'start';
  222. break;
  223. case 'default':
  224. default:
  225. if (!empty($serendipity['GET']['adminAction']) && $serendipity['GET']['adminModule'] == 'images' && $serendipity['GET']['adminAction'] != 'default') {
  226. // Might need to set $serendipity['adminFile_redirect'] here.
  227. $serendipity['adminFile'] = 'serendipity_admin_image_selector.php';
  228. ob_start();
  229. include S9Y_INCLUDE_PATH . 'include/admin/images.inc.php';
  230. $media['external'] = ob_get_contents();
  231. $media['case'] = 'external';
  232. ob_end_clean();
  233. break;
  234. }
  235. $media['case'] = 'default';
  236. $add_url = '';
  237. if (!empty($serendipity['GET']['htmltarget'])) {
  238. $add_url .= '&amp;serendipity[htmltarget]=' . serendipity_specialchars($serendipity['GET']['htmltarget']);
  239. }
  240. if (!empty($serendipity['GET']['filename_only'])) {
  241. $add_url .= '&amp;serendipity[filename_only]=' . serendipity_specialchars($serendipity['GET']['filename_only']);
  242. }
  243. if (!isset($serendipity['thumbPerPage2'])) {
  244. $serendipity['thumbPerPage2'] = 3;
  245. }
  246. $media['external'] = serendipity_displayImageList(
  247. isset($serendipity['GET']['page']) ? $serendipity['GET']['page'] : 1,
  248. $serendipity['thumbPerPage2'],
  249. ($serendipity['showMediaToolbar'] ? true : false),
  250. '?serendipity[step]=1' . $add_url . '&amp;serendipity[textarea]='. serendipity_specialchars($serendipity['GET']['textarea']),
  251. true,
  252. null
  253. );
  254. }
  255. $media = array_merge($serendipity['GET'], $media);
  256. $serendipity['smarty']->assignByRef('media', $media);
  257. $serendipity['smarty']->display(serendipity_getTemplateFile($showFile, 'serendipityPath'));
  258. /* vim: set sts=4 ts=4 expandtab : */