Пример #1
0
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()
Пример #2
0
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')
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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')
Пример #9
0
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")
Пример #10
0
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)
Пример #11
0
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)
Пример #12
0
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)
Пример #13
0
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)
Пример #14
0
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)
Пример #15
0
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)