diff --git a/classes/submission/Submission.php b/classes/submission/Submission.php index 443ce2c342..bbf2300808 100644 --- a/classes/submission/Submission.php +++ b/classes/submission/Submission.php @@ -27,8 +27,10 @@ use APP\core\Services; use APP\facades\Repo; use APP\publication\Publication; +use APP\services\StatsPublicationService; use APP\statistics\StatisticsHelper; use PKP\facades\Locale; +use PKP\galley\Galley; use PKP\submission\PKPSubmission; class Submission extends PKPSubmission @@ -223,27 +225,28 @@ public function getLocalizedGalleys() */ public function getTotalGalleyViews() { - $fileIds = []; - $publications = $this->getPublishedPublications(); - foreach ($publications as $publication) { - foreach ($publication->getData('galleys') as $galley) { - $file = $galley->getFile(); - if (!$galley->getRemoteUrl() && $file && !in_array($file->getId(), $fileIds)) { - $fileIds[] = $file->getId(); - } - } + $submissionFileIds = collect($this->getPublishedPublications()) + ->flatMap(fn (Publication $publication) => $publication->getData('galleys')->all()) + ->map(fn (Galley $galley) => (int) $galley->getData('submissionFileId')) + ->unique() + ->filter(fn (int $submissionFileId) => (bool) $submissionFileId) + ->all(); + if (!count($submissionFileIds)) { + return 0; } + $filters = [ 'dateStart' => StatisticsHelper::STATISTICS_EARLIEST_DATE, 'dateEnd' => date('Y-m-d', strtotime('yesterday')), - 'contextIds' => [$this->getData('contextId')], - 'fileIds' => $fileIds, + 'contextIds' => [$this->getData('contextId')] ]; - $metrics = Services::get('publicationStats') + /** @var StatsPublicationService $publicationStats */ + $publicationStats = Services::get('publicationStats'); + return (int) $publicationStats ->getQueryBuilder($filters) - ->getSum([]) + ->filterBySubmissionFiles($submissionFileIds) + ->getSum() ->value('metric'); - return $metrics ? $metrics : 0; } /**