204 lines
6 KiB
PHP
204 lines
6 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The manage product view file of project module of ZenTaoPMS.
|
|
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
|
|
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
|
* @author Yanyi Cao<caoyanyi@easycorp.ltd>
|
|
* @package project
|
|
* @link https://www.zentao.net
|
|
*/
|
|
namespace zin;
|
|
jsVar('unmodifiableProducts', $unmodifiableProducts);
|
|
jsVar('unmodifiableBranches', $unmodifiableBranches);
|
|
jsVar('unmodifiableMainBranches', $unmodifiableMainBranches);
|
|
jsVar('allProducts', $allProducts);
|
|
jsVar('branchGroups', $branchGroups);
|
|
jsVar('projectID', $project->id);
|
|
jsVar('BRANCH_MAIN', BRANCH_MAIN);
|
|
jsVar('unLinkProductTip', $lang->project->unLinkProductTip);
|
|
jsVar('errorNoProduct', sprintf($lang->error->notempty, $lang->productCommon));
|
|
|
|
$noticeSwitch = ($project->stageBy == 'project' and count($linkedProducts) == 1 and empty($executions) and in_array($project->model, array('waterfall', 'waterfallplus')));
|
|
jsVar('linkedProducts', array_keys($linkedProducts));
|
|
jsVar('noticeSwitch', $noticeSwitch);
|
|
jsVar('noticeDivsion', $lang->project->noticeDivsion);
|
|
jsVar('stageBySwitchList', $lang->project->stageBySwitchList);
|
|
|
|
/* Link other product modal. */
|
|
if($config->systemMode == 'ALM')
|
|
{
|
|
modal
|
|
(
|
|
setID('linkProduct'),
|
|
set::modalProps(array('title' => $lang->project->manageOtherProducts)),
|
|
form
|
|
(
|
|
setClass('text-center', 'py-4'),
|
|
set::actions(array('submit')),
|
|
formGroup
|
|
(
|
|
set::label($lang->project->selectProduct),
|
|
set::required(true),
|
|
picker
|
|
(
|
|
set::name('otherProducts[]'),
|
|
set::multiple(true),
|
|
set::items($otherProducts)
|
|
)
|
|
)
|
|
)
|
|
|
|
);
|
|
}
|
|
|
|
$index = 0;
|
|
$linkedList = array();
|
|
foreach($linkedProducts as $productID => $product)
|
|
{
|
|
if(empty($linkedBranches[$productID])) continue;
|
|
|
|
$cannotUnlink = !empty($disabledProducts[$productID]);
|
|
|
|
foreach($linkedBranches[$productID] as $branchID)
|
|
{
|
|
$linkedList[] = btn
|
|
(
|
|
setClass('product-block modal-content center-row justify-start text-left'),
|
|
checkbox
|
|
(
|
|
set::rootClass('w-full p-4 pl-0 clip'),
|
|
set::name("products[{$index}]"),
|
|
set::text($product->name),
|
|
set::checked(true),
|
|
set::disabled($cannotUnlink),
|
|
set::title($cannotUnlink ? $disabledProducts[$productID] : ''),
|
|
set::value($productID),
|
|
on::click('checkUnlink'),
|
|
setClass('linked-product')
|
|
),
|
|
isset($allBranches[$productID][$branchID]) ? picker
|
|
(
|
|
set::name("branch[{$index}]"),
|
|
set::value($branchID),
|
|
set::items($allBranches[$productID]),
|
|
set::disabled(true),
|
|
set::required(true)
|
|
) : null,
|
|
$cannotUnlink ? input
|
|
(
|
|
set::type('hidden'),
|
|
set::name("products[{$index}]"),
|
|
set::value($productID)
|
|
) : null,
|
|
$cannotUnlink || isset($allBranches[$productID][$branchID]) ? input
|
|
(
|
|
set::type('hidden'),
|
|
set::name("branch[{$index}]"),
|
|
set::value($branchID)
|
|
) : null,
|
|
);
|
|
|
|
if(!isset($branchGroups[$productID]))
|
|
{
|
|
if($this->config->systemMode == 'ALM')
|
|
{
|
|
unset($currentProducts[$productID]);
|
|
}
|
|
else
|
|
{
|
|
unset($allProducts[$productID]);
|
|
}
|
|
}
|
|
|
|
if(isset($branchGroups[$productID][$branchID])) unset($branchGroups[$productID][$branchID]);
|
|
|
|
if(isset($branchGroups[$productID]) and empty($branchGroups[$productID]))
|
|
{
|
|
if($this->config->systemMode == 'ALM')
|
|
{
|
|
unset($currentProducts[$productID]);
|
|
}
|
|
else
|
|
{
|
|
unset($allProducts[$productID]);
|
|
}
|
|
}
|
|
$index ++;
|
|
}
|
|
}
|
|
|
|
$unlinkList = array();
|
|
$unlinkedProducts = $config->systemMode == 'ALM' ? $currentProducts : $allProducts;
|
|
foreach($unlinkedProducts as $productID => $productName)
|
|
{
|
|
$unlinkList[] = btn
|
|
(
|
|
setClass('product-block modal-content center-row justify-start text-left'),
|
|
checkbox
|
|
(
|
|
set::rootClass('w-full p-4 pl-0 clip'),
|
|
set::name("products[{$index}]"),
|
|
set::text($productName),
|
|
set::value($productID)
|
|
),
|
|
isset($branchGroups[$productID]) ? picker
|
|
(
|
|
set::name("branch[{$index}]"),
|
|
set::items($branchGroups[$productID]),
|
|
set::required(true)
|
|
) : null
|
|
);
|
|
|
|
$index ++;
|
|
}
|
|
|
|
form
|
|
(
|
|
setID('manageProducts'),
|
|
setClass('canvas pb-6'),
|
|
sectionList
|
|
(
|
|
section
|
|
(
|
|
set::title($lang->execution->linkedProducts),
|
|
div
|
|
(
|
|
setClass('flex flex-wrap'),
|
|
$linkedList
|
|
)
|
|
),
|
|
|
|
$unlinkList ? h::hr() : null,
|
|
|
|
section
|
|
(
|
|
set::title($lang->execution->unlinkedProducts),
|
|
$config->systemMode == 'ALM' ? to::actions
|
|
(
|
|
btn
|
|
(
|
|
setClass('ghost text-primary ml-2'),
|
|
set::url('#linkProduct'),
|
|
set('data-toggle', 'modal'),
|
|
set('data-size', 'sm'),
|
|
icon('link'),
|
|
p($lang->project->manageOtherProducts)
|
|
)
|
|
) : null,
|
|
$unlinkList ? div
|
|
(
|
|
setClass('flex flex-wrap'),
|
|
$unlinkList
|
|
) : null
|
|
),
|
|
|
|
h::hr()
|
|
),
|
|
|
|
formHidden('post', 'post'),
|
|
set::actions(array('submit'))
|
|
);
|
|
|
|
render();
|