mirror of
https://github.com/shadoll/sLetter.git
synced 2025-12-20 03:27:00 +00:00
first commit
This commit is contained in:
20
composer.json
Normal file
20
composer.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"name": "shadoll/sLetter",
|
||||||
|
"description": "shadoll sLetter - main send library",
|
||||||
|
"version": "dev-master",
|
||||||
|
"require": {
|
||||||
|
"php": "^7.0",
|
||||||
|
"mailgun/mailgun-php": "^2.4"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"shadoll\\sLetter": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "sHa",
|
||||||
|
"email": "sha@shadoll.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
22
lng/en.php
Normal file
22
lng/en.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author sHa <sha@shadoll.com>
|
||||||
|
* @package sLetter
|
||||||
|
* @version 18.2.12
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [
|
||||||
|
'subject' => '📨 Letter from site',
|
||||||
|
'name' => 'From',
|
||||||
|
'phone' => 'Phone',
|
||||||
|
'email' => 'Email',
|
||||||
|
'referer' => 'Referer',
|
||||||
|
'senderIP' => 'Sender IP',
|
||||||
|
'flag' => 'Flag',
|
||||||
|
'country' => 'Country',
|
||||||
|
'region' => 'Region',
|
||||||
|
'city' => 'City',
|
||||||
|
'provider' => 'Internet Provider',
|
||||||
|
];
|
||||||
22
lng/ru.php
Normal file
22
lng/ru.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author sHa <sha@shadoll.com>
|
||||||
|
* @package sLetter
|
||||||
|
* @version 18.2.12
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [
|
||||||
|
'subject' => '📨 Сообщение с сайта',
|
||||||
|
'name' => 'От кого',
|
||||||
|
'phone' => 'Телефон',
|
||||||
|
'email' => 'Email',
|
||||||
|
'referer' => 'Реферал',
|
||||||
|
'senderIP' => 'IP-адрес отправителя',
|
||||||
|
'flag' => 'Флаг',
|
||||||
|
'country' => 'Страна',
|
||||||
|
'region' => 'Регион',
|
||||||
|
'city' => 'Населенный пункт',
|
||||||
|
'provider' => 'Провайдер',
|
||||||
|
];
|
||||||
22
lng/ua.php
Normal file
22
lng/ua.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author sHa <sha@shadoll.com>
|
||||||
|
* @package sLetter
|
||||||
|
* @version 18.2.12
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [
|
||||||
|
'subject' => '📨 Повідомлення з сайту',
|
||||||
|
'name' => 'Від кого',
|
||||||
|
'phone' => 'Телефон',
|
||||||
|
'email' => 'Email',
|
||||||
|
'referer' => 'Реферал',
|
||||||
|
'senderIP' => 'IP-адреса відправника',
|
||||||
|
'flag' => 'Прапор',
|
||||||
|
'country' => 'Країна',
|
||||||
|
'region' => 'Регіон',
|
||||||
|
'city' => 'Населенний пункт',
|
||||||
|
'provider' => 'Провайдер',
|
||||||
|
];
|
||||||
190
sLetter.php
Normal file
190
sLetter.php
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author sHa <sha@shadoll.com>
|
||||||
|
* @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 .= "<html><body style='font-family:Arial,sans-serif;'>";
|
||||||
|
|
||||||
|
if(!empty($this->logoUri))
|
||||||
|
$this->message .= "<img src='".$this->logoUri."' alt='logo' style='max-height:150px;'>";
|
||||||
|
|
||||||
|
$this->message .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>".$this->subject."</h2>\r\n";
|
||||||
|
|
||||||
|
foreach($this->fields as $name=>$val){
|
||||||
|
if(!empty($val)){
|
||||||
|
$this->message .= "<p><strong>".(array_key_exists($name,$this->lang)?$this->lang[$name]:$name).":</strong> ".$val."</p>\r\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->message .= "</body></html>";
|
||||||
|
|
||||||
|
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' => "<img style='height:14px; width:auto' src='http://www.geognos.com/api/en/countries/flag/".$query['countryCode'].".png'>",
|
||||||
|
'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'=>'']);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user