mail = $mailer;
$this->ctrl = $ctrl;
$this->config = $config;
$this->db = $db;
$this->smsAuth = null;
$this->mail->SMTPDebug = $SMTPDebug;
$this->mail->isSMTP();
//$mail->mail->CharSet = 'UTF-8';
$this->mail->Host = $this->config['settings']['smtp']['host'];
$this->mail->SMTPAuth = true;
$this->mail->Username = $this->config['settings']['smtp']['username'];
$this->mail->Password = $this->config['settings']['smtp']['password'];
$this->mail->SMTPSecure = $this->config['settings']['smtp']['secure'];
$this->mail->Port = $this->config['settings']['smtp']['port'];
$this->mail->isHTML(true);
$this->fromAddress = $this->config['settings']['smtp']['from-address'];
$this->fromName = $this->config['settings']['smtp']['from-name'];
}
public function sendEmail($to='', $subject='', $body='', $mailID='', $from=[], $attachs=[]) {
$fromName = $this->fromName;
$fromAddress = $this->fromAddress;
if (!empty($from)) {
if (isset($from['fromAddress']) && isset($from['fromName'])) {
$fromName = $from['fromName'];
$fromAddress = $from['fromAddress'];
}
}
$this->mail->setFrom($fromAddress, $fromName);
$this->mail->addAddress($to);
if (is_array($attachs) && !empty($attachs)) {
foreach($attachs as $attach) {
$this->mail->addAttachment($attach['path'], $attach['name']);
}
}
$this->mail->Subject = $subject;
$this->mail->Body = $body;
$this->mail->AltBody = $this->setHtmlToPlainText($body);
$mailResult = 0;
$mailErrorInfo = '';
if ($this->mail->send()) {
$mailResult = 1;
} else {
$mailErrorInfo = $this->mail->ErrorInfo;
}
$this->logEmail($mailID, $fromAddress, $to, $subject, $body, $mailResult, $mailErrorInfo);
$this->mail->clearAddresses();
$this->mail->clearAttachments();
}
public function loginSMS() {
$endpoint = $this->config['settings']['skebby']['endpoint'];
$username = $this->config['settings']['skebby']['username'];
$password = $this->config['settings']['skebby']['password'];
$sender = $this->config['settings']['skebby']['sender'];
$this->skebby = new Skebby($username, $password, $endpoint, $sender);
$this->smsAuth = $this->skebby->login();
return $this->smsAuth;
}
public function sendSMS($message, $recipients=[]) {
$result = $this->skebby->sendSMS($message, $recipients);
$this->logSMS($message, $recipients, $result);
}
public function receiveSMS($idSim='', $limit=100, $auth=[]) {
$result = $this->skebby->receiveSMS($idSim, $limit, $auth);
return $result;
}
public function setNotificationAsSent($queueId=0) {
return $this->db->where('id', $queueId)->update('requests_messages_queue', ['sent_status'=>1, 'sent_at'=>date('Y-m-d H:i:s')]);
}
public function setSurveyNotificationAsSent($queueId=0) {
return $this->db->where('id', $queueId)->update('survey_queue', ['msg_sent'=>1, 'msg_sent_date'=>date('Y-m-d H:i:s')]);
}
private function setHtmlToPlainText($html='') {
$breaks = array("
","
","
");
$html = str_ireplace($breaks, "\r\n", $html);
return strip_tags($html);
}
private function logSMS($msg='', $recipients=[], $result=[]) {
$id = uniqid();
$user = [];
if (empty($recipients)) {
return false;
} else {
$recipients = !is_array($recipients) ? [$recipients] : $recipients;
foreach($recipients as $recipient) {
$number = str_replace('+', '', $recipient);
$user = $this->db->where('mobile_number', $number)->getOne('users', 'id');
$this->db->insert('log_notifications', [
'id' => $id,
'user_id' => isset($user['id']) ? $user['id'] : -1,
'notif_type' => 'sms',
'phone_to' => $recipient,
'phone_msg' => $msg,
'request_result' => isset($result['result']) && $result['result'] == 'OK' ? 1 : 0,
'request_error_info' => isset($result['result']) && $result['result'] == 'ERR' ? json_encode($result) : null,
'created_at' => date('Y-m-d H:i:s')
]);
}
}
return $id;
}
private function logEmail($mailId='', $from='', $to='', $subject='', $body='', $result=0, $errorInfo='') {
$user = $this->db->where('email', trim($to))->getOne('users', 'id');
$this->db->insert('log_notifications', [
'id' => $mailId,
'user_id' => isset($user['id']) ? $user['id'] : -1,
'notif_type' => 'email',
'mail_from' => $from,
'mail_to' => $to,
'mail_subject' => $subject,
'mail_body' => $body,
'request_result' => $result,
'request_error_info' => $errorInfo,
'created_at' => date('Y-m-d H:i:s')
]);
return $mailId;
}
}