示例#1
0
文件: user.py 项目: vtphan/sandbox
def logout_and_cleanup(uid=None, next_url=None, logout=False):
    online_students = StudentRecord.online_students()

    if uid is None:
        user = auth.get_logged_in_user()
        auth.logout_user(user)
    else:
        user = auth.User.get(auth.User.id == uid)
        auth.logout_user(user, self_logout=False)

    user_record = StudentRecord(user.id)
    user_record.open_board = False
    user_record.online = False
    user_record.save()

    listening_clients = sse.listening_clients(user.id)

    # Turn off menu/tabs of all listeners and tell them to go home
    mesg = {}
    for cid in online_students:
        mesg[cid] = dict(cid=user.id)
        if cid in listening_clients or cid == user.id:
            mesg[cid].update(home_cid=cid)
            sse.listen_to(cid, cid)
    sse.notify(mesg, event="log-out")

    sse.close(user_record.id, logout)

    return redirect(next_url or url_for('index'))
示例#2
0
文件: user.py 项目: vtphan/sandbox
def logout_and_cleanup(uid=None, next_url=None, logout=False):
   online_students = StudentRecord.online_students()

   if uid is None:
      user = auth.get_logged_in_user()
      auth.logout_user(user)
   else:
      user = auth.User.get(auth.User.id == uid)
      auth.logout_user(user, self_logout=False)

   user_record = StudentRecord(user.id)
   user_record.open_board = False
   user_record.online = False
   user_record.save()

   listening_clients = sse.listening_clients(user.id)

   # Turn off menu/tabs of all listeners and tell them to go home
   mesg = {}
   for cid in online_students:
      mesg[cid] = dict(cid=user.id)
      if cid in listening_clients or cid==user.id:
         mesg[cid].update(home_cid = cid)
         sse.listen_to(cid, cid)
   sse.notify(mesg, event="log-out")

   sse.close(user_record.id, logout)

   return redirect( next_url or url_for('index') )
示例#3
0
文件: sandbox.py 项目: vtphan/sandbox
def index():
   logged_in_user = auth.get_logged_in_user()

   user_record = StudentRecord(logged_in_user.id)
   user_record.online = True
   user_record.save()

   # if user is running on another client, close the other.
   sse.close(user_record.id)

   current_channel = sse.current_channel(user_record.id) or user_record.id

   all_users = auth.User.select()
   online_students = StudentRecord.online_students()
   listeners=[ online_students[int(i)].username \
      for i in sse.listening_clients(current_channel) if int(i) in online_students ]

   # notify those who can view boards that the client is online
   messages = {}
   for c, r in online_students.items():
      if user_record.id != c and (r.is_teacher or user_record.open_board):
         messages[c] = dict(cid=user_record.id, board_status=user_record.open_board)
   sse.notify(messages, event='online')

   problem_ids = sorted(int(i) for i in red.smembers('published-problems'))

   return render_template('sandbox.html',
      sum=sum, enumerate=enumerate,
      current_channel = current_channel,
      problem_ids=problem_ids,
      user_record = user_record,
      online_students = online_students,
      all_users = all_users,
      listeners = listeners)
示例#4
0
文件: app.py 项目: vtphan/sandbox
def init_user():
    logged_in_user = auth.get_logged_in_user()
    user_record = StudentRecord(logged_in_user.id)
    user_record.username = logged_in_user.username
    if logged_in_user.role == 'teacher':
        user_record.open_board = True
        user_record.is_teacher = True
    user_record.save()
示例#5
0
文件: app.py 项目: vtphan/sandbox
def init_user():
   logged_in_user = auth.get_logged_in_user()
   user_record = StudentRecord(logged_in_user.id)
   user_record.username = logged_in_user.username
   if logged_in_user.role == 'teacher':
      user_record.open_board = True
      user_record.is_teacher = True
   user_record.save()
示例#6
0
文件: problem.py 项目: vtphan/sandbox
def award_brownie(uid, tid, chat_id):
    student = StudentRecord(uid)
    student.brownies += 1
    student.save()

    message = dict(cid=student.id, chat_id=chat_id, brownies=student.brownies)
    sse.notify({uid: message, tid: message}, event="brownie-updated")

    q = Brownie.update(points=Brownie.points + 1).where(Brownie.user == uid)
    if q.execute() == 0:
        q = Brownie.create(user=uid, points=1)

    return "A brownie has been awarded to %s." % student.username
示例#7
0
def award_brownie(uid, tid, chat_id):
    student = StudentRecord(uid)
    student.brownies += 1
    student.save()

    message = dict(cid=student.id, chat_id=chat_id, brownies=student.brownies)
    sse.notify({uid: message, tid: message}, event="brownie-updated")

    q = Brownie.update(points=Brownie.points + 1).where(Brownie.user == uid)
    if q.execute() == 0:
        q = Brownie.create(user=uid, points=1)

    return 'A brownie has been awarded to %s.' % student.username
示例#8
0
文件: sandbox.py 项目: vtphan/sandbox
def event_toggle_board(message, cid):
   user = StudentRecord(cid)
   if user.username:
      record = StudentRecord(user.id)
      record.open_board = not record.open_board
      record.save()

      all_records = StudentRecord.online_students()

      message_to_all = {}
      listening_clients = sse.listening_clients(cid)
      for c, r in all_records.items():
         m = dict(cid=cid, board_status=record.open_board)
         if record.open_board == False and int(cid) != int(c):
            if not r.is_teacher and c in listening_clients:
               m.update(back_to_homeboard=True)
               sse.listen_to(c, c)
         message_to_all[c] = m

      sse.notify(message_to_all, event="toggle-board")
示例#9
0
文件: sandbox.py 项目: vtphan/sandbox
def event_toggle_board(message, cid):
    user = StudentRecord(cid)
    if user.username:
        record = StudentRecord(user.id)
        record.open_board = not record.open_board
        record.save()

        all_records = StudentRecord.online_students()

        message_to_all = {}
        listening_clients = sse.listening_clients(cid)
        for c, r in all_records.items():
            m = dict(cid=cid, board_status=record.open_board)
            if record.open_board == False and int(cid) != int(c):
                if not r.is_teacher and c in listening_clients:
                    m.update(back_to_homeboard=True)
                    sse.listen_to(c, c)
            message_to_all[c] = m

        sse.notify(message_to_all, event="toggle-board")
示例#10
0
文件: problem.py 项目: vtphan/sandbox
def grade():
    uid = int(request.form["uid"])
    tid = int(request.form["tid"])
    pid = int(request.form["pid"])
    score = int(request.form["score"])

    # Store in redis
    user_record = StudentRecord(uid)
    user_record.scores[pid] = score
    user_record.save()

    pids = sorted(int(i) for i in red.smembers("published-problems"))
    scores = [[p, user_record.scores.get(p, 0)] for p in pids]
    message = dict(cid=user_record.id, scores=scores, pid=pid, score=score)

    sse.notify({uid: message, tid: message}, event="scores-updated")

    # Store in database
    q = Score.update(points=score).where(Score.problem == pid, Score.user == uid)
    if q.execute() == 0:
        q = Score.create(problem=pid, user=uid, points=score)

    return '<i class="icon-okay"></i>'
示例#11
0
文件: sandbox.py 项目: vtphan/sandbox
def index():
    logged_in_user = auth.get_logged_in_user()

    user_record = StudentRecord(logged_in_user.id)
    user_record.online = True
    user_record.save()

    # if user is running on another client, close the other.
    sse.close(user_record.id)

    current_channel = sse.current_channel(user_record.id) or user_record.id

    all_users = auth.User.select()
    online_students = StudentRecord.online_students()
    listeners=[ online_students[int(i)].username \
       for i in sse.listening_clients(current_channel) if int(i) in online_students ]

    # notify those who can view boards that the client is online
    messages = {}
    for c, r in online_students.items():
        if user_record.id != c and (r.is_teacher or user_record.open_board):
            messages[c] = dict(cid=user_record.id,
                               board_status=user_record.open_board)
    sse.notify(messages, event='online')

    problem_ids = sorted(int(i) for i in red.smembers('published-problems'))

    return render_template('sandbox.html',
                           sum=sum,
                           enumerate=enumerate,
                           current_channel=current_channel,
                           problem_ids=problem_ids,
                           user_record=user_record,
                           online_students=online_students,
                           all_users=all_users,
                           listeners=listeners)
示例#12
0
def grade():
    uid = int(request.form['uid'])
    tid = int(request.form['tid'])
    pid = int(request.form['pid'])
    score = int(request.form['score'])

    # Store in redis
    user_record = StudentRecord(uid)
    user_record.scores[pid] = score
    user_record.save()

    pids = sorted(int(i) for i in red.smembers('published-problems'))
    scores = [[p, user_record.scores.get(p, 0)] for p in pids]
    message = dict(cid=user_record.id, scores=scores, pid=pid, score=score)

    sse.notify({uid: message, tid: message}, event="scores-updated")

    # Store in database
    q = Score.update(points=score).where(Score.problem == pid,
                                         Score.user == uid)
    if q.execute() == 0:
        q = Score.create(problem=pid, user=uid, points=score)

    return '<i class="icon-okay"></i>'