PageRenderTime 29ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/testcases/tcCompareVersions.php

https://github.com/viglesiasce/testlink
PHP | 138 lines | 97 code | 22 blank | 19 comment | 12 complexity | b22b30697100b93055af1f0db3513759 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. * @package TestLink
  7. * @author asimon
  8. * @copyright 2005-2009, TestLink community
  9. * @version CVS: $Id: tcCompareVersions.php,v 1.4 2010/04/23 14:02:42 asimon83 Exp $
  10. * @link http://www.teamst.org/index.php
  11. *
  12. * Compares selected testcase versions with each other.
  13. *
  14. * @internal Revisions:
  15. */
  16. require_once("../../config.inc.php");
  17. require_once("common.php");
  18. require('../../third_party/diff/diff.php');
  19. $templateCfg = templateConfiguration();
  20. testlinkInitPage($db);
  21. $smarty = new TLSmarty();
  22. $differ = new diff();
  23. $args = init_args();
  24. $gui = new stdClass();
  25. $tcaseMgr = new testcase($db);
  26. $tcaseSet = $tcaseMgr->get_by_id($args->tcase_id);
  27. $gui->tc_versions = $tcaseSet;
  28. $gui->tc_id = $args->tcase_id;
  29. $gui->compare_selected_versions = $args->compare_selected_versions;
  30. $gui->context = $args->context;
  31. $gui->version_short = lang_get('version_short');
  32. $labels = array();
  33. $labels["num_changes"] = lang_get("num_changes");
  34. $labels["no_changes"] = lang_get("no_changes");
  35. //if already two versions are selected, display diff
  36. //else display template with versions to select
  37. if ($args->compare_selected_versions) {
  38. $diff_array = array("summary" => array(),
  39. "preconditions" => array());
  40. foreach($tcaseSet as $tcase) {
  41. if ($tcase['version'] == $args->version_left) {
  42. $left = $tcase;
  43. }
  44. if ($tcase['version'] == $args->version_right) {
  45. $right = $tcase;
  46. }
  47. }
  48. foreach($diff_array as $key => $val) {
  49. //attach a line break so we can use that as separation character for explode
  50. $diff_array[$key]["left"] = explode("\n", str_replace("</p>", "</p>\n", $left[$key]));
  51. $diff_array[$key]["right"] = explode("\n", str_replace("</p>", "</p>\n", $right[$key]));
  52. }
  53. //now for the new tcsteps feature
  54. $diff_array["steps"] = array();
  55. $diff_array["expected_results"] = array();
  56. if (is_array($left['steps'])) {
  57. $steps = "";
  58. $results = "";
  59. foreach ($left['steps'] as $step) {
  60. $steps .= str_replace("</p>", "</p>\n", $step['actions']);
  61. $results .=str_replace("</p>", "</p>\n", $step['expected_results']);
  62. }
  63. $diff_array["steps"]["left"] = explode("\n", $steps);
  64. $diff_array["expected_results"]["left"] = explode("\n", $results);
  65. }
  66. if (is_array($right['steps'])) {
  67. $steps = "";
  68. $results = "";
  69. foreach ($right['steps'] as $step) {
  70. $steps .= str_replace("</p>", "</p>\n", $step['actions']);
  71. $results .=str_replace("</p>", "</p>\n", $step['expected_results']);
  72. }
  73. $diff_array["steps"]["right"] = explode("\n", $steps);
  74. $diff_array["expected_results"]["right"] = explode("\n", $results);
  75. }
  76. foreach($diff_array as $key => $val) {
  77. $localized_key = lang_get($key);
  78. $diff_array[$key]["diff"] = $differ->inline($val["left"], $gui->version_short .
  79. $args->version_left, $val["right"], $gui->version_short .
  80. $args->version_right, $args->context);
  81. $diff_array[$key]["count"] = count($differ->changes);
  82. $diff_array[$key]["heading"] = $localized_key;
  83. //are there any changes? then display! if not, nothing to show here
  84. if ($diff_array[$key]["count"] > 0) {
  85. $diff_array[$key]["message"] = sprintf($labels["num_changes"], $localized_key,
  86. $diff_array[$key]["count"]);
  87. } else {
  88. $diff_array[$key]["message"] = sprintf($labels["no_changes"], $localized_key);
  89. }
  90. }
  91. $gui->diff_array = $diff_array;
  92. $gui->subtitle = sprintf(lang_get('diff_subtitle_tc'), $args->version_left,
  93. $args->version_left, $args->version_right,
  94. $args->version_right, $tcaseSet[0]['name']);
  95. }
  96. $smarty = new TLSmarty();
  97. $smarty->assign('gui', $gui);
  98. $smarty->display($templateCfg->template_dir . $templateCfg->default_template);
  99. function init_args()
  100. {
  101. $args = new stdClass();
  102. $args->tcase_id = isset($_REQUEST['testcase_id']) ? $_REQUEST['testcase_id'] : 0;
  103. $args->compare_selected_versions = isset($_REQUEST['compare_selected_versions']) ?
  104. $_REQUEST['compare_selected_versions'] : 0;
  105. $args->version_left = $_REQUEST['version_left'];
  106. $args->version_right = $_REQUEST['version_right'];
  107. $diffEngineCfg = config_get("diffEngine");
  108. if (isset($_REQUEST['context_show_all'])) {
  109. $args->context = null;
  110. } else {
  111. $args->context = (isset($_REQUEST['context']) && is_numeric($_REQUEST['context'])) ?
  112. $_REQUEST['context'] : $diffEngineCfg->context;
  113. }
  114. return $args;
  115. }
  116. ?>