From 8646f3b1f3d831ee49492c7f8085c51e9022aa06 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Sat, 12 Apr 2025 18:33:59 +0300 Subject: [PATCH 1/2] pkp/pkp-lib#11268 Fix retrieval of preprint statistics and improved performance --- classes/submission/Submission.php | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/classes/submission/Submission.php b/classes/submission/Submission.php index 443ce2c342..5901129a6e 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 $submissionFileId) => (int) $submissionFileId->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; } /** From 156afe922507b7286f2b55ebba6f0499440c5366 Mon Sep 17 00:00:00 2001 From: Jonas Raoni Soares da Silva Date: Mon, 14 Apr 2025 23:57:22 +0300 Subject: [PATCH 2/2] pkp/pkp-lib#11268 Fixed variable name --- classes/submission/Submission.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/submission/Submission.php b/classes/submission/Submission.php index 5901129a6e..bbf2300808 100644 --- a/classes/submission/Submission.php +++ b/classes/submission/Submission.php @@ -227,7 +227,7 @@ public function getTotalGalleyViews() { $submissionFileIds = collect($this->getPublishedPublications()) ->flatMap(fn (Publication $publication) => $publication->getData('galleys')->all()) - ->map(fn (Galley $submissionFileId) => (int) $submissionFileId->getData('submissionFileId')) + ->map(fn (Galley $galley) => (int) $galley->getData('submissionFileId')) ->unique() ->filter(fn (int $submissionFileId) => (bool) $submissionFileId) ->all();