projects.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * The project 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 projectsEntry 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. $appendFields = $this->param('fields', '');
  25. if(stripos(strtolower(",{$appendFields},"), ',dropmenu,') !== false) return $this->getDropMenu();
  26. $_COOKIE['involved'] = $this->param('involved', 0);
  27. $this->config->systemMode = 'ALM';
  28. if($programID)
  29. {
  30. $control = $this->loadController('program', 'project');
  31. $control->project($programID, $this->param('status', 'all'), $this->param('order', 'order_asc'), 0, $this->param('limit', 20), $this->param('page', 1));
  32. $data = $this->getData();
  33. }
  34. else
  35. {
  36. $control = $this->loadController('project', 'browse');
  37. $control->browse($programID, $this->param('status', 'all'), 0, $this->param('order', 'order_asc'), 0, $this->param('limit', 20), $this->param('page', 1));
  38. $data = $this->getData();
  39. }
  40. if(isset($data->status) and $data->status == 'success')
  41. {
  42. $pager = $data->data->pager;
  43. $users = $data->data->users;
  44. $result = array();
  45. foreach($data->data->projectStats as $project)
  46. {
  47. $result[] = $this->format($project, 'openedBy:user,openedDate:time,lastEditedBy:user,lastEditedDate:time,closedBy:user,closedDate:time,canceledBy:user,canceledDate:time,realBegan:date,realEnd:date,whitelist:userList,deleted:bool');
  48. }
  49. $data = array();
  50. $data['page'] = $pager->pageID;
  51. $data['total'] = $pager->recTotal;
  52. $data['limit'] = (int)$pager->recPerPage;
  53. $data['projects'] = $result;
  54. $withUser = $this->param('withUser', '');
  55. if(!empty($withUser)) $data['users'] = $users;
  56. return $this->send(200, $data);
  57. }
  58. if(isset($data->status) and $data->status == 'fail') return $this->sendError(zget($data, 'code', 400), $data->message);
  59. return $this->sendError(400, 'error');
  60. }
  61. /**
  62. * POST method.
  63. *
  64. * @access public
  65. * @return string
  66. */
  67. public function post()
  68. {
  69. $control = $this->loadController('project', 'create');
  70. $fields = 'name,begin,end,products,multiple';
  71. $this->batchSetPost($fields);
  72. $_POST['hasProduct'] = isset($_POST['products']) ? 1 : 0;
  73. $multiple = $this->request('multiple', '');
  74. if($multiple !== '') $this->setPost('multiple', 'on');
  75. if($multiple == 'no') $this->setPost('multiple', '');
  76. $useCode = $this->checkCodeUsed();
  77. if($useCode) $this->setPost('code', $this->request('code', ''));
  78. $this->setPost('acl', $this->request('acl', 'private'));
  79. $this->setPost('parent', $this->request('program', 0));
  80. $this->setPost('whitelist', $this->request('whitelist', array()));
  81. $this->setPost('PM', $this->request('PM', ''));
  82. $this->setPost('model', $this->request('model', 'scrum'));
  83. $this->setPost('parent', $this->request('parent', 0));
  84. $requireFields = 'name,begin,end,products';
  85. if($useCode) $requireFields .= ',code';
  86. $this->requireFields($requireFields);
  87. $control->create($this->request('model', 'scrum'));
  88. $data = $this->getData();
  89. if(isset($data->result) and $data->result == 'fail') return $this->sendError(400, $data->message);
  90. if(!isset($data->result)) return $this->sendError(400, 'error');
  91. $project = $this->loadModel('project')->getByID($data->id);
  92. return $this->send(201, $this->format($project, 'openedBy:user,openedDate:time,lastEditedBy:user,lastEditedDate:time,closedBy:user,closedDate:time,canceledBy:user,canceledDate:time,realBegan:date,realEnd:date,PM:user,whitelist:userList,deleted:bool'));
  93. }
  94. /**
  95. * Get drop menu.
  96. *
  97. * @access public
  98. * @return string
  99. */
  100. public function getDropMenu()
  101. {
  102. $control = $this->loadController('project', 'ajaxGetDropMenu');
  103. $control->ajaxGetDropMenu($this->request('projectID', 0), $this->request('module', 'project'), $this->request('method', 'browse'));
  104. $data = $this->getData();
  105. if(isset($data->result) and $data->result == 'fail') return $this->sendError(400, $data->message);
  106. $dropMenu = array('owner' => array(), 'other' => array(), 'closed' => array());
  107. foreach($data->data->projects as $programID => $projects)
  108. {
  109. foreach($projects as $project)
  110. {
  111. if(helper::diffDate(date('Y-m-d'), $project->end) > 0) $project->delay = true;
  112. $project = $this->filterFields($project, 'id,model,type,name,code,parent,status,PM,delay');
  113. if($project->status == 'closed')
  114. {
  115. $dropMenu['closed'][] = $project;
  116. }
  117. elseif($project->PM == $this->app->user->account)
  118. {
  119. $dropMenu['owner'][] = $project;
  120. }
  121. else
  122. {
  123. $dropMenu['other'][] = $project;
  124. }
  125. }
  126. }
  127. return $this->send(200, $dropMenu);
  128. }
  129. }