|
@@ -3245,8 +3245,11 @@ class Database
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
- private function update_struct($config, $col, $data, $tab = -1, $prefix = '')
|
|
|
+ public function update_struct($config, $col, $data, $tab = -1, $prefix = '', $layadmin = false)
|
|
|
{
|
|
|
+ if (!$layadmin) {
|
|
|
+ $layadmin = layadmin();
|
|
|
+ }
|
|
|
$result = array();
|
|
|
$upload_call = '';
|
|
|
if (isset($config['manage']['upload'])) {
|
|
@@ -3292,7 +3295,7 @@ class Database
|
|
|
if ($v['update'] == 'hidden') {
|
|
|
$style = 'style="display:none"';
|
|
|
}
|
|
|
- if (layadmin()) {
|
|
|
+ if ($layadmin) {
|
|
|
$result[$k] = '<div class="layui-form-item ' . $class . '" '.$style.'><div classs="layui-col-lg6">';
|
|
|
|
|
|
if (is_array($v['update'])) {
|
|
@@ -3449,7 +3452,7 @@ class Database
|
|
|
*/
|
|
|
public function update_html($param, $key, $index, $data, &$result, $prefix = '')
|
|
|
{
|
|
|
- if (isset($param['name']) && $param['update'] != 'hidden' && isset($param['update'])) {
|
|
|
+ if (isset($param['name']) && isset($param['update']) && $param['update'] != 'hidden' && $param['update'] != 'load') {
|
|
|
$result .= Html::pageLeft($param);
|
|
|
}
|
|
|
|
|
@@ -3495,7 +3498,7 @@ class Database
|
|
|
}
|
|
|
|
|
|
# 处理同步
|
|
|
- if (isset($param['sync']) && strpos($key, '-')) {
|
|
|
+ if (isset($param['sync']) && strpos($key, '-') && $param['update'] != 'load') {
|
|
|
$temp = explode('-', $key);
|
|
|
if (isset($data[$param['sync'][0]])) {
|
|
|
if (isset($temp[2])) {
|
|
@@ -3514,10 +3517,20 @@ class Database
|
|
|
$param['value'] = $load;
|
|
|
}
|
|
|
}
|
|
|
- if (!isset($temp[2])) {
|
|
|
+ if (!isset($temp[2]) && is_array($param['update'])) {
|
|
|
$order = false;
|
|
|
- $config = Dever::db($temp[0] . '/' . $temp[1])->config;
|
|
|
- $param['update'] = $config['struct'];
|
|
|
+ if (isset($param['update'][0]) && is_string($param['update'][0]) && strstr($param['update'][0], '.')) {
|
|
|
+ if (isset($param['update'][1]) && $param['update'][1]) {
|
|
|
+ $param['update_load'] = $param['update'][0];
|
|
|
+ $param['update'] = 'load';
|
|
|
+ } else {
|
|
|
+ $param['update'] = Dever::load($param['update'][0]);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $config = Dever::db($temp[0] . '/' . $temp[1])->config;
|
|
|
+ $param['update'] = $config['struct'];
|
|
|
+ }
|
|
|
+
|
|
|
if (isset($config['manage']['tab'])) {
|
|
|
$param['prefix'] = $prefix;
|
|
|
$param['tab'] = $config['manage']['tab'];
|
|
@@ -3641,6 +3654,10 @@ class Database
|
|
|
$param['upload_search_value'] = $this->value($param['upload_search_value'], $data + $param);
|
|
|
}
|
|
|
|
|
|
+ if ($param['update'] == 'load') {
|
|
|
+ $param['where_id'] = $this->id;
|
|
|
+ }
|
|
|
+
|
|
|
$result .= Html::$method($param);
|
|
|
}
|
|
|
|
|
@@ -3883,9 +3900,9 @@ class Database
|
|
|
$index = $t[0] . '/' . $t[1];
|
|
|
|
|
|
$update_col[$i][$index] = $m_col;
|
|
|
- $update_set[$i][$index][$num][$temp[1]] = $v;
|
|
|
- $update_add[$i][$index][$num][$temp[1]] = $v;
|
|
|
- $update_add[$i][$index][$num][$m_col] = $s_value;
|
|
|
+ $update_set[$i][$index][$num]['set_' . $temp[1]] = $v;
|
|
|
+ $update_add[$i][$index][$num]['add_' . $temp[1]] = $v;
|
|
|
+ $update_add[$i][$index][$num]['add_' . $m_col] = $s_value;
|
|
|
$update_id[$i][$index][$num][$m_col] = $s_value;
|
|
|
if ($this->id && $temp[1] == 'id') {
|
|
|
$update_id[$i][$index][$num]['id'] = $v;
|
|
@@ -3938,14 +3955,40 @@ class Database
|
|
|
|
|
|
if (isset($temp[2])) {
|
|
|
$update_col[$i][$index] = $m_col;
|
|
|
- $update_set[$i][$index][0][$temp[2]] = $v;
|
|
|
- //$update_set[$i][$index][0][$m_col] = $s_value;
|
|
|
+ $update_set[$i][$index][0]['set_' . $temp[2]] = $v;
|
|
|
+ //$update_set[$i][$index][0]['set_' . $m_col] = $s_value;
|
|
|
|
|
|
- $update_add[$i][$index][0][$temp[2]] = $v;
|
|
|
- $update_add[$i][$index][0][$m_col] = $s_value;
|
|
|
+ $update_add[$i][$index][0]['add_' . $temp[2]] = $v;
|
|
|
+ $update_add[$i][$index][0]['add_' . $m_col] = $s_value;
|
|
|
|
|
|
$update_id[$i][$index][0][$m_col] = $s_value;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ $temp = explode('-', $k);
|
|
|
+ if (isset($temp[2])) {
|
|
|
+ $k = $temp[0] . '-' . $temp[1];
|
|
|
+ if (isset($config['struct'][$k]) && isset($config['struct'][$k]['sync'])) {
|
|
|
+ $s_col = $config['struct'][$k]['sync'][0];
|
|
|
+ $m_col = $config['struct'][$k]['sync'][1];
|
|
|
+ if ($s_col == 'id') {
|
|
|
+ $s_value = $this->id;
|
|
|
+ } else {
|
|
|
+ $s_one = $this->load('one', $this->id);
|
|
|
+ $s_value = $s_one[$s_col];
|
|
|
+ }
|
|
|
+
|
|
|
+ $index = $temp[0] . '/' . $temp[1];
|
|
|
+ $temp[2] = ltrim($temp[2], '_');
|
|
|
+ $temp = explode('_', $temp[2]);
|
|
|
+ $update_col[$i][$index] = $m_col;
|
|
|
+ $up = array();
|
|
|
+ $up['add_' . $temp[0] . '_id'] = $temp[1];
|
|
|
+ $up['add_' . $temp[0] . '_value'] = $v;
|
|
|
+ $up['add_' . $m_col] = $s_value;
|
|
|
+ $update_add[$i][$index][] = $up;
|
|
|
+ $update_delete[$i][$index][][$m_col] = $s_value;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
if (is_array($v)) {
|
|
@@ -3976,8 +4019,7 @@ class Database
|
|
|
}
|
|
|
//print_r($update_set);
|
|
|
//print_r($update_id);
|
|
|
- //print_r($update_add);
|
|
|
- //print_r($update_set);die;
|
|
|
+ //print_r($update_add);die;
|
|
|
//print_r($input);
|
|
|
//print_r($update_other);
|
|
|
//print_r($config['struct']);die;
|
|
@@ -4024,26 +4066,34 @@ class Database
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (isset($update_id[$k]) && $update_id[$k]) {
|
|
|
- foreach ($update_set[$k] as $k1 => $v1) {
|
|
|
+ if (isset($update_add[$k]) && $update_add[$k]) {
|
|
|
+ foreach ($update_add[$k] as $k1 => $v1) {
|
|
|
$col = $update_col[$k][$k1];
|
|
|
foreach ($v1 as $k2 => $v2) {
|
|
|
- if (isset($update_id[$k][$k1][$k2][$col])) {
|
|
|
- $update_id[$k][$k1][$k2][$col] = $id;
|
|
|
- }
|
|
|
- if (isset($update_add[$k][$k1][$k2][$col])) {
|
|
|
- $update_add[$k][$k1][$k2][$col] = $id;
|
|
|
+ if (isset($update_set[$k][$k1][$k2][$col])) {
|
|
|
+ $update_set[$k][$k1][$k2][$col] = $id;
|
|
|
}
|
|
|
if (isset($v2[$col])) {
|
|
|
$v2[$col] = $id;
|
|
|
}
|
|
|
- $check = Dever::load($k1 . '-one', $update_id[$k][$k1][$k2]);
|
|
|
+
|
|
|
+ $check = false;
|
|
|
+ if (isset($update_id[$k][$k1][$k2])) {
|
|
|
+ if (isset($update_id[$k][$k1][$k2][$col])) {
|
|
|
+ $update_id[$k][$k1][$k2][$col] = $id;
|
|
|
+ }
|
|
|
+ $check = Dever::load($k1 . '-one', $update_id[$k][$k1][$k2]);
|
|
|
+ } elseif (isset($update_delete[$k][$k1][$k2])) {
|
|
|
+ # 清理
|
|
|
+ Dever::load($k1 . '-delete', $update_delete[$k][$k1][$k2]);
|
|
|
+ }
|
|
|
+
|
|
|
if ($check) {
|
|
|
- unset($v2['id']);
|
|
|
- $v2['where_id'] = $check['id'];
|
|
|
- Dever::load($k1 . '-update', $v2);
|
|
|
+ unset($update_set[$k][$k1][$k2]['set_id']);
|
|
|
+ $update_set[$k][$k1][$k2]['where_id'] = $check['id'];
|
|
|
+ Dever::load($k1 . '-update', $update_set[$k][$k1][$k2]);
|
|
|
} else {
|
|
|
- Dever::load($k1 . '-insert', $update_add[$k][$k1][$k2]);
|
|
|
+ Dever::load($k1 . '-insert', $v2);
|
|
|
}
|
|
|
}
|
|
|
}
|