123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?php
- namespace Manage\Src;
- use Dever;
- use Manage\Src\Lib\Input as Html;
- class Opt
- {
- # 建立的索引名
- const INDEX = 'i1';
-
- public function push($param = false)
- {
- $param = $param ? $param : json_decode(base64_decode(Dever::input('param')), true);
-
- if ($param) {
- foreach ($param as $k => $v) {
- $k = explode('.', $k);
- $time = $v['time'];
- unset($v['time']);
- $this->update($k[0], $k[1], implode(',', $v), false, $time);
- }
- }
-
- return 1;
- }
-
- public function get($id)
- {
- $opt = is_array($id) ? $id : Dever::db('manage/opt')->one($id);
-
- $db = Dever::db($opt['project'] . '/' . $opt['table']);
- if (empty($db->config['lang'])) {
- return;
- }
- $result['table'] = $db->config['lang'] . '<br />' . $opt['table'];
-
- $result['total'] = Dever::load($opt['project'] . '/' . $opt['table'] . '-total');
-
- $table = '<b>[表结构]</b>:';
-
- if ($result['total'] > 0) {
- $table .= '数据总数('.$result['total'].')';
- }
-
- $table .= '<table border=1 width=100% height=100%>';
- $table .= Dever::tbody(array('字段', '类型-长度', '名称'));
- foreach ($db->config['struct'] as $k => $v) {
- if (isset($v['type'])) {
- $temp = Html::cue(array('name' => $v['name']));
- $v['name'] = $temp['name'];
- $table .= Dever::tbody(array($k, $v['type'], $v['name']));
- }
- }
- $table .= '</table>';
-
- $table .= '<br /><b>[常用字段]</b>:<table border=1 width=100% height=100%>';
- $table .= Dever::tbody(array('字段', '说明'));
- $col = explode(',', $opt['col']);
-
- $index = array();
- foreach ($col as $k => $v) {
- if (isset($db->config['struct'][$v])) {
- $struct = $db->config['struct'][$v];
- if ($v == 'id') {
- $struct['name'] = '<font style="color:red">主键</font>,无需索引';
- } elseif ((isset($struct['option']) && is_array($struct['option']) && count($struct['option']) <= 2) || strpos($struct['type'], 'tinyint') !== false) {
- $struct['name'] = '<font style="color:red">不同值较少</font>,无需索引';
- } else {
- $index[$v] = $v;
- }
- $table .= Dever::tbody(array($v, $struct['name']));
- }
- }
- $table .= '</table>';
-
- if ($opt['col_index']) {
- $table .= '<br /><b style="color:red">已为('.$opt['col_index'].')建立索引,版本号:<input type="text" id="version_'.$opt['id'].'" class="form-control layui-input" style="width:300px;display: inline;" value="'.$opt['version'].'"></b>';
- } else {
- $table .= '<input type="hidden" id="version_'.$opt['id'].'" class="form-control " value="0">';
- }
-
- if ($index) {
- $index = implode(',', $index);
-
- $result['index'] = $index;
-
- $table .= '<br /><br /><b style="color:blue">建议索引:'.self::INDEX.'-<input type="text" style="width:300px;display: inline;" id="index_'.$opt['id'].'" class="form-control layui-input" value="'.$index.'"></b>';
-
- $url = Dever::url('opt.index?id=' . $opt['id']);
-
- $table .= ' <a class="btn btn-default layui-btn layuiadmin-btn-list" onclick="load(\''.$url.'\' + \'&version=\' + $(\'#version_'.$opt['id'].'\').val() + \'&index=\' + $(\'#index_'.$opt['id'].'\').val())">点此更新索引</a>';
- }
-
- $result['text'] = $table;
-
- return $result;
- }
-
- public function index_api()
- {
- $id = Dever::input('id');
- $config = Dever::load('manage/opt-one', $id);
- if ($config) {
- $info = $this->get($config);
-
- if (isset($info['index'])) {
- $index = array();
-
- $info['index'] = Dever::input('index', $info['index']);
-
- $index['version'] = Dever::input('version', 0);
-
- $index['version'] += 1;
-
- $index[$index['version']] = array
- (
- self::INDEX => $info['index']
- );
-
- Dever::load($config['project'] . '/' . $config['table'] . '-index', $index);
-
- Dever::load('manage/opt-update', array('set_status' => 2, 'set_version' => $index['version'], 'set_col_index' => $info['index'], 'where_id' => $id));
- }
- }
-
- Dever::out('yes');
- }
-
- private function update($project, $table, $col, $method = false, $time = 0)
- {
- if ($project == 'manage') {
- return;
- }
- $param['option_project'] = $project;
- $param['option_table'] = $table;
- if ($method) $param['option_method'] = $method;
- $id = -1;
-
- if ($col) {
- $info = Dever::db('manage/opt')->one($param);
- if ($info) {
- $param['where_id'] = $info['id'];
- $param['set_col'] = array();
- $col = explode(',', $col);
- $info['col'] = explode(',', $info['col']);
- foreach ($info['col'] as $v) {
- $param['set_col'][$v] = $v;
- }
- foreach ($col as $v) {
- $param['set_col'][$v] = $v;
- }
- $param['set_col'] = implode(',', $param['set_col']);
- $param['set_time'] = $time;
- $param['set_num'] = 1;
- Dever::db('manage/opt')->updateNum($param);
- $id = $info['id'];
- } else {
- $param['add_project'] = $param['option_project'];
- $param['add_table'] = $param['option_table'];
- if($method) $param['add_method'] = $param['option_method'];
- $param['add_col'] = $col;
- $param['add_time'] = $time;
- $param['add_num'] = 1;
- $param['add_status'] = 1;
- $id = Dever::db('manage/opt')->insert($param);
- }
- }
-
- return $id;
- }
- }
|