1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
<?php
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
abstract class CControllerResponse {
protected $location = '';
protected $messages = [];
public function getLocation(): string {
return $this->location;
}
public function redirect(): void {
// Redirect as simple request.
if ($this instanceof CControllerResponseRedirect) {
if ($this->getFormData() === null && CMessageHelper::getTitle() === null) {
redirect($this->getLocation());
}
CMessageHelper::restoreScheduleMessages();
}
(new CHtmlPageHeader(_('Loading...'), CWebUser::getLang()))->show();
echo '<body>';
echo $this
->getForm()
->toString();
echo $this
->getScript()
->toString();
echo '</body></html>';
session_write_close();
exit();
}
protected function getForm(): CForm {
$form = (new CForm())
->setAction($this->getLocation())
->setEnctype('multipart/form-data')
->setId('form-data');
$data = $this->getData();
$data = json_encode($data);
$sign = CEncryptHelper::sign($data);
$form->addItem(new CInput('hidden', 'formdata', ''));
$form->addItem(new CInput('hidden', 'sign', base64_encode($sign)));
$form->addItem(new CInput('hidden', 'data', base64_encode($data)));
return $form;
}
protected function getScript(): CJsScript {
$js = '
<script>
document.addEventListener("DOMContentLoaded", () => document.getElementById("form-data").submit());
</script>
';
return new CJsScript($js);
}
private function getData(): array {
$data = [];
$messages['messages'] = CMessageHelper::getMessages();
if ($this instanceof CControllerResponseRedirect) {
switch (CMessageHelper::getType()) {
case CMessageHelper::MESSAGE_TYPE_ERROR:
$messages[CMessageHelper::MESSAGE_TYPE_ERROR] = CMessageHelper::getTitle();
break;
case CMessageHelper::MESSAGE_TYPE_SUCCESS:
$messages[CMessageHelper::MESSAGE_TYPE_SUCCESS] = CMessageHelper::getTitle();
break;
}
$data = $this->getFormData();
}
return ['form' => $data, 'messages' => $messages];
}
}
|