ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
Agreement.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
23use ILIAS\LegalDocuments\ConsumerSlots\Agreement as AgreementInterface;
34use Closure;
36
37final class Agreement implements AgreementInterface
38{
42 public function __construct(
43 private readonly User $user,
44 private readonly UI $ui,
45 private readonly Routing $routing,
46 private readonly Closure $with_request
47 ) {
48 }
49
50 public function showAgreement(string $gui, string $cmd): PageFragment
51 {
52 $title = 'accept_usr_agreement_anonymous';
53 $info = 'accept_usr_agreement_anonymous_intro';
54 if ($this->user->isLoggedIn()) {
55 $title = 'usr_agreement';
56 $info = 'usr_agreement_footer_intro';
57 }
58 return (new PageContent($this->ui->txt($title), [$this->showDocument()]))->withOnScreenMessage('info', $this->ui->txt($info));
59 }
60
61 public function showAgreementForm(string $gui, string $cmd): PageFragment
62 {
63 $form = $this->user->matchingDocument()->isOk() ?
64 $this->agreementForm($gui, $cmd) :
65 $this->ui->create()->divider()->horizontal();
66
67 $content = (new PageContent($this->ui->txt('accept_usr_agreement'), [
68 $this->showDocument(),
69 $form,
70 $this->logoutLink(),
71 ]));
72
73 return $this->user->matchingDocument()->isOk() ?
74 $content->withOnScreenMessage('info', $this->ui->txt('accept_usr_agreement_intro')) :
75 $content;
76 }
77
78 public function needsToAgree(): bool
79 {
80 return !$this->user->cannotAgree()
81 && $this->user->needsToAcceptNewDocument();
82 }
83
84 private function showDocument(): Component
85 {
86 return $this->user
87 ->matchingDocument()
88 ->map(fn(Document $document) => $this->ui->create()->legacy()->content($document->content()->value()))
89 ->except(fn() => new Ok($this->ui->create()->legacy()->content(sprintf(
90 $this->ui->txt('no_agreement_description'),
92 ))))->value();
93 }
94
95 private function agreementForm(string $gui, string $cmd): Component
96 {
97 $url = $this->routing->ctrl()->getFormActionByClass($gui, $cmd);
98 $form = $this->ui->create()->input()->container()->form()->standard($url, [
99 'accept?' => $this->ui->create()->input()->field()->radio($this->ui->txt('accept_usr_agreement'))
100 ->withOption('yes', $this->ui->txt('accept_usr_agreement_btn'))
101 ->withOption('no', $this->ui->txt('deny_usr_agreement_btn'))
102 ]);
103
104 return ($this->with_request)($form, function (array $data) {
105 $accept = $data['accept?'] ?? '';
106 if ($accept === 'no') {
107 $this->routing->ctrl()->redirectToURL($this->routing->logoutUrl());
108 } elseif ($accept === 'yes') {
109 $this->user->acceptMatchingDocument();
110 $this->routing->redirectToOriginalTarget();
111 }
112 });
113 }
114
115 private function logoutLink(): Component
116 {
117 return $this->ui->create()->button()->standard($this->ui->txt('logout'), $this->routing->logoutUrl());
118 }
119}
A result encapsulates a value or an error and simplifies the handling of those.
Definition: Ok.php:31
__construct(private readonly User $user, private readonly UI $ui, private readonly Routing $routing, private readonly Closure $with_request)
Definition: Agreement.php:42
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static prepareFormOutput($a_str, bool $a_strip=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getMailsToAddress()
Get mailto: emails.
$info
Definition: entry_point.php:21
A component is the most general form of an entity in the UI.
Definition: Component.php:28
This describes commonalities between all forms.
Definition: Form.php:33
$accept
Definition: ltiservices.php:66
$url
Definition: shib_logout.php:68