/** * Send push notifications * * @param Request $request * @return Response */ public function postPush(Request $request) { if (!$this->appKeyAvailable($request)) { return $this->notAuthorized($request); } if ($this->isSessionEmpty($request)) { $this->setResultError("Session token is missing", 401); } elseif ($this->setSessionUser($request)) { $validator = Validator::make($request->all(), ['data' => 'array', 'data.message' => 'required', 'users' => 'required|array', 'users.0' => 'required|numeric']); if ($validator->fails()) { $this->setResultError($validator->messages(), 400); } else { $android_devices = Device::whereEnvironment(getenv('ANDROID_PUSH_ENVIRONMENT'))->wherePlatform('android')->whereIn('user_id', $request->get('users'))->get(); $android_tokens = array(); foreach ($android_devices as $android_device) { $android_tokens[] = $android_device->token; } $ios_devices = Device::whereEnvironment(getenv('IOS_PUSH_ENVIRONMENT'))->wherePlatform('ios')->whereIn('user_id', $request->get('users'))->get(); $ios_tokens = array(); foreach ($ios_devices as $ios_device) { $ios_tokens[$ios_device->token] = $ios_device->created_at; } $data = $request->get('data'); $message = $data['message']; unset($data['message']); $result = ['android' => ['sent' => 0, 'invalid' => 0, 'unknown' => 0], 'ios' => ['sent' => 0, 'invalid' => 0, 'unknown' => 0]]; if (!empty($android_tokens)) { $android = new AndroidPushNotifications(); $android->data = $data; $android->message = $message; $android->devices = $android_tokens; $result['android'] = $android->push(); } if (!empty($ios_tokens)) { $ios = new iOSPushNotifications(); $ios->data = $data; $ios->message = $message; $ios->devices = $ios_tokens; $result['ios'] = $ios->push(); } $this->setResultOk($result); } } else { $this->setResultError("Mismatched session token", 401); } return $this->setResponse(); }