Changed class name references
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / FilesFileHandler.class.php
CommitLineData
11ade432
AE
1<?php
2namespace wcf\system\package;
04727c8b 3use wcf\data\package\Package;
11ade432 4use wcf\system\database\util\PreparedStatementConditionBuilder;
04727c8b 5use wcf\system\exception\SystemException;
11ade432
AE
6use wcf\system\WCF;
7
8/**
a17de04e 9 * File handler implementation for the installation of regular files.
11ade432 10 *
04727c8b
MS
11 * @author Matthias Schmidt, Marcel Werk
12 * @copyright 2001-2013 WoltLab GmbH
11ade432
AE
13 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
14 * @package com.woltlab.wcf
15 * @subpackage system.package
9f959ced 16 * @category Community Framework
11ade432
AE
17 */
18class FilesFileHandler extends PackageInstallationFileHandler {
19 /**
0ad90fc3 20 * @see \wcf\system\setup\IFileHandler::checkFiles()
11ade432
AE
21 */
22 public function checkFiles(array $files) {
23 if ($this->packageInstallation->getPackage()->package != 'com.woltlab.wcf') {
24 if (!empty($files)) {
04727c8b
MS
25 // get registered files of other packages for the
26 // same application
11ade432 27 $conditions = new PreparedStatementConditionBuilder();
04727c8b
MS
28 $conditions->add('packageID <> ?', array($this->packageInstallation->getPackageID()));
29 $conditions->add('filename IN (?)', array($files));
30 $conditions->add('application = ?', array($this->application));
11ade432 31
04727c8b
MS
32 $sql = "SELECT filename, packageID
33 FROM wcf".WCF_N."_package_installation_file_log
11ade432
AE
34 ".$conditions;
35 $statement = WCF::getDB()->prepareStatement($sql);
36 $statement->execute($conditions->getParameters());
37 $lockedFiles = array();
38 while ($row = $statement->fetchArray()) {
04727c8b 39 $lockedFiles[$row['filename']] = $row['packageID'];
11ade432
AE
40 }
41
42 // check delivered files
15fa2802 43 if (!empty($lockedFiles)) {
11ade432 44 foreach ($files as $key => $file) {
04727c8b
MS
45 if (isset($lockedFiles[$file])) {
46 $owningPackage = new Package($lockedFiles[$file]);
47
48 throw new SystemException("A package can't overwrite files from other packages. Only an update from the package which owns the file can do that. (Package '".$this->packageInstallation->getPackage()->package."' tries to overwrite file '".$file."', which is owned by package '".$owningPackage->package."')");
11ade432
AE
49 }
50 }
51 }
52 }
53 }
54 }
55
56 /**
0ad90fc3 57 * @see \wcf\system\setup\IFileHandler::logFiles()
11ade432
AE
58 */
59 public function logFiles(array $files) {
60 if (empty($files)) {
61 return;
62 }
63
52e3cc87 64 $sql = "INSERT IGNORE INTO wcf".WCF_N."_package_installation_file_log
1be29799 65 (packageID, filename, application)
52e3cc87
AE
66 VALUES (?, ?, ?)";
67 $statement = WCF::getDB()->prepareStatement($sql);
68
69 WCF::getDB()->beginTransaction();
70 foreach ($files as $file) {
71 $statement->execute(array(
72 $this->packageInstallation->getPackageID(),
73 $file,
74 $this->application
75 ));
11ade432 76 }
52e3cc87 77 WCF::getDB()->commitTransaction();
11ade432
AE
78 }
79}