Added basic contact options
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / plugin / EventListenerPackageInstallationPlugin.class.php
CommitLineData
11ade432
AE
1<?php
2namespace wcf\system\package\plugin;
e0497659
MS
3use wcf\data\event\listener\EventListener;
4use wcf\data\event\listener\EventListenerEditor;
b401cd0d 5use wcf\system\cache\builder\EventListenerCacheBuilder;
11ade432
AE
6use wcf\system\WCF;
7
8/**
a17de04e 9 * Installs, updates and deletes event listeners.
11ade432
AE
10 *
11 * @author Marcel Werk
cea1798f 12 * @copyright 2001-2017 WoltLab GmbH
11ade432 13 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
e71525e4 14 * @package WoltLabSuite\Core\System\Package\Plugin
11ade432
AE
15 */
16class EventListenerPackageInstallationPlugin extends AbstractXMLPackageInstallationPlugin {
17 /**
0fcfe5f6 18 * @inheritDoc
11ade432 19 */
157054c9 20 public $className = EventListenerEditor::class;
11ade432 21
11ade432 22 /**
0fcfe5f6 23 * @inheritDoc
9f959ced 24 */
11ade432
AE
25 public $tagName = 'eventlistener';
26
27 /**
0fcfe5f6 28 * @inheritDoc
11ade432
AE
29 */
30 protected function handleDelete(array $items) {
31 $sql = "DELETE FROM wcf".WCF_N."_".$this->tableName."
32 WHERE packageID = ?
7e6405f8 33 AND environment = ?
11ade432 34 AND eventClassName = ?
5a822fcf 35 AND eventName = ?
11ade432
AE
36 AND inherit = ?
37 AND listenerClassName = ?";
e0497659
MS
38 $legacyStatement = WCF::getDB()->prepareStatement($sql);
39
40 $sql = "DELETE FROM wcf".WCF_N."_".$this->tableName."
41 WHERE packageID = ?
42 AND listenerName = ?";
11ade432 43 $statement = WCF::getDB()->prepareStatement($sql);
e0497659 44
11ade432 45 foreach ($items as $item) {
e0497659 46 if (!isset($item['attributes']['name'])) {
058cbd6a 47 $legacyStatement->execute([
e0497659 48 $this->installation->getPackageID(),
63b9817b 49 isset($item['elements']['environment']) ? $item['elements']['environment'] : 'user',
e0497659
MS
50 $item['elements']['eventclassname'],
51 $item['elements']['eventname'],
63b9817b 52 isset($item['elements']['inherit']) ? $item['elements']['inherit'] : 0,
e0497659 53 $item['elements']['listenerclassname']
058cbd6a 54 ]);
e0497659
MS
55 }
56 else {
058cbd6a 57 $statement->execute([
e0497659
MS
58 $this->installation->getPackageID(),
59 $item['attributes']['name']
058cbd6a 60 ]);
e0497659 61 }
11ade432
AE
62 }
63 }
64
65 /**
0fcfe5f6 66 * @inheritDoc
11ade432
AE
67 */
68 protected function prepareImport(array $data) {
63b9817b 69 $nice = isset($data['elements']['nice']) ? intval($data['elements']['nice']) : 0;
11ade432
AE
70 if ($nice < -128) $nice = -128;
71 else if ($nice > 127) $nice = 127;
72
058cbd6a 73 return [
63b9817b 74 'environment' => isset($data['elements']['environment']) ? $data['elements']['environment'] : 'user',
11ade432
AE
75 'eventClassName' => $data['elements']['eventclassname'],
76 'eventName' => $data['elements']['eventname'],
63b9817b 77 'inherit' => isset($data['elements']['inherit']) ? intval($data['elements']['inherit']) : 0,
11ade432 78 'listenerClassName' => $data['elements']['listenerclassname'],
63b9817b 79 'listenerName' => isset($data['attributes']['name']) ? $data['attributes']['name'] : '',
ffdebe9c 80 'niceValue' => $nice,
63b9817b
MS
81 'options' => isset($data['elements']['options']) ? $data['elements']['options'] : '',
82 'permissions' => isset($data['elements']['permissions']) ? $data['elements']['permissions'] : ''
058cbd6a 83 ];
11ade432
AE
84 }
85
e0497659 86 /**
0fcfe5f6 87 * @inheritDoc
e0497659
MS
88 */
89 protected function import(array $row, array $data) {
90 // if an event listener is updated without a name given, keep the
91 // old automatically assigned name
92 if (!empty($row) && !$data['listenerName']) {
93 unset($data['listenerName']);
94 }
95
a13849b8 96 /** @var EventListener $eventListener */
e0497659
MS
97 $eventListener = parent::import($row, $data);
98
99 // update event listener name
100 if (!$eventListener->listenerName) {
101 $eventListenerEditor = new EventListenerEditor($eventListener);
058cbd6a 102 $eventListenerEditor->update([
e0497659 103 'listenerName' => EventListener::AUTOMATIC_NAME_PREFIX.$eventListener->listenerID
058cbd6a 104 ]);
e0497659
MS
105
106 $eventListener = new EventListener($eventListener->listenerID);
107 }
108
109 return $eventListener;
110 }
111
11ade432 112 /**
0fcfe5f6 113 * @inheritDoc
11ade432
AE
114 */
115 protected function findExistingItem(array $data) {
e0497659
MS
116 if (!$data['listenerName']) {
117 $sql = "SELECT *
118 FROM wcf".WCF_N."_".$this->tableName."
119 WHERE packageID = ?
120 AND environment = ?
121 AND eventClassName = ?
122 AND eventName = ?
123 AND listenerClassName = ?";
058cbd6a 124 $parameters = [
e0497659
MS
125 $this->installation->getPackageID(),
126 $data['environment'],
127 $data['eventClassName'],
128 $data['eventName'],
129 $data['listenerClassName']
058cbd6a 130 ];
e0497659
MS
131 }
132 else {
133 $sql = "SELECT *
134 FROM wcf".WCF_N."_".$this->tableName."
135 WHERE packageID = ?
136 AND listenerName = ?";
058cbd6a 137 $parameters = [
e0497659
MS
138 $this->installation->getPackageID(),
139 $data['listenerName']
058cbd6a 140 ];
e0497659 141 }
11ade432 142
058cbd6a 143 return [
11ade432
AE
144 'sql' => $sql,
145 'parameters' => $parameters
058cbd6a 146 ];
11ade432
AE
147 }
148
149 /**
0fcfe5f6 150 * @inheritDoc
11ade432
AE
151 */
152 public function uninstall() {
153 parent::uninstall();
154
155 // clear cache immediately
b401cd0d 156 EventListenerCacheBuilder::getInstance()->reset();
11ade432
AE
157 }
158}