Resolve language item-related PIP GUI todos
[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/**
1615fc2e 9 * Handles form documents associated with a queue.
9f959ced 10 *
11ade432 11 * @author Alexander Ebert
c839bd49 12 * @copyright 2001-2018 WoltLab GmbH
11ade432 13 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
e71525e4 14 * @package WoltLabSuite\Core\System\Package\Form
11ade432
AE
15 */
16abstract class PackageInstallationFormManager {
17 /**
18 * Handles a POST or GET request.
9f959ced 19 *
11ade432
AE
20 * @param PackageInstallationQueue $queue
21 */
22 public static function handleRequest(PackageInstallationQueue $queue) {
63b9817b 23 $formName = isset($_REQUEST['formName']) ? StringUtil::trim($_REQUEST['formName']) : '';
11ade432
AE
24
25 // ignore request
26 if (empty($formName) || !self::findForm($queue, $formName)) return;
27
28 // get document
29 $document = self::getForm($queue, $formName);
30 $document->handleRequest();
31
32 self::updateForm($queue, $document);
33 }
34
35 /**
36 * Registers a form document.
9f959ced 37 *
11ade432
AE
38 * @param PackageInstallationQueue $queue
39 * @param FormDocument $document
40 */
41 public static function registerForm(PackageInstallationQueue $queue, FormDocument $document) {
42 if (self::findForm($queue, $document->getName())) {
43 self::updateForm($queue, $document);
44 }
45 else {
46 self::insertForm($queue, $document);
47 }
48 }
49
50 /**
51 * Searches for an existing form document associated with given queue.
9f959ced 52 *
11ade432
AE
53 * @param PackageInstallationQueue $queue
54 * @param string $formName
55 * @return boolean
56 */
57 public static function findForm(PackageInstallationQueue $queue, $formName) {
5c6ddd85 58 $sql = "SELECT COUNT(*)
11ade432
AE
59 FROM wcf".WCF_N."_package_installation_form
60 WHERE queueID = ?
61 AND formName = ?";
62 $statement = WCF::getDB()->prepareStatement($sql);
058cbd6a 63 $statement->execute([
11ade432
AE
64 $queue->queueID,
65 $formName
058cbd6a 66 ]);
11ade432 67
5c6ddd85 68 return $statement->fetchSingleColumn() > 0;
11ade432
AE
69 }
70
71 /**
72 * Inserts a form document into database.
9f959ced 73 *
11ade432
AE
74 * @param PackageInstallationQueue $queue
75 * @param FormDocument $document
76 */
77 private static function insertForm(PackageInstallationQueue $queue, FormDocument $document) {
78 $sql = "INSERT INTO wcf".WCF_N."_package_installation_form
79 (queueID, formName, document)
80 VALUES (?, ?, ?)";
81 $statement = WCF::getDB()->prepareStatement($sql);
058cbd6a 82 $statement->execute([
11ade432
AE
83 $queue->queueID,
84 $document->getName(),
fcc4e5b5 85 base64_encode(serialize($document))
058cbd6a 86 ]);
11ade432
AE
87 }
88
89 /**
90 * Updates a form document database entry.
9f959ced 91 *
11ade432
AE
92 * @param PackageInstallationQueue $queue
93 * @param FormDocument $document
94 */
95 private static function updateForm(PackageInstallationQueue $queue, FormDocument $document) {
96 $sql = "UPDATE wcf".WCF_N."_package_installation_form
97 SET document = ?
98 WHERE queueID = ?
99 AND formName = ?";
100 $statement = WCF::getDB()->prepareStatement($sql);
058cbd6a 101 $statement->execute([
fcc4e5b5 102 base64_encode(serialize($document)),
11ade432 103 $queue->queueID,
87dba389 104 $document->getName()
058cbd6a 105 ]);
11ade432
AE
106 }
107
108 /**
109 * Deletes form documents associated with given queue.
9f959ced 110 *
11ade432
AE
111 * @param PackageInstallationQueue $queue
112 */
113 public static function deleteForms(PackageInstallationQueue $queue) {
114 $sql = "DELETE FROM wcf".WCF_N."_package_installation_form
115 WHERE queueID = ?";
116 $statement = WCF::getDB()->prepareStatement($sql);
058cbd6a 117 $statement->execute([$queue->queueID]);
11ade432
AE
118 }
119
120 /**
121 * Returns a form document from database.
9f959ced 122 *
11ade432
AE
123 * @param PackageInstallationQueue $queue
124 * @param string $formName
125 * @return FormDocument
126 */
127 public static function getForm(PackageInstallationQueue $queue, $formName) {
128 $sql = "SELECT document
129 FROM wcf".WCF_N."_package_installation_form
130 WHERE queueID = ?
131 AND formName = ?";
132 $statement = WCF::getDB()->prepareStatement($sql);
058cbd6a 133 $statement->execute([
11ade432
AE
134 $queue->queueID,
135 $formName
058cbd6a 136 ]);
11ade432
AE
137 $row = $statement->fetchArray();
138
139 if ($row) {
241627da 140 return unserialize(base64_decode($row['document']));
11ade432
AE
141 }
142
143 return null;
144 }
145}