2 namespace wcf\system\package
;
3 use wcf\data\package\installation\queue\PackageInstallationQueue
;
4 use wcf\system\form\FormDocument
;
6 use wcf\util\StringUtil
;
9 * Handels form documents associated with a queue.
11 * @author Alexander Ebert
12 * @copyright 2001-2017 WoltLab GmbH
13 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
14 * @package WoltLabSuite\Core\System\Package\Form
16 abstract class PackageInstallationFormManager
{
18 * Handles a POST or GET request.
20 * @param PackageInstallationQueue $queue
22 public static function handleRequest(PackageInstallationQueue
$queue) {
23 $formName = isset($_REQUEST['formName']) ? StringUtil
::trim($_REQUEST['formName']) : '';
26 if (empty($formName) ||
!self
::findForm($queue, $formName)) return;
29 $document = self
::getForm($queue, $formName);
30 $document->handleRequest();
32 self
::updateForm($queue, $document);
36 * Registers a form document.
38 * @param PackageInstallationQueue $queue
39 * @param FormDocument $document
41 public static function registerForm(PackageInstallationQueue
$queue, FormDocument
$document) {
42 if (self
::findForm($queue, $document->getName())) {
43 self
::updateForm($queue, $document);
46 self
::insertForm($queue, $document);
51 * Searches for an existing form document associated with given queue.
53 * @param PackageInstallationQueue $queue
54 * @param string $formName
57 public static function findForm(PackageInstallationQueue
$queue, $formName) {
58 $sql = "SELECT COUNT(*)
59 FROM wcf".WCF_N
."_package_installation_form
62 $statement = WCF
::getDB()->prepareStatement($sql);
68 return $statement->fetchSingleColumn() > 0;
72 * Inserts a form document into database.
74 * @param PackageInstallationQueue $queue
75 * @param FormDocument $document
77 private static function insertForm(PackageInstallationQueue
$queue, FormDocument
$document) {
78 $sql = "INSERT INTO wcf".WCF_N
."_package_installation_form
79 (queueID, formName, document)
81 $statement = WCF
::getDB()->prepareStatement($sql);
85 base64_encode(serialize($document))
90 * Updates a form document database entry.
92 * @param PackageInstallationQueue $queue
93 * @param FormDocument $document
95 private static function updateForm(PackageInstallationQueue
$queue, FormDocument
$document) {
96 $sql = "UPDATE wcf".WCF_N
."_package_installation_form
100 $statement = WCF
::getDB()->prepareStatement($sql);
101 $statement->execute([
102 base64_encode(serialize($document)),
109 * Deletes form documents associated with given queue.
111 * @param PackageInstallationQueue $queue
113 public static function deleteForms(PackageInstallationQueue
$queue) {
114 $sql = "DELETE FROM wcf".WCF_N
."_package_installation_form
116 $statement = WCF
::getDB()->prepareStatement($sql);
117 $statement->execute([$queue->queueID
]);
121 * Returns a form document from database.
123 * @param PackageInstallationQueue $queue
124 * @param string $formName
125 * @return FormDocument
127 public static function getForm(PackageInstallationQueue
$queue, $formName) {
128 $sql = "SELECT document
129 FROM wcf".WCF_N
."_package_installation_form
132 $statement = WCF
::getDB()->prepareStatement($sql);
133 $statement->execute([
137 $row = $statement->fetchArray();
140 return unserialize(base64_decode($row['document']));