Fixed `WCF::getActivePage()` failing for CMS pages
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / package / PackageInstallationFormManager.class.php
CommitLineData
11ade432 1<?php
6e9acece 2namespace wcf\system\package;
11ade432
AE
3use wcf\data\package\installation\queue\PackageInstallationQueue;
4use wcf\system\form\FormDocument;
5use wcf\system\WCF;
6use 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 */
18abstract 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}