model.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * The model file of projectStory module 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 projectStory
  9. * @version $Id
  10. * @link https://www.zentao.net
  11. */
  12. class projectstoryModel extends model
  13. {
  14. /**
  15. * Get the stories for execution linked.
  16. *
  17. * @param int $projectID
  18. * @param array $storyIdList
  19. * @access public
  20. * @return array
  21. */
  22. public function getExecutionStories($projectID, $storyIdList = array())
  23. {
  24. $stories = array();
  25. $storyIdList = (array)$storyIdList;
  26. if(empty($storyIdList)) return $stories;
  27. return $this->dao->select('t2.id as id, t2.title as title, t3.id as executionID, t3.name as execution')->from(TABLE_PROJECTSTORY)->alias('t1')
  28. ->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story=t2.id')
  29. ->leftJoin(TABLE_EXECUTION)->alias('t3')->on('t1.project=t3.id')
  30. ->where('t1.story')->in($storyIdList)
  31. ->andWhere('t3.type')->in('sprint,stage,kanban')
  32. ->andWhere('t3.project')->eq($projectID)
  33. ->andWhere('t3.deleted')->eq(0)
  34. ->fetchAll('id');
  35. }
  36. /**
  37. * Build search config for project story list.
  38. *
  39. * @param int $projectID
  40. * @access public
  41. * @return array
  42. */
  43. public function buildSearchConfig($projectID)
  44. {
  45. $this->loadModel('product');
  46. $searchConfig = $this->config->product->search;
  47. $this->lang->story->title = $this->lang->story->name;
  48. $project = $this->loadModel('project')->fetchById($projectID);
  49. unset($searchConfig['params']['product']);
  50. unset($searchConfig['fields']['product']);
  51. unset($searchConfig['fields']['branch']);
  52. unset($searchConfig['params']['branch']);
  53. unset($searchConfig['params']['project']);
  54. unset($searchConfig['fields']['project']);
  55. $products = $this->product->getProducts($projectID, 'all', '', false);
  56. $searchConfig['params']['module']['values'] = $this->product->getModulesForSearchForm(0, $products, 'all', (int)$projectID);
  57. $gradePairs = array();
  58. $gradeList = $this->loadModel('story')->getGradeList('');
  59. $storyTypes = isset($project->storyType) ? $project->storyType : 'epic,story,requirement';
  60. foreach($gradeList as $grade)
  61. {
  62. if(strpos($storyTypes, $grade->type) === false) continue;
  63. $key = (string)$grade->type . (string)$grade->grade;
  64. $gradePairs[$key] = $grade->name;
  65. }
  66. asort($gradePairs);
  67. $searchConfig['params']['grade']['values'] = $gradePairs;
  68. if($this->config->edition == 'ipd') $searchConfig['params']['roadmap']['values'] = $this->loadModel('roadmap')->getPairs();
  69. $searchConfig['params']['plan']['values'] = $this->loadModel('productplan')->getPairs(array_keys($products));
  70. return $searchConfig;
  71. }
  72. }