/** * Seed the database with test issues. * * @param integer $p_project_ids The projects to use for test issues. * @param integer $p_issues_count The number of issues to seed. */ function createIssues($p_project_ids, $p_issues_count = MANTIS_SEEDER_ISSUES_COUNT) { $t_client = new MantisPhpClient('https://www.mantisbt.org/bugs/', '', ''); $t_issues_count = 0; $t_ids_tested = array(); while (true) { $t_issue_id = rand(19000, 20500); if (!isset($t_ids_tested[$t_issue_id])) { $t_ids_tested[$t_issue_id] = true; } try { $t_issue = $t_client->getIssue($t_issue_id); $t_issues_count++; } catch (SoapFault $e) { if (strstr($e->getMessage(), 'Issue does not exist')) { continue; } } $this->ensure_user_exists($t_issue->reporter); $t_handler_id = 0; if (isset($t_issue->handler)) { $this->ensure_user_exists($t_issue->handler); $t_handler_id = user_get_id_by_name($t_issue->handler->name); } $t_bug_data = new BugData(); $t_bug_data->project_id = $p_project_ids[rand(0, 1)]; $t_bug_data->reporter_id = user_get_id_by_name($t_issue->reporter->name); $t_bug_data->handler_id = $t_handler_id; $t_bug_data->view_state = $t_issue->view_state->id; $t_bug_data->category_id = 1; $t_bug_data->reproducibility = $t_issue->reproducibility->id; $t_bug_data->severity = $t_issue->severity->id; $t_bug_data->priority = $t_issue->priority->id; $t_bug_data->projection = $t_issue->projection->id; $t_bug_data->eta = $t_issue->eta->id; $t_bug_data->resolution = $t_issue->resolution->id; $t_bug_data->status = $t_issue->status->id; $t_bug_data->summary = $t_issue->summary; $t_bug_data->description = $t_issue->description; $t_bug_id = $t_bug_data->create(); if ($t_issues_count == $p_issues_count) { break; } } }
/** * Add an issue to the database. * * @param string $p_username The name of the user trying to add the issue. * @param string $p_password The password of the user. * @param stdClass $p_issue A IssueData structure containing information about the new issue. * @return integer The id of the created issue. */ function mc_issue_add($p_username, $p_password, stdClass $p_issue) { global $g_project_override; $t_user_id = mci_check_login($p_username, $p_password); if ($t_user_id === false) { return mci_soap_fault_login_failed(); } $p_issue = SoapObjectsFactory::unwrapObject($p_issue); $t_project = $p_issue['project']; $t_project_id = mci_get_project_id($t_project); $g_project_override = $t_project_id; # ensure that helper_get_current_project() calls resolve to this project id if (!mci_has_readwrite_access($t_user_id, $t_project_id)) { return mci_soap_fault_access_denied($t_user_id); } $t_handler_id = isset($p_issue['handler']) ? mci_get_user_id($p_issue['handler']) : 0; $t_priority_id = isset($p_issue['priority']) ? mci_get_priority_id($p_issue['priority']) : config_get('default_bug_priority'); $t_severity_id = isset($p_issue['severity']) ? mci_get_severity_id($p_issue['severity']) : config_get('default_bug_severity'); $t_status_id = isset($p_issue['status']) ? mci_get_status_id($p_issue['status']) : config_get('bug_submit_status'); $t_reproducibility_id = isset($p_issue['reproducibility']) ? mci_get_reproducibility_id($p_issue['reproducibility']) : config_get('default_bug_reproducibility'); $t_resolution_id = isset($p_issue['resolution']) ? mci_get_resolution_id($p_issue['resolution']) : config_get('default_bug_resolution'); $t_projection_id = isset($p_issue['projection']) ? mci_get_projection_id($p_issue['projection']) : config_get('default_bug_resolution'); $t_eta_id = isset($p_issue['eta']) ? mci_get_eta_id($p_issue['eta']) : config_get('default_bug_eta'); $t_view_state_id = isset($p_issue['view_state']) ? mci_get_view_state_id($p_issue['view_state']) : config_get('default_bug_view_status'); $t_summary = $p_issue['summary']; $t_description = $p_issue['description']; $t_notes = isset($p_issue['notes']) ? $p_issue['notes'] : array(); # TODO: #17777: Add test case for mc_issue_add() and mc_issue_note_add() reporter override if (isset($p_issue['reporter'])) { $t_reporter_id = mci_get_user_id($p_issue['reporter']); if ($t_reporter_id != $t_user_id) { # Make sure that active user has access level required to specify a different reporter. $t_specify_reporter_access_level = config_get('webservice_specify_reporter_on_add_access_level_threshold'); if (!access_has_project_level($t_specify_reporter_access_level, $t_project_id, $t_user_id)) { return mci_soap_fault_access_denied($t_user_id, 'Active user does not have access level required to specify a different issue reporter'); } } } else { $t_reporter_id = $t_user_id; } if ($t_project_id == 0 || !project_exists($t_project_id)) { if ($t_project_id == 0) { return SoapObjectsFactory::newSoapFault('Client', "Project '" . $t_project->name . "' does not exist."); } else { return SoapObjectsFactory::newSoapFault('Client', "Project with id '" . $t_project_id . "' does not exist."); } } if (!access_has_project_level(config_get('report_bug_threshold'), $t_project_id, $t_user_id)) { return mci_soap_fault_access_denied('User \'' . $t_user_id . '\' does not have access right to report issues'); } $t_access_check_result = mci_issue_handler_access_check($t_user_id, $t_project_id, 0, $t_handler_id); if ($t_access_check_result !== true) { return $t_access_check_result; } $t_category = isset($p_issue['category']) ? $p_issue['category'] : null; $t_category_id = translate_category_name_to_id($t_category, $t_project_id); if ($t_category_id == 0 && !config_get('allow_no_category')) { if (!isset($p_issue['category']) || is_blank($p_issue['category'])) { return SoapObjectsFactory::newSoapFault('Client', 'Category field must be supplied.'); } else { return SoapObjectsFactory::newSoapFault('Client', 'Category \'' . $p_issue['category'] . '\' not found for project \'' . $t_project_id . '\'.'); } } if (isset($p_issue['version']) && !is_blank($p_issue['version']) && !version_get_id($p_issue['version'], $t_project_id)) { $t_version = $p_issue['version']; $t_error_when_version_not_found = config_get('webservice_error_when_version_not_found'); if ($t_error_when_version_not_found == ON) { $t_project_name = project_get_name($t_project_id); return SoapObjectsFactory::newSoapFault('Client', 'Version \'' . $t_version . '\' does not exist in project \'' . $t_project_name . '\'.'); } else { $t_version_when_not_found = config_get('webservice_version_when_not_found'); $t_version = $t_version_when_not_found; } } if (is_blank($t_summary)) { return SoapObjectsFactory::newSoapFault('Client', 'Mandatory field \'summary\' is missing.'); } if (is_blank($t_description)) { return SoapObjectsFactory::newSoapFault('Client', 'Mandatory field \'description\' is missing.'); } $t_bug_data = new BugData(); $t_bug_data->profile_id = 0; $t_bug_data->project_id = $t_project_id; $t_bug_data->reporter_id = $t_reporter_id; $t_bug_data->handler_id = $t_handler_id; $t_bug_data->priority = $t_priority_id; $t_bug_data->severity = $t_severity_id; $t_bug_data->reproducibility = $t_reproducibility_id; $t_bug_data->status = $t_status_id; $t_bug_data->resolution = $t_resolution_id; $t_bug_data->projection = $t_projection_id; $t_bug_data->category_id = $t_category_id; $t_bug_data->date_submitted = isset($p_issue['date_submitted']) ? $p_issue['date_submitted'] : ''; $t_bug_data->last_updated = isset($p_issue['last_updated']) ? $p_issue['last_updated'] : ''; $t_bug_data->eta = $t_eta_id; $t_bug_data->profile_id = isset($p_issue['profile_id']) ? $p_issue['profile_id'] : 0; $t_bug_data->os = isset($p_issue['os']) ? $p_issue['os'] : ''; $t_bug_data->os_build = isset($p_issue['os_build']) ? $p_issue['os_build'] : ''; $t_bug_data->platform = isset($p_issue['platform']) ? $p_issue['platform'] : ''; $t_bug_data->version = isset($p_issue['version']) ? $p_issue['version'] : ''; $t_bug_data->fixed_in_version = isset($p_issue['fixed_in_version']) ? $p_issue['fixed_in_version'] : ''; $t_bug_data->build = isset($p_issue['build']) ? $p_issue['build'] : ''; $t_bug_data->view_state = $t_view_state_id; $t_bug_data->summary = $t_summary; $t_bug_data->sponsorship_total = isset($p_issue['sponsorship_total']) ? $p_issue['sponsorship_total'] : 0; if (isset($p_issue['sticky']) && access_has_project_level(config_get('set_bug_sticky_threshold', null, null, $t_project_id), $t_project_id)) { $t_bug_data->sticky = $p_issue['sticky']; } if (isset($p_issue['due_date']) && access_has_global_level(config_get('due_date_update_threshold'))) { $t_bug_data->due_date = SoapObjectsFactory::parseDateTimeString($p_issue['due_date']); } else { $t_bug_data->due_date = date_get_null(); } if (access_has_project_level(config_get('roadmap_update_threshold'), $t_bug_data->project_id, $t_user_id)) { $t_bug_data->target_version = isset($p_issue['target_version']) ? $p_issue['target_version'] : ''; } # omitted: # var $bug_text_id # $t_bug_data->profile_id; # extended info $t_bug_data->description = $t_description; $t_bug_data->steps_to_reproduce = isset($p_issue['steps_to_reproduce']) ? $p_issue['steps_to_reproduce'] : ''; $t_bug_data->additional_information = isset($p_issue['additional_information']) ? $p_issue['additional_information'] : ''; # submit the issue $t_issue_id = $t_bug_data->create(); log_event(LOG_WEBSERVICE, 'created new issue id \'' . $t_issue_id . '\''); $t_set_custom_field_error = mci_issue_set_custom_fields($t_issue_id, $p_issue['custom_fields'], false); if ($t_set_custom_field_error != null) { return $t_set_custom_field_error; } if (isset($p_issue['monitors'])) { mci_issue_set_monitors($t_issue_id, $t_user_id, $p_issue['monitors']); } if (isset($t_notes) && is_array($t_notes)) { foreach ($t_notes as $t_note) { $t_note = SoapObjectsFactory::unwrapObject($t_note); if (isset($t_note['view_state'])) { $t_view_state = $t_note['view_state']; } else { $t_view_state = config_get('default_bugnote_view_status'); } $t_note_type = isset($t_note['note_type']) ? (int) $t_note['note_type'] : BUGNOTE; $t_note_attr = isset($t_note['note_type']) ? $t_note['note_attr'] : ''; $t_view_state_id = mci_get_enum_id_from_objectref('view_state', $t_view_state); $t_note_id = bugnote_add($t_issue_id, $t_note['text'], mci_get_time_tracking_from_note($t_issue_id, $t_note), $t_view_state_id == VS_PRIVATE, $t_note_type, $t_note_attr, $t_user_id, false); # don't send mail log_event(LOG_WEBSERVICE, 'bugnote id \'' . $t_note_id . '\' added to issue \'' . $t_issue_id . '\''); } } if (isset($p_issue['tags']) && is_array($p_issue['tags'])) { mci_tag_set_for_issue($t_issue_id, $p_issue['tags'], $t_user_id); } email_bug_added($t_issue_id); if ($t_bug_data->status != config_get('bug_submit_status')) { history_log_event($t_issue_id, 'status', config_get('bug_submit_status')); } if ($t_bug_data->resolution != config_get('default_bug_resolution')) { history_log_event($t_issue_id, 'resolution', config_get('default_bug_resolution')); } return $t_issue_id; }
function bug_row_to_object($p_row) { $t_bug_data = new BugData(); $t_bug_data->loadrow($p_row); return $t_bug_data; }
/** * Add an issue to the database. * * @param string $p_username The name of the user trying to add the issue. * @param string $p_password The password of the user. * @param Array $p_issue A IssueData structure containing information about the new issue. * @return integer The id of the created issue. */ function mc_issue_add( $p_username, $p_password, $p_issue ) { global $g_project_override; $t_user_id = mci_check_login( $p_username, $p_password ); if( $t_user_id === false ) { return mci_soap_fault_login_failed(); } $t_project = $p_issue['project']; $t_project_id = mci_get_project_id( $t_project ); $g_project_override = $t_project_id; // ensure that helper_get_current_project() calls resolve to this project id if( !mci_has_readwrite_access( $t_user_id, $t_project_id ) ) { return mci_soap_fault_access_denied( $t_user_id ); } $t_handler_id = isset( $p_issue['handler'] ) ? mci_get_user_id( $p_issue['handler'] ) : 0; $t_priority_id = isset( $p_issue['priority'] ) ? mci_get_priority_id( $p_issue['priority'] ) : config_get( 'default_bug_priority' ); $t_severity_id = isset( $p_issue['severity'] ) ? mci_get_severity_id( $p_issue['severity'] ) : config_get( 'default_bug_severity' ); $t_status_id = isset( $p_issue['status'] ) ? mci_get_status_id( $p_issue['status'] ) : config_get( 'bug_submit_status' ); $t_reproducibility_id = isset( $p_issue['reproducibility'] ) ? mci_get_reproducibility_id( $p_issue['reproducibility'] ) : config_get( 'default_bug_reproducibility' ); $t_resolution_id = isset( $p_issue['resolution'] ) ? mci_get_resolution_id( $p_issue['resolution'] ) : config_get('default_bug_resolution'); $t_projection_id = isset( $p_issue['projection'] ) ? mci_get_projection_id( $p_issue['projection'] ) : config_get('default_bug_resolution'); $t_eta_id = isset( $p_issue['eta'] ) ? mci_get_eta_id( $p_issue['eta'] ) : config_get('default_bug_eta'); $t_view_state_id = isset( $p_issue['view_state'] ) ? mci_get_view_state_id( $p_issue['view_state'] ) : config_get( 'default_bug_view_status' ); $t_reporter_id = isset( $p_issue['reporter'] ) ? mci_get_user_id( $p_issue['reporter'] ) : 0; $t_summary = $p_issue['summary']; $t_description = $p_issue['description']; $t_notes = isset( $p_issue['notes'] ) ? $p_issue['notes'] : array(); if( $t_reporter_id == 0 ) { $t_reporter_id = $t_user_id; } else { if( $t_reporter_id != $t_user_id ) { # Make sure that active user has access level required to specify a different reporter. $t_specify_reporter_access_level = config_get( 'mc_specify_reporter_on_add_access_level_threshold' ); if( !access_has_project_level( $t_specify_reporter_access_level, $t_project_id, $t_user_id ) ) { return mci_soap_fault_access_denied( $t_user_id, "Active user does not have access level required to specify a different issue reporter" ); } } } if(( $t_project_id == 0 ) || !project_exists( $t_project_id ) ) { if( $t_project_id == 0 ) { return new soap_fault( 'Client', '', "Project '" . $t_project['name'] . "' does not exist." ); } else { return new soap_fault( 'Client', '', "Project with id '" . $t_project_id . "' does not exist." ); } } if( !access_has_project_level( config_get( 'report_bug_threshold' ), $t_project_id, $t_user_id ) ) { return mci_soap_fault_access_denied( "User '$t_user_id' does not have access right to report issues" ); } #if ( !access_has_project_level( config_get( 'report_bug_threshold' ), $t_project_id ) || # !access_has_project_level( config_get( 'report_bug_threshold' ), $t_project_id, $v_reporter ) ) { # return new soap_fault( 'Client', '', "User does not have access right to report issues." ); #} if(( $t_handler_id != 0 ) && !user_exists( $t_handler_id ) ) { return new soap_fault( 'Client', '', "User '$t_handler_id' does not exist." ); } $t_category = isset ( $p_issue['category'] ) ? $p_issue['category'] : null; $t_category_id = translate_category_name_to_id( $t_category, $t_project_id ); if ( $t_category_id == 0 && !config_get( 'allow_no_category' ) ) { if ( !isset( $p_issue['category'] ) || is_blank( $p_issue['category'] ) ) { return new soap_fault( 'Client', '', "Category field must be supplied." ); } else { return new soap_fault( 'Client', '', "Category '" . $p_issue['category'] . "' not found for project '$t_project_id'." ); } } if ( isset( $p_issue['version'] ) && !is_blank( $p_issue['version'] ) && !version_get_id( $p_issue['version'], $t_project_id ) ) { $t_version = $p_issue['version']; $t_error_when_version_not_found = config_get( 'mc_error_when_version_not_found' ); if( $t_error_when_version_not_found == ON ) { $t_project_name = project_get_name( $t_project_id ); return new soap_fault( 'Client', '', "Version '$t_version' does not exist in project '$t_project_name'." ); } else { $t_version_when_not_found = config_get( 'mc_version_when_not_found' ); $t_version = $t_version_when_not_found; } } if ( is_blank( $t_summary ) ) { return new soap_fault( 'Client', '', "Mandatory field 'summary' is missing." ); } if ( is_blank( $t_description ) ) { return new soap_fault( 'Client', '', "Mandatory field 'description' is missing." ); } $t_bug_data = new BugData; $t_bug_data->profile_id = 0; $t_bug_data->project_id = $t_project_id; $t_bug_data->reporter_id = $t_reporter_id; $t_bug_data->handler_id = $t_handler_id; $t_bug_data->priority = $t_priority_id; $t_bug_data->severity = $t_severity_id; $t_bug_data->reproducibility = $t_reproducibility_id; $t_bug_data->status = $t_status_id; $t_bug_data->resolution = $t_resolution_id; $t_bug_data->projection = $t_projection_id; $t_bug_data->category_id = $t_category_id; $t_bug_data->date_submitted = isset( $p_issue['date_submitted'] ) ? $p_issue['date_submitted'] : ''; $t_bug_data->last_updated = isset( $p_issue['last_updated'] ) ? $p_issue['last_updated'] : ''; $t_bug_data->eta = $t_eta_id; $t_bug_data->os = isset( $p_issue['os'] ) ? $p_issue['os'] : ''; $t_bug_data->os_build = isset( $p_issue['os_build'] ) ? $p_issue['os_build'] : ''; $t_bug_data->platform = isset( $p_issue['platform'] ) ? $p_issue['platform'] : ''; $t_bug_data->version = isset( $p_issue['version'] ) ? $p_issue['version'] : ''; $t_bug_data->fixed_in_version = isset( $p_issue['fixed_in_version'] ) ? $p_issue['fixed_in_version'] : ''; $t_bug_data->build = isset( $p_issue['build'] ) ? $p_issue['build'] : ''; $t_bug_data->view_state = $t_view_state_id; $t_bug_data->summary = $t_summary; $t_bug_data->sponsorship_total = isset( $p_issue['sponsorship_total'] ) ? $p_issue['sponsorship_total'] : 0; if ( isset( $p_issue['due_date'] ) && access_has_global_level( config_get( 'due_date_update_threshold' ) ) ) { $t_bug_data->due_date = mci_iso8601_to_timestamp( $p_issue['due_date'] ); } else { $t_bug_data->due_date = date_get_null(); } if( access_has_project_level( config_get( 'roadmap_update_threshold' ), $t_bug_data->project_id, $t_user_id ) ) { $t_bug_data->target_version = isset( $p_issue['target_version'] ) ? $p_issue['target_version'] : ''; } # omitted: # var $bug_text_id # $t_bug_data->profile_id; # extended info $t_bug_data->description = $t_description; $t_bug_data->steps_to_reproduce = isset( $p_issue['steps_to_reproduce'] ) ? $p_issue['steps_to_reproduce'] : ''; $t_bug_data->additional_information = isset( $p_issue['additional_information'] ) ? $p_issue['additional_information'] : ''; # submit the issue $t_issue_id = $t_bug_data->create(); mci_issue_set_custom_fields( $t_issue_id, $p_issue['custom_fields'], false ); if ( isset ( $p_issue['monitors'] ) ) mci_issue_set_monitors( $t_issue_id , $t_user_id, $p_issue['monitors'] ); if( isset( $t_notes ) && is_array( $t_notes ) ) { foreach( $t_notes as $t_note ) { if( isset( $t_note['view_state'] ) ) { $t_view_state = $t_note['view_state']; } else { $t_view_state = config_get( 'default_bugnote_view_status' ); } $note_type = isset ( $t_note['note_type'] ) ? (int) $t_note['note_type'] : BUGNOTE; $note_attr = isset ( $t_note['note_type'] ) ? $t_note['note_attr'] : ''; $t_view_state_id = mci_get_enum_id_from_objectref( 'view_state', $t_view_state ); bugnote_add( $t_issue_id, $t_note['text'], mci_get_time_tracking_from_note( $t_issue_id, $t_note ), $t_view_state_id == VS_PRIVATE, $note_type, $note_attr, $t_user_id, FALSE ); } } email_new_bug( $t_issue_id ); return $t_issue_id; }
/** * Update Issue in database * * Created By KGB * @param string $p_username The name of the user trying to add the issue. * @param string $p_password The password of the user. * @param Array $p_issue A IssueData structure containing information about the new issue. * @return integer The id of the created issue. */ function mc_issue_update($p_username, $p_password, $p_issue_id, $p_issue) { $t_user_id = mci_check_login($p_username, $p_password); if ($t_user_id === false) { return mci_soap_fault_login_failed(); } if (!bug_exists($p_issue_id)) { return new soap_fault('Client', '', "Issue '{$p_issue_id}' does not exist."); } $t_project_id = bug_get_field($p_issue_id, 'project_id'); if (!mci_has_readwrite_access($t_user_id, $t_project_id)) { return mci_soap_fault_access_denied($t_user_id); } $t_project_id = mci_get_project_id($p_issue['project']); $t_handler_id = isset($p_issue['handler']) ? mci_get_user_id($p_issue['handler']) : 0; $t_priority_id = isset($p_issue['priority']) ? mci_get_priority_id($p_issue['priority']) : config_get('default_bug_priority'); $t_severity_id = isset($p_issue['severity']) ? mci_get_severity_id($p_issue['severity']) : config_get('default_bug_severity'); $t_status_id = isset($p_issue['status']) ? mci_get_status_id($p_issue['status']) : config_get('bug_submit_status'); $t_reproducibility_id = isset($p_issue['reproducibility']) ? mci_get_reproducibility_id($p_issue['reproducibility']) : config_get('default_bug_reproducibility'); $t_resolution_id = isset($p_issue['resolution']) ? mci_get_resolution_id($p_issue['resolution']) : config_get('default_bug_resolution'); $t_projection_id = isset($p_issue['projection']) ? mci_get_projection_id($p_issue['projection']) : config_get('default_bug_resolution'); $t_eta_id = isset($p_issue['eta']) ? mci_get_eta_id($p_issue['eta']) : config_get('default_bug_eta'); $t_view_state_id = isset($p_issue['view_state']) ? mci_get_view_state_id($p_issue['view_state']) : config_get('default_bug_view_status'); $t_reporter_id = isset($p_issue['reporter']) ? mci_get_user_id($p_issue['reporter']) : 0; $t_project = $p_issue['project']; $t_summary = isset($p_issue['summary']) ? $p_issue['summary'] : ''; $t_description = isset($p_issue['description']) ? $p_issue['description'] : ''; $t_additional_information = isset($p_issue['additional_information']) ? $p_issue['additional_information'] : ''; $t_steps_to_reproduce = isset($p_issue['steps_to_reproduce']) ? $p_issue['steps_to_reproduce'] : ''; $t_build = isset($p_issue['build']) ? $p_issue['build'] : ''; $t_platform = isset($p_issue['platform']) ? $p_issue['platform'] : ''; $t_os = isset($p_issue['os']) ? $p_issue['os'] : ''; $t_os_build = isset($p_issue['os_build']) ? $p_issue['os_build'] : ''; $t_sponsorship_total = isset($p_issue['sponsorship_total']) ? $p_issue['sponsorship_total'] : 0; if ($t_reporter_id == 0) { $t_reporter_id = $t_user_id; } if ($t_project_id == 0 || !project_exists($t_project_id)) { if ($t_project_id == 0) { return new soap_fault('Client', '', "Project '" . $t_project['name'] . "' does not exist."); } return new soap_fault('Client', '', "Project '{$t_project_id}' does not exist."); } if (!access_has_bug_level(config_get('update_bug_threshold'), $p_issue_id, $t_user_id)) { return mci_soap_fault_access_denied($t_user_id, "Not enough rights to update issues"); } if ($t_handler_id != 0 && !user_exists($t_handler_id)) { return new soap_fault('Client', '', "User '{$t_handler_id}' does not exist."); } $t_category = isset($p_issue['category']) ? $p_issue['category'] : null; $t_category_id = translate_category_name_to_id($t_category, $t_project_id); if ($t_category_id == 0 && !config_get('allow_no_category')) { if (isset($p_issue['category']) && !is_blank($p_issue['category'])) { return new soap_fault('Client', '', "Category field must be supplied."); } else { return new soap_fault('Client', '', "Category '" . $p_issue['category'] . "' not found for project '{$t_project_name}'."); } } if (isset($p_issue['version']) && !is_blank($p_issue['version']) && !version_get_id($p_issue['version'], $t_project_id)) { $t_error_when_version_not_found = config_get('mc_error_when_version_not_found'); if ($t_error_when_version_not_found == ON) { $t_project_name = project_get_name($t_project_id); return new soap_fault('Client', '', "Version '" . $p_issue['version'] . "' does not exist in project '{$t_project_name}'."); } else { $t_version_when_not_found = config_get('mc_version_when_not_found'); $p_issue['version'] = $t_version_when_not_found; } } if (is_blank($t_summary)) { return new soap_fault('Client', '', "Mandatory field 'summary' is missing."); } if (is_blank($t_description)) { return new soap_fault('Client', '', "Mandatory field 'description' is missing."); } if ($t_priority_id == 0) { $t_priority_id = config_get('default_bug_priority'); } if ($t_severity_id == 0) { $t_severity_id = config_get('default_bug_severity'); } if ($t_view_state_id == 0) { $t_view_state_id = config_get('default_bug_view_status'); } if ($t_reproducibility_id == 0) { $t_reproducibility_id = config_get('default_bug_reproducibility'); } $t_bug_data = new BugData(); $t_bug_data->id = $p_issue_id; $t_bug_data->project_id = $t_project_id; $t_bug_data->reporter_id = $t_reporter_id; $t_bug_data->handler_id = $t_handler_id; $t_bug_data->priority = $t_priority_id; $t_bug_data->severity = $t_severity_id; $t_bug_data->reproducibility = $t_reproducibility_id; $t_bug_data->status = $t_status_id; $t_bug_data->resolution = $t_resolution_id; $t_bug_data->projection = $t_projection_id; $t_bug_data->category_id = $t_category_id; $t_bug_data->date_submitted = isset($v_date_submitted) ? $v_date_submitted : ''; $t_bug_data->last_updated = isset($v_last_updated) ? $v_last_updated : ''; $t_bug_data->eta = $t_eta_id; $t_bug_data->os = $t_os; $t_bug_data->os_build = $t_os_build; $t_bug_data->platform = $t_platform; $t_bug_data->version = isset($p_issue['version']) ? $p_issue['version'] : ''; $t_bug_data->fixed_in_version = isset($p_issue['fixed_in_version']) ? $p_issue['fixed_in_version'] : ''; $t_bug_data->build = $t_build; $t_bug_data->view_state = $t_view_state_id; $t_bug_data->summary = $t_summary; $t_bug_data->sponsorship_total = $t_sponsorship_total; if (isset($p_issue['due_date']) && access_has_global_level(config_get('due_date_update_threshold'))) { $t_bug_data->due_date = mci_iso8601_to_timestamp($p_issue['due_date']); } else { $t_bug_data->due_date = date_get_null(); } if (access_has_project_level(config_get('roadmap_update_threshold'), $t_bug_data->project_id, $t_user_id)) { $t_bug_data->target_version = isset($p_issue['target_version']) ? $p_issue['target_version'] : ''; } # omitted: # var $bug_text_id # $t_bug_data->profile_id; # extended info $t_bug_data->description = $t_description; $t_bug_data->steps_to_reproduce = isset($t_steps_to_reproduce) ? $t_steps_to_reproduce : ''; $t_bug_data->additional_information = isset($t_additional_information) ? $t_additional_information : ''; # submit the issue $t_is_success = $t_bug_data->update(true, true); mci_issue_set_custom_fields($p_issue_id, $p_issue['custom_fields'], true); if (isset($p_issue['notes']) && is_array($p_issue['notes'])) { foreach ($p_issue['notes'] as $t_note) { if (isset($t_note['view_state'])) { $t_view_state = $t_note['view_state']; } else { $t_view_state = config_get('default_bugnote_view_status'); } if (isset($t_note['id']) && (int) $t_note['id'] > 0) { $t_bugnote_id = (int) $t_note['id']; if (bugnote_exists($t_bugnote_id)) { bugnote_set_text($t_bugnote_id, $t_note['text']); bugnote_set_view_state($t_bugnote_id, $t_view_state_id == VS_PRIVATE); bugnote_date_update($t_bugnote_id); if (isset($t_note['time_tracking'])) { bugnote_set_time_tracking($t_bugnote_id, mci_get_time_tracking_from_note($p_issue_id, $t_note)); } } } else { $t_view_state_id = mci_get_enum_id_from_objectref('view_state', $t_view_state); bugnote_add($p_issue_id, $t_note['text'], mci_get_time_tracking_from_note($p_issue_id, $t_note), $t_view_state_id == VS_PRIVATE, BUGNOTE, '', $t_user_id, FALSE); } } } return $t_is_success; }