예제 #1
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 '인증 완료'
예제 #2
0
파일: apis.py 프로젝트: qbx2/opencampus
def lecture_search_api(campus_id):
    from urllib import parse

    query = request.args.get('q', '')
    page = int(request.args.get('page', 1))

    data = Lecture.search(request.campus.id, query=query, page=page)

    for lecture in data:
        lecture['timetable'] = []
        try:
            lecture_data = Lecture.get_lecture(int(lecture['year']), lecture['term_str'], lecture['code'])
            for time in lecture_data.timetable:
                lecture['timetable'].append({
                    'place': time.place,
                    'room': time.room,
                    'start_time': time.start_time,
                    'end_time': time.end_time
                })
        except:
            pass

    result = {
        'data': data,
        'paging': {}
    }

    if len(data) >= 20:
        url = list(parse.urlparse(request.url))
        query = dict(parse.parse_qs(url[4]))
        query['page'] = page + 1
        url[4] = parse.urlencode(query)
        result['paging']['next'] = parse.urlunparse(url)

    return jsonify(result)
예제 #3
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_vtimetable_search():
    try:
        year = int(request.args.get('year'))
        term = Lecture.term_str_to_int(request.args.get('term'))
        query = request.args.get('q', '')
    except TypeError:
        return jsonify({'error': {'code': 'type_error'}}), 400

    results = Lecture.search(request.campus.id, query=query, page=1, size=8, year=year, term=term)

    for lecture in results:
        lecture['timetable'] = []
        try:
            lecture_data = Lecture.get_lecture(int(lecture['year']), lecture['term_str'], lecture['code'])
            for time in lecture_data.timetable:
                lecture['timetable'].append({
                    'place': time.place,
                    'room': time.room,
                    'start_time': time.start_time,
                    'end_time': time.end_time
                })
        except:
            pass

    return jsonify({
        'data': results
    })
예제 #4
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_board_list(year, term, code, board_id):
    lecture = Lecture.get_lecture(year, term, code)
    boards = LectureBoard.objects(lecture_id=lecture.id)
    board = LectureBoard.objects(lecture_id=lecture.id, board_id=board_id).get()

    return render_template('module/lecture/detail/board.html', year=year, term=term, code=code,
                           lecture=lecture, boards=boards, board=board)
예제 #5
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_auth_admin(year, term, code):
    # TODO : Remove
    lecture = Lecture.get_lecture(year, term, code)
    lecture.email = '*****@*****.**'
    lecture.phone = '+821051277004'

    return render_template('module/lecture/detail/auth_admin.html', year=year, term=term, code=code,
                           lecture=lecture)
예제 #6
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_sync(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)
    request.campus.get_gateway().sync_lecture(
        year=lecture.year,
        term=lecture.term_int_to_str(lecture.term),
        code=lecture.code
    )
    return redirect(url_for('campus.lecture_detail', year=year, term=term, code=code))
예제 #7
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)
예제 #8
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_board(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)
    boards = LectureBoard.objects(lecture_id=lecture.id)
    if len(lecture.admins) < 1:
        return redirect(url_for('campus.lecture_auth_admin', year=year, term=term, code=code))

    if len(boards) < 1:
        return redirect(url_for('campus.lecture_admin_board', year=year, term=term, code=code))

    return redirect(url_for('campus.lecture_board_list', year=year, term=term, code=code, board_id=boards[0].board_id))
예제 #9
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_admin_board_create(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)

    try:
        board = LectureBoard.objects(lecture_id=lecture.id, board_id=request.form.get('board_id')).get()
    except LectureBoard.DoesNotExist:
        board = LectureBoard()

    board.lecture_id = lecture.id
    board.board_id = request.form.get('board_id')
    board.board_name = request.form.get('board_name')
    board.read_perm = request.form.get('read_perm')
    board.write_perm = request.form.get('write_perm')
    board.save()
    return jsonify({})
예제 #10
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))
예제 #11
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_admin_grade(year, term, code):
    return render_template('module/lecture/detail/admin/grade.html', year=year, term=term, code=code,
                           lecture=Lecture.get_lecture(year, term, code))
예제 #12
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_admin_board(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)
    return render_template('module/lecture/detail/admin/board.html', year=year, term=term, code=code,
                           lecture=lecture, boards=LectureBoard.objects(lecture_id=lecture.id))
예제 #13
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_detail(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)
    from opencampus.module.place.models import Place
    places = Place.objects(campus_id=request.campus.id, names__in=[time_info.place for time_info in lecture.timetable])
    return render_template('module/lecture/detail/information.html', year=year, term=term, code=code,
                           lecture=lecture, places=places)
예제 #14
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_homework(year, term, code):
    return render_template('module/lecture/detail/homework.html', year=year, term=term, code=code,
                           lecture=Lecture.get_lecture(year, term, code))
예제 #15
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_board_write(year, term, code, board_id):
    return render_template('module/lecture/detail/write_article.html', year=year, term=term, code=code,
                           lecture=Lecture.get_lecture(year, term, code))
예제 #16
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_board_show_article(year, term, code, article_id):
    return render_template('module/lecture/detail/article.html', year=year, term=term, code=code,
                           lecture=Lecture.get_lecture(year, term, code), article_id=article_id)
예제 #17
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_auth_admin_method(year, term, code):
    lecture = Lecture.get_lecture(year, term, code)

    # TODO : Remove
    lecture.email = '*****@*****.**'
    lecture.phone = '+821051277004'

    if not session.get_account():
        return '<p>로그인 후 사용해주세요</p>'

    from opencampus.module.lecture.authmodels import LectureAuthRequestInfo

    if request.form.get('type') == 'email':
        if not lecture.email:
            return '강의정보에 이메일이 등록되어 있지 않습니다'

        at_index = lecture.email.find('@')

        email_view = '*' * (at_index-3) + lecture.email[at_index-3:]
        if at_index < 3:
            email_view = '*' * at_index + lecture.email[at_index:]

        try:
            from opencampus.common.sendmail import send_email
            send_email('[오픈캠퍼스] 관리자 인증 메일 - %s년 %s학기 %s(%s)' % (lecture.year, lecture.get_term_text(),
                                                                lecture.code, lecture.subject_name),
                       render_template('module/lecture/detail/sendemail.html', lecture=lecture,
                                       auth_code=LectureAuthRequestInfo.create_request(lecture.id, 'email', session.get_account().id)),
                       [lecture.email])
        except Exception as e:
            print(e)
            return '<p>메일 발송 도중 에러가 발생하였습니다</p>'

        return '<p>%s으로 이메일이 발송되었습니다.</p><p>이메일에 기재되어 있는 방법을 이용하여 인증을 진행하여 주십시오.</p>' % email_view

    if request.form.get('type') == 'ars':
        if not lecture.phone:
            return '강의정보에 전화번호가 등록되어 있지 않습니다'

        phone_view = lecture.phone[:7] + '*' * (len(lecture.phone) - 7)
        body = '<p>%s으로 ARS가 발송되었습니다.</p><p>전화를 받으신 후 아래의 인증코드를 입력하신후 # 버튼을 눌러주세요.</p>' % phone_view
        body += '<div class="well well-sm"><h2>3333</h2></div>'
        return body
    if request.form.get('type') == 'sms':
        if not lecture.phone:
            return '강의정보에 전화번호가 등록되어 있지 않거나 휴대폰 번호가 아닙니다'

        phone_view = lecture.phone[:7] + '*' * (len(lecture.phone) - 7)

        auth_code = LectureAuthRequestInfo.create_request(lecture.id, 'sms', session.get_account().id)

        from twilio.rest import TwilioRestClient
        account_sid = app.config.get('TWILIO_ACCOUNT_SID')
        auth_token = app.config.get('TWILIO_AUTH_TOKEN')
        client = TwilioRestClient(account_sid, auth_token)
        message = client.messages.create(body="[오픈캠퍼스 인증] 인증번호 %s" % auth_code,
                                         to=lecture.phone,
                                         from_="+18559731333")

        body = '<p>%s으로 SMS가 발송되었습니다.</p><p>수신된 인증코드를 입력하여 주시기 바랍니다.</p>' % phone_view
        body += '<form action="%s" method="GET">' % url_for('campus.lecture_auth_admin_method_cb', year=year, term=term, code=code)
        body += '<input type="number" name="auth_code" class="form-control input-lg" placeholder="인증번호">'
        body += '<button type="submit" class="btn btn-danger btn-lg">인증</button>'
        body += '</form>'
        return body
    if request.form.get('type') == 'manual':
        body = '<p>해당 강의 정보와 관리자임을 증빙 할 수 있는 서류 등을 첨부하여</p>'
        body += '<p><a href="mailto:[email protected]">[email protected]</a>로 보내주시기 바랍니다.</p>'
        return body

    return '비정상 접근'
예제 #18
0
파일: handlers.py 프로젝트: qbx2/opencampus
def lecture_attendance(year, term, code):
    return render_template('module/lecture/detail/attendance.html', year=year, term=term, code=code,
                           lecture=Lecture.get_lecture(year, term, code))
예제 #19
0
파일: handlers.py 프로젝트: qbx2/opencampus
    def decorated(*args, **kwargs):
        lecture = Lecture.get_lecture(kwargs.get('year', None), kwargs.get('term', None), kwargs.get('code', None))
        if session.get_account().id not in lecture.admins:
            return abort(403)

        return f(*args, **kwargs)