Viewing File: /var/cpanel/customizations/includes/cp_analytics_webmail.html.tt
[%
USE NVData;
SET is_sandbox = CPANEL.is_sandbox();
SET current_analytics_setting = "";
TRY;
SET NVData = execute( 'NVData', 'get', {"names" =>"analytics" , "html_encoded" =>"1" } ).data;
IF NVData;
SET current_analytics_setting = NVData.0.value IF (NVData.0.value);
END;
CATCH;
END;
IF current_analytics_setting != 'on' and current_analytics_setting != 'off';
SET current_analytics_setting = "";
END;
DEFAULT sample_rate = 50; # 50% sampling
IF CPANEL.CPFLAGS.item('trial');
SET sample_rate = 100; # 100% sampling
END;
# NOTE: Check if analytics are disabled server side in WHM.
SET is_analytics_enabled_server_side = 0;
IF CPANEL.is_server_analytics_enabled();
is_analytics_enabled_server_side = 1;
END;
%]
[% IF is_analytics_enabled_server_side %]
<svg class="symbol" xmlns="http://www.w3.org/2000/svg">
<symbol id="analytics-icon-arrow">
<path d="M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z"></path>
</symbol>
</svg>
<!--
DEV NOTE: Do not change the id of the below container. It is accessed in the web component <cp-load-mixpanel-js /> web component
to check the existence of this popup.
-->
<div id="analyticsContainer">
<div id="analyticsReminder">
<button id="popupUserConsentButton" data-testid="popupUserConsentButton-webmail_consent_privacy_slideout" type="button" aria-label="Popup User Consent" onclick="AnalyticsConsentBanner.toggle();">
<div class="analytics-icon" aria-hidden="true">
<svg class="analytics-icon-arrow" viewBox="0 0 512 512">
<use xlink:href="#analytics-icon-arrow" />
</svg>
</div>
</button>
</div>
<div id="userConsentContainer" class="consentContainer">
<button type="button" id="closeConsentContainer" data-testid="closeConsentContainer-webmail_consent_privacy_slideout" aria-label="Close User Consent" class="closeConsent" onclick="AnalyticsConsentBanner.toggle();">×</button>
<div id="userConsentQuestion" class="consentDefault">
<div class="row">
<div class="col-xs-12 cp-webmail-consent-privacy-modal__content-title">
[% locale.maketext("Consent and Privacy[comment,title]") %]
</div>
<div class="col-xs-12 cp-consent-privacy__description">
[% locale.maketext(
"WebPros International, LLC d.b.a cPanel is asking for your consent to participate in user activity tracking using third-party software for the purpose of understanding the performance of Webpros products. Information will be used pursuant to the [output,url,_1,cPanel & WHM Privacy Policy,title,cPanel & WHM Privacy Policy,data-test-id,_2,target,_3,class,_4,id,_5] and may be shared internally within the Webpros group. You can update your preferences at any time from the analytics slideout.","https://go.cpanel.net/privacy","docLink-webmail_consent_cp-privacy-policy","privacy-policy","external-link","docLink-webmail_consent_cp-privacy-policy"
) %]
</div>
<div class="col-xs-12 cp-consent-privacy__input-container">
<div class="row">
<div class="col-xs-12">
<div class="checkbox">
<label>
<input
type="checkbox"
name="consent_setting"
id="consent-setting"
data-testid="chkConsent-webmail_consent_privacy_slideout"
class="form-input-checkbox"
></input>
[% locale.maketext(
"By checking this box, you agree that we may collect your usage statistics. [output,url,_1, Learn more here.,title,cPanel Analytics Documentation,class,_2,target,_3,id,_4,data-test-id,_5]", "https://go.cpanel.net/analytics", "external-link", "analytics", "docLink-webmail_consent_cp-analytics", "docLink-webmail_consent_cp-analytics"
) %]
</label>
</div>
</div>
</div>
</div>
<div class="col-xs-12">
<button
id="btnSave"
data-testid="btnSave-webmail_consent_privacy_slideout"
type="button"
class="btn btn-primary"
data-bs-toggle="button"
onclick="AnalyticsConsentBanner.handleConsentPrivacySaveClick()"
>
[% locale.maketext("Save") %]
</button>
</div>
</div>
</div>
</div>
</div>
<script>
(function() {
var ConsentBanner = (function() {
var analyticsContainer = document.getElementById("analyticsContainer");
var consentSetting = document.getElementById("consent-setting");
var cpsession = window.location.pathname.split("/")[1];
var request = new XMLHttpRequest();
var cpanelAPICallPrefix = "/execute/NVData/set?names=analytics&analytics=";
var whmAPICallPrefix = "/json-api/nvset?api.version=1&key=analytics&value=";
var webmailAPICallPrefix = "/json-api/cpanel?cpanel_jsonapi_module=NVData&cpanel_jsonapi_func=set&cpanel_jsonapi_apiversion=2&names=analytics";
var isWHM = false;
var isCpanel = false;
var isWebmail = false;
var currentConsentSetting = false; // Should only ever be true or false. Default to false.
function updateSettings(consentValue) {
currentConsentSetting = consentValue;
consentSetting.checked = currentConsentSetting;
}
function handleConsentPrivacySaveClick() {
saveConsent(consentSetting.checked);
}
function getConnectPrefix() {
var prefix = "";
if (isWHM) {
prefix = whmAPICallPrefix;
}
if (isCpanel) {
prefix = cpanelAPICallPrefix;
}
if (isWebmail) {
prefix = webmailAPICallPrefix;
}
return prefix;
}
function handleCpanelResult(result) {
return result && result.status == 1;
}
function handleWHMResult(result) {
return result && result.metadata.result == 1;
}
function handleWebmailResult(result) {
return result && result.cpanelresult.event.result == 1;
}
function parseAPIStatus(result) {
if (isWHM) {
return handleWHMResult(result);
}
if (isCpanel) {
return handleCpanelResult(result);
}
if (isWebmail) {
return handleWebmailResult(result);
}
return false;
}
function saveConsent (consent) {
var consentValue = consent ? "on" : "off";
request.open("GET", "/" + cpsession + getConnectPrefix() + "&analytics=" + consentValue);
request.onload = function () {
if (request.status >= 200 && request.status < 400) {
var result;
try {
result = JSON.parse(request.responseText);
} catch (e) {
}
// IE requires that we clear these manually
analyticsContainer.style.transitionDelay = "";
analyticsContainer.className = "peek";
var results = parseAPIStatus(result);
if (results) {
updateSettings(consent);
if(!consent){
optOutOfAnalytics();
return;
}
var mixpanelConfig = "";
[% IF analytics_config %]
mixpanelConfig = [% analytics_config.json %];
[% END %]
if (consent && mixpanelConfig){
// Enable analytics without having to reload the page.
enableAnalyticsForFirstTime(mixpanelConfig);
}
}
}
};
request.send();
}
function handleConsentPrivacySavedEvent(event){
var settings = event.detail;
if(settings){
updateSettings(settings.analytics);
}
}
function toggleDialog (addDelay) {
if (addDelay) {
analyticsContainer.style = "transition-delay: .5s;";
}
if (analyticsContainer.className.indexOf("shown") === -1 ) {
analyticsContainer.className = "shown";
} else {
analyticsContainer.className = "peek";
// Reset the values to the current settings when closing the slideout.
updateSettings(currentConsentSetting);
}
}
function initialize (opts) {
if (opts.isWHM) {
isWHM = opts.isWHM;
}
if (opts.isCpanel) {
isCpanel = opts.isCpanel;
}
if (opts.isWebmail) {
isWebmail = opts.isWebmail;
}
// IE requires that we clear these manually
analyticsContainer.style.transitionDelay = "";
// Hide the slideout by default.
analyticsContainer.className = "peek";
updateSettings(opts.currentConsentSetting);
}
return {
initialize: initialize,
toggle: toggleDialog,
handleConsentPrivacySaveClick: handleConsentPrivacySaveClick,
handleConsentPrivacySavedEvent: handleConsentPrivacySavedEvent
};
})();
window.AnalyticsConsentBanner = ConsentBanner;
setTimeout(function() {
ConsentBanner.initialize({
"currentConsentSetting": [% current_analytics_setting == "on" ? "true" : "false" %],
"isWebmail": true
});
}, 2000);
document.body.addEventListener('consentPrivacySaved', ConsentBanner.handleConsentPrivacySavedEvent);
})();
</script>
<style>
/* IE, yuno work better? */
html {
-ms-overflow-style: scrollbar;
}
#analyticsContainer {
position: fixed;
width: 100%;
transition: .75s right, .75s left;
right: calc(-100% - 30px);
bottom: 0;
z-index: 1039; /* z-index above this value will show up over the top of the consent modal overlay. */
box-sizing: border-box;
}
#analyticsContainer.peek {
right: -100%;
}
#analyticsContainer.shown {
right: 0;
}
#analyticsReminder {
position: absolute;
bottom: 5px;
left: -30px;
width: 30px;
height: 30px;
transition: .75s right, .75s left;
box-sizing: border-box;
}
#analyticsReminder.active {
right: 0;
}
#popupUserConsentButton {
border-radius: 5px 0 0 5px;
height: 30px;
width: 30px;
background-color: #2a3b49;
color: #ffffff;
border: 5px solid #2a3b49;
outline: 0;
box-sizing: border-box;
padding: 0;
margin: 0;
display: block;
}
svg.symbol {
display: none;
}
#analytics-icon {
width: 100%;
height: 100%;
display: block;
}
#analytics-icon-arrow {
fill: white;
}
.consentContainer {
width: 100%;
font-size: 14px;
transition: .75s right, .75s left;
box-sizing: border-box;
}
.consentContainer .closeConsent {
position: absolute;
right: 5px;
top: 5px;
font-size: 24px;
color: #555;
font-weight: bold;
cursor: pointer;
box-sizing: border-box;
line-height: 1;
border: none;
background-color: transparent;
padding: 0;
margin: 0;
}
.consentDefault {
padding: 25px 20px;
background-color: #F5F5F5;
border-left: 5px solid #2a3b49;
box-shadow: 13px 5px 25px #888888;
box-sizing: border-box;
color: #333333;
font-weight: normal;
}
.consentContainer label {
display: inline-block;
margin-bottom: 5px;
font-weight: 600;
box-sizing: border-box;
}
.consentContainer input[type=radio] {
margin: 4px 0 0;
margin-top: 1px \9;
line-height: normal;
box-sizing: border-box;
padding: 0;
box-sizing: border-box;
}
.consentContainer p {
margin: 0 0 10px;
box-sizing: border-box;
line-height: 1.42857143;
}
.consentContainer a {
background: 0 0;
color: #428bca;
text-decoration: none;
box-sizing: border-box;
}
.consentContainer a:hover,
.consentContainer a:focus {
color: #2a6496;
text-decoration: underline;
}
.consentConainer a:active,
.consentConainer a:hover {
outline: 0;
}
.consentContainer a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.consentContainer .row {
margin-left: -15px;
margin-right: -15px;
box-sizing: border-box;
}
.consentContainer .row:before, .consentContainer .row:after {
clear: both;
content: " ";
display: table;
box-sizing: border-box;
}
.consentContainer .col-sm-9 {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
box-sizing: border-box;
}
.consentContainer .col-sm-3 {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
box-sizing: border-box;
}
/*
Right-to-left styles
*/
html[dir="rtl"] #analyticsContainer {
left: calc(-100% - 30px);
right: auto;
}
html[dir="rtl"] #analyticsReminder {
right: -30px;
left: auto;
}
html[dir="rtl"] #analyticsContainer.peek {
left: -100%;
right: auto;
}
html[dir="rtl"] #analyticsContainer.shown {
left: 0;
right: auto;
}
html[dir="rtl"] #popupUserConsentButton {
border-radius: 0 5px 5px 0;
}
html[dir="rtl"] .consentDefault {
border-left: 0;
border-right: 5px solid #2a3b49;
box-shadow: -13px 5px 25px #888888;
}
html[dir="rtl"] .consentContainer .closeConsent {
right: auto;
left: 5px;
}
@media (min-width: 768px) {
#analyticsContainer {
width: 500px;
right: -530px;
bottom: 75px;
}
#analyticsContainer.peek {
right: -500px;
}
#analyticsReminder {
bottom: auto;
top: 30px;
}
.consentContainer {
width: 500px;
}
.consentContainer .col-sm-3 {
float: left;
width: 25%;
}
.consentContainer .col-sm-9 {
float: left;
width: 75%;
}
html[dir="rtl"] #analyticsContainer {
left: -530px;
right: auto;
}
html[dir="rtl"] #analyticsContainer.peek {
left: -500px;
right: auto;
}
html[dir="rtl"] .consentContainer .col-sm-3 {
float: right;
width: 25%;
}
html[dir="rtl"] .consentContainer .col-sm-9 {
float: right;
width: 75%;
}
}
/*
Dark style
*/
html[data-style="dark"] .consentDefault {
background-color: #313131;
box-shadow: 13px 5px 25px #060606;
color: #d7d7d7;
border-color: #FF6C2C;
}
html[data-style="dark"] .consentContainer .closeConsent {
color: #a5a5a5;
}
html[data-style="dark"][dir="rtl"] .consentDefault {
box-shadow: -13px 5px 25px #060606;
}
html[data-style="dark"] #analytics-icon-arrow {
fill: #d7d7d7;
}
html[data-style="dark"] #popupUserConsentButton {
background-color: #434343;
border-radius: 0;
border: 1px solid #525252;
border-left: 0;
border-right: 0;
padding: 5px;
}
html[data-style="dark"] button#popupUserConsentButton::after {
content: " ";
width: 2px;
height: 100%;
background: #FF6C2C;
position: absolute;
top: 0;
}
html[data-style="dark"][dir="ltr"] button#popupUserConsentButton::after {
left: -2px;
}
html[data-style="dark"][dir="rtl"] button#popupUserConsentButton::after {
right: -2px;
}
.cp-webmail-consent-privacy-modal__content-title{
margin-top:0;
font-weight:300;
line-height:1.2;
font-size:1.5rem;
color:#243746;
text-align:center;
margin-bottom:var(--cp-spacer-3);
}
.cp-consent-privacy__input-container {
margin-bottom:var(--cp-spacer-2);
padding:0 var(--cp-spacer-3);
}
.cp-consent-privacy__description {
margin-bottom:var(--cp-spacer-5);
padding:0 var(--cp-spacer-3);
}
.external-link::after {
// stylelint-disable-next-line font-family-no-missing-generic-family-keyword
font-family: remixicon;
// NOTE: Renders a space followed by the external-link icon. A space character
// is used rather than margin or padding so that the space will scale properly
// across font sizes and link underlines will have no gaps.
content: " \ecaf";
}
</style>
[% END # Consent Flyout shown if analytics enabled on server-side. %]
<script type="text/javascript" src="[% theme_magic_url('libraries/ui-analytics/mixpanelSetup.js') %]"></script>
[% IF is_analytics_enabled_server_side && current_analytics_setting == 'on' %]
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-117050492-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
(function(){
var path = window.location.pathname;
if (path) {
var wholepath = path.split('/');
var custompath = wholepath.slice(2);
path = '/' + custompath.join('/');
}
var thelocation = window.location.protocol + "//" + window.location.host + path;
var page_identifier = '[% page_identifier %]'.trim();
page_identifier = !page_identifier || page_identifier === "Webmail-" ? "Webmail-" + path : page_identifier;
gtag('config', 'UA-117050492-1', {
'page_path': path,
'page_title': page_identifier,
'page_location': thelocation,
'anonymize_ip': true,
'sample_rate': [% sample_rate %],
'custom_map': {
'dimension1': 'cp-company-id',
'dimension2': 'cp-product-version',
'dimension3': 'cp-product-interface',
'dimension4': 'cp-product-theme-style',
'dimension5': 'cp-os',
'dimension6': 'cp-default-webmail-app'
}
});
gtag('event', 'cp_analytics', {
'cp-company-id': '[% get_company_id() %]',
'cp-product-version': '[% CPANEL.version() %]',
'cp-product-interface': 'Webmail',
'cp-product-theme-style': window.thisStyle,
'cp-os': '[% get_os_version() %]',
'cp-default-webmail-app': '[% default_webmail_app %]'
});
})();
</script>
[% END %]
Back to Directory
File Manager