zen.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /**
  3. * The zen file of sonarqube module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Gang Zeng<zenggang@easycorp.ltd>
  8. * @package sonarqube
  9. * @link https://www.zentao.net
  10. */
  11. class sonarqubeZen extends sonarqube
  12. {
  13. /**
  14. * 检查token必须数据。
  15. * Check token required data.
  16. *
  17. * @param object $sonarqube
  18. * @access protected
  19. * @return void
  20. */
  21. protected function checkTokenRequire($sonarqube)
  22. {
  23. $this->dao->update('sonarqube')->data($sonarqube)
  24. ->batchCheck(empty($sonarqubeID) ? $this->config->sonarqube->create->requiredFields : $this->config->sonarqube->edit->requiredFields, 'notempty')
  25. ->batchCheck("url", 'URL');
  26. if(strpos($sonarqube->url, 'http') !== 0) dao::$errors['url'][] = $this->lang->sonarqube->hostError;
  27. }
  28. /**
  29. * 对数据进行排序和分页。
  30. * Sort and page data list.
  31. *
  32. * @param array $dataList
  33. * @param string $orderBy
  34. * @param int $recPerPage
  35. * @param int $pageID
  36. * @access protected
  37. * @return array
  38. */
  39. protected function sortAndPage($dataList, $orderBy, $recPerPage, $pageID)
  40. {
  41. /* Data sort. */
  42. list($order, $sort) = explode('_', $orderBy);
  43. $orderList = array();
  44. foreach($dataList as $data) $orderList[] = $data->$order;
  45. array_multisort($orderList, $sort == 'desc' ? SORT_DESC : SORT_ASC, $dataList);
  46. /* Pager. */
  47. $this->app->loadClass('pager', true);
  48. $recTotal = count($dataList);
  49. $pager = new pager($recTotal, $recPerPage, $pageID);
  50. $dataList = array_chunk($dataList, $pager->recPerPage);
  51. $this->view->pager = $pager;
  52. return $dataList;
  53. }
  54. /**
  55. * @param int $sonarqubeID
  56. * @param string $projectKey
  57. */
  58. protected function getIssueList($sonarqubeID, $projectKey)
  59. {
  60. ini_set('memory_limit', '1024M');
  61. $cacheFile = $this->sonarqube->getCacheFile($sonarqubeID, $projectKey);
  62. if(!$cacheFile or !file_exists($cacheFile) or (time() - filemtime($cacheFile)) / 60 > $this->config->sonarqube->cacheTime)
  63. {
  64. $sonarqubeIssueList = $this->sonarqube->apiGetIssues($sonarqubeID, $projectKey);
  65. foreach($sonarqubeIssueList as $key => $sonarqubeIssue)
  66. {
  67. if(!isset($sonarqubeIssue->line)) $sonarqubeIssue->line = '';
  68. if(!isset($sonarqubeIssue->effort)) $sonarqubeIssue->effort = '';
  69. $sonarqubeIssue->message = htmlspecialchars($sonarqubeIssue->message);
  70. $sonarqubeIssue->creationDate = date('Y-m-d H:i:s', strtotime($sonarqubeIssue->creationDate));
  71. list(, $file) = explode(':', $sonarqubeIssue->component);
  72. $sonarqubeIssue->file = $file;
  73. }
  74. if($cacheFile && !file_exists($cacheFile . '.lock'))
  75. {
  76. touch($cacheFile . '.lock');
  77. file_put_contents($cacheFile, serialize($sonarqubeIssueList));
  78. unlink($cacheFile . '.lock');
  79. }
  80. }
  81. else
  82. {
  83. $sonarqubeIssueList = unserialize(file_get_contents($cacheFile));
  84. }
  85. return $sonarqubeIssueList;
  86. }
  87. }