Commit 9b18475d authored by Emmanuel René Huchim Puc's avatar Emmanuel René Huchim Puc

Merge branch 'dev' of gitlab.geoint.mx:mario.chirinos/GeoInt_SIDT into dev

parents eef3c6f3 ae21d2b0
...@@ -41,6 +41,7 @@ INSTALLED_APPS = [ ...@@ -41,6 +41,7 @@ INSTALLED_APPS = [
'django.contrib.humanize', 'django.contrib.humanize',
'catalog.apps.CatalogConfig', 'catalog.apps.CatalogConfig',
'reports.apps.ReportsConfig', 'reports.apps.ReportsConfig',
'mail.apps.MailConfig',
'django_extensions', 'django_extensions',
] ]
...@@ -142,4 +143,13 @@ STATICFILES_DIRS = [ ...@@ -142,4 +143,13 @@ STATICFILES_DIRS = [
STATIC_URL = '/static/' STATIC_URL = '/static/'
# Redirect to home URL after login (Default redirects to /accounts/profile/) # Redirect to home URL after login (Default redirects to /accounts/profile/)
LOGIN_REDIRECT_URL = '/' LOGIN_REDIRECT_URL = '/'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' #######################################################
# E-mail
#######################################################
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'soporte.repsat@gmail.com'
EMAIL_HOST_PASSWORD = 'soporterepsatdev'
...@@ -22,10 +22,11 @@ from django.conf import settings ...@@ -22,10 +22,11 @@ from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
urlpatterns = [ urlpatterns = [
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),
url(r'^catalog/', include('catalog.urls')), url(r'^catalog/', include('catalog.urls')),
url(r'^reports/', include('reports.urls')), url(r'^reports/', include('reports.urls')),
url(r'^$', RedirectView.as_view(url='/catalog/', permanent=True)), url(r'^$', RedirectView.as_view(url='/catalog/', permanent=True)),
url(r'^accounts/', include('django.contrib.auth.urls')), url(r'^accounts/', include('django.contrib.auth.urls')),
] url(r'^mail/', include('mail.urls')),
#+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) ]
# + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
...@@ -11,7 +11,6 @@ class AuthRequiredMiddleware(object): ...@@ -11,7 +11,6 @@ class AuthRequiredMiddleware(object):
def __call__(self, request): def __call__(self, request):
# Code to be executed for each request before # Code to be executed for each request before
# the view (and later middleware) are called. # the view (and later middleware) are called.
response = self.get_response(request) response = self.get_response(request)
print(request.path_info) print(request.path_info)
print(reverse('login')) print(reverse('login'))
...@@ -19,10 +18,10 @@ class AuthRequiredMiddleware(object): ...@@ -19,10 +18,10 @@ class AuthRequiredMiddleware(object):
# if request.path_info == reverse('ws-news-list2'): # if request.path_info == reverse('ws-news-list2'):
# return response # return response
if not request.user.is_authenticated and request.path_info != reverse('login'): if not request.user.is_authenticated and request.path_info != reverse('login') and not request.user.is_active:
return HttpResponseRedirect(reverse('login')) return HttpResponseRedirect(reverse('login'))
# Code to be executed for each request/response after # Code to be executed for each request/response after
# the view is called. # the view is called.
return response return response
...@@ -47,6 +47,7 @@ class CartProduct(models.Model): ...@@ -47,6 +47,7 @@ class CartProduct(models.Model):
info = models.TextField(null=True) info = models.TextField(null=True)
purchased = models.NullBooleanField() purchased = models.NullBooleanField()
# ------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------
class Process(models.Model): class Process(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
...@@ -60,7 +61,7 @@ class Search(models.Model): ...@@ -60,7 +61,7 @@ class Search(models.Model):
aggreg_date = models.DateTimeField(auto_now=True) # date of product aggregation aggreg_date = models.DateTimeField(auto_now=True) # date of product aggregation
startDate = models.DateTimeField(verbose_name='Start Date') startDate = models.DateTimeField(verbose_name='Start Date')
endDate = models.DateTimeField(verbose_name='End Date') endDate = models.DateTimeField(verbose_name='End Date')
process = models.ForeignKey(Process, on_delete=models.CASCADE, default='') #Desbloqueo cambio de Sergio process = models.ForeignKey(Process, on_delete=models.CASCADE, default='') # Desbloqueo cambio de Sergio
clouds = models.IntegerField(default=4) clouds = models.IntegerField(default=4)
...@@ -71,4 +72,4 @@ class Purchase(models.Model): ...@@ -71,4 +72,4 @@ class Purchase(models.Model):
productList = models.TextField(verbose_name="JSON Product List") productList = models.TextField(verbose_name="JSON Product List")
purchased = models.BooleanField(default=False) purchased = models.BooleanField(default=False)
price = models.FloatField(default=0.0) price = models.FloatField(default=0.0)
progress = models.IntegerField(default=0,max_length=3)
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class MailConfig(AppConfig):
name = 'mail'
from django.db import models
# Create your models here.
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<!------ Include the above in your HEAD tag ---------->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>RepSat Notification</title>
<style>
{
margin: 0
;
padding: 0
;
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif
;
box-sizing: border-box
;
font-size: 14px
;
}
img {
max-width: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6;
}
table td {
vertical-align: top;
}
body {
background-color: #f6f6f6;
}
.body-wrap {
background-color: #f6f6f6;
width: 100%;
}
.container {
display: block !important;
max-width: 600px !important;
margin: 0 auto !important;
clear: both !important;
}
.content {
max-width: 600px;
margin: 0 auto;
display: block;
padding: 20px;
}
.main {
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 3px;
}
.content-wrap {
padding: 20px;
}
.content-block {
padding: 0 0 20px;
}
.header {
width: 100%;
margin-bottom: 20px;
}
.footer {
width: 100%;
clear: both;
color: #999;
padding: 20px;
}
.footer a {
color: #999;
}
.footer p,
.footer a,
.footer unsubscribe,
.footer td {
font-size: 12px;
}
.column-left {
float: left;
width: 50%;
}
.column-right {
float: left;
width: 50%;
}
h1,
h2,
h3 {
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
color: #000;
margin: 40px 0 0;
line-height: 1.2;
font-weight: 400;
}
h1 {
font-size: 32px;
font-weight: 500;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 14px;
font-weight: 600;
}
p,
ul,
ol {
margin-bottom: 10px;
font-weight: normal;
}
p li,
ul li,
ol li {
margin-left: 5px;
list-style-position: inside;
}
a {
color: #348eda;
text-decoration: underline;
}
.btn-primary {
text-decoration: none;
color: #FFF;
background-color: #348eda;
border: solid #348eda;
border-width: 10px 20px;
line-height: 2;
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
}
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.padding {
padding: 10px 0;
}
.aligncenter {
text-align: center;
}
.alignright {
text-align: right;
}
.alignleft {
text-align: left;
}
.clear {
clear: both;
}
.alert {
font-size: 16px;
color: #fff;
font-weight: 500;
padding: 20px;
text-align: center;
border-radius: 3px 3px 0 0;
}
.alert a {
color: #fff;
text-decoration: none;
font-weight: 500;
font-size: 16px;
}
.alert.alert-warning {
background: #ff9f00;
}
.alert.alert-bad {
background: #d0021b;
}
.alert.alert-good {
background: #68b90f;
}
.invoice {
margin: 40px auto;
text-align: left;
width: 80%;
}
.invoice td {
padding: 5px 0;
}
.invoice .invoice-items {
width: 100%;
}
.invoice .invoice-items td {
border-top: #eee 1px solid;
}
.invoice .invoice-items .total td {
border-top: 2px solid #333;
border-bottom: 2px solid #333;
font-weight: 700;
}
@media only screen and (max-width: 640px) {
h1, h2, h3, h4 {
font-weight: 600 !important;
margin: 20px 0 5px !important;
}
h1 {
font-size: 22px !important;
}
h2 {
font-size: 18px !important;
}
h3 {
font-size: 16px !important;
}
.container {
width: 100% !important;
}
.content,
.content-wrapper {
padding: 10px !important;
}
h3 {
font-size: 32px !important;
font-weight: bold !important;
margin-top: 0px !important;
}
.invoice {
width: 100% !important;
}
}
</style>
</head>
<body>
<table class="body-wrap">
<tr>
<td></td>
<td class="container" width="600">
<div class="content">
<table class="main" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block" style="text-align:center;">
<img src="http://www.geoint.mx/images/logos/geoint2_geoint.png" width="300px">
<br>
<b style="color:#e16931; font-size: 3em;"><span style="color:#6b3721;">Rep</span>Sat</b>
<h3>Your purchase is ready</h3>
</td>
</tr>
<tr style="text-align:center">
<td class="content-block">Check your purchased products</td>
</tr>
<tr style="text-align:center">
<td class="content-block">Click on the following link to redirect to the page</td>
</tr>
<tr style="text-align:center;">
<td class="content-block">
<a href="localhost:8000">Go to the page</a>
</td>
</tr>
<tr>
</tr>
</table>
</td>
</tr>
</table>
<div class="footer">
<table width="100%">
<tr>
<td class="aligncenter content-block">
© 2019 Copyright:<a href="http://geoint.mx/"> Centro de Investigación en Ciencias de
Información Geoespacial. </a>
</td>
</tr>
</table>
</div>
</div>
</td>
<td></td>
</tr>
</table>
</body>
</html>
\ No newline at end of file
from django.test import TestCase
# Create your tests here.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.wsMail, name='wsMail'),
]
\ No newline at end of file
from django.shortcuts import render, redirect
# Create your views here.
# -*- coding: utf-8 -*-
from django.core.mail import EmailMultiAlternatives
from django.http import HttpResponse
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from GeoInt_SIDT import settings
from GeoInt_SIDT.settings import BASE_URL
def wsMail(request):
subject = 'Info RepSat'
email_from = settings.EMAIL_HOST_USER
recipient_list = ['isanchez@centrogeo.edu.mx', 'ldominguez@centrogeo.edu.mx', 'ehuchim@centrogeo.edu.mx']
html_content = render_to_string('mail_notification.html', {'varname': BASE_URL }) # render with dynamic value
text_content = strip_tags(html_content) # Strip the html tag. So people can see the pure text at least.
# create the email, and attach the HTML version as well.
msg = EmailMultiAlternatives(subject, text_content, email_from, recipient_list)
msg.attach_alternative(html_content, "text/html")
msg.send()
return redirect('../catalog')
\ No newline at end of file
...@@ -7,10 +7,11 @@ function openmodal(info) { ...@@ -7,10 +7,11 @@ function openmodal(info) {
function refresh() { function refresh() {
$.ajax({ $.ajax({
dataType: "json", dataType: "json",
url: 'Reload', url: '../reports/ws/process_progress',
success: function (data) { success: function (data) {
$.each(data, function (key, val) { $.each(data, function (key, val) {
console.log(key + " = purchase_id: " + val.purchase_id + ", val_progress: " + val.progress); console.log(key+ " purchase_id:"+val.purchase_id+", progress: "+val.progress);
if (val.progress != 100) { if (val.progress != 100) {
$('#progress_bar' + val.purchase_id).attr("aria-valuenow", val.progress); $('#progress_bar' + val.purchase_id).attr("aria-valuenow", val.progress);
$('#progress_bar' + val.purchase_id).attr('style', 'width:' + val.progress + '%'); $('#progress_bar' + val.purchase_id).attr('style', 'width:' + val.progress + '%');
...@@ -44,54 +45,52 @@ $(function () { ...@@ -44,54 +45,52 @@ $(function () {
$(document).ready(function () { $(document).ready(function () {
$('#example').DataTable $('#example').DataTable
({ ({
language: language:
{
"sProcessing": "Procesando...",
"sLengthMenu": "Mostrar _MENU_ registros",
"sZeroRecords": "No se encontraron resultados",
"sEmptyTable": "Ningún dato disponible en esta tabla",
"sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
"sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
"sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
"sInfoPostFix": "",
"sSearch": "Buscar:",
"sUrl": "",
"sInfoThousands": ",",
"sLoadingRecords": "Cargando...",
"oPaginate":
{ {
"sProcessing": "Procesando...", "sFirst": "Primero",
"sLengthMenu": "Mostrar _MENU_ registros", "sLast": "Último",
"sZeroRecords": "No se encontraron resultados", "sNext": "Siguiente",
"sEmptyTable": "Ningún dato disponible en esta tabla", "sPrevious": "Anterior"
"sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
"sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
"sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
"sInfoPostFix": "",
"sSearch": "Buscar:",
"sUrl": "",
"sInfoThousands": ",",
"sLoadingRecords": "Cargando...",
"oPaginate":
{
"sFirst": "Primero",
"sLast": "Último",
"sNext": "Siguiente",
"sPrevious": "Anterior"
},
"oAria":
{
"sSortAscending": ": Activar para ordenar la columna de manera ascendente",
"sSortDescending": ": Activar para ordenar la columna de manera descendente"
}
}, },
responsive: "oAria":
{ {
details: "sSortAscending": ": Activar para ordenar la columna de manera ascendente",
{ "sSortDescending": ": Activar para ordenar la columna de manera descendente"
type: 'column', }
target: 'tr' },
} responsive:
}, {
columnDefs: details:
[{ {
className: 'control', type: 'column',
orderable: false, target: 'tr'
targets: 0 }
}], },
order: [1, 'asc'] columnDefs:
}); [{
}); className: 'control',
orderable: false,
targets: 0
}],
order: [1, 'asc']
});
});
$(function () { $(function () {
......
...@@ -157,14 +157,14 @@ ...@@ -157,14 +157,14 @@
class="progress-bar progress-bar-warning progress-bar-striped active" class="progress-bar progress-bar-warning progress-bar-striped active"
aria-valuemin="0" aria-valuemax="100" aria-valuemin="0" aria-valuemax="100"
style="width:{{ product.progress }}%"> style="width:{{ product.progress }}%">
<p class="text-center" style="color: #0a0a0a" <p style="color: #0a0a0a">
id="progess_value{{ product.purchase_id }}"> Downloading
</p> </p>
</div> </div>
</div> </div>
<div id="action_buttons{{ product.purchase_id }}" {% if product.progress != 100 %} <div id="action_buttons{{ product.purchase_id }}" {% if product.progress != 100 %}
class="hidden" {% endif %}> class="hidden" {% endif %}>
<a id="view_report{{ product.purchase_id }}" title="View Report" <a title="View Report"
href="../reports/T15QZD_sclData/{{ product.purchase_id }}" href="../reports/T15QZD_sclData/{{ product.purchase_id }}"
class="btn btn-success"> class="btn btn-success">
<i class="fa fa-eye"></i> <i class="fa fa-eye"></i>
...@@ -229,7 +229,6 @@ ...@@ -229,7 +229,6 @@
</div> </div>
<!-- /.modals --> <!-- /.modals -->
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script src="{% static 'reports/js/scripts.js' %}"></script> <script src="{% static 'reports/js/Reports_scripts.js' %}"></script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -7,6 +7,6 @@ urlpatterns = [ ...@@ -7,6 +7,6 @@ urlpatterns = [
url(r'^(?P<report>[\w\-]+)/(?P<purchase_id>(\d+))$', views.report_L2ASCL, name='report'), url(r'^(?P<report>[\w\-]+)/(?P<purchase_id>(\d+))$', views.report_L2ASCL, name='report'),
url(r'^$', views.Reports, name='reports'), url(r'^$', views.Reports, name='reports'),
url(r'^Reload$', views.Reload, name='Reload'), url(r'^ws/process_progress$', views.wsProcessProgress, name='wsProcessProgress'),
] ]
...@@ -96,16 +96,19 @@ def Reports(request): ...@@ -96,16 +96,19 @@ def Reports(request):
##################################################### #####################################################
# progress bar # # progress bar #
##################################################### #####################################################
if 'Linking Products...' in open(log_info).read(): if os.stat(log_info).st_size == 0:
progress = 20 progress = 0
if 'Merging Images...' in open(log_info).read(): else:
progress = 40 if 'Linking Products...' in open(log_info).read():
if 'Deleting Images...' in open(log_info).read(): progress = 20
progress = 50 if 'Merging Images...' in open(log_info).read():
if 'Extracting SCL information...' in open(log_info).read(): progress = 40
progress = 60 if 'Deleting Images...' in open(log_info).read():
if 'Finalizing...' in open(log_info).read(): progress = 50
progress = 100 if 'Extracting SCL information...' in open(log_info).read():
progress = 60
if 'Finalizing...' in open(log_info).read():
progress = 100
with open(log_info, 'r') as myfile: with open(log_info, 'r') as myfile:
log = myfile.read().replace('\n', '') log = myfile.read().replace('\n', '')
...@@ -129,7 +132,10 @@ def Reports(request): ...@@ -129,7 +132,10 @@ def Reports(request):
"progress": progress, "progress": progress,
"log_info": log, "log_info": log,
}) })
size = 0
final_size = 0
log_info = ""
progress = 0
############################################## ##############################################
# paginacion # # paginacion #
############################################## ##############################################
...@@ -141,34 +147,49 @@ def Reports(request): ...@@ -141,34 +147,49 @@ def Reports(request):
# ------------------------------------------------------------------------ # ------------------------------------------------------------------------
def Reload(request): def wsProcessProgress(request):
if request.is_ajax(): if request.is_ajax():
progress = 0 progress = 0
productList2 = [] productList2 = []
product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds', product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds',
'search__startDate', 'search__endDate', 'search__startDate', 'search__endDate',
'search__process_id__name').filter(user_id=request.user.id, purchased=1) 'search__process_id__name', 'progress').filter(user_id=request.user.id, purchased=1)
for producto in product_list: for producto in product_list:
log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log" log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
##################################################### #####################################################
# progress bar # # progress bar #
##################################################### #####################################################
if 'Linking Products...' in open(log_info).read(): if os.stat(log_info).st_size == 0:
progress = 20 progress = 0
if 'Merging Images...' in open(log_info).read(): else:
progress = 40 if 'Linking Products...' in open(log_info).read():
if 'Deleting Images...' in open(log_info).read(): progress = 20
progress = 50 if 'Merging Images...' in open(log_info).read():
if 'Extracting SCL information...' in open(log_info).read(): progress = 40
progress = 60 if 'Deleting Images...' in open(log_info).read():
if 'Finalizing...' in open(log_info).read(): progress = 50
progress = 100 if 'Extracting SCL information...' in open(log_info).read():
progress = 60
if 'Finalizing...' in open(log_info).read():
progress = 100
productList2.append({ productList2.append({
"purchase_id": producto['id'], "purchase_id": producto['id'],
"progress": progress, "progress": progress,
}) })
progress = 0
log_info = ""
# productList2 = []
# product_list = Purchase.objects.values('id', 'progress').filter(user_id=request.user.id, purchased=1)
# for producto in product_list:
# productList2.append({
# "purchase_id": producto['id'],
# "progress": producto['progress'],
# })
return HttpResponse(json.dumps(productList2)) return HttpResponse(json.dumps(productList2))
else: else:
raise Http404 raise Http404
......
...@@ -2,114 +2,115 @@ ...@@ -2,114 +2,115 @@
{% load static %} {% load static %}
{% block headMedia %} {% block headMedia %}
<link rel="stylesheet" href="{% static 'catalog/css/login.css'%}" type="text/css"> <link rel="stylesheet" href="{% static 'catalog/css/login.css' %}" type="text/css">
{% endblock %} {% endblock %}
{% block budy %} {% block budy %}
<div class="visible-lg-block visible-md-block"> <div class="visible-lg-block visible-md-block">
<video id="bgvid" playsinline autoplay muted loop poster="{% static 'images/poster.jpg'%}" > <video id="bgvid" playsinline autoplay muted loop poster="{% static 'images/poster.jpg' %}">
<!-- WCAG general accessibility recommendation is that media such as background video play through only once. Loop turned on for the purposes of illustration; if removed, the end of the video will fade in the same way created by pressing the "Pause" button --> <!-- WCAG general accessibility recommendation is that media such as background video play through only once. Loop turned on for the purposes of illustration; if removed, the end of the video will fade in the same way created by pressing the "Pause" button -->
<source src="{% static 'catalog/images/background.mp4'%}" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' /> <source src="{% static 'catalog/images/background.mp4' %}"
<source src="{% static 'catalog/images/background.ogv'%}" type='video/ogg; codecs="theora, vorbis"' /> type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'/>
<source src="{% static 'catalog/images/background.webm'%}" type='video/webm; codecs="vp8, vorbis"' /> <source src="{% static 'catalog/images/background.ogv' %}" type='video/ogg; codecs="theora, vorbis"'/>
<source src="{% static 'catalog/images/background.webm' %}" type='video/webm; codecs="vp8, vorbis"'/>
</video>
</div> </video>
</div>
<div class="login-box">
<!-- /.login-logo --> <div class="login-box">
<div class="login-box-body"> <!-- /.login-logo -->
<div class="login-logo"> <div class="login-box-body">
<div class="login-logo">
<img src="{% static 'catalog/images/geoint_med.png' %}" width="256px"/> <img src="{% static 'catalog/images/geoint_med.png' %}" width="256px"/>
<br> <br>
<b><span>Rep</span>Sat</b> <b><span>Rep</span>Sat</b>
</div> </div>
<p class="login-box-msg"> <p class="login-box-msg">
{% if form.errors %} {% if form.errors %}
<p>Your username and password didn't match. Please try again.</p> <p>Your username and password didn't match. Please try again.</p>
{% endif %} {% endif %}
{% if next %} {% if next %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed, please login with an account that has access.</p> <p>Your account doesn't have access to this page. To proceed, please login with an account that has
{% else %} access.</p>
<p>Favor de firmarse para tener acceso.</p> {% else %}
{% endif %} <p>Favor de firmarse para tener acceso.</p>
{% endif %} {% endif %}
</p> {% endif %}
</p>
<form role="form" method="post" action="{% url 'login' %}">
{% csrf_token %} <form role="form" method="post" action="{% url 'login' %}">
<div class="form-group has-feedback"> {% csrf_token %}
<!-- <input type="text" class="form-control" placeholder="username">--> <div class="form-group has-feedback">
<input class="form-control" placeholder="nombre de usuario" name="{{ form.username.name }}" type="{{ form.username.class.name}}" id="{{ form.username.auto_id }}" autofocus> <!-- <input type="text" class="form-control" placeholder="username">-->
<span class="glyphicon glyphicon-envelope form-control-feedback"></span> <input class="form-control" placeholder="nombre de usuario" name="{{ form.username.name }}"
</div> type="{{ form.username.class.name }}" id="{{ form.username.auto_id }}" autofocus>
<div class="form-group has-feedback"> <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
<!-- <input type="password" class="form-control" placeholder="assword">--> </div>
<input class="form-control" placeholder="contraseña" name="{{ form.password.name }}" type="password" id="{{ form.password.auto_id }}" autofocus> <div class="form-group has-feedback">
<span class="glyphicon glyphicon-lock form-control-feedback"></span> <!-- <input type="password" class="form-control" placeholder="assword">-->
</div> <input class="form-control" placeholder="contraseña" name="{{ form.password.name }}" type="password"
<div class="row"> id="{{ form.password.auto_id }}" autofocus>
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
<!-- /.col --> </div>
<div class="col-xs-12"> <div class="row">
<button type="submit" class="btn btn-primary btn-block btn-flat btnGeo">Login</button>
</div> <!-- /.col -->
<!-- /.col --> <div class="col-xs-12">
</div> <button type="submit" class="btn btn-primary btn-block btn-flat btnGeo">Login</button>
</form> </div>
<!-- /.col -->
</div>
<br> </form>
<a href="#">I forgot my password</a><br>
<a href="register.html" class="text-center">Register a new membership</a>
<br>
</div> <a href="#">I forgot my password</a><br>
<!-- /.login-box-body --> <a href="register.html" class="text-center">Register a new membership</a>
</div>
<!-- /.login-box --> </div>
<!-- /.login-box-body -->
<div class="row geointInfo" > </div>
<!-- /.login-box -->
<div class="col-md-12">
<div class="row geointInfo">
<a href="http://www.centrogeo.org.mx/">© 2018 Centro de Investigación en Ciencias de Información Geoespacial</a>
<div class="col-md-12">
</div>
<a href="http://www.centrogeo.org.mx/">© 2018 Centro de Investigación en Ciencias de Información
</div> Geoespacial</a>
</div>
</div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script> <script>
var vid = document.getElementById("bgvid"); var vid = document.getElementById("bgvid");
if (window.matchMedia('(prefers-reduced-motion)').matches) if (window.matchMedia('(prefers-reduced-motion)').matches) {
{ vid.removeAttribute("autoplay");
vid.removeAttribute("autoplay"); vid.pause();
vid.pause(); pauseButton.innerHTML = "Paused";
pauseButton.innerHTML = "Paused"; }
}
function vidFade() function vidFade() {
{ vid.classList.add("stopfade");
vid.classList.add("stopfade"); }
}
vid.addEventListener('ended', function() vid.addEventListener('ended', function () {
{ // only functional if "loop" is removed
// only functional if "loop" is removed vid.pause();
vid.pause(); // to capture IE10
// to capture IE10 vidFade();
vidFade(); });
});
</script>
</script>
{% endblock %} {% endblock %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment