|
|
@@ -122,7 +122,12 @@ class Atlas:
|
|
|
self.code_challenge = None
|
|
|
self.Agrimail = None
|
|
|
self.loadedInMemory = False
|
|
|
+ self.liferayServer = None
|
|
|
+ self.laymanServer = None
|
|
|
self.uri = 'http://layman.lesprojekt.cz/rest/'
|
|
|
+ self.iface.layerTreeView().currentLayerChanged.connect(lambda: self.layerChanged())
|
|
|
+
|
|
|
+
|
|
|
# global dlgGetLayers
|
|
|
self.dlgGetLayers= GetLayersDialog()
|
|
|
# initialize locale
|
|
|
@@ -316,10 +321,13 @@ class Atlas:
|
|
|
def run_UserInfoDialog(self):
|
|
|
self.dlg = UserInfoDialog()
|
|
|
self.dlg.show()
|
|
|
+ self.dlg.pushButton_logout.setStyleSheet("#pushButton_logout {color: #fff !important;text-transform: uppercase; text-decoration: none; background: #72c02c; padding: 20px; border-radius: 50px; display: inline-block; border: none;transition: all 0.4s ease 0s;} #pushButton_logout:hover{background: #66ab27 ;}")
|
|
|
+ self.dlg.setStyleSheet("#DialogBase {background: #f0f0f0 ;}")
|
|
|
userEndpoint = "http://layman.lesprojekt.cz/rest/current-user"
|
|
|
r = requests.get(url = userEndpoint, headers = self.authHeader)
|
|
|
res = r.text
|
|
|
res = self.fromByteToJson(r.content)
|
|
|
+ self.dlg.pushButton_logout.clicked.connect(lambda: self.logout())
|
|
|
print(res['claims'])
|
|
|
self.dlg.label_layman.setText(res['claims']['preferred_username'])
|
|
|
self.dlg.label_agrihub.setText(res['claims']['email'])
|
|
|
@@ -341,6 +349,10 @@ class Atlas:
|
|
|
self.dlg.lineEdit_units.setText(self.compositeList[x]['units'])
|
|
|
self.dlg.lineEdit_scale.setText(str(self.compositeList[x]['scale']))
|
|
|
self.dlg.lineEdit_user.setText(self.compositeList[x]['user']['name'])
|
|
|
+ self.dlg.lineEdit_xmin.setText(self.compositeList[x]['extent'][0])
|
|
|
+ self.dlg.lineEdit_xmax.setText(self.compositeList[x]['extent'][2])
|
|
|
+ self.dlg.lineEdit_ymin.setText(self.compositeList[x]['extent'][1])
|
|
|
+ self.dlg.lineEdit_ymax.setText(self.compositeList[x]['extent'][3])
|
|
|
self.dlg.rejected.connect(lambda: self.afterCloseEditMapDialog())
|
|
|
self.dlg.pushButton_save.clicked.connect(lambda: self.modifyMap(x))
|
|
|
self.dlg.rejected.connect(lambda: self.afterCloseCompositeDialog())
|
|
|
@@ -515,8 +527,9 @@ class Atlas:
|
|
|
layerType = 'vector layer'
|
|
|
else:
|
|
|
layerType = 'raster layer'
|
|
|
- item = QTreeWidgetItem([layer.name(), layerType])
|
|
|
- self.dlg.treeWidget.addTopLevelItem(item)
|
|
|
+ item = QTreeWidgetItem([layer.name(), layerType])
|
|
|
+ if (layerType == 'vector layer'):
|
|
|
+ self.dlg.treeWidget.addTopLevelItem(item)
|
|
|
self.dlg.setWindowModality(Qt.ApplicationModal)
|
|
|
|
|
|
self.dlg.pushButton_close.setStyleSheet("#pushButton_close {color: #fff !important;text-transform: uppercase; text-decoration: none; background: #72c02c; padding: 20px; border-radius: 50px; display: inline-block; border: none;transition: all 0.4s ease 0s;} #pushButton_close:hover{background: #66ab27 ;}")
|
|
|
@@ -537,8 +550,13 @@ class Atlas:
|
|
|
if len(config['DEFAULT']['login']) > 0:
|
|
|
self.Agrimail = config['DEFAULT']['login']
|
|
|
self.dlg.pushButton_Connect.setEnabled(True)
|
|
|
- self.dlg.lineEdit_userName.setText(config['DEFAULT']['login'] + "@lesprojekt.cz")
|
|
|
- self.dlg.lineEdit_AgriID.setText(config['DEFAULT']['id'])
|
|
|
+ self.dlg.lineEdit_userName.setText(config['DEFAULT']['login'] + "@lesprojekt.cz")
|
|
|
+ try:
|
|
|
+ self.dlg.lineEdit_AgriID.setText(config['DEFAULT']['id'])
|
|
|
+ self.dlg.lineEdit_server.setText(config['DEFAULT']['server'])
|
|
|
+ self.dlg.lineEdit_serverLayman.setText(config['DEFAULT']['layman'])
|
|
|
+ except:
|
|
|
+ print("udaj v ini nenalezen")
|
|
|
else:
|
|
|
try:
|
|
|
os.makedirs(os.getenv("HOME") + os.sep + ".layman")
|
|
|
@@ -616,7 +634,7 @@ class Atlas:
|
|
|
self.dlg.pushButton_delete.setEnabled(False)
|
|
|
|
|
|
for row in range(0, len(data)):
|
|
|
- item = QTreeWidgetItem([data[row]['name']])
|
|
|
+ item = QTreeWidgetItem([self.getLayerTitle(data[row]['name'])])
|
|
|
self.dlg.treeWidget.addTopLevelItem(item)
|
|
|
self.dlg.pushButton_delete.clicked.connect(lambda: self.layerDelete(self.dlg.treeWidget.selectedItems()[0].text(0)))
|
|
|
self.dlg.pushButton_layerRedirect.clicked.connect(lambda: self.layerInfoRedirect(self.dlg.treeWidget.selectedItems()[0].text(0)))
|
|
|
@@ -699,7 +717,20 @@ class Atlas:
|
|
|
return loaded
|
|
|
|
|
|
|
|
|
-
|
|
|
+ def logout(self):
|
|
|
+ self.menu_saveLocalFile.setEnabled(False)
|
|
|
+ self.menu_loadJson.setEnabled(False)
|
|
|
+ self.menu_ImportLayerDialog.setEnabled(False)
|
|
|
+ self.menu_AddLayerDialog.setEnabled(False)
|
|
|
+ self.menu_AddMapDialog.setEnabled(False)
|
|
|
+ self.menu_ImportLayerDialog.setEnabled(False)
|
|
|
+ self.menu_ImportMapDialog.setEnabled(False)
|
|
|
+ self.menu_UserInfoDialog.setEnabled(False)
|
|
|
+ self.textbox.setText("Layman")
|
|
|
+ self.dlg.close()
|
|
|
+ # self.flaskThread.join()
|
|
|
+ # self.thread1.join() ## ukončujeme vlákno, které se stará o refresh tokenů OAUTH
|
|
|
+
|
|
|
def enableLoadMapButtons(self, item):
|
|
|
self.dlg.pushButton_mapWFS.setEnabled(True)
|
|
|
def enableButtonImport(self, item, column):
|
|
|
@@ -817,7 +848,10 @@ class Atlas:
|
|
|
print(response.content)
|
|
|
print(response)
|
|
|
self.addLayerRefresh()
|
|
|
- self.deleteLayerThrowCompositions(name)
|
|
|
+ try:
|
|
|
+ self.deleteLayerThrowCompositions(name)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
|
|
|
else:
|
|
|
url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+name
|
|
|
@@ -835,6 +869,7 @@ class Atlas:
|
|
|
self.dlg.treeWidget.addTopLevelItem(item)
|
|
|
def checkIfMapExist(self, name):
|
|
|
url = "http://layman.lesprojekt.cz/rest/"+self.laymanUsername+"/maps/"+str(name)+"/file"
|
|
|
+ print(url)
|
|
|
r = requests.get(url)
|
|
|
print(r.content)
|
|
|
if (r.status_code == 404):
|
|
|
@@ -845,20 +880,28 @@ class Atlas:
|
|
|
def reorderLayers(self, pos, order, x):
|
|
|
self.compositeList[x]['layers']
|
|
|
i = 0
|
|
|
-
|
|
|
- for lay in self.compositeList[x]['layers']:
|
|
|
- #print (lay)
|
|
|
- if i == pos:
|
|
|
+ compositeLength = len(self.compositeList[x]['layers'])
|
|
|
+
|
|
|
+ if (pos + order < 0):
|
|
|
+ QMessageBox.information(None, "Error", "Layer is already on the top level!")
|
|
|
+
|
|
|
+ elif( pos + order == compositeLength):
|
|
|
+ QMessageBox.information(None, "Error", "Layer is already on the bottom level!")
|
|
|
|
|
|
- pom = self.compositeList[x]['layers'][i]
|
|
|
- self.compositeList[x]['layers'][i] = self.compositeList[x]['layers'][i + order]
|
|
|
- self.compositeList[x]['layers'][i + order] = pom
|
|
|
+ else:
|
|
|
+ for lay in self.compositeList[x]['layers']:
|
|
|
+ #print (lay)
|
|
|
+ if i == pos:
|
|
|
|
|
|
- i = i + 1
|
|
|
- print(self.compositeList[x]['layers'])
|
|
|
- self.importMap(x, 'mod')
|
|
|
- self.refreshLayerList()
|
|
|
- self.dlg.listWidget_listLayers.setCurrentRow(pos + order)
|
|
|
+ pom = self.compositeList[x]['layers'][i]
|
|
|
+ self.compositeList[x]['layers'][i] = self.compositeList[x]['layers'][i + order]
|
|
|
+ self.compositeList[x]['layers'][i + order] = pom
|
|
|
+
|
|
|
+ i = i + 1
|
|
|
+ print(self.compositeList[x]['layers'])
|
|
|
+ self.importMap(x, 'mod')
|
|
|
+ self.refreshLayerList()
|
|
|
+ self.dlg.listWidget_listLayers.setCurrentRow(pos + order)
|
|
|
|
|
|
def showThumbnail(self, it):
|
|
|
try:
|
|
|
@@ -866,7 +909,7 @@ class Atlas:
|
|
|
except:
|
|
|
layer = it.text()##pro listWidget
|
|
|
try:
|
|
|
- url = self.URI+'/rest/' +self.laymanUsername+'/layers/'+str(layer)+'/thumbnail'
|
|
|
+ url = self.URI+'/rest/' +self.laymanUsername+'/layers/'+str(layer).lower()+'/thumbnail'
|
|
|
data = urlopen(url).read()
|
|
|
pixmap = QPixmap(200, 200)
|
|
|
pixmap.loadFromData(data)
|
|
|
@@ -881,7 +924,7 @@ class Atlas:
|
|
|
except:
|
|
|
layer = it.text()##pro listWidget
|
|
|
try:
|
|
|
- url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layer)+'/thumbnail'
|
|
|
+ url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layer).lower()+'/thumbnail'
|
|
|
data = urlopen(url).read()
|
|
|
pixmap = QPixmap(170, 170)
|
|
|
pixmap.loadFromData(data)
|
|
|
@@ -899,7 +942,7 @@ class Atlas:
|
|
|
|
|
|
try:
|
|
|
map = self.removeUnacceptableChars(str(map))
|
|
|
- url = self.URI+'/rest/'+self.laymanUsername+'/maps/'+str(map)+'/thumbnail'
|
|
|
+ url = self.URI+'/rest/'+self.laymanUsername+'/maps/'+str(map).lower()+'/thumbnail'
|
|
|
print(url)
|
|
|
data = urlopen(url).read()
|
|
|
pixmap = QPixmap(100, 100)
|
|
|
@@ -924,6 +967,8 @@ class Atlas:
|
|
|
#----------------------------------------------------------
|
|
|
def readLayerJson(self,layerName, service):
|
|
|
if self.checkLayerOnLayman(layerName):
|
|
|
+ layerNameTitle =layerName
|
|
|
+ layerName = self.removeUnacceptableChars(layerName)
|
|
|
url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layerName
|
|
|
print (url)
|
|
|
r = requests.get(url = url)
|
|
|
@@ -934,11 +979,11 @@ class Atlas:
|
|
|
wmsUrl = data['wms']['url']
|
|
|
format = 'png'
|
|
|
epsg = 'EPSG:4326'
|
|
|
- self.loadWms(wmsUrl, layerName, format, epsg)
|
|
|
+ self.loadWms(wmsUrl, layerName,layerNameTitle, format, epsg)
|
|
|
if (service == "WFS"):
|
|
|
wfsUrl = data['wfs']['url']
|
|
|
print("loading WFS")
|
|
|
- self.loadWfs(wfsUrl, layerName)
|
|
|
+ self.loadWfs(wfsUrl, layerName, layerNameTitle)
|
|
|
else:
|
|
|
QMessageBox.information(None, "Layman", "Something went wrong with this layer: "+layerName)
|
|
|
def loadAllComposites(self):
|
|
|
@@ -1085,8 +1130,8 @@ class Atlas:
|
|
|
# disconnects
|
|
|
self.dockwidget.closingPlugin.disconnect(self.onClosePlugin)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+ self.flaskThread.terminate() ## killing daemons
|
|
|
+ self.thread1.terminate()
|
|
|
self.pluginIsActive = False
|
|
|
|
|
|
|
|
|
@@ -1143,9 +1188,14 @@ class Atlas:
|
|
|
name = (os.path.splitext(os.path.basename(fileName))[0])
|
|
|
vlayer = QgsVectorLayer(fileName, name,"ogr")
|
|
|
sldPath = os.path.splitext(fileName[:-4])[0] + ".sld"
|
|
|
+ qmlPath = os.path.splitext(fileName[:-4])[0] + ".qml"
|
|
|
print (sldPath)
|
|
|
- exists = os.path.isfile(sldPath)
|
|
|
- if (exists):
|
|
|
+ sldExists = os.path.isfile(sldPath)
|
|
|
+ qmlExists = os.path.isfile(qmlPath)
|
|
|
+ if (qmlExists):
|
|
|
+ print("qml loaded")
|
|
|
+ vlayer.loadNamedStyle(qmlPath)
|
|
|
+ elif (sldExists):
|
|
|
vlayer.loadSldStyle(os.path.splitext(fileName)[0]+ ".sld")
|
|
|
print("sld loaded")
|
|
|
QgsProject.instance().addMapLayer(vlayer)
|
|
|
@@ -1189,7 +1239,11 @@ class Atlas:
|
|
|
self.compositeList[x]['name'] = name
|
|
|
self.compositeList[x]['abstract'] = self.dlg.lineEdit_abstract.text()
|
|
|
self.compositeList[x]['title'] = self.dlg.lineEdit_title.text()
|
|
|
-
|
|
|
+ self.compositeList[x]['extent'][0] = self.dlg.lineEdit_xmin.text()
|
|
|
+ self.compositeList[x]['extent'][2] = self.dlg.lineEdit_xmax.text()
|
|
|
+ self.compositeList[x]['extent'][1] = self.dlg.lineEdit_ymin.text()
|
|
|
+ self.compositeList[x]['extent'][3] = self.dlg.lineEdit_ymax.text()
|
|
|
+ print(self.compositeList[x]['extent'])
|
|
|
|
|
|
print(self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name'])
|
|
|
oldName = self.dlg.lineEdit_name.text()
|
|
|
@@ -1256,7 +1310,9 @@ class Atlas:
|
|
|
print(tempFile)
|
|
|
#QMessageBox.information(None, "Layman", "It is not possible overwrite this file. File is already open in other process.")
|
|
|
sld_temp_filename = tempFile.replace("geojson", "sld")
|
|
|
+ qml_temp_filename = tempFile.replace("geojson", "qml")
|
|
|
layer.saveSldStyle(sld_temp_filename)
|
|
|
+ layer.saveNamedStyle(qml_temp_filename)
|
|
|
result2 = qgis.core.QgsVectorFileWriter.writeAsVectorFormat(layer, tempFile, "utf-8", crs, ogr_driver_name)
|
|
|
print(result2)
|
|
|
if(result2[0] == 2):
|
|
|
@@ -1267,16 +1323,19 @@ class Atlas:
|
|
|
print(tempFile, layer_name)
|
|
|
shutil.copy(tempFile, layer_name)
|
|
|
shutil.copy(sld_temp_filename, layer_name.replace(".geojson", ".sld"))
|
|
|
+ shutil.copy(qml_temp_filename, layer_name.replace(".geojson", ".qml"))
|
|
|
self.loadJsonLayer(layer_name)
|
|
|
|
|
|
else:
|
|
|
- sld_filename = layer_name.replace("geojson", "sld")
|
|
|
+ sld_filename = layer_name.replace("geojson", "sld")
|
|
|
+ qml_filename = layer_name.replace("geojson", "qml")
|
|
|
result3 = False
|
|
|
layer.saveSldStyle(sld_filename)
|
|
|
+ layer.saveNamedStyle(qml_filename)
|
|
|
|
|
|
def json_export(self, layer_name):
|
|
|
|
|
|
- filePath = self.getTempPath(layer_name)
|
|
|
+ filePath = self.getTempPath(layer_name.lower())
|
|
|
ogr_driver_name = "GeoJSON"
|
|
|
project = QgsProject.instance()
|
|
|
fileNames = []
|
|
|
@@ -1312,7 +1371,7 @@ class Atlas:
|
|
|
# print("convert")
|
|
|
# print(main(["","-f", ogr_driver_name, "-s_srs", "EPSG:5514", "-t_srs", "EPSG:4326", out, input])) ## ogr2ogr
|
|
|
##
|
|
|
- sld_filename = filePath.replace("geojson", "sld")
|
|
|
+ sld_filename = filePath.replace("geojson", "sld").lower()
|
|
|
result3 = False
|
|
|
layer.saveSldStyle(sld_filename)
|
|
|
|
|
|
@@ -1350,9 +1409,25 @@ class Atlas:
|
|
|
|
|
|
for item in layers:
|
|
|
print (item.text(0))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
self.postRequest(item.text(0))
|
|
|
#def transformLayer2(self, layer):
|
|
|
# pass
|
|
|
+ def setCurrentLayer(name):
|
|
|
+ layers = QgsProject.instance().mapLayersByName(name)
|
|
|
+ if(len(layers) >1):
|
|
|
+ layerss = QgsProject.instance().mapLayers().values()
|
|
|
+ i = 0
|
|
|
+ for layer in layerss:
|
|
|
+ if layers[0].name == layer.name():
|
|
|
+ if (i == item.currentIndex()):
|
|
|
+ i = i + 1
|
|
|
+ break
|
|
|
+ i = i + 1
|
|
|
+ return i
|
|
|
def transformLayer(self, layer):
|
|
|
layer = iface.activeLayer()
|
|
|
crsSrc = layer.crs()
|
|
|
@@ -1383,7 +1458,7 @@ class Atlas:
|
|
|
nameCheck = True
|
|
|
validExtent = True
|
|
|
layers = QgsProject.instance().mapLayersByName(layer_name)
|
|
|
- layer_name = self.removeUnacceptableChars(layer_name)
|
|
|
+ # layer_name = self.removeUnacceptableChars(layer_name)
|
|
|
layers[0].setName(layer_name)
|
|
|
if len(layers) > 1:
|
|
|
for l in layers:
|
|
|
@@ -1392,11 +1467,14 @@ class Atlas:
|
|
|
layers.append(l)
|
|
|
break
|
|
|
|
|
|
- if not (re.match('[a-zA-Z_]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
|
|
|
- QMessageBox.information(None, "Layman", "Diacritics or number in first character is not allowed.")
|
|
|
- nameCheck = False
|
|
|
- if not (re.match('[a-zA-Z0-9]', layer_name)): ## není povolena diakritika
|
|
|
- QMessageBox.information(None, "Layman", "Diacritics is not allowed.")
|
|
|
+ #if not (re.match('[a-zA-Z_]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
|
|
|
+ # QMessageBox.information(None, "Layman", "Diacritics or number in first character is not allowed.")
|
|
|
+ # nameCheck = False
|
|
|
+ #if not (re.match('[a-zA-Z0-9]', layer_name)): ## není povolena diakritika
|
|
|
+ # QMessageBox.information(None, "Layman", "Diacritics is not allowed.")
|
|
|
+ # nameCheck = False
|
|
|
+ if (re.match('[0-9]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
|
|
|
+ QMessageBox.information(None, "Layman", "Number in first character is not allowed.")
|
|
|
nameCheck = False
|
|
|
|
|
|
print(layer_name)
|
|
|
@@ -1411,7 +1489,7 @@ class Atlas:
|
|
|
|
|
|
crs = layers[0].crs().authid()
|
|
|
crs = "EPSG:4326"
|
|
|
- data = { 'name' : str(layer_name), 'title' : str(layer_name), 'crs' : str(crs) }
|
|
|
+ data = { 'name' : str(layer_name).lower(), 'title' : str(layer_name), 'crs' : str(crs) }
|
|
|
|
|
|
if (self.checkValidAttributes(layer_name)):
|
|
|
if (self.checkExistingLayer(layer_name)):
|
|
|
@@ -1428,6 +1506,7 @@ class Atlas:
|
|
|
#try:
|
|
|
if (os.path.getsize(geoPath) > self.CHUNK_SIZE):
|
|
|
self.postInChunks(layer_name, "patch")
|
|
|
+ # iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer " + layer_name + " was imported successfully."), Qgis.Success, duration=3)
|
|
|
else:
|
|
|
self.patchLayer(layer_name, data)
|
|
|
iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer " + layer_name + " was imported successfully."), Qgis.Success, duration=3)
|
|
|
@@ -1536,16 +1615,45 @@ class Atlas:
|
|
|
QMessageBox.information(None, "Layman", "No layer selected!")
|
|
|
|
|
|
for i in range (0, len(layers)):
|
|
|
- print(type(layers[i]))
|
|
|
- print("tst")
|
|
|
+ print(type(layers[i]))
|
|
|
+
|
|
|
print (self.isLayerInComposite(x))
|
|
|
print (layers[i].name() in self.isLayerInComposite(x))
|
|
|
inComposite = layers[i].name() in self.isLayerInComposite(x)
|
|
|
+ layerName = self.removeUnacceptableChars(layers[i].name())
|
|
|
if (self.checkExistingLayer(layers[i].name()) and inComposite):
|
|
|
- QMessageBox.information(None, "Message", "Composition already include layer "+layers[i].name()+"!")
|
|
|
-
|
|
|
- # self.postRequest(layers[i].name())
|
|
|
+ j = self.getLayerInCompositePosition(x)
|
|
|
+ print("j je: " + str(j))
|
|
|
+
|
|
|
+ # QMessageBox.information(None, "Message", "Composition already include layer "+layers[i].name()+"!")
|
|
|
+ # self.deteteLayerFromComposite(x, j, layers[i].name())
|
|
|
+
|
|
|
+ self.postRequest(layers[i].name())
|
|
|
+ layerName = self.removeUnacceptableChars(layers[i].name())
|
|
|
+ wmsStatus = 'PENDING'
|
|
|
+ j = 0
|
|
|
+ while ((wmsStatus == 'PENDING') and (j < 10)):
|
|
|
+ print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName))
|
|
|
+ response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName), verify=False)
|
|
|
+ res = self.fromByteToJson(response.content)
|
|
|
+ try:
|
|
|
+ wmsStatus = res['wms']['status']
|
|
|
+ except:
|
|
|
+ wmsStatus = "done"
|
|
|
+ time.sleep(1)
|
|
|
+ j = j + 1
|
|
|
+
|
|
|
|
|
|
+ #print(res)
|
|
|
+ #try:
|
|
|
+ # wmsUrl = res['wms']['url']
|
|
|
+ #except:
|
|
|
+ # wmsUrl = self.URI+'/geoserver/'+layers[i].name()+'/ows'
|
|
|
+ #self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layers[i].name()),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
|
|
|
+ #successful = successful + 1
|
|
|
+ #self.dlg.progressBar.setValue(self.dlg.progressBar.value()+step)
|
|
|
+
|
|
|
+ #self.importMap(x, "add", successful)
|
|
|
|
|
|
|
|
|
else:
|
|
|
@@ -1553,8 +1661,8 @@ class Atlas:
|
|
|
wmsStatus = 'PENDING'
|
|
|
j = 0
|
|
|
while ((wmsStatus == 'PENDING') and (j < 10)):
|
|
|
- print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()))
|
|
|
- response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()), verify=False)
|
|
|
+ print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName))
|
|
|
+ response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName), verify=False)
|
|
|
res = self.fromByteToJson(response.content)
|
|
|
try:
|
|
|
wmsStatus = res['wms']['status']
|
|
|
@@ -1568,8 +1676,8 @@ class Atlas:
|
|
|
try:
|
|
|
wmsUrl = res['wms']['url']
|
|
|
except:
|
|
|
- wmsUrl = self.URI+'/geoserver/'+layers[i].name()+'/ows'
|
|
|
- self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layers[i].name()),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
|
|
|
+ wmsUrl = self.URI+'/geoserver/'+layerName+'/ows'
|
|
|
+ self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layerName),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
|
|
|
successful = successful + 1
|
|
|
self.dlg.progressBar.setValue(self.dlg.progressBar.value()+step)
|
|
|
|
|
|
@@ -1647,22 +1755,30 @@ class Atlas:
|
|
|
if (operation == "add"):
|
|
|
msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Chcete přidat do kompozice "+str(successful)+" vrstev?")
|
|
|
if (operation == "mod"):
|
|
|
- msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Chcete opravdu provést změny v této kompozici?")
|
|
|
+ #msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Do you want save changes?")
|
|
|
+
|
|
|
self.dlg.close()
|
|
|
self.afterCloseEditMapDialog()
|
|
|
print(self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name'])
|
|
|
|
|
|
response = requests.delete(self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name'],headers = self.authHeader, verify=False)
|
|
|
print(response.content)
|
|
|
+ response = requests.post(self.URI+'/rest/'+self.laymanUsername+'/maps', files=files, data = data, headers = self.authHeader)
|
|
|
self.dlg.show()
|
|
|
+ return
|
|
|
if (operation == "del"):
|
|
|
msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Chcete smazat vybranou vrstvu?")
|
|
|
- msgbox.addButton(QMessageBox.Yes)
|
|
|
- msgbox.addButton(QMessageBox.No)
|
|
|
- msgbox.setDefaultButton(QMessageBox.No)
|
|
|
- reply = msgbox.exec()
|
|
|
+
|
|
|
+ try: # jedná se o mod pokud je except
|
|
|
+ msgbox.addButton(QMessageBox.Yes)
|
|
|
+ msgbox.addButton(QMessageBox.No)
|
|
|
+ msgbox.setDefaultButton(QMessageBox.No)
|
|
|
+ reply = msgbox.exec()
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+
|
|
|
if (reply == QMessageBox.Yes):
|
|
|
- response = requests.post(self.URI+'/rest/'+self.laymanUsername+'/maps', files=files, data = data, headers = self.authHeader, verify=False)
|
|
|
+ response = requests.post(self.URI+'/rest/'+self.laymanUsername+'/maps', files=files, data = data, headers = self.authHeader)
|
|
|
print(response.content)
|
|
|
data = response.content
|
|
|
self.dlg.progressBar.hide()
|
|
|
@@ -1804,6 +1920,7 @@ class Atlas:
|
|
|
return False
|
|
|
|
|
|
def removeUnacceptableChars(self, input):
|
|
|
+ input = input.lower()
|
|
|
input = input.replace("ř","r")
|
|
|
input = input.replace("š","s")
|
|
|
input = input.replace("ž","z")
|
|
|
@@ -1812,6 +1929,7 @@ class Atlas:
|
|
|
input = input.replace(" ","_")
|
|
|
input = input.replace("é","e")
|
|
|
input = input.replace("í","i")
|
|
|
+ input = input.replace("ý","y")
|
|
|
input = input.replace("á","a")
|
|
|
input = input.replace("ó","o")
|
|
|
input = input.replace("č","c")
|
|
|
@@ -1819,10 +1937,15 @@ class Atlas:
|
|
|
input = input.replace("ě","e")
|
|
|
input = input.replace("ť","t")
|
|
|
input = re.sub(r'[?|$|.|!]',r'',input)
|
|
|
- input = input.lower()
|
|
|
+
|
|
|
+ # iface.messageBar().pushWidget(iface.messageBar().createMessage("Layman:", "Diacritics in name of layer was replaced."), Qgis.Success, duration=3)
|
|
|
+ return input
|
|
|
+ def removeUnacceptableChars2(self, input):
|
|
|
+ input = input.encode('utf-8')
|
|
|
+ input = input.hex()
|
|
|
+
|
|
|
# iface.messageBar().pushWidget(iface.messageBar().createMessage("Layman:", "Diacritics in name of layer was replaced."), Qgis.Success, duration=3)
|
|
|
return input
|
|
|
-
|
|
|
def test (self):
|
|
|
item = self.dlgGetLayers.items.currentItem().text()
|
|
|
print( item)
|
|
|
@@ -1843,6 +1966,25 @@ class Atlas:
|
|
|
existingLayers.append(data['layers'][i]['params']['LAYERS'])
|
|
|
|
|
|
return existingLayers
|
|
|
+ def getLayerInCompositePosition(self, x):
|
|
|
+ layers =[]
|
|
|
+ layers.append(self.dlg.mMapLayerComboBox.currentLayer())
|
|
|
+ print (self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name']+'/file')
|
|
|
+ req = requests.get (self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name']+'/file')
|
|
|
+ data = req.json()
|
|
|
+
|
|
|
+ print (data['abstract'])
|
|
|
+ print (len(self.compositeList[x]['layers']))
|
|
|
+ existingLayers = []
|
|
|
+ j = 0
|
|
|
+ for i in range (0, len(data['layers'])):
|
|
|
+ for j in range (0, len(layers)):
|
|
|
+ if (data['layers'][i]['params']['LAYERS'] in layers[j].name() ):
|
|
|
+ # existingLayers.append(data['layers'][i]['params']['LAYERS'])
|
|
|
+ j = i
|
|
|
+ print("founded")
|
|
|
+
|
|
|
+ return j
|
|
|
|
|
|
def isRasterLayerInComposite(self, x, name):
|
|
|
req = requests.get (self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name']+'/file')
|
|
|
@@ -1864,18 +2006,28 @@ class Atlas:
|
|
|
# epsg = str(data['groups']['projection']).upper()
|
|
|
epsg = 'EPSG:4326'
|
|
|
#abstract = data['data']['layers'][x]['params']['ABSTRACT']
|
|
|
- wmsName = data['layers'][x]['params']['LAYERS']
|
|
|
+ wmsName = data['layers'][x]['params']['LAYERS']
|
|
|
+
|
|
|
+ print("groupName " +groupName)
|
|
|
+ print("groupName " +layerName)
|
|
|
+
|
|
|
+ print("groupName " +format)
|
|
|
+ print("groupName " +epsg)
|
|
|
+ layerNameTitle = self.getLayerTitle(layerName)
|
|
|
+ print("groupName " +layerNameTitle)
|
|
|
+
|
|
|
+
|
|
|
if service == 'WMS':
|
|
|
- self.loadWms(repairUrl, layerName, format,epsg, groupName)
|
|
|
+ self.loadWms(repairUrl, layerName,layerNameTitle, format,epsg, groupName)
|
|
|
|
|
|
if service == 'WFS':
|
|
|
- self.loadWfs(repairUrl, layerName, groupName)
|
|
|
+ self.loadWfs(repairUrl, layerName,layerNameTitle, groupName)
|
|
|
def loadService(self, data, service, groupName = ''):
|
|
|
|
|
|
- print(len(data['layers']))
|
|
|
- for x in range(0, len(data['layers'])):
|
|
|
+ #print(len(data['layers']))
|
|
|
+ for x in range(len(data['layers'])- 1, -1, -1): ## descending order
|
|
|
#repairUrl = self.convertUrlFromHex(data['layers'][x]['url'])
|
|
|
- repairUrl = "http://layman.lesprojekt.cz/geoserver/"+self.laymanUsername+"/ows"
|
|
|
+ repairUrl = self.URI+"/geoserver/"+self.laymanUsername+"/ows"
|
|
|
layerName = data['layers'][x]['params']['LAYERS']
|
|
|
format = data['layers'][x]['params']['FORMAT']
|
|
|
# epsg = str(data['groups']['projection']).upper()
|
|
|
@@ -1884,29 +2036,51 @@ class Atlas:
|
|
|
wmsName = data['layers'][x]['params']['LAYERS']
|
|
|
if self.checkLayerOnLayman(layerName):
|
|
|
if service == 'WMS':
|
|
|
+ print("zzzzzzz" +layerName)
|
|
|
self.loadWms(repairUrl, layerName, format,epsg, groupName)
|
|
|
|
|
|
if service == 'WFS':
|
|
|
self.loadWfs(repairUrl, layerName, groupName)
|
|
|
else:
|
|
|
QMessageBox.information(None, "Layman", "Layer: "+layerName + " is corrupted and will not be loaded.")
|
|
|
-
|
|
|
- def loadWms(self, url, layerName, format, epsg, groupName = ''):
|
|
|
+ def getLayerTitle(self, layerName):
|
|
|
+ layerName = self.removeUnacceptableChars(layerName)
|
|
|
+ url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layerName
|
|
|
+ r = requests.get(url = url)
|
|
|
+ data = r.json()
|
|
|
+ print(data)
|
|
|
+ title = data['title']
|
|
|
+ return title
|
|
|
+
|
|
|
+ def loadWms(self, url, layerName,layerNameTitle, format, epsg, groupName = ''):
|
|
|
print(url)
|
|
|
- urlWithParams = 'contextualWMSLegend=0&crs='+epsg+'&dpiMode=7&featureCount=10&format=image/png&layers='+layerName+'&styles=&url=' + url
|
|
|
+ layerName = self.removeUnacceptableChars(layerName)
|
|
|
+ epsg = "EPSG:4326"
|
|
|
+ urlWithParams = 'contextualWMSLegend=0&crs='+epsg+'&IgnoreReportedLayerExtents=1&dpiMode=7&featureCount=10&format=image/png&layers='+layerName+'&styles=&url=' + url
|
|
|
print(urlWithParams)
|
|
|
- rlayer = QgsRasterLayer(urlWithParams, layerName, 'wms')
|
|
|
+ print("test")
|
|
|
+ print(layerNameTitle)
|
|
|
+ rlayer = QgsRasterLayer(urlWithParams, layerNameTitle, 'wms')
|
|
|
+ try:
|
|
|
+ print("extents")
|
|
|
+ print(rlayer.ignoreExtents())
|
|
|
+ except:
|
|
|
+ print("ignoreExtents works only with qgis 3.10 and higher")
|
|
|
+ pass # pro qgis 3.10 a vys
|
|
|
+
|
|
|
+
|
|
|
if (groupName != ''):
|
|
|
self.addWmsToGroup(groupName,rlayer)
|
|
|
else:
|
|
|
QgsProject.instance().addMapLayer(rlayer)
|
|
|
|
|
|
- def loadWfs(self, url, layerName, groupName = ''):
|
|
|
+ def loadWfs(self, url, layerName,layerNameTitle, groupName = ''):
|
|
|
+ layerName = self.removeUnacceptableChars(layerName)
|
|
|
epsg = 'EPSG:4326'
|
|
|
- uri = "http://layman.lesprojekt.cz/geoserver/"+self.laymanUsername+"/ows?srsname="+epsg+"&typename="+self.laymanUsername+":"+layerName+"&restrictToRequestBBOX=1&pagingEnabled=True &version=auto&request=GetFeature&service=WFS"
|
|
|
+ uri = self.URI+"/geoserver/"+self.laymanUsername+"/ows?srsname="+epsg+"&typename="+self.laymanUsername+":"+layerName+"&restrictToRequestBBOX=1&pagingEnabled=True&version=auto&request=GetFeature&service=WFS"
|
|
|
|
|
|
- print(uri)
|
|
|
- vlayer = QgsVectorLayer(uri, layerName, "WFS")
|
|
|
+ print(uri)
|
|
|
+ vlayer = QgsVectorLayer(uri, layerNameTitle, "WFS")
|
|
|
print(vlayer.isValid())
|
|
|
if (groupName != ''):
|
|
|
self.addWmsToGroup(groupName,vlayer)
|
|
|
@@ -1916,10 +2090,18 @@ class Atlas:
|
|
|
root = QgsProject.instance().layerTreeRoot()
|
|
|
group = root.findGroup(groupName)
|
|
|
if not(group):
|
|
|
- group = root.addGroup(groupName)
|
|
|
+ group = root.addGroup(groupName)
|
|
|
+ group = self.reorderToTop(groupName)
|
|
|
QgsProject.instance().addMapLayer(layer,False)
|
|
|
- group.insertChildNode(1,QgsLayerTreeLayer(layer))
|
|
|
-
|
|
|
+ group.insertChildNode(0,QgsLayerTreeLayer(layer))
|
|
|
+ def reorderToTop(self, name):
|
|
|
+ root = QgsProject.instance().layerTreeRoot()
|
|
|
+ for ch in root.children():
|
|
|
+ if ch.name() == name:
|
|
|
+ _ch = ch.clone()
|
|
|
+ root.insertChildNode(0, _ch)
|
|
|
+ root.removeChildNode(ch)
|
|
|
+ return _ch
|
|
|
def convertUrlFromHex(self, url):
|
|
|
url = url.replace('%3A',':')
|
|
|
url = url.replace('%2F','/')
|
|
|
@@ -1937,17 +2119,18 @@ class Atlas:
|
|
|
return ret
|
|
|
|
|
|
def registerLayer(self, name):
|
|
|
- sldPath = self.getTempPath(name).replace("geojson", "sld")
|
|
|
- geoPath = self.getTempPath(name)
|
|
|
+ sldPath = self.getTempPath(name).replace("geojson", "sld").lower()
|
|
|
+ geoPath = self.getTempPath(name).lower()
|
|
|
|
|
|
url = "http://layman.lesprojekt.cz/rest/"+self.laymanUsername+"/layers"
|
|
|
|
|
|
files = {'sld': (sldPath, open(sldPath, 'rb')),} # nahrávám sld
|
|
|
payload = {
|
|
|
- 'file': name+".geojson"
|
|
|
+ 'file': name.lower()+".geojson",
|
|
|
+ 'title': name
|
|
|
}
|
|
|
response = requests.request("POST", url, files = files, data=payload, headers = self.authHeader)
|
|
|
- # print(response.text)
|
|
|
+ print(response.text)
|
|
|
|
|
|
def read_in_chunks(self, file_object): ## cca 1MB chunk převzato z laymana test klienta
|
|
|
chunk_size=self.CHUNK_SIZE
|
|
|
@@ -1975,32 +2158,34 @@ class Atlas:
|
|
|
arr = []
|
|
|
for piece in self.read_in_chunks(f):
|
|
|
arr.append(piece)
|
|
|
-
|
|
|
+ layer_name = layer_name.lower()
|
|
|
url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layer_name+'/chunk'
|
|
|
resumableFilename = layer_name+'.geojson'
|
|
|
layman_original_parameter = "file"
|
|
|
resumableTotalChunks = len(arr)
|
|
|
-
|
|
|
- for i in range (1, len(arr)+1): ##chunky jsou počítané od 1 proto +1
|
|
|
- print("chunk" + str(i))
|
|
|
- file = arr[i-1] # rozsekaná část souboru
|
|
|
- resumableChunkNumber = i # cislo casti
|
|
|
- payload = {
|
|
|
- 'file' : "chunk"+str(i)+".geojson",
|
|
|
- 'resumableFilename': resumableFilename,
|
|
|
- 'layman_original_parameter': layman_original_parameter,
|
|
|
- 'resumableChunkNumber': i,
|
|
|
- 'resumableTotalChunks': resumableTotalChunks
|
|
|
- }
|
|
|
+ try:
|
|
|
+ for i in range (1, len(arr)+1): ##chunky jsou počítané od 1 proto +1
|
|
|
+ print("chunk" + str(i))
|
|
|
+ file = arr[i-1] # rozsekaná část souboru
|
|
|
+ resumableChunkNumber = i # cislo casti
|
|
|
+ payload = {
|
|
|
+ 'file' : "chunk"+str(i)+".geojson",
|
|
|
+ 'resumableFilename': resumableFilename,
|
|
|
+ 'layman_original_parameter': layman_original_parameter,
|
|
|
+ 'resumableChunkNumber': i,
|
|
|
+ 'resumableTotalChunks': resumableTotalChunks
|
|
|
+ }
|
|
|
|
|
|
- f = open(filePath + os.sep+"chunk"+str(i)+".geojson", "wb")
|
|
|
- f.write(bytearray(arr[i-1]))
|
|
|
- f.close()
|
|
|
- files = {'file': (layer_name+".geojson", open(filePath +os.sep+ "chunk"+str(i)+".geojson", 'rb')),}
|
|
|
- response = requests.post(url, files = files, data=payload, headers = self.authHeader)
|
|
|
-
|
|
|
- print(response.content)
|
|
|
+ f = open(filePath + os.sep+"chunk"+str(i)+".geojson", "wb")
|
|
|
+ f.write(bytearray(arr[i-1]))
|
|
|
+ f.close()
|
|
|
+ files = {'file': (layer_name+".geojson", open(filePath +os.sep+ "chunk"+str(i)+".geojson", 'rb')),}
|
|
|
+ response = requests.post(url, files = files, data=payload, headers = self.authHeader)
|
|
|
|
|
|
+ print(response.content)
|
|
|
+ iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer " + layer_name + " was imported successfully."), Qgis.Success, duration=3)
|
|
|
+ except:
|
|
|
+ iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer " + layer_name + " was not imported successfully!"), Qgis.Warning, duration=3)
|
|
|
|
|
|
############################################# auth part############################
|
|
|
|
|
|
@@ -2012,7 +2197,7 @@ class Atlas:
|
|
|
#self.expires_in = 60
|
|
|
path = tempfile.gettempdir() + os.sep + "atlas" + os.sep + "tsts.txt"
|
|
|
i = 0
|
|
|
- tokenEndpoint = "https://www.agrihub.cz/o/oauth2/token"
|
|
|
+ tokenEndpoint = "https://www."+self.liferayServer+"/o/oauth2/token"
|
|
|
while (i < self.expires_in):
|
|
|
f = open(path, "a")
|
|
|
f.write(str(i))
|
|
|
@@ -2092,7 +2277,7 @@ class Atlas:
|
|
|
def getToken(self):
|
|
|
self.saveIni()
|
|
|
|
|
|
- tokenEndpoint = "https://www.agrihub.cz/o/oauth2/token"
|
|
|
+ tokenEndpoint = "https://www."+self.liferayServer+"/o/oauth2/token"
|
|
|
# data to be sent to api
|
|
|
data = {'grant_type':'authorization_code',
|
|
|
'client_id': self.client_id,
|
|
|
@@ -2130,7 +2315,7 @@ class Atlas:
|
|
|
def setAuthHeader(self):
|
|
|
self.authHeader ={
|
|
|
"Authorization": "Bearer " + self.access_token,
|
|
|
- "AuthorizationIssUrl" : 'https://www.agrihub.cz/o/oauth2/authorize'
|
|
|
+ "AuthorizationIssUrl" : 'https://www.'+self.liferayServer+'/o/oauth2/authorize'
|
|
|
}
|
|
|
|
|
|
def registerUserIfNotExists(self):
|
|
|
@@ -2162,12 +2347,13 @@ class Atlas:
|
|
|
#API_ENDPOINT = "http://layman.lesprojekt.cz/rest/current-user"
|
|
|
#headers ={
|
|
|
# "Authorization": "Bearer "+ self.access_token,
|
|
|
- # "AuthorizationIssUrl" : 'https://www.agrihub.cz/o/oauth2/authorize'
|
|
|
+ # "AuthorizationIssUrl" : 'https://www.'+self.liferayServer+'/o/oauth2/authorize'
|
|
|
#}
|
|
|
|
|
|
|
|
|
def openAuthLiferayUrl(self):
|
|
|
-
|
|
|
+ self.liferayServer = self.dlg.lineEdit_server.text()
|
|
|
+ self.URI = self.dlg.lineEdit_serverLayman.text()
|
|
|
self.getCodeChallenge(self.getCodeVerifier()) ##generování kódů
|
|
|
self.client_id = self.dlg.lineEdit_AgriID.text()
|
|
|
path = tempfile.gettempdir() + os.sep + "atlas" + os.sep + "auth.txt"
|
|
|
@@ -2179,10 +2365,10 @@ class Atlas:
|
|
|
#################
|
|
|
|
|
|
print ("##### flask server is starting #####")
|
|
|
- thread = StartFlaskDaemon()
|
|
|
- thread.daemon = True
|
|
|
- thread.start()
|
|
|
- url = 'https://www.agrihub.cz/o/oauth2/authorize?response_type=code&client_id='+self.client_id+'&redirect_uri=http%3A%2F%2Flocalhost:3000%2Fclient%2Fauthn%2Foauth2-liferay%2Fcallback&code_challenge='+self.code_challenge ##n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg'
|
|
|
+ self.flaskThread = StartFlaskDaemon()
|
|
|
+ self.flaskThread.daemon = True
|
|
|
+ self.flaskThread.start()
|
|
|
+ url = 'https://www.'+self.liferayServer+'/o/oauth2/authorize?response_type=code&client_id='+self.client_id+'&redirect_uri=http%3A%2F%2Flocalhost:3000%2Fclient%2Fauthn%2Foauth2-liferay%2Fcallback&code_challenge='+self.code_challenge ##n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg'
|
|
|
webbrowser.open(url, new=2)
|
|
|
|
|
|
def saveIni(self):
|
|
|
@@ -2194,8 +2380,12 @@ class Atlas:
|
|
|
except OSError:
|
|
|
print ("vytváření adresáře selhalo")
|
|
|
config = configparser.ConfigParser()
|
|
|
+
|
|
|
config['DEFAULT']['login'] = self.Agrimail
|
|
|
config['DEFAULT']['id'] = self.client_id
|
|
|
+ print("saveliferay" + self.liferayServer)
|
|
|
+ config['DEFAULT']['server'] = self.liferayServer
|
|
|
+ config['DEFAULT']['layman'] = self.URI
|
|
|
|
|
|
|
|
|
with open(file, 'w') as configfile:
|
|
|
@@ -2205,6 +2395,16 @@ class Atlas:
|
|
|
config = configparser.ConfigParser()
|
|
|
config.read(file)
|
|
|
return config
|
|
|
+
|
|
|
+ def layerChanged(self):
|
|
|
+
|
|
|
+ print(iface.activeLayer())
|
|
|
+ if (iface.activeLayer() != None):
|
|
|
+ self.menu_saveLocalFile.setEnabled(True)
|
|
|
+ else:
|
|
|
+ self.menu_saveLocalFile.setEnabled(False)
|
|
|
+
|
|
|
+
|
|
|
def run(self):
|
|
|
"""Run method that loads and starts the plugin"""
|
|
|
|
|
|
@@ -2222,7 +2422,8 @@ class Atlas:
|
|
|
|
|
|
|
|
|
# connect to provide cleanup on closing of dockwidget
|
|
|
- self.dockwidget.closingPlugin.connect(self.onClosePlugin)
|
|
|
+ self.dockwidget.closingPlugin.connect(self.onClosePlugin)
|
|
|
+
|
|
|
self.dockwidget.pushButton.clicked.connect(self.sendLayer)
|
|
|
self.dockwidget.pushButton_2.clicked.connect(self.loadLocalFile)
|
|
|
self.dockwidget.pushButton_3.clicked.connect(self.saveLocalFile)
|