|
@@ -0,0 +1,221 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Models;
|
|
|
+
|
|
|
+use Illuminate\Database\Eloquent\Model;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+
|
|
|
+const LINK_TYPE_URL = "url";
|
|
|
+
|
|
|
+
|
|
|
+class ActionBar extends Model
|
|
|
+{
|
|
|
+ protected $table = "action_bars";
|
|
|
+ public $timestamps = false;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param array $params
|
|
|
+ * owner_id 拥有者用户的id,0表示数据模板
|
|
|
+ * parent ActionBar 的上一级id
|
|
|
+ * level 表示当前是第几级,冗余字段
|
|
|
+ * icon ActionBar的图标
|
|
|
+ * link_type ActionBar的时间类型,当期只有url跳转
|
|
|
+ * link 根据link_type需要的数据,当前为url,也可以是页面上的某个id
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function AddActionBar(array $params)
|
|
|
+ {
|
|
|
+ $this->parent = $params["parent"]; // default 0
|
|
|
+ $this->level = $params["level"];
|
|
|
+ $this->icon = $params["icon"];
|
|
|
+ $link_type = $params["link_type"];
|
|
|
+ $this->link = $params["link"];
|
|
|
+ $this->name = $params["name"];
|
|
|
+ $this->description = $params["description"];
|
|
|
+ $this->status = "normal";
|
|
|
+
|
|
|
+ if ($this->parent < 0) {
|
|
|
+ return "invalid parent: " . $this->parent;
|
|
|
+ }
|
|
|
+ if ($this->level < 0) {
|
|
|
+ return "invalid level: " . $this->level;
|
|
|
+ }
|
|
|
+ $this->link_type = trim($link_type);
|
|
|
+ if ($this->link_type == "") {
|
|
|
+ $this->link_type = LINK_TYPE_URL;
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = $this->save();
|
|
|
+ if ($result) {
|
|
|
+ Log::debug("AddActionBar success with params: " . json_encode($params));
|
|
|
+ return "success";
|
|
|
+ } else {
|
|
|
+ Log::error("AddActionBar failed with params: " . json_encode($params));
|
|
|
+ return "AddActionBar but fail";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据菜单的id更新一个菜单内容
|
|
|
+ *
|
|
|
+ * @param array $params
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function ModifyActionBar(array $params)
|
|
|
+ {
|
|
|
+ $update = [];
|
|
|
+ $id = $params["id"];
|
|
|
+ if ($id == "") {
|
|
|
+ return "invalid id";
|
|
|
+ }
|
|
|
+ if ($params["parent"] > 0) {
|
|
|
+ $update["parent"] = $params["parent"];
|
|
|
+ }
|
|
|
+ if ($params["level"] > 0) {
|
|
|
+ $update["level"] = $params["level"];
|
|
|
+ }
|
|
|
+ if (strlen($params["icon"]) > 0) {
|
|
|
+ $update["icon"] = $params["icon"];
|
|
|
+ }
|
|
|
+ if (strlen($params["link_type"]) > 0) {
|
|
|
+ $update["link_type"] = $params["link_type"];
|
|
|
+ }
|
|
|
+ if (strlen($params["link"]) > 0) {
|
|
|
+ $update["link"] = $params["link"];
|
|
|
+ }
|
|
|
+ if (strlen($params["name"]) > 0) {
|
|
|
+ Log::debug("name is " . $params["name"]);
|
|
|
+ $update["name"] = $params["name"];
|
|
|
+ }
|
|
|
+ if (strlen($params["description"]) > 0) {
|
|
|
+ $update["description"] = $params["description"];
|
|
|
+ }
|
|
|
+ if (count($update) == 0) {
|
|
|
+ return "nothing to update";
|
|
|
+ }
|
|
|
+
|
|
|
+ $num = $this->where("id", $id)
|
|
|
+ ->where("status", "normal")
|
|
|
+ ->where("is_del", false)
|
|
|
+ ->update($update);
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+ // todo.
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除一个菜单项目,这里存在一个问题,就是如果删除上层的菜单,下层的菜单也应该都被删掉。先留空。
|
|
|
+ *
|
|
|
+ * @param array $params
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function DeleteActionBar(array $params)
|
|
|
+ {
|
|
|
+ $id = $params["id"];
|
|
|
+ if ($id == "") {
|
|
|
+ return "invalid id";
|
|
|
+ }
|
|
|
+ $num = $this->where("id", $id)
|
|
|
+ ->where("status", "normal")
|
|
|
+ ->where("is_del", false)
|
|
|
+ ->update(["is_del" => true]);
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查出当前用户可以访问的所有action_bar的信息
|
|
|
+ *
|
|
|
+ * @param array $params
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function ListActionBar(array $params)
|
|
|
+ {
|
|
|
+ $uid = $params["uid"];
|
|
|
+
|
|
|
+ // 收集当前用户有权限的bar_id
|
|
|
+ $userActionBar = new UserActionBar();
|
|
|
+ $bar_ids = $userActionBar->ListActionBarIds($uid);
|
|
|
+ if (count($bar_ids) == 0) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查出bars的信息
|
|
|
+ $result = $this->select("id", "parent", "level", "name", "description", "icon", "link_type", "link")
|
|
|
+ ->where("id", $bar_ids)
|
|
|
+ ->where("status", "normal")
|
|
|
+ ->where("is_del", false)
|
|
|
+ ->all();
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class UserActionBar extends Model
|
|
|
+{
|
|
|
+ protected $table = "user_action_bars";
|
|
|
+ public $timestamps = false;
|
|
|
+
|
|
|
+ public function AddUserActionBar($uid, $barId)
|
|
|
+ {
|
|
|
+ if ($uid == "") {
|
|
|
+ return "empty user id";
|
|
|
+ }
|
|
|
+ if ($barId == "") {
|
|
|
+ return "empty action bar id";
|
|
|
+ }
|
|
|
+
|
|
|
+ //INSERT INTO demo_in(a,b,c) SELECT 123, 2, 4 FROM DUAL WHERE NOT EXISTS(SELECT c FROM demo_in WHERE c = 4);
|
|
|
+ $sql = sprintf("insert into user_action_bars(user_id, bar_id)
|
|
|
+ select ?, ? from temp_uab
|
|
|
+ where not exists(
|
|
|
+ select id from user_action_bars
|
|
|
+ where user_id = ? and bar_id = ? and is_del = false);");
|
|
|
+
|
|
|
+ $result = DB::insert($sql, [$uid, $barId, $uid, $barId]);
|
|
|
+ Log::debug("AddUserActionBar " . $result);
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+ public function RemoveUserActionBar($uid, $barId)
|
|
|
+ {
|
|
|
+ if ($uid == "") {
|
|
|
+ return "empty user id";
|
|
|
+ }
|
|
|
+ if ($barId == "") {
|
|
|
+ return "empty action bar id";
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = $this->where("user_id", $uid)
|
|
|
+ ->where("bar_id", $barId)
|
|
|
+ ->where("is_del", false)
|
|
|
+ ->first();
|
|
|
+ if (!$data){
|
|
|
+ return "nothing to remove";
|
|
|
+ }
|
|
|
+ $this->is_del = true;
|
|
|
+ $this->save();
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $uid
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function ListActionBarIds($uid)
|
|
|
+ {
|
|
|
+ $bars = $this->select("bar_id")
|
|
|
+ ->where("user_id", $uid)
|
|
|
+ ->where("status", "normal")
|
|
|
+ ->where("is_del", false)
|
|
|
+ ->get();
|
|
|
+ if (count($bars) == 0) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ $bar_ids = [];
|
|
|
+ foreach ($bar_ids as $bar_id) {
|
|
|
+ array_push($bar_ids, $bar_id->bar_id);
|
|
|
+ }
|
|
|
+ return $bar_ids;
|
|
|
+ }
|
|
|
+}
|