def add_coworker(): user_data_coach = request.request_user_data("coach_email") user_data_coworker = request.request_user_data("coworker_email") if user_data_coach and user_data_coworker: if not user_data_coworker.key_email in user_data_coach.coworkers: user_data_coach.coworkers.append(user_data_coworker.key_email) user_data_coach.put() if not user_data_coach.key_email in user_data_coworker.coworkers: user_data_coworker.coworkers.append(user_data_coach.key_email) user_data_coworker.put() return True
def remove_coworker(): user_data_coach = request.request_user_data("coach_email") user_data_coworker = request.request_user_data("coworker_email") if user_data_coach and user_data_coworker: if user_data_coworker.key_email in user_data_coach.coworkers: user_data_coach.coworkers.remove(user_data_coworker.key_email) user_data_coach.put() if user_data_coach.key_email in user_data_coworker.coworkers: user_data_coworker.coworkers.remove(user_data_coach.key_email) user_data_coworker.put() return True
def get_user_data_coach_from_request(): user_data_coach = models.UserData.current() user_data_override = request.request_user_data("coach_email") if user_data_coach.developer and user_data_override: user_data_coach = user_data_override return user_data_coach
def create_user_goal(): user_data = models.UserData.current() if not user_data: return api_invalid_param_response("User is not logged in.") user_override = request.request_user_data("email") if user_data.developer and user_override and user_override.key_email != user_data.key_email: user_data = user_override json = request.json title = json.get('title') if not title: return api_invalid_param_response('Title is invalid.') objective_descriptors = [] goal_exercises = GoalList.exercises_in_current_goals(user_data) goal_videos = GoalList.videos_in_current_goals(user_data) if json: for obj in json['objectives']: if obj['type'] == 'GoalObjectiveAnyExerciseProficiency': objective_descriptors.append(obj) if obj['type'] == 'GoalObjectiveAnyVideo': objective_descriptors.append(obj) if obj['type'] == 'GoalObjectiveExerciseProficiency': obj['exercise'] = models.Exercise.get_by_name(obj['internal_id']) if not obj['exercise'] or not obj['exercise'].is_visible_to_current_user(): return api_invalid_param_response("Internal error: Could not find exercise.") if user_data.is_proficient_at(obj['exercise'].name): return api_invalid_param_response("Exercise has already been completed.") if obj['exercise'].name in goal_exercises: return api_invalid_param_response("Exercise is already an objective in a current goal.") objective_descriptors.append(obj) if obj['type'] == 'GoalObjectiveWatchVideo': obj['video'] = models.Video.get_for_readable_id(obj['internal_id']) if not obj['video']: return api_invalid_param_response("Internal error: Could not find video.") user_video = models.UserVideo.get_for_video_and_user_data(obj['video'], user_data) if user_video and user_video.completed: return api_invalid_param_response("Video has already been watched.") if obj['video'].readable_id in goal_videos: return api_invalid_param_response("Video is already an objective in a current goal.") objective_descriptors.append(obj) if objective_descriptors: objectives = GoalObjective.from_descriptors(objective_descriptors, user_data) goal = Goal(parent=user_data, title=title, objectives=objectives) user_data.save_goal(goal) return goal.get_visible_data(None) else: return api_invalid_param_response("No objectives specified.")
def add_developer(): user_data_developer = request.request_user_data("email") if not user_data_developer: return False user_data_developer.developer = True user_data_developer.put() return True
def remove_developer(): user_data_developer = request.request_user_data("email") if not user_data_developer: return False user_data_developer.developer = False user_data_developer.put() return True
def delete_user_goals(): user_data = models.UserData.current() if not user_data.developer: return api_unauthorized_response("UNAUTHORIZED") user_override = request.request_user_data("email") if user_override and user_override.key_email != user_data.key_email: user_data = user_override GoalList.delete_all_goals(user_data) return "Goals deleted"
def get_user_goals(): student = models.UserData.current() or models.UserData.pre_phantom() user_override = request.request_user_data("email") if user_override and user_override.key_email != student.key_email: if not user_override.is_visible_to(student): return api_unauthorized_response("Cannot view this profile") else: # Allow access to this student's profile student = user_override goals = GoalList.get_all_goals(student) return [g.get_visible_data() for g in goals]
def get_visible_user_data_from_request(disable_coach_visibility = False): user_data = models.UserData.current() if not user_data: return None if request.request_string("email"): user_data_student = request.request_user_data("email") if user_data_student and user_data_student.user_email == user_data.user_email: # if email in request is that of the current user, simply return the # current user_data, no need to check permission to view return user_data if user_data_student and (user_data.developer or (not disable_coach_visibility and user_data_student.is_coached_by(user_data))): return user_data_student else: return None else: return user_data
def get_visible_user_data_from_request(disable_coach_visibility=False): user_data = models.UserData.current() if not user_data: return None if request.request_string("email"): user_data_student = request.request_user_data("email") if user_data_student and user_data_student.user_email == user_data.user_email: # if email in request is that of the current user, simply return the # current user_data, no need to check permission to view return user_data if user_data_student and ( user_data.developer or (not disable_coach_visibility and user_data_student.is_coached_by(user_data))): return user_data_student else: return None else: return user_data