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/models/models.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 models extends admin
{
	public function init()
	{
		global $G;
		$G['cover'] = $this->cover();
		$this->initialize();
		$data = page::models();
		$has = arrOption($data,'sign','name');
		$json = json::get(ROOT_PATH."system/web/theme/{$G['config']['web_theme']}/model.json");
		foreach($json as $v){
			if(!$has[$v['sign']]){
				$data[] = $v;
			}
		}
		echo $this->theme('models/models',$data);
	}
	
	public function modify()
	{
		global $G;
		$this->cover('models','M');
		if($G['post']['id'][0]){
			/* BOSS=CMS */
			$error=array();
			foreach($G['post']['id'] as $id){
				if(isset($G['post']['display'.$id])){
					$data = array(
						'display'=>$G['post']['display'.$id]
					);
					if($res=mysql::select_one('*',"models","id='{$id}'")){
						if(is_numeric(mysql::update($data,"models","id='{$id}'"))){
							into::basic_json('database',true,false);
							if($G['post']['display'.$id]){
								into::load_class('admin','update','update','new')->database(
									array(
										'model_'.$res['sign']=>$G['database']['model_'.$res['sign']],
										'model_'.$res['sign'].'_content'=>$G['database']['model_'.$res['sign'].'_content']
									)
								);
							}
							into::basic_json('option',true,false);
							into::basic_json('pass',true,false);
						}else{
							$error[]=$id;
						}
					}
				}
			}
			if($error){
				alert('ID为'.implode(',',$error).'修改失败');
			}else{
				alert('修改成功', url::mpf('models','models','init'));
			}
		}else{
			alert('没有提交信息');
		}
	}
	
	public function edit()
	{
		global $G;
		$this->cover('models','R');
		$data = array();
		if($id = $G['get']['id']){
			$data = mysql::select_one('*','models',"id='{$id}'");
			$G['search']['column'] = array('name'=>'标题名称(name)');
			if(preg_match('/^(2|3|4|5)$/',$id)){
				$G['search']['column']['text'] = $G['search']['text']['text'] = '简短描述(text)';
				$G['search']['column']['content'] = $G['search']['text']['content'] = '内容编辑(content)';
				switch($id){
					case 2:
						$G['search']['image']['image'] = '缩略图(image)';
						break;
					case 3:
						$G['search']['image']['image'] = '缩略图(image)';
						$G['search']['image']['images'] = '产品图集(images)';
						for($i=0; $i<$G['config']['product_content_number']; $i++){
							$n = $i?$i:'';
							$G['search']['column']["content{$n}"] = $G['config']["product_content_title{$n}"]."(content{$n})";
						}
						break;
					case 4:
						$G['search']['image']['image'] = '缩略图(image)';
						$G['search']['image']['images'] = '详情图集(images)';
						break;
				}
				into::basic_json('transfer');
				foreach($G['transfer'][$data['sign']] as $v){
					if(preg_match('/^(text\d|container)$/',$v)){
						$G['search']['column'][$v] = $G['search']['text'][$v] = "预留字段({$v})";
					}
					if(preg_match('/^image/',$v)){
						$G['search']['image'][$v] = "预留字段({$v})";
					}
				}
			}else if($res=page::field($id)){
				foreach($res as $v){
					if(preg_match('/^(0|1|2|3|4|5|10|11)$/',$v['style'])){
						$G['search']['column'][$v['name']] = "{$v['title']}({$v['name']})";
					}
					if(preg_match('/^(6|7)$/',$v['style'])){
						$G['search']['image'][$v['name']] = "{$v['title']}({$v['name']})";
					}
					if(preg_match('/^(1|2)$/',$v['style'])){
						$G['search']['text'][$v['name']] = "{$v['title']}({$v['name']})";
					}
				}
			}
			$data['search'] = json::decode($data['search']);
			$data['path'] = load::theme()."html/{$data['sign']}/";
			if(!$data['files'] = dir::readAll($data['path'])){
				$data['files'] = array($data['sign'].'.html');
			}
			$data['path_detail'] = load::theme()."html/{$data['sign']}_detail/";
			if(!$data['files_detail'] = dir::readAll($data['path_detail'])){
				$data['files_detail'] = array($data['sign'].'_detail.html');
			}
		}
		$G['grade'] = array('无');
		if($grade = page::grade_list()){
			foreach($grade as $v){
				$G['grade'][$v['weight']] = $v['name'];
			}
		}
		echo $this->theme('models/edit', $data);
	}
	
	public function add()
	{	
		global $G;
		$id = $G['get']['id'];
		$this->cover('models',$id?'M':'A');
		if(isset($G['post'])){
			$data = array(
				'name'    => $G['post']['name'],
				'display' => $G['post']['display'],
				'cweight' => $G['post']['cweight'],
				'contribute' => $G['post']['contribute'],
				'comments' => $G['post']['comments'],
				'search'  => $G['post']['search']?json::encode($G['post']['search']):'{\"column\":[\"name\"],\"image\":\"\",\"text\":\"\"}'
			);
			if($id){
				if($result = mysql::select_one('id','models',"id='{$id}'")){
					mysql::update($data,"models","id='{$id}'");
				}
			}else{
				$data['sign'] = $G['post']['sign'];
				if(!preg_match('/^[a-zA-Z]\w*$/',$data['sign'])){
					alert('标识字符只能使用英文或英文加数字');
				}
				if($G['pass']['type'][$data['sign']] || preg_match('/^(shop)$/',$data['sign']) || mysql::total('models',"sign='{$data['sign']}'")){
					alert('该标识字符已经存在');
				}
				for($i=20;$i<=59;$i++){
					if(!mysql::total('models','id='.$i)){
						$data['id'] = $i;
						break;
					}
				}
				if(!$data['id']){
					alert('不能再创建模块');
				}
				if($id = mysql::insert($data,"models")){
					into::basic_json('database',true,false);
					into::load_class('admin','update','update','new')->database(
						array(
							'model_'.$data['sign']=>$G['database']['model_'.$data['sign']],
							'model_'.$data['sign'].'_content'=>$G['database']['model_'.$data['sign'].'_content']
						)
					);
					$theme = load::theme();
					foreach(array('html','css','js') as $v){
						foreach(array('','_detail') as $f){
							if(!is_file($sfile="{$theme}/{$v}/{$data['sign']}{$f}/{$data['sign']}{$f}.{$v}")){
								dir::create($sfile);
							}
						}
					}
				}
			}
			into::basic_json('option',true,false);
			into::basic_json('pass',true,false);
			alert('操作成功', url::mpf('models','models','edit',array('id'=>$id,'success'=>'ok')));
		}else{
			alert('没有提交信息!');
		}
	}

	public function delete()
	{
		global $G;	
		$this->cover('models','D');
		if(isset($G['post']['url']) && isset($G['get']['id'])){
			$del = $its = array();
			$arr = explode(',',$G['get']['id']);
			foreach($arr as $id){
				if(is_numeric($id)){
					if($r = mysql::select_one('name','items',"type='{$id}' AND lang=lang")){
						$its[$id] = $r['name'];
					}else{
						$del[$id] = $id;
					}
				}
			}
			if($del){
				$error=array();
				foreach($del as $id=>$name){
					$res = mysql::select_one('sign',"models","id='{$id}'");
					if(is_numeric(mysql::delete("models","id='{$id}'"))){
						mysql::query("DROP TABLE IF EXISTS `{$G['mysql']['prefix']}model_{$res['sign']}`");
						mysql::query("DROP TABLE IF EXISTS `{$G['mysql']['prefix']}model_{$res['sign']}_content`");
						mysql::delete('field',"parent='{$id}'");
						mysql::delete('config',"name LIKE 'model_{$res['sign']}_%' AND lang=lang");
					}else{
						$error[]=$id;
					}
				}
				if($error){
					alert('编号为'.implode(',',$error).'删除失败');
				}else{
					into::basic_json('database',true,false);
					into::basic_json('option',true,false);
					into::basic_json('pass',true,false);
					if($its){
						alert(implode(',',$its).'模型有未删除的栏目');
					}else{
						alert('删除成功',url::mpf('models','models','init',array('id'=>null)));
					}
				}
			}else if($its){
				alert(implode(',',$its).'模型有未删除的栏目');
			}else{
				alert('没有删除对象id!');
			}			
		}
		alert('没有提交信息!');
	}

	public function copys()
	{
		global $G;
		$this->cover('models','R');
		$data = array();
		if($id = $G['get']['id']){
			$data = mysql::select_one('*','models',"id='{$id}'");
		}
		echo $this->theme('models/cedit', $data);
	}
	
	public function addcopys()
	{
		global $G;
		$this->cover('models','M');

		if(isset($G['post']) && $G['get']['id']){
			$data = mysql::select_one('*','models',"id='{$G['get']['id']}'");
			unset($data['id']);
			$sign = $data['sign'];
			$data['sign'] = $G['post']['sign'];
			if(!preg_match('/^[a-zA-Z]\w*$/',$data['sign'])){
				alert('标识字符只能使用英文或英文加数字');
			}
			if($G['pass']['type'][$data['sign']]){
				alert('该标识字符已经存在');
			}
			for($i=20;$i<=59;$i++){
				if(!mysql::total('models','id='.$i)){
					$data['id'] = $i;
					break;
				}
			}
			if(!$data['id']){
				alert('不能再创建模块');
			}
			if($G['post']['name']){
				$data['name'] = $G['post']['name'];
			}
			if($id = mysql::insert($data,"models")){
				if($G['get']['id']>=20){
					$field = mysql::select_all('*','field',"parent='{$G['get']['id']}'","sort DESC,id ASC");
					foreach($field as $k=>$v){
						unset($v['id']);
						$v['parent'] = $id;
						mysql::insert($v,'field');
					}
				}else{
					$this->field($G['get']['id'], $id);
				}
				into::basic_json('database',true,false);
				into::load_class('admin','update','update','new')->database(
					array(
						'model_'.$data['sign']=>$G['database']['model_'.$data['sign']],
						'model_'.$data['sign'].'_content'=>$G['database']['model_'.$data['sign'].'_content']
					)
				);
				$theme = load::theme();
				foreach(array('html','css','js') as $v){
					$page = "{$theme}/{$v}/{$data['sign']}/{$data['sign']}.{$v}";
					$detail = "{$theme}/{$v}/{$data['sign']}_detail/{$data['sign']}_detail.{$v}";
					dir::copyfile("{$theme}/{$v}/{$sign}/{$sign}.{$v}",$page);
					dir::copyfile("{$theme}/{$v}/{$sign}_detail/{$sign}_detail.{$v}",$detail);
				}
			}
			into::basic_json('option',true,false);
			into::basic_json('pass',true,false);
			alert('操作成功', url::mpf('models','models','edit',array('id'=>$id,'success'=>'ok')));
		}
		alert('没有提交信息!');
	}
	
	public function field($id, $parent)
	{
		global $G;
		$db = $G['database'][array_search($id,$G['pass']['type']).'_content'];
		foreach($db as $k=>$v){
			if(preg_match('/\/\*.*(\sstyle\d+).*\*\//',$v)){
				preg_match("/(int\(\d+\)|varchar\(\d+\)|text|mediumtext|decimal\(\d+,\d+\)).*?COMMENT\s+'([^']+?)'.*?\/\*\sstyle(\d+)/",$v,$mat);
				mysql::select_set(array(
					'parent'      => $parent,
					'name'        => $k,
					'style'       => $mat[3],
					'title'       => $mat[2],
					'description' => '',
					'param'       => '',
					'value'       => '',
					'type'        => $mat[1],
					'attribute'   => '[]',
					'sort'        => 0,
					'display'     => 1
				),"field");
			}
		}
	}
	
	public function initialize()
	{
		global $G;
		foreach($G['option']['type'] as $k=>$v){
			if(preg_match('/^(2|3|4|5)$/',$k)){
				if(!mysql::total('models',"id='{$k}'")){
					mysql::insert(array(
						'id'      => $k,
						'name'    => $v,
						'sign'    => array_search($k,$G['pass']['type']),
						'display' => 1,
						'cweight' => 0,
						'contribute' => 0,
						'comments' => 0,
						'search'  => '{\"column\":[\"name\"],\"image\":\"image\",\"text\":\"text\"}'
					),'models');
				}
			}
		}
	}
	
	public function import()
	{
		global $G;
		if(preg_match('/^\w+$/',$G['get']['sign'])){
			$json = json::get(ROOT_PATH."system/web/theme/{$G['config']['web_theme']}/model.json");
			if($res = $json[$G['get']['sign']]){
				$data = array(
					'name' => $res['name'],
					'sign' => $res['sign'],
					'search' => json::encode($res['search']),
					'comments' => $res['comments'],
					'contribute' => $res['contribute'],
					'cweight' => 0,
					'display' => 1
				);
				for($i=20;$i<=59;$i++){
					if(!mysql::total('models','id='.$i)){
						$data['id'] = $i;
						break;
					}
				}
				if(!$data['id']){
					alert('不能再创建模块');
				}
				if($id = mysql::insert($data,'models')){
					foreach($res['field'] as $v){
						if(!mysql::total('field',"parent='{$id}' AND name='{$v['name']}'")){
							mysql::insert(array(
								'parent' => $id,
								'style' => $v['style'],
								'title' => $v['title'],
								'name' => $v['name'],
								'type' => $v['type'],
								'description' => $v['description'],
								'value' => $v['value'],
								'param' => json::encode($v['param']),
								'attribute' => json::encode($v['attribute']),
								'sort' => 0,
								'display' => 1
							),'field');
						}
					}
					into::basic_json('database',true,false);
					into::load_class('admin','update','update','new')->database(
						array(
							'model_'.$data['sign']=>$G['database']['model_'.$data['sign']],
							'model_'.$data['sign'].'_content'=>$G['database']['model_'.$data['sign'].'_content']
						)
					);
					alert('导入成功',url::mpf('models','models','init'));
				}else{
					alert('导入失败');
				}
			}
		}
		alert('没有提交信息');
	}
}
?>