Commit 1ab26fd6 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 b29c5c73 cf8a3c08
import re
from django.shortcuts import HttpResponseRedirect
from django.urls import reverse
# from django.core.urlresolvers import reverse
from catalog.models import Publics, Purchase
class AuthRequiredMiddleware(object):
def __init__(self, get_response):
......@@ -13,19 +15,28 @@ class AuthRequiredMiddleware(object):
# the view (and later middleware) are called.
response = self.get_response(request)
# if request.path_info == reverse('ws-news-list2'):
# return response
if request.path_info ==reverse('ipn'):
print(request.path_info)
elif not request.user.is_authenticated and request.path_info != reverse('login') and not request.user.is_active:
return HttpResponseRedirect(reverse('login'))
if "/reports/" in request.path_info and not request.user.is_authenticated:
if re.match("^(?:\/reports\/)+[0-9]*$", request.path_info):
purchase_id = request.path_info.replace("/reports/", "")
print ("----->", purchase_id)
purchase = Purchase.objects.filter(pk=int(purchase_id))
#if not request.user.is_authenticated and request.path_info != reverse('login') and not request.user.is_active:
#if not request.user.is_authenticated or not request.user.is_active:
if len(purchase) > 0 and purchase[0].is_public == True:
return response
else:
return HttpResponseRedirect(reverse('login'))
#elif not request.user.is_authenticated and request.path_info == reverse('tile') or request.path_info == reverse('tileinfo') :
# return response
# return HttpResponseRedirect(reverse('login'))
elif request.path_info == reverse('ipn'):
return response
elif not request.user.is_authenticated and request.path_info != reverse('login') and not request.user.is_active:
return HttpResponseRedirect(reverse('login'))
# Code to be executed for each request/response after
# the view is called.
......
......@@ -74,3 +74,8 @@ class Purchase(models.Model):
purchased = models.BooleanField(default=False)
price = models.FloatField(default=0.0)
progress = models.IntegerField(default=0)
is_public = models.BooleanField(default=False)
class Publics(models.Model):
url = models.TextField()
Purchase = models.ForeignKey(Purchase, on_delete=models.CASCADE)
\ No newline at end of file
......@@ -31,7 +31,7 @@
<div class="wrmapper">
<header class="main-header">
<!-- Logo -->
<a href="{{ BASE_URL }}/catalog" class="logo">
<a {% if request.user.is_authenticated %}href="{{ BASE_URL }}/catalog" {% else %} href="../../../" {% endif %}class="logo">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini"><b>G</b>eo</span>
<!-- logo for regular state and mobile devices -->
......@@ -44,6 +44,7 @@
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">Toggle navigation</span>
</a>
{% if request.user.is_authenticated %}
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<li>
......@@ -82,6 +83,7 @@
</li>
</ul>
</div>
{% endif %}
</nav>
</header>
<!-- Left side column. contains the logo and sidebar -->
......
......@@ -588,6 +588,7 @@ def IPN(request):
print()
f = open(PATH_USERS+"myfile.txt", "w")
x = request.POST.dict()
f.write('variables')
for key, value in x.items():
f.write(key+": "+value+'\n')
return redirect('../../')
......
.map {
height: 400px;
width: 100%;
}
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #f38e19;
}
input:focus + .slider {
box-shadow: 0 0 1px #f38e19;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
\ No newline at end of file
......@@ -47,33 +47,7 @@ $(function () {
$(document).ready(function () {
$('#example').DataTable
({
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":
{
"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:
{
details:
......@@ -96,3 +70,86 @@ $(document).ready(function () {
$(function () {
$('#reportPage').show();
});
function showMyModalSetTitle(name, data) {
$('#map').empty();
$('#myModalTitle').empty();
$('#myModalTitle').append(name);
$("#mapmodal").modal();
setTimeout(function () {
createmap(data);
}, 1000);
//console.log(data)
}
function createmap(data) {
/*var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.fromLonLat([-89.63873079999999, 21.0404457]),
zoom: 5
})
});*/
var raster = new ol.layer.Tile({
source: new ol.source.OSM()
});
var format = new ol.format.WKT();
var feature = format.readFeature(data);
feature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
features: [feature]
})
});
var center = feature.getGeometry();
var map = new ol.Map({
controls: [],
interactions: [],
layers: [raster, vector],
target: 'map',
view: new ol.View({
center: [center.getInteriorPoint().getFirstCoordinate()[0], center.getInteriorPoint().getFirstCoordinate()[1]],
zoom: 9
})
});
}
function change_public(data) {
var checkBox = document.getElementById(data);
if (checkBox.checked == true) {
is_public(data, 'True');
} else {
is_public(data, 'False');
}
}
function is_public(purchase_id, status) {
//alert(purchase_id);
$.ajax({
dataType: "json",
url: '../reports/ws/is_public',
data: {'purchase_id': purchase_id, 'status': status},
success: function (data) {
alert("cambiado");
}
});
};
\ No newline at end of file
......@@ -7,12 +7,7 @@
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css"
type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<link rel="stylesheet" href="{% static 'reports/css/Reports.css' %}" type="text/css">
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
<link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" type="text/css">
<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
......@@ -162,6 +157,7 @@
<th>End Date</th>
<!--th>Clouds %</th-->
<th>Estimated Size</th>
<th>Public</th>
<th>Actions</th>
</thead>
<tbody id="table_body">
......@@ -176,6 +172,12 @@
<td>{{ product.endDate }}</td>
<!--td>{{product.clouds}} %</td-->
<td>{{ product.size }}</td>
<td>
<label class="switch">
<input id="{{ product.purchase_id }}" type="checkbox" onclick="change_public({{ product.purchase_id }})" {% if product.is_public %} checked {% endif %}>
<span class="slider round"></span>
</label>
</td>
<td class="text-center">
<div class="progress {% if product.progress == 100 %} hidden {% endif %}"
id="main_progess{{ product.purchase_id }}">
......@@ -193,7 +195,7 @@
class="hidden" {% endif %}>
<a title="View Report"
{% if product.initial_folder %}
href="../reports/{{ product.purchase_id }}/{{ product.initial_folder }}"
href="../reports/{{ product.purchase_id }}"
{% endif %}
class="btn btn-success">
<i class="fa fa-eye"></i>
......@@ -279,66 +281,4 @@
{% endblock %}
{% block scripts %}
<script src="{% static 'reports/js/Reports_scripts.js' %}"></script>
<script type="text/javascript">
function showMyModalSetTitle(name,data) {
$('#map').empty();
$('#myModalTitle').empty();
$('#myModalTitle').append(name);
$("#mapmodal").modal();
setTimeout(function () {
createmap(data);
}, 1000);
//console.log(data)
}
function createmap(data) {
/*var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.fromLonLat([-89.63873079999999, 21.0404457]),
zoom: 5
})
});*/
var raster = new ol.layer.Tile({
source: new ol.source.OSM()
});
var format = new ol.format.WKT();
var feature = format.readFeature(data);
feature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
features: [feature]
})
});
var center = feature.getGeometry();
var map = new ol.Map({
controls: [],
interactions: [],
layers: [raster, vector],
target: 'map',
view: new ol.View({
center: [center.getInteriorPoint().getFirstCoordinate()[0], center.getInteriorPoint().getFirstCoordinate()[1]],
zoom: 9
})
});
}
</script>
{% endblock %}
<div class="form-group">
<br>
<ul class="sidebar-menu" data-widget="tree">
{% if request.user.is_authenticated %}
<li>
<a class="treeview " href="{{ BASE_URL }}/reports">
<i class="fa fa-map"></i>
......@@ -10,6 +11,7 @@
</span>
</a>
</li>
{% endif %}
{% if folders %}
<li class="treeview">
<a href="#">
......@@ -149,7 +151,7 @@
</a>
</li>
<li>
<a class="treeview submenu" href="../../static/reports/tmpImages/repsat_test_dev/{{ request.user.email }}/{{ purchaseID }}/{{ zone }}.pdf" id="downloadPdf" target="_blank">
<a class="treeview submenu" href="../../static/reports/tmpImages/repsat_test_dev/{{ email }}/{{ purchaseID }}/{{ zone }}.pdf" id="downloadPdf" target="_blank">
<i class="fa fa-file-pdf-o"></i>
<span>Export to PDF v2</span>
<span class="pull-right-container">
......@@ -252,15 +254,7 @@
</span>
</ul>
</li>
<li>
<a class="treeview " href="#" onclick="window.history.back();">
<i class="fa fa-backward"></i>
<span>Back</span>
<span class="pull-right-container">
<span class="label label-primary pull-right"></span>
</span>
</a>
</li>
<!-- <li>
<a class="treeview " href="#" onclick="showComparisons()">
......
......@@ -4,9 +4,11 @@ from . import views
from reports import views
urlpatterns = [
url(r'^(?P<purchase_id>(\d+))/(?P<report>[\w\-]+)$', views.report_L2ASCL, name='report'),
#url(r'^(?P<purchase_id>(\d+))/(?P<report>[\w\-]+)$', views.report_L2ASCL, name='report'),
url(r'^(?P<purchase_id>(\d+))$', views.report_L2ASCL, name='report'),
url(r'^$', views.Reports, name='reports'),
url(r'^ws/process_progress$', views.wsProcessProgress, name='wsProcessProgress'),
url(r'^ws/is_public', views.wsIs_Public, name='wsIs_Public'),
url(r'^tiles/(?P<purchase_id>(\d+))/(?P<report>[\w\-]+)/(?P<layer_type>[\w\-]+)/(?P<date>[0-9]+)/(?P<z>[0-9]+)/(?P<x>[0-9]+)/(?P<y>[0-9]+).png$',
views.tiles, name='tile'),
url(r'^tiles/tileinfo$', views.tileinfo, name='tileinfo'),
......
......@@ -9,10 +9,12 @@ from collections import OrderedDict
from datetime import datetime
from django.http import HttpResponse, Http404, JsonResponse
from django.shortcuts import render
from django.shortcuts import render, redirect
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from django.views.decorators.csrf import csrf_exempt
from GeoInt_SIDT.settings import BASE_URL
from catalog.models import Purchase
# -------------------------------------------------------------------------------
......@@ -28,12 +30,17 @@ USERS_PATH = config['PATHS']['PATH_USERS']
###########################################################
def report_L2ASCL(request, report, purchase_id):
path = USERS_PATH + request.user.email + '/' + purchase_id + '/'
scl_data_path = USERS_PATH + request.user.email + "/" + purchase_id + "/" + report + ".json"
def report_L2ASCL(request, purchase_id):
template = "sclData.html"
reporteDir = 'mask'
folders = ""
purchase = Purchase.objects.values('user__email','is_public').filter(pk=purchase_id)
email = purchase[0]['user__email']
path = USERS_PATH + email + '/' + purchase_id + '/'
scl_data_path = USERS_PATH + email + "/" + purchase_id + "/scl_data.json"
with open(USERS_PATH + request.user.email + "/" + purchase_id + "/findProducts.json") as p:
with open(USERS_PATH + email + "/" + purchase_id + "/findProducts.json") as p:
dataProduct = json.load(p)
startDate = str(dataProduct['startDate'])[:4] + '-' + str(dataProduct['startDate'])[4:6] + '-' + str(
dataProduct['startDate'])[6:8]
......@@ -41,52 +48,9 @@ def report_L2ASCL(request, report, purchase_id):
dataProduct['endDate'])[6:8]
graphData, label, defaultLabel, defaultDataset,datasets = ProcessChartData(scl_data_path)
#print(datasets)
if report == 'scl_data':
template = "sclData.html"
reporteDir='mask'
folders=""
#return render(request,"sclData.html",{"graphData": json.dumps(graphData),
# "report_name": "Aqui va el mapa",
# "startDate": startDate, "endDate": endDate,
# "clouds": dataProduct['clouds'], "platform": dataProduct['platform'],
# "productLevel": dataProduct['productLevel'],'dafaultLabel': defaultLabel,
# 'defaultDataSet': defaultDataset,"purchaseID": purchase_id,
# "labels": graphData['data']['labels']})
else:
template = "L2ASCL_data.html"
reporteDir = report.replace('_sclData', '')
reporteDir += "/mask"
absolute_path = USERS_PATH + request.user.email + "/" + purchase_id + "/out"
folders = os.listdir(absolute_path)
json_route = USERS_PATH + request.user.email + "/" + purchase_id + "/"
for file in os.listdir(json_route):
if file.endswith("_sclData.json") and not file.endswith("merge_out_sclData.json"):
with open(USERS_PATH + request.user.email + "/" + purchase_id + "/" + file) as f:
json_data = OrderedDict(json.load(f))
if len(json_data) == 0:
if file[:6] in folders:
folders.remove(file[:6])
with open(USERS_PATH + request.user.email + "/" + purchase_id + "/" + report + ".json") as f:
json_data = OrderedDict(json.load(f))
if len(json_data) == 0:
graphData = ""
defaultLabel = ""
defaultDataset = ""
folders.remove(reporteDir)
image_path = request.user.email + "/" + purchase_id + "/" + "out/" + reporteDir + "/TCI/thumbnails/"
SCL_path = request.user.email + "/" + purchase_id + "/" + "out/" + reporteDir + "/SCL/"
image_path = email + "/" + purchase_id + "/" + "out/" + reporteDir + "/TCI/thumbnails/"
SCL_path = email + "/" + purchase_id + "/" + "out/" + reporteDir + "/SCL/"
......@@ -101,7 +65,7 @@ def report_L2ASCL(request, report, purchase_id):
'defaultDataSet': defaultDataset, "folders": folders,
"zone": reporteDir, "purchaseID": purchase_id,
"labels": graphData['data']['labels'],
"polygon": dataProduct['wkt']})
"polygon": dataProduct['wkt'],"email": email})
# -------------------------------------------------------------------------------def Reports(request):
......@@ -113,7 +77,7 @@ def Reports(request):
folders = []
zip = ""
product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds', 'search__startDate',
'search__endDate', 'search__process_id__name', 'search__search_name').filter(
'search__endDate', 'search__process_id__name', 'search__search_name', 'is_public').filter(
user_id=request.user.id, purchased=1)
for producto in product_list:
log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
......@@ -198,6 +162,7 @@ def Reports(request):
"initial_folder": initial_folder,
"zip": zip,
"polygon": polygon['wkt'],
"is_public": producto['is_public'],
})
size = 0
final_size = 0
......@@ -215,12 +180,12 @@ def wsProcessProgress(request):
if request.is_ajax():
progress = 0
productList2 = []
product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds',
product_list = Purchase.objects.values('id','user__email', 'productList', 'aggreg_date', 'search__clouds',
'search__startDate', 'search__endDate',
'search__process_id__name', 'progress').filter(user_id=request.user.id,
purchased=1)
for producto in product_list:
log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
log_info = USERS_PATH + producto['user__email'] + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
#####################################################
# progress bar #
......@@ -264,12 +229,15 @@ def wsProcessProgress(request):
# tiles
def tiles(request, purchase_id, report, layer_type, date, z, x, y):
purchase = Purchase.objects.values('user__email', 'is_public').filter(pk=purchase_id)
email = purchase[0]['user__email']
split = '/split' if layer_type[:3] == "SCL" else ''
layer_class = layer_type[3:] if layer_type[:3] == "SCL" else ''
m_number = '60' if layer_type[:3] == "SCL" else '10'
image_path = "{}{}/{}/out/{}/{}{}/tiles/{}_{}_{}m{}/{}/{}/{}.png".format(
USERS_PATH, request.user.email, purchase_id, report, layer_type[:3], split,
USERS_PATH, email, purchase_id, report, layer_type[:3], split,
date, layer_type[:3], m_number, layer_class, z, x, y
)
......@@ -287,14 +255,20 @@ def tileinfo(request):
if request.is_ajax():
req = dict(request.POST)
purchase = Purchase.objects.values('user__email').filter(pk=int(req['purchase_id'][0]))
email = purchase[0]['user__email']
resource_path = "{}{}/{}/out/{}/TCI/tiles/{}_TCI_10m/tilemapresource.xml".format(
USERS_PATH, request.user.email, req['purchase_id'][0], req['report'][0],
USERS_PATH, email, req['purchase_id'][0], req['report'][0],
req['date'][0]
)
if not os.path.exists(resource_path):
raise Http404
tree = ET.parse(resource_path)
bounding_box = tree.find('BoundingBox')
sets = [int(set.get('order')) for set in tree.findall('TileSets/TileSet')]
......@@ -318,6 +292,7 @@ def tileinfo(request):
raise Http404
# ------------------------------------------------------------------------
def PDFGenerator(request, ruta, reporteDir, datasets):
thumbs = ruta + 'out/' + reporteDir + '/TCI/thumbnails/'
......@@ -438,3 +413,19 @@ def ProcessChartData(path):
defaultLabel = graphData['data']['labels'][0]
defaultDataset = label[0:4] + "/" + label[4:6] + "/" + label[6:]
return graphData,label,defaultLabel,defaultDataset,data['datasets']
#---------------------------------------------------------------------------------
def wsIs_Public(request):
if request.is_ajax():
status = request.GET.get("status")
path = "/reports/"+request.GET.get("purchase_id")+"/scl_data"
purchase = Purchase.objects.get(pk=request.GET.get("purchase_id"))
purchase.is_public = request.GET.get("status")
purchase.save()
#print (purchase.aggreg_date)
return HttpResponse("hola")
else:
raise Http404
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