Autoría | Ultima modificación | Ver Log |
<?php
/**
* Cocoon Form Builder integration for Moodle
*
* @package cocoon_form_builder
* @copyright ©2021 Cocoon, XTRA Enterprises Ltd. createdbycocoon.com
* @author Cocoon
*/
require(__DIR__.'/../../config.php');
require(__DIR__.'/../../blocks/cocoon_form/phpmailer/class.custommailer.php');
defined('MOODLE_INTERNAL') || die();
global $DB;
$_RESTREQUEST = file_get_contents("php://input");
$_POST = json_decode($_RESTREQUEST, true);
if (isset($_POST["id"])) {
$sql = "SELECT * FROM mdl_cocoon_form_builder_forms WHERE id = " . intval($_POST["id"]) ;
$form = $DB->get_records_sql($sql);
$json = json_decode($form[$_POST["id"]]->json);
$emails = explode(";",$form[$_POST["id"]]->recipients);
$confirmMessage = ($form[$_POST["id"]]->confirm_message) ? $form[$_POST["id"]]->confirm_message : "Thank you! Your message has been sent!";
$autoRepEmails = [];
$autoRepData = json_decode($form[$_POST["id"]]->data);
$data = explode('&', $_POST["data"]);
$obj = new stdClass();
foreach ($data as $key => $value) {
$item = explode('=', $value);
if(property_exists($obj, $item[0])) {
$obj->{$item[0]} = $obj->{$item[0]} . ", " . $item[1];
} else {
$obj->{$item[0]} = $item[1];
}
}
// echo '<pre>';
// var_dump($obj);
// echo '</pre>';
$htmlmessage = "Content: " . "<br />";
$fileUpload = $fileExtension = [];
foreach ($json as $key => $value) {
if($value->type == "text" ||
$value->type == "textarea" ||
$value->type == "autocomplete" ||
$value->type == "date" ||
$value->type == "number" ||
$value->type == "radio-group" ||
$value->type == "select") {
if (isset($obj->{$value->name})) {
$htmlmessage .= $value->label . ": " . processData($obj->{$value->name}) . "<br />";
if(checkemail(urldecode($obj->{$value->name}))) {
array_push($autoRepEmails, urldecode($obj->{$value->name}));
}
}
}
if($value->type == "checkbox-group" || $value->type == "checkbox") {
$machine_name = $value->name . '%5B%5D';
if (isset($obj->{$machine_name})) {
$htmlmessage .= $value->label . ": ";
$htmlmessage .= $obj->{$machine_name};
$htmlmessage .= "<br />";
}
}
$allowedfileExtensions = array("image/png", "image/jpeg", "image/bmp", "image/vnd.microsoft.icon", "application/pdf", "application/msword",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"text/csv", "application/zip");
if($value->type == "file") {
if (isset($_POST["file"]) && count($_POST["file"]) > 0) {
foreach ($_POST["file"] as $key => $item) {
$image_parts = explode(";base64,", $item[$value->name]);
if(count($image_parts) > 1) {
$file_type = trim(explode(":", $image_parts[0])[1]);
if (in_array($file_type, $allowedfileExtensions)) {
$base = $item[$value->name];
array_push($fileUpload, base64_decode(str_replace(" ", "+", substr($base, strpos($base, ",")))));
if($file_type == "image/png") {
array_push($fileExtension, "png");
} elseif ($file_type == "image/jpeg") {
array_push($fileExtension, "jpg");
} elseif ($file_type == "image/bmp") {
array_push($fileExtension, "bmp");
} elseif ($file_type == "image/vnd.microsoft.icon") {
array_push($fileExtension, "ico");
} elseif ($file_type == "application/pdf") {
array_push($fileExtension, "pdf");
} elseif ($file_type == "application/msword") {
array_push($fileExtension, "doc");
} elseif ($file_type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
array_push($fileExtension, "docx");
} elseif ($file_type == "application/vnd.ms-excel") {
array_push($fileExtension, "xls");
} elseif ($file_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
array_push($fileExtension, "xlsx");
} elseif ($file_type == "application/vnd.ms-powerpoint") {
array_push($fileExtension, "ppt");
} elseif ($file_type == "application/vnd.openxmlformats-officedocument.presentationml.presentation") {
array_push($fileExtension, "pptx");
} elseif ($file_type == "text/csv") {
array_push($fileExtension, "csv");
} elseif ($file_type == "application/zip") {
array_push($fileExtension, "zip");
}
}
}
}
}
}
}
$htmlmessage = urldecode($htmlmessage);
$from = makeemailuser('email@domain.com', 'Moodle Admin', 2);
$subject = "Email Notification";
foreach ($emails as $key => $value) {
if(checkemail($value)) {
//$mail->AddAddress($value); // set recipient email address
$to = makeemailuser($value, $value);
$mail = new CustomMailer();
$status = $mail->email_to_user_custom(true, $to, $from, $subject, html_to_text($htmlmessage), $htmlmessage, $fileUpload, $fileName, $fileExtension, true);
}
}
//Send autoreply emails
$fileUpload = $fileExtension = [];
foreach ($autoRepEmails as $key => $value) {
$value = makeemailuser($value);
foreach ($autoRepData->attachments as $k => $file) {
$image_parts = explode(";base64,", $file);
if(count($image_parts) > 1) {
$file_type = trim(explode(":", $image_parts[0])[1]);
if (in_array($file_type, $allowedfileExtensions)) {
$base = $file;
array_push($fileUpload, base64_decode(str_replace(" ", "+", substr($base, strpos($base, ",")))));
if($file_type == "image/png") {
array_push($fileExtension, "png");
} elseif ($file_type == "image/jpeg") {
array_push($fileExtension, "jpg");
} elseif ($file_type == "image/bmp") {
array_push($fileExtension, "bmp");
} elseif ($file_type == "image/vnd.microsoft.icon") {
array_push($fileExtension, "ico");
} elseif ($file_type == "application/pdf") {
array_push($fileExtension, "pdf");
} elseif ($file_type == "application/msword") {
array_push($fileExtension, "doc");
} elseif ($file_type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
array_push($fileExtension, "docx");
} elseif ($file_type == "application/vnd.ms-excel") {
array_push($fileExtension, "xls");
} elseif ($file_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
array_push($fileExtension, "xlsx");
} elseif ($file_type == "application/vnd.ms-powerpoint") {
array_push($fileExtension, "ppt");
} elseif ($file_type == "application/vnd.openxmlformats-officedocument.presentationml.presentation") {
array_push($fileExtension, "pptx");
} elseif ($file_type == "text/csv") {
array_push($fileExtension, "csv");
} elseif ($file_type == "application/zip") {
array_push($fileExtension, "zip");
}
}
}
}
$replyMail = new CustomMailer();
$replyMail->email_to_user_custom(true, $value, $from, $subject, html_to_text($autoRepData->message), $autoRepData->message, $fileUpload, '', $fileExtension, true);
}
if($status) {
echo '<div class="alert alert-success alert-dismissible fade show" role="alert">
'. $confirmMessage .'
</div>';
} else {
echo '<div class="alert alert-danger alert-dismissible fade show" role="alert">
Sorry! Your message cannot been sent. Please contact administrator!
</div>';
}
}
function processData($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
function makeemailuser($email, $name = '', $id = -99) {
$emailuser = new stdClass();
$emailuser->email = $email;
$emailuser->firstname = format_text($name, FORMAT_PLAIN, array('trusted' => false));
$emailuser->lastname = '';
$emailuser->maildisplay = true;
$emailuser->mailformat = 1; // 0 (zero) text-only emails, 1 (one) for HTML emails.
$emailuser->id = $id;
$emailuser->firstnamephonetic = '';
$emailuser->lastnamephonetic = '';
$emailuser->middlename = '';
$emailuser->alternatename = '';
return $emailuser;
}
function checkemail($str) {
return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
}