From 3cf9f794c5ef1abaac5d4430d6c254d27ff6c413 Mon Sep 17 00:00:00 2001
From: Anja <aleichsenring@ab-softlab.de>
Date: Fri, 29 Dec 2017 09:44:59 +0100
Subject: [PATCH] [TASK] Add section for translated pages to lowlevel
 statistics page

Since table pages holds both default language and translated records,
the statistics don't add up anymore.
By introducing a dedicated value count for translated pages, the
sums are equal with the page tree again.

Resolves: #83444
Releases: master
Change-Id: Ice6edde88a15e9590a86ced78565b180d2546ab7
Reviewed-on: https://review.typo3.org/55229
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Tested-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
---
 .../Integrity/DatabaseIntegrityCheck.php      | 21 +++++++++++++++++--
 .../DatabaseIntegrityController.php           |  4 ++++
 .../Resources/Private/Language/locallang.xlf  |  5 ++++-
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/core/Classes/Integrity/DatabaseIntegrityCheck.php b/typo3/sysext/core/Classes/Integrity/DatabaseIntegrityCheck.php
index 1dfdd08681d6..ba5fed651ee3 100644
--- a/typo3/sysext/core/Classes/Integrity/DatabaseIntegrityCheck.php
+++ b/typo3/sysext/core/Classes/Integrity/DatabaseIntegrityCheck.php
@@ -53,6 +53,11 @@ class DatabaseIntegrityCheck
      */
     public $page_idArray = [];
 
+    /**
+     * @var array Will hold id/rec pairs from genTree() that are not default language
+     */
+    protected $page_translatedPageIDArray = [];
+
     /**
      * @var array
      */
@@ -92,6 +97,14 @@ class DatabaseIntegrityCheck
      */
     public $lostPagesList = '';
 
+    /**
+     * @return array
+     */
+    public function getPageTranslatedPageIDArray(): array
+    {
+        return $this->page_translatedPageIDArray;
+    }
+
     /**
      * Generates a list of Page-uid's that corresponds to the tables in the tree.
      * This list should ideally include all records in the pages-table.
@@ -107,7 +120,7 @@ class DatabaseIntegrityCheck
         if (!$this->genTree_includeDeleted) {
             $queryBuilder->getRestrictions()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
         }
-        $queryBuilder->select('uid', 'title', 'doktype', 'deleted', 'hidden')
+        $queryBuilder->select('uid', 'title', 'doktype', 'deleted', 'hidden', 'sys_language_uid')
             ->from('pages')
             ->orderBy('sorting');
         if ($versions) {
@@ -126,7 +139,11 @@ class DatabaseIntegrityCheck
         while ($row = $result->fetch()) {
             $newID = $row['uid'];
             // Register various data for this item:
-            $this->page_idArray[$newID] = $row;
+            if ($row['sys_language_uid'] === 0) {
+                $this->page_idArray[$newID] = $row;
+            } else {
+                $this->page_translatedPageIDArray[$newID] = $row;
+            }
             $this->recStats['all_valid']['pages'][$newID] = $newID;
             if ($row['deleted']) {
                 $this->recStats['deleted']['pages'][$newID] = $newID;
diff --git a/typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php b/typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php
index 5cc96505a6f8..8cc6b9eb7710 100644
--- a/typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php
+++ b/typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php
@@ -378,6 +378,10 @@ class DatabaseIntegrityController
                 'icon' => $this->iconFactory->getIconForRecord('pages', [], Icon::SIZE_SMALL)->render(),
                 'count' => count($admin->page_idArray)
             ],
+            'translated_pages' => [
+                'icon' => $this->iconFactory->getIconForRecord('pages', [], Icon::SIZE_SMALL)->render(),
+                'count' => count($admin->getPageTranslatedPageIDArray()),
+            ],
             'hidden_pages' => [
                 'icon' => $this->iconFactory->getIconForRecord('pages', ['hidden' => 1], Icon::SIZE_SMALL)->render(),
                 'count' => $admin->recStats['hidden']
diff --git a/typo3/sysext/lowlevel/Resources/Private/Language/locallang.xlf b/typo3/sysext/lowlevel/Resources/Private/Language/locallang.xlf
index 59178aa94e7f..ebfa1a77d052 100644
--- a/typo3/sysext/lowlevel/Resources/Private/Language/locallang.xlf
+++ b/typo3/sysext/lowlevel/Resources/Private/Language/locallang.xlf
@@ -226,7 +226,10 @@
 				<source>Pages</source>
 			</trans-unit>
 			<trans-unit id="total_pages">
-				<source>Total number of pages</source>
+				<source>Total number of default language pages</source>
+			</trans-unit>
+			<trans-unit id="translated_pages">
+				<source>Total number of translated pages</source>
 			</trans-unit>
 			<trans-unit id="deleted_pages">
 				<source>Marked-deleted pages</source>
-- 
GitLab