浏览代码

added group_id_min and add_to_admin to tabs database table

CauseFX 3 年之前
父节点
当前提交
9a2a172334
共有 1 个文件被更改,包括 50 次插入5 次删除
  1. 50 5
      api/classes/organizr.class.php

+ 50 - 5
api/classes/organizr.class.php

@@ -3251,6 +3251,8 @@ class Organizr
 					`default`	INTEGER,
 					`enabled`	INTEGER,
 					`group_id`	INTEGER,
+					`group_id_min` INTEGER DEFAULT \'0\',
+					`add_to_admin`	INTEGER DEFAULT \'0\',
 					`image`	TEXT,
 					`type`	INTEGER,
 					`splash`	INTEGER,
@@ -4011,11 +4013,19 @@ class Organizr
 			array(
 				'function' => 'fetchAll',
 				'query' => array(
-					'SELECT * FROM tabs WHERE `group_id` >= ? AND `enabled` = 1 ORDER BY `order` ' . $sort,
-					$this->user['groupID']
+					'SELECT * FROM tabs WHERE `group_id` >= ? AND `group_id_min` <= ? AND `enabled` = 1 ORDER BY `order` ' . $sort,
+					$this->user['groupID'],
+					$this->user['groupID'],
 				),
 				'key' => 'tabs'
 			),
+			array(
+				'function' => 'fetchAll',
+				'query' => array(
+					'SELECT * FROM tabs WHERE `add_to_admin` = 1 AND `enabled` = 1 ORDER BY `order` ' . $sort
+				),
+				'key' => 'tabs-admin'
+			),
 			array(
 				'function' => 'fetchAll',
 				'query' => array(
@@ -4026,20 +4036,41 @@ class Organizr
 		];
 		$queries = $this->processQueries($response);
 		$this->applyTabVariables($queries['tabs']);
-		$all['tabs'] = $queries['tabs'];
-		foreach ($queries['tabs'] as $k => $v) {
+		if ($this->qualifyRequest(1)) {
+			$this->applyTabVariables($queries['tabs-admin']);
+			$all['tabs'] = array_merge($queries['tabs'], $queries['tabs-admin']);
+			$newArray = [];
+			$ids = [];
+			foreach ($all['tabs'] as $key => $line) {
+				if (!in_array($line['id'], $ids)) {
+					$ids[] = $line['id'];
+					$newArray[$key] = $line;
+				}
+			}
+			$all['tabs'] = $newArray;
+			$newArray = NULL;
+			$ids = NULL;
+		} else {
+			$all['tabs'] = $queries['tabs'];
+		}
+		foreach ($all['tabs'] as $k => $v) {
 			$v['url_local'] = $v['type'] !== 0 ? $this->checkTabURL($v['url_local']) : $v['url_local'];
 			$v['url'] = $v['type'] !== 0 ? $this->checkTabURL($v['url']) : $v['url'];
 			$v['access_url'] = (!empty($v['url_local']) && ($v['url_local'] !== null) && ($v['url_local'] !== 'null') && $this->isLocal() && $v['type'] !== 0) ? $v['url_local'] : $v['url'];
 		}
 		$count = array_map(function ($element) {
 			return $element['category_id'];
-		}, $queries['tabs']);
+		}, $all['tabs']);
 		$count = (array_count_values($count));
 		foreach ($queries['categories'] as $k => $v) {
 			$v['count'] = $count[$v['category_id']] ?? 0;
 		}
 		$all['categories'] = $queries['categories'];
+		if (count($all['tabs']) > 0) {
+			usort($all['tabs'], function ($a, $b) {
+				return $a['order'] <=> $b['order'];
+			});
+		}
 		switch ($type) {
 			case 'categories':
 				return $all['categories'];
@@ -5121,6 +5152,20 @@ class Organizr
 				$this->clearTabDefault();
 			}
 		}
+		if (array_key_exists('group_id', $array)) {
+			$groupCheck = (array_key_exists('group_id_min', $array)) ? $array['group_id_min'] : $tabInfo['group_id_min'];
+			if ($array['group_id'] < $groupCheck) {
+				$this->setAPIResponse('error', 'Tab name: ' . $tabInfo['name'] . ' cannot have a lower Group Id Max than Group Id Min', 409);
+				return false;
+			}
+		}
+		if (array_key_exists('group_id_min', $array)) {
+			$groupCheck = (array_key_exists('group_id', $array)) ? $array['group_id'] : $tabInfo['group_id'];
+			if ($array['group_id_min'] > $groupCheck) {
+				$this->setAPIResponse('error', 'Tab name: ' . $tabInfo['name'] . ' cannot have a higher Group Id Min than Group Id Max', 409);
+				return false;
+			}
+		}
 		$response = [
 			array(
 				'function' => 'query',