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