CINXE.COM
VWO Engage (formerly PushCrew) Account Login
<!DOCTYPE html> <html class=no-js> <head> <meta charset=utf-8> <title>VWO Engage (formerly PushCrew) Account Login</title> <meta name=description content="Please use this link to log into your VWO Engage (formerly PushCrew) account, to check the status and reports of your campaigns."> <meta name=viewport content="width=device-width"> <link rel="shortcut icon" href="/favicon.ico"> <script> // Security warning console.log("%cWARNING!", "color: red; background: yellow; font-size: 24px;"); console.log("%cThis section is intended for developers only. Do not enter or paste code that you do not understand. If someone told you to copy and paste something, kindly report this to security@wingify.com.", "font-size: 18px;"); </script> <!-- bower:css --> <link rel="stylesheet" href="dist/vendor/bower-vendor.min.css?9e452ba1df"> <!-- endinject --> <!-- style:css --> <link rel="stylesheet" href="dist/css/style.min.css?cf7ddcdd87"> <!-- endinject --> <!-- Google Tag Manager --> <script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5MW3QC'); </script> <!-- End Google Tag Manager --> </head> <body class="vueApp"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5MW3QC" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="app layout-fixed-header usersession"> <div class="full-height bg-white"> <div class=center-wrapper> <div class=center-content> <div class="row no-margin"> <div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4"> <form role=form class=form-layout id="login" method="post"> <a href="/"> <img src="dist/images/logo_VWOEngage.png?v=2" class="center-block login_logo"/> </a> <div class=form-inputs> <input type=email class="form-control input-lg" placeholder="Email Address" data-val="true" pattern=".{0,200}" title="Email must be of a max of 200 characters" data-val-required="Email is required." id="email" name="email" required="required" type="email" value=""> <input type=password class="form-control input-lg" placeholder=Password data-val="true" pattern=".{6,72}" title="6 to 72 characters" data-val-required="The Password field is required." id="password" name="password" required="required" type="password"> <label><input type="checkbox" value="true" id="remember_me" name="remember" style="margin-right: 6px; font-size: 16px;"/>Remember me</label> </div> <div class="g-recaptcha show-captcha hidden mb10" data-sitekey="6LdnPVgUAAAAAK4KgkHhl9a9EHGP_Jugo6UZY0f2"></div> <!-- staging key --> <!-- <div class="g-recaptcha show-captcha hidden mb10" data-sitekey="6Lc8YKIUAAAAALoz0rBM3T-jTqKEErd-23mfSVMh"></div> --> <!-- staging key end --> <button class="btn btn-success btn-block btn-lg mb15" type=submit > <span>Sign in</span> </button> <p> <a href="forgot-password.php">Forgot your password?</a> </p> <div class="alert alert-danger invalid-login-message-bar hide-visible-element" role="alert"> <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <span class="error-message-login">Your username or password did not match</span> </div> </form> </div> </div> </div> </div> </div> <script type="text/javascript"> var pushcrewglobal = {}; </script> <!-- bower:js --> <script src="dist/vendor/bower-vendor.min.js?da73cf2162"></script> <!-- endinject --> <!-- reactdeps:js --> <!-- <script src="dist/js/vendor-react.js"></script> --> <!-- endinject --> <!-- inject:js --> <script src="dist/js/app.min.js"></script> <!-- endinject --> <script type="text/javascript"> // Time zone name to do the conversions using moment var timezone_name = ''; var timezone_name_moment = ''; // Check wether timezone_offset is set or not in DB if(timezone_name){ //Timezone name to be used by moment for example Asia/Calcutta timezone_name_moment = timezone_name.split(" ")[1]; // Get the timezone and find it's DST included GMT value using moment if(window.moment && window.moment.tz) { timezone_name = `(GMT${moment.tz(timezone_name_moment).format('Z')}) ${timezone_name_moment}` } setTimezone(); } function setTimezone(){ // Timezone name to be displayed on UI var tz = timezone_name.replace('(','').replace(')',''); if(window.location.href.indexOf('notifications.php') > 1){ var pushStatusNonIndiviualArray = false; if(pushStatusNonIndiviualArray && moment && timezone_name_moment){ var table = document.getElementById("sent_notifications_details_table"); document.getElementById("created_on_timezone").innerHTML = '(' + tz + ')'; for (var i = 0, row; row = table.rows[i]; i++) { row.cells[4].innerHTML = getLocalDateTime(pushStatusNonIndiviualArray[i].created_time_stamp, true); } } } if(window.location.href.indexOf('scheduled-notifications.php') > 1){ var scheduledNotificationNonIndiviualArray = false; if(scheduledNotificationNonIndiviualArray && moment && timezone_name_moment){ var table = document.getElementById("scheduled_notifications_details_table"); document.getElementById("scheduled_notification_timezone").innerHTML = '(' + tz + ')'; for (var i = 0, row; row = table.rows[i]; i++) { date = getLocalDateTime(scheduledNotificationNonIndiviualArray[i].scheduled_date + " " +scheduledNotificationNonIndiviualArray[i].scheduled_time ,false); row.cells[1].innerHTML = date.format('MMMM Do YYYY'); row.cells[2].innerHTML = date.format('H:mm'); } } } } function getLocalDateTime(utcDateTime,setFormat) { if(setFormat) return moment.utc(utcDateTime).tz(timezone_name_moment).format('MMMM Do YYYY, H:mm'); else return moment.utc(utcDateTime).tz(timezone_name_moment); }; </script> <!-- To show Tax Payer Form --> <!-- <script type='text/javascript'> (function taxPayer() { // CONSTS var DAYS_TO_SHOW = 15; var SECONDS_IN_A_DAY = 86400; var START_DATE = '2018-07-26'; var REMINDER_DELAY_IN_DAYS = 1; var LAST_SEEN_KEY = 'pushcrew-tax-payer-modal-last-shown'; var SHOW_MODAL_AFTER_TIME_EXPIRES = true; // Global Variables var startDateTimeStamp = moment(START_DATE).unix(); var endDateTimeStamp = startDateTimeStamp + DAYS_TO_SHOW * SECONDS_IN_A_DAY; var currentTimeStamp = moment().unix(); var lastSeenTimeStamp = getLastSeen(); var remainingDays = parseInt((endDateTimeStamp - currentTimeStamp) / SECONDS_IN_A_DAY, 10); function getLastSeen() { return localStorage.getItem(LAST_SEEN_KEY); } function setLastSeen() { localStorage.setItem(LAST_SEEN_KEY, moment().unix()); } function removeLastSeen() { localStorage.removeItem(LAST_SEEN_KEY) } function isLastSeenAboveReminderTime() { return !lastSeenTimeStamp || ((currentTimeStamp - lastSeenTimeStamp) >= REMINDER_DELAY_IN_DAYS * SECONDS_IN_A_DAY); } function shouldShowTaxPayerModal() { return !window.isTaxPayerIdConfigured && currentTimeStamp >= startDateTimeStamp && (window.location.search.indexOf('configure-tax-payer') !== -1 || isLastSeenAboveReminderTime()); } function shouldShowMainModal() { return shouldShowTaxPayerModal() && remainingDays > 0 } function shouldShowZeroDaysModal() { return shouldShowTaxPayerModal() && (remainingDays === 0 && lastSeenTimeStamp || (SHOW_MODAL_AFTER_TIME_EXPIRES && window.location.search.indexOf('configure-tax-payer') !== -1)) } function isValidTaxID(taxPayerID) { var error = taxPayerID ? '' : 'Please enter Tax Payer ID'; $('#tax-payer-id-form-error').text(error); return !error; } function ajaxRequest(fields) { $.ajax( Object.assign({ url: '/admin/save-taxpayer-id.php', type:'POST', beforeSend: function(request) { request.setRequestHeader("Authorization", pushcrewglobal.restApiCode); } }, fields) ); } function saveTaxPayerId(payload) { $('#submit-tax-payer-id-spinner').removeClass('hide'); ajaxRequest( { data: payload, success: function(response) { response = JSON.parse(response); if (response.status === 'success') { $('#update-tax-payer-id-modal').modal('hide'); $('#tax-payer-success-modal').modal('show'); } else { $('#tax-payer-id-form-error').text(response.message); } }, error: function() { $('#tax-payer-id-form-error').text('Oops. Something snapped. Please try again.'); }, complete: function() { $('#submit-tax-payer-id-spinner').addClass('hide'); removeLastSeen() } } ); } function saveNoTaxPayerId(payload) { $('#submit-tax-payer-id-not-available-spinner').removeClass('hide'); ajaxRequest( { data: payload, success: function(response) { response = JSON.parse(response); if (response.status === 'success') { $('#tax-payer-id-not-available-modal').modal('hide'); } else { $('#tax-payer-id-not-available-error').text(response.message); } }, error: function() { $('#tax-payer-id-not-available-error').text('Oops. Something snapped. Please try again.'); }, complete: function() { $('#submit-tax-payer-id-not-available-spinner').addClass('hide'); removeLastSeen() } } ); } function initWatchers() { $('#tax-payer-id').on('input', function(){ var taxPayerID = ($('#tax-payer-id').val() || '').trim(); isValidTaxID(taxPayerID); }) $('#submit-tax-payer-id').on('click', function(){ var taxPayerID = ($('#tax-payer-id').val() || '').trim(); if (isValidTaxID(taxPayerID)) { saveTaxPayerId({ taxPayerID: taxPayerID }); } }) $('#tax-payer-remind-later').on('click', function() { $('#tax-payer-remind-later-modal').modal('show'); setLastSeen(); }) $('#tax-payer-id-not-available-button').on('click', function() { $('#tax-payer-id-not-available-modal').modal('show'); }) $('#tax-payer-id-not-available-go-back-button').on('click', function() { $('#update-tax-payer-id-modal').modal('show'); }) $('#submit-tax-payer-id-not-available').on('click', function() { saveNoTaxPayerId({ taxPayerID: 'NA' }); }) } function init() { if (shouldShowMainModal()) { initWatchers(); $('#update-tax-payer-id-modal').modal('show'); $('#tax-payer-reminder-remaining-days').text(remainingDays); } else if (shouldShowZeroDaysModal()) { $('#zero-days-remaining-tax-payer-id-modal').modal('show'); } } init(); })() </script> --> <!-- Start of vwo Zendesk Widget scripts and styles --> <style> /* Hide 'help' zendesk launcher button */ .zEWidget-launcher { display: none; } </style> <!-- Start of vwo Zendesk Widget script --> <script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=2f0f5392-afc7-4014-8585-ad12ff1d4fa6"> </script> <script type="text/javascript"> /** * AIM: Zendesk doesn't allow to send some background data. Only the data present in it's form is send to it. * APPROACH: The simplest approach is to create the form fields corresponding to the background data that we want to send * and hide it after filling it's value manually. * * We have defined a variable 'hideFormFields'. If in future any such new field comes, just add ID in this array and everything will work. * */ function setAndHideFormFields() { var hideFormFields = { 360006228213: window.hash, 360007457274: window.plan_type }; var interval = setInterval(function() { var zendeskFormIFrame = document.querySelector('.zEWidget-webWidget'); var formWrapper = zendeskFormIFrame && zendeskFormIFrame.contentWindow && zendeskFormIFrame.contentWindow.document && zendeskFormIFrame.contentWindow.document.querySelector('form .src-component-container-ScrollContainer-container .src-component-container-ScrollContainer-content .src-component-submitTicket-SubmitTicketForm-formWrapper'); if (zendeskFormIFrame && formWrapper) { clearInterval(interval); var formFields = formWrapper && formWrapper.children || []; formFields = [].slice.call(formFields); for (var field of formFields) { var matchedField = field.querySelector('input[name]'); var name = matchedField && matchedField.getAttribute('name'); if (name && hideFormFields.hasOwnProperty(name)) { field.style.display = 'none'; matchedField.value = matchedField.value || hideFormFields[name]; } }; }; }, 100); }; // This is the config used by zendesk to show default settings function setFormToDisplay() { window.zESettings = { webWidget: { contactForm: { // Specifies which forms to show at start, we can show list of forms as well. // It's needed as the default form at zendesk admin is different from what we want to show. ticketForms: [ { id: 360000104434 } ], // Prefill the fields fields: [ { id: 360006228213, prefill: { '*': window.hash } }, { id: 360007457274, prefill: { '*': window.plan_type } } ], tags: ['pushcrew_email'] }, } }; }; function setUserDetails() { zE(function() { window.pushcrew_user && zE.identify({ name: window.pushcrew_user && window.pushcrew_user.name, email: window.pushcrew_user && window.pushcrew_user.email }); }); }; window.onload = function init() { setAndHideFormFields(); // For painting subaccount // Below safe check is included as footer.php executes even on login/logout pages but 'paintAccountSwitcher' is not available on windows on these routes. window.paintAccountSwitcher && window.paintAccountSwitcher(); $('ul.pushcrew-subaccount-list').css({ overflowY: 'scroll', maxHeight: Math.floor(window.innerHeight * 0.6) + 'px' }); }; window._resetZendeskFormFields = function() { setAndHideFormFields(); } setFormToDisplay(); setUserDetails(); </script> <!-- End of vwo Zendesk Widget scripts and styles --> <script type='text/javascript'> // Affiliate Program var partner = /[?&]partner=([^&#]*)/.exec(window.location.href); if (partner) { // If referral code is valid and corresponding account is active then only update the cookie. $.ajax({ url: '/checkAffiliateCode.php', type: 'POST', data: { '__pc_referral_code': partner[1] }, success: function(response) { var res = JSON.parse(response); if(res.status === 'success') { // max-age is 60 days document.cookie = '__pc_referral_code=' + partner[1] + '; max-age=5184000; path=/'; } } }); } </script> </div> </body> </html>