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 |
ca4ba303 | 10 | * @copyright 2001-2014 WoltLab GmbH |
11ade432 AE |
11 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
12 | * @package com.woltlab.wcf | |
13 | * @subpackage system.package | |
9f959ced | 14 | * @category Community Framework |
11ade432 AE |
15 | */ |
16 | class TemplatesFileHandler extends ACPTemplatesFileHandler { | |
701dd384 | 17 | /** |
0ad90fc3 | 18 | * @see \wcf\system\package\ACPTemplatesFileHandler::$tableName |
701dd384 MS |
19 | */ |
20 | protected $tableName = 'template'; | |
577229e3 MW |
21 | |
22 | /** | |
0ad90fc3 | 23 | * @see \wcf\system\setup\IFileHandler::logFiles() |
577229e3 MW |
24 | */ |
25 | public function logFiles(array $files) { | |
26 | $packageID = $this->packageInstallation->getPackageID(); | |
2d63c13c | 27 | |
577229e3 MW |
28 | // remove file extension |
29 | foreach ($files as &$file) { | |
e4adbaef | 30 | $file = substr($file, 0, -4); |
577229e3 MW |
31 | } |
32 | unset($file); | |
2d63c13c | 33 | |
577229e3 MW |
34 | // get existing templates |
35 | $existingTemplates = $updateTemplateIDs = array(); | |
36 | $sql = "SELECT templateName, templateID | |
37 | FROM wcf".WCF_N."_template | |
38 | WHERE packageID = ? | |
04727c8b | 39 | AND application = ? |
577229e3 MW |
40 | AND templateGroupID IS NULL"; |
41 | $statement = WCF::getDB()->prepareStatement($sql); | |
04727c8b | 42 | $statement->execute(array($packageID, $this->application)); |
577229e3 MW |
43 | while ($row = $statement->fetchArray()) { |
44 | $existingTemplates[$row['templateName']] = $row['templateID']; | |
45 | } | |
2d63c13c | 46 | |
577229e3 MW |
47 | // save new templates |
48 | $sql = "INSERT INTO wcf".WCF_N."_template | |
04727c8b MS |
49 | (packageID, templateName, lastModificationTime, application) |
50 | VALUES (?, ?, ?, ?)"; | |
577229e3 MW |
51 | $statement = WCF::getDB()->prepareStatement($sql); |
52 | foreach ($files as $file) { | |
53 | if (isset($existingTemplates[$file])) { | |
54 | $updateTemplateIDs[] = $existingTemplates[$file]; | |
55 | continue; | |
56 | } | |
57 | ||
58 | $statement->execute(array( | |
59 | $packageID, | |
60 | $file, | |
04727c8b MS |
61 | TIME_NOW, |
62 | $this->application | |
577229e3 MW |
63 | )); |
64 | } | |
65 | ||
66 | if (!empty($updateTemplateIDs)) { | |
67 | // update old templates | |
68 | $conditionBuilder = new PreparedStatementConditionBuilder(); | |
69 | $conditionBuilder->add('templateID IN (?)', array($updateTemplateIDs)); | |
70 | ||
71 | $sql = "UPDATE wcf".WCF_N."_template | |
72 | SET lastModificationTime = ? | |
73 | ".$conditionBuilder; | |
74 | $statement = WCF::getDB()->prepareStatement($sql); | |
75 | $statement->execute(array_merge(array(TIME_NOW), $conditionBuilder->getParameters())); | |
76 | } | |
77 | } | |
11ade432 | 78 | } |