/** * @see ReportPlugin::display() */ function display($args, $request) { $router = $request->getRouter(); $context = $router->getContext($request); $metricType = $this->getMetricTypes(); import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); $columns = array_keys($statsHelper->getColumnNames()); $reportArgs = array('metricType' => $metricType, 'columns' => $columns, 'filters' => serialize(array(STATISTICS_DIMENSION_CONTEXT_ID => $context->getId())), 'orderBy' => serialize(array(STATISTICS_DIMENSION_MONTH => STATISTICS_ORDER_ASC))); Request::redirect(null, null, 'tools', 'generateReport', $reportArgs); }
/** * Constructor. * @param $argv array task arguments */ function PKPUsageStatsLoader($args) { $plugin = PluginRegistry::getPlugin('generic', 'usagestatsplugin'); /* @var $plugin UsageStatsPlugin */ $this->_plugin = $plugin; if ($plugin->getSetting(CONTEXT_ID_NONE, 'compressArchives')) { $this->setCompressArchives(true); } $arg = current($args); switch ($arg) { case 'autoStage': if ($plugin->getSetting(0, 'createLogFiles')) { $this->_autoStage = true; } break; case 'externalLogFiles': $this->_externalLogFiles = true; break; } // Define the base filesystem path. $args[0] = $plugin->getFilesPath(); parent::FileLoader($args); if ($plugin->getEnabled()) { // Load the metric type constant. PluginRegistry::loadCategory('reports'); import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); $geoLocationTool = $statsHelper->getGeoLocationTool(); $this->_geoLocationTool = $geoLocationTool; $plugin->import('UsageStatsTemporaryRecordDAO'); $statsDao = new UsageStatsTemporaryRecordDAO(); DAORegistry::registerDAO('UsageStatsTemporaryRecordDAO', $statsDao); $this->_counterRobotsListFile = $this->_getCounterRobotListFile(); $contextDao = Application::getContextDAO(); /* @var $contextDao ContextDAO */ $contextFactory = $contextDao->getAll(); /* @var $contextFactory DAOResultFactory */ $contextsByPath = array(); while ($context = $contextFactory->next()) { /* @var $context Context */ $contextsByPath[$context->getPath()] = $context; } $this->_contextsByPath = $contextsByPath; $this->checkFolderStructure(true); } }
/** * Constructor. * @param $argv array task arguments */ function UsageStatsLoader($args) { $plugin =& PluginRegistry::getPlugin('generic', 'usagestatsplugin'); /* @var $plugin UsageStatsPlugin */ $this->_plugin =& $plugin; $arg = current($args); switch ($arg) { case 'autoStage': if ($plugin->getSetting(0, 'createLogFiles')) { $this->_autoStage = true; } break; case 'externalLogFiles': $this->_externalLogFiles = true; break; } // Define the base filesystem path. $args[0] = $plugin->getFilesPath(); parent::FileLoader($args); if ($plugin->getEnabled()) { // Load the metric type constant. PluginRegistry::loadCategory('reports'); $geoLocationTool =& StatisticsHelper::getGeoLocationTool(); $this->_geoLocationTool =& $geoLocationTool; $plugin->import('UsageStatsTemporaryRecordDAO'); $statsDao = new UsageStatsTemporaryRecordDAO(); DAORegistry::registerDAO('UsageStatsTemporaryRecordDAO', $statsDao); $this->_counterRobotsListFile = $this->_getCounterRobotListFile(); $journalDao =& DAORegistry::getDAO('JournalDAO'); /* @var $journalDao JournalDAO */ $journalFactory =& $journalDao->getJournals(); /* @var $journalFactory DAOResultFactory */ $journalsByPath = array(); while ($journal =& $journalFactory->next()) { /* @var $journal Journal */ $journalsByPath[$journal->getPath()] =& $journal; } $this->_journalsByPath = $journalsByPath; $this->checkFolderStructure(true); } }
/** * Get report generator form object. * @return ReportGeneratorForm */ function &_getReportGeneratorForm($request) { $router = $request->getRouter(); $context = $router->getContext($request); $metricType = $request->getUserVar('metricType'); if (!$metricType) { $metricType = $context->getDefaultMetricType(); } $statsHelper = new StatisticsHelper(); $reportPlugin = $statsHelper->getReportPluginByMetricType($metricType); if (!is_scalar($metricType) || !$reportPlugin) { fatalError('Invalid metric type.'); } $columns = $reportPlugin->getColumns($metricType); $columns = array_flip(array_intersect(array_flip($statsHelper->getColumnNames()), $columns)); $optionalColumns = $reportPlugin->getOptionalColumns($metricType); $optionalColumns = array_flip(array_intersect(array_flip($statsHelper->getColumnNames()), $optionalColumns)); $objects = $reportPlugin->getObjectTypes($metricType); $objects = array_flip(array_intersect(array_flip($statsHelper->getObjectTypeString()), $objects)); $defaultReportTemplates = $reportPlugin->getDefaultReportTemplates($metricType); // If the report plugin doesn't works with the file type column, // don't load file types. if (isset($columns[STATISTICS_DIMENSION_FILE_TYPE])) { $fileTypes = $statsHelper->getFileTypeString(); } else { $fileTypes = null; } // Metric type will be presented in header, remove if any. if (isset($columns[STATISTICS_DIMENSION_METRIC_TYPE])) { unset($columns[STATISTICS_DIMENSION_METRIC_TYPE]); } $reportTemplate = $request->getUserVar('reportTemplate'); import('controllers.statistics.form.ReportGeneratorForm'); $reportGeneratorForm = new ReportGeneratorForm($columns, $optionalColumns, $objects, $fileTypes, $metricType, $defaultReportTemplates, $reportTemplate); return $reportGeneratorForm; }
/** * Generate statistics reports from passed * request arguments. * @param $args array * @param $request PKPRequest */ function generateReport($args, $request) { $this->setupTemplate($request); AppLocale::requireComponents(LOCALE_COMPONENT_PKP_SUBMISSION); $router = $request->getRouter(); $context = $router->getContext($request); import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); $metricType = $request->getUserVar('metricType'); if (is_null($metricType)) { $metricType = $context->getDefaultMetricType(); } // Generates only one metric type report at a time. if (is_array($metricType)) { $metricType = current($metricType); } if (!is_scalar($metricType)) { $metricType = null; } $reportPlugin = $statsHelper->getReportPluginByMetricType($metricType); if (!$reportPlugin || is_null($metricType)) { $request->redirect(null, null, 'tools', 'statistics'); } $columns = $request->getUserVar('columns'); $filters = unserialize($request->getUserVar('filters')); if (!$filters) { $filters = $request->getUserVar('filters'); } $orderBy = $request->getUserVar('orderBy'); if ($orderBy) { $orderBy = unserialize($orderBy); if (!$orderBy) { $orderBy = $request->getUserVar('orderBy'); } } else { $orderBy = array(); } $metrics = $reportPlugin->getMetrics($metricType, $columns, $filters, $orderBy); $allColumnNames = $statsHelper->getColumnNames(); $columnOrder = array_keys($allColumnNames); $columnNames = array(); foreach ($columnOrder as $column) { if (in_array($column, $columns)) { $columnNames[$column] = $allColumnNames[$column]; } if ($column == STATISTICS_DIMENSION_ASSOC_TYPE && in_array(STATISTICS_DIMENSION_ASSOC_ID, $columns)) { $columnNames['common.title'] = __('common.title'); } } // Make sure the metric column will always be present. if (!in_array(STATISTICS_METRIC, $columnNames)) { $columnNames[STATISTICS_METRIC] = $allColumnNames[STATISTICS_METRIC]; } header('content-type: text/comma-separated-values'); header('content-disposition: attachment; filename=statistics-' . date('Ymd') . '.csv'); $fp = fopen('php://output', 'wt'); fputcsv($fp, array($reportPlugin->getDisplayName())); fputcsv($fp, array($reportPlugin->getDescription())); fputcsv($fp, array(__('common.metric') . ': ' . $metricType)); fputcsv($fp, array(__('manager.statistics.reports.reportUrl') . ': ' . $request->getCompleteUrl())); fputcsv($fp, array('')); // Just for better displaying. $columnNames = array_merge(array(''), $columnNames); fputcsv($fp, $columnNames); foreach ($metrics as $record) { $row = array(); foreach ($columnNames as $key => $name) { if (empty($name)) { // Column just for better displaying. $row[] = ''; continue; } // Give a chance for subclasses to set the row values. if ($returner = $this->getReportRowValue($key, $record)) { $row[] = $returner; continue; } switch ($key) { case 'common.title': $assocId = $record[STATISTICS_DIMENSION_ASSOC_ID]; $assocType = $record[STATISTICS_DIMENSION_ASSOC_TYPE]; $row[] = $this->getObjectTitle($assocId, $assocType); break; case STATISTICS_DIMENSION_ASSOC_TYPE: $assocType = $record[STATISTICS_DIMENSION_ASSOC_TYPE]; $row[] = $statsHelper->getObjectTypeString($assocType); break; case STATISTICS_DIMENSION_CONTEXT_ID: $assocId = $record[STATISTICS_DIMENSION_CONTEXT_ID]; $assocType = Application::getContextAssocType(); $row[] = $this->getObjectTitle($assocId, $assocType); break; case STATISTICS_DIMENSION_SUBMISSION_ID: if (isset($record[STATISTICS_DIMENSION_SUBMISSION_ID])) { $assocId = $record[STATISTICS_DIMENSION_SUBMISSION_ID]; $assocType = ASSOC_TYPE_SUBMISSION; $row[] = $this->getObjectTitle($assocId, $assocType); } else { $row[] = ''; } break; case STATISTICS_DIMENSION_REGION: if (isset($record[STATISTICS_DIMENSION_REGION]) && isset($record[STATISTICS_DIMENSION_COUNTRY])) { $geoLocationTool = $statsHelper->getGeoLocationTool(); if ($geoLocationTool) { $regions = $geoLocationTool->getRegions($record[STATISTICS_DIMENSION_COUNTRY]); $regionId = $record[STATISTICS_DIMENSION_REGION]; if (strlen($regionId) == 1) { $regionId = '0' . $regionId; } if (isset($regions[$regionId])) { $row[] = $regions[$regionId]; break; } } } $row[] = ''; break; case STATISTICS_DIMENSION_PKP_SECTION_ID: $sectionId = null; if (isset($record[STATISTICS_DIMENSION_PKP_SECTION_ID])) { $sectionId = $record[STATISTICS_DIMENSION_PKP_SECTION_ID]; } if ($sectionId) { $row[] = $this->getObjectTitle($sectionId, ASSOC_TYPE_SECTION); } else { $row[] = ''; } break; case STATISTICS_DIMENSION_FILE_TYPE: if ($record[$key]) { $row[] = $statsHelper->getFileTypeString($record[$key]); } else { $row[] = ''; } break; default: $row[] = $record[$key]; break; } } fputcsv($fp, $row); } fclose($fp); }
/** * Main entry point for PKP statistics reports. * * @see <http://pkp.sfu.ca/wiki/index.php/OJSdeStatisticsConcept#Input_and_Output_Formats_.28Aggregation.2C_Filters.2C_Metrics_Data.29> * for a full specification of the input and output format of this method. * * @param $metricType null|string|array metrics selection * NB: If you want to use the default metric on journal level then you must * set $metricType = null and add an explicit filter on a single journal ID. * Otherwise the default site-level metric will be used. * @param $columns string|array column (aggregation level) selection * @param $filters array report-level filter selection * @param $orderBy array order criteria * @param $range null|DBResultRange paging specification * * @return null|array The selected data as a simple tabular result set or * null if the given parameter combination is not supported. */ function getMetrics($metricType = null, $columns = array(), $filter = array(), $orderBy = array(), $range = null) { import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); // Check the parameter format. if (!(is_array($filter) && is_array($orderBy))) { return null; } // Check whether which context we are. $context = $statsHelper->getContext($filter); // Identify and canonicalize filtered metric types. $defaultSiteMetricType = $this->getDefaultMetricType(); $siteMetricTypes = $this->getMetricTypes(); $metricType = $statsHelper->canonicalizeMetricTypes($metricType, $context, $defaultSiteMetricType, $siteMetricTypes); if (!is_array($metricType)) { return null; } $metricTypeCount = count($metricType); // Canonicalize columns. if (is_scalar($columns)) { $columns = array($columns); } // The metric type dimension is not additive. This imposes two important // restrictions on valid report descriptions: // 1) We need at least one metric Type to be specified. if ($metricTypeCount === 0) { return null; } // 2) If we have multiple metrics then we have to force inclusion of // the metric type column to avoid aggregation over several metric types. if ($metricTypeCount > 1) { if (!in_array(STATISTICS_DIMENSION_METRIC_TYPE, $columns)) { array_push($columns, STATISTICS_DIMENSION_METRIC_TYPE); } } // Retrieve report plugins. if (is_a($context, 'Context')) { $contextId = $context->getId(); } else { $contextId = CONTEXT_SITE; } $reportPlugins = PluginRegistry::loadCategory('reports', true, $contextId); if (!is_array($reportPlugins)) { return null; } // Run through all report plugins and try to retrieve the requested metrics. $report = array(); foreach ($reportPlugins as $reportPlugin) { // Check whether one (or more) of the selected metrics can be // provided by this plugin. $availableMetrics = $reportPlugin->getMetricTypes(); $availableMetrics = array_intersect($availableMetrics, $metricType); if (count($availableMetrics) == 0) { continue; } // Retrieve a (partial) report. $partialReport = $reportPlugin->getMetrics($availableMetrics, $columns, $filter, $orderBy, $range); // Merge the partial report with the main report. $report = array_merge($report, $partialReport); // Remove the found metric types from the metric type array. $metricType = array_diff($metricType, $availableMetrics); } // Check whether we found all requested metric types. if (count($metricType) > 0) { return null; } // Return the report. return $report; }
/** * @see Form::execute() */ function execute($request) { parent::execute(); $router = $request->getRouter(); /* @var $router PageRouter */ $context = $router->getContext($request); $statsHelper = new StatisticsHelper(); $columns = $this->getData('columns'); $filter = array(); if ($this->getData('objectTypes')) { $filter[STATISTICS_DIMENSION_ASSOC_TYPE] = $this->getData('objectTypes'); } if ($this->getData('objectIds') && count($filter[STATISTICS_DIMENSION_ASSOC_TYPE] == 1)) { $objectIds = explode(',', $this->getData('objectIds')); $filter[STATISTICS_DIMENSION_ASSOC_ID] = $objectIds; } if ($this->getData('fileTypes')) { $filter[STATISTICS_DIMENSION_FILE_TYPE] = $this->getData('fileTypes'); } $filter[STATISTICS_DIMENSION_CONTEXT_ID] = $context->getId(); if ($this->getData('issues')) { $filter[STATISTICS_DIMENSION_ISSUE_ID] = $this->getData('issues'); } if ($this->getData('articles')) { $filter[STATISTICS_DIMENSION_SUBMISSION_ID] = $this->getData('articles'); } // Get the time filter data, if any. $startTime = $request->getUserDateVar('dateStart', 1, 1, 1, 23, 59, 59); $endTime = $request->getUserDateVar('dateEnd', 1, 1, 1, 23, 59, 59); if ($startTime && $endTime) { $startYear = date('Y', $startTime); $endYear = date('Y', $endTime); $startMonth = date('m', $startTime); $endMonth = date('m', $endTime); $startDay = date('d', $startTime); $endDay = date('d', $endTime); } $timeFilterOption = $this->getData('timeFilterOption'); switch ($timeFilterOption) { case TIME_FILTER_OPTION_YESTERDAY: $filter[STATISTICS_DIMENSION_DAY] = STATISTICS_YESTERDAY; break; case TIME_FILTER_OPTION_CURRENT_MONTH: $filter[STATISTICS_DIMENSION_MONTH] = STATISTICS_CURRENT_MONTH; break; case TIME_FILTER_OPTION_RANGE_DAY: case TIME_FILTER_OPTION_RANGE_MONTH: if ($timeFilterOption == TIME_FILTER_OPTION_RANGE_DAY) { $startDate = $startYear . $startMonth . $startDay; $endDate = $endYear . $endMonth . $endDay; } else { $startDate = $startYear . $startMonth; $endDate = $endYear . $endMonth; } if ($startTime == $endTime) { // The start and end date are the same, there is no range defined // only one specific date. Use the start time. $filter[STATISTICS_DIMENSION_MONTH] = $startDate; } else { $filter[STATISTICS_DIMENSION_DAY]['from'] = $startDate; $filter[STATISTICS_DIMENSION_DAY]['to'] = $endDate; } break; default: break; } if ($this->getData('countries')) { $filter[STATISTICS_DIMENSION_COUNTRY] = $this->getData('countries'); } if ($this->getData('regions')) { $filter[STATISTICS_DIMENSION_REGION] = $this->getData('regions'); } if ($this->getData('cityNames')) { $cityNames = explode(',', $this->getData('cityNames')); $filter[STATISTICS_DIMENSION_CITY] = $cityNames; } $orderBy = array(); if ($this->getData('orderByColumn') && $this->getData('orderByDirection')) { $orderByColumn = $this->getData('orderByColumn'); $orderByDirection = $this->getData('orderByDirection'); $columnIndex = 0; foreach ($orderByColumn as $column) { if ($column != '0' && !isset($orderBy[$column])) { $orderByDir = $orderByDirection[$columnIndex]; if ($orderByDir == STATISTICS_ORDER_ASC || $orderByDir == STATISTICS_ORDER_DESC) { $orderBy[$column] = $orderByDir; } } $columnIndex++; } } return $statsHelper->getReportUrl($request, $this->_metricType, $columns, $filter, $orderBy); }
/** * Constructor. * @param $argv array task arguments */ function PKPUsageStatsLoader($args) { $plugin = PluginRegistry::getPlugin('generic', 'usagestatsplugin'); /* @var $plugin UsageStatsPlugin */ $this->_plugin = $plugin; $arg = current($args); switch ($arg) { case 'autoStage': if ($plugin->getSetting(0, 'createLogFiles')) { $this->_autoStage = true; } break; case 'externalLogFiles': $this->_externalLogFiles = true; break; } // Define the base filesystem path. $args[0] = $plugin->getFilesPath(); parent::FileLoader($args); if ($plugin->getEnabled()) { // Load the metric type constant. PluginRegistry::loadCategory('reports'); import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); $geoLocationTool = $statsHelper->getGeoLocationTool(); $this->_geoLocationTool = $geoLocationTool; $plugin->import('UsageStatsTemporaryRecordDAO'); $statsDao = new UsageStatsTemporaryRecordDAO(); DAORegistry::registerDAO('UsageStatsTemporaryRecordDAO', $statsDao); $this->_counterRobotsListFile = $this->_getCounterRobotListFile(); $contextDao = Application::getContextDAO(); /* @var $contextDao ContextDAO */ $contextFactory = $contextDao->getAll(); /* @var $contextFactory DAOResultFactory */ $contextsByPath = array(); while ($context = $contextFactory->next()) { /* @var $context Context */ $contextsByPath[$context->getPath()] = $context; } $this->_contextsByPath = $contextsByPath; $this->checkFolderStructure(true); if ($this->_autoStage) { // Copy all log files to stage directory, except the current day one. $fileMgr = new FileManager(); $logFiles = array(); $logsDirFiles = glob($plugin->getUsageEventLogsPath() . DIRECTORY_SEPARATOR . '*'); // It's possible that the processing directory have files that // were being processed but the php process was stopped before // finishing the processing. Just copy them to the stage directory too. $processingDirFiles = glob($this->getProcessingPath() . DIRECTORY_SEPARATOR . '*'); if (is_array($logsDirFiles)) { $logFiles = array_merge($logFiles, $logsDirFiles); } if (is_array($processingDirFiles)) { $logFiles = array_merge($logFiles, $processingDirFiles); } foreach ($logFiles as $filePath) { // Make sure it's a file. if ($fileMgr->fileExists($filePath)) { // Avoid current day file. $filename = pathinfo($filePath, PATHINFO_BASENAME); $currentDayFilename = $plugin->getUsageEventCurrentDayLogName(); if ($filename == $currentDayFilename) { continue; } $this->moveFile(pathinfo($filePath, PATHINFO_DIRNAME), $this->getStagePath(), $filename); } } } } }
/** * Get optional columns list. * @return array */ function getOptionalColumnsList() { import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); $plugin = $this->plugin; $reportPlugin = $plugin->getReportPlugin(); $metricType = $reportPlugin->getMetricTypes(); $optionalColumns = $reportPlugin->getOptionalColumns($metricType); $columnsList = array(); foreach ($optionalColumns as $column) { $columnsList[$column] = $statsHelper->getColumnNames($column); } return $columnsList; }
/** * Get optional columns list. * @return array */ function getOptionalColumnsList() { import('classes.statistics.StatisticsHelper'); $statsHelper = new StatisticsHelper(); return array(STATISTICS_DIMENSION_CITY => $statsHelper->getColumnNames(STATISTICS_DIMENSION_CITY), STATISTICS_DIMENSION_REGION => $statsHelper->getColumnNames(STATISTICS_DIMENSION_REGION)); }
/** * Get statistics data and set it to JS. * * @return void * @since 1.0 */ protected function setStatisticsData() { $ids = JRequest::getString('newsletters', ''); $this->ids = $ids; $days = JRequest::getString('days', 30); $this->days = $days; $ids = !empty($ids) ? explode(',', $ids) : null; $data = StatisticsHelper::totalSent($ids); JavascriptHelper::addObject('statTotalSent', $data); $data = StatisticsHelper::openedActionsCount($ids); JavascriptHelper::addObject('statOpenedCount', $data); $data = StatisticsHelper::openedNewslettersCount($ids); $res = array('newsletters' => empty($data['newsletters']) ? 0 : $data['newsletters'], 'subscribers' => empty($data['subscribers']) ? 0 : $data['subscribers']); JavascriptHelper::addObject('statActiveCount', $res); $data = StatisticsHelper::totalClicks($ids); JavascriptHelper::addObject('statTotalClicks', $data); $previousDay = date('Y-m-d 00:00:00', strtotime("-1 day", time())); $thisDay = date('Y-m-d 00:00:00'); $daysIdentifier = $days == 1 ? "-1 day" : "-" . $days . " Days"; $fiewDaysBefore = date('Y-m-d 00:00:00', strtotime($daysIdentifier, time())); $previousHour = date('Y-m-d H:00:00', strtotime("-1 hour", time())); $thisHour = date('Y-m-d H:00:00'); $oneDayBefore = date('Y-m-d H:00:00', strtotime("-1 day", time())); JavascriptHelper::addObject('clicksPerDay', StatisticsHelper::activityPerDay($fiewDaysBefore, $thisDay, $ids, NewsletterTableHistory::ACTION_CLICKED)); JavascriptHelper::addObject('viewsPerDay', StatisticsHelper::activityPerDay($fiewDaysBefore, $thisDay, $ids, NewsletterTableHistory::ACTION_OPENED)); JavascriptHelper::addObject('clicksPerHour', StatisticsHelper::activityPerHour($oneDayBefore, $thisHour, $ids, NewsletterTableHistory::ACTION_CLICKED)); JavascriptHelper::addObject('viewsPerHour', StatisticsHelper::activityPerHour($oneDayBefore, $thisHour, $ids, NewsletterTableHistory::ACTION_OPENED)); }
function setStatisticsData() { $theHour = 3600; $theDay = $theHour * 24; $days = 30; $previousDay = date('Y-m-d 00:00:00', strtotime("-1 day", time())); $fiewDaysBefore = date('Y-m-d 00:00:00', strtotime("-30 Days", time())); JavascriptHelper::addObject('opensPerDay', StatisticsHelper::openedNewslettersPerDay($fiewDaysBefore, $previousDay, null)); JavascriptHelper::addObject('subsPerDay', StatisticsHelper::activeSubscribersPerDay($fiewDaysBefore, $previousDay, null)); }
/** * Gets the statistics data and set it to JS. * * @return void * @since 1.0 */ protected function setStatisticsData() { $data = StatisticsHelper::totalSent(); JavascriptHelper::addObject('statTotalSent', $data); $data = StatisticsHelper::openedActionsCount(); JavascriptHelper::addObject('statOpenedCount', $data); $data = StatisticsHelper::openedNewslettersCount(); $res = array('newsletters' => empty($data['newsletters']) ? 0 : $data['newsletters'], 'subscribers' => empty($data['subscribers']) ? 0 : $data['subscribers']); JavascriptHelper::addObject('statActiveSubscribersCount', $res); $now = date('Y-m-d H:i:s'); $sevenDaysBefore = date('Y-m-d', strtotime('-7 Days', time())) . " 00:00:00"; $thirtyDaysBefore = date('Y-m-d', strtotime('-30 Days', time())) . " 00:00:00"; $ninetyDaysBefore = date('Y-m-d', strtotime('-90 Days', time())) . " 00:00:00"; $this->totalSubs = array(StatisticsHelper::totalSubscribersCount($sevenDaysBefore, $now), StatisticsHelper::totalSubscribersCount($thirtyDaysBefore, $now), StatisticsHelper::totalSubscribersCount($ninetyDaysBefore, $now)); $this->newSubs = array(StatisticsHelper::newSubscribersCount($sevenDaysBefore, $now), StatisticsHelper::newSubscribersCount($thirtyDaysBefore, $now), StatisticsHelper::newSubscribersCount($ninetyDaysBefore, $now)); $this->lostSubs = array(StatisticsHelper::lostSubscribersCount($sevenDaysBefore, $now), StatisticsHelper::lostSubscribersCount($thirtyDaysBefore, $now), StatisticsHelper::lostSubscribersCount($ninetyDaysBefore, $now)); $this->activeSubs = array(StatisticsHelper::activeSubscribersCount($sevenDaysBefore, $now), StatisticsHelper::activeSubscribersCount($thirtyDaysBefore, $now), StatisticsHelper::activeSubscribersCount($ninetyDaysBefore, $now)); }
/** * Calculate the statistics data and add it to the JS * * @return void * @since 1.0 */ protected function setStatisticsData() { $data = StatisticsHelper::totalSent(); $res = array('no' => empty($data['no']) ? 0 : $data['no'], 'soft' => empty($data['soft']) ? 0 : $data['soft'], 'hard' => empty($data['hard']) ? 0 : $data['hard'], 'total' => empty($data['total']) ? 0 : $data['total']); JavascriptHelper::addObject('statTotalSent', $res); $data = StatisticsHelper::openedActionsCount(); $res = array('other' => empty($data['other']) ? 0 : $data['other'], 'opened' => empty($data['opened']) ? 0 : $data['opened'], 'total' => empty($data['total']) ? 0 : $data['total']); JavascriptHelper::addObject('statOpenedCount', $res); $data = StatisticsHelper::openedNewslettersCount(); $res = array('newsletters' => empty($data['newsletters']) ? 0 : $data['newsletters'], 'subscribers' => empty($data['subscribers']) ? 0 : $data['subscribers']); JavascriptHelper::addObject('statActiveSubscribersCount', $res); $theHour = 3600; $theDay = $theHour * 24; $days = 30; $previousDay = date('Y-m-d 00:00:00', time() - $theDay); $fiewDaysBefore = date('Y-m-d 00:00:00', time() - $theDay * $days); JavascriptHelper::addObject('newSubsPerDay', StatisticsHelper::newSubscribersPerDay($fiewDaysBefore, $previousDay)); }