38 import(
'classes.statistics.StatisticsHelper');
41 'dateStart' => STATISTICS_EARLIEST_DATE,
42 'dateEnd' => date(
'Y-m-d', strtotime(
'yesterday')),
46 'contextIds' => [CONTEXT_ID_NONE],
49 $args = array_merge($defaultArgs, $args);
54 $statsQO = $statsQB->getRecords();
57 ->retrieve($statsQO->toSql(), $statsQO->getBindings());
60 while (!$result->EOF) {
62 'loadId' => $result->fields[
'load_id'],
63 'contextId' => (int) $result->fields[
'context_id'],
64 'submissionId' => (
int) $result->fields[
'submission_id'],
65 'assocType' => (int) $result->fields[
'assoc_type'],
66 'assocId' => (
int) $result->fields[
'assoc_id'],
67 'day' => (int) $result->fields[
'day'],
68 'month' => (
int) $result->fields[
'month'],
69 'fileType' => (int) $result->fields[
'file_type'],
70 'countryId' => $result->fields[
'country_id'],
71 'region' => $result->fields[
'region'],
72 'city' => $result->fields[
'city'],
73 'metric' => (
int) $result->fields[
'metric'],
74 'metricType' => $result->fields[
'metric_type'],
75 'pkpSectionId' => (int) $result->fields[
'pkp_section_id'],
76 'assocObjectType' => (
int) $result->fields[
'assoc_object_type'],
77 'assocObjectTId' => (int) $result->fields[
'assoc_object_id'],
78 'representation_id' => (
int) $result->fields[
'representation_id'],
96 'dateStart' => STATISTICS_EARLIEST_DATE,
97 'dateEnd' => date(
'Y-m-d', strtotime(
'yesterday')),
102 'contextIds' => [CONTEXT_ID_NONE],
105 $args = array_merge($defaultArgs, $args);
110 $timelineQO = $timelineQB
111 ->getSum([$timelineInterval])
112 ->orderBy($timelineInterval);
115 ->retrieve($timelineQO->toSql(), $timelineQO->getBindings());
118 while (!$result->EOF) {
119 $date = substr($result->fields[$timelineInterval], 0, 4) .
'-' . substr($result->fields[$timelineInterval], 4, 2);
120 if ($timelineInterval === STATISTICS_DIMENSION_DAY) {
121 $date = substr($date, 0, 7) .
'-' . substr($result->fields[$timelineInterval], 6, 2);
123 $dateValues[$date] = (int) $result->fields[
'metric'];
129 $timeline = array_map(
function($entry) use ($dateValues) {
130 foreach ($dateValues as $date => $value) {
131 if ($entry[
'date'] === $date) {
132 $entry[
'value'] = $value;
164 'dateStart' => STATISTICS_EARLIEST_DATE,
165 'dateEnd' => date(
'Y-m-d', strtotime(
'yesterday')),
170 'contextIds' => [CONTEXT_ID_NONE],
173 $args = array_merge($defaultArgs, $args);
178 $orderedQO = $orderedQB
180 ->orderBy(
'metric', $orderDirection === STATISTICS_ORDER_ASC ?
'asc' :
'desc');
183 if (isset($args[
'count'])) {
184 import(
'lib.pkp.classes.db.DBResultRange');
185 $range = new \DBResultRange($args[
'count'],
null, isset($args[
'offset']) ? $args[
'offset'] : 0);
189 ->retrieveRange($orderedQO->toSql(), $orderedQO->getBindings(), $range);
192 while (!$result->EOF) {
194 'id' => (int) $result->fields[$groupBy],
195 'total' => (
int) $result->fields[
'metric'],
211 $total += $record[
'metric'];
223 return !empty($record[
'fileType']);
234 return $record[
'fileType'] === STATISTICS_FILE_TYPE_PDF;
245 return $record[
'fileType'] === STATISTICS_FILE_TYPE_HTML;
256 return $record[
'fileType'] === STATISTICS_FILE_TYPE_OTHER;
270 if ($timelineInterval === STATISTICS_DIMENSION_MONTH) {
272 $labelFormat =
'%B %Y';
274 } elseif ($timelineInterval === STATISTICS_DIMENSION_DAY) {
275 $dateFormat =
'Y-m-d';
276 $labelFormat =
\Application::get()->getRequest()->getContext()->getLocalizedDateFormatLong();
280 $startDate = new \DateTime($startDate);
281 $endDate = new \DateTime($endDate);
283 $timelineIntervals = [];
284 while ($startDate->format($dateFormat) <= $endDate->format($dateFormat)) {
285 $timelineIntervals[] = [
286 'date' => $startDate->format($dateFormat),
287 'label' => strftime($labelFormat, $startDate->getTimestamp()),
290 $startDate->add(
new \DateInterval($interval));
293 return $timelineIntervals;
303 $statsQB = new \PKP\Services\QueryBuilders\PKPStatsQueryBuilder();
305 ->filterByContexts($args[
'contextIds'])
306 ->before($args[
'dateEnd'])
307 ->after($args[
'dateStart']);
309 if (!empty(($args[
'submissionIds']))) {
310 $statsQB->filterBySubmissions($args[
'submissionIds']);
313 if (!empty($args[
'assocTypes'])) {
314 $statsQB->filterByAssocTypes($args[
'assocTypes']);
315 if (!empty($args[
'assocIds'])) {
316 $statsQB->filterByAssocIds($args[
'assocIds']);
320 if (!empty($args[
'fileTypes'])) {
321 $statsQB->filterByFileTypes(($args[
'fileTypes']));