225 lines
7.1 KiB
PHP
225 lines
7.1 KiB
PHP
<?
|
|
namespace profile\firebase;
|
|
|
|
use core\db\structure\Column as C;
|
|
use core\db\structure\eColumnType;
|
|
use ui\form\structure\eInputType;
|
|
use ui\Form;
|
|
use ui\input\Input;
|
|
use core\lang\structure\LangVariable as V;
|
|
use ms\ms\structure\msModuleTable;
|
|
use profile\firebase\push\structure\profileFirebasePushLang as Vars;
|
|
|
|
|
|
|
|
|
|
class Push extends msModuleTable {
|
|
static $self;
|
|
static $table_name = 'profileFirebasePush';
|
|
static $controller = 'profile.firebase.push';
|
|
|
|
static $ID = 'id';
|
|
static $CODE = 'name';
|
|
static $PROFILE = 'profile';
|
|
static $PORTAL = 'portal';
|
|
static $ACTIVE = 'active';
|
|
static $CHANNEL = 'channel';
|
|
static $BROWSER = 'browser';
|
|
static $CREATED = 'created';
|
|
|
|
static $PACKAGE_NAME = 'package_name';
|
|
static $VERSION = 'version';
|
|
static $BUILD_NUMBER = 'build_number';
|
|
static $PLATFORM = 'platform';
|
|
|
|
|
|
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
|
|
static function getSystemLangValues():array{ return Vars::getArray(); }
|
|
|
|
public static function installUniques() {
|
|
\DB::addIndex(self::$table_name,self::$PROFILE);
|
|
\DB::addIndex(self::$table_name,self::$CODE);
|
|
\DB::addIndex(self::$table_name,self::$CHANNEL);
|
|
\DB::addUnique(self::$table_name,self::$table_name.'_unique',[self::$CODE]);
|
|
}
|
|
|
|
|
|
|
|
static function send($KEY,$profile_id,$subject,$text,$channel = ''){
|
|
|
|
$profile_id = intval($profile_id);
|
|
$subject = trim($subject);
|
|
$text = trim($text);
|
|
if(!$text or !$subject) return;
|
|
|
|
$url = 'https://fcm.googleapis.com/fcm/send';
|
|
|
|
$tokens = [];
|
|
|
|
$res['tokens'] = $tokens = self::getTokensActiveForProfile($profile_id,$channel);
|
|
|
|
$res['fields'] = $fields = [
|
|
//"to"=> $DEVICE_TOKEN,
|
|
"registration_ids"=>$tokens,
|
|
"time_to_live" => 60*60*24,
|
|
"notification"=> [
|
|
"title"=>$subject,
|
|
"body"=>$text,
|
|
]
|
|
];
|
|
$fields = json_encode ( $fields );
|
|
|
|
$headers = array (
|
|
'Authorization: key=' . $KEY,
|
|
'Content-Type: application/json'
|
|
);
|
|
|
|
$ch = curl_init ();
|
|
curl_setopt ( $ch, CURLOPT_URL, $url );
|
|
curl_setopt ( $ch, CURLOPT_POST, true );
|
|
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
|
|
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
|
|
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER,0);
|
|
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields );
|
|
$res['response'] = json_decode(curl_exec ( $ch ),true);
|
|
$delete = [];
|
|
foreach ($res['results'] as $k=>$v){
|
|
if($v['error']){
|
|
$delete[] = "'".($tokens[$k])."'";
|
|
}
|
|
}
|
|
if($delete) {
|
|
Push::delete(new \Where(\Where::_in(self::$CODE,$delete)));
|
|
}
|
|
|
|
|
|
curl_close ( $ch );
|
|
|
|
/*
|
|
updatePushHistory($r->id,[
|
|
ST_PUSH_HISTORY_RESULT => "'".je($res)."'"
|
|
]);
|
|
*/
|
|
return $res;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static function add($profile_id,$code,$channel){
|
|
$profile_id = intval($profile_id);
|
|
$C = self::getOneEqualByColumn(self::$CODE,$code);
|
|
if(!$C or $C[self::$PROFILE] != PID) {
|
|
self::insert([
|
|
self::$CODE => $code,
|
|
self::$PROFILE => $profile_id,
|
|
self::$ACTIVE => 1,
|
|
self::$CHANNEL => $channel,
|
|
self::$PACKAGE_NAME => \Core::$APP_PACKAGE_NAME,
|
|
self::$VERSION => \Core::$APP_VERSION,
|
|
self::$BUILD_NUMBER => \Core::$APP_BUILD_NUMBER,
|
|
self::$PLATFORM => \Core::$PLATFORM,
|
|
]);
|
|
}
|
|
}
|
|
static function getTokensActiveForProfile($pid,$channel = ''){
|
|
$res = [];
|
|
$pid = intval($pid);
|
|
$r = self::select([
|
|
\Query::SELECT => [self::$CODE],
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator(self::$PROFILE,'=',$pid),
|
|
\Where::_operator(self::$ACTIVE,'=',1),
|
|
$channel ? \Where::_operator(self::$CHANNEL,'=',$channel) : null,
|
|
]))
|
|
]);
|
|
while($l = \DB::fetch($r)){
|
|
$res[] = $l[self::$CODE];
|
|
}
|
|
$res = array_unique($res);
|
|
return $res;
|
|
}
|
|
|
|
static function columnInfo() : array {
|
|
return [
|
|
new C([
|
|
C::VAR_NAME =>&self::$ID,
|
|
C::TYPE =>eColumnType::INT,
|
|
C::AUTO_INCREMENT =>true,
|
|
C::PRIMARY =>true,
|
|
C::DEFAULT =>0,
|
|
C::HIDDEN =>true,
|
|
C::TH =>V::get(Vars::$ID),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$CODE,
|
|
C::TYPE => eColumnType::VARCHAR,
|
|
C::LENGTH => 200,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PROFILE,
|
|
C::TYPE => eColumnType::INT,
|
|
C::DEFAULT => intval(PID),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$CHANNEL,
|
|
C::TYPE => eColumnType::VARCHAR,
|
|
C::DEFAULT => '',
|
|
C::LENGTH => 15,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PORTAL,
|
|
C::TYPE => eColumnType::INT,
|
|
C::DEFAULT => \Site::$portal_id,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$ACTIVE,
|
|
C::TYPE => eColumnType::TINYINT,
|
|
C::DEFAULT => 1,
|
|
C::LENGTH => 1,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$BROWSER,
|
|
C::TYPE => eColumnType::TEXT,
|
|
C::DEFAULT => $_SERVER['HTTP_USER_AGENT']
|
|
]),
|
|
|
|
|
|
new C([
|
|
C::VAR_NAME => &self::$PACKAGE_NAME,
|
|
C::TYPE => eColumnType::TEXT,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$VERSION,
|
|
C::TYPE => eColumnType::TEXT,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$BUILD_NUMBER,
|
|
C::TYPE => eColumnType::TEXT,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PLATFORM,
|
|
C::TYPE => eColumnType::TEXT,
|
|
]),
|
|
|
|
|
|
new C([
|
|
C::VAR_NAME => &self::$CREATED,
|
|
C::TYPE => eColumnType::INT,
|
|
C::LENGTH => 11,
|
|
C::TH => V::get(Vars::$CREATED),
|
|
C::DEFAULT => time(),
|
|
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);},
|
|
c::HIDDEN=>true,
|
|
]),
|
|
];
|
|
}
|
|
|
|
}
|
|
new Push();
|
|
|
|
|
|
///
|
|
|