Created
September 19, 2023 16:28
-
-
Save hrehman200/8bd588b802929e558abcc3abbf11cffa to your computer and use it in GitHub Desktop.
Revisions
-
hrehman200 created this gist
Sep 19, 2023 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,243 @@ <?php defined('BASEPATH') or exit('No direct script access allowed'); class Dashboard extends CI_Controller { public function __construct() { parent::__construct(); } static function date_compare($a, $b) { $t1 = strtotime($a['date']); $t2 = strtotime($b['date']); return $t1 - $t2; } public function index() { if ($this->User_model->verifyUser()) { if (@$_POST['date_range']) { if (strpos($_POST['date_range'], ' to ') !== false) { $start_date = explode(' to ', $_POST['date_range'])[0]; $end_date = explode(' to ', $_POST['date_range'])[1]; } else { $start_date = $end_date = $_POST['date_range']; } $start_date = DateTime::createFromFormat('m-d-Y', $start_date)->format('Y-m-d'); $end_date = DateTime::createFromFormat('m-d-Y', $end_date)->format('Y-m-d'); } else { $start_date = date('Y-m-d', strtotime('-7 days')); $end_date = date('Y-m-d', strtotime('-1 days')); $_POST['by_adunit_date'] = 'Date'; } if($start_date < '2023-06-27') { $admanager_by_date1 = $this->AdManager_model->get($_SESSION['user_id'], $start_date, '2023-06-26', 'Date'); $admanager_by_date2 = $this->AdManager_model->get($_SESSION['user_id'], '2023-06-27', $end_date, 'Date'); $admanager_by_date = array_merge($admanager_by_date1, $admanager_by_date2); } else { $admanager_by_date = $this->AdManager_model->get($_SESSION['user_id'], $start_date, $end_date, 'Date'); } $primis_by_date = $this->Primis_model->get($_SESSION['user_id'], $start_date, $end_date, 'Date'); // append primis records to admanager records $records = $admanager_by_date; foreach ($primis_by_date as $p) { $index = array_search($p['date'], array_column($records, 'date')); if ($index !== false) { $records[$index]['impressions'] += $p['impressions']; $records[$index]['revenue'] += $p['revenue']; $records[$index]['ecpm'] = round($records[$index]['revenue'] / $records[$index]['impressions'] * 1000, 2); } else { $records[] = $p; } } usort($records, 'self::date_compare'); $data['records']['date'] = $records; $admanager_by_adunit = $this->AdManager_model->get($_SESSION['user_id'], $start_date, $end_date, 'Ad Units'); $primis_by_adunit = $this->Primis_model->get($_SESSION['user_id'], $start_date, $end_date, 'Ad Units'); $data['records']['ad_unit'] = array_merge($admanager_by_adunit, $primis_by_adunit); // ad-level $admanager_adlevel = $this->AdManager_model->get($_SESSION['user_id'], $start_date, $end_date, 'Ad Units', true); $primis_adlevel = $this->Primis_model->get($_SESSION['user_id'], $start_date, $end_date, 'Ad Units', true); $data['records_adlevel'] = array_merge($admanager_adlevel, $primis_adlevel); // last 30 days record $start_date = date('Y-m-d', strtotime('-30 days')); $end_date = date('Y-m-d', strtotime('now')); // TODO: remove this temporary fix if($start_date < '2023-06-27') { $admanager_last_30_partial1 = $this->AdManager_model->get($_SESSION['user_id'], $start_date, '2023-06-26', 'Date', false, true); $admanager_last_30_partial2 = $this->AdManager_model->get($_SESSION['user_id'], '2023-06-27', $end_date, 'Date', false, true); $admanager_last_30 = array_merge($admanager_last_30_partial1, $admanager_last_30_partial2); } else{ $admanager_last_30 = $this->AdManager_model->get($_SESSION['user_id'], $start_date, $end_date, 'Date', false, true); } $primis_last_30 = $this->Primis_model->get($_SESSION['user_id'], $start_date, $end_date, 'Date'); $records_last_30 = $admanager_last_30; foreach ($primis_last_30 as $p) { $index = array_search($p['date'], array_column($records_last_30, 'date')); if ($index !== false) { $records_last_30[$index]['impressions'] += $p['impressions']; $records_last_30[$index]['revenue'] += $p['revenue']; $records_last_30[$index]['ecpm'] += $p['ecpm']; } else { $records_last_30[] = $p; } } usort($records_last_30, 'self::date_compare'); $data['records_last_30'] = $records_last_30; $domains = $this->Domain_model->getDomains($_SESSION['user_id']); $domains = array_map(function ($item) { return $item['domain']; }, $domains); $data['domains'] = implode(", ", $domains); $data['content'] = $this->load->view('adstats', $data, true); $this->load->view('layout', $data); } } public function dailymail($username, $download = false) { $start_date = date('Y-m-d', strtotime('-30 days')); //$start_date = date('Y-m-d', strtotime('2019-01-01')); $end_date = date('Y-m-d', strtotime('now')); // 51 for empower switch ($username) { case 'empower': $user_id = 51; break; case 'hellenic': $user_id = 71; break; } $admanager = $this->AdManager_model->get($user_id, $start_date, $end_date, 'Date'); $primis = $this->Primis_model->get($user_id, $start_date, $end_date, 'Date'); $records = $admanager; foreach ($primis as $p) { $index = array_search($p['date'], array_column($records, 'date')); if ($index !== false) { $records[$index]['impressions'] += $p['impressions']; $records[$index]['revenue'] += $p['revenue']; $records[$index]['ecpm'] = round($records[$index]['revenue'] / $records[$index]['impressions'] * 1000, 2); } else { $records[] = $p; } } $data['records_date'] = $records; foreach ($data['records_date'] as $i => &$row) { $admanager = $this->AdManager_model->get($user_id, $row['date'], $row['date'], 'Ad Unit'); $primis = $this->Primis_model->get($user_id, $row['date'], $row['date'], 'Ad Unit'); $row['adunits'] = array_merge($admanager, $primis); } $data['username'] = ucfirst($username); $content = $this->load->view('daily_email', $data, true); //echo $content; if ($download) { header('Content-Type: application/csv'); header('Content-Disposition: attachment; filename="' . $username . '.csv' . '";'); $attachment = $this->_createCsvString($data); echo $attachment; } else { echo $this->sendCsvEmail($data, $content, $username); } } private function _createCsvString($data) { // Open temp file pointer if (!$fp = fopen('php://temp', 'w+')) return FALSE; // Loop data and write to file pointer fputcsv($fp, ['Ad ID', 'Ad Name', 'Impressions', 'Clicks', 'CTR', 'Viewability', 'CPM', 'Revenue']); foreach ($data['records_date'] as $row) { fputcsv($fp, [$row['date'], '', $row['impressions'], '', '', '', $row['ecpm'], $row['revenue']]); foreach ($row['adunits'] as $adunit_row) { $ctr = number_format($adunit_row['clicks'] / $adunit_row['impressions'] * 100, 2) . '%'; $adunit_row['num_viewability'] = $adunit_row['num_viewability'] == 0 ? 1 : $adunit_row['num_viewability']; $viewability = number_format($adunit_row['total_av_viewable_impressions'] / $adunit_row['num_viewability'], 2) . '%'; fputcsv($fp, [$adunit_row['adunit_id'], $adunit_row['adunit_name'], $adunit_row['impressions'], $adunit_row['clicks'], $ctr, $viewability, $adunit_row['ecpm'], $adunit_row['revenue']]); } } fputcsv($fp, [ '', 'Total:', array_sum(array_column($data['records_date'], 'impressions')), '', '', '', '', array_sum(array_column($data['records_date'], 'revenue')), ]); // Place stream pointer at beginning rewind($fp); // Return the data return stream_get_contents($fp); } function sendCsvEmail($csvData, $body, $username, $to = '[email protected]', $from = 'theEngine <[email protected]>') { // This will provide plenty adequate entropy $multipartSep = '-----' . md5(time()) . '-----'; // Arrays are much more readable $headers = array( "From: $from", "Content-Type: multipart/mixed; boundary=\"$multipartSep\"" ); // Make the attachment $attachment = chunk_split(base64_encode($this->_createCsvString($csvData))); $subject = 'Last 30 dayAd Stats for ' . ucfirst($username); // Make the body of the message $body = "--$multipartSep\r\n" . "Content-Type: text/html;\r\n" . "\r\n" . "$body\r\n" . "--$multipartSep\r\n" . "Content-Type: text/csv\r\n" . "Content-Transfer-Encoding: base64\r\n" . "Content-Disposition: attachment; filename=\"empower.csv\"\r\n" . "\r\n" . "$attachment\r\n" . "--$multipartSep--"; // Send the email, return the result return @mail($to, $subject, $body, implode("\r\n", $headers)); } public function test() { //var_dump(preg_match('/instream$/', 'lovefraud_instream_1')); } }