Resolve language item-related PIP GUI todos
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / TemplatesFileHandler.class.php
... / ...
CommitLineData
1<?php
2namespace wcf\system\package;
3use wcf\system\database\util\PreparedStatementConditionBuilder;
4use wcf\system\WCF;
5
6/**
7 * File handler implementation for the installation of template files.
8 *
9 * @author Marcel Werk
10 * @copyright 2001-2018 WoltLab GmbH
11 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
12 * @package WoltLabSuite\Core\System\Package
13 */
14class TemplatesFileHandler extends ACPTemplatesFileHandler {
15 /**
16 * @inheritDoc
17 */
18 protected $supportsTemplateGroups = true;
19
20 /**
21 * @inheritDoc
22 */
23 protected $tableName = 'template';
24
25 /**
26 * @inheritDoc
27 */
28 public function logFiles(array $files) {
29 $packageID = $this->packageInstallation->getPackageID();
30
31 // remove file extension
32 foreach ($files as &$file) {
33 $file = substr($file, 0, -4);
34 }
35 unset($file);
36
37 // get existing templates
38 $updateTemplateIDs = [];
39 $sql = "SELECT templateName, templateID
40 FROM wcf".WCF_N."_template
41 WHERE packageID = ?
42 AND application = ?
43 AND templateGroupID IS NULL";
44 $statement = WCF::getDB()->prepareStatement($sql);
45 $statement->execute([$packageID, $this->application]);
46 $existingTemplates = $statement->fetchMap('templateName', 'templateID');
47
48 // save new templates
49 $sql = "INSERT INTO wcf".WCF_N."_template
50 (packageID, templateName, lastModificationTime, application)
51 VALUES (?, ?, ?, ?)";
52 $statement = WCF::getDB()->prepareStatement($sql);
53 foreach ($files as $file) {
54 if (isset($existingTemplates[$file])) {
55 $updateTemplateIDs[] = $existingTemplates[$file];
56 continue;
57 }
58
59 $statement->execute([
60 $packageID,
61 $file,
62 TIME_NOW,
63 $this->application
64 ]);
65 }
66
67 if (!empty($updateTemplateIDs)) {
68 // update old templates
69 $conditionBuilder = new PreparedStatementConditionBuilder();
70 $conditionBuilder->add('templateID IN (?)', [$updateTemplateIDs]);
71
72 $sql = "UPDATE wcf".WCF_N."_template
73 SET lastModificationTime = ?
74 ".$conditionBuilder;
75 $statement = WCF::getDB()->prepareStatement($sql);
76 $statement->execute(array_merge([TIME_NOW], $conditionBuilder->getParameters()));
77 }
78 }
79}