From 50b500b3226cd2f0a3586d73cfcbe3b8ca79b1ce Mon Sep 17 00:00:00 2001 From: Aquib Baig Date: Wed, 17 Jul 2019 21:12:00 +0530 Subject: [PATCH 1/3] Database changes --- .../Version20190717152538.php | 28 ++++++++++++++++ site/src/Entity/User.php | 32 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 site/app/DoctrineMigrations/Version20190717152538.php diff --git a/site/app/DoctrineMigrations/Version20190717152538.php b/site/app/DoctrineMigrations/Version20190717152538.php new file mode 100644 index 00000000..9004eac1 --- /dev/null +++ b/site/app/DoctrineMigrations/Version20190717152538.php @@ -0,0 +1,28 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE User ADD subscribedToEmailNotifications TINYINT(1) DEFAULT \'1\' NOT NULL'); + } + + public function down(Schema $schema) : void + { + // this down() migration is auto-generated, please modify it to your needs + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE User DROP subscribedToEmailNotifications'); + } +} diff --git a/site/src/Entity/User.php b/site/src/Entity/User.php index 92ae13bb..80dadf0d 100644 --- a/site/src/Entity/User.php +++ b/site/src/Entity/User.php @@ -134,6 +134,14 @@ class User extends BaseUser implements NotifiableInterface */ protected $updatedAt; + /** + * Has the user subscribed to email notifications? + * + * @var $subscribedToEmailNotifications + * + * @ORM\Column(type="boolean", options={"default" : true}) + */ + protected $subscribedToEmailNotifications = true; public function __construct() { @@ -531,4 +539,28 @@ public function removeOrganizationsCreated(Organization $organizationsCreated) { $this->organizationsCreated->removeElement($organizationsCreated); } + + /** + * Has the user subscribed to email notifications? + * + * @return bool + */ + public function isSubscribedToEmailNotifications(): bool + { + return $this->subscribedToEmailNotifications; + } + + /** + * Set email subscription for a given user + * + * @param bool $subscribedToEmailNotifications + * + * @return $this + */ + public function setSubscribedToEmailNotifications(bool $subscribedToEmailNotifications) + { + $this->subscribedToEmailNotifications = $subscribedToEmailNotifications; + + return $this; + } } From 6c8275c7b4a7dcd2199ba0fca626a2c91918bfb6 Mon Sep 17 00:00:00 2001 From: Aquib Baig Date: Wed, 17 Jul 2019 21:29:30 +0530 Subject: [PATCH 2/3] Notification settings tab in the user profile Adds a tab to edit notification settings in the user profile and also created it's corresponding view --- .../views/user/settings_base.html.twig | 5 +++ .../user/settings_notification.html.twig | 19 ++++++++++ site/src/Controller/UserController.php | 24 +++++++++++- .../Type/NotificationSubscriptionType.php | 37 +++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 site/app/Resources/views/user/settings_notification.html.twig create mode 100644 site/src/Form/Type/NotificationSubscriptionType.php diff --git a/site/app/Resources/views/user/settings_base.html.twig b/site/app/Resources/views/user/settings_base.html.twig index 6023651b..cb62aa1e 100644 --- a/site/app/Resources/views/user/settings_base.html.twig +++ b/site/app/Resources/views/user/settings_base.html.twig @@ -51,6 +51,11 @@ Settings for {{ user.getName() ? user.getName() : user.getUsername() }} @ LibreC Change Password +
  • + + Notification Settings + +
  • diff --git a/site/app/Resources/views/user/settings_notification.html.twig b/site/app/Resources/views/user/settings_notification.html.twig new file mode 100644 index 00000000..62c28318 --- /dev/null +++ b/site/app/Resources/views/user/settings_notification.html.twig @@ -0,0 +1,19 @@ +{# +Template for the user to edit notification settings +page path: /user/settings/notifications +#} +{% extends 'user/settings_base.html.twig' %} + +{# Inform settings_base.html.twig about the page currently displayed #} +{% set settings_subpage = 'notifications' %} + +{% block settings_content %} +

    Notification Settings

    +

    By default, all users get notifications from the LibreCores community in the form of web notifications + on the website as well as email notifications to their registered email. The settings for each of these notifications + is down to personal preferences and can be edited in the panel down below

    +

    Email Notifications

    + {{ form_start(form) }} + {{ form_widget(form) }} + {{ form_end(form) }} +{% endblock %} diff --git a/site/src/Controller/UserController.php b/site/src/Controller/UserController.php index 64fa78a7..9f71c724 100644 --- a/site/src/Controller/UserController.php +++ b/site/src/Controller/UserController.php @@ -6,6 +6,7 @@ use App\Entity\Notification; use App\Form\Model\ResendConfirmationEmailRequest; use App\Form\Type\ResendConfirmationEmailRequestType; +use App\Form\Type\NotificationSubscriptionType; use App\Form\Type\UserProfileType; use App\Security\Core\User\LibreCoresUserProvider; use FOS\UserBundle\Form\Type\ChangePasswordFormType; @@ -14,7 +15,6 @@ use FOS\UserBundle\Model\UserManagerInterface; use FOS\UserBundle\Util\TokenGeneratorInterface; use Mgilet\NotificationBundle\Manager\NotificationManager; -use Mgilet\NotificationBundle\NotifiableInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -229,6 +229,28 @@ public function resendConfirmationEmailAction( return $this->render('user/resend_confirmation_email.html.twig', [ 'form' => $form->createView() ]); } + /** + * User Notification Settings + * + * @Route("/user/settings/notifications", name="librecores.user.settings.notification") + * + * @param Request $request + * + * @return Response + */ + public function notificationSettingsAction(Request $request) + { + $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); + $user = $this->getUser(); + + $form = $this->createForm(NotificationSubscriptionType::class, $user); + + return $this->render( + 'user/settings_notification.html.twig', + ['user' => $user, 'form' => $form->createView()] + ); + } + /** * Mark notifications "seen" in the notification list * diff --git a/site/src/Form/Type/NotificationSubscriptionType.php b/site/src/Form/Type/NotificationSubscriptionType.php new file mode 100644 index 00000000..7fd6a7c8 --- /dev/null +++ b/site/src/Form/Type/NotificationSubscriptionType.php @@ -0,0 +1,37 @@ +add('subscribedToEmailNotifications', CheckboxType::class, [ + 'label' => 'Do you want to receive notifications via e-mail?', + 'required' => false, + ]) + ->add('save', SubmitType::class, array('label' => 'Save', 'attr' => ['class' => 'btn-primary'])); + } + + /** + * @param OptionsResolver $resolver + */ + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults( + array( + 'data_class' => 'App\Entity\User', + ) + ); + } +} From 28ec0125c75463f72120c59e57cb312123df69ad Mon Sep 17 00:00:00 2001 From: Aquib Baig Date: Thu, 8 Aug 2019 13:59:42 +0530 Subject: [PATCH 3/3] Change email notification subscription --- site/src/Controller/UserController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/site/src/Controller/UserController.php b/site/src/Controller/UserController.php index 9f71c724..8b7a5704 100644 --- a/site/src/Controller/UserController.php +++ b/site/src/Controller/UserController.php @@ -245,6 +245,14 @@ public function notificationSettingsAction(Request $request) $form = $this->createForm(NotificationSubscriptionType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $em = $this->getDoctrine()->getManager(); + $em->persist($user); + $em->flush(); + } + return $this->render( 'user/settings_notification.html.twig', ['user' => $user, 'form' => $form->createView()]