Viewing File: /usr/local/cpanel/base/frontend/jupiter/mail/report.html.tt
[%
USE Mysql;
USE DataURI;
USE HTMLOptions;
USE JSON;
USE NVData;
SET spinner_url = '/images/report-spinner.gif';
IF CPANEL.ua_is_ie && CPANEL.ua_is_ie < 8;
SET spinner_url = MagicRevision(spinner_url);
"<img src='$spinner_url' style='display:none'>";
ELSE;
SET spinner_url = DataURI.datauri(spinner_url, 'image/gif');
END;
SET nvdata = NVData.get_page_nvdata();
SET stats_db_status = execute('Email','stats_db_status');
SET upcp_running = (stats_db_status.data == 'upcp') && locale.maketext('An update of [asis,cPanel amp() WHM] on this system is in progress. Email statistics are not available.');
-%]
<script type="text/javascript">
var setShowAllFilter = function(showAll) {
var advancedForm = DOM.get("advanced-form");
// if there is no recipient email clear the trace
if( !DOM.get("freeform").value.trim() ) {
DOM.setStyle( "outer_trace_container", "display", "none" );
}
// set filter states
if( showAll ) {
advancedForm.success.checked = 1;
advancedForm.failure.checked = 1;
advancedForm.defer.checked = 1;
advancedForm.inprogress.checked = 1;
} else {
advancedForm.success.checked = 0;
advancedForm.failure.checked = 1;
advancedForm.defer.checked = 0;
advancedForm.inprogress.checked = 0;
}
check_filter();
}
var runReport = function() {
setSpinner();
doTrace();
doupdate();
}
var setSpinner = function() {
return function () {
var run_buttons = DOM.getElementsByClassName('search-button');
for(var i = 0 ; i < run_buttons.length ; i++){
run_buttons[i].disabled = true;
DOM.setStyle(run_buttons[i].getElementsByClassName('search-button-spinner-text')[0], 'opacity', 0.2);
}
}
}();
var hide_spinner = function () {
return function () {
var run_buttons = DOM.getElementsByClassName('search-button');
for(var i = 0 ; i < run_buttons.length ; i++){
run_buttons[i].disabled = false;
DOM.setStyle(run_buttons[i].getElementsByClassName('search-button-spinner-text')[0], 'opacity', 1);
}
}
}();
</script>
<script type="text/plain" id="actions_template">
<div class="icon_holder">
<a id="lnkViewDetails" href="javascript:void(0)" onclick="show_details(this)" title="[% locale.maketext('View Details') %]">
<span class="fas fa-info-circle" title="[% locale.maketext('View Details') %]"></span>
</a>
</div>
</script>
[% INCLUDE _assets/_calendar.html.tt %]
<div class="body-content">
[% IF stats_db_status.status && !upcp_running %]
<p id="descTrackDelivery" class="description">
[% locale.maketext("Review an email’s delivery route. This can be useful if you need to locate problems with email delivery. For more information, read the [output,url,_1,documentation,target,_2,id,_3].", "//go.cpanel.net/TrackDelivery", "_blank", "lnkTrackDeliveryDocumentation") %]
</p>
[% IF stats_db_status.data == 'importing' -%]
<div class="alert alert-info">
<span class="glyphicon glyphicon-remove-sign"></span>
<div class="alert-message">
[% locale.maketext('[output,strong,Note]: A rebuild of this database is in progress. Search results may be incomplete.') %]
</div>
</div>
[% END -%]
[% SET retention = CPANEL.CPCONF().exim_retention_days || 10 %]
<div class="sample"></div>
<div class="section">
<form action="javascript:void(0)" name='search-fields' id='search-fields' onsubmit="runReport()">
<input id="type-select" type="hidden" name="mainkey" value="recipient" />
<input id="hidSearchmatch" type="hidden" name="searchmatch" value="eq" />
<input id="deliverytype_all" type="hidden" name="deliverytype" value="all" />
<input id="startdate" name="startdate" type="hidden" />
<input id="enddate" name="endddate" type="hidden" />
<input id="endtime" name="endtime" type="hidden" />
<input id="starttime" name="starttime" type="hidden" />
<div class="form-group">
<label id="lblRecipientEmail" for="freeform">[% locale.maketext('Recipient Email (optional)') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<div class="input-group">
<input type="text" class="form-control" id="freeform" name="freeform" placeholder="[% locale.maketext("Optional") %]" />
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">[% locale.maketext("Run Report") %]</button>
</span>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<div id="freeform_error"></div>
</div>
</div>
</div>
<div class="form-group">
<button type="button" class="btn btn-default search-button" id='show-all-run-button' onclick="setShowAllFilter(true)">
<span class='search-button-spinner-text'>[% locale.maketext("Show All") %]</span>
</button>
<button type="button" class="btn btn-default search-button" id='show-fails-run-button' onclick="setShowAllFilter(false)">
<span class='search-button-spinner-text'>[% locale.maketext("Show Blocked [output,amp] Failed") %]</span>
</button>
</div>
</form>
</div>
<div id="cjt_pagenotice_container"></div>
<a id="report"></a>
<div class="section">
<div id='table_container'>
<div id='page-control' class="clearfix">
<h2>[% locale.maketext("Delivery Report") %]</h2>
<div class="results-output">
<div class="results-header"></div>
<div class="total-items">
<div id="results-header"></div>
</div>
</div>
<div id="floater">
<div id="top-page-nav"></div>
</div>
</div>
<div id="option_header" style="display:none;">
<div class="table-box">
<div class="table-top group">
<div style='float: right' id='toggle_col_options'>
<a href='javascript:void(0)' onclick='toggle_options()'>
<img border=0 src="[% MagicRevision('../images/edit-list.png') %]" alt="[% locale.maketext("Table Options") %]" title="[% locale.maketext("Table Options") %]" />
</a>
</div>
<br style="clear:both" />
<div id='filterItems'>
<div class="top-filterItems">
<div class="filterItems-Arrow"></div>
</div>
<form class="advanced-section" id="advanced-form" action="javascript:void(0)">
<span class="inputs">
<label>
<input type="checkbox" name="success" value="1" [% IF nvdata && nvdata.show_success %]checked[% END %] onclick='return check_filter()' />
[% locale.maketext("Show Successes") %]
</label>
</span>
<span class="inputs">
<label>
<input type="checkbox" name="defer" value="1" [% IF nvdata && nvdata.show_defer %]checked[% END %] onclick='return check_filter()' />
[% locale.maketext("Show Deferred") %]
</label>
</span>
<span class="inputs">
<label>
<input type="checkbox" name="failure" value="1" [% IF !nvdata || nvdata.show_failure || !nvdata.defined('show_failure') %]checked[% END %] onclick='return check_filter()' />
[% locale.maketext("Show Failures") %]
</label>
</span>
<span class="inputs">
<label>
<input type="checkbox" name="inprogress" value="1" [% IF nvdata && nvdata.show_inprogress %]checked[% END %] onclick='return check_filter()' />
[% locale.maketext("Show In-Progress") %]
</label>
</span>
<div class="inputs mxresults">
<label>[% locale.maketext('Max Results/Type:') %]
<select name="max_results_by_type">
[% HTMLOptions.options_as_html( [
{ v => 250, t => 250 },
{ v => 500, t => 500 },
{ v => 1000, t => 1000 },
{ v => 2500, t => 2500 },
{ v => 5000, t => 5000 },
{ v => 0, t => locale.maketext('Unlimited') },
], {
value => 'v',
text => 't',
selected => nvdata.max_results_by_type || 250,
} ) -%]
</select>
</label>
</div>
</form>
</div><!-- filteritems -->
</div><!-- table-top group -->
<div id="deliveryreport" class="deliveryreport"></div>
<div class="data-retained">
[% locale.maketext('Data is retained for [quant,_1,day,days].',retention) %]
</div>
</div><!-- table-box -->
</div><!-- option_header -->
<div id='bottom-nav'>
<div id='floater-bottom' style="float:right; padding:0px; margin:0px">
<div id="bottom-page-nav"></div>
</div>
<br style="clear: both" />
</div>
<br style="clear: both" />
<div id="outer_trace_container" style="display:none">
<h2>[% locale.maketext("Email Address Trace") %]</h2>
<div id="trace_container" class="trace-container">
<div id="trace_message" class="email-trace"></div>
</div>
</div><!-- outer_trace_container -->
</div><!-- table_container -->
</div>
<div id="col_options">
<div class="options-top group"></div>
<div class="hd"></div>
<div class="options-bd">
<div class="tb-options">
[% locale.maketext("Table Options") %]
<div class="closeit"><a href='#' onclick='header_panel.hide(); return false'>X</a></div>
</div>
<div class="info-blurb">[% locale.maketext("Select the columns you wish to display in the table.") %]</div>
<div id="option_area"></div>
</div>
</div>
<div id="startcal">
<div class="bd">
<div id="cal1Container"></div>
</div>
</div>
<div id="emailreport"></div>
<div style="width: 1px; height: 1px; position:absolute; top:-999999px; left:-999999px;" id="printpanel"></div>
<div id="dateSelect" style="display:none"></div>
[% ELSE %]
<div id="main_content">
<p class="description">
[% SET alert_type = upcp_running ? 'info' : 'danger' -%]
<div class="alert alert-[% alert_type %]">
<span class="glyphicon glyphicon-remove-sign"></span>
<div class="alert-message">
[% upcp_running || stats_db_status.errors_as_string() %]
</div>
</div>
</p>
</div>
[% END %]
[% INCLUDE _assets/return_link.html.tt return_location='../index.html' return_link_text=locale.maketext('Go Back') %]
</div><!-- end body-content -->
<script type="text/javascript">
/* load initial page */
YAHOO.util.Event.onDOMReady(function(){
var tt2 = new YAHOO.widget.Tooltip("tt2", {
context:"Search_TT",
text: [% locale.maketext('This search persists until you clear it. Because searching updates the report, new data may appear after you click [output,class,Go,_1].','ui-term-reference').json() %],
autodismissdelay: 100000, xyoffset: [5,10]
});
setSpinner();
doTrace();
doupdate();
});
</script>
<style type="text/css">
/* ----- Counteract Bootstrap: */
.email-trace dl {
margin-bottom: 0;
}
.email-trace code {
color: inherit;
background-color: rgba(0, 0, 0, 0.05);
}
.email-trace dt,
.email-trace dl {
line-height: 1.6;
}
/* ----- */
:not([dir=rtl]) .email-trace dd {
margin-left: 1em;
}
[dir=rtl] .email-trace dd {
margin-right: 1em;
}
/* Padding between each route destination: */
.email-trace dl.route-list > dd:not(:last-of-type) {
margin-bottom: 1em;
}
:not([dir=rtl]) .email-trace .icon-wrapper {
margin-right: 0.25em;
}
[dir=rtl] .email-trace .icon-wrapper {
margin-left: 0.25em;
}
.email-trace .icon-wrapper {
font-size: larger;
vertical-align: middle;
}
</style>
<!-- start trace logic -->
<script src="/sharedjs/email_trace_tree.js"></script>
<script>
var traceDiv = DOM.get("trace_message");
window.doTrace = function(email) {
email = email || DOM.get("freeform").value.trim();
if (email) {
CPANEL.api( {
version: 3,
module: "Email",
func: "trace_delivery",
data: { recipient: email },
callback: {
success: function(o) {
traceDiv.innerHTML = CPANEL.emailTraceTree(o.cpanel_data);
DOM.get("outer_trace_container").style.display = "";
},
failure: function(o) {
var msgHtml = o.cpanel_messages.filter(
function(m) { return m.level === "error" }
).map(
function(m) { return m.content.html_encode(); }
).join(" ");
msgHtml = "[% locale.maketext('The system failed to trace delivery to “[_1]” because of an error: [_2]','%dest%', '%err') %]".replace(/%dest%/, email.html_encode()).replace(/%err/, msgHtml);
CPANEL.ajax.show_api_error(msgHtml,"cjt_pagenotice_container");
},
},
} );
}
};
</script>
<!-- end trace logic -->
Back to Directory
File Manager