* Finish task#100463
This commit is contained in:
@@ -2059,7 +2059,7 @@ class InstanceModel extends model
|
||||
if($action == 'uninstall') return $instance->type != 'external' && $this->canDo('uninstall', $instance);
|
||||
if($action == 'visit') return $instance->type != 'external' ? ($instance->domain && $this->canDo('visit', $instance)) : true;
|
||||
if($action == 'upgrade') return !empty($instance->latestVersion);
|
||||
if($action == 'bindUser') return ($instance->externalID && in_array($instance->appName, array('Gitlab', 'Gitea', 'Gogs'))) ? true : false;
|
||||
if($action == 'bindUser') return ($instance->externalID && in_array($instance->appName, array('GitLab', 'Gitea', 'Gogs'))) ? true : false;
|
||||
if($action == 'edit') return $instance->type != 'external' ? false : true;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -116,13 +116,6 @@ function changeRepo(event)
|
||||
$('#svnDirBox').append(html);
|
||||
})
|
||||
}
|
||||
|
||||
var triggerOptions = $('#triggerType').zui('picker').options.items;
|
||||
for(i in triggerOptions)
|
||||
{
|
||||
if(triggerOptions[i].value == 'tag') triggerOptions[i].text = data.type == 'gitlab' ? buildTag : dirChange;
|
||||
}
|
||||
$('#triggerType').zui('picker').render({items: triggerOptions});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -81,15 +81,16 @@ function onScmChange()
|
||||
}
|
||||
|
||||
(scm == 'Git') ? $('.tips-git').removeClass('hidden') : $('.tips-git').addClass('hidden');
|
||||
|
||||
if(scm == 'Git' || scm == 'Gitea' || scm == 'Gogs')
|
||||
{
|
||||
$('.account-fields').hide();
|
||||
$('.account-fields').addClass('hidden');
|
||||
$('#path').attr('placeholder', pathGitTip);
|
||||
$('#client').attr('placeholder', clientGitTip);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.account-fields').show();
|
||||
$('.account-fields').removeClass('hidden');
|
||||
$('#path').attr('placeholder', pathSvnTip);
|
||||
$('#client').attr('placeholder', clientSvnTip);
|
||||
}
|
||||
@@ -125,3 +126,23 @@ function onScmChange()
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On acl change event.
|
||||
*
|
||||
* @param event $event
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function onAclChange(event)
|
||||
{
|
||||
const acl = $(event.target).val();
|
||||
if(acl == 'private' || acl == 'custom')
|
||||
{
|
||||
$('#whitelist').removeClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#whitelist').addClass('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,14 @@ function onProjectChange()
|
||||
*/
|
||||
function onScmChange(event)
|
||||
{
|
||||
var scm = $('[name=SCM]').val();
|
||||
if(typeof(event) == 'object')
|
||||
{
|
||||
var scm = $(event.target).val();
|
||||
}
|
||||
else
|
||||
{
|
||||
var scm = repoSCM;
|
||||
}
|
||||
if(!scm)
|
||||
{
|
||||
for(i in scmList)
|
||||
@@ -71,13 +78,13 @@ function onScmChange(event)
|
||||
(scm == 'Git') ? $('.tips-git').removeClass('hidden') : $('.tips-git').addClass('hidden');
|
||||
if(scm == 'Git' || scm == 'Gitea' || scm == 'Gogs')
|
||||
{
|
||||
$('.account-fields').hide();
|
||||
$('.account-fields').addClass('hidden');
|
||||
$('#path').attr('placeholder', pathGitTip);
|
||||
$('#client').attr('placeholder', clientGitTip);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.account-fields').show();
|
||||
$('.account-fields').removeClass('hidden');
|
||||
$('#path').attr('placeholder', pathSvnTip);
|
||||
$('#client').attr('placeholder', clientSvnTip);
|
||||
}
|
||||
@@ -116,3 +123,23 @@ function onScmChange(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On acl change event.
|
||||
*
|
||||
* @param event $event
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function onAclChange(event)
|
||||
{
|
||||
const acl = $(event.target).val();
|
||||
if(acl == 'private' || acl == 'custom')
|
||||
{
|
||||
$('#whitelist').removeClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#whitelist').addClass('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ $lang->repo->file = 'File';
|
||||
$lang->repo->action = 'Action';
|
||||
$lang->repo->code = 'Code';
|
||||
$lang->repo->review = 'Repo Review';
|
||||
$lang->repo->acl = 'Privilege';
|
||||
$lang->repo->acl = 'ACL';
|
||||
$lang->repo->group = 'Group';
|
||||
$lang->repo->user = 'User';
|
||||
$lang->repo->info = 'Version Info';
|
||||
@@ -179,6 +179,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab';
|
||||
$lang->repo->notice = new stdclass();
|
||||
$lang->repo->notice->syncing = 'Synchronizing. Please wait ...';
|
||||
$lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...';
|
||||
$lang->repo->notice->syncFailed = 'Synchronized failed.';
|
||||
$lang->repo->notice->syncedCount = 'The number of records synchronized is ';
|
||||
$lang->repo->notice->delete = 'Do you want to delete this repo?';
|
||||
$lang->repo->notice->successDelete = 'Repository is removed.';
|
||||
@@ -240,3 +241,5 @@ $lang->repo->typeList['performance'] = 'Performance';
|
||||
$lang->repo->typeList['security'] = 'Security';
|
||||
$lang->repo->typeList['redundancy'] = 'Redundancy';
|
||||
$lang->repo->typeList['logicError'] = 'Logic Error';
|
||||
|
||||
$lang->repo->featureBar['maintain']['all'] = 'All';
|
||||
|
||||
@@ -108,7 +108,7 @@ $lang->repo->file = 'File';
|
||||
$lang->repo->action = 'Action';
|
||||
$lang->repo->code = 'Code';
|
||||
$lang->repo->review = 'Repo Review';
|
||||
$lang->repo->acl = 'Privilege';
|
||||
$lang->repo->acl = 'ACL';
|
||||
$lang->repo->group = 'Group';
|
||||
$lang->repo->user = 'User';
|
||||
$lang->repo->info = 'Version Info';
|
||||
@@ -179,6 +179,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab';
|
||||
$lang->repo->notice = new stdclass();
|
||||
$lang->repo->notice->syncing = 'Synchronizing. Please wait ...';
|
||||
$lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...';
|
||||
$lang->repo->notice->syncFailed = 'Synchronized failed.';
|
||||
$lang->repo->notice->syncedCount = 'The number of records synchronized is ';
|
||||
$lang->repo->notice->delete = 'Do you want to delete this repo?';
|
||||
$lang->repo->notice->successDelete = 'Repository is removed.';
|
||||
|
||||
@@ -108,7 +108,7 @@ $lang->repo->file = 'Fichier';
|
||||
$lang->repo->action = 'Action';
|
||||
$lang->repo->code = 'Code';
|
||||
$lang->repo->review = 'Révision Ref';
|
||||
$lang->repo->acl = 'Privilège';
|
||||
$lang->repo->acl = 'ACL';
|
||||
$lang->repo->group = 'Groupe';
|
||||
$lang->repo->user = 'User';
|
||||
$lang->repo->info = 'Info Version';
|
||||
@@ -179,6 +179,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab';
|
||||
$lang->repo->notice = new stdclass();
|
||||
$lang->repo->notice->syncing = 'Synchronisation en cours. Veuillez patienter ...';
|
||||
$lang->repo->notice->syncComplete = 'Synchronisé. Vous allez être redirigé ...';
|
||||
$lang->repo->notice->syncFailed = 'Synchronized failed.';
|
||||
$lang->repo->notice->syncedCount = "Le nombre d'enregistrements synchronisés est ";
|
||||
$lang->repo->notice->delete = 'Etes vous certain de vouloir supprimer ce référentiel ?';
|
||||
$lang->repo->notice->successDelete = 'Le référentiel est supprimé.';
|
||||
@@ -240,3 +241,5 @@ $lang->repo->typeList['performance'] = 'Performance';
|
||||
$lang->repo->typeList['security'] = 'Securité';
|
||||
$lang->repo->typeList['redundancy'] = 'Redondance';
|
||||
$lang->repo->typeList['logicError'] = 'Erreur Logique';
|
||||
|
||||
$lang->repo->featureBar['maintain']['all'] = 'All';
|
||||
|
||||
@@ -108,7 +108,7 @@ $lang->repo->file = '文件';
|
||||
$lang->repo->action = '操作';
|
||||
$lang->repo->code = '代码';
|
||||
$lang->repo->review = '评审';
|
||||
$lang->repo->acl = '权限';
|
||||
$lang->repo->acl = '访问控制';
|
||||
$lang->repo->group = '分组';
|
||||
$lang->repo->user = '用户';
|
||||
$lang->repo->info = '版本信息';
|
||||
@@ -166,6 +166,10 @@ $lang->repo->scmList['Gitea'] = 'Gitea';
|
||||
$lang->repo->scmList['Git'] = '本地 Git';
|
||||
$lang->repo->scmList['Subversion'] = 'Subversion';
|
||||
|
||||
$lang->repo->aclList['private'] = '私有 (所属产品和相关项目人员可访问)';
|
||||
$lang->repo->aclList['open'] = '公开 (有DevOps视图权限即可访问)';
|
||||
$lang->repo->aclList['custom'] = '自定义';
|
||||
|
||||
$lang->repo->gitlabHost = 'GitLab Server';
|
||||
$lang->repo->gitlabToken = 'GitLab Token';
|
||||
$lang->repo->gitlabProject = 'GitLab 项目';
|
||||
@@ -179,6 +183,7 @@ $lang->repo->placeholder->gitlabHost = '请填写GitLab访问地址';
|
||||
$lang->repo->notice = new stdclass();
|
||||
$lang->repo->notice->syncing = '正在同步中, 请稍等...';
|
||||
$lang->repo->notice->syncComplete = '同步完成,正在跳转...';
|
||||
$lang->repo->notice->syncFailed = '同步失败';
|
||||
$lang->repo->notice->syncedCount = '已经同步记录条数';
|
||||
$lang->repo->notice->delete = '是否要删除该代码库?';
|
||||
$lang->repo->notice->successDelete = '已经成功删除代码库。';
|
||||
|
||||
+21
-2
@@ -11,8 +11,23 @@ class repoModel extends model
|
||||
public function checkPriv($repo)
|
||||
{
|
||||
$account = $this->app->user->account;
|
||||
if(strpos(",{$this->app->company->admins},", ",$account,") !== false) return true;
|
||||
if(empty($repo->acl->groups) and empty($repo->acl->users)) return true;
|
||||
$acl = !empty($repo->acl->acl) ? $repo->acl->acl : 'custom';
|
||||
|
||||
if(strpos(",{$this->app->company->admins},", ",$account,") !== false || $acl == 'open') return true;
|
||||
if($acl == 'custom' && empty($repo->acl->groups) && empty($repo->acl->users)) return true;
|
||||
|
||||
if($acl == 'private')
|
||||
{
|
||||
$userProjects = explode(',', $this->app->user->view->projects);
|
||||
$userProducts = explode(',', $this->app->user->view->products);
|
||||
$repoProjects = explode(',', $repo->projects);
|
||||
$repoProducts = explode(',', $repo->product);
|
||||
|
||||
$sameProjects = array_intersect($userProjects, $repoProjects);
|
||||
$sameProducts = array_intersect($userProducts, $repoProducts);
|
||||
if(!empty($sameProjects) || !empty($sameProducts)) return true;
|
||||
}
|
||||
|
||||
if(!empty($repo->acl->groups))
|
||||
{
|
||||
foreach($this->app->user->groups as $group)
|
||||
@@ -21,6 +36,7 @@ class repoModel extends model
|
||||
}
|
||||
}
|
||||
if(!empty($repo->acl->users) and in_array($account, $repo->acl->users)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -589,7 +605,10 @@ class repoModel extends model
|
||||
if($repo->encrypt == 'base64') $repo->password = base64_decode($repo->password);
|
||||
$repo->codePath = $repo->path;
|
||||
if(in_array(strtolower($repo->SCM), $this->config->repo->gitServiceList)) $repo = $this->processGitService($repo);
|
||||
|
||||
$repo->acl = json_decode($repo->acl);
|
||||
if(empty($repo->acl)) $repo->acl = new stdclass();
|
||||
if(empty($repo->acl->acl)) $repo->acl->acl = 'custom';
|
||||
return $repo;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,7 @@ formPanel
|
||||
(
|
||||
set::width('1/2'),
|
||||
set::name("serviceProject"),
|
||||
set::items(array()),
|
||||
set::label($lang->repo->serviceProject),
|
||||
set::control("picker"),
|
||||
),
|
||||
@@ -162,38 +163,57 @@ formPanel
|
||||
)
|
||||
)
|
||||
),
|
||||
formGroup
|
||||
formRow
|
||||
(
|
||||
set::label($lang->repo->acl),
|
||||
inputGroup
|
||||
set::id('aclList'),
|
||||
formGroup
|
||||
(
|
||||
$lang->repo->group,
|
||||
width('full'),
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[groups][]",
|
||||
'id' => "aclgroups",
|
||||
'value' => NULL,
|
||||
'type' => "picker",
|
||||
'items' => $groups,
|
||||
'multiple' => true
|
||||
)))
|
||||
),
|
||||
inputGroup
|
||||
(
|
||||
$lang->repo->user,
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[users][]",
|
||||
'id' => "aclusers",
|
||||
'value' => NULL,
|
||||
'type' => "picker",
|
||||
'items' => $users,
|
||||
'multiple' => true
|
||||
))),
|
||||
setClass('mt-2')
|
||||
set::width('1/2'),
|
||||
set::name('acl[acl]'),
|
||||
set::label($lang->repo->acl),
|
||||
set::control('radioList'),
|
||||
set::items($lang->repo->aclList),
|
||||
set::value('open'),
|
||||
on::change('onAclChange'),
|
||||
)
|
||||
),
|
||||
formRow
|
||||
(
|
||||
set::id('whitelist'),
|
||||
setClass('hidden'),
|
||||
formGroup
|
||||
(
|
||||
set::label($lang->product->whitelist),
|
||||
inputGroup
|
||||
(
|
||||
$lang->repo->group,
|
||||
width('full'),
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[groups][]",
|
||||
'id' => "aclgroups",
|
||||
'value' => NULL,
|
||||
'type' => "picker",
|
||||
'items' => $groups,
|
||||
'multiple' => true
|
||||
)))
|
||||
),
|
||||
inputGroup
|
||||
(
|
||||
$lang->repo->user,
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[users][]",
|
||||
'id' => "aclusers",
|
||||
'value' => NULL,
|
||||
'type' => "picker",
|
||||
'items' => $users,
|
||||
'multiple' => true
|
||||
))),
|
||||
setClass('mt-2')
|
||||
)
|
||||
),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
set::name("desc"),
|
||||
|
||||
@@ -15,6 +15,7 @@ jsVar('pathSvnTip', $lang->repo->example->path->svn);
|
||||
jsVar('clientGitTip', $lang->repo->example->client->git);
|
||||
jsVar('clientSvnTip', $lang->repo->example->client->svn);
|
||||
jsVar('scmList', $lang->repo->scmList);
|
||||
jsVar('repoSCM', $repo->SCM);
|
||||
|
||||
formPanel
|
||||
(
|
||||
@@ -168,38 +169,57 @@ formPanel
|
||||
)
|
||||
)
|
||||
),
|
||||
formGroup
|
||||
formRow
|
||||
(
|
||||
set::label($lang->repo->acl),
|
||||
inputGroup
|
||||
set::id('aclList'),
|
||||
formGroup
|
||||
(
|
||||
$lang->repo->group,
|
||||
width('full'),
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[groups][]",
|
||||
'id' => "aclgroups",
|
||||
'value' => empty($repo->acl->groups) ? '' : implode(',', $repo->acl->groups),
|
||||
'type' => "picker",
|
||||
'items' => $groups,
|
||||
'multiple' => true
|
||||
)))
|
||||
),
|
||||
inputGroup
|
||||
(
|
||||
$lang->repo->user,
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[users][]",
|
||||
'id' => "aclusers",
|
||||
'value' => empty($repo->acl->users) ? '' : implode(',', $repo->acl->users),
|
||||
'type' => "picker",
|
||||
'items' => $users,
|
||||
'multiple' => true
|
||||
))),
|
||||
setClass('mt-2')
|
||||
set::width('1/2'),
|
||||
set::name('acl[acl]'),
|
||||
set::label($lang->repo->acl),
|
||||
set::control('radioList'),
|
||||
set::items($lang->repo->aclList),
|
||||
set::value($repo->acl->acl),
|
||||
on::change('onAclChange'),
|
||||
)
|
||||
),
|
||||
formRow
|
||||
(
|
||||
set::id('whitelist'),
|
||||
$repo->acl->acl == 'open' ? setClass('hidden') : null,
|
||||
formGroup
|
||||
(
|
||||
set::label($lang->product->whitelist),
|
||||
inputGroup
|
||||
(
|
||||
$lang->repo->group,
|
||||
width('full'),
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[groups][]",
|
||||
'id' => "aclgroups",
|
||||
'value' => empty($repo->acl->groups) ? '' : implode(',', $repo->acl->groups),
|
||||
'type' => "picker",
|
||||
'items' => $groups,
|
||||
'multiple' => true
|
||||
)))
|
||||
),
|
||||
inputGroup
|
||||
(
|
||||
$lang->repo->user,
|
||||
control(set(array
|
||||
(
|
||||
'name' => "acl[users][]",
|
||||
'id' => "aclusers",
|
||||
'value' => empty($repo->acl->users) ? '' : implode(',', $repo->acl->users),
|
||||
'type' => "picker",
|
||||
'items' => $users,
|
||||
'multiple' => true
|
||||
))),
|
||||
setClass('mt-2')
|
||||
)
|
||||
),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
set::name("desc"),
|
||||
|
||||
+1
-1
@@ -34,13 +34,13 @@ class repoZen extends repo
|
||||
->setIf($this->post->SCM == 'Git', 'account', '')
|
||||
->setIf($this->post->SCM == 'Git', 'password', '')
|
||||
->setIf(in_array($this->post->SCM, array('Gitea', 'Gogs')), 'path', $_POST['path'])
|
||||
->setIf($this->post->acl != '', 'acl', json_encode($this->post->acl))
|
||||
->setIf($this->post->encrypt == 'base64', 'password', base64_encode($this->post->password))
|
||||
->skipSpecial('path,client,account,password')
|
||||
->setDefault('product', '')->join('product', ',')
|
||||
->setDefault('projects', '')->join('projects', ',')
|
||||
->get();
|
||||
|
||||
if($this->post->acl != '') $repo->acl = json_encode($this->post->acl);
|
||||
if($repo->SCM == 'Subversion')
|
||||
{
|
||||
$scm = $this->app->loadClass('scm');
|
||||
|
||||
Reference in New Issue
Block a user