From 0ead239e8215f42db673eb8c18b6b8c745379147 Mon Sep 17 00:00:00 2001 From: agoujot Date: Fri, 9 May 2025 19:59:38 +0200 Subject: [PATCH 1/4] add creation count to sc --- src/Model/SimpleEditCounter.php | 13 +++++++++++++ src/Repository/SimpleEditCounterRepository.php | 7 ++++++- templates/simpleEditCounter/result.html.twig | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Model/SimpleEditCounter.php b/src/Model/SimpleEditCounter.php index 89b3f5440..010833ed8 100644 --- a/src/Model/SimpleEditCounter.php +++ b/src/Model/SimpleEditCounter.php @@ -23,6 +23,7 @@ class SimpleEditCounter extends Model 'live_edit_count' => 0, 'user_groups' => [], 'global_user_groups' => [], + 'creation_count' => 0, ]; /** @@ -105,6 +106,9 @@ private function prepareFullData(): void case 'groups': $this->data['user_groups'][] = $row['value']; break; + case 'creations': + $this->data['creation_count'] = (int)$row['value']; + break; } } @@ -140,6 +144,15 @@ public function getDeletedEditCount(): int return $this->data['deleted_edit_count']; } + /** + * Get number of page creations + * @return int + */ + public function getCreationCount() : int + { + return $this->data['creation_count']; + } + /** * Get the number of live edits. * @return int diff --git a/src/Repository/SimpleEditCounterRepository.php b/src/Repository/SimpleEditCounterRepository.php index ae168a0df..31dba7ea2 100644 --- a/src/Repository/SimpleEditCounterRepository.php +++ b/src/Repository/SimpleEditCounterRepository.php @@ -90,7 +90,12 @@ private function fetchDataNormal( SELECT 'groups' AS source, ug_group AS value FROM $userGroupsTable JOIN $userTable ON user_id = ug_user - WHERE user_name = :username"; + WHERE user_name = :username + UNION + SELECT 'creations' as source, COUNT(*) AS value + FROM $revisionTable + WHERE rev_actor = :actorId + AND rev_parent_id = 0"; return $this->executeProjectsQuery($project, $sql, [ 'username' => $user->getUsername(), diff --git a/templates/simpleEditCounter/result.html.twig b/templates/simpleEditCounter/result.html.twig index 853d0fe9a..986428fcc 100644 --- a/templates/simpleEditCounter/result.html.twig +++ b/templates/simpleEditCounter/result.html.twig @@ -78,6 +78,10 @@ {{ wiki.pageLinkRaw('Special:DeletedContributions/' ~ user.username, project, sec.deletedEditCount|num_format) }} {% endif %} + + {{ msg('pages-created') }} + {{ sec.creationCount }} + {% endif %} From 3f8363bcb2bd3e48400af5785f5d936eabbfe68f Mon Sep 17 00:00:00 2001 From: agoujot Date: Tue, 15 Jul 2025 20:22:32 +0200 Subject: [PATCH 2/4] num_format --- templates/simpleEditCounter/result.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/simpleEditCounter/result.html.twig b/templates/simpleEditCounter/result.html.twig index 986428fcc..23fd5b3f0 100644 --- a/templates/simpleEditCounter/result.html.twig +++ b/templates/simpleEditCounter/result.html.twig @@ -80,7 +80,7 @@ {% endif %} {{ msg('pages-created') }} - {{ sec.creationCount }} + {{ sec.creationCount|num_format }} {% endif %} From fe701fb8d8c2e65018319e649597cea7648a7218 Mon Sep 17 00:00:00 2001 From: agoujot Date: Tue, 15 Jul 2025 20:31:03 +0200 Subject: [PATCH 3/4] filter by ns --- src/Repository/SimpleEditCounterRepository.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Repository/SimpleEditCounterRepository.php b/src/Repository/SimpleEditCounterRepository.php index 31dba7ea2..62ba4ea1f 100644 --- a/src/Repository/SimpleEditCounterRepository.php +++ b/src/Repository/SimpleEditCounterRepository.php @@ -94,7 +94,10 @@ private function fetchDataNormal( UNION SELECT 'creations' as source, COUNT(*) AS value FROM $revisionTable + $revNamespaceJoinSql WHERE rev_actor = :actorId + $revNamespaceWhereSql + $revDateConditions AND rev_parent_id = 0"; return $this->executeProjectsQuery($project, $sql, [ From ed74c7497a9f1ff1a68e7ab1ec1cb6c47686d05e Mon Sep 17 00:00:00 2001 From: agoujot Date: Tue, 15 Jul 2025 21:37:26 +0200 Subject: [PATCH 4/4] better performance by merging subqueries --- src/Model/SimpleEditCounter.php | 7 +++---- .../SimpleEditCounterRepository.php | 20 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Model/SimpleEditCounter.php b/src/Model/SimpleEditCounter.php index 010833ed8..83fab03a5 100644 --- a/src/Model/SimpleEditCounter.php +++ b/src/Model/SimpleEditCounter.php @@ -101,14 +101,13 @@ private function prepareFullData(): void $this->data['deleted_edit_count'] = (int)$row['value']; break; case 'rev': - $this->data['live_edit_count'] = (int)$row['value']; + $values = explode(';', $row['value']); + $this->data['live_edit_count'] = (int)$values[0]; + $this->data['creation_count'] = (int)$values[1]; break; case 'groups': $this->data['user_groups'][] = $row['value']; break; - case 'creations': - $this->data['creation_count'] = (int)$row['value']; - break; } } diff --git a/src/Repository/SimpleEditCounterRepository.php b/src/Repository/SimpleEditCounterRepository.php index 62ba4ea1f..816f939f0 100644 --- a/src/Repository/SimpleEditCounterRepository.php +++ b/src/Repository/SimpleEditCounterRepository.php @@ -80,7 +80,15 @@ private function fetchDataNormal( $arNamespaceWhereSql $arDateConditions UNION - SELECT 'rev' AS source, COUNT(*) AS value + SELECT 'rev' AS source, + CONCAT(COUNT(*), \";\", + COUNT( + CASE rev_parent_id + WHEN 0 + THEN 1 + ELSE NULL + END + )) AS value FROM $revisionTable $revNamespaceJoinSql WHERE rev_actor = :actorId @@ -90,15 +98,7 @@ private function fetchDataNormal( SELECT 'groups' AS source, ug_group AS value FROM $userGroupsTable JOIN $userTable ON user_id = ug_user - WHERE user_name = :username - UNION - SELECT 'creations' as source, COUNT(*) AS value - FROM $revisionTable - $revNamespaceJoinSql - WHERE rev_actor = :actorId - $revNamespaceWhereSql - $revDateConditions - AND rev_parent_id = 0"; + WHERE user_name = :username"; return $this->executeProjectsQuery($project, $sql, [ 'username' => $user->getUsername(),