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