/** * The final "child" implementation of the parental abstract method. * * @see OA_Admin_Statistics_Common::start() */ function start() { // Get parameters $publisherId = $this->_getId('publisher'); $zoneId = $this->_getId('zone'); $adId = $this->_getId('ad', 0); // Security check OA_Permission::enforceAccount(OA_ACCOUNT_ADMIN, OA_ACCOUNT_MANAGER, OA_ACCOUNT_TRAFFICKER); $this->_checkAccess(array('publisher' => $publisherId, 'zone' => $zoneId)); // Cross-entity security check if (!empty($zoneId)) { $aAds = $this->getZoneBanners($zoneId); if (!isset($aAds[$adId])) { $this->noStatsAvailable = true; } } // Add standard page parameters $this->aPageParams = array('affiliateid' => $publisherId, 'zoneid' => $zoneId, 'campaignid' => $aAds[$adId]['placement_id'], 'bannerid' => $adId); // Load the period preset and stats breakdown parameters $this->_loadPeriodPresetParam(); $this->_loadStatsBreakdownParam(); // Load $_GET parameters $this->_loadParams(); // HTML Framework if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN) || OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) { $this->pageId = '2.4.2.2.2'; $this->aPageSections = array($this->pageId); } elseif (OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) { $this->pageId = '1.2.2.2'; $this->aPageSections = array($this->pageId); } // Add breadcrumbs $this->_addBreadcrumbs('zone', $zoneId); $this->addCrossBreadcrumbs('banner', $adId); // Add context $params = $this->aPageParams; foreach ($aAds as $k => $v) { $params['campaignid'] = $v['placement_id']; $params['bannerid'] = $k; phpAds_PageContext(MAX_buildName($k, MAX_getAdName($v['name'], null, null, $v['anonymous'], $k)), $this->_addPageParamsToURI($this->pageName, $params, true), $adId == $k); } // Add shortcuts if (!OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) { $this->_addShortcut($GLOBALS['strAffiliateProperties'], 'affiliate-edit.php?affiliateid=' . $publisherId, 'images/icon-affiliate.gif'); } $this->_addShortcut($GLOBALS['strZoneProperties'], 'zone-edit.php?affiliateid=' . $publisherId . '&zoneid=' . $zoneId, 'images/icon-zone.gif'); // Prepare the data for display by output() method $aParams = array('zone_id' => $zoneId, 'ad_id' => $adId); $this->prepare($aParams, 'stats.php'); }
/** * Get banner stats * * @param array Query parameters * @param int Tree level * @param string Expand GET parameter, used only when called from other get methods * @return Entities array */ function getBanners($aParams, $level, $expand = '') { global $phpAds_IAB; require_once MAX_PATH . '/www/admin/lib-size.inc.php'; $aParams['include'] = array('placement_id'); // Needed to fetch the advertiser_id $aParams['exclude'] = array('zone_id'); $this->prepareData($aParams); $period_preset = MAX_getStoredValue('period_preset', 'today'); $aAds = $this->mergeData($aParams, 'ad_id'); MAX_sortArray($aAds, $this->listOrderField == 'id' ? 'ad_id' : $this->listOrderField, $this->listOrderDirection == 'up'); $aEntitiesData = array(); foreach ($aAds as $bannerId => $banner) { $banner['active'] = $this->_hasActiveStats($banner); if ($this->startLevel > $level || !$this->hideInactive || $banner['active']) { $this->_summarizeStats($banner); // mask banner name if anonymous campaign $campaign = Admin_DA::getPlacement($banner['placement_id']); $campaignAnonymous = $campaign['anonymous'] == 't' ? true : false; if ($banner['type'] == DataObjects_Banners::BANNER_TYPE_MARKET) { $marketBannerNameAndAdvertiserId = $this->getMarketBannerName($banner['name']); $banner['name'] = $marketBannerNameAndAdvertiserId['name']; $banner['marketAdvertiserId'] = $marketBannerNameAndAdvertiserId['marketAdvertiserId']; } $banner['name'] = MAX_getAdName($banner['name'], null, null, $campaignAnonymous, $bannerId); $banner['prefix'] = 'b'; $banner['id'] = $bannerId; $banner['linkparams'] = "clientid={$banner['advertiser_id']}&campaignid={$banner['placement_id']}&bannerid={$bannerId}&"; if (is_array($aParams) && count($aParams) > 0) { foreach ($aParams as $key => $value) { if ($key != "include" && $key != "exclude") { $banner['linkparams'] .= $key . "=" . $value . "&"; } } } else { $banner['linkparams'] .= "&"; } $banner['linkparams'] .= "period_preset={$period_preset}&period_start=" . MAX_getStoredValue('period_start', date('Y-m-d')) . "&period_end=" . MAX_getStoredValue('period_end', date('Y-m-d')); $banner['expanded'] = false; $banner['icon'] = MAX_getEntityIcon('ad', $banner['active'], $banner['type'], $banner['marketAdvertiserId']); $aEntitiesData[] = $banner; } elseif ($this->startLevel == $level) { $this->hiddenEntities++; } } return $aEntitiesData; }
$doBanners->campaignid = $campaignid; $doBanners->addListorderBy($listorder, $orderdirection); $doBanners->selectAdd('storagetype AS type'); $doBanners->find(); $countActive = 0; while ($doBanners->fetch() && ($row = $doBanners->toArray())) { $banners[$row['bannerid']] = $row; $banners[$row['bannerid']]['active'] = $banners[$row['bannerid']]["status"] == OA_ENTITY_STATUS_RUNNING; $banners[$row['bannerid']]['description'] = $strUntitled; if (isset($banners[$row['bannerid']]['alt']) && $banners[$row['bannerid']]['alt'] != '') { $banners[$row['bannerid']]['description'] = $banners[$row['bannerid']]['alt']; } // mask banner name if anonymous campaign $campaign_details = Admin_DA::getPlacement($row['campaignid']); $campaignAnonymous = $campaign_details['anonymous'] == 't' ? true : false; $banners[$row['bannerid']]['description'] = MAX_getAdName($row['description'], null, null, $campaignAnonymous, $row['bannerid']); $banners[$row['bannerid']]['expand'] = 0; if ($row['status'] == OA_ENTITY_STATUS_RUNNING) { $countActive++; } // Build banner preview if ($row['bannerid'] && !empty($GLOBALS['_MAX']['PREF']['ui_show_campaign_preview']) && empty($_GET['nopreview'])) { $bannerCode = MAX_bannerPreview($row['bannerid']); } else { $bannerCode = ''; } $banners[$row['bannerid']]['preview'] = $bannerCode; } $aCount = array('banners' => 0, 'banners_hidden' => 0); // Figure out which banners are inactive and prepare trimmed URLs for display $bannersHidden = 0;
function addCrossBreadCrumbs($type, $entityId, $level = 0) { $cache = $this->crossEntitiesCache; switch ($type) { case 'campaign': if ($this->noStatsAvailable) { $this->_addBreadcrumb('', MAX_getEntityIcon('placement'), $type); } else { $this->_addBreadcrumb(MAX_buildName($entityId, MAX_getPlacementName($cache[$entityId])), MAX_getEntityIcon('placement'), $type); } break; case 'banner': if ($this->noStatsAvailable) { $this->_addBreadcrumb('', MAX_getEntityIcon('ad'), $type); } else { $this->_addBreadcrumb(MAX_buildName($entityId, MAX_getAdName($cache[$entityId]['name'], null, null, $cache[$entityId]['anonymous'], $entityId)), MAX_getEntityIcon('ad'), $type); } break; case 'publisher': if ($this->noStatsAvailable) { $this->_addBreadcrumb('', MAX_getEntityIcon('publisher'), ''); } else { $this->_addBreadcrumb(MAX_buildName($entityId, MAX_getPublisherName($cache[$entityId]['name'], null, $cache[$entityId]['anonymous'], $entityId)), MAX_getEntityIcon('publisher'), 'website'); } break; case 'zone': if ($this->noStatsAvailable) { $this->_addBreadcrumb('', MAX_getEntityIcon('zone'), $type); } else { $this->_addBreadcrumb(MAX_buildName($entityId, MAX_getZoneName($cache[$entityId]['name'], null, $cache[$entityId]['anonymous'], $entityId)), MAX_getEntityIcon('zone'), $type); } break; } }
/** * Mask entities which have the hidden flag set * * @param array Entities array * @param string Name which should be used for hidden entitiies */ function maskHiddenEntities(&$aEntitiesData, $entityType) { $this->fixLinkParams($aEntitiesData); foreach (array_keys($aEntitiesData) as $entityId) { if (isset($aEntitiesData[$entityId]['hidden']) && $aEntitiesData[$entityId]['hidden']) { switch ($entityType) { case 'advertiser': $aEntitiesData[$entityId]['name'] = MAX_getAdvertiserName($aEntitiesData[$entityId]['name'], null, true, $aEntitiesData[$entityId]['id']); break; case 'campaign': $tmp = array('placement_id' => $aEntitiesData[$entityId]['id'], 'name' => $aEntitiesData[$entityId]['name'], 'anonymous' => true); $aEntitiesData[$entityId]['name'] = MAX_getPlacementName($tmp); break; case 'banner': $aEntitiesData[$entityId]['name'] = MAX_getAdName($aEntitiesData[$entityId]['name'], null, null, true, $aEntitiesData[$entityId]['id']); break; case 'publisher': $aEntitiesData[$entityId]['name'] = MAX_getPublisherName($aEntitiesData[$entityId]['name'], null, true, $aEntitiesData[$entityId]['id']); break; case 'zone': $aEntitiesData[$entityId]['name'] = MAX_getZoneName($aEntitiesData[$entityId]['name'], null, true, $aEntitiesData[$entityId]['id']); break; } //$aEntitiesData[$entityId]['num_children'] = 0; //unset($aEntitiesData[$entityId]['subentities']); } } if ($this->listOrderField == 'name' || $this->listOrderField == 'id') { MAX_sortArray($aEntitiesData, $this->listOrderField, $this->listOrderDirection == 'up'); } }
/** * A private method to create and add the "connection detail" worksheet * of the report. * * @access private */ function _addConnectionDetailWorksheet($aConnections, $aTrackerVariables) { // Create a worksheet $worksheetName = $this->translate("Connection Detail"); $this->_oReportWriter->createReportWorksheet($worksheetName, $this->_name, $this->_getReportParametersForDisplay(), $this->_getReportWarningsForDisplay()); $aStatus = $this->_getConnectionStatuses(); // Create a subsection for each tracker foreach ($aTrackerVariables as $trackerId => $aTracker) { $trackerAnonymous = $this->_isTrackerLinkedToAnonymousCampaign($trackerId); $trackerName = MAX_getTrackerName($aTracker['tracker_name'], null, $trackerAnonymous, $trackerId); $aHeaders = array(); $key = $this->translate("Connection ID"); $aHeaders[$key] = 'id'; $key = $this->translate("Connection Date / Time"); $aHeaders[$key] = 'datetime'; if (!empty($aTracker['variables'])) { foreach ($aTracker['variables'] as $trackerVariableId => $aTrackerVariable) { $variableName = !empty($aTrackerVariable['tracker_variable_description']) ? $aTrackerVariable['tracker_variable_description'] : $aTrackerVariable['tracker_variable_name']; // Don't display if the user is a publisher and the variable is hidden if (!OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER) || $aTrackerVariable['tracker_variable_hidden'] != 't') { switch ($aTrackerVariable['tracker_variable_data_type']) { case 'int': case 'numeric': $aHeaders[$variableName] = 'numeric'; break; case 'date': $aHeaders[$variableName] = 'datetime'; break; default: $aHeaders[$variableName] = 'text'; break; } } } } $key = $this->translate("Approval Status"); $aHeaders[$key] = 'text'; $key = $this->translate("Comment"); $aHeaders[$key] = 'text'; if ($this->_shouldDisplaySourceField()) { $key = $GLOBALS['strSource']; $aHeaders[$key] = 'text'; } $key = $this->translate("Advertiser Name"); $aHeaders[$key] = 'text'; $key = $GLOBALS['strTrackerName']; $aHeaders[$key] = 'text'; $key = $this->translate("Ad Name"); $aHeaders[$key] = 'text'; $key = $this->translate("Website Name"); $aHeaders[$key] = 'text'; $key = $this->translate("Zone Name"); $aHeaders[$key] = 'text'; $key = $this->translate("Connection Type"); $aHeaders[$key] = 'text'; $key = $this->translate("Connecting Value Date / Time"); $aHeaders[$key] = 'datetime'; $key = $this->translate("IP Address"); $aHeaders[$key] = 'text'; $key = $GLOBALS['strCountry']; $aHeaders[$key] = 'text'; $key = $GLOBALS['strDomain']; $aHeaders[$key] = 'text'; $key = $GLOBALS['strLanguage']; $aHeaders[$key] = 'text'; $key = $GLOBALS['strOS']; $aHeaders[$key] = 'text'; $key = $GLOBALS['strBrowser']; $aHeaders[$key] = 'text'; $key = $GLOBALS['strWindowDelay']; $aHeaders[$key] = 'text'; $aData = array(); if (!empty($aConnections[$trackerId]['connections'])) { $row = 0; foreach ($aConnections[$trackerId]['connections'] as $connectionId => $aConnection) { // Skip connections with a hidden status if (!isset($aStatus[$aConnection['connection_status']])) { continue; } $aData[$row][] = $connectionId; $aData[$row][] = $aConnection['tracker_date_time']; if (!empty($aTracker['variables'])) { foreach ($aTracker['variables'] as $trackerVariableId => $aTrackerVariable) { // Don't display if the user is a publisher and the variable is hidden if (!OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER) || $aTrackerVariable['tracker_variable_hidden'] != 't') { $value = $aConnection['variables'][$trackerVariableId]['tracker_variable_value']; if ($aTrackerVariable['tracker_variable_data_type'] == 'date') { // Change value to match Excel format $value = $this->_oReportWriter->convertToDate($value); } $aData[$row][] = $value; } } } $aData[$row][] = $this->_decodeConnectionStatus($aConnection['connection_status']); $aData[$row][] = $aConnection['connection_comments']; if ($this->_shouldDisplaySourceField()) { $aData[$row][] = $aConnection['connection_channel']; } $aData[$row][] = MAX_getAdvertiserName($aConnection['advertiser_name'], null, $trackerAnonymous, $aConnection['advertiser_id']); $aData[$row][] = $trackerName; $aData[$row][] = MAX_getAdName($aConnection['ad_name'], $aConnection['ad_alt'], null, $trackerAnonymous, $aConnection['ad_id']); $aData[$row][] = MAX_getPublisherName($aConnection['publisher_name'], null, $trackerAnonymous, $aConnection['publisher_id']); $aData[$row][] = MAX_getZoneName($aConnection['zone_name'], null, $trackerAnonymous, $aConnection['zone_id']); $aData[$row][] = $this->_decodeConnectionType($aConnection['connection_action']); $aData[$row][] = $aConnection['connection_date_time']; $aData[$row][] = $aConnection['connection_ip_address']; $aData[$row][] = $aConnection['connection_country']; $aData[$row][] = OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER) && $trackerAnonymous ? '' : $aConnection['connection_domain']; $aData[$row][] = $aConnection['connection_language']; $aData[$row][] = $aConnection['connection_os']; $aData[$row][] = $aConnection['connection_browser']; $aData[$row][] = $aConnection['window_delay']; $row++; } } $this->_oReportWriter->createReportSection($worksheetName, $trackerName, $aHeaders, $aData, 30); } }
/** * A private method that can be inherited and used by children classes to * output the context in the left navigation bar. * * {@uses phpAds_PageContext()} */ function _showContext($type, $current_id = 0) { if ($this->useDailyClass && $type == 'days') { // Use the helper class contect method instead $aArray = array('period_start' => MAX_getStoredValue('period_start', date('Y-m-d')), 'period_end' => MAX_getStoredValue('period_end', date('Y-m-d'))); $aDates = array_reverse($this->oHistory->getDatesArray($aArray, 'day', $this->oStartDate)); $this->oDaily->showContext($aDates, $current_id, $this); } else { $aParams = array(); switch ($type) { case 'advertisers': if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN) || OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) { if (OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) { $aParams['agency_id'] = OA_Permission::getEntityId(); } $params = $this->aPageParams; $advertisers = Admin_DA::getAdvertisers($aParams, false); foreach ($advertisers as $advertiser) { $params['clientid'] = $advertiser['advertiser_id']; phpAds_PageContext(MAX_buildName($advertiser['advertiser_id'], $advertiser['name']), $this->_addPageParamsToURI($this->pageName, $params, true), $current_id == $advertiser['advertiser_id']); } } break; case 'campaigns': $aParams['advertiser_id'] = $this->aPageParams['clientid']; $params = $this->aPageParams; $campaigns = Admin_DA::getPlacements($aParams, false); foreach ($campaigns as $campaign) { $params['campaignid'] = $campaign['placement_id']; // mask campaign name if anonymous campaign $campaign['name'] = MAX_getPlacementName($campaign); phpAds_PageContext(MAX_buildName($campaign['placement_id'], $campaign['name']), $this->_addPageParamsToURI($this->pageName, $params, true), $current_id == $campaign['placement_id']); } break; case 'banners': $aParams['placement_id'] = $this->aPageParams['campaignid']; $params = $this->aPageParams; $banners = Admin_DA::getAds($aParams, false); foreach ($banners as $banner) { $params['bannerid'] = $banner['ad_id']; // mask banner name if anonymous campaign $campaign = Admin_DA::getPlacement($banner['placement_id']); $campaignAnonymous = $campaign['anonymous'] == 't' ? true : false; $banner['name'] = MAX_getAdName($banner['name'], null, null, $campaignAnonymous, $banner['ad_id']); phpAds_PageContext(MAX_buildName($banner['ad_id'], $banner['name']), $this->_addPageParamsToURI($this->pageName, $params, true), $current_id == $banner['ad_id']); } break; case 'publishers': if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN) || OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) { if (OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) { $aParams['agency_id'] = OA_Permission::getEntityId(); } $params = $this->aPageParams; $campaigns = Admin_DA::getPublishers($aParams, false); foreach ($campaigns as $publisher) { $params['affiliateid'] = $publisher['publisher_id']; phpAds_PageContext(MAX_buildName($publisher['publisher_id'], $publisher['name']), $this->_addPageParamsToURI($this->pageName, $params, true), $current_id == $publisher['publisher_id']); } } break; case 'publisher-campaigns': if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN) || OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) { $aParams = array('publisher_id' => $publisherId, 'placement_id' => $placementId, 'include' => array('placement_id'), 'exclude' => array('zone_id')); $aPlacements = array(); foreach (Admin_DA::fromCache('getEntitiesStats', $aParams + $this->aDates) as $v) { $aPlacements[$v['placement_id']] = true; } $params = $this->aPageParams; $campaigns = Admin_DA::getPlacements(array(), false); foreach ($campaigns as $campaign) { if (isset($aPlacements[$campaign['placement_id']])) { $params['campaignid'] = $campaign['placement_id']; phpAds_PageContext(MAX_buildName($campaign['placement_id'], $campaign['name']), $this->_addPageParamsToURI($this->pageName, $params, true), $current_id == $campaign['placement_id']); } } } break; case 'zones': $aParams['publisher_id'] = $this->aPageParams['affiliateid']; $params = $this->aPageParams; $zones = Admin_DA::getZones($aParams, false); foreach ($zones as $zone) { $params['zoneid'] = $zone['zone_id']; phpAds_PageContext(MAX_buildName($zone['zone_id'], $zone['name']), $this->_addPageParamsToURI($this->pageName, $params, true), $current_id == $zone['zone_id']); } break; } } }