| 
						 | 
						- <?php
 - 
 - namespace App\Http\Controllers;
 - 
 - use Laravel\Lumen\Routing\Controller as BaseController;
 - use Illuminate\Http\Request;
 - use DB;
 - use Quartz;
 - 
 - class Share extends BaseController
 - {
 - 
 -   private function _databaseFromToken($token) {
 -     $share = DB::table('shares')
 -       ->where('token', $token)
 -       ->where('expires_at', '>', date('Y-m-d H:i:s'))
 -       ->first();
 - 
 -     if(!$share) return false;
 - 
 -     $database = DB::table('databases')->where('id', $share->database_id)->first();
 - 
 -     return $database;
 -   }
 - 
 -   public function view(Request $request, $token) {
 -     $database = $this->_databaseFromToken($token);
 - 
 -     if(!$database) {
 -       return view('share-expired');
 -     }
 - 
 -     return view('share', [
 -       'database' => $database,
 -       'share_token' => $token,
 -     ]);
 -   }
 - 
 -   public function current_location(Request $request) {
 -     $database = $this->_databaseFromToken($request->input('token'));
 - 
 -     if(!$database) {
 -       return response(json_encode(['error' => 'invalid']))->header('Content-Type', 'application/json');
 -     } 
 - 
 -     $response = [
 -       'data' => json_decode($database->last_location),
 -     ];
 - 
 -     return response(json_encode($response))->header('Content-Type', 'application/json');
 -   }
 -   
 -   public function history(Request $request) {
 -     $database = $this->_databaseFromToken($request->input('token'));
 -    
 -     if(!$database) {
 -       return response(json_encode(['error' => 'invalid']))->header('Content-Type', 'application/json');
 -     } 
 -     
 -     $share = DB::table('shares')
 -       ->where('token', $request->input('token'))
 -       ->first();
 -     $share_date = strtotime($share->created_at);
 -   
 -     $locations = [];
 -     
 -     $db = new Quartz\DB(env('STORAGE_DIR').$database->name, 'r');
 -     $results = $db->queryLast(100);
 -     foreach($results as $id=>$record) {
 -       if(!is_object($record) || !$record->data)
 -         continue;
 -         
 -       if(!property_exists($record->data->properties, 'horizontal_accuracy')
 -           || $record->data->properties->horizontal_accuracy >= 5000)
 -         continue;
 -          
 -       // Make sure this is from after the share was created  
 -       $record_date = $record->date->format('U');
 -       
 -       if($record_date < $share_date)
 -         continue;
 - 
 -       $locations[] = $record->data;
 -     }
 -     
 -     $linestring = array(
 -       'type' => 'LineString',
 -       'coordinates' => [],
 -     );
 -     foreach($locations as $loc) {
 -       if(property_exists($loc, 'geometry'))
 -         $linestring['coordinates'][] = $loc->geometry->coordinates;
 -       else
 -         $linestring['coordinates'][] = null;
 -     }
 -     
 -     $response = array(
 -       'linestring' => $linestring,
 -     );
 - 
 -     return response(json_encode($response))->header('Content-Type', 'application/json');
 -   }
 - 
 - }
 
 
  |