PageRenderTime 52ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/protected/extensions/tiny_mce/assets/plugins/images/connector/php/index.php

https://bitbucket.org/graaaf/erso
PHP | 834 lines | 654 code | 126 blank | 54 comment | 205 complexity | 7d3bae872890615b72adf7e7bf7847aa MD5 | raw file
Possible License(s): GPL-3.0, LGPL-3.0, LGPL-2.1, BSD-3-Clause, BSD-2-Clause
  1. <?php
  2. include 'config.php';
  3. class TinyImageManager {
  4. var $dir;
  5. var $firstAct = false;
  6. var $folderAct = false;
  7. var $ALLOWED_IMAGES;
  8. var $ALLOWED_FILES;
  9. var $SID;
  10. /**
  11. * Конструктор
  12. *
  13. * @return TinyImageManager
  14. */
  15. function TinyImageManager() {
  16. error_reporting(E_ALL);
  17. ob_start("ob_gzhandler");
  18. header('Content-Type: text/html; charset=utf-8');
  19. if(isset($_POST['SID'])) session_id($_POST['SID']);
  20. if(!isset($_SESSION)) session_start();
  21. $this->SID = session_id();
  22. require 'yoursessioncheck.php';
  23. if(!isset($_SESSION['tiny_image_manager_path'])) $_SESSION['tiny_image_manager_path'] = '';
  24. $this->ALLOWED_IMAGES = array('jpeg','jpg','gif','png');
  25. $this->ALLOWED_FILES = array('doc','docx','ppt','pptx','xls','xlsx','mdb','accdb', 'swf', 'zip', 'rar', 'rtf', 'pdf', 'psd', 'mp3', 'wma');
  26. $this->dir = array(
  27. 'images' => realpath(DIR_ROOT.DIR_IMAGES),
  28. 'files' => realpath(DIR_ROOT.DIR_FILES)
  29. );
  30. require 'Image_Toolbox.class.php';
  31. require 'exifReader.php';
  32. switch ($_POST['action']) {
  33. //Создать папку
  34. case 'newfolder':
  35. $result = array();
  36. $dir = $this->AccessDir($_POST['path'], $_POST['type']);
  37. if($dir) {
  38. if (preg_match('/[a-z0-9-_]+/sim', $_POST['name'])) {
  39. if(is_dir($dir.'/'.$_POST['name'])) {
  40. $result['error'] = 'Такая папка уже есть';
  41. } else {
  42. if(mkdir($dir.'/'.$_POST['name'])) {
  43. $result['tree'] = $this->DirStructure('images', 'first', $dir.'/'.$_POST['name']);
  44. $result['tree'] .= $this->DirStructure('files', 'first', $dir.'/'.$_POST['name']);
  45. $result['addr'] = $this->DirPath($_POST['type'], $this->AccessDir($_POST['path'].'/'.$_POST['name'], $_POST['type']));
  46. $result['error'] = '';
  47. } else {
  48. $result['error'] = 'Ошибка создания папки';
  49. }
  50. }
  51. } else {
  52. $result['error'] = 'Название папки может содержать только латинские буквы, цифры, тире и знак подчеркивания';
  53. }
  54. } else {
  55. $result['error'] = 'Отказ в доступе';
  56. }
  57. echo "{'tree':'{$result['tree']}', 'addr':'{$result['addr']}', 'error':'{$result['error']}'}";
  58. exit();
  59. break;
  60. //Показать дерево папок
  61. case 'showtree':
  62. if(!isset($_POST['path'])) $_POST['path'] = '';
  63. if(!isset($_POST['type'])) $_POST['type'] = '';
  64. if($_POST['path'] == '/') $_POST['path'] = '';
  65. if(isset($_POST['default']) && isset($_SESSION['tiny_image_manager_path'])) $path = $_SESSION['tiny_image_manager_path'];
  66. else $path = $_SESSION['tiny_image_manager_path'] = $_POST['path'];
  67. if($_POST['type']=='files') $this->firstAct = true;
  68. if($_POST['type']=='files') echo $this->DirStructure('images', 'first');
  69. else echo $this->DirStructure('images', 'first', $this->AccessDir($path, 'images'));
  70. if($_POST['type']=='files') $this->firstAct = false;
  71. if($_POST['type']=='images') echo $this->DirStructure('files', 'first');
  72. else echo $this->DirStructure('files', 'first', $this->AccessDir($path, 'files'));
  73. exit();
  74. break;
  75. //Показать путь (хлебные крошки вверху)
  76. case 'showpath':
  77. if(isset($_POST['default']) && isset($_SESSION['tiny_image_manager_path'])) $path = $_SESSION['tiny_image_manager_path'];
  78. else $path = $_SESSION['tiny_image_manager_path'] = $_POST['path'];
  79. echo $this->DirPath($_POST['type'], $this->AccessDir($path, $_POST['type']));
  80. exit();
  81. break;
  82. //Показать файлы
  83. case 'showdir':
  84. if(isset($_POST['default']) && isset($_SESSION['tiny_image_manager_path'])) $path = $_SESSION['tiny_image_manager_path'];
  85. else $path = $_SESSION['tiny_image_manager_path'] = $_POST['path'];
  86. echo $this->ShowDir($path, $_POST['pathtype']);
  87. exit();
  88. break;
  89. //Загрузить изображение
  90. case 'uploadfile':
  91. echo $this->UploadFile($_POST['path'], $_POST['pathtype']);
  92. exit();
  93. break;
  94. //Удалить файл, или несколько файлов
  95. case 'delfile':
  96. if(is_array($_POST['md5'])) {
  97. foreach ($_POST['md5'] as $k=>$v) {
  98. $this->DelFile($_POST['pathtype'], $_POST['path'], $v, $_POST['filename'][$k], true);
  99. }
  100. echo $this->ShowDir($_POST['path'], $_POST['pathtype']);
  101. } else {
  102. echo $this->DelFile($_POST['pathtype'], $_POST['path'], $_POST['md5'], $_POST['filename'], true);
  103. }
  104. exit();
  105. break;
  106. case 'delfolder':
  107. echo $this->DelFolder($_POST['pathtype'], $_POST['path']);
  108. exit();
  109. break;
  110. case 'renamefile':
  111. echo $this->RenameFile($_POST['pathtype'], $_POST['path'], $_POST['filename'], $_POST['newname']);
  112. exit();
  113. break;
  114. case 'SID':
  115. echo $this->SID;
  116. exit();
  117. break;
  118. default:
  119. ;
  120. break;
  121. }
  122. }
  123. /**
  124. * Проверка на разрешение записи в папку (не системное)
  125. *
  126. * @param string $requestDirectory Запрашиваемая папка (относительно DIR_IMAGES или DIR_FILES)
  127. * @param (images|files) $typeDirectory Тип папки, изображения или файлы
  128. * @return path|false
  129. */
  130. function AccessDir($requestDirectory, $typeDirectory) {
  131. if($typeDirectory == 'images') {
  132. $full_request_images_dir = realpath($this->dir['images'].$requestDirectory);
  133. if(strpos($full_request_images_dir, $this->dir['images']) === 0) {
  134. return $full_request_images_dir;
  135. } else return false;
  136. } elseif($typeDirectory == 'files') {
  137. $full_request_files_dir = realpath($this->dir['files'].$requestDirectory);
  138. if(strpos($full_request_files_dir, $this->dir['files']) === 0){
  139. return $full_request_files_dir;
  140. } else return false;
  141. } else return false;
  142. }
  143. /**
  144. * Дерево каталогов
  145. * функция рекурсивная
  146. *
  147. * @return array
  148. */
  149. function Tree($beginFolder) {
  150. $struct = array();
  151. $handle = opendir($beginFolder);
  152. if ($handle) {
  153. $struct[$beginFolder]['path'] = str_replace(array($this->dir['files'], $this->dir['images']),'',$beginFolder);
  154. $tmp = preg_split('[\\/]',$beginFolder);
  155. $tmp = array_filter($tmp);
  156. end($tmp);
  157. $struct[$beginFolder]['name'] = current($tmp);
  158. $struct[$beginFolder]['count'] = 0;
  159. while (false !== ($file = readdir($handle))) {
  160. if ($file != "." && $file != ".." && $file != '.thumbs') {
  161. if(is_dir($beginFolder.'/'.$file)) {
  162. $struct[$beginFolder]['childs'][] = $this->Tree($beginFolder.'/'.$file);
  163. } else {
  164. $struct[$beginFolder]['count']++;
  165. }
  166. }
  167. }
  168. closedir($handle);
  169. asort($struct);
  170. return $struct;
  171. }
  172. return false;
  173. }
  174. /**
  175. * Визуализация дерева каталогов
  176. * функция рекурсивная
  177. *
  178. * @param images|files $type
  179. * @param first|String $innerDirs
  180. * @param String $currentDir
  181. * @param int $level
  182. * @return html
  183. */
  184. function DirStructure($type, $innerDirs='first', $currentDir='', $level=0) {
  185. //Пока отключим файлы
  186. //if($type=='files') return ;
  187. $currentDirArr = array();
  188. if(!empty($currentDir)) {
  189. $currentDirArr = preg_split('[\\/]',str_replace($this->dir[$type],'',realpath($currentDir)));
  190. $currentDirArr = array_filter($currentDirArr);
  191. }
  192. if($innerDirs == 'first') {
  193. $innerDirs = array();
  194. $innerDirs = $this->Tree($this->dir[$type]);
  195. if(realpath($currentDir) == $this->dir[$type] && !$this->firstAct) {
  196. $firstAct = 'folderAct';
  197. $this->firstAct = true;
  198. } else {
  199. $firstAct = '';
  200. }
  201. $ret = '';
  202. if($innerDirs == false) return 'Неверно задана корневая директория ('.DIR_IMAGES.')';
  203. foreach ($innerDirs as $v) {
  204. $ret = '<div class="folder'.ucfirst($type).' '.$firstAct.'" path="" pathtype="'.$type.'">'.($type=='images'?'Изображения':'Файлы').($v['count']>0?' ('.$v['count'].')':'').'</div><div class="folderOpenSection" style="display:block;">';
  205. if(isset($v['childs'])) {
  206. $ret .= $this->DirStructure($type, $v['childs'], $currentDir, $level);
  207. }
  208. break;
  209. }
  210. $ret .= '</div>';
  211. return $ret;
  212. }
  213. if(sizeof($innerDirs)==0) return false;
  214. $ret = '';
  215. foreach ($innerDirs as $v) {
  216. foreach ($v as $v) {}
  217. if(isset($v['count'])) {
  218. $files = 'Файлов: '.$v['count'];
  219. $count_childs = isset($v['childs'])?sizeof($v['childs']):0;
  220. if($count_childs!=0) {
  221. $files .= ', папок: '.$count_childs;
  222. }
  223. } else {
  224. $files = '';
  225. }
  226. if(isset($v['childs'])) {
  227. $folderOpen = '';
  228. $folderAct = '';
  229. $folderClass = 'folderS';
  230. if(isset($currentDirArr[$level+1])) {
  231. if($currentDirArr[$level+1] == $v['name']) {
  232. $folderOpen = 'style="display:block;"';
  233. $folderClass = 'folderOpened';
  234. if($currentDirArr[sizeof($currentDirArr)]==$v['name'] && !$this->folderAct) {
  235. $folderAct = 'folderAct';
  236. $this->folderAct = true;
  237. } else {
  238. $folderAct = '';
  239. }
  240. }
  241. }
  242. $ret .= '<div class="'.$folderClass.' '.$folderAct.'" path="'.$v['path'].'" title="'.$files.'" pathtype="'.$type.'">'.$v['name'].($v['count']>0?' ('.$v['count'].')':'').'</div><div class="folderOpenSection" '.$folderOpen.'>';
  243. $ret .= $this->DirStructure($type, $v['childs'], $currentDir, $level+1);
  244. $ret .= '</div>';
  245. } else {
  246. $soc = sizeof($currentDirArr);
  247. if($soc>0 && $currentDirArr[$soc]==$v['name']) {
  248. $folderAct = 'folderAct';
  249. } else {
  250. $folderAct = '';
  251. }
  252. $ret .= '<div class="folderClosed '.$folderAct.'" path="'.$v['path'].'" title="'.$files.'" pathtype="'.$type.'">'.$v['name'].($v['count']>0?' ('.$v['count'].')':'').'</div>';
  253. }
  254. }
  255. return $ret;
  256. }
  257. /**
  258. * Путь (хлебные крошки)
  259. *
  260. * @param images|files $type
  261. * @param String $path
  262. * @return html
  263. */
  264. function DirPath($type, $path='') {
  265. if(!empty($path)) {
  266. $path = preg_split('[\\/]',str_replace($this->dir[$type],'',realpath($path)));
  267. $path = array_filter($path);
  268. }
  269. $ret = '<div class="addrItem" path="" pathtype="'.$type.'" title=""><img src="img/'.($type=='images'?'folder_open_image':'folder_open_document').'.png" width="16" height="16" alt="Корневая директория" /></div>';
  270. $i=0;
  271. $addPath = '';
  272. if(is_array($path)) {
  273. foreach ($path as $v) {
  274. $i++;
  275. $addPath .= '/'.$v;
  276. if(sizeof($path) == $i) {
  277. $ret .= '<div class="addrItemEnd" path="'.$addPath.'" pathtype="'.$type.'" title=""><div>'.$v.'</div></div>';
  278. } else {
  279. $ret .= '<div class="addrItem" path="'.$addPath.'" pathtype="'.$type.'" title=""><div>'.$v.'</div></div>';
  280. }
  281. }
  282. }
  283. return $ret;
  284. }
  285. function CallDir($dir, $type) {
  286. $dir = $this->AccessDir($dir, $type);
  287. if(!$dir) return false;
  288. set_time_limit(120);
  289. if(!is_dir($dir.'/.thumbs')) {
  290. mkdir($dir.'/.thumbs');
  291. }
  292. $dbfile = $dir.'/.thumbs/.db';
  293. if(is_file($dbfile)) {
  294. $dbfilehandle = fopen($dbfile, "r");
  295. $dblength = filesize($dbfile);
  296. if($dblength>0) $dbdata = fread($dbfilehandle, $dblength);
  297. fclose($dbfilehandle);
  298. $dbfilehandle = fopen($dbfile, "w");
  299. } else {
  300. $dbfilehandle = fopen($dbfile, "w");
  301. }
  302. if(!empty($dbdata)) {
  303. $files = unserialize($dbdata);
  304. } else $files = array();
  305. $handle = opendir($dir);
  306. if ($handle) {
  307. while (false !== ($file = readdir($handle))) {
  308. if ($file != "." && $file != "..") {
  309. if(isset($files[$file])) continue;
  310. if(is_file($dir.'/'.$file) ) {
  311. $file_info = pathinfo($dir.'/'.$file);
  312. $file_info['extension'] = strtolower($file_info['extension']);
  313. if(!in_array(strtolower($file_info['extension']),$this->ALLOWED_FILES)) {
  314. continue;
  315. }
  316. $link = str_replace(array('/\\','//','\\\\','\\'),'/', '/'.str_replace(realpath(DIR_ROOT),'',realpath($dir.'/'.$file)));
  317. $path = pathinfo($link);
  318. $path = $path['dirname'];
  319. if($file_info['extension']=='jpg' || $file_info['extension']=='jpeg') {
  320. $er = new phpExifReader($dir.'/'.$file);
  321. $files[$file]['exifinfo'] = $er->getImageInfo();
  322. $files[$file]['imageinfo'] = getimagesize($dir.'/'.$file);
  323. $files[$file]['general'] = array(
  324. 'filename' => $file,
  325. 'name' => basename(strtolower($file_info['basename']), '.'.$file_info['extension']),
  326. 'ext' => $file_info['extension'],
  327. 'path' => $path,
  328. 'link' => $link,
  329. 'size' => filesize($dir.'/'.$file),
  330. 'date' => filemtime($dir.'/'.$file),
  331. 'width' => $files[$file]['imageinfo'][0],
  332. 'height'=> $files[$file]['imageinfo'][1],
  333. 'md5' => md5_file($dir.'/'.$file)
  334. );
  335. } else {
  336. $files[$file]['imageinfo'] = getimagesize($dir.'/'.$file);
  337. $files[$file]['general'] = array(
  338. 'filename' => $file,
  339. 'name' => basename(strtolower($file_info['basename']), '.'.$file_info['extension']),
  340. 'ext' => $file_info['extension'],
  341. 'path' => $path,
  342. 'link' => $link,
  343. 'size' => filesize($dir.'/'.$file),
  344. 'date' => filemtime($dir.'/'.$file),
  345. 'width' => $files[$file]['imageinfo'][0],
  346. 'height'=> $files[$file]['imageinfo'][1],
  347. 'md5' => md5_file($dir.'/'.$file)
  348. );
  349. }
  350. }
  351. }
  352. }
  353. closedir($handle);
  354. }
  355. fwrite($dbfilehandle, serialize($files));
  356. fclose($dbfilehandle);
  357. return $files;
  358. }
  359. function UploadFile($dir, $type) {
  360. $dir = $this->AccessDir($dir, $type);
  361. if(!$dir) return false;
  362. if(!is_dir($dir.'/.thumbs')) {
  363. mkdir($dir.'/.thumbs');
  364. }
  365. $dbfile = $dir.'/.thumbs/.db';
  366. if(is_file($dbfile)) {
  367. $dbfilehandle = fopen($dbfile, "r");
  368. $dblength = filesize($dbfile);
  369. if($dblength>0) $dbdata = fread($dbfilehandle, $dblength);
  370. fclose($dbfilehandle);
  371. //$dbfilehandle = fopen($dbfile, "w");
  372. } else {
  373. //$dbfilehandle = fopen($dbfile, "w");
  374. }
  375. if(!empty($dbdata)) {
  376. $files = unserialize($dbdata);
  377. } else $files = array();
  378. //Файл из flash-мультизагрузки
  379. if(isset($_POST['Filename'])) {
  380. //Тип (изображение/файл)
  381. $pathtype = $_POST['pathtype'];
  382. if (strpos($_POST['Filename'], '.') !== false) {
  383. $extension = end(explode('.', $_POST['Filename']));
  384. $filename = substr($_POST['Filename'], 0, strlen($_POST['Filename']) - strlen($extension) - 1);
  385. } else {
  386. header('HTTP/1.1 403 Forbidden');
  387. exit();
  388. }
  389. if($pathtype == 'images') $allowed = $this->ALLOWED_IMAGES;
  390. elseif($pathtype == 'files') $allowed = $this->ALLOWED_FILES;
  391. //Если не подходит разрешение файла
  392. if(!in_array(strtolower($extension),$allowed)) {
  393. header('HTTP/1.1 403 Forbidden');
  394. exit();
  395. }
  396. $md5 = md5_file($_FILES['Filedata']['tmp_name']);
  397. $file = $md5.'.'.$extension;
  398. //Проверка на изображение
  399. if($pathtype == 'images') {
  400. $files[$file]['imageinfo'] = getimagesize($_FILES['Filedata']['tmp_name']);
  401. if(empty($files[$file]['imageinfo'])) {
  402. header('HTTP/1.1 403 Forbidden');
  403. exit();
  404. }
  405. }
  406. if(!copy($_FILES['Filedata']['tmp_name'],$dir.'/'.$file)) {
  407. header('HTTP/1.0 500 Internal Server Error');
  408. exit();
  409. }
  410. $link = str_replace(array('/\\','//','\\\\','\\'),'/', '/'.str_replace(realpath(DIR_ROOT),'',realpath($dir.'/'.$file)));
  411. $path = pathinfo($link);
  412. $path = $path['dirname'];
  413. if($extension=='jpg' || $extension=='jpeg') {
  414. $er = new phpExifReader($dir.'/'.$file);
  415. $files[$file]['exifinfo'] = $er->getImageInfo();
  416. $files[$file]['general'] = array(
  417. 'filename' => $file,
  418. 'name' => $filename,
  419. 'ext' => $extension,
  420. 'path' => $path,
  421. 'link' => $link,
  422. 'size' => filesize($dir.'/'.$file),
  423. 'date' => filemtime($dir.'/'.$file),
  424. 'width' => $files[$file]['imageinfo'][0],
  425. 'height'=> $files[$file]['imageinfo'][1],
  426. 'md5' => $md5
  427. );
  428. } else {
  429. $files[$file]['general'] = array(
  430. 'filename' => $file,
  431. 'name' => $filename,
  432. 'ext' => $extension,
  433. 'path' => $path,
  434. 'link' => $link,
  435. 'size' => filesize($dir.'/'.$file),
  436. 'date' => filemtime($dir.'/'.$file),
  437. 'width' => $files[$file]['imageinfo'][0],
  438. 'height'=> $files[$file]['imageinfo'][1],
  439. 'md5' => $md5
  440. );
  441. }
  442. }
  443. //Файлы из обычной загрузки
  444. else {
  445. sort($_FILES);
  446. $ufiles = $_FILES[0];
  447. foreach ($ufiles['name'] as $k=>$v) {
  448. if($ufiles['error'][$k] != 0) continue;
  449. //Тип (изображение/файл)
  450. $pathtype = $_POST['pathtype'];
  451. if (strpos($ufiles['name'][$k], '.') !== false) {
  452. $extension = end(explode('.', $ufiles['name'][$k]));
  453. $filename = substr($ufiles['name'][$k], 0, strlen($ufiles['name'][$k]) - strlen($extension) - 1);
  454. } else {
  455. continue;
  456. }
  457. if($pathtype == 'images') $allowed = $this->ALLOWED_IMAGES;
  458. elseif($pathtype == 'files') $allowed = $this->ALLOWED_FILES;
  459. //Если не подходит расширение файла
  460. if(!in_array(strtolower($extension),$allowed)) {
  461. continue;
  462. }
  463. $md5 = md5_file($ufiles['tmp_name'][$k]);
  464. $file = $md5.'.'.$extension;
  465. //Проверка на изображение
  466. if($pathtype == 'images') {
  467. $files[$file]['imageinfo'] = getimagesize($ufiles['tmp_name'][$k]);
  468. if(empty($files[$file]['imageinfo'])) {
  469. header('HTTP/1.1 403 Forbidden');
  470. exit();
  471. }
  472. }
  473. if(!copy($ufiles['tmp_name'][$k],$dir.'/'.$file)) {
  474. continue;
  475. }
  476. $link = str_replace(array('/\\','//','\\\\','\\'),'/', '/'.str_replace(realpath(DIR_ROOT),'',realpath($dir.'/'.$file)));
  477. $path = pathinfo($link);
  478. $path = $path['dirname'];
  479. if($extension=='jpg' || $extension=='jpeg') {
  480. $er = new phpExifReader($dir.'/'.$file);
  481. $files[$file]['exifinfo'] = $er->getImageInfo();
  482. $files[$file]['general'] = array(
  483. 'filename' => $file,
  484. 'name' => $filename,
  485. 'ext' => $extension,
  486. 'path' => $path,
  487. 'link' => $link,
  488. 'size' => filesize($dir.'/'.$file),
  489. 'date' => filemtime($dir.'/'.$file),
  490. 'width' => $files[$file]['imageinfo'][0],
  491. 'height'=> $files[$file]['imageinfo'][1],
  492. 'md5' => $md5
  493. );
  494. } else {
  495. $files[$file]['general'] = array(
  496. 'filename' => $file,
  497. 'name' => $filename,
  498. 'ext' => $extension,
  499. 'path' => $path,
  500. 'link' => $link,
  501. 'size' => filesize($dir.'/'.$file),
  502. 'date' => filemtime($dir.'/'.$file),
  503. 'width' => $files[$file]['imageinfo'][0],
  504. 'height'=> $files[$file]['imageinfo'][1],
  505. 'md5' => $md5
  506. );
  507. }
  508. }
  509. }
  510. $dbfilehandle = fopen($dbfile, "w");
  511. fwrite($dbfilehandle, serialize($files));
  512. fclose($dbfilehandle);
  513. return '';
  514. }
  515. function RenameFile($type, $dir, $filename, $newname) {
  516. $dir = $this->AccessDir($dir, $type);
  517. if(!$dir) return false;
  518. $filename = trim($filename);
  519. if(empty($filename)) {
  520. return 'error';
  521. }
  522. if(!is_dir($dir.'/.thumbs')) {
  523. return 'error';
  524. }
  525. $dbfile = $dir.'/.thumbs/.db';
  526. if(is_file($dbfile)) {
  527. $dbfilehandle = fopen($dbfile, "r");
  528. $dblength = filesize($dbfile);
  529. if($dblength>0) $dbdata = fread($dbfilehandle, $dblength);
  530. fclose($dbfilehandle);
  531. } else {
  532. return 'error';
  533. }
  534. $files = unserialize($dbdata);
  535. foreach ($files as $file=>$fdata) {
  536. if($file == $filename) {
  537. $files[$file]['general']['name'] = $newname;
  538. break;
  539. }
  540. }
  541. $dbfilehandle = fopen($dbfile, "w");
  542. fwrite($dbfilehandle, serialize($files));
  543. fclose($dbfilehandle);
  544. return 'ok';
  545. }
  546. function bytes_to_str($bytes) {
  547. $d = '';
  548. if($bytes >= 1048576) {
  549. $num = $bytes/1048576;
  550. $d = 'Mb';
  551. } elseif($bytes >= 1024) {
  552. $num = $bytes/1024;
  553. $d = 'kb';
  554. } else {
  555. $num = $bytes;
  556. $d = 'b';
  557. }
  558. return number_format($num, 2, ',', ' ').$d;
  559. }
  560. function ShowDir($dir, $type) {
  561. $dir_orig = $dir;
  562. $dir = $this->CallDir($dir, $type);
  563. if(!$dir) {
  564. //echo 'Ошибка чтения, возможно нет доступа.';
  565. exit();
  566. }
  567. $ret = '';
  568. foreach ($dir as $v) {
  569. $thumb = $this->GetThumb($v['general']['path'],$v['general']['md5'],$v['general']['filename'],2,100,100);
  570. if($v['general']['width'] > WIDTH_TO_LINK || $v['general']['height'] > HEIGHT_TO_LINK) {
  571. if($v['general']['width'] > $v['general']['height']) {
  572. $middle_thumb = $this->GetThumb($v['general']['path'],$v['general']['md5'],$v['general']['filename'],0,WIDTH_TO_LINK,0);
  573. } else {
  574. $middle_thumb = $this->GetThumb($v['general']['path'],$v['general']['md5'],$v['general']['filename'],0,0,HEIGHT_TO_LINK);
  575. }
  576. list($middle_width, $middle_height) = getimagesize(DIR_ROOT.$middle_thumb);
  577. $middle_thumb_attr = 'fmiddle="'.$middle_thumb.'" fmiddlewidth="'.$middle_width.'" fmiddleheight="'.$middle_height.'" fclass="'.CLASS_LINK.'" frel="'.REL_LINK.'"';
  578. } else {
  579. $middle_thumb = '';
  580. $middle_thumb_attr = '';
  581. }
  582. $img_params = 'width="100" height="100"';
  583. $div_params = '';
  584. if ($type == 'files') { $img_params = ''; $div_params = 'style="width: 100px; height: 80px; padding-top: 16px;"'; }
  585. $ret .= '
  586. <table class="imageBlock0" cellpadding="0" cellspacing="0" filename="'.$v['general']['filename'].'" fname="'.$v['general']['name'].'" type="'.$type.'" ext="'.strtoupper($v['general']['ext']).'" path="'.$v['general']['path'].'" linkto="'.$v['general']['link'].'" fsize="'.$v['general']['size'].'" fsizetext="'.$this->bytes_to_str($v['general']['size']).'" date="'.date('d.m.Y H:i',$v['general']['date']).'" fwidth="'.$v['general']['width'].'" fheight="'.$v['general']['height'].'" md5="'.$v['general']['md5'].'" '.$middle_thumb_attr.'><tr><td valign="bottom" align="center">
  587. <div class="imageBlock1">
  588. <div class="imageImage" '.$div_params.'>
  589. <img src="'.$thumb.'" '.$img_params.' alt="'.$v['general']['name'].'" />
  590. </div>
  591. <div class="imageName">'.$v['general']['name'].'</div>
  592. </div>
  593. </td></tr></table>
  594. ';
  595. }
  596. return $ret;
  597. }
  598. function GetThumb($dir, $md5, $filename, $mode, $width=100, $height=100) {
  599. $path = realpath(DIR_ROOT.'/'.$dir);
  600. if(is_file($path.'/.thumbs/'.$md5.'_'.$width.'_'.$height.'_'.$mode.'.jpg')) return $dir.'/.thumbs/'.$md5.'_'.$width.'_'.$height.'_'.$mode.'.jpg';
  601. $isfile = (strpos($dir, DIR_FILES) === 0 ? true : false);
  602. if ($isfile)
  603. {
  604. $server_url = rtrim(dirname(__FILE__), '/').'/../../';
  605. $server_url = realpath($server_url);
  606. $server_url = rtrim($server_url, '/').'/img/fileicons/';
  607. $url = '/'.ltrim(substr($server_url, strlen(DIR_ROOT)), '/');
  608. $ext = strtolower(end(explode('.', $filename)));
  609. if (!empty($ext) && file_exists($server_url.$ext.'.png'))
  610. {
  611. return $url.$ext.'.png';
  612. }
  613. else
  614. {
  615. return $url.'none.png';
  616. }
  617. }
  618. $t = new Image_Toolbox($path.'/'.$filename);
  619. $t->newOutputSize($width, $height, $mode, false, '#FFFFFF');
  620. $t->save($path.'/.thumbs/'.$md5.'_'.$width.'_'.$height.'_'.$mode.'.jpg', 'jpg', 80);
  621. return $dir.'/.thumbs/'.$md5.'_'.$width.'_'.$height.'_'.$mode.'.jpg';
  622. }
  623. function DelFile($pathtype, $path, $md5, $filename, $callShowDir=false) {
  624. $tmppath = $path;
  625. $path = $this->AccessDir($path, $pathtype);
  626. if(!$path) return false;
  627. if(is_dir($path.'/.thumbs')) {
  628. if($pathtype == 'images') {
  629. $handle = opendir($path.'/.thumbs');
  630. if ($handle) {
  631. while (false !== ($file = readdir($handle))) {
  632. if ($file != "." && $file != "..") {
  633. if(substr($file,0,32) == $md5) {
  634. unlink($path.'/.thumbs/'.$file);
  635. }
  636. }
  637. }
  638. }
  639. }
  640. $dbfile = $path.'/.thumbs/.db';
  641. if(is_file($dbfile)) {
  642. $dbfilehandle = fopen($dbfile, "r");
  643. $dblength = filesize($dbfile);
  644. if($dblength>0) $dbdata = fread($dbfilehandle, $dblength);
  645. fclose($dbfilehandle);
  646. $dbfilehandle = fopen($dbfile, "w");
  647. } else {
  648. $dbfilehandle = fopen($dbfile, "w");
  649. }
  650. if(isset($dbdata)) {
  651. $files = unserialize($dbdata);
  652. } else $files = array();
  653. unset($files[$filename]);
  654. fwrite($dbfilehandle, serialize($files));
  655. fclose($dbfilehandle);
  656. }
  657. if(is_file($path.'/'.$filename)) {
  658. if(unlink($path.'/'.$filename)) {
  659. if($callShowDir) {
  660. return $this->ShowDir($tmppath, $pathtype);
  661. } else {
  662. return true;
  663. }
  664. }
  665. } else return 'error';
  666. return 'error';
  667. }
  668. function DelFolder($pathtype, $path) {
  669. $path = $this->AccessDir($path, $pathtype);
  670. if(!$path) return false;
  671. if(realpath($path.'/') == realpath(DIR_ROOT.DIR_IMAGES.'/')) {
  672. return '{error:"Нельзя удалять корневую папку!"}';
  673. }
  674. $files = array();
  675. $handle = opendir($path);
  676. if ($handle) {
  677. while (false !== ($file = readdir($handle))) {
  678. if ($file != "." && $file != ".." && trim($file) != "" && $file != ".thumbs") {
  679. if(is_dir($path.'/'.$file)) {
  680. return '{error:"Пока папка содержит вложенные папки, она не может быть удалена."}';
  681. } else {
  682. $files[] = $file;
  683. }
  684. }
  685. }
  686. }
  687. closedir($handle);
  688. $handle = opendir($path.'/.thumbs');
  689. if ($handle) {
  690. while (false !== ($file = readdir($handle))) {
  691. if ($file != "." && $file != "..") {
  692. if(is_file($path.'/.thumbs/'.$file)) {
  693. unlink($path.'/.thumbs/'.$file);
  694. }
  695. }
  696. }
  697. closedir($handle);
  698. rmdir($path.'/.thumbs');
  699. }
  700. foreach ($files as $f) {
  701. if(is_file($path.'/'.$f)) unlink($path.'/'.$f);
  702. }
  703. if(!rmdir($path)) return '{error:"Ошибка удаления папки"}';
  704. return '{ok:\'\'}';
  705. }
  706. }
  707. $letsGo = new TinyImageManager();
  708. ?>