/**
  * Email text processing.
  * @param string Event name
  * @param string Unformatted text
  * @return string Formatted text
  */
 function email($p_event, $p_string)
 {
     static $s_text, $s_buglinks, $s_vcslinks;
     $t_string = $p_string;
     if (null === $s_text) {
         $s_text = plugin_config_get('process_text');
         $s_buglinks = plugin_config_get('process_buglinks');
         $s_vcslinks = plugin_config_get('process_vcslinks');
     }
     if (ON == $s_text) {
         $t_string = string_strip_hrefs($t_string);
     }
     if (ON == $s_buglinks) {
         $t_string = string_process_bug_link($t_string, false);
         $t_string = string_process_bugnote_link($t_string, false);
     }
     if (ON == $s_vcslinks) {
         $t_string = string_process_cvs_link($t_string, false);
     }
     return $t_string;
 }
示例#2
0
/**
 * Build the bug info part of the message
 * @param array $p_visible_bug_data
 * @return string
 */
function email_format_bug_message($p_visible_bug_data)
{
    $t_normal_date_format = config_get('normal_date_format');
    $t_complete_date_format = config_get('complete_date_format');
    $t_email_separator1 = config_get('email_separator1');
    $t_email_separator2 = config_get('email_separator2');
    $t_email_padding_length = config_get('email_padding_length');
    $t_status = $p_visible_bug_data['email_status'];
    $p_visible_bug_data['email_date_submitted'] = date($t_complete_date_format, $p_visible_bug_data['email_date_submitted']);
    $p_visible_bug_data['email_last_modified'] = date($t_complete_date_format, $p_visible_bug_data['email_last_modified']);
    $p_visible_bug_data['email_status'] = get_enum_element('status', $t_status);
    $p_visible_bug_data['email_severity'] = get_enum_element('severity', $p_visible_bug_data['email_severity']);
    $p_visible_bug_data['email_priority'] = get_enum_element('priority', $p_visible_bug_data['email_priority']);
    $p_visible_bug_data['email_reproducibility'] = get_enum_element('reproducibility', $p_visible_bug_data['email_reproducibility']);
    $t_message = $t_email_separator1 . " \n";
    if (isset($p_visible_bug_data['email_bug_view_url'])) {
        $t_message .= $p_visible_bug_data['email_bug_view_url'] . " \n";
        $t_message .= $t_email_separator1 . " \n";
    }
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_reporter');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_handler');
    $t_message .= $t_email_separator1 . " \n";
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_project');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_bug');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_category');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_reproducibility');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_severity');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_priority');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_status');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_target_version');
    # custom fields formatting
    foreach ($p_visible_bug_data['custom_fields'] as $t_custom_field_name => $t_custom_field_data) {
        $t_message .= utf8_str_pad(lang_get_defaulted($t_custom_field_name, null) . ': ', $t_email_padding_length, ' ', STR_PAD_RIGHT);
        $t_message .= string_custom_field_value_for_email($t_custom_field_data['value'], $t_custom_field_data['type']);
        $t_message .= " \n";
    }
    # end foreach custom field
    if (config_get('bug_resolved_status_threshold') <= $t_status) {
        $p_visible_bug_data['email_resolution'] = get_enum_element('resolution', $p_visible_bug_data['email_resolution']);
        $t_message .= email_format_attribute($p_visible_bug_data, 'email_resolution');
        $t_message .= email_format_attribute($p_visible_bug_data, 'email_fixed_in_version');
    }
    $t_message .= $t_email_separator1 . " \n";
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_date_submitted');
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_last_modified');
    $t_message .= $t_email_separator1 . " \n";
    $t_message .= email_format_attribute($p_visible_bug_data, 'email_summary');
    $t_message .= lang_get('email_description') . ": \n" . $p_visible_bug_data['email_description'] . "\n";
    if (!is_blank($p_visible_bug_data['email_steps_to_reproduce'])) {
        $t_message .= "\n" . lang_get('email_steps_to_reproduce') . ": \n" . $p_visible_bug_data['email_steps_to_reproduce'] . "\n";
    }
    if (!is_blank($p_visible_bug_data['email_additional_information'])) {
        $t_message .= "\n" . lang_get('email_additional_information') . ": \n" . $p_visible_bug_data['email_additional_information'] . "\n";
    }
    if (isset($p_visible_bug_data['relations'])) {
        if ($p_visible_bug_data['relations'] != '') {
            $t_message .= $t_email_separator1 . "\n" . str_pad(lang_get('bug_relationships'), 20) . str_pad(lang_get('id'), 8) . lang_get('summary') . "\n" . $t_email_separator2 . "\n" . $p_visible_bug_data['relations'];
        }
    }
    # Sponsorship
    if (isset($p_visible_bug_data['sponsorship_total']) && $p_visible_bug_data['sponsorship_total'] > 0) {
        $t_message .= $t_email_separator1 . " \n";
        $t_message .= sprintf(lang_get('total_sponsorship_amount'), sponsorship_format_amount($p_visible_bug_data['sponsorship_total'])) . "\n" . "\n";
        if (isset($p_visible_bug_data['sponsorships'])) {
            foreach ($p_visible_bug_data['sponsorships'] as $t_sponsorship) {
                $t_date_added = date(config_get('normal_date_format'), $t_sponsorship->date_submitted);
                $t_message .= $t_date_added . ': ';
                $t_message .= user_get_name($t_sponsorship->user_id);
                $t_message .= ' (' . sponsorship_format_amount($t_sponsorship->amount) . ')' . " \n";
            }
        }
    }
    $t_message .= $t_email_separator1 . " \n\n";
    # format bugnotes
    foreach ($p_visible_bug_data['bugnotes'] as $t_bugnote) {
        $t_last_modified = date($t_normal_date_format, $t_bugnote->last_modified);
        $t_formatted_bugnote_id = bugnote_format_id($t_bugnote->id);
        $t_bugnote_link = string_process_bugnote_link(config_get('bugnote_link_tag') . $t_bugnote->id, false, false, true);
        if ($t_bugnote->time_tracking > 0) {
            $t_time_tracking = ' ' . lang_get('time_tracking') . ' ' . db_minutes_to_hhmm($t_bugnote->time_tracking) . "\n";
        } else {
            $t_time_tracking = '';
        }
        if (user_exists($t_bugnote->reporter_id)) {
            $t_access_level = access_get_project_level($p_visible_bug_data['email_project_id'], $t_bugnote->reporter_id);
            $t_access_level_string = ' (' . get_enum_element('access_levels', $t_access_level) . ') - ';
        } else {
            $t_access_level_string = '';
        }
        $t_string = ' (' . $t_formatted_bugnote_id . ') ' . user_get_name($t_bugnote->reporter_id) . $t_access_level_string . $t_last_modified . "\n" . $t_time_tracking . ' ' . $t_bugnote_link;
        $t_message .= $t_email_separator2 . " \n";
        $t_message .= $t_string . " \n";
        $t_message .= $t_email_separator2 . " \n";
        $t_message .= $t_bugnote->note . " \n\n";
    }
    # format history
    if (array_key_exists('history', $p_visible_bug_data)) {
        $t_message .= lang_get('bug_history') . " \n";
        $t_message .= utf8_str_pad(lang_get('date_modified'), 17) . utf8_str_pad(lang_get('username'), 15) . utf8_str_pad(lang_get('field'), 25) . utf8_str_pad(lang_get('change'), 20) . " \n";
        $t_message .= $t_email_separator1 . " \n";
        foreach ($p_visible_bug_data['history'] as $t_raw_history_item) {
            $t_localized_item = history_localize_item($t_raw_history_item['field'], $t_raw_history_item['type'], $t_raw_history_item['old_value'], $t_raw_history_item['new_value'], false);
            $t_message .= utf8_str_pad(date($t_normal_date_format, $t_raw_history_item['date']), 17) . utf8_str_pad($t_raw_history_item['username'], 15) . utf8_str_pad($t_localized_item['note'], 25) . utf8_str_pad($t_localized_item['change'], 20) . "\n";
        }
        $t_message .= $t_email_separator1 . " \n\n";
    }
    return $t_message;
}
/**
 * Display a list of changeset objects in tabular format.
 * Assumes that a table with four columns has already been defined.
 * @param array Changeset objects
 * @param array Repository objects
 */
function Source_View_Changesets($p_changesets, $p_repos = null, $p_show_repos = true)
{
    if (!is_array($p_changesets)) {
        return;
    }
    if (is_null($p_repos) || !is_array($p_repos)) {
        $t_repos = SourceRepo::load_by_changesets($p_changesets);
    } else {
        $t_repos = $p_repos;
    }
    $t_use_porting = config_get('plugin_Source_enable_porting');
    foreach ($p_changesets as $t_changeset) {
        $t_repo = $t_repos[$t_changeset->repo_id];
        $t_vcs = SourceVCS::repo($t_repo);
        $t_changeset->load_files();
        $t_author = Source_View_Author($t_changeset, false);
        $t_committer = Source_View_Committer($t_changeset, false);
        ?>

<tr class="row-1">
<td class="category" width="25%" rowspan="<?php 
        echo count($t_changeset->files) + 1;
        ?>
">
	<a name="changeset<?php 
        echo $t_changeset->id;
        ?>
"><?php 
        echo string_display(($p_show_repos ? $t_repo->name . ': ' : '') . $t_vcs->show_changeset($t_repo, $t_changeset));
        ?>
</a>
	<br/><span class="small"><?php 
        echo plugin_lang_get('timestamp', 'Source'), ': ', string_display_line($t_changeset->timestamp);
        ?>
</span>
	<br/><span class="small"><?php 
        echo plugin_lang_get('author', 'Source'), ': ', $t_author;
        ?>
</span>
	<?php 
        if ($t_committer && $t_committer != $t_author) {
            ?>
<br/><span class="small"><?php 
            echo plugin_lang_get('committer', 'Source'), ': ', $t_committer;
            ?>
</span><?php 
        }
        ?>
	<?php 
        if ($t_use_porting) {
            ?>
	<br/><span class="small"><?php 
            echo plugin_lang_get('ported', 'Source'), ': ', $t_changeset->ported ? string_display_line($t_changeset->ported) : (is_null($t_changeset->ported) ? plugin_lang_get('pending', 'Source') : plugin_lang_get('na', 'Source'));
            ?>
</span>
	<?php 
        }
        ?>
	<br/><span class="small-links">
		<?php 
        print_bracket_link(plugin_page('view', false, 'Source') . '&id=' . $t_changeset->id, plugin_lang_get('details', 'Source'));
        if ($t_url = $t_vcs->url_changeset($t_repo, $t_changeset)) {
            print_bracket_link($t_url, plugin_lang_get('diff', 'Source'));
        }
        ?>
</td>
<td colspan="3"><?php 
        # The commit message is manually transformed (adding href, bug and bugnote
        # links + nl2br) instead of calling string_display_links(), which avoids
        # unwanted html tags processing by the MantisCoreFormatting plugin.
        # Rationale: commit messages being plain text, any html they may contain
        # should not be considered as formatting and must be displayed as-is.
        echo string_nl2br(string_process_bugnote_link(string_process_bug_link(string_insert_hrefs(string_html_specialchars($t_changeset->message)))));
        ?>
</td>
</tr>

		<?php 
        foreach ($t_changeset->files as $t_file) {
            ?>
<tr class="row-2">
<td class="small mono" colspan="2"><?php 
            echo string_display_line($t_vcs->show_file($t_repo, $t_changeset, $t_file));
            ?>
</td>
<td class="center" width="12%"><span class="small-links">
		<?php 
            if ($t_url = $t_vcs->url_diff($t_repo, $t_changeset, $t_file)) {
                print_bracket_link($t_url, plugin_lang_get('diff', 'Source'));
            }
            if ($t_url = $t_vcs->url_file($t_repo, $t_changeset, $t_file)) {
                print_bracket_link($t_url, plugin_lang_get('file', 'Source'));
            }
            ?>
</span></td>
</tr>
		<?php 
        }
        ?>
<tr><td class="spacer"></td></tr>
		<?php 
    }
}
/** Prepare a string for display in rss */
function string_rss_links($p_string)
{
    // rss can not start with &nbsp; which spaces will be replaced into by string_display().
    $t_string = trim($p_string);
    // same steps as string_display_links() without the preservation of spaces since &nbsp; is undefined in XML.
    $t_string = string_strip_hrefs($t_string);
    $t_string = string_html_specialchars($t_string);
    $t_string = string_restore_valid_html_tags($t_string);
    $t_string = string_nl2br($t_string);
    $t_string = string_insert_hrefs($t_string);
    $t_string = string_process_bug_link($t_string, true, false, true);
    $t_string = string_process_bugnote_link($t_string, true, false, true);
    $t_string = string_process_cvs_link($t_string);
    # another escaping to escape the special characters created by the generated links
    $t_string = string_html_specialchars($t_string);
    return $t_string;
}
示例#5
0
function string_email_links($p_string)
{
    $p_string = string_email($p_string);
    $p_string = string_process_bug_link($p_string, false);
    $p_string = string_process_bugnote_link($p_string, false);
    $p_string = string_process_cvs_link($p_string, false);
    return $p_string;
}