1 #!/usr/bin/perl -w -CSDA
7 use CGI
::Fast qw
/header param/;
9 use Email
::Sender
::Simple qw
/sendmail/;
10 use File
::Slurp qw
/append_file/;
11 use JSON qw
/encode_json/;
12 use YAML
::Any qw
/Dump LoadFile/;
14 use Fcntl qw
/LOCK_EX LOCK_UN/;
15 use List
::Util qw
/sum/;
17 ##################################################
22 date
=> 'duminică, 29 septembrie 2013',
31 date
=> 'sâmbătă, 21 septembrie 2013',
40 date
=> 'sâmbătă, 28 septembrie 2013',
49 date
=> 'sâmbătă, 28 septembrie 2013',
58 date
=> 'sâmbătă, 21 septembrie 2013',
67 date
=> 'vineri, 27 septembrie 2013',
76 use constant EMAIL_FROM
=> 'Ziua Libertății Programelor — Fundația Ceata <zlp@ceata.org>';
77 use constant ADMIN_EMAIL
=> 'Ziua Libertății Programelor — Fundația Ceata <zlp@ceata.org>';
78 use constant DATAFILE
=> 'date.yml';
81 ##################################################
83 open LOCK
, '<', DATAFILE
;
85 sub nr_participanti
{ my $event = shift; sum
0, map { $_->{numar
} } grep { $_->{event
} eq $event } @_ }
91 my $prenume = param
('prenume') or die 'Nu ați completat câmpul pentru „Prenume”';
92 utf8
::decode
($prenume);
93 my $nume = param
('nume') // '';
95 my $email = param
('email') or die 'Nu ați completat câmpul pentru „Adresa de poștă electronică”';
97 my $event = param
('oras') or die 'Nu ați ales orașul cu evenimentul';
98 die 'Ziua Libertății Programelor nu se ține în orașul ales' unless exists $events{$event};
99 my $numar = int param
('numar') or die 'Nu ați ales numărul de participanți';
100 die 'Numărul de participanți trebuie să fie între 1 și 5' unless $numar >= 1 && $numar <= 5;
101 my $captcha = param
('captcha') or die 'Nu ați completat anul de lansare al proiectului GNU';
102 die 'Ați completat greșit anul de lansare al proiectului GNU' unless $captcha == 83;
103 my $spam = param
('spam') or 0;
104 my @db = grep { $_->{event
} eq $event } LoadFile DATAFILE
;
105 die 'Această adresă de poștă electronică este deja folosită' if grep { $_->{email
} eq $email } @db;
106 my $participanti = nr_participanti
$event, @db;
107 die 'Nu sunt suficiente locuri libere' if $events{$event}{locuri
} < $participanti + $numar;
115 spam
=> defined($spam) && $spam ?
1 : 0,
117 my $success_email = Email
::Simple
->create(
119 To
=> "$nume <$email>",
120 Subject
=> 'Înscriere la Ziua Libertății Programelor',
123 body
=> "Aceasta este o confirmare de înscriere la Ziua Libertății Programelor\n\n" . Dump \
%entry,
125 sendmail
$success_email, { to
=> [$email, ADMIN_EMAIL
]};
126 append_file DATAFILE
, Dump \
%entry;
131 my $eroare = $@
=~ s/ at .*//r;
132 my $error_email = Email
::Simple
->create(
134 To
=> "Administrator <" . ADMIN_EMAIL
. ">",
135 Subject
=> 'Eroare de înscriere la Ziua Libertății Programelor',
138 body
=> "Eroare: $eroare",
140 sendmail
$error_email;
141 print header
('text/html; charset=utf-8', '500 Internal Server Error');
144 print header
('text/html; charset=utf-8');
145 print 'Ați fost înscris cu succes';
150 my $event = param
('event');
153 die 'Eveniment inexistent' unless defined $event && exists $events{$event};
154 my %out = %{$events{$event}};
155 my $participanti = nr_participanti
$event, LoadFile DATAFILE
;
156 $out{locuri
} = $out{locuri
} - $participanti;
157 print header
('application/json; charset=utf-8');
158 print encode_json \
%out;
163 print header
('text/html; charset=utf-8', '500 Internal Server Error');
169 my $event = param
('event');
171 unless (exists $events{$event}) {
172 print header
('text/html; charset=utf-8', '500 Internal Server Error');
173 print 'Acest eveniment nu există';
177 my @db = grep { $_->{event
} eq $event } LoadFile DATAFILE
;
178 my $participanti = nr_participanti
$event, @db;
179 print header
('text/html; charset=utf-8');
180 print "Sunt $participanti participanți înscriși<p>";
182 print "Nume: $p->{nume}<br>Prenume: $p->{prenume}<br>Email: $p->{email}<br>Event: $p->{event}<br>Numar: $p->{numar}<br>Spam: $p->{spam}<p>";
186 while (CGI
::Fast
->new) {
187 my $op = param
'op' // '';
188 append
if $op eq 'append';
189 info
if $op eq 'info';
190 view
if $op eq 'view';
200 zlp - Formular de înscriere la Ziua Libertății Programelor
204 Marius Gavrilescu E<lt>marius@ieval.roE<gt>
206 =head1 COPYRIGHT AND LICENSE
208 Copyright (C) 2013 Fundația Ceata
210 This program is free software: you can redistribute it and/or modify
211 it under the terms of the GNU Affero General Public License as published by
212 the Free Software Foundation, either version 3 of the License, or
213 (at your option) any later version.
215 This program is distributed in the hope that it will be useful,
216 but WITHOUT ANY WARRANTY; without even the implied warranty of
217 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
218 GNU Affero General Public License for more details.
220 You should have received a copy of the GNU Affero General Public License
221 along with this program. If not, see <http://www.gnu.org/licenses/>.
This page took 0.032278 seconds and 4 git commands to generate.