* @package shadoll/sLetter * @version 18.2.12 * */ namespace shadoll; use Mailgun\Mailgun; class sLetter{ public $error = false; public $status = ""; private $sender = "mail"; private $header = ""; private $message = ""; private $subject = ""; private $language = "ua"; private $lang = []; private $fromMail = ""; private $fromName = ""; private $toMail = ""; private $senderIP = null; public $fields = null; private $logoUri = ""; function __construct(){ $this->setLang(require_once(__DIR__."/lng/".$this->language.".php")); } function setData($data,$return=false){ if(empty($data) || !is_array($data)) return $return?$this->fields:$this; if(is_null($this->fields)) $this->fields = []; foreach($data as $key=>$val) if(!empty($val)) $this->fields[$key] = is_string($val)?trim(stripslashes($val)):$val; return $return?$this->fields:$this; } function setLang($data,$return=false){ if(empty($data) || !is_array($data)) return $return?$this->lang:$this; if(is_null($this->lang)) $this->lang = []; foreach($data as $key=>$val) if(!empty($val)) $this->lang[$key] = is_string($val)?trim(stripslashes($val)):$val; return $return?$this->lang:$this; } function set($data){ if(!empty($data) && is_array($data)) foreach($data as $key=>$val) if(!empty($key) && !empty($val)) $this->{$key} = is_string($val)?trim(stripslashes($val)):$val; return $this; } function get($val){ if(property_exists($this,$val)) return $this->{$val}; return null; } function header($return=false){ $this->header .= "From:".(!empty($this->fromName)?($this->fromName."<".strip_tags($this->fromMail).">"):strip_tags($this->fromMail))."\r\n"; $this->header .= "Reply-To: ".strip_tags($this->fromMail)."\r\n"; $this->header .= "MIME-Version: 1.0\r\n"; $this->header .= "Content-Type: text/html;charset=utf-8 \r\n"; return $return?$this->header:$this; } function message($return=false){ $this->message .= ""; if(!empty($this->logoUri)) $this->message .= "logo"; $this->message .= "

".$this->subject."

\r\n"; foreach($this->fields as $name=>$val){ if(!empty($val)){ $this->message .= "

".(array_key_exists($name,$this->lang)?$this->lang[$name]:$name).": ".$val."

\r\n"; } } $this->message .= ""; return $return?$this->message:$this; } function detect($return=false){ if(!empty($this->senderIP)){ $query = @unserialize(file_get_contents('http://ip-api.com/php/'.$this->senderIP)); if($query && $query['status'] == 'success'){ $this->setData([ 'senderIP' => $this->senderIP, 'flag' => "", 'country' => $query['country'], 'region' => $query['regionName'], 'city' => $query['city'], 'provider' => $query['isp'], ]); } } return $return?$this->fields:$this; } function validate($data,$return=false){ if(!empty($data) && is_array($data)) foreach($data as $val) if(empty($val)){ $this->error = true; $this->status = "Empty value"; } return $return?$this->error:$this; } function subject($return=false){ if(empty($this->subject)) $this->subject = (array_key_exists("subject",$this->lang)?$this->lang["subject"]:"Message from")." ".$_SERVER['SERVER_NAME']; return $return?$this->subject:$this; } function sendMail($return=false){ $this->header(); $status = @mail($this->toMail, $this->subject(true), $this->message, $this->header); return $return?$status:$this; } function sendMailgun($return=false){ $mg = new Mailgun($this->mailgun_apikey); $status = $mg->sendMessage($this->mailgun_domain, array( 'from' => !empty($this->fromName)?($this->fromName."<".strip_tags($this->fromMail).">"):strip_tags($this->fromMail), 'to' => $this->toMail, 'subject' => $this->subject(true), 'html' => $this->message, )); return $return?$status:$this; } function send($return=false){ if($this->error===false){ if(empty($this->message)) $this->message(); if(!empty($this->sender)){ $method = "send".ucfirst($this->sender); if(method_exists($this,$method)) $status = $this->{$method}(true); } } else $status = ""; return $return?$status:$this; } function state(){ echo json_encode(['success'=>!$this->error,'message'=>$this->status,'answer'=>'']); } }