Code Duplication    Length = 710-712 lines in 2 locations

mod/contactform/include/fgcontactform.php 1 location

@@ 30-741 (lines=712) @@
27
It supports Captcha, HTML Emails, sending emails
28
conditionally, File atachments and more.
29
*/
30
class FGContactForm
31
{
32
    var $receipients;
33
    var $errors;
34
    var $error_message;
35
    var $name;
36
    var $email;
37
    var $message;
38
    var $from_address;
39
    var $form_random_key;
40
    var $conditional_field;
41
    var $arr_conditional_receipients;
42
    var $fileupload_fields;
43
    var $captcha_handler;
44
    var $mailer;
45
46
    function FGContactForm()
47
    {
48
        $this->receipients = array();
49
        $this->errors = array();
50
        $this->form_random_key = 'HTgsjhartag';
51
        $this->conditional_field='';
52
        $this->arr_conditional_receipients=array();
53
        $this->fileupload_fields=array();
54
        $this->mailer = new PHPMailer();
55
        $this->mailer->CharSet = 'utf-8';
56
        $this->mailer->IsSMTP();
57
        $this->mailer->Host = elgg_get_plugin_setting('phpmailer_host', 'phpmailer'); // SMTP server
58
        $this->mailer->Port = elgg_get_plugin_setting('ep_phpmailer_port', 'phpmailer'); // SMTP server port
59
        $this->mailer->SMTPSecure = 'tls';
60
        $this->mailer->SMTPAuth = 'true';
61
        $this->mailer->Username = elgg_get_plugin_setting('phpmailer_username', 'phpmailer');
62
        $this->mailer->Password = elgg_get_plugin_setting('phpmailer_password', 'phpmailer');
63
    }
64
65
    function EnableCaptcha($captcha_handler)
66
    {
67
        $this->captcha_handler = $captcha_handler;
68
        session_start();
69
    }
70
71
    function AddRecipient($email,$name="")
72
    {
73
        $this->mailer->AddAddress($email,$name);
74
    }
75
76
    function SetFromAddress($from)
77
    {
78
        $this->from_address = $from;
79
    }
80
    function SetFormRandomKey($key)
81
    {
82
        $this->form_random_key = $key;
83
    }
84
    function GetSpamTrapInputName()
85
    {
86
        return 'sp'.md5('KHGdnbvsgst'.$this->GetKey());
87
    }
88
    function SafeDisplay($value_name)
89
    {
90
        if(empty($_POST[$value_name]))
91
        {
92
            return'';
93
        }
94
        return htmlentities($_POST[$value_name]);
95
    }
96
    function GetFormIDInputName()
97
    {
98
        $rand = md5('TygshRt'.$this->GetKey());
99
100
        $rand = substr($rand,0,20);
101
        return 'id'.$rand;
102
    }
103
104
105
    function GetFormIDInputValue()
106
    {
107
        return md5('jhgahTsajhg'.$this->GetKey());
108
    }
109
110
    function SetConditionalField($field)
111
    {
112
        $this->conditional_field = $field;
113
    }
114
    function AddConditionalReceipent($value,$email)
115
    {
116
        $this->arr_conditional_receipients[$value] =  $email;
117
    }
118
119
    function AddFileUploadField($file_field_name,$accepted_types,$max_size)
120
    {
121
122
        $this->fileupload_fields[] =
123
            array("name"=>$file_field_name,
124
            "file_types"=>$accepted_types,
125
            "maxsize"=>$max_size);
126
    }
127
128
    function ProcessForm()
129
    {
130
        if(!isset($_POST['submitted']))
131
        {
132
           return false;
133
        }
134
        if(!$this->Validate())
135
        {
136
           // $this->error_message = implode('<br/><br/><br/>',$this->errors);
137
            return false;
138
        }
139
        $this->CollectData();
140
141
        $ret = $this->SendFormSubmission();
142
143
        return $ret;
144
    }
145
146
    function RedirectToURL($url)
147
    {
148
        header("Location: $url");
149
        exit;
150
    }
151
152
    function GetErrorMessage()
153
    {
154
        return $this->error_message;
155
    }
156
    function GetSelfScript()
157
    {
158
        return htmlentities($_SERVER['PHP_SELF']);
159
    }
160
161
    function GetName()
162
    {
163
        return $this->name;
164
    }
165
    function GetEmail()
166
    {
167
        return $this->email;
168
    }
169
    function GetMessage()
170
    {
171
        return htmlentities($this->message,ENT_QUOTES,"UTF-8");
172
    }
173
174
/*--------  Private (Internal) Functions -------- */
175
176
177
    function SendFormSubmission()
178
    {
179
              $reason = $_POST['reason'];
180
                $option = explode("$", $_POST['reason']);
181
                    $categoryfr = $option[0];
182
                    $categoryen = $option[1]; 
183
184
        $depart = $_POST['depart'];
185
        $reason = $_POST['reason'];
186
                $option = explode("$", $_POST['reason']);
187
                    $french = $option[0];
188
                    $english = $option[1]; 
189
         if(empty($_POST['subject']))
190
           {
191
           $subject = $categoryen." - ".$depart. " - $this->name  / ".$categoryfr." - ".$depart. " - $this->name";
192
           }else{
193
            $subject = "GCconnex - ".$depart. " - $this->name  / GCconnex - ".$depart. " - $this->name";
194
           }
195
        
196
        $this->CollectConditionalReceipients();
197
        $this->mailer->CharSet = 'utf-8';
198
        $this->mailer->Subject = $subject;
199
        $this->mailer->From = elgg_get_plugin_setting('phpmailer_from_email', 'phpmailer');
200
        $this->mailer->FromName = elgg_get_plugin_setting('phpmailer_from_name', 'phpmailer');
201
        $this->mailer->AddCC($this->email);
202
        $message = $this->ComposeFormtoEmail();
203
        $this->mailer->ConfirmReadingTo = $this->email;
204
        $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));
205
        $this->mailer->AltBody = @html_entity_decode($textMsg,ENT_QUOTES,"UTF-8");
206
        $this->mailer->MsgHTML($message);
207
        $this->AttachFiles();
208
209
        if(!$this->mailer->Send())
210
        {
211
            $this->add_error("Failed sending email!");
212
            return false;
213
        }
214
215
        return true;
216
    }
217
218
    function CollectConditionalReceipients()
219
    {
220
        if(count($this->arr_conditional_receipients)>0 &&
221
          !empty($this->conditional_field) &&
222
          !empty($_POST[$this->conditional_field]))
223
        {
224
            foreach($this->arr_conditional_receipients as $condn => $rec)
225
            {
226
                if(strcasecmp($condn,$_POST[$this->conditional_field])==0 &&
227
                !empty($rec))
228
                {
229
                    $this->AddRecipient($rec);
230
                }
231
            }
232
        }
233
    }
234
235
    /*
236
    Internal variables, that you donot want to appear in the email
237
    Add those variables in this array.
238
    */
239
    function IsInternalVariable($varname)
240
    {
241
        $arr_interanl_vars = array('scaptcha',
242
                            'submitted',
243
                            $this->GetSpamTrapInputName(),
244
                            $this->GetFormIDInputName()
245
                            );
246
        if(in_array($varname,$arr_interanl_vars))
247
        {
248
            return true;
249
        }
250
        return false;
251
    }
252
253
    function FormSubmissionToMail()
254
    {
255
        $ret_str='';
256
        
257
                $name = $_POST['name'];
258
                $email = $_POST['email'];
259
                $reason = $_POST['reason'];
260
                $option = explode("$", $_POST['reason']);
261
                    $french = $option[0];
262
                    $english = $option[1]; 
263
                if(empty($_POST['subject']))
264
                {
265
                    $subject = "$this->name has contacted you about ". $english." / $this->name vous a envoyé un message à propos de ".$french;
266
                }else{
267
                    $subject = $_POST['subject'];
268
                }
269
        
270
                $message = $_POST['message'];
271
        
272
        $name=htmlentities($name, ENT_QUOTES, "UTF-8");
273
        $email=htmlentities($email, ENT_QUOTES, "UTF-8");
274
        $reason=htmlentities($reason, ENT_QUOTES, "UTF-8");
275
        $subject=htmlentities($subject, ENT_QUOTES, "UTF-8");
276
        $message=htmlentities($message, ENT_QUOTES, "UTF-8");
277
      
278
                $value = htmlentities($value,ENT_QUOTES,"UTF-8");
279
                $value = nl2br($value);
280
                $key = ucfirst($key);
281
                $ret_str .= '
282
283
<!-- beginning of email template -->
284
  <div width="100%" bgcolor="#fcfcfc">
285
    <div>
286
      <div>
287
288
        <!-- email header -->
289
            <div align="center" width="100%" style="background-color:#f5f5f5; padding:20px 30px 15px 30px; font-family: sans-serif; font-size: 12px; color: #055959">
290
              Thank you for contacting the GCconnex Help desk. This is a copy of your request.<br/><br/> Merci d\'avoir communiqué avec le bureau de soutien de GCconnex. Ceci est une copie de votre requête.
291
            </div>
292
        
293
294
            <!-- GCconnex banner -->
295
            <div width="100%" style="padding: 0 0 0 10px; color:#ffffff; font-family: sans-serif; font-size: 35px; line-height:38px; font-weight: bold; background-color:#047177;">
296
            <span style="padding: 0 0 0 3px; font-size: 20px; color: #ffffff; font-family: sans-serif;">GCconnex</span>
297
            </div>
298
299
            <!-- email divider -->
300
            <div style="height:1px; background:#bdbdbd; border-bottom:1px solid #ffffff"></div>
301
302
<!-- english -->
303
304
            <!-- main content of the notification (ENGLISH) -->
305
            <!-- *optional* email message (DO NOT REPLY) -->
306
            <div width="100%" style="padding:30px 30px 10px 30px; font-size:12px; line-height:22px; font-family:sans-serif;">
307
308
            <!-- The French Follows... -->
309
            <span style="font-size:12px; font-weight: normal;"><i>(Le fran&ccedil;ais suit)</i></span><br/>  
310
            </div>
311
312
            <div width="100%" style="padding:30px 30px 30px 30px; color:#153643; font-family:sans-serif; font-size:16px; line-height:22px; ">
313
            <!-- TITLE OF CONTENT -->
314
            <h2 style="padding: 0px 0px 15px 0px">
315
            <strong> GCconnex Contact Us Form </strong>
316
            </h2>
317
318
            <!-- BODY OF CONTENT -->
319
            <b>Name:</b> '.$name.'<br/>
320
            <b>Email:</b> '.$email.'<br/>
321
            <b>Reason:</b> '.$english.' <br/>
322
            <b>Subject:</b> '.$subject.'<br/>
323
            <b>Message:</b>'.$message .'<br/>
324
            </div>
325
                
326
            <div style="margin-top:15px; padding: 5px; color: #6d6d6d; border-bottom: 1px solid #ddd;"></div>
327
                
328
<!-- french -->
329
330
            <!-- main content of the notification (FRENCH) -->
331
            <!-- *optional* email message (DO NOT REPLY) -->
332
            <div id="gcc_fr_suit" name="gcc_fr_suit" width="100%" style="padding:30px 30px 10px 30px; font-size:12px; line-height:22px; font-family:sans-serif;"></div>
333
334
            <div width="100%" style="padding:30px 30px 30px 30px; color:#153643; font-family:sans-serif; font-size:16px; line-height:22px;">
335
            <!-- TITLE OF CONTENT -->
336
            <h2 style="padding: 0px 0px 15px 0px">
337
            <strong> Formulaire contactez-nous de GCconnex</strong>
338
            </h2>
339
340
            <!-- BODY OF CONTENT -->
341
            <b>Nom :</b> '.$name.'<br/> 
342
            <b>Courriel :</b> '.$email.'<br/>
343
            <b>Raison :</b> '.$french.'<br/>
344
            <b>Sujet :</b> '.$subject.'<br/>
345
            <b>Message :</b>'.$message.'<br/>
346
            </div>
347
            <div style="margin-top:15px; padding: 5px; color: #6d6d6d;"></div>
348
349
            <!-- email divider -->
350
            <div style="height:1px; background:#bdbdbd; border-bottom:1px solid #ffffff"></div>
351
352
            <!-- email footer -->
353
            <div align="center" width="100%" style="background-color:#f5f5f5; padding:20px 30px 15px 30px; font-family: sans-serif; font-size: 16px; color: #055959">
354
            Please do not reply to this message | Veuillez ne pas répondre à ce message
355
            </div>
356
357
      </div>
358
    </div>
359
  </div>';
360
361
        foreach($this->fileupload_fields as $upload_field)
362
        {
363
            $field_name = $upload_field["name"];
364
            if(!$this->IsFileUploaded($field_name))
365
            {
366
                continue;
367
            }        
368
            
369
            $filename = basename($_FILES[$field_name]['name']);
370
            $ret_str .= "<div class='label'>File upload '$field_name' :</div><div class='value'>$filename </div>\n";
371
        }
372
        return $ret_str;
373
    }
374
375
    function ExtraInfoToMail()
376
    {
377
        $ret_str='';
378
379
        $ip = $_SERVER['REMOTE_ADDR'];
380
        $ret_str = "<div class='label'>IP address of the submitter:</div><div class='value'>$ip</div>\n";
381
382
        return $ret_str;
383
    }
384
385
    function GetHTMLHeaderPart()
386
    {
387
         $retstr = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'."\n".
388
                   '<html><head><title></title><style type="text/css">
389
  body {margin: 0; padding: 0; min-width: 100%!important;}
390
  img {height: auto;}
391
  .content {width: 100%; max-width: 600px;}
392
  .header {padding: 40px 30px 20px 30px;}
393
  .innerpadding {padding: 30px 30px 30px 30px;}
394
  .borderbottom {border-bottom: 1px solid #f2eeed;}
395
  .subhead {font-size: 15px; color: #ffffff; font-family: sans-serif; }
396
  .h1, .h2, .bodycopy {color: #153643; font-family: sans-serif;}
397
  .h1 {font-size: 33px; line-height: 38px; font-weight: bold;}
398
  .h2 {padding: 0 0 15px 0; font-size: 24px; line-height: 28px; font-weight: bold;}
399
  .bodycopy {font-size: 16px; line-height: 22px;}
400
  .button {text-align: center; font-size: 18px; font-family: sans-serif; font-weight: bold; padding: 0 30px 0 30px;}
401
  .button a {color: #ffffff; text-decoration: none;}
402
  .footer {padding: 20px 30px 15px 30px;}
403
  .footercopy {font-family: sans-serif; font-size: 14px; color: #ffffff;}
404
  .footercopy a {color: #ffffff; text-decoration: underline;}
405
  @media only screen and (max-width: 550px), screen and (max-device-width: 550px) {
406
  body[yahoo] .hide {display: none!important;}
407
  body[yahoo] .buttonwrapper {background-color: transparent!important;}
408
  body[yahoo] .button {padding: 0px!important;}
409
  body[yahoo] .button a {background-color: #e05443; padding: 15px 15px 13px!important;}
410
  body[yahoo] .unsubscribe {display: block; margin-top: 20px; padding: 10px 50px; background: #2f3942; border-radius: 5px; text-decoration: none!important; font-weight: bold;}
411
  }
412
  /*@media only screen and (min-device-width: 601px) {
413
    .content {width: 600px !important;}
414
    .col425 {width: 425px!important;}
415
    .col380 {width: 380px!important;}
416
    }*/
417
  </style>'.
418
  '<meta http-equiv=Content-Type content="text/html; charset=utf-8">';
419
       
420
         $retstr .= '</head><body yahoo bgcolor="#fcfcfc" style="margin: 0; padding: 0; min-width: 100%!important;">';
421
         return $retstr;
422
    }
423
424
    function GetHTMLFooterPart()
425
    {
426
        $retstr ='</body></html>';
427
        return $retstr ;
428
    }
429
430
    function ComposeFormtoEmail()
431
    {
432
        $header = $this->GetHTMLHeaderPart();
433
        $formsubmission = $this->FormSubmissionToMail();
434
        $footer = $this->GetHTMLFooterPart();
435
        $message = $header."<p>$formsubmission</p><hr/>$extra_info".$footer;
436
437
        return $message;
438
    }
439
440
    function AttachFiles()
441
    {
442
        foreach($this->fileupload_fields as $upld_field)
443
        {
444
            $field_name = $upld_field["name"];
445
            if(!$this->IsFileUploaded($field_name))
446
            {
447
                continue;
448
            }
449
            
450
            $filename =basename($_FILES[$field_name]['name']);
451
            $this->mailer->AddAttachment($_FILES[$field_name]["tmp_name"],$filename);
452
        }
453
    }
454
455
    function GetFromAddress()
456
    {
457
        if(!empty($this->from_address))
458
        {
459
            return $this->from_address;
460
        }
461
462
        $host = $_SERVER['SERVER_NAME'];
463
        $from ="nobody@$host";
464
        return $from;
465
    }
466
467
    function Validate()
468
    {
469
        $ret = true;
470
        $numErr=0;
471
        //security validations
472
        if(empty($_POST[$this->GetFormIDInputName()]) ||
473
          $_POST[$this->GetFormIDInputName()] != $this->GetFormIDInputValue() )
474
        {
475
            $numErr=$numErr+1;
476
            //The proper error is not given intentionally
477
            $this->add_error();
478
            register_error("Automated submission prevention: case 1 failed");
479
            $ret = false;
480
        }
481
482
        //This is a hidden input field. Humans won't fill this field.
483
        if(!empty($_POST[$this->GetSpamTrapInputName()]) )
484
        {
485
            $numErr=$numErr+1;
486
            //The proper error is not given intentionally
487
            $this->add_error();
488
            register_error("Automated submission prevention: case 2 failed");
489
            $ret = false;
490
        }
491
492
        //select validations
493
        if((($_POST['reason']) =='Select...') || (($_POST['reason']) == "Choisir..."))
494
        {
495
            $numErr=$numErr+1;
496
            $this->add_error();
497
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errreason')));
498
            $ret = false;
499
        }
500
501
        if ($_POST['reason'] == 'Autres$Other')
502
        {
503
            if (empty($_POST['subject']))
504
            {
505
                $numErr=$numErr+1;
506
                $this->add_error();
507
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errsubject')));
508
                $ret = false;
509
            }
510
        }
511
512
        //name validations
513
        if(empty($_POST['name']))
514
        {
515
            $numErr=$numErr+1;
516
            $this->add_error();
517
            //'contactform:Errname'
518
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errname')));
519
            $ret = false;
520
        }
521
        else
522
            if(strlen($_POST['name'])>75)
523
            {
524
                $numErr=$numErr+1;
525
                $this->add_error();
526
                //'contactform:Errnamebig'
527
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errnamebig')));
528
                $ret = false;
529
            }
530
531
        //email validations
532
        if(empty($_POST['email']))
533
        {
534
            $numErr=$numErr+1;
535
            $this->add_error();
536
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Erremail')));
537
            $ret = false;
538
        }
539
        else
540
            if(strlen($_POST['email'])>100)
541
            {
542
                $numErr=$numErr+1;
543
                $this->add_error();
544
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Erremailbig')));
545
                $ret = false;
546
            }
547
            else
548
                if(!$this->validate_email($_POST['email']))
549
                {
550
                    $numErr=$numErr+1;
551
                    $this->add_error();
552
                    //'contactform:Erremailvalid'
553
                    register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Erremailvalid')));
554
                    $ret = false;
555
                }
556
557
        //department validaions
558
        if (elgg_is_active_plugin('gcconnex_theme')) {
559
            if(empty($_POST['depart']))
560
            {
561
                $numErr=$numErr+1;
562
                $this->add_error();
563
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errdepart')));
564
                $ret = false;
565
            }
566
            else
567
                if(strlen($_POST['depart'])>255)
568
                {
569
                    $numErr=$numErr+1;
570
                    $this->add_error();
571
                    register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errdepartbig')));
572
                    $ret = false;
573
                }
574
        }
575
576
        //message validaions
577
        if(empty($_POST['message']))
578
        {
579
            $numErr=$numErr+1;
580
            $this->add_error();
581
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errmess')));
582
            $ret = false;
583
        }
584
        else
585
            if(strlen($_POST['message'])>2048)
586
            {
587
                $numErr=$numErr+1;
588
                $this->add_error();
589
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errmessbig')));
590
                $ret = false;
591
            }
592
593
        //file upload validations
594
        if(!empty($this->fileupload_fields))
595
        {
596
            $numErr=$numErr+1;
597
            if(!$this->ValidateFileUploads($numErr))
598
            {
599
                $ret = false;
600
            }
601
        }
602
        return $ret;
603
    }
604
605
    function ValidateFileType($field_name,$valid_filetypes)
606
    {
607
        $ret=true;
608
        $info = pathinfo($_FILES[$field_name]['name']);
609
        $extn = $info['extension'];
610
        $extn = strtolower($extn);
611
612
        $arr_valid_filetypes= explode(',',$valid_filetypes);
613
        if(!in_array($extn,$arr_valid_filetypes))
614
        {
615
            $this->add_error();
616
            register_error("Valid file types are: $valid_filetypes");
617
            $ret=false;
618
        }
619
        return $ret;
620
    }
621
622
    function ValidateFileSize($field_name,$max_size)
623
    {
624
        $size_of_uploaded_file = $_FILES[$field_name]["size"]/1024;//size in KBs
625
        if($size_of_uploaded_file > $max_size)
626
        {
627
            $this->add_error();
628
            register_error("The file is too big. File size should be less than $max_size KB");
629
            return false;
630
        }
631
        return true;
632
    }
633
634
    function IsFileUploaded($field_name)
635
    {
636
        if(empty($_FILES[$field_name]['name']))
637
        {
638
            return false;
639
        }
640
        if(!is_uploaded_file($_FILES[$field_name]['tmp_name']))
641
        {
642
            return false;
643
        }
644
        return true;
645
    }
646
    function ValidateFileUploads()
647
    {
648
        $ret=true;
649
        foreach($this->fileupload_fields as $upld_field)
650
        {
651
            $field_name = $upld_field["name"];
652
653
            $valid_filetypes = $upld_field["file_types"];
654
            
655
            if(!$this->IsFileUploaded($field_name))
656
            {
657
                continue;
658
            }
659
660
            if($_FILES[$field_name]["error"] != 0)
661
            {
662
                $this->add_error("Error in file upload; Error code:".$_FILES[$field_name]["error"]);
663
                $ret=false;
664
            }
665
666
            if(!empty($valid_filetypes) &&
667
             !$this->ValidateFileType($field_name,$valid_filetypes))
668
            {
669
                $ret=false;
670
            }
671
672
            if(!empty($upld_field["maxsize"]) &&
673
            $upld_field["maxsize"]>0)
674
            {
675
                if(!$this->ValidateFileSize($field_name,$upld_field["maxsize"]))
676
                {
677
                    $ret=false;
678
                }
679
            }
680
        }
681
        return $ret;
682
    }
683
684
    function StripSlashes($str)
685
    {
686
        if(get_magic_quotes_gpc())
687
        {
688
            $str = stripslashes($str);
689
        }
690
        return $str;
691
    }
692
    /*
693
    Sanitize() function removes any potential threat from the
694
    data submitted. Prevents email injections or any other hacker attempts.
695
    if $remove_nl is true, newline chracters are removed from the input.
696
    */
697
    function Sanitize($str,$remove_nl=true)
698
    {
699
        $str = $this->StripSlashes($str);
700
701
        if($remove_nl)
702
        {
703
            $injections = array('/(\n+)/i',
704
                '/(\r+)/i',
705
                '/(\t+)/i',
706
                '/(%0A+)/i',
707
                '/(%0D+)/i',
708
                '/(%08+)/i',
709
                '/(%09+)/i'
710
                );
711
            $str = preg_replace($injections,'',$str);
712
        }
713
714
        return $str;
715
    }
716
717
    /*Collects clean data from the $_POST array and keeps in internal variables.*/
718
    function CollectData()
719
    {
720
        $this->name = $this->Sanitize($_POST['name']);
721
        $this->email = $this->Sanitize($_POST['email']);
722
723
        /*newline is OK in the message.*/
724
        $this->message = $this->StripSlashes($_POST['message']);
725
    }
726
727
    function add_error($error)
728
    {
729
        array_push($this->errors,$error);
730
    }
731
    function validate_email($email)
732
    {
733
        return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email);
734
    }
735
736
    function GetKey()
737
    {
738
        return $this->form_random_key.$_SERVER['SERVER_NAME'].$_SERVER['REMOTE_ADDR'];
739
    }
740
741
}
742
743
?>

mod/gccollab_theme/include/fgcontactform.php 1 location

@@ 30-739 (lines=710) @@
27
It supports Captcha, HTML Emails, sending emails
28
conditionally, File atachments and more.
29
*/
30
class FGContactForm
31
{
32
    var $receipients;
33
    var $errors;
34
    var $error_message;
35
    var $name;
36
    var $email;
37
    var $message;
38
    var $from_address;
39
    var $form_random_key;
40
    var $conditional_field;
41
    var $arr_conditional_receipients;
42
    var $fileupload_fields;
43
    var $captcha_handler;
44
    var $mailer;
45
46
    function FGContactForm()
47
    {
48
        $this->receipients = array();
49
        $this->errors = array();
50
        $this->form_random_key = 'HTgsjhartag';
51
        $this->conditional_field='';
52
        $this->arr_conditional_receipients=array();
53
        $this->fileupload_fields=array();
54
        $this->mailer = new PHPMailer();
55
        $this->mailer->CharSet = 'utf-8';
56
        $this->mailer->IsSMTP();
57
        $this->mailer->Host = elgg_get_plugin_setting('phpmailer_host', 'phpmailer'); // SMTP server
58
        $this->mailer->Port = elgg_get_plugin_setting('ep_phpmailer_port', 'phpmailer'); // SMTP server port
59
        $this->mailer->SMTPSecure = 'tls';
60
        $this->mailer->SMTPAuth = 'true';
61
        $this->mailer->Username = elgg_get_plugin_setting('phpmailer_username', 'phpmailer');
62
        $this->mailer->Password = elgg_get_plugin_setting('phpmailer_password', 'phpmailer');
63
    }
64
65
    function EnableCaptcha($captcha_handler)
66
    {
67
        $this->captcha_handler = $captcha_handler;
68
        session_start();
69
    }
70
71
    function AddRecipient($email,$name="")
72
    {
73
        $this->mailer->AddAddress($email,$name);
74
    }
75
76
    function SetFromAddress($from)
77
    {
78
        $this->from_address = $from;
79
    }
80
    function SetFormRandomKey($key)
81
    {
82
        $this->form_random_key = $key;
83
    }
84
    function GetSpamTrapInputName()
85
    {
86
        return 'sp'.md5('KHGdnbvsgst'.$this->GetKey());
87
    }
88
    function SafeDisplay($value_name)
89
    {
90
        if(empty($_POST[$value_name]))
91
        {
92
            return'';
93
        }
94
        return htmlentities($_POST[$value_name]);
95
    }
96
    function GetFormIDInputName()
97
    {
98
        $rand = md5('TygshRt'.$this->GetKey());
99
100
        $rand = substr($rand,0,20);
101
        return 'id'.$rand;
102
    }
103
104
105
    function GetFormIDInputValue()
106
    {
107
        return md5('jhgahTsajhg'.$this->GetKey());
108
    }
109
110
    function SetConditionalField($field)
111
    {
112
        $this->conditional_field = $field;
113
    }
114
    function AddConditionalReceipent($value,$email)
115
    {
116
        $this->arr_conditional_receipients[$value] =  $email;
117
    }
118
119
    function AddFileUploadField($file_field_name,$accepted_types,$max_size)
120
    {
121
122
        $this->fileupload_fields[] =
123
            array("name"=>$file_field_name,
124
            "file_types"=>$accepted_types,
125
            "maxsize"=>$max_size);
126
    }
127
128
    function ProcessForm()
129
    {
130
        if(!isset($_POST['submitted']))
131
        {
132
           return false;
133
        }
134
        if(!$this->Validate())
135
        {
136
           // $this->error_message = implode('<br/><br/><br/>',$this->errors);
137
            return false;
138
        }
139
        $this->CollectData();
140
141
        $ret = $this->SendFormSubmission();
142
143
        return $ret;
144
    }
145
146
    function RedirectToURL($url)
147
    {
148
        header("Location: $url");
149
        exit;
150
    }
151
152
    function GetErrorMessage()
153
    {
154
        return $this->error_message;
155
    }
156
    function GetSelfScript()
157
    {
158
        return htmlentities($_SERVER['PHP_SELF']);
159
    }
160
161
    function GetName()
162
    {
163
        return $this->name;
164
    }
165
    function GetEmail()
166
    {
167
        return $this->email;
168
    }
169
    function GetMessage()
170
    {
171
        return htmlentities($this->message,ENT_QUOTES,"UTF-8");
172
    }
173
174
/*--------  Private (Internal) Functions -------- */
175
176
177
    function SendFormSubmission()
178
    {
179
              $reason = $_POST['reason'];
180
                $option = explode("$", $_POST['reason']);
181
                    $categoryfr = $option[0];
182
                    $categoryen = $option[1]; 
183
184
        $depart = $_POST['depart'];
185
        $reason = $_POST['reason'];
186
                $option = explode("$", $_POST['reason']);
187
                    $french = $option[0];
188
                    $english = $option[1]; 
189
         if(empty($_POST['subject']))
190
           {
191
           $subject = $categoryen." - ".$depart. " - $this->name  / ".$categoryfr." - ".$depart. " - $this->name";
192
           }else{
193
            $subject = "GCconnex - ".$depart. " - $this->name  / GCconnex - ".$depart. " - $this->name";
194
           }
195
        
196
        $this->CollectConditionalReceipients();
197
        $this->mailer->CharSet = 'utf-8';
198
        $this->mailer->Subject = $subject;
199
        $this->mailer->From = elgg_get_plugin_setting('phpmailer_from_email', 'phpmailer');
200
        $this->mailer->FromName = elgg_get_plugin_setting('phpmailer_from_name', 'phpmailer');
201
        $this->mailer->AddCC($this->email);
202
        $message = $this->ComposeFormtoEmail();
203
        $this->mailer->ConfirmReadingTo = $this->email;
204
        $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));
205
        $this->mailer->AltBody = @html_entity_decode($textMsg,ENT_QUOTES,"UTF-8");
206
        $this->mailer->MsgHTML($message);
207
        $this->AttachFiles();
208
209
        if(!$this->mailer->Send())
210
        {
211
            $this->add_error("Failed sending email!");
212
            return false;
213
        }
214
215
        return true;
216
    }
217
218
    function CollectConditionalReceipients()
219
    {
220
        if(count($this->arr_conditional_receipients)>0 &&
221
          !empty($this->conditional_field) &&
222
          !empty($_POST[$this->conditional_field]))
223
        {
224
            foreach($this->arr_conditional_receipients as $condn => $rec)
225
            {
226
                if(strcasecmp($condn,$_POST[$this->conditional_field])==0 &&
227
                !empty($rec))
228
                {
229
                    $this->AddRecipient($rec);
230
                }
231
            }
232
        }
233
    }
234
235
    /*
236
    Internal variables, that you donot want to appear in the email
237
    Add those variables in this array.
238
    */
239
    function IsInternalVariable($varname)
240
    {
241
        $arr_interanl_vars = array('scaptcha',
242
                            'submitted',
243
                            $this->GetSpamTrapInputName(),
244
                            $this->GetFormIDInputName()
245
                            );
246
        if(in_array($varname,$arr_interanl_vars))
247
        {
248
            return true;
249
        }
250
        return false;
251
    }
252
253
    function FormSubmissionToMail()
254
    {
255
        $ret_str='';
256
        
257
                $name = $_POST['name'];
258
                $email = $_POST['email'];
259
                $reason = $_POST['reason'];
260
                $option = explode("$", $_POST['reason']);
261
                    $french = $option[0];
262
                    $english = $option[1]; 
263
                if(empty($_POST['subject']))
264
                {
265
                    $subject = "$this->name has contacted you about ". $english." / $this->name vous a envoyé un message à propos de ".$french;
266
                }else{
267
                    $subject = $_POST['subject'];
268
                }
269
        
270
                $message = $_POST['message'];
271
        
272
        $name=htmlentities($name, ENT_QUOTES, "UTF-8");
273
        $email=htmlentities($email, ENT_QUOTES, "UTF-8");
274
        $reason=htmlentities($reason, ENT_QUOTES, "UTF-8");
275
        $subject=htmlentities($subject, ENT_QUOTES, "UTF-8");
276
        $message=htmlentities($message, ENT_QUOTES, "UTF-8");
277
      
278
                $value = htmlentities($value,ENT_QUOTES,"UTF-8");
279
                $value = nl2br($value);
280
                $key = ucfirst($key);
281
                $ret_str .= '
282
283
<!-- beginning of email template -->
284
  <div width="100%" bgcolor="#fcfcfc">
285
    <div>
286
      <div>
287
288
        <!-- email header -->
289
            <div align="center" width="100%" style="background-color:#f5f5f5; padding:20px 30px 15px 30px; font-family: sans-serif; font-size: 12px; color: #46246A">
290
              Thank you for contacting the GCconnex Help desk. This is a copy of your request.<br/><br/> Merci d\'avoir communiqué avec le bureau de soutien de GCconnex. Ceci est une copie de votre requête.
291
            </div>
292
        
293
294
            <!-- GCcollab banner -->
295
            <div width="100%" style="padding: 0 0 0 10px; color:#ffffff; font-family: sans-serif; font-size: 35px; line-height:38px; font-weight: bold; background-color:#047177;">
296
            <span style="padding: 0 0 0 3px; font-size: 20px; color: #ffffff; font-family: sans-serif;">GCcollab</span>
297
            </div>
298
299
            <!-- email divider -->
300
            <div style="height:1px; background:#bdbdbd; border-bottom:1px solid #ffffff"></div>
301
302
<!-- english -->
303
304
            <!-- main content of the notification (ENGLISH) -->
305
            <!-- *optional* email message (DO NOT REPLY) -->
306
            <div width="100%" style="padding:30px 30px 10px 30px; font-size:12px; line-height:22px; font-family:sans-serif;">
307
308
            <!-- The French Follows... -->
309
            <span style="font-size:12px; font-weight: normal;"><i>(Le fran&ccedil;ais suit)</i></span><br/>  
310
            </div>
311
312
            <div width="100%" style="padding:30px 30px 30px 30px; color:#153643; font-family:sans-serif; font-size:16px; line-height:22px; ">
313
            <!-- TITLE OF CONTENT -->
314
            <h2 style="padding: 0px 0px 15px 0px">
315
            <strong> GCconnex Contact Us Form </strong>
316
            </h2>
317
318
            <!-- BODY OF CONTENT -->
319
            <b>Name:</b> '.$name.'<br/>
320
            <b>Email:</b> '.$email.'<br/>
321
            <b>Reason:</b> '.$english.' <br/>
322
            <b>Subject:</b> '.$subject.'<br/>
323
            <b>Message:</b>'.$message .'<br/>
324
            </div>
325
                
326
            <div style="margin-top:15px; padding: 5px; color: #6d6d6d; border-bottom: 1px solid #ddd;"></div>
327
                
328
<!-- french -->
329
330
            <!-- main content of the notification (FRENCH) -->
331
            <!-- *optional* email message (DO NOT REPLY) -->
332
            <div id="gcc_fr_suit" name="gcc_fr_suit" width="100%" style="padding:30px 30px 10px 30px; font-size:12px; line-height:22px; font-family:sans-serif;"></div>
333
334
            <div width="100%" style="padding:30px 30px 30px 30px; color:#153643; font-family:sans-serif; font-size:16px; line-height:22px;">
335
            <!-- TITLE OF CONTENT -->
336
            <h2 style="padding: 0px 0px 15px 0px">
337
            <strong> Formulaire contactez-nous de GCconnex</strong>
338
            </h2>
339
340
            <!-- BODY OF CONTENT -->
341
            <b>Nom :</b> '.$name.'<br/> 
342
            <b>Courriel :</b> '.$email.'<br/>
343
            <b>Raison :</b> '.$french.'<br/>
344
            <b>Sujet :</b> '.$subject.'<br/>
345
            <b>Message :</b>'.$message.'<br/>
346
            </div>
347
            <div style="margin-top:15px; padding: 5px; color: #6d6d6d;"></div>
348
349
            <!-- email divider -->
350
            <div style="height:1px; background:#bdbdbd; border-bottom:1px solid #ffffff"></div>
351
352
            <!-- email footer -->
353
            <div align="center" width="100%" style="background-color:#f5f5f5; padding:20px 30px 15px 30px; font-family: sans-serif; font-size: 16px; color: #46246A">
354
            Please do not reply to this message | Veuillez ne pas répondre à ce message
355
            </div>
356
357
      </div>
358
    </div>
359
  </div>';
360
361
        foreach($this->fileupload_fields as $upload_field)
362
        {
363
            $field_name = $upload_field["name"];
364
            if(!$this->IsFileUploaded($field_name))
365
            {
366
                continue;
367
            }        
368
            
369
            $filename = basename($_FILES[$field_name]['name']);
370
            $ret_str .= "<div class='label'>File upload '$field_name' :</div><div class='value'>$filename </div>\n";
371
        }
372
        return $ret_str;
373
    }
374
375
    function ExtraInfoToMail()
376
    {
377
        $ret_str='';
378
379
        $ip = $_SERVER['REMOTE_ADDR'];
380
        $ret_str = "<div class='label'>IP address of the submitter:</div><div class='value'>$ip</div>\n";
381
382
        return $ret_str;
383
    }
384
385
    function GetHTMLHeaderPart()
386
    {
387
         $retstr = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'."\n".
388
                   '<html><head><title></title><style type="text/css">
389
  body {margin: 0; padding: 0; min-width: 100%!important;}
390
  img {height: auto;}
391
  .content {width: 100%; max-width: 600px;}
392
  .header {padding: 40px 30px 20px 30px;}
393
  .innerpadding {padding: 30px 30px 30px 30px;}
394
  .borderbottom {border-bottom: 1px solid #f2eeed;}
395
  .subhead {font-size: 15px; color: #ffffff; font-family: sans-serif; }
396
  .h1, .h2, .bodycopy {color: #153643; font-family: sans-serif;}
397
  .h1 {font-size: 33px; line-height: 38px; font-weight: bold;}
398
  .h2 {padding: 0 0 15px 0; font-size: 24px; line-height: 28px; font-weight: bold;}
399
  .bodycopy {font-size: 16px; line-height: 22px;}
400
  .button {text-align: center; font-size: 18px; font-family: sans-serif; font-weight: bold; padding: 0 30px 0 30px;}
401
  .button a {color: #ffffff; text-decoration: none;}
402
  .footer {padding: 20px 30px 15px 30px;}
403
  .footercopy {font-family: sans-serif; font-size: 14px; color: #ffffff;}
404
  .footercopy a {color: #ffffff; text-decoration: underline;}
405
  @media only screen and (max-width: 550px), screen and (max-device-width: 550px) {
406
  body[yahoo] .hide {display: none!important;}
407
  body[yahoo] .buttonwrapper {background-color: transparent!important;}
408
  body[yahoo] .button {padding: 0px!important;}
409
  body[yahoo] .button a {background-color: #e05443; padding: 15px 15px 13px!important;}
410
  body[yahoo] .unsubscribe {display: block; margin-top: 20px; padding: 10px 50px; background: #2f3942; border-radius: 5px; text-decoration: none!important; font-weight: bold;}
411
  }
412
  /*@media only screen and (min-device-width: 601px) {
413
    .content {width: 600px !important;}
414
    .col425 {width: 425px!important;}
415
    .col380 {width: 380px!important;}
416
    }*/
417
  </style>'.
418
  '<meta http-equiv=Content-Type content="text/html; charset=utf-8">';
419
       
420
         $retstr .= '</head><body yahoo bgcolor="#fcfcfc" style="margin: 0; padding: 0; min-width: 100%!important;">';
421
         return $retstr;
422
    }
423
424
    function GetHTMLFooterPart()
425
    {
426
        $retstr ='</body></html>';
427
        return $retstr ;
428
    }
429
430
    function ComposeFormtoEmail()
431
    {
432
        $header = $this->GetHTMLHeaderPart();
433
        $formsubmission = $this->FormSubmissionToMail();
434
        $footer = $this->GetHTMLFooterPart();
435
        $message = $header."<p>$formsubmission</p><hr/>$extra_info".$footer;
436
437
        return $message;
438
    }
439
440
    function AttachFiles()
441
    {
442
        foreach($this->fileupload_fields as $upld_field)
443
        {
444
            $field_name = $upld_field["name"];
445
            if(!$this->IsFileUploaded($field_name))
446
            {
447
                continue;
448
            }
449
            
450
            $filename =basename($_FILES[$field_name]['name']);
451
            $this->mailer->AddAttachment($_FILES[$field_name]["tmp_name"],$filename);
452
        }
453
    }
454
455
    function GetFromAddress()
456
    {
457
        if(!empty($this->from_address))
458
        {
459
            return $this->from_address;
460
        }
461
462
        $host = $_SERVER['SERVER_NAME'];
463
        $from ="nobody@$host";
464
        return $from;
465
    }
466
467
    function Validate()
468
    {
469
        $ret = true;
470
        $numErr=0;
471
        //security validations
472
        if(empty($_POST[$this->GetFormIDInputName()]) ||
473
          $_POST[$this->GetFormIDInputName()] != $this->GetFormIDInputValue() )
474
        {
475
            $numErr=$numErr+1;
476
            //The proper error is not given intentionally
477
            $this->add_error();
478
            register_error("Automated submission prevention: case 1 failed");
479
            $ret = false;
480
        }
481
482
        //This is a hidden input field. Humans won't fill this field.
483
        if(!empty($_POST[$this->GetSpamTrapInputName()]) )
484
        {
485
            $numErr=$numErr+1;
486
            //The proper error is not given intentionally
487
            $this->add_error();
488
            register_error("Automated submission prevention: case 2 failed");
489
            $ret = false;
490
        }
491
492
        //select validations
493
        if((($_POST['reason']) =='Select...') || (($_POST['reason']) == "Choisir..."))
494
        {
495
            $numErr=$numErr+1;
496
            $this->add_error();
497
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errreason')));
498
            $ret = false;
499
        }
500
501
        if ($_POST['reason'] == 'Autres$Other')
502
        {
503
            if (empty($_POST['subject']))
504
            {
505
                $numErr=$numErr+1;
506
                $this->add_error();
507
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errsubject')));
508
                $ret = false;
509
            }
510
        }
511
512
        //name validations
513
        if(empty($_POST['name']))
514
        {
515
            $numErr=$numErr+1;
516
            $this->add_error();
517
            //'contactform:Errname'
518
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errname')));
519
            $ret = false;
520
        }
521
        else
522
            if(strlen($_POST['name'])>75)
523
            {
524
                $numErr=$numErr+1;
525
                $this->add_error();
526
                //'contactform:Errnamebig'
527
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errnamebig')));
528
                $ret = false;
529
            }
530
531
        //email validations
532
        if(empty($_POST['email']))
533
        {
534
            $numErr=$numErr+1;
535
            $this->add_error();
536
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Erremail')));
537
            $ret = false;
538
        }
539
        else
540
            if(strlen($_POST['email'])>100)
541
            {
542
                $numErr=$numErr+1;
543
                $this->add_error();
544
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Erremailbig')));
545
                $ret = false;
546
            }
547
            else
548
                if(!$this->validate_email($_POST['email']))
549
                {
550
                    $numErr=$numErr+1;
551
                    $this->add_error();
552
                    //'contactform:Erremailvalid'
553
                    register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Erremailvalid')));
554
                    $ret = false;
555
                }
556
557
        //department validaions
558
        if(empty($_POST['depart']))
559
        {
560
            $numErr=$numErr+1;
561
            $this->add_error();
562
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errdepart')));
563
            $ret = false;
564
        }
565
        else
566
            if(strlen($_POST['depart'])>255)
567
            {
568
                $numErr=$numErr+1;
569
                $this->add_error();
570
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errdepartbig')));
571
                $ret = false;
572
            }
573
574
        //message validaions
575
        if(empty($_POST['message']))
576
        {
577
            $numErr=$numErr+1;
578
            $this->add_error();
579
            register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errmess')));
580
            $ret = false;
581
        }
582
        else
583
            if(strlen($_POST['message'])>2048)
584
            {
585
                $numErr=$numErr+1;
586
                $this->add_error();
587
                register_error(str_replace('[#]',$numErr,elgg_echo('contactform:Errmessbig')));
588
                $ret = false;
589
            }
590
591
        //file upload validations
592
        if(!empty($this->fileupload_fields))
593
        {
594
            $numErr=$numErr+1;
595
            if(!$this->ValidateFileUploads($numErr))
596
            {
597
                $ret = false;
598
            }
599
        }
600
        return $ret;
601
    }
602
603
    function ValidateFileType($field_name,$valid_filetypes)
604
    {
605
        $ret=true;
606
        $info = pathinfo($_FILES[$field_name]['name']);
607
        $extn = $info['extension'];
608
        $extn = strtolower($extn);
609
610
        $arr_valid_filetypes= explode(',',$valid_filetypes);
611
        if(!in_array($extn,$arr_valid_filetypes))
612
        {
613
            $this->add_error();
614
            register_error("Valid file types are: $valid_filetypes");
615
            $ret=false;
616
        }
617
        return $ret;
618
    }
619
620
    function ValidateFileSize($field_name,$max_size)
621
    {
622
        $size_of_uploaded_file = $_FILES[$field_name]["size"]/1024;//size in KBs
623
        if($size_of_uploaded_file > $max_size)
624
        {
625
            $this->add_error();
626
            register_error("The file is too big. File size should be less than $max_size KB");
627
            return false;
628
        }
629
        return true;
630
    }
631
632
    function IsFileUploaded($field_name)
633
    {
634
        if(empty($_FILES[$field_name]['name']))
635
        {
636
            return false;
637
        }
638
        if(!is_uploaded_file($_FILES[$field_name]['tmp_name']))
639
        {
640
            return false;
641
        }
642
        return true;
643
    }
644
    function ValidateFileUploads()
645
    {
646
        $ret=true;
647
        foreach($this->fileupload_fields as $upld_field)
648
        {
649
            $field_name = $upld_field["name"];
650
651
            $valid_filetypes = $upld_field["file_types"];
652
            
653
            if(!$this->IsFileUploaded($field_name))
654
            {
655
                continue;
656
            }
657
658
            if($_FILES[$field_name]["error"] != 0)
659
            {
660
                $this->add_error("Error in file upload; Error code:".$_FILES[$field_name]["error"]);
661
                $ret=false;
662
            }
663
664
            if(!empty($valid_filetypes) &&
665
             !$this->ValidateFileType($field_name,$valid_filetypes))
666
            {
667
                $ret=false;
668
            }
669
670
            if(!empty($upld_field["maxsize"]) &&
671
            $upld_field["maxsize"]>0)
672
            {
673
                if(!$this->ValidateFileSize($field_name,$upld_field["maxsize"]))
674
                {
675
                    $ret=false;
676
                }
677
            }
678
        }
679
        return $ret;
680
    }
681
682
    function StripSlashes($str)
683
    {
684
        if(get_magic_quotes_gpc())
685
        {
686
            $str = stripslashes($str);
687
        }
688
        return $str;
689
    }
690
    /*
691
    Sanitize() function removes any potential threat from the
692
    data submitted. Prevents email injections or any other hacker attempts.
693
    if $remove_nl is true, newline chracters are removed from the input.
694
    */
695
    function Sanitize($str,$remove_nl=true)
696
    {
697
        $str = $this->StripSlashes($str);
698
699
        if($remove_nl)
700
        {
701
            $injections = array('/(\n+)/i',
702
                '/(\r+)/i',
703
                '/(\t+)/i',
704
                '/(%0A+)/i',
705
                '/(%0D+)/i',
706
                '/(%08+)/i',
707
                '/(%09+)/i'
708
                );
709
            $str = preg_replace($injections,'',$str);
710
        }
711
712
        return $str;
713
    }
714
715
    /*Collects clean data from the $_POST array and keeps in internal variables.*/
716
    function CollectData()
717
    {
718
        $this->name = $this->Sanitize($_POST['name']);
719
        $this->email = $this->Sanitize($_POST['email']);
720
721
        /*newline is OK in the message.*/
722
        $this->message = $this->StripSlashes($_POST['message']);
723
    }
724
725
    function add_error($error)
726
    {
727
        array_push($this->errors,$error);
728
    }
729
    function validate_email($email)
730
    {
731
        return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email);
732
    }
733
734
    function GetKey()
735
    {
736
        return $this->form_random_key.$_SERVER['SERVER_NAME'].$_SERVER['REMOTE_ADDR'];
737
    }
738
739
}
740
741
?>