123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813 |
- <?php
- namespace app\modules\admin\controllers;
- use app\common\controllers\BController;
- use app\models\ContentModel;
- use app\models\ContentModelField;
- use app\modules\cms\models\Category;
- use Yii;
- class ContentmodelController extends BController
- {
- public $layout = 'main';
- public function actionList()
- {
- $query = ContentModel::find();
- if (Yii::$app->request->isAjax) {
- $data = [];
- $params = Yii::$app->request->get('ContentModel');
- $query = mergeParams($query,$params);
- $countQuery = clone $query;
- //分页
- if(isset($_GET['limit'])){ $query->limit(intval($_GET['limit']));}
- if(isset($_GET['offset'])){ $query->offset(intval($_GET['offset']));}
- //排序
- if(isset($_GET['sort'])&&isset($_GET['sortOrder']))
- {
- $resultList = $query->orderBy([$_GET['sort']=>($_GET['sortOrder']=='asc'?SORT_ASC:SORT_DESC)])->all();
- }
- else
- {
- $resultList = $query->orderBy(['model_id'=>SORT_ASC])->all();
- }
- foreach($resultList as $result)
- {
- $data[] = array('model_id'=>$result->model_id,'name'=>$result->name,'table_name'=>$result->table_name,'description'=>$result->description,'type'=>$result->type,'typetxt'=>ContentModel::typeOptions($result->type),'for_cms'=>$result->boolOptions($result->for_cms),'disabled'=>$result->disabled,'is_systemtxt'=>$result->boolOptions($result->is_system),'is_system'=>$result->is_system,'create_time'=>get_date($result->create_time,'Y-m-d H:i'));
- }
- $result = ["total"=>$countQuery->count(),"totalNotFiltered"=>$countQuery->count(),"rows"=>$data];
- echo_json($result);
- }
- $this->tableTitle = array(
- array('field'=>'model_id','title'=>ContentModel::getAttributeName('model_id'),'align'=>'center','class'=>'col-md-1'),
- array('field'=>'name','title'=>ContentModel::getAttributeName('name'),'align'=>'center','class'=>'col-md-1'),
- array('field'=>'table_name','title'=>ContentModel::getAttributeName('table_name'),'align'=>'center','class'=>'col-md-2'),
- array('field'=>'typetxt','title'=>ContentModel::getAttributeName('type'),'align'=>'center','sortable'=>true,'class'=>'col-md-2'),
- array('field'=>'for_cms','title'=>ContentModel::getAttributeName('for_cms'),'align'=>'center','class'=>'col-md-2'),
- array('field'=>'is_systemtxt','title'=>ContentModel::getAttributeName('is_system'),'align'=>'center','sortable'=>true,'class'=>'col-md-2'),
- array('field'=>'operate','title'=>ContentModel::getAttributeName('operate'),'align'=>'center','events'=>'window.operateEvents','formatter'=>'operateFormatter','class'=>'col-md-2'),
- );
- $this->tableConfig = array('table'=>ContentModel::shortTableName(),'url'=>$this->createRealUrl(['admin/contentmodel/list']),'setFieldUrl'=>$this->createRealUrl(['admin/contentmodel/setfield']),'idField'=>ContentModel::modelPrimaryKey(),'checkbox'=>0,'dropmenu'=>1,'pagination'=>false,'refresh'=>true);
- return $this->render('list',array('model'=>new ContentModel()));
- }
- //添加
- function actionAdd()
- {
- $model = new ContentModel();
- if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
- $exist = ContentModel::find()->where("table_name='".$model->table_name."' or name='".$model->name."'")->exists();
- if($exist)
- {
- $msgdata = ['error' => 1,'msg' => '已存在该模型,添加失败'];
- echo_json($msgdata);
- }
- $model->create_time = TIMESTAMP;
- if(!$model->validate())
- {
- $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
- }
- else
- {
- if($model->save())
- {
- $model_id = getLastInsertId();
- if($model->type==1)
- {
- $table_name = $model->table_name;
- $model_sql = file_get_contents(BASE_PATH.'common'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'model.sql');
- $table_pre = Yii::$app->db->tablePrefix;
- $model_sql = str_replace('$basic_table', $table_pre.$table_name, $model_sql);
- $model_sql = str_replace('$table_data',$table_pre.$table_name.'_data', $model_sql);
- $model_sql = str_replace('$table_model_field',$table_pre.'content_model_field', $model_sql);
- $model_sql = str_replace('$model_id',$model_id,$model_sql);
- Yii::$app->db->createCommand($model_sql)->execute();
- //初始化一个根栏目
- /* $category = new Category();
- $category->content_model_id = $model_id;
- $category->cat_name = $model->name;
- $category->cat_type = 1;
- $category->save();*/
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else if($model->type==2)
- {
- $tableName = Yii::$app->db->tablePrefix.'user_'.$model->table_name;
- //判断是否存在同样表名的模型
- $sql = "show tables like '".$tableName."';";
- $result = Yii::$app->db->createCommand($sql)->queryOne();
- if($result)
- {
- $msgdata = ['error' => 1,'msg' => '该表已经存在'];
- }
- else
- {
- $model->table_name = str_replace(Yii::$app->db->tablePrefix,'',$tableName);
- if($model->save())
- {
- //建立数据表
- $model_sql = "CREATE TABLE `$tableName` ( `user_id` int(10) unsigned NOT NULL, PRIMARY KEY (`user_id`));";
- Yii::$app->db->createCommand($model_sql)->execute();
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- }
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- echo_json($msgdata);
- }
- return $this->renderAjax('add',array('model'=>$model));
- }
- function actionEdit()
- {
- $id = $this->getKeyId('model_id');
- $model = ContentModel::findOne($id);
- check_record_exists($model);
- if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
- $post = Yii::$app->request->post();
- $model->for_cms = $post['ContentModel']['for_cms']?$post['ContentModel']['for_cms']:0;
- $model->enable_search = $post['ContentModel']['enable_search']?$post['ContentModel']['enable_search']:0;
- $model->is_system = $post['ContentModel']['is_system']?$post['ContentModel']['is_system']:0;
- if(!$model->validate())
- {
- $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
- }
- else
- {
- if($model->save())
- {
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- echo_json($msgdata);
- }
- return $this->renderAjax('edit',array('model'=>$model));
- }
- function actionSettings()
- {
- $id = $this->getKeyId('model_id');
- $model = ContentModel::findOne($id);
- check_record_exists($model);
- $settings = string2array($model->settings);
- if(Yii::$app->request->isAjax&&Yii::$app->request->post()){
- $settings = isset($_POST['settings'])?$_POST['settings']:NULL;
- $model->settings = array2string($settings);
- if(!$model->validate())
- {
- $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
- }
- else
- {
- if($model->save())
- {
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- echo_json($msgdata);
- }
- return $this->renderAjax('settings',array('model'=>$model,'settings'=>$settings));
- }
- //删除模型
- public function actionDel()
- {
- $model_id = $this->getKeyId('model_id');
- $contentModel = ContentModel::findOne($model_id);
- check_record_exists($contentModel);
- if($contentModel->items>0)
- {
- $msgdata = ['error' => 1,'msg' => '该模型已经关联内容,请手动操作数据库'];
- echo_json($msgdata);
- }
- if($contentModel->delete())
- {
- if($contentModel->type==1)
- {
- ContentModelField::deleteAll(['model_id' =>$model_id]);
- Category::deleteAll(['content_model_id' =>$model_id]);
- $table_name = $contentModel->table_name;
- $table_pre = Yii::$app->db->tablePrefix;
- $table1 = $table_pre.$table_name;
- $table2 = $table_pre.$table_name."_data";
- $sql="DROP TABLE IF EXISTS `".$table1."`;DROP TABLE IF EXISTS `".$table2."`;";
- Yii::$app->db->createCommand($sql)->execute();
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else if($contentModel->type==2)
- {
- $table_name = $contentModel->table_name;
- $table = Yii::$app->db->tablePrefix.$table_name;
- $sql = "select count(*) from $table ";
- $count = Yii::$app->db->createCommand($sql)->queryScalar();
- if($count>0)
- {
- $msgdata = ['error' => 1,'msg' => '该模型已经关联内容,请手动操作数据库'];
- }
- else
- {
- ContentModelField::deleteAll(['model_id' =>$model_id]);
- $sql="DROP TABLE IF EXISTS `".$table."`;";
- Yii::$app->db->createCommand($sql)->execute();
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- }
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- echo_json($msgdata);
- }
- //字段管理
- public function actionFieldlist()
- {
- $model_id = $this->getKeyId('model_id');
- $contentModel = ContentModel::findOne($model_id);
- check_record_exists($contentModel);
- $query = ContentModelField::find();
- if (Yii::$app->request->isAjax) {
- $data = [];
- $params = Yii::$app->request->get('ContentModelField');
- $query = mergeParams($query,$params,['model_id'=>$model_id]);
- $countQuery = clone $query;
- //分页
- if(isset($_GET['limit'])){ $query->limit(intval($_GET['limit']));}
- if(isset($_GET['offset'])){ $query->offset(intval($_GET['offset']));}
- //排序
- if(isset($_GET['sort'])&&isset($_GET['sortOrder']))
- {
- $resultList = $query->orderBy([$_GET['sort']=>($_GET['sortOrder']=='asc'?SORT_ASC:SORT_DESC)])->all();
- }
- else
- {
- $resultList = $query->orderBy(['field_id'=>SORT_ASC])->all();
- }
- foreach($resultList as $result)
- {
- $data[] = array('field_id'=>$result->field_id,'name'=>$result->name,'field'=>$result->field,'form_type'=>$result->form_type,'is_system'=>$result->is_system,'is_systemtxt'=>$result->boolOptions($result->is_system),'is_listshow'=>$result->is_listshow,'is_listshowtxt'=>$result->boolOptions($result->is_listshow),'is_base'=>$result->is_base,'is_search'=>$result->is_search,'is_searchtxt'=>$result->boolOptions($result->is_search),'is_add_admin'=>$result->is_add_admin,'list_order'=>$result->list_order);
- }
- $result = ["total"=>$countQuery->count(),"totalNotFiltered"=>$countQuery->count(),"rows"=>$data];
- echo_json($result);
- }
- $this->tableTitle = array(
- array('field'=>'name','title'=>ContentModelField::getAttributeName('name'),'align'=>'center','class'=>'col-md-1'),
- array('field'=>'field','title'=>ContentModelField::getAttributeName('field'),'align'=>'center','class'=>'col-md-1'),
- array('field'=>'form_type','title'=>ContentModelField::getAttributeName('form_type'),'align'=>'center','class'=>'col-md-2'),
- array('field'=>'is_systemtxt','title'=>ContentModelField::getAttributeName('is_system'),'align'=>'center','class'=>'col-md-1'),
- array('field'=>'is_add_admin','title'=>ContentModelField::getAttributeName('is_add_admin'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'),
- array('field'=>'is_listshow','title'=>ContentModelField::getAttributeName('is_listshow'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'),
- array('field'=>'is_base','title'=>ContentModelField::getAttributeName('is_base'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'),
- array('field'=>'is_search','title'=>ContentModelField::getAttributeName('is_search'),'align'=>'center','class'=>'col-md-1','formatter'=>'switchFormatter'),
- array('field'=>'list_order','title'=>ContentModelField::getAttributeName('list_order'),'align'=>'center','class'=>'col-md-2','sortable'=>true,'formatter'=>'editFormatter'),
- array('field'=>'operate','title'=>ContentModelField::getAttributeName('operate'),'align'=>'center','events'=>'window.operateEvents','formatter'=>'operateFormatter','class'=>'col-md-2'),
- );
- $this->tableConfig = array('table'=>ContentModelField::shortTableName(),'url'=>$this->createRealUrl(['admin/contentmodel/fieldlist','model_id'=>$model_id]),'setFieldUrl'=>$this->createRealUrl(['admin/contentmodel/setfield']),'idField'=>ContentModelField::modelPrimaryKey(),'checkbox'=>0,'dropmenu'=>1,'pagination'=>false,'refresh'=>true);
- return $this->render('fieldlist',array('model'=>new ContentModelField(),'contentModel'=>$contentModel));
- }
- //获取字段信息
- public function actionFieldsetting()
- {
- $form_type = $_GET['form_type'];
- if(!empty($form_type))
- {
- require BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$form_type.DIRECTORY_SEPARATOR.'config.inc.php';
- ob_start();
- include BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$form_type.DIRECTORY_SEPARATOR.'field_add_form.inc.php';
- $data_setting = ob_get_contents();
- if(strtolower(CHARSET)!='utf-8')
- {
- $data_setting = array_iconv($data_setting);
- }
- ob_end_clean();
- $settings = array('field_basic_table'=>$field_basic_table,'field_minlength'=>$field_minlength,'field_maxlength'=>$field_maxlength,'field_allow_search'=>$field_allow_search,'field_allow_fullsearch'=>$field_allow_fullsearch,'field_allow_isunique'=>$field_allow_isunique,'setting'=>$data_setting);
- $msgdata = [
- 'error' => 0,
- 'msg' => 'success',
- 'data'=>$settings,
- 'code'=>'200',
- ];
- echo_json($msgdata);
- }
- }
- //添加
- function actionAddfield()
- {
- $model_id = $this->getKeyId('model_id');
- $contentModel = ContentModel::findOne($model_id);
- check_record_exists($contentModel);
- $model = new ContentModelField();
- $postdata = Yii::$app->request->post('ContentModelField');
- if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
- $exist = ContentModelField::find()->where("field='".$model->field."' and model_id=".$model_id)->exists();
- if($exist)
- {
- $msgdata = ['error' => 1,'msg' => '已存在该字段,添加失败'];
- echo_json($msgdata);
- }
- $model->is_system= $contentModel->type==2?1:intval($postdata['is_system']);
- $model->is_unique = intval($postdata['is_unique']);
- $model->is_base = intval($postdata['is_base']);
- $model->is_search = intval($postdata['is_search']);
- $model->is_add = intval($postdata['is_add']);
- $model->is_fullsearch = intval($postdata['is_fullsearch']);
- $model->is_add_admin = intval($postdata['is_add_admin']);
- $model->is_omnipotent = intval($postdata['is_omnipotent']);
- $model->is_listshow = intval($postdata['is_listshow']);
- $model->is_position = intval($postdata['is_position']);
- require BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$model->form_type.DIRECTORY_SEPARATOR.'config.inc.php';
- if(empty($model->min_length)){$model->min_length = intval($field_minlength);}
- if(empty($model->max_length)){$model->max_length = intval($field_maxlength);}
- $model->setting = !empty($_POST['setting'])?array2string($_POST['setting']):'';
- if($_POST['setting']['field_type'])$field_type = $_POST['setting']['field_type'];
- $model->unset_group_ids = !empty($_POST['unset_group_ids'])?join(",",$_POST['unset_group_ids']):'';
- $model->unset_role_ids = !empty($_POST['unset_role_ids'])?join(",",$_POST['unset_role_ids']):'';
- $model->model_id = $model_id;
- if(!$model->validate())
- {
- $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
- }
- else
- {
- if($model->save())
- {
- if(in_array($model->form_type,array('image','downfile')))
- {
- $model->max_length = $field_maxlength;
- }
- if($this->_addField(['field_type'=>$field_type,'field'=>$model->field,'max_length'=>$model->max_length,'table_name'=>$contentModel->table_name,'is_system'=>$model->is_system,'contentmodel_type'=>$contentModel->type])==true)
- {
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- echo_json($msgdata);
- }
- return $this->renderAjax('addfield',array('model'=>$model,'contentModel'=>$contentModel));
- }
- //编辑字段
- function actionEditfield()
- {
- $field_id = $this->getKeyId('field_id');
- $model = ContentModelField::findOne($field_id);
- check_record_exists($model);
- $contentModel = ContentModel::findOne($model->model_id);
- check_record_exists($contentModel);
- $oldfield = $model->field;
- $is_system = $model->is_system;
- $postdata = Yii::$app->request->post('ContentModelField');
- if(Yii::$app->request->isAjax&&$model->load(Yii::$app->request->post())){
- $model->is_system= $contentModel->type==2?1:$is_system;
- $model->is_unique = intval($postdata['is_unique']);
- $model->is_base = intval($postdata['is_base']);
- $model->is_search = intval($postdata['is_search']);
- $model->is_add = intval($postdata['is_add']);
- $model->is_fullsearch = intval($postdata['is_fullsearch']);
- $model->is_add_admin = intval($postdata['is_add_admin']);
- $model->is_omnipotent = intval($postdata['is_omnipotent']);
- $model->is_listshow = intval($postdata['is_listshow']);
- $model->is_position = intval($postdata['is_position']);
- require BASE_PATH.'common'.DIRECTORY_SEPARATOR.'widget'.DIRECTORY_SEPARATOR.'fields'.DIRECTORY_SEPARATOR.$model->form_type.DIRECTORY_SEPARATOR.'config.inc.php';
- if(empty($model->min_length)){$model->min_length = intval($field_minlength);}
- if(empty($model->max_length)){$model->max_length = intval($field_maxlength);}
- $model->setting = !empty($_POST['setting'])?array2string($_POST['setting']):'';
- if($_POST['setting']['field_type'])$field_type = $_POST['setting']['field_type'];
- $model->unset_group_ids = !empty($_POST['unset_group_ids'])?join(",",$_POST['unset_group_ids']):'';
- $model->unset_role_ids = !empty($_POST['unset_role_ids'])?join(",",$_POST['unset_role_ids']):'';
- if(!$model->validate())
- {
- $msgdata = ['error' => 1,'msg' => $model->returnFirstError()];
- }
- else
- {
- if($model->save())
- {
- if(in_array($model->form_type,array('image','downfile')))
- {
- $model->max_length = $field_maxlength;
- }
- if($this->_editField(['field_type'=>$field_type,'field'=>$model->field,'max_length'=>$model->max_length,'table_name'=>$contentModel->table_name,'is_system'=>$model->is_system,'oldfield'=>$oldfield,'contentmodel_type'=>$contentModel->type])===true)
- {
- $msgdata = ['error' => 0,'msg' => '操作成功'];
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '操作失败'];
- }
- }
- echo_json($msgdata);
- }
- return $this->renderAjax('editfield',array('model'=>$model,'contentModel'=>$contentModel));
- }
- private function _addField($config)
- {
- extract($config);
- $default_value = isset($_POST['setting']['default_value']) ? new_add_slashes($_POST['setting']['default_value']) : '';
- //正整数 UNSIGNED && SIGNED
- $min_number = isset($_POST['setting']['min_number']) ? $_POST['setting']['min_number'] : 1;
- $decimal_digits = isset($_POST['setting']['decimal_digits']) ? $_POST['setting']['decimal_digits'] : '';
- if($decimal_digits<0)$decimal_digits=0;
- $save_format = isset($_POST['setting']['save_format']) ? $_POST['setting']['save_format'] : 'datetime';//日期保存格式
- if($contentmodel_type==2)//用户模型
- {
- $table_name = Yii::$app->db->tablePrefix.$table_name;
- }
- else
- {
- $table_name = $is_system?Yii::$app->db->tablePrefix.$table_name:Yii::$app->db->tablePrefix.$table_name.'_data';
- }
- switch($field_type) {
- case 'varchar':
- if(!isset($max_length)||empty($max_length)) $max_length = 255;
- $sql = "ALTER TABLE `$table_name` ADD `$field` VARCHAR( $max_length ) NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'tinyint':
- if(!isset($max_length)||empty($max_length)) $max_length = 3;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` ADD `$field` TINYINT( $max_length ) ".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'number':
- if(!isset($max_length)||empty($max_length)) $max_length = 10;
- $min_number = intval($min_number);
- $default_value = $decimal_digits == 0 ? intval($default_value) : floatval($default_value);
- if($decimal_digits==0)
- {
- $sql = "ALTER TABLE `$table_name` ADD `$field` INT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- }
- else
- {
- $sql = "ALTER TABLE `$table_name` ADD `$field` DECIMAL ( $max_length,$decimal_digits )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- }
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'smallint':
- if(!isset($max_length)||empty($max_length)) $max_length = 5;
- $min_number = intval($min_number);
- $sql = "ALTER TABLE `$table_name` ADD `$field` SMALLINT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'int':
- if(!isset($max_length)||empty($max_length)) $max_length = 10;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` ADD `$field` INT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'mediumint':
- if(!isset($max_length)||empty($max_length)) $max_length = 8;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` ADD `$field` INT( $max_length )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'mediumtext':
- $sql = "ALTER TABLE `$table_name` ADD `$field` MEDIUMTEXT NULL";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'text':
- $sql = "ALTER TABLE `$table_name` ADD `$field` TEXT NOT NULL";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'datetime':
- if($save_format=='int')$save_format='bigint(20)';
- $sql = "ALTER TABLE `$table_name` ADD `$field` $save_format NULL";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- //特殊自定义字段
- case 'pages':
- $sql = "ALTER TABLE `$table_name` ADD `pagination_type` TINYINT( 1 ) NOT NULL DEFAULT '0'";
- Yii::$app->db->createCommand($sql)->execute();
- $sql = "ALTER TABLE `$table_name` ADD `maxchar_perpage` MEDIUMINT( 6 ) NOT NULL DEFAULT '0'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'read_price':
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` ADD `read_price` decimal(12,2) unsigned NOT NULL default '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- $sql = "ALTER TABLE `$table_name` ADD `pay_type` tinyint(1) unsigned NOT NULL default '0'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- }
- return true;
- }
- private function _editField($config)
- {
- extract($config);
- $default_value = isset($_POST['setting']['default_value']) ? new_add_slashes($_POST['setting']['default_value']) : '';
- //正整数 UNSIGNED && SIGNED
- $min_number = isset($_POST['setting']['min_number']) ? $_POST['setting']['min_number'] : 1;
- $decimal_digits = isset($_POST['setting']['decimal_digits']) ? $_POST['setting']['decimal_digits'] : '';
- if($decimal_digits<0)$decimal_digits=0;
- $save_format = isset($_POST['setting']['save_format']) ? $_POST['setting']['save_format'] : 'datetime';//日期保存格式
- if($contentmodel_type==2)//用户模型
- {
- $table_name = Yii::$app->db->tablePrefix.$table_name;
- }
- else
- {
- $table_name = $is_system?Yii::$app->db->tablePrefix.$table_name:Yii::$app->db->tablePrefix.$table_name.'_data';
- }
- switch($field_type) {
- case 'varchar':
- if(empty($max_length)) $max_length = 255;
- $form_type = 'VARCHAR';
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` $form_type( $max_length ) NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'tinyint':
- if(empty($max_length)) $max_length = 3;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` TINYINT( $max_length ) ".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'number':
- if(empty($max_length)) $max_length = 10;
- $min_number = intval($min_number);
- $default_value = $decimal_digits == 0 ? intval($default_value) : floatval($default_value);
- if($decimal_digits==0)
- {
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` INT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- }
- else
- {
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` DECIMAL ( $max_length,$decimal_digits )".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- }
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'smallint':
- if(empty($max_length)) $max_length = 5;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` SMALLINT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'mediumint':
- if(empty($max_length)) $max_length = 8;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` MEDIUMINT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'int':
- if(empty($max_length)) $max_length = 10;
- $min_number = intval($min_number);
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` INT($max_length)".($min_number >= 0 ? 'UNSIGNED' : '')." NOT NULL DEFAULT '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'mediumtext':
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` MEDIUMTEXT NULL";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'text':
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` TEXT NOT NULL";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- case 'datetime':
- if($save_format=='int')$save_format='bigint(20)';
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` $save_format";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- //特殊自定义字段
- case 'pages':
- break;
- case 'read_price':
- $default_value = intval($default_value);
- $sql = "ALTER TABLE `$table_name` CHANGE `$oldfield` `$field` decimal(12,2) unsigned NOT NULL default '$default_value'";
- Yii::$app->db->createCommand($sql)->execute();
- break;
- }
- return true;
- }
- //删除字段
- public function actionDelfield()
- {
- $field_id = $this->getKeyId('field_id');
- $model = ContentModelField::findOne($field_id);
- check_record_exists($model);
- $contentModel = ContentModel::findOne($model->model_id);
- if($model->delete())
- {
- if($contentModel->type==2)
- {
- $tablename = Yii::$app->db->tablePrefix.$contentModel->table_name;
- }
- else
- {
- $tablename = $model->is_system?Yii::$app->db->tablePrefix.$contentModel->table_name:Yii::$app->db->tablePrefix.$contentModel->table_name.'_data';
- }
- $field = $model->field;
- if($model->form_type=='pages')
- {
- $sql = "ALTER TABLE `$tablename` DROP `pagination_type`";
- Yii::$app->db->createCommand($sql)->execute();
- $sql = "ALTER TABLE `$tablename` DROP `maxchar_perpage`";
- Yii::$app->db->createCommand($sql)->execute();
- }
- else
- {
- $sql = "ALTER TABLE `$tablename` DROP `$field`";
- Yii::$app->db->createCommand($sql)->execute();
- }
- $msgdata = ['error' => 0,'msg' => '成功'];
- }
- else
- {
- $msgdata = ['error' => 1,'msg' => '失败'];
- }
- echo_json($msgdata);
- }
- //批量排序
- public function actionSortfield()
- {
- $model_id = $this->getKeyId('model_id');
- $contentModel = ContentModel::findOne($model_id);
- check_record_exists($contentModel);
- $canChangeFields = array();
- $canChangeDataFields = array();
- $tableName = '';
- $tableName1 = '';
- $orderRs = array();
- $orderRs1 = array();
- $resultList = ContentModelField::findAll(['model_id'=>$model_id]);
- if(is_array($resultList))foreach($resultList as $result)
- {
- if($result->is_system)
- {
- $tableName = Yii::$app->db->tablePrefix.$contentModel->table_name;
- $orderRs[$result->field] = $result->list_order;
- $canChangeFields[] = $result->field;
- }
- else
- {
- $tableName1 = Yii::$app->db->tablePrefix.$contentModel->table_name.'_data';
- $orderRs1[$result->field] = $result->list_order;
- $canChangeDataFields[] = $result->field;
- }
- }
- $fieldList = array();
- $realOrder = array();
- $sql = "show full columns from ".$tableName."";
- $resultList = Yii::$app->db->createCommand($sql)->queryAll();
- if(is_array($resultList))foreach($resultList as $result)
- {
- $realOrder[$result['Field']] = $orderRs[$result['Field']];
- $fieldList[$result['Field']] = array('type'=>$result['Type'],'null'=>$result['Null'],'collation'=>$result['Collation'],'default'=>$result['Default']);
- }
- $fieldList1 = array();
- $realOrder1 = array();
- if(!empty($tableName1))
- {
- $sql = "show full columns from ".$tableName1."";
- $resultList = Yii::$app->db->createCommand($sql)->queryAll();
- if(is_array($resultList))foreach($resultList as $result)
- {
- $realOrder1[$result['Field']] = $orderRs1[$result['Field']];
- $fieldList1[$result['Field']] = array('type'=>$result['Type'],'null'=>$result['Null'],'collation'=>$result['Collation'],'default'=>$result['Default']);
- }
- }
- $orderRs = $realOrder;
- $orderRs1 = $realOrder1;
- asort($orderRs);
- asort($orderRs1);
- for($i=0;$i<count($orderRs);$i++)
- {
- $tempRs = array_keys(array_slice($orderRs,$i,1));
- $tempRs1 = array_keys(array_slice($orderRs,$i+1,1));
- if(!empty($tempRs)&&!empty($tempRs1))
- {
- if(!in_array($tempRs1[0],$canChangeFields))continue;
- $fieldInfo = $fieldList[$tempRs1[0]];
- $sql="ALTER TABLE ".$tableName." change `".$tempRs1[0]."` `".$tempRs1[0]."` ".$fieldInfo['type']." ";
- if($fieldInfo['null']=='NO')
- {
- $sql.=" NOT NULL ";
- if(!is_null($fieldInfo['default']))
- {
- if(!is_int($fieldInfo['default']))
- {
- $sql.=" default '".$fieldInfo['default']."' ";
- }
- else
- {
- $sql.=" default ".$fieldInfo['default']." ";
- }
- }
- }
- $sql.="AFTER ".$tempRs[0].";";
- }
- Yii::$app->db->createCommand($sql)->execute();
- }
- for($i=0;$i<count($orderRs1);$i++)
- {
- $tempRs = array_keys(array_slice($orderRs1,$i,1));
- $tempRs1 = array_keys(array_slice($orderRs1,$i+1,1));
- if(!empty($tempRs)&&!empty($tempRs1))
- {
- if(!in_array($tempRs1[0],$canChangeDataFields))continue;
- $fieldInfo = $fieldList1[$tempRs1[0]];
- $sql="ALTER TABLE ".$tableName1." change `".$tempRs1[0]."` `".$tempRs1[0]."` ".$fieldInfo['type']." ";
- if($fieldInfo['null']=='NO')
- {
- $sql.=" NOT NULL ";
- if(!is_null($fieldInfo['default']))
- {
- if(!is_int($fieldInfo['default']))
- {
- $sql.=" default '".$fieldInfo['default']."' ";
- }
- else
- {
- $sql.=" default ".$fieldInfo['default']." ";
- }
- }
- }
- $sql.="AFTER ".$tempRs[0]."";
- }
- Yii::$app->db->createCommand($sql)->execute();
- }
- $msgdata = ['error' => 0,'msg' => '表结构修改成功'];
- echo_json($msgdata);
- }
- }
|