PageRenderTime 26ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/js/AjexFileManager/ajax/php/ajax.php

https://github.com/PaulRover08/Active-Fusion
PHP | 293 lines | 246 code | 22 blank | 25 comment | 32 complexity | e14978b644820622d9c8741b912213b9 MD5 | raw file
  1. <?php
  2. /**
  3. * Ajex.FileManager
  4. * http://demphest.ru/ajex-filemanager
  5. *
  6. * @version
  7. * 1.0.4
  8. *
  9. * @copyright
  10. * Copyright (C) 2009-2010 Demphest Gorphek
  11. *
  12. * @license
  13. * Dual licensed under the MIT and GPL licenses.
  14. * http://www.opensource.org/licenses/mit-license.php
  15. * http://www.gnu.org/licenses/gpl.html
  16. *
  17. * Ajex.FileManager is free software: you can redistribute it and/or modify
  18. * it under the terms of the GNU Lesser General Public License as published by
  19. * the Free Software Foundation, either version 3 of the License, or
  20. * (at your option) any later version.
  21. *
  22. * This file is part of Ajex.FileManager.
  23. */
  24. header('Expires: Sun, 13 Sep 2009 00:00:00 GMT');
  25. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  26. header('Cache-Control: no-store, no-cache, must-revalidate');
  27. header('Cache-Control: post-check=0, pre-check=0', false);
  28. header('Pragma: no-cache') ;
  29. //header('Content-Type: text/json; charset=utf-8');
  30. define('DEV', false);
  31. if (DEV) {
  32. error_reporting(E_ALL);
  33. ini_set('display_errors', 'on');
  34. ini_set('display_startup_errors', 'on');
  35. } else {
  36. error_reporting(0);
  37. ini_set('display_errors', 'off');
  38. ini_set('display_startup_errors', 'off');
  39. }
  40. //if (!isset($_SESSION['admin'])) {exit;} // Do not forget to add your user authorization
  41. define('DIR_SEP', '/');
  42. mb_internal_encoding('utf-8');
  43. date_default_timezone_set('Europe/London');
  44. $cfg['url'] = 'upload';
  45. $cfg['root'] = $_SERVER['DOCUMENT_ROOT'] . DIR_SEP . $cfg['url']; // http://www.yousite.com/upload/ absolute path
  46. $cfg['quickdir'] = ''; //$cfg['quickdir'] = 'quick-folder'; // for CKEditor
  47. $cfg['lang'] = 'ru';
  48. $cfg['thumb']['width'] = 150;
  49. $cfg['thumb']['height'] = 120;
  50. $cfg['thumb']['quality'] = 80;
  51. $cfg['thumb']['cut'] = true;
  52. $cfg['thumb']['auto'] = true;
  53. $cfg['thumb']['dir'] = '_thumb';
  54. $cfg['thumb']['date'] = "j.m.Y, H:i";
  55. $cfg['hide']['file'] = array('.htaccess');
  56. $cfg['hide']['folder'] = array('.', '..', $cfg['thumb']['dir'], '.svn', '.cvs');
  57. $cfg['chmod']['file'] = 0777;
  58. $cfg['chmod']['folder'] = 0777;
  59. $cfg['deny'] = array(
  60. 'file' => array('php','php3','php4','php5','phtml','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg','cgi'),
  61. 'flash' => array(),
  62. 'image' => array(),
  63. 'media' => array(),
  64. 'folder' => array(
  65. $cfg['url'] . DIR_SEP . 'file',
  66. $cfg['url'] . DIR_SEP . 'flash',
  67. $cfg['url'] . DIR_SEP . 'image',
  68. $cfg['url'] . DIR_SEP . 'media')
  69. );
  70. $cfg['allow'] = array(
  71. 'file' => array('7z', 'aiff', 'asf', 'avi', 'bmp', 'csv', 'doc', 'fla', 'flv', 'gif', 'gz', 'gzip', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'ods', 'odt', 'pdf', 'png', 'ppt', 'pxd', 'qt', 'ram', 'rar', 'rm', 'rmi', 'rmvb', 'rtf', 'sdc', 'sitd', 'swf', 'sxc', 'sxw', 'tar', 'tgz', 'tif', 'tiff', 'txt', 'vsd', 'wav', 'wma', 'wmv', 'xls', 'xml', 'zip'),
  72. 'flash' => array('swf', 'flv'),
  73. 'image' => array('jpg', 'jpeg', 'gif', 'png', 'bmp'),
  74. 'media' => array('aiff', 'asf', 'avi', 'bmp', 'fla', 'flv', 'gif', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'png', 'qt', 'ram', 'rm', 'rmi', 'rmvb', 'swf', 'tif', 'tiff', 'wav', 'wma', 'wmv')
  75. );
  76. $cfg['nameRegAllow'] = '/^[a-z0-9-_#~\$%()\[\]&=]+/i';
  77. // ------------------
  78. $cfg['url'] = trim($cfg['url'], '/\\');
  79. $cfg['root'] = rtrim($cfg['root'], '/\\') . DIR_SEP;
  80. $dir = isset($_POST['dir'])? urldecode($_POST['dir']) : '';
  81. $dir = trim($dir, '/\\') . DIR_SEP;
  82. $rpath = str_replace('\\', DIR_SEP, realpath($cfg['root'] . $dir) . DIR_SEP);
  83. if (false === strpos($rpath, str_replace('\\', DIR_SEP, $dir))) {$dir = '';}
  84. $mode = isset($_GET['mode'])? $_GET['mode'] : 'getDirs';
  85. $cfg['type'] = isset($_POST['type'])? $_POST['type'] : (isset($_GET['type']) && 'QuickUpload' == $mode? $_GET['type'] : 'file');
  86. $cfg['sort'] = isset($_POST['sort'])? $_POST['sort'] : 'name';
  87. $cfg['type'] = strtolower($cfg['type']);
  88. $reply = array(
  89. 'dirs' => array(),
  90. 'files' => array()
  91. );
  92. // ------------------
  93. require_once 'lib.php';
  94. switch($mode) {
  95. case 'cfg':
  96. $rootDir = listDirs('');
  97. $children = array();
  98. for ($i=-1, $iCount=count($rootDir); ++$i<$iCount;) {
  99. $children[] = (object) $rootDir[$i];
  100. }
  101. $reply['config'] = array(
  102. 'lang' => $cfg['lang'],
  103. 'type' => $cfg['type'],
  104. 'url' => '/' . $cfg['url'] . '/',
  105. 'thumb' => $cfg['thumb']['dir'],
  106. 'thumbWidth' => $cfg['thumb']['width'],
  107. 'thumbHeight' => $cfg['thumb']['height'],
  108. 'maxUpload' => ini_get('upload_max_filesize'),
  109. 'allow' => implode('|', $cfg['allow'][$cfg['type']]),
  110. 'children' => $children
  111. );
  112. break;
  113. case 'renameFile':
  114. $file = trim(urldecode($_POST['oldname']), '/\\.');
  115. $name = urldecode($_POST['newname']);
  116. if ($file != $name && preg_match($cfg['nameRegAllow'], $name) && file_exists($cfg['root']) . $dir . $file) {
  117. if (file_exists($_thumb = $cfg['root'] . $cfg['thumb']['dir'] . DIR_SEP . $dir . DIR_SEP . $file)) {
  118. unlink($_thumb);
  119. }
  120. if (file_exists($cfg['root'] . $dir . $name)) {
  121. $name = getFreeFileName($name, $cfg['root'] . $dir);
  122. }
  123. if (false !== strpos($name, '.')) {
  124. $ext = substr($name, strrpos($name, '.') + 1);
  125. if (in_array($ext, $cfg['allow']['image'])) {
  126. rename($cfg['root'] . $dir . $file, $cfg['root'] . $dir . $name);
  127. }
  128. }
  129. }
  130. $reply['files'] = listFiles($dir);
  131. break;
  132. case 'createFolder':
  133. $path = trim(urldecode($_POST['oldname']), '/\\.');
  134. $name = urldecode($_POST['newname']);
  135. $reply['isSuccess'] = false;
  136. if (preg_match($cfg['nameRegAllow'], $name)) {
  137. if (!file_exists($cfg['root'] . $path . DIR_SEP . $name)) {
  138. $reply['isSuccess'] = mkdir($cfg['root'] . $path . DIR_SEP . $name, $cfg['chmod']['folder']);
  139. } else {
  140. $reply['isSuccess'] = 'exist';
  141. }
  142. }
  143. break;
  144. case 'renameFolder':
  145. $folder = urldecode($_POST['oldname']);
  146. $name = urldecode($_POST['newname']);
  147. $folder = trim($folder, '/\\.');
  148. $reply['isSuccess'] = false;
  149. if (!empty($folder) && $cfg['url'] != $folder && $folder != $name && !in_array($cfg['url'] . DIR_SEP . $folder, $cfg['deny']['folder']) && preg_match($cfg['nameRegAllow'], $name) && is_dir($cfg['root']) . $folder) {
  150. $reply['isSuccess'] = rename($cfg['root'] . $folder, $cfg['root'] . substr($folder, 0, strrpos($folder, '/')) . DIR_SEP . $name);
  151. }
  152. break;
  153. case 'deleteFolder':
  154. $reply['isDelete'] = false;
  155. $folder = trim($dir, '/\\');
  156. if (!empty($folder) && $cfg['url'] != $folder && !in_array($cfg['url'] . DIR_SEP . $folder, $cfg['deny']['folder'])) {
  157. deleteDir($cfg['root'] . $cfg['thumb']['dir'] . DIR_SEP. $folder);
  158. $reply['isDelete'] = deleteDir($cfg['root'] . $folder);
  159. }
  160. break;
  161. case 'uploads':
  162. $reply['downloaded'] = array();
  163. $width = isset($_POST['resizeWidth'])? intval($_POST['resizeWidth']) : 0;
  164. $height = isset($_POST['resizeHeight'])? intval($_POST['resizeHeight']): 0;
  165. $key = 'uploadFiles';
  166. if (!empty($dir) && '/' != $dir && !empty($_FILES[$key])) {
  167. for ($i=-1, $iCount=count($_FILES[$key]['name']); ++$i<$iCount;) {
  168. $ext = substr($_FILES[$key]['name'][$i], strrpos($_FILES[$key]['name'][$i], '.') + 1);
  169. if (!in_array($ext, $cfg['deny'][$cfg['type']]) && in_array($ext, $cfg['allow'][$cfg['type']])) {
  170. $freeName = getFreeFileName($_FILES[$key]['name'][$i], $cfg['root'] . $dir);
  171. if (in_array($ext, $cfg['allow']['image'])) {
  172. if ($width || $height) {
  173. create_thumbnail($_FILES[$key]['tmp_name'][$i], $cfg['root'] . $dir . $freeName, $width, $height, 100, false, true);
  174. chmod($cfg['root'] . $dir . $freeName, $cfg['chmod']['file']);
  175. } else {
  176. if (move_uploaded_file($_FILES[$key]['tmp_name'][$i], $cfg['root'] . $dir . $freeName)) {
  177. chmod($cfg['root'] . $dir . $freeName, $cfg['chmod']['file']);
  178. if ($cfg['thumb']['auto']) {
  179. create_thumbnail($cfg['root'] . $dir . $freeName, $cfg['root'] . $cfg['thumb']['dir'] . DIR_SEP . $dir . DIR_SEP. $freeName);
  180. chmod($cfg['root'] . $cfg['thumb']['dir'] . DIR_SEP . $dir . DIR_SEP. $freeName, $cfg['chmod']['file']);
  181. }
  182. $reply['downloaded'][] = array(true, $freeName);
  183. } else {
  184. $reply['downloaded'][] = array(false, $freeName);
  185. }
  186. }
  187. } else {
  188. if (move_uploaded_file($_FILES[$key]['tmp_name'][$i], $cfg['root'] . $dir . $freeName)) {
  189. chmod($cfg['root'] . $dir . $freeName, $cfg['chmod']['file']);
  190. $reply['downloaded'][] = array(true, $freeName);
  191. } else {
  192. $reply['downloaded'][] = array(false, $freeName);
  193. }
  194. }
  195. } else {
  196. $reply['downloaded'][] = array(false, $_FILES[$key]['name'][$i]);
  197. }
  198. }
  199. }
  200. break;
  201. case 'QuickUpload':
  202. switch ($cfg['type']) {
  203. case 'file':
  204. case 'flash':
  205. case 'image':
  206. case 'media':
  207. $dir = $cfg['type'];
  208. break;
  209. default:
  210. exit; // exit for not supported type
  211. break;
  212. }
  213. if (!is_dir($toDir = $cfg['root'] . $dir . DIR_SEP . $cfg['quickdir'])) {
  214. mkdirs($toDir, $cfg['chmod']['folder']);
  215. }
  216. if (0 == ($_FILES['upload']['error'])) {
  217. $fileName = getFreeFileName($_FILES['upload']['name'], $toDir);
  218. $ext = substr($fileName, strrpos($fileName, '.') + 1);
  219. $ext = strtolower($ext);
  220. if (!in_array($ext, $cfg['deny'][$cfg['type']]) && in_array($ext, $cfg['allow'][$cfg['type']]) && move_uploaded_file($_FILES['upload']['tmp_name'], $toDir . DIR_SEP . $fileName)) {
  221. $funcNum = isset($_GET['CKEditorFuncNum'])? intval($_GET['CKEditorFuncNum']) : 2;
  222. $result = "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(" . $funcNum . ", '/". $cfg['url'] . '/' . $dir . '/' . (empty($cfg['quickdir'])? '' : trim($cfg['quickdir'], '/\\') . '/') . $fileName."', '');</script>";
  223. }
  224. }
  225. exit($result);
  226. break;
  227. case 'deleteFiles':
  228. $files = urldecode($_POST['files']);
  229. $files = explode('::', $files);
  230. for ($i=-1, $iCount=count($files); ++$i<$iCount;) {
  231. unlink($cfg['root'] . $dir . $files[$i]);
  232. file_exists($_thumb = $cfg['root'] . $cfg['thumb']['dir'] . DIR_SEP. $dir . DIR_SEP . $files[$i])? unlink($_thumb): null;
  233. }
  234. $reply['files'] = listFiles($dir);
  235. break;
  236. case 'getFiles':
  237. $reply['files'] = listFiles($dir);
  238. break;
  239. case 'getDirs':
  240. $reply['dirs'] = listDirs($dir);
  241. break;
  242. default:
  243. exit;
  244. break;
  245. }
  246. if (isset($_GET['noJson'])) {echo'<pre>';print_r($reply);echo'</pre>';exit;}
  247. exit( json_encode( $reply ) );