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('没有提交信息');
}
}
?>