strategyList = Config::pull('strategy'); } public function index() { $groups = GroupModel::select()->order('id', 'desc')->each(function ($item) { $item->strategy_str = isset($this->strategyList[$item->strategy]) ? $this->strategyList[$item->strategy]['name'] : lang('Unknown'); return $item; }); $this->assign([ 'groups' => $groups, 'strategy_list' => $this->strategyList ]); return $this->fetch(); } public function add() { if ($this->request->isPost()) { try { $data = $this->request->post(); $validate = $this->validate($data, 'Group'); if (true !== $validate) { throw new Exception($validate); } if (!GroupModel::create($data)) { throw new Exception(lang('Add failed')); } } catch (Exception $e) { $this->error($e->getMessage()); } $this->success(lang('Added successfully')); } } public function edit() { if ($this->request->isPost()) { try { $data = $this->request->post(); $validate = $this->validate($data, 'Group'); if (true !== $validate) { throw new Exception($validate); } $data['default'] = array_key_exists('default', $data) ? 1 : 0; if ($data['default'] === 0) { if (!GroupModel::where('default', 1)->where('id', 'neq', $data['id'])->count()) { throw new Exception(lang('Keep at least one default group')); } } if (!GroupModel::update($data)) { throw new Exception(lang('Edit failed')); } } catch (Exception $e) { $this->error($e->getMessage()); } $this->success(lang('Edit succeeded')); } } public function del() { if ($this->request->isPost()) { Db::startTrans(); try { $id = $this->request->post('id'); if (1 == $id) { throw new Exception(lang('The default group cannot be deleted')); } $group = GroupModel::find($id); // 至少保留一个默认分组 $defaultId = GroupModel::where('default', 1)->where('id', 'neq', $id)->value('id'); if (!$defaultId) { throw new Exception(lang('Keep at least one default group')); } // 转移该组下的用户到默认分组 \app\common\model\Users::where('group_id', $group->id)->setField('group_id', $defaultId); $group->delete(); Db::commit(); } catch (Exception $e) { Db::rollback(); $this->error($e->getMessage()); } $this->success(lang('Delete succeeded')); } } public function getGroup() { if ($this->request->isPost()) { $id = $this->request->post('id'); $this->success('success', null, GroupModel::find($id)); } } public function setDefault() { if ($this->request->isPost()) { $id = $this->request->post('id'); $value = $this->request->post('value'); if (1 != $value) { if (!GroupModel::where('default', 1)->where('id', 'neq', $id)->count()) { $this->error(lang('Keep at least one default group')); } } if (!GroupModel::update([ 'id' => $id, 'default' => $value ])) { $this->error(lang('Setting failed')); } $this->success(lang('Setting succeeded')); } } public function setStrategy() { if ($this->request->isPost()) { $id = $this->request->post('id'); $strategy = $this->request->post('strategy'); if (!array_key_exists($strategy, $this->strategyList)) { $this->error(lang('Storage policy does not exist')); } if (!GroupModel::update([ 'id' => $id, 'strategy' => $strategy ])) { $this->error(lang('Setting failed')); } $this->success(lang('Setting succeeded')); } } }