function mci_tag_set_for_issue($p_issue_id, $p_tags, $p_user_id) { $t_tag_ids_to_attach = array(); $t_tag_ids_to_detach = array(); $t_submitted_tag_ids = array(); $t_attached_tags = tag_bug_get_attached($p_issue_id); $t_attached_tag_ids = array(); foreach ($t_attached_tags as $t_attached_tag) { $t_attached_tag_ids[] = $t_attached_tag['id']; } foreach ($p_tags as $t_tag) { $t_tag = SoapObjectsFactory::unwrapObject($t_tag); $t_submitted_tag_ids[] = $t_tag['id']; if (in_array($t_tag['id'], $t_attached_tag_ids)) { continue; } else { $t_tag_ids_to_attach[] = $t_tag['id']; } } foreach ($t_attached_tag_ids as $t_attached_tag_id) { if (in_array($t_attached_tag_id, $t_submitted_tag_ids)) { continue; } else { $t_tag_ids_to_detach[] = $t_attached_tag_id; } } foreach ($t_tag_ids_to_detach as $t_tag_id) { if (access_has_bug_level(config_get('tag_detach_threshold'), $p_issue_id, $p_user_id)) { tag_bug_detach($t_tag_id, $p_issue_id); } } foreach ($t_tag_ids_to_attach as $t_tag_id) { if (access_has_bug_level(config_get('tag_attach_threshold'), $p_issue_id, $p_user_id)) { tag_bug_attach($t_tag_id, $p_issue_id); } } }
/** * Get tags linked to a given bug id * @param integer $p_bug_id A bug identifier. * @param integer $p_user_id User accessing the information. * @return array */ function mci_issue_get_tags_for_bug_id($p_bug_id, $p_user_id) { if (!access_has_global_level(config_get('tag_view_threshold'), $p_user_id)) { return array(); } $t_tag_rows = tag_bug_get_attached($p_bug_id); $t_result = array(); foreach ($t_tag_rows as $t_tag_row) { $t_result[] = array('id' => $t_tag_row['id'], 'name' => $t_tag_row['name']); } return $t_result; }
/** * Display a list of attached tag hyperlinks separated by the configured hyperlinks. * @param Bug ID */ function tag_display_attached($p_bug_id) { $t_tag_rows = tag_bug_get_attached($p_bug_id); if (count($t_tag_rows) == 0) { echo lang_get('tag_none_attached'); } else { $i = 0; foreach ($t_tag_rows as $t_tag) { echo $i > 0 ? config_get('tag_separator') . ' ' : ''; tag_display_link($t_tag, $p_bug_id); $i++; } } return true; }
/** * Get all attached tags separated by the Tag Separator. * @param integer $p_bug_id The bug ID to display. * @return string tags separated by the configured Tag Separator */ function tag_bug_get_all($p_bug_id) { $t_tag_rows = tag_bug_get_attached($p_bug_id); $t_value = ''; $i = 0; foreach ($t_tag_rows as $t_tag) { $t_value .= $i > 0 ? config_get('tag_separator') . ' ' : ''; $t_value .= $t_tag['name']; $i++; } return $t_value; }
/** * Set tag(s) for a given issue id * @param integer $p_issue_id Issue id. * @param array $p_tags Array of tags. * @param integer $p_user_id User id. * @return void */ function mci_tag_set_for_issue($p_issue_id, array $p_tags, $p_user_id) { $t_tag_ids_to_attach = array(); $t_tag_ids_to_detach = array(); $t_submitted_tag_ids = array(); $t_attached_tags = tag_bug_get_attached($p_issue_id); $t_attached_tag_ids = array(); foreach ($t_attached_tags as $t_attached_tag) { $t_attached_tag_ids[] = $t_attached_tag['id']; } foreach ($p_tags as $t_tag) { $t_tag = SoapObjectsFactory::unwrapObject($t_tag); $t_submitted_tag_ids[] = $t_tag['id']; if (in_array($t_tag['id'], $t_attached_tag_ids)) { continue; } else { $t_tag_ids_to_attach[] = $t_tag['id']; } } foreach ($t_attached_tag_ids as $t_attached_tag_id) { if (in_array($t_attached_tag_id, $t_submitted_tag_ids)) { continue; } else { $t_tag_ids_to_detach[] = $t_attached_tag_id; } } foreach ($t_tag_ids_to_detach as $t_tag_id) { if (access_has_bug_level(config_get('tag_detach_threshold'), $p_issue_id, $p_user_id)) { log_event(LOG_WEBSERVICE, 'detaching tag id \'' . $t_tag_id . '\' from issue \'' . $p_issue_id . '\''); tag_bug_detach($t_tag_id, $p_issue_id); } } foreach ($t_tag_ids_to_attach as $t_tag_id) { if (access_has_bug_level(config_get('tag_attach_threshold'), $p_issue_id, $p_user_id)) { log_event(LOG_WEBSERVICE, 'attaching tag id \'' . $t_tag_id . '\' to issue \'' . $p_issue_id . '\''); tag_bug_attach($t_tag_id, $p_issue_id); } } }
/** * Build the bug raw data visible for specified user to be translated and sent by email to the user * (Filter the bug data according to user access level) * return array with bug data. See usage in email_format_bug_message(...) * @param integer $p_user_id A user identifier. * @param integer $p_bug_id A bug identifier. * @param string $p_message_id A message identifier. * @return array */ function email_build_visible_bug_data($p_user_id, $p_bug_id, $p_message_id) { # Override current user with user to construct bug data for. # This is to make sure that APIs that check against current user (e.g. relationship) work correctly. $t_current_user_id = current_user_set($p_user_id); $t_project_id = bug_get_field($p_bug_id, 'project_id'); $t_user_access_level = user_get_access_level($p_user_id, $t_project_id); $t_user_bugnote_order = user_pref_get_pref($p_user_id, 'bugnote_order'); $t_user_bugnote_limit = user_pref_get_pref($p_user_id, 'email_bugnote_limit'); $t_row = bug_get_extended_row($p_bug_id); $t_bug_data = array(); $t_bug_data['email_bug'] = $p_bug_id; if ($p_message_id !== 'email_notification_title_for_action_bug_deleted') { $t_bug_data['email_bug_view_url'] = string_get_bug_view_url_with_fqdn($p_bug_id); } if (access_compare_level($t_user_access_level, config_get('view_handler_threshold'))) { if (0 != $t_row['handler_id']) { $t_bug_data['email_handler'] = user_get_name($t_row['handler_id']); } else { $t_bug_data['email_handler'] = ''; } } $t_bug_data['email_reporter'] = user_get_name($t_row['reporter_id']); $t_bug_data['email_project_id'] = $t_row['project_id']; $t_bug_data['email_project'] = project_get_field($t_row['project_id'], 'name'); $t_category_name = category_full_name($t_row['category_id'], false); $t_bug_data['email_category'] = $t_category_name; $t_tag_rows = tag_bug_get_attached($p_bug_id); if (!empty($t_tag_rows) && access_compare_level($t_user_access_level, config_get('tag_view_threshold'))) { $t_bug_data['email_tag'] = ''; foreach ($t_tag_rows as $t_tag) { $t_bug_data['email_tag'] .= $t_tag['name'] . ', '; } $t_bug_data['email_tag'] = trim($t_bug_data['email_tag'], ', '); } $t_bug_data['email_date_submitted'] = $t_row['date_submitted']; $t_bug_data['email_last_modified'] = $t_row['last_updated']; if (!date_is_null($t_row['due_date']) && access_compare_level($t_user_access_level, config_get('due_date_view_threshold'))) { $t_bug_data['email_due_date'] = date(config_get('short_date_format'), $t_row['due_date']); } $t_bug_data['email_status'] = $t_row['status']; $t_bug_data['email_severity'] = $t_row['severity']; $t_bug_data['email_priority'] = $t_row['priority']; $t_bug_data['email_reproducibility'] = $t_row['reproducibility']; $t_bug_data['email_resolution'] = $t_row['resolution']; $t_bug_data['email_fixed_in_version'] = $t_row['fixed_in_version']; if (!is_blank($t_row['target_version']) && access_compare_level($t_user_access_level, config_get('roadmap_view_threshold'))) { $t_bug_data['email_target_version'] = $t_row['target_version']; } $t_bug_data['email_summary'] = $t_row['summary']; $t_bug_data['email_description'] = $t_row['description']; $t_bug_data['email_additional_information'] = $t_row['additional_information']; $t_bug_data['email_steps_to_reproduce'] = $t_row['steps_to_reproduce']; $t_bug_data['set_category'] = '[' . $t_bug_data['email_project'] . '] ' . $t_category_name; $t_bug_data['custom_fields'] = custom_field_get_linked_fields($p_bug_id, $t_user_access_level); $t_bug_data['bugnotes'] = bugnote_get_all_visible_bugnotes($p_bug_id, $t_user_bugnote_order, $t_user_bugnote_limit, $p_user_id); # put history data if (ON == config_get('history_default_visible') && access_compare_level($t_user_access_level, config_get('view_history_threshold'))) { $t_bug_data['history'] = history_get_raw_events_array($p_bug_id, $p_user_id); } # Sponsorship Information if (config_get('enable_sponsorship') == ON && access_has_bug_level(config_get('view_sponsorship_total_threshold'), $p_bug_id, $p_user_id)) { $t_sponsorship_ids = sponsorship_get_all_ids($p_bug_id); $t_bug_data['sponsorship_total'] = sponsorship_get_amount($t_sponsorship_ids); if (access_has_bug_level(config_get('view_sponsorship_details_threshold'), $p_bug_id, $p_user_id)) { $t_bug_data['sponsorships'] = array(); foreach ($t_sponsorship_ids as $t_id) { $t_bug_data['sponsorships'][] = sponsorship_get($t_id); } } } $t_bug_data['relations'] = relationship_get_summary_text($p_bug_id); current_user_set($t_current_user_id); return $t_bug_data; }