Add php files
This commit is contained in:
373
include/ECM/EcmNotifications/EcmNotification.php
Executable file
373
include/ECM/EcmNotifications/EcmNotification.php
Executable file
@@ -0,0 +1,373 @@
|
||||
<?php
|
||||
require 'include/ECM/EcmNotifications/WebsocketClient.php';
|
||||
|
||||
class EcmNotification extends WebsocketClient{
|
||||
|
||||
public $db;
|
||||
public $ask;
|
||||
public $res;
|
||||
public $return_list;
|
||||
public $return_position;
|
||||
public $user_id;
|
||||
public $date_now;
|
||||
public $email;
|
||||
public $first_name;
|
||||
public $last_name;
|
||||
public $message_content;
|
||||
public $site_url;
|
||||
public $phoneNumber;
|
||||
public $dataBase;
|
||||
public $params_sms;
|
||||
private $smsLogin='SAAS';
|
||||
private $smsPw='b9cbf79b64be7ad146587d1804daa2eb';
|
||||
|
||||
function __construct($user_id) {
|
||||
global $sugar_config;
|
||||
require_once('modules/EcmSysInfos/EcmSysInfo.php');
|
||||
$EcmSysInfo = new EcmSysInfo();
|
||||
$this->dataBase=$EcmSysInfo->getDatabaseName();
|
||||
$this->assignVariables($user_id);
|
||||
|
||||
if($sugar_config['ruby_notification']==true && $sugar_config['ruby_server_ip']!='' && $sugar_config['ruby_server_port']!=''){
|
||||
parent::__construct($sugar_config['ruby_server_ip'],$sugar_config['ruby_server_port']);
|
||||
}
|
||||
}
|
||||
|
||||
function setSmsText($text){
|
||||
$this->params_sms['message']=$text;
|
||||
}
|
||||
function setSmsNumber($number){
|
||||
$this->params_sms['to']=$number;
|
||||
}
|
||||
function assignVariables($user_id){
|
||||
global $sugar_config;
|
||||
$this->db=$GLOBALS['superGlobalDb'];
|
||||
$this->user_id=$user_id;
|
||||
$this->site_url=$sugar_config['site_url'];
|
||||
if($this->dataBase=='preDb_60b08fe051546309b61d2714d4a0438d'){
|
||||
$this->params_sms = array(
|
||||
'username' => $this->smsLogin,
|
||||
'password' => $this->smsPw,
|
||||
'encoding'=>'utf-8',
|
||||
'to' => '',
|
||||
'from' => 'MAT INSTAL',
|
||||
'eco' => 0,
|
||||
'message' => "",
|
||||
|
||||
);
|
||||
} else {
|
||||
$this->params_sms = array(
|
||||
'username' => $this->smsLogin,
|
||||
'password' => $this->smsPw,
|
||||
'encoding'=>'utf-8',
|
||||
'to' => '',
|
||||
'from' => 'SMSAPI',
|
||||
'eco' => 0,
|
||||
'message' => "",
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** Ustawia status przypomnienia:
|
||||
* statusy:
|
||||
* 0 - niewysłany
|
||||
* 1 - wysłany
|
||||
* 2 - dostarczony & zobaczony
|
||||
*/
|
||||
function setNotificationFlag($id,$flag){
|
||||
if($flag==2){
|
||||
$b=$this->db->query("select notification_send from tasks where id='".$id."'");
|
||||
$r=$this->db->fetchByAssoc($b);
|
||||
if($r['notification_send']==0) return true;
|
||||
}
|
||||
$back=$this->db->query("update tasks set notification_send='".$flag."' where id='".$id."'");
|
||||
if($back!=false){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function setNotificationFlag2($id,$flag){
|
||||
if($flag==2){
|
||||
$b=$this->db->query("select notification_send from calls where id='".$id."'");
|
||||
$r=$this->db->fetchByAssoc($b);
|
||||
if($r['notification_send']==0) return true;
|
||||
}
|
||||
$back=$this->db->query("update calls set notification_send='".$flag."' where id='".$id."'");
|
||||
if($back!=false){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function calculateNewTime($flag){
|
||||
$date = new DateTime();
|
||||
|
||||
switch ($flag) {
|
||||
case '1':
|
||||
$date->modify('+5 minutes');
|
||||
break;
|
||||
case '2':
|
||||
$date->modify('+10 minutes');
|
||||
break;
|
||||
case '3':
|
||||
$date->modify('+15 minutes');
|
||||
break;
|
||||
case '4':
|
||||
$date->modify('+60 minutes');
|
||||
break;
|
||||
case '5':
|
||||
$date->modify('+120 minutes');
|
||||
break;
|
||||
case '6':
|
||||
$date->modify('+180 minutes');
|
||||
break;
|
||||
case '7':
|
||||
$date->modify('+1 day');
|
||||
break;
|
||||
case '8':
|
||||
$date->modify('+2 day');
|
||||
break;
|
||||
case '9':
|
||||
$date->modify('+3 day');
|
||||
break;
|
||||
}
|
||||
$date->modify('-2 hour');
|
||||
$this->date_now=$date->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
function setNotificationDate($id,$flag){
|
||||
$this->calculateNewTime($flag);
|
||||
$back=$this->db->query("update tasks set notification_send='0', date_reminder='".$this->date_now."' where id='".$id."'");
|
||||
if($back!=false){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function sendNotification(){
|
||||
|
||||
// if($this->sendData(json_encode($this->res, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE))!=''){
|
||||
|
||||
$this->setNotificationFlag($this->res['id'],'1');
|
||||
$this->changeDate($this->res);
|
||||
|
||||
if($this->getUserData()!='' && ($this->res['reminder_type']=='2' || $this->res['reminder_type']=='3')){
|
||||
$arr=explode(',',$this->res['emails']);
|
||||
foreach ($arr as $email){
|
||||
if($email!=''){
|
||||
$this->sendEmail($this->res['id'],$email);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if($this->res['reminder_type']=='1' || $this->res['reminder_type']=='3' || $this->res['reminder_type']=='7'){
|
||||
$arr=explode(',',$this->res['telephones']);
|
||||
foreach ($arr as $email){
|
||||
if($email!=''){
|
||||
$this->setSmsNumber($email);
|
||||
if($this->dataBase=='preDb_60b08fe051546309b61d2714d4a0438d'){
|
||||
$this->setSmsText($this->res['description']);
|
||||
} else {
|
||||
$this->setSmsText('Przypomnienie: '.$this->res['description']);
|
||||
}
|
||||
if($this->dataBase=='preDb_60b08fe051546309b61d2714d4a0438d'){
|
||||
echo "wysyłam sms!!!";
|
||||
$this->sms_send($this->params_sms);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
function getUserData(){
|
||||
$u= new User();
|
||||
$u->retrieve($this->res['assigned_user_id']);
|
||||
$email=$u->email1;
|
||||
$this->email=$email;
|
||||
$this->first_name=$u->first_name;
|
||||
$this->last_name=$u->last_name;
|
||||
$this->phoneNumber=$u->phone_other;
|
||||
unset($u);
|
||||
return $email;
|
||||
}
|
||||
|
||||
function messegeContent(){
|
||||
if($this->res['record_id']!=''){
|
||||
$module= $this->res['record_type'];
|
||||
} else {
|
||||
$module="Tasks";
|
||||
}
|
||||
if($this->res['record_id']!=''){
|
||||
$id= $this->res['record_id'];
|
||||
} else {
|
||||
$id=$this->res['id'];
|
||||
}
|
||||
$this->message_content="Witaj ".$this->first_name.' '.$this->last_name.'!
|
||||
<br>Masz nowe przypomnienie odnośnie: '.$this->res['name'].'.<br>Więcej szczegółów pod adresem: '.$this->site_url.'/index.php?module='.$module.'&action=DetailView&record='.$id;
|
||||
}
|
||||
function messegeContent2(){
|
||||
if($this->res['record_id']!=''){
|
||||
$module= $this->res['record_type'];
|
||||
} else {
|
||||
$module="Calls";
|
||||
}
|
||||
if($this->res['record_id']!=''){
|
||||
$id= $this->res['record_id'];
|
||||
} else {
|
||||
$id=$this->res['id'];
|
||||
}
|
||||
$this->message_content="Witaj ".$this->first_name.' '.$this->last_name.'!
|
||||
<br>Masz nowe przypomnienie odnośnie: '.$this->res['name'].'.<br>Więcej szczegółów pod adresem: '.$this->site_url.'/index.php?module='.$module.'&action=DetailView&record='.$id;
|
||||
}
|
||||
function sendEmail($id,$email){
|
||||
require_once 'include/ECM/EcmSendPdfButton/EcmSendPdfButton.inc';
|
||||
$t = new EcmSendPdfButton('Tasks', $this->res['id'],$email,'');
|
||||
$t2 = new Task();
|
||||
$t2->retrieve($id);
|
||||
if($t2->contact_id!=''){
|
||||
$c = new Contact();
|
||||
$c->retrieve($t2->contact_id);
|
||||
$t->setAdress($c->email1);
|
||||
}
|
||||
unset($t2);
|
||||
unset($c);
|
||||
|
||||
|
||||
$t->setAdress($email);
|
||||
$this->messegeContent();
|
||||
$t->setSubject('Nowe przypomnienie o: '.$this->res['name']);
|
||||
$t->setBody($this->message_content);
|
||||
$success = false;
|
||||
$success= $t->sendEmail();
|
||||
}
|
||||
function searchLeavedNotifications(){
|
||||
|
||||
$this->return_list=array();
|
||||
|
||||
$this->ask=$this->db->query("select id,date_reminder,assigned_user_id,name,description,DATE_FORMAT(date_start,'%d.%m.%Y %T') as date_start from tasks where notification_send='1' and date_reminder is not null and assigned_user_id='".$this->user_id."' order by date_reminder desc");
|
||||
while($this->res=$this->db->fetchByAssoc($this->ask)){
|
||||
|
||||
$this->return_list[]=$this->res;
|
||||
|
||||
}
|
||||
if(count($this->return_list)>0){
|
||||
return $this->return_list;
|
||||
} else {
|
||||
return '-1';
|
||||
}
|
||||
|
||||
}
|
||||
function sms_send($params, $backup = false ) {
|
||||
|
||||
static $content;
|
||||
|
||||
if($backup == true){
|
||||
$url = 'https://api2.smsapi.pl/sms.do';
|
||||
}else{
|
||||
$url = 'https://api.smsapi.pl/sms.do';
|
||||
}
|
||||
|
||||
$c = curl_init();
|
||||
curl_setopt( $c, CURLOPT_URL, $url );
|
||||
curl_setopt( $c, CURLOPT_POST, true );
|
||||
curl_setopt( $c, CURLOPT_POSTFIELDS, $params );
|
||||
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
|
||||
|
||||
$content = curl_exec( $c );
|
||||
$http_status = curl_getinfo($c, CURLINFO_HTTP_CODE);
|
||||
|
||||
if($http_status != 200 && $backup == false){
|
||||
$backup = true;
|
||||
sms_send($params, $backup);
|
||||
}
|
||||
|
||||
curl_close( $c );
|
||||
return $content;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function changeDate($array){
|
||||
if($this->res['remider_interval']!=''){
|
||||
if($this->res['remider_interval']!='0'){
|
||||
$date = new DateTime();
|
||||
|
||||
switch ($this->res['remider_interval_type']) {
|
||||
case 'd':
|
||||
$date->modify('+'.$this->res['remider_interval'].' day');
|
||||
break;
|
||||
case 'm':
|
||||
$date->modify('+'.$this->res['remider_interval'].' month');
|
||||
break;
|
||||
case 'y':
|
||||
$date->modify('+'.$this->res['remider_interval'].' year');
|
||||
break;
|
||||
}
|
||||
$date->modify('-1 hour');
|
||||
$back=$this->db->query("update tasks set notification_send='0', date_reminder='". $date->format('Y-m-d H:i:s') ."' where id='".$this->res['id']."'");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function searchNotifications(){
|
||||
|
||||
$this->ask=$this->db->query("
|
||||
select id,date_reminder,assigned_user_id,reminder_type,telephones,emails,name,description,DATE_FORMAT(date_start,'%d.%m.%Y %T') as date_start,remider_interval,remider_interval_type,record_id,record_type
|
||||
from tasks where notification_send='0' and date_reminder is not null and date_reminder!='1999-12-31 23:00:00' and date_reminder + INTERVAL 1 HOUR < NOW()");
|
||||
while($this->res=$this->db->fetchByAssoc($this->ask)){
|
||||
|
||||
$this->sendNotification();
|
||||
|
||||
}
|
||||
|
||||
$this->ask=$this->db->query("
|
||||
select id,date_reminder,assigned_user_id,reminder_type,name,description,DATE_FORMAT(date_start,'%d.%m.%Y %T') as date_start,remider_interval,remider_interval_type
|
||||
from calls where notification_send='0' and date_reminder is not null and date_reminder!='1999-12-31 23:00:00' and date_reminder < NOW()");
|
||||
while($this->res=$this->db->fetchByAssoc($this->ask)){
|
||||
|
||||
$this->sendNotification2();
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function sendNotification2(){
|
||||
|
||||
/* if($this->sendData(json_encode($this->res, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE))!=''){
|
||||
|
||||
|
||||
} */
|
||||
$this->setNotificationFlag2($this->res['id'],'1');
|
||||
if($this->getUserData()!='' && ($this->res['reminder_type']=='2' || $this->res['reminder_type']=='3')){
|
||||
$this->sendEmail2();
|
||||
}
|
||||
}
|
||||
|
||||
function sendEmail2(){
|
||||
require_once 'include/ECM/EcmSendPdfButton/EcmSendPdfButton.inc';
|
||||
$t = new EcmSendPdfButton('Calls', $this->res['id'],$this->email,'');
|
||||
$t->setAdress($this->email);
|
||||
$this->messegeContent2();
|
||||
$t->setSubject('Nowe przypomnienie o: '.$this->res['name']);
|
||||
$t->setBody($this->message_content);
|
||||
$success = false;
|
||||
$success= $t->sendEmail();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
98
include/ECM/EcmNotifications/WebsocketClient.php
Executable file
98
include/ECM/EcmNotifications/WebsocketClient.php
Executable file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* Very basic websocket client.
|
||||
* Supporting handshake from drafts:
|
||||
* draft-hixie-thewebsocketprotocol-76
|
||||
* draft-ietf-hybi-thewebsocketprotocol-00
|
||||
*
|
||||
* @author Simon Samtleben <web@lemmingzshadow.net>
|
||||
* @version 2011-09-15
|
||||
*/
|
||||
|
||||
class WebsocketClient
|
||||
{
|
||||
private $_Socket = null;
|
||||
private $errno=null;
|
||||
private $errstr=null;
|
||||
|
||||
public function __construct($host, $port)
|
||||
{
|
||||
|
||||
$this->_connect($host, $port);
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
$this->_disconnect();
|
||||
}
|
||||
|
||||
public function sendData($data)
|
||||
{
|
||||
|
||||
// send actual data:
|
||||
fwrite($this->_Socket, "\x00" . $data . "\xff" ) or die('Error:' . $this->errno . ':' . $this->errstr);
|
||||
$wsData = fread($this->_Socket, 2000);
|
||||
$retData = trim($wsData,"\x00\xff");
|
||||
return $retData;
|
||||
}
|
||||
|
||||
private function _connect($host, $port)
|
||||
{
|
||||
$key1 = $this->_generateRandomString(32);
|
||||
$key2 = $this->_generateRandomString(32);
|
||||
$key3 = $this->_generateRandomString(8, false, true);
|
||||
|
||||
$header = "GET / HTTP/1.1\r\n";
|
||||
$header.= "Upgrade: WebSocket\r\n";
|
||||
$header.= "Connection: Upgrade\r\n";
|
||||
$header.= "Host: ".$host.":".$port."\r\n";
|
||||
$header.= "Origin: http://foobar.com\r\n";
|
||||
$header.= "Sec-WebSocket-Key: " . $key1 . "\r\n";
|
||||
//$header.= "Sec-WebSocket-Key2: " . $key2 . "\r\n";
|
||||
$header.= "\r\n";
|
||||
// $header.= $key3;
|
||||
|
||||
$this->_Socket = fsockopen($host, $port, $this->errno, $this->errstr, 2);
|
||||
echo $header;
|
||||
$er=fwrite($this->_Socket, $header);
|
||||
|
||||
$response = fread($this->_Socket, 2000);
|
||||
|
||||
/**
|
||||
* @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated.
|
||||
* See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake
|
||||
*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _disconnect()
|
||||
{
|
||||
fclose($this->_Socket);
|
||||
}
|
||||
|
||||
private function _generateRandomString($length = 10, $addSpaces = true, $addNumbers = true)
|
||||
{
|
||||
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}';
|
||||
$useChars = array();
|
||||
// select some random chars:
|
||||
for($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$useChars[] = $characters[mt_rand(0, strlen($characters)-1)];
|
||||
}
|
||||
// add spaces and numbers:
|
||||
if($addSpaces === true)
|
||||
{
|
||||
array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
}
|
||||
if($addNumbers === true)
|
||||
{
|
||||
array_push($useChars, rand(0,9), rand(0,9), rand(0,9));
|
||||
}
|
||||
shuffle($useChars);
|
||||
$randomString = trim(implode('', $useChars));
|
||||
$randomString = substr($randomString, 0, $length);
|
||||
return $randomString;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user