appno = $_M['form']['no']; //获取NO //需要删除的文件名 $this->del_dirs[] = self::firstsql(); $this->del_dirs[] = $this->m_name?'app/app/'.$this->m_name:''; //判断是否允许卸载 if(file_exists(PATH_ALL_APP. $this->m_name."/config/uninstall.lock")){ turnover("{$_M['url']['own_form']}a=doindex","禁止卸载"); } } public function dodel() { global $_M; //删除一些提前删除的内容 //删除自定义表 self::zdysql(); //删除固定的app表 self::appsql(); //删除应用文件 // $this->delfile(); } //优先执行代码[推荐] private function firstsql() { global $_M; //查询应用的文件夹 $mname = self::sqlone('applist'); $this->m_name = $mname['m_name']; //查询应用是否使用栏目 $file = self::sqlone('column'," module='{$this->appno}' "); return $file['foldername']; } //删除自定义表 private function zdysql() { global $_M; //公用表 $cloud = ['cloud_config']; //自定义表 $table = file_get_contents(PATH_ALL_APP.$this->m_name.'/config/table'); $table = stringto_array($table,','); //自定义表删除 $zdy = array_diff($table,$cloud); $zdys = []; foreach ($zdy as $val){ $zdys[] = $this->m_name.'_'.$val; } //删除公用表对应应用数据,并查询是否符合删除表的要求 foreach ($cloud as $val) { //判断是否要删除 if(in_array($val, $table)) $zdys[] = self::cloud($val); } //删除表 foreach ($zdys as $val){ self::deltablesql($val); } //删除配置文件 del_table(arrayto_string($zdys,'|')); } //删除固定的app表 private function appsql() { global $_M; //删除栏目接口表 self::delsql('ifcolumn'); //删除应用生成文件所调用事件的信息表 self::delsql('ifcolumn_addfile'); //删除会员侧导航信息表 self::delsql('ifmember_left'); //删除应用插件表 self::delsql('app_plugin'); //删除网站后台栏目信息表 $where = "field='{$this->appno}'"; self::delsql('admin_column',$where); //删除网站栏目信息表 $where = "module='{$this->appno}'"; self::delsql('column',$where); //删除语言表 $where = "app='{$this->appno}'"; self::delsql('language',$where); //删除应用注册表 self::delsql('applist'); } //删除应用文件夹 private function delfile() { foreach ($this->del_dirs as $dir){ if(file_exists(PATH_WEB.$dir) && $dir != null) deldir(PATH_WEB.$dir); } } //对公用配置表卸载处理 private function cloud($tname) { global $_M; $where = "m_name='{$this->m_name}'"; if(self::sqlcounter($tname,$where) > 0){ self::delsql($tname,$where); } if(self::sqlcounter($tname) == 0){ return $tname; } } //公共查询方法 private function sqlone($tname,$where = '') { global $_M; $table = $_M['table'][$tname]; if(!$where){ $where = "no='{$this->appno}'"; } return DB::get_one("select * from {$table} where {$where}"); } //公共查询方法 private function sqlcounter($tname,$where = '') { global $_M; $table = $_M['table'][$tname]; if($where){ $where = 'WHERE '.$where; } return DB::counter("{$table} {$where}"); } //公共删除数据 private function delsql($tname,$where = '') { global $_M; $table = $_M['table'][$tname]; if(!$where){ $where = "no='{$this->appno}'"; } DB::query("DELETE FROM {$table} WHERE {$where}"); } //公共删除表 private function deltablesql($tname) { global $_M; $table = $_M['table'][$tname]; DB::query("DROP TABLE `{$table}`"); } } ?>