/** * Merge aggregate stats with entity properties (name, children, etc) * * The overridden method also takes care to remove inactive entities * and to enforce the anonymous properties when logged in as advertiser * or publisher * * @param array Query parameters * @param string Key name * @return array Full entity stats with entity data */ function mergeData($aParams, $key) { $aEntitiesData = parent::mergeData($aParams, $key); if (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER) || OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) { if (is_null($this->aAnonAdvertisers)) { $this->aAnonAdvertisers = array(); $this->aAnonPlacements = array(); $aPlacements = Admin_DA::fromCache('getPlacements', array('placement_anonymous' => 't')); foreach ($aPlacements as $placementId => $placement) { $this->aAnonAdvertisers[$placement['advertiser_id']] = true; $this->aAnonPlacements[$placementId] = true; } } } foreach (array_keys($aEntitiesData) as $entityId) { if (!isset($this->data[$key][$entityId])) { unset($aEntitiesData[$entityId]); } elseif ($key == 'advertiser_id' && isset($this->aAnonAdvertisers[$entityId])) { $aEntitiesData[$entityId]['hidden'] = true; } elseif ($key == 'placement_id' && isset($this->aAnonPlacements[$entityId])) { $aEntitiesData[$entityId]['hidden'] = true; } elseif ($key == 'ad_id' && isset($this->aAnonPlacements[$aEntitiesData[$entityId]['placement_id']])) { $aEntitiesData[$entityId]['hidden'] = true; } elseif (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER)) { if (isset($aParams['placement_id'])) { $aEntitiesData[$entityId]['hidden'] = isset($this->aAnonPlacements[$aParams['placement_id']]); } else { $aEntitiesData[$entityId]['hidden'] = isset($this->aAnonAdvertisers[OA_Permission::getEntityId()]); } } } return $aEntitiesData; }