print "<tr>" . NEWLINE;
print "<td class=form-lbl-r nowrap>" . lang_get('req_area') . "</td>" . NEWLINE;
print "<td class=form-data-l>" . NEWLINE;
print "<select name=req_area size=1>" . NEWLINE;
$list_box = array();
$rows_areas = project_get_req_areas_covered($project_id);
foreach ($rows_areas as $row_area) {
    $list_box[$row_area[REQ_AREA_COVERAGE_ID]] = $row_area[REQ_AREA_COVERAGE];
}
$list_box[""] = "";
html_print_list_box_from_key_array($list_box, session_validate_form_get_field('req_area', $req_area_covered_id));
print "</select>" . NEWLINE;
print "</td>" . NEWLINE;
print "</tr>" . NEWLINE;
# FUNCTIONALITY
$rows_functions = requirement_get_functionality($project_id, $s_req_id);
$function_ids = array();
foreach ($rows_functions as $key => $value) {
    $function_ids[] = $key;
}
print "<tr>" . NEWLINE;
print "<td class=form-lbl-r nowrap>" . lang_get('functionality') . "</td>" . NEWLINE;
print "<td class=form-data-l>" . NEWLINE;
print "<select name='req_functionality[]' size=5 multiple>" . NEWLINE;
$list_box = array();
$rows = project_get_req_functionality($project_id);
foreach ($rows as $row) {
    $list_box[$row[REQ_FUNCT_ID]] = $row[REQ_FUNCT_NAME];
}
html_print_list_box_from_key_array($list_box, session_validate_form_get_field('req_functionality', $function_ids));
print "</select>" . NEWLINE;
include "./api/include_api.php";
auth_authenticate_user();
$project_properties = session_get_project_properties();
$project_name = $project_properties['project_name'];
$project_id = $project_properties['project_id'];
$csv = "";
switch ($_GET['table']) {
    case "requirements":
        # columns to be included from the recordset and the
        # name to use in the header row
        $headers = array(REQ_ID => lang_get('req_id'), REQ_FILENAME => lang_get('req_name'), REQ_VERS_FILENAME => lang_get('file_name'), REQ_VERS_DETAIL => lang_get('req_detail'), REQ_DOC_TYPE_NAME => lang_get('req_type'), REQ_AREA_COVERAGE => lang_get('req_area'), REQ_PRIORITY => lang_get('req_priority'), REQ_VERS_STATUS => lang_get('status'), REQ_VERS_VERSION => lang_get('version'), REQ_LOCKED_BY => lang_get('req_locked_by'), REQ_LOCKED_DATE => lang_get('req_locked_date'), RELEASE_NAME => lang_get('release_name'), REQ_FUNCT_NAME => lang_get('functionality'));
        $display_options = session_get_display_options("requirements");
        $rows = requirement_get_for_export($project_id, $page_number = 0, $display_options['order_by'], $display_options['order_dir'], $display_options['filter']['doc_type'], $display_options['filter']['status'], $display_options['filter']['area_covered'], $display_options['filter']['functionality'], $display_options['filter']['assign_release'], $display_options['filter']['show_versions'], $per_page = "", $display_options['filter']['requirement_search'], $display_options['filter']['priority']);
        # add functionality information of each requirement
        foreach ($rows as $row => $fields) {
            $rows_functions = requirement_get_functionality($project_id, $fields[REQ_ID]);
            $functionality = "";
            foreach ($rows_functions as $key => $value) {
                $functionality .= $value . ": ";
            }
            $rows[$row][REQ_FUNCT_NAME] = $functionality;
        }
        break;
    case "tests":
        $headers = array(TEST_ID => lang_get('test_id'), TEST_NAME => lang_get('test_name'), TEST_MANUAL => lang_get('manual'), TEST_AUTOMATED => lang_get('automated'), TEST_BA_OWNER => lang_get('ba_owner'), TEST_QA_OWNER => lang_get('qa_owner'), TEST_TESTER => lang_get('tester'), TEST_TESTTYPE => lang_get('testtype'), TEST_AREA_TESTED => lang_get('area_tested'), TEST_PRIORITY => lang_get('priority'), TEST_STATUS => lang_get('test_status'), TEST_AUTO_PASS => lang_get('autopass'));
        $display_options = session_get_display_options("test");
        $rows = test_filter_rows($project_id, $display_options['filter']['manual_auto'], $display_options['filter']['ba_owner'], $display_options['filter']['qa_owner'], $display_options['filter']['tester'], $display_options['filter']['test_type'], $display_options['filter']['area_tested'], $display_options['filter']['test_status'], $display_options['filter']['priority'], $display_options['filter']['per_page'], $display_options['filter']['test_search'], $display_options['order_by'], $display_options['order_dir'], $page_number = 0);
        break;
    case "test_workflow":
        $headers = array(TEST_ID => lang_get('test_id'), TEST_NAME => lang_get('test_name'), TEST_MANUAL => lang_get('manual'), TEST_AUTOMATED => lang_get('automated'), TEST_BA_OWNER => lang_get('ba_owner'), TEST_QA_OWNER => lang_get('qa_owner'), TEST_TESTER => lang_get('tester'), TEST_TESTTYPE => lang_get('testtype'), TEST_AREA_TESTED => lang_get('area_tested'), TEST_PRIORITY => lang_get('priority'), TEST_STATUS => lang_get('test_status'), TEST_AUTO_PASS => lang_get('autopass'), TEST_DATE_ASSIGNED => lang_get('date_assigned'), TEST_DATE_EXPECTED => lang_get('date_expected'), TEST_DATE_COMPLETE => lang_get('date_complete'), TEST_BA_SIGNOFF => lang_get('ba_signoff_date'), TEST_COMMENTS => lang_get('info'));
        $display_options = session_get_display_options("test_workflow");
 html_tbl_print_sortable_header(lang_get('req_area'), REQ_AREA_COVERAGE_TBL . "." . REQ_AREA_COVERAGE, $order_by, $order_dir);
 html_tbl_print_sortable_header(lang_get('functionality'));
 html_tbl_print_sortable_header(lang_get('req_locked_by'), REQ_TBL . "." . REQ_LOCKED_BY, $order_by, $order_dir);
 html_tbl_print_sortable_header(lang_get('req_locked_date'), REQ_TBL . "." . REQ_LOCKED_DATE, $order_by, $order_dir);
 print "</tr>" . NEWLINE;
 foreach ($rows_requirement as $row_requirement) {
     $req_id = $row_requirement[REQ_ID];
     $req_version_id = $row_requirement[REQ_VERS_UNIQUE_ID];
     # Name of the % covered text input
     $pc_covered_input_name = "percent_covered_" . $req_id;
     # Get the % covered from db
     $percent_covered = test_requirement_get_pc_covered($s_test_id, $req_id);
     # Save and get the % covered from the session
     $percent_covered = session_validate_form_get_field($pc_covered_input_name, $percent_covered);
     $row_style = html_tbl_alternate_bgcolor($row_style);
     $rows_functions = requirement_get_functionality($s_project_id, $row_requirement[REQ_ID]);
     if (session_records_ischecked("test_req_assoc", $req_id)) {
         $checked = "checked";
     } else {
         $checked = "";
     }
     # Build list of records
     if (empty($records)) {
         $records = $req_id . " => ''";
     } else {
         $records .= ", " . $req_id . " => ''";
     }
     # Rows
     print "<tr class='{$row_style}'>" . NEWLINE;
     print "<td><input type='checkbox' name='row_{$req_id}' {$checked}></td>";
     print "<td><input type=text name={$pc_covered_input_name} size=3 maxlength=3 value='{$percent_covered}'></td>";
function html_print_requirements_filter($project_id, $filter_doc_type, $filter_status, $filter_area_covered, $filter_functionality, $filter_assign_release, $filter_per_page = null, $filter_show_versions = null, $filter_search, $filter_priority)
{
    print "<table class=width100>" . NEWLINE;
    print "<tr>" . NEWLINE;
    print "<td>" . NEWLINE;
    print "<table class=inner rules=none border=0>" . NEWLINE;
    # TITLES FOR FIRST ROW OF FORM
    print "<tr class=left>" . NEWLINE;
    print "<td class=form-header-c>" . lang_get('req_type') . "</td>" . NEWLINE;
    print "<td class=form-header-c>" . lang_get('status') . "</td>" . NEWLINE;
    print "<td class=form-header-c>" . lang_get('req_area') . "</td>" . NEWLINE;
    # if show versions or per page is displayed
    if (!is_null($filter_show_versions) || !is_null($filter_per_page)) {
        print "<td class=form-header-c>" . lang_get('show') . "</td>" . NEWLINE;
    } else {
        print "<td class='form-header-c'></td>" . NEWLINE;
    }
    if (!is_null($filter_show_versions)) {
        # SHOW VERSIONS
        print "<td class='left' rowspan=4>" . NEWLINE;
        print "<input id=all_versions type='radio' name='show_versions' value='all' " . ($filter_show_versions == "all" ? "checked" : "") . ">";
        print "<label for=all_versions>" . lang_get("all_versions") . "</label><br>" . NEWLINE;
        print "<input id=latest_version type='radio' name='show_versions' value='latest' " . ($filter_show_versions == "latest" ? "checked" : "") . ">";
        print "<label for=latest_version>" . lang_get("latest_version") . "</label>" . NEWLINE;
        print "</td>" . NEWLINE;
        //print"<td>&nbsp;</td>". NEWLINE;
    }
    print "<td align='center' rowspan=4><input type='submit' value='Filter'></td>" . NEWLINE;
    print "</tr>" . NEWLINE;
    # LIST BOXES FOR FIRST ROW
    print "<tr>" . NEWLINE;
    # DOC TYPE
    print "<td align='center'>" . NEWLINE;
    print "<select name='doc_type'>" . NEWLINE;
    html_print_list_box_from_key_array(requirement_get_types($project_id, $blank = true), $selected = $filter_doc_type);
    print "</select>" . NEWLINE;
    print "</td>" . NEWLINE;
    # STATUS
    print "<td align='center'>" . NEWLINE;
    print "<select name='status'>" . NEWLINE;
    html_print_list_box_from_array(requirement_get_distinct_field($project_id, REQ_VERS_STATUS, $blank = true), $selected = $filter_status);
    print "</select>" . NEWLINE;
    print "</td>" . NEWLINE;
    # AREA COVERED
    print "<td align='center'>" . NEWLINE;
    print "<select name='area_covered'>" . NEWLINE;
    html_print_list_box_from_key_array(requirement_get_areas($project_id, $blank = true), $selected = $filter_area_covered);
    print "</select>" . NEWLINE;
    print "</td>" . NEWLINE;
    if (!is_null($filter_per_page)) {
        # PER PAGE
        print "<td align='center'>" . NEWLINE;
        print "<input type='text' size='3' maxlength='3' name='per_page' value='{$filter_per_page}'>" . NEWLINE;
        print "</td>" . NEWLINE;
    }
    print "</tr>";
    # TITLES FOR HEADER DIALOG - second row
    print "<tr>";
    print "<td class=form-header-c>" . lang_get('functionality') . "</td>" . NEWLINE;
    print "<td class=form-header-c>" . lang_get('req_assign_release') . "</td>" . NEWLINE;
    print "<td class=form-header-c>" . lang_get('req_priority') . "</td>" . NEWLINE;
    print "<td class=form-header-c>" . lang_get('search') . "</td>" . NEWLINE;
    /*
    if( !is_null($filter_show_versions) ) {
    		# SHOW VERSIONS
    		print"<td class='left' rowspan=4>". NEWLINE;
    		print"<input id=all_versions type='radio' name='show_versions' value='all' ".($filter_show_versions=="all"?"checked":"").">";
    		print"<label for=all_versions>".lang_get("all_versions")."</label><br>". NEWLINE;
    	
    		print"<input id=latest_version type='radio' name='show_versions' value='latest' ".($filter_show_versions=="latest"?"checked":"").">";
    		print"<label for=latest_version>".lang_get("latest_version")."</label>". NEWLINE;
    		print"</td>". NEWLINE;
    	
    		//print"<td>&nbsp;</td>". NEWLINE;
    	
    }
    */
    print "</tr>";
    # FUNCTIONALITY
    print "<tr>";
    $functions = requirement_get_functionality($project_id);
    $functions[""] = "";
    print "<td align='center'>" . NEWLINE;
    print "<select name='functionality'>" . NEWLINE;
    html_print_list_box_from_key_array($functions, $selected = $filter_functionality);
    print "</select>" . NEWLINE;
    print "</td>" . NEWLINE;
    # ASSIGNED TO RELEASE
    print "<td align='center'>" . NEWLINE;
    print "<select name='assign_release'>" . NEWLINE;
    $rows_releases = requirement_get_all_assoc_releases($project_id, $blank = true);
    html_print_list_box_from_key_array($rows_releases, $selected = $filter_assign_release);
    print "</select>" . NEWLINE;
    print "</td>" . NEWLINE;
    # PRIORITY
    print "<td align='center'>" . NEWLINE;
    print "<select name='priority'>" . NEWLINE;
    $rows_priority = requirement_get_priority();
    html_print_list_box_from_array($rows_priority, $selected = $filter_priority);
    print "</select>" . NEWLINE;
    print "</td>" . NEWLINE;
    # SEARCH
    print "<td align='center'>" . NEWLINE;
    print "<input type='text' size='15' maxlength='25' name='requirement_search' value='" . $filter_search . "'>" . NEWLINE;
    print "</td>" . NEWLINE;
    print "</tr>";
    print "</table>" . NEWLINE;
    print "</td>" . NEWLINE;
    print "</tr>" . NEWLINE;
    print "</table>" . NEWLINE;
}
function requirement_email($project_id, $req_id, $recipients, $action, $discussion_id = null)
{
    $display_generic_info = true;
    $display_generic_url = true;
    # Link to the req detail page
    $generic_url = RTH_URL . "login.php?project_id={$project_id}&page=requirement_detail_page.php&req_id={$req_id}";
    $username = session_get_username();
    $project_name = session_get_project_name();
    $req_id = util_pad_id($req_id);
    $user_details = user_get_name_by_username($username);
    $first_name = $user_details[USER_FNAME];
    $last_name = $user_details[USER_LNAME];
    $rows_requirement = requirement_get_detail($project_id, $req_id);
    $row_requirement = $rows_requirement[0];
    $req_version_id = $row_requirement[REQ_VERS_UNIQUE_ID];
    $req_rec_or_file = $row_requirement[REQ_REC_FILE];
    $req_name = $row_requirement[REQ_FILENAME];
    $req_detail = $row_requirement[REQ_VERS_DETAIL];
    $req_reason_for_change = $row_requirement[REQ_VERS_REASON_CHANGE];
    $req_version_status = $row_requirement[REQ_VERS_STATUS];
    $req_area_covered = $row_requirement[REQ_AREA_COVERAGE];
    $req_doc_type = $row_requirement[REQ_DOC_TYPE_NAME];
    $req_version = $row_requirement[REQ_VERS_VERSION];
    # REQ FUNCTIONALITY
    $rows_functions = requirement_get_functionality($project_id, $req_id);
    $req_functionality = "";
    foreach ($rows_functions as $function) {
        $req_functionality .= $function . ", ";
    }
    $req_functionality = trim($req_functionality, ", ");
    # CREATE EMAIL SUBJECT AND MESSAGE
    switch ($action) {
        case "updated":
            $subject = "RTH: Requirement Updated in {$project_name}";
            $message = "Requirement {$req_name} has been updated by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "new_version":
            $subject = "RTH: Requirement Updated in {$project_name}";
            $message = "A new version of Requirement {$req_name} has been created by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "delete":
            $display_generic_info = false;
            $display_generic_url = false;
            $url = RTH_URL . "login.php?project_id={$project_id}&page=requirement_page.php";
            $subject = "RTH: Requirement Deleted in {$project_name}";
            $message = "Requirement {$req_name} has been deleted by {$first_name} {$last_name}\n" . NEWLINE;
            $message .= "Click the following link to view Requirements in {$project_name}:" . NEWLINE;
            $message .= "{$url}\n" . NEWLINE;
            break;
        case "lock":
            $subject = "RTH: Requirement Locked in {$project_name}";
            $message = "Requirement {$req_name} has been locked by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "unlock":
            $subject = "RTH: Requirement Unlocked in {$project_name}";
            $message = "Requirement {$req_name} has been unlocked by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "edit_children":
            # Get requirement children
            //$rows_children = requirement_get_children($req_id);
            $generic_url .= "&tab=1";
            $subject = "RTH: Requirement Updated in {$project_name}";
            $message = "The children of Requirement {$req_name} have been edited by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "edit_test_assoc":
            # Get related tests
            //$assoc_tests = requirement_get_test_relationships($req_id);
            $generic_url .= "&tab=2";
            $subject = "RTH: Requirement Updated in {$project_name}";
            $message = "The Tests related to Requirement {$req_name} have been edited by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "edit_release_assoc":
            # Get related releases
            //requirement_get_assoc_releases($s_req_version_id)
            $generic_url .= "&tab=4";
            $subject = "RTH: Requirement Updated in {$project_name}";
            $message = "The Releases related to Requirement {$req_name} have been edited by {$first_name} {$last_name}\n" . NEWLINE;
            break;
        case "new_discussion":
            # GET LAST DISCUSSION
            $rows_discussion = discussion_get($req_id);
            foreach ($rows_discussion as $row_discussion) {
                $discussion_subject = $row_discussion[DISC_SUBJECT];
            }
            $generic_url .= "&tab=3";
            $subject = "RTH: New Requirement Discussion in {$project_name}";
            $message = "A new discussion has been added to Requirement {$req_name} by {$first_name} {$last_name}\n" . NEWLINE;
            $message .= "" . lang_get("subject") . ": {$discussion_subject}\n" . NEWLINE;
            break;
        case "new_post":
            # GET DISCUSSION
            $row_discussion = discussion_get_detail($discussion_id);
            $discussion_subject = $row_discussion[DISC_SUBJECT];
            $url = RTH_URL . "login.php?project_id={$project_id}&page=requirement_discussion_page.php&discussion_id={$discussion_id}";
            $subject = "RTH: Discussion {$discussion_subject} in {$project_name}";
            $message = "A new post has been added to Discussion {$discussion_subject} by {$first_name} {$last_name}\n" . NEWLINE;
            $message .= "Click the following link to view the discussion:\n" . NEWLINE;
            $message .= "{$url}\n" . NEWLINE;
            break;
        case "close_discussion":
            $display_generic_info = false;
            $display_generic_url = false;
            # GET DISCUSSION
            $row_discussion = discussion_get_detail($discussion_id);
            $discussion_subject = $row_discussion[DISC_SUBJECT];
            $url = RTH_URL . "login.php?project_id={$project_id}&page=requirement_discussion_page.php&discussion_id={$discussion_id}";
            $subject = "RTH: Discussion {$discussion_subject} in {$project_name}";
            $message = "Discussion {$discussion_subject} has been closed by {$first_name} {$last_name}\n" . NEWLINE;
            $message .= "Click the following link to view the discussion:" . NEWLINE;
            $message .= "{$url}\n" . NEWLINE;
            break;
    }
    # Generic link to requirement detail page if the $url variable has been set
    if ($display_generic_url) {
        $message .= "Click the following link to view the Requirement:" . NEWLINE;
        $message .= "{$generic_url}\n" . NEWLINE;
    }
    if ($display_generic_info) {
        $message .= "" . lang_get("project_name") . ": {$project_name}" . NEWLINE;
        $message .= "" . lang_get("req_id") . ": {$req_id}" . NEWLINE;
        $message .= "" . lang_get("req_version") . ": {$req_version}" . NEWLINE;
        $message .= "" . lang_get("req_name") . ": {$req_name}" . NEWLINE;
        $message .= "" . lang_get("req_detail") . ": {$req_detail}" . NEWLINE;
        $message .= "" . lang_get("req_status") . ": {$req_version_status}" . NEWLINE;
        $message .= "" . lang_get("req_area_covered") . ": {$req_area_covered}" . NEWLINE;
        $message .= "" . lang_get("req_functionality") . ": {$req_functionality}" . NEWLINE;
        $message .= "" . lang_get("req_doc_type") . ": {$req_doc_type}\n" . NEWLINE;
    }
    # Convert any html entities stored in the DB back to characters.
    $message = util_unhtmlentities($message);
    email_send($recipients, $subject, $message);
}