HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/bs.kntsleep.com/system/admin/recycle/recycle.class.php
<?php
/*
 * Copyright (c) Huyin Information Technology Co., Ltd. All Rights Reserved.
 * BOSSCMS Content Management System (https://www.bosscms.net/)
 */
defined('IS_OK') or exit('Access Forbidden');

into::basic_class('admin');

class recycle extends admin
{
	public function init()
	{
		global $G;
		$G['cover'] = $this->cover('recycle');
		$where = 1;
		$type = arrExist($G,'get|type');
		$items = arrExist($G,'get|items');
		if(!$type && $res=mysql::select_one('type','items',"id='{$items}'")){
			$type = $res['type'];
		}
		if($type && !preg_match('/^(2|3|4|5)\d?$/',$type)){
			alert('栏目类型错误');
		}
		$man = mysql::select_all('id,alias,username','manager',"level>{$G['manager']['level']} OR id='{$G['manager']['id']}'");
		foreach($man as $v){
			$G['man'][$v['id']] = $v['alias']?$v['alias']:$v['username'];
		}
		if(!into::load_class('admin','group','group','new')->allow('read')){
			if($man){
				$where = "(issuer<0 OR FIND_IN_SET(issuer,'{$G['manager']['id']},".implode(',',arrOption($man,'id','id'))."')) AND {$where}";
			}else{
				$where = "(issuer='{$G['manager']['id']}' OR issuer<0) AND {$where}";
			}
		}
		$rows = $G['rows'] = $this->rows(20);
		$sql = array();
		foreach($G['pass']['type'] as $k=>$v){
			if(preg_match('/^(2|3|4|5)\d?$/',$v)){
				$sql[] = "SELECT id,items,weight,notice,issuer,name,top,recommend,mtime,sort,{$v} AS type FROM ".$G['mysql']['prefix'].$k." WHERE recycle=1 AND lang={$G['language']['id']}";
			}
		}
		$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		$data['list'] = mysql::select("SELECT SQL_CALC_FOUND_ROWS * FROM (".implode(' UNION ALL ',$sql).") AS t WHERE {$where} ORDER BY mtime DESC, id DESC LIMIT ".(($pages-1)*$rows).','.$rows);
		foreach($data['list'] as $k=>$v){
			if($v['issuer']>0){
				$data['list'][$k]['user'] = $G['man'][$v['issuer']];
			}else if($v['issuer']<0){
				$data['list'][$k]['user'] = arrExist(mysql::select_one('username','member',"id='".abs($v['issuer'])."'"),'username');
			}else{
				$data['list'][$k]['user'] = $G['man'][1];
			}
		}
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, null, null, 'pages');
		$G['subarr'] = page::items_option(0,false,array(),false,'^(2|3|4|5)\d?$');
		echo $this->theme('recycle/recycle', $data);
	}

	public function modify()
	{
		global $G;
		$this->cover('recycle','M');
		if(isset($G['post']['id'])){
			$error=array();
			foreach($G['post']['id'] as $typeid){
				list($type,$id) = explode('_',$typeid);
				$table = array_search($type,$G['pass']['type']);
				$man = implode(',',arrOption(mysql::select_all('id','manager',"level>{$G['manager']['level']} OR id='{$G['manager']['id']}'"),'id','id'));
				if($G['manager']['level']==1){
					$man .= ',0';
				}
				if(is_numeric(mysql::update(array('recycle'=>0),$table,"id='{$id}' AND (issuer<0 OR FIND_IN_SET(issuer,'".$man."'))"))){
					$tags = mysql::select_all('id,parent','tag',"type='{$type}' AND FIND_IN_SET('{$id}',parent)");
					foreach($tags as $v){
						mysql::update(array('amount'=>arrExist(mysql::select_one("COUNT(*) AS amount",$table,"FIND_IN_SET(id,'{$v['parent']}') AND display=1 AND recycle=0 AND weight>=0"),'amount')),'tag',"id='{$v['id']}'");
					}
				}else{
					$error[]=$id;
				}
			}
			if($error){
				alert('ID为'.implode(',',$error).'还原失败');
			}else{
				alert('还原成功', url::mpf('recycle','recycle','init'));
			}
		}else{
			alert('没有提交信息');
		}
	}

	public function delete()
	{
		global $G;	
		$this->cover('recycle','D');
		if(isset($G['post']['url']) && isset($G['get']['id'])){
			$success = $error = array();
			$arr = explode(',',$G['get']['id']);
			foreach($arr as $typeid){
				list($type,$id) = explode('_',$typeid);
				$table = array_search($type,$G['pass']['type']);
				if(is_numeric($id) && mysql::total($table,"id='{$id}'")){
					if(is_numeric(mysql::delete($table,"id='{$id}'"))){
						mysql::delete($table.'_content',"id='{$id}'");
						mysql::delete('top',"model='{$type}' AND parent='{$id}'");
						mysql::delete('tag',"type='{$type}' AND parent='{$id}'");
						if($res = mysql::select_all('id,parent','tag',"type='{$type}' AND FIND_IN_SET('{$id}',parent)")){
							foreach($res as $v){
								mysql::update(array('parent'=>trim(str_replace(",{$id},",',',",{$v['parent']},"),',')),'tag',"id='{$v['id']}'");
							}
						}
						if($G['config']['shop_open'] && $G['config']['shop_model']==$type){
							into::load_class('plugin','shop','shop','new')->delete($id);
						}
						$success[] = $id;
					}else{
						$error[] = $id;
					}
				}else{
					$error[] = $id;
				}
			}
			if($error){
				alert('ID为'.implode(',',$error).'删除失败');
			}else{
				$this->sitemap();
				alert('删除成功', url::mpf('recycle','recycle','init'));
			}	
		}
		alert('没有提交信息');
	}

}
?>