stakeholders.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /**
  3. * The stakeholder entry point of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Chunsheng Wang <chunsheng@cnezsoft.com>
  8. * @package entries
  9. * @version 1
  10. * @link https://www.zentao.net
  11. */
  12. class stakeholdersEntry extends entry
  13. {
  14. /**
  15. * GET method.
  16. *
  17. * @param int $programID
  18. * @access public
  19. * @return string
  20. */
  21. public function get($programID = 0)
  22. {
  23. if(!$programID) $programID = $this->param('program', 0);
  24. if($programID)
  25. {
  26. $control = $this->loadController('program', 'stakeholder');
  27. $control->stakeholder($programID, $this->param('order', 't1.id_desc'), 0, $this->param('limit', 20), $this->param('page', 1));
  28. $data = $this->getData();
  29. }
  30. if(isset($data->status) and $data->status == 'success')
  31. {
  32. $this->app->loadLang('stakeholder');
  33. $pager = $data->data->pager;
  34. $users = $data->data->users;
  35. $result = array();
  36. foreach($data->data->stakeholders as $stakeholder)
  37. {
  38. $stakeholder->roleName = zget($this->lang->user->roleList, $stakeholder->role, '');
  39. $stakeholder->typeName = zget($this->lang->stakeholder->fromList, $stakeholder->from, '');
  40. $result[] = $stakeholder;
  41. }
  42. $data = array();
  43. $data['page'] = $pager->pageID;
  44. $data['total'] = $pager->recTotal;
  45. $data['limit'] = (int)$pager->recPerPage;
  46. $data['stakeholders'] = $result;
  47. $withUser = $this->param('withUser', '');
  48. if(!empty($withUser)) $data['users'] = $users;
  49. return $this->send(200, $data);
  50. }
  51. if(isset($data->status) and $data->status == 'fail') return $this->sendError(zget($data, 'code', 400), $data->message);
  52. return $this->sendError(400, 'error');
  53. }
  54. /**
  55. * POST method.
  56. *
  57. * @access public
  58. * @return string
  59. */
  60. public function post()
  61. {
  62. $control = $this->loadController('project', 'create');
  63. $fields = 'name,begin,end,products';
  64. $this->batchSetPost($fields);
  65. $this->setPost('code', $this->request('code', ''));
  66. $this->setPost('acl', $this->request('acl', 'private'));
  67. $this->setPost('parent', $this->request('program', 0));
  68. $this->setPost('whitelist', $this->request('whitelist', array()));
  69. $this->setPost('PM', $this->request('PM', ''));
  70. $this->setPost('model', $this->request('model', 'scrum'));
  71. $this->requireFields('name,code,begin,end,products');
  72. $control->create($this->request('model', 'scrum'));
  73. $data = $this->getData();
  74. if(isset($data->result) and $data->result == 'fail') return $this->sendError(400, $data->message);
  75. if(!isset($data->result)) return $this->sendError(400, 'error');
  76. $project = $this->loadModel('project')->getByID($data->id);
  77. return $this->send(201, $this->format($project, 'openedDate:time,lastEditedDate:time,closedDate:time,canceledDate:time'));
  78. }
  79. /**
  80. * Get drop menu.
  81. *
  82. * @access public
  83. * @return string
  84. */
  85. public function getDropMenu()
  86. {
  87. $control = $this->loadController('project', 'ajaxGetDropMenu');
  88. $control->ajaxGetDropMenu($this->request('projectID', 0), $this->request('module', 'project'), $this->request('method', 'browse'));
  89. $data = $this->getData();
  90. if(isset($data->result) and $data->result == 'fail') return $this->sendError(400, $data->message);
  91. $dropMenu = array('owner' => array(), 'other' => array(), 'closed' => array());
  92. foreach($data->data->projects as $programID => $projects)
  93. {
  94. foreach($projects as $project)
  95. {
  96. if(helper::diffDate(date('Y-m-d'), $project->end) > 0) $project->delay = true;
  97. $project = $this->filterFields($project, 'id,model,type,name,code,parent,status,PM,delay');
  98. if($project->status == 'closed')
  99. {
  100. $dropMenu['closed'][] = $project;
  101. }
  102. elseif($project->PM == $this->app->user->account)
  103. {
  104. $dropMenu['owner'][] = $project;
  105. }
  106. else
  107. {
  108. $dropMenu['other'][] = $project;
  109. }
  110. }
  111. }
  112. return $this->send(200, $dropMenu);
  113. }
  114. }