/** * data field contains a json object */ public function store(Request $request) { $data = $request->json(); // error_log(print_r($data->get('origins'), true)); // error_log('debug'); // error_log(print_r($data, true)); // error_log('here'); $ride = new Ride(); $ride->initiator = Auth::user()->id; $ride->save(); $rideUser = new RideUser(); $rideUser->ride_id = $ride->id; $rideUser->user_id = Auth::user()->id; $rideUser->save(); $route = new Route(); $route->ride_id = $ride->id; $directions = !empty($data->get('google_directions')) ? json_encode($data->get('google_directions')) : ''; $route->direction = $directions; $route->user_id = Auth::user()->id; $route->state = 'accepted'; $route->note = !empty($data->get('share_details')) && isset($data->get('share_details')['notes']) ? $data->get('share_details')['notes'] : ''; $route->endTime = !empty($data->get('share_details')) && isset($data->get('share_details')['arrival_time']) ? $data->get('share_details')['arrival_time'] : ''; $route->save(); $ride->head = $route->id; $ride->save(); foreach ($data->get('origins') as $point) { $addr = isset($point['formatted_address']) ? $point['formatted_address'] : ''; RoutePoint::create(['route_id' => $route->id, 'placeId' => $point['google_place_id'], 'address' => $addr, 'location' => $point['longitude'] . ',' . $point['latitude'], 'name' => $point['name'], 'type' => 'start']); } foreach ($data->get('destinations') as $point) { $addr = isset($point['formatted_address']) ? $point['formatted_address'] : ''; RoutePoint::create(['route_id' => $route->id, 'placeId' => $point['google_place_id'], 'address' => $addr, 'location' => $point['longitude'] . ',' . $point['latitude'], 'name' => $point['name'], 'type' => 'end']); } return Response::json(['status' => 'success', 'data' => DbUtil::serializeRide($ride)]); }
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' => []]); }