# Test CSV Export Page
#
# $RCSfile: test_csv_export.php,v $  $Revision: 1.3 $
# ---------------------------------------------------------------------
include "./api/include_api.php";
auth_authenticate_user();
header('Content-Type: text/plain; name=data.csv');
header('Content-Transfer-Encoding: BASE64;');
header('Content-Disposition: attachment; filename=data.csv');
global $db;
$deleted = TEST_TBL . "." . TEST_DELETED;
$archived = TEST_TBL . "." . TEST_ARCHIVED;
$test_tbl = TEST_TBL;
# get filter and sort options off the session
$s_test_form_filter_options = session_get_filter_options("test");
$s_test_table_display_options = session_get_display_options("test");
$where_clause = test_filter_generate_where_clause($s_test_form_filter_options['manauto'], $s_test_form_filter_options['baowner'], $s_test_form_filter_options['qaowner'], $s_test_form_filter_options['test_type'], $s_test_form_filter_options['test_area']);
$order_clause = ' ORDER BY ' . $s_test_table_display_options['order_by'] . ' ' . $s_test_table_display_options['order_dir'];
# set table headers
print "Test ID, M/A, File Type, Auto Pass, Test Name, BA Owner, QA Owner, Test Type, Area Tested\r" . NEWLINE;
$q = "SELECT * FROM {$test_tbl} WHERE {$deleted} = 'N' AND {$archived} = 'N'";
$q = $q . $where_clause . $order_clause;
$rs =& db_query($db, $q);
while ($row = db_fetch_row($db, $rs)) {
    extract($row, EXTR_PREFIX_ALL, 'v');
    $test_id = ${'v_' . TEST_ID};
    $test_name = ${'v_' . TEST_NAME};
    $ba_owner = ${'v_' . TEST_BA_OWNER};
    $qa_owner = ${'v_' . TEST_QA_OWNER};
    $tester = ${'v_' . TEST_TESTER};
    $test_type = ${'v_' . TEST_TESTTYPE};
            $headers[VERIFY_RESULTS_TOTAL_VIR_MEM] = lang_get('tot_vir_mem');
            $headers[VERIFY_RESULTS_FREE_VIR_MEM] = lang_get('free_vir_mem');
            $headers[VERIFY_RESULTS_CUR_MEM_UTIL] = lang_get('cur_mem_util');
            $headers[VERIFY_RESULTS_TOTAL_PAGE_FILE] = lang_get('tot_page_file');
            $headers[VERIFY_RESULTS_FREE_PAGE_FILE] = lang_get('free_page_file');
        }
        $rows = results_get_verify_results_detail($test_run_id);
        /*
        foreach($rows as $key => $val) {
        	print"$key = $val<br>";
        }
        */
        break;
    case "bugs":
        $headers = array(BUG_ID => lang_get('bug_id'), BUG_PRIORITY => lang_get('bug_priority'), BUG_SEVERITY => lang_get('bug_severity'), BUG_STATUS => lang_get('bug_status'), BUG_CATEGORY => lang_get('bug_category'), BUG_REPORTER => lang_get('reported_by'), BUG_ASSIGNED_TO => lang_get('assigned_to'), BUG_ASSIGNED_TO_DEVELOPER => lang_get('assigned_to_developer'), BUG_FOUND_IN_RELEASE => lang_get('found_in_release'), BUG_ASSIGN_TO_RELEASE => lang_get('assigned_to_release'), BUG_DESCRIPTION => lang_get('bug_description'), BUG_SUMMARY => lang_get('bug_summary'));
        $display_options = session_get_display_options("bug");
        # We really should create a seperate function for csv/excel export
        $rows = bug_get($project_id, $page_number = 0, $display_options['order_by'], $display_options['order_dir'], $display_options['filter']['status'], $display_options['filter']['category'], $display_options['filter']['component'], $display_options['filter']['reported_by'], $display_options['filter']['assigned_to'], $display_options['filter']['assigned_to_developer'], $display_options['filter']['found_in_release'], $display_options['filter']['assigned_to_release']);
        break;
    case "test_steps":
        $headers = array(TEST_STEP_NO => lang_get('step_no'), TEST_STEP_ACTION => lang_get('step_action'), TEST_STEP_TEST_INPUTS => lang_get('test_inputs'), TEST_STEP_EXPECTED => lang_get('step_expected'), TEST_STEP_INFO_STEP => lang_get('info_step'));
        $s_test_details = session_get_properties("test");
        $test_id = $s_test_details['test_id'];
        $rows = test_get_test_steps_for_export($test_id);
        break;
    default:
        exit;
}
if (IMPORT_EXPORT_TO_EXCEL) {
    if (isset($headers)) {
        # HEADER ROW
function html_dynamic_tree($session_variable, $tree_array, $root_node, $highlighted = null, $column_map = array())
{
    # Get the expanded tree array from the session
    $s_display_options = session_get_display_options($session_variable);
    $expanded = $s_display_options["filter"]["tree"];
    # Add expanded node (if there is one)
    if (isset($_GET['expand'])) {
        $expanded[] = $_GET['expand'];
    }
    # Remove collapsed node (if there is one)
    if (isset($_GET['collapse'])) {
        $expanded = array_diff($expanded, array($_GET['collapse']));
    }
    # Create variable to update the session
    $update_expanded = array("tree" => $expanded);
    # Update the tree variable in the session and get the returned value
    $s_display_options = session_set_display_options($session_variable, $update_expanded);
    $expanded = $s_display_options["filter"]["tree"];
    global $db;
    # images html
    $img_tree_T = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_T.gif' alt=''>";
    $img_tree_L = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_L.gif' alt=''>";
    $img_tree_column = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_column.gif' alt=''>";
    $img_tree_plus = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_plus.gif' alt=''>";
    $img_tree_plus_b = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_plus_b.gif' alt=''>";
    $img_tree_minus = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_minus.gif' alt=''>";
    $img_tree_minus_b = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_dots_minus_b.gif' alt=''>";
    $img_tree_folder = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_folder.gif' alt=''>";
    $img_tree_folder_b = "<img align='absmiddle' border=0 src='" . IMG_SRC . "tree_folder_b.gif' alt=''>";
    $img_spacer = "<img align='absmiddle' border=0 src='" . IMG_SRC . "1px_transparent.gif' width=15 height=1 alt=''>";
    $column = $img_tree_column . $img_spacer;
    # display each child node
    for ($i = 0; $i < sizeof($tree_array); $i++) {
        $req_id = $tree_array[$i]['uid'];
        $req_version_id = requirement_get_latest_version($req_id);
        echo $img_spacer;
        foreach ($column_map as $column_type) {
            if ($column_type == "|") {
                echo $column;
            } elseif ($column_type == " ") {
                echo $img_spacer;
            }
        }
        # if the last node
        if ($i == sizeof($tree_array) - 1) {
            # if the last node has no children
            if (empty($tree_array[$i]["children"])) {
                echo $img_tree_L;
                # if the last node has children
            } else {
                # if last node has children and the node is in the expanded array
                if (util_array_value_search($req_id, $expanded)) {
                    echo "<a href='?collapse={$req_id}#{$req_id}'>" . $img_tree_minus_b . $img_tree_folder_b . "</a>";
                    # if last node has children and the node is not in the expanded array
                } else {
                    echo "<a href='?expand={$req_id}#{$req_id}'>" . $img_tree_plus_b . $img_tree_folder . "</a>";
                }
            }
            $column_type = array(" ");
            # if not the last node
        } else {
            # if not the last node and the node has no children
            if (empty($tree_array[$i]["children"])) {
                echo $img_tree_T;
            } else {
                # if not the last node and the node is in the expanded array
                if (util_array_value_search($req_id, $expanded)) {
                    echo "<a href='?collapse={$req_id}#{$req_id}'>" . $img_tree_minus . $img_tree_folder_b . "</a>";
                    # if not the last node and the node is not in the expanded array
                } else {
                    echo "<a href='?expand={$req_id}#{$req_id}'>" . $img_tree_plus . $img_tree_folder . "</a>";
                }
            }
            $column_type = array("|");
        }
        # prints a closed folder if node has no children and $root_node is set to true
        if (empty($tree_array[$i]["children"]) && $root_node) {
            echo $img_tree_folder;
        }
        # formatting for highlighted node
        $style = "";
        if ($req_id == $highlighted) {
            $style = "style='font-weight: bold; font-size: 120%;'";
        }
        # print the node name
        echo " <a {$style} name={$req_id} href='requirement_detail_page.php?req_id={$req_id}&req_version_id={$req_version_id}'>" . $tree_array[$i]['name'] . "</a>";
        echo "<br>" . NEWLINE;
        # display this nodes children
        if (util_array_value_search($req_id, $expanded)) {
            html_dynamic_tree($session_variable, $tree_array[$i]['children'], false, $highlighted, array_merge($column_map, $column_type));
        }
    }
}
$form_name = 'add_release';
$action_page = 'testset_add_action.php';
$release_edit_page = 'testset_page.php';
$release_signoff_page = 'release_signoff_page.php';
$build_page = 'build_page.php';
$delete_page = 'delete_page.php';
$s_project_properties = session_get_project_properties();
$project_name = $s_project_properties['project_name'];
$project_id = $s_project_properties['project_id'];
$row_style = '';
if (isset($_GET['failed'])) {
    $is_validation_failure = $_GET['failed'];
} else {
    $is_validation_failure = false;
}
$s_release_table_display_options = array_merge(session_get_display_options("results"), session_get_properties('results_properties'));
html_window_title();
html_print_body($form_name, 'rel_name');
html_page_title($project_name . " - " . lang_get('release_page'));
html_page_header($db, $project_name);
html_print_menu();
error_report_check($_GET);
$s_admin_properties = session_get_release_display_options();
?>

<script language="JavaScript" type="text/javascript">

function checkBoxValidate(cb, startCount, endCount) {

	#Evaluates if the check box has been checked in the "All Regression" etc
	//alert();
$s_testtype_order_by = $s_testtype_display_options['order_by'];
$s_testtype_order_dir = $s_testtype_display_options['order_dir'];
$s_testtype_page_number = $s_testtype_display_options['page_number'];
$s_test_doc_type_display_options = session_get_display_options("project_manage_test_doc_type");
$s_test_doc_type_order_by = $s_test_doc_type_display_options['order_by'];
$s_test_doc_type_order_dir = $s_test_doc_type_display_options['order_dir'];
$s_test_doc_type_page_number = $s_test_doc_type_display_options['page_number'];
$s_environment_display_options = session_get_display_options("project_manage_environment");
$s_environment_order_by = $s_environment_display_options['order_by'];
$s_environment_order_dir = $s_environment_display_options['order_dir'];
$s_environment_page_number = $s_environment_display_options['page_number'];
$s_req_doc_type_display_options = session_get_display_options("project_manage_req_doc_type");
$s_req_doc_type_order_by = $s_req_doc_type_display_options['order_by'];
$s_req_doc_type_order_dir = $s_req_doc_type_display_options['order_dir'];
$s_req_doc_type_page_number = $s_req_doc_type_display_options['page_number'];
$s_req_area_covered_display_options = session_get_display_options("project_manage_req_area_covered");
$s_req_area_covered_order_by = $s_req_area_covered_display_options['order_by'];
$s_req_area_covered_order_dir = $s_req_area_covered_display_options['order_dir'];
$s_req_area_covered_page_number = $s_req_area_covered_display_options['page_number'];
html_window_title();
html_print_body();
html_page_title(project_get_name($selected_project_id) . " - " . lang_get('manage_project_page'));
html_page_header($db, $project_name);
html_print_menu();
admin_menu_print($page, $project_id, $user_id);
error_report_check($_GET);
$project_details = project_get_details($selected_project_id);
print "<div align=center>" . NEWLINE;
html_project_manage_menu();
print "<br>" . NEWLINE;
if (!empty($project_details)) {
function requirement_get_edit_children($project_id, $req_id, $page_number = 0, $order_by = REQ_FILENAME, $order_dir = "ASC", $doc_type = "", $status = "", $area_covered = "", $functionality = "", $assign_release = "", $show_versions = "latest", $search = "", $priority = "", $per_page = null, $csv_name = null)
{
    $tbl_req = REQ_TBL;
    $f_req_proj_id = $tbl_req . "." . REQ_PROJECT_ID;
    $f_req_id = $tbl_req . "." . REQ_ID;
    $f_req_filename = $tbl_req . "." . REQ_FILENAME;
    $f_req_area_covered = $tbl_req . "." . REQ_AREA_COVERED;
    $f_req_type = $tbl_req . "." . REQ_TYPE;
    $f_req_parent = $tbl_req . "." . REQ_PARENT;
    $f_req_label = $tbl_req . "." . REQ_LABEL;
    $f_req_unique_id = $tbl_req . "." . REQ_UNIQUE_ID;
    $f_req_locked_by = $tbl_req . "." . REQ_LOCKED_BY;
    $f_req_locked_date = $tbl_req . "." . REQ_LOCKED_DATE;
    $f_req_parent = $tbl_req . "." . REQ_PARENT;
    $f_req_priority = $tbl_req . "." . REQ_PRIORITY;
    //$f_req_root		 			= $tbl_req .".". REQ_ROOT;
    $tbl_req_ver = REQ_VERS_TBL;
    $f_req_ver_uid = $tbl_req_ver . "." . REQ_VERS_UNIQUE_ID;
    $f_req_ver_req_id = $tbl_req_ver . "." . REQ_VERS_REQ_ID;
    $f_req_ver_version = $tbl_req_ver . "." . REQ_VERS_VERSION;
    $f_req_ver_timestamp = $tbl_req_ver . "." . REQ_VERS_TIMESTAMP;
    $f_req_ver_uploaded_by = $tbl_req_ver . "." . REQ_VERS_UPLOADED_BY;
    $f_req_ver_filename = $tbl_req_ver . "." . REQ_VERS_FILENAME;
    $f_req_ver_comments = $tbl_req_ver . "." . REQ_VERS_COMMENTS;
    $f_req_ver_status = $tbl_req_ver . "." . REQ_VERS_STATUS;
    $f_req_ver_shed_release = $tbl_req_ver . "." . REQ_VERS_SCHEDULED_RELEASE_IMP;
    $f_req_ver_shed_build = $tbl_req_ver . "." . REQ_VERS_SCHEDULED_BUILD_IMP;
    $f_req_ver_actual_release = $tbl_req_ver . "." . REQ_VERS_ACTUAL_RELEASE_IMP;
    $f_req_ver_actual_build = $tbl_req_ver . "." . REQ_VERS_ACTUAL_BUILD_IMP;
    $f_req_ver_detail = $tbl_req_ver . "." . REQ_VERS_DETAIL;
    $f_req_ver_latest = $tbl_req_ver . "." . REQ_VERS_LATEST;
    $tbl_functionality_assoc = REQ_FUNCT_ASSOC_TBL;
    $f_functionality_assoc_id = $tbl_functionality_assoc . "." . REQ_FUNCT_ASSOC_ID;
    $f_functionality_assoc_req_id = $tbl_functionality_assoc . "." . REQ_FUNCT_ASSOC_REQ_ID;
    $f_functionality_assoc_funct_id = $tbl_functionality_assoc . "." . REQ_FUNCT_ASSOC_FUNCT_ID;
    $release_tbl = RELEASE_TBL;
    $f_release_id = $release_tbl . "." . RELEASE_ID;
    $f_release_name = $release_tbl . "." . RELEASE_NAME;
    $tbl_req_ver_assoc_rel = REQ_VERS_ASSOC_REL;
    $f_req_ver_assoc_rel_id = $tbl_req_ver_assoc_rel . "." . REQ_VERS_ASSOC_REL_ID;
    $f_req_ver_assoc_rel_req_id = $tbl_req_ver_assoc_rel . "." . REQ_VERS_ASSOC_REL_REQ_ID;
    $f_req_ver_assoc_rel_rel_id = $tbl_req_ver_assoc_rel . "." . REQ_VERS_ASSOC_REL_REL_ID;
    $tbl_req_doc_type = REQ_DOC_TYPE_TBL;
    $f_req_doc_type_name = $tbl_req_doc_type . "." . REQ_DOC_TYPE_NAME;
    $f_req_doc_type_id = $tbl_req_doc_type . "." . REQ_DOC_TYPE_ID;
    $f_req_doc_type_project_id = $tbl_req_doc_type . "." . REQ_DOC_TYPE_PROJ_ID;
    $f_req_doc_type_root_doc = $tbl_req_doc_type . "." . REQ_DOC_TYPE_ROOT_DOC;
    $tbl_req_area_covered = REQ_AREA_COVERAGE_TBL;
    $f_req_area_covered_name = $tbl_req_area_covered . "." . REQ_AREA_COVERAGE;
    $f_req_area_covered_id = $tbl_req_area_covered . "." . REQ_AREA_COVERAGE_ID;
    $f_req_area_covered_proj_id = $tbl_req_area_covered . "." . REQ_AREA_PROJ_ID;
    $where_clause = "";
    if (!empty($doc_type)) {
        $where_clause .= "AND {$f_req_type} = '{$doc_type}' ";
    }
    if (!empty($status)) {
        $where_clause .= "AND {$f_req_ver_status} = '{$status}' ";
    }
    if (!empty($area_covered)) {
        $where_clause .= "AND {$f_req_area_covered} = '{$area_covered}' ";
    }
    if (!empty($functionality)) {
        $where_clause .= "AND {$f_functionality_assoc_funct_id} = '{$functionality}' ";
    }
    if (!empty($assign_release)) {
        $where_clause .= "AND {$f_req_ver_assoc_rel_rel_id} = '{$assign_release}'";
    }
    if (!empty($priority)) {
        $where_clause .= "AND {$f_req_priority} = '{$priority}'";
    }
    if ($show_versions == "latest") {
        $where_clause .= "AND {$f_req_ver_latest} = 'Y'";
    }
    # SEARCH
    if (!empty($search)) {
        $where_clause = $where_clause . " AND ( ({$f_req_filename} LIKE '%{$search}%') OR ({$f_req_ver_detail} LIKE '%{$search}%') )";
    }
    $where_clause = substr($where_clause, 3, strlen($where_clause));
    if (!empty($where_clause)) {
        $where_clause = "WHERE {$where_clause}";
    }
    $q = "\tSELECT DISTINCT\n\t\t\t\t{$f_req_id},\n\t\t\t\t{$f_req_area_covered_name},\n\t\t\t\t{$f_req_filename},\n\t\t\t\t{$f_req_doc_type_name},\n\t\t\t\t{$f_req_locked_by},\n\t\t\t\t{$f_req_locked_date},\n\t\t\t\t{$f_req_priority},\n\t\t\t\t{$f_req_ver_uid},\n\t\t\t\t{$f_req_ver_version},\n\t\t\t\t{$f_req_ver_detail},\n\t\t\t\t{$f_req_ver_status},\n\t\t\t\t{$f_req_ver_filename}\n\t\t\tFROM {$tbl_req}\n\t\t\tINNER JOIN {$tbl_req_ver}\n\t\t\t\tON {$f_req_ver_req_id} = {$f_req_id}\n\t\t\tLEFT JOIN {$tbl_req_doc_type}\n\t\t\t\tON {$f_req_doc_type_id} = {$f_req_type}\n\t\t\tLEFT JOIN {$tbl_req_area_covered}\n\t\t\t\tON {$f_req_area_covered_id} = {$f_req_area_covered}";
    if (!empty($assign_release)) {
        $q .= "\tINNER JOIN {$tbl_req_ver_assoc_rel}\n\t\t\t\t\tON {$f_req_ver_assoc_rel_req_id} = {$f_req_ver_uid}\n\t\t\t\tINNER JOIN {$release_tbl}\n\t\t\t\t\tON {$f_release_id} = {$f_req_ver_assoc_rel_rel_id}";
    }
    if (!empty($functionality)) {
        $q .= "\tINNER JOIN {$tbl_functionality_assoc}\n\t\t\t\t\tON {$f_functionality_assoc_req_id} = {$f_req_id}";
    }
    $q .= "\t{$where_clause}\n\t\t\t\tAND {$f_req_proj_id} = {$project_id}\n\t\t\t\tAND ({$f_req_parent} = {$req_id} OR {$f_req_parent} = 0)\n\t\t\t\tAND {$f_req_id} != {$req_id}\n\t\t\tORDER BY {$order_by} {$order_dir}";
    //print nl2br($q);
    global $db;
    //print$q;
    if (is_null($per_page)) {
        $s_properties = session_get_display_options("requirements");
        $per_page = $s_properties['filter']['per_page'];
    }
    if ($per_page != 0 && $page_number != 0) {
        $row_count = db_num_rows($db, db_query($db, $q));
        $page_number = util_page_number($page_number, $row_count, $per_page);
        # Add the limit clause to the query so that we only show n number of records per page
        $offset = ($page_number - 1) * $per_page;
        html_table_offset($row_count, $per_page, $page_number, $order_by, $order_dir, $csv_name);
        $q .= " LIMIT {$offset}, " . $per_page;
    }
    //print$q;exit;
    $rows = db_fetch_array($db, db_query($db, $q));
    return $rows;
}
# Test Workflow CSV Export Page
#
# $RCSfile: test_workflow_csv_export.php,v $  $Revision: 1.2 $
# ---------------------------------------------------------------------
include "./api/include_api.php";
auth_authenticate_user();
header('Content-Type: text/plain; name=data.csv');
header('Content-Transfer-Encoding: BASE64;');
header('Content-Disposition: attachment; filename=data.csv');
global $db;
$deleted = TEST_TBL . "." . TEST_DELETED;
$archived = TEST_TBL . "." . TEST_ARCHIVED;
$test_tbl = TEST_TBL;
# get filter and sort options off the session
$s_test_workflow_form_filter_options = session_get_filter_options("test_workflow");
$s_test_workflow_table_display_options = session_get_display_options("test_workflow");
$where_clause = test_workflow_filter_generate_where_clause($s_test_workflow_form_filter_options['manauto'], $s_test_workflow_form_filter_options['baowner'], $s_test_workflow_form_filter_options['qaowner'], $s_test_workflow_form_filter_options['test_status']);
$order_clause = ' ORDER BY ' . $s_test_workflow_table_display_options['order_by'] . ' ' . $s_test_workflow_table_display_options['order_dir'];
# set table headers
print "Test ID, M/A, Test Name, Test Status, Priority, BA Owner, QA Owner, Date Assigned, Date Expected, Date Complete, BA Sign Off Date, Info\r" . NEWLINE;
$q = "SELECT * FROM {$test_tbl} WHERE {$deleted} = 'N' AND {$archived} = 'N'";
$q = $q . $where_clause . $order_clause;
$rs =& db_query(&$db, $q);
while ($row = db_fetch_row($db, $rs)) {
    extract($row, EXTR_PREFIX_ALL, 'v');
    $test_id = ${'v_' . TEST_ID};
    $test_name = ${'v_' . TEST_NAME};
    $ba_owner = ${'v_' . TEST_BA_OWNER};
    $qa_owner = ${'v_' . TEST_QA_OWNER};
    $tester = ${'v_' . TEST_TESTER};
    $test_status = ${'v_' . TEST_STATUS};