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' => []]); }