meraproject/module/profile/firebase/push/model.php

225 lines
7.1 KiB
PHP
Raw Permalink Normal View History

<?
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();
///