Skip to content

Commit

Permalink
Merge pull request #1765 from tomudding/feature/activity-sign-up-thro…
Browse files Browse the repository at this point in the history
…ugh-modal

Switch activity subscription from well to modal
  • Loading branch information
tomudding authored Nov 19, 2023
2 parents 4c2447f + 40c0a9a commit 22e8d95
Show file tree
Hide file tree
Showing 8 changed files with 286 additions and 171 deletions.
18 changes: 11 additions & 7 deletions module/Activity/src/Controller/ActivityController.php
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,9 @@ public function viewSignupListAction(): ViewModel
$view->setTemplate('activity/activity/view.phtml');

// Retrieve and clear the request status from the session, if it exists.
if (isset($activitySession->success)) {
$view->setVariable('success', $activitySession->success);
unset($activitySession->success);
$view->setVariable('message', $activitySession->message);
unset($activitySession->message);
if (isset($activitySession->reopen)) {
$view->setVariable('reopen', $activitySession->reopen);
unset($activitySession->reopen);
}

return $view;
Expand Down Expand Up @@ -219,6 +217,8 @@ public function signupAction(): Response|ViewModel

/** @var Request $request */
$request = $this->getRequest();
$activityRequestSession = new SessionContainer('activityRequest');
$activityRequestSession->reopen = false;

if ($request->isPost()) {
$form = $this->signupService->getForm($signupList);
Expand All @@ -229,7 +229,7 @@ public function signupAction(): Response|ViewModel
// Check if the form is valid
if (!$form->isValid()) {
$error = $this->translator->translate('Invalid form');
$activityRequestSession = new SessionContainer('activityRequest');
$activityRequestSession->reopen = true;
$activityRequestSession->signupData = $postData->toArray();

return $this->redirectActivityRequest($activityId, $signupListId, false, $error);
Expand Down Expand Up @@ -268,6 +268,7 @@ public function signupAction(): Response|ViewModel
}

$error = $this->translator->translate('Use the form to subscribe');
$activityRequestSession->reopen = true;

return $this->redirectActivityRequest($activityId, $signupListId, false, $error);
}
Expand Down Expand Up @@ -312,6 +313,8 @@ public function externalSignupAction(): Response|ViewModel

/** @var Request $request */
$request = $this->getRequest();
$activityRequestSession = new SessionContainer('activityRequest');
$activityRequestSession->reopen = false;

if ($request->isPost()) {
$form = $this->signupService->getExternalForm($signupList);
Expand All @@ -322,7 +325,7 @@ public function externalSignupAction(): Response|ViewModel
// Check if the form is valid
if (!$form->isValid()) {
$error = $this->translator->translate('Invalid form');
$activityRequestSession = new SessionContainer('activityRequest');
$activityRequestSession->reopen = true;
$activityRequestSession->signupData = $postData->toArray();

return $this->redirectActivityRequest($activityId, $signupListId, false, $error);
Expand Down Expand Up @@ -357,6 +360,7 @@ public function externalSignupAction(): Response|ViewModel
}

$error = $this->translator->translate('Use the form to subscribe');
$activityRequestSession->reopen = true;

return $this->redirectActivityRequest($activityId, $signupListId, false, $error);
}
Expand Down
14 changes: 8 additions & 6 deletions module/Activity/src/Controller/AdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,9 @@ public function participantsAction(): ViewModel
$result['signupLists'] = $signupLists;

// Retrieve and clear the request status from the session, if it exists.
if (isset($activityAdminSession->success)) {
$result['success'] = $activityAdminSession->success;
unset($activityAdminSession->success);
$result['message'] = $activityAdminSession->message;
unset($activityAdminSession->message);
if (isset($activityAdminSession->reopen)) {
$result['reopen'] = $activityAdminSession->reopen;
unset($activityAdminSession->reopen);
}

$result['canSeeTimeOfSignup'] = $this->aclService->isAllowed('viewParticipantDetails', 'activity');
Expand All @@ -309,6 +307,8 @@ public function externalSignupAction(): Response|ViewModel

/** @var Request $request */
$request = $this->getRequest();
$activityAdminSession = new SessionContainer('activityAdminRequest');
$activityAdminSession->reopen = false;

if ($request->isPost()) {
$form = $this->signupService->getExternalAdminForm($signupList);
Expand All @@ -318,7 +318,7 @@ public function externalSignupAction(): Response|ViewModel

// Check if the form is valid
if (!$form->isValid()) {
$activityAdminSession = new SessionContainer('activityAdminRequest');
$activityAdminSession->reopen = true;
$activityAdminSession->signupData = $postData->toArray();

return $this->redirectActivityAdminRequest(
Expand All @@ -345,6 +345,8 @@ public function externalSignupAction(): Response|ViewModel
);
}

$activityAdminSession->reopen = true;

return $this->redirectActivityAdminRequest(
$activityId,
$signupListId,
Expand Down
152 changes: 91 additions & 61 deletions module/Activity/view/activity/activity/view.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -187,78 +187,108 @@ $this->headTitle($this->translate('Activities'));
</div>
<div class="col-md-12">
<?php if ($isSignedUp) : ?>
<button class="btn btn-default btn-lg agenda-subscription-button" type="button"
data-toggle="collapse" data-target="#subscriptionForm"
aria-expanded="false" aria-controls="subscriptionForm">
<?= $this->translate('Already subscribed') ?>
</button>
<?php if ($subscriptionCloseDatePassed) : ?>
<button class="btn btn-default btn-lg" type="button" disabled="disabled">
<span class="fas fa-user-check"></span> <?= $this->translate('Unsubscription period closed') ?>
</button>
<?php else: ?>
<button class="btn btn-default btn-lg" type="button" data-toggle="modal"
data-target="#signoffModal" aria-hidden="true" aria-controls="signoffModal">
<span class="fas fa-user-minus"></span> <?= $this->translate('Unsubscribe') ?>
</button>
<div class="modal fade" id="signoffModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">
<?= sprintf(
$this->translate('Unsubscribe from \'%s\''),
$this->escapeHtml($this->localiseText($signupList->getName())),
) ?>
</h4>
</div>
<div class="modal-body">
<p>
<?= $this->translate('Are you sure you want to unsubscribe?') ?>
</p>
</div>
<div class="modal-footer">
<?php
$signoffForm->setAttribute(
'action',
$this->url(
'activity/signoff',
['id' => $activity->getId(), 'signupList' => $signupList->getId()],
),
);
$signoffForm->prepare();
echo $this->form()->openTag($signoffForm);
echo $this->formElement($signoffForm->get('security'));
$submit = $signoffForm->get('submit');
$submit->setAttribute('class', 'btn btn-default');
echo $this->formSubmit($submit);
?>
<button type="button" class="btn" data-dismiss="modal">
<?= $this->translate('Cancel') ?>
</button>
<?= $this->form()->closeTag(); ?>
</div>
</div>
</div>
</div>
<?php endif; ?>
<?php elseif (!$signupOpen): ?>
<button class="btn btn-default btn-lg agenda-subscription-button" type="button"
data-toggle="collapse" data-target="#subscriptionForm"
aria-expanded="false" disabled="disabled"
aria-controls="subscriptionForm">
<?= $this->translate('Subscription closed') ?>
<button class="btn btn-default btn-lg" type="button" disabled="disabled">
<span class="fas fa-user-xmark"></span> <?= $this->translate('Subscription period closed') ?>
</button>
<?php else: ?>
<button class="btn btn-primary btn-lg agenda-subscription-button collapsed" type="button"
data-toggle="collapse" data-target="#subscriptionForm" aria-expanded="false"
aria-controls="subscriptionForm">
<span class="fas fa-chevron-right"></span> <?= $this->translate('Subscribe now') ?>
</button>
<?php endif; ?>
</div>
<div class="col-md-6 collapse activity-subscription-form" id="subscriptionForm">
<div class="well">
<?php if ($isSignedUp) : ?>
<h2><?= $this->translate('Unsubscribe yourself') ?></h2>
<?php if ($subscriptionCloseDatePassed) : ?>
<div>
<?= $this->translate('You are not allowed to unsubscribe after the deadline!') ?>
</div>
<?php else : ?>
<div>
<?php
$signoffForm->setAttribute('action', $this->url('activity/signoff', ['id' => $activity->getId(), 'signupList' => $signupList->getId()]));
$signoffForm->prepare();
echo $this->form()->openTag($signoffForm);
echo $this->formElement($signoffForm->get('security'));
$submit = $signoffForm->get('submit');
$submit->setAttribute('class', 'btn btn-default');
echo $this->formSubmit($submit);
echo $this->form()->closeTag();
?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php if ($signupOpen && !$isAllowedToSubscribe): ?>
<h2>
<?= $this->translate('Subscribe yourself') ?>
</h2>
<a href="<?= $this->url('user/login', ['user_type' => 'member']) ?>">
<?= $this->translate('Login to subscribe') ?>
<?php if (!$isAllowedToSubscribe && $signupList->getOnlyGEWIS()): ?>
<a href="<?= $this->url(
'user/login',
[
'user_type' => 'member',
'redirect_to' => base64_encode($this->serverUrl(true)),
],
) ?>"
class="btn btn-primary btn-lg">
<span class="fas fa-user-plus"></span> <?= $this->translate('Log in to subscribe') ?>
</a>
<?php if (!$signupList->getOnlyGEWIS() && null !== $form): ?>
<br/>
<?= $this->translate('Or subscribe without a GEWIS membership: ') ?>
<?= $this->partial('partial/signupForm', [
'form' => $form,
'signupList' => $signupList,
])
?>
<?php endif; ?>
<?php endif; ?>
<?php if (null !== $form && $signupOpen && !$isSignedUp && $isAllowedToSubscribe): //display the form ?>
<h2>
<?= $this->translate('Subscribe yourself') ?>
</h2>
<?php elseif (!$isAllowedToSubscribe && !$signupList->getOnlyGEWIS()): ?>
<button class="btn btn-primary btn-lg" type="button" data-toggle="modal"
data-target="#signupModal" aria-hidden="true" aria-controls="signupModal">
<span class="fas fa-user-plus"></span> <?= $this->translate('Subscribe as external participant') ?>
</button>
<?= $this->partial('partial/signupForm', [
'form' => $form,
'signupList' => $signupList,
])
?>
<?php else: ?>
<button class="btn btn-primary btn-lg" type="button" data-toggle="modal"
data-target="#signupModal" aria-hidden="true" aria-controls="signupModal">
<span class="fas fa-user-plus"></span> <?= $this->translate('Subscribe') ?>
</button>
<?= $this->partial('partial/signupForm', [
'form' => $form,
'signupList' => $signupList,
])
?>
<?php endif; ?>
</div>
<?php if (isset($reopen) && $reopen): ?>
<script nonce="<?= NONCE_REPLACEMENT_STRING ?>">
document.addEventListener("DOMContentLoaded", function() {
$('#signupModal').modal('show');
});
</script>
<?php endif; ?>
<?php endif; ?>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<h2><?= $this->translate('Current subscriptions') ?></h2>
<div class="table-responsive">
Expand Down
11 changes: 11 additions & 0 deletions module/Activity/view/activity/admin/participants.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,23 @@ $this->breadcrumbs()
</div>
<div class="col-md-12">
<?php if (isset($externalSignupForm)): //display the external signup form ?>
<button class="btn btn-primary btn-lg" type="button" data-toggle="modal"
data-target="#signupModal" aria-hidden="true" aria-controls="signupModal">
<span class="fas fa-user-plus"></span> <?= $this->translate('Subscribe external participant') ?>
</button>
<?= $this->partial('partial/signupForm', [
'form' => $externalSignupForm,
'activity' => $activity,
'signupList' => $signupList,
])
?>
<?php if (isset($reopen) && $reopen): ?>
<script nonce="<?= NONCE_REPLACEMENT_STRING ?>">
document.addEventListener("DOMContentLoaded", function() {
$('#signupModal').modal('show');
});
</script>
<?php endif; ?>
<?php endif; ?>
</div>
</div>
Loading

0 comments on commit 22e8d95

Please sign in to comment.