From 14bb02f2d201bdf4a43968947bd07aed625d1279 Mon Sep 17 00:00:00 2001 From: BlkPh0x Date: Thu, 5 Oct 2023 07:51:49 +1100 Subject: [PATCH] Update campaign_results.min.js Add simple and clean csv output --- static/js/dist/app/campaign_results.min.js | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/static/js/dist/app/campaign_results.min.js b/static/js/dist/app/campaign_results.min.js index 5f45ce59..416675ba 100644 --- a/static/js/dist/app/campaign_results.min.js +++ b/static/js/dist/app/campaign_results.min.js @@ -198,6 +198,97 @@ function completeCampaign() { } }) } +function exportAsCleanCSV(scope) { + var csvScope = null; + var filename = campaign.name + ' - ' + capitalize(scope) + '.csv'; + + switch (scope) { + case "results": + csvScope = campaign.results; + break; + case "events": + csvScope = campaign.timeline; + break; + case "cleanresults": + csvScope = campaign.cleanResults; // Replace with your clean results data + break; + } + + if (!csvScope) { + return; + } + + // Create an array to hold the CSV data + var csvData = []; + + // Add the CSV header + var header = ['Email', 'Email Opened', 'Clicked Link', 'Submitted Data']; + csvData.push(header); + + // Define a helper function to convert boolean to string + function boolToString(value) { + return value ? 'true' : 'false'; + } + + // Add CSV rows for each entry in csvScope + csvScope.forEach(function (entry) { + var email = entry.email; + var status = entry.status; + + // Initialize status flags + var emailOpened = false; + var clickedLink = false; + var submittedData = false; + + // Update status flags based on the status value + switch (status) { + case 'Email Opened': + emailOpened = true; + break; + case 'Clicked Link': + emailOpened = true; // If clicked link, email is also opened + clickedLink = true; + break; + case 'Submitted Data': + emailOpened = true; // If submitted data, email is also opened + clickedLink = true; // If submitted data, link is also clicked + submittedData = true; + break; + } + + // Add the CSV row + var csvRow = [email, boolToString(emailOpened), boolToString(clickedLink), boolToString(submittedData)]; + csvData.push(csvRow); + }); + + // Convert the CSV data array to a CSV string + var csvString = csvData.map(function (row) { + return row.join(','); + }).join('\n'); + + // Create a Blob with the CSV string + var csvBlob = new Blob([csvString], { + type: 'text/csv;charset=utf-8;' + }); + + // Create a download link + var csvURL = window.URL.createObjectURL(csvBlob); + var dlLink = document.createElement('a'); + dlLink.href = csvURL; + dlLink.setAttribute('download', filename); + + // Trigger the download + dlLink.click(); + + // Clean up + window.URL.revokeObjectURL(csvURL); +} + +// Example usage: +// exportAsCSV('results'); +// exportAsCSV('events'); +// exportAsCSV('cleanresults'); // Add this line to export clean results + // Exports campaign results as a CSV file function exportAsCSV(scope) {