Example #1
0
 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);
         }
     }
 }
Example #2
0
 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;
 }
Example #3
0
 /**
  * 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;
 }