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'}))
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, })
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}))
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), })
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})
def to_json(self): return dumps(self.to_dict())