/** * Get all projects accessible by the given user. * * @param string $p_username The name of the user trying to access the project list. * @param string $p_password The password of the user. * @return Array suitable to be converted into a ProjectDataArray */ function mc_projects_get_user_accessible($p_username, $p_password) { $t_user_id = mci_check_login($p_username, $p_password); if ($t_user_id === false) { return mci_soap_fault_login_failed(); } if (!mci_has_readonly_access($t_user_id)) { return mci_soap_fault_access_denied($t_user_id); } $t_lang = mci_get_user_lang($t_user_id); $t_result = array(); foreach (user_get_accessible_projects($t_user_id) as $t_project_id) { $t_project_row = project_cache_row($t_project_id); $t_project = array(); $t_project['id'] = $t_project_id; $t_project['name'] = $t_project_row['name']; $t_project['status'] = mci_enum_get_array_by_id($t_project_row['status'], 'project_status', $t_lang); $t_project['enabled'] = $t_project_row['enabled']; $t_project['view_state'] = mci_enum_get_array_by_id($t_project_row['view_state'], 'project_view_state', $t_lang); $t_project['access_min'] = mci_enum_get_array_by_id($t_project_row['access_min'], 'access_levels', $t_lang); $t_project['file_path'] = array_key_exists('file_path', $t_project_row) ? $t_project_row['file_path'] : ""; $t_project['description'] = array_key_exists('description', $t_project_row) ? $t_project_row['description'] : ""; $t_project['subprojects'] = mci_user_get_accessible_subprojects($t_user_id, $t_project_id, $t_lang); $t_result[] = $t_project; } return $t_result; }
/** * Gets the sub-projects that are accessible to the specified user / project. * @param integer $p_user_id User id. * @param integer $p_parent_project_id Parent Project id. * @param string $p_lang Language string. * @return array */ function mci_user_get_accessible_subprojects($p_user_id, $p_parent_project_id, $p_lang = null) { if ($p_lang === null) { $t_lang = mci_get_user_lang($p_user_id); } else { $t_lang = $p_lang; } $t_result = array(); foreach (user_get_accessible_subprojects($p_user_id, $p_parent_project_id) as $t_subproject_id) { $t_subproject_row = project_cache_row($t_subproject_id); $t_subproject = array(); $t_subproject['id'] = $t_subproject_id; $t_subproject['name'] = $t_subproject_row['name']; $t_subproject['status'] = mci_enum_get_array_by_id($t_subproject_row['status'], 'project_status', $t_lang); $t_subproject['enabled'] = $t_subproject_row['enabled']; $t_subproject['view_state'] = mci_enum_get_array_by_id($t_subproject_row['view_state'], 'project_view_state', $t_lang); $t_subproject['access_min'] = mci_enum_get_array_by_id($t_subproject_row['access_min'], 'access_levels', $t_lang); $t_subproject['file_path'] = array_key_exists('file_path', $t_subproject_row) ? $t_subproject_row['file_path'] : ''; $t_subproject['description'] = array_key_exists('description', $t_subproject_row) ? $t_subproject_row['description'] : ''; $t_subproject['subprojects'] = mci_user_get_accessible_subprojects($p_user_id, $t_subproject_id, $t_lang); $t_result[] = $t_subproject; } return $t_result; }
/** * Get all issues matching the specified filter. * * @param string $p_username The name of the user trying to access the filters. * @param string $p_password The password of the user. * @param integer $p_filter_id The id of the filter to apply. * @param integer $p_page_number Start with the given page number (zero-based) * @param integer $p_per_page Number of issues to display per page * @return Array that represents an IssueDataArray structure */ function mc_filter_get_issues($p_username, $p_password, $p_project_id, $p_filter_id, $p_page_number, $p_per_page) { $t_user_id = mci_check_login($p_username, $p_password); $t_lang = mci_get_user_lang($t_user_id); if ($t_user_id === false) { return new soap_fault('Client', '', 'Access Denied'); } if (!mci_has_readonly_access($t_user_id, $p_project_id)) { return new soap_fault('Client', '', 'Access Denied'); } $t_page_count = 0; $t_bug_count = 0; $t_filter = filter_db_get_filter($p_filter_id); $t_filter_detail = explode('#', $t_filter, 2); if (!isset($t_filter_detail[1])) { return new soap_fault('Server', '', 'Invalid Filter'); } $t_filter = unserialize($t_filter_detail[1]); $t_filter = filter_ensure_valid_filter($t_filter); $t_result = array(); $t_rows = filter_get_bug_rows($p_page_number, $p_per_page, $t_page_count, $t_bug_count, $t_filter, $p_project_id); foreach ($t_rows as $t_issue_data) { $t_id = $t_issue_data['id']; $t_issue = array(); $t_issue['id'] = $t_id; $t_issue['view_state'] = mci_enum_get_array_by_id($t_issue_data['view_state'], 'view_state', $t_lang); $t_issue['last_updated'] = timestamp_to_iso8601($t_issue_data['last_updated']); $t_issue['project'] = mci_project_as_array_by_id($t_issue_data['project_id']); $t_issue['category'] = mci_null_if_empty($t_issue_data['category']); $t_issue['priority'] = mci_enum_get_array_by_id($t_issue_data['priority'], 'priority', $t_lang); $t_issue['severity'] = mci_enum_get_array_by_id($t_issue_data['severity'], 'severity', $t_lang); $t_issue['status'] = mci_enum_get_array_by_id($t_issue_data['status'], 'status', $t_lang); $t_issue['reporter'] = mci_account_get_array_by_id($t_issue_data['reporter_id']); $t_issue['summary'] = $t_issue_data['summary']; $t_issue['version'] = mci_null_if_empty($t_issue_data['version']); $t_issue['build'] = mci_null_if_empty($t_issue_data['build']); $t_issue['platform'] = mci_null_if_empty($t_issue_data['platform']); $t_issue['os'] = mci_null_if_empty($t_issue_data['os']); $t_issue['os_build'] = mci_null_if_empty($t_issue_data['os_build']); $t_issue['reproducibility'] = mci_enum_get_array_by_id($t_issue_data['reproducibility'], 'reproducibility', $t_lang); $t_issue['date_submitted'] = timestamp_to_iso8601($t_issue_data['date_submitted']); $t_issue['sponsorship_total'] = $t_issue_data['sponsorship_total']; if (!empty($t_issue_data['handler_id'])) { $t_issue['handler'] = mci_account_get_array_by_id($t_issue_data['handler_id']); } $t_issue['projection'] = mci_enum_get_array_by_id($t_issue_data['projection'], 'projection', $t_lang); $t_issue['eta'] = mci_enum_get_array_by_id($t_issue_data['eta'], 'eta', $t_lang); $t_issue['resolution'] = mci_enum_get_array_by_id($t_issue_data['resolution'], 'resolution', $t_lang); $t_issue['fixed_in_version'] = mci_null_if_empty($t_issue_data['fixed_in_version']); $t_issue['description'] = bug_get_text_field($t_id, 'description'); $t_steps_to_reproduce = bug_get_text_field($t_id, 'steps_to_reproduce'); $t_issue['steps_to_reproduce'] = mci_null_if_empty($t_steps_to_reproduce); $t_additional_information = bug_get_text_field($t_id, 'additional_information'); $t_issue['additional_information'] = mci_null_if_empty($t_additional_information); $t_issue['attachments'] = mci_issue_get_attachments($t_issue_data['id']); $t_issue['relationships'] = mci_issue_get_relationships($t_issue_data['id'], $t_user_id); $t_issue['notes'] = mci_issue_get_notes($t_issue_data['id']); $t_issue['custom_fields'] = mci_issue_get_custom_fields($t_issue_data['id']); $t_result[] = $t_issue; } return $t_result; }
/** * Returns an array for SOAP encoding from a BugData object * * @param BugData $p_issue_data A BugData object to process. * @param integer $p_user_id A valid user identifier. * @param string $p_lang A valid language string. * @return array The issue as an array */ function mci_issue_data_as_array(BugData $p_issue_data, $p_user_id, $p_lang) { $t_id = $p_issue_data->id; $t_issue = array(); $t_issue['id'] = $t_id; $t_issue['view_state'] = mci_enum_get_array_by_id($p_issue_data->view_state, 'view_state', $p_lang); $t_issue['last_updated'] = SoapObjectsFactory::newDateTimeVar($p_issue_data->last_updated); $t_issue['project'] = mci_project_as_array_by_id($p_issue_data->project_id); $t_issue['category'] = mci_get_category($p_issue_data->category_id); $t_issue['priority'] = mci_enum_get_array_by_id($p_issue_data->priority, 'priority', $p_lang); $t_issue['severity'] = mci_enum_get_array_by_id($p_issue_data->severity, 'severity', $p_lang); $t_issue['status'] = mci_enum_get_array_by_id($p_issue_data->status, 'status', $p_lang); $t_issue['reporter'] = mci_account_get_array_by_id($p_issue_data->reporter_id); $t_issue['summary'] = mci_sanitize_xml_string($p_issue_data->summary); $t_issue['version'] = mci_null_if_empty($p_issue_data->version); $t_issue['build'] = mci_null_if_empty($p_issue_data->build); $t_issue['profile_id'] = mci_null_if_empty($p_issue_data->profile_id); $t_issue['platform'] = mci_null_if_empty($p_issue_data->platform); $t_issue['os'] = mci_null_if_empty($p_issue_data->os); $t_issue['os_build'] = mci_null_if_empty($p_issue_data->os_build); $t_issue['reproducibility'] = mci_enum_get_array_by_id($p_issue_data->reproducibility, 'reproducibility', $p_lang); $t_issue['date_submitted'] = SoapObjectsFactory::newDateTimeVar($p_issue_data->date_submitted); $t_issue['sticky'] = $p_issue_data->sticky; $t_issue['sponsorship_total'] = $p_issue_data->sponsorship_total; if (!empty($p_issue_data->handler_id)) { $t_issue['handler'] = mci_account_get_array_by_id($p_issue_data->handler_id); } $t_issue['projection'] = mci_enum_get_array_by_id($p_issue_data->projection, 'projection', $p_lang); $t_issue['eta'] = mci_enum_get_array_by_id($p_issue_data->eta, 'eta', $p_lang); $t_issue['resolution'] = mci_enum_get_array_by_id($p_issue_data->resolution, 'resolution', $p_lang); $t_issue['fixed_in_version'] = mci_null_if_empty($p_issue_data->fixed_in_version); $t_issue['target_version'] = mci_null_if_empty($p_issue_data->target_version); $t_issue['description'] = mci_sanitize_xml_string(bug_get_text_field($t_id, 'description')); $t_steps_to_reproduce = bug_get_text_field($t_id, 'steps_to_reproduce'); $t_issue['steps_to_reproduce'] = mci_null_if_empty(mci_sanitize_xml_string($t_steps_to_reproduce)); $t_additional_information = bug_get_text_field($t_id, 'additional_information'); $t_issue['additional_information'] = mci_null_if_empty(mci_sanitize_xml_string($t_additional_information)); $t_issue['due_date'] = SoapObjectsFactory::newDateTimeVar($p_issue_data->due_date); $t_issue['attachments'] = mci_issue_get_attachments($p_issue_data->id); $t_issue['relationships'] = mci_issue_get_relationships($p_issue_data->id, $p_user_id); $t_issue['notes'] = mci_issue_get_notes($p_issue_data->id); $t_issue['custom_fields'] = mci_issue_get_custom_fields($p_issue_data->id); $t_issue['tags'] = mci_issue_get_tags_for_bug_id($p_issue_data->id, $p_user_id); $t_issue['monitors'] = mci_account_get_array_by_ids(bug_get_monitors($p_issue_data->id)); return $t_issue; }
/** * Get all visible notes for a specific issue * * @param integer $p_issue_id The id of the issue to retrieve the notes for * @return Array that represents an IssueNoteData structure */ function mci_issue_get_notes($p_issue_id) { $t_user_id = auth_get_current_user_id(); $t_lang = mci_get_user_lang($t_user_id); $t_project_id = bug_get_field($p_issue_id, 'project_id'); $t_user_access_level = user_get_access_level($t_user_id, $t_project_id); $t_user_bugnote_order = 'ASC'; // always get the notes in ascending order for consistency to the calling application. $t_result = array(); foreach (bugnote_get_all_visible_bugnotes($p_issue_id, $t_user_access_level, $t_user_bugnote_order, 0) as $t_value) { $t_bugnote = array(); $t_bugnote['id'] = $t_value->id; $t_bugnote['reporter'] = mci_account_get_array_by_id($t_value->reporter_id); $t_bugnote['date_submitted'] = timestamp_to_iso8601($t_value->date_submitted); $t_bugnote['last_modified'] = timestamp_to_iso8601($t_value->last_modified); $t_bugnote['text'] = $t_value->note; $t_bugnote['view_state'] = mci_enum_get_array_by_id($t_value->view_state, 'view_state', $t_lang); $t_result[] = $t_bugnote; } return $t_result; }