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