Store SHA-256 hashes in `wcf1_package_installation_file_log`
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / FilesFileHandler.class.php
index 2133591bd0cf84ea12e77b6c74a54568ad6f92e0..37f9de5e19186fd50c7df97adf138094cd05c118 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace wcf\system\package;
 
+use wcf\data\application\Application;
 use wcf\data\package\Package;
 use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\exception\SystemException;
@@ -61,9 +62,13 @@ class FilesFileHandler extends PackageInstallationFileHandler
             return;
         }
 
-        $sql = "INSERT IGNORE INTO  wcf" . WCF_N . "_package_installation_file_log
-                                    (packageID, filename, application)
-                VALUES              (?, ?, ?)";
+        $baseDirectory = Application::getDirectory($this->application);
+
+        $sql = "INSERT INTO             wcf1_package_installation_file_log
+                                        (packageID, filename, application, sha256, lastUpdated)
+                VALUES                  (?, ?, ?, ?, ?)
+                ON DUPLICATE KEY UPDATE sha256 = VALUES(sha256),
+                                        lastUpdated = VALUES(lastUpdated)";
         $statement = WCF::getDB()->prepareStatement($sql);
 
         WCF::getDB()->beginTransaction();
@@ -72,6 +77,8 @@ class FilesFileHandler extends PackageInstallationFileHandler
                 $this->packageInstallation->getPackageID(),
                 $file,
                 $this->application,
+                \hash_file('sha256', $baseDirectory . $file, true),
+                TIME_NOW,
             ]);
         }
         WCF::getDB()->commitTransaction();