Example #1
0
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);
        }
    }
}
Example #2
0
/**
 * 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;
}
Example #3
0
/**
 * 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;
}
Example #4
0
/**
 * 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;
}
Example #5
0
/**
 * 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);
        }
    }
}
Example #6
0
/**
 * 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;
}