Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce6f30ea2c | ||
|
|
d50f601bd9 | ||
|
|
26678fb257 | ||
|
|
cef46278bc | ||
|
|
f34842bfac | ||
|
|
897ed3ae58 |
+64
-24
@@ -103,7 +103,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui', 'find.png')))
|
||||
self.comboBox_2.addItem("SIG")
|
||||
self.comboBox_2.addItem('REF')
|
||||
self.comboBox.currentIndexChanged.connect(self.initialisation_flux)
|
||||
|
||||
self.commandLinkButton.clicked.connect(self.selection_flux)
|
||||
self.tableWidget.itemDoubleClicked.connect(self.selection_flux)
|
||||
self.pushButton_2.clicked.connect(self.limite_flux)
|
||||
@@ -123,6 +123,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.DeBUG.addItem('01')
|
||||
self.DeBUG.addItem('0726')
|
||||
self.DeBUG.addItem('4269')
|
||||
self.comboBox.currentIndexChanged.connect(self.initialisation_flux)
|
||||
|
||||
self.DeBUG.currentIndexChanged.connect(self.SwitchDEBUG)
|
||||
self.DeBUG.hide()
|
||||
@@ -186,8 +187,8 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
dbtype = refdb
|
||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + dbtype + " user=" + user + " password=" + mdp)
|
||||
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||
self.initialisation_flux()
|
||||
self.combobox_custom()
|
||||
# self.initialisation_flux()
|
||||
# Create the dialog with elements (after translation) and keep reference
|
||||
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
|
||||
if self.first_start is True:
|
||||
@@ -210,27 +211,27 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
dbtype = sigdb
|
||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + dbtype + " user=" + user + " password=" + mdp)
|
||||
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||
self.initialisation_flux()
|
||||
self.combobox_custom()
|
||||
# self.initialisation_flux()
|
||||
# Create the dialog with elements (after translation) and keep reference
|
||||
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
|
||||
if self.first_start is True:
|
||||
self.first_start = False
|
||||
# show the dialog
|
||||
self.show()
|
||||
# self.show()
|
||||
# Run the dialog event loop
|
||||
result = self.exec()
|
||||
# result = self.exec()
|
||||
# See if OK was pressed
|
||||
if result:
|
||||
# if result:
|
||||
# Do something useful here - delete the line containing pass and
|
||||
# substitute with your code.
|
||||
pass
|
||||
# pass
|
||||
|
||||
def suppression_flux(self):
|
||||
self.tableWidget_2.removeRow(self.tableWidget_2.currentRow())
|
||||
|
||||
def initialisation_flux(self):
|
||||
print('run_time')
|
||||
print('run')
|
||||
if dbtype == sigdb:
|
||||
# self.toolButton.setEnabled(1)
|
||||
if self.comboBox.currentText() == 'toutes les catégories':
|
||||
@@ -240,13 +241,12 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
where schemaname like '""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) UNION (SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews where schemaname like '""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
else:
|
||||
custom_list = """(SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||
where schemaname like '\\_""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) UNION (SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews where schemaname like '\\_""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
where schemaname like '\\_""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) UNION (SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews where schemaname like '\\_""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
else:
|
||||
if self.comboBox.currentText() == 'toutes les catégories':
|
||||
custom_list = schemaname_list_ref
|
||||
else:
|
||||
custom_list = """SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||
where schemaname like '""" + str(self.comboBox.currentText()) + """' order by schemaname,tablename;"""
|
||||
custom_list = """SELECT schemaname, tablename from pg_catalog.pg_tables WHERE schemaname LIKE '""" + str(self.comboBox.currentText()) + """' AND tablename NOT LIKE 'qgis_projects' order by schemaname, tablename;"""
|
||||
cur.execute(custom_list)
|
||||
list_schema = cur.fetchall()
|
||||
|
||||
@@ -275,6 +275,16 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
cur.execute(SQLProjectsQgis)
|
||||
list_projects_qgis.append(cur.fetchall())
|
||||
|
||||
if self.comboBox.currentText() == 'toutes les catégories':
|
||||
SQLGrands = """SELECT concat(table_schema,'.',table_name) FROM information_schema.role_table_grants WHERE grantee in(SELECT rolname FROM pg_catalog.pg_roles WHERE oid in(SELECT roleid FROM pg_auth_members WHERE member = (SELECT usesysid FROM pg_catalog.pg_user WHERE usename = '""" + user + """'))) and privilege_type = 'SELECT';"""
|
||||
else:
|
||||
SQLGrands = """SELECT concat(table_schema,'.',table_name) FROM information_schema.role_table_grants WHERE grantee in(SELECT rolname FROM pg_catalog.pg_roles WHERE oid in(SELECT roleid FROM pg_auth_members WHERE member = (SELECT usesysid FROM pg_catalog.pg_user WHERE usename = '""" + user + """'))) and privilege_type = 'SELECT' AND table_schema LIKE '_""" + str(self.comboBox.currentText()) + """_%';"""
|
||||
cur.execute(SQLGrands)
|
||||
list_grands = cur.fetchall()
|
||||
GrandUser = []
|
||||
for grandsFind in list_grands:
|
||||
GrandUser.append(grandsFind[0])
|
||||
|
||||
self.tableWidget.setRowCount(len(list_schema))
|
||||
self.tableWidget.setColumnCount(4)
|
||||
i = 0
|
||||
@@ -324,13 +334,27 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.tableWidget.setItem(i, 2, item)
|
||||
item = QTableWidgetItem(table_name)
|
||||
self.tableWidget.setItem(i, 3, item)
|
||||
|
||||
if dbtype == sigdb:
|
||||
if (str(value[0]) + '.' + str(value[1])) in GrandUser:
|
||||
pass
|
||||
else:
|
||||
# print(str(value[0]) + '.' + str(value[1]), 'bad')
|
||||
for j in range(self.tableWidget.columnCount()):
|
||||
self.tableWidget.item(i, j).setBackground(QtGui.QColor(187, 134, 192, 50))
|
||||
self.tableWidget.item(i, j).setToolTip('Droit insuffisant pour ouvrire la couche !')
|
||||
|
||||
i = i + 1
|
||||
|
||||
SQLprojects = """SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE 'qgis_projects'"""
|
||||
if self.comboBox.currentText() == 'toutes les catégories':
|
||||
SQLprojects = """SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE 'qgis_projects'"""
|
||||
else:
|
||||
SQLprojects = """SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE 'qgis_projects' AND schemaname LIKE '""" + str(self.comboBox.currentText()) + """';"""
|
||||
cur.execute(SQLprojects)
|
||||
list_projects = cur.fetchall()
|
||||
|
||||
list_projects_qgis = []
|
||||
if len(list_projects) <= 1:
|
||||
if len(list_projects) >= 1:
|
||||
for ProjectName in list_projects:
|
||||
SQLProjectsQgis = """SELECT name, metadata, content FROM """ + '"' + ProjectName[0] + '"."' + ProjectName[1] + '"'
|
||||
cur.execute(SQLProjectsQgis)
|
||||
@@ -343,10 +367,10 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
itemIcon.setIcon(icon)
|
||||
self.tableWidget.setItem(i, 0, itemIcon)
|
||||
|
||||
item = QTableWidgetItem('QGIS')
|
||||
item = QTableWidgetItem('qgis')
|
||||
self.tableWidget.setItem(i, 1, item)
|
||||
|
||||
item = QTableWidgetItem('projet')
|
||||
item = QTableWidgetItem(ProjectName[0])
|
||||
self.tableWidget.setItem(i, 2, item)
|
||||
|
||||
item = QTableWidgetItem(Project[0])
|
||||
@@ -441,15 +465,28 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
# p = []
|
||||
|
||||
SQLloadRaster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||
cur.execute(SQLloadRaster)
|
||||
list_raster = cur.fetchall()
|
||||
SQLextension = """SELECT count(extname) FROM pg_catalog.pg_extension WHERE extname LIKE 'postgis_raster';"""
|
||||
|
||||
cur.execute(SQLextension)
|
||||
count_extension = cur.fetchall()[0][0]
|
||||
|
||||
if count_extension == 1:
|
||||
cur.execute(SQLloadRaster)
|
||||
list_raster = cur.fetchall()
|
||||
else:
|
||||
list_raster = []
|
||||
|
||||
RasterList = []
|
||||
for rasterFind in list_raster:
|
||||
RasterList.append(rasterFind[0])
|
||||
|
||||
for row in range(0, self.tableWidget_2.rowCount()):
|
||||
color_rgba = 855030089
|
||||
if self.tableWidget_2.item(row, 1).background().color().rgba() != color_rgba:
|
||||
color_rgba_db = 855030089
|
||||
color_rgba_droit = 851150528
|
||||
print(self.tableWidget_2.item(row, 1).background().color().rgba())
|
||||
if self.tableWidget_2.item(row, 1).background().color().rgba() == color_rgba_droit:
|
||||
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !", "Vous ne disposez pas des droit pour la couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» !", QMessageBox.StandardButton(0x00004000))
|
||||
elif self.tableWidget_2.item(row, 1).background().color().rgba() != color_rgba_db:
|
||||
# supression de la partie de l'url après le point d'interrogation
|
||||
if dbtype == sigdb:
|
||||
code = self.tableWidget_2.item(row, 1).text()
|
||||
@@ -457,26 +494,28 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
if code == 'travaux' or code == 'agregation':
|
||||
schema = self.tableWidget_2.item(row, 2).text()
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
elif code == '00':
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
else:
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
table = schema + '_' + table
|
||||
elif dbtype == refdb:
|
||||
# code = self.tableWidget_2.item(row,1).text()
|
||||
code = self.tableWidget_2.item(row, 1).text()
|
||||
schema = self.tableWidget_2.item(row, 2).text()
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
# .split("?", 1)[0]
|
||||
uri = QgsDataSourceUri()
|
||||
uri.setConnection(host, port, dbtype, user, mdp)
|
||||
|
||||
# nom du schéma à remplacer: "hydrographie" à supprimer et mettre "couches_collaboratives" lorsqu'on aura regroupé les couches à modifier dans un même schéma
|
||||
# nom du schéma à remplacer: "hydrographie" à supprimer et mettre "couches_collaboratives" lorsqu'on aura regroupé les couches à modifier dans un même
|
||||
if (schema + '.' + table) in RasterList:
|
||||
uri.setDataSource(schema, table, "rast")
|
||||
uri.setKeyColumn('rid')
|
||||
uri.setSrid('2154')
|
||||
layer = QgsRasterLayer(uri.uri(), table, "postgresraster")
|
||||
QgsProject.instance().addMapLayer(layer)
|
||||
elif code == 'QGIS':
|
||||
schema = '_' + self.tableWidget_2.item(row, 2).text()
|
||||
elif code == 'qgis':
|
||||
schema = self.tableWidget_2.item(row, 2).text()
|
||||
print(schema)
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
uri_project = 'postgresql://' + user + ':' + mdp + '@' + host + ':' + port + '?sslmode=disable&dbname=' + dbtype + "&schema=" + schema + '&project=' + table
|
||||
QgsProject.instance().read(uri_project)
|
||||
@@ -527,6 +566,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.comboBox.addItem('69')
|
||||
self.comboBox.addItem('agregation')
|
||||
self.comboBox.addItem('travaux')
|
||||
self.comboBox.addItem('qgis')
|
||||
self.comboBox.addItem('form')
|
||||
if dbtype == refdb:
|
||||
self.toolButton.setEnabled(0)
|
||||
|
||||
@@ -7,7 +7,7 @@ name=CenRa_FLUX
|
||||
qgisMinimumVersion=3.0
|
||||
supportsQt6=True
|
||||
description=Permet d'ouvrire une table dans la base PostGis
|
||||
version=3.6
|
||||
version=3.13
|
||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||
email=si_besoin@cen-rhonealpes.fr
|
||||
|
||||
@@ -32,7 +32,7 @@ icon=icon.png
|
||||
# experimental flag
|
||||
experimental=False
|
||||
|
||||
changelog=<h2>CenRa_FLUX:</h2></br><p><h3>30/07/2025 - Version 3.6: </h3> - Correctife de bug.</p></br><p><h3>29/07/2025 - Version 3.5: </h3> - Bug fix sur les donnee raster.</p></br><p><h3>23/07/2025 - Version 3.4: </h3> - Ouverture raster dans la base SIG.</p></br><p><h3>23/07/2025 - Version 3.3: </h3> - Optimisation des chargement.</p></br><p><h3>22/07/2025 - Version 3.2: </h3> - Visualisation des format raster et vecteur dans REF.</p></br><p><h3>21/07/2025 - Version 3.1: </h3> - Bug fix pour l'ouverture de plus de 5 couches.</p></br><p><h3>19/05/2025 - Version 3.0: </h3> - Compatible PyQt5 et PyQt6.</p></br><p><h3>09/04/2025 - Version 2.9: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 2.8: </h3> - Optimisation pour le TT.</p></br><p><h3>07/04/2025 - Version 2.7: </h3> - mode debug.</p></br><p><h3>03/04/2025 - Version 2.6: </h3> - Mise a jour de securite.</p></br><p><h3>20/03/2025 - Version 2.5: </h3> - Visualisation distincte des couches ne se trouvant pas dans l'antenne.</p></br><p><h3>13/02/2025 - Version 2.4: </h3> - Ajoute redimensionnement et déplacement mollette.</p></br><p><h3>05/02/2025 - Version 2.3: </h3> - Bouton de visualisation des couches se trouvent uniquement dans le canva de la carte.</p></br><p><h3>07/01/2025 - Version 2.2: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.1:</h3> - Correctif de bug.</br> - Evolution de la limit de 3 à 5. </br></p></br><p><h3>22/10/2024 - Version 2.0:</h3> - Reformatage du code.</br></p></br><p><h3>03/10/2024 - Version 1.14:</h3> - Remonte la fênetre dans la pille.</br></p><p><h3>13/09/2024 - Version 1.13:</h3>- MAJ sur le lien du changelog</br>- Bug-fix: Ouvre MultiPolygone et Polygon séparément.</p></br><p><h3>10/09/2024 - Version 1.11:</h3>- Ouverture de table contenant plusieurs géométries.</p></br><p><h3>26/08/2024 - Version 1.10:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||
changelog=<h2>CenRa_FLUX:</h2></br><p><h3>08/12/2025 - Version 3.13: </h3> - Detection des droit utilisateur.</p></br><p><h3>25/09/2025 - Version 3.12: </h3> - version +1.</p></br><p><h3>25/09/2025 - Version 3.11: </h3> - Correctife sur les code 00.</p></br><p><h3>24/09/2025 - Version 3.10: </h3> - Erreur sur l ouverture des couche raster. </p></br><p><h3>24/09/2025 - Version 3.9: </h3> - bugfix lier aux extention pgsql.</p></br><p><h3>09/09/2025 - Version 3.8: </h3> - Bug REF fix.</p></br><p><h3>05/09/2025 - Version 3.7: </h3> - Ouverture de projet QGIS contenue dans la base de donnees.</p></br><p><h3>30/07/2025 - Version 3.6: </h3> - Correctife de bug.</p></br><p><h3>29/07/2025 - Version 3.5: </h3> - Bug fix sur les donnee raster.</p></br><p><h3>23/07/2025 - Version 3.4: </h3> - Ouverture raster dans la base SIG.</p></br><p><h3>23/07/2025 - Version 3.3: </h3> - Optimisation des chargement.</p></br><p><h3>22/07/2025 - Version 3.2: </h3> - Visualisation des format raster et vecteur dans REF.</p></br><p><h3>21/07/2025 - Version 3.1: </h3> - Bug fix pour l'ouverture de plus de 5 couches.</p></br><p><h3>19/05/2025 - Version 3.0: </h3> - Compatible PyQt5 et PyQt6.</p></br><p><h3>09/04/2025 - Version 2.9: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 2.8: </h3> - Optimisation pour le TT.</p></br><p><h3>07/04/2025 - Version 2.7: </h3> - mode debug.</p></br><p><h3>03/04/2025 - Version 2.6: </h3> - Mise a jour de securite.</p></br><p><h3>20/03/2025 - Version 2.5: </h3> - Visualisation distincte des couches ne se trouvant pas dans l'antenne.</p></br><p><h3>13/02/2025 - Version 2.4: </h3> - Ajoute redimensionnement et déplacement mollette.</p></br><p><h3>05/02/2025 - Version 2.3: </h3> - Bouton de visualisation des couches se trouvent uniquement dans le canva de la carte.</p></br><p><h3>07/01/2025 - Version 2.2: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.1:</h3> - Correctif de bug.</br> - Evolution de la limit de 3 à 5. </br></p></br><p><h3>22/10/2024 - Version 2.0:</h3> - Reformatage du code.</br></p></br><p><h3>03/10/2024 - Version 1.14:</h3> - Remonte la fênetre dans la pille.</br></p><p><h3>13/09/2024 - Version 1.13:</h3>- MAJ sur le lien du changelog</br>- Bug-fix: Ouvre MultiPolygone et Polygon séparément.</p></br><p><h3>10/09/2024 - Version 1.11:</h3>- Ouverture de table contenant plusieurs géométries.</p></br><p><h3>26/08/2024 - Version 1.10:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||
|
||||
# deprecated flag (applies to the whole plugin, not just a single version)
|
||||
deprecated=False
|
||||
|
||||
+3
-3
@@ -50,9 +50,9 @@
|
||||
<tags>cenra,sicen</tags>
|
||||
</pyqgis_plugin>
|
||||
|
||||
<pyqgis_plugin name="CenRa_FLUX" version="3.6">
|
||||
<pyqgis_plugin name="CenRa_FLUX" version="3.13">
|
||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||
<version>3.6</version>
|
||||
<version>3.13</version>
|
||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||
<file_name>CenRa_FLUX.zip</file_name>
|
||||
@@ -61,7 +61,7 @@
|
||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_FLUX.zip</download_url>
|
||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||
<create_date>2024-02-06</create_date>
|
||||
<update_date>2025-07-30</update_date>
|
||||
<update_date>2025-12-08</update_date>
|
||||
<experimental>False</experimental>
|
||||
<deprecated>False</deprecated>
|
||||
<tags>cenra,flux</tags>
|
||||
|
||||
Reference in New Issue
Block a user