예제 #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
파일: problem.py 프로젝트: vtphan/sandbox
def grade_history(uid=None):
    logged_in_user = auth.get_logged_in_user()
    if uid is not None:
        if logged_in_user.role != "teacher" and logged_in_user.id != uid:
            return "not allowed"
    else:
        uid = logged_in_user.id

    student = StudentRecord(uid)

    try:
        scores = Score.select().where(Score.user == uid)
    except Score.DoesNotExist:
        scores = []

    try:
        brownie = Brownie.get(Brownie.user == uid)
    except Brownie.DoesNotExist:
        brownie = None

    published_pids = red.smembers("published-problems")
    published_pids = sorted(int(p) for p in published_pids)

    return render_template(
        "problem/grade_history.html", scores=scores, brownie=brownie, student=student, published_pids=published_pids
    )
예제 #3
0
def grade_history(uid=None):
    logged_in_user = auth.get_logged_in_user()
    if uid is not None:
        if logged_in_user.role != 'teacher' and logged_in_user.id != uid:
            return 'not allowed'
    else:
        uid = logged_in_user.id

    student = StudentRecord(uid)

    try:
        scores = Score.select().where(Score.user == uid)
    except Score.DoesNotExist:
        scores = []

    try:
        brownie = Brownie.get(Brownie.user == uid)
    except Brownie.DoesNotExist:
        brownie = None

    published_pids = red.smembers('published-problems')
    published_pids = sorted(int(p) for p in published_pids)

    return render_template('problem/grade_history.html',
                           scores=scores,
                           brownie=brownie,
                           student=student,
                           published_pids=published_pids)
예제 #4
0
파일: user.py 프로젝트: vtphan/sandbox
def edit(uid=None):
   cur_user = auth.get_logged_in_user()
   uid = cur_user.id if uid is None else uid
   if cur_user.role!='teacher' and cur_user.id!=uid:
      return redirect(url_for('auth.permission_denied'))

   user = cur_user if cur_user.id==uid else auth.User.get(auth.User.id==uid)

   if request.method == 'POST':
      if 'delete' in request.form:
         user.delete_instance()
         flash('User %s is deleted' % user.username)
         return redirect(url_for('user.list'))
      else:
         if 'username' in request.form:
            user.username = request.form['username']
         user.active = 'active' in request.form
         user.email = request.form['email']
         user.role = request.form['role']
         if request.form['new_password']:
            user.set_password(request.form['new_password'])
         user.save()
         flash('Information updated')
         if cur_user.role == 'teacher':
            return redirect(url_for('user.list'))
   return render_template('user/edit.html', cur_user=cur_user, user=user)
예제 #5
0
파일: user.py 프로젝트: vtphan/sandbox
def edit(uid=None):
    cur_user = auth.get_logged_in_user()
    uid = cur_user.id if uid is None else uid
    if cur_user.role != 'teacher' and cur_user.id != uid:
        return redirect(url_for('auth.permission_denied'))

    user = cur_user if cur_user.id == uid else auth.User.get(
        auth.User.id == uid)

    if request.method == 'POST':
        if 'delete' in request.form:
            user.delete_instance()
            flash('User %s is deleted' % user.username)
            return redirect(url_for('user.list'))
        else:
            if 'username' in request.form:
                user.username = request.form['username']
            user.active = 'active' in request.form
            user.email = request.form['email']
            user.role = request.form['role']
            if request.form['new_password']:
                user.set_password(request.form['new_password'])
            user.save()
            flash('Information updated')
            if cur_user.role == 'teacher':
                return redirect(url_for('user.list'))
    return render_template('user/edit.html', cur_user=cur_user, user=user)
예제 #6
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'))
예제 #7
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)
예제 #8
0
def consulta():
    admin = auth.get_logged_in_user()
    if (request.form["pasado"] != ""):
        from datetime import date
        anio, mes, dia = request.form["pasado"].split("-")
        pasado = date(int(anio), int(mes), int(dia))
        if (request.form["futuro"] == ""):
            futuro = datetime.datetime.now().date()
        else:
            anio, mes, dia = request.form["futuro"].split("-")
            futuro = date(int(anio), int(mes), int(dia))
        if (pasado <= futuro):
            arreglo_consumo = {}

            consumo_semanal = (Consumo.select(
                Usuario.nombre,
                fn.sum(Consumo.precio*Consumo.cantidad).alias('total')
                ).join(Usuario
                    ).where((Consumo.fecha >= pasado)
                       & (Consumo.fecha <= futuro)
                       & (Consumo.activo == True)).group_by(Usuario.id).order_by(Usuario.nombre.desc()))

            for consumo_item in consumo_semanal:
                arreglo_consumo[str(consumo_item.usuario.nombre)] = consumo_item.total
            args = {}
            args['consumos'] = arreglo_consumo
            args['auth'] = admin
            args['pasado'] = str(pasado)
            args['futuro'] = str(futuro)
            return render_template("consultas.html", args=args,)
        else:
            abort(406)
    else:
        abort(406)
예제 #9
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()
예제 #10
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()
예제 #11
0
파일: user.py 프로젝트: vtphan/sandbox
def list():
   cur_user = auth.get_logged_in_user()

   if request.method == 'POST':
      user = auth.User(username=request.form['username'])
      user.email = request.form['username'] + '@memphis.edu'
      user.set_password(request.form['username'])
      user.active = True
      user.role = 'student'
      user.save()
      flash('user %d created' % user.id)
      return redirect(url_for('user.list'))
   return render_template('user/list.html', users=auth.User.select())
예제 #12
0
파일: user.py 프로젝트: vtphan/sandbox
def list():
    cur_user = auth.get_logged_in_user()

    if request.method == 'POST':
        user = auth.User(username=request.form['username'])
        user.email = request.form['username'] + '@memphis.edu'
        user.set_password(request.form['username'])
        user.active = True
        user.role = 'student'
        user.save()
        flash('user %d created' % user.id)
        return redirect(url_for('user.list'))
    return render_template('user/list.html', users=auth.User.select())
예제 #13
0
def home(exito=None, error=None):
    productos = Producto.select()
    usuarios = Usuario.select()
    admin = auth.get_logged_in_user()
    semana_pasada = datetime.datetime.now() - datetime.timedelta(7)
    semana_pasada = semana_pasada.date()

    args = {}
    args['productos'] = productos
    args['usuarios'] = usuarios
    args['auth'] = admin
    args['semana_pasada'] = semana_pasada

    return render_template("index.html", args=args,)
예제 #14
0
파일: problem.py 프로젝트: vtphan/sandbox
def view(pid, uid=None):
    try:
        prob = Problem.get(Problem.id == pid)
    except Problem.DoesNotExist:
        flash("Problem %s does not exist" % pid)
        return redirect(url_for("index.html"))

    if uid is None:
        return render_template("problem/view.modal", prob=prob)

    teacher = auth.get_logged_in_user()
    if teacher.role != "teacher":
        return render_template("problem/view.modal", prob=prob)

    student = StudentRecord(uid)
    score = student.scores.get(pid, None)

    return render_template("problem/view_grade.modal", prob=prob, teacher=teacher, student=student, score=score)
예제 #15
0
def view(pid, uid=None):
    try:
        prob = Problem.get(Problem.id == pid)
    except Problem.DoesNotExist:
        flash('Problem %s does not exist' % pid)
        return redirect(url_for('index.html'))

    if uid is None:
        return render_template('problem/view.modal', prob=prob)

    teacher = auth.get_logged_in_user()
    if teacher.role != 'teacher':
        return render_template('problem/view.modal', prob=prob)

    student = StudentRecord(uid)
    score = student.scores.get(pid, None)

    return render_template('problem/view_grade.modal',
                           prob=prob,
                           teacher=teacher,
                           student=student,
                           score=score)
예제 #16
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)
예제 #17
0
파일: app.py 프로젝트: vtphan/sandbox
def index():
   user = auth.get_logged_in_user()
   if not user:
      return redirect( url_for('auth.login') )
   return redirect( url_for('sandbox.index') )
예제 #18
0
파일: user.py 프로젝트: vtphan/sandbox
def logout_user(uid):
   user = auth.get_logged_in_user()
   if user.id == uid:
      return logout_and_cleanup()
   else:
      return logout_and_cleanup(uid, url_for('user.online'))
예제 #19
0
파일: user.py 프로젝트: vtphan/sandbox
def logout_user(uid):
    user = auth.get_logged_in_user()
    if user.id == uid:
        return logout_and_cleanup()
    else:
        return logout_and_cleanup(uid, url_for('user.online'))
예제 #20
0
파일: app.py 프로젝트: vtphan/sandbox
def index():
    user = auth.get_logged_in_user()
    if not user:
        return redirect(url_for('auth.login'))
    return redirect(url_for('sandbox.index'))
예제 #21
0
파일: app.py 프로젝트: vtphan/sandbox
def admin():
    user = auth.get_logged_in_user()
    num_online = len(StudentRecord.online_students())
    if not user:
        return redirect(url_for('auth.login'))
    return render_template('admin.html', user=user, num_online=num_online)
예제 #22
0
파일: app.py 프로젝트: vtphan/sandbox
def admin():
   user = auth.get_logged_in_user()
   num_online = len(StudentRecord.online_students())
   if not user:
      return redirect(url_for('auth.login'))
   return render_template('admin.html', user=user, num_online=num_online)
예제 #23
0
def manejo_usuario():
    user = auth.get_logged_in_user()
    usuarios = Usuario.select().order_by(Usuario.id.asc())
    return render_template("usuarios.html", usuarios=usuarios)