diff --git a/module/sonarqube/config.php b/module/sonarqube/config.php index d6b37b8792..b89e1bcb76 100644 --- a/module/sonarqube/config.php +++ b/module/sonarqube/config.php @@ -16,3 +16,39 @@ $config->sonarqube->createproject = new stdclass(); $config->sonarqube->createproject->requiredFields = 'projectName,projectKey'; $config->sonarqube->cacheTime = 10; + +global $lang; +$config->sonarqube->actionList = array(); +$config->sonarqube->actionList['list']['icon'] = 'list'; +$config->sonarqube->actionList['list']['text'] = $lang->sonarqube->browseProject; +$config->sonarqube->actionList['list']['hint'] = $lang->sonarqube->browseProject; +$config->sonarqube->actionList['list']['url'] = helper::createLink('sonarqube', 'browseProject',"sonarqubeID={id}"); + +$config->sonarqube->actionList['edit']['icon'] = 'edit'; +$config->sonarqube->actionList['edit']['text'] = $lang->sonarqube->edit; +$config->sonarqube->actionList['edit']['hint'] = $lang->sonarqube->edit; +$config->sonarqube->actionList['edit']['url'] = helper::createLink('sonarqube', 'edit',"sonarqubeID={id}"); + +$config->sonarqube->actionList['delete']['icon'] = 'trash'; +$config->sonarqube->actionList['delete']['text'] = $lang->sonarqube->delete; +$config->sonarqube->actionList['delete']['hint'] = $lang->sonarqube->delete; +$config->sonarqube->actionList['delete']['ajaxSubmit'] = true; +$config->sonarqube->actionList['delete']['url'] = helper::createLink('sonarqube', 'delete',"sonarqubeID={id}"); + +$config->sonarqube->actionList['deleteProject']['icon'] = 'trash'; +$config->sonarqube->actionList['deleteProject']['text'] = $lang->sonarqube->deleteProject; +$config->sonarqube->actionList['deleteProject']['hint'] = $lang->sonarqube->deleteProject; +$config->sonarqube->actionList['deleteProject']['ajaxSubmit'] = true; +$config->sonarqube->actionList['deleteProject']['data-confirm'] = $lang->sonarqube->confirmDeleteProject; +$config->sonarqube->actionList['deleteProject']['url'] = helper::createLink('sonarqube', 'deleteProject',"sonarqubeID={sonarqubeID}&projectID={projectKey}"); + +$config->sonarqube->actionList['execJob']['icon'] = 'sonarqube'; +$config->sonarqube->actionList['execJob']['text'] = $lang->sonarqube->execJob; +$config->sonarqube->actionList['execJob']['hint'] = $lang->sonarqube->execJob; +$config->sonarqube->actionList['execJob']['url'] = helper::createLink('sonarqube', 'execJob',"jobID={jobID}"); + +$config->sonarqube->actionList['reportView']['icon'] = 'audit'; +$config->sonarqube->actionList['reportView']['text'] = $lang->sonarqube->reportView; +$config->sonarqube->actionList['reportView']['hint'] = $lang->sonarqube->reportView; +$config->sonarqube->actionList['reportView']['data-toggle'] = 'modal'; +$config->sonarqube->actionList['reportView']['url'] = helper::createLink('sonarqube', 'reportView',"jobID={jobID}"); diff --git a/module/sonarqube/config/dtable.php b/module/sonarqube/config/dtable.php index 20c6fb7110..0971f4aec8 100644 --- a/module/sonarqube/config/dtable.php +++ b/module/sonarqube/config/dtable.php @@ -4,49 +4,56 @@ $app->loadLang('sonarqube'); $config->sonarqube->dtable = new stdclass(); -$config->sonarqube->dtable->fieldList['id']['title'] = 'ID'; -$config->sonarqube->dtable->fieldList['id']['name'] = 'id'; -$config->sonarqube->dtable->fieldList['id']['type'] = 'number'; -$config->sonarqube->dtable->fieldList['id']['sortType'] = 'desc'; -$config->sonarqube->dtable->fieldList['id']['checkbox'] = false; -$config->sonarqube->dtable->fieldList['id']['width'] = '80'; +$config->sonarqube->dtable->browse = new stdclass(); +$config->sonarqube->dtable->browse->fieldList['id']['title'] = 'ID'; +$config->sonarqube->dtable->browse->fieldList['id']['name'] = 'id'; +$config->sonarqube->dtable->browse->fieldList['id']['type'] = 'number'; +$config->sonarqube->dtable->browse->fieldList['id']['sortType'] = 'desc'; +$config->sonarqube->dtable->browse->fieldList['id']['checkbox'] = false; +$config->sonarqube->dtable->browse->fieldList['id']['width'] = '80'; -$config->sonarqube->dtable->fieldList['name']['title'] = $lang->sonarqube->name; -$config->sonarqube->dtable->fieldList['name']['name'] = 'name'; -$config->sonarqube->dtable->fieldList['name']['type'] = 'desc'; -$config->sonarqube->dtable->fieldList['name']['sortType'] = true; -$config->sonarqube->dtable->fieldList['name']['hint'] = true; -$config->sonarqube->dtable->fieldList['name']['minWidth'] = '356'; +$config->sonarqube->dtable->browse->fieldList['name']['title'] = $lang->sonarqube->name; +$config->sonarqube->dtable->browse->fieldList['name']['name'] = 'name'; +$config->sonarqube->dtable->browse->fieldList['name']['type'] = 'desc'; +$config->sonarqube->dtable->browse->fieldList['name']['sortType'] = true; +$config->sonarqube->dtable->browse->fieldList['name']['hint'] = true; +$config->sonarqube->dtable->browse->fieldList['name']['minWidth'] = '356'; -$config->sonarqube->dtable->fieldList['url']['title'] = $lang->sonarqube->url; -$config->sonarqube->dtable->fieldList['url']['name'] = 'url'; -$config->sonarqube->dtable->fieldList['url']['type'] = 'desc'; -$config->sonarqube->dtable->fieldList['url']['sortType'] = true; -$config->sonarqube->dtable->fieldList['url']['hint'] = true; -$config->sonarqube->dtable->fieldList['url']['minWidth'] = '356'; +$config->sonarqube->dtable->browse->fieldList['url']['title'] = $lang->sonarqube->url; +$config->sonarqube->dtable->browse->fieldList['url']['name'] = 'url'; +$config->sonarqube->dtable->browse->fieldList['url']['type'] = 'desc'; +$config->sonarqube->dtable->browse->fieldList['url']['sortType'] = true; +$config->sonarqube->dtable->browse->fieldList['url']['hint'] = true; +$config->sonarqube->dtable->browse->fieldList['url']['minWidth'] = '356'; -$config->sonarqube->actionList = array(); -$config->sonarqube->actionList['list']['icon'] = 'list'; -$config->sonarqube->actionList['list']['text'] = $lang->sonarqube->browseProject; -$config->sonarqube->actionList['list']['hint'] = $lang->sonarqube->browseProject; -$config->sonarqube->actionList['list']['url'] = helper::createLink('sonarqube', 'browseProject',"sonarqubeID={id}"); +$config->sonarqube->dtable->browse->fieldList['actions']['name'] = 'actions'; +$config->sonarqube->dtable->browse->fieldList['actions']['title'] = $lang->actions; +$config->sonarqube->dtable->browse->fieldList['actions']['type'] = 'actions'; +$config->sonarqube->dtable->browse->fieldList['actions']['width'] = '160'; +$config->sonarqube->dtable->browse->fieldList['actions']['sortType'] = false; +$config->sonarqube->dtable->browse->fieldList['actions']['fixed'] = 'right'; +$config->sonarqube->dtable->browse->fieldList['actions']['menu'] = array('list', 'edit', 'delete'); +$config->sonarqube->dtable->browse->fieldList['actions']['list'] = $config->sonarqube->actionList; -$config->sonarqube->actionList['edit']['icon'] = 'edit'; -$config->sonarqube->actionList['edit']['text'] = $lang->sonarqube->edit; -$config->sonarqube->actionList['edit']['hint'] = $lang->sonarqube->edit; -$config->sonarqube->actionList['edit']['url'] = helper::createLink('sonarqube', 'edit',"sonarqubeID={id}"); +$config->sonarqube->dtable->project = new stdclass(); +$config->sonarqube->dtable->project->fieldList['key']['title'] = $lang->sonarqube->projectKey; +$config->sonarqube->dtable->project->fieldList['key']['type'] = 'text'; +$config->sonarqube->dtable->project->fieldList['key']['sortType'] = true; +$config->sonarqube->dtable->project->fieldList['key']['width'] = '150'; -$config->sonarqube->actionList['delete']['icon'] = 'trash'; -$config->sonarqube->actionList['delete']['text'] = $lang->sonarqube->delete; -$config->sonarqube->actionList['delete']['hint'] = $lang->sonarqube->delete; -$config->sonarqube->actionList['delete']['ajaxSubmit'] = true; -$config->sonarqube->actionList['delete']['url'] = helper::createLink('sonarqube', 'delete',"sonarqubeID={id}"); +$config->sonarqube->dtable->project->fieldList['name']['title'] = $lang->sonarqube->projectName; +$config->sonarqube->dtable->project->fieldList['name']['type'] = 'title'; +$config->sonarqube->dtable->project->fieldList['name']['fixed'] = false; +$config->sonarqube->dtable->project->fieldList['name']['sortType'] = 'desc'; -$config->sonarqube->dtable->fieldList['actions']['name'] = 'actions'; -$config->sonarqube->dtable->fieldList['actions']['title'] = $lang->actions; -$config->sonarqube->dtable->fieldList['actions']['type'] = 'actions'; -$config->sonarqube->dtable->fieldList['actions']['width'] = '160'; -$config->sonarqube->dtable->fieldList['actions']['sortType'] = false; -$config->sonarqube->dtable->fieldList['actions']['fixed'] = 'right'; -$config->sonarqube->dtable->fieldList['actions']['menu'] = array('list', 'edit', 'delete'); -$config->sonarqube->dtable->fieldList['actions']['list'] = $config->sonarqube->actionList; +$config->sonarqube->dtable->project->fieldList['time']['title'] = $lang->sonarqube->projectlastAnalysis; +$config->sonarqube->dtable->project->fieldList['time']['name'] = 'lastAnalysisDate'; +$config->sonarqube->dtable->project->fieldList['time']['type'] = 'datetime'; +$config->sonarqube->dtable->project->fieldList['time']['sortType'] = true; +$config->sonarqube->dtable->project->fieldList['time']['width'] = '150'; + +$config->sonarqube->dtable->project->fieldList['actions']['name'] = 'actions'; +$config->sonarqube->dtable->project->fieldList['actions']['title'] = $lang->actions; +$config->sonarqube->dtable->project->fieldList['actions']['type'] = 'actions'; +$config->sonarqube->dtable->project->fieldList['actions']['menu'] = array('deleteProject', 'execJob', 'reportView'); +$config->sonarqube->dtable->project->fieldList['actions']['list'] = $config->sonarqube->actionList; diff --git a/module/sonarqube/control.php b/module/sonarqube/control.php index 68b70e44ad..935a1ffdfb 100644 --- a/module/sonarqube/control.php +++ b/module/sonarqube/control.php @@ -45,7 +45,7 @@ class sonarqube extends control * @access public * @return void */ - public function browse($orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function browse(string $orderBy = 'id_desc', int $recTotal = 0, int $recPerPage = 20, int $pageID = 1) { $this->app->loadClass('pager', true); $pager = new pager($recTotal, $recPerPage, $pageID); @@ -192,7 +192,7 @@ class sonarqube extends control * @access public * @return void */ - public function edit($sonarqubeID) + public function edit(int $sonarqubeID) { $oldSonarQube = $this->loadModel('pipeline')->getByID($sonarqubeID); @@ -227,7 +227,7 @@ class sonarqube extends control * @access public * @return void */ - public function delete($sonarqubeID) + public function delete(int $sonarqubeID) { $oldSonarQube = $this->loadModel('pipeline')->getByID($sonarqubeID); $this->loadModel('action'); @@ -257,7 +257,7 @@ class sonarqube extends control * @access public * @return void */ - public function execJob($jobID) + public function execJob(int $jobID) { echo $this->fetch('job', 'exec', "jobID=$jobID"); } @@ -273,7 +273,7 @@ class sonarqube extends control * @access public * @return void */ - public function browseProject($sonarqubeID, $orderBy = 'name_desc', $recPerPage = 15, $pageID = 1) + public function browseProject(int $sonarqubeID, string $orderBy = 'name_desc', int $recPerPage = 15, int $pageID = 1) { $this->app->loadClass('pager', true); $keyword = fixer::input('post')->setDefault('keyword', '')->get('keyword'); @@ -318,7 +318,6 @@ class sonarqube extends control $this->view->title = $this->lang->sonarqube->common . $this->lang->colon . $this->lang->sonarqube->browseProject; $this->view->sonarqubeID = $sonarqubeID; $this->view->sonarqubeProjectList = (empty($sonarqubeProjectList) or empty($sonarqubeProjectList[$pageID - 1])) ? array() : $sonarqubeProjectList[$pageID - 1]; - $this->view->projectJobPairs = $projectJobPairs; $this->view->orderBy = $orderBy; $this->view->successJobs = $successJobs; @@ -352,22 +351,19 @@ class sonarqube extends control * * @param int $sonarqubeID * @param string $projectKey - * @param string $confirm * @access public * @return void */ - public function deleteProject($sonarqubeID, $projectKey, $confirm = 'no') + public function deleteProject(int $sonarqubeID, string $projectKey) { - if($confirm != 'yes') return print(js::confirm($this->lang->sonarqube->confirmDeleteProject, inlink('deleteProject', "sonarqubeID=$sonarqubeID&projectKey=$projectKey&confirm=yes"))); - /* Fix error when request type is PATH_INFO and the tag name contains '-'.*/ $projectKey = str_replace('*', '-', $projectKey); $reponse = $this->sonarqube->apiDeleteProject($sonarqubeID, $projectKey); - if(isset($reponse->errors)) return print(js::alert($reponse->errors[0]->msg)); + if(isset($reponse->errors)) return $this->sendError($reponse->errors[0]->msg); $this->loadModel('action')->create('sonarqubeproject', 0, 'deleted', '', $projectKey); - return print(js::reload('parent')); + return $this->sendSuccess(array('load' => true)); } /** diff --git a/module/sonarqube/js/browseproject.ui.js b/module/sonarqube/js/browseproject.ui.js new file mode 100644 index 0000000000..1e0c7d8fec --- /dev/null +++ b/module/sonarqube/js/browseproject.ui.js @@ -0,0 +1,4 @@ +function search() +{ + loadPage({method:'post', data: {keyword: $('#keyword').val()}, target: '#table-sonarqube-browseproject>*'}); +} diff --git a/module/sonarqube/model.php b/module/sonarqube/model.php index c6fc28a7e8..ca9a3084cf 100644 --- a/module/sonarqube/model.php +++ b/module/sonarqube/model.php @@ -341,8 +341,8 @@ class sonarqubeModel extends model { $action = strtolower($action); - if($action == 'execjob') return $sonarqube->exec == ''; - if($action == 'reportview') return $sonarqube->report == ''; + if($action == 'execjob') return $sonarqube->jobID; + if($action == 'reportview') return $sonarqube->reportView; return true; } diff --git a/module/sonarqube/ui/browse.html.php b/module/sonarqube/ui/browse.html.php index 9d8cfa08fd..44fc170eb6 100644 --- a/module/sonarqube/ui/browse.html.php +++ b/module/sonarqube/ui/browse.html.php @@ -19,7 +19,7 @@ $canCreate = hasPriv('sonarqube', 'create'); $createLink = $this->createLink('sonarqube', 'create'); $createItem = array('text' => $lang->sonarqube->create, 'url' => $createLink, 'class' => 'primary', 'icon' => 'plus'); -$tableData = initTableData($sonarqubeList, $config->sonarqube->dtable->fieldList, $this->sonarqube); +$tableData = initTableData($sonarqubeList, $config->sonarqube->dtable->browse->fieldList, $this->sonarqube); toolbar ( @@ -33,7 +33,7 @@ jsVar('sortLink', helper::createLink('sonarqube', 'browse', "orderBy={or dtable ( - set::cols(array_values($config->sonarqube->dtable->fieldList)), + set::cols(array_values($config->sonarqube->dtable->browse->fieldList)), set::data($tableData), set::sortLink(jsRaw('createSortLink')), set::onRenderCell(jsRaw('window.renderCell')), diff --git a/module/sonarqube/ui/browseproject.html.php b/module/sonarqube/ui/browseproject.html.php new file mode 100644 index 0000000000..35236f8124 --- /dev/null +++ b/module/sonarqube/ui/browseproject.html.php @@ -0,0 +1,78 @@ + + * @package sonarqube + * @link http://www.zentao.net + */ + +namespace zin; + +$projectList = array(); +foreach($sonarqubeProjectList as $project) +{ + $project->jobID = 0; + $project->reportView = 0; + $project->sonarqubeID = $sonarqube->id ; + $project->projectKey = str_replace('-', '*', $project->key); + if(isset($projectJobPairs[$project->key])) + { + $project->jobID = $projectJobPairs[$project->key]; + if(in_array($project->jobID, $successJobs)) $project->reportView = 1; + } + + $projectList[] = $project; +} +$tableData = initTableData($sonarqubeProjectList, $config->sonarqube->dtable->project->fieldList, $this->sonarqube); + +featureBar +( + backBtn(set::text($lang->goback)), + form + ( + setID('searchForm'), + setClass('ml-4'), + set::actions(array()), + formRow + ( + input + ( + set::placeholder($lang->sonarqube->placeholderSearch), + set::name('keyword'), + set::value($keyword) + ), + btn + ( + setClass('primary'), + $lang->sonarqube->search, + on::click('search') + ) + ) + ) +); + +hasPriv('instance', 'manage') ? toolbar +( + item + ( + set::text($lang->sonarqube->createProject), + set::url($this->createLink('sonarqube', 'createProject', "sonarqubeID={$sonarqube->id}")), + setClass('primary'), + set::icon('plus') + ) +) : null; + +dtable +( + set::cols($config->sonarqube->dtable->project->fieldList), + set::data($tableData), + set::sortLink(createLink('sonarqube', 'browseProject', "sonarqubeID={$sonarqube->id}&orderBy={name}_{sortType}")), + set::orderBy($orderBy), + set::footPager(usePager()), +); + +render();