Exemplo n.º 1
0
    def post(self):
        greeting = Greeting()

        if util.get_current_user():
            greeting.author = util.get_current_user()

        greeting.content = self.request.get('content')
        greeting.put()
        self.redirect('/')
Exemplo n.º 2
0
 def current_user_points(self):
     user_video = UserVideo.get_for_video_and_user(self,
                                                   util.get_current_user())
     if user_video:
         return points.VideoPointCalculator(user_video)
     else:
         return 0
Exemplo n.º 3
0
 def get(self):
     user = util.get_current_user()
     coach_email = "Not signed in. Please sign in to see your Coach ID."
     if user:
         coach_email = user.email()
         
     self.render_template('about/faq.html', {"selected_id": "faq", "approx_vid_count": consts.APPROX_VID_COUNT, "coach_email": coach_email})
Exemplo n.º 4
0
    def post(self):

        user = util.get_current_user()

        if not user:
            self.redirect(util.create_login_url(self.request.uri))
            return

        if not is_honeypot_empty(self.request):
            # Honeypot caught a spammer (in case this is ever public or spammers
            # have google accounts)!
            return

        question_text = self.request.get("question_text")
        video_key = self.request.get("video_key")
        playlist_key = self.request.get("playlist_key")
        video = db.get(video_key)

        if question_text and video:
            if len(question_text) > 500:
                question_text = question_text[0:500] # max question length, also limited by client

            question = models_discussion.Feedback()
            question.author = user
            question.content = question_text
            question.targets = [video.key()]
            question.types = [models_discussion.FeedbackType.Question]
            db.put(question)

        self.redirect("/discussion/pagequestions?video_key=%s&playlist_key=%s&page=0" % (video_key, playlist_key))
Exemplo n.º 5
0
    def render_template(self, template_name, template_values):
        template_values['App'] = App
        template_values['None'] = None
        template_values['points'] = None
        template_values['username'] = ""

        user = util.get_current_user()
        if user is not None:
            template_values['username'] = user.nickname()

        user_data = UserData.get_for(user)

        template_values['user_data'] = user_data
        template_values['points'] = user_data.points if user_data else 0

        if not template_values.has_key('continue'):
            template_values['continue'] = self.request.uri

        # Always insert a post-login request before our continue url
        template_values['continue'] = util.create_post_login_url(template_values['continue'])

        template_values['login_url'] = ('%s&direct=1' % util.create_login_url(template_values['continue']))
        template_values['logout_url'] = util.create_logout_url(self.request.uri)

        template_values['is_mobile'] = self.is_mobile()

        path = os.path.join(os.path.dirname(__file__), template_name)
        self.response.out.write(template.render(path, template_values))
Exemplo n.º 6
0
def signature(target=None, verb=None):
    return {
                "target": target, 
                "verb": verb, 
                "is_mod": is_current_user_moderator(),
                "is_author": target and target.author == util.get_current_user()
            }
Exemplo n.º 7
0
    def get_profile_target_and_user_data(self):
        student = None
        user_data_student = None

        user = util.get_current_user()
        if user:
            student = user

            student_email = self.request_string("student_email")
            if student_email and student_email != student.email():
                student_override = users.User(email=student_email)
                user_data_student = models.UserData.get_or_insert_for(
                    student_override)
                if (not users.is_current_user_admin()) and user.email(
                ) not in user_data_student.coaches and user.email().lower(
                ) not in user_data_student.coaches:
                    # If current user isn't an admin or student's coach, they can't look at anything other than their own profile.
                    user_data_student = None
                else:
                    # Allow access to this student's profile
                    student = student_override

            if not user_data_student:
                user_data_student = models.UserData.get_or_insert_for(student)

        return (student, user_data_student)
Exemplo n.º 8
0
def signature(target=None, verb=None):
    return {
        "target": target,
        "verb": verb,
        "is_mod": is_current_user_moderator(),
        "is_author": target and target.author == util.get_current_user()
    }
Exemplo n.º 9
0
    def post(self):

        user = util.get_current_user()

        if not user:
            self.redirect(util.create_login_url(self.request.uri))
            return

        if not is_honeypot_empty(self.request):
            # Honeypot caught a spammer (in case this is ever public or spammers
            # have google accounts)!
            return

        comment_text = self.request.get("comment_text")
        comments_hidden = self.request.get("comments_hidden")
        video_key = self.request.get("video_key")
        playlist_key = self.request.get("playlist_key")
        video = db.get(video_key)

        if comment_text and video:
            if len(comment_text) > 300:
                comment_text = comment_text[0:300] # max comment length, also limited by client

            comment = models_discussion.Feedback()
            comment.author = user
            comment.content = comment_text
            comment.targets = [video.key()]
            comment.types = [models_discussion.FeedbackType.Comment]
            db.put(comment)

        self.redirect("/discussion/pagecomments?video_key=%s&playlist_key=%s&page=0&comments_hidden=%s" % (video_key, playlist_key, comments_hidden))
Exemplo n.º 10
0
def video_comments_context(video, playlist, page=0, comments_hidden=True):

    if page > 0:
        comments_hidden = False # Never hide questions if specifying specific page
    else:
        page = 1

    limit_per_page = 10
    limit_initially_visible = 3 if comments_hidden else limit_per_page

    comments_query = models_discussion.Feedback.gql("WHERE types = :1 AND targets = :2 AND deleted = :3 ORDER BY date DESC", models_discussion.FeedbackType.Comment, video.key(), False)
    count_total = comments_query.count()
    comments = comments_query.fetch(limit_per_page, (page - 1) * limit_per_page)

    count_page = len(comments)
    pages_total = max(1, ((count_total - 1) / limit_per_page) + 1)
    return {
            "user": util.get_current_user(),
            "is_mod": is_current_user_moderator(),
            "video": video,
            "playlist": playlist,
            "comments": comments,
            "count_total": count_total,
            "comments_hidden": count_page > limit_initially_visible,
            "limit_initially_visible": limit_initially_visible,
            "pages": range(1, pages_total + 1),
            "pages_total": pages_total,
            "prev_page_1_based": page - 1,
            "current_page_1_based": page,
            "next_page_1_based": page + 1,
            "show_page_controls": pages_total > 1,
            "login_url": util.create_login_url("/video?v=%s" % video.youtube_id)
           }
Exemplo n.º 11
0
 def get_for_current_user():
     user = util.get_current_user()
     if user is not None:
         user_data = UserData.get_for(user)
         if user_data is not None:
             return user_data
     return UserData()
Exemplo n.º 12
0
def get_user_badges(user = None):

    if not user:
        user = util.get_current_user()

    user_badges = []
    user_badges_dict = {}

    if user:
        user_badges = models_badges.UserBadge.get_for(user)
        badges_dict = all_badges_dict()
        user_badge_last = None
        for user_badge in user_badges:
            if user_badge_last and user_badge_last.badge_name == user_badge.badge_name:
                user_badge_last.count += 1
                if user_badge_last.count > 1:
                    user_badge_last.list_context_names_hidden.append(user_badge.target_context_name)
                else:
                    user_badge_last.list_context_names.append(user_badge.target_context_name)
            else:
                user_badge.badge = badges_dict.get(user_badge.badge_name)
                user_badge.count = 1
                user_badge.list_context_names = [user_badge.target_context_name]
                user_badge.list_context_names_hidden = []
                user_badge_last = user_badge
                user_badges_dict[user_badge.badge_name] = True

    possible_badges = all_badges()
    for badge in possible_badges:
        badge.is_owned = user_badges_dict.has_key(badge.name)

    user_badges = sorted(filter(lambda user_badge: hasattr(user_badge, "badge") and user_badge.badge is not None, user_badges), reverse=True, key=lambda user_badge:user_badge.date)
    possible_badges = sorted(possible_badges, key=lambda badge:badge.badge_category)

    user_badges_normal = filter(lambda user_badge: user_badge.badge.badge_category != badges.BadgeCategory.MASTER, user_badges)
    user_badges_master = filter(lambda user_badge: user_badge.badge.badge_category == badges.BadgeCategory.MASTER, user_badges)
    user_badges_diamond = filter(lambda user_badge: user_badge.badge.badge_category == badges.BadgeCategory.DIAMOND, user_badges)
    user_badges_platinum = filter(lambda user_badge: user_badge.badge.badge_category == badges.BadgeCategory.PLATINUM, user_badges)
    user_badges_gold = filter(lambda user_badge: user_badge.badge.badge_category == badges.BadgeCategory.GOLD, user_badges)
    user_badges_silver = filter(lambda user_badge: user_badge.badge.badge_category == badges.BadgeCategory.SILVER, user_badges)
    user_badges_bronze = filter(lambda user_badge: user_badge.badge.badge_category == badges.BadgeCategory.BRONZE, user_badges)    

    bronze_badges = sorted(filter(lambda badge:badge.badge_category == badges.BadgeCategory.BRONZE, possible_badges), key=lambda badge:badge.points or sys.maxint)
    silver_badges = sorted(filter(lambda badge:badge.badge_category == badges.BadgeCategory.SILVER, possible_badges), key=lambda badge:badge.points or sys.maxint)
    gold_badges = sorted(filter(lambda badge:badge.badge_category == badges.BadgeCategory.GOLD, possible_badges), key=lambda badge:badge.points or sys.maxint)
    platinum_badges = sorted(filter(lambda badge:badge.badge_category == badges.BadgeCategory.PLATINUM, possible_badges), key=lambda badge:badge.points or sys.maxint)
    diamond_badges = sorted(filter(lambda badge:badge.badge_category == badges.BadgeCategory.DIAMOND, possible_badges), key=lambda badge:badge.points or sys.maxint)
    master_badges = sorted(filter(lambda badge:badge.badge_category == badges.BadgeCategory.MASTER, possible_badges), key=lambda badge:badge.points or sys.maxint)
    
    
    return { 'possible_badges': possible_badges, 
             'user_badges': user_badges, 
             'user_badges_normal': user_badges_normal, 
             'user_badges_master': user_badges_master,
             "badge_collections": [bronze_badges, silver_badges, gold_badges, platinum_badges, diamond_badges, master_badges],
             'bronze_badges': user_badges_bronze,
             'silver_badges': user_badges_silver,
             'gold_badges': user_badges_gold,
             'platinum_badges': user_badges_platinum,
             'diamond_badges': user_badges_diamond, }
Exemplo n.º 13
0
def clear_question_answers_for_current_user(s_question_id):

    user = util.get_current_user()
    if not user:
        return

    question_id = -1
    try:
        question_id = int(s_question_id)
    except:
        return

    if question_id < 0:
        return

    question = models_discussion.Feedback.get_by_id(question_id)
    if not question:
        return;

    user_data = models.UserData.get_or_insert_for(user)

    feedback_keys = question.children_keys()
    for key in feedback_keys:
        notifications = models_discussion.FeedbackNotification.gql("WHERE user = :1 AND feedback = :2", user, key)
        if notifications.count():
            db.delete(notifications)

    user_data.count_feedback_notification = -1
    user_data.put()
Exemplo n.º 14
0
def empty_class_instructions(class_is_empty=True):
    user = util.get_current_user()
    coach_email = "Not signed in. Please sign in to see your Coach ID."
    if user:
        coach_email = user.email()
            
    return {'App': App, 'class_is_empty': class_is_empty, 'coach_email': coach_email }
Exemplo n.º 15
0
 def get(self):
     user = util.get_current_user()
     if user:
         question_key = self.request.get('question_key')
         self.redirect('/answerquestion?question_key=' + question_key + '&preview_mode=True')
     else:
         self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 16
0
    def post(self):
        user = util.get_current_user()

        if user is None:
            self.redirect(util.create_login_url(self.request.uri))
            return

        user_data = UserData.get_or_insert_for(user)

        coach_email = self.request_string("coach", default="")
        if coach_email:
            coach_user = users.User(coach_email)
            coach_user_data = UserData.get_for(coach_user)

            if coach_user_data:

                if coach_email not in user_data.coaches and coach_email.lower(
                ) not in user_data.coaches:
                    user_data.coaches.append(coach_email)
                    user_data.put()

                self.redirect("/coaches")
                return

        self.redirect("/coaches?invalid_coach=1")
Exemplo n.º 17
0
    def get(self):
        user = util.get_current_user()

        # This if/then clause just makes sure that the user is logged in

        if user:
            question_key = self.request.get('question_key')
            if question_key:
                question = db.get(question_key)
                bc = breadcrumb(question.subject)
                root = Subject.gql('WHERE parent_subject=:1', None).get()
                subjects = Subject.gql('WHERE parent_subject = :1', root)
                greeting = 'user: %s [<a href="%s">sign out</a>]' % (user.nickname(), users.create_logout_url('/'))

                template_values = {
                    'question': question,
                    'subjects': subjects,
                    'greeting': greeting,
                    'current_url': self.request.uri,
                    'breadcrumb': bc,
                    }
                path = os.path.join(os.path.dirname(__file__), 'viewquestion.html')
                self.response.out.write(template.render(path, template_values))
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 18
0
 def get_for_current_user():
     user = util.get_current_user()
     if user is not None:
         user_data = UserData.get_for(user)
         if user_data is not None:
             return user_data
     return UserData()
Exemplo n.º 19
0
    def get_profile_target_and_user_data(self):
        student = None
        user_data_student = None

        user = util.get_current_user()
        if user:
            student = user

            student_email = self.request_string("student_email")
            if student_email and student_email != student.email():
                student_override = users.User(email=student_email)
                user_data_student = models.UserData.get_or_insert_for(student_override)
                if (
                    (not users.is_current_user_admin())
                    and user.email() not in user_data_student.coaches
                    and user.email().lower() not in user_data_student.coaches
                ):
                    # If current user isn't an admin or student's coach, they can't look at anything other than their own profile.
                    user_data_student = None
                else:
                    # Allow access to this student's profile
                    student = student_override

            if not user_data_student:
                user_data_student = models.UserData.get_or_insert_for(student)

        return (student, user_data_student)
Exemplo n.º 20
0
    def post(self):

        user = util.get_current_user()
        if not user:
            return

        key = self.request.get("entity_key")
        playlist_key = self.request.get("playlist_key")
        text = self.request.get("question_text") or self.request.get("answer_text")

        if key and text:
            feedback = db.get(key)
            if feedback:
                if is_current_user_moderator() or feedback.author == user:

                    feedback.content = text
                    db.put(feedback)

                    # Redirect to appropriate list of entities depending on type of 
                    # feedback entity being edited.
                    if feedback.is_type(models_discussion.FeedbackType.Question):

                        page = self.request.get("page")
                        video = feedback.first_target()
                        self.redirect("/discussion/pagequestions?video_key=%s&playlist_key=%s&page=%s&qa_expand_id=%s" % 
                                        (video.key(), playlist_key, page, feedback.key().id()))

                    elif feedback.is_type(models_discussion.FeedbackType.Answer):

                        question = feedback.parent()
                        self.redirect("/discussion/answers?question_key=%s" % question.key())
Exemplo n.º 21
0
    def post(self):
        user = util.get_current_user()
        if user:
            expanded = self.request_bool("expanded")

            user_data = UserData.get_or_insert_for(user)
            user_data.expanded_all_exercises = expanded
            user_data.put()
Exemplo n.º 22
0
    def post(self):
        user = util.get_current_user()
        if user:
            expanded = self.request_bool("expanded")

            user_data = UserData.get_or_insert_for(user)
            user_data.expanded_all_exercises = expanded
            user_data.put() 
Exemplo n.º 23
0
    def get(self):
        user = util.get_current_user()
        if user:
            coach = user

            coach_email = self.request_string("coach_email")
            if users.is_current_user_admin() and coach_email:
                # Site administrators can look at any class profile
                coach = users.User(email=coach_email)

            user_data_coach = models.UserData.get_or_insert_for(coach)
            students_data = user_data_coach.get_students_data()

            class_points = 0
            if students_data:
                class_points = reduce(lambda a,b: a + b, map(lambda student_data: student_data.points, students_data))

            dict_students = map(lambda student_data: { 
                "email": student_data.user.email(),
                "nickname": util.get_nickname_for(student_data.user),
            }, students_data)

            selected_graph_type = self.request_string("selected_graph_type") or ClassProgressReportGraph.GRAPH_TYPE
            initial_graph_url = "/profile/graph/%s?coach_email=%s&%s" % (selected_graph_type, urllib.quote(coach.email()), urllib.unquote(self.request_string("graph_query_params", default="")))

            # Sort students alphabetically and sort into 4 chunked up columns for easy table html
            dict_students_sorted = sorted(dict_students, key=lambda dict_student:dict_student["nickname"])
            students_per_row = 4
            students_per_col = max(1, len(dict_students_sorted) / students_per_row)
            list_cols = [[], [], [], []]
            list_students_columnized = []

            for ix in range(0, len(dict_students_sorted)):
                dict_student = dict_students_sorted[ix]
                list_cols[(ix / students_per_col) % students_per_row].append(dict_student)

            for ix in range(0, len(dict_students_sorted)):
                dict_student = list_cols[ix % students_per_row][(ix / students_per_row) % students_per_col]
                list_students_columnized.append(dict_student)

            template_values = {
                    'coach': coach,
                    'coach_email': coach.email(),
                    'coach_nickname': util.get_nickname_for(coach),
                    'dict_students': dict_students,
                    'students_per_row': students_per_row,
                    'list_students_columnized': list_students_columnized,
                    'count_students': len(dict_students),
                    'class_points': class_points,
                    'selected_graph_type': selected_graph_type,
                    'initial_graph_url': initial_graph_url,
                    'exercises': models.Exercise.get_all_use_cache(),
                    'is_profile_empty': len(dict_students) <= 0,
                    'selected_nav_link': 'coach',
                    }
            self.render_template('viewclassprofile.html', template_values)
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 24
0
    def get(self):
        user = util.get_current_user()
        if user:
            user_data = UserData.get_or_insert_for(user)
            invalid_coach = self.request_bool("invalid_coach", default = False)

            self.render_template('viewcoaches.html', { 'coaches': user_data.coaches, 'invalid_coach': invalid_coach })
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 25
0
    def post(self):
        user = util.get_current_user()
        if user:
            lat = self.request_float("lat")
            lng = self.request_float("lng")
            zoom = self.request_int("zoom")

            user_data = UserData.get_or_insert_for(user)
            user_data.map_coords = serializeMapCoords(lat, lng, zoom)
            user_data.put()
Exemplo n.º 26
0
    def post(self):
        user = util.get_current_user()
        if user is None:
            self.redirect(util.create_login_url(self.request.uri))
            return

        user_data = UserData.get_or_insert_for(user)
        coach_email = self.request.get('coach').lower()
        user_data.coaches.append(coach_email)
        user_data.put()
        self.redirect("/coaches")
Exemplo n.º 27
0
    def post(self):
        user = util.get_current_user()
        if user is None:
            self.redirect(util.create_login_url(self.request.uri))
            return

        user_data = UserData.get_or_insert_for(user)
        coach_email = self.request.get('coach').lower()            
        user_data.coaches.append(coach_email)
        user_data.put()
        self.redirect("/coaches")
Exemplo n.º 28
0
 def get(self):
     user = util.get_current_user()
     question_key = self.request.get('question_key')
     question = db.get(question_key)
     redirect_url = self.request.get('redirect')
     if user:
         if user == question.author:
             question.delete()
         self.redirect(redirect_url)
     else:
         self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 29
0
def video_qa_context(video, playlist=None, page=0, qa_expand_id=None):

    limit_per_page = 5

    if qa_expand_id:
        # If we're showing an initially expanded question,
        # make sure we're on the correct page
        question = models_discussion.Feedback.get_by_id(qa_expand_id)
        if question:
            question_preceding_query = models_discussion.Feedback.gql("WHERE types = :1 AND targets = :2 AND deleted = :3 AND date > :4 ORDER BY date DESC", models_discussion.FeedbackType.Question, video.key(), False, question.date)
            count_preceding = question_preceding_query.count()
            page = 1 + (count_preceding / limit_per_page)

    if page <= 0:
        page = 1

    question_query = models_discussion.Feedback.gql("WHERE types = :1 AND targets = :2 AND deleted = :3 ORDER BY date DESC", models_discussion.FeedbackType.Question, video.key(), False)
    answer_query = models_discussion.Feedback.gql("WHERE types = :1 AND targets = :2 AND deleted = :3 ORDER BY date", models_discussion.FeedbackType.Answer, video.key(), False)

    count_total = question_query.count()
    questions = question_query.fetch(limit_per_page, (page - 1) * limit_per_page)

    dict_questions = {}
    # Store each question in this page in a dict for answer population
    for question in questions:
        dict_questions[question.key()] = question

    # Just grab all answers for this video and cache in page's questions
    for answer in answer_query:
        # Grab the key only for each answer, don't run a full gql query on the ReferenceProperty
        question_key = answer.parent_key()
        if (dict_questions.has_key(question_key)):
            question = dict_questions[question_key]
            question.children_cache.append(answer)

    count_page = len(questions)
    pages_total = max(1, ((count_total - 1) / limit_per_page) + 1)
    return {
            "user": util.get_current_user(),
            "is_mod": is_current_user_moderator(),
            "video": video,
            "playlist": playlist,
            "questions": questions,
            "count_total": count_total,
            "pages": range(1, pages_total + 1),
            "pages_total": pages_total,
            "prev_page_1_based": page - 1,
            "current_page_1_based": page,
            "next_page_1_based": page + 1,
            "show_page_controls": pages_total > 1,
            "qa_expand_id": qa_expand_id,
            "issue_labels": ('Component-Videos,Video-%s' % video.youtube_id),
            "login_url": util.create_login_url("/video?v=%s" % video.youtube_id)
           }
Exemplo n.º 30
0
    def get(self):
        user = util.get_current_user()
        if user:
            user_data = UserData.get_or_insert_for(user)
            invalid_coach = self.request_bool("invalid_coach", default=False)

            self.render_template('viewcoaches.html', {
                'coaches': user_data.coaches,
                'invalid_coach': invalid_coach
            })
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 31
0
 def get(self):
     user = util.get_current_user()
     if user:
         subject_key = self.request.get('subject_key')
         if subject_key:
             subject = db.get(subject_key)
             html_tree = htmlChildren(subject)
             template_values = {'subject': subject, 'tree': html_tree}
             path = os.path.join(os.path.dirname(__file__), 'viewsubject.html')
             self.response.out.write(template.render(path, template_values))
     else:
         self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 32
0
    def get(self):
        user = util.get_current_user()
        coach_email = "Not signed in. Please sign in to see your Coach ID."
        if user:
            coach_email = user.email()

        self.render_template(
            'about/faq.html', {
                "selected_id": "faq",
                "approx_vid_count": consts.APPROX_VID_COUNT,
                "coach_email": coach_email
            })
Exemplo n.º 33
0
    def get(self):
        if not users.is_current_user_admin():
            self.redirect(users.create_login_url(self.request.uri))
            return

        user = util.get_current_user()
        query = models.Exercise.all().order('name')
        exercises = query.fetch(1000)

        template_values = {'App' : App, 'exercises': exercises}

        self.render_template('exerciseadmin.html', template_values)
Exemplo n.º 34
0
    def get(self):  
        user = util.get_current_user()
        user_data = UserData.get_for_current_user()
        template_values = qa.add_template_values({'App': App,
                                                  'points': user_data.points,
                                                  'username': user and user.nickname() or "",
                                                  'login_url': util.create_login_url(self.request.uri),
                                                  'student_email' : self.request.get('student_email'),
                                                  }, 
                                                  self.request)

        self.render_template('import.html', template_values)
Exemplo n.º 35
0
    def get(self):
        if not users.is_current_user_admin():
            self.redirect(users.create_login_url(self.request.uri))
            return

        user = util.get_current_user()
        query = models.Exercise.all().order('name')
        exercises = query.fetch(1000)

        template_values = {'App': App, 'exercises': exercises}

        self.render_template('exerciseadmin.html', template_values)
Exemplo n.º 36
0
    def get(self):
        user = util.get_current_user()
        user_data = UserData.get_for_current_user()
        template_values = qa.add_template_values(
            {
                'App': App,
                'points': user_data.points,
                'username': user and user.nickname() or "",
                'login_url': util.create_login_url(self.request.uri),
                'student_email': self.request.get('student_email'),
            }, self.request)

        self.render_template('import.html', template_values)
Exemplo n.º 37
0
    def get(self):
        user = util.get_current_user()
        if user:
            student = user
            user_data_student = None

            student_email = self.request_string("student_email")
            if student_email and student_email != student.email():
                student_override = users.User(email=student_email)
                user_data_student = models.UserData.get_or_insert_for(student_override)
                if (not users.is_current_user_admin()) and user.email() not in user_data_student.coaches and user.email().lower() not in user_data_student.coaches:
                    # If current user isn't an admin or student's coach, they can't look at anything other than their own profile.
                    self.redirect("/profile")
                else:
                    # Allow access to this student's profile
                    student = student_override

            if not user_data_student:
                user_data_student = models.UserData.get_or_insert_for(student)

            user_badges = util_badges.get_user_badges(student)

            selected_graph_type = self.request_string("selected_graph_type") or ActivityGraph.GRAPH_TYPE
            initial_graph_url = "/profile/graph/%s?student_email=%s&%s" % (selected_graph_type, urllib.quote(student.email()), urllib.unquote(self.request_string("graph_query_params", default="")))
            tz_offset = self.request_int("tz_offset", default=0)

            template_values = {
                'student': student,
                'student_nickname': util.get_nickname_for(student),
                'selected_graph_type': selected_graph_type,
                'initial_graph_url': initial_graph_url,
                'tz_offset': tz_offset,
                'student_points': user_data_student.points,
                'count_videos': models.Setting.count_videos(),
                'count_videos_completed': user_data_student.get_videos_completed(),
                'count_exercises': models.Exercise.get_count(),
                'count_exercises_proficient': len(user_data_student.all_proficient_exercises),
                'badge_collections': user_badges['badge_collections'],
                'user_badges_bronze': user_badges['bronze_badges'],
                'user_badges_silver': user_badges['silver_badges'],
                'user_badges_gold': user_badges['gold_badges'],
                'user_badges_platinum': user_badges['platinum_badges'],
                'user_badges_diamond': user_badges['diamond_badges'],
                'user_badges_master': user_badges['user_badges_master'],
                'user_badges': [user_badges['bronze_badges'], user_badges['silver_badges'], user_badges['gold_badges'], user_badges['platinum_badges'], user_badges['diamond_badges'],user_badges['user_badges_master']],
                "show_badge_frequencies": self.request_bool("show_badge_frequencies", default=False),
            }

            self.render_template('viewprofile.html', template_values)
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 38
0
    def post(self):
        user = util.get_current_user()
        if user:
            try:
                lat = self.request_float("lat")
                lng = self.request_float("lng")
                zoom = self.request_int("zoom")
            except ValueError:
                # If any of the above values aren't present in request, don't try to save.
                return

            user_data = UserData.get_or_insert_for(user)
            user_data.map_coords = serializeMapCoords(lat, lng, zoom)
            user_data.put()
Exemplo n.º 39
0
    def post(self):

        user = util.get_current_user()
        if not user:
            return

        key = self.request.get("entity_key")
        if key:
            entity = db.get(key)
            if entity:
                # Must be a moderator or author of entity to delete
                if is_current_user_moderator() or entity.author == user:
                    entity.deleted = True
                    db.put(entity)
Exemplo n.º 40
0
    def post(self):
        user = util.get_current_user()
        if user:
            try:
                lat = self.request_float("lat")
                lng = self.request_float("lng")
                zoom = self.request_int("zoom")
            except ValueError:
                # If any of the above values aren't present in request, don't try to save.
                return

            user_data = UserData.get_or_insert_for(user)
            user_data.map_coords = serializeMapCoords(lat, lng, zoom)
            user_data.put()
Exemplo n.º 41
0
    def get(self):  
        user = util.get_current_user()
        user_data = UserData.get_for_current_user()
        logout_url = users.create_logout_url(self.request.uri)
        template_values = qa.add_template_values({'App': App,
                                                  'points': user_data.points,
                                                  'username': user and user.nickname() or "",
                                                  'login_url': util.create_login_url(self.request.uri),
                                                  'student_email' : self.request.get('student_email'),
                                                  'logout_url': logout_url}, 
                                                  self.request)

        path = os.path.join(os.path.dirname(__file__), 'import.html')
        self.response.out.write(template.render(path, template_values)) 
Exemplo n.º 42
0
 def get(self):
     user = util.get_current_user()
     if user is None:
         self.redirect(util.create_login_url(self.request.uri))
         return
     user_data = UserData.get_or_insert_for(user)
     coach_email = self.request.get('coach')
     if coach_email:
         if coach_email in user_data.coaches:
             user_data.coaches.remove(coach_email)
             user_data.put()
         elif coach_email.lower() in user_data.coaches:
             user_data.coaches.remove(coach_email.lower())
             user_data.put()
     self.redirect("/coaches")
Exemplo n.º 43
0
    def get(self):
        user = util.get_current_user()
        subject_key = self.request.get('subject_key')
        subject = db.get(subject_key)
        redirect_url = self.request.get('redirect')
        logging.error("current user = " + str(user))

        if user:
            if user == subject.author:
                subject = db.get(subject_key)
                self.delete_subject(subject)

            self.redirect(redirect_url)
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 44
0
    def get(self):
        user = util.get_current_user()
        question_key = self.request.get('question_key')
        question = db.get(question_key)
        redirect_url = self.request.get('redirect')
        if user:
            if user == question.author:
                if question.published:
                    question.published = None
                else:
                    question.published = True
                question.put()
#            self.redirect(redirect_url)
            self.redirect('/qbrary')
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 45
0
    def get(self):
        user = util.get_current_user()
        if user:
            user_data = UserData.get_or_insert_for(user)
            logout_url = users.create_logout_url(self.request.uri)

            template_values = {
                'App': App,
                'username': user.nickname(),
                'logout_url': logout_url,
                'coaches': user_data.coaches
            }

            self.render_template('viewcoaches.html', template_values)
        else:
            self.redirect(util.create_login_url(self.request.uri))
Exemplo n.º 46
0
    def get_profile_target_and_user_data(self):
        coach = None
        user_data_coach = None

        user = util.get_current_user()
        if user:
            coach = user

            coach_email = self.request_string("coach_email")
            if users.is_current_user_admin() and coach_email:
                # Site administrators can look at any class profile
                coach = users.User(email=coach_email)

            user_data_coach = models.UserData.get_or_insert_for(coach)

        return (coach, user_data_coach)