create();
$data['table_name'] = strtolower($data['table_name']);
$table_id = $this->add($data);
if ($table_id) {
//创建数据表
if ($this->createModel("cms_".$data['table_name'], $table_id,$data['name'])) {
//将模型表默认的系统字段创建htmlcode
$m_data=M("table_field")->where(array("table_id"=>$table_id))->select();
foreach($m_data as $rs){
$newdata=array();
$newdata['field_id']=$rs['field_id'];
unset($rs['field_id']);//销毁fieldid 便于重新创建字段htmlcode
$newdata['htmlcode']=$this->createFieldHtmlCode($rs);
$newdata['memberhtmlcode']=$this->createMemberFieldHtmlCode($rs);
M("table_field")->save($newdata);
}
return $table_id;
} else {
//表创建失败
$this->where(array("table_id" => $table_id))->delete();
$this->error = '数据表创建失败!';
return false;
}
} else {
return false;
}
//
return $data;
}
//修改模型
public function data_editor(){
$data=$this->create();
$data['table_name'] = strtolower($data['table_name']);//强制表名小写
$table_id=$data['table_id'];
$info = $this->where(array("table_id" => $table_id))->find();
if (empty($info)){
$this->error = '数据表不存在!';
return false;
}
$this->save($data);
//修改model表中的table_name
M("model")->where(array("table_id"=>$table_id))->save(array("table_name"=>$data['table_name']));
//修改备注
//表前缀
$dbPrefix = C("DB_PREFIX")."cms_";
//主表
if (!$this->sql_execute("ALTER TABLE `{$dbPrefix}{$info['table_name']}` COMMENT='".$data['name']."';")) {
$this->error = '数据库修改表名失败!';
return false;
}
//副表
if (!$this->sql_execute("ALTER TABLE `{$dbPrefix}{$info['table_name']}_data` COMMENT='".$data['name']."-副表"."';")) {
//主表未修改成功,进行回滚
$this->sql_execute("ALTER TABLE `{$dbPrefix}{$info['table_name']}` COMMENT='".$info['name']."';");
$this->error = '数据库修改副表表名失败!';
return false;
}
//检查是否更改表名了
if ($info['table_name'] != $data['table_name'] && !empty($data['table_name'])) {
//检查新表名是否存在
if ($this->table_exists("cms_" . $data['table_name']) || $this->table_exists("cms_" . $data['table_name'] . '_data')) {
$this->error = '该表名已经存在!';
return false;
}
//表名更改
if (!$this->sql_execute("RENAME TABLE `{$dbPrefix}{$info['table_name']}` TO `{$dbPrefix}{$data['table_name']}` ;")) {
$this->error = '数据库修改表名失败!';
return false;
}
//修改副表
if (!$this->sql_execute("RENAME TABLE `{$dbPrefix}{$info['table_name']}_data` TO `{$dbPrefix}{$data['table_name']}_data` ;")) {
//主表未修改成功,进行回滚
$this->sql_execute("RENAME TABLE `{$dbPrefix}{$data['table_name']}` TO `{$dbPrefix}{$info['table_name']}` ;");
$this->error = '数据库修改副表表名失败!';
return false;
}
}
//
return $data;
}
//删除模型
public function data_delete($table_id) {
if (empty($table_id)){
$this->error = 'id不存在!';
return false;
}
$data = $this->where(array("table_id" => $table_id))->find();
if (!$data) {
$this->error = '数据表不存在!';
return false;
}
//检查该模型下是否有分类
$model = M("model")->where(array("table_id" => $table_id))->find();
if ($model) {
$this->error = '该数据表下有模型,请先删除模型!';
return false;
}
//检查新表名是否存在(如果存在需要验证该表里是否有数据)
if ($this->table_exists("cms_" . $data['table_name'])) {
$count=M("cms_".$data['table_name'])->count();
if($count>0){
$this->error = '该模型下有数据,请先删除数据!';
return false;
}
}
//表名
$table_name = $data['table_name'];
//删除模型数据
$this->where(array("table_id" => $table_id))->delete();
//删除所有和这个模型相关的字段
D("TableField")->where(array("table_id" => $table_id))->delete();
//删除主表
$this->deleteTable("cms_".$table_name);
//删除副表
$this->deleteTable("cms_".$table_name . "_data");
return true;
}
/**
* 创建内容模型
* @param type $tableName 模型主表名称(不包含表前缀)
* @param type $modelId 模型id
* @return boolean
*/
protected function createModel($tableName,$table_id,$name){
if (empty($tableName) || $table_id < 1) {
return false;
}
//表前缀
$dbPrefix = C("DB_PREFIX");
//读取模型主表SQL模板
$mainTableSqll = file_get_contents(APP_PATH.self::mainTableSql);
//副表
$sideTablesSql = file_get_contents(APP_PATH.self::sideTablesSql);
//字段数据
$modelTablesInsert = file_get_contents(APP_PATH.self::modelTablesInsert);
//表备注
$zhubiao_note=$name;
$fubiao_note=$name."-副表";
//表前缀,表名,模型id替换
$sqlSplit = str_replace(array('@cms@', '@zhubiao@', '@table_id@', '@zhubiao_note@', '@fubiao_note@'), array($dbPrefix, $tableName, $table_id, $zhubiao_note, $fubiao_note), $mainTableSqll . "\n" . $sideTablesSql . "\n" . $modelTablesInsert);
$this->execute($sqlSplit);
return $table_id;
}
/*
* 创建字段html代码
*/
public function createFieldHtmlCode($data){
if($data['field_id']){
$info=M("table_field")->find($data['field_id']);
//当字段类型 and 宽度 and 高度 and 默认值 未改变的时候htmlcode等于提交过来的,否则执行重新生成动作
if(
$data['htmlcode']
&&$info['field']==$data['field']
&&$info['name']==$data['name']
&&$info['formtype']==$data['formtype']
&&$info['formwidth']==$data['formwidth']
&&$info['formheight']==$data['formheight']
&&$info['defaultval']==$data['defaultval']
&&$info['tips']==$data['tips']
&&$info['imgwidth']==$data['imgwidth']
){
$htmlcode=$data['htmlcode'];
}else{
$htmlcode=$this->FieldHtmlCodeReplace($data);
}
}else{
$htmlcode=$this->FieldHtmlCodeReplace($data);
}
return $htmlcode;
}
/*
* 创建会员投入字段html代码
*/
public function createMemberFieldHtmlCode($data){
if($data['field_id']){
$info=M("table_field")->find($data['field_id']);
//当字段类型 and 宽度 and 高度 and 默认值 未改变的时候htmlcode等于提交过来的,否则执行重新生成动作
if(
$data['memberhtmlcode']
&&$info['field']==$data['field']
&&$info['name']==$data['name']
&&$info['formtype']==$data['formtype']
&&$info['formwidth']==$data['formwidth']
&&$info['formheight']==$data['formheight']
&&$info['defaultval']==$data['defaultval']
&&$info['tips']==$data['tips']
){
$htmlcode=$data['memberhtmlcode'];
}else{
$htmlcode=$this->FieldHtmlCodeReplace($data,1);
}
}else{
$htmlcode=$this->FieldHtmlCodeReplace($data,1);
}
return $htmlcode;
}
/*
* 替换字段类型的代码
*
*/
public function FieldHtmlCodeReplace($rs,$isMember=0){
//获取表单类型的模板文件
if($isMember){
$field_temp= file_get_contents(APP_PATH.self::modelFieldMemberPath.$rs['formtype'].".php");
}else{
$field_temp= file_get_contents(APP_PATH.self::modelFieldPath.$rs['formtype'].".php");
}
//内容替换
$field_temp= str_replace("{modelFieldTemp_field}",$rs['field'],$field_temp);
$field_temp= str_replace("{tips}",$rs['tips'],$field_temp);
$field_temp= str_replace("{defaultval}",$rs['defaultval'],$field_temp);
//宽度
if($rs['formwidth']){
$style_formwidth="width:".$rs['formwidth']."%;";
}else{
$style_formwidth="";
}
$field_temp= str_replace("{style_formwidth}",$style_formwidth,$field_temp);
//高度
if($rs['formheight']){
$style_formheight="height:".$rs['formheight']."px;";
}else{
$style_formheight="";
}
$field_temp= str_replace("{style_formheight}",$style_formheight,$field_temp);
//编辑器高度 宽度替换(因为编辑器只调用数值,不需要css样式)
$field_temp= str_replace("{imgwidth}",$rs['imgwidth'],$field_temp);
$field_temp= str_replace("{imgheight}",$rs['imgheight'],$field_temp);
$field_temp= str_replace("{formwidth}",$rs['formwidth']."%",$field_temp);
$field_temp= str_replace("{formheight}",$rs['formheight'],$field_temp);
//图片上传高度宽度替换
//checkbox radio select选项替换
$checkbox_option="";
if($rs['formtype']=="checkbox"||$rs['formtype']=="radio"||$rs['formtype']=="select"){
if($rs['defaultval']){
$defaultval=explode("\r\n",$rs['defaultval']);
foreach($defaultval as $v){
$dufault_arr=explode(":",$v);
$option_arr=explode("==",$dufault_arr[0]);
$select_checked=$dufault_arr[1]=="default"?'=$r?"":"selected"?>':"";//select 默认选择中的
$checked_default=$dufault_arr[1]=="default"?'=$r?"":"checked"?>':"";//checked radio 默认选择中的
$option_name=trim($option_arr[0]);//字段名称
$option_value=trim($option_arr[1]==""?$option_arr[0]:$option_arr[1]);//字段值 为空时=名称
if($rs['formtype']=="checkbox"){
$checkbox_option.='';
}
if($rs['formtype']=="radio"){
$checkbox_option.='';
}
if($rs['formtype']=="select"){
$checkbox_option.='';
}
}
}
}
$field_temp= str_replace("{select_option}",$checkbox_option,$field_temp);
return $field_temp;
}
}