* [story#69519,0.5h] add mark.

This commit is contained in:
qixinzhi
2024-11-20 16:57:50 +08:00
committed by 周鑫
parent 1599cc2730
commit 81fb4e6b63
2 changed files with 103 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
<?php
declare(strict_types=1);
/**
* The model file of mark module of ZenTaoPMS.
*
* @copyright Copyright 2009-2024 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
* @author Xinzhi Qi <qixinzhi@chandao.com>
* @package mail
* @link https://www.zentao.net
*/
?>
<?php
class markModel extends model
{
/**
* 获取需要标记的对象。
* Get needed mark sobjects.
*
* @param array $objectIDs
* @param string $objectType
* @param string $version
* @param string $mark
* @access public
* @return array
*/
public function getNeededMarks(array $objectIDs, string $objectType, string $version, string $mark): array
{
return $this->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();
}
}
+18
View File
@@ -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&params={$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 . ' <span class="label ghost size-sm bg-secondary-50 text-secondary-500 rounded-full">' . $this->lang->pivot->new . '</span>');
}
/**
* 在第一个维度上显示内置透视表。
* Display the built-in pivots in the first dimension.