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) { | |
5c6ddd85 | 60 | $sql = "SELECT COUNT(*) |
11ade432 AE |
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 | )); | |
11ade432 | 69 | |
5c6ddd85 | 70 | return $statement->fetchSingleColumn() > 0; |
11ade432 AE |
71 | } |
72 | ||
73 | /** | |
74 | * Inserts a form document into database. | |
9f959ced | 75 | * |
11ade432 AE |
76 | * @param PackageInstallationQueue $queue |
77 | * @param FormDocument $document | |
78 | */ | |
79 | private static function insertForm(PackageInstallationQueue $queue, FormDocument $document) { | |
80 | $sql = "INSERT INTO wcf".WCF_N."_package_installation_form | |
81 | (queueID, formName, document) | |
82 | VALUES (?, ?, ?)"; | |
83 | $statement = WCF::getDB()->prepareStatement($sql); | |
84 | $statement->execute(array( | |
85 | $queue->queueID, | |
86 | $document->getName(), | |
fcc4e5b5 | 87 | base64_encode(serialize($document)) |
11ade432 AE |
88 | )); |
89 | } | |
90 | ||
91 | /** | |
92 | * Updates a form document database entry. | |
9f959ced | 93 | * |
11ade432 AE |
94 | * @param PackageInstallationQueue $queue |
95 | * @param FormDocument $document | |
96 | */ | |
97 | private static function updateForm(PackageInstallationQueue $queue, FormDocument $document) { | |
98 | $sql = "UPDATE wcf".WCF_N."_package_installation_form | |
99 | SET document = ? | |
100 | WHERE queueID = ? | |
101 | AND formName = ?"; | |
102 | $statement = WCF::getDB()->prepareStatement($sql); | |
103 | $statement->execute(array( | |
fcc4e5b5 | 104 | base64_encode(serialize($document)), |
11ade432 | 105 | $queue->queueID, |
734662c9 | 106 | $document->formName // TODO: FormDocument::$formName does not exist, FormDocument::getName()? |
11ade432 AE |
107 | )); |
108 | } | |
109 | ||
110 | /** | |
111 | * Deletes form documents associated with given queue. | |
9f959ced | 112 | * |
11ade432 AE |
113 | * @param PackageInstallationQueue $queue |
114 | */ | |
115 | public static function deleteForms(PackageInstallationQueue $queue) { | |
116 | $sql = "DELETE FROM wcf".WCF_N."_package_installation_form | |
117 | WHERE queueID = ?"; | |
118 | $statement = WCF::getDB()->prepareStatement($sql); | |
119 | $statement->execute(array($queue->queueID)); | |
120 | } | |
121 | ||
122 | /** | |
123 | * Returns a form document from database. | |
9f959ced | 124 | * |
11ade432 AE |
125 | * @param PackageInstallationQueue $queue |
126 | * @param string $formName | |
127 | * @return FormDocument | |
128 | */ | |
129 | public static function getForm(PackageInstallationQueue $queue, $formName) { | |
130 | $sql = "SELECT document | |
131 | FROM wcf".WCF_N."_package_installation_form | |
132 | WHERE queueID = ? | |
133 | AND formName = ?"; | |
134 | $statement = WCF::getDB()->prepareStatement($sql); | |
135 | $statement->execute(array( | |
136 | $queue->queueID, | |
137 | $formName | |
138 | )); | |
139 | $row = $statement->fetchArray(); | |
140 | ||
141 | if ($row) { | |
fcc4e5b5 | 142 | $document = unserialize(base64_decode($row['document'])); |
11ade432 AE |
143 | return $document; |
144 | } | |
145 | ||
146 | return null; | |
147 | } | |
148 | } |