voluntariat 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/usr/bin/perl -w -CSDA
  2. use v5.14;
  3. use strict;
  4. use warnings;
  5. use utf8;
  6. use CGI::Fast qw/header param/;
  7. use CGI::Fast qw/Vars/;
  8. use Data::Dumper;
  9. use Email::Simple;
  10. use Email::Sender::Simple qw/sendmail/;
  11. use File::Slurp qw/append_file/;
  12. use JSON qw/encode_json/;
  13. use YAML::Any qw/Dump LoadFile/;
  14. use Fcntl qw/LOCK_EX LOCK_UN/;
  15. use List::Util qw/sum/;
  16. ##################################################
  17. use constant EMAIL_FROM => 'Înscrieri ca membri voluntari în Fundația Ceata <voluntariat@ceata.org>';
  18. use constant ADMIN_EMAIL => 'voluntariat@ceata.org';
  19. use constant DATAFILE => 'date.yml';
  20. # Sfarsit setari
  21. ##################################################
  22. open LOCK, '<', DATAFILE;
  23. sub append{
  24. flock LOCK, LOCK_EX;
  25. eval {
  26. my $prenume = param('prenume') or die 'Nu ați completat prenumele';
  27. utf8::decode($prenume);
  28. my $nume = param('nume') or die 'Nu ați completat numele';
  29. utf8::decode($nume);
  30. my $adresa = param('adresa') or die 'Nu ați completat adresa de poștă electronică';
  31. utf8::decode($adresa);
  32. my $telefon = param('telefon') or die 'Nu ați completat telefonul';
  33. utf8::decode($telefon);
  34. my $cnp = param('cnp') or die 'Nu ați completat codul numeric personal';
  35. utf8::decode($cnp);
  36. my $oras = param('oras') or die 'Nu ați completat orașul în care locuiți';
  37. utf8::decode($oras);
  38. my $judet = param('judet') or die 'Nu ați completat județul/raionul/statul în care locuiți';
  39. utf8::decode($judet);
  40. my $tara = param('tara') or die 'Nu ați completat țara în care locuiți';
  41. utf8::decode($tara);
  42. my $descriere = param('descriere') or die 'Nu ați completat descrierea';
  43. utf8::decode($descriere);
  44. my $poza = param('poza') or '';
  45. utf8::decode($poza);
  46. my (undef, undef, undef, $mday, $mon, $year) = localtime;
  47. my ($cmday, $cmon, $cyear) = (10, 5, 108);
  48. my $nanniv = $year - $cyear + 1 - (($mon - $cmon || $mday - $cmday) < 0);
  49. my $captcha = param('captcha') or die 'Nu ați răspuns la întrebarea de test despre aniversarea proiectului Ceata.';
  50. die 'Răspuns greșit la întrebarea de test despre aniversarea proiectului Ceata. Recitiți introducerea.' unless $captcha == $nanniv;
  51. my $referinta = param('referinta') || param('referinta2');
  52. my $anunturi = param('anunturi') or 0;
  53. my @db = LoadFile DATAFILE;
  54. die 'Această adresă de poștă electronică este deja folosită' if grep { $_->{adresa} eq $adresa } @db;
  55. my $entry = Dump {
  56. prenume => $prenume,
  57. nume => $nume,
  58. adresa => $adresa,
  59. telefon => $telefon,
  60. cnp => $cnp,
  61. oras => $oras,
  62. judet => $judet,
  63. tara => $tara,
  64. descriere => $descriere,
  65. poza => $poza,
  66. referinta => $referinta,
  67. anunturi => defined($anunturi) && $anunturi ? 1 : 0,
  68. };
  69. append_file DATAFILE, $entry;
  70. utf8::decode($entry);
  71. my $success_email = Email::Simple->create(
  72. header => [
  73. To => "$nume <$adresa>",
  74. Subject => 'Confirmarea de înscriere ca membru voluntar în Fundația Ceata',
  75. From => EMAIL_FROM,
  76. ],
  77. body => "Aceasta este o confirmare automată de înscriere ca membru voluntar în Fundația Ceata. În scurt timp te vom contacta în legătură cu finalizarea procedurii.\n\n$entry"
  78. );
  79. sendmail $success_email, { charset => 'utf-8', to => [$adresa, ADMIN_EMAIL]};
  80. };
  81. flock LOCK, LOCK_UN;
  82. if ($@) {
  83. my $eroare = $@ =~ s/ at .*//r;
  84. my $error_email = Email::Simple->create(
  85. header => [
  86. To => "Administrator <" . ADMIN_EMAIL . ">",
  87. Subject => 'Eroare de înscriere ca membru voluntar în Fundația Ceata',
  88. From => EMAIL_FROM,
  89. ],
  90. body => "Eroare: $eroare\n" . Dumper scalar Vars,
  91. );
  92. sendmail $error_email;
  93. print header('text/html; charset=utf-8', '500 Internal Server Error');
  94. print $eroare;
  95. } else {
  96. print header('text/html; charset=utf-8');
  97. print 'Ați fost înscris cu succes';
  98. }
  99. }
  100. while (CGI::Fast->new) {
  101. my $op = param 'op' // '';
  102. append if $op eq 'append';
  103. }
  104. 1;
  105. __END__
  106. =head1 NAME
  107. hgcj - Formular de înscriere în Fundația Ceata
  108. =head1 AUTHORS
  109. Marius Gavrilescu E<lt>marius@ieval.roE<gt>
  110. Tiberiu C. Turbureanu E<lt>tct@ceata.org<gt>
  111. =head1 COPYRIGHT AND LICENSE
  112. Copyright (C) 2013 Fundația Ceata
  113. This program is free software: you can redistribute it and/or modify
  114. it under the terms of the GNU Affero General Public License as published by
  115. the Free Software Foundation, either version 3 of the License, or
  116. (at your option) any later version.
  117. This program is distributed in the hope that it will be useful,
  118. but WITHOUT ANY WARRANTY; without even the implied warranty of
  119. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  120. GNU Affero General Public License for more details.
  121. You should have received a copy of the GNU Affero General Public License
  122. along with this program. If not, see <http://www.gnu.org/licenses/>.
  123. =cut