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