Esempio n. 1
0
 /**
  * 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)]);
 }
Esempio n. 2
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' => []]);
 }