ILIAS  trunk Revision v11.0_alpha-1866-gfa368f7776e
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
Agreement.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
34 use Closure;
36 
37 final 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(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 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$url
Definition: shib_logout.php:66
static prepareFormOutput($a_str, bool $a_strip=false)
$accept
Definition: ltiservices.php:63
static getMailsToAddress()
Get mailto: emails.
A result encapsulates a value or an error and simplifies the handling of those.
Definition: Ok.php:30
__construct(private readonly User $user, private readonly UI $ui, private readonly Routing $routing, private readonly Closure $with_request)
Definition: Agreement.php:42