geocomb/laravel/app/Http/Controllers/UserPageController.php
2017-06-14 00:25:18 +01:00

251 lines
8.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Vehicle;
use App\Vehicles;
use App\User;
use App\Station;
use Validator;
use Hash;
use Illuminate\Support\Facades\Response;
class UserPageController extends Controller
{
private $apiKey = 'AIzaSyDsZDCiU1k6mSuywRRL88xxXY-81RMEU7s';
public function index(Request $request)
{
$user = Auth::user();
$vehicles = Vehicle::join('vehicles', 'vehicle.id', 'vehicles.vehicle_id')
->join('users', 'users.id', 'vehicles.user_id')
->where('users.email', $user->email)
->get();
$planRoute = true;
return view('planRoute', ['name'=>$user->name, 'vehicles' => $vehicles, 'planRoute' => $planRoute]);
}
public function add(Request $request)
{
$data = ['brand' => $request->brand, 'model' => $request->model, 'fuel' => $request->fuel, 'consumption' => $request->consumption];
Vehicle::insert($data);
$vehicle = Vehicle::orderBy('id', 'desc')->first();
$vehicles = ['user_id'=>Auth::user()->id, 'vehicle_id'=>$vehicle->id];
Vehicles::insert($vehicles);
$vehiclesId = Vehicle::orderBy('id', 'desc')->first();
if ($request->favoriteVehicle) {
User::where('id', Auth::user()->id)->update(['preferredVehicle' => $vehiclesId->id]);
}
return redirect('userpage');
}
public function editVehicle($id=null)
{
$user = Auth::user();
$vehicles = Vehicle::join('vehicles', 'vehicle.id', 'vehicles.vehicle_id')
->join('users', 'users.id', 'vehicles.user_id')->where('users.email', $user->email)
->select('brand','model', 'vehicle.id as vehicle_id')->get();
$selectedVehicle=Vehicle::where('id', $id)->first();
$preferredVehicle = User::where('id', Auth::user()->id)->get();
return view('manageVehicles', ['name'=>$user->name, 'selectedVehicle' => $selectedVehicle, 'vehicles' => $vehicles]);
}
public function remove(Request $request)
{
Auth::user()->vehicles()->where('id', $request->$data)->delete();
}
public function admin_credential_rules(array $data)
{
$messages = [
'current-password.required' => 'Please enter current password',
'password.required' => 'Please enter password',
];
$validator = Validator::make($data, [
'current-password' => 'required',
'password' => 'required|same:password',
'password_confirmation' => 'required|same:password',
], $messages);
return $validator;
}
public function postCredentials(Request $request)
{
if(Auth::Check())
{
$request_data = $request->All();
$validator = $this->admin_credential_rules($request_data);
if($validator->fails())
{
return response()->json(array('error' => $validator->getMessageBag()->toArray()), 400);
}
else
{
$current_password = Auth::User()->password;
if(Hash::check($request_data['current-password'], $current_password))
{
$user_id = Auth::User()->id;
$obj_user = User::find($user_id);
$obj_user->password = Hash::make($request_data['password']);;
$obj_user->save();
return "ok";
}
else
{
$error = array('current-password' => 'Please enter correct current password');
return response()->json(array('error' => $error), 400);
}
}
}
else
{
return redirect()->to('/');
}
}
public function postTripData(Request $request)
{
$autonomyKm = $request->autonomyKm;
$origin = $request->upOrigin;
$destination = $request->upDestination;
$user = Auth::user();
$vehicles = Vehicle::join('vehicles', 'vehicle.id', 'vehicles.vehicle_id')->join('users', 'users.id', 'vehicles.user_id')->where('users.email', $user->email)->get();
return view('user_page', ['name'=>$user->name, 'stations' => $data, 'vehicles' => $vehicles]);
}
public function apiStations($origin, $destination, $autonomyKm) {
try{
$statusCode = 200;
$response['stations'] = array();
$linkOrigin = "https://maps.googleapis.com/maps/api/geocode/json?address=$origin&key=$this->apiKey";
$linkDestination = "https://maps.googleapis.com/maps/api/geocode/json?address=$destination&key=$this->apiKey";
$arrayOrigin = json_decode(file_get_contents($linkOrigin, true), true);
$arrayDestination = json_decode(file_get_contents($linkDestination, true), true);
$originDistrict = $arrayOrigin['results'][0]['address_components'][1]['long_name'];
$destinationDistrict = $arrayDestination['results'][0]['address_components'][1]['long_name'];
$latitudeOrigin = $arrayOrigin['results'][0]['geometry']['location']['lat'];
$longitudeOrigin = $arrayOrigin['results'][0]['geometry']['location']['lng'];
$originDistrict = trim(str_replace('District', '', $originDistrict));
$destinationDistrict = trim(str_replace('District', '', $destinationDistrict));
$query = Station::join('district', 'station.district', 'district.id')
->join('location', 'station.district', 'location.id');
if(strcmp($originDistrict,"Lisbon")==0 && strcmp($destinationDistrict,"Lisbon")!=0){
$query->where('district.name', 'like', "%Lisboa%");
$query->orWhere('district.name', 'like', "%$destinationDistrict%");
}else{
if (strcmp($originDistrict, "Lisbon")!=0 && strcmp($destinationDistrict, "Lisbon")==0) {
$query->where('district.name', 'like', "%$originDistrict%");
$query->orWhere('district.name', 'like', "%Lisboa%");
}else{
if (strcmp($originDistrict, "Lisbon")==0 && strcmp($destinationDistrict, "Lisbon")==0) {
$query->where('district.name', 'like', "%Lisboa%");
}else{
$query->where('district.name', 'like', "%$originDistrict%");
$query->orWhere('district.name', 'like', "%$destinationDistrict%");
}
}
}
$query->select("station.id as stationId", "station.name as stationName", "district.name as districtName", "station.brand as brand", "latitude", "longitude");
$data = $query->get();
foreach ($data as $key => $value) {
//echo "$key -> $value->latitude";
$latitudeDestination = $value->latitude;
$longitudeDestination = $value->longitude;
$earthRadius = 6.371;//km
$latitudeDifference = $latitudeOrigin-$latitudeDestination;
$longitudeDifference = $longitudeOrigin-$longitudeDestination;
$a = pow(sin($latitudeDifference/2),2) + cos($latitudeOrigin) * cos($latitudeDestination) * pow(sin($longitudeDifference/2), 2);
$c = 2 * $a * pow(tan(sqrt($a)*sqrt(1-$a)) ,2);
$result = $earthRadius * $c;
$data[$key]['distance'] = $result;
$array =["stationName" => $value->stationName,
"stationBrand" => $value->brand,
"districtName" => $value->districtName,
"latitude" => $value->latitude,
"longitude" => $value->longitude
];
array_push($response["stations"], $array /*[
'id' => $district->id,*/
//'name' =>
//]
);
}
}catch (Exception $e){
$statusCode = 400;
}finally{
return Response::json($response, $statusCode);
}
}
public function getVehicles()
{
# code...
$user = Auth::user();
$vehicles = Vehicle::join('vehicles', 'vehicle.id', 'vehicles.vehicle_id')
->join('users', 'users.id', 'vehicles.user_id')
->where('users.email', $user->email)
->get();
return view('manageVehicles', ['name'=>$user->name, 'vehicles' => $vehicles]);
}
public function getInfo()
{
# code...
$user = Auth::user();
$vehicles = Vehicle::join('vehicles', 'vehicle.id', 'vehicles.vehicle_id')
->join('users', 'users.id', 'vehicles.user_id')
->where('users.email', $user->email)
->get();
return view('manageInfo', ['name'=>$user->name, 'vehicles' => $vehicles]);
}
}