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;
 }