3 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
6 * Event listener for members
10 * Copyright © 2020 The Galette Team
12 * This file is part of Galette (http://galette.tuxfamily.org).
14 * Galette is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
19 * Galette is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with Galette. If not, see <http://www.gnu.org/licenses/>.
30 * @author Johan Cwiklinski <johan@x-tnd.be>
31 * @copyright 2020 The Galette Team
32 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
33 * @link http://galette.tuxfamily.org
34 * @since Available since 2020-07-14
37 namespace Galette\Events
;
40 use Galette\Core\GaletteMail
;
41 use Galette\Core\History
;
42 use Galette\Core\Login
;
43 use Galette\Core\Password
;
44 use Galette\Core\Preferences
;
45 use Galette\Entity\Adherent
;
46 use Galette\Entity\Texts
;
48 use League\Event\Event
;
49 use League\Event\ListenerAcceptorInterface
;
50 use League\Event\ListenerProviderInterface
;
51 use Slim\Flash\Messages
;
55 * Event listener for members
58 * @name MemberListener
60 * @author Johan Cwiklinski <johan@x-tnd.be>
61 * @copyright 2020 The Galette Team
62 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
63 * @link https://galette.eu
64 * @since Available since 2020-07-14
66 class MemberListener
implements ListenerProviderInterface
68 /** @var Preferences */
84 * @param Preferences $preferences Preferences instance
85 * @param Router $router Router instance
86 * @param History $history History instance
87 * @param Messages $flash Messages instance
88 * @param Login $login Login instance
89 * @param Db $zdb Db instance
91 public function __construct(
92 Preferences
$preferences,
99 $this->preferences
= $preferences;
100 $this->router
= $router;
101 $this->history
= $history;
102 $this->flash
= $flash;
103 $this->login
= $login;
108 * Set up member listeners
110 * @param ListenerAcceptorInterface $acceptor Listener
114 public function provideListeners(ListenerAcceptorInterface
$acceptor)
116 $acceptor->addListener(
118 function ($event, $member) {
119 $this->memberAdded($event, $member);
123 $acceptor->addListener(
125 function ($event, $member) {
126 $this->memberEdited($event, $member);
132 * Memebr added listener
134 * @param Event $event Raised event
135 * @param Adherent $member Added member
139 public function memberAdded(Event
$event, Adherent
$member)
142 '[' . get_class($this) . '] Event member.add emitted for ' . $member->sfullname
,
146 if ($member->sendEMail()) {
147 $this->sendMemberEmail($member, true);
150 $this->sendAdminEmail($member, true);
154 * Memebr edited listener
156 * @param Event $event Raised event
157 * @param Adherent $member Added member
161 public function memberEdited(Event
$event, Adherent
$member)
164 '[' . get_class($this) . '] Event member.edit emitted for ' . $member->sfullname
,
168 if ($member->sendEMail()) {
169 $this->sendMemberEmail($member, false);
172 $this->sendAdminEmail($member, false);
176 * Send account email to member
178 * @param Adherent $member Member
179 * @param boolean $new New member or editing existing one
183 private function sendMemberEmail(Adherent
$member, $new)
185 if ($this->preferences
->pref_mail_method
== GaletteMail
::METHOD_DISABLED
) {
186 //if email has been disabled in the preferences, we should not be here ;
187 //we do not throw an error, just a simple warning that will be show later
188 $msg = _T("You asked Galette to send a confirmation email to the member, but email has been disabled in the preferences.");
189 $this->flash
->addMessage(
196 if ($member->getEmail() == '' && !$member->self_adh
) {
197 $this->flash
->addMessage(
199 _T("- You can't send a confirmation by email if the member hasn't got an address!")
204 // Get email text in database
210 $texts->setMember($member)->setNoContribution();
213 $password = new Password($this->zdb
);
214 $res = $password->generateNewPassword($member->id
);
218 ->setChangePasswordURI($password);
223 _T("An error occurred storing temporary password for %s. Please inform an admin.")
225 $this->history
->add($str);
226 $this->flash
->addMessage(
233 $mlang = $member->language
;
235 (($new) ?
'sub' : 'accountedited'),
239 $mail = new GaletteMail($this->preferences
);
240 $mail->setSubject($texts->getSubject());
241 $mail->setRecipients(
243 $member->getEmail() => $member->sname
246 $mail->setMessage($texts->getBody());
247 $sent = $mail->send();
249 if ($sent == GaletteMail
::MAIL_SENT
) {
252 $member->sname
. ' (' . $member->getEmail() . ')',
254 _T("New account email sent to '%s'.") : _T("Account modification email sent to '%s'.")
256 $this->history
->add($msg);
257 $success_detected[] = $msg;
261 $member->sname
. ' (' . $member->getEmail() . ')',
262 _T("A problem happened while sending account email to '%s'")
264 $this->history
->add($str);
265 $error_detected[] = $str;
270 * Send account email to admin
272 * @param Adherent $member Member
273 * @param boolean $new New member or editing existing one
277 private function sendAdminEmail(Adherent
$member, $new)
280 $this->preferences
->pref_mail_method
== GaletteMail
::METHOD_DISABLED
281 ||
!$this->preferences
->pref_bool_mailadh
282 ||
(!$new && $member->id
!= $this->login
->id
)
292 $texts->setMember($member)->setNoContribution();
296 $txt_id = ($member->self_adh ?
'newselfadh' : 'newadh');
298 $txt_id = 'admaccountedited';
301 $mlang = $this->preferences
->pref_lang
;
302 $mtxt = $texts->getTexts(
307 $mail = new GaletteMail($this->preferences
);
308 $mail->setSubject($texts->getSubject());
310 foreach ($this->preferences
->vpref_email_newadh
as $pref_email) {
311 $recipients[$pref_email] = $pref_email;
313 $mail->setRecipients($recipients);
314 $mail->setMessage($texts->getBody());
315 $sent = $mail->send();
317 if ($sent == GaletteMail
::MAIL_SENT
) {
321 $member->sname
. ' (' . $member->email
. ')',
322 _T("New account email sent to admin for '%s'.")
323 ) : _T("Account modification email sent to admin.");
325 $this->history
->add($msg);
326 $this->flash
->addMessage(
334 $member->sname
. ' (' . $member->email
. ')',
335 _T("A problem happened while sending email to admin for account '%s'.")
336 ) : _T("A problem happened while sending account email to admin");
338 $this->history
->add($msg);
339 $this->flash
->addMessage(