2 declare(strict_types
=1);
3 namespace wcf\system\package
;
4 use wcf\data\package\installation\queue\PackageInstallationQueue
;
5 use wcf\system\form\FormDocument
;
7 use wcf\util\StringUtil
;
10 * Handles form documents associated with a queue.
12 * @author Alexander Ebert
13 * @copyright 2001-2018 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
15 * @package WoltLabSuite\Core\System\Package\Form
17 abstract class PackageInstallationFormManager
{
19 * Handles a POST or GET request.
21 * @param PackageInstallationQueue $queue
23 public static function handleRequest(PackageInstallationQueue
$queue) {
24 $formName = isset($_REQUEST['formName']) ? StringUtil
::trim($_REQUEST['formName']) : '';
27 if (empty($formName) ||
!self
::findForm($queue, $formName)) return;
30 $document = self
::getForm($queue, $formName);
31 $document->handleRequest();
33 self
::updateForm($queue, $document);
37 * Registers a form document.
39 * @param PackageInstallationQueue $queue
40 * @param FormDocument $document
42 public static function registerForm(PackageInstallationQueue
$queue, FormDocument
$document) {
43 if (self
::findForm($queue, $document->getName())) {
44 self
::updateForm($queue, $document);
47 self
::insertForm($queue, $document);
52 * Searches for an existing form document associated with given queue.
54 * @param PackageInstallationQueue $queue
55 * @param string $formName
58 public static function findForm(PackageInstallationQueue
$queue, $formName) {
59 $sql = "SELECT COUNT(*)
60 FROM wcf".WCF_N
."_package_installation_form
63 $statement = WCF
::getDB()->prepareStatement($sql);
69 return $statement->fetchSingleColumn() > 0;
73 * Inserts a form document into database.
75 * @param PackageInstallationQueue $queue
76 * @param FormDocument $document
78 private static function insertForm(PackageInstallationQueue
$queue, FormDocument
$document) {
79 $sql = "INSERT INTO wcf".WCF_N
."_package_installation_form
80 (queueID, formName, document)
82 $statement = WCF
::getDB()->prepareStatement($sql);
86 base64_encode(serialize($document))
91 * Updates a form document database entry.
93 * @param PackageInstallationQueue $queue
94 * @param FormDocument $document
96 private static function updateForm(PackageInstallationQueue
$queue, FormDocument
$document) {
97 $sql = "UPDATE wcf".WCF_N
."_package_installation_form
101 $statement = WCF
::getDB()->prepareStatement($sql);
102 $statement->execute([
103 base64_encode(serialize($document)),
110 * Deletes form documents associated with given queue.
112 * @param PackageInstallationQueue $queue
114 public static function deleteForms(PackageInstallationQueue
$queue) {
115 $sql = "DELETE FROM wcf".WCF_N
."_package_installation_form
117 $statement = WCF
::getDB()->prepareStatement($sql);
118 $statement->execute([$queue->queueID
]);
122 * Returns a form document from database.
124 * @param PackageInstallationQueue $queue
125 * @param string $formName
126 * @return FormDocument
128 public static function getForm(PackageInstallationQueue
$queue, $formName) {
129 $sql = "SELECT document
130 FROM wcf".WCF_N
."_package_installation_form
133 $statement = WCF
::getDB()->prepareStatement($sql);
134 $statement->execute([
138 $row = $statement->fetchArray();
141 return unserialize(base64_decode($row['document']));