* Finish task#86376,86375
This commit is contained in:
@@ -1303,26 +1303,28 @@ $lang->resource->repo->linkStory = 'linkStory';
|
||||
$lang->resource->repo->linkBug = 'linkBug';
|
||||
$lang->resource->repo->linkTask = 'linkTask';
|
||||
$lang->resource->repo->unlink = 'unlink';
|
||||
$lang->resource->repo->import = 'importAction';
|
||||
|
||||
$lang->repo->methodOrder[5] = 'create';
|
||||
$lang->repo->methodOrder[10] = 'edit';
|
||||
$lang->repo->methodOrder[15] = 'delete';
|
||||
$lang->repo->methodOrder[20] = 'showSyncCommit';
|
||||
$lang->repo->methodOrder[25] = 'maintain';
|
||||
$lang->repo->methodOrder[30] = 'browse';
|
||||
$lang->repo->methodOrder[35] = 'view';
|
||||
$lang->repo->methodOrder[40] = 'diff';
|
||||
$lang->repo->methodOrder[45] = 'log';
|
||||
$lang->repo->methodOrder[50] = 'revision';
|
||||
$lang->repo->methodOrder[55] = 'blame';
|
||||
$lang->repo->methodOrder[60] = 'download';
|
||||
$lang->repo->methodOrder[65] = 'setRules';
|
||||
$lang->repo->methodOrder[70] = 'apiGetRepoByUrl';
|
||||
$lang->repo->methodOrder[75] = 'downloadCode';
|
||||
$lang->repo->methodOrder[80] = 'linkStory';
|
||||
$lang->repo->methodOrder[85] = 'linkBug';
|
||||
$lang->repo->methodOrder[90] = 'linkTask';
|
||||
$lang->repo->methodOrder[95] = 'unlink';
|
||||
$lang->repo->methodOrder[5] = 'create';
|
||||
$lang->repo->methodOrder[10] = 'edit';
|
||||
$lang->repo->methodOrder[15] = 'delete';
|
||||
$lang->repo->methodOrder[20] = 'showSyncCommit';
|
||||
$lang->repo->methodOrder[25] = 'maintain';
|
||||
$lang->repo->methodOrder[30] = 'browse';
|
||||
$lang->repo->methodOrder[35] = 'view';
|
||||
$lang->repo->methodOrder[40] = 'diff';
|
||||
$lang->repo->methodOrder[45] = 'log';
|
||||
$lang->repo->methodOrder[50] = 'revision';
|
||||
$lang->repo->methodOrder[55] = 'blame';
|
||||
$lang->repo->methodOrder[60] = 'download';
|
||||
$lang->repo->methodOrder[65] = 'setRules';
|
||||
$lang->repo->methodOrder[70] = 'apiGetRepoByUrl';
|
||||
$lang->repo->methodOrder[75] = 'downloadCode';
|
||||
$lang->repo->methodOrder[80] = 'linkStory';
|
||||
$lang->repo->methodOrder[85] = 'linkBug';
|
||||
$lang->repo->methodOrder[90] = 'linkTask';
|
||||
$lang->repo->methodOrder[95] = 'unlink';
|
||||
$lang->repo->methodOrder[100] = 'import';
|
||||
|
||||
$lang->resource->ci = new stdclass();
|
||||
$lang->resource->ci->commitResult = 'commitResult';
|
||||
|
||||
+46
-1
@@ -1382,6 +1382,50 @@ class repo extends control
|
||||
return $this->send(array('result' => 'success', 'revision' => $revision));
|
||||
}
|
||||
|
||||
/**
|
||||
* Import repos.
|
||||
*
|
||||
* @param int $server
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function import($server = 0)
|
||||
{
|
||||
if($_POST)
|
||||
{
|
||||
$this->repo->batchCreate();
|
||||
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->repo->createLink('maintain')));
|
||||
}
|
||||
|
||||
$gitlabList = $this->loadModel('gitlab')->getList();
|
||||
$gitlab = empty($server) ? array_shift($gitlabList) : $this->gitlab->getById($server);
|
||||
|
||||
$repoList = array();
|
||||
if(!empty($gitlab))
|
||||
{
|
||||
$repoList = $this->gitlab->apiGetProjects($gitlab->id);
|
||||
$existRepoList = $this->dao->select('serviceProject,name')->from(TABLE_REPO)
|
||||
->where('SCM')->eq(ucfirst($gitlab->type))
|
||||
->andWhere('serviceHost')->eq($gitlab->id)
|
||||
->fetchPairs();
|
||||
foreach($repoList as $key => $repo)
|
||||
{
|
||||
if(isset($existRepoList[$repo->id])) unset($repoList[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$products = $this->loadModel('product')->getPairs('', 0, '', 'all');
|
||||
|
||||
$this->view->gitlabPairs = $this->gitlab->getPairs();
|
||||
$this->view->products = $products;
|
||||
$this->view->projects = $this->product->getProjectPairsByProductIDList(array_keys($products));
|
||||
$this->view->gitlab = $gitlab;
|
||||
$this->view->repoList = array_values($repoList);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajax sync comment.
|
||||
*
|
||||
@@ -1710,7 +1754,8 @@ class repo extends control
|
||||
|
||||
$selectedProjects = array_intersect(array_keys($accessProjects), $postData->projects);
|
||||
|
||||
return print (html::select('projects[]', $accessProjects, $selectedProjects, "class='form-control chosen' multiple"));
|
||||
$name = isset($postData->number) ? "projects[{$postData->number}][]" : 'projects[]';
|
||||
return print (html::select($name, $accessProjects, $selectedProjects, "class='form-control chosen' multiple"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
#repoList td.form-actions {padding: 7px;}
|
||||
#repoList td.form-actions a {line-height: 18px;}
|
||||
|
||||
.main-table .table {cursor: default;}
|
||||
.main-table thead>tr {border-bottom: none; height: 45px;}
|
||||
.main-table tbody>tr {border-bottom: none; height: 42px;}
|
||||
.icon-close {cursor: pointer;}
|
||||
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* Delete the project.
|
||||
*
|
||||
* @param object $icon
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function delItem(icon)
|
||||
{
|
||||
$(icon).closest('tr').remove();
|
||||
checkItem();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the project.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function checkItem()
|
||||
{
|
||||
if(!$("#repoList tbody tr").length) $("#submit").prop('disabled', true);
|
||||
}
|
||||
|
||||
$(function()
|
||||
{
|
||||
checkItem();
|
||||
|
||||
$(document).on('change', '[id^=product]', function()
|
||||
{
|
||||
var i = $(this).attr('id').replace(/[^0-9]/ig, '');
|
||||
var projects = $('#projects' + i).val();
|
||||
var products = $(this).val();
|
||||
$.post(createLink('repo', 'ajaxProjectsOfProducts'), {products, projects, 'number':i}, function(response)
|
||||
{
|
||||
$('#projectContainer' + i).html('').append(response);
|
||||
$('#projects' + i).chosen().trigger("chosen:updated");
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Change server.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function selectServer()
|
||||
{
|
||||
var server = $('#servers').val();
|
||||
window.location.href = createLink('repo', 'import', 'server=' + server);
|
||||
}
|
||||
@@ -46,6 +46,11 @@ $lang->repo->httpClone = 'Clone with HTTP';
|
||||
$lang->repo->cloneUrl = 'Clone URL';
|
||||
$lang->repo->linkTask = 'Link Task';
|
||||
$lang->repo->unlinkedTasks = 'Unlinked Tasks';
|
||||
$lang->repo->importAction = 'Import Repo';
|
||||
$lang->repo->import = 'Import';
|
||||
$lang->repo->importName = 'Name after import';
|
||||
$lang->repo->importServer = 'Please select a server';
|
||||
$lang->repo->gitlabList = 'Gitlab Repo';
|
||||
|
||||
$lang->repo->submit = 'Submit';
|
||||
$lang->repo->cancel = 'Cancel';
|
||||
|
||||
@@ -46,6 +46,11 @@ $lang->repo->httpClone = 'Clone with HTTP';
|
||||
$lang->repo->cloneUrl = 'Clone URL';
|
||||
$lang->repo->linkTask = 'Link Task';
|
||||
$lang->repo->unlinkedTasks = 'Unlinked Tasks';
|
||||
$lang->repo->importAction = 'Import Repo';
|
||||
$lang->repo->import = 'Import';
|
||||
$lang->repo->importName = 'Name after import';
|
||||
$lang->repo->importServer = 'Please select a server';
|
||||
$lang->repo->gitlabList = 'Gitlab Repo';
|
||||
|
||||
$lang->repo->submit = 'Submit';
|
||||
$lang->repo->cancel = 'Cancel';
|
||||
|
||||
@@ -46,6 +46,11 @@ $lang->repo->httpClone = 'Clone with HTTP';
|
||||
$lang->repo->cloneUrl = 'Clone URL';
|
||||
$lang->repo->linkTask = 'Link Task';
|
||||
$lang->repo->unlinkedTasks = 'Unlinked Tasks';
|
||||
$lang->repo->importAction = 'Import Repo';
|
||||
$lang->repo->import = 'Import';
|
||||
$lang->repo->importName = 'Name after import';
|
||||
$lang->repo->importServer = 'Please select a server';
|
||||
$lang->repo->gitlabList = 'Gitlab Repo';
|
||||
|
||||
$lang->repo->submit = 'Soumettre';
|
||||
$lang->repo->cancel = 'Annuler';
|
||||
|
||||
@@ -46,6 +46,11 @@ $lang->repo->httpClone = '使用HTTP克隆';
|
||||
$lang->repo->cloneUrl = '克隆地址';
|
||||
$lang->repo->linkTask = '关联任务';
|
||||
$lang->repo->unlinkedTasks = '未关联任务';
|
||||
$lang->repo->importAction = '导入代码库';
|
||||
$lang->repo->import = '导入';
|
||||
$lang->repo->importName = '导入后的名称';
|
||||
$lang->repo->importServer = '请选择服务器';
|
||||
$lang->repo->gitlabList = 'Gitlab代码库';
|
||||
|
||||
$lang->repo->submit = '提交';
|
||||
$lang->repo->cancel = '取消';
|
||||
|
||||
@@ -244,6 +244,67 @@ class repoModel extends model
|
||||
return $repoID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch create repos.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function batchCreate()
|
||||
{
|
||||
$repos = fixer::input('post')->get();
|
||||
|
||||
$dataAry = array();
|
||||
foreach($repos as $key => $val)
|
||||
{
|
||||
if(strpos($key, 'serviceProject') === 0)
|
||||
{
|
||||
$i = substr($key, 14);
|
||||
if(empty($repos->{'product' . $i})) dao::$errors['product' . $i][] = sprintf($this->lang->error->notempty, $this->lang->repo->product);
|
||||
if(empty($repos->{'name' . $i})) dao::$errors['name' . $i][] = sprintf($this->lang->error->notempty, $this->lang->repo->name);
|
||||
|
||||
if(!empty($repos->{'product' . $i}) and !empty($repos->{'name' . $i})) $dataAry[] = array('serviceProject' => $repos->{'serviceProject' . $i}, 'product' => implode(',', $repos->{'product' . $i}), 'name' => $repos->{'name' . $i}, 'projects' => empty($repos->projects[$i]) ? '' : implode(',', $repos->projects[$i]));
|
||||
}
|
||||
}
|
||||
if(dao::isError()) return false;
|
||||
|
||||
foreach($dataAry as $data)
|
||||
{
|
||||
$repo = new stdclass();
|
||||
$repo->serviceHost = $repos->serviceHost;
|
||||
$repo->serviceProject = $data['serviceProject'];
|
||||
$repo->product = $data['product'];
|
||||
$repo->name = $data['name'];
|
||||
$repo->projects = $data['projects'];
|
||||
$repo->SCM = 'Gitlab';
|
||||
$repo->encoding = 'utf-8';
|
||||
$repo->encrypt = 'base64';
|
||||
|
||||
$this->dao->insert(TABLE_REPO)->data($repo)
|
||||
->batchCheck($this->config->repo->create->requiredFields, 'notempty')
|
||||
->check('serviceHost,serviceProject', 'notempty')
|
||||
->check('name', 'unique', "`SCM` = '{$repo->SCM}'")
|
||||
->check('serviceProject', 'unique', "`SCM` = '{$repo->SCM}' and `serviceHost` = '{$repo->serviceHost}'")
|
||||
->autoCheck()
|
||||
->exec();
|
||||
|
||||
if(dao::isError()) return false;
|
||||
|
||||
$repoID = $this->dao->lastInsertID();
|
||||
|
||||
if($repo->SCM == 'Gitlab')
|
||||
{
|
||||
/* Add webhook. */
|
||||
$repo = $this->getRepoByID($repoID);
|
||||
$this->loadModel('gitlab')->addPushWebhook($repo);
|
||||
}
|
||||
|
||||
$actionID = $this->loadModel('action')->create('repo', $repoID, 'created');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a repo.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/**
|
||||
* The import view file of repo module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2017 禅道软件(青岛)有限公司(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 Gang Zeng <zenggang@cnezsoft.com>
|
||||
* @package repo
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php echo html::a($this->createLink('repo', 'import'), "<span class='text'>{$lang->repo->importAction}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
<div class='input-group w-400px'>
|
||||
<span class='input-group-addon'><?php echo $lang->repo->importServer?></span>
|
||||
<?php echo html::select("servers", $gitlabPairs, $gitlab->id, "class='form-control chosen' onchange='selectServer()'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<form class='main-table form-ajax' id='ajaxForm' method='post'>
|
||||
<?php echo html::hidden("serviceHost", $gitlab->id);?>
|
||||
<table id='repoList' class='table table-form'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-300px'><?php echo $lang->repo->gitlabList;?></th>
|
||||
<th class='c-name w-300px required'><?php echo $lang->repo->importName;?></th>
|
||||
<th class='text-left required'><?php echo $lang->repo->product;?></th>
|
||||
<th class='text-left'><?php echo $lang->repo->projects;?></th>
|
||||
<th class='c-actions-3 text-center'></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($repoList as $key => $repo): ?>
|
||||
<tr class='text'>
|
||||
<td class='text-c-name' title='<?php echo $repo->name;?>'>
|
||||
<?php echo html::hidden("serviceProject{$key}", $repo->id);?>
|
||||
<?php echo $repo->name_with_namespace;?>
|
||||
</td>
|
||||
<td class='text-c-name'>
|
||||
<?php echo html::input("name{$key}", $repo->name, "class='form-control'");?>
|
||||
</td>
|
||||
<td><?php echo html::select("product{$key}[]", $products, '', "class='form-control chosen product' multiple");?></td>
|
||||
<td id='projectContainer<?php echo $key;?>'><?php echo html::select("projects[{$key}][]", $projects, '', "class='form-control chosen project' multiple");?></td>
|
||||
<td class='c-actions'><i onclick="delItem(this)" class="icon-close"></i></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='5' class='text-center form-actions'>
|
||||
<?php echo html::submitButton($lang->repo->import); ?>
|
||||
<?php if(!isonlybody()):?>
|
||||
<?php if($this->app->tab == 'devops') echo html::a(inlink('maintain', ""), $lang->goback, '', 'class="btn btn-wide"');?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -16,6 +16,7 @@
|
||||
<?php echo html::a($this->createLink('repo', 'maintain'), "<span class='text'>{$lang->repo->maintain}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php if(common::hasPriv('repo', 'import')) echo html::a(helper::createLink('repo', 'import'), "<i class='icon icon-import'></i> " . $this->lang->repo->importAction, '', "class='btn btn-link'");?>
|
||||
<?php if(common::hasPriv('repo', 'create')) echo html::a(helper::createLink('repo', 'create'), "<i class='icon icon-plus'></i> " . $this->lang->repo->create, '', "class='btn btn-primary'");?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user