Commit | Line | Data |
---|---|---|
11ade432 | 1 | <?php |
6e9acece | 2 | namespace wcf\system\package; |
11ade432 AE |
3 | use wcf\data\package\installation\queue\PackageInstallationQueue; |
4 | use wcf\system\form\FormDocument; | |
5 | use wcf\system\WCF; | |
6 | use wcf\util\StringUtil; | |
7 | ||
8 | /** | |
a17de04e | 9 | * Handels form documents associated with a queue. |
9f959ced | 10 | * |
11ade432 | 11 | * @author Alexander Ebert |
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\Form |
11ade432 AE |
15 | */ |
16 | abstract class PackageInstallationFormManager { | |
17 | /** | |
18 | * Handles a POST or GET request. | |
9f959ced | 19 | * |
11ade432 AE |
20 | * @param PackageInstallationQueue $queue |
21 | */ | |
22 | public static function handleRequest(PackageInstallationQueue $queue) { | |
63b9817b | 23 | $formName = isset($_REQUEST['formName']) ? StringUtil::trim($_REQUEST['formName']) : ''; |
11ade432 AE |
24 | |
25 | // ignore request | |
26 | if (empty($formName) || !self::findForm($queue, $formName)) return; | |
27 | ||
28 | // get document | |
29 | $document = self::getForm($queue, $formName); | |
30 | $document->handleRequest(); | |
31 | ||
32 | self::updateForm($queue, $document); | |
33 | } | |
34 | ||
35 | /** | |
36 | * Registers a form document. | |
9f959ced | 37 | * |
11ade432 AE |
38 | * @param PackageInstallationQueue $queue |
39 | * @param FormDocument $document | |
40 | */ | |
41 | public static function registerForm(PackageInstallationQueue $queue, FormDocument $document) { | |
42 | if (self::findForm($queue, $document->getName())) { | |
43 | self::updateForm($queue, $document); | |
44 | } | |
45 | else { | |
46 | self::insertForm($queue, $document); | |
47 | } | |
48 | } | |
49 | ||
50 | /** | |
51 | * Searches for an existing form document associated with given queue. | |
9f959ced | 52 | * |
11ade432 AE |
53 | * @param PackageInstallationQueue $queue |
54 | * @param string $formName | |
55 | * @return boolean | |
56 | */ | |
57 | public static function findForm(PackageInstallationQueue $queue, $formName) { | |
5c6ddd85 | 58 | $sql = "SELECT COUNT(*) |
11ade432 AE |
59 | FROM wcf".WCF_N."_package_installation_form |
60 | WHERE queueID = ? | |
61 | AND formName = ?"; | |
62 | $statement = WCF::getDB()->prepareStatement($sql); | |
058cbd6a | 63 | $statement->execute([ |
11ade432 AE |
64 | $queue->queueID, |
65 | $formName | |
058cbd6a | 66 | ]); |
11ade432 | 67 | |
5c6ddd85 | 68 | return $statement->fetchSingleColumn() > 0; |
11ade432 AE |
69 | } |
70 | ||
71 | /** | |
72 | * Inserts a form document into database. | |
9f959ced | 73 | * |
11ade432 AE |
74 | * @param PackageInstallationQueue $queue |
75 | * @param FormDocument $document | |
76 | */ | |
77 | private static function insertForm(PackageInstallationQueue $queue, FormDocument $document) { | |
78 | $sql = "INSERT INTO wcf".WCF_N."_package_installation_form | |
79 | (queueID, formName, document) | |
80 | VALUES (?, ?, ?)"; | |
81 | $statement = WCF::getDB()->prepareStatement($sql); | |
058cbd6a | 82 | $statement->execute([ |
11ade432 AE |
83 | $queue->queueID, |
84 | $document->getName(), | |
fcc4e5b5 | 85 | base64_encode(serialize($document)) |
058cbd6a | 86 | ]); |
11ade432 AE |
87 | } |
88 | ||
89 | /** | |
90 | * Updates a form document database entry. | |
9f959ced | 91 | * |
11ade432 AE |
92 | * @param PackageInstallationQueue $queue |
93 | * @param FormDocument $document | |
94 | */ | |
95 | private static function updateForm(PackageInstallationQueue $queue, FormDocument $document) { | |
96 | $sql = "UPDATE wcf".WCF_N."_package_installation_form | |
97 | SET document = ? | |
98 | WHERE queueID = ? | |
99 | AND formName = ?"; | |
100 | $statement = WCF::getDB()->prepareStatement($sql); | |
058cbd6a | 101 | $statement->execute([ |
fcc4e5b5 | 102 | base64_encode(serialize($document)), |
11ade432 | 103 | $queue->queueID, |
87dba389 | 104 | $document->getName() |
058cbd6a | 105 | ]); |
11ade432 AE |
106 | } |
107 | ||
108 | /** | |
109 | * Deletes form documents associated with given queue. | |
9f959ced | 110 | * |
11ade432 AE |
111 | * @param PackageInstallationQueue $queue |
112 | */ | |
113 | public static function deleteForms(PackageInstallationQueue $queue) { | |
114 | $sql = "DELETE FROM wcf".WCF_N."_package_installation_form | |
115 | WHERE queueID = ?"; | |
116 | $statement = WCF::getDB()->prepareStatement($sql); | |
058cbd6a | 117 | $statement->execute([$queue->queueID]); |
11ade432 AE |
118 | } |
119 | ||
120 | /** | |
121 | * Returns a form document from database. | |
9f959ced | 122 | * |
11ade432 AE |
123 | * @param PackageInstallationQueue $queue |
124 | * @param string $formName | |
125 | * @return FormDocument | |
126 | */ | |
127 | public static function getForm(PackageInstallationQueue $queue, $formName) { | |
128 | $sql = "SELECT document | |
129 | FROM wcf".WCF_N."_package_installation_form | |
130 | WHERE queueID = ? | |
131 | AND formName = ?"; | |
132 | $statement = WCF::getDB()->prepareStatement($sql); | |
058cbd6a | 133 | $statement->execute([ |
11ade432 AE |
134 | $queue->queueID, |
135 | $formName | |
058cbd6a | 136 | ]); |
11ade432 AE |
137 | $row = $statement->fetchArray(); |
138 | ||
139 | if ($row) { | |
241627da | 140 | return unserialize(base64_decode($row['document'])); |
11ade432 AE |
141 | } |
142 | ||
143 | return null; | |
144 | } | |
145 | } |