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 |
7d739af0 | 10 | * @copyright 2001-2016 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 |
058cbd6a | 38 | $existingTemplates = $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]); |
577229e3 MW |
46 | while ($row = $statement->fetchArray()) { |
47 | $existingTemplates[$row['templateName']] = $row['templateID']; | |
48 | } | |
2d63c13c | 49 | |
577229e3 MW |
50 | // save new templates |
51 | $sql = "INSERT INTO wcf".WCF_N."_template | |
04727c8b MS |
52 | (packageID, templateName, lastModificationTime, application) |
53 | VALUES (?, ?, ?, ?)"; | |
577229e3 MW |
54 | $statement = WCF::getDB()->prepareStatement($sql); |
55 | foreach ($files as $file) { | |
56 | if (isset($existingTemplates[$file])) { | |
57 | $updateTemplateIDs[] = $existingTemplates[$file]; | |
58 | continue; | |
59 | } | |
60 | ||
058cbd6a | 61 | $statement->execute([ |
577229e3 MW |
62 | $packageID, |
63 | $file, | |
04727c8b MS |
64 | TIME_NOW, |
65 | $this->application | |
058cbd6a | 66 | ]); |
577229e3 MW |
67 | } |
68 | ||
69 | if (!empty($updateTemplateIDs)) { | |
70 | // update old templates | |
71 | $conditionBuilder = new PreparedStatementConditionBuilder(); | |
058cbd6a | 72 | $conditionBuilder->add('templateID IN (?)', [$updateTemplateIDs]); |
577229e3 MW |
73 | |
74 | $sql = "UPDATE wcf".WCF_N."_template | |
75 | SET lastModificationTime = ? | |
76 | ".$conditionBuilder; | |
77 | $statement = WCF::getDB()->prepareStatement($sql); | |
058cbd6a | 78 | $statement->execute(array_merge([TIME_NOW], $conditionBuilder->getParameters())); |
577229e3 MW |
79 | } |
80 | } | |
11ade432 | 81 | } |