/** * Build the tree menu for generation of JavaScript test case tree. * Depending on mode and user's selections in user interface, * either a completely filtered tree will be build and returned, * or only the minimal necessary data to "lazy load" * the objects in the tree by later Ajax calls. * No return value - all variables will be stored in gui object * which is passed by reference. * * @author Andreas Simon * @param object $gui Reference to GUI object (data will be written to it) */ public function build_tree_menu(&$gui) { $tree_menu = null; $filters = $this->get_active_filters(); $additional_info = null; $options = null; $loader = ''; $children = "[]"; $cookie_prefix = ''; // by default, disable drag and drop, then later enable if needed $drag_and_drop = new stdClass(); $drag_and_drop->enabled = false; $drag_and_drop->BackEndUrl = ''; $drag_and_drop->useBeforeMoveNode = FALSE; if (!$this->testproject_mgr) { $this->testproject_mgr = new testproject($this->db); } $tc_prefix = $this->testproject_mgr->getTestCasePrefix($this->args->testproject_id); switch ($this->mode) { case 'plan_mode': // No lazy loading here. $additional_info = new stdClass(); $additional_info->useCounters = CREATE_TC_STATUS_COUNTERS_OFF; $additional_info->useColours = COLOR_BY_TC_STATUS_OFF; $additional_info->testcases_colouring_by_selected_build = DISABLED; $filters->show_testsuite_contents = 1; $filters->hide_testcases = 0; if ($this->args->feature == 'test_urgency') { $filters->hide_testcases = 1; } list($tree_menu, $testcases_to_show) = generateExecTree($this->db, $gui->menuUrl, $this->args->testproject_id, $this->args->testproject_name, $this->args->testplan_id, $this->args->testplan_name, $filters, $additional_info); $this->set_testcases_to_show($testcases_to_show); $root_node = $tree_menu->rootnode; $children = $tree_menu->menustring ? $tree_menu->menustring : "[]"; $cookie_prefix = $this->args->feature; break; case 'edit_mode': if ($gui->tree_drag_and_drop_enabled[$this->args->feature]) { $drag_and_drop->enabled = true; $drag_and_drop->BackEndUrl = $this->args->basehref . 'lib/ajax/dragdroptprojectnodes.php'; $drag_and_drop->useBeforeMoveNode = false; } if ($this->do_filtering) { $options = array('forPrinting' => NOT_FOR_PRINTING, 'hideTestCases' => SHOW_TESTCASES, 'tc_action_enabled' => DO_ON_TESTCASE_CLICK, 'ignore_inactive_testcases' => DO_NOT_FILTER_INACTIVE_TESTCASES, 'exclude_branches' => null); $tree_menu = generateTestSpecTree($this->db, $this->args->testproject_id, $this->args->testproject_name, $gui->menuUrl, $filters, $options); $root_node = $tree_menu->rootnode; $children = $tree_menu->menustring ? $tree_menu->menustring : "[]"; $cookie_prefix = $this->args->feature; } else { $loader = $this->args->basehref . 'lib/ajax/gettprojectnodes.php?' . "root_node={$this->args->testproject_id}&" . "tcprefix=" . urlencode($tc_prefix . $this->configuration->tc_cfg->glue_character); $tcase_qty = $this->testproject_mgr->count_testcases($this->args->testproject_id); $root_node = new stdClass(); $root_node->href = "javascript:EP({$this->args->testproject_id})"; $root_node->id = $this->args->testproject_id; $root_node->name = $this->args->testproject_name . " ({$tcase_qty})"; $root_node->testlink_node_type = 'testproject'; $cookie_prefix = 'tproject_' . $root_node->id . "_"; } break; case 'plan_add_mode': $cookie_prefix = "planaddtc_{$this->args->testproject_id}_{$this->args->user_id}_"; if ($this->do_filtering) { $options = array('forPrinting' => NOT_FOR_PRINTING, 'hideTestCases' => HIDE_TESTCASES, 'tc_action_enabled' => ACTION_TESTCASE_DISABLE, 'ignore_inactive_testcases' => IGNORE_INACTIVE_TESTCASES, 'viewType' => 'testSpecTreeForTestPlan'); $tree_menu = generateTestSpecTree($this->db, $this->args->testproject_id, $this->args->testproject_name, $gui->menuUrl, $filters, $options); $root_node = $tree_menu->rootnode; $children = $tree_menu->menustring ? $tree_menu->menustring : "[]"; } else { $loader = $this->args->basehref . 'lib/ajax/gettprojectnodes.php?' . "root_node={$this->args->testproject_id}&show_tcases=0"; $root_node = new stdClass(); $root_node->href = "javascript:EP({$this->args->testproject_id})"; $root_node->id = $this->args->testproject_id; $root_node->name = $this->args->testproject_name; $root_node->testlink_node_type = 'testproject'; } break; case 'execution_mode': default: // No lazy loading here. // Filtering is always done in execution mode, no matter if user enters data or not, // since the user should usually never see the whole tree here. $additional_info = new stdClass(); $filters->hide_testcases = false; $filters->show_testsuite_contents = $this->configuration->exec_cfg->show_testsuite_contents; $additional_info->useCounters = $this->configuration->exec_cfg->enable_tree_testcase_counters; $additional_info->useColours = new stdClass(); $additional_info->useColours->testcases = $this->configuration->exec_cfg->enable_tree_testcases_colouring; $additional_info->useColours->counters = $this->configuration->exec_cfg->enable_tree_counters_colouring; $additional_info->testcases_colouring_by_selected_build = $this->configuration->exec_cfg->testcases_colouring_by_selected_build; list($tree_menu, $testcases_to_show) = generateExecTree($this->db, $gui->menuUrl, $this->args->testproject_id, $this->args->testproject_name, $this->args->testplan_id, $this->args->testplan_name, $filters, $additional_info); $this->set_testcases_to_show($testcases_to_show); $root_node = $tree_menu->rootnode; $children = $tree_menu->menustring ? $tree_menu->menustring : "[]"; $cookie_prefix = 'exec_tplan_id_' . $this->args->testplan_id; break; } $gui->tree = $tree_menu; $gui->ajaxTree = new stdClass(); $gui->ajaxTree->loader = $loader; $gui->ajaxTree->root_node = $root_node; $gui->ajaxTree->children = $children; $gui->ajaxTree->cookiePrefix = $cookie_prefix; $gui->ajaxTree->dragDrop = $drag_and_drop; }
// $filters->statusAllPrevBuilds = null; $filters->filter_keywords = null; $filters->filter_keywords_filter_type = null; $filters->filter_tc_id = null; $filters->filter_assigned_user = null; $filters->filter_result_result = null; $filters->filter_custom_fields = null; $filters->setting_platform = null; $filters->filter_result_build = $latestBuild; $filters->hide_testcases = HIDE_TESTCASES; $filters->filter_assigned_user_include_unassigned = true; $filters->show_testsuite_contents = true; // ----- BUGID 3451 and related --------------------------------------- $additionalInfo->useCounters = CREATE_TC_STATUS_COUNTERS_OFF; $additionalInfo->useColours = COLOR_BY_TC_STATUS_OFF; list($treeContents, $additionalArgs) = generateExecTree($db, $workPath, $args->tproject_id, $args->tproject_name, $args->tplan_id, $testplan_name, $filters, $additionalInfo); $tree = $treeContents->menustring; $gui->ajaxTree = new stdClass(); $gui->ajaxTree->root_node = $treeContents->rootnode; $gui->ajaxTree->children = $treeContents->menustring; $gui->ajaxTree->loadFromChildren = true; $gui->ajaxTree->cookiePrefix .= $gui->ajaxTree->root_node->id . "_"; break; default: tLog("Argument _REQUEST['type'] has invalid value", 'ERROR'); exit; break; } $smarty = new TLSmarty(); $smarty->assign('gui', $gui); $smarty->assign('arrCheckboxes', $arrCheckboxes);
// Set of filters Off $filters->filter_keywords = null; $filters->filter_keywords_filter_type = null; $filters->filter_tc_id = null; $filters->filter_assigned_user = null; $filters->filter_result_result = null; $filters->filter_custom_fields = null; $filters->setting_platform = null; $filters->filter_result_build = $latestBuild; $filters->hide_testcases = HIDE_TESTCASES; $filters->filter_assigned_user_include_unassigned = true; $filters->show_testsuite_contents = true; $additionalInfo->useCounters = CREATE_TC_STATUS_COUNTERS_OFF; $additionalInfo->useColours = null; $env = array("tproject_id" => $args->tproject_id, "tplan_id" => $args->tplan_id, "tproject_name" => $args->tproject_name, "tplan_name" => $testplan_name); list($treeContents, $additionalArgs) = generateExecTree($db, $workPath, $env, $filters, $additionalInfo); $tree = $treeContents->menustring; $gui->ajaxTree = new stdClass(); $gui->ajaxTree->root_node = $treeContents->rootnode; $gui->ajaxTree->children = $treeContents->menustring; $gui->ajaxTree->loadFromChildren = true; $report = $args->doc_type == "testplan" ? "test_plan_report" : "test_report"; $gui->ajaxTree->cookiePrefix .= "{$report}_tplan_id_{$args->tplan_id}_"; break; default: tLog("Argument _REQUEST['type'] has invalid value", 'ERROR'); exit; break; } $smarty = new TLSmarty(); $smarty->assign('gui', $gui);