function store()
 {
     $error = "";
     if (Input::has('places') && Input::has('placeid')) {
         $placesList = Input::get('places');
         $mosqueid = Input::get('placeid');
         try {
             for ($i = count($placesList) - 1; $i >= 0; $i--) {
                 $place = $placesList[$i];
                 $placeExist = GPlace::where('placeid', $place['placeid'])->first();
                 if (!$placeExist) {
                     if ($i < count($placesList) - 1) {
                         $place['parent'] = $placesList[$i + 1]['placeid'];
                         $place['importparent'] = $place['parent'];
                     }
                     GPlace::create($place);
                 }
             }
             $area = $placesList[0]['placeid'];
             $place = GPlace::where('placeid', $area)->first();
             if ($place) {
                 $mosque = GMosque::where('placeid', $mosqueid)->first();
                 $mosque->area = $area;
                 $mosque->save();
                 return Response::json(array('status_code' => 200), 200);
             } else {
                 $error = "Cannot save mosque because place not saved.";
             }
         } catch (\Illuminate\Database\QueryException $e) {
             $error = $e->getMessage();
         } catch (\Exception $e) {
             $error = $e->getMessage();
         }
     } elseif (Input::has('placesupdate')) {
         $placesList = Input::get('placesupdate');
         try {
             for ($i = 0; $i < count($placesList); $i++) {
                 $place = $placesList[$i];
                 $placeExist = GPlace::where('placeid', $place['placeid'])->first();
                 if ($placeExist) {
                     $placeExist['importparent'] = $place['importparent'];
                     $placeExist['importignore'] = $place['importignore'];
                     $placeExist->save();
                 } else {
                     throw new \Exception("place not found: " . $place['placeid']);
                 }
             }
             return Response::json(array('status_code' => 200), 200);
         } catch (\Illuminate\Database\QueryException $e) {
             $error = $e->getMessage();
         } catch (\Exception $e) {
             $error = $e->getMessage();
         }
     }
     return Response::json(array('status_code' => 500, 'error_message' => $error), 500);
 }
 public function traverse($gplaces, $parentsTree, $ignore)
 {
     foreach ($gplaces as $gplace) {
         $nextIgnore = $ignore || $gplace->importignore;
         if (count($parentsTree) < 3 && !$nextIgnore) {
             if ($gplace->importid == null) {
                 $place = $this->gplaceToPlace($gplace, $parentsTree);
                 DB::transaction(function () use($gplace, $place) {
                     $place->save();
                     $gplace->importid = $place->id;
                     $gplace->save();
                 });
             }
             $parentsTreeDirty = true;
             $parentsTree[] = $gplace;
         } else {
             $parentsTreeDirty = false;
         }
         $gmosques = GMosque::whereNull('importid')->where('area', $gplace->placeid)->get();
         foreach ($gmosques as $gmosque) {
             if ($gmosque->importid == null) {
                 $mosque = $this->gmosqueToMosque($gmosque);
                 if (count($parentsTree) > 1) {
                     $mosque->state = $parentsTree[1]->importid;
                 }
                 if (count($parentsTree) > 2) {
                     $mosque->city = $parentsTree[2]->importid;
                 }
                 DB::transaction(function () use($gmosque, $mosque) {
                     $mosque->save();
                     $gmosque->importid = $mosque->id;
                     $gmosque->save();
                 });
             }
         }
         $subPlaces = GPlace::where('importparent', $gplace->placeid)->get();
         $this->traverse($subPlaces, $parentsTree, $nextIgnore);
         if ($parentsTreeDirty) {
             array_pop($parentsTree);
         }
     }
 }
 public function index()
 {
     $filters = Input::only('latitude1', 'longitude1', 'latitude2', 'longitude2', 'area');
     $validator = Validator::make($filters, ['latitude1' => 'numeric|between:-90,90|required', 'longitude1' => 'numeric|between:-180,180|required', 'latitude2' => 'numeric|between:-90,90|required', 'longitude2' => 'numeric|between:-180,180|required', 'area' => 'boolean']);
     if ($validator->fails()) {
         throw new BadRequestException($validator->errors()->first());
     }
     $startLat = min($filters['latitude1'], $filters['latitude2']);
     $stopLat = max($filters['latitude1'], $filters['latitude2']);
     $startLng = min($filters['longitude1'], $filters['longitude2']);
     $stopLng = max($filters['longitude1'], $filters['longitude2']);
     $gmosquesQuery = GMosque::where([['latitude', '>=', $startLat], ['latitude', '<=', $stopLat], ['longitude', '>=', $startLng], ['longitude', '<=', $stopLng]]);
     if ($filters['area'] != null) {
         if ($filters['area']) {
             $gmosquesQuery->whereNotNull('area');
         } else {
             $gmosquesQuery->whereNull('area');
         }
     }
     $gmoques = $gmosquesQuery->get();
     return Response::json(array("data" => $gmoques, 'status_code' => 200), 200);
 }