/lib/requirements/reqExport.php

https://github.com/viglesiasce/testlink · PHP · 178 lines · 121 code · 26 blank · 31 comment · 8 complexity · a5dd3e85db74469a63c458808fe021f0 MD5 · raw file

  1. <?php
  2. /**
  3. * TestLink Open Source Project - http://testlink.sourceforge.net/
  4. * This script is distributed under the GNU General Public License 2 or later.
  5. *
  6. * Filename $RCSfile: reqExport.php,v $
  7. *
  8. * @version $Revision: 1.10 $
  9. * @modified $Date: 2010/03/21 19:28:34 $ by $Author: franciscom $
  10. *
  11. * Allows users to export requirements.
  12. *
  13. * 20100321 - franciscom - manage export of :
  14. * req. spec => full tree or branch (new to 1.9)
  15. * child (direct children) requirements inside a req. spec
  16. **/
  17. require_once("../../config.inc.php");
  18. require_once("csv.inc.php");
  19. require_once("xml.inc.php");
  20. require_once("common.php");
  21. require_once("requirements.inc.php");
  22. testlinkInitPage($db,false,false,"checkRights");
  23. $templateCfg = templateConfiguration();
  24. $req_spec_mgr = new requirement_spec_mgr($db);
  25. $args = init_args();
  26. $gui = initializeGui($args,$req_spec_mgr);
  27. switch($args->doAction)
  28. {
  29. case 'export':
  30. $smarty = new TLSmarty();
  31. $smarty->assign('gui', $gui);
  32. $smarty->display($templateCfg->template_dir . $templateCfg->default_template);
  33. break;
  34. case 'doExport':
  35. doExport($args,$req_spec_mgr);
  36. break;
  37. }
  38. /**
  39. * checkRights
  40. *
  41. */
  42. function checkRights(&$db,&$user)
  43. {
  44. return $user->hasRight($db,'mgt_view_req');
  45. }
  46. /**
  47. * init_args
  48. *
  49. */
  50. function init_args()
  51. {
  52. $_REQUEST = strings_stripSlashes($_REQUEST);
  53. $args = new stdClass();
  54. $args->doAction = isset($_REQUEST['doAction']) ? $_REQUEST['doAction'] : 'export';
  55. $args->exportType = isset($_REQUEST['exportType']) ? $_REQUEST['exportType'] : null;
  56. $args->req_spec_id = isset($_REQUEST['req_spec_id']) ? $_REQUEST['req_spec_id'] : null;
  57. $args->export_filename = isset($_REQUEST['export_filename']) ? $_REQUEST['export_filename'] : "";
  58. $args->tproject_id = isset($_REQUEST['tproject_id']) ? $_REQUEST['tproject_id'] : 0;
  59. if( $args->tproject_id == 0 )
  60. {
  61. $args->tproject_id = isset($_SESSION['testprojectID']) ? $_SESSION['testprojectID'] : 0;
  62. }
  63. $args->scope = isset($_REQUEST['scope']) ? $_REQUEST['scope'] : 'items';
  64. return $args;
  65. }
  66. /**
  67. * initializeGui
  68. *
  69. */
  70. function initializeGui(&$argsObj,&$req_spec_mgr)
  71. {
  72. $gui = new stdClass();
  73. $gui->exportTypes = $req_spec_mgr->get_export_file_types();
  74. $gui->exportType = $argsObj->exportType;
  75. $gui->scope = $argsObj->scope;
  76. $gui->tproject_id = $argsObj->tproject_id;
  77. switch($argsObj->scope)
  78. {
  79. case 'tree':
  80. $gui->req_spec['title'] = lang_get('all_reqspecs_in_tproject');
  81. $gui->req_spec_id = 0;
  82. $exportFileName = 'all-req.xml';
  83. break;
  84. case 'branch':
  85. $gui->req_spec = $req_spec_mgr->get_by_id($argsObj->req_spec_id);
  86. $gui->req_spec_id = $argsObj->req_spec_id;
  87. $exportFileName = $gui->req_spec['title'] . '-req-spec.xml';
  88. break;
  89. case 'items':
  90. $gui->req_spec = $req_spec_mgr->get_by_id($argsObj->req_spec_id);
  91. $gui->req_spec_id = $argsObj->req_spec_id;
  92. $exportFileName = $gui->req_spec['title'] . '-child_req.xml';
  93. break;
  94. }
  95. $gui->export_filename = trim($argsObj->export_filename);
  96. if($gui->export_filename == "")
  97. {
  98. $gui->export_filename = $exportFileName;
  99. }
  100. return $gui;
  101. }
  102. /**
  103. * doExport
  104. *
  105. */
  106. function doExport(&$argsObj,&$req_spec_mgr)
  107. {
  108. $pfn = null;
  109. switch($argsObj->exportType)
  110. {
  111. case 'csv':
  112. $requirements_map = $req_spec_mgr->get_requirements($argsObj->req_spec_id);
  113. $pfn = "exportReqDataToCSV";
  114. $fileName = 'reqs.csv';
  115. $content = $pfn($requirements_map);
  116. break;
  117. case 'XML':
  118. $pfn = "exportReqSpecToXML";
  119. $fileName = 'reqs.xml';
  120. $content = TL_XMLEXPORT_HEADER;
  121. $optionsForExport['RECURSIVE'] = $argsObj->scope == 'items' ? false : true;
  122. $openTag = $argsObj->scope == 'items' ? "requirements>" : 'requirement-specification>';
  123. switch($argsObj->scope)
  124. {
  125. case 'tree':
  126. $reqSpecSet = $req_spec_mgr->getFirstLevelInTestProject($argsObj->tproject_id);
  127. $reqSpecSet = array_keys($reqSpecSet);
  128. break;
  129. case 'branch':
  130. case 'items':
  131. $reqSpecSet = array($argsObj->req_spec_id);
  132. break;
  133. }
  134. $content .= "<" . $openTag . "\n";
  135. if(!is_null($reqSpecSet))
  136. {
  137. foreach($reqSpecSet as $reqSpecID)
  138. {
  139. $content .= $req_spec_mgr->$pfn($reqSpecID,$argsObj->tproject_id,$optionsForExport);
  140. }
  141. }
  142. $content .= "</" . $openTag . "\n";
  143. break;
  144. }
  145. if ($pfn)
  146. {
  147. $fileName = is_null($argsObj->export_filename) ? $fileName : $argsObj->export_filename;
  148. downloadContentsToFile($content,$fileName);
  149. exit();
  150. }
  151. }
  152. ?>