+5 −1
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@ media/miniatura/*
media/videos/*
media/videollamada/*
media/perfil/*
media/miniaturas/*
media/pdfs/*

api_clase_curso/__pycache__/
app/__pycache__/
@@ -19,3 +21,5 @@ examen/migrations/
notificacion/migrations/
usuario/migrations/
videollamada/migrations/

mydatabase
 No newline at end of file
+3 −2
Original line number Diff line number Diff line
@@ -72,6 +72,9 @@ WSGI_APPLICATION = 'app.wsgi.application'
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases




DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
@@ -79,8 +82,6 @@ DATABASES = {
    }
}



# Password validation
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators

+38 −57
Original line number Diff line number Diff line
@@ -12,52 +12,46 @@
    Examen
  </a>
</span>


{% endblock botones %}
{% block contenido_externo %}




{% if clase %}
<div class="container mt-5">
<div class="contenedor">
    <div class="row">
    	{% for clase_details in clase %}
        <div class="col-lg-8">
            <article>
                <header class="mb-4">
					<h1  id="id_clase" hidden>{{ clase_details.curso.pk }}</h1>
                	<h1 class="fw-bolder mb-1" id="titulo_clase">{{ clase_details.titulo }}</h1>
                    <div class="text-muted fst-italic mb-2"> {{ clase_details.curso }}, impartido por {{clase_details.curso.instructor}}</div>
                	
                </header>
	            <figure class="mb-4">
					<video id="myVideo" width="100%" height="auto" controls style="background-color: gray; max-width: 100%; height: auto; display: block;">
					<video id="myVideo" width="100%" controls style="background-color: gray; max-width: 100%; height: auto; display: block;">
						<source src="{{clase_details.video.url}}" type="video/mp4">
					</video>
				</figure>
				
                <section class="mb-5">
                    <h2 class="fw-bolder mb-4 mt-5">Sobre la clase</h2>
					<h1 class="fw-bolder mb-1" id="titulo_clase">{{ clase_details.titulo }}</h1>
                    <div class="text-muted fst-italic mb-2"> {{ clase_details.curso }}, impartido por {{clase_details.curso.instructor}}</div>
                    
					<p class="fs-5 mb-4" style="text-align: justify;">{{ clase_details.descripcion }}</p>
                </section>
            </article>
        </div>
        <div class="col-lg-4">
        <div class="col-lg-4 mt-4" >
            <div class="card mb-4">
                <div class="card-header">Archivo PDF</div>
            	<div class="card-body">
                	<div>
                		{% if clase_details.archivo_pdf %}
                    		<center>
                    			<a class="d-block text-primary" href="{{clase_details.archivo_pdf.url}}">
                    				
                    					<img src="{% static 'img/pdf.png' %}" width="100" height="80" >
                    				Descargar archivo
                    			</a>
                    		</center>
                		{% else %}
            				<center> No se adjunto archivo pdf </center></label>
            				 No se adjunto archivo pdf
          				{% endif %}
                	</div>
                  <form id="csrf-form">
@@ -69,19 +63,39 @@
            	</div>
            </div>
        {% endfor %}

            <div class="card mb-4" style="border-radius: 10px;">
            	<div class="card-header" style="border-radius: 10px; border-color: #BF463B; ">
            <div class="card mb-4">
            	<div class="card-header" style="border-color: #BF463B; border: none;">
            		<center>
            			<a  style="color: #BF463B; text-align: center; ">
            			LISTADO DE CLASES
						 </a>
						</center>

            	</div>
        	</div>
			<div class=" scrollable-list  mb-3">
				{% for clase_page in clase.paginator %}
					{% for clase_detail in clase_page %}
						<div class="card mb-4">
						<div class="card-header">
							<a  id="pagina_actual" href="?page={{ clase_page.number }}" class="{% if clase_page.number == clase.number %}text-success{% else %}text-primary{% endif %}" style="background-color: #2F3659; color: white;">
							<div>
								<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-play-circle-fill me-1" viewBox="0 0 16 16">
								<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.79 5.093A.5.5 0 0 0 6 5.5v5a.5.5 0 0 0 .79.407l3.5-2.5a.5.5 0 0 0 0-.814l-3.5-2.5z"/>
								</svg>
								{% if clase_page.number == clase.number %}
								Estás en la clase actual
								{% else %}
								{{ clase_page.number }} - {{ clase_detail }}
								{% endif %}
							</div>
							</a>
						</div>
						</div>
					{% endfor %}
				{% endfor %}
			</div>

            <div class="d-flex gap-4 justify-content-center">
			<div class="d-flex gap-4">
				{% if clase.has_previous %}
            	<div class="card mb-4">
                	<div class="card-header">
@@ -115,36 +129,12 @@
            	</div>
            {% endif %}
			</div>


			{% for clase_page in clase.paginator %}
				{% for clase_detail in clase_page %}
					<div class="card mb-4">
						<div class="card-header">
							<a  id="pagina_actual" href="?page={{ clase_page.number }}" class="{% if clase_page.number == clase.number %}text-success{% else %}text-primary{% endif %}" style="background-color: #2F3659; color: white;">
								<div>
									<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-play-circle-fill me-1" viewBox="0 0 16 16">
										<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM6.79 5.093A.5.5 0 0 0 6 5.5v5a.5.5 0 0 0 .79.407l3.5-2.5a.5.5 0 0 0 0-.814l-3.5-2.5z"/>
									</svg>
									{% if clase_page.number == clase.number %}
										Estás en la clase actual
									{% else %}
										{{ clase_page.number }} - {{ clase_detail }}
									{% endif %}
								</div>
							</a>
						</div>
					</div>
				{% endfor %}
			{% endfor %}

					
        </div>
    </div>
</div>
<div class="container mt-5">
  <div id="columna-primaria" class="row">
    <div id="contenedor-comentarios" class="col-lg-8 mb-5 card card-body" style="background-color: #2F3659; border-radius: 10px;">
    <div id="contenedor-comentarios" class="col-lg-8 mb-5 card card-body" style="background-color: #2F3659;">
      <div class="mb-4">
        <div class="mb-4">
          <h3 class="text-white">Comentarios</h3>
@@ -157,9 +147,6 @@
              <button type="submit" class="btn btn-sm mt-2 rounded-2" data-type="send" data-id="form-user" style="border-radius: 10px; background-color: white; "> Comentar </button>
              <button type="button" class="btn btn-danger btn-sm mt-2 rounded-2" data-type="cancel" data-id="form-user" > Cancelar </button>
            </form>


		
          </div>
        </div>
      </div>
@@ -176,7 +163,6 @@
            	</button>
            </div>
        </div>     
        
        <div id="contenedor-respuesta-{{comentario.id}}" class="mb-4" style="display: none">
          {% for respuesta in comentario.respuestas.all%}
          <div class="d-flex ms-5 mb-3">
@@ -196,8 +182,7 @@
              {% csrf_token %} {{form.contenido}} {{form.id_autor}}
              {{form.id_clase}}
              <input id="id_respuesta" name="id_respuesta" type="hidden" value="{{comentario.id}}" />
              <button type="submit" class="btn btn-sm mt-2 rounded-2" data-type="send" data-id="form-{{comentario.id}}" style="border-radius: 10px; background-color: white; ">
                Comentar </button>
              <button type="submit" class="btn btn-sm mt-2 rounded-2" data-type="send" data-id="form-{{comentario.id}}" style="border-radius: 10px; background-color: white; ">Comentar </button>
              <button type="button" class="btn btn-danger btn-sm mt-2 rounded-2" data-type="cancel" data-id="form-{{comentario.id}}" > Cancelar </button>
            </form>
          </div>
@@ -208,14 +193,11 @@
  </div>
</div>
{% else %}

<div class="container mt-5">
	<h1 class="text-center aling-middle wow fadeInUp" data-wow-deplay="0.1s">Aún no hay clases en este curso</h1>
</div>

{% endif %}


{% endblock contenido_externo %}


@@ -350,7 +332,6 @@
        }
      });
  }

  function displayContainer(id) {
    let container = document.getElementById(id);
    if (container.style.display === "none") {
+0 −1
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@

{% block contenido %}
{% include 'message.html' %}

  <div class="container-fluid" style="background-color: #2F3659; border-radius: 10px;">
    <center>
        <video width="1000" height="500" controls>
+1 −1
Original line number Diff line number Diff line
<div class="modal modal-blur fade" id="modal-etiqueta" tabindex="-1" role="dialog" aria-hidden="true">
  <div class="modal-dialog modal-sm modal-dialog-centered" role="document">
    <div class="modal-content">
      <form method="post" action="{% url 'curso:agregar_etiqueta' %}">
      <form method="post"  enctype="multipart/form-data" action="{% url 'curso:agregar_etiqueta' %}">
      {% csrf_token %}
        <div class="modal-body">
          <div class="modal-title">Agregar etiqueta</div>
+1 −11
Original line number Diff line number Diff line
{% extends 'base_externa.html' %} 
{% load static %}

<link href="{% static 'css/buscador.css'  %} " rel="stylesheet">



<!--  Barra de busqueda  -->
{% block nav_externo %} {% include 'barra_de_busqueda_de_estudiante_logeado.html' %} {% endblock nav_externo %}
<!-- Fin de la barra de busqueda -->


{% block contenido_externo %}
<a href="javascript:history.back()" class="btn btn-square btn-responsive ms-3 mt-3">
  <svg style="color: var(--primary);" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" fill="currentColor" class="bi bi-arrow-left-square-fill" viewBox="0 0 16 16">
      <path d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12zm-4.5-6.5H5.707l2.147-2.146a.5.5 0 1 0-.708-.708l-3 3a.5.5 0 0 0 0 .708l3 3a.5.5 0 0 0 .708-.708L5.707 8.5H11.5a.5.5 0 0 0 0-1z"/>
    </svg>
</a>


<!-- Apartado para mostrar los cursos disponibles -->
<div class="container-xxl py-5">
+0 −7
Original line number Diff line number Diff line
@@ -8,13 +8,6 @@
<!-- Fin de la barra de busqueda -->

{% block contenido_externo %}

<a href="javascript:history.back()" class="btn btn-square btn-responsive ms-3 mt-3">
    <svg style="color: var(--primary);" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" fill="currentColor" class="bi bi-arrow-left-square-fill" viewBox="0 0 16 16">
        <path d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12zm-4.5-6.5H5.707l2.147-2.146a.5.5 0 1 0-.708-.708l-3 3a.5.5 0 0 0 0 .708l3 3a.5.5 0 0 0 .708-.708L5.707 8.5H11.5a.5.5 0 0 0 0-1z"/>
      </svg>
</a>

<div class="container-xxl px-5 py-4">
    <div class="container">
        {% if cursos.paginator.count > 0 %}
+5 −4
Original line number Diff line number Diff line
@@ -4,22 +4,23 @@
{% block title %} Inscripciones de cursos {% endblock title %}
{% block contenido %}
    <div class="col-lg-12">
		{% if cursos_populares or cursos_menos_populares %}
		<div class="card card-lg">
	    	<div class="card-body">
	        	<div class="markdown">
					{% if cursos_populares or cursos_menos_populares %}
					
					{% if cursos_populares %}
	        		<img src="data:image/png;base64,{{ grafica_base64_populares }}" alt="Gráfica de Cursos" style="width: auto; height: auto;">
	        		{% endif %}
	        		{% if cursos_menos_populares %}
	        		<img src="data:image/png;base64,{{ grafica_base64_menos_populares }}" alt="Gráfica de Cursos" style="width: auto; height: auto;">
	        		{% endif %}
					{% else %}
					No hay cursos registrados.
					{% endif %}
	        	</div>
	      	</div>
	    </div>
		{% else %}
		<div class="alert alert-danger w-100"> No hay cursos registrados </div>
		{% endif %}
	</div>

    
+15 −17
Original line number Diff line number Diff line
{% extends 'base.html' %} 
{% load static %}

{% block title %} 
<div>
  <h1>Lista de cursos</h1>
  {% if request.user.user_type == 'instructor' %}
  <h1 id="id_usuario" class="d-none">{{request.user.pk}}</h1>
{% block title %} Lista de cursos {% endblock title %}


{% block botones %} 
<span class="d-none d-sm-inline">
  <div class="input-group w-100">
    <h1 id="id_usuario" class="d-none">{{request.user.pk}}</h1>
    <input type="text" id="buscador-cursos" class="form-control rounded-start" placeholder="Buscar curso">
  </div> 
  {% endif %}
</div>
{% endblock title %}

{% block botones %} 
</span>
<span class="d-none d-sm-inline">
  <a  class="btn btn-outline-primary btn-pill d-none d-sm-inline-block" data-bs-toggle="modal" data-bs-target="#modal-curso">
    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square-rounded-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
@@ -51,6 +47,8 @@
{% endif %}
{% endblock botones %}



{% block contenido %}
{% include 'message.html' %}
<div class="row row-cols-1 row-cols-md-3 g-3" id="card_display">
@@ -68,7 +66,7 @@
               <path d="M11 12h1v4h1"></path> 
              </svg>
            </span>
            <span class="text-center text-truncate w-100">{{curso.nombre}}</span>
            <span class="text-truncate w-100">{{curso.nombre}}</span>
          </div>
        </div>
        <div class="d-flex">
@@ -86,14 +84,14 @@
    </div>
  </div>
  {% empty %}
  <div class="alert alert-danger d-flex gap-5 justify-content-start align-item-start w-100" role="alert">
    <h1 class="text-start">No hay cursos registrados.</h1>
  </div>
    <div class="alert alert-danger w-100"> No hay cursos registrados </div>
  {% endfor %}
</div>

{% endblock contenido %}




{% block contenidoBuscador %} 
<div id="display_search_buscador" style="width: 100%;display: flex;flex-direction: row;flex-wrap: wrap; ">
</div>
@@ -106,6 +104,7 @@
{% block js %} 
{% include 'curso/creacion-curso.html' %}
{% include 'curso/agregar-etiqueta.html' %}

<script>
  const id_usuario = document.getElementById('id_usuario');
  const search_curso = document.getElementById('buscador-cursos');
@@ -125,7 +124,6 @@
    })
    .then(data => {
      cursos_usuario = data.filter(curso => curso.instructor === parseInt(id_usuario.textContent));

      search_curso.addEventListener('input', () => {
        const textoBusqueda = search_curso.value.toLowerCase();
        if (textoBusqueda.trim() === '') {
+7 −5
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@
<link rel="stylesheet" type="text/css" href="{% static 'css/porcentaje/mostrar_porcentaje.css'  %}">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

<title>Porcentaje de Cursos</title>
  
{% block contenido %} 
<link rel="stylesheet" type="text/css" href="{% static 'css/porcentaje/mostrar_porcentaje.css'  %}">
@@ -15,14 +14,17 @@
    {% csrf_token %}
  </form>

  <div id="cursos-container"  class="w-100 d-flex flex-row flex-wrap gap-0">
  <div id="cursos-container"  class="w-100  d-flex flex-row flex-wrap gap-0" style="height:66vh; margin-top: 20px;">
      
  </div>
  
  <div id='sin_cursos'  class="w-100 align-items-center justify-content-center" style="height:70vh;">
    <p>No hay cursos vistos por ahora</p>
  <div id='sin_cursos' class="w-100 flex-column align-items-center justify-content-center" style="height:70vh;">
    <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" fill="currentColor" class="bi bi-emoji-frown" viewBox="0 0 16 16">
      <path d="M8 0C4.251 0 1 3.258 1 7s3.251 7 7 7 7-3.258 7-7-3.251-7-7-7zM5 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm-7-4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5z"/>
    </svg>
    <p class="mt-3">No hay cursos vistos por ahora</p>
  </div>
  
  
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script src="{% static 'js/mostrar_porsentaje_estudiante.js' %}"></script>

+5 −5
Original line number Diff line number Diff line
@@ -17,15 +17,15 @@
      <tbody>
        {% for curso, estudiante in pagination %}
        <tr>
          <th>
          <td>
            {{curso}}
          </th>
          <th>{{estudiante}}</th>
          <th>
          </td>
          <td>{{estudiante}}</td>
          <td>
            <a href="{% url 'curso:mostrar_avance_estudiante' curso.nombre %}" class="btn btn-outline-info w-100">
            Ver progresos
            </a>
          </th>
          </td>
        </tr>
        {% empty %}
        <tr>
+28 −76
Original line number Diff line number Diff line
@@ -3,59 +3,36 @@


{% block contenido_externo %} 
<div class="container-fluid bg-primary py-5 mb-5 page-header">
  <div class="container py-5">
    <div class="row justify-content-center">
      <div class="col-lg-10 text-center">
        <h1 class="display-3 text-white animated slideInDown">Detalles del curso</h1>
      </div>
    </div>
  </div>
</div>
{% endblock contenido_externo %}




{% block contenido %}

<div class="container-fluid" style="background-color: #2F3659; border-radius: 10px;" >
  <div class="container py-5">
    <div class="row">
      <div class="col-md-12 col-lg-5 order-md-0 order-lg-1">
        <div class="embed-responsive embed-responsive-16by9">
          <center>
            <img src="{{ curso.miniatura.url }}" style="min-width: 100px; min-height: 100px; max-width: 100px; max-height: 100px; border-radius: 10px; justify-content: center;">
          </center>
<div class="container-xxl py-5">
  <div class="container">
      <div class="row g-5">
          <div class="col-lg-6 wow fadeInUp" data-wow-delay="0.1s" style="min-height: 400px;">
              <div class="position-relative h-100">
                  <img class="img-fluid position-absolute w-100 h-100" src="{{ curso.miniatura.url }}" alt="" style="object-fit: cover;">
              </div>
          </div>
      <div class="col-md-12  col-lg-7 text-white order-md-1 order-lg-0">
        <h1 style="color: white;max-width: 80%; white-space: normal; word-wrap: break-word;" class=" mb-0 text-center" >{{ curso.nombre }}</h1>
        <p class="mb-0" style="font-size: 13px;">Creado por: {{curso.instructor.first_name}} {{curso.instructor.last_name}}</p>
        <div class="pt-1">
          <ul class="list-unstyled d-flex">
          <div class="col-lg-6 wow fadeInUp" data-wow-delay="0.3s">
              <h6 class="section-title bg-white text-start text-primary pe-3">Acerca del curso</h6>
              <h1 class="mb-4">{{ curso.nombre }}</h1>
              <p class="mb-4">{{curso.descripcion}}</p>
              <p class="mb-4">Categorías:</p>
              <div class="row gy-2 gx-4 mb-4">
                {% for etiqueta in etiquetas %}
              <li class="px-2 bg-primary fw-bold rounded-pill me-1" style="font-size: 11px;">
                  <div class="col-sm-6">
                    <p class="mb-0">
                        <i class="fa fa-arrow-right text-primary me-2"></i>
                        {{ etiqueta.nombre }}
              </li>
            {% endfor %}
          </ul>
        </div>
      </div>
                    </p>
                  </div>
                {% endfor %}
              </div>
          </div>

<div class="card">
  <div class="card-body">
    <div class="border p-4"><p class="small justify-content-center"> {{curso.descripcion}}</p>
      </div>
  </div>
</div>

<div class="container mt-4">
  <div class="row">

    <div class="col-lg-6">
      <div class="mb-3">
        <label class="fw-bold fs-4 mb-4"> Contenido del curso</label>
@@ -101,24 +78,8 @@
      </div>
    </div>
  </div>

  <table class="table table-bordered table-bordered-all table-light">
    <tbody>
      {% if request.user.user_type == 'instructor' or request.user.user_type == 'admin' or request.user.is_superuser %}
        <tr>
            <td class="px-4 fw-bold"> 
              <a>
                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
                   <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                   <path d="M12.5 21h-7.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5"></path>
                   <path d="M16 19h6"></path>
                   <path d="M19 16v6"></path>
                </svg>
                Agregar clase
              </a>
            </td>
        </tr>
      {% endif %}
      {% for clase in clases %}
        <tr>
            <td class="px-4 fw-bold"> 
@@ -134,7 +95,6 @@
    </tbody>
  </table>

  <!-- Apartado del 'Acerca del instructor' -->
  <div class="card">
    <div class="card-body">
      <div class="border p-4">
@@ -153,7 +113,6 @@
            </ul>
          </div>
        </div>

        <p class="small"> 
          {% if  curso.instructor.descripcion  %}
            {{ curso.instructor.descripcion }}
@@ -162,15 +121,8 @@
          {% endif %}
         </p>
      </div>

    </div>
  </div>
  <!-- Fin del apartado del 'Acerca del instructor' --> 
</div>



{% endblock contenido %}

{% block js %} 
{% endblock js %}
 No newline at end of file
{% endblock contenido_externo %}
+1 −2
Original line number Diff line number Diff line
@@ -99,7 +99,6 @@ def get_curso(request, curso_id):
@login_required
@user_passes_test(lambda user: user.user_type == 'instructor' )
def get_curso_instructor(request):
    print('sfsada')
    cursos = Curso.objects.filter(instructor=request.user, solicitudcurso__isnull=True)
    contexto = get_pagination_context(cursos, request)
    return render(request, 'curso/lista-curso.html', contexto)
@@ -204,7 +203,7 @@ def editar_curso(request, curso_id):
@user_passes_test(lambda user: user.user_type == 'admin' or user.is_superuser)
def agregar_etiqueta(request):
    if request.method == 'POST':
        form = EtiquetaForm(request.POST)
        form = EtiquetaForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request,'Se ha agregado correctamente la etiqueta.')
+136 KiB
Loading image diff...
+269 KiB
Loading image diff...
+269 KiB
Loading image diff...
+269 KiB
Loading image diff...
(284 KiB)

File changed.

No diff preview for this file type.

+16 B (1.13 KiB)

File changed.

No diff preview for this file type.

+16 B (200 B)

File changed.

No diff preview for this file type.

static/css/buscador.css

deleted100644 → 0
+0 −79
Original line number Diff line number Diff line

    /* Estilo para los resultados de búsqueda */
    .search-results-container {
      position: absolute;
      top: 100%; /* Mover los resultados debajo del campo de búsqueda */
      right: 10px; /* Colocar los resultados al lado derecho del campo de búsqueda */
      width: 40%;
      background-color: #181d38; /* Fondo blanco */
      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* Sombra */
      z-index: 1000; /* Asegura que esté por encima de otros elementos */
      max-height: 200px; /* Altura máxima de la lista de resultados */
      overflow-y: auto; /* Agrega una barra de desplazamiento si es necesario */
      margin-top:20px;
      border-radius:10px;
      scrollbar-width: thin; /* Establece el grosor de la barra de desplazamiento (puede ser "thin" o "auto") */
      scrollbar-color: #999 #181d38;

    }
  
    .search-result-card {
      display: flex; /* Usar flexbox para alinear imagen y texto */
      padding: 10px;
      
     
      transition: background-color 0.2s; /* Transición de color de fondo */
    }
  
    .search-result-card:hover {
      background-color: #f5f5f5; /* Color de fondo cuando se pasa el mouse */
    }
  
    /* Estilo para la imagen del resultado */
    .search-result-img {
      width: 60px; /* Ancho de la imagen */
      height: auto; /* Altura automática para mantener la proporción */
      margin-right: 10px; /* Espacio a la derecha de la imagen */
    }
  
    /* Estilos para los elementos de resultados */
    .search-result-info {
      flex-grow: 1; /* Hace que la información ocupe el espacio restante */
    }
  
    .search-result-title {
      font-size: 16px;
      margin-bottom: 5px;
    }
  
    .search-result-description {
      font-size: 14px;
      color: #777; /* Color de texto gris para la descripción */
    }

  


/* Estilo para navegadores basados en WebKit (como Chrome y Safari) */
.search-results-container::-webkit-scrollbar {
  width: 10px; /* Ancho de la barra de desplazamiento */
}

.search-results-container::-webkit-scrollbar-thumb {
  background-color: #ffffff; /* Color del control deslizante de la barra de desplazamiento */
  border-radius: 10px;
}

.search-results-container::-webkit-scrollbar-track {
  background-color: #181d38; /* Color de fondo de la barra de desplazamiento */
  border-radius: 10px;
}

/* Estilo para navegadores basados en Firefox */
.search-results-container {
  scrollbar-color: #999 #181d38; /* Establece el color de la barra de desplazamiento en Firefox */
}
.scrollable {
  max-height: 300px; /* Altura máxima que mostrará, ajusta según tus necesidades */
  overflow-y: scroll; /* Agrega una barra de desplazamiento vertical si se desborda */
}
 No newline at end of file
+25 −0
Original line number Diff line number Diff line
.contenedor{
    width: 80%;
    margin: auto;
}
.scrollable-list {
    max-height: 400px; 
    overflow-y: scroll;
    border: 1px solid #ccc;
    padding: 10px;
}


.scrollable-list::-webkit-scrollbar {
    width: 10px;
  }
  
.scrollable-list::-webkit-scrollbar-thumb {
    background-color: #949494;
    border-radius: 10px;
}
  
.scrollable-list::-webkit-scrollbar-track {
    background-color: #dbdbdb;
    border-radius: 10px;
}
 No newline at end of file
+0 −9
Original line number Diff line number Diff line
@@ -78,15 +78,6 @@
    border-radius: 0px;
}

.btn-responsive{
    display: block;
}

@media (min-width: 980px){
    .btn-responsive{
        display: none;
    }
}

/*** Navbar ***/
.navbar .dropdown-toggle::after {
+59.3 KiB
Loading image diff...

static/js/buscador.js

deleted100644 → 0
+0 −68
Original line number Diff line number Diff line
const searchInput = document.getElementById('search-input');
    const searchResults = document.getElementById('search-results');
  
    searchInput.addEventListener('input', function() {
        const query = searchInput.value.toLowerCase();
  
        if (query.trim() === '') {
            searchResults.style.display='none'
            return;
        }

        searchResults.style.display = ''; // Mostrar resultados si hay texto en el campo
        searchResults.innerHTML = '';
        let searchArreglo=[]

        fetch('/api/solicitudCursos_api/')
        .then(response=> response.json())
        .then(data=>{
            searchArreglo=data
        })
        fetch(`/api/curso_api/`) 
         .then(response => response.json())
         .then(data => {
          
             const filteredResults = data.filter(item => item.nombre.toLowerCase().includes(query));
             const filteredResultsSearch = filteredResults.filter(dataResult => {
                return !searchArreglo.some(searchResult => searchResult.curso === dataResult.id);
            });

            filteredResultsSearch.forEach(item => {
                 const resultCard = document.createElement('div');
                 resultCard.classList.add('search-result-card');
  
                 const resultLink = document.createElement('a');
                 resultLink.classList.add('search-result-link');
                 resultLink.href = `/curso/ver_curso/${item.id}/`;  
                 const resultContent = document.createElement('div');
                 resultContent.classList.add('search-result-content');
  
                 const resutlCardImg = document.createElement('img');
                 resutlCardImg.classList.add('search-result-img');
                 resutlCardImg.src = item.miniatura; // Cambiar esto según la estructura de tus datos
                 resultContent.appendChild(resutlCardImg);
  
                 const resultInfo = document.createElement('div');
                 resultInfo.classList.add('search-result-info');
  
                 const resultTitle = document.createElement('h3');
                 resultTitle.classList.add('search-result-title');
                 resultTitle.textContent = item.nombre;
  
                 const resultDescription = document.createElement('p');
                 resultDescription.classList.add('search-result-description');
                 resultDescription.textContent = item.descripcion;
  
                 resultInfo.appendChild(resultTitle);
                 resultInfo.appendChild(resultDescription);
                 resultContent.appendChild(resultInfo);
  
                 resultLink.appendChild(resultContent);
                 resultCard.appendChild(resultLink);
                 searchResults.appendChild(resultCard);
             });
         })
         .catch(error => {
             console.error("Error al obtener datos de la API:", error);
         });
    });
+133 −134
Original line number Diff line number Diff line

const csrfToken = document.querySelector('#csrf-form [name=csrfmiddlewaretoken]').value;

async function obtenerDatosApi() {
  try {
    const usuario_id = parseInt(document.getElementById("id_usuario").textContent);
@@ -44,16 +44,12 @@ async function obtenerCursosYClases() {
    cursos: responseCursos.data,
    clases: responseClases.data,
  };
  
}


function calcularPromedioPorcentaje(clasesVistasCount, totalClases) {
  return (clasesVistasCount / totalClases) * 100;
}



function mostrarCursosConPromedio(data_curso) {
  obtenerCursosYClases().then(data => {
    const cursosContainer = document.getElementById('cursos-container');
@@ -61,12 +57,13 @@ const obtenerCursosVistos = data_curso.filter(curso_usuario_visto => curso_usuar

    const cursosVistosCount = new Map();
    const cursosMostrados = new Set(); // Conjunto para llevar un registro de los cursos ya mostrados
if (obtenerCursosVistos.length==0) {

}
    console.log(obtenerCursosVistos)
    if (obtenerCursosVistos.length===0) {
      document.getElementById('sin_cursos').style.display='block'
    }else{
      document.getElementById('sin_cursos').style.display='none'
      obtenerCursosVistos.forEach(item => {
        const cursosEncontrados = data.cursos.filter(cursos => cursos.id === item.curso);

        cursosEncontrados.forEach(curso => {
          if (!cursosMostrados.has(curso.id)) {
            const clasesDelCurso = data.clases.filter(clase => clase.curso === curso.id);
@@ -111,7 +108,7 @@ obtenerCursosVistos.forEach(item => {
              h3.classList.add('mb-1');
  
              const a = document.createElement('a');
        a.href = '#';
              a.href = `/clase/clases_estudiante/${item.id}/`;
              a.classList.add('text-reset');
              a.textContent = curso.nombre;
              
@@ -183,8 +180,10 @@ obtenerCursosVistos.forEach(item => {
          }
        });
      });
}).catch(error => {
console.error('Error:', error);
    }

    
  });
}

obtenerDatosApi();
+26 −15
Original line number Diff line number Diff line

{% load static %}
<link href="{% static 'css/buscador.css'  %} " rel="stylesheet">

{% if request.user.is_authenticated %}
<div class="collapse navbar-collapse" id="navbarCollapse">
  
    <div class="navbar-nav ms-auto p-4 p-lg-0">
      <a href="{% url 'curso:lista_cursos_estudiante' %}" class="nav-item nav-link active">Inicio</a>
      <a href="{% url 'curso:todos_los_cursos' %}" class="nav-item nav-link">Todos los cursos</a>
      <a href="{% url 'curso:todos_los_cursos' %}" class="nav-item nav-link">Cursos</a>
      <a href="{% url 'videollamada:lista_videollamada' %}" class="nav-item nav-link">Conferencias</a>
    </div>
    
@@ -17,16 +16,13 @@
      </div>
    </form>
    
    <div id="search-results" class="position-absolute top-140  scrollable bg-black" style="display: none; background-color: #181d38; right:20px; top:80px; border-radius: 10px;">
      <!-- Contenido de resultados de búsqueda aquí -->
    </div>
    
  <!-- Resultados de la búsqueda -->

    </form>
    
    <div class="navbar-nav ms-auto order-md-last"> 
      
      
      <div class="nav-item dropdown  ">
        <a href="#" class="nav-link d-flex lh-1 text-reset p-0" data-bs-toggle="dropdown" aria-label="Open user menu">
          <img src="{{ request.user.profile_picture.url }}" style="width: 30px; height: 30px;">
@@ -36,14 +32,30 @@
          </div>
        </a>
      
        <div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow  ">
          <a href="{% url 'usuario:perfil' %}" class="dropdown-item">Ver perfil</a>
          <a href="{% url 'curso:cursos_inscritos' %}" class="dropdown-item">Mis cursos</a>
          <a href="{% url 'curso:mostrar_avance' %}" class="dropdown-item">Avance</a>
          <a href="#" class="dropdown-item">Profile & account</a>
          <a href="#" class="dropdown-item">Feedback</a>
        <div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow dropdown-menu-left">
          <a href="{% url 'usuario:perfil' %}" class="dropdown-item">
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person" viewBox="0 0 16 16">
              <path d="M8 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 1a5 5 0 1 1 0-10 5 5 0 0 1 0 10z"/>
              <path d="M8 10a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0 1c-2.5 0-7 1.285-7 3.5V15h14v-0.5C15 12.285 10.5 11 8 11z"/>
            </svg>
            Ver perfil
          </a>
          <a href="{% url 'curso:cursos_inscritos' %}" class="dropdown-item">
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-book" viewBox="0 0 16 16">
              <path d="M5 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-3a1 1 0 0 0-1-1H5z"/>
              <path d="M1 4a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4z"/>
            </svg>
            Mis cursos
          </a>
          <a href="{% url 'curso:mostrar_avance' %}" class="dropdown-item">
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-bar-chart" viewBox="0 0 16 16">
              <path d="M1 1.5a.5.5 0 0 1 .5-.5h12a.5.5 0 0 1 0 1H1.5a.5.5 0 0 1-.5-.5zM.5 3a.5.5 0 0 1 .5-.5h12a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5zM.5 5a.5.5 0 0 1 .5-.5h12a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5zM.5 7a.5.5 0 0 1 .5-.5h12a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5zM0 10.5a.5.5 0 0 1 .5-.5h16a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5z"/>
            </svg>
            Mis avances 
          </a>
      
          <div class="dropdown-divider"></div>
          <a href="#" class="dropdown-item">Settings</a>
      
          <a href="{% url 'usuario:cerrar_sesion' %}" class="dropdown-item">Cerrar sesión</a>
        </div>
      </div>
@@ -51,7 +63,6 @@
    </div>
</div>

<script src="{% static 'js/buscador.js' %}"></script>

    
</div>
+3 −4
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
              <img src="{% static 'img/Logos Labsol 2023-02.png' %}" class="navbar-brand-image" style="width: 250px; height: 66px; background-color: white; object-fit: cover;">
            </a>
          </h1>
          <div class="collapse navbar-collapse" id="navbar-menu">
          <div class="collapse navbar-collapse w-100" id="navbar-menu">
            <ul class="navbar-nav pt-lg-3">
              {% if request.user.is_superuser %}
                {% include 'opciones_superadmin.html' %}
@@ -51,11 +51,10 @@
                </div>
              </a>
              <div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
                {% if request.user.user_type == 'administrador' or request.user.user_type == 'instructor' %}
                <a href="{% url 'usuario:perfil' %}" class="dropdown-item">Ver perfil</a>
                <a href="#" class="dropdown-item">Profile & account</a>
                <a href="#" class="dropdown-item">Feedback</a>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">Settings</a>
                {% endif %}
                <a href="{% url 'usuario:cerrar_sesion' %}" class="dropdown-item">Cerrar sesión</a>
              </div>
            </div>
+0 −3
Original line number Diff line number Diff line
@@ -64,10 +64,7 @@
                </a>
                <div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
                  <a href="{% url 'usuario:perfil' %}" class="dropdown-item">Ver perfil</a>
                  <a href="#" class="dropdown-item">Profile & account</a>
                  <a href="#" class="dropdown-item">Feedback</a>
                  <div class="dropdown-divider"></div>
                  <a href="#" class="dropdown-item">Settings</a>
                  <a href="{% url 'usuario:cerrar_sesion' %}" class="dropdown-item">Cerrar sesión</a>
                </div>
              </div>
+59 −10
Original line number Diff line number Diff line
@@ -13,11 +13,12 @@

    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css" rel="stylesheet">

    <link href="{% static 'css/clases_estudiantes.css'  %}" rel="stylesheet">
    <link href="{% static 'css/animate.min.css'  %}" rel="stylesheet">
    <link href="{% static 'css/owl.carousel.min.css'  %} " rel="stylesheet">
    <link href="{% static 'css/bootstrap.min.css'  %}" rel="stylesheet">
    <link href="{% static 'css/style.css'  %} " rel="stylesheet">
    <link href="{% static 'css/buscador.css'  %} " rel="stylesheet">

</head>

@@ -32,16 +33,64 @@


    <!-- Navbar Start -->
    <nav class="navbar navbar-expand-lg bg-white navbar-light shadow sticky-top p-0">
        <a href="{% url 'iniciar_sesion' %}" class="navbar-brand d-flex align-items-center px-4 px-lg-5">
    <nav class="navbar navbar-expand-lg bg-white navbar-light shadow sticky-top py-0 px-2">
        <a href="{% url 'iniciar_sesion' %}" class="navbar-brand d-flex align-items-center px-1 px-lg-5">            
            <h2 class="m-0 text-primary"><i class="fa fa-book me-3"></i>Labsol Academy </h2> 
        </a>
        <button type="button" class="navbar-toggler me-4" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#navbar-menu">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarCollapse">
              <div class="navbar-nav ms-auto p-4 p-lg-0"> 
                  {% block nav_externo %} {% endblock nav_externo %}
        <div class="collapse navbar-collapse" id="navbar-menu">
            <div class="navbar-nav ms-auto align-items-lg-center p-4 p-lg-0">
                {% if request.user.is_authenticated %}
                    <a href="{% url 'curso:lista_cursos_estudiante' %}" class="nav-item nav-link active">Inicio</a>
                    <a href="{% url 'curso:todos_los_cursos' %}" class="nav-item nav-link">Cursos</a>
                    <a href="{% url 'videollamada:lista_videollamada' %}" class="nav-item nav-link">Conferencias</a>
                    <form action="{% url 'buscar' %}" method="get" class="py-4 mr-3">
                        <input type="search" value="{{ query }}" class="buscador form-control" placeholder="Buscar" aria-label="Search in website" name="q" id="search-input">
                    </form>
                    <div id="search-results" class="position-absolute top-140 scrollable bg-black" style="display: none; background-color: #181d38; right:20px; top:80px; border-radius: 10px;"></div>
                    <div class="nav-item dropdown">
                        <a href="#" class="nav-link d-flex lh-1 text-reset px-2 py-0" data-bs-toggle="dropdown" aria-label="Open user menu">
                            <img src="{{ request.user.profile_picture.url }}" style="width: 30px; height: 30px;">
                            <div class="d-none d-xl-block ps-2">
                                <div>{{ request.user.first_name }}</div>
                                <div class="mt-1 small text-muted">{{ request.user.user_type }} {% if request.user.is_superuser %} Super-admin {% endif %}</div>
                            </div>
                        </a>
                        <div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
                            <a href="{% url 'usuario:perfil' %}" class="dropdown-item">Ver perfil</a>
                            <a href="{% url 'curso:mostrar_avance' %}" class="dropdown-item">Avance</a>
                            <a href="{% url 'curso:cursos_inscritos' %}" class="dropdown-item">Mis cursos</a>
                            <div class="dropdown-divider"></div>
                            <a href="{% url 'usuario:cerrar_sesion' %}" class="dropdown-item">Cerrar sesión</a>
                        </div>
                    </div>
                {% else %}
                    <form action="{% url 'buscar' %}" method="get" class="me-3 py-3">
                        <input type="search" value="{{ query }}" class="buscador form-control" placeholder="Buscar" aria-label="Search in website" name="q" id="search-input">
                    </form>
                    <a class="nav-item nav-link active" style="cursor: pointer;" data-bs-toggle="modal" data-bs-target="#registro">
                        <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
                            <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                            <path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path>
                            <path d="M16 19h6"></path>
                            <path d="M19 16v6"></path>
                            <path d="M6 21v-2a4 4 0 0 1 4 -4h4"></path>
                        </svg>
                        Registrarse
                    </a>
                    <a data-bs-toggle="modal" data-bs-target="#login" class="nav-item btn btn-primary py-4 px-lg-5 d-lg-block">
                        <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-logout" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
                            <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                            <path d="M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"></path>
                            <path d="M9 12h12l-3 -3"></path>
                            <path d="M18 15l3 -3"></path>
                        </svg>
                        Iniciar sesión
                    </a>
                    <div id="search-results" class="search-results-container" style="display: none;"></div>
                {% endif %}
            </div>
        </div>
    </nav>
@@ -106,7 +155,7 @@
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="{% static 'js/wow.min.js'  %}  "></script>
    <script src="{% static 'js/owl.carousel.min.js'  %}"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js"></script>
    {% comment %} <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js"></script> {% endcomment %}
    <script src="{% static 'js/main.js'  %} "></script>
</body>

+6 −11
Original line number Diff line number Diff line
{% extends 'base_externa.html' %} 
{% load static %}

<!-- Barra de navegación -->
{% block nav_externo %}  {% include 'opciones_nav.html' %} {% endblock nav_externo %}
<!-- Fin de barra de navegación -->

{% block contenido_externo %} 
    <!-- Carousel Start -->
    <div class="container-fluid p-0 mb-5">
@@ -121,7 +117,7 @@
            <div class="row g-5">
                <div class="col-lg-6 wow fadeInUp" data-wow-delay="0.1s" style="min-height: 400px;">
                    <div class="position-relative h-100">
                        <img class="img-fluid position-absolute w-100 h-100" src="img/about.jpg" alt="" style="object-fit: cover;">
                        <img class="img-fluid position-absolute w-100 h-100" src="img/about.jpg" alt="Imagen de Labsol Academy" style="object-fit: cover;">
                    </div>
                </div>
                <div class="col-lg-6 wow fadeInUp" data-wow-delay="0.3s">
@@ -171,7 +167,7 @@
            <div class="owl-carousel testimonial-carousel position-relative">
                {% for curso in cursos %}
                    <div class="testimonial-item text-center" style="display: flex; flex-direction: column; align-items: center; text-align: center;">
                        <img class="border rounded-circle p-2 mx-auto mb-3" src="{{ curso.miniatura.url }}" style="width: 80px; height: 80px;">
                        <img class="border rounded-circle p-2 mx-auto mb-3" src="{{ curso.miniatura.url }}" style="width: 80px; height: 80px;" alt="imange del curso">
                        <h5 class="mb-0 text-center" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px;">{{curso.nombre}}</h5>
                        <p class="text-center">{{ curso.instructor }}</p>
                        <div class="testimonial-text bg-light text-center p-4">
@@ -198,7 +194,7 @@
                    <div class="col-sm-6 col-md-4 col-lg-3 mb-5">
                        <div class="card shadow" style="border: none;">
                            <div class="card-body text-center">
                                <p class="card-text"> <img src="" style="width:30px; height: 30px;"/> </p>
                                <p class="card-text"> <img src="{{ etiqueta.miniatura.url }}" style="width:30px; height: 30px;"/> </p>
                                <h5 class="card-text fs-6 fw-bold">{{ etiqueta.nombre }}</h5>
                                <div class="d-flex flex-column etiqueta-container">
                                    <p class="card-text fst-italic text-center" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 300px;">{{etiqueta.descripcion}}</p>
@@ -226,7 +222,7 @@
                    <div class="col-lg-3 col-md-6 wow fadeInUp " data-wow-delay="0.1s">
                        <div class="team-item bg-light ">
                            <div class="overflow-hidden">
                                <img class="img-fluid " style=" width: 100%; height: 300px  "  src="{{ instructor.profile_picture.url }}" alt="">
                                <img class="img-fluid " style=" width: 100%; height: 300px  "  src="{{ instructor.profile_picture.url }}" alt="Foto de perfil de instructor">
                            </div>
                            <div class="text-center p-4">
                                <h5 class="mb-0">{{instructor.first_name}} {{ instructor.last_name }}</h5>
@@ -238,8 +234,7 @@
            </div>
        </div>
    </div>
    <!-- Apartado de instructores -->
<script src="{% static 'js/display_etiquetas.js' %}"></script>

{% endblock contenido_externo %}

{% block modal_externo %} 
@@ -249,5 +244,5 @@

{% block js_externo %} 
{% include 'usuario/modal-script.html' %}

<script src="{% static 'js/display_etiquetas.js' %}"></script>
{% endblock js_externo %}
 No newline at end of file

templates/opciones_nav.html

deleted100644 → 0
+0 −34
Original line number Diff line number Diff line
{% load static %}
<link href="{% static 'css/buscador.css'  %} " rel="stylesheet">

  
<form action="{% url 'buscar' %}" method="get">
    <div class="py-3">
        <input type="search" value="{{ query }}" class="buscador form-control" placeholder="Buscar" aria-label="Search in website" name="q" id="search-input">
    </div>

</form>
<a  class="nav-item nav-link active" data-bs-toggle="modal" data-bs-target="#registro">
    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
        <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
        <path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path>
        <path d="M16 19h6"></path>
        <path d="M19 16v6"></path>
        <path d="M6 21v-2a4 4 0 0 1 4 -4h4"></path>
      </svg>
    Registrarse
</a>
<a data-bs-toggle="modal" data-bs-target="#login" class="nav-item btn btn-primary py-4 px-lg-5 d-lg-block">
    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-logout" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
        <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
        <path d="M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"></path>
        <path d="M9 12h12l-3 -3"></path>
        <path d="M18 15l3 -3"></path>
    </svg>
    Iniciar sesión
</a>

  <div id="search-results" class="search-results-container" style="display: none;">

  </div>
<script src="{% static 'js/buscador.js' %}"></script>
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ from django.http import JsonResponse
from django.urls import reverse

def procesar_registro_interno(usuario,request):
    enviar_correo_registro(usuario)
    #enviar_correo_registro(usuario)
    messages.success(request, 'Ha sido agregado satisfactoriamente el usuario.')
    redirect_url = None
    if usuario.user_type == 'estudiante':
+5 −0
Original line number Diff line number Diff line
@@ -4,6 +4,11 @@

{% block title %} Listado de {{tipo_usuarios}} {% endblock title %}
{% block botones %} 
<span class="d-none d-sm-inline">
  <div class="input-group w-100">
    <input type="text" class="form-control rounded-start" placeholder="Buscar usuario">
  </div> 
</span>
<span class="d-none d-sm-inline">
  <a class="btn btn-outline-primary btn-pill w-100" data-bs-toggle="modal" data-bs-target="#registro">
    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-square-rounded-plus" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
+0 −6
Original line number Diff line number Diff line
@@ -2,12 +2,6 @@
{% load static %}

{% block contenido %}
<a href="javascript:history.back()" class="btn btn-square btn-responsive ms-3 mt-3">
    <svg style="color: var(--primary);" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" fill="currentColor" class="bi bi-arrow-left-square-fill" viewBox="0 0 16 16">
        <path d="M16 14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12zm-4.5-6.5H5.707l2.147-2.146a.5.5 0 1 0-.708-.708l-3 3a.5.5 0 0 0 0 .708l3 3a.5.5 0 0 0 .708-.708L5.707 8.5H11.5a.5.5 0 0 0 0-1z"/>
      </svg>
</a>

<div class="container-xxl py-5">
    <div class="container">
        <div class="text-center wow fadeInUp" data-wow-delay="0.1s">
+13 −5
Original line number Diff line number Diff line
@@ -15,14 +15,23 @@ from .models import UsuarioPersonalizado
class UserLoginView(LoginView):
    template_name = 'index.html'

    def get_context_data(self, **kwargs):
    def dispatch(self, request, *args, **kwargs):
        if self.request.user.is_authenticated:
            if self.request.user.is_superuser or self.request.user.user_type in ['admin']:
                return redirect('curso:lista_cursos')
            elif  self.request.user.user_type == 'instructor':
                return redirect('curso:cursos_instructor')
            else:
                return redirect('curso:lista_cursos_estudiante')
        else:
            return super().dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['actividad'] = 'Registro de usuarios'
        context['act'] = 'externo'
        context['cursos'] = Curso.objects.exclude(solicitudcurso__curso__isnull=False)[:15]
        context['etiquetas'] = Categoria.objects.all()[:15]
       
        context['instructores'] = UsuarioPersonalizado.objects.filter(user_type='instructor', solicitud__isnull=True)[:4]
        context['forms'] = FormUsuario()
        context['direccion_url'] = 'usuario:registro'
@@ -59,7 +68,6 @@ def registro(request):
            else:
                return procesar_registro_externo(usuario)    
        else:
            print(form.errors)
            return JsonResponse({'success': False, 'errors': form.errors})
    else:
        form = FormUsuario()