* Finish task #72756.
This commit is contained in:
@@ -600,6 +600,37 @@ class productModel extends model
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get products group by program.
|
||||
*
|
||||
* @param array $appendIDList
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getProductsGroupByProgram($appendIDList = array())
|
||||
{
|
||||
$views = $this->app->user->view->products;
|
||||
if(!empty($appendIDList)) $views .= ',' . implode(',', $appendIDList);
|
||||
|
||||
$products = $this->dao->select("t1.id, t1.name, t1.program, t2.name AS programName")->from(TABLE_PRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.program = t2.id')
|
||||
->where('t1.deleted')->eq('0')
|
||||
->andWhere('t1.vision')->eq($this->config->vision)
|
||||
->andWhere('t1.shadow')->eq((int)0)
|
||||
->andWhere('t1.status')->ne('closed')
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($views)->fi()
|
||||
->orderBy('program')
|
||||
->fetchGroup('program');
|
||||
|
||||
$productsGroupByProgram = array();
|
||||
foreach($products as $program => $programProducts)
|
||||
{
|
||||
foreach($programProducts as $product) $productsGroupByProgram[$program][$product->id] = $product->programName . '/' . $product->name;
|
||||
}
|
||||
|
||||
return $productsGroupByProgram;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get product switcher.
|
||||
*
|
||||
|
||||
@@ -2124,17 +2124,17 @@ class project extends control
|
||||
$this->loadModel('product');
|
||||
$this->loadModel('program');
|
||||
$this->loadModel('execution');
|
||||
|
||||
$project = $this->project->getById($projectID);
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
if(!isset($_POST['products']))
|
||||
if(!isset($_POST['products']) and !isset($_POST['otherProducts']))
|
||||
{
|
||||
dao::$errors['message'][] = $this->lang->project->errorNoProducts;
|
||||
return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
}
|
||||
|
||||
$oldProducts = $this->product->getProducts($projectID);
|
||||
$this->project->updateProducts($projectID);
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
@@ -2144,6 +2144,7 @@ class project extends control
|
||||
if($executionID) $this->execution->updateProducts($executionID);
|
||||
}
|
||||
|
||||
$oldProducts = $this->product->getProducts($projectID);
|
||||
$newProducts = $this->product->getProducts($projectID);
|
||||
$oldProductIDs = array_keys($oldProducts);
|
||||
$newProductIDs = array_keys($newProducts);
|
||||
@@ -2176,7 +2177,7 @@ class project extends control
|
||||
$linkedBranches = array();
|
||||
$branches = $this->project->getBranchesByProject($projectID);
|
||||
$linkedProductIdList = empty($branches) ? '' : array_keys($branches);
|
||||
$allProducts = $this->program->getProductPairs($project->parent, 'assign', 'noclosed', $linkedProductIdList);
|
||||
$allProducts = $this->program->getProductPairs($project->parent, 'all', 'noclosed', $linkedProductIdList);
|
||||
$linkedProducts = $this->product->getProducts($projectID, 'all', '', true, $linkedProductIdList);
|
||||
$projectStories = $this->project->getStoriesByProject($projectID);
|
||||
$projectBranches = $this->project->getBranchGroupByProject($projectID, array_keys($linkedProducts));
|
||||
@@ -2188,10 +2189,10 @@ class project extends control
|
||||
foreach($linkedProducts as $productID => $linkedProduct)
|
||||
{
|
||||
$linkedBranches[$productID] = array();
|
||||
if(!isset($allProducts[$productID])) $allProducts[$productID] = $linkedProduct->name;
|
||||
foreach($branches[$productID] as $branchID => $branch)
|
||||
{
|
||||
$linkedBranches[$productID][$branchID] = $branchID;
|
||||
|
||||
if(!empty($projectStories[$productID][$branchID]) or !empty($projectBranches[$productID][$branchID]))
|
||||
{
|
||||
if($branchID == BRANCH_MAIN) $unmodifiableMainBranches[$productID] = $branchID;
|
||||
@@ -2201,18 +2202,52 @@ class project extends control
|
||||
}
|
||||
}
|
||||
|
||||
$branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal|noclosed');
|
||||
$productsGroupByProgram = $this->product->getProductsGroupByProgram();
|
||||
|
||||
$currentProducts = array();
|
||||
$otherProducts = array();
|
||||
foreach($productsGroupByProgram as $programID => $programProducts)
|
||||
{
|
||||
if($programID != $project->parent)
|
||||
{
|
||||
foreach($programProducts as $productID => $productName)
|
||||
{
|
||||
if(!empty($branchGroups[$productID]))
|
||||
{
|
||||
foreach($branchGroups[$productID] as $branchID => $branchName)
|
||||
{
|
||||
if(isset($linkedProducts[$productID]) and isset($linkedBranches[$productID][$branchID])) continue;
|
||||
|
||||
$otherProducts["{$productID}_{$branchID}"] = $productName . '_' . $branchName;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(isset($linkedProducts[$productID])) continue;
|
||||
$otherProducts[$productID] = $productName;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$currentProducts += $programProducts;
|
||||
}
|
||||
}
|
||||
|
||||
/* Assign. */
|
||||
$this->view->title = $this->lang->project->manageProducts . $this->lang->colon . $project->name;
|
||||
$this->view->project = $project;
|
||||
$this->view->allProducts = $allProducts;
|
||||
$this->view->currentProducts = $currentProducts;
|
||||
$this->view->linkedProducts = $linkedProducts;
|
||||
$this->view->linkedBranches = $linkedBranches;
|
||||
$this->view->branches = $branches;
|
||||
$this->view->unmodifiableProducts = $unmodifiableProducts;
|
||||
$this->view->unmodifiableBranches = $unmodifiableBranches;
|
||||
$this->view->unmodifiableMainBranches = $unmodifiableMainBranches;
|
||||
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal|noclosed');
|
||||
$this->view->branchGroups = $branchGroups;
|
||||
$this->view->allBranches = $this->branch->getByProducts(array_keys($allProducts), 'ignoreNormal');
|
||||
$this->view->otherProducts = $otherProducts;
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -42,4 +42,38 @@ $(function()
|
||||
$(this).closest('div').find("input[id^=products]").prop('checked', true);
|
||||
}
|
||||
});
|
||||
|
||||
$('.saveOtherProduct').click(function()
|
||||
{
|
||||
$('#productsBox').ajaxForm(
|
||||
{
|
||||
finish:function(response)
|
||||
{
|
||||
if(response.result == 'success')
|
||||
{
|
||||
$('#productsBox #submit').popover('destroy');
|
||||
|
||||
$('.saveOtherProduct').popover(
|
||||
{
|
||||
trigger: 'manual',
|
||||
content: response.message,
|
||||
tipClass: 'popover-success popover-form-result',
|
||||
placement: 'right'
|
||||
}).popover('show');
|
||||
|
||||
setTimeout(function(){$('.saveOtherProduct').popover('destroy')}, 2000);
|
||||
|
||||
var reloadUrl = response.locate == 'reload' ? location.href : response.locate;
|
||||
setTimeout(function(){location.href = reloadUrl;}, 1200);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('form#productsBox').submit();
|
||||
});
|
||||
|
||||
$('.cancelOtherProduct').click(function()
|
||||
{
|
||||
$('#otherProductsModal').modal('hide');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -41,6 +41,7 @@ $lang->project->whitelist = 'Project Whitelist';
|
||||
$lang->project->addWhitelist = 'Project Add Whitelist';
|
||||
$lang->project->unbindWhitelist = 'Project Remove Whitelist';
|
||||
$lang->project->manageProducts = 'Manage Products';
|
||||
$lang->project->manageOtherProducts = 'Manage Other Products';
|
||||
$lang->project->copyTitle = 'Please select an project to copy';
|
||||
$lang->project->errorSameProducts = 'Project cannot be associated with multiple identical products.';
|
||||
$lang->project->errorSameBranches = 'Project cannot be associated with multiple identical branches.';
|
||||
@@ -68,6 +69,7 @@ $lang->project->manageRepo = 'Manage Repo';
|
||||
$lang->project->linkedRepo = 'Link Repo';
|
||||
$lang->project->unlinkedRepo = 'Unlink Repo';
|
||||
$lang->project->disableExecution = 'Project of disable iteration';
|
||||
$lang->project->selectProduct = 'Select Product';
|
||||
|
||||
/* Fields. */
|
||||
$lang->project->common = 'Project';
|
||||
|
||||
+70
-68
@@ -1,73 +1,75 @@
|
||||
<?php
|
||||
/* Actions. */
|
||||
$lang->project->createGuide = 'Select Template';
|
||||
$lang->project->index = 'Dashboard';
|
||||
$lang->project->home = 'Home';
|
||||
$lang->project->create = 'Create Project';
|
||||
$lang->project->edit = 'Edit';
|
||||
$lang->project->batchEdit = 'Batch Edit Projects';
|
||||
$lang->project->view = 'Project View';
|
||||
$lang->project->batchEdit = 'Batch Edit';
|
||||
$lang->project->browse = 'Projects';
|
||||
$lang->project->all = 'All';
|
||||
$lang->project->start = 'Start';
|
||||
$lang->project->finish = 'Finish';
|
||||
$lang->project->suspend = 'Suspend';
|
||||
$lang->project->delete = 'Delete';
|
||||
$lang->project->close = 'Close';
|
||||
$lang->project->activate = 'Activate';
|
||||
$lang->project->group = 'Privilege Group';
|
||||
$lang->project->createGroup = 'Create Group';
|
||||
$lang->project->editGroup = 'Edit Group';
|
||||
$lang->project->copyGroup = 'Copy Group';
|
||||
$lang->project->manageView = 'Manage View';
|
||||
$lang->project->managePriv = 'Manage Privilege';
|
||||
$lang->project->manageMembers = 'Manage Team';
|
||||
$lang->project->export = 'Export';
|
||||
$lang->project->addProduct = 'Add Product';
|
||||
$lang->project->manageGroupMember = 'Manage Group';
|
||||
$lang->project->moduleSetting = 'List Settings';
|
||||
$lang->project->moduleOpen = 'Program Name';
|
||||
$lang->project->dynamic = 'Dynamic';
|
||||
$lang->project->execution = 'Execution';
|
||||
$lang->project->qa = 'QA';
|
||||
$lang->project->bug = 'Bug List';
|
||||
$lang->project->testcase = 'Case List';
|
||||
$lang->project->testtask = 'Test Task';
|
||||
$lang->project->build = 'Build';
|
||||
$lang->project->updateOrder = 'Order';
|
||||
$lang->project->sort = 'Order';
|
||||
$lang->project->whitelist = 'Project Whitelist';
|
||||
$lang->project->addWhitelist = 'Project Add Whitelist';
|
||||
$lang->project->unbindWhitelist = 'Project Remove Whitelist';
|
||||
$lang->project->manageProducts = 'Manage Products';
|
||||
$lang->project->copyTitle = 'Please select an project to copy';
|
||||
$lang->project->errorSameProducts = 'Project cannot be associated with multiple identical products.';
|
||||
$lang->project->errorSameBranches = 'Project cannot be associated with multiple identical branches.';
|
||||
$lang->project->errorSamePlans = 'Project cannot be associated with multiple identical plans.';
|
||||
$lang->project->errorNoProducts = 'At least one product is associated';
|
||||
$lang->project->copyNoProject = 'There are no items available to copy.';
|
||||
$lang->project->searchByName = 'Enter the project name to retrieve';
|
||||
$lang->project->deleted = 'Deleted';
|
||||
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
|
||||
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
|
||||
$lang->project->testreport = 'Test Report';
|
||||
$lang->project->selectProgram = 'Program filtering';
|
||||
$lang->project->teamMember = 'Team Member';
|
||||
$lang->project->unlinkMember = 'Remove Member';
|
||||
$lang->project->copyTeamTitle = 'Select a project team to copy';
|
||||
$lang->project->daysGreaterProject = 'Days cannot be greater than days of project『%s』';
|
||||
$lang->project->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->project->workdaysExceed = 'No more than『%s』working days';
|
||||
$lang->project->teamMembersCount = ', there are %s team members.';
|
||||
$lang->project->budgetNumber = '『Budget』must be numbers.';
|
||||
$lang->project->budgetGe0 = '『Budget』must be greater than or equal to 0.';
|
||||
$lang->project->allProjects = 'All Projects';
|
||||
$lang->project->ignore = 'Ignore';
|
||||
$lang->project->manageRepo = 'Manage Repo';
|
||||
$lang->project->linkedRepo = 'Link Repo';
|
||||
$lang->project->unlinkedRepo = 'Unlink Repo';
|
||||
$lang->project->disableExecution = 'Project of disable iteration';
|
||||
$lang->project->createGuide = 'Select Template';
|
||||
$lang->project->index = 'Dashboard';
|
||||
$lang->project->home = 'Home';
|
||||
$lang->project->create = 'Create Project';
|
||||
$lang->project->edit = 'Edit';
|
||||
$lang->project->batchEdit = 'Batch Edit Projects';
|
||||
$lang->project->view = 'Project View';
|
||||
$lang->project->batchEdit = 'Batch Edit';
|
||||
$lang->project->browse = 'Projects';
|
||||
$lang->project->all = 'All';
|
||||
$lang->project->start = 'Start';
|
||||
$lang->project->finish = 'Finish';
|
||||
$lang->project->suspend = 'Suspend';
|
||||
$lang->project->delete = 'Delete';
|
||||
$lang->project->close = 'Close';
|
||||
$lang->project->activate = 'Activate';
|
||||
$lang->project->group = 'Privilege Group';
|
||||
$lang->project->createGroup = 'Create Group';
|
||||
$lang->project->editGroup = 'Edit Group';
|
||||
$lang->project->copyGroup = 'Copy Group';
|
||||
$lang->project->manageView = 'Manage View';
|
||||
$lang->project->managePriv = 'Manage Privilege';
|
||||
$lang->project->manageMembers = 'Manage Team';
|
||||
$lang->project->export = 'Export';
|
||||
$lang->project->addProduct = 'Add Product';
|
||||
$lang->project->manageGroupMember = 'Manage Group';
|
||||
$lang->project->moduleSetting = 'List Settings';
|
||||
$lang->project->moduleOpen = 'Program Name';
|
||||
$lang->project->dynamic = 'Dynamic';
|
||||
$lang->project->execution = 'Execution';
|
||||
$lang->project->qa = 'QA';
|
||||
$lang->project->bug = 'Bug List';
|
||||
$lang->project->testcase = 'Case List';
|
||||
$lang->project->testtask = 'Test Task';
|
||||
$lang->project->build = 'Build';
|
||||
$lang->project->updateOrder = 'Order';
|
||||
$lang->project->sort = 'Order';
|
||||
$lang->project->whitelist = 'Project Whitelist';
|
||||
$lang->project->addWhitelist = 'Project Add Whitelist';
|
||||
$lang->project->unbindWhitelist = 'Project Remove Whitelist';
|
||||
$lang->project->manageProducts = 'Manage Products';
|
||||
$lang->project->manageOtherProducts = 'Manage Other Products';
|
||||
$lang->project->copyTitle = 'Please select an project to copy';
|
||||
$lang->project->errorSameProducts = 'Project cannot be associated with multiple identical products.';
|
||||
$lang->project->errorSameBranches = 'Project cannot be associated with multiple identical branches.';
|
||||
$lang->project->errorSamePlans = 'Project cannot be associated with multiple identical plans.';
|
||||
$lang->project->errorNoProducts = 'At least one product is associated';
|
||||
$lang->project->copyNoProject = 'There are no items available to copy.';
|
||||
$lang->project->searchByName = 'Enter the project name to retrieve';
|
||||
$lang->project->deleted = 'Deleted';
|
||||
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
|
||||
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
|
||||
$lang->project->testreport = 'Test Report';
|
||||
$lang->project->selectProgram = 'Program filtering';
|
||||
$lang->project->teamMember = 'Team Member';
|
||||
$lang->project->unlinkMember = 'Remove Member';
|
||||
$lang->project->copyTeamTitle = 'Select a project team to copy';
|
||||
$lang->project->daysGreaterProject = 'Days cannot be greater than days of project『%s』';
|
||||
$lang->project->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->project->workdaysExceed = 'No more than『%s』working days';
|
||||
$lang->project->teamMembersCount = ', there are %s team members.';
|
||||
$lang->project->budgetNumber = '『Budget』must be numbers.';
|
||||
$lang->project->budgetGe0 = '『Budget』must be greater than or equal to 0.';
|
||||
$lang->project->allProjects = 'All Projects';
|
||||
$lang->project->ignore = 'Ignore';
|
||||
$lang->project->manageRepo = 'Manage Repo';
|
||||
$lang->project->linkedRepo = 'Link Repo';
|
||||
$lang->project->unlinkedRepo = 'Unlink Repo';
|
||||
$lang->project->disableExecution = 'Project of disable iteration';
|
||||
$lang->project->selectProduct = 'Select Product';
|
||||
|
||||
/* Fields. */
|
||||
$lang->project->common = 'Project';
|
||||
|
||||
+71
-68
@@ -1,73 +1,76 @@
|
||||
<?php
|
||||
/* Actions. */
|
||||
$lang->project->createGuide = 'Select Template';
|
||||
$lang->project->index = 'Dashboard';
|
||||
$lang->project->home = 'Home';
|
||||
$lang->project->create = 'Create Project';
|
||||
$lang->project->edit = 'Edit';
|
||||
$lang->project->batchEdit = 'Batch Edit Projects';
|
||||
$lang->project->view = 'Project View';
|
||||
$lang->project->batchEdit = 'Batch Edit Projects';
|
||||
$lang->project->browse = 'Projects';
|
||||
$lang->project->all = 'All';
|
||||
$lang->project->start = 'Start';
|
||||
$lang->project->finish = 'Finish';
|
||||
$lang->project->suspend = 'Suspend';
|
||||
$lang->project->delete = 'Delete';
|
||||
$lang->project->close = 'Close';
|
||||
$lang->project->activate = 'Activate';
|
||||
$lang->project->group = 'Privilege Group';
|
||||
$lang->project->createGroup = 'Create Group';
|
||||
$lang->project->editGroup = 'Edit Group';
|
||||
$lang->project->copyGroup = 'Copy Group';
|
||||
$lang->project->manageView = 'Manage View';
|
||||
$lang->project->managePriv = 'Manage Privilege';
|
||||
$lang->project->manageMembers = 'Manage Team';
|
||||
$lang->project->export = 'Export';
|
||||
$lang->project->addProduct = 'Add Product';
|
||||
$lang->project->manageGroupMember = 'Manage Group';
|
||||
$lang->project->moduleSetting = 'List Settings';
|
||||
$lang->project->moduleOpen = 'Program Name';
|
||||
$lang->project->dynamic = 'Dynamic';
|
||||
$lang->project->execution = 'Execution';
|
||||
$lang->project->qa = 'QA';
|
||||
$lang->project->bug = 'Bug List';
|
||||
$lang->project->testcase = 'Case List';
|
||||
$lang->project->testtask = 'Test Task';
|
||||
$lang->project->build = 'Build';
|
||||
$lang->project->updateOrder = 'Order';
|
||||
$lang->project->sort = 'Order';
|
||||
$lang->project->whitelist = 'Project Whitelist';
|
||||
$lang->project->addWhitelist = 'Project Add Whitelist';
|
||||
$lang->project->unbindWhitelist = 'Project Remove Whitelist';
|
||||
$lang->project->manageProducts = 'Manage Products';
|
||||
$lang->project->copyTitle = 'Please select an project to copy';
|
||||
$lang->project->errorSameProducts = 'Project cannot be associated with multiple identical products.';
|
||||
$lang->project->errorSameBranches = 'Project cannot be associated with multiple identical branches.';
|
||||
$lang->project->errorSamePlans = 'Project cannot be associated with multiple identical plans.';
|
||||
$lang->project->errorNoProducts = 'At least one product is associated';
|
||||
$lang->project->copyNoProject = 'There are no items available to copy.';
|
||||
$lang->project->searchByName = 'Enter the project name to retrieve';
|
||||
$lang->project->deleted = 'Supprimé';
|
||||
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
|
||||
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
|
||||
$lang->project->testreport = 'Testreport';
|
||||
$lang->project->selectProgram = 'Program filtering';
|
||||
$lang->project->teamMember = 'Team Member';
|
||||
$lang->project->unlinkMember = 'Remove Member';
|
||||
$lang->project->copyTeamTitle = 'Select a project team to copy';
|
||||
$lang->project->daysGreaterProject = 'Days cannot be greater than days of project『%s』';
|
||||
$lang->project->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->project->workdaysExceed = 'No more than『%s』working days';
|
||||
$lang->project->teamMembersCount = ', there are %s team members.';
|
||||
$lang->project->budgetNumber = '『Budget』must be numbers.';
|
||||
$lang->project->budgetGe0 = '『Budget』must be greater than or equal to 0.';
|
||||
$lang->project->allProjects = 'All Projects';
|
||||
$lang->project->ignore = 'Ignorer';
|
||||
$lang->project->manageRepo = 'Manage Repo';
|
||||
$lang->project->linkedRepo = 'Link Repo';
|
||||
$lang->project->unlinkedRepo = 'Unlink Repo';
|
||||
$lang->project->disableExecution = 'Project of disable iteration';
|
||||
$lang->project->createGuide = 'Select Template';
|
||||
$lang->project->index = 'Dashboard';
|
||||
$lang->project->home = 'Home';
|
||||
$lang->project->create = 'Create Project';
|
||||
$lang->project->edit = 'Edit';
|
||||
$lang->project->batchEdit = 'Batch Edit Projects';
|
||||
$lang->project->view = 'Project View';
|
||||
$lang->project->batchEdit = 'Batch Edit Projects';
|
||||
$lang->project->browse = 'Projects';
|
||||
$lang->project->all = 'All';
|
||||
$lang->project->start = 'Start';
|
||||
$lang->project->finish = 'Finish';
|
||||
$lang->project->suspend = 'Suspend';
|
||||
$lang->project->delete = 'Delete';
|
||||
$lang->project->close = 'Close';
|
||||
$lang->project->activate = 'Activate';
|
||||
$lang->project->group = 'Privilege Group';
|
||||
$lang->project->createGroup = 'Create Group';
|
||||
$lang->project->editGroup = 'Edit Group';
|
||||
$lang->project->copyGroup = 'Copy Group';
|
||||
$lang->project->manageView = 'Manage View';
|
||||
$lang->project->managePriv = 'Manage Privilege';
|
||||
$lang->project->manageMembers = 'Manage Team';
|
||||
$lang->project->export = 'Export';
|
||||
$lang->project->addProduct = 'Add Product';
|
||||
$lang->project->manageGroupMember = 'Manage Group';
|
||||
$lang->project->moduleSetting = 'List Settings';
|
||||
$lang->project->moduleOpen = 'Program Name';
|
||||
$lang->project->dynamic = 'Dynamic';
|
||||
$lang->project->execution = 'Execution';
|
||||
$lang->project->qa = 'QA';
|
||||
$lang->project->bug = 'Bug List';
|
||||
$lang->project->testcase = 'Case List';
|
||||
$lang->project->testtask = 'Test Task';
|
||||
$lang->project->build = 'Build';
|
||||
$lang->project->updateOrder = 'Order';
|
||||
$lang->project->sort = 'Order';
|
||||
$lang->project->whitelist = 'Project Whitelist';
|
||||
$lang->project->addWhitelist = 'Project Add Whitelist';
|
||||
$lang->project->unbindWhitelist = 'Project Remove Whitelist';
|
||||
$lang->project->manageProducts = 'Manage Products';
|
||||
$lang->project->manageOtherProducts = 'Manage Other Products';
|
||||
$lang->project->copyTitle = 'Please select an project to copy';
|
||||
$lang->project->errorSameProducts = 'Project cannot be associated with multiple identical products.';
|
||||
$lang->project->errorSameBranches = 'Project cannot be associated with multiple identical branches.';
|
||||
$lang->project->errorSamePlans = 'Project cannot be associated with multiple identical plans.';
|
||||
$lang->project->errorNoProducts = 'At least one product is associated';
|
||||
$lang->project->copyNoProject = 'There are no items available to copy.';
|
||||
$lang->project->searchByName = 'Enter the project name to retrieve';
|
||||
$lang->project->deleted = 'Supprimé';
|
||||
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
|
||||
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
|
||||
$lang->project->testreport = 'Testreport';
|
||||
$lang->project->selectProgram = 'Program filtering';
|
||||
$lang->project->teamMember = 'Team Member';
|
||||
$lang->project->unlinkMember = 'Remove Member';
|
||||
$lang->project->copyTeamTitle = 'Select a project team to copy';
|
||||
$lang->project->daysGreaterProject = 'Days cannot be greater than days of project『%s』';
|
||||
$lang->project->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->project->workdaysExceed = 'No more than『%s』working days';
|
||||
$lang->project->teamMembersCount = ', there are %s team members.';
|
||||
$lang->project->budgetNumber = '『Budget』must be numbers.';
|
||||
$lang->project->budgetGe0 = '『Budget』must be greater than or equal to 0.';
|
||||
$lang->project->allProjects = 'All Projects';
|
||||
$lang->project->ignore = 'Ignorer';
|
||||
$lang->project->manageRepo = 'Manage Repo';
|
||||
$lang->project->linkedRepo = 'Link Repo';
|
||||
$lang->project->unlinkedRepo = 'Unlink Repo';
|
||||
$lang->project->disableExecution = 'Project of disable iteration';
|
||||
$lang->project->selectProduct = 'Select Product';
|
||||
|
||||
/* Fields. */
|
||||
$lang->project->common = 'Projets';
|
||||
$lang->project->id = 'ID';
|
||||
|
||||
@@ -1,73 +1,75 @@
|
||||
<?php
|
||||
/* Actions. */
|
||||
$lang->project->createGuide = '选择项目模板';
|
||||
$lang->project->index = '项目仪表盘';
|
||||
$lang->project->home = '项目主页';
|
||||
$lang->project->create = '创建项目';
|
||||
$lang->project->edit = '编辑项目';
|
||||
$lang->project->batchEdit = '批量编辑项目';
|
||||
$lang->project->view = '项目概况';
|
||||
$lang->project->batchEdit = '批量编辑';
|
||||
$lang->project->browse = '项目列表';
|
||||
$lang->project->all = '所有项目';
|
||||
$lang->project->start = '启动项目';
|
||||
$lang->project->finish = '完成项目';
|
||||
$lang->project->suspend = '挂起项目';
|
||||
$lang->project->delete = '删除项目';
|
||||
$lang->project->close = '关闭项目';
|
||||
$lang->project->activate = '激活项目';
|
||||
$lang->project->group = '项目权限分组';
|
||||
$lang->project->createGroup = '项目创建分组';
|
||||
$lang->project->editGroup = '项目编辑分组';
|
||||
$lang->project->copyGroup = '项目复制分组';
|
||||
$lang->project->manageView = '项目维护视野';
|
||||
$lang->project->managePriv = '项目维护权限';
|
||||
$lang->project->manageMembers = '团队管理';
|
||||
$lang->project->export = '导出';
|
||||
$lang->project->addProduct = '新建产品';
|
||||
$lang->project->manageGroupMember = '维护分组用户';
|
||||
$lang->project->moduleSetting = '列表设置';
|
||||
$lang->project->moduleOpen = '显示项目集名';
|
||||
$lang->project->dynamic = '动态';
|
||||
$lang->project->execution = '执行列表';
|
||||
$lang->project->qa = '测试仪表盘';
|
||||
$lang->project->bug = 'Bug列表';
|
||||
$lang->project->testcase = '用例列表';
|
||||
$lang->project->testtask = '测试单';
|
||||
$lang->project->build = '版本';
|
||||
$lang->project->updateOrder = '排序';
|
||||
$lang->project->sort = '项目排序';
|
||||
$lang->project->whitelist = '项目白名单';
|
||||
$lang->project->addWhitelist = '项目添加白名单';
|
||||
$lang->project->unbindWhitelist = '项目删除白名单';
|
||||
$lang->project->manageProducts = '关联产品';
|
||||
$lang->project->copyTitle = '请选择要复制的项目';
|
||||
$lang->project->errorSameProducts = '项目不能关联多个相同的产品。';
|
||||
$lang->project->errorSameBranches = '项目不能关联多个相同的分支。';
|
||||
$lang->project->errorSamePlans = '项目不能关联多个相同的计划。';
|
||||
$lang->project->errorNoProducts = '最少关联一个产品';
|
||||
$lang->project->copyNoProject = '没有可用的项目来复制';
|
||||
$lang->project->searchByName = '输入项目名称进行检索';
|
||||
$lang->project->deleted = '已删除';
|
||||
$lang->project->linkedProducts = '已关联产品';
|
||||
$lang->project->unlinkedProducts = '未关联';
|
||||
$lang->project->testreport = '测试报告';
|
||||
$lang->project->selectProgram = '项目集筛选';
|
||||
$lang->project->teamMember = '团队成员';
|
||||
$lang->project->unlinkMember = '移除成员';
|
||||
$lang->project->copyTeamTitle = '选择一个项目团队来复制';
|
||||
$lang->project->daysGreaterProject = '可用工日不能大于项目的可用工日『%s』';
|
||||
$lang->project->errorHours = '可用工时/天不能大于『24』';
|
||||
$lang->project->workdaysExceed = '可用工作日不能超过『%s』天';
|
||||
$lang->project->teamMembersCount = ',团队成员共%s人。';
|
||||
$lang->project->budgetNumber = '『预算』金额必须为数字。';
|
||||
$lang->project->budgetGe0 = '『预算』金额必须大于等于0。';
|
||||
$lang->project->allProjects = '所有项目';
|
||||
$lang->project->ignore = '忽略';
|
||||
$lang->project->manageRepo = '关联代码库';
|
||||
$lang->project->linkedRepo = '已关联代码库';
|
||||
$lang->project->unlinkedRepo = '未关联代码库';
|
||||
$lang->project->disableExecution = '不启用迭代的项目';
|
||||
$lang->project->createGuide = '选择项目模板';
|
||||
$lang->project->index = '项目仪表盘';
|
||||
$lang->project->home = '项目主页';
|
||||
$lang->project->create = '创建项目';
|
||||
$lang->project->edit = '编辑项目';
|
||||
$lang->project->batchEdit = '批量编辑项目';
|
||||
$lang->project->view = '项目概况';
|
||||
$lang->project->batchEdit = '批量编辑';
|
||||
$lang->project->browse = '项目列表';
|
||||
$lang->project->all = '所有项目';
|
||||
$lang->project->start = '启动项目';
|
||||
$lang->project->finish = '完成项目';
|
||||
$lang->project->suspend = '挂起项目';
|
||||
$lang->project->delete = '删除项目';
|
||||
$lang->project->close = '关闭项目';
|
||||
$lang->project->activate = '激活项目';
|
||||
$lang->project->group = '项目权限分组';
|
||||
$lang->project->createGroup = '项目创建分组';
|
||||
$lang->project->editGroup = '项目编辑分组';
|
||||
$lang->project->copyGroup = '项目复制分组';
|
||||
$lang->project->manageView = '项目维护视野';
|
||||
$lang->project->managePriv = '项目维护权限';
|
||||
$lang->project->manageMembers = '团队管理';
|
||||
$lang->project->export = '导出';
|
||||
$lang->project->addProduct = '新建产品';
|
||||
$lang->project->manageGroupMember = '维护分组用户';
|
||||
$lang->project->moduleSetting = '列表设置';
|
||||
$lang->project->moduleOpen = '显示项目集名';
|
||||
$lang->project->dynamic = '动态';
|
||||
$lang->project->execution = '执行列表';
|
||||
$lang->project->qa = '测试仪表盘';
|
||||
$lang->project->bug = 'Bug列表';
|
||||
$lang->project->testcase = '用例列表';
|
||||
$lang->project->testtask = '测试单';
|
||||
$lang->project->build = '版本';
|
||||
$lang->project->updateOrder = '排序';
|
||||
$lang->project->sort = '项目排序';
|
||||
$lang->project->whitelist = '项目白名单';
|
||||
$lang->project->addWhitelist = '项目添加白名单';
|
||||
$lang->project->unbindWhitelist = '项目删除白名单';
|
||||
$lang->project->manageProducts = '关联产品';
|
||||
$lang->project->manageOtherProducts = '关联其他产品';
|
||||
$lang->project->copyTitle = '请选择要复制的项目';
|
||||
$lang->project->errorSameProducts = '项目不能关联多个相同的产品。';
|
||||
$lang->project->errorSameBranches = '项目不能关联多个相同的分支。';
|
||||
$lang->project->errorSamePlans = '项目不能关联多个相同的计划。';
|
||||
$lang->project->errorNoProducts = '最少关联一个产品';
|
||||
$lang->project->copyNoProject = '没有可用的项目来复制';
|
||||
$lang->project->searchByName = '输入项目名称进行检索';
|
||||
$lang->project->deleted = '已删除';
|
||||
$lang->project->linkedProducts = '已关联产品';
|
||||
$lang->project->unlinkedProducts = '未关联';
|
||||
$lang->project->testreport = '测试报告';
|
||||
$lang->project->selectProgram = '项目集筛选';
|
||||
$lang->project->teamMember = '团队成员';
|
||||
$lang->project->unlinkMember = '移除成员';
|
||||
$lang->project->copyTeamTitle = '选择一个项目团队来复制';
|
||||
$lang->project->daysGreaterProject = '可用工日不能大于项目的可用工日『%s』';
|
||||
$lang->project->errorHours = '可用工时/天不能大于『24』';
|
||||
$lang->project->workdaysExceed = '可用工作日不能超过『%s』天';
|
||||
$lang->project->teamMembersCount = ',团队成员共%s人。';
|
||||
$lang->project->budgetNumber = '『预算』金额必须为数字。';
|
||||
$lang->project->budgetGe0 = '『预算』金额必须大于等于0。';
|
||||
$lang->project->allProjects = '所有项目';
|
||||
$lang->project->ignore = '忽略';
|
||||
$lang->project->manageRepo = '关联代码库';
|
||||
$lang->project->linkedRepo = '已关联代码库';
|
||||
$lang->project->unlinkedRepo = '未关联代码库';
|
||||
$lang->project->disableExecution = '不启用迭代的项目';
|
||||
$lang->project->selectProduct = '选择产品';
|
||||
|
||||
/* Fields. */
|
||||
$lang->project->common = '项目';
|
||||
|
||||
@@ -2316,12 +2316,47 @@ class projectModel extends model
|
||||
{
|
||||
$this->loadModel('user');
|
||||
|
||||
$members = array_keys($this->getTeamMembers($projectID));
|
||||
|
||||
if($_POST['otherProducts'])
|
||||
{
|
||||
$products = array();
|
||||
$otherProducts = $_POST['otherProducts'];
|
||||
foreach($otherProducts as $index => $otherProduct)
|
||||
{
|
||||
if(!$otherProduct) continue;
|
||||
|
||||
$data = new stdclass();
|
||||
$data->project = $projectID;
|
||||
$data->plan = 0;
|
||||
|
||||
if(strpos($otherProduct, '_') !== false)
|
||||
{
|
||||
$params = explode('_', $otherProduct);
|
||||
$data->product = $params[0];
|
||||
$data->branch = $params[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
$data->product = $otherProduct;
|
||||
$data->branch = 0;
|
||||
}
|
||||
|
||||
$this->dao->insert(TABLE_PROJECTPRODUCT)->data($data)->exec();
|
||||
|
||||
$products[] = $data->product;
|
||||
}
|
||||
|
||||
$this->user->updateUserView($products, 'product', $members);
|
||||
|
||||
return !dao::isError();
|
||||
}
|
||||
|
||||
$products = isset($_POST['products']) ? $_POST['products'] : $products;
|
||||
$oldProjectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->eq((int)$projectID)->fetchGroup('product', 'branch');
|
||||
|
||||
$this->dao->delete()->from(TABLE_PROJECTPRODUCT)->where('project')->eq((int)$projectID)->exec();
|
||||
|
||||
$members = array_keys($this->getTeamMembers($projectID));
|
||||
if(empty($products))
|
||||
{
|
||||
$this->user->updateUserView(array_keys($oldProjectProducts), 'product', $members);
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<?php js::set('unmodifiableProducts', $unmodifiableProducts);?>
|
||||
<?php js::set('unmodifiableBranches', $unmodifiableBranches);?>
|
||||
<?php js::set('unmodifiableMainBranches', $unmodifiableMainBranches);?>
|
||||
<?php js::set('allProducts', $allProducts);?>
|
||||
<?php js::set('allProducts', $currentProducts);?>
|
||||
<?php js::set('branchGroups', $branchGroups);?>
|
||||
<?php js::set('BRANCH_MAIN', BRANCH_MAIN);?>
|
||||
<?php js::set('unLinkProductTip', $lang->project->unLinkProductTip);?>
|
||||
@@ -22,6 +22,12 @@
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<span class='btn btn-link btn-active-text'><span class='text'><?php echo $lang->project->manageProducts;?></span></span>
|
||||
</div>
|
||||
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php echo html::a(inlink('manageOtherProducts'), "<i class='icon icon-link'></i> " . $lang->project->manageOtherProducts, '', "class='btn btn-primary' data-toggle='modal'");?>
|
||||
|
||||
<button type='button' class='btn btn-primary' data-toggle='modal' data-target='#otherProductsModal'><i class='icon icon-link'></i> <?php echo $lang->project->manageOtherProducts; ?></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent'>
|
||||
<div class='cell'>
|
||||
@@ -30,32 +36,30 @@
|
||||
<div class='detail-title'><?php echo $lang->project->linkedProducts;?></div>
|
||||
<div class='detail-content row'>
|
||||
<?php $i = 0;?>
|
||||
<?php foreach($allProducts as $productID => $productName):?>
|
||||
<?php if(isset($linkedProducts[$productID])):?>
|
||||
<?php foreach($linkedProducts as $productID => $linkedProduct):?>
|
||||
<?php foreach($linkedBranches[$productID] as $branchID):?>
|
||||
<div class='col-sm-4'>
|
||||
<div class='product checked <?php echo isset($allBranches[$productID]) ? ' has-branch' : ''?>'>
|
||||
<div class="checkbox-primary" title='<?php echo $productName;?>'>
|
||||
<div class="checkbox-primary" title='<?php echo $linkedProduct->name;?>'>
|
||||
<?php echo "<input type='checkbox' name='products[$i]' value='$productID' checked id='products{$productID}'>";?>
|
||||
<label class='text-ellipsis checkbox-inline' for='<?php echo 'products' . $productID;?>' title='<?php echo $productName;?>'><?php echo $productName;?></label>
|
||||
<label class='text-ellipsis checkbox-inline' for='<?php echo 'products' . $productID;?>' title='<?php echo $linkedProduct->name;?>'><?php echo $linkedProduct->name;?></label>
|
||||
</div>
|
||||
<?php if(isset($allBranches[$productID][$branchID])) echo html::select("branch[$i]", $allBranches[$productID], $branchID, "class='form-control chosen' data-drop_direction='down' disabled='disabled'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo html::hidden("branch[$i]", $branchID);?>
|
||||
<?php if(!isset($branchGroups[$productID])) unset($allProducts[$productID]);?>
|
||||
<?php if(!isset($branchGroups[$productID])) unset($currentProducts[$productID]);?>
|
||||
<?php if(isset($branchGroups[$productID][$branchID])) unset($branchGroups[$productID][$branchID]);?>
|
||||
<?php if(isset($branchGroups[$productID]) and empty($branchGroups[$productID])) unset($allProducts[$productID]);?>
|
||||
<?php if(isset($branchGroups[$productID]) and empty($branchGroups[$productID])) unset($currentProducts[$productID]);?>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->project->unlinkedProducts;?></div>
|
||||
<div class='detail-content row'>
|
||||
<?php foreach($allProducts as $productID => $productName):?>
|
||||
<?php foreach($currentProducts as $productID => $productName):?>
|
||||
<div class='col-sm-4'>
|
||||
<div class='product<?php echo isset($branchGroups[$productID]) ? ' has-branch' : ''?>'>
|
||||
<div class="checkbox-primary" title='<?php echo $productName;?>'>
|
||||
@@ -73,6 +77,31 @@
|
||||
<?php echo html::hidden("post", 'post');?>
|
||||
<?php echo html::submitButton();?>
|
||||
</div>
|
||||
<div class='modal fade' id='otherProductsModal'>
|
||||
<div class='modal-content'>
|
||||
<div class='modal-dialog w-600px'>
|
||||
<div class='modal-header'>
|
||||
<button type='button' class='close' data-dismiss='modal'><span aria-hidden='true'>×</span><span class='sr-only'><?php echo $this->lang->close;?></span></button>
|
||||
<h4 class='modal-title'><?php echo $lang->project->manageOtherProducts;?></h4>
|
||||
</div>
|
||||
<div class='modal-body'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->project->selectProduct;?></th>
|
||||
<td><?php echo html::select('otherProducts[]', $otherProducts, '', "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td>
|
||||
<?php echo html::commonButton($lang->save, '', 'btn btn-primary btn-wide saveOtherProduct');?>
|
||||
<?php echo html::commonButton($lang->cancel, '', 'btn btn-wide cancelOtherProduct');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user