Fixed time zone calculation issue
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / plugin / AbstractPackageInstallationPlugin.class.php
1 <?php
2 namespace wcf\system\package\plugin;
3 use wcf\system\event\EventHandler;
4 use wcf\system\package\PackageInstallationDispatcher;
5 use wcf\system\WCF;
6
7 /**
8 * Abstract implementation of a package installation plugin.
9 *
10 * @author Alexander Ebert
11 * @copyright 2001-2014 WoltLab GmbH
12 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
13 * @package com.woltlab.wcf
14 * @subpackage system.package.plugin
15 * @category Community Framework
16 */
17 abstract class AbstractPackageInstallationPlugin implements IPackageInstallationPlugin {
18 /**
19 * table application prefix
20 * @var string
21 */
22 public $application = 'wcf';
23
24 /**
25 * database table name
26 * @var string
27 */
28 public $tableName = '';
29
30 /**
31 * active instance of PackageInstallationDispatcher
32 * @var \wcf\system\package\PackageInstallationDispatcher
33 */
34 public $installation = null;
35
36 /**
37 * install/update instructions
38 * @var array
39 */
40 public $instruction = array();
41
42 /**
43 * Creates a new AbstractPackageInstallationPlugin object.
44 *
45 * @param \wcf\system\package\PackageInstallationDispatcher $installation
46 * @param array $instruction
47 */
48 public function __construct(PackageInstallationDispatcher $installation, $instruction = array()) {
49 $this->installation = $installation;
50 $this->instruction = $instruction;
51
52 // call 'construct' event
53 EventHandler::getInstance()->fireAction($this, 'construct');
54 }
55
56 /**
57 * @see \wcf\system\package\plugin\IPackageInstallationPlugin::install()
58 */
59 public function install() {
60 // call 'install' event
61 EventHandler::getInstance()->fireAction($this, 'install');
62 }
63
64 /**
65 * @see \wcf\system\package\plugin\IPackageInstallationPlugin::update()
66 */
67 public function update() {
68 // call 'update' event
69 EventHandler::getInstance()->fireAction($this, 'update');
70
71 return $this->install();
72 }
73
74 /**
75 * @see \wcf\system\package\plugin\IPackageInstallationPlugin::hasUninstall()
76 */
77 public function hasUninstall() {
78 // call 'hasUninstall' event
79 EventHandler::getInstance()->fireAction($this, 'hasUninstall');
80
81 $sql = "SELECT COUNT(*) AS count
82 FROM ".$this->application.WCF_N."_".$this->tableName."
83 WHERE packageID = ?";
84 $statement = WCF::getDB()->prepareStatement($sql);
85 $statement->execute(array($this->installation->getPackageID()));
86 $installationCount = $statement->fetchArray();
87 return $installationCount['count'];
88 }
89
90 /**
91 * @see \wcf\system\package\plugin\IPackageInstallationPlugin::uninstall()
92 */
93 public function uninstall() {
94 // call 'uninstall' event
95 EventHandler::getInstance()->fireAction($this, 'uninstall');
96
97 $sql = "DELETE FROM ".$this->application.WCF_N."_".$this->tableName."
98 WHERE packageID = ?";
99 $statement = WCF::getDB()->prepareStatement($sql);
100 $statement->execute(array($this->installation->getPackageID()));
101 }
102 }