Merge branch 'zentaopms_239_wangjianhua_70793' into 'zentaopms_239'
* Improve project drop list in edit repo page. See merge request easycorp/zentaopms!5874
This commit is contained in:
+36
-4
@@ -141,7 +141,6 @@ class repo extends control
|
||||
|
||||
$products = $this->loadModel('product')->getProductPairsByProject($objectID);
|
||||
$products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in(array_keys($products))->andWhere('shadow')->eq(0)->fetchPairs('id', 'name'); /* Remove shadow products. */
|
||||
$productID = count($products) > 0 ? key($products) : '';
|
||||
|
||||
$shadowProduct = null;
|
||||
if($this->app->tab == 'project' && $objectID) $shadowProduct = $this->loadModel('product')->getShadowProductByProject($objectID);
|
||||
@@ -152,7 +151,6 @@ class repo extends control
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter|noempty|nodeleted|noclosed');
|
||||
$this->view->products = $products;
|
||||
$this->view->relatedProjects = array();
|
||||
$this->view->productID = $productID;
|
||||
$this->view->serviceHosts = $this->loadModel('gitlab')->getPairs();
|
||||
$this->view->objectID = $objectID;
|
||||
$this->view->shadowProduct = $shadowProduct;
|
||||
@@ -1213,6 +1211,31 @@ class repo extends control
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new product select options by remove shadow products if remove project.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxFilterShadowProducts()
|
||||
{
|
||||
$postData = fixer::input('post')
|
||||
->setDefault('products', array())
|
||||
->setDefault('projectID', 0)
|
||||
->setDefault('objectID', 0)
|
||||
->get();
|
||||
|
||||
$shadowProduct = $this->loadModel('product')->getShadowProductByProject($postData->projectID);
|
||||
$selectedProducts = array_diff($postData->products, array($shadowProduct->id)); // Remove shadow product.
|
||||
|
||||
$products = $postData->objectID ? $this->loadModel('product')->getProductPairsByProject($objectID) : $this->loadModel('product')->getPairs();
|
||||
$linkedProducts = $this->loadModel('product')->getByIdList($postData->products);
|
||||
$linkedProductPairs = array_combine(array_keys($linkedProducts), array_column($linkedProducts, 'name'));
|
||||
$products = $products + $linkedProductPairs;
|
||||
|
||||
return print (html::select('product[]', $products, $selectedProducts, "class='form-control chosen' multiple"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get projects list by product id list by ajax.
|
||||
*
|
||||
@@ -1226,8 +1249,17 @@ class repo extends control
|
||||
->setDefault('projects', array())
|
||||
->get();
|
||||
|
||||
$projectOptions = $this->repo->filterProject($postData->products, $postData->projects);
|
||||
return print html::select('projects[]', $projectOptions, $postData->projects, "class='form-control chosen' multiple");
|
||||
/* Get all projects that can be accessed. */
|
||||
$accessProjects = array();
|
||||
foreach($postData->products as $productID)
|
||||
{
|
||||
$projects = $this->loadModel('product')->getProjectPairsByProduct($productID);
|
||||
$accessProjects = $accessProjects + $projects;
|
||||
}
|
||||
|
||||
$selectedProjects = array_intersect(array_keys($accessProjects), $postData->projects);
|
||||
|
||||
return print (html::select('projects[]', $accessProjects, $selectedProjects, "class='form-control chosen' multiple"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+36
-2
@@ -7,16 +7,50 @@ $(function()
|
||||
$form.css('min-height', $form.height());
|
||||
});
|
||||
|
||||
$('#product').change(function()
|
||||
/**
|
||||
* Handle product changed event.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function productChanged()
|
||||
{
|
||||
var projects = $('#projects').val();
|
||||
var products = $('#product').val();
|
||||
$.post(createLink('repo', 'ajaxProjectsOfProducts'), {products, projects}, function(response)
|
||||
{
|
||||
$('#projectContainer').html('').append(response);
|
||||
$('#projects').change(projectsChanged);
|
||||
$('#projects').chosen().trigger("chosen:updated");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle projects changed event.
|
||||
*
|
||||
* @param object $event
|
||||
* @param object $data
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function projectsChanged(event, data)
|
||||
{
|
||||
if(!data.deselected) return;
|
||||
|
||||
var products = $('#product').val();
|
||||
var projects = $('#projects').val();
|
||||
|
||||
$.post(createLink('repo', 'ajaxFilterShadowProducts'), {products, projectID: data.deselected, objectID}, function(response)
|
||||
{
|
||||
$('#productContainer').html('').append(response);
|
||||
$('#product').change(productChanged);
|
||||
$('#product').chosen().trigger("chosen:updated");
|
||||
});
|
||||
}
|
||||
|
||||
$('#product').change(productChanged);
|
||||
|
||||
$('#projects').change(projectsChanged);
|
||||
|
||||
$('#serviceHost').change(function()
|
||||
{
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
.user-addon{padding-right: 16px; padding-left: 16px;}
|
||||
</style>
|
||||
<?php endif;?>
|
||||
<?php js::set('scm', $repo->SCM)?>
|
||||
<?php js::set('scm', $repo->SCM);?>
|
||||
<?php js::set('objectID', $objectID);?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='main-col main-content'>
|
||||
<div class='center-block'>
|
||||
@@ -29,7 +30,7 @@
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->repo->product;?></th>
|
||||
<td class='required'><?php echo html::select('product[]', $products, $repo->product, "class='form-control chosen' multiple");?></td>
|
||||
<td id='productContainer' class='required'><?php echo html::select('product[]', $products, $repo->product, "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->repo->projects;?></th>
|
||||
|
||||
Reference in New Issue
Block a user