def cambiar_alias(request): template_name = "dashboard/perfil/perfil.html" usuario = utils.reconstruir_usuario(request) if usuario: mensaje_error = None mensaje_ok = None form = AliasForm(request.POST or None, request.FILES or None) if form.is_valid(): cd = form.cleaned_data alias = cd.get("alias") usuario.alias = alias usuario.save() mensaje_ok = "El alias se cambió exitosamente por: " + alias else: mensaje_error = "No se pudo cambiar el alias del usuario" context = { "usuario": usuario, "forma_avatar": AvatarForm(), "forma_password": PasswordForm(), "forma_alias": AliasForm(initial={'alias': usuario.alias}), "mensaje_error": mensaje_error, "mensaje_ok": mensaje_ok } return utils.render_page(request, template_name, context) else: return home(request)
def cambiar_password(request): template_name = "dashboard/perfil/perfil.html" usuario = utils.reconstruir_usuario(request) if usuario: mensaje_error = None mensaje_ok = None form = PasswordForm(request.POST or None, request.FILES or None) if form.is_valid(): cd = form.cleaned_data actual = cd.get("actual") nuevo = cd.get("nuevo") confirmacion = cd.get("confirmacion") correcto = usuario.verificar_password(actual) if correcto: mensaje_error = validar_nuevo_password(nuevo, confirmacion) if mensaje_error is None: usuario.cambiar_password(nuevo) mensaje_ok = "El password se cambió exitosamente" else: mensaje_error = "El password actual no es correcto" context = { "usuario": usuario, "forma_avatar": AvatarForm(), "forma_password": PasswordForm(), "forma_alias": AliasForm(initial={'alias': usuario.alias}), "mensaje_error": mensaje_error, "mensaje_ok": mensaje_ok } return utils.render_page(request, template_name, context) else: return home(request)
def notificaciones(request): usuario = utils.reconstruir_usuario(request) template_name = "dashboard/notificaciones.html" context = { "notificaciones_completas": Notificacion.buscar_notificaciones_usuario(usuario) } return utils.render_page(request, template_name, context)
def solucion_referencia(request, slug): problema = get_object_or_404(Problema, slug=slug) usuario = utils.reconstruir_usuario(request) tipo_forma = str(request.POST.get("tipo_forma", None)) if request.POST.get("guardar", None) is not None: return guardar_solucion_referencia(request, problema) elif request.POST.get("correr", None) is not None: return correr_solucion_referencia(request, problema) else: return mostrar_solucion_referencia(request, problema)
def retos(request, nivel=1): lista_problemas = Problema.buscar_retos_nivel(nivel) usuario = utils.reconstruir_usuario(request) num_avance = 0 num_total = len(lista_problemas) lista_parejas_b = [] lista_parejas_m = [] lista_parejas_a = [] for pr in lista_problemas: resultado = pr.buscar_resultado_problema_estudiante(usuario.id) if resultado is not None and resultado.resuelto: num_avance += 1 if pr.nivel_reto == BASICO: lista_parejas_b.append((pr, resultado)) elif pr.nivel_reto == MEDIO: lista_parejas_m.append((pr, resultado)) elif pr.nivel_reto == AVANZADO: lista_parejas_a.append((pr, resultado)) if usuario.tipo != ESTUDIANTE: avance = None elif num_total > 0: avance = str(int(round(num_avance / num_total * 100, 0))) + "%" else: avance = "0%" template_name = "dashboard/retos/retos.html" context = {"lista_problemas_b": lista_parejas_b, "lista_problemas_m": lista_parejas_m, "lista_problemas_a": lista_parejas_a, "nivel": nivel, "tipo_busqueda": "", "num_avance": num_avance, "num_total": num_total, "avance": avance} return utils.render_page(request, template_name, context)
def mostrar_problemas(request, lista_problemas, forma_simple, forma_avanzada, busqueda=None): usuario = utils.reconstruir_usuario(request) if usuario.tipo == ESTUDIANTE: lista_problemas = list( filter(lambda prob: prob.publico, lista_problemas)) lista_parejas = [] for pr in lista_problemas: resultado = pr.buscar_resultado_problema_estudiante(usuario.id) lista_parejas.append((pr, resultado)) tags = Tag.objects.all().order_by('texto') paginator = Paginator(lista_parejas, 10) if request.method == 'POST': page = request.POST.get('page') else: page = request.GET.get('page') lista_parejas = paginator.get_page(page) template_name = "dashboard/problemas_estudiante.html" context = { "lista_problemas": lista_parejas, "form": forma_simple, "forma_avanzada": forma_avanzada, "tags": tags, "tipo_busqueda": busqueda, "es_admin": usuario.tipo == ADMINISTRADOR, "es_profesor": usuario.tipo == PROFESOR } return utils.render_page(request, template_name, context)
def perfil(request): template_name = "dashboard/perfil/perfil.html" usuario = utils.reconstruir_usuario(request) if usuario: mensaje_error = None mensaje_ok = None form = AvatarForm(request.POST or None, request.FILES or None) if form.is_valid(): extension = str(request.FILES['avatar']).lower()[-4:] size = request.FILES['avatar'].size print("Size:", size) if extension not in constantes.EXTENSIONES: mensaje_error = "Las imágenes de perfil sólo pueden estar en los siguientes formatos: jpg, png o gif" elif size > 1024 * 200: mensaje_error = "Las imágenes de perfil no pueden tener más de 200 kb." else: noise = uuid.uuid4().hex[:16] filename = usuario.login + noise + ".png" utils.handle_uploaded_avatar(request.FILES['avatar'], usuario.login, filename) usuario.avatar = "avatars/" + filename usuario.save() mensaje_ok = "Se cambió exitosamente la imagen de perfil" context = { "usuario": usuario, "forma_avatar": AvatarForm(), "forma_password": PasswordForm(), "forma_alias": AliasForm(initial={'alias': usuario.alias}), "mensaje_error": mensaje_error, "mensaje_ok": mensaje_ok } return utils.render_page(request, template_name, context) else: return home(request)
def problema(request, slug): problema = get_object_or_404(Problema, slug=slug) usuario = utils.reconstruir_usuario(request) tipo_formulario = str(request.POST.get("tipo_formulario", None)) if tipo_formulario == "pregunta": form = PreguntaForm(request.POST or None, request.FILES or None) mensaje = agregar_pregunta_problema(form, usuario, problema) elif tipo_formulario == "respuesta": form = ComentarioForm(request.POST or None, request.FILES or None) mensaje = agregar_respuesta_problema(form, usuario) else: mensaje = None resultado_problema = None envios = None permiso_envio = True if usuario.tipo == ESTUDIANTE: resultado_problema = problema.buscar_resultado_problema_estudiante( usuario.id) envios = problema.buscar_envios_problema(usuario.id) else: permiso_envio = False template_name = "dashboard/problema_es.html" context = { "problema": problema, "form_pregunta": PreguntaForm(), "form_respuesta": ComentarioForm(), "resultado_problema": resultado_problema, "permiso_envio": permiso_envio, "mensaje": mensaje, "envios": envios } return utils.render_page(request, template_name, context)
def logros(request): usuario = utils.reconstruir_usuario(request) medallas = Logro.buscar_medallas_usuario(usuario.id) template_name = "dashboard/medallas.html" context = {"medallas": medallas} return utils.render_page(request, template_name, context)
def marcar_leidas(request): usuario = utils.reconstruir_usuario(request) Notificacion.marcar_todas_leidas(usuario.id) return redirect(reverse('notificaciones'))