Example #1
0
 public function actionInvitation()
 {
     $_currUser = Yii::$app->user->isGuest ? null : User::findOne(['id' => Yii::$app->user->id]);
     $_request = Yii::$app->request;
     if (!$_currUser || User::$_TYPE_DRIVER === $_currUser->user_type) {
         return $this->goHome();
     }
     $_driver = $_request->get('driver') ? User::findOne(['id' => $_request->get('driver')]) : null;
     if ('1' === $_request->get('send_invite')) {
         $errorMsg = null;
         if (!$_currUser) {
             $errorMsg = "Please log in";
         } elseif (!$_request->get('address_start')) {
             $errorMsg = "Start Address Not Specified";
         } elseif (!$_request->get('address_dest')) {
             $errorMsg = "Destination Address Not Specified";
         } elseif (!$_request->get('time_start')) {
             $errorMsg = "Ride Date And Time Not Specified";
         } elseif (!$_driver) {
             $errorMsg = "Driver Not Choosen";
         } else {
             $addressStart = Address::findOne(['id' => $_request->get('address_start')]);
             $addressDest = Address::findOne(['id' => $_request->get('address_dest')]);
             if (!$addressStart) {
                 $errorMsg = "Start Address Not Found";
             } elseif (!$addressDest) {
                 $errorMsg = "Destination Address Not Found";
             } else {
                 $ruaStart = RelUserAddress::findOne(['user_id' => $_currUser->id, 'address_id' => $addressStart->id]);
                 $ruaDest = RelUserAddress::findOne(['user_id' => $_currUser->id, 'address_id' => $addressDest->id]);
                 if (!$ruaStart) {
                     $errorMsg = "Start Address Is Not In Your Addresses List";
                 } elseif (!$ruaDest) {
                     $errorMsg = "Destination Address Is Not In Your Addresses List";
                 } else {
                     $timeStart = \DateTime::createFromFormat("d/m/Y H:i", $_request->get('time_start'));
                     $dtNowPlsHour = new \DateTime();
                     $dtNowPlsHour->add(new \DateInterval("PT1H"));
                     if (YII_DEBUG) {
                         error_log("datetime now + 1 hour : {$dtNowPlsHour->format("d/m/Y H:i")}");
                         error_log("datetime start : {$timeStart->format("d/m/Y H:i")}");
                     }
                     if ($dtNowPlsHour > $timeStart) {
                         $errorMsg = "Ride Start Time Should Be At Least In Next Hour";
                     } else {
                         if (YII_DEBUG) {
                             error_log("ready to create ride invite : ");
                             error_log("*** address start : {$addressStart->address} [{$addressStart->id}]");
                             error_log("*** address dest : {$addressDest->address} [{$addressDest->id}]");
                             error_log("*** time start : {$timeStart->format('d/m/Y H:i')}");
                             error_log("*** driver : {$_driver->email} [{$_driver->id}]");
                             error_log("*** current user : {$_currUser->email} [{$_currUser->id}]");
                             $ride = new Ride();
                             $ride->client_id = $_currUser->id;
                             $ride->driver_id = $_driver->id;
                             $ride->status = Ride::$_STATUS_INVITATION;
                             $ride->message = $_request->get('message', null);
                             $ride->time_start = $timeStart->getTimestamp();
                             $ride->address_start = $addressStart->id;
                             $ride->address_end = $addressDest->id;
                             $ride->generateRideToken();
                             try {
                                 $ride->save();
                                 Yii::$app->session->addFlash('home_notification', 'Invitation has been sent successfully');
                                 return $this->goHome();
                             } catch (\Exception $ex) {
                                 $errorMsg = "Failed to create new invitation, try again later";
                             }
                         }
                     }
                 }
             }
         }
         if ($errorMsg) {
             Yii::$app->session->addFlash('invite_error', $errorMsg, false);
         }
     }
     $_addresses = [];
     $addresses = new Query();
     //$addresses = $addresses->select('adr.id as id, adr.address as address')->from('addresses adr')->all();
     $addresses = $addresses->select('adr.id as id, adr.address as address')->from('addresses adr')->leftJoin('rel_user_address rua', 'rua.address_id = adr.id')->leftJoin('users u', 'u.id = rua.user_id')->where('u.id = :uid', [':uid' => $_currUser->id])->all();
     foreach ($addresses as $address) {
         $_addresses[$address['id']] = $address['address'];
     }
     $context = ['hire' => $_request->get('hire', 0), 'customer' => $_currUser, 'driver' => $_driver, 'address_start' => $_request->get('address_start', null), 'address_dest' => $_request->get('address_dest', null), 'addresses' => json_encode($_addresses), 'time_start' => $_request->get('time_start', null), 'message' => $_request->get('message', null)];
     return $this->render('invitation', ['context' => $context, 'history' => []]);
 }