|
@@ -3,7 +3,7 @@ use Dever;
|
|
|
use Manage\Lib\Page;
|
|
|
ini_set("memory_limit", -1);
|
|
|
set_time_limit(0);
|
|
|
-
|
|
|
+
|
|
|
class Update extends Page
|
|
|
{
|
|
|
public function __construct($load = '', $input = true)
|
|
@@ -119,7 +119,9 @@ class Update extends Page
|
|
|
foreach ($remote as $k => $v) {
|
|
|
$data['update'][$v[0]]['remote'] = Dever::url($v[1], array('value' => '', 'table' => $this->db->config['load'], 'id' => false));
|
|
|
if (isset($v[2]) && isset($data['option'][$v[2]]) && $data['option'][$v[2]] && $m = Dever::issets($data['option'][$v[2]][0], 'id')) {
|
|
|
- $result = Dever::call($v[1], array($m, $this->db->config['load'], false), 'api');
|
|
|
+ $path = 'api';
|
|
|
+ if (strstr($v[1], 'mapi')) $path = 'manage';
|
|
|
+ $result = Dever::call($v[1], array($m, $this->db->config['load'], false), $path);
|
|
|
if ($result) {
|
|
|
$this->setUpdate($info, $data, $result);
|
|
|
}
|
|
@@ -136,7 +138,7 @@ class Update extends Page
|
|
|
$data['desc'] = $this->config['desc'] ?? '';
|
|
|
$data['drag'] = $this->config['drag'] ?? false;
|
|
|
$this->layout($data);
|
|
|
- $this->control($data);
|
|
|
+ $data['control'] = $this->control($data);
|
|
|
$this->tab($data, 'step');
|
|
|
if (!$data['step']) {
|
|
|
$this->tab($data);
|
|
@@ -156,7 +158,7 @@ class Update extends Page
|
|
|
}
|
|
|
}
|
|
|
foreach ($info as $k => $v) {
|
|
|
- if ($v == null) {
|
|
|
+ if ($v === null) {
|
|
|
$v = '';
|
|
|
}
|
|
|
if (isset($data['field'][$k])) {
|
|
@@ -190,7 +192,9 @@ class Update extends Page
|
|
|
if ($field[$k]['type'] == 'cascader' && !isset($field[$k]['option'])) {
|
|
|
|
|
|
} else {
|
|
|
- $result = Dever::call($remote[$k][1], array($v, $this->db->config['load'], $info['id'] ?? false), 'api');
|
|
|
+ $path = 'api';
|
|
|
+ if (strstr($remote[$k][1], 'mapi')) $path = 'manage';
|
|
|
+ $result = Dever::call($remote[$k][1], array($v, $this->db->config['load'], $info['id'] ?? false), $path);
|
|
|
if ($result) {
|
|
|
$this->setUpdate($info, $data, $result);
|
|
|
}
|
|
@@ -244,34 +248,60 @@ class Update extends Page
|
|
|
|
|
|
private function control(&$data)
|
|
|
{
|
|
|
- $data['control'] = array();
|
|
|
- if (isset($this->config['control']) && $data['control'] = $this->config['control']) {
|
|
|
- foreach ($data['control'] as $k => $v) {
|
|
|
- foreach ($data['update'] as $k1 => $v1) {
|
|
|
- if ($v1['key'] == $k) {
|
|
|
- $show = true;
|
|
|
- foreach ($v as $k2 => $v2) {
|
|
|
- if (is_array($v2)) {
|
|
|
- $temp = false;
|
|
|
- foreach ($v2 as $k3 => $v3) {
|
|
|
- if (is_array($data['field'][$k2]) && in_array($v3, $data['field'][$k2])) {
|
|
|
- $temp = true;
|
|
|
- } elseif ($data['field'][$k2] == $v3) {
|
|
|
- $temp = true;
|
|
|
- }
|
|
|
- }
|
|
|
- $show = $temp;
|
|
|
- } else {
|
|
|
- if (is_array($data['field'][$k2]) && !in_array($v2, $data['field'][$k2])) {
|
|
|
- $show = false;
|
|
|
- } elseif ($data['field'][$k2] != $v2) {
|
|
|
- $show = false;
|
|
|
- }
|
|
|
+ $result = array();
|
|
|
+ if (isset($this->config['control']) && $this->config['control']) {
|
|
|
+ foreach ($this->config['control'] as $k => $v) {
|
|
|
+ if (is_string($v)) {
|
|
|
+ parse_str($v, $v);
|
|
|
+ }
|
|
|
+ if (strstr($k, ',')) {
|
|
|
+ $k = explode(',', $k);
|
|
|
+ foreach ($k as $k2) {
|
|
|
+ if (isset($data['update'])) $this->controlShow($data, $k2, $v);
|
|
|
+ $result[$k2] = $v;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (isset($data['update'])) $this->controlShow($data, $k, $v);
|
|
|
+ $result[$k] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function controlShow(&$data, $k, $v)
|
|
|
+ {
|
|
|
+ foreach ($data['update'] as $k1 => $v1) {
|
|
|
+ if ($v1['key'] == $k) {
|
|
|
+ $show = true;
|
|
|
+ foreach ($v as $k2 => $v2) {
|
|
|
+ if (is_array($v2)) {
|
|
|
+ $temp = false;
|
|
|
+ foreach ($v2 as $k3 => $v3) {
|
|
|
+ if (is_array($data['field'][$k2]) && in_array($v3, $data['field'][$k2])) {
|
|
|
+ $temp = true;
|
|
|
+ } elseif ($data['field'][$k2] == $v3) {
|
|
|
+ $temp = true;
|
|
|
}
|
|
|
}
|
|
|
- $data['update'][$k1]['show'] = $show;
|
|
|
+ $show = $temp;
|
|
|
+ } else {
|
|
|
+ if (is_array($data['field'][$k2]) && !in_array($v2, $data['field'][$k2])) {
|
|
|
+ $show = false;
|
|
|
+ } elseif ($data['field'][$k2] != $v2) {
|
|
|
+ $show = false;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
+ $data['update'][$k1]['show'] = $show;
|
|
|
+ if ($show == false && isset($data['update'][$k1]['field'])) {
|
|
|
+
|
|
|
+ if ($data['update'][$k1]['type'] == 'editor') {
|
|
|
+ $data['field'][$v1['key']] = '';
|
|
|
+ } else {
|
|
|
+ unset($data['field'][$v1['key']]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -358,6 +388,7 @@ class Update extends Page
|
|
|
if (isset($input['id']) && $input['id'] > 0) {
|
|
|
$id = $input['id'];
|
|
|
}
|
|
|
+ $control = $this->control($data);
|
|
|
foreach ($update as $k => $v) {
|
|
|
if (isset($input[$v['key']])) {
|
|
|
if (isset($v['rules'])) {
|
|
@@ -388,7 +419,7 @@ class Update extends Page
|
|
|
$other[$v['key']] = array($v['where'], $v['content']['field'], $v['content']['drag'], $input[$v['key']]);
|
|
|
}
|
|
|
} else {
|
|
|
- $this->doData($data, $v['key'], $input[$v['key']], $this->config['field']);
|
|
|
+ $this->doData($data, $v['key'], $input[$v['key']], $this->config['field'], $control);
|
|
|
}
|
|
|
} elseif ($id) {
|
|
|
$data[$v['key']] = '';
|
|
@@ -401,7 +432,9 @@ class Update extends Page
|
|
|
Dever::error('无效数据');
|
|
|
}
|
|
|
if ($data) {
|
|
|
- $this->exists($id, $data, $this->config['field']);
|
|
|
+ if (isset($this->config['check']) && $this->config['check']) {
|
|
|
+ $this->exists($this->db, $this->config['check'], $id, $data, $this->config['field']);
|
|
|
+ }
|
|
|
$result = $this->start($id, $data);
|
|
|
if ($result == 'end') {
|
|
|
return '操作成功';
|
|
@@ -431,7 +464,7 @@ class Update extends Page
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private function doData(&$data, $key, $value, $field = array())
|
|
|
+ private function doData(&$data, $key, $value, $field = array(), $control = array())
|
|
|
{
|
|
|
if (is_array($value)) {
|
|
|
if (isset($value[0])) {
|
|
@@ -441,7 +474,20 @@ class Update extends Page
|
|
|
}
|
|
|
}
|
|
|
if (isset($field[$key]) && isset($field[$key]['field'])) {
|
|
|
- $key = $field[$key]['field'];
|
|
|
+ if ($control && isset($control[$key])) {
|
|
|
+
|
|
|
+ $state = true;
|
|
|
+ foreach ($control[$key] as $k => $v) {
|
|
|
+ if ($data[$k] != $v) {
|
|
|
+ $state = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($state) {
|
|
|
+ $key = $field[$key]['field'];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $key = $field[$key]['field'];
|
|
|
+ }
|
|
|
}
|
|
|
if ($value && isset($field[$key]) && $handle = Dever::issets($field[$key], 'handle')) {
|
|
|
$value = Dever::call($handle, array($value));
|
|
@@ -454,37 +500,40 @@ class Update extends Page
|
|
|
} elseif (isset($field[$key]) && isset($field[$key]['type']) && $field[$key]['type'] == 'date' && $value) {
|
|
|
$value = \Dever\Helper\Date::mktime($value);
|
|
|
}
|
|
|
+
|
|
|
+ if (empty($data[$key])) {
|
|
|
+ $data[$key] = trim($value);
|
|
|
+ }
|
|
|
+ */
|
|
|
$data[$key] = trim($value);
|
|
|
}
|
|
|
|
|
|
- private function exists($id, $data, $field)
|
|
|
+ private function exists($db, $check, $id, $data, $field)
|
|
|
{
|
|
|
- if (isset($this->config['check']) && $this->config['check']) {
|
|
|
- $check = explode(',', $this->config['check']);
|
|
|
- $where = array();
|
|
|
- $name = array();
|
|
|
- foreach ($check as $k => $v) {
|
|
|
- if (isset($data[$v]) && $data[$v]) {
|
|
|
- if (isset($field[$v]) && isset($field[$v]['name'])) {
|
|
|
- $n = $field[$v]['name'];
|
|
|
- } elseif (isset($this->db->config['struct'][$v])) {
|
|
|
- $n = $this->db->config['struct'][$v]['name'];
|
|
|
- } else {
|
|
|
- $n = $v;
|
|
|
- }
|
|
|
- $where[$v] = $data[$v];
|
|
|
- $name[] = $n;
|
|
|
+ $check = explode(',', $check);
|
|
|
+ $where = array();
|
|
|
+ $name = array();
|
|
|
+ foreach ($check as $k => $v) {
|
|
|
+ if (isset($data[$v]) && $data[$v]) {
|
|
|
+ if (isset($field[$v]) && isset($field[$v]['name'])) {
|
|
|
+ $n = $field[$v]['name'];
|
|
|
+ } elseif (isset($db->config['struct'][$v])) {
|
|
|
+ $n = $db->config['struct'][$v]['name'];
|
|
|
+ } else {
|
|
|
+ $n = $v;
|
|
|
}
|
|
|
+ $where[$v] = $data[$v];
|
|
|
+ $name[] = $n;
|
|
|
}
|
|
|
- if ($where) {
|
|
|
- if ($id) {
|
|
|
- $where['id'] = array('!=', $id);
|
|
|
- }
|
|
|
- $info = $this->db->find($where);
|
|
|
- if ($info) {
|
|
|
- $name = implode('、', $name);
|
|
|
- Dever::error($name . '已存在');
|
|
|
- }
|
|
|
+ }
|
|
|
+ if ($where) {
|
|
|
+ if ($id) {
|
|
|
+ $where['id'] = array('!=', $id);
|
|
|
+ }
|
|
|
+ $info = $db->find($where);
|
|
|
+ if ($info) {
|
|
|
+ $name = implode('、', $name);
|
|
|
+ Dever::error($name . '已存在');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -570,12 +619,16 @@ class Update extends Page
|
|
|
if ($drag) {
|
|
|
$value[$drag] = $k1+1;
|
|
|
}
|
|
|
+ $db = Dever::db($k);
|
|
|
+ if (isset($db->config['manage']['update']['check'])) {
|
|
|
+ $this->exists($db, $db->config['manage']['update']['check'], $value['id'], $value, $db->config['manage']['update']['field']);
|
|
|
+ }
|
|
|
if (isset($value['id']) && $value['id'] > 0) {
|
|
|
$id = $value['id'];
|
|
|
unset($value['id']);
|
|
|
- Dever::db($k)->update($id, $value);
|
|
|
+ $db->update($id, $value);
|
|
|
} else {
|
|
|
- Dever::db($k)->insert($value);
|
|
|
+ $db->insert($value);
|
|
|
}
|
|
|
}
|
|
|
}
|