Add Gitlab module.

This commit is contained in:
David.li
2021-06-07 12:03:42 +08:00
parent 0ccc2c3f28
commit f61d966f07
15 changed files with 566 additions and 2 deletions
+2 -1
View File
@@ -180,6 +180,7 @@ define('TABLE_SCORE', '`' . $config->db->prefix . 'score`');
define('TABLE_NOTIFY', '`' . $config->db->prefix . 'notify`');
define('TABLE_OAUTH', '`' . $config->db->prefix . 'oauth`');
define('TABLE_JENKINS', '`' . $config->db->prefix . 'jenkins`');
define('TABLE_GITLAB', '`' . $config->db->prefix . 'gitlab`');
define('TABLE_JOB', '`' . $config->db->prefix . 'job`');
define('TABLE_COMPILE', '`' . $config->db->prefix . 'compile`');
@@ -225,5 +226,5 @@ $config->objectTables['team'] = TABLE_TEAM;
/* Program privs.*/
$config->programPriv = new stdclass();
$config->programPriv->scrum = array('product', 'story', 'productplan', 'release', 'project', 'task', 'build', 'qa', 'bug', 'testcase', 'testsuite', 'testreport', 'caselib', 'doc', 'report', 'repo', 'svn', 'git', 'search', 'tree', 'file', 'jenkins', 'job', 'ci', 'branch');
$config->programPriv->scrum = array('product', 'story', 'productplan', 'release', 'project', 'task', 'build', 'qa', 'bug', 'testcase', 'testsuite', 'testreport', 'caselib', 'doc', 'report', 'repo', 'svn', 'git', 'search', 'tree', 'file', 'jenkins', 'gitlab', 'job', 'ci', 'branch');
$config->programPriv->waterfall = $config->programPriv->scrum + array('workestimation', 'durationestimation', 'budget', 'programplan', 'review', 'reviewissue', 'weekly', 'milestone', 'design', 'issue', 'risk', 'auditplan', 'nc', 'cm', 'pssp');
+2 -1
View File
@@ -38,6 +38,7 @@ $lang->user = new stdclass();
$lang->report = new stdclass();
$lang->repo = new stdclass();
$lang->jenkins = new stdclass();
$lang->gitlab = new stdclass();
$lang->compile = new stdclass();
$lang->job = new stdclass();
$lang->svn = new stdclass();
@@ -150,4 +151,4 @@ $lang->icons['unlock'] = 'unlock-alt';
$lang->icons['confirmStoryChange'] = 'search';
$lang->icons['score'] = 'tint';
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'execution', 'task', 'build', 'productplan', 'project', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage', 'entry', 'jenkins');
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'execution', 'task', 'build', 'productplan', 'project', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage', 'entry', 'jenkins','gitlab');
+3
View File
@@ -318,12 +318,14 @@ $lang->devops->menu = new stdclass();
$lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccomment');
$lang->devops->menu->compile = array('link' => "{$lang->devops->compile}|job|browse", 'subModule' => 'compile,job');
$lang->devops->menu->jenkins = array('link' => "Jenkins|jenkins|browse", 'alias' => 'create,edit');
$lang->devops->menu->gitlab = array('link' => "gitlab|gitlab|browse", 'alias' => 'create,edit');
$lang->devops->menu->maintain = array('link' => "{$lang->devops->repo}|repo|maintain", 'alias' => 'create,edit');
$lang->devops->menu->rules = array('link' => "{$lang->devops->rules}|repo|setrules");
$lang->devops->menuOrder[5] = 'code';
$lang->devops->menuOrder[10] = 'compile';
$lang->devops->menuOrder[15] = 'jenkins';
$lang->devops->menuOrder[16] = 'gitlab';
$lang->devops->menuOrder[20] = 'maintain';
$lang->devops->menuOrder[25] = 'rules';
@@ -520,6 +522,7 @@ $lang->navGroup->devops = 'devops';
$lang->navGroup->repo = 'devops';
$lang->navGroup->job = 'devops';
$lang->navGroup->jenkins = 'devops';
$lang->navGroup->gitlab = 'devops';
$lang->navGroup->compile = 'devops';
$lang->navGroup->ci = 'devops';
$lang->navGroup->svn = 'devops';
+6
View File
@@ -0,0 +1,6 @@
<?php
$config->gitlab->create = new stdclass();
$config->gitlab->edit = new stdclass();
$config->gitlab->create->requiredFields = 'name,url';
$config->gitlab->edit->requiredFields = 'name,url';
+122
View File
@@ -0,0 +1,122 @@
<?php
/**
* The control file of gitlab module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chenqi <chenqi@cnezsoft.com>
* @package product
* @version $Id: ${FILE_NAME} 5144 2020/1/8 8:10 下午 chenqi@cnezsoft.com $
* @link http://www.zentao.net
*/
class gitlab extends control
{
/**
* Browse gitlab.
*
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function browse($orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
if(common::hasPriv('gitlab', 'create')) $this->lang->TRActions = html::a(helper::createLink('gitlab', 'create'), "<i class='icon icon-plus'></i> " . $this->lang->gitlab->create, '', "class='btn btn-primary'");
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
$this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->browse;
$this->view->position[] = $this->lang->gitlab->common;
$this->view->position[] = $this->lang->gitlab->browse;
$this->view->gitlabList = $this->gitlab->getList($orderBy, $pager);
$this->view->orderBy = $orderBy;
$this->view->pager = $pager;
$this->display();
}
/**
* Create a gitlab.
*
* @access public
* @return void
*/
public function create()
{
if($_POST)
{
$gitlabID = $this->gitlab->create();
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $gitlabID));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
}
$this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->create;
$this->view->position[] = html::a(inlink('browse'), $this->lang->gitlab->common);
$this->view->position[] = $this->lang->gitlab->create;
$this->display();
}
/**
* Edit a gitlab.
*
* @param int $id
* @access public
* @return void
*/
public function edit($id)
{
$gitlab = $this->gitlab->getByID($id);
if($_POST)
{
$this->gitlab->update($id);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
}
$this->view->position[] = html::a(inlink('browse'), $this->lang->gitlab->common);
$this->view->position[] = $this->lang->gitlab->edit;
$this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->edit;
$this->view->gitlab = $gitlab;
$this->display();
}
/**
* Delete a gitlab.
*
* @param int $id
* @access public
* @return void
*/
public function delete($id, $confim = 'no')
{
if($confim != 'yes') die(js::confirm($this->lang->gitlab->confirmDelete, inlink('delete', "id=$id&confirm=yes")));
$this->gitlab->delete(TABLE_GITLAB, $id);
die(js::reload('parent'));
}
/**
* Ajax get tasks.
*
* @param int $id
* @access public
* @return void
*/
public function ajaxGetTasks($id)
{
if(empty($id)) die(json_encode(array('' => '')));
$tasks = $this->gitlab->getTasks($id);
die(json_encode($tasks));
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
$lang->jenkins->common = 'Jenkins';
$lang->jenkins->browse = 'Browse Jenkins';
$lang->jenkins->create = 'Create Jenkins';
$lang->jenkins->edit = 'Edit Jenkins';
$lang->jenkins->delete = 'Delete';
$lang->jenkins->confirmDelete = 'Do you want to delete this Jenkins server?';
$lang->jenkins->id = 'ID';
$lang->jenkins->name = 'Name';
$lang->jenkins->url = 'Service URL';
$lang->jenkins->token = 'Token';
$lang->jenkins->account = 'UserName';
$lang->jenkins->password = 'Password';
$lang->jenkins->lblCreate = 'Create Jenkins Server';
$lang->jenkins->desc = 'Description';
$lang->jenkins->tokenFirst = 'Use token if not empty.';
$lang->jenkins->tips = 'Cancel "Prevent Cross Site Request Forgery exploits" when using password.';
+22
View File
@@ -0,0 +1,22 @@
<?php
$lang->jenkins->common = 'Jenkins';
$lang->jenkins->browse = 'Jenkins';
$lang->jenkins->create = 'Create Jenkins';
$lang->jenkins->edit = 'Edit Jenkins';
$lang->jenkins->delete = 'Delete';
$lang->jenkins->confirmDelete = 'Do you want to delete this Jenkins server?';
$lang->jenkins->browseAction = 'Jenkins List';
$lang->jenkins->deleteAction = 'Delete Jenkins';
$lang->jenkins->id = 'ID';
$lang->jenkins->name = 'Name';
$lang->jenkins->url = 'URL';
$lang->jenkins->token = 'Token';
$lang->jenkins->account = 'Username';
$lang->jenkins->password = 'Password';
$lang->jenkins->lblCreate = 'Create Jenkins Server';
$lang->jenkins->desc = 'Description';
$lang->jenkins->tokenFirst = 'Use token if not empty.';
$lang->jenkins->tips = 'Cancel "Prevent Cross Site Request Forgery exploits" when using password.';
+20
View File
@@ -0,0 +1,20 @@
<?php
$lang->jenkins->common = 'Jenkins';
$lang->jenkins->browse = 'Afficher Jenkins';
$lang->jenkins->create = 'Cr閑r Jenkins';
$lang->jenkins->edit = 'Editer Jenkins';
$lang->jenkins->delete = 'Supprimer';
$lang->jenkins->confirmDelete = 'Voulez-vous supprimer ce serveur Jenkins ?';
$lang->jenkins->id = 'ID';
$lang->jenkins->name = 'Nom';
$lang->jenkins->url = 'Service URL';
$lang->jenkins->token = 'Token';
$lang->jenkins->account = 'UserName';
$lang->jenkins->password = 'Password';
$lang->jenkins->lblCreate = 'Cr閑r Serveur Jenkins';
$lang->jenkins->desc = 'Description';
$lang->jenkins->tokenFirst = 'Utiliser un Token si non vide.';
$lang->jenkins->tips = 'Cancel "Prevent Cross Site Request Forgery exploits" when using password.';
$lang->jenkins->tips = "Annuler Emp阠her les exploits de contrefa鏾n de demande intersite lors de l'utilisation du mot de passe.";
+19
View File
@@ -0,0 +1,19 @@
<?php
$lang->jenkins->common = 'Jenkins';
$lang->jenkins->browse = 'Jenkins';
$lang->jenkins->create = 'Tạo Jenkins';
$lang->jenkins->edit = 'Sửa Jenkins';
$lang->jenkins->delete = 'Xóa';
$lang->jenkins->confirmDelete = 'Bạn có muốn xóa máy chủ Jenkins này?';
$lang->jenkins->id = 'ID';
$lang->jenkins->name = 'Tên';
$lang->jenkins->url = 'URL';
$lang->jenkins->token = 'Token';
$lang->jenkins->account = 'Người dùng';
$lang->jenkins->password = 'Mật khẩu';
$lang->jenkins->lblCreate = 'Tạo Jenkins Server';
$lang->jenkins->desc = 'Mô tả';
$lang->jenkins->tokenFirst = 'Sử dụng token nếu không trống.';
$lang->jenkins->tips = 'Hủy "Ngăn chặn khai thác yêu cầu trang web giả mạo" khi sử dụng mật khẩu.';
+22
View File
@@ -0,0 +1,22 @@
<?php
$lang->gitlab->common = 'gitlab';
$lang->gitlab->browse = '浏览gitlab';
$lang->gitlab->create = '添加gitlab';
$lang->gitlab->edit = '编辑gitlab';
$lang->gitlab->delete = '删除';
$lang->gitlab->confirmDelete = '确认删除该gitlab吗?';
$lang->gitlab->browseAction = 'gitlab列表';
$lang->gitlab->deleteAction = '删除gitlab';
$lang->gitlab->id = 'ID';
$lang->gitlab->name = '名称';
$lang->gitlab->url = '服务地址';
$lang->gitlab->token = 'Token';
$lang->gitlab->account = '用户名';
$lang->gitlab->password = '密码';
$lang->gitlab->lblCreate = '添加gitlab服务器';
$lang->gitlab->desc = '描述';
$lang->gitlab->tokenFirst = 'Token不为空时,优先使用Token。';
$lang->gitlab->tips = '使用密码时,请在gitlab全局安全设置中禁用"防止跨站点请求伪造"选项。';
+22
View File
@@ -0,0 +1,22 @@
<?php
$lang->jenkins->common = 'Jenkins';
$lang->jenkins->browse = '瀏覽Jenkins';
$lang->jenkins->create = '添加Jenkins';
$lang->jenkins->edit = '編輯Jenkins';
$lang->jenkins->delete = '刪除';
$lang->jenkins->confirmDelete = '確認刪除該Jenkins嗎?';
$lang->jenkins->browseAction = 'Jenkins列表';
$lang->jenkins->deleteAction = '刪除Jenkins';
$lang->jenkins->id = 'ID';
$lang->jenkins->name = '名稱';
$lang->jenkins->url = '服務地址';
$lang->jenkins->token = 'Token';
$lang->jenkins->account = '用戶名';
$lang->jenkins->password = '密碼';
$lang->jenkins->lblCreate = '添加Jenkins伺服器';
$lang->jenkins->desc = '描述';
$lang->jenkins->tokenFirst = 'Token不為空時,優先使用Token。';
$lang->jenkins->tips = '使用密碼時,請在Jenkins全局安全設置中禁用"防止跨站點請求偽造"選項。';
+139
View File
@@ -0,0 +1,139 @@
<?php
/**
* The model file of gitlab module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chenqi <chenqi@cnezsoft.com>
* @package product
* @version $Id: $
* @link http://www.zentao.net
*/
class gitlabModel extends model
{
/**
* Get a gitlab by id.
*
* @param int $id
* @access public
* @return object
*/
public function getByID($id)
{
$gitlab = $this->dao->select('*')->from(TABLE_GITLAB)->where('id')->eq($id)->fetch();
$gitlab->password = base64_decode($gitlab->password);
return $gitlab;
}
/**
* Get gitlab list.
*
* @param string $orderBy
* @param object $pager
* @access public
* @return array
*/
public function getList($orderBy = 'id_desc', $pager = null)
{
return $this->dao->select('*')->from(TABLE_GITLAB)
->where('deleted')->eq('0')
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
}
/**
* Get gitlab pairs
*
* @return array
*/
public function getPairs()
{
$gitlab = $this->dao->select('id,name')->from(TABLE_GITLAB)
->where('deleted')->eq('0')
->orderBy('id')->fetchPairs('id', 'name');
$gitlab = array('' => '') + $gitlab;
return $gitlab;
}
/**
* Get gitlab tasks.
*
* @param int $id
* @access public
* @return array
*/
public function getTasks($id)
{
$gitlab = $this->getById($id);
$gitlabServer = $gitlab->url;
$gitlabUser = $gitlab->account;
$gitlabPassword = $gitlab->token ? $gitlab->token : $gitlab->password;
$userPWD = "$gitlabUser:$gitlabPassword";
$response = common::http($gitlabServer . '/api/json/items/list', '', array(CURLOPT_USERPWD => $userPWD));
$response = json_decode($response);
$tasks = array();
if(isset($response->jobs))
{
foreach($response->jobs as $job) $tasks[basename($job->url)] = $job->name;
}
return $tasks;
}
/**
* Create a gitlab.
*
* @access public
* @return bool
*/
public function create()
{
$gitlab = fixer::input('post')
->add('createdBy', $this->app->user->account)
->add('createdDate', helper::now())
->skipSpecial('url,token,account,password')
->get();
$gitlab->password = base64_encode($gitlab->password);
$this->dao->insert(TABLE_GITLAB)->data($gitlab)
->batchCheck($this->config->gitlab->create->requiredFields, 'notempty')
->batchCheck("url", 'URL')
->autoCheck()
->exec();
if(dao::isError()) return false;
return $this->dao->lastInsertId();
}
/**
* Update a gitlab.
*
* @param int $id
* @access public
* @return bool
*/
public function update($id)
{
$gitlab = fixer::input('post')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::now())
->skipSpecial('url,token,account,password')
->get();
$gitlab->password = base64_encode($gitlab->password);
$this->dao->update(TABLE_GITLAB)->data($gitlab)
->batchCheck($this->config->gitlab->edit->requiredFields, 'notempty')
->batchCheck("url", 'URL')
->autoCheck()
->where('id')->eq($id)
->exec();
return !dao::isError();
}
}
+52
View File
@@ -0,0 +1,52 @@
<?php
/**
* The browse view file of gitlab module of ZenTaoPMS.
*
* @copyright Copyright 2009-2017 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Gang Liu <liugang@cnezsoft.com>
* @package gitlab
* @version $Id$
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php'; ?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-right">
<?php if(common::hasPriv('gitlab', 'create')) common::printLink('gitlab', 'create', "", "<i class='icon icon-plus'></i> " . $lang->gitlab->create, '', "class='btn btn-primary'");?>
</div>
</div>
<div id='mainContent' class='main-row'>
<form class='main-table' id='ajaxForm' method='post'>
<table id='gitlabList' class='table has-sort-head table-fixed'>
<thead>
<tr>
<?php $vars = "orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"; ?>
<th class='w-60px'><?php common::printOrderLink('id', $orderBy, $vars, $lang->gitlab->id); ?></th>
<th class='w-200px text-left'><?php common::printOrderLink('name', $orderBy, $vars, $lang->gitlab->name); ?></th>
<th class='text-left'><?php common::printOrderLink('url', $orderBy, $vars, $lang->gitlab->url); ?></th>
<th class='w-100px c-actions-4'><?php echo $lang->actions; ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($gitlabList as $id => $gitlab): ?>
<tr>
<td class='text-center'><?php echo $id; ?></td>
<td class='text' title='<?php echo $gitlab->name; ?>'><?php echo $gitlab->name; ?></td>
<td class='text' title='<?php echo $gitlab->url; ?>'><?php echo $gitlab->url; ?></td>
<td class='c-actions text-left'>
<?php
common::printIcon('gitlab', 'edit', "gitlabID=$id", '', 'list', 'edit');
if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'delete', "gitlabID=$id"), '<i class="icon-trash"></i>', 'hiddenwin', "title='{$lang->gitlab->delete}' class='btn'");
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php if($gitlabList):?>
<div class='table-footer'><?php $pager->show('right', 'pagerjs');?></div>
<?php endif; ?>
</form>
</div>
<?php include '../../common/view/footer.html.php'; ?>
+58
View File
@@ -0,0 +1,58 @@
<?php
/**
* The create view file of gitlab module of ZenTaoPMS.
*
* @copyright Copyright 2009-2017 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Gang Liu <liugang@cnezsoft.com>
* @package gitlab
* @version $Id$
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php'; ?>
<div id='mainContent' class='main-row'>
<div class='main-col main-content'>
<div class='center-block'>
<div class='main-header'>
<h2><?php echo $lang->gitlab->lblCreate;?></h2>
</div>
<form id='gitlabForm' method='post' class='form-ajax'>
<table class='table table-form'>
<tr>
<th><?php echo $lang->gitlab->name; ?></th>
<td class='required'><?php echo html::input('name', '', "class='form-control'"); ?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->url; ?></th>
<td class='required'><?php echo html::input('url', '', "class='form-control'"); ?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->account;?></th>
<td><?php echo html::input('account', '', "class='form-control'");?></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->token;?></th>
<td><?php echo html::input('token', '', "class='form-control'");?></td>
<td><?php echo $lang->gitlab->tokenFirst;?></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->password;?></th>
<td><?php echo html::password('password', '', "class='form-control'");?></td>
<td><?php echo $lang->gitlab->tips;?></td>
</tr>
<tr>
<th></th>
<td class='text-center form-actions'>
<?php echo html::submitButton(); ?>
<?php echo html::backButton(); ?>
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
<?php include '../../common/view/footer.html.php'; ?>
+58
View File
@@ -0,0 +1,58 @@
<?php
/**
* The edit view file of gitlab module of ZenTaoPMS.
*
* @copyright Copyright 2009-2017 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Gang Liu <liugang@cnezsoft.com>
* @package gitlab
* @version $Id$
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php'; ?>
<div id='mainContent' class='main-row'>
<div class='main-col main-content'>
<div class='center-block'>
<div class='main-header'>
<h2><?php echo $lang->gitlab->edit; ?></h2>
</div>
<form id='gitlabForm' method='post' class='form-ajax'>
<table class='table table-form'>
<tr>
<th><?php echo $lang->gitlab->name; ?></th>
<td class='required'><?php echo html::input('name', $gitlab->name, "class='form-control'"); ?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->url; ?></th>
<td class='required'><?php echo html::input('url', $gitlab->url, "class='form-control'"); ?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->account;?></th>
<td><?php echo html::input('account', $gitlab->account, "class='form-control'");?></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->token;?></th>
<td><?php echo html::input('token', $gitlab->token, "class='form-control'");?></td>
<td><?php echo $lang->gitlab->tokenFirst;?></td>
</tr>
<tr>
<th><?php echo $lang->gitlab->password;?></th>
<td><?php echo html::password('password', $gitlab->password, "class='form-control'");?></td>
<td><?php echo $lang->gitlab->tips;?></td>
</tr>
<tr>
<th></th>
<td class='text-center form-actions'>
<?php echo html::submitButton(); ?>
<?php echo html::backButton() ?>
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
<?php include '../../common/view/footer.html.php'; ?>