Skip to content

Commit 43f93c5

Browse files
authored
Merge pull request #476 from djavolak/main
new email tpl for invitation to mspr
2 parents 1a1c031 + c23d362 commit 43f93c5

File tree

3 files changed

+138
-2
lines changed

3 files changed

+138
-2
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
namespace App\Command;
4+
5+
use Doctrine\ORM\EntityManagerInterface;
6+
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
7+
use Symfony\Component\Console\Attribute\AsCommand;
8+
use Symfony\Component\Console\Command\Command;
9+
use Symfony\Component\Console\Input\InputInterface;
10+
use Symfony\Component\Console\Output\OutputInterface;
11+
use Symfony\Component\Console\Style\SymfonyStyle;
12+
use Symfony\Component\Lock\LockFactory;
13+
use Symfony\Component\Lock\Store\FlockStore;
14+
use Symfony\Component\Mailer\MailerInterface;
15+
use Symfony\Component\Mime\Address;
16+
17+
#[AsCommand(
18+
name: 'app:invite-donors-to-mspr',
19+
description: 'Send invite to donors on msp, to register for mspr as well'
20+
)]
21+
class InviteDonorsToMsprCommand extends Command
22+
{
23+
private int $lastId = 0;
24+
25+
public function __construct(private EntityManagerInterface $entityManager, private MailerInterface $mailer)
26+
{
27+
parent::__construct();
28+
}
29+
30+
protected function execute(InputInterface $input, OutputInterface $output): int
31+
{
32+
$store = new FlockStore();
33+
$factory = new LockFactory($store);
34+
$lock = $factory->createLock($this->getName(), 0);
35+
if (!$lock->acquire()) {
36+
return Command::FAILURE;
37+
}
38+
39+
$io = new SymfonyStyle($input, $output);
40+
$io->section('Command started at '.date('Y-m-d H:i:s'));
41+
42+
while (true) {
43+
$donorEmails = $this->getDonorEmails();
44+
if (empty($donorEmails)) {
45+
break;
46+
}
47+
48+
foreach ($donorEmails as $donorEmail) {
49+
$output->writeln('Send email to '.$donorEmail);
50+
$this->sendEmail($donorEmail);
51+
}
52+
}
53+
54+
$io->success('Command finished at '.date('Y-m-d H:i:s'));
55+
56+
return Command::SUCCESS;
57+
}
58+
59+
public function sendEmail(string $email): void
60+
{
61+
$message = (new TemplatedEmail())
62+
->to($email)
63+
->from(new Address('donatori@mrezasolidarnosti.org', 'Mreža Solidarnosti'))
64+
->subject('Vaša solidarna podrška je danas važnija nego ikad, jer se represija pojačava')
65+
->htmlTemplate('email/invite-to-mspr.html.twig');
66+
67+
try {
68+
$this->mailer->send($message);
69+
} catch (\Exception $exception) {
70+
}
71+
}
72+
73+
public function getDonorEmails(): array
74+
{
75+
$stmt = $this->entityManager->getConnection()->executeQuery('
76+
SELECT u.id, u.email
77+
FROM user_donor ud JOIN user u ON (ud.user_id = u.id)
78+
WHERE u.id > :lastId
79+
ORDER BY u.id ASC
80+
', [
81+
'lastId' => $this->lastId,
82+
]);
83+
84+
$items = [];
85+
while ($row = $stmt->fetchAssociative()) {
86+
$this->lastId = $row['id'];
87+
$items[] = $row['email'];
88+
}
89+
90+
return $items;
91+
}
92+
}

templates/base_email.html.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
</div>
1818

1919
<div>
20-
<div>Zajedno sa nastavnicima.</div>
21-
<div><b>Tvoja Mreža solidarnosti</b></div>
20+
<div>Solidarno,</div>
21+
<div><b>Mreža solidarnosti</b></div>
2222
</div>
2323
</div>
2424
</body>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{% extends 'base_email.html.twig' %}
2+
3+
{% block body %}
4+
<p>Poštovana/i,</p>
5+
<p>Hvala vam što ste se uključili u Mrežu solidarnosti za obrazovanje kao donator i time stali uz profesore u školama i na univerzitetu koji su u prethodnom periodu, profesionalno, javno i ljudski, nosili teret prvih redova. Vaša kontinuirana podrška pokazuje da solidarnost nije jednokratan gest, već trajna pažnja i spremnost da se ostane uz one koji brane obrazovanje i javni interes.
6+
</p>
7+
<p>
8+
Pišemo Vam sada jer se društveni kontekst u kome delujemo ubrzano menja. Represija se umnožava i pojačava, poprimajući sve raznovrsnije oblike. Ona više ne pogađa samo one koji su istureni u prvim redovima, već zahvata sve širi krug ljudi. Pod udarom represije su studenti, profesori, njihove porodice, ali i sama ideja zakona. Premlaćivanja, finansijski i administrativni pritisci, disciplinski postupci, ugrožavanje radnog mesta, nadzor, marginalizacija i targetiranje imaju za cilj da se ljudi slome, ućutkaju i ostave sami.
9+
</p>
10+
<p>
11+
Upravo zato smo pokrenuli Mrežu solidarnosti protiv represije. Ova forma Mreže je okvir za solidarnu finansijsku podršku onima koji se javno izlažu i koji neposredno preuzimaju rizik kako bi društvo bilo pravednije, odgovornije i sigurnije za sve. Društvo u kojem se bez straha ide u školu, čeka voz ili prolazi ulicom, nije ideal – već posledica solidarnosti i toga da ljudi ne ostaju sami kada su izloženi pritisku.
12+
</p>
13+
<div style="
14+
width:100%;
15+
border-left:4px solid #262185;
16+
padding:12px 16px;
17+
font-style:italic;
18+
color:#2b2b2b;
19+
background-color:#f4f5f8;
20+
">
21+
Donatori koji su bili direktno uključeni u Mrežu solidarnosti za obrazovanje nisu automatski registrovani u <a href="https://mspr.mrezasolidarnosti.org/" target="_blank" style="color:#262185; text-decoration:none;">Mreži solidarnosti protiv represije (MSPR)</a>, u skladu sa principima transparentnosti i poštovanja donatorskih odluka.
22+
</div>
23+
<p>
24+
Potreba da se na represiju odgovori solidarnošću iz dana u dan postaje sve očiglednija, jer se pritisci pojačavaju i šire, zato je solidarna podrška ključna kako oni koji stoje u prvim redovima ne bi ostali sami. Važno nam je da znate – <b>čak i ako danas niste u prvim redovima, možete aktivno učestvovati tako što ćete štititi one koji jesu. U vremenima pojačane represije, solidarna podrška postaje politički čin, način da se podeli i teret i odgovornost.</b>
25+
</p>
26+
<p>
27+
Pozivamo Vas da se registrujete kao donatori Mreže solidarnosti protiv represije i da, u skladu sa sopstvenim mogućnostima, podržite ljude koji trpe neposredne posledice borbe za vrednosti koje delimo.
28+
</p>
29+
<div style="
30+
width:100%;
31+
border-left:4px solid #262185;
32+
padding:12px 16px;
33+
font-style:italic;
34+
color:#2b2b2b;
35+
background-color:#f4f5f8;
36+
">
37+
Više informacija o MSPR, kao i registracija, dostupni su na sledećem linku: <a href="https://mspr.mrezasolidarnosti.org/" target="_blank" style="color:#262185; text-decoration:none;">https://mspr.mrezasolidarnosti.org/ </a>
38+
</div>
39+
<p>
40+
Kada svako da malo, zajedno dobijamo puno.
41+
Tako gradimo otpornost.
42+
Tako štitimo jedni druge.
43+
</p>
44+
{% endblock %}

0 commit comments

Comments
 (0)