예제 #1
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_vtimetable():
    current_year = datetime.now().year
    recommend = []

    if session.get_account():
        try:
            analogue = LectureAnalogue.objects(
                campus_id=session.get_account().campus_id,
                student_id=session.get_account().student_id
            ).get()

            lectures1 = Lecture.objects(students__in=[session.get_account().student_id])
            lectures2 = Lecture.objects(students__in=[analogue.target])

            lectures1 = set([l.subject_code for l in lectures1])
            lectures2 = set([l.subject_code for l in lectures2])

            lectures = lectures2 - lectures1
            
            for lecture in lectures:
                try:
                    lecture = Lecture.objects(subject_code=lecture)[0]
                    recommend.append(lecture.subject_name)
                except:
                    pass
        except:
            pass

    return render_template('module/lecture/vtimetable.html', current_year=current_year, recommend=recommend)
예제 #2
0
파일: apis.py 프로젝트: qbx2/opencampus
def lecture_students(campus_id, year, term, code):
    try:
        lecture = Lecture.objects(campus_id=campus_id,
                                  year=year, term=Lecture.term_str_to_int(term), code=code).get()
    except Lecture.DoesNotExist:
        return jsonify({
            'error': {
                'code': 'lecture_not_exist'
            }
        }), 404

    request_data = request.get_json()
    student_id = request_data.get('student_id')

    # TODO
    """
    from opencampus.module.account.models import Account
    try:
        account = Account.objects(campus_id=request.campus.id, student_id=student_id).get()
    except Account.DoesNotExist:
        return jsonify({
            'error': {
                'code': 'account_not_found'
            }
        }), 404
    """

    #if account.id not in lecture.students:
    Lecture.objects(id=lecture.id).update_one(push__students=student_id)

    return jsonify({})
예제 #3
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_auth_admin_method_cb(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)
    from opencampus.module.lecture.authmodels import LectureAuthRequestInfo
    request_info = LectureAuthRequestInfo.objects(lecture_id=lecture.id, auth_code=request.args.get('auth_code')).get()
    request_info.delete()
    Lecture.objects(id=lecture.id).update_one(push__admins=request_info.account_id)
    return '인증 완료'
예제 #4
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_admin_administrators(year, term, code):
    from opencampus.module.account.models import Account
    lecture = Lecture.get_lecture(year, term, code)

    if request.method == 'POST':
        try:
            account = Account.objects(account_id=request.form.get('account_id')).get()
            if account.id not in lecture.admins:
                Lecture.objects(id=lecture.id).update_one(push__admins=account.id)
        except Account.DoesNotExist:
            pass

        lecture = Lecture.get_lecture(year, term, code)

    admins = [Account.objects(id=admin).get() for admin in lecture.admins]

    return render_template('module/lecture/detail/admin/administrators.html', year=year, term=term, code=code,
                           lecture=lecture, admins=admins)
예제 #5
0
파일: apis.py 프로젝트: qbx2/opencampus
def lecture_sync(campus_id, year, term, code):
    try:
        lecture = Lecture.objects(campus_id=campus_id,
                                  year=year, term=Lecture.term_str_to_int(term), code=code).get()
    except Lecture.DoesNotExist:
        return jsonify({
            'error': {
                'code': 'lecture_not_exist'
            }
        }), 404

    campus = Campus.objects(id=campus_id).get()
    campus.get_gateway().sync_lecture(
        year=lecture.year,
        term=lecture.term_int_to_str(lecture.term),
        code=lecture.code
    )

    return jsonify({})
예제 #6
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_my():
    if not session.get_account():
        return abort(403)

    lectures = []
    c_lectures = []
    year = -1
    term = -1

    for lecture in Lecture.objects(Q(students__in=[session.get_account().student_id]) | Q(admins__in=[session.get_account().id])).\
            order_by('-year', '-term'):
        if lecture.year != year or lecture.term != term:
            lectures.append(c_lectures)
            c_lectures = []
            year = lecture.year
            term = lecture.term
        c_lectures.append(lecture)
    lectures.append(c_lectures)

    lectures = lectures[1:]
    return render_template('module/lecture/my.html', lectures=lectures)
예제 #7
0
def load_student_ids(campus_id):
    page = 0

    student_ids = []

    while True:
        lectures = Lecture.objects(campus_id=campus_id).skip(20*page).limit(20)

        if len(lectures) < 1:
            break

        print('load page %s' % page)
        for lecture in lectures:
            for student in lecture.students:
                student_ids.append(student)

        page += 1

    student_ids = list(set(student_ids))
    student_ids.sort(reverse=True)

    return student_ids
예제 #8
0
파일: apis.py 프로젝트: qbx2/opencampus
def lecture_update(campus_id, year, term, code):
    try:
        lecture = Lecture.objects(campus_id=campus_id,
                                  year=year, term=Lecture.term_str_to_int(term), code=code).get()
    except Lecture.DoesNotExist:
        return jsonify({
            'error': {
                'code': 'lecture_not_exist'
            }
        }), 404
    request_data = request.get_json()

    lecture.type = request_data.get('type', lecture.type)
    lecture.subject_code = request_data.get('subject_code', lecture.subject_code)
    lecture.subject_name = request_data.get('subject_name', lecture.subject_name)
    lecture.credit = int(request_data.get('credit', lecture.credit))
    lecture.grade = int(request_data.get('grade', lecture.grade))
    lecture.departments = request_data.get('departments', lecture.departments)
    lecture.professors = request_data.get('professors', lecture.professors)
    lecture.tags = request_data.get('tags', lecture.tags)
    lecture.timetable_text = request_data.get('timetable_text', lecture.timetable_text)
    if request_data.get('timetable'):
        lecture.timetable = []
        for time in request_data.get('timetable'):
            lecture_time = LectureTime()
            if time.get('time'):
                lecture_time.start_time = time.get('time').get('start')
                lecture_time.end_time = time.get('time').get('end')
            if time.get('place'):
                lecture_time.place = time.get('place').get('name')
                lecture_time.room = time.get('place').get('room')

            lecture.timetable.append(lecture_time)

    lecture.email = request_data.get('email', lecture.email)
    lecture.phone = request_data.get('phone', lecture.phone)

    lecture.save()
    return jsonify({})
예제 #9
0
            campus_id=campus_id,
            student_id=student_id1
        )

    analogue_obj.point = analogue
    analogue_obj.target = student_id2
    analogue_obj.save()

    print('%s-%s %s' % (student_id1, student_id2, analogue))


campus_page = 0

while True:
    campuses = Campus.objects().skip(20*campus_page).limit(20)

    if len(campuses) < 1:
        break

    campus_page += 1

    for campus in campuses:
        campus_student_ids = load_student_ids(campus.id)

        for student_id1 in campus_student_ids:
            lecture1 = Lecture.objects(students__in=[student_id1], campus_id=campus.id)
            for student_id2 in campus_student_ids:
                lecture2 = Lecture.objects(students__in=[student_id2], campus_id=campus.id)

                check_data(campus.id, student_id1, lecture1, student_id2, lecture2)
예제 #10
0
def search(campus_id, query, page, size=24, year=None, term=None):
    from opencampus.module.lecture.models import Lecture
    results = []

    page -= 1

    if query == '':
        if not year or not term:
            query = Lecture.objects(campus_id=campus_id)
        else:
            query = Lecture.objects(campus_id=campus_id, year=year, term=term)

        for lecture in query.skip(page*size).limit(size):
            results.append({
                'year': lecture.year,
                'term_code': lecture.term,
                'term': lecture.get_term_text(),
                'code': lecture.code,
                'type': lecture.type,
                'subject_code': lecture.subject_code,
                'subject_name': lecture.subject_name,
                'credit': lecture.credit,
                'grade': lecture.grade,
                'departments': lecture.departments,
                'professors': lecture.professors,
                'tags': lecture.tags if lecture.tags else [],
                'term_str': Lecture.term_int_to_str(lecture.term)
            })
    else:
        es = Elasticsearch(hosts=app.config.get('ELASTICSEARCH_HOSTS'))

        search_body = {
            'from': page*size,
            'size': size,
            'sort': ['_score', {'year': 'desc'}, {'term_code': 'desc'}],
            'query': {
                'bool': {
                    'must': [
                        {
                            'query_string': {
                                'default_field': '_all',
                                'query': query
                            }
                        }
                    ]
                }
            }
        }

        if year and term:
            search_body['query']['bool']['must'] += [
                {
                    'term': {
                        'lecture.year': year
                    }
                },
                {
                    'term': {
                        'lecture.term_code': term
                    }
                }
            ]

        res = es.search(index=_get_index_name(campus_id), body=search_body)

        for lecture in res.get('hits').get('hits'):
            lecture = lecture.get('_source')
            lecture['term_str'] = Lecture.term_int_to_str(lecture['term_code'])
            results.append(lecture)

    return results
예제 #11
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_admin_administrators_remove(year, term, code):
    from opencampus.module.account.models import Account
    account = Account.objects(account_id=request.form.get('account_id')).get()
    lecture = Lecture.get_lecture(year, term, code)
    Lecture.objects(id=lecture.id).update_one(pull__admins=account.id)
    return redirect(url_for('campus.lecture_admin_administrators', year=year, term=term, code=code))