From 81fb4e6b63c8e0559f383ca8a3b6e18b245a4fd3 Mon Sep 17 00:00:00 2001 From: qixinzhi Date: Wed, 20 Nov 2024 08:43:08 +0000 Subject: [PATCH] * [story#69519,0.5h] add mark. --- module/mark/model.php | 85 +++++++++++++++++++++++++++++++++++++++++++ module/pivot/zen.php | 18 +++++++++ 2 files changed, 103 insertions(+) create mode 100644 module/mark/model.php diff --git a/module/mark/model.php b/module/mark/model.php new file mode 100644 index 0000000000..be99d0b00f --- /dev/null +++ b/module/mark/model.php @@ -0,0 +1,85 @@ + + * @package mail + * @link https://www.zentao.net + */ +?> +dao->select('objectID, version')->from(TABLE_MARK) + ->where('objectType')->eq($objectType) + ->andWhere('objectID')->in($objectIDs) + ->beginIF($version != 'all')->andWhere('version')->eq($version)->fi() + ->andWhere('account')->eq($this->app->user->account) + ->andWhere('mark')->eq($mark) + ->fetchAll(); + } + + public function getMarks(array $objects, string $objectType, string $mark): array + { + $objectIDs = array_column($objects, 'id'); + $marks = $this->getNeededMarks($objectIDs, $objectType, 'all', $mark); + + foreach($objects as $object) + { + $objectMarks = array_filter($marks, function($mark) use($object) { + return $mark->objectID == $object->id && $mark->version == $object->version; + }); + + $object->mark = !empty($objectMarks); + } + + return $objects; + } + + /** + * 设置对象的标记。 + * Set object marks. + * + * @param array $objectIDs + * @param string $objectType + * @param string $version + * @param string $mark + * @param string $extra + * @access public + * @return bool + */ + public function setMark(array $objectIDs, string $objectType, string $version, string $mark, string $extra = ''): bool + { + $data = new stdclass(); + $data->objectType = $objectType; + $data->version = $version; + $data->account = $this->app->user->account; + $data->mark = $mark; + $data->extra = $extra; + $data->date = helper::now(); + + foreach($objectIDs as $objectID) + { + $data->objectID = $objectID; + $this->dao->insert(TABLE_MARK)->data($data)->autocheck()->exec(); + } + + return dao::isError(); + } +} diff --git a/module/pivot/zen.php b/module/pivot/zen.php index 5ede438925..db7b1ca587 100644 --- a/module/pivot/zen.php +++ b/module/pivot/zen.php @@ -80,6 +80,7 @@ class pivotZen extends pivot $groups = $this->pivot->getGroupsByDimensionAndPath($dimensionID, $currentGroup->path); if(!$groups) return array(); + $firstAction = $this->loadModel('action')->getAccountFirstAction($this->app->user->account); $menus = array(); foreach($groups as $group) { @@ -87,6 +88,7 @@ class pivotZen extends pivot $pivots = $this->pivot->getAllPivotByGroupID($group->id); $pivots = $this->pivot->filterInvisiblePivot($pivots); + $pivots = $this->loadModel('mark')->getMarks($pivots, 'pivot', 'view'); if(empty($pivots)) continue; if($group->grade > 1) $menus[] = (object)array('id' => $group->id, 'parent' => 0, 'name' => $group->name); @@ -95,6 +97,7 @@ class pivotZen extends pivot foreach($pivots as $pivot) { + $this->setNewMark($pivot, $firstAction); $params = helper::safe64Encode("groupID={$group->id}&pivotID={$pivot->id}"); $url = inlink('preview', "dimension={$dimensionID}&group={$currentGroup->id}&method=show¶ms={$params}"); $menus[] = (object)array('id' => $group->id . '_' . $pivot->id, 'parent' => $group->grade > 1 ? $group->id : 0, 'name' => $pivot->name, 'url' => $url); @@ -108,6 +111,21 @@ class pivotZen extends pivot return array_merge($menus, $builtinMenus); } + /** + * 设置 “新” 标签。 + * Set new mark. + * + * @param object $pivot + * @param object $firstAction + * @access protected + * @return void + */ + protected function setNewMark(object $pivot, object $firstAction): void + { + if(!$pivot->mark && $pivot->createdDate < $firstAction->date) $pivot->mark = true; + if(!$pivot->mark) $pivot->name = array('html' => $pivot->name . ' ' . $this->lang->pivot->new . ''); + } + /** * 在第一个维度上显示内置透视表。 * Display the built-in pivots in the first dimension.