* [story#69519,0.5h] add mark.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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 . ' <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.
|
||||
|
||||
Reference in New Issue
Block a user