284 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			284 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class admin_uploader_mediamanager extends AdminPanelAction {
 | |
| 
 | |
| 	var $finfo;
 | |
| 
 | |
| 	var $conf;
 | |
| 
 | |
| 	var $langres = 'plugin:mediamanager';
 | |
| 
 | |
| 	function cmpfiles($a, $b) {
 | |
| 		$c = strcmp($a ['type'], $b ['type']);
 | |
| 		if ($c == 0) {
 | |
| 			return strcmp($a ['name'], $b ['name']);
 | |
| 		}
 | |
| 		return $c;
 | |
| 	}
 | |
| 
 | |
| 	function formatBytes($bytes, $precision = 2) {
 | |
| 		$units = array(
 | |
| 			'B',
 | |
| 			'KB',
 | |
| 			'MB',
 | |
| 			'GB',
 | |
| 			'TB'
 | |
| 		);
 | |
| 
 | |
| 		$bytes = max($bytes, 0);
 | |
| 		$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
 | |
| 		$pow = min($pow, count($units) - 1);
 | |
| 
 | |
| 		$bytes /= pow(1024, $pow);
 | |
| 
 | |
| 		return round($bytes, $precision) . ' ' . $units [$pow];
 | |
| 	}
 | |
| 
 | |
| 	function getFileInfo($filepath) {
 | |
| 		global $fp_config;
 | |
| 
 | |
| 		$info = array(
 | |
| 			"name" => basename($filepath),
 | |
| 			"size" => $this->formatBytes(filesize($filepath)),
 | |
| 			"mtime" => date_strformat($fp_config ['locale'] ['dateformatshort'], filemtime($filepath))
 | |
| 		);
 | |
| 
 | |
| 		if (isset($this->conf ['usecount'] [basename($filepath)])) {
 | |
| 			$info ['usecount'] = $this->conf ['usecount'] [basename($filepath)];
 | |
| 		} else {
 | |
| 			$info ['usecount'] = null;
 | |
| 		}
 | |
| 
 | |
| 		return $info;
 | |
| 	}
 | |
| 
 | |
| 	function setup() {
 | |
| 		$this->smarty->assign('admin_resource', "plugin:mediamanager/admin.plugin.mediamanager.files");
 | |
| 	}
 | |
| 
 | |
| 	function deleteFolder($folder, $mmbaseurl) {
 | |
| 		if (!file_exists($folder))
 | |
| 			return false;
 | |
| 		$dir = opendir($folder);
 | |
| 		while (false !== ($file = readdir($dir))) {
 | |
| 			if (!fs_is_directorycomponent($file)) {
 | |
| 				if (is_dir($folder . "/" . $file)) {
 | |
| 					$this->deleteFolder($folder . "/" . $file, $mmbaseurl);
 | |
| 				} else {
 | |
| 					if (!unlink($folder . "/" . $file))
 | |
| 						return false;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		return rmdir($folder);
 | |
| 	}
 | |
| 
 | |
| 	function doItemActions($folder, $mmbaseurl) {
 | |
| 
 | |
| 		/* delete file */
 | |
| 		if (isset($_GET ['deletefile'])) {
 | |
| 			// at first: check if nonce was given correctly
 | |
| 			check_admin_referer('mediamanager_deletefile');
 | |
| 
 | |
| 			// now get the file to be deleted
 | |
| 			list ($type, $name) = explode("-", $_GET ['deletefile'], 2);
 | |
| 			// prevent path traversal: remove ".." and "/" resp. "\"
 | |
| 			$name = preg_replace('(\.\.|\/|\\\\)', '', $name);
 | |
| 			switch ($type) {
 | |
| 				case 'attachs':
 | |
| 					$type = ABS_PATH . ATTACHS_DIR;
 | |
| 					break;
 | |
| 				case 'images':
 | |
| 					$type = ABS_PATH . IMAGES_DIR . $folder;
 | |
| 					break;
 | |
| 				case 'gallery':
 | |
| 					if (!$this->deleteFolder(ABS_PATH . IMAGES_DIR . $name, $mmbaseurl))
 | |
| 						@utils_redirect($mmbaseurl . '&status=-1');
 | |
| 					@utils_redirect($mmbaseurl . '&status=1');
 | |
| 					return true;
 | |
| 					break;
 | |
| 				default:
 | |
| 					{
 | |
| 						@utils_redirect($mmbaseurl . '&status=-1');
 | |
| 						return true;
 | |
| 					}
 | |
| 			}
 | |
| 			if (!file_exists($type . $name)) {
 | |
| 				@utils_redirect($mmbaseurl . '&status=-1');
 | |
| 				return true;
 | |
| 			}
 | |
| 			if (!unlink($type . $name)) {
 | |
| 				@utils_redirect($mmbaseurl . '&status=-1');
 | |
| 				return true;
 | |
| 			}
 | |
| 			@utils_redirect($mmbaseurl . '&status=1');
 | |
| 			return true;
 | |
| 		}
 | |
| 		if (isset($_GET ['status'])) {
 | |
| 			$this->smarty->assign('success', $_GET ['status']);
 | |
| 		}
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	function main() {
 | |
| 		$mmbaseurl = "admin.php?p=uploader&action=mediamanager";
 | |
| 		$folder = "";
 | |
| 		$gallery = "";
 | |
| 		if (isset($_GET ['gallery']) && !fs_is_directorycomponent($_GET ['gallery'])) {
 | |
| 			$mmbaseurl .= "&gallery=" . $_GET ['gallery'];
 | |
| 			$gallery = str_replace("/", "", $_GET ['gallery']);
 | |
| 			$folder = $gallery . "/";
 | |
| 		}
 | |
| 
 | |
| 		$weburl = plugin_geturl('mediamanager');
 | |
| 		$this->conf = plugin_getoptions('mediamanager');
 | |
| 		if ($this->doItemActions($folder, $mmbaseurl))
 | |
| 			return;
 | |
| 
 | |
| 		$files = array();
 | |
| 		$galleries = array();
 | |
| 
 | |
| 		$files_needupdate = array();
 | |
| 		$galleries_needupdate = array();
 | |
| 
 | |
| 		# galleries (alwais from IMAGES_DIR)
 | |
| 		if (file_exists(ABS_PATH . IMAGES_DIR)) {
 | |
| 			$dir = opendir(ABS_PATH . IMAGES_DIR);
 | |
| 			while (false !== ($file = readdir($dir))) {
 | |
| 				$fullpath = ABS_PATH . IMAGES_DIR . $file;
 | |
| 				if (!fs_is_directorycomponent($file) && !fs_is_hidden_file($file) && is_dir($fullpath)) {
 | |
| 					$info = $this->getFileInfo($fullpath);
 | |
| 					$info ['type'] = "gallery";
 | |
| 					$galleries [$fullpath] = $info;
 | |
| 					if (is_null($info ['usecount'])) {
 | |
| 						$galleries_needupdate [] = $fullpath;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		# attachs (NO attachs in galleries)
 | |
| 		if ($folder == "" && file_exists(ABS_PATH . ATTACHS_DIR)) {
 | |
| 			$dir = opendir(ABS_PATH . ATTACHS_DIR);
 | |
| 			while (false !== ($file = readdir($dir))) {
 | |
| 				if (!fs_is_directorycomponent($file) && !fs_is_hidden_file($file)) {
 | |
| 					$fullpath = ABS_PATH . ATTACHS_DIR . $file;
 | |
| 					$info = $this->getFileInfo($fullpath);
 | |
| 					$info ['type'] = "attachs";
 | |
| 					$info ['url'] = BLOG_ROOT . ATTACHS_DIR . $file;
 | |
| 					$files [$fullpath] = $info;
 | |
| 					if (is_null($info ['usecount'])) {
 | |
| 						$files_needupdate [] = $fullpath;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		# images
 | |
| 		if (file_exists(ABS_PATH . IMAGES_DIR . $folder)) {
 | |
| 			$dir = opendir(ABS_PATH . IMAGES_DIR . $folder);
 | |
| 			while (false !== ($file = readdir($dir))) {
 | |
| 				$fullpath = ABS_PATH . IMAGES_DIR . $folder . $file;
 | |
| 				if (!fs_is_directorycomponent($file) && !fs_is_hidden_file($file) && !is_dir($fullpath)) {
 | |
| 					$info = $this->getFileInfo($fullpath);
 | |
| 					$info ['type'] = "images";
 | |
| 					$info ['url'] = BLOG_ROOT . IMAGES_DIR . $folder . $file;
 | |
| 					$files [$fullpath] = $info;
 | |
| 					# NO count for images in galleries
 | |
| 					if ($folder == "" && is_null($info ['usecount'])) {
 | |
| 						$files_needupdate [] = $fullpath;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		mediamanager_updateUseCountArr($files, $files_needupdate);
 | |
| 		mediamanager_updateUseCountArr($galleries, $galleries_needupdate);
 | |
| 
 | |
| 		usort($files, Array(
 | |
| 			"admin_uploader_mediamanager",
 | |
| 			"cmpfiles"
 | |
| 		));
 | |
| 		$totalfilescount = (string) count($files);
 | |
| 		# paginator
 | |
| 		$pages = ceil((count($files) + count($galleries)) / ITEMSPERPAGE);
 | |
| 		if ($pages == 0)
 | |
| 			$pages = 1;
 | |
| 		if (isset($_GET ['page'])) {
 | |
| 			$page = (int) $_GET ['page'];
 | |
| 		} else {
 | |
| 			$page = 1;
 | |
| 		}
 | |
| 		if ($page < 1)
 | |
| 			$page = 1;
 | |
| 		if ($page > $pages)
 | |
| 			$page = $pages;
 | |
| 		$pagelist = array();
 | |
| 		for($k = 1; $k <= $pages; $k++)
 | |
| 			$pagelist [] = $k;
 | |
| 		$paginator = array(
 | |
| 			"total" => $pages,
 | |
| 			"current" => $page,
 | |
| 			"limit" => ITEMSPERPAGE,
 | |
| 			"pages" => $pagelist
 | |
| 		);
 | |
| 
 | |
| 		$startfrom = ($page - 1) * ITEMSPERPAGE;
 | |
| 		$galleriesout = count(array_slice($galleries, 0, $startfrom));
 | |
| 		$dropdowngalleries = $galleries;
 | |
| 		$galleries = array_slice($galleries, $startfrom, ITEMSPERPAGE);
 | |
| 
 | |
| 		$files = array_slice($files, $startfrom - $galleriesout, ITEMSPERPAGE - count($galleries));
 | |
| 
 | |
| 		$this->smarty->assign('paginator', $paginator);
 | |
| 		$this->smarty->assign('files', $files);
 | |
| 		$this->smarty->assign('galleries', $galleries);
 | |
| 		$this->smarty->assign('dwgalleries', $dropdowngalleries);
 | |
| 		$this->smarty->assign('mmurl', $weburl);
 | |
| 		$this->smarty->assign('mmbaseurl', $mmbaseurl);
 | |
| 		$this->smarty->assign('currentgallery', $gallery);
 | |
| 		$this->smarty->assign('totalfilescount', $totalfilescount);
 | |
| 	}
 | |
| 
 | |
| 	function onsubmit($data = NULL) {
 | |
| 		if (isset($_POST ['mm-newgallery'])) {
 | |
| 			$newgallery = strip_tags($_POST ['mm-newgallery-name']);
 | |
| 			if ($newgallery == "") {
 | |
| 				$this->smarty->assign('success', -3);
 | |
| 				return 2;
 | |
| 			}
 | |
| 			$newgallery = str_replace("/", "", $newgallery);
 | |
| 			$newgallery = str_replace(".", "", $newgallery);
 | |
| 			// create images folder if not existant
 | |
| 			if (!file_exists(ABS_PATH . IMAGES_DIR)) {
 | |
| 				mkdir(ABS_PATH . IMAGES_DIR);
 | |
| 			}
 | |
| 			// now create gallery folder
 | |
| 			if (mkdir(ABS_PATH . IMAGES_DIR . $newgallery)) {
 | |
| 				$this->smarty->assign('success', 3);
 | |
| 			} else {
 | |
| 				$this->smarty->assign('success', -2);
 | |
| 			}
 | |
| 			return 2;
 | |
| 		}
 | |
| 
 | |
| 		$folder = "";
 | |
| 		if (isset($_GET ['gallery'])) {
 | |
| 			$mmbaseurl .= "&gallery=" . $_GET ['gallery'];
 | |
| 			$folder = str_replace("/", "", $_GET ['gallery']) . "/";
 | |
| 		}
 | |
| 
 | |
| 		list ($action, $arg) = explode("-", $_POST ['action'], 2);
 | |
| 		if (!isset($_POST ['file']))
 | |
| 			return 2;
 | |
| 		foreach ($_POST ['file'] as $file => $v) {
 | |
| 			list ($type, $name) = explode("-", $file, 2);
 | |
| 			if ($action == 'atg' && $type == 'images') {
 | |
| 				copy(ABS_PATH . IMAGES_DIR . $folder . $name, ABS_PATH . IMAGES_DIR . $arg . '/' . $name);
 | |
| 				$this->smarty->assign('success', 2);
 | |
| 			}
 | |
| 		}
 | |
| 		return 2;
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| admin_addpanelaction('uploader', 'mediamanager', true); | 
