| <?php | |
| /** | |
| * Copyright (c) 2015, 2018 Eclipse Foundation. | |
| * | |
| * This program and the accompanying materials are made | |
| * available under the terms of the Eclipse Public License 2.0 | |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ | |
| * | |
| * Contributors: | |
| * Eric Poirier (Eclipse Foundation) - initial API and implementation | |
| * Christopher Guindon (Eclipse Foundation) | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 | |
| */ | |
| require_once(realpath(dirname(__FILE__) . "/../../system/app.class.php")); | |
| require_once(realpath(dirname(__FILE__) . "/../../system/session.class.php")); | |
| require_once(realpath(dirname(__FILE__) . "/../../system/file_export.class.php")); | |
| class AdReports { | |
| private $App; | |
| private $FileExport = NULL; | |
| private $impressions = NULL; | |
| private $interval = NULL; | |
| private $interval_plus_one = NULL; | |
| private $Session = NULL; | |
| private $state = ""; | |
| public function __construct() { | |
| $this->App = new App(); | |
| $this->FileExport = new FileExport(); | |
| // Require login for this page. | |
| // Anonymous users get redirected to login page | |
| $this->Session = $this->App->useSession('required'); | |
| $this->Friend = $this->Session->getFriend(); | |
| $this->state = $this->App->getHTTPParameter('state','POST'); | |
| if ($this->state == 'exportCsv') { | |
| $this->FileExport->buildCsv('ad-reports', $this->getImpressions(), array('campaignKey','date','impressions','clicks','Ratio (%)')); | |
| } | |
| } | |
| public function outputPage($pageTitle = 'Eclipse Ads Report') { | |
| $html = ""; | |
| // Print the output if the user is a commiter | |
| if($this->state != 'not-staff') { | |
| ob_start(); | |
| include("tpl/ad_reports.tpl.php"); | |
| $html = ob_get_clean(); | |
| } | |
| return $html; | |
| } | |
| public function getImpressions() { | |
| if (is_null($this->impressions)) { | |
| $this->_setImpressions(); | |
| } | |
| return $this->impressions; | |
| } | |
| /** | |
| * This function returns the interval value | |
| * @param string | |
| * @return string | |
| * */ | |
| private function _getInterval($interval = "") { | |
| $this->interval = 10; | |
| if ($interval == 'default') { | |
| return $this->interval; | |
| } | |
| if ($interval == 'plus_one') { | |
| return $this->interval ++; | |
| } | |
| } | |
| /** | |
| * This function creates a new temporary impressions table | |
| * */ | |
| private function _fetchImpressions() { | |
| $sql = "SELECT /* eclipse.org-common:classes/ads/adReports.class.php:92 */ | |
| campaignKey, | |
| count(*) as impressions, | |
| str_to_date(concat(yearweek(TimeImpressed), ' Sunday'), '%X%V %W') as date | |
| FROM CampaignImpressions | |
| WHERE TimeImpressed > (NOW()-INTERVAL ". $this->_getInterval('plus_one'). " WEEK) | |
| GROUP BY campaignKey, date"; | |
| $result = $this->App->eclipse_sql($sql); | |
| $array = array(); | |
| while ($row = mysql_fetch_array($result)) { | |
| $array[] = array( | |
| 'campaignKey' => $row['campaignKey'], | |
| 'impressions' => $row['impressions'], | |
| 'date' => $row['date'], | |
| ); | |
| } | |
| return $array; | |
| } | |
| /** | |
| * This function creates a new temporary Clicks table | |
| * */ | |
| private function _fetchClicks() { | |
| $sql = "SELECT /* eclipse.org-common:classes/ads/adReports.class.php:115 */ | |
| campaignKey, | |
| count(*) as clicks, | |
| str_to_date(concat(yearweek(TimeClicked), ' Sunday'), '%X%V %W') as date | |
| FROM CampaignClicks | |
| WHERE TimeClicked > (NOW()-INTERVAL ". $this->_getInterval('plus_one'). " WEEK) | |
| GROUP BY campaignkey, date"; | |
| $result = $this->App->eclipse_sql($sql); | |
| $array = array(); | |
| while ($row = mysql_fetch_array($result)) { | |
| $array[] = array( | |
| 'campaignKey' => $row['campaignKey'], | |
| 'clicks' => $row['clicks'], | |
| 'date' => $row['date'], | |
| ); | |
| } | |
| return $array; | |
| } | |
| /** | |
| * This function merges the two new temporary tables | |
| * */ | |
| private function _setImpressions() { | |
| $clicks = $this->_fetchClicks(); | |
| $impressions = $this->_fetchImpressions(); | |
| $combined_array = array(); | |
| foreach ($impressions as $i) { | |
| $i['clicks'] = 0; | |
| foreach ($clicks as $c) { | |
| if (!empty($c['clicks']) && strcasecmp($c['campaignKey'], $i['campaignKey']) == 0 && $c['date'] == $i['date']) { | |
| $i['clicks'] = $c['clicks']; | |
| } | |
| } | |
| $i['ratio'] = $i['clicks'] / $i['impressions'] * 100; | |
| $combined_array[] = $i; | |
| } | |
| $this->impressions = $combined_array; | |
| } | |
| } |