def get_nearby_teams(request, near_distance=DEFAULT_NEAR_DISTANCE): g = get_geoip(request) if g.latlng is None or g.latlng[0] is None or g.latlng[1] is None: print("Could not identify latlng from geoip") return Team.objects.none() try: minlat = g.latlng[0] - (near_distance / KM_PER_DEGREE_LAT) maxlat = g.latlng[0] + (near_distance / KM_PER_DEGREE_LAT) minlng = g.latlng[1] - ( near_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(g.latlng[0])))) maxlng = g.latlng[1] + ( near_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(g.latlng[0])))) near_teams = Team.public_objects.filter( city__latitude__gte=minlat, city__latitude__lte=maxlat, city__longitude__gte=minlng, city__longitude__lte=maxlng, ) return near_teams except Exception as e: print("Error looking for local teams: ", e) return Team.objects.none()
def start_new_team(request, *args, **kwargs): if request.method == 'GET': form = NewTeamForm() g = location.get_geoip(request) if g.latlng is not None and g.latlng[0] is not None and g.latlng[ 1] is not None: city = location.get_nearest_city(g.latlng) if city: form.initial = {'city': city, 'tz': city.tz} context = { 'team_form': form, } return render(request, 'get_together/new_team/start_new_team.html', context) elif request.method == 'POST': form = NewTeamForm(request.POST) if form.is_valid(): new_team = form.save() new_team.owner_profile = request.user.profile new_team.save() Member.objects.create(team=new_team, user=request.user.profile, role=Member.ADMIN) return redirect('define-team', team_id=new_team.pk) else: context = { 'team_form': form, } return render(request, 'get_together/new_team/start_new_team.html', context) else: return redirect('home')
def teams_list_all(request, *args, **kwargs): teams = Team.objects.all() geo_ip = location.get_geoip(request) context = { 'active': 'all', 'teams': sorted(teams, key=lambda team: location.team_distance_from(geo_ip.latlng, team)), } return render(request, 'get_together/teams/list_teams.html', context)
def events_list_all(request, *args, **kwargs): events = Event.objects.filter(end_time__gt=timezone.now()).order_by('start_time') geo_ip = location.get_geoip(request) context = { 'active': 'all', 'events_list': sorted(events, key=lambda event: location.event_distance_from(geo_ip.latlng, event)), } return render(request, 'get_together/events/list_events.html', context)
def events_list(request, *args, **kwargs): if not request.user.is_authenticated: return redirect('all-events') events = Event.objects.filter(attendees=request.user.profile, end_time__gt=timezone.now(), status__gt=Event.CANCELED).order_by('start_time') geo_ip = location.get_geoip(request) context = { 'active': 'my', 'events_list': sorted(events, key=lambda event: location.event_distance_from(geo_ip.latlng, event)), } return render(request, 'get_together/events/list_events.html', context)
def teams_list(request, *args, **kwargs): if not request.user.is_authenticated: return redirect('all-teams') teams = request.user.profile.memberships.all().distinct() geo_ip = location.get_geoip(request) context = { 'active': 'my', 'teams': sorted(teams, key=lambda team: location.team_distance_from(geo_ip.latlng, team)), } return render(request, 'get_together/teams/list_teams.html', context)
def teams_list_all(request, *args, **kwargs): teams = Team.public_objects.all() geo_ip = location.get_geoip(request) context = { "active": "all", "teams": sorted( teams, key=lambda team: location.team_distance_from(geo_ip.latlng, team)), } return render(request, "get_together/teams/list_teams.html", context)
def start_new_team(request): new_team = Team(owner_profile=request.user.profile) new_team.owner_profile = request.user.profile if request.method == 'GET': if 'organization' in request.GET and request.GET['organization'] != '': org = Organization.objects.get(id=request.GET['organization']) if request.user.profile.can_edit_org(org): new_team.organization = org form = NewTeamForm(instance=new_team) g = location.get_geoip(request) if g.latlng is not None and g.latlng[0] is not None and g.latlng[1] is not None: city = location.get_nearest_city(g.latlng) if city: form.initial={'city': city, 'tz': city.tz} context = { 'team': new_team, 'team_form': form, } if 'event' in request.GET and request.GET['event'] != '': context['event'] = request.GET['event'] return render(request, 'get_together/new_team/start_new_team.html', context) elif request.method == 'POST': if 'organization' in request.POST and request.POST['organization'] != '': org = Organization.objects.get(id=request.POST['organization']) if request.user.profile.can_edit_org(org): new_team.organization = org form = NewTeamForm(request.POST, request.FILES, instance=new_team) if form.is_valid(): new_team = form.save() new_team.save() if 'event' in request.POST and request.POST['event'] != '': try: event = Event.objects.get(id=request.POST['event']) event.team = new_team event.save() except: pass Member.objects.create(team=new_team, user=request.user.profile, role=Member.ADMIN) ga.add_event(request, action='new_team', category='growth', label=new_team.name) return redirect('define-team', team_id=new_team.pk) else: context = { 'team': new_team, 'team_form': form, } if 'event' in request.POST and request.POST['event'] != '': context['event'] = request.POST['event'] return render(request, 'get_together/new_team/start_new_team.html', context) else: return redirect('home')
def start_new_team(request): new_team = Team(owner_profile=request.user.profile) new_team.owner_profile = request.user.profile if request.method == "GET": if "organization" in request.GET and request.GET["organization"] != "": org = Organization.objects.get(id=request.GET["organization"]) if request.user.profile.can_edit_org(org): new_team.organization = org form = NewTeamForm(instance=new_team) g = location.get_geoip(request) if g.latlng is not None and g.latlng[0] is not None and g.latlng[1] is not None: city = location.get_nearest_city(g.latlng) if city: form.initial = {"city": city, "tz": city.tz} context = {"team": new_team, "team_form": form} if "event" in request.GET and request.GET["event"] != "": context["event"] = request.GET["event"] return render(request, "get_together/new_team/start_new_team.html", context) elif request.method == "POST": if "organization" in request.POST and request.POST["organization"] != "": org = Organization.objects.get(id=request.POST["organization"]) if request.user.profile.can_edit_org(org): new_team.organization = org form = NewTeamForm(request.POST, request.FILES, instance=new_team) if form.is_valid(): new_team = form.save() new_team.save() if "event" in request.POST and request.POST["event"] != "": try: event = Event.objects.get(id=request.POST["event"]) event.team = new_team event.save() except: pass Member.objects.create( team=new_team, user=request.user.profile, role=Member.ADMIN ) ga.add_event( request, action="new_team", category="growth", label=new_team.name ) return redirect("define-team", team_id=new_team.pk) else: context = {"team": new_team, "team_form": form} if "event" in request.POST and request.POST["event"] != "": context["event"] = request.POST["event"] return render(request, "get_together/new_team/start_new_team.html", context) else: return redirect("home")
def events_list_all(request, *args, **kwargs): events = Event.objects.filter( Q(team__access=Team.PUBLIC) | Q(attendees=request.user.profile), end_time__gt=timezone.now(), status__gt=Event.CANCELED, ).order_by("start_time") geo_ip = location.get_geoip(request) context = { "active": "all", "events_list": sorted( events, key=lambda event: location.event_distance_from(geo_ip.latlng, event) ), } return render(request, "get_together/events/list_events.html", context)
def teams_list_all(request, *args, **kwargs): teams = [ team for team in Team.objects.all() if team.access == Team.PUBLIC or (team.access == Team.PRIVATE and request.user.profile.is_in_team(team)) ] geo_ip = location.get_geoip(request) context = { "active": "all", "teams": sorted( teams, key=lambda team: location.team_distance_from(geo_ip.latlng, team)), } return render(request, "get_together/teams/list_teams.html", context)
def teams_list(request, *args, **kwargs): if not request.user.is_authenticated: return redirect("all-teams") teams = request.user.profile.memberships.all().select_related( "city").distinct() try: geo_ip = location.get_geoip(request) context = { "active": "my", "teams": sorted(teams, key=lambda team: location.team_distance_from( geo_ip.latlng, team)), } except: context = {"active": "my", "teams": teams} return render(request, "get_together/teams/list_teams.html", context)
def teams_list_all(request, *args, **kwargs): if request.user.is_authenticated: member_in = ( request.user.profile.memberships.all().values("id").values_list( "id", flat=True)) teams = Team.objects.filter( Q(access=Team.PUBLIC) | Q(access=Team.PRIVATE, id__in=member_in)) else: teams = Team.objects.filter(access=Team.PUBLIC) teams = teams.select_related("city") try: geo_ip = location.get_geoip(request) context = { "active": "all", "teams": sorted(teams, key=lambda team: location.team_distance_from( geo_ip.latlng, team)), } except: context = {"active": "all", "teams": teams} return render(request, "get_together/teams/list_teams.html", context)
def home(request, *args, **kwards): context = {} near_distance = int(request.GET.get("distance", DEFAULT_NEAR_DISTANCE)) context["distance"] = near_distance context["name"] = request.GET.get("name", "") context["geoip_lookup"] = False context["city_search"] = False city = None ll = None if "city" in request.GET and request.GET.get("city"): try: city_id = int(request.GET.get("city")) city = City.objects.get(id=city_id) context["city"] = city ll = [city.latitude, city.longitude] ga.add_event(request, "homepage_search", category="search", label=city.short_name) context["city_search"] = True except: messages.add_message( request, messages.ERROR, message=_("Could not locate the City you requested."), ) context["city_search"] = False if context["city_search"] == False: try: g = location.get_geoip(request) if (g.latlng is not None and len(g.latlng) >= 2 and g.latlng[0] is not None and g.latlng[1] is not None): ll = g.latlng context["geoip_lookup"] = True try: city_distance = 1 # km while city is None and city_distance < 100: minlat = ll[0] - (city_distance / KM_PER_DEGREE_LAT) maxlat = ll[0] + (city_distance / KM_PER_DEGREE_LAT) minlng = ll[1] - (city_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) maxlng = ll[1] + (city_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) nearby_cities = City.objects.filter( latitude__gte=minlat, latitude__lte=maxlat, longitude__gte=minlng, longitude__lte=maxlng, ) if len(nearby_cities) == 0: city_distance += 1 else: city = sorted( nearby_cities, key=lambda city: location.city_distance_from( ll, city), )[0] if (request.user.is_authenticated and request.user.profile.city is None): profile = request.user.profile profile.city = city profile.save() except Exception as err: print("City lookup failed", err) raise Exception("City lookup filed") else: raise Exception("Geocoder result has no latlng") except Exception as err: context["geoip_lookup"] = False print( "Geocoder lookup failed for %s" % request.META.get("REMOTE_ADDR"), err) if ll is not None: context["latitude"] = ll[0] context["longitude"] = ll[1] try: minlat = ll[0] - (near_distance / KM_PER_DEGREE_LAT) maxlat = ll[0] + (near_distance / KM_PER_DEGREE_LAT) minlng = ll[1] - ( near_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) maxlng = ll[1] + ( near_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) context["minlat"] = minlat context["maxlat"] = maxlat context["minlng"] = minlng context["maxlng"] = maxlng near_events = Searchable.objects.filter( latitude__gte=minlat, latitude__lte=maxlat, longitude__gte=minlng, longitude__lte=maxlng, end_time__gte=datetime.datetime.now(), ) if context["name"]: near_events = near_events.filter( Q(event_title__icontains=context["name"]) | Q(group_name__icontains=context["name"])) context["near_events"] = sorted( near_events, key=lambda searchable: location.searchable_distance_from( ll, searchable), ) # # If there aren't any teams in the user's geoip area, show them the closest ones if context["geoip_lookup"] and len(near_events) < 1: context["closest_events"] = sorted( Searchable.objects.filter( end_time__gte=datetime.datetime.now()), key=lambda searchable: location.searchable_distance_from( ll, searchable), )[:3] near_teams = Team.objects.filter( city__latitude__gte=minlat, city__latitude__lte=maxlat, city__longitude__gte=minlng, city__longitude__lte=maxlng, ).filter( Q(access=Team.PUBLIC) | Q(access=Team.PRIVATE, members=request.user.profile)) if context["name"]: near_teams = near_teams.filter(name__icontains=context["name"]) near_teams = near_teams.distinct() context["near_teams"] = sorted( near_teams, key=lambda team: location.team_distance_from(ll, team)) # # If there aren't any teams in the user's geoip area, show them the closest ones if context["geoip_lookup"] and len(near_teams) < 1: context["closest_teams"] = sorted( Team.public_objects.all(), key=lambda team: location.team_distance_from(ll, team), )[:3] except Exception as err: print("Error looking up nearby teams and events", err) traceback.print_exc() initial_search = {"distance": near_distance} if city is not None and city.id > 0: initial_search["city"] = city.id context["search_by_city"] = city if context["name"]: initial_search["name"] = context["name"] search_form = SearchTeamsByName(initial=initial_search) context["search_form"] = search_form return render(request, "get_together/index.html", context)
def home(request, *args, **kwards): context = {} if request.user.is_authenticated: user_teams = Team.objects.filter(owner_profile=request.user.profile) if len(user_teams) > 0: context['user_teams'] = user_teams near_distance = int(request.GET.get("distance", DEFAULT_NEAR_DISTANCE)) context['distance'] = near_distance context['geoip_lookup'] = False city = None ll = None if "city" in request.GET and request.GET.get("city"): context['city_search'] = True city = City.objects.get(id=request.GET.get("city")) context['city'] = city ll = [city.latitude, city.longitude] ga.add_event(request, 'homepage_search', category='search', label=city.short_name) else: context['city_search'] = False try: g = location.get_geoip(request) if g.latlng is not None and g.latlng[0] is not None and g.latlng[ 1] is not None: ll = g.latlng context['geoip_lookup'] = True try: city_distance = 1 #km while city is None and city_distance < 100: minlat = ll[0] - (city_distance / KM_PER_DEGREE_LAT) maxlat = ll[0] + (city_distance / KM_PER_DEGREE_LAT) minlng = ll[1] - (city_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) maxlng = ll[1] + (city_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) nearby_cities = City.objects.filter( latitude__gte=minlat, latitude__lte=maxlat, longitude__gte=minlng, longitude__lte=maxlng) if len(nearby_cities) == 0: city_distance += 1 else: city = sorted(nearby_cities, key=lambda city: location. city_distance_from(ll, city))[0] if request.user.profile.city is None: profile = request.user.profile profile.city = city profile.save() except: raise Exception('City lookup filed') else: raise Exception('Geocoder result has no latlng') except Exception as err: context['geoip_lookup'] = False print( "Geocoder lookup failed for %s" % request.META.get('REMOTE_ADDR'), err) if ll is not None: context['latitude'] = ll[0] context['longitude'] = ll[1] try: minlat = ll[0] - (near_distance / KM_PER_DEGREE_LAT) maxlat = ll[0] + (near_distance / KM_PER_DEGREE_LAT) minlng = ll[1] - ( near_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) maxlng = ll[1] + ( near_distance / (KM_PER_DEGREE_LNG * math.cos(math.radians(ll[0])))) context['minlat'] = minlat context['maxlat'] = maxlat context['minlng'] = minlng context['maxlng'] = maxlng near_events = Searchable.objects.filter( latitude__gte=minlat, latitude__lte=maxlat, longitude__gte=minlng, longitude__lte=maxlng, end_time__gte=datetime.datetime.now()) context['near_events'] = sorted( near_events, key=lambda searchable: location.searchable_distance_from( ll, searchable)) # # If there aren't any teams in the user's geoip area, show them the closest ones if context['geoip_lookup'] and len(near_events) < 1: context['closest_events'] = sorted( Searchable.objects.filter( end_time__gte=datetime.datetime.now()), key=lambda searchable: location.searchable_distance_from( ll, searchable))[:3] near_teams = Team.objects.filter(city__latitude__gte=minlat, city__latitude__lte=maxlat, city__longitude__gte=minlng, city__longitude__lte=maxlng) context['near_teams'] = sorted( near_teams, key=lambda team: location.team_distance_from(ll, team)) # # If there aren't any teams in the user's geoip area, show them the closest ones if context['geoip_lookup'] and len(near_teams) < 1: context['closest_teams'] = sorted( Team.objects.all(), key=lambda team: location.team_distance_from(ll, team))[:3] except Exception as err: print("Error looking up nearby teams and events", err) traceback.print_exc() initial_search = {'distance': near_distance} if city is not None and city.id > 0: initial_search['city'] = city.id search_form = SearchForm(initial=initial_search) context['search_form'] = search_form return render(request, 'get_together/index.html', context)