homepagePHP/app/Common/Coder/ADE/ADECoder.class.php

267 lines
11 KiB
PHP
Executable File

<?php
namespace Common\Coder\ADE;
use Common\Coder\Coder;
class ADECoder extends Coder{
public function __construct() {
parent::__construct();
$this->_name = '增删查改快速生成器';
$this->_desc = '可快速生成带有新增删除修改启用禁用的列表功能';
$this->_namespace = str_replace('\\', '/', __NAMESPACE__);
$this->_view = CODER_DIR . '/ADE/View/index.html';
}
public function displayVew($log_id = ''){
$this->assign('meta_title', $this->getName());
$this->assign('id', 'ADE');
if($log_id){
$ent = D('CoderLog')->getOne($log_id);
$this->assign('coder_log', json_decode($ent['content'], true));
$this->assign('log_id', $log_id);
}
$this->display($this->getView());
}
public function logList(){
$model = D('CoderLog');
$map['coder_name'] = 'ADE';
$count = $model->getListForCount($map);
$per_page = C('ADMIN_PER_PAGE_NUM', null, false);
if($per_page === false){
$page = new \Gy_Library\GyPage($count);
}
else{
$page = new \Gy_Library\GyPage($count, $per_page);
}
$data_list = $model->getListForPage($map, $page->nowPage, $page->listRows, 'id desc');
$builder = new \Qscmf\Builder\ListBuilder();
$builder = $builder->setMetaTitle($this->_name . '生成记录')
->addTopButton('delete');
$builder->setNID(301)
->addTableColumn('name', '控制器名称', '', '', false)->addTableColumn('create_date', '创建时间', 'fun', 'date("Y-m-d H:i:s",__data_id__)', false) ->addTableColumn('right_button', '操作', 'btn')
->setTableDataList($data_list)
->setTableDataPage($page->show())
->addRightButton('edit')
->addRightButton('delete')
->display();
}
public function generate($save_flag = ''){
$this->dbname = '';
if(IS_POST){
parent::autoCheckToken();
$data = I('post.');
if($data['log_id']){
$log_data = D('CoderLog')->getOne($data['log_id']);
}
$log_data['coder_name'] = 'ADE';
$log_data['content'] = json_encode($data);
$log_data['create_date'] = time();
$log_data['name'] = $data['controller_name'];
if(isset($log_data['id'])){
D('CoderLog')->save($log_data);
}
else{
D('CoderLog')->add($log_data);
}
if($save_flag){
$this->success('保存成功', U('admin/coder/coderLog', array('id' => 'ADE')));
return;
}
//创建表 begin
$table_maker = new \Gy_Library\TableMaker();
$table_maker->setTableName($data['table_name']);
$show_columns = array();
$add_columns = array();
$select_search = array();
$like_search = array();
$columns = array();
$add_n = 0;
$list_n = 0;
foreach($data['column_name'] as $k => $v){
$column['name'] = $v;
$column['column_type'] = $data['column_type'][$k];
$column['comment'] = $data['comment'][$k];
$column['require'] = $data['require'][$k];
$table_maker->addColumns($column);
$columns[] = $column;
if($data['list_show'][$k] == 1){
$show_columns[] = array(
'name' => $v,
'type' => $data['list_show_type'][$list_n],
'title' => $data['comment'][$k],
'fun' => $data['list_show_fun'][$list_n],
'edit' => ($data['list_edit'][$list_n] == 1)
);
if($data['list_show_select_search'][$list_n] == 1){
$select_search[] = array(
'title' => $data['comment'][$k],
'name' => $v,
'fun' => $data['list_show_select_options_fun'][$list_n]
);
}
if($data['list_show_like_search'][$list_n] == 1){
$like_search[$v] = $data['comment'][$k];
}
$list_n++;
}
if($data['add_show'][$k] == 1){
$add_columns[] = array(
'name' => $v,
'type' => $data['add_show_type'][$add_n],
'title' => $data['comment'][$k],
'options_fun' => $data['add_show_options_fun'][$add_n],
'extra_attr' => $data[$prefix . 'add_show_extra_attr'][$add_n],
'default' => $data[$prefix . 'add_show_default'][$add_n],
'tips' => $data[$prefix. 'add_show_tips'][$add_n]
);
$add_n++;
}
}
if($table_maker->make() === false){
$this->error($table_maker->getError());
}
//创建表 end
//创建model begin
$view = new \Think\View();
$view->assign('table_name', parse_name($data['table_name'], 1));
$view->assign('add_columns', $add_columns);
$view->assign('columns', $columns);
$content = $view->fetch(CODER_DIR . '/ADE/tpl/model.tpl');
$content = "<?php
{$content}";
$file = APP_PATH . 'Common/Model/' . parse_name($data['table_name'], 1) . 'Model' . EXT;
file_put_contents($file,$content);
//创建model end
$nid = $this->_createNode($data);
//创建controller begin
$controller_view = new \Think\View();
$controller_view->assign('controller_name', ucfirst($data['controller_name']));
$controller_view->assign('model_name', parse_name($data['table_name'], 1));
$controller_view->assign('list_title', $data['list_title']);
$controller_view->assign('nid', $nid);
$controller_view->assign('action', array_flip($data['action']));
$controller_view->assign('show_columns', $show_columns);
$controller_view->assign('add_columns', $add_columns);
$controller_view->assign('select_search', $select_search);
$like_search_arr = array();
foreach($like_search as $k=>$v){
$like_search_arr[] = "'{$k}'=>'{$v}'";
}
if($like_search_arr){
$like_search_str = implode(',', $like_search_arr);
$like_search_str = "array({$like_search_str})";
}
$controller_view->assign('like_search', $like_search_str);
$controller_content = $controller_view->fetch(CODER_DIR . '/ADE/tpl/controller.tpl');
$controller_content = "<?php
{$controller_content}";
$file = APP_PATH . 'Admin/Controller/' . ucfirst($data['controller_name']) . 'Controller' . EXT;
file_put_contents($file,$controller_content);
//创建controller end
$this->success('成功');
}
}
private function _createNode($data){
$controller_node_data['name'] = $data['controller_name'];
$controller_node_data['title'] = $data['list_title'] . '管理';
$controller_node_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$controller_node_data['pid'] = 1;
$controller_node_data['level'] = \Gy_Library\DBCont::LEVEL_CONTROLLER;
$controller_id = D('Node')->add($controller_node_data);
$action_node_data['name'] = 'index';
$action_node_data['title'] = $data['list_title'] . '列表';
$action_node_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$action_node_data['sort'] = 0;
$action_node_data['pid'] = $controller_id;
$action_node_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
$action_node_data['menu_id'] = $data['menu_id'];
$action_id = D('Node')->add($action_node_data);
if(in_array('add', $data['action'])){
$add_data['name'] = 'add';
$add_data['title'] = '新增';
$add_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$add_data['pid'] = $controller_id;
$add_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
D('Node')->add($add_data);
}
if(in_array('edit', $data['action'])){
$edit_data['name'] = 'edit';
$edit_data['title'] = '修改';
$edit_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$edit_data['pid'] = $controller_id;
$edit_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
D('Node')->add($edit_data);
}
if(in_array('delete', $data['action'])){
$del_data['name'] = 'delete';
$del_data['title'] = '删除';
$del_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$del_data['pid'] = $controller_id;
$del_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
D('Node')->add($del_data);
}
if(in_array('forbid_resume', $data['action'])){
$forbid_data['name'] = 'forbid';
$forbid_data['title'] = '禁用';
$forbid_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$forbid_data['pid'] = $controller_id;
$forbid_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
D('Node')->add($forbid_data);
$resume_data['name'] = 'resume';
$resume_data['title'] = '启用';
$resume_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$resume_data['pid'] = $controller_id;
$resume_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
D('Node')->add($resume_data);
}
if(in_array('save', $data['action'])){
$save_data['name'] = 'save';
$save_data['title'] = '保存';
$save_data['status'] = \Gy_Library\DBCont::NORMAL_STATUS;
$save_data['pid'] = $controller_id;
$save_data['level'] = \Gy_Library\DBCont::LEVEL_ACTION;
D('Node')->add($save_data);
}
return $action_id;
}
}