zen.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. /**
  3. * The zen file of gitea 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 Yanyi Cao <caoyanyi@easycorp.ltd>
  8. * @package gitea
  9. * @link https://www.zentao.net
  10. */
  11. class giteaZen extends gitea
  12. {
  13. /**
  14. * 检测token是否有效。
  15. * Check post token has admin permissions.
  16. *
  17. * @param object $gitea
  18. * @access protected
  19. * @return array|bool
  20. */
  21. protected function checkToken($gitea)
  22. {
  23. $this->dao->update('gitea')->data($gitea)->batchCheck($this->config->gitea->create->requiredFields, 'notempty');
  24. if(dao::isError()) return array('result' => 'fail', 'message' => dao::getError());
  25. $result = $this->gitea->checkTokenAccess($gitea->url, $gitea->token);
  26. if($result === false) return array('result' => 'fail', 'message' => array('url' => array($this->lang->gitea->hostError)));
  27. if(!$result) return array('result' => 'fail', 'message' => array('token' => array($this->lang->gitea->tokenLimit)));
  28. return true;
  29. }
  30. /**
  31. * 根据账号,名字,邮箱获取gitea用户匹配的禅道用户。
  32. * Get matched zentao users by account, name, email.
  33. *
  34. * @param int $giteaID
  35. * @param array $giteaUsers
  36. * @access protected
  37. * @return array
  38. */
  39. protected function getMatchedUsers($giteaID, $giteaUsers)
  40. {
  41. $userList = $this->loadModel('user')->getList('all', 'account,realname,email');
  42. $zentaoUsers = array();
  43. foreach($userList as $user) $zentaoUsers[$user->account] = $user;
  44. $matches = new stdclass();
  45. foreach($giteaUsers as $giteaUser)
  46. {
  47. foreach($zentaoUsers as $zentaoUser)
  48. {
  49. if($giteaUser->account == $zentaoUser->account) $matches->accounts[$giteaUser->account][] = $zentaoUser->account;
  50. if($giteaUser->realname == $zentaoUser->realname) $matches->names[$giteaUser->realname][] = $zentaoUser->account;
  51. if($giteaUser->email == $zentaoUser->email) $matches->emails[$giteaUser->email][] = $zentaoUser->account;
  52. }
  53. }
  54. $bindedUsers = $this->loadModel('pipeline')->getUserBindedPairs($giteaID, 'gitea', 'openID,account');
  55. $matchedUsers = array();
  56. foreach($giteaUsers as $giteaUser)
  57. {
  58. if(isset($bindedUsers[$giteaUser->account]))
  59. {
  60. $giteaUser->zentaoAccount = $bindedUsers[$giteaUser->account];
  61. $matchedUsers[$giteaUser->id] = $giteaUser;
  62. continue;
  63. }
  64. $matchedZentaoUsers = array();
  65. if(isset($matches->accounts[$giteaUser->account])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->accounts[$giteaUser->account]);
  66. if(isset($matches->emails[$giteaUser->email])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->emails[$giteaUser->email]);
  67. if(isset($matches->names[$giteaUser->realname])) $matchedZentaoUsers = array_merge($matchedZentaoUsers, $matches->names[$giteaUser->realname]);
  68. $matchedZentaoUsers = array_unique($matchedZentaoUsers);
  69. if(count($matchedZentaoUsers) == 1)
  70. {
  71. $giteaUser->zentaoAccount = current($matchedZentaoUsers);
  72. $matchedUsers[$giteaUser->id] = $giteaUser;
  73. }
  74. }
  75. return $matchedUsers;
  76. }
  77. }