/**
  * Display the publisher index page, and list all domains associated.
  * 
  * @return \Zend\View\Model\ViewModel
  */
 public function indexAction()
 {
     $initialized = $this->initialize();
     if ($initialized !== true) {
         return $initialized;
     }
     //Pull list of websites.
     $PublisherWebsiteFactory = \_factory\PublisherWebsite::get_instance();
     $parameters = array();
     // Set the parameters to empty first.
     $parameters['DomainOwnerID'] = $this->PublisherInfoID;
     $publisher_markup_rate = $this->config_handle['system']['default_publisher_markup_rate'];
     $publisher_impressions_network_loss_rate = $this->config_handle['system']['default_publisher_impressions_network_loss_rate'];
     $PublisherWebsiteList = $PublisherWebsiteFactory->get($parameters);
     if ($this->is_admin) {
         $headers = array("#", "Domain", "Domain Markup", "Imps Loss Rate", "Domain Owner", "Created", "Updated", "Approval", "Actions");
         $meta_data = array("WebDomain", "DomainMarkupRate", "DomainPublisherImpressionsLossRate", "DomainOwnerID", "DateCreated", "DateUpdated", "ApprovalFlag");
         // admin is logged in as a user, get the markup if any for that user
         if ($this->ImpersonateID != 0 && !empty($this->PublisherInfoID)) {
             $publisher_markup = \util\Markup::getMarkupForPublisher($this->PublisherInfoID, $this->config_handle, false);
             if ($publisher_markup != null) {
                 $publisher_markup_rate = $publisher_markup->MarkupRate;
             }
             $publisher_impressions_network_loss = \util\NetworkLossCorrection::getNetworkLossCorrectionRateForPublisher($this->PublisherInfoID, $this->config_handle, false);
             if ($publisher_impressions_network_loss != null) {
                 $publisher_impressions_network_loss_rate = $publisher_impressions_network_loss->CorrectionRate;
             }
         }
     } else {
         $headers = array("#", "Domain", "Created", "Updated", "Approval", "Actions");
         $meta_data = array("WebDomain", "AutoApprove", "DateCreated", "DateUpdated", "ApprovalFlag");
     }
     foreach ($PublisherWebsiteList as $PublisherWebsite) {
         $website_markup = \util\Markup::getMarkupForPublisherWebsite($PublisherWebsite->PublisherWebsiteID, $this->config_handle, false);
         if ($website_markup != null) {
             $website_markup_rate_list[$PublisherWebsite->PublisherWebsiteID] = $website_markup->MarkupRate * 100;
         } else {
             $website_markup_rate_list[$PublisherWebsite->PublisherWebsiteID] = $publisher_markup_rate * 100;
         }
         $website_impressions_network_loss = \util\NetworkLossCorrection::getNetworkLossCorrectionRateForPublisherWebsite($PublisherWebsite->PublisherWebsiteID, $this->config_handle, false);
         if ($website_impressions_network_loss != null) {
             $website_impressions_network_loss_rate_list[$PublisherWebsite->PublisherWebsiteID] = $website_impressions_network_loss->CorrectionRate * 100;
         } else {
             $website_impressions_network_loss_rate_list[$PublisherWebsite->PublisherWebsiteID] = $publisher_impressions_network_loss_rate * 100;
         }
     }
     $PublisherInfoFactory = \_factory\PublisherInfo::get_instance();
     $params = array();
     $params["PublisherInfoID"] = $this->PublisherInfoID;
     $PublisherInfo = $PublisherInfoFactory->get_row($params);
     $publisher_markup_rate *= 100;
     $publisher_impressions_network_loss_rate *= 100;
     $view = new ViewModel(array('true_user_name' => $this->auth->getUserName(), 'domain_list_raw' => $PublisherWebsiteList, 'domain_list' => $this->order_data_table($meta_data, $PublisherWebsiteList, $headers), 'is_admin' => $this->is_admin, 'user_id_list' => $this->user_id_list_publisher, 'domain_owner' => isset($PublisherInfo->Name) ? $PublisherInfo->Name : "", 'impersonate_id' => $this->ImpersonateID, 'effective_id' => $this->auth->getEffectiveIdentityID(), 'publisher_info_id' => $this->PublisherInfoID, 'dashboard_view' => 'publisher', 'user_identity' => $this->identity(), 'publisher_markup_rate' => $publisher_markup_rate, 'publisher_impressions_network_loss_rate' => $publisher_impressions_network_loss_rate, 'website_markup_rate_list' => isset($website_markup_rate_list) ? $website_markup_rate_list : array(), 'website_impressions_network_loss_rate_list' => isset($website_impressions_network_loss_rate_list) ? $website_impressions_network_loss_rate_list : array()));
     if ($this->is_admin == false || $this->is_admin == true && $this->PublisherInfoID != null && $this->auth->getEffectiveIdentityID() != 0) {
         $view->header_title = '<a href="/publisher/createdomain">Create New Domain</a>';
     } else {
         $view->header_title = '&nbsp;';
     }
     return $view;
 }
 public static function getNetworkLossCorrectionRateFromPublisherAdZone($config, $publisher_ad_zone_id, &$network_loss_rate_list)
 {
     $PublisherAdZoneFactory = \_factory\PublisherAdZone::get_instance();
     $params = array();
     $params['PublisherAdZoneID'] = $publisher_ad_zone_id;
     $PublisherAdZone = $PublisherAdZoneFactory->get_row($params);
     if ($PublisherAdZone === null) {
         return 0;
     }
     $publisher_info_id = $PublisherAdZone->AdOwnerID;
     $publisher_website_id = $PublisherAdZone->PublisherWebsiteID;
     $hash_key = $publisher_info_id . '-' . $publisher_website_id;
     if (isset($network_loss_rate_list[$hash_key])) {
         $publisher_impressions_network_loss_rate = $network_loss_rate_list[$hash_key];
     } else {
         $publisher_impressions_network_loss_rate = \util\NetworkLossCorrection::getPublisherNetworkLossCorrectionRate($publisher_website_id, $publisher_info_id, $config, false);
         $network_loss_rate_list[$hash_key] = $publisher_impressions_network_loss_rate;
     }
     return $publisher_impressions_network_loss_rate;
 }
 public function get($params = null)
 {
     // http://files.zend.com/help/Zend-Framework/zend.db.select.html
     $obj_list = array();
     $resultSet = $this->select(function (\Zend\Db\Sql\Select $select) use($params) {
         foreach ($params as $name => $value) {
             $select->where($select->where->equalTo($name, $value));
         }
         //$select->limit(10, 0);
         $select->order('PublisherAdZoneID');
     });
     foreach ($resultSet as $obj) {
         $publisher_impressions_network_loss_rate = \util\NetworkLossCorrection::getNetworkLossCorrectionRateFromPublisherAdZone($this->config, $obj->PublisherAdZoneID, $this->network_loss_rate_list);
         if ($publisher_impressions_network_loss_rate > 0) {
             $obj->TotalRequests = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateInteger($publisher_impressions_network_loss_rate, $obj->TotalRequests);
             $obj->TotalImpressions = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateInteger($publisher_impressions_network_loss_rate, $obj->TotalImpressions);
             $obj->TotalRevenue = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateMoney($publisher_impressions_network_loss_rate, $obj->TotalRevenue);
         }
         $obj_list[] = $obj;
     }
     return $obj_list;
 }
 public function getPerTime($where_params = null, $is_super_admin = false, $is_domain_admin = false)
 {
     $obj_list = array();
     $low_range = $high_range = time();
     if (!empty($where_params['DateCreatedGreater'])) {
         $low_range = strtotime($where_params['DateCreatedGreater']);
     }
     if (!empty($where_params['DateCreatedLower'])) {
         $high_range = strtotime($where_params['DateCreatedLower']);
     }
     $date_span = $high_range - $low_range;
     // if span is greater than 2 days switch to custom reporting format
     $switch_to_custom_threshold = 2 * 86400;
     if ($date_span > $switch_to_custom_threshold) {
         return $this->getPerTimeCustom($where_params, $is_super_admin, $is_domain_admin);
     }
     $sql = new Sql($this->adapter);
     $select = $sql->select();
     $select->from('PublisherImpressionsAndSpendHourly');
     if (!empty($where_params['DateCreatedGreater'])) {
         $select->where($select->where->greaterThanOrEqualTo('DateCreated', $where_params['DateCreatedGreater']));
     }
     if (!empty($where_params['DateCreatedLower'])) {
         $select->where($select->where->lessThanOrEqualTo('DateCreated', $where_params['DateCreatedLower']));
     }
     foreach ($where_params as $name => $value) {
         if ($name != 'DateCreatedLower' && $name != 'DateCreatedGreater') {
             $select->where($select->where->equalTo($name, $value));
         }
     }
     $statement = $sql->prepareStatementForSqlObject($select);
     $results = $statement->execute();
     foreach ($results as $obj) {
         if ($is_super_admin) {
             if (empty($obj['GrossECPM'])) {
                 $obj['GrossECPM'] = 0;
             }
             if (empty($obj['GrossExchangeECPM'])) {
                 $obj['GrossExchangeECPM'] = 0;
             }
         } elseif ($is_domain_admin) {
             array_walk($obj, function ($item, $key) use(&$obj) {
                 if (array_search($key, $this->domainAdminFields) !== FALSE) {
                     $obj[$key] = FALSE;
                 }
             });
             $obj = array_filter($obj, function ($value) {
                 return $value !== FALSE;
             });
         } else {
             array_walk($obj, function ($item, $key) use(&$obj) {
                 if (array_search($key, $this->adminFields) !== FALSE) {
                     $obj[$key] = FALSE;
                 }
             });
             $obj = array_filter($obj, function ($value) {
                 return $value !== FALSE;
             });
         }
         $publisher_impressions_network_loss_rate = \util\NetworkLossCorrection::getNetworkLossCorrectionRateFromPublisherAdZone($this->config, $obj['PublisherAdZoneID'], $this->network_loss_rate_list);
         if (empty($obj['eCPM'])) {
             $obj['eCPM'] = 0;
         }
         if ($publisher_impressions_network_loss_rate > 0) {
             $obj['Requests'] = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateInteger($publisher_impressions_network_loss_rate, $obj['Requests']);
             $obj['Impressions'] = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateInteger($publisher_impressions_network_loss_rate, $obj['Impressions']);
             $obj['Revenue'] = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateMoney($publisher_impressions_network_loss_rate, $obj['Revenue']);
             if ($is_super_admin || $is_domain_admin) {
                 $obj['GrossRevenue'] = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateMoney($publisher_impressions_network_loss_rate, $obj['GrossRevenue']);
             }
             if ($is_super_admin) {
                 $obj['GrossExchangeECPM'] = \util\NetworkLossCorrection::correctAmountWithNetworkLossCorrectionRateMoney($publisher_impressions_network_loss_rate, $obj['GrossExchangeECPM']);
             }
         }
         $obj['MDYH'] = $this->re_normalize_time($obj['MDYH']);
         $obj_list[] = $obj;
     }
     return $obj_list;
 }