Exemple #1
0
def checkin(request):
    form = GeoCheckinForm(request.POST or None)
    if form.is_valid():
        participant_group_id = form.cleaned_data['participant_group_id']
        latitude = form.cleaned_data['latitude']
        longitude = form.cleaned_data['longitude']
        participant_group_relationship = get_object_or_404(
            ParticipantGroupRelationship.objects.select_related('group', 'participant__user'), pk=participant_group_id)
        logger.debug("%s checking at at (%s, %s)",
                     participant_group_relationship, latitude, longitude)
        if request.user.participant == participant_group_relationship.participant:
            # perform checkin logic here, query foursquare API for nearest "green" venu
            #            venues = foursquare_venue_search(latitude=latitude, longitude=longitude,
            #                    categoryId=','.join(get_foursquare_category_ids()))
            #            logger.debug("Found venues: %s", venues)
            return JsonResponse(dumps({'success': True}))
        else:
            logger.warning("authenticated user %s tried to checkin at (%s, %s) for %s", request.user, latitude,
                           longitude, participant_group_relationship)
    return JsonResponse(dumps({'success': False, 'message': 'Invalid request'}))
Exemple #2
0
def mobile_participate(request, experiment_id=None):
    participant = request.user.participant
    experiment = get_active_experiment(participant, experiment_metadata=get_lighterprints_experiment_metadata())
    pgr = experiment.get_participant_group_relationship(participant)
    all_activities = Activity.objects.all()
    view_model = LighterprintsViewModel.create(pgr, experiment, activities=all_activities)
    return render(request, 'lighterprints/mobile/index.html', {
        'experiment': experiment,
        'participant_group_relationship': pgr,
        'view_model_json': dumps(view_model),
        'all_activities': all_activities,
    })
Exemple #3
0
def get_view_model(request, participant_group_id=None):
    if participant_group_id is None:
        # check in the request query parameters as well
        participant_group_id = request.GET.get('participant_group_id')
    # FIXME: replace with
    # ParticipantGroupRelationship.objects.fetch(pk=participant_group_id)
    pgr = get_object_or_404(
        ParticipantGroupRelationship.objects.select_related(
            'participant__user', 'group__experiment'),
        pk=participant_group_id)
    if pgr.participant != request.user.participant:
        # security check to ensure that the authenticated participant is the same as the participant whose data is
        # being requested
        logger.warning(
            "user %s tried to access view model for %s", request.user.participant, pgr)
        raise PermissionDenied("Access denied.")
    view_model = get_view_model_dict(pgr, experiment=pgr.group.experiment)
    return JsonResponse(dumps({'success': True, 'view_model_json': view_model}))
Exemple #4
0
 def to_json(self):
     (hours_left, minutes_left) = get_time_remaining()
     participant_group_relationship = self.participant_group_relationship
     own_group = participant_group_relationship.group
     group_scores = self.group_scores
     group_activity = GroupActivity(participant_group_relationship)
     return dumps({
         'activities': self.activities,
         'quizCompleted': participant_group_relationship.survey_completed,
         'hasLeaderboard': True,
         'participantGroupId': participant_group_relationship.pk,
         'groupData': group_scores.get_group_data_list(),
         'hoursLeft': hours_left,
         'minutesLeft': minutes_left,
         'firstVisit': participant_group_relationship.first_visit,
         'averagePoints': group_scores.average_daily_points(own_group),
         'pointsToNextLevel': group_scores.get_points_goal(own_group),
         'groupActivity': group_activity.all_activities,
         'groupName': own_group.name,
         'totalPoints': group_scores.total_participant_points,
         'surveyUrl': self.round_configuration.make_survey_url(pid=participant_group_relationship.pk),
     })
Exemple #5
0
def participate(request, experiment_id=None):
    user = request.user
    if not is_participant(user):
        logger.warning(
            "%s trying to participate in experiment %s", user, experiment_id)
        messages.warning(
            request, "You are not a participant and cannot participate in experiment %s." % experiment_id)
        return redirect('core:dashboard')
    participant = user.participant
    experiment = get_object_or_404(Experiment, pk=experiment_id,
                                   experiment_metadata=get_lighterprints_experiment_metadata())
    if experiment.is_active:
        round_configuration = experiment.current_round
        pgr = get_object_or_404(ParticipantGroupRelationship.objects.select_related('participant__user', 'group'),
                                participant=participant, group__experiment=experiment)
        treatment_type = get_treatment_type(experiment).string_value
        if treatment_type == 'HIGH_SCHOOL':
            view_model = HighSchoolViewModel(
                pgr, experiment=experiment, round_configuration=round_configuration)
            return render(request, view_model.template_name, {
                'experiment': experiment,
                'participant_group_relationship': pgr,
                'view_model_json': view_model.to_json(),
            })

        all_activities = Activity.objects.all()
        view_model = get_view_model_dict(pgr, activities=all_activities, experiment=experiment,
                                         round_configuration=round_configuration)
        return render(request, 'lighterprints/participate.html', {
            'experiment': experiment,
            'participant_group_relationship': pgr,
            'has_leaderboard': treatment_type == 'LEADERBOARD',
            'view_model_json': dumps(view_model),
        })
    else:
        sd = experiment.start_date
        upcoming = sd > datetime.now().date() if sd is not None else False
        return render(request, 'lighterprints/inactive.html', {'experiment': experiment, 'upcoming': upcoming})
Exemple #6
0
 def to_json(self):
     return dumps(self.to_dict())
Exemple #7
0
 def to_json(self):
     return dumps(self.to_dict())