Exemplo n.º 1
0
    def prejoin_class(class_id, link):
        Class = DATABASE.get_class(class_id)
        if not Class or Class['link'] != link:
            return 'No such class', 404
        user = {}
        if request.cookies.get(cookie_name):
            token = DATABASE.get_token(request.cookies.get(cookie_name))
            if token:
                if token['username'] in Class.get('students', []):
                    return render_template(
                        'class-already-joined.html',
                        lang=requested_lang(),
                        auth=TRANSLATIONS.get_translations(
                            requested_lang(), 'Auth'),
                        menu=render_main_menu('my-profile'),
                        username=current_user(request)['username'],
                        current_page='my-profile',
                        class_info={'name': Class['name']})
                user = DATABASE.user_by_username(token['username'])

        return render_template(
            'class-prejoin.html',
            lang=requested_lang(),
            auth=TRANSLATIONS.get_translations(requested_lang(), 'Auth'),
            menu=render_main_menu('my-profile'),
            username=current_user(request)['username'],
            is_teacher=is_teacher(request),
            current_page='my-profile',
            class_info={
                'link':
                os.getenv('BASE_URL') + '/class/' + Class['id'] + '/join/' +
                Class['link'] + '?lang=' + requested_lang(),
                'name':
                Class['name']
            })
Exemplo n.º 2
0
    def get_class(user, class_id):
        if not is_teacher(request):
            return 'Only teachers can retrieve classes', 403
        Class = DATABASE.get_class(class_id)
        if not Class or Class['teacher'] != user['username']:
            return 'No such class', 404
        students = []
        for student_username in Class.get('students', []):
            student = DATABASE.user_by_username(student_username)
            programs = DATABASE.programs_for_user(student_username)
            highest_level = max(
                program['level']
                for program in programs) if len(programs) else 0
            sorted_public_programs = list(
                sorted(
                    [program for program in programs if program.get('public')],
                    key=lambda p: p['date']))
            if sorted_public_programs:
                latest_shared = sorted_public_programs[-1]
                latest_shared['link'] = os.getenv(
                    'BASE_URL') + f"/hedy/{latest_shared['id']}/view"
            else:
                latest_shared = None
            students.append({
                'username':
                student_username,
                'last_login':
                utils.mstoisostring(student['last_login']),
                'programs':
                len(programs),
                'highest_level':
                highest_level,
                'latest_shared':
                latest_shared
            })

        if utils.is_testing_request(request):
            return jsonify({
                'students': students,
                'link': Class['link'],
                'name': Class['name'],
                'id': Class['id']
            })
        return render_template(
            'class-overview.html',
            lang=requested_lang(),
            auth=TRANSLATIONS.get_translations(requested_lang(), 'Auth'),
            menu=render_main_menu('my-profile'),
            username=current_user(request)['username'],
            is_teacher=is_teacher(request),
            current_page='my-profile',
            class_info={
                'students': students,
                'link': os.getenv('BASE_URL') + '/hedy/l/' + Class['link'],
                'name': Class['name'],
                'id': Class['id']
            })
Exemplo n.º 3
0
 def resolve_class_link(link_id):
     Class = DATABASE.resolve_class_link(link_id)
     if not Class:
         return utils.page_404(
             TRANSLATIONS, render_main_menu('my-profile'),
             current_user(request)['username'], requested_lang(),
             TRANSLATIONS.get_translations(requested_lang(),
                                           'ui').get('invalid_class_link'))
     return redirect(request.url.replace(
         '/hedy/l/' + link_id,
         '/class/' + Class['id'] + '/prejoin/' + link_id),
                     code=302)
Exemplo n.º 4
0
    def join_class(user, class_id, link):
        Class = DATABASE.get_class(class_id)
        if not Class or Class['link'] != link:
            return utils.page_404(
                TRANSLATIONS, render_main_menu('my-profile'),
                current_user(request)['username'], requested_lang(),
                TRANSLATIONS.get_translations(requested_lang(),
                                              'ui').get('invalid_class_link'))

        DATABASE.add_student_to_class(Class['id'], user['username'])

        return redirect(request.url.replace(
            '/class/' + class_id + '/join/' + link, '/my-profile'),
                        code=302)