| @@ 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ç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 | ?> |
|
| @@ 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ç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 | ?> |
|