aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/accessibility
diff options
context:
space:
mode:
authorMoritz Strohm <strohm@data-quest.de>2022-12-16 13:44:16 +0000
committerDavid Siegfried <david.siegfried@uni-vechta.de>2022-12-16 13:44:16 +0000
commitd6ec870033743fcc07f8b6c71cb32450cc75abb6 (patch)
tree0e900032e4e555f7dbc2770737b9eeed0cdf747d /app/controllers/accessibility
parent20ebf68a5481623b362374ba1c0cd7025f2f6dfe (diff)
StEP 1596, closes #1596
Closes #1596 Merge request studip/studip!1038
Diffstat (limited to 'app/controllers/accessibility')
-rw-r--r--app/controllers/accessibility/forms.php175
1 files changed, 175 insertions, 0 deletions
diff --git a/app/controllers/accessibility/forms.php b/app/controllers/accessibility/forms.php
new file mode 100644
index 0000000..71ab261
--- /dev/null
+++ b/app/controllers/accessibility/forms.php
@@ -0,0 +1,175 @@
+<?php
+class Accessibility_FormsController extends StudipController
+{
+ protected $with_session = true;
+
+ public function report_barrier_action()
+ {
+ PageLayout::setTitle(_('Barriere melden'));
+
+ $this->page = Request::get('page');
+
+ $user = User::findCurrent();
+ $user_salutation = '';
+ if (!empty($user)) {
+ if ($user->geschlecht == 1) {
+ $user_salutation = _('Herr');
+ } elseif ($user->geschlecht == 2) {
+ $user_salutation = _('Frau');
+ } elseif ($user->geschlecht == 3) {
+ $user_salutation = _('divers');
+ }
+ }
+
+ $this->form = \Studip\Forms\Form::create();
+ $this->form->addInput(
+ new \Studip\Forms\HiddenInput(
+ 'page',
+ '',
+ $this->page
+ )
+ );
+ $details_part = new \Studip\Forms\Fieldset(_('Angaben zur gefundenen Barriere'));
+ $details_part->addInput(
+ new \Studip\Forms\SelectInput(
+ 'barrier_type',
+ _('Um welche Art von Barriere handelt es sich?'),
+ '',
+ [
+ 'options' => [
+ _('Inhalte auf dieser Seite (z.B. PDF, Bilder oder Lernmodule)') => _('Inhalte auf dieser Seite (z.B. PDF, Bilder oder Lernmodule)'),
+ _('Ein Problem mit der Seite selbst oder der Navigation') => _('Ein Problem mit der Seite selbst oder der Navigation'),
+ _('Sonstiges') => _('Sonstiges')
+ ]
+ ]
+ )
+ )->setRequired();
+ $details_part->addInput(
+ new \Studip\Forms\TextareaInput(
+ 'barrier_details',
+ _('Beschreiben Sie die Barriere'),
+ ''
+ )
+ )->setRequired();
+ $this->form->addPart($details_part);
+ $personal_data_part = new \Studip\Forms\Fieldset(_('Ihre persönlichen Daten'));
+ $personal_data_part->addText(sprintf('<p>%s</p>', _('Geben Sie bitte Ihren Namen und Ihre E-Mail-Adresse an. Optional können Sie auch Ihre Telefonnummer angeben.')));
+ $personal_data_part->addInput(
+ new \Studip\Forms\SelectInput(
+ 'salutation',
+ _('Anrede'),
+ $user_salutation,
+ [
+ 'options' => [
+ _('Keine Angabe') => _('Keine Angabe'),
+ _('Frau') => _('Frau'),
+ _('Herr') => _('Herr'),
+ _('divers') => _('divers')
+ ]
+ ]
+ )
+ );
+ $personal_data_part->addInput(
+ new \Studip\Forms\TextInput(
+ 'name',
+ _('Vorname und Nachname'),
+ $user ? sprintf('%s %s', $user->vorname, $user->nachname) : ''
+ )
+ )->setRequired();
+ $personal_data_part->addInput(
+ new \Studip\Forms\TextInput(
+ 'phone_number',
+ _('Telefonnummer'),
+ $user ? ($user->privatcell ?: $user->privatnr) : ''
+ )
+ );
+ $personal_data_part->addInput(
+ new \Studip\Forms\TextInput(
+ 'email_address',
+ _('E-Mail-Adresse'),
+ $user ? $user->email : ''
+ )
+ )->setRequired();
+ $privacy_url = Config::get()->PRIVACY_URL;
+
+ if (is_internal_url($privacy_url)) {
+ $personal_data_part->addLink(
+ _('Datenschutzerklärung lesen'),
+ URLHelper::getURL($privacy_url, ['cancel_login' => '1']),
+ Icon::create('link-intern'),
+ ['data-dialog' => 'size=big']
+ );
+ } else {
+ $personal_data_part->addLink(
+ _('Datenschutzerklärung lesen'),
+ URLHelper::getURL($privacy_url),
+ Icon::create('link-extern'),
+ ['target' => '_blank']
+ );
+ }
+ $personal_data_part->addInput(
+ new \Studip\Forms\CheckboxInput(
+ 'confirm_privacy',
+ _('Ich habe die Datenschutzerklärung gelesen und akzeptiere sie.'),
+ ''
+ )
+ )->setRequired();
+ $this->form->addPart($personal_data_part);
+ $this->form->setSaveButtonText(_('Barriere melden'));
+ $this->form->setSaveButtonName('report');
+ $this->form->setURL($this->report_barrierURL());
+ $this->form->addStoreCallback(
+ function ($form, $form_values) {
+ $recipients = Config::get()->ACCESSIBILITY_RECEIVER_EMAIL;
+ if (empty($recipients)) {
+ //Fallback: Use the UNI_CONTACT mail address:
+ $recipients = [$GLOBALS['UNI_CONTACT']];
+ }
+ //Get the sender and their language:
+ $sender = User::findCurrent();
+ //Default to the system default language:
+ $lang = explode('_', $GLOBALS['DEFAULT_LANGUAGE'])[0];
+ if ($sender) {
+ //Use the senders language since the choices in the form
+ //are in their language as well.
+ $lang = explode('_', getUserLanguage($sender->id))[0];
+ }
+ //Format the senders name according to the salutation.
+ $formatted_name = '';
+ if ($form_values['salutation'] === _('Keine Angabe')) {
+ $formatted_name = $form_values['name'];
+ } elseif ($form_values['salutation'] === _('divers')) {
+ $formatted_name = sprintf('%s (%s)', $form_values['name'], $form_values['salutation']);
+ } else {
+ $formatted_name = sprintf('%s %s', $form_values['salutation'], $form_values['name']);
+ }
+ //Build the mail text:
+ $template = $GLOBALS['template_factory']->open("../locale/{$lang}/LC_MAILS/report_barrier.php");
+ $template->set_attributes([
+ 'sender' => $sender,
+ 'page' => $form_values['page'],
+ 'barrier_type' => $form_values['barrier_type'],
+ 'barrier_details' => $form_values['barrier_details'],
+ 'formatted_name' => $formatted_name,
+ 'phone_number' => $form_values['phone_number'],
+ 'email_address' => $form_values['email_address']
+ ]);
+ $mail_text = $template->render();
+
+ foreach ($recipients as $mail_address) {
+ //Send the mail:
+ $mail = new StudipMail();
+ $mail->addRecipient($mail_address)
+ ->setReplyToEmail($form_values['email_address'])
+ ->setSubject(_('Meldung einer Barriere in Stud.IP'))
+ ->setBodyText($mail_text)
+ ->send();
+ }
+
+ $form->setSuccessMessage(_('Ihre Meldung einer Barriere wurde weitergeleitet.'));
+ return 1;
+ }
+ );
+ $this->form->autoStore();
+ }
+}