static function createNotificationsGroup($user_id, $group_name, $domain) { $user = User::findOne($user_id); $group = Group::findOne(['role_name' => $group_name]); if ($user && $group) { Yii::trace("Criar notificações do grupo " . $group->name . " para usuário " . $user->name); //Busca todas autorizações pendentes do grupo //Se tem dominio, procura só as relacionadas ao dominio do papel if ($domain) { $auths = ConnectionAuth::find()->where(['status' => Connection::AUTH_STATUS_PENDING, 'domain' => $domain, 'type' => ConnectionAuth::TYPE_GROUP, 'manager_group_id' => $group->id])->all(); } else { $auths = ConnectionAuth::find()->where(['status' => Connection::AUTH_STATUS_PENDING, 'type' => ConnectionAuth::TYPE_GROUP, 'manager_group_id' => $group->id])->all(); } //Passa por todas criando uma notificação foreach ($auths as $auth) { $connection = Connection::findOne($auth->connection_id); $reservation = Reservation::findOne($connection->reservation_id); AuthorizationNotification::createToUser($user->id, $auth->domain, $connection->reservation_id, $auth->id, $reservation->date); } } }
public function createUserAuth($flow, $reservation) { Yii::trace("Criando Request User Authorization"); //Confere se o usuário ja respondeu exatamente mesma requisição, se sim, não questiona novamente. $auth = ConnectionAuth::findOne(['type' => ConnectionAuth::TYPE_USER, 'domain' => $flow->domain, 'manager_user_id' => $flow->value, 'connection_id' => $flow->connection_id]); if ($auth) { return true; } //Confere se usuário requisitante é o mesmo que deve responder. Se sim, não pergunta, considera aceito. if ($flow->value == $reservation->request_user_id) { $flow->status = self::STATUS_YES; $flow->save(); return true; } $auth = new ConnectionAuth(); $auth->domain = $flow->domain; $auth->status = Connection::AUTH_STATUS_PENDING; $auth->type = ConnectionAuth::TYPE_USER; $auth->manager_user_id = $flow->value; $auth->connection_id = $flow->connection_id; $auth->save(); AuthorizationNotification::createToUser($flow->value, $flow->domain, $reservation->id, $auth->id); return false; }
/** * GET NOTIFICATIONS * @param string $dateParam * @return string * Retorna o html com até 6 notificações, ja formatado para ser exibido. * Quando recebe uma data de entrada, a utiliza como limite, e retorna apenas o que vem depois dela */ public static function getNotifications($dateParam) { $userId = Yii::$app->user->getId(); if (!$dateParam) { AuthorizationNotification::clearAuthorizations($userId); } //Caso seja a primeira solicitação $array = ""; $max = 0; $date = null; //Le todas reservas anteriores a data limite, ou todas reservas, caso não exista uma data limite if ($dateParam) { $notifications = Notification::find()->where(['user_id' => $userId])->andWhere(['<', 'date', $_POST['date']])->orderBy(['date' => SORT_DESC])->all(); } else { $notifications = Notification::find()->where(['user_id' => $userId])->orderBy(['date' => SORT_DESC])->all(); } //Se não contem, gera aviso de que o usuário não possui notificações if (count($notifications) == 0) { $info = []; $info['date'] = null; $info['array'] = "<li style='text-align: center;'><span style='float: none !important;'><h2>" . Yii::t("notify", 'You don`t have notifications yet.') . "</h2></span></li>"; $info['more'] = false; return $info; } //Percorre as notificações gerando o HTML foreach ($notifications as $notification) { if ($max < 6) { $msg = ""; switch ($notification->type) { case self::TYPE_AUTHORIZATION: $msg = AuthorizationNotification::makeHtml($notification); break; case self::TYPE_RESERVATION: $msg = ReservationNotification::makeHtml($notification); $notification->viewed = true; $notification->save(); break; case self::TYPE_NOTICE: $msg = AaaNotification::makeHtml($notification); $notification->viewed = true; $notification->save(); break; case self::TYPE_TOPOLOGY: $msg = TopologyNotification::makeHtml($notification); $notification->viewed = true; $notification->save(); break; } if ($msg == "") { $notification->delete(); } else { $array .= $msg; $date = $notification->date; } } if ($msg != "") { $max++; } if ($max == 7) { break; } } $info = []; $info['date'] = $date; //Data da ultima notificação retornada, utilizada como limite para ler as proximas em leituras futuras $info['array'] = $array; //HTML a ser exibido if ($max == 7) { $info['more'] = true; } else { $info['more'] = false; } return $info; }