/** * Возвращает данные для графиков * * В качестве параметра принимает функцию, которая должна вернуть значение для графика * * @param $callback * * @return array array(date => array(date, value[, value])) */ private function getChartData($callback) { $reportData = $this->getReportData(); $newsMap = $this->getNewsDataMap(); $date = strtotime($this->campaign->date_start); $dateTo = strtotime($this->campaign->date_end) < strtotime('today') ? strtotime($this->campaign->date_end) : strtotime('today'); $chartData = array(); while ($date <= $dateTo) { $humanDate = date('Y-m-d', $date); if (is_string($humanDate)) { $chartData[$humanDate] = array(DateHelper::getGrathDate($date)); // Данных за дату нет, тогда заполняем нулями if (!isset($reportData[$humanDate])) { $chartData[$humanDate] = array_merge($chartData[$humanDate], array_fill(1, count($newsMap), 0)); } else { foreach ($newsMap as $news_id => $position) { // Если данные для новости за дату есть, тогда вызываем $callback, иначе присваиваем 0 $chartData[$humanDate][$position] = isset($reportData[$humanDate][$news_id]) ? $callback($reportData[$humanDate][$news_id]) : 0; } } // Увеличиваем дату на один день $date += 3600 * 24; } } return $chartData; }
/** * Возвращает список дат за период * * @return array */ public function getDates() { if (empty($this->dates)) { $date = strtotime($this->dateFrom); if ($date < strtotime($this->campaign->date_start)) { $date = strtotime($this->campaign->date_start); } $dateTo = strtotime($this->dateTo); if ($dateTo > strtotime($this->campaign->date_end)) { $dateTo = strtotime($this->campaign->date_end); } while ($date <= $dateTo) { $_date = date('Y-m-d', $date); if (is_string($_date)) { $this->dates[$_date] = DateHelper::getGrathDate($date); // Увеличиваем дату на один день $date += 3600 * 24; } } } return $this->dates; }