Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f34842bfac | ||
|
|
897ed3ae58 | ||
|
|
2236123050 | ||
|
|
9ad5baa4ed | ||
|
|
36de24532a | ||
|
|
6c1af3c61c | ||
|
|
d7267c0542 | ||
|
|
fd5d516f14 | ||
|
|
ca1d895eb1 | ||
|
|
e503423e49 | ||
|
|
3564209574 | ||
|
|
7df08ae02a | ||
|
|
133e785568 | ||
|
|
9b7ab9ab15 | ||
|
|
c02da75f0b | ||
|
|
d4b181ff61 | ||
|
|
7a3814a429 | ||
|
|
1cd816c706 | ||
|
|
94cac31fbb | ||
|
|
2690220a02 | ||
|
|
3719456f04 | ||
|
|
bea31c870b |
@@ -4,14 +4,14 @@ __email__ = "info@3liz.org"
|
|||||||
|
|
||||||
|
|
||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
from qgis.PyQt.QtCore import Qt, QUrl
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
from qgis.PyQt.QtWidgets import QAction
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
# include <QSettings>
|
||||||
'''
|
'''
|
||||||
from pg_metadata.connection_manager import (
|
from pg_metadata.connection_manager import (
|
||||||
store_connections,
|
store_connections,
|
||||||
@@ -24,8 +24,10 @@ from pg_metadata.processing.provider import PgMetadataProvider
|
|||||||
from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
||||||
'''
|
'''
|
||||||
import os
|
import os
|
||||||
|
from qgis.PyQt.QtCore import QSettings
|
||||||
|
from .about_form import AboutDialog
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
# plugin_path,
|
||||||
resources_path,
|
resources_path,
|
||||||
pyperclip,
|
pyperclip,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
@@ -34,10 +36,6 @@ pyperclip()
|
|||||||
|
|
||||||
from .canvas_editor import AutoMap_Editor
|
from .canvas_editor import AutoMap_Editor
|
||||||
from .style_invoke import AutoMap_Style
|
from .style_invoke import AutoMap_Style
|
||||||
from .about_form import AboutDialog
|
|
||||||
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
|
||||||
|
|
||||||
|
|
||||||
class PgAutoMap:
|
class PgAutoMap:
|
||||||
@@ -51,18 +49,18 @@ class PgAutoMap:
|
|||||||
self.dock_action = None
|
self.dock_action = None
|
||||||
self.help_action = None
|
self.help_action = None
|
||||||
plugin_dir = os.path.dirname(__file__)
|
plugin_dir = os.path.dirname(__file__)
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
global NAME
|
global NAME
|
||||||
NAME = plugin_dir[end_find:]
|
NAME = plugin_dir[end_find:]
|
||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_AUTOMAP','version')
|
version = qgis.utils.pluginMetadata('CenRa_AUTOMAP', 'version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("automap/version", 1, type=str)
|
versionUse = s.value("automap/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version):
|
||||||
s.setValue("automap/version", str(version))
|
s.setValue("automap/version", str(version))
|
||||||
print(versionUse,version)
|
print(versionUse, version)
|
||||||
self.open_about_dialog()
|
self.open_about_dialog()
|
||||||
|
|
||||||
def initGui(self):
|
def initGui(self):
|
||||||
@@ -80,7 +78,7 @@ class PgAutoMap:
|
|||||||
if not self.canvas_editor:
|
if not self.canvas_editor:
|
||||||
self.canvas_editor = AutoMap_Editor()
|
self.canvas_editor = AutoMap_Editor()
|
||||||
|
|
||||||
self.automap_action = QAction(icon, 'CenRa_AutoMap',None)
|
self.automap_action = QAction(icon, 'CenRa_AutoMap', None)
|
||||||
self.toolBar.addAction(self.automap_action)
|
self.toolBar.addAction(self.automap_action)
|
||||||
self.automap_action.triggered.connect(self.open_editor)
|
self.automap_action.triggered.connect(self.open_editor)
|
||||||
|
|
||||||
@@ -90,45 +88,13 @@ class PgAutoMap:
|
|||||||
if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
|
if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
|
||||||
iface.addDockWidget(Qt.DockWidgetArea(0x1), self.style_dock)
|
iface.addDockWidget(Qt.DockWidgetArea(0x1), self.style_dock)
|
||||||
|
|
||||||
'''
|
|
||||||
if not self.locator_filter:
|
|
||||||
self.locator_filter = LocatorFilter(iface)
|
|
||||||
iface.registerLocatorFilter(self.locator_filter)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def check_invalid_connection_names():
|
|
||||||
""" Check for invalid connection names in the QgsSettings. """
|
|
||||||
valid, invalid = validate_connections_names()
|
|
||||||
n_invalid = len(invalid)
|
|
||||||
|
|
||||||
if n_invalid == 0:
|
|
||||||
return
|
|
||||||
|
|
||||||
invalid_text = ', '.join(invalid)
|
|
||||||
msg = QMessageBox()
|
|
||||||
msg.setIcon(QMessageBox.Warning)
|
|
||||||
msg.setWindowTitle(tr('PgMetadata: Database connection(s) not available'))
|
|
||||||
msg.setText(tr(
|
|
||||||
f'{n_invalid} connection(s) listed in PgMetadata’s settings are invalid or '
|
|
||||||
f'no longer available: {invalid_text}'))
|
|
||||||
msg.setInformativeText(tr(
|
|
||||||
'Do you want to remove these connection(s) from the PgMetadata settings? '
|
|
||||||
'(You can also do this later with the “Set Connections” tool.)'))
|
|
||||||
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
|
|
||||||
clicked = msg.exec()
|
|
||||||
|
|
||||||
if clicked == QMessageBox.Yes:
|
|
||||||
iface.messageBar().pushSuccess('PgMetadata', tr(f'{n_invalid} invalid connection(s) removed.'))
|
|
||||||
store_connections(valid)
|
|
||||||
if clicked == QMessageBox.No:
|
|
||||||
iface.messageBar().pushInfo('PgMetadata', tr(f'Keeping {n_invalid} invalid connections.'))
|
|
||||||
'''
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
"""
|
"""
|
||||||
About dialog
|
About dialog
|
||||||
"""
|
"""
|
||||||
dialog = AboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||||
@@ -140,7 +106,7 @@ class PgAutoMap:
|
|||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.canvas_editor:
|
if self.canvas_editor:
|
||||||
iface.removePluginMenu('CenRa_AutoMap',self.automap_action)
|
iface.removePluginMenu('CenRa_AutoMap', self.automap_action)
|
||||||
|
|
||||||
if self.provider:
|
if self.provider:
|
||||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os.path
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
from qgis.PyQt.QtGui import QPixmap
|
# from qgis.PyQt.QtGui import QPixmap
|
||||||
from qgis.PyQt.QtWidgets import QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
|
|
||||||
from .tools.resources import devlog
|
from .tools.resources import devlog
|
||||||
|
|||||||
+152
-183
@@ -1,80 +1,41 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from collections import namedtuple
|
|
||||||
from enum import Enum
|
|
||||||
from functools import partial
|
|
||||||
from pathlib import Path
|
|
||||||
from xml.dom.minidom import parseString
|
|
||||||
from qgis.gui import *
|
|
||||||
import qgis
|
|
||||||
from importlib import import_module
|
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
NULL,
|
|
||||||
QgsApplication,
|
|
||||||
QgsScaleBarSettings,
|
QgsScaleBarSettings,
|
||||||
QgsDataSourceUri,
|
|
||||||
QgsProject,
|
QgsProject,
|
||||||
QgsProviderConnectionException,
|
|
||||||
QgsProviderRegistry,
|
|
||||||
QgsRasterLayer,
|
QgsRasterLayer,
|
||||||
QgsSettings,
|
QgsSettings,
|
||||||
QgsVectorLayer,
|
QgsVectorLayer,
|
||||||
QgsGeometry,
|
|
||||||
QgsPrintLayout,
|
QgsPrintLayout,
|
||||||
QgsReadWriteContext,
|
QgsReadWriteContext,
|
||||||
QgsLayoutItemMap,
|
QgsLayoutItemMap,
|
||||||
QgsLayoutItemPage,
|
QgsLayoutItemPage,
|
||||||
QgsLayoutSize,
|
|
||||||
QgsUnitTypes,
|
QgsUnitTypes,
|
||||||
QgsLayoutPoint,
|
|
||||||
QgsLayoutItemLabel,
|
QgsLayoutItemLabel,
|
||||||
QgsLayoutItemPicture,
|
QgsLayoutItemPicture,
|
||||||
QgsLayoutItemLegend,
|
QgsLayoutItemLegend,
|
||||||
QgsLegendStyle,
|
QgsLegendStyle,
|
||||||
QgsLayoutItemScaleBar,
|
QgsLayoutItemScaleBar,
|
||||||
QgsLayerTreeGroup,
|
QgsLayerTreeGroup,
|
||||||
QgsCoordinateReferenceSystem,
|
|
||||||
QgsCoordinateTransform,
|
|
||||||
QgsLayerTree,
|
|
||||||
QgsLayoutTableColumn,
|
|
||||||
QgsRectangle,
|
QgsRectangle,
|
||||||
QgsLayoutItemMapOverviewStack,
|
|
||||||
)
|
)
|
||||||
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt
|
from qgis.PyQt.QtCore import Qt
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie
|
from qgis.PyQt.QtGui import QColor, QFont
|
||||||
from qgis.PyQt.QtPrintSupport import QPrinter
|
|
||||||
#from qgis.PyQt.QtWebKitWidgets import QWebPage
|
|
||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
QDialog,
|
||||||
QAction,
|
|
||||||
QMessageBox,
|
QMessageBox,
|
||||||
QPushButton,
|
QPushButton,
|
||||||
QDockWidget,
|
|
||||||
QFileDialog,
|
QFileDialog,
|
||||||
QInputDialog,
|
|
||||||
QMenu,
|
|
||||||
QToolButton,
|
|
||||||
QTableWidget,
|
|
||||||
QTableWidgetItem,
|
|
||||||
QVBoxLayout,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui
|
||||||
from qgis.PyQt import QtWidgets
|
|
||||||
|
|
||||||
|
|
||||||
from qgis.PyQt.QtXml import QDomDocument
|
from qgis.PyQt.QtXml import QDomDocument
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import glob
|
import glob
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_AutoMap_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_AutoMap_base.ui')
|
||||||
@@ -84,48 +45,48 @@ url_ortho = 'http://tiles.craig.fr/ortho/service/?crs=EPSG:2154&featureCount=10&
|
|||||||
url_mnt = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=relief&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
url_mnt = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=relief&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
||||||
url_pente = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=pente&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
url_pente = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=pente&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
||||||
data_source = [
|
data_source = [
|
||||||
'CENRA',
|
'CENRA',
|
||||||
'IGN',
|
'IGN',
|
||||||
'CRAIG',
|
'CRAIG',
|
||||||
'OpenStreetMap',
|
'OpenStreetMap',
|
||||||
'Sandre',
|
'Sandre',
|
||||||
'BRGM',
|
'BRGM',
|
||||||
'MUSÉUM NATIONAL D’HISTOIRE NATURELLE',
|
'MUSÉUM NATIONAL D’HISTOIRE NATURELLE',
|
||||||
"Muséum national d'Histoire naturelle",
|
"Muséum national d'Histoire naturelle",
|
||||||
'ONF',
|
'ONF',
|
||||||
'20xx LPO',
|
'20xx LPO',
|
||||||
'ofb.gouv.fr',
|
'ofb.gouv.fr',
|
||||||
'Stamen Design',
|
'Stamen Design',
|
||||||
'MTES',
|
'MTES',
|
||||||
'MTES',
|
'MTES',
|
||||||
'FEDER',
|
'FEDER',
|
||||||
'DREAL Auvergne-Rhône-Alpes',
|
'DREAL Auvergne-Rhône-Alpes',
|
||||||
'INSEE',
|
'INSEE',
|
||||||
'DGFiP',
|
'DGFiP',
|
||||||
'Fédération des Conservatoires d’espaces naturels',
|
'Fédération des Conservatoires d’espaces naturels',
|
||||||
'Plan cadastral informatisé - Etalab - juillet 202X',
|
'Plan cadastral informatisé - Etalab - juillet 202X',
|
||||||
'Parcellaire Express - IGN - 202X',
|
'Parcellaire Express - IGN - 202X',
|
||||||
]
|
]
|
||||||
A4_size = {'Portrait':{'RIGHT':210,'LEFT':0,'TOP':0,'BOTTOM':297},'Landscape':{'RIGHT':297,'LEFT':0,'TOP':0,'BOTTOM':210}}
|
A4_size = {'Portrait': {'RIGHT': 210, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 297}, 'Landscape': {'RIGHT': 297, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 210}}
|
||||||
A3_size = {'Portrait':{'RIGHT':298,'LEFT':0,'TOP':0,'BOTTOM':420},'Landscape':{'RIGHT':420,'LEFT':0,'TOP':0,'BOTTOM':298}}
|
A3_size = {'Portrait': {'RIGHT': 298, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 420}, 'Landscape': {'RIGHT': 420, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 298}}
|
||||||
|
|
||||||
|
|
||||||
class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
|
|
||||||
path = ''
|
path = ''
|
||||||
ix = 0
|
ix = 0
|
||||||
plugin_dir = str(os.path.dirname(os.path.abspath(__file__))).split(os.sep)
|
plugin_dir = str(os.path.dirname(os.path.abspath(__file__))).split(os.sep)
|
||||||
for i in plugin_dir[1:]:
|
for i in plugin_dir[1:]:
|
||||||
ix = ix+1
|
ix = ix + 1
|
||||||
path = path+'/'+i
|
path = path + '/' + i
|
||||||
#self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);')
|
# self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);')
|
||||||
|
|
||||||
self.verticalScrollBar.hide()
|
self.verticalScrollBar.hide()
|
||||||
self.commandLinkButton.clicked.connect(self.chargement_qpt)
|
self.commandLinkButton.clicked.connect(self.chargement_qpt)
|
||||||
@@ -140,13 +101,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.CustomeLogo.clicked.connect(self.deflogoteck)
|
self.CustomeLogo.clicked.connect(self.deflogoteck)
|
||||||
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
||||||
|
|
||||||
## On ajoute le nom des templates à la liste déroulante de l'onglet "mises en page" :
|
# On ajoute le nom des templates à la liste déroulante de l'onglet "mises en page" :
|
||||||
mises_en_page = []
|
mises_en_page = []
|
||||||
|
|
||||||
for filename in glob.glob(resources_path("mises_en_pages","*.py")):
|
for filename in glob.glob(resources_path("mises_en_pages", "*.py")):
|
||||||
mises_en_page.append(filename)
|
mises_en_page.append(filename)
|
||||||
|
|
||||||
|
|
||||||
for i, filename in enumerate(mises_en_page):
|
for i, filename in enumerate(mises_en_page):
|
||||||
nom_fichier = os.path.basename(filename)
|
nom_fichier = os.path.basename(filename)
|
||||||
self.comboBox.addItem(nom_fichier)
|
self.comboBox.addItem(nom_fichier)
|
||||||
@@ -154,35 +114,35 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
self.template_parameters = {
|
self.template_parameters = {
|
||||||
'Carte_size': None,
|
'Carte_size': None,
|
||||||
'Carte_locals' : None,
|
'Carte_locals': None,
|
||||||
'Carte_rotate':None,
|
'Carte_rotate': None,
|
||||||
'Carte_2_size' : None,
|
'Carte_2_size': None,
|
||||||
'Carte_2_locals' : None,
|
'Carte_2_locals': None,
|
||||||
'Carte_2_rotate':None,
|
'Carte_2_rotate': None,
|
||||||
'Legande_size': None,
|
'Legande_size': None,
|
||||||
'Legande_locals': None,
|
'Legande_locals': None,
|
||||||
'Legande_rotate':None,
|
'Legande_rotate': None,
|
||||||
'Arrow_size': None,
|
'Arrow_size': None,
|
||||||
'Arrow_locals': None,
|
'Arrow_locals': None,
|
||||||
'Arrow_rotate':None,
|
'Arrow_rotate': None,
|
||||||
'Echelle_size': None,
|
'Echelle_size': None,
|
||||||
'Echelle_locals': None,
|
'Echelle_locals': None,
|
||||||
'Echelle_rotate':None,
|
'Echelle_rotate': None,
|
||||||
'Logo_size': None,
|
'Logo_size': None,
|
||||||
'Logo_locals': None,
|
'Logo_locals': None,
|
||||||
'Logo_rotate':None,
|
'Logo_rotate': None,
|
||||||
'Titre_size':None,
|
'Titre_size': None,
|
||||||
'Titre_locals':None,
|
'Titre_locals': None,
|
||||||
'Titre_rotate':None,
|
'Titre_rotate': None,
|
||||||
'Sous_titre_size':None,
|
'Sous_titre_size': None,
|
||||||
'Sous_titre_locals':None,
|
'Sous_titre_locals': None,
|
||||||
'Sous_titre_rotate':None,
|
'Sous_titre_rotate': None,
|
||||||
'Credit_size': None,
|
'Credit_size': None,
|
||||||
'Credit_locals': None,
|
'Credit_locals': None,
|
||||||
'Credit_rotate':None,
|
'Credit_rotate': None,
|
||||||
'Source_size': None,
|
'Source_size': None,
|
||||||
'Source_locals': None,
|
'Source_locals': None,
|
||||||
'Source_rotate':None,
|
'Source_rotate': None,
|
||||||
'Logo_2_size': None,
|
'Logo_2_size': None,
|
||||||
'Logo_2_locals': None,
|
'Logo_2_locals': None,
|
||||||
'Logo_2_rotate': None,
|
'Logo_2_rotate': None,
|
||||||
@@ -198,23 +158,25 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.hide_source()
|
self.hide_source()
|
||||||
self.hide_atlas()
|
self.hide_atlas()
|
||||||
|
|
||||||
def wheelEvent(self,event):
|
def wheelEvent(self, event):
|
||||||
if (event.angleDelta().y() >= 1):
|
if (event.angleDelta().y() >= 1):
|
||||||
vsb = self.verticalScrollBar.value()+20
|
vsb = self.verticalScrollBar.value() + 20
|
||||||
else:
|
else:
|
||||||
vsb = self.verticalScrollBar.value()-20
|
vsb = self.verticalScrollBar.value() - 20
|
||||||
self.verticalScrollBar.setValue(vsb)
|
self.verticalScrollBar.setValue(vsb)
|
||||||
|
|
||||||
def moveFrame(self):
|
def moveFrame(self):
|
||||||
self.frame.move(self.frame.x(),self.verticalScrollBar.value())
|
self.frame.move(self.frame.x(), self.verticalScrollBar.value())
|
||||||
|
|
||||||
def update_logo_library(self):
|
def update_logo_library(self):
|
||||||
self.mComboBox_4.clear()
|
self.mComboBox_4.clear()
|
||||||
logo_library = []
|
logo_library = []
|
||||||
custome_bibliotech = glob.glob(self.s.value("automap/logoteck", 1, type=str)+'*.*')
|
custome_bibliotech = glob.glob(self.s.value("automap/logoteck", 1, type=str) + '*.*')
|
||||||
for l,logo_x in enumerate(custome_bibliotech):
|
for number, logo_x in enumerate(custome_bibliotech):
|
||||||
logo_library.append(' '+os.path.basename(logo_x))
|
logo_library.append(' ' + os.path.basename(logo_x))
|
||||||
|
|
||||||
bibliotech = glob.glob(resources_path("logo_library","*.png"))
|
bibliotech = glob.glob(resources_path("logo_library", "*.png"))
|
||||||
for l,logo_x in enumerate(bibliotech):
|
for number, logo_x in enumerate(bibliotech):
|
||||||
logo_library.append(os.path.basename(logo_x))
|
logo_library.append(os.path.basename(logo_x))
|
||||||
self.mComboBox_4.addItems(sorted(logo_library))
|
self.mComboBox_4.addItems(sorted(logo_library))
|
||||||
|
|
||||||
@@ -222,7 +184,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
options = QFileDialog.Options()
|
options = QFileDialog.Options()
|
||||||
options |= QFileDialog.ShowDirsOnly
|
options |= QFileDialog.ShowDirsOnly
|
||||||
folder = QFileDialog.getExistingDirectory(self, "Sélection du dossier parent", options=options)
|
folder = QFileDialog.getExistingDirectory(self, "Sélection du dossier parent", options=options)
|
||||||
return folder+'/'
|
return folder + '/'
|
||||||
|
|
||||||
def deflogoteck(self):
|
def deflogoteck(self):
|
||||||
folder = self.select_file()
|
folder = self.select_file()
|
||||||
@@ -237,16 +199,20 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
try:
|
try:
|
||||||
layout_subtitle = project_subtitle.layoutManager().layoutByName(self.comboBox_7.currentText())
|
layout_subtitle = project_subtitle.layoutManager().layoutByName(self.comboBox_7.currentText())
|
||||||
self.lineEdit_3.setText(layout_subtitle.itemById("SubTitle").text())
|
self.lineEdit_3.setText(layout_subtitle.itemById("SubTitle").text())
|
||||||
except:
|
except NameError:
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
def load_ortho(self):
|
def load_ortho(self):
|
||||||
global myGroup,last_group
|
global myGroup, last_group
|
||||||
runing = False
|
runing = False
|
||||||
try: myGroup
|
try:
|
||||||
except NameError: runing = True
|
myGroup
|
||||||
try: last_group
|
except NameError:
|
||||||
except NameError: last_group = ''
|
runing = True
|
||||||
|
try:
|
||||||
|
last_group
|
||||||
|
except NameError:
|
||||||
|
last_group = ''
|
||||||
if runing or (last_group != '' and last_group != 'ortho'):
|
if runing or (last_group != '' and last_group != 'ortho'):
|
||||||
layername = False
|
layername = False
|
||||||
layerAll = QgsProject.instance().layerTreeRoot().children()
|
layerAll = QgsProject.instance().layerTreeRoot().children()
|
||||||
@@ -255,7 +221,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if layeritem.name() == 'SuperFont':
|
if layeritem.name() == 'SuperFont':
|
||||||
myGroup = layerAll[xl]
|
myGroup = layerAll[xl]
|
||||||
layername = True
|
layername = True
|
||||||
xl = xl+1
|
xl = xl + 1
|
||||||
if layername:
|
if layername:
|
||||||
(QgsProject.instance().layerTreeRoot()).removeChildNode(myGroup)
|
(QgsProject.instance().layerTreeRoot()).removeChildNode(myGroup)
|
||||||
runing = True
|
runing = True
|
||||||
@@ -265,32 +231,36 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
myGroup = (QgsProject.instance().layerTreeRoot()).addGroup("SuperFont")
|
myGroup = (QgsProject.instance().layerTreeRoot()).addGroup("SuperFont")
|
||||||
last_group = 'ortho'
|
last_group = 'ortho'
|
||||||
|
|
||||||
#OSM_RASTER = QgsRasterLayer(url_osm, 'OpenStreetMap Backgound', 'wms')
|
# OSM_RASTER = QgsRasterLayer(url_osm, 'OpenStreetMap Backgound', 'wms')
|
||||||
ORTHO_RASTER = QgsRasterLayer(url_ortho, 'Orthophoto AURA', 'wms')
|
ORTHO_RASTER = QgsRasterLayer(url_ortho, 'Orthophoto AURA', 'wms')
|
||||||
MNT_RASTER = QgsRasterLayer(url_mnt, 'MNT RGE Alti (<= 1:100000)', 'wms')
|
MNT_RASTER = QgsRasterLayer(url_mnt, 'MNT RGE Alti (<= 1:100000)', 'wms')
|
||||||
PENTE_RASTER = QgsRasterLayer(url_pente, 'Pente RGE Alti 0 à 90°(<= 1:100000)', 'wms')
|
PENTE_RASTER = QgsRasterLayer(url_pente, 'Pente RGE Alti 0 à 90°(<= 1:100000)', 'wms')
|
||||||
|
|
||||||
#OSM_RASTER.loadNamedStyle(resources_path("font","osm_background.qml"))
|
# OSM_RASTER.loadNamedStyle(resources_path("font", "osm_background.qml"))
|
||||||
ORTHO_RASTER.loadNamedStyle(resources_path("font","ortho_aura.qml"))
|
ORTHO_RASTER.loadNamedStyle(resources_path("font", "ortho_aura.qml"))
|
||||||
MNT_RASTER.loadNamedStyle(resources_path("font","mnt_alti.qml"))
|
MNT_RASTER.loadNamedStyle(resources_path("font", "mnt_alti.qml"))
|
||||||
|
|
||||||
#QgsProject.instance().addMapLayer(OSM_RASTER,False)
|
# QgsProject.instance().addMapLayer(OSM_RASTER,False)
|
||||||
QgsProject.instance().addMapLayer(ORTHO_RASTER,False)
|
QgsProject.instance().addMapLayer(ORTHO_RASTER, False)
|
||||||
QgsProject.instance().addMapLayer(MNT_RASTER,False)
|
QgsProject.instance().addMapLayer(MNT_RASTER, False)
|
||||||
QgsProject.instance().addMapLayer(PENTE_RASTER,False)
|
QgsProject.instance().addMapLayer(PENTE_RASTER, False)
|
||||||
|
|
||||||
#myGroup.addLayer(OSM_RASTER)
|
# myGroup.addLayer(OSM_RASTER)
|
||||||
myGroup.addLayer(ORTHO_RASTER)
|
myGroup.addLayer(ORTHO_RASTER)
|
||||||
myGroup.addLayer(MNT_RASTER)
|
myGroup.addLayer(MNT_RASTER)
|
||||||
myGroup.addLayer(PENTE_RASTER)
|
myGroup.addLayer(PENTE_RASTER)
|
||||||
|
|
||||||
def load_osm(self):
|
def load_osm(self):
|
||||||
global myGroup,last_group
|
global myGroup, last_group
|
||||||
runing = False
|
runing = False
|
||||||
try: myGroup
|
try:
|
||||||
except NameError: runing = True
|
myGroup
|
||||||
try: last_group
|
except NameError:
|
||||||
except NameError: last_group = ''
|
runing = True
|
||||||
|
try:
|
||||||
|
last_group
|
||||||
|
except NameError:
|
||||||
|
last_group = ''
|
||||||
if runing or (last_group != '' and last_group != 'osm'):
|
if runing or (last_group != '' and last_group != 'osm'):
|
||||||
layername = False
|
layername = False
|
||||||
layerAll = QgsProject.instance().layerTreeRoot().children()
|
layerAll = QgsProject.instance().layerTreeRoot().children()
|
||||||
@@ -299,7 +269,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if layeritem.name() == 'SuperFont':
|
if layeritem.name() == 'SuperFont':
|
||||||
myGroup = layerAll[xl]
|
myGroup = layerAll[xl]
|
||||||
layername = True
|
layername = True
|
||||||
xl = xl+1
|
xl = xl + 1
|
||||||
if layername:
|
if layername:
|
||||||
(QgsProject.instance().layerTreeRoot()).removeChildNode(myGroup)
|
(QgsProject.instance().layerTreeRoot()).removeChildNode(myGroup)
|
||||||
runing = True
|
runing = True
|
||||||
@@ -309,21 +279,21 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
last_group = 'osm'
|
last_group = 'osm'
|
||||||
|
|
||||||
OSM_RASTER = QgsRasterLayer(url_osm, 'OpenStreetMap Backgound', 'wms')
|
OSM_RASTER = QgsRasterLayer(url_osm, 'OpenStreetMap Backgound', 'wms')
|
||||||
#ORTHO_RASTER = QgsRasterLayer(url_ortho, 'Orthophoto AURA', 'wms')
|
# ORTHO_RASTER = QgsRasterLayer(url_ortho, 'Orthophoto AURA', 'wms')
|
||||||
MNT_RASTER = QgsRasterLayer(url_mnt, 'MNT RGE Alti (<= 1:100000)', 'wms')
|
MNT_RASTER = QgsRasterLayer(url_mnt, 'MNT RGE Alti (<= 1:100000)', 'wms')
|
||||||
PENTE_RASTER = QgsRasterLayer(url_pente, 'Pente RGE Alti 0 à 90°(<= 1:100000)', 'wms')
|
PENTE_RASTER = QgsRasterLayer(url_pente, 'Pente RGE Alti 0 à 90°(<= 1:100000)', 'wms')
|
||||||
|
|
||||||
OSM_RASTER.loadNamedStyle(resources_path("font","osm_background.qml"))
|
OSM_RASTER.loadNamedStyle(resources_path("font", "osm_background.qml"))
|
||||||
#ORTHO_RASTER.loadNamedStyle(resources_path("font","ortho_aura.qml"))
|
# ORTHO_RASTER.loadNamedStyle(resources_path("font","ortho_aura.qml"))
|
||||||
MNT_RASTER.loadNamedStyle(resources_path("font","mnt_alti.qml"))
|
MNT_RASTER.loadNamedStyle(resources_path("font", "mnt_alti.qml"))
|
||||||
|
|
||||||
QgsProject.instance().addMapLayer(OSM_RASTER,False)
|
QgsProject.instance().addMapLayer(OSM_RASTER, False)
|
||||||
#QgsProject.instance().addMapLayer(ORTHO_RASTER,False)
|
# QgsProject.instance().addMapLayer(ORTHO_RASTER,False)
|
||||||
QgsProject.instance().addMapLayer(MNT_RASTER,False)
|
QgsProject.instance().addMapLayer(MNT_RASTER, False)
|
||||||
QgsProject.instance().addMapLayer(PENTE_RASTER,False)
|
QgsProject.instance().addMapLayer(PENTE_RASTER, False)
|
||||||
|
|
||||||
myGroup.addLayer(OSM_RASTER)
|
myGroup.addLayer(OSM_RASTER)
|
||||||
#myGroup.addLayer(ORTHO_RASTER)
|
# myGroup.addLayer(ORTHO_RASTER)
|
||||||
myGroup.addLayer(MNT_RASTER)
|
myGroup.addLayer(MNT_RASTER)
|
||||||
myGroup.addLayer(PENTE_RASTER)
|
myGroup.addLayer(PENTE_RASTER)
|
||||||
|
|
||||||
@@ -365,6 +335,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.show_map()
|
self.show_map()
|
||||||
else:
|
else:
|
||||||
self.hide_map()
|
self.hide_map()
|
||||||
|
|
||||||
def show_map(self):
|
def show_map(self):
|
||||||
self.groupBox_3.setEnabled(True)
|
self.groupBox_3.setEnabled(True)
|
||||||
self.groupBox_3.show()
|
self.groupBox_3.show()
|
||||||
@@ -378,6 +349,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.show_titre()
|
self.show_titre()
|
||||||
else:
|
else:
|
||||||
self.hide_titre()
|
self.hide_titre()
|
||||||
|
|
||||||
def show_titre(self):
|
def show_titre(self):
|
||||||
self.lineEdit_2.setEnabled(False)
|
self.lineEdit_2.setEnabled(False)
|
||||||
self.lineEdit_2.hide()
|
self.lineEdit_2.hide()
|
||||||
@@ -395,6 +367,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.show_source()
|
self.show_source()
|
||||||
else:
|
else:
|
||||||
self.hide_source()
|
self.hide_source()
|
||||||
|
|
||||||
def show_source(self):
|
def show_source(self):
|
||||||
self.lineEdit_4.setEnabled(False)
|
self.lineEdit_4.setEnabled(False)
|
||||||
self.lineEdit_4.hide()
|
self.lineEdit_4.hide()
|
||||||
@@ -427,7 +400,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.comboBox_4.clear()
|
self.comboBox_4.clear()
|
||||||
if self.comboBox_2.currentText() != '':
|
if self.comboBox_2.currentText() != '':
|
||||||
layer = QgsProject.instance().mapLayersByName(self.comboBox_2.currentText())[0]
|
layer = QgsProject.instance().mapLayersByName(self.comboBox_2.currentText())[0]
|
||||||
#BUG sur layer.fields() pas défini sur ce qui est pas vecteur
|
# BUG sur layer.fields() pas défini sur ce qui est pas vecteur
|
||||||
for vfields in layer.fields():
|
for vfields in layer.fields():
|
||||||
fields.append(vfields.name())
|
fields.append(vfields.name())
|
||||||
self.comboBox_3.addItems(sorted(fields))
|
self.comboBox_3.addItems(sorted(fields))
|
||||||
@@ -441,13 +414,13 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
layout_name = self.comboBox_7.currentText()
|
layout_name = self.comboBox_7.currentText()
|
||||||
else:
|
else:
|
||||||
layout_name = self.lineEdit_2.text()
|
layout_name = self.lineEdit_2.text()
|
||||||
layouts_list = self.manager.printLayouts()
|
# layouts_list = self.manager.printLayouts()
|
||||||
|
|
||||||
for filename in glob.glob(resources_path("mises_en_pages","*.qpt")):
|
for filename in glob.glob(resources_path("mises_en_pages", "*.qpt")):
|
||||||
with open(os.path.join(os.getcwd(), filename), 'r') as f:
|
with open(os.path.join(os.getcwd(), filename), 'r') as f:
|
||||||
self.layout = QgsPrintLayout(project)
|
self.layout = QgsPrintLayout(project)
|
||||||
self.layout.initializeDefaults()
|
self.layout.initializeDefaults()
|
||||||
myAtlas=self.layout.atlas()
|
# myAtlas = self.layout.atlas()
|
||||||
template_content = f.read()
|
template_content = f.read()
|
||||||
doc = QDomDocument()
|
doc = QDomDocument()
|
||||||
doc.setContent(template_content)
|
doc.setContent(template_content)
|
||||||
@@ -455,12 +428,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
cutLayout = layout_name.index("¶")
|
cutLayout = layout_name.index("¶")
|
||||||
except:
|
except ValueError:
|
||||||
cutLayout = 0
|
cutLayout = 0
|
||||||
|
|
||||||
if cutLayout >= 1:
|
if cutLayout >= 1:
|
||||||
self.layout.setName(layout_name)
|
self.layout.setName(layout_name)
|
||||||
titre_layout_name=layout_name[:cutLayout]
|
titre_layout_name = layout_name[:cutLayout]
|
||||||
else:
|
else:
|
||||||
self.layout.setName(layout_name)
|
self.layout.setName(layout_name)
|
||||||
titre_layout_name = layout_name
|
titre_layout_name = layout_name
|
||||||
@@ -473,11 +446,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
logo_div = A3_size['Portrait']['RIGHT']
|
logo_div = A3_size['Portrait']['RIGHT']
|
||||||
if self.radioButton_5.isChecked() and self.radioButton_8.isChecked():
|
if self.radioButton_5.isChecked() and self.radioButton_8.isChecked():
|
||||||
logo_div = A3_size['Portrait']['BOTTOM']
|
logo_div = A3_size['Portrait']['BOTTOM']
|
||||||
if True:#os.path.basename(filename) == "1. Modèle carto standard (consolidé).qpt":
|
# os.path.basename(filename) == "1. Modèle carto standard (consolidé).qpt":
|
||||||
|
if True:
|
||||||
|
|
||||||
self.actualisation_mise_en_page()
|
self.actualisation_mise_en_page()
|
||||||
|
|
||||||
## Add map to layout
|
# Add map to layout
|
||||||
self.map_modele_test = QgsLayoutItemMap(self.layout)
|
self.map_modele_test = QgsLayoutItemMap(self.layout)
|
||||||
# Charger une carte vide
|
# Charger une carte vide
|
||||||
self.map_modele_test.setRect(20, 20, 20, 20)
|
self.map_modele_test.setRect(20, 20, 20, 20)
|
||||||
@@ -499,18 +473,18 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if self.radioButton_12.isChecked() == 1:
|
if self.radioButton_12.isChecked() == 1:
|
||||||
self.position_map = QgsLayoutItemMap(self.layout)
|
self.position_map = QgsLayoutItemMap(self.layout)
|
||||||
self.position_map.setRect(20, 20, 20, 20)
|
self.position_map.setRect(20, 20, 20, 20)
|
||||||
self.position_map.setExtent(QgsRectangle(641552,6647386, 995856,6331104))
|
self.position_map.setExtent(QgsRectangle(641552, 6647386, 995856, 6331104))
|
||||||
self.position_map.setFollowVisibilityPreset(True)
|
self.position_map.setFollowVisibilityPreset(True)
|
||||||
self.position_map.setFollowVisibilityPresetName(self.comboBox_6.currentText())
|
self.position_map.setFollowVisibilityPresetName(self.comboBox_6.currentText())
|
||||||
self.position_map.setItemRotation(self.template_parameters['Carte_2_rotate'])
|
self.position_map.setItemRotation(self.template_parameters['Carte_2_rotate'])
|
||||||
self.position_map.attemptResize(self.template_parameters['Carte_2_size'])
|
self.position_map.attemptResize(self.template_parameters['Carte_2_size'])
|
||||||
self.position_map.attemptMove(self.template_parameters['Carte_2_locals'])
|
self.position_map.attemptMove(self.template_parameters['Carte_2_locals'])
|
||||||
self.position_map.overview().setLinkedMap(self.map_modele_test)
|
self.position_map.overview().setLinkedMap(self.map_modele_test)
|
||||||
#overviewitem = QgsLayoutItemMapOverviewStack(self.position_map)
|
# overviewitem = QgsLayoutItemMapOverviewStack(self.position_map)
|
||||||
#map_overview = self.position_map.overview()
|
# map_overview = self.position_map.overview()
|
||||||
#map_overview.setLinkedMap(self.map_modele_test)
|
# map_overview.setLinkedMap(self.map_modele_test)
|
||||||
#map_overview.setCentered(True)
|
# map_overview.setCentered(True)
|
||||||
#overviewitem.addOverview(map_overview)
|
# overviewitem.addOverview(map_overview)
|
||||||
|
|
||||||
self.position_map.refresh()
|
self.position_map.refresh()
|
||||||
self.map_modele_test.setFrameEnabled(True)
|
self.map_modele_test.setFrameEnabled(True)
|
||||||
@@ -525,7 +499,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.layout.addLayoutItem(self.map_modele_test)
|
self.layout.addLayoutItem(self.map_modele_test)
|
||||||
self.map_modele_test.setId("carte_principale")
|
self.map_modele_test.setId("carte_principale")
|
||||||
|
|
||||||
## Ajout d'un titre à la mise en page
|
# Ajout d'un titre à la mise en page
|
||||||
title = QgsLayoutItemLabel(self.layout)
|
title = QgsLayoutItemLabel(self.layout)
|
||||||
self.layout.addLayoutItem(title)
|
self.layout.addLayoutItem(title)
|
||||||
titre = titre_layout_name
|
titre = titre_layout_name
|
||||||
@@ -542,8 +516,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
title.setHAlign(Qt.AlignmentFlag(0x0004))
|
title.setHAlign(Qt.AlignmentFlag(0x0004))
|
||||||
title.setVAlign(Qt.AlignmentFlag(0x0080))
|
title.setVAlign(Qt.AlignmentFlag(0x0080))
|
||||||
|
|
||||||
|
# Ajout d'un sous titre à la mise en page
|
||||||
## Ajout d'un sous titre à la mise en page
|
|
||||||
subtitle = QgsLayoutItemLabel(self.layout)
|
subtitle = QgsLayoutItemLabel(self.layout)
|
||||||
self.layout.addLayoutItem(subtitle)
|
self.layout.addLayoutItem(subtitle)
|
||||||
titre = self.lineEdit_3.text()
|
titre = self.lineEdit_3.text()
|
||||||
@@ -561,20 +534,18 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
subtitle.setHAlign(Qt.AlignmentFlag(0x0004))
|
subtitle.setHAlign(Qt.AlignmentFlag(0x0004))
|
||||||
subtitle.setVAlign(Qt.AlignmentFlag(0x0080))
|
subtitle.setVAlign(Qt.AlignmentFlag(0x0080))
|
||||||
|
|
||||||
|
# Ajout du logo CEN NA en haut à gauche de la page
|
||||||
## Ajout du logo CEN NA en haut à gauche de la page
|
|
||||||
logo = QgsLayoutItemPicture(self.layout)
|
logo = QgsLayoutItemPicture(self.layout)
|
||||||
logo.setResizeMode(QgsLayoutItemPicture.Zoom)
|
logo.setResizeMode(QgsLayoutItemPicture.Zoom)
|
||||||
logo.setMode(QgsLayoutItemPicture.FormatRaster)
|
logo.setMode(QgsLayoutItemPicture.FormatRaster)
|
||||||
logo.setItemRotation(self.template_parameters['Logo_rotate'])
|
logo.setItemRotation(self.template_parameters['Logo_rotate'])
|
||||||
logo.setFixedSize(self.template_parameters['Logo_size'])
|
logo.setFixedSize(self.template_parameters['Logo_size'])
|
||||||
logo.attemptMove(self.template_parameters['Logo_locals'])
|
logo.attemptMove(self.template_parameters['Logo_locals'])
|
||||||
logo.setPicturePath(resources_path("icons","CEN_RA.png"))
|
logo.setPicturePath(resources_path("icons", "CEN_RA.png"))
|
||||||
logo.setId('logo')
|
logo.setId('logo')
|
||||||
self.layout.addLayoutItem(logo)
|
self.layout.addLayoutItem(logo)
|
||||||
|
|
||||||
|
# Ajout de la legende :
|
||||||
## Ajout de la legende :
|
|
||||||
legend = QgsLayoutItemLegend(self.layout)
|
legend = QgsLayoutItemLegend(self.layout)
|
||||||
|
|
||||||
legend.setId('legende_model1')
|
legend.setId('legende_model1')
|
||||||
@@ -619,7 +590,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
layertreelayer = root.findLayer(layer.id())
|
layertreelayer = root.findLayer(layer.id())
|
||||||
|
|
||||||
# get the parent of the layer tree layer (layer tree root, or group)
|
# get the parent of the layer tree layer (layer tree root, or group)
|
||||||
if layertreelayer != None:
|
if layertreelayer is not None:
|
||||||
parent = layertreelayer.parent()
|
parent = layertreelayer.parent()
|
||||||
|
|
||||||
# if the parent is a group and has a name, find it and remove the layer
|
# if the parent is a group and has a name, find it and remove the layer
|
||||||
@@ -630,7 +601,6 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
else:
|
else:
|
||||||
root_group.removeLayer(layer)
|
root_group.removeLayer(layer)
|
||||||
|
|
||||||
|
|
||||||
legend.setEqualColumnWidth(True)
|
legend.setEqualColumnWidth(True)
|
||||||
legend.setSplitLayer(True)
|
legend.setSplitLayer(True)
|
||||||
legend.setColumnSpace(5)
|
legend.setColumnSpace(5)
|
||||||
@@ -647,7 +617,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
legend.updateLegend()
|
legend.updateLegend()
|
||||||
legend.attemptMove(self.template_parameters['Legande_locals'])
|
legend.attemptMove(self.template_parameters['Legande_locals'])
|
||||||
|
|
||||||
## Ajout de l'échelle numeric à la mise en page
|
# Ajout de l'échelle numeric à la mise en page
|
||||||
self.scalebarnumeric_qpt = QgsLayoutItemScaleBar(self.layout)
|
self.scalebarnumeric_qpt = QgsLayoutItemScaleBar(self.layout)
|
||||||
self.scalebarnumeric_qpt.setStyle('Numeric')
|
self.scalebarnumeric_qpt.setStyle('Numeric')
|
||||||
self.scalebarnumeric_qpt.setLinkedMap(self.map_modele_test)
|
self.scalebarnumeric_qpt.setLinkedMap(self.map_modele_test)
|
||||||
@@ -667,7 +637,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
self.layout.addLayoutItem(self.scalebarnumeric_qpt)
|
self.layout.addLayoutItem(self.scalebarnumeric_qpt)
|
||||||
|
|
||||||
## Ajout de l'échelle à la mise en page
|
# Ajout de l'échelle à la mise en page
|
||||||
self.scalebar_qpt = QgsLayoutItemScaleBar(self.layout)
|
self.scalebar_qpt = QgsLayoutItemScaleBar(self.layout)
|
||||||
self.scalebar_qpt.setStyle('Single Box')
|
self.scalebar_qpt.setStyle('Single Box')
|
||||||
self.scalebar_qpt.setLinkedMap(self.map_modele_test)
|
self.scalebar_qpt.setLinkedMap(self.map_modele_test)
|
||||||
@@ -690,7 +660,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
# ajout de la fleche du Nord
|
# ajout de la fleche du Nord
|
||||||
north = QgsLayoutItemPicture(self.layout)
|
north = QgsLayoutItemPicture(self.layout)
|
||||||
north.setPicturePath(resources_path("mises_en_pages","NorthArrow_02.svg"))
|
north.setPicturePath(resources_path("mises_en_pages", "NorthArrow_02.svg"))
|
||||||
self.layout.addLayoutItem(north)
|
self.layout.addLayoutItem(north)
|
||||||
north.attemptMove(self.template_parameters['Arrow_locals'])
|
north.attemptMove(self.template_parameters['Arrow_locals'])
|
||||||
north.attemptResize(self.template_parameters['Arrow_size'])
|
north.attemptResize(self.template_parameters['Arrow_size'])
|
||||||
@@ -701,16 +671,16 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if self.radioButton_10.isChecked() == 1:
|
if self.radioButton_10.isChecked() == 1:
|
||||||
text_source = ' '
|
text_source = ' '
|
||||||
for Item_mComboBox_3 in self.mComboBox_3.checkedItems():
|
for Item_mComboBox_3 in self.mComboBox_3.checkedItems():
|
||||||
text_source = text_source+Item_mComboBox_3+','
|
text_source = text_source + Item_mComboBox_3 + ','
|
||||||
text_source = text_source[:-1]
|
text_source = text_source[:-1]
|
||||||
info_text = ["Source :" + text_source][0]
|
info_text = ["Source :" + text_source][0]
|
||||||
else:
|
else:
|
||||||
info_text = ["Source : " + self.lineEdit_4.text()][0]
|
info_text = ["Source : " + self.lineEdit_4.text()][0]
|
||||||
# ajout note info:
|
# ajout note info:
|
||||||
if self.radioButton_14.isChecked() == 1:
|
if self.radioButton_14.isChecked() == 1:
|
||||||
self.s.setValue("automap/prenom_nom",self.lineEdit_5.text())
|
self.s.setValue("automap/prenom_nom", self.lineEdit_5.text())
|
||||||
prenom_nom = self.s.value("automap/prenom_nom", 1, type=str)
|
prenom_nom = self.s.value("automap/prenom_nom", 1, type=str)
|
||||||
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime("%d/%m/%Y") + ") par "+prenom_nom]
|
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime("%d/%m/%Y") + ") par " + prenom_nom]
|
||||||
else:
|
else:
|
||||||
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime("%d/%m/%Y") + ")"]
|
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime("%d/%m/%Y") + ")"]
|
||||||
credit_text = QgsLayoutItemLabel(self.layout)
|
credit_text = QgsLayoutItemLabel(self.layout)
|
||||||
@@ -736,7 +706,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.layout.addLayoutItem(credit_text)
|
self.layout.addLayoutItem(credit_text)
|
||||||
self.layout.addLayoutItem(credit_text2)
|
self.layout.addLayoutItem(credit_text2)
|
||||||
|
|
||||||
## Ajout du logo credit en bas à droit de la page
|
# Ajout du logo credit en bas à droit de la page
|
||||||
len_item = (len(self.mComboBox_4.checkedItems()))
|
len_item = (len(self.mComboBox_4.checkedItems()))
|
||||||
for logo_run in self.mComboBox_4.checkedItems():
|
for logo_run in self.mComboBox_4.checkedItems():
|
||||||
logo_credit = QgsLayoutItemPicture(self.layout)
|
logo_credit = QgsLayoutItemPicture(self.layout)
|
||||||
@@ -745,14 +715,14 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
cur_x = self.template_parameters['Logo_2_locals'].x()
|
cur_x = self.template_parameters['Logo_2_locals'].x()
|
||||||
logo_credit.attemptMove(self.template_parameters['Logo_2_locals'])
|
logo_credit.attemptMove(self.template_parameters['Logo_2_locals'])
|
||||||
print(logo_credit.pictureAnchor())
|
print(logo_credit.pictureAnchor())
|
||||||
#logo_credit.setPictureAnchor(4)
|
# logo_credit.setPictureAnchor(4)
|
||||||
self.template_parameters['Logo_2_locals'].setX(cur_x+(logo_div/len_item))
|
self.template_parameters['Logo_2_locals'].setX(cur_x + (logo_div / len_item))
|
||||||
logo_credit.setFixedSize(self.template_parameters['Logo_2_size'])
|
logo_credit.setFixedSize(self.template_parameters['Logo_2_size'])
|
||||||
if logo_run[0] == ' ':
|
if logo_run[0] == ' ':
|
||||||
logo_credit.setPicturePath(self.s.value("automap/logoteck", 1, type=str)+logo_run[1:])
|
logo_credit.setPicturePath(self.s.value("automap/logoteck", 1, type=str) + logo_run[1:])
|
||||||
else:
|
else:
|
||||||
logo_credit.setPicturePath(resources_path("logo_library",logo_run))
|
logo_credit.setPicturePath(resources_path("logo_library", logo_run))
|
||||||
logo_credit.setId('logo_'+logo_run)
|
logo_credit.setId('logo_' + logo_run)
|
||||||
logo_credit.setBackgroundEnabled(True)
|
logo_credit.setBackgroundEnabled(True)
|
||||||
logo_credit.setBackgroundColor(QColor(255, 255, 255, 130))
|
logo_credit.setBackgroundColor(QColor(255, 255, 255, 130))
|
||||||
self.layout.addLayoutItem(logo_credit)
|
self.layout.addLayoutItem(logo_credit)
|
||||||
@@ -767,33 +737,31 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.QMBquestion.setWindowTitle(u"Attention !")
|
self.QMBquestion.setWindowTitle(u"Attention !")
|
||||||
self.QMBquestion.setIcon(QMessageBox.Icon.Warning)
|
self.QMBquestion.setIcon(QMessageBox.Icon.Warning)
|
||||||
self.QMBquestion.setText("Mise en page existante, la mise en page va être écrasée !")
|
self.QMBquestion.setText("Mise en page existante, la mise en page va être écrasée !")
|
||||||
self.QMBquestion.setStandardButtons(QMessageBox.StandardButton(0x00004000)|QMessageBox.StandardButton(0x00010000))
|
self.QMBquestion.setStandardButtons(QMessageBox.StandardButton(0x00004000) | QMessageBox.StandardButton(0x00010000))
|
||||||
self.QMBquestion.addButton(QPushButton('Autre mise en page'),QMessageBox.ButtonRole(0))
|
self.QMBquestion.addButton(QPushButton('Autre mise en page'), QMessageBox.ButtonRole(0))
|
||||||
self.QMBquestion = self.QMBquestion.exec()
|
self.QMBquestion = self.QMBquestion.exec()
|
||||||
|
|
||||||
#if self.radioButton_12.isChecked() != 1:
|
# if self.radioButton_12.isChecked() != 1:
|
||||||
if self.QMBquestion == QMessageBox.StandardButton(0x00004000):
|
if self.QMBquestion == QMessageBox.StandardButton(0x00004000):
|
||||||
project.layoutManager().removeLayout(existing_layout)
|
project.layoutManager().removeLayout(existing_layout)
|
||||||
result = project.layoutManager().addLayout(self.layout)
|
# result = project.layoutManager().addLayout(self.layout)
|
||||||
elif self.QMBquestion != QMessageBox.StandardButton(0x00010000):
|
elif self.QMBquestion != QMessageBox.StandardButton(0x00010000):
|
||||||
LayoutCOUNT=0
|
LayoutCOUNT = 0
|
||||||
arrayManager = []
|
arrayManager = []
|
||||||
for AddArrayManager in project.layoutManager().layouts():
|
for AddArrayManager in project.layoutManager().layouts():
|
||||||
arrayManager.append(AddArrayManager.name())
|
arrayManager.append(AddArrayManager.name())
|
||||||
arrayManager.sort()
|
arrayManager.sort()
|
||||||
for LayoutNAME in arrayManager:
|
for LayoutNAME in arrayManager:
|
||||||
if LayoutNAME == layout_name:
|
if LayoutNAME == layout_name:
|
||||||
LayoutCOUNT = LayoutCOUNT+1
|
LayoutCOUNT = LayoutCOUNT + 1
|
||||||
if LayoutNAME == layout_name+"¶"+str(LayoutCOUNT):
|
if LayoutNAME == layout_name + "¶" + str(LayoutCOUNT):
|
||||||
LayoutCOUNT=LayoutCOUNT+1
|
LayoutCOUNT = LayoutCOUNT + 1
|
||||||
layout_name = (layout_name+"¶"+str(LayoutCOUNT))
|
layout_name = (layout_name + "¶" + str(LayoutCOUNT))
|
||||||
self.layout.setName(layout_name)
|
self.layout.setName(layout_name)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
existing_layout = True
|
existing_layout = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.manager.addLayout(self.layout)
|
self.manager.addLayout(self.layout)
|
||||||
if self.radioButton_9.isChecked() == 1:
|
if self.radioButton_9.isChecked() == 1:
|
||||||
self.layout.atlas().setEnabled(True)
|
self.layout.atlas().setEnabled(True)
|
||||||
@@ -811,10 +779,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
else:
|
else:
|
||||||
TryMessage = False
|
TryMessage = False
|
||||||
del self.QMBquestion
|
del self.QMBquestion
|
||||||
except:
|
except ValueError:
|
||||||
|
TryMessage = True
|
||||||
|
except AttributeError:
|
||||||
TryMessage = True
|
TryMessage = True
|
||||||
|
|
||||||
if TryMessage == True:
|
if TryMessage is True:
|
||||||
iface.openLayoutDesigner(layout_modifie)
|
iface.openLayoutDesigner(layout_modifie)
|
||||||
self.close()
|
self.close()
|
||||||
else:
|
else:
|
||||||
@@ -840,19 +810,18 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Landscape)
|
pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Landscape)
|
||||||
|
|
||||||
values_page_import = values_page[:-3]
|
values_page_import = values_page[:-3]
|
||||||
eval("exec('from .tools.mises_en_pages import '+values_page_import)")
|
eval("exec('from .tools.mises_en_pages import ' + values_page_import)")
|
||||||
eval("exec('self.template_parameters = '+ values_page_import + '.fletch_canvas(self)')")
|
eval("exec('self.template_parameters = '+ values_page_import + '.fletch_canvas(self)')")
|
||||||
|
|
||||||
def bar_echelle_auto(self, echelle, bar_echelle):
|
def bar_echelle_auto(self, echelle, bar_echelle):
|
||||||
|
|
||||||
if True:
|
if True:
|
||||||
if echelle.scale() >= 40000:
|
if echelle.scale() >= 40000:
|
||||||
bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers)
|
bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers)
|
||||||
bar_echelle.setUnitLabel("km")
|
bar_echelle.setUnitLabel("km")
|
||||||
bar_echelle.setUnitsPerSegment(round((echelle.scale()*0.04)/1000))
|
bar_echelle.setUnitsPerSegment(round((echelle.scale() * 0.04) / 1000))
|
||||||
else:
|
else:
|
||||||
bar_echelle.setUnits(QgsUnitTypes.DistanceMeters)
|
bar_echelle.setUnits(QgsUnitTypes.DistanceMeters)
|
||||||
bar_echelle.setUnitLabel("m")
|
bar_echelle.setUnitLabel("m")
|
||||||
bar_echelle.setUnitsPerSegment(round(echelle.scale()*0.04))
|
bar_echelle.setUnitsPerSegment(round(echelle.scale() * 0.04))
|
||||||
|
|
||||||
bar_echelle.update()
|
bar_echelle.update()
|
||||||
|
|||||||
+21
-16
@@ -1,10 +1,4 @@
|
|||||||
import os
|
import os
|
||||||
plugin_dir = os.path.dirname(__file__)
|
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
|
||||||
|
|
||||||
NAME = plugin_dir[end_find:]
|
|
||||||
#print(NAME)
|
|
||||||
|
|
||||||
from qgis.gui import *
|
from qgis.gui import *
|
||||||
|
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
@@ -35,21 +29,27 @@ from qgis.utils import iface
|
|||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
# resources_path,
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
plugin_dir = os.path.dirname(__file__)
|
||||||
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
|
|
||||||
|
NAME = plugin_dir[end_find:]
|
||||||
|
# print(NAME)
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
||||||
|
|
||||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
|
|
||||||
#place connect here
|
# place connect here
|
||||||
self.annuler_button.clicked.connect(self.close)
|
self.annuler_button.clicked.connect(self.close)
|
||||||
self.ok_button.clicked.connect(self.run_sendissues)
|
self.ok_button.clicked.connect(self.run_sendissues)
|
||||||
|
|
||||||
@@ -63,17 +63,22 @@ class CenRa_Issues(QDialog, EDITOR_CLASS):
|
|||||||
statu_autre = self.check_autre.isChecked()
|
statu_autre = self.check_autre.isChecked()
|
||||||
|
|
||||||
statu = []
|
statu = []
|
||||||
if statu_bug == True : statu = statu + [1]
|
if statu_bug is True:
|
||||||
if statu_aide == True : statu = statu + [3]
|
statu = statu + [1]
|
||||||
if statu_question == True : statu = statu + [5]
|
if statu_aide is True:
|
||||||
if statu_amelioration == True : statu = statu + [2]
|
statu = statu + [3]
|
||||||
if statu_autre == True : statu = statu + [6]
|
if statu_question is True:
|
||||||
|
statu = statu + [5]
|
||||||
|
if statu_amelioration is True:
|
||||||
|
statu = statu + [2]
|
||||||
|
if statu_autre is True:
|
||||||
|
statu = statu + [6]
|
||||||
|
|
||||||
if len(statu) >= 1:
|
if len(statu) >= 1:
|
||||||
import qgis
|
import qgis
|
||||||
url = qgis.utils.pluginMetadata(NAME,'tracker')
|
url = qgis.utils.pluginMetadata(NAME, 'tracker')
|
||||||
print(text_message)
|
print(text_message)
|
||||||
send_info = send_issues(url,text_titre,text_message,statu)
|
send_info = send_issues(url, text_titre, text_message, statu)
|
||||||
code = send_info.status_code
|
code = send_info.status_code
|
||||||
print(code)
|
print(code)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ name=CenRa_AutoMap
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=CenRa_AutoMap
|
description=CenRa_AutoMap
|
||||||
version=2.0
|
version=2.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_AUTOMAP:</h2></br><p><h3>19/05/2025 - Version 2.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>11/04/2025 - Version 1.7: </h3> - Correctif d'orthographe.</p></br><p><h3>09/04/2025 - Version 1.6: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 1.5: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 1.4: </h3> - Mise a jour de securite.</p></br><p><h3>20/03/2025 - Version 1.3: </h3> - Fenêtre redimensionnable avec déplaçable avec la mollette sourit.</p></br><p><h3>25/02/2025 - Version 1.2: </h3> - DockWidget pour ouverture de couche avec theme.</p></br><p><h3>28/01/2025 - Version 1.1: </h3> - Multi-Composeur pris en charge.</p></br><p><h3>27/01/2025 - Version 1.0: </h3> - Version releases.</br> - Ajoute un message d'avertissement au moment d'écraser la mise en page.</br> - Ajoute prénom et nom dans la réalisation.</br> - Utilisation de Calibri.</p></br><p><h3>13/01/2025 - Version 0.1.10: </h3> - Correctif.</p></br><p><h3>07/01/2025 - Version 0.1.9: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>19/12/2024 - Version 0.1.8: </h3> - Nouvelle mise en page.</br> - Incrémentation automatique de nouveau modele de mise en page. </br> - Correctif de bug.</p></br><p><h3>21/10/2024 - Version 0.1.7: </h3> - Epurations du code.</p></br><p><h3>07/10/2024 - Version 0.1.6: </h3> - Option de bibliotheque de logo custome.</p></br><p><h3>03/10/2024 - Version 0.1.5: </h3> - Remonte la fênetre dans la pille.</br> - Gestion du nombre de colonne dans la légend.</br></p></br><p><h3>02/10/2024 - Version 0.1.4: </h3> - Mise en page plein écrant.</br></p></br><p><h3>01/10/2024 - Version 0.1.3: </h3> - Récupération du titre et sous-titre pour mise en page existente.</br> - Integration de bibliotheque de logo.</br> - Integration de gestionaire pour les source de donnée.</br> - Mise en place d'une bar d'echelle adaptative. </br></p></br><p><h3>30/09/2024 - Version 0.1.2: </h3> - Activation du thème. </br> - Ajouter une carte de suivie. </br><p></br><h3>27/09/2024 - Version 0.1.1: </h3> - Ajout d'une liste déroulante pour les sources de données. </br>- Bouton pour ajouter des fonts de carte customisés. </br>- Fonctionnalité de génération d'atlas. </p></br><p><h3>26/09/2024 - Version 0.1.0: </h3> - Lancement du plugin CenRa_AutoMap avec une seul mise en page. </p></br>
|
changelog=<h2>CenRa_AUTOMAP:</h2></br><p><h3>30/07/2025 - Version 2.1: </h3> - Correctife de bug.</p></br><p><h3>19/05/2025 - Version 2.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>11/04/2025 - Version 1.7: </h3> - Correctif d'orthographe.</p></br><p><h3>09/04/2025 - Version 1.6: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 1.5: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 1.4: </h3> - Mise a jour de securite.</p></br><p><h3>20/03/2025 - Version 1.3: </h3> - Fenêtre redimensionnable avec déplaçable avec la mollette sourit.</p></br><p><h3>25/02/2025 - Version 1.2: </h3> - DockWidget pour ouverture de couche avec theme.</p></br><p><h3>28/01/2025 - Version 1.1: </h3> - Multi-Composeur pris en charge.</p></br><p><h3>27/01/2025 - Version 1.0: </h3> - Version releases.</br> - Ajoute un message d'avertissement au moment d'écraser la mise en page.</br> - Ajoute prénom et nom dans la réalisation.</br> - Utilisation de Calibri.</p></br><p><h3>13/01/2025 - Version 0.1.10: </h3> - Correctif.</p></br><p><h3>07/01/2025 - Version 0.1.9: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>19/12/2024 - Version 0.1.8: </h3> - Nouvelle mise en page.</br> - Incrémentation automatique de nouveau modele de mise en page. </br> - Correctif de bug.</p></br><p><h3>21/10/2024 - Version 0.1.7: </h3> - Epurations du code.</p></br><p><h3>07/10/2024 - Version 0.1.6: </h3> - Option de bibliotheque de logo custome.</p></br><p><h3>03/10/2024 - Version 0.1.5: </h3> - Remonte la fênetre dans la pille.</br> - Gestion du nombre de colonne dans la légend.</br></p></br><p><h3>02/10/2024 - Version 0.1.4: </h3> - Mise en page plein écrant.</br></p></br><p><h3>01/10/2024 - Version 0.1.3: </h3> - Récupération du titre et sous-titre pour mise en page existente.</br> - Integration de bibliotheque de logo.</br> - Integration de gestionaire pour les source de donnée.</br> - Mise en place d'une bar d'echelle adaptative. </br></p></br><p><h3>30/09/2024 - Version 0.1.2: </h3> - Activation du thème. </br> - Ajouter une carte de suivie. </br><p></br><h3>27/09/2024 - Version 0.1.1: </h3> - Ajout d'une liste déroulante pour les sources de données. </br>- Bouton pour ajouter des fonts de carte customisés. </br>- Fonctionnalité de génération d'atlas. </p></br><p><h3>26/09/2024 - Version 0.1.0: </h3> - Lancement du plugin CenRa_AutoMap avec une seul mise en page. </p></br>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=python
|
tags=python
|
||||||
|
|||||||
@@ -1,95 +1,41 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
# from qgis.gui import *
|
||||||
from collections import namedtuple
|
|
||||||
from enum import Enum
|
|
||||||
from functools import partial
|
|
||||||
from pathlib import Path
|
|
||||||
from xml.dom.minidom import parseString
|
|
||||||
from qgis.gui import *
|
|
||||||
import qgis
|
|
||||||
from importlib import import_module
|
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
NULL,
|
|
||||||
QgsApplication,
|
|
||||||
QgsScaleBarSettings,
|
|
||||||
QgsDataSourceUri,
|
QgsDataSourceUri,
|
||||||
QgsProject,
|
QgsProject,
|
||||||
QgsProviderConnectionException,
|
|
||||||
QgsProviderRegistry,
|
|
||||||
QgsRasterLayer,
|
|
||||||
QgsSettings,
|
QgsSettings,
|
||||||
QgsVectorLayer,
|
QgsVectorLayer,
|
||||||
QgsGeometry,
|
|
||||||
QgsPrintLayout,
|
|
||||||
QgsReadWriteContext,
|
|
||||||
QgsLayoutItemMap,
|
|
||||||
QgsLayoutItemPage,
|
|
||||||
QgsLayoutSize,
|
|
||||||
QgsUnitTypes,
|
|
||||||
QgsLayoutPoint,
|
|
||||||
QgsLayoutItemLabel,
|
|
||||||
QgsLayoutItemPicture,
|
|
||||||
QgsLayoutItemLegend,
|
|
||||||
QgsLegendStyle,
|
|
||||||
QgsLayoutItemScaleBar,
|
|
||||||
QgsLayerTreeGroup,
|
|
||||||
QgsCoordinateReferenceSystem,
|
|
||||||
QgsCoordinateTransform,
|
|
||||||
QgsLayerTree,
|
|
||||||
QgsLayoutTableColumn,
|
|
||||||
QgsRectangle,
|
|
||||||
QgsLayoutItemMapOverviewStack,
|
|
||||||
QgsMapThemeCollection,
|
QgsMapThemeCollection,
|
||||||
)
|
)
|
||||||
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie
|
from qgis.PyQt.QtGui import QIcon
|
||||||
from qgis.PyQt.QtPrintSupport import QPrinter
|
|
||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDockWidget,
|
QDockWidget,
|
||||||
QAction,
|
|
||||||
QMessageBox,
|
|
||||||
QPushButton,
|
|
||||||
QDockWidget,
|
|
||||||
QFileDialog,
|
|
||||||
QInputDialog,
|
QInputDialog,
|
||||||
QMenu,
|
|
||||||
QToolButton,
|
|
||||||
QTableWidget,
|
|
||||||
QTableWidgetItem,
|
|
||||||
QVBoxLayout,
|
|
||||||
)
|
)
|
||||||
import psycopg2
|
|
||||||
try:
|
|
||||||
from PyQt5.QtCore import QSettings
|
|
||||||
from PyQt5 import QtGui
|
|
||||||
from PyQt5 import QtWidgets
|
|
||||||
except:
|
|
||||||
from PyQt6.QtCore import QSettings
|
|
||||||
from PyQt6 import QtGui
|
|
||||||
from PyQt6 import QtWidgets
|
|
||||||
from qgis.PyQt.QtXml import QDomDocument
|
|
||||||
from qgis.utils import iface
|
|
||||||
import glob
|
|
||||||
try:
|
|
||||||
|
|
||||||
|
from qgis.PyQt.QtXml import QDomDocument
|
||||||
|
|
||||||
|
try:
|
||||||
Enabled = True
|
Enabled = True
|
||||||
from .tools.StyleLayer import *
|
from .tools.StyleLayer import host, port, dbname, os_user
|
||||||
except:
|
except ValueError:
|
||||||
Enabled = False
|
Enabled = False
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
from datetime import date
|
# from datetime import date
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_AutoMapStyle_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_AutoMapStyle_base.ui')
|
||||||
LOGGER = logging.getLogger('CenRa_AutoMapStyle')
|
LOGGER = logging.getLogger('CenRa_AutoMapStyle')
|
||||||
|
|
||||||
class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -97,7 +43,7 @@ class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
|||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
|
|
||||||
self.toolButton.setIcon(QtGui.QIcon(resources_path('icons','loader.png')))
|
self.toolButton.setIcon(QIcon(resources_path('icons', 'loader.png')))
|
||||||
|
|
||||||
self.loadComboBox()
|
self.loadComboBox()
|
||||||
self.toolButton.clicked.connect(self.loadStyle)
|
self.toolButton.clicked.connect(self.loadStyle)
|
||||||
@@ -118,7 +64,7 @@ class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
|||||||
|
|
||||||
def loginfo(self):
|
def loginfo(self):
|
||||||
InputDialog = QInputDialog()
|
InputDialog = QInputDialog()
|
||||||
mdp = InputDialog.getText(None,'Foncier','Mot de pass base foncier:')
|
mdp = InputDialog.getText(None, 'Foncier', 'Mot de pass base foncier:')
|
||||||
return mdp
|
return mdp
|
||||||
|
|
||||||
def loadAdministratif(self):
|
def loadAdministratif(self):
|
||||||
@@ -129,24 +75,24 @@ class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
|||||||
mdp = self.loginfo()[0]
|
mdp = self.loginfo()[0]
|
||||||
if mdp != '':
|
if mdp != '':
|
||||||
# couche = [['_form_power_rename','_form_power_rename_contour_2025'],['_42_bois_du_roy','_42_bois_du_roy_habitat_2021']]
|
# couche = [['_form_power_rename','_form_power_rename_contour_2025'],['_42_bois_du_roy','_42_bois_du_roy_habitat_2021']]
|
||||||
couche = [['administratif','departements2024','gid'],['administratif','v_communes','id']]
|
couche = [['administratif', 'departements2024', 'gid'], ['administratif', 'v_communes', 'id']]
|
||||||
for schema_table in couche:
|
for schema_table in couche:
|
||||||
schema = schema_table[0]
|
schema = schema_table[0]
|
||||||
table = schema_table[1]
|
table = schema_table[1]
|
||||||
key = schema_table[2]
|
key = schema_table[2]
|
||||||
uri = QgsDataSourceUri()
|
uri = QgsDataSourceUri()
|
||||||
uri.setConnection(host ,port ,dbname ,os_user ,mdp)
|
uri.setConnection(host, port, dbname, os_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 schéma
|
||||||
uri.setDataSource(schema, table, "geom")
|
uri.setDataSource(schema, table, "geom")
|
||||||
uri.setKeyColumn(key)
|
uri.setKeyColumn(key)
|
||||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
if layer.isValid() == True:
|
if layer.isValid() is True:
|
||||||
layerName = layer.name()
|
layerName = layer.name()
|
||||||
listStyle = layer.listStylesInDatabase()
|
listStyle = layer.listStylesInDatabase()
|
||||||
try:
|
try:
|
||||||
StyleExist = True
|
StyleExist = True
|
||||||
indexStyle = (listStyle[2].index(layerName))
|
indexStyle = (listStyle[2].index(layerName))
|
||||||
except:
|
except ValueError:
|
||||||
StyleExist = False
|
StyleExist = False
|
||||||
if StyleExist:
|
if StyleExist:
|
||||||
StyleId = (listStyle[1][indexStyle])
|
StyleId = (listStyle[1][indexStyle])
|
||||||
@@ -171,23 +117,23 @@ class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
|||||||
mdp = self.loginfo()[0]
|
mdp = self.loginfo()[0]
|
||||||
if mdp != '':
|
if mdp != '':
|
||||||
# couche = [['_form_power_rename','_form_power_rename_contour_2025'],['_42_bois_du_roy','_42_bois_du_roy_habitat_2021']]
|
# couche = [['_form_power_rename','_form_power_rename_contour_2025'],['_42_bois_du_roy','_42_bois_du_roy_habitat_2021']]
|
||||||
couche = [['sites','v_sites_parcelles'],['sites','v_sites'],['inventaires','suivi_zh'],['inventaires','suivi_ps']]
|
couche = [['sites', 'v_sites_parcelles'], ['sites', 'v_sites'], ['inventaires', 'suivi_zh'], ['inventaires', 'suivi_ps']]
|
||||||
for schema_table in couche:
|
for schema_table in couche:
|
||||||
schema = schema_table[0]
|
schema = schema_table[0]
|
||||||
table = schema_table[1]
|
table = schema_table[1]
|
||||||
uri = QgsDataSourceUri()
|
uri = QgsDataSourceUri()
|
||||||
uri.setConnection(host ,port ,dbname ,os_user ,mdp)
|
uri.setConnection(host, port, dbname, os_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 schéma
|
||||||
uri.setDataSource(schema, table, "geom")
|
uri.setDataSource(schema, table, "geom")
|
||||||
uri.setKeyColumn('gid')
|
uri.setKeyColumn('gid')
|
||||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
if layer.isValid() == True:
|
if layer.isValid() is True:
|
||||||
layerName = layer.name()
|
layerName = layer.name()
|
||||||
listStyle = layer.listStylesInDatabase()
|
listStyle = layer.listStylesInDatabase()
|
||||||
try:
|
try:
|
||||||
StyleExist = True
|
StyleExist = True
|
||||||
indexStyle = (listStyle[2].index(layerName))
|
indexStyle = (listStyle[2].index(layerName))
|
||||||
except:
|
except ValueError:
|
||||||
StyleExist = False
|
StyleExist = False
|
||||||
if StyleExist:
|
if StyleExist:
|
||||||
StyleId = (listStyle[1][indexStyle])
|
StyleId = (listStyle[1][indexStyle])
|
||||||
|
|||||||
+14
-16
@@ -4,27 +4,25 @@ __email__ = "info@3liz.org"
|
|||||||
|
|
||||||
|
|
||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
from qgis.PyQt.QtCore import QSettings, QUrl
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
from qgis.PyQt.QtWidgets import QAction
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
# include <QSettings>
|
||||||
import socket
|
|
||||||
import os
|
import os
|
||||||
|
from .about_form import AboutDialog
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
# plugin_path,
|
||||||
pyperclip,
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
pyperclip()
|
pyperclip()
|
||||||
from .copie_editor import Copie_Editor
|
from .copie_editor import Copie_Editor
|
||||||
from .about_form import AboutDialog
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
|
||||||
|
|
||||||
class PgCopie:
|
class PgCopie:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -36,18 +34,18 @@ class PgCopie:
|
|||||||
self.dock_action = None
|
self.dock_action = None
|
||||||
self.help_action = None
|
self.help_action = None
|
||||||
plugin_dir = os.path.dirname(__file__)
|
plugin_dir = os.path.dirname(__file__)
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
global NAME
|
global NAME
|
||||||
NAME = plugin_dir[end_find:]
|
NAME = plugin_dir[end_find:]
|
||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_COPIE','version')
|
version = qgis.utils.pluginMetadata('CenRa_COPIE', 'version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("copie/version", 1, type=str)
|
versionUse = s.value("copie/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version):
|
||||||
s.setValue("copie/version", str(version))
|
s.setValue("copie/version", str(version))
|
||||||
print(versionUse,version)
|
print(versionUse, version)
|
||||||
self.open_about_dialog()
|
self.open_about_dialog()
|
||||||
|
|
||||||
def initGui(self):
|
def initGui(self):
|
||||||
@@ -65,12 +63,12 @@ class PgCopie:
|
|||||||
if not self.action_editor:
|
if not self.action_editor:
|
||||||
self.action_editor = Copie_Editor()
|
self.action_editor = Copie_Editor()
|
||||||
|
|
||||||
self.copie_editor = QAction(icon, 'Copie',None)
|
self.copie_editor = QAction(icon, 'Copie', None)
|
||||||
self.toolBar.addAction(self.copie_editor)
|
self.toolBar.addAction(self.copie_editor)
|
||||||
self.copie_editor.triggered.connect(self.open_editor)
|
self.copie_editor.triggered.connect(self.open_editor)
|
||||||
self.copie_editor.setEnabled(False)
|
self.copie_editor.setEnabled(False)
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
# IPAddr = socket.gethostbyname(socket.gethostname())
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
self.copie_editor.setEnabled(True)
|
self.copie_editor.setEnabled(True)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
@@ -79,6 +77,7 @@ class PgCopie:
|
|||||||
"""
|
"""
|
||||||
dialog = AboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||||
@@ -90,8 +89,7 @@ class PgCopie:
|
|||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.action_editor:
|
if self.action_editor:
|
||||||
iface.removePluginMenu('CenRa_Copie',self.copie_editor)
|
iface.removePluginMenu('CenRa_Copie', self.copie_editor)
|
||||||
|
|
||||||
|
|
||||||
if self.provider:
|
if self.provider:
|
||||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os.path
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
from qgis.PyQt.QtGui import QPixmap
|
# from qgis.PyQt.QtGui import QPixmap
|
||||||
from qgis.PyQt.QtWidgets import QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
|
|
||||||
from .tools.resources import devlog
|
from .tools.resources import devlog
|
||||||
|
|||||||
+51
-60
@@ -4,77 +4,69 @@ from __future__ import absolute_import
|
|||||||
# Import the PyQt and QGIS libraries
|
# Import the PyQt and QGIS libraries
|
||||||
from builtins import next
|
from builtins import next
|
||||||
from builtins import str
|
from builtins import str
|
||||||
from builtins import object
|
# from builtins import object
|
||||||
import qgis
|
# import qgis
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
from qgis.PyQt.QtWidgets import QDialog, QMessageBox
|
||||||
from qgis.PyQt.QtGui import QIcon
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
|
||||||
from qgis.PyQt.QtGui import *
|
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui
|
||||||
|
from qgis.core import QgsDataSourceUri, QgsSettings, QgsWkbTypes, Qgis
|
||||||
from qgis.core import *
|
|
||||||
from qgis.core import QgsDataSourceUri
|
|
||||||
import os
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .tools.PythonSQL import login_base
|
from .tools.PythonSQL import login_base
|
||||||
except:
|
except ValueError:
|
||||||
print('Pas de fichier PythonSQL')
|
print('Pas de fichier PythonSQL')
|
||||||
from .tools.SQLRequet import *
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import os.path
|
# import os
|
||||||
import webbrowser, os
|
# import os.path
|
||||||
import psycopg2
|
# import webbrowser
|
||||||
import psycopg2.extras
|
# import psycopg2
|
||||||
import base64
|
# import psycopg2.extras
|
||||||
|
# import base64
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_Copie_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_Copie_base.ui')
|
||||||
|
|
||||||
class Copie_Editor(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
class Copie_Editor(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
self.iface = iface
|
self.iface = iface
|
||||||
|
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
"""Run method that performs all the real work"""
|
"""Run method that performs all the real work"""
|
||||||
layer = self.iface.activeLayer()
|
layer = self.iface.activeLayer()
|
||||||
|
|
||||||
if layer == None :
|
if layer is None:
|
||||||
#self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5)
|
# self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5)
|
||||||
self.iface.messageBar().pushMessage("Ooops", u"Vous devez sélectionner une table !", level=Qgis.Warning, duration=5)
|
self.iface.messageBar().pushMessage("Ooops", u"Vous devez sélectionner une table !", level=Qgis.Warning, duration=5)
|
||||||
|
|
||||||
else :
|
else:
|
||||||
# Récupération des sources de la couche active
|
# Récupération des sources de la couche active
|
||||||
list_sources = layer.source().split(" ")
|
list_sources = layer.source().split(" ")
|
||||||
# dbname
|
# dbname
|
||||||
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1]
|
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1]
|
||||||
# schema
|
# schema
|
||||||
source_schema = [s for s in list_sources if "table" in s][0].split('"')[1]
|
source_schema = [s for s in list_sources if "table" in s][0].split('"')[1]
|
||||||
# tablename
|
# tablename
|
||||||
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
||||||
|
|
||||||
|
|
||||||
account = login_base("account")
|
account = login_base("account")
|
||||||
sigdb = account[5]
|
sigdb = account[5]
|
||||||
|
|
||||||
|
|
||||||
if source_db != sigdb:
|
if source_db != sigdb:
|
||||||
#self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10)
|
# self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10)
|
||||||
self.iface.messageBar().pushMessage("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=Qgis.Critical, duration=5)
|
self.iface.messageBar().pushMessage("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=Qgis.Critical, duration=5)
|
||||||
else:
|
else:
|
||||||
user = account[0]
|
user = account[0]
|
||||||
@@ -85,7 +77,7 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
|
|||||||
cur = account[7]
|
cur = account[7]
|
||||||
con = account[8]
|
con = account[8]
|
||||||
|
|
||||||
# Creation de la liste des schemas de la base de donnees
|
# Creation de la liste des schemas de la base de donnees
|
||||||
SQL = """WITH list_schema AS (
|
SQL = """WITH list_schema AS (
|
||||||
SELECT catalog_name, schema_name
|
SELECT catalog_name, schema_name
|
||||||
FROM information_schema.schemata
|
FROM information_schema.schemata
|
||||||
@@ -102,26 +94,25 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
list_brut = str(next(cur))
|
list_brut = str(next(cur))
|
||||||
|
|
||||||
list = list_brut [2:-3]
|
list = list_brut[2:-3]
|
||||||
listItems = list.split(",")
|
listItems = list.split(",")
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
self.schema.clear()
|
self.schema.clear()
|
||||||
self.schema.addItems(listItems)
|
self.schema.addItems(listItems)
|
||||||
self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
|
# Pour ne pas commencer la liste au premier schema
|
||||||
|
self.schema.setCurrentIndex(-1)
|
||||||
|
|
||||||
|
# Affiche le nom de la table source
|
||||||
self.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source
|
self.table_source.setText(source_schema + "." + source_tablename)
|
||||||
# show the dialog
|
# show the dialog
|
||||||
self.show()
|
self.show()
|
||||||
# Run the dialog event loop
|
# Run the dialog event loop
|
||||||
result = self.exec()
|
result = self.exec()
|
||||||
# See if OK was pressed
|
# See if OK was pressed
|
||||||
if result:
|
if result:
|
||||||
#******************************debut script*********************************
|
# ******************************debut script*********************************
|
||||||
|
|
||||||
|
|
||||||
account = login_base("account")
|
account = login_base("account")
|
||||||
user = account[0]
|
user = account[0]
|
||||||
mdp = account[1]
|
mdp = account[1]
|
||||||
@@ -136,33 +127,33 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
# Récupération des sources de la couche active
|
# Récupération des sources de la couche active
|
||||||
list_sources = layer.source().split(" ")
|
list_sources = layer.source().split(" ")
|
||||||
# dbname
|
# dbname
|
||||||
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1]
|
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1]
|
||||||
# schema
|
# schema
|
||||||
source_schema = [s for s in list_sources if "table" in s][0].split('"')[1]
|
source_schema = [s for s in list_sources if "table" in s][0].split('"')[1]
|
||||||
# tablename
|
# tablename
|
||||||
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
||||||
|
|
||||||
if self.schema.currentIndex() == -1 :
|
if self.schema.currentIndex() == - 1:
|
||||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.")
|
QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.")
|
||||||
return
|
return
|
||||||
|
|
||||||
schema = self.schema.currentText()
|
schema = self.schema.currentText()
|
||||||
|
|
||||||
if self.table_destination.text() == '' :
|
if self.table_destination.text() == '':
|
||||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.")
|
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.annee.text() == 'aaaa' or self.annee.text() == '':
|
if self.annee.text() == 'aaaa' or self.annee.text() == '':
|
||||||
tablename = schema + "_" + self.table_destination.text().lower()
|
tablename = schema + "_" + self.table_destination.text().lower()
|
||||||
else :
|
else:
|
||||||
tablename = schema + "_" + self.table_destination.text().lower() + "_" + self.annee.text()
|
tablename = schema + "_" + self.table_destination.text().lower() + "_" + self.annee.text()
|
||||||
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
|
||||||
if self.table_vide.isChecked() == 1 :
|
if self.table_vide.isChecked() == 1:
|
||||||
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;"
|
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;"
|
||||||
else :
|
else:
|
||||||
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename
|
SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename
|
||||||
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
@@ -184,38 +175,38 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
|
|||||||
cur.execute(SQL_sequence_03)
|
cur.execute(SQL_sequence_03)
|
||||||
cur.execute(SQL_sequence_04)
|
cur.execute(SQL_sequence_04)
|
||||||
|
|
||||||
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')"
|
RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')"
|
||||||
cur.execute(RETURNE)
|
cur.execute(RETURNE)
|
||||||
sequence_name = cur.fetchone()[0]
|
sequence_name = cur.fetchone()[0]
|
||||||
print(sequence_name)
|
print(sequence_name)
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;"
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
if layer.wkbType() == QgsWkbTypes.PointGeometry :
|
if layer.wkbType() == QgsWkbTypes.PointGeometry:
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
cur.execute(SQL_trigger_coordonnees)
|
||||||
|
|
||||||
if layer.wkbType() == QgsWkbTypes.LineGeometry :
|
if layer.wkbType() == QgsWkbTypes.LineGeometry:
|
||||||
cur.execute(SQL_trigger_length_m)
|
cur.execute(SQL_trigger_length_m)
|
||||||
cur.execute(SQL_trigger_length_km)
|
cur.execute(SQL_trigger_length_km)
|
||||||
|
|
||||||
if layer.wkbType() == QgsWkbTypes.PolygonGeometry :
|
if layer.wkbType() == QgsWkbTypes.PolygonGeometry:
|
||||||
cur.execute(SQL_trigger_area_m2)
|
cur.execute(SQL_trigger_area_m2)
|
||||||
cur.execute(SQL_trigger_area_ha)
|
cur.execute(SQL_trigger_area_ha)
|
||||||
|
|
||||||
con.commit()
|
con.commit()
|
||||||
|
|
||||||
### Affichage de la table
|
# Affichage de la table
|
||||||
uri = QgsDataSourceUri()
|
uri = QgsDataSourceUri()
|
||||||
# set host name, port, database name, username and password
|
# set host name, port, database name, username and password
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
uri.setConnection(host, port, dbname, user, mdp)
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
uri.setDataSource(schema, tablename, geom)
|
uri.setDataSource(schema, tablename, "geom")
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|
||||||
con.commit()
|
con.commit()
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
#self.iface.messageBar().pushMessage("Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\"." , level=QgsMessageBar.INFO, duration=10)
|
# self.iface.messageBar().pushMessage("Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\"." , level=QgsMessageBar.INFO, duration=10)
|
||||||
self.iface.messageBar().pushMessage("Bravo!", "Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\".", level=Qgis.Success, duration=5)
|
self.iface.messageBar().pushMessage("Bravo!", "Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\".", level=Qgis.Info, duration=5)
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ name=CenRA_COPIE
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=Permet la copie d'une table dans une base PostGis
|
description=Permet la copie d'une table dans une base PostGis
|
||||||
version=3.0
|
version=3.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
# Recommended items:
|
# Recommended items:
|
||||||
|
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_COPIE:</h2></br><p><h3>19/05/2025 - Version 3.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>11/04/2025 - Version 2.5: </h3> - Correctif de bug.</p></br><p><h3>09/04/2025 - Version 2.4: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 2.3: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 2.2: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>22/10/2024 - Version 2:</h3>- Refonte du code.</p></br><p><h3>13/09/2024 - Version 1.5:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
changelog=<h2>CenRa_COPIE:</h2></br><p><h3>30/07/2025 - Version 3.1: </h3> - Correctife de bug.</p></br><p><h3>19/05/2025 - Version 3.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>11/04/2025 - Version 2.5: </h3> - Correctif de bug.</p></br><p><h3>09/04/2025 - Version 2.4: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 2.3: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 2.2: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>22/10/2024 - Version 2:</h3>- Refonte du code.</p></br><p><h3>13/09/2024 - Version 1.5:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=cenra, database, table
|
tags=cenra, database, table
|
||||||
|
|||||||
@@ -1,141 +0,0 @@
|
|||||||
|
|
||||||
geom = "geom"
|
|
||||||
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
|
||||||
champ_travaux_prevus_multilinestring="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))"""
|
|
||||||
champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))"""
|
|
||||||
|
|
||||||
champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))"""
|
|
||||||
champ_viergeLigne = """(gid serial NOT NULL, commentaire text, longueur_m double precision, longueur_km double precision, geom geometry(MultiLineString,2154))"""
|
|
||||||
champ_viergePoint = """(gid serial NOT NULL, commentaire text, x_wgs84 double precision, y_wgs84 double precision, geom geometry(Point,2154))"""
|
|
||||||
|
|
||||||
champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
|
||||||
|
|
||||||
champ_contour="""(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154))
|
|
||||||
"""
|
|
||||||
|
|
||||||
champ_vegethab_point = """(
|
|
||||||
gid serial NOT NULL ,
|
|
||||||
cd_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_1 bigint,
|
|
||||||
cd_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_2 bigint,
|
|
||||||
cd_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_3 bigint,
|
|
||||||
milieu_cod character varying(254) COLLATE pg_catalog."default",
|
|
||||||
milieu_lib character varying(254) COLLATE pg_catalog."default",
|
|
||||||
surface_m2 numeric,
|
|
||||||
surface_ha numeric,
|
|
||||||
commentair character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_creat date,
|
|
||||||
date_maj date,
|
|
||||||
num_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
type_unite character varying(254) COLLATE pg_catalog."default",
|
|
||||||
dynamique character varying(254) COLLATE pg_catalog."default",
|
|
||||||
gestio_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
degrad_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
eta_conser character varying(254) COLLATE pg_catalog."default",
|
|
||||||
clas_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
syntaxon character varying(254) COLLATE pg_catalog."default",
|
|
||||||
n2000 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_aura character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbna character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbnmc character varying(254) COLLATE pg_catalog."default",
|
|
||||||
vege_enjeu character varying(254) COLLATE pg_catalog."default",
|
|
||||||
num_photo character varying(254) COLLATE pg_catalog."default",
|
|
||||||
nature_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_sais date,
|
|
||||||
s_al_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
salli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
class_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
geom geometry(Point,2154)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
champ_vegethab_multilinestring = """(
|
|
||||||
gid serial NOT NULL ,
|
|
||||||
cd_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_1 bigint,
|
|
||||||
cd_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_2 bigint,
|
|
||||||
cd_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_3 bigint,
|
|
||||||
milieu_cod character varying(254) COLLATE pg_catalog."default",
|
|
||||||
milieu_lib character varying(254) COLLATE pg_catalog."default",
|
|
||||||
surface_m2 numeric,
|
|
||||||
surface_ha numeric,
|
|
||||||
commentair character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_creat date,
|
|
||||||
date_maj date,
|
|
||||||
num_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
type_unite character varying(254) COLLATE pg_catalog."default",
|
|
||||||
dynamique character varying(254) COLLATE pg_catalog."default",
|
|
||||||
gestio_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
degrad_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
eta_conser character varying(254) COLLATE pg_catalog."default",
|
|
||||||
clas_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
syntaxon character varying(254) COLLATE pg_catalog."default",
|
|
||||||
n2000 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_aura character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbna character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbnmc character varying(254) COLLATE pg_catalog."default",
|
|
||||||
vege_enjeu character varying(254) COLLATE pg_catalog."default",
|
|
||||||
num_photo character varying(254) COLLATE pg_catalog."default",
|
|
||||||
nature_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_sais date,
|
|
||||||
s_al_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
salli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
class_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
geom geometry(MultiLineString,2154)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
champ_vegethab_multipolygon = """(
|
|
||||||
gid serial NOT NULL ,
|
|
||||||
cd_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_1 bigint,
|
|
||||||
cd_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_2 bigint,
|
|
||||||
cd_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_3 bigint,
|
|
||||||
milieu_cod character varying(254) COLLATE pg_catalog."default",
|
|
||||||
milieu_lib character varying(254) COLLATE pg_catalog."default",
|
|
||||||
surface_m2 numeric,
|
|
||||||
surface_ha numeric,
|
|
||||||
commentair character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_creat date,
|
|
||||||
date_maj date,
|
|
||||||
num_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
type_unite character varying(254) COLLATE pg_catalog."default",
|
|
||||||
dynamique character varying(254) COLLATE pg_catalog."default",
|
|
||||||
gestio_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
degrad_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
eta_conser character varying(254) COLLATE pg_catalog."default",
|
|
||||||
clas_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
syntaxon character varying(254) COLLATE pg_catalog."default",
|
|
||||||
n2000 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_aura character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbna character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbnmc character varying(254) COLLATE pg_catalog."default",
|
|
||||||
vege_enjeu character varying(254) COLLATE pg_catalog."default",
|
|
||||||
num_photo character varying(254) COLLATE pg_catalog."default",
|
|
||||||
nature_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_sais date,
|
|
||||||
s_al_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
salli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
class_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
geom geometry(MultiPolygon,2154)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
@@ -3,9 +3,9 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import base64
|
# import base64
|
||||||
import psycopg2
|
# import psycopg2
|
||||||
import psycopg2.extras
|
# import psycopg2.extras
|
||||||
import os
|
import os
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
|
|
||||||
@@ -108,71 +108,77 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
|
|
||||||
def pyperclip():
|
def pyperclip():
|
||||||
dst = dirname(dirname(__file__))+"\\tools\\"
|
dst = dirname(dirname(__file__)) + "\\tools\\"
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
||||||
try:
|
try:
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
except:
|
except FileNotFoundError:
|
||||||
|
print('404')
|
||||||
|
except UnboundLocalError:
|
||||||
print('404')
|
print('404')
|
||||||
|
|
||||||
def send_issues(url,titre,body,labels):
|
|
||||||
|
def send_issues(url, titre, body, labels):
|
||||||
import requests
|
import requests
|
||||||
|
import urllib.request
|
||||||
import json
|
import json
|
||||||
import os
|
# import os
|
||||||
import qgis
|
# import qgis
|
||||||
|
|
||||||
usr = os.environ['USERNAME']
|
# usr = os.environ['USERNAME']
|
||||||
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
||||||
url=url+'?token='+token
|
url = url + '?token=' + token
|
||||||
|
|
||||||
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
|
||||||
|
|
||||||
|
headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'}
|
||||||
|
|
||||||
payload = {'title': titre, 'body': body, 'labels': labels}
|
payload = {'title': titre, 'body': body, 'labels': labels}
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except ValueError:
|
||||||
binar = False
|
binar = False
|
||||||
r = ''
|
r = ''
|
||||||
if binar:
|
if binar:
|
||||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def maj_verif(NAME):
|
def maj_verif(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
import urllib.request
|
import urllib.request
|
||||||
iface = qgis.utils.iface
|
iface = qgis.utils.iface
|
||||||
from qgis.core import Qgis
|
from qgis.core import Qgis
|
||||||
|
|
||||||
url = qgis.utils.pluginMetadata(NAME,'repository')
|
# url = qgis.utils.pluginMetadata(NAME, 'repository')
|
||||||
#URL = url+'/raw/branch/main/plugins.xml'
|
# URL = url+'/raw/branch/main/plugins.xml'
|
||||||
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||||
# print(URL)
|
# print(URL)
|
||||||
version = qgis.utils.pluginMetadata(NAME,'version')
|
version = qgis.utils.pluginMetadata(NAME, 'version')
|
||||||
len_version = len(version)
|
len_version = len(version)
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except urllib.error.URLError:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
try:
|
try:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
plugin_num = version_web.find(NAME)
|
plugin_num = version_web.find(NAME)
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
valeur_version_web = version_web.find('<version>', plugin_num) + 9
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
version_plugin = version_web[valeur_version_web:valeur_version_web + len_version]
|
||||||
if version_plugin != version:
|
if version_plugin != version:
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
except:
|
except urllib.error.URLError:
|
||||||
print("error gitea version ssl")
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||||
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog')
|
||||||
return devmaj
|
return devmaj
|
||||||
+13
-19
@@ -4,27 +4,23 @@ __email__ = "info@3liz.org"
|
|||||||
|
|
||||||
|
|
||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
from qgis.PyQt.QtCore import QUrl, QSettings
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
from qgis.PyQt.QtWidgets import QAction
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
|
|
||||||
|
# include <QSettings>
|
||||||
#include <QSettings>
|
from .about_form import AboutDialog
|
||||||
import socket
|
|
||||||
import os
|
import os
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
|
||||||
pyperclip,
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
pyperclip()
|
pyperclip()
|
||||||
from .flux_editor import Flux_Editor
|
|
||||||
from .about_form import AboutDialog
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
from .flux_editor import Flux_Editor
|
||||||
|
|
||||||
|
|
||||||
class PgFlux:
|
class PgFlux:
|
||||||
@@ -37,18 +33,18 @@ class PgFlux:
|
|||||||
self.dock_action = None
|
self.dock_action = None
|
||||||
self.help_action = None
|
self.help_action = None
|
||||||
plugin_dir = os.path.dirname(__file__)
|
plugin_dir = os.path.dirname(__file__)
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
global NAME
|
global NAME
|
||||||
NAME = plugin_dir[end_find:]
|
NAME = plugin_dir[end_find:]
|
||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_FLUX','version')
|
version = qgis.utils.pluginMetadata('CenRa_FLUX', 'version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("flux/version", 1, type=str)
|
versionUse = s.value("flux/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version):
|
||||||
s.setValue("flux/version", str(version))
|
s.setValue("flux/version", str(version))
|
||||||
print(versionUse,version)
|
print(versionUse, version)
|
||||||
self.open_about_dialog()
|
self.open_about_dialog()
|
||||||
|
|
||||||
def initGui(self):
|
def initGui(self):
|
||||||
@@ -65,13 +61,11 @@ class PgFlux:
|
|||||||
self.help_action.triggered.connect(self.open_help)
|
self.help_action.triggered.connect(self.open_help)
|
||||||
if not self.action_editor:
|
if not self.action_editor:
|
||||||
self.action_editor = Flux_Editor()
|
self.action_editor = Flux_Editor()
|
||||||
|
self.flux_editor = QAction(icon, 'SigCEN', None)
|
||||||
|
|
||||||
self.flux_editor = QAction(icon, 'SigCEN',None)
|
|
||||||
self.toolBar.addAction(self.flux_editor)
|
self.toolBar.addAction(self.flux_editor)
|
||||||
self.flux_editor.triggered.connect(self.open_editor)
|
self.flux_editor.triggered.connect(self.open_editor)
|
||||||
self.flux_editor.setEnabled(False)
|
self.flux_editor.setEnabled(False)
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
self.flux_editor.setEnabled(True)
|
self.flux_editor.setEnabled(True)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
@@ -80,6 +74,7 @@ class PgFlux:
|
|||||||
"""
|
"""
|
||||||
dialog = AboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||||
@@ -91,8 +86,7 @@ class PgFlux:
|
|||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.action_editor:
|
if self.action_editor:
|
||||||
iface.removePluginMenu('CenRa_Flux',self.flux_editor)
|
iface.removePluginMenu('CenRa_Flux', self.flux_editor)
|
||||||
|
|
||||||
|
|
||||||
if self.provider:
|
if self.provider:
|
||||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os.path
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
from qgis.PyQt.QtGui import QPixmap
|
# from qgis.PyQt.QtGui import QPixmap
|
||||||
from qgis.PyQt.QtWidgets import QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
|
|
||||||
from .tools.resources import devlog
|
from .tools.resources import devlog
|
||||||
|
|||||||
+258
-408
@@ -2,64 +2,69 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
# Import the PyQt and QGIS libraries
|
# Import the PyQt and QGIS libraries
|
||||||
from builtins import next
|
# from builtins import next
|
||||||
from builtins import str
|
from builtins import str
|
||||||
from builtins import object
|
# from builtins import object
|
||||||
import qgis
|
|
||||||
from qgis.PyQt import QtCore
|
from qgis.PyQt import QtCore, QtGui
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt import QtWidgets
|
from qgis.PyQt import QtWidgets
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
# from qgis.PyQt.QtWidgets import QDialog
|
||||||
from qgis.PyQt.QtGui import QIcon
|
from qgis.PyQt.QtGui import QIcon
|
||||||
try:
|
|
||||||
from PyQt5.QtCore import *
|
|
||||||
from PyQt5.QtGui import *
|
|
||||||
from PyQt5 import QtGui
|
|
||||||
except:
|
|
||||||
from PyQt6.QtCore import *
|
|
||||||
from PyQt6.QtGui import *
|
|
||||||
from PyQt6 import QtGui
|
|
||||||
|
|
||||||
from qgis.core import *
|
# from qgis.PyQt.QtCore import *
|
||||||
from qgis.core import QgsDataSourceUri
|
|
||||||
from qgis.PyQt.QtSvg import QSvgWidget
|
# from qgis.core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject, QgsSettings
|
||||||
|
from qgis.core import QgsDataSourceUri, QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject, QgsSettings, QgsApplication, QgsVectorLayer, QgsRasterLayer, QgsWkbTypes
|
||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
QDialog,
|
||||||
QAction,
|
# QAction,
|
||||||
QDockWidget,
|
# QDockWidget,
|
||||||
QFileDialog,
|
# QFileDialog,
|
||||||
QInputDialog,
|
# QInputDialog,
|
||||||
QMenu,
|
# QMenu,
|
||||||
QToolButton,
|
# QToolButton,
|
||||||
QTableWidget,
|
# QTableWidget,
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QMessageBox,
|
QMessageBox,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
)
|
)
|
||||||
from .tools.SQLRequet import *
|
from .tools.SQLRequet import schemaname_list, schemaname_list_ref, schemaname_distinct
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
from .tools.PythonSQL import login_base
|
from .tools.PythonSQL import login_base
|
||||||
except:
|
except NameError:
|
||||||
print('Pas de fichier PythonSQL')
|
print('Pas de fichier PythonSQL')
|
||||||
|
|
||||||
from .issues import CenRa_Issues
|
|
||||||
|
|
||||||
from ast import literal_eval
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
|
# from ast import literal_eval
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import os.path
|
# import os.path
|
||||||
import webbrowser, os
|
# import os
|
||||||
|
# import webbrowser
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
import base64
|
# import base64
|
||||||
|
|
||||||
global DeBUG
|
global DeBUG
|
||||||
DeBUG = 0
|
DeBUG = 0
|
||||||
|
|
||||||
|
itemIconRaster = QTableWidgetItem()
|
||||||
|
icon = QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconRaster.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||||
|
itemIconRaster.setIcon(icon)
|
||||||
|
|
||||||
|
itemIconVecteur = QTableWidgetItem()
|
||||||
|
icon = QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconVecteur.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||||
|
itemIconVecteur.setIcon(icon)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
account = login_base('account')
|
account = login_base('account')
|
||||||
user = account[0]
|
user = account[0]
|
||||||
@@ -70,142 +75,32 @@ try:
|
|||||||
sigdb = account[5]
|
sigdb = account[5]
|
||||||
refdb = account[6]
|
refdb = account[6]
|
||||||
|
|
||||||
|
except NameError:
|
||||||
|
print('Fails to login DB for account')
|
||||||
|
|
||||||
|
|
||||||
except:
|
|
||||||
print('')
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_Flux_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_Flux_base.ui')
|
||||||
html = '''<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
|
||||||
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
|
||||||
crossorigin=""/>
|
|
||||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
|
||||||
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
|
||||||
crossorigin=""></script>
|
|
||||||
<style>
|
|
||||||
body { padding: 0; margin: 0; }
|
|
||||||
html, body, #map { height: 100%; }
|
|
||||||
.leaflet-control-layers-toggle {
|
|
||||||
background-image: url(https://intranet.cenra-outils.org/Intranet/css/images/layers.png);
|
|
||||||
}
|
|
||||||
.legend_parc {
|
|
||||||
border-radius: 15px;
|
|
||||||
box-shadow: 2px 2px 3px 0 #6a6a6a;
|
|
||||||
background-color: #fefafab3;
|
|
||||||
opacity:0;
|
|
||||||
}
|
|
||||||
.legend_parc:hover{
|
|
||||||
opacity:1;
|
|
||||||
}
|
|
||||||
.popup-with-no-events {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="map"></div>
|
|
||||||
<script src="map.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<script>'''
|
|
||||||
font = '''var OrthoIGN = L.tileLayer('https://wmts.geopf.fr/wmts?'+
|
|
||||||
'&LAYER={ignLayer}&STYLE={style}&TILEMATRIXSET=PM'+
|
|
||||||
'&SERVICE={service}&REQUEST=GetTile&VERSION=1.0.0'+
|
|
||||||
'&FORMAT={format}&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}',
|
|
||||||
{
|
|
||||||
ignLayer: 'ORTHOIMAGERY.ORTHOPHOTOS',
|
|
||||||
style: 'normal',
|
|
||||||
service: 'WMTS',
|
|
||||||
format: 'image/jpeg',
|
|
||||||
minZoom: 0,
|
|
||||||
maxZoom: 19,
|
|
||||||
attribution: '© IGN'
|
|
||||||
}).addTo(map);
|
|
||||||
// Plan IGN avec une transparence de 50%
|
|
||||||
var PlanIGN = L.tileLayer('https://wmts.geopf.fr/wmts?'+
|
|
||||||
'&LAYER={ignLayer}&STYLE={style}&TILEMATRIXSET=PM'+
|
|
||||||
'&SERVICE={service}&REQUEST=GetTile&VERSION=1.0.0'+
|
|
||||||
'&FORMAT={format}&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}',
|
|
||||||
{
|
|
||||||
ignLayer: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2',
|
|
||||||
style: 'normal',
|
|
||||||
service: 'WMTS',
|
|
||||||
format: 'image/png',
|
|
||||||
minZoom: 0,
|
|
||||||
maxZoom: 19,
|
|
||||||
attribution: '© IGN'
|
|
||||||
});
|
|
||||||
var baseMaps = {
|
|
||||||
// "BDORTHO2" : bdortho,
|
|
||||||
// "Openstreetmap": openStreetMap,
|
|
||||||
// "Opentopomap": openTopoMap,
|
|
||||||
"BDORTHO" : OrthoIGN,
|
|
||||||
"PlanIGN": PlanIGN
|
|
||||||
};
|
|
||||||
var overlayMaps = {
|
|
||||||
"Sites": Sites,
|
|
||||||
//"Parcelle":JSON
|
|
||||||
};
|
|
||||||
L.control.layers(baseMaps,overlayMaps).addTo(map);
|
|
||||||
var scale = L.control.scale({position: 'bottomleft', metric:true, imperial:false});
|
|
||||||
scale.addTo(map);
|
|
||||||
var legend = L.control({position: 'bottomleft'});
|
|
||||||
|
|
||||||
legend.onAdd = function (map) {
|
|
||||||
var div = L.DomUtil.create('div', 'info legend_parc'),
|
|
||||||
labels = [];
|
|
||||||
labels.push('<i style="background:#73004c;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquisition')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#ff00c5;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquis en partie BND')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#f0ade1ab;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquisition pour partie')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#73462e;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquisition / Convention')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#e69800;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Convention')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#ffd37f;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Convention en partie BND')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#ffebaf;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Convention pour partie')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#c8c8c8;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Autre')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#f9ff08;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Projet en cours')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#fe0000;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Problème de mise à jour')
|
|
||||||
|
|
||||||
labels.push('<i style="background:#000;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Pas de maitrise')
|
|
||||||
|
|
||||||
div.innerHTML = labels.join('<br>');
|
|
||||||
return div;
|
|
||||||
};
|
|
||||||
|
|
||||||
legend.addTo(map);
|
|
||||||
</script>'''
|
|
||||||
targetCrs = QgsCoordinateReferenceSystem('EPSG:4326')
|
targetCrs = QgsCoordinateReferenceSystem('EPSG:4326')
|
||||||
layerCrs = QgsCoordinateReferenceSystem('EPSG:2154')
|
layerCrs = QgsCoordinateReferenceSystem('EPSG:2154')
|
||||||
TranformCRS = QgsCoordinateTransform(layerCrs, targetCrs,QgsProject.instance())
|
TranformCRS = QgsCoordinateTransform(layerCrs, targetCrs, QgsProject.instance())
|
||||||
|
|
||||||
|
|
||||||
class Flux_Editor(QDialog, EDITOR_CLASS):
|
class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
self.first_start = None
|
self.first_start = None
|
||||||
self.iface = iface
|
self.iface = iface
|
||||||
self.label_3.setPixmap(QtGui.QPixmap(resources_path('ui','logo.png')))
|
self.label_3.setPixmap(QtGui.QPixmap(resources_path('ui', 'logo.png')))
|
||||||
self.commandLinkButton.setIcon(QtGui.QIcon(resources_path('ui','arrow-bottom.png')))
|
self.commandLinkButton.setIcon(QtGui.QIcon(resources_path('ui', 'arrow-bottom.png')))
|
||||||
self.commandLinkButton_2.setIcon(QtGui.QIcon(resources_path('ui','arrow-up.png')))
|
self.commandLinkButton_2.setIcon(QtGui.QIcon(resources_path('ui', 'arrow-up.png')))
|
||||||
|
|
||||||
#self.tableWidget.setSelectionBehavior(QTableWidget.selectRow)
|
|
||||||
self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger(0))
|
self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger(0))
|
||||||
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui','find.png')))
|
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui', 'find.png')))
|
||||||
self.comboBox_2.addItem("SIG")
|
self.comboBox_2.addItem("SIG")
|
||||||
self.comboBox_2.addItem('REF')
|
self.comboBox_2.addItem('REF')
|
||||||
self.comboBox.currentIndexChanged.connect(self.initialisation_flux)
|
self.comboBox.currentIndexChanged.connect(self.initialisation_flux)
|
||||||
@@ -216,34 +111,49 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.tableWidget_2.itemDoubleClicked.connect(self.suppression_flux)
|
self.tableWidget_2.itemDoubleClicked.connect(self.suppression_flux)
|
||||||
self.comboBox_2.currentIndexChanged.connect(self.bd_source)
|
self.comboBox_2.currentIndexChanged.connect(self.bd_source)
|
||||||
self.checkBox.hide()
|
self.checkBox.hide()
|
||||||
self.checkBox.stateChanged.connect(self.modeCarte)
|
# self.checkBox.stateChanged.connect(self.modeCarte)
|
||||||
self.toolButton.clicked.connect(self.getCanevas)
|
self.toolButton.clicked.connect(self.getCanevas)
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
self.lineEdit.textChanged.connect(self.filtre_dynamique)
|
self.lineEdit.textChanged.connect(self.filtre_dynamique)
|
||||||
self.viewer.textChanged.connect(self.NewTitle)
|
# self.viewer.textChanged.connect(self.NewTitle)
|
||||||
layout.addWidget(self.lineEdit)
|
layout.addWidget(self.lineEdit)
|
||||||
self.viewer.hide()
|
self.viewer.hide()
|
||||||
self.DeBUG.addItem('')
|
self.DeBUG.addItem('')
|
||||||
|
self.DeBUG.addItem('Dev')
|
||||||
self.DeBUG.addItem('01')
|
self.DeBUG.addItem('01')
|
||||||
self.DeBUG.addItem('0726')
|
self.DeBUG.addItem('0726')
|
||||||
self.DeBUG.addItem('4269')
|
self.DeBUG.addItem('4269')
|
||||||
|
|
||||||
|
self.DeBUG.currentIndexChanged.connect(self.SwitchDEBUG)
|
||||||
self.DeBUG.hide()
|
self.DeBUG.hide()
|
||||||
#self.lineEdit.mousePressEvent = self._mousePressEvent
|
|
||||||
|
|
||||||
#metadonnees_plugin = open(self.plugin_path + '/metadata.txt')
|
|
||||||
#infos_metadonnees = metadonnees_plugin.readlines()
|
|
||||||
|
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
"""Run method that performs all the real work"""
|
"""Run method that performs all the real work"""
|
||||||
self.bd_source()
|
self.bd_source()
|
||||||
|
|
||||||
|
def SwitchDEBUG(self):
|
||||||
|
try:
|
||||||
|
global user, mdp, host, port, dbname, sigdb, refdb
|
||||||
|
account = login_base(self.DeBUG.currentText())
|
||||||
|
user = account[0]
|
||||||
|
mdp = account[1]
|
||||||
|
host = account[2]
|
||||||
|
port = account[3]
|
||||||
|
dbname = account[4]
|
||||||
|
sigdb = account[5]
|
||||||
|
refdb = account[6]
|
||||||
|
self.bd_source()
|
||||||
|
|
||||||
|
except NameError:
|
||||||
|
print('Fails to switch DB for account')
|
||||||
|
|
||||||
def ModeDeBUG(self):
|
def ModeDeBUG(self):
|
||||||
self.DeBUG.show()
|
self.DeBUG.show()
|
||||||
|
|
||||||
def mousePressEvent(self, event):
|
def mousePressEvent(self, event):
|
||||||
global DeBUG
|
global DeBUG
|
||||||
if 330 <= event.pos().x() <= 560 and 5 <= event.pos().y() <= 75:
|
if 330 <= event.pos().x() <= 560 and 5 <= event.pos().y() <= 75:
|
||||||
DeBUG = DeBUG+1
|
DeBUG = DeBUG + 1
|
||||||
if DeBUG == 3:
|
if DeBUG == 3:
|
||||||
DeBUG = 0
|
DeBUG = 0
|
||||||
self.ModeDeBUG()
|
self.ModeDeBUG()
|
||||||
@@ -251,131 +161,17 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
DeBUG = 0
|
DeBUG = 0
|
||||||
self.DeBUG.hide()
|
self.DeBUG.hide()
|
||||||
|
|
||||||
|
"""
|
||||||
def NewTitle(self):
|
def NewTitle(self):
|
||||||
if self.viewer.title() != '':
|
if self.viewer.title() != '':
|
||||||
Tsplit = ((self.viewer.title()).split('.'))
|
Tsplit = ((self.viewer.title()).split('.'))
|
||||||
print(Tsplit[0],Tsplit[1])
|
print(Tsplit[0], Tsplit[1])
|
||||||
self.openPostGIS(Tsplit[0],Tsplit[1])
|
self.openPostGIS(Tsplit[0], Tsplit[1])
|
||||||
|
"""
|
||||||
def modeCarte(self):
|
|
||||||
if self.checkBox.isChecked():
|
|
||||||
self.viewer.show()
|
|
||||||
|
|
||||||
cur.execute("SELECT ST_AsGeoJSON(st_centroid(ST_Transform(geom,4326))) FROM _agregation_ra._agreg_contour")
|
|
||||||
varcenter = literal_eval(cur.fetchall()[0][0])
|
|
||||||
varcenter = [varcenter['coordinates'][1],varcenter['coordinates'][0]]
|
|
||||||
|
|
||||||
cur.execute("SELECT ST_AsGeoJSON(ST_Transform(st_collect(geom),4326)),tschema,tname FROM _agregation_ra._agreg_contour WHERE geom IS NOT NULL GROUP BY tschema,tname;" )
|
|
||||||
varSite = cur.fetchall()
|
|
||||||
cur.execute("SELECT ST_AsGeoJSON(ST_Transform(st_collect(geom),4326)),tschema,tname FROM _agregation_ra._agreg_travaux_prevus_poly WHERE geom IS NOT NULL GROUP BY tschema,tname;")
|
|
||||||
varTravaux = cur.fetchall()
|
|
||||||
cur.execute("SELECT ST_AsGeoJSON(ST_Transform(geom,4326)),milieu_libelle ,lb_eu_01,tschema,tname FROM _agregation_ra._agreg_eu_habitat WHERE geom IS NOT NULL;")
|
|
||||||
varHabitat = cur.fetchall()
|
|
||||||
|
|
||||||
vargeomS = literal_eval(varSite[0][0])
|
|
||||||
vargeomT = literal_eval(varTravaux[0][0])
|
|
||||||
vargeomH = literal_eval(varHabitat[0][0])
|
|
||||||
#new_objectS = self.SwitchGeom(vargeomS)
|
|
||||||
#new_objectT = self.SwitchGeom(vargeomT)
|
|
||||||
#new_objectH = self.SwitchGeom(vargeomH)
|
|
||||||
|
|
||||||
script = 'var map = L.map("map").setView('+str(varcenter)+', 13);'
|
|
||||||
|
|
||||||
id = 0
|
|
||||||
varSiteJSON = '''var ParcelleJSON = {
|
|
||||||
"type": "FeatureCollection",
|
|
||||||
"features":['''
|
|
||||||
for varP in varSite:
|
|
||||||
id = id+1
|
|
||||||
varSiteJSON = varSiteJSON+'{"properties": {"code": "'+str(varP[1])+'.'+str(varP[2])+'" },'+str(varP[0][1:])+','
|
|
||||||
varSiteJSON = varSiteJSON[:-1]+''']};
|
|
||||||
var Sites = L.geoJSON(ParcelleJSON,{
|
|
||||||
style: function(feature) {
|
|
||||||
switch (feature.geometry.properties.code) {
|
|
||||||
case 'Ensemble de sites': return {fillColor: "#9a7863",color:"white",weight: 1,fillOpacity: 0.7};
|
|
||||||
case 'Sous-site conservatoire': return {fillColor: "#e69800",color:"white",weight: 1,fillOpacity: 0.7};
|
|
||||||
case 'Site non géré': return {fillColor: "#73004c",color:"white",weight: 1,fillOpacity: 0.7};
|
|
||||||
case 'Animation territoriale': return {fillColor: "#ffebaf",color:"white",weight: 1,fillOpacity: 0.7};
|
|
||||||
case 'Site conservatoire': return {fillColor: "#f9ff08",color:"white",weight: 1,fillOpacity: 0.7};
|
|
||||||
default: return {fillColor: "#c8c8c8",color:"white",weight: 1,fillOpacity: 0.7};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onEachFeature: function (feature,layer) {
|
|
||||||
layer.on('click', function(e) {
|
|
||||||
map.fitBounds(layer.getBounds());
|
|
||||||
document.title = feature.properties.code.toString();
|
|
||||||
});
|
|
||||||
layer.on('mouseover', function(e) {
|
|
||||||
layer.setStyle({
|
|
||||||
weight: 5,
|
|
||||||
color: '#fe0000',
|
|
||||||
dashArray: '',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//layer.on('mousemove', function(e) {
|
|
||||||
//layer.openPopup(e.latlng);
|
|
||||||
//});
|
|
||||||
layer.on('mouseout', function(e) {
|
|
||||||
layer.setStyle({
|
|
||||||
color:"white",
|
|
||||||
weight: 1,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
layer.bindTooltip(feature.properties.code.toString(), {
|
|
||||||
sticky: true,
|
|
||||||
permanent: false,
|
|
||||||
direction: 'right',
|
|
||||||
className: 'label_parc'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}).addTo(map);'''
|
|
||||||
id = 0
|
|
||||||
varTravauxJSON = '''var TravauxJSON = {
|
|
||||||
"type": "FeatureCollection",
|
|
||||||
"features":['''
|
|
||||||
for varT in varTravaux:
|
|
||||||
id = id+1
|
|
||||||
varTravauxJSON = varTravauxJSON+'{"properties": {"code": "'+str(varT[1])+'.'+str(varT[2])+'" },'+str(varT[0][1:])+','
|
|
||||||
varTravauxJSON = varTravauxJSON[:-1]+''']};
|
|
||||||
var Travaux = L.geoJSON(TravauxJSON,{
|
|
||||||
onEachFeature: function (feature,layer) {
|
|
||||||
layer.on('click', function(e) {
|
|
||||||
map.fitBounds(layer.getBounds());
|
|
||||||
document.title = feature.properties.code.toString();
|
|
||||||
});
|
|
||||||
layer.on('mouseover', function(e) {
|
|
||||||
layer.setStyle({
|
|
||||||
weight: 5,
|
|
||||||
color: '#fe0000',
|
|
||||||
dashArray: '',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//layer.on('mousemove', function(e) {
|
|
||||||
//layer.openPopup(e.latlng);
|
|
||||||
//});
|
|
||||||
layer.on('mouseout', function(e) {
|
|
||||||
layer.setStyle({
|
|
||||||
color:"white",
|
|
||||||
weight: 1,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
layer.bindTooltip(feature.properties.code.toString(), {
|
|
||||||
sticky: true,
|
|
||||||
permanent: false,
|
|
||||||
direction: 'right',
|
|
||||||
className: 'label_parc'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}).addTo(map);'''
|
|
||||||
script = script+varSiteJSON+varTravauxJSON
|
|
||||||
self.viewer.setHtml(html+script+font)
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.viewer.hide()
|
|
||||||
|
|
||||||
def bd_source(self):
|
def bd_source(self):
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
bd_origine=self.comboBox_2.currentText()
|
bd_origine = self.comboBox_2.currentText()
|
||||||
if bd_origine == 'REF':
|
if bd_origine == 'REF':
|
||||||
self.run_ref()
|
self.run_ref()
|
||||||
if bd_origine == 'SIG':
|
if bd_origine == 'SIG':
|
||||||
@@ -384,17 +180,17 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
def run_ref(self):
|
def run_ref(self):
|
||||||
"""Run method that performs all the real work"""
|
"""Run method that performs all the real work"""
|
||||||
while self.tableWidget_2.rowCount() > 0:
|
while self.tableWidget_2.rowCount() > 0:
|
||||||
self.tableWidget_2.removeRow(self.tableWidget_2.rowCount()-1)
|
self.tableWidget_2.removeRow(self.tableWidget_2.rowCount() - 1)
|
||||||
# print(self.tableWidget_2.rowCount())
|
# print(self.tableWidget_2.rowCount())
|
||||||
global cur,con,dbtype
|
global cur, con, dbtype
|
||||||
dbtype=refdb
|
dbtype = refdb
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbtype+" user=" + user + " password=" + mdp)
|
con = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + dbtype + " user=" + user + " password=" + mdp)
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||||
self.initialisation_flux()
|
self.initialisation_flux()
|
||||||
self.combobox_custom()
|
self.combobox_custom()
|
||||||
# Create the dialog with elements (after translation) and keep reference
|
# 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
|
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
|
||||||
if self.first_start == True:
|
if self.first_start is True:
|
||||||
self.first_start = False
|
self.first_start = False
|
||||||
# show the dialog
|
# show the dialog
|
||||||
self.show()
|
self.show()
|
||||||
@@ -409,16 +205,16 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
def run_sig(self):
|
def run_sig(self):
|
||||||
"""Run method that performs all the real work"""
|
"""Run method that performs all the real work"""
|
||||||
while self.tableWidget_2.rowCount() > 0:
|
while self.tableWidget_2.rowCount() > 0:
|
||||||
self.tableWidget_2.removeRow(self.tableWidget_2.rowCount()-1)
|
self.tableWidget_2.removeRow(self.tableWidget_2.rowCount() - 1)
|
||||||
global cur,con,dbtype
|
global cur, con, dbtype
|
||||||
dbtype=sigdb
|
dbtype = sigdb
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbtype+" user=" + user + " password=" + mdp)
|
con = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + dbtype + " user=" + user + " password=" + mdp)
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||||
self.initialisation_flux()
|
self.initialisation_flux()
|
||||||
self.combobox_custom()
|
self.combobox_custom()
|
||||||
# Create the dialog with elements (after translation) and keep reference
|
# 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
|
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
|
||||||
if self.first_start == True:
|
if self.first_start is True:
|
||||||
self.first_start = False
|
self.first_start = False
|
||||||
# show the dialog
|
# show the dialog
|
||||||
self.show()
|
self.show()
|
||||||
@@ -433,130 +229,172 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
def suppression_flux(self):
|
def suppression_flux(self):
|
||||||
self.tableWidget_2.removeRow(self.tableWidget_2.currentRow())
|
self.tableWidget_2.removeRow(self.tableWidget_2.currentRow())
|
||||||
|
|
||||||
def open_url(self, item):
|
|
||||||
url = item.data(Qt.UserRole)
|
|
||||||
|
|
||||||
def initialisation_flux(self):
|
def initialisation_flux(self):
|
||||||
|
print('run_time')
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
# self.toolButton.setEnabled(1)
|
# self.toolButton.setEnabled(1)
|
||||||
if self.comboBox.currentText() == 'toutes les catégories':
|
if self.comboBox.currentText() == 'toutes les catégories':
|
||||||
custom_list=schemaname_list
|
custom_list = schemaname_list
|
||||||
elif self.comboBox.currentText() == 'travaux':
|
elif self.comboBox.currentText() == 'travaux':
|
||||||
custom_list="""(SELECT schemaname,tablename from pg_catalog.pg_tables
|
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:
|
else:
|
||||||
custom_list="""(SELECT schemaname,tablename from pg_catalog.pg_tables
|
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:
|
else:
|
||||||
if self.comboBox.currentText() == 'toutes les catégories':
|
if self.comboBox.currentText() == 'toutes les catégories':
|
||||||
custom_list=schemaname_list_ref
|
custom_list = schemaname_list_ref
|
||||||
else:
|
else:
|
||||||
custom_list="""SELECT schemaname,tablename from pg_catalog.pg_tables
|
custom_list = """SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||||
where schemaname like '"""+ str(self.comboBox.currentText()) +"""' order by schemaname,tablename;"""
|
where schemaname like '""" + str(self.comboBox.currentText()) + """' order by schemaname,tablename;"""
|
||||||
cur.execute(custom_list)
|
cur.execute(custom_list)
|
||||||
list_schema = cur.fetchall()
|
list_schema = cur.fetchall()
|
||||||
|
|
||||||
SQLraster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
SQLcountRaster = """SELECT schemaname,viewname FROM pg_catalog.pg_views
|
||||||
cur.execute(SQLraster)
|
WHERE schemaname LIKE 'public' AND viewname LIKE 'raster_columns';"""
|
||||||
list_raster = cur.fetchall()
|
cur.execute(SQLcountRaster)
|
||||||
RasterList = []
|
RasterIF = len(cur.fetchall())
|
||||||
for rasterFind in list_raster:
|
|
||||||
RasterList.append(rasterFind[0])
|
if RasterIF == 1:
|
||||||
|
SQLloadRaster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||||
|
cur.execute(SQLloadRaster)
|
||||||
|
list_raster = cur.fetchall()
|
||||||
|
RasterList = []
|
||||||
|
for rasterFind in list_raster:
|
||||||
|
RasterList.append(rasterFind[0])
|
||||||
|
else:
|
||||||
|
RasterList = []
|
||||||
|
|
||||||
|
SQLprojects = """SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE 'qgis_projects'"""
|
||||||
|
cur.execute(SQLprojects)
|
||||||
|
list_projects = cur.fetchall()
|
||||||
|
list_projects_qgis = []
|
||||||
|
if len(list_projects) <= 1:
|
||||||
|
for ProjectName in list_projects:
|
||||||
|
SQLProjectsQgis = """SELECT name, metadata, content FROM """ + '"' + ProjectName[0] + '"."' + ProjectName[1] + '"'
|
||||||
|
cur.execute(SQLProjectsQgis)
|
||||||
|
list_projects_qgis.append(cur.fetchall())
|
||||||
|
|
||||||
self.tableWidget.setRowCount(len(list_schema))
|
self.tableWidget.setRowCount(len(list_schema))
|
||||||
self.tableWidget.setColumnCount(3)
|
self.tableWidget.setColumnCount(4)
|
||||||
i=0
|
i = 0
|
||||||
for value in list_schema:
|
for value in list_schema:
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
type_val = str(value[0])[1:3]
|
type_val = str(value[0])[1:3]
|
||||||
schema_name=str(value[0])[4:]
|
schema_name = str(value[0])[4:]
|
||||||
table_name=str(value[1][len(value[0])+1:])
|
table_name = str(value[1][len(value[0]) + 1:])
|
||||||
if value[0] == value[1][:len(value[0])]:
|
if value[0] == value[1][:len(value[0])]:
|
||||||
table_name=str(value[1][len(value[0])+1:])
|
table_name = str(value[1][len(value[0]) + 1:])
|
||||||
else:
|
else:
|
||||||
table_name=str(value[1])
|
table_name = str(value[1])
|
||||||
else:
|
else:
|
||||||
type_val = ''
|
type_val = ''
|
||||||
schema_name=str(value[0])
|
schema_name = str(value[0])
|
||||||
table_name=str(value[1])
|
table_name = str(value[1])
|
||||||
if type_val == 'fo':
|
if type_val == 'fo':
|
||||||
type_val=str(value[0])[1:5]
|
type_val = str(value[0])[1:5]
|
||||||
schema_name=str(value[0])[6:]
|
schema_name = str(value[0])[6:]
|
||||||
if value[0] == value[1][:len(value[0])]:
|
if value[0] == value[1][:len(value[0])]:
|
||||||
table_name=str(value[1][len(value[0])+1:])
|
table_name = str(value[1][len(value[0]) + 1:])
|
||||||
else:
|
else:
|
||||||
table_name=str(value[1])
|
table_name = str(value[1])
|
||||||
elif type_val == 'ra':
|
elif type_val == 'ra':
|
||||||
type_val='travaux'
|
type_val = 'travaux'
|
||||||
schema_name=str(value[0])
|
schema_name = str(value[0])
|
||||||
table_name=str(value[1])
|
table_name = str(value[1])
|
||||||
elif type_val != '00' and type_val != '01' and type_val != '07' and type_val != '26' and type_val != '42' and type_val != '69' and type_val != 'ra':
|
elif type_val != '00' and type_val != '01' and type_val != '07' and type_val != '26' and type_val != '42' and type_val != '69' and type_val != 'ra':
|
||||||
if dbtype == refdb:
|
type_val = 'agregation'
|
||||||
if (schema_name+'.'+table_name) in RasterList:
|
schema_name = str(value[0])
|
||||||
SVG = 'mIconRaster.svg'
|
table_name = str(value[1])
|
||||||
else:
|
|
||||||
SVG = 'mIconWfs.svg'
|
|
||||||
svgWidget = QSvgWidget(resources_path('icons',SVG))
|
|
||||||
else:
|
|
||||||
type_val='agregation'
|
|
||||||
schema_name=str(value[0])
|
|
||||||
table_name=str(value[1])
|
|
||||||
|
|
||||||
item = QTableWidgetItem(type_val)
|
if (str(value[0]) + '.' + str(value[1])) in RasterList:
|
||||||
if dbtype == refdb:
|
SVG = 'mIconRaster.svg'
|
||||||
self.tableWidget.setCellWidget(i,0,svgWidget)
|
|
||||||
self.tableWidget.setItem(i,0,QTableWidgetItem(''))
|
|
||||||
else:
|
else:
|
||||||
self.tableWidget.setCellWidget(i,0,None)
|
SVG = 'mIconVecteur.svg'
|
||||||
self.tableWidget.setItem(i,0,item)
|
|
||||||
|
itemIcon = QTableWidgetItem()
|
||||||
|
icon = QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap(resources_path('icons', SVG)), QIcon.Mode(0), QIcon.State(1))
|
||||||
|
itemIcon.setIcon(icon)
|
||||||
|
|
||||||
|
self.tableWidget.setItem(i, 0, itemIcon)
|
||||||
|
item = QTableWidgetItem(type_val)
|
||||||
|
self.tableWidget.setItem(i, 1, item)
|
||||||
item = QTableWidgetItem(schema_name)
|
item = QTableWidgetItem(schema_name)
|
||||||
self.tableWidget.setItem(i,1,item)
|
self.tableWidget.setItem(i, 2, item)
|
||||||
item = QTableWidgetItem(table_name)
|
item = QTableWidgetItem(table_name)
|
||||||
self.tableWidget.setItem(i,2,item)
|
self.tableWidget.setItem(i, 3, item)
|
||||||
i=i+1
|
i = i + 1
|
||||||
|
|
||||||
|
SQLprojects = """SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE 'qgis_projects'"""
|
||||||
|
cur.execute(SQLprojects)
|
||||||
|
list_projects = cur.fetchall()
|
||||||
|
list_projects_qgis = []
|
||||||
|
if len(list_projects) <= 1:
|
||||||
|
for ProjectName in list_projects:
|
||||||
|
SQLProjectsQgis = """SELECT name, metadata, content FROM """ + '"' + ProjectName[0] + '"."' + ProjectName[1] + '"'
|
||||||
|
cur.execute(SQLProjectsQgis)
|
||||||
|
list_projects_qgis = cur.fetchall()
|
||||||
|
for Project in list_projects_qgis:
|
||||||
|
self.tableWidget.setRowCount(i + 1)
|
||||||
|
itemIcon = QTableWidgetItem()
|
||||||
|
icon = QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconQgis.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||||
|
itemIcon.setIcon(icon)
|
||||||
|
self.tableWidget.setItem(i, 0, itemIcon)
|
||||||
|
|
||||||
|
item = QTableWidgetItem('QGIS')
|
||||||
|
self.tableWidget.setItem(i, 1, item)
|
||||||
|
|
||||||
|
item = QTableWidgetItem('projet')
|
||||||
|
self.tableWidget.setItem(i, 2, item)
|
||||||
|
|
||||||
|
item = QTableWidgetItem(Project[0])
|
||||||
|
self.tableWidget.setItem(i, 3, item)
|
||||||
|
|
||||||
|
i = i + 1
|
||||||
|
|
||||||
self.tableWidget.setColumnWidth(0, 20)
|
self.tableWidget.setColumnWidth(0, 20)
|
||||||
self.tableWidget.setColumnWidth(1, 300)
|
self.tableWidget.setColumnWidth(1, 70)
|
||||||
self.tableWidget.setColumnWidth(2, 300)
|
self.tableWidget.setColumnWidth(2, 300)
|
||||||
self.tableWidget.setHorizontalHeaderLabels(["Code","Schema","Table"])
|
self.tableWidget.setColumnWidth(3, 300)
|
||||||
|
self.tableWidget.setHorizontalHeaderLabels(["Type", "Code", "Schema", "Table"])
|
||||||
|
|
||||||
def selection_flux(self):
|
def selection_flux(self):
|
||||||
selected_row = 0
|
selected_row = 0
|
||||||
selected_items = self.tableWidget.selectedItems()
|
selected_items = self.tableWidget.selectedItems()
|
||||||
|
|
||||||
# Assuming you want to compare items in the first column for uniqueness
|
# Assuming you want to compare items in the first column for uniqueness
|
||||||
svgTake = (selected_items[2].tableWidget().cellWidget(0,0))
|
# svgTake = (selected_items[2].tableWidget().cellWidget(0,0))
|
||||||
new_item_text = selected_items[2].text()
|
new_item_text = selected_items[3].text()
|
||||||
|
|
||||||
if not self.item_already_exists(new_item_text):
|
if not self.item_already_exists(new_item_text):
|
||||||
self.tableWidget_2.insertRow(selected_row)
|
self.tableWidget_2.insertRow(selected_row)
|
||||||
|
|
||||||
for column in range(self.tableWidget.columnCount()):
|
for column in range(self.tableWidget.columnCount()):
|
||||||
cloned_item = selected_items[column].clone()
|
cloned_item = selected_items[column].clone()
|
||||||
self.tableWidget_2.setHorizontalHeaderLabels(["Code","Schema", "Table"])
|
self.tableWidget_2.setHorizontalHeaderLabels(["Type", "Code", "Schema", "Table"])
|
||||||
self.tableWidget_2.setColumnCount(3)
|
self.tableWidget_2.setColumnCount(4)
|
||||||
self.tableWidget_2.setItem(selected_row, column, cloned_item)
|
self.tableWidget_2.setItem(selected_row, column, cloned_item)
|
||||||
|
|
||||||
self.tableWidget_2.setColumnWidth(0, 50)
|
self.tableWidget_2.setColumnWidth(0, 20)
|
||||||
self.tableWidget_2.setColumnWidth(1, 300)
|
self.tableWidget_2.setColumnWidth(1, 70)
|
||||||
self.tableWidget_2.setColumnWidth(2, 300)
|
self.tableWidget_2.setColumnWidth(2, 300)
|
||||||
|
self.tableWidget_2.setColumnWidth(3, 300)
|
||||||
|
|
||||||
def item_already_exists(self, new_item_text):
|
def item_already_exists(self, new_item_text):
|
||||||
# Assuming you want to compare items in the first column for uniqueness
|
# Assuming you want to compare items in the first column for uniqueness
|
||||||
existing_items = self.tableWidget_2.findItems(new_item_text, QtCore.Qt.MatchFlag(0))
|
existing_items = self.tableWidget_2.findItems(new_item_text, QtCore.Qt.MatchFlag(0))
|
||||||
|
|
||||||
# Check if there are any existing items with the same text in the first column
|
# Check if there are any existing items with the same text in the first column
|
||||||
return len(existing_items) > 0
|
return len(existing_items) > 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def limite_flux(self):
|
def limite_flux(self):
|
||||||
|
|
||||||
if self.tableWidget_2.rowCount() > 5:
|
if self.tableWidget_2.rowCount() > 5:
|
||||||
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !",
|
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !",
|
||||||
"Le nombre de flux à charger en une seule fois est limité à 5 pour des questions de performances. Souhaitez vous tout de même charger les " + str(
|
"Le nombre de flux à charger en une seule fois est limité à 5 pour des questions de performances. Souhaitez vous tout de même charger les " + str(
|
||||||
self.tableWidget_2.rowCount()) + " flux sélectionnés ? (risque de plantage de QGIS)",
|
self.tableWidget_2.rowCount()) + " flux sélectionnés ? (risque de plantage de QGIS)",
|
||||||
QMessageBox.StandardButton(0x00004000)|QMessageBox.StandardButton(0x00010000))
|
QMessageBox.StandardButton(0x00004000) | QMessageBox.StandardButton(0x00010000))
|
||||||
if self.QMBquestion == QMessageBox.StandardButton(0x00004000):
|
if self.QMBquestion == QMessageBox.StandardButton(0x00004000):
|
||||||
self.chargement_flux()
|
self.chargement_flux()
|
||||||
|
|
||||||
@@ -565,11 +403,13 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
|
|
||||||
if self.tableWidget_2.rowCount() <= 5:
|
if self.tableWidget_2.rowCount() <= 5:
|
||||||
self.chargement_flux()
|
self.chargement_flux()
|
||||||
def openPostGIS(self,schema,table):
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
uri.setConnection(host ,port ,sigdb ,user ,mdp)
|
|
||||||
|
|
||||||
if (schema+'.'+table) in RasterList:
|
"""
|
||||||
|
def openPostGIS(self, schema, table):
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
uri.setConnection(host, port, sigdb, user, mdp)
|
||||||
|
|
||||||
|
if (schema + '.' + table) in LRasterList:
|
||||||
uri.setDataSource(schema, table, "rast")
|
uri.setDataSource(schema, table, "rast")
|
||||||
uri.setKeyColumn('rid')
|
uri.setKeyColumn('rid')
|
||||||
uri.setSrid('2154')
|
uri.setSrid('2154')
|
||||||
@@ -581,11 +421,11 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
# Ajout de la couche au canevas QGIS
|
# Ajout de la couche au canevas QGIS
|
||||||
QgsProject.instance().addMapLayer(layer)
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
"""
|
||||||
|
|
||||||
def chargement_flux(self):
|
def chargement_flux(self):
|
||||||
|
|
||||||
managerAU = QgsApplication.authManager()
|
managerAU = QgsApplication.authManager()
|
||||||
k = managerAU.availableAuthMethodConfigs().keys()
|
managerAU.availableAuthMethodConfigs().keys()
|
||||||
|
|
||||||
def REQUEST(type):
|
def REQUEST(type):
|
||||||
switcher = {
|
switcher = {
|
||||||
@@ -597,13 +437,11 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
}
|
}
|
||||||
return switcher.get(type, "nothing")
|
return switcher.get(type, "nothing")
|
||||||
|
|
||||||
|
# def displayOnWindows(type, uri, name):
|
||||||
|
# p = []
|
||||||
|
|
||||||
|
SQLloadRaster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||||
def displayOnWindows(type, uri, name):
|
cur.execute(SQLloadRaster)
|
||||||
p = []
|
|
||||||
|
|
||||||
SQLraster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
|
||||||
cur.execute(SQLraster)
|
|
||||||
list_raster = cur.fetchall()
|
list_raster = cur.fetchall()
|
||||||
RasterList = []
|
RasterList = []
|
||||||
for rasterFind in list_raster:
|
for rasterFind in list_raster:
|
||||||
@@ -611,38 +449,43 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
|
|
||||||
for row in range(0, self.tableWidget_2.rowCount()):
|
for row in range(0, self.tableWidget_2.rowCount()):
|
||||||
color_rgba = 855030089
|
color_rgba = 855030089
|
||||||
if self.tableWidget_2.item(row, 0).background().color().rgba() != 855030089:
|
if self.tableWidget_2.item(row, 1).background().color().rgba() != color_rgba:
|
||||||
## supression de la partie de l'url après le point d'interrogation
|
# supression de la partie de l'url après le point d'interrogation
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
code = self.tableWidget_2.item(row,0).text()
|
code = self.tableWidget_2.item(row, 1).text()
|
||||||
schema = '_'+code+'_'+self.tableWidget_2.item(row,1).text()
|
schema = '_' + code + '_' + self.tableWidget_2.item(row, 2).text()
|
||||||
if code == 'travaux' or code == 'agregation':
|
if code == 'travaux' or code == 'agregation':
|
||||||
schema = self.tableWidget_2.item(row,1).text()
|
schema = self.tableWidget_2.item(row, 2).text()
|
||||||
table = self.tableWidget_2.item(row,2).text()
|
table = self.tableWidget_2.item(row, 3).text()
|
||||||
else:
|
else:
|
||||||
table = self.tableWidget_2.item(row,2).text()
|
table = self.tableWidget_2.item(row, 3).text()
|
||||||
table = schema+'_'+table
|
table = schema + '_' + table
|
||||||
if dbtype == refdb:
|
elif dbtype == refdb:
|
||||||
# code = self.tableWidget_2.item(row,0).text()
|
# code = self.tableWidget_2.item(row,1).text()
|
||||||
schema = self.tableWidget_2.item(row,1).text()
|
schema = self.tableWidget_2.item(row, 2).text()
|
||||||
table = self.tableWidget_2.item(row,2).text()#.split("?", 1)[0]
|
table = self.tableWidget_2.item(row, 3).text()
|
||||||
|
# .split("?", 1)[0]
|
||||||
uri = QgsDataSourceUri()
|
uri = QgsDataSourceUri()
|
||||||
uri.setConnection(host ,port ,dbtype ,user ,mdp)
|
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 schéma
|
||||||
|
if (schema + '.' + table) in RasterList:
|
||||||
if (schema+'.'+table) in RasterList:
|
|
||||||
uri.setDataSource(schema, table, "rast")
|
uri.setDataSource(schema, table, "rast")
|
||||||
uri.setKeyColumn('rid')
|
uri.setKeyColumn('rid')
|
||||||
uri.setSrid('2154')
|
uri.setSrid('2154')
|
||||||
layer = QgsRasterLayer(uri.uri(), table, "postgresraster")
|
layer = QgsRasterLayer(uri.uri(), table, "postgresraster")
|
||||||
QgsProject.instance().addMapLayer(layer)
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
elif code == 'QGIS':
|
||||||
|
schema = '_' + self.tableWidget_2.item(row, 2).text()
|
||||||
|
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)
|
||||||
else:
|
else:
|
||||||
uri.setDataSource(schema, table, "geom")
|
uri.setDataSource(schema, table, "geom")
|
||||||
uri.setKeyColumn('gid')
|
uri.setKeyColumn('gid')
|
||||||
|
|
||||||
# Chargement de la couche PostGIS
|
# Chargement de la couche PostGIS
|
||||||
geom_type ='SELECT right(st_geometrytype(geom),-3) as a FROM '+schema+'.'+table+' GROUP BY a'
|
geom_type = 'SELECT right(st_geometrytype(geom),-3) as a FROM ' + schema + '.' + table + ' GROUP BY a'
|
||||||
cur.execute(geom_type)
|
cur.execute(geom_type)
|
||||||
list_typegeom = cur.fetchall()
|
list_typegeom = cur.fetchall()
|
||||||
if len(list_typegeom) > 1:
|
if len(list_typegeom) > 1:
|
||||||
@@ -659,7 +502,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
uri.setWkbType(QgsWkbTypes.LineString)
|
uri.setWkbType(QgsWkbTypes.LineString)
|
||||||
elif typegeom[0] == 'MultiPoint':
|
elif typegeom[0] == 'MultiPoint':
|
||||||
uri.setWkbType(QgsWkbTypes.MultiPoint)
|
uri.setWkbType(QgsWkbTypes.MultiPoint)
|
||||||
if (typegeom[0] != None and typegeom[0] != 'Polygon'):
|
if (typegeom[0] is not None and typegeom[0] != 'Polygon'):
|
||||||
uri.setSrid('2154')
|
uri.setSrid('2154')
|
||||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
# Ajout de la couche au canevas QGIS
|
# Ajout de la couche au canevas QGIS
|
||||||
@@ -669,7 +512,8 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
# Ajout de la couche au canevas QGIS
|
# Ajout de la couche au canevas QGIS
|
||||||
QgsProject.instance().addMapLayer(layer)
|
QgsProject.instance().addMapLayer(layer)
|
||||||
else:
|
else:
|
||||||
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !","La couche «" + str(self.tableWidget_2.item(row,1).text()) +' '+ str(self.tableWidget_2.item(row,2).text()) + "» ne ce trouve pas dans cette BD !",QMessageBox.StandardButton(0x00004000))
|
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !", "La couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» ne ce trouve pas dans cette BD !", QMessageBox.StandardButton(0x00004000))
|
||||||
|
|
||||||
def combobox_custom(self):
|
def combobox_custom(self):
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
self.toolButton.setEnabled(1)
|
self.toolButton.setEnabled(1)
|
||||||
@@ -686,7 +530,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
self.comboBox.addItem('form')
|
self.comboBox.addItem('form')
|
||||||
if dbtype == refdb:
|
if dbtype == refdb:
|
||||||
self.toolButton.setEnabled(0)
|
self.toolButton.setEnabled(0)
|
||||||
custom_list=schemaname_distinct
|
custom_list = schemaname_distinct
|
||||||
cur.execute(custom_list)
|
cur.execute(custom_list)
|
||||||
list_schema = cur.fetchall()
|
list_schema = cur.fetchall()
|
||||||
self.comboBox.clear()
|
self.comboBox.clear()
|
||||||
@@ -696,7 +540,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
|
|
||||||
def filtre_dynamique(self, filter_text):
|
def filtre_dynamique(self, filter_text):
|
||||||
if filter_text.find(' ') >= 0:
|
if filter_text.find(' ') >= 0:
|
||||||
filter_text=filter_text.replace(" ","_")
|
filter_text = filter_text.replace(" ", "_")
|
||||||
for i in range(self.tableWidget.rowCount()):
|
for i in range(self.tableWidget.rowCount()):
|
||||||
for j in range(self.tableWidget.columnCount()):
|
for j in range(self.tableWidget.columnCount()):
|
||||||
item = self.tableWidget.item(i, j)
|
item = self.tableWidget.item(i, j)
|
||||||
@@ -707,14 +551,14 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
|
|
||||||
def getCanevas(self):
|
def getCanevas(self):
|
||||||
poly = iface.mapCanvas().extent()
|
poly = iface.mapCanvas().extent()
|
||||||
geom = (str(poly.xMinimum())+','+str(poly.yMinimum())+','+str(poly.xMaximum())+','+str(poly.yMaximum()))
|
geom = (str(poly.xMinimum()) + ',' + str(poly.yMinimum()) + ',' + str(poly.xMaximum()) + ',' + str(poly.yMaximum()))
|
||||||
|
|
||||||
SQL_GEOM_CONTOUR = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_contour" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
SQL_GEOM_CONTOUR = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_contour" WHERE st_intersects(geom,ST_MakeEnvelope(""" + geom + ",2154)) ORDER BY tname"
|
||||||
SQL_GEOM_HABITAT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_habitat" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
SQL_GEOM_HABITAT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_habitat" WHERE st_intersects(geom,ST_MakeEnvelope(""" + geom + ",2154)) ORDER BY tname"
|
||||||
SQL_GEOM_EU_HABITAT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_eu_habitat" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
SQL_GEOM_EU_HABITAT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_eu_habitat" WHERE st_intersects(geom,ST_MakeEnvelope(""" + geom + ",2154)) ORDER BY tname"
|
||||||
SQL_GEOM_TRAVAUX_PREVUS_LIGNE = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_ligne" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
SQL_GEOM_TRAVAUX_PREVUS_LIGNE = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_ligne" WHERE st_intersects(geom,ST_MakeEnvelope(""" + geom + ",2154)) ORDER BY tname"
|
||||||
SQL_GEOM_TRAVAUX_PREVUS_POINT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_point" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
SQL_GEOM_TRAVAUX_PREVUS_POINT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_point" WHERE st_intersects(geom,ST_MakeEnvelope(""" + geom + ",2154)) ORDER BY tname"
|
||||||
SQL_GEOM_TRAVAUX_PREVUS_POLY = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_poly" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
SQL_GEOM_TRAVAUX_PREVUS_POLY = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_poly" WHERE st_intersects(geom,ST_MakeEnvelope(""" + geom + ",2154)) ORDER BY tname"
|
||||||
|
|
||||||
cur.execute(SQL_GEOM_CONTOUR)
|
cur.execute(SQL_GEOM_CONTOUR)
|
||||||
TableContour = cur.fetchall()
|
TableContour = cur.fetchall()
|
||||||
@@ -729,11 +573,11 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
cur.execute(SQL_GEOM_TRAVAUX_PREVUS_POLY)
|
cur.execute(SQL_GEOM_TRAVAUX_PREVUS_POLY)
|
||||||
TableTravauxPoly = cur.fetchall()
|
TableTravauxPoly = cur.fetchall()
|
||||||
|
|
||||||
TableHaveGeom = sorted(TableContour+TableHabitat+TableEuHabitat+TableTravauxLigne+TableTravauxPoint+TableTravauxPoly)
|
TableHaveGeom = sorted(TableContour + TableHabitat + TableEuHabitat + TableTravauxLigne + TableTravauxPoint + TableTravauxPoly)
|
||||||
row_count = 0
|
row_count = 0
|
||||||
self.tableWidget.setRowCount(0)
|
self.tableWidget.setRowCount(0)
|
||||||
for e in TableHaveGeom:
|
for e in TableHaveGeom:
|
||||||
cur.execute("""SELECT DISTINCT count(*) FROM pg_catalog.pg_tables WHERE schemaname LIKE '"""+e[0]+"""' AND tablename LIKE '"""+e[1]+"""';""")
|
cur.execute("""SELECT DISTINCT count(*) FROM pg_catalog.pg_tables WHERE schemaname LIKE '""" + e[0] + """' AND tablename LIKE '""" + e[1] + """';""")
|
||||||
TableSomme = cur.fetchall()[0][0]
|
TableSomme = cur.fetchall()[0][0]
|
||||||
|
|
||||||
if e[0][1:3] != 'fo':
|
if e[0][1:3] != 'fo':
|
||||||
@@ -742,28 +586,34 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
|||||||
else:
|
else:
|
||||||
DepName = QTableWidgetItem('form')
|
DepName = QTableWidgetItem('form')
|
||||||
SchemaName = QTableWidgetItem(e[0][6:])
|
SchemaName = QTableWidgetItem(e[0][6:])
|
||||||
TableName = QTableWidgetItem(e[1][len(e[0])+1:])
|
TableName = QTableWidgetItem(e[1][len(e[0]) + 1:])
|
||||||
self.tableWidget.insertRow(row_count)
|
self.tableWidget.insertRow(row_count)
|
||||||
self.tableWidget.setItem(row_count,0,DepName)
|
|
||||||
self.tableWidget.setItem(row_count,1,SchemaName)
|
itemIcon = QTableWidgetItem()
|
||||||
self.tableWidget.setItem(row_count,2,TableName)
|
icon = QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconVecteur.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||||
|
itemIcon.setIcon(icon)
|
||||||
|
|
||||||
|
self.tableWidget.setItem(row_count, 0, itemIcon)
|
||||||
|
self.tableWidget.setItem(row_count, 1, DepName)
|
||||||
|
self.tableWidget.setItem(row_count, 2, SchemaName)
|
||||||
|
self.tableWidget.setItem(row_count, 3, TableName)
|
||||||
if TableSomme == 0:
|
if TableSomme == 0:
|
||||||
for j in range(self.tableWidget.columnCount()):
|
for j in range(self.tableWidget.columnCount()):
|
||||||
self.tableWidget.item(row_count, j).setBackground(QtGui.QColor(246, 185, 73,50))
|
self.tableWidget.item(row_count, j).setBackground(QtGui.QColor(246, 185, 73, 50))
|
||||||
self.tableWidget.item(row_count,j).setToolTip('Couche dans une autre BD !')
|
self.tableWidget.item(row_count, j).setToolTip('Couche dans une autre BD !')
|
||||||
row_count = row_count+1
|
row_count = row_count + 1
|
||||||
if self.lineEdit.text() != 'Recherche par mots-clés':
|
if self.lineEdit.text() != 'Recherche par mots-clés':
|
||||||
self.filtre_dynamique(self.lineEdit.text())
|
self.filtre_dynamique(self.lineEdit.text())
|
||||||
|
|
||||||
def SwitchGeom(self,vargeom):
|
def SwitchGeom(self, vargeom):
|
||||||
new_object = '['
|
new_object = '['
|
||||||
obj = vargeom['coordinates'][0][0]
|
obj = vargeom['coordinates'][0][0]
|
||||||
for obj_X in obj:
|
for obj_X in obj:
|
||||||
new_object = new_object+'['+str(obj_X[1])+','+str(obj_X[0])+'],'
|
new_object = new_object + '[' + str(obj_X[1]) + ',' + str(obj_X[0]) + '],'
|
||||||
new_object = new_object[:-1]+']'
|
new_object = new_object[:-1] + ']'
|
||||||
return(new_object)
|
return (new_object)
|
||||||
|
|
||||||
def popup(self):
|
# def popup(self):
|
||||||
|
# self.dialog = Popup() # +++ - self
|
||||||
self.dialog = Popup() # +++ - self
|
# self.dialog.text_edit.show()
|
||||||
self.dialog.text_edit.show()
|
|
||||||
|
|||||||
+25
-43
@@ -1,54 +1,31 @@
|
|||||||
import os
|
import os
|
||||||
plugin_dir = os.path.dirname(__file__)
|
# from qgis.gui import *
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
|
||||||
|
|
||||||
NAME = plugin_dir[end_find:]
|
from qgis.core import QgsSettings
|
||||||
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
from qgis.gui import *
|
|
||||||
|
|
||||||
from qgis.core import (
|
|
||||||
NULL,
|
|
||||||
QgsApplication,
|
|
||||||
QgsDataSourceUri,
|
|
||||||
QgsProject,
|
|
||||||
QgsProviderConnectionException,
|
|
||||||
QgsProviderRegistry,
|
|
||||||
QgsRasterLayer,
|
|
||||||
QgsSettings,
|
|
||||||
QgsVectorLayer,
|
|
||||||
QgsGeometry,
|
|
||||||
)
|
|
||||||
from qgis.PyQt.QtWidgets import (
|
|
||||||
QDialog,
|
|
||||||
QAction,
|
|
||||||
QDockWidget,
|
|
||||||
QFileDialog,
|
|
||||||
QInputDialog,
|
|
||||||
QMenu,
|
|
||||||
QToolButton,
|
|
||||||
QTableWidget,
|
|
||||||
QTableWidgetItem,
|
|
||||||
)
|
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
|
plugin_dir = os.path.dirname(__file__)
|
||||||
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
|
|
||||||
|
NAME = plugin_dir[end_find:]
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
||||||
|
|
||||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
|
|
||||||
#place connect here
|
# place connect here
|
||||||
self.annuler_button.clicked.connect(self.close)
|
self.annuler_button.clicked.connect(self.close)
|
||||||
self.ok_button.clicked.connect(self.run_sendissues)
|
self.ok_button.clicked.connect(self.run_sendissues)
|
||||||
|
|
||||||
@@ -62,27 +39,32 @@ class CenRa_Issues(QDialog, EDITOR_CLASS):
|
|||||||
statu_autre = self.check_autre.isChecked()
|
statu_autre = self.check_autre.isChecked()
|
||||||
|
|
||||||
statu = []
|
statu = []
|
||||||
if statu_bug == True : statu = statu + [1]
|
if statu_bug is True:
|
||||||
if statu_aide == True : statu = statu + [3]
|
statu = statu + [1]
|
||||||
if statu_question == True : statu = statu + [5]
|
if statu_aide is True:
|
||||||
if statu_amelioration == True : statu = statu + [2]
|
statu = statu + [3]
|
||||||
if statu_autre == True : statu = statu + [6]
|
if statu_question is True:
|
||||||
|
statu = statu + [5]
|
||||||
|
if statu_amelioration is True:
|
||||||
|
statu = statu + [2]
|
||||||
|
if statu_autre is True:
|
||||||
|
statu = statu + [6]
|
||||||
|
|
||||||
if len(statu) >= 1:
|
if len(statu) >= 1:
|
||||||
import qgis
|
import qgis
|
||||||
url = qgis.utils.pluginMetadata(NAME,'tracker')
|
url = qgis.utils.pluginMetadata(NAME, 'tracker')
|
||||||
print(text_message)
|
print(text_message)
|
||||||
send_info = send_issues(url,text_titre,text_message,statu)
|
send_info = send_issues(url, text_titre, text_message, statu)
|
||||||
code = send_info.status_code
|
code = send_info.status_code
|
||||||
print(code)
|
print(code)
|
||||||
else:
|
else:
|
||||||
code = 423
|
code = 423
|
||||||
if code == 201:
|
if code == 201:
|
||||||
iface.messageBar().pushMessage("Envoyer :", "Votre messages à bien été envoyer.", level=Qgis.Success, duration=20)
|
iface.messageBar().pushMessage("Envoyer :", "Votre messages à bien été envoyer.", level=0, duration=20)
|
||||||
self.close()
|
self.close()
|
||||||
elif code == 422:
|
elif code == 422:
|
||||||
iface.messageBar().pushMessage("Erreur :", "Erreur dans le contenu du messages.", level=Qgis.Critical, duration=20)
|
iface.messageBar().pushMessage("Erreur :", "Erreur dans le contenu du messages.", level=2, duration=20)
|
||||||
elif code == 423:
|
elif code == 423:
|
||||||
iface.messageBar().pushMessage("Erreur :", "Pas de sujet sélectionné.", level=Qgis.Critical, duration=20)
|
iface.messageBar().pushMessage("Erreur :", "Pas de sujet sélectionné.", level=2, duration=20)
|
||||||
elif code == 404:
|
elif code == 404:
|
||||||
iface.messageBar().pushMessage("Missing :", "Le serveur de messagerie est injoignable.", level=Qgis.Warning, duration=20)
|
iface.messageBar().pushMessage("Missing :", "Le serveur de messagerie est injoignable.", level=1, duration=20)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ name=CenRa_FLUX
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=Permet d'ouvrire une table dans la base PostGis
|
description=Permet d'ouvrire une table dans la base PostGis
|
||||||
version=3.1
|
version=3.7
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -19,7 +19,6 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
# changelog= correctif de sécurité: envoi du certificat d'authentification seulement pour les couches fonciercen et drone / intégration des styles RPG geoportail / modification des noms de couches pour plus de clarté
|
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=cenra, postgis, database
|
tags=cenra, postgis, database
|
||||||
@@ -33,7 +32,7 @@ icon=icon.png
|
|||||||
# experimental flag
|
# experimental flag
|
||||||
experimental=False
|
experimental=False
|
||||||
|
|
||||||
changelog=<h2>CenRa_FLUX:</h2></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>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 flag (applies to the whole plugin, not just a single version)
|
||||||
deprecated=False
|
deprecated=False
|
||||||
@@ -46,4 +45,3 @@ deprecated=False
|
|||||||
|
|
||||||
# If the plugin can run on QGIS Server.
|
# If the plugin can run on QGIS Server.
|
||||||
server=False
|
server=False
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
|
|
||||||
|
|
||||||
def gitea():
|
def gitea():
|
||||||
file_url = QgsApplication.qgisSettingsDirPath()+'QGIS/QGIS3.ini'
|
file_url = QgsApplication.qgisSettingsDirPath() + 'QGIS/QGIS3.ini'
|
||||||
recherche_1 = 'plugin_repositories\\github\\url=https://github.com/CEN-Rhone-Alpes/Plugin_QGIS/releases/latest/download/plugins.xml'
|
recherche_1 = 'plugin_repositories\\github\\url=https://github.com/CEN-Rhone-Alpes/Plugin_QGIS/releases/latest/download/plugins.xml'
|
||||||
replace_1 = 'plugin_repositories\\gitea\\url=https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
replace_1 = 'plugin_repositories\\gitea\\url=https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
|
|
||||||
schemaname_distinct="""SELECT DISTINCT schemaname from pg_catalog.pg_tables
|
schemaname_distinct = """SELECT DISTINCT schemaname from pg_catalog.pg_tables
|
||||||
WHERE schemaname NOT LIKE '_archives' AND schemaname NOT LIKE 'topology' AND schemaname NOT LIKE 'information_schema' AND schemaname NOT LIKE 'pg_catalog' and schemaname NOT LIKE 'public' AND schemaname NOT LIKE '_trier'
|
WHERE schemaname NOT LIKE '_archives' AND schemaname NOT LIKE 'topology' AND schemaname NOT LIKE 'information_schema' AND schemaname NOT LIKE 'pg_catalog' and schemaname NOT LIKE 'public' AND schemaname NOT LIKE '_trier'
|
||||||
order by schemaname;"""
|
order by schemaname;"""
|
||||||
schemaname_list_ref="""SELECT schemaname,tablename from pg_catalog.pg_tables
|
schemaname_list_ref = """SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||||
WHERE schemaname NOT LIKE '_archives' AND schemaname NOT LIKE 'topology' AND schemaname NOT LIKE 'information_schema' AND schemaname NOT LIKE 'pg_catalog' and schemaname NOT LIKE 'public' AND schemaname NOT LIKE '_trier'
|
WHERE schemaname NOT LIKE '_archives' AND schemaname NOT LIKE 'topology' AND schemaname NOT LIKE 'information_schema' AND schemaname NOT LIKE 'pg_catalog' and schemaname NOT LIKE 'public' AND schemaname NOT LIKE '_trier'
|
||||||
order by schemaname,tablename;"""
|
order by schemaname,tablename;"""
|
||||||
schemaname_list="""(SELECT schemaname,tablename from pg_catalog.pg_tables
|
schemaname_list = """(SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||||
where schemaname like 'trav%' or schemaname like '\_ag%' or schemaname like '\_00%' or schemaname like '\_01%' or schemaname like '\_07%' or schemaname like '\_26%' or schemaname like '\_form%' or schemaname like '\_42%' or schemaname like '\_69%' order by schemaname,tablename)
|
where schemaname like 'trav%' or schemaname like '\\_ag%' or schemaname like '\\_00%' or schemaname like '\\_01%' or schemaname like '\\_07%' or schemaname like '\\_26%' or schemaname like '\\_form%' or schemaname like '\\_42%' or schemaname like '\\_69%' order by schemaname,tablename)
|
||||||
UNION
|
UNION
|
||||||
(SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews order by schemaname,tablename) order by schemaname,tablename;"""
|
(SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews order by schemaname,tablename) order by schemaname,tablename;"""
|
||||||
geom = "geom"
|
geom = "geom"
|
||||||
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
champ_travaux_prevus_multipolygon = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
||||||
champ_travaux_prevus_multilinestring="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))"""
|
champ_travaux_prevus_multilinestring = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))"""
|
||||||
champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))"""
|
champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))"""
|
||||||
|
|
||||||
champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))"""
|
champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))"""
|
||||||
@@ -20,7 +20,7 @@ champ_viergePoint = """(gid serial NOT NULL, commentaire text, x_wgs84 double pr
|
|||||||
|
|
||||||
champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
||||||
|
|
||||||
champ_contour="""(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154))
|
champ_contour = """(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
champ_vegethab_point = """(
|
champ_vegethab_point = """(
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
||||||
|
<polygon fill="#EE7913" points="68.613,69.625 86.891,69.625 71.697,54.625 52.613,54.625 52.613,72.746 68.613,88.548 "/>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="402.5244" y1="-220.8706" x2="400.6479" y2="-97.5023" gradientTransform="matrix(1 0 0 -1 -300.5195 -92.5547)">
|
||||||
|
<stop offset="0" style="stop-color:#589632"/>
|
||||||
|
<stop offset="1" style="stop-color:#93B023"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon fill="url(#SVGID_1_)" points="126.613,109.057 94.488,77.625 76.613,77.625 76.613,96.033 107.143,126.625
|
||||||
|
126.613,126.625 "/>
|
||||||
|
<polygon fill="#F0E64A" points="76.613,77.625 94.488,77.625 86.891,69.625 68.613,69.625 68.613,88.548 76.613,96.033 "/>
|
||||||
|
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="365.4619" y1="-221.1455" x2="363.5923" y2="-98.227" gradientTransform="matrix(1 0 0 -1 -300.5195 -92.5547)">
|
||||||
|
<stop offset="0" style="stop-color:#589632"/>
|
||||||
|
<stop offset="1" style="stop-color:#93B023"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_2_)" d="M68.923,101.552c-1.165,0.242-1.769,0.157-4.685,0.157c-20.866,0-38.612-17.158-38.612-39.406
|
||||||
|
c0-22.248,17.551-39.027,38.612-39.027s37.833,16.78,37.833,39.027c0,3.619-0.451,7.099-1.284,10.398L120.1,92.012
|
||||||
|
c4.979-8.726,7.765-18.869,7.765-29.857c0-34.289-27.363-59.963-64.016-59.963C27.363,2.191,0,27.696,0,62.154
|
||||||
|
c0,34.625,27.363,60.638,63.848,60.638c9.417,0,16.069-1.469,23.042-3.761L68.923,101.552z"/>
|
||||||
|
<polygon opacity="0.15" fill="#FFFFFF" enable-background="new " points="53.083,54.625 71.697,54.625 126.613,109.057
|
||||||
|
126.613,126.625 "/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
@@ -77,15 +77,17 @@ def plugin_test_data_path(*args, copy=False):
|
|||||||
else:
|
else:
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def pyperclip():
|
def pyperclip():
|
||||||
dst = dirname(dirname(__file__))+"\\tools\\"
|
dst = dirname(dirname(__file__)) + "\\tools\\"
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
||||||
try:
|
try:
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
except:
|
except NameError:
|
||||||
print('404')
|
print('404')
|
||||||
|
|
||||||
|
|
||||||
def resources_path(*args):
|
def resources_path(*args):
|
||||||
"""Get the path to our resources folder.
|
"""Get the path to our resources folder.
|
||||||
|
|
||||||
@@ -112,62 +114,65 @@ def load_ui(*args):
|
|||||||
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
def send_issues(url,titre,body,labels):
|
|
||||||
|
|
||||||
|
def send_issues(url, titre, body, labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
import os
|
# import os
|
||||||
import qgis
|
# import qgis
|
||||||
|
|
||||||
usr = os.environ['USERNAME']
|
# usr = os.environ['USERNAME']
|
||||||
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
||||||
url=url+'?token='+token
|
url = url + '?token=' + token
|
||||||
|
|
||||||
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
|
||||||
|
|
||||||
|
headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'}
|
||||||
|
|
||||||
payload = {'title': titre, 'body': body, 'labels': labels}
|
payload = {'title': titre, 'body': body, 'labels': labels}
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except NameError:
|
||||||
binar = False
|
binar = False
|
||||||
r = ''
|
r = ''
|
||||||
if binar:
|
if binar:
|
||||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def maj_verif(NAME):
|
def maj_verif(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
import urllib.request
|
import urllib.request
|
||||||
iface = qgis.utils.iface
|
iface = qgis.utils.iface
|
||||||
from qgis.core import Qgis
|
from qgis.core import Qgis
|
||||||
|
|
||||||
url = qgis.utils.pluginMetadata(NAME,'repository')
|
# url = qgis.utils.pluginMetadata(NAME, 'repository')
|
||||||
#URL = url+'/raw/branch/main/plugins.xml'
|
# URL = url+'/raw/branch/main/plugins.xml'
|
||||||
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||||
# print(URL)
|
# print(URL)
|
||||||
version = qgis.utils.pluginMetadata(NAME,'version')
|
version = qgis.utils.pluginMetadata(NAME, 'version')
|
||||||
len_version = len(version)
|
len_version = len(version)
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except NameError:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
try:
|
try:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
plugin_num = version_web.find(NAME)
|
plugin_num = version_web.find(NAME)
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
valeur_version_web = version_web.find('<version>', plugin_num) + 9
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
version_plugin = version_web[valeur_version_web: valeur_version_web + len_version]
|
||||||
if version_plugin != version:
|
if version_plugin != version:
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
except:
|
except NameError:
|
||||||
print("error gitea version ssl")
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||||
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog')
|
||||||
return devmaj
|
return devmaj
|
||||||
@@ -4,14 +4,13 @@ __email__ = "info@3liz.org"
|
|||||||
|
|
||||||
|
|
||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
from qgis.PyQt.QtCore import Qt, QUrl, QSettings
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
from qgis.PyQt.QtWidgets import QAction
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
|
|
||||||
|
# include <QSettings>
|
||||||
#include <QSettings>
|
|
||||||
'''
|
'''
|
||||||
from pg_metadata.connection_manager import (
|
from pg_metadata.connection_manager import (
|
||||||
store_connections,
|
store_connections,
|
||||||
@@ -24,8 +23,9 @@ from pg_metadata.processing.provider import PgMetadataProvider
|
|||||||
from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
||||||
'''
|
'''
|
||||||
import os
|
import os
|
||||||
|
from .about_form import MetabaseAboutDialog
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
# plugin_path,
|
||||||
pyperclip,
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
@@ -33,10 +33,8 @@ from .tools.resources import (
|
|||||||
pyperclip()
|
pyperclip()
|
||||||
from .dock import CenRa_Metabase
|
from .dock import CenRa_Metabase
|
||||||
from .editor import Metabase_Editor
|
from .editor import Metabase_Editor
|
||||||
from .about_form import MetabaseAboutDialog
|
|
||||||
#from CenRa_Metabase.issues import CenRa_Issues
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
# from CenRa_Metabase.issues import CenRa_Issues
|
||||||
|
|
||||||
|
|
||||||
class PgMetadata:
|
class PgMetadata:
|
||||||
@@ -50,42 +48,42 @@ class PgMetadata:
|
|||||||
self.dock_action = None
|
self.dock_action = None
|
||||||
self.help_action = None
|
self.help_action = None
|
||||||
plugin_dir = os.path.dirname(__file__)
|
plugin_dir = os.path.dirname(__file__)
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
global NAME
|
global NAME
|
||||||
NAME = plugin_dir[end_find:]
|
NAME = plugin_dir[end_find:]
|
||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_METABASE','version')
|
version = qgis.utils.pluginMetadata('CenRa_METABASE', 'version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("metadata/version", 1, type=str)
|
versionUse = s.value("metadata/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version):
|
||||||
s.setValue("metadata/version", str(version))
|
s.setValue("metadata/version", str(version))
|
||||||
print(versionUse,version)
|
print(versionUse, version)
|
||||||
self.open_about_dialog()
|
self.open_about_dialog()
|
||||||
# setup_logger('pg_metadata')
|
# setup_logger('pg_metadata')
|
||||||
|
|
||||||
#locale, file_path = setup_translation(
|
# locale, file_path = setup_translation(
|
||||||
# folder=plugin_path("i18n"), file_pattern="CenRa_Metabase_{}.qm")
|
# folder=plugin_path("i18n"), file_pattern="CenRa_Metabase_{}.qm")
|
||||||
#if file_path:
|
# if file_path:
|
||||||
# self.translator = QTranslator()
|
# self.translator = QTranslator()
|
||||||
# self.translator.load(file_path)
|
# self.translator.load(file_path)
|
||||||
# noinspection PyCallByClass,PyArgumentList
|
# noinspection PyCallByClass,PyArgumentList
|
||||||
# QCoreApplication.installTranslator(self.translator)
|
# QCoreApplication.installTranslator(self.translator)
|
||||||
|
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
#def initProcessing(self):
|
# def initProcessing(self):
|
||||||
#""" Add the QGIS Processing provider. """
|
# """ Add the QGIS Processing provider. """
|
||||||
#if not self.provider:
|
# if not self.provider:
|
||||||
#self.provider = PgMetadataProvider()
|
# self.provider = PgMetadataProvider()
|
||||||
#QgsApplication.processingRegistry().addProvider(self.provider)
|
# QgsApplication.processingRegistry().addProvider(self.provider)
|
||||||
|
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
def initGui(self):
|
def initGui(self):
|
||||||
""" Build the plugin GUI. """
|
""" Build the plugin GUI. """
|
||||||
#self.initProcessing()
|
# self.initProcessing()
|
||||||
|
|
||||||
#self.check_invalid_connection_names()
|
# self.check_invalid_connection_names()
|
||||||
|
|
||||||
self.toolBar = iface.addToolBar("CenRa_Metabase")
|
self.toolBar = iface.addToolBar("CenRa_Metabase")
|
||||||
self.toolBar.setObjectName("CenRa_Metabase")
|
self.toolBar.setObjectName("CenRa_Metabase")
|
||||||
@@ -100,8 +98,7 @@ class PgMetadata:
|
|||||||
if not self.editor:
|
if not self.editor:
|
||||||
self.editor = Metabase_Editor()
|
self.editor = Metabase_Editor()
|
||||||
|
|
||||||
|
self.editor_action = QAction(icon2, 'CenRa_Metabase', None)
|
||||||
self.editor_action = QAction(icon2, 'CenRa_Metabase',None)
|
|
||||||
self.toolBar.addAction(self.editor_action)
|
self.toolBar.addAction(self.editor_action)
|
||||||
self.editor_action.triggered.connect(self.open_editor)
|
self.editor_action.triggered.connect(self.open_editor)
|
||||||
|
|
||||||
@@ -159,6 +156,7 @@ class PgMetadata:
|
|||||||
"""
|
"""
|
||||||
dialog = MetabaseAboutDialog(iface)
|
dialog = MetabaseAboutDialog(iface)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||||
@@ -178,9 +176,9 @@ class PgMetadata:
|
|||||||
|
|
||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
#if self.editor:
|
# if self.editor:
|
||||||
#iface.removePluginMenu('CenRa_Metabase',self.editor_action)
|
# iface.removePluginMenu('CenRa_Metabase',self.editor_action)
|
||||||
#self.editor.removeToolBarIcon(self.editor_action)
|
# self.editor.removeToolBarIcon(self.editor_action)
|
||||||
|
|
||||||
if self.dock:
|
if self.dock:
|
||||||
iface.removeDockWidget(self.dock)
|
iface.removeDockWidget(self.dock)
|
||||||
@@ -202,7 +200,6 @@ class PgMetadata:
|
|||||||
iface.pluginMenu().removeAction(self.dock_action)
|
iface.pluginMenu().removeAction(self.dock_action)
|
||||||
del self.dock_action
|
del self.dock_action
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_tests(pattern='test_*.py', package=None):
|
def run_tests(pattern='test_*.py', package=None):
|
||||||
"""Run the test inside QGIS."""
|
"""Run the test inside QGIS."""
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os.path
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
from qgis.PyQt.QtGui import QPixmap
|
# from qgis.PyQt.QtGui import QPixmap
|
||||||
from qgis.PyQt.QtWidgets import QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
|
|
||||||
from .tools.resources import devlog
|
from .tools.resources import devlog
|
||||||
@@ -16,6 +16,7 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class MetabaseAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class MetabaseAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|||||||
+63
-108
@@ -14,48 +14,31 @@ from pathlib import Path
|
|||||||
from xml.dom.minidom import parseString
|
from xml.dom.minidom import parseString
|
||||||
|
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
NULL,
|
|
||||||
QgsApplication,
|
QgsApplication,
|
||||||
QgsDataSourceUri,
|
|
||||||
QgsProject,
|
|
||||||
QgsProviderConnectionException,
|
|
||||||
QgsProviderRegistry,
|
QgsProviderRegistry,
|
||||||
QgsRasterLayer,
|
|
||||||
QgsSettings,
|
QgsSettings,
|
||||||
QgsVectorLayer,
|
|
||||||
)
|
)
|
||||||
from qgis.PyQt.QtCore import QLocale, QUrl
|
from qgis.PyQt.QtCore import QLocale, QUrl
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtPrintSupport import QPrinter
|
from qgis.PyQt.QtPrintSupport import QPrinter
|
||||||
#from qgis.PyQt.QtWebKitWidgets import QWebPage
|
# from qgis.PyQt.QtWebKitWidgets import QWebPage
|
||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
|
||||||
QAction,
|
QAction,
|
||||||
QDockWidget,
|
QDockWidget,
|
||||||
QFileDialog,
|
QFileDialog,
|
||||||
QInputDialog,
|
|
||||||
QMenu,
|
QMenu,
|
||||||
QToolButton,
|
QToolButton,
|
||||||
)
|
)
|
||||||
from qgis.gui import *
|
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
'''
|
|
||||||
from pg_metadata.connection_manager import (
|
|
||||||
check_pgmetadata_is_installed,
|
|
||||||
connections_list,
|
|
||||||
settings_connections_names,
|
|
||||||
)
|
|
||||||
'''
|
|
||||||
try:
|
|
||||||
from .tools.PythonSQL import login_base
|
|
||||||
except:
|
|
||||||
print('Pas de fichier PythonSQL')
|
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
from .tools.PythonSQL import login_base
|
||||||
|
except ValueError:
|
||||||
|
print('Pas de fichier PythonSQL')
|
||||||
|
|
||||||
DOCK_CLASS = load_ui('CenRa_Metabase_dockwidget_base.ui')
|
DOCK_CLASS = load_ui('CenRa_Metabase_dockwidget_base.ui')
|
||||||
LOGGER = logging.getLogger('CenRa_Metabase')
|
LOGGER = logging.getLogger('CenRa_Metabase')
|
||||||
@@ -84,8 +67,8 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
self.current_datasource_uri = None
|
self.current_datasource_uri = None
|
||||||
self.current_connection = None
|
self.current_connection = None
|
||||||
|
|
||||||
#self.viewer.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
|
# self.viewer.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
|
||||||
#self.viewer.page().linkClicked.connect(self.open_link)
|
# self.viewer.page().linkClicked.connect(self.open_link)
|
||||||
|
|
||||||
# Help button
|
# Help button
|
||||||
self.external_help.setText('')
|
self.external_help.setText('')
|
||||||
@@ -94,13 +77,13 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
|
|
||||||
# Flat table button
|
# Flat table button
|
||||||
self.flatten_dataset_table.setText('')
|
self.flatten_dataset_table.setText('')
|
||||||
#self.flatten_dataset_table.setToolTip(tr("Add the catalog table"))
|
# self.flatten_dataset_table.setToolTip(tr("Add the catalog table"))
|
||||||
self.flatten_dataset_table.setIcon(QgsApplication.getThemeIcon("/mActionAddHtml.svg"))
|
self.flatten_dataset_table.setIcon(QgsApplication.getThemeIcon("/mActionAddHtml.svg"))
|
||||||
#self.flatten_dataset_table.clicked.connect(self.add_flatten_dataset_table)
|
# self.flatten_dataset_table.clicked.connect(self.add_flatten_dataset_table)
|
||||||
|
|
||||||
# Settings menu
|
# Settings menu
|
||||||
self.config.setAutoRaise(True)
|
self.config.setAutoRaise(True)
|
||||||
#self.config.setToolTip(tr("Settings"))
|
# self.config.setToolTip(tr("Settings"))
|
||||||
self.config.setPopupMode(QToolButton.ToolButtonPopupMode(2))
|
self.config.setPopupMode(QToolButton.ToolButtonPopupMode(2))
|
||||||
self.config.setIcon(QgsApplication.getThemeIcon("/mActionOptions.svg"))
|
self.config.setIcon(QgsApplication.getThemeIcon("/mActionOptions.svg"))
|
||||||
|
|
||||||
@@ -118,7 +101,7 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
|
|
||||||
# Setting PDF/HTML menu
|
# Setting PDF/HTML menu
|
||||||
self.save_button.setAutoRaise(True)
|
self.save_button.setAutoRaise(True)
|
||||||
#self.save_button.setToolTip(tr("Save metadata"))
|
# self.save_button.setToolTip(tr("Save metadata"))
|
||||||
self.save_button.setPopupMode(QToolButton.ToolButtonPopupMode(2))
|
self.save_button.setPopupMode(QToolButton.ToolButtonPopupMode(2))
|
||||||
self.save_button.setIcon(QIcon(QgsApplication.iconPath('mActionFileSave.svg')))
|
self.save_button.setIcon(QIcon(QgsApplication.iconPath('mActionFileSave.svg')))
|
||||||
|
|
||||||
@@ -146,21 +129,21 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
self.metadata = QgsProviderRegistry.instance().providerMetadata('postgres')
|
self.metadata = QgsProviderRegistry.instance().providerMetadata('postgres')
|
||||||
|
|
||||||
# Display message in the dock
|
# Display message in the dock
|
||||||
#if not settings_connections_names():
|
# if not settings_connections_names():
|
||||||
#self.default_html_content_not_installed()
|
# self.default_html_content_not_installed()
|
||||||
#else:
|
# else:
|
||||||
self.default_html_content_not_pg_layer()
|
self.default_html_content_not_pg_layer()
|
||||||
|
iface.layerTreeView().currentLayerChanged.connect(self.layer_changed)
|
||||||
try:
|
try:
|
||||||
login_base()
|
login_base()
|
||||||
iface.layerTreeView().currentLayerChanged.connect(self.layer_changed)
|
iface.layerTreeView().currentLayerChanged.connect(self.layer_changed)
|
||||||
except:
|
except ValueError:
|
||||||
#qgis.utils.plugins['CenRa_METABASE'].initGui()
|
# qgis.utils.plugins['CenRa_METABASE'].initGui()
|
||||||
qgis.utils.plugins['CenRa_METABASE'].unload()
|
qgis.utils.plugins['CenRa_METABASE'].unload()
|
||||||
#self.default_html_content_not_pg_layer()
|
# self.default_html_content_not_pg_layer()
|
||||||
|
|
||||||
if iface.activeLayer():
|
if iface.activeLayer():
|
||||||
layer=iface.activeLayer()
|
layer = iface.activeLayer()
|
||||||
iface.layerTreeView().setCurrentLayer(None)
|
iface.layerTreeView().setCurrentLayer(None)
|
||||||
iface.layerTreeView().setCurrentLayer(layer)
|
iface.layerTreeView().setCurrentLayer(layer)
|
||||||
|
|
||||||
@@ -192,7 +175,7 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
if output_format == OutputFormats.PDF:
|
if output_format == OutputFormats.PDF:
|
||||||
printer = QPrinter()
|
printer = QPrinter()
|
||||||
printer.setOutputFormat(QPrinter.OutputFormat(1))
|
printer.setOutputFormat(QPrinter.OutputFormat(1))
|
||||||
#printer.setPageMargins(20,20,20,20,QPrinter.Unit(0))
|
# printer.setPageMargins(20,20,20,20,QPrinter.Unit(0))
|
||||||
printer.setOutputFileName(output_file_path)
|
printer.setOutputFileName(output_file_path)
|
||||||
self.viewer.print(printer)
|
self.viewer.print(printer)
|
||||||
iface.messageBar().pushSuccess(
|
iface.messageBar().pushSuccess(
|
||||||
@@ -202,7 +185,7 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
"<a href=\"{}\">{}</a>").format(parent_folder, output_file_path)
|
"<a href=\"{}\">{}</a>").format(parent_folder, output_file_path)
|
||||||
)
|
)
|
||||||
|
|
||||||
elif output_format in [OutputFormats.HTML,OutputFormats.DCAT]:
|
elif output_format in [OutputFormats.HTML, OutputFormats.DCAT]:
|
||||||
if output_format == OutputFormats.HTML:
|
if output_format == OutputFormats.HTML:
|
||||||
data_str = self.viewer.page().currentFrame().toHtml()
|
data_str = self.viewer.page().currentFrame().toHtml()
|
||||||
else:
|
else:
|
||||||
@@ -231,43 +214,15 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
def save_auto_open_dock(self):
|
def save_auto_open_dock(self):
|
||||||
""" Save settings about the dock. """
|
""" Save settings about the dock. """
|
||||||
self.settings.setValue("pgmetadata/auto_open_dock", self.auto_open_dock_action.isChecked())
|
self.settings.setValue("pgmetadata/auto_open_dock", self.auto_open_dock_action.isChecked())
|
||||||
def sql_to_xml(self,dataall):
|
|
||||||
distribution=''
|
def sql_to_xml(self, dataall):
|
||||||
|
distribution = ''
|
||||||
for y in dataall[1]:
|
for y in dataall[1]:
|
||||||
distribution = distribution + (
|
distribution = distribution + ('<dcat:distribution>' + '<dcat:Distribution>' + '<dct:title>{data}</dct:title>'.format(data=y[0]) + '<dcat:downloadURL>{data}</dcat:downloadURL>'.format(data=y[1]) + '<dcat:mediaType>{data}</dcat:mediaType>'.format(data=y[2]) + '<dct:format>{data}</dct:format>'.format(data=y[3]) + '<dct:bytesize>{data}</dct:bytesize>'.format(data=y[4]) + '</dcat:Distribution>' + '</dcat:distribution>')
|
||||||
'<dcat:distribution>'+
|
publisher = ''
|
||||||
'<dcat:Distribution>'+
|
|
||||||
'<dct:title>{data}</dct:title>'.format(data=y[0])+
|
|
||||||
'<dcat:downloadURL>{data}</dcat:downloadURL>'.format(data=y[1])+
|
|
||||||
'<dcat:mediaType>{data}</dcat:mediaType>'.format(data=y[2])+
|
|
||||||
'<dct:format>{data}</dct:format>'.format(data=y[3])+
|
|
||||||
'<dct:bytesize>{data}</dct:bytesize>'.format(data=y[4])+
|
|
||||||
'</dcat:Distribution>'+
|
|
||||||
'</dcat:distribution>')
|
|
||||||
publisher=''
|
|
||||||
for z in dataall[2]:
|
for z in dataall[2]:
|
||||||
publisher = publisher + (
|
publisher = publisher + ('<dct:publisher>' + '<foaf:Organization>' + '<foaf:name>{data}</foaf:name>'.format(data=z[1]) + '<foaf:mbox>{data}</foaf:mbox>'.format(data=z[3]) + '</foaf:Organization>' + '</dct:publisher>')
|
||||||
'<dct:publisher>'+
|
data_str = [[dataall[0][26], '<dct:identifier>{data}</dct:identifier>'.format(data=dataall[0][1]) + '<dct:title>{data}</dct:title>'.format(data=dataall[0][4]) + '<dct:description>{data}</dct:description>'.format(data=dataall[0][5]) + '<dct:language>{data}</dct:language>'.format(data=dataall[0][26]) + '<dct:spatial>{data}</dct:spatial>'.format(data=dataall[0][28]) + '<dct:created rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">{data}</dct:created>'.format(data=dataall[0][20]) + '<dct:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">{data}</dct:issued>'.format(data=dataall[0][11]) + '<dct:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">{data}</dct:modified>'.format(data=dataall[0][21]) + '<dct:license>{data}</dct:license>'.format(data=dataall[0][13]) + distribution + publisher + '<dcat:theme>{data}</dcat:theme>'.format(data=", ".join(str(x) for x in dataall[0][24])) + '<dcat:keyword>{data}</dcat:keyword>'.format(data=", ".join(str(x) for x in dataall[0][6])) + '<dct:accrualPeriodicity>{data}</dct:accrualPeriodicity>'.format(data=dataall[0][12])]]
|
||||||
'<foaf:Organization>'+
|
|
||||||
'<foaf:name>{data}</foaf:name>'.format(data=z[1])+
|
|
||||||
'<foaf:mbox>{data}</foaf:mbox>'.format(data=z[3])+
|
|
||||||
'</foaf:Organization>'+
|
|
||||||
'</dct:publisher>')
|
|
||||||
data_str = [[dataall[0][26],
|
|
||||||
'<dct:identifier>{data}</dct:identifier>'.format(data=dataall[0][1])+
|
|
||||||
'<dct:title>{data}</dct:title>'.format(data=dataall[0][4])+
|
|
||||||
'<dct:description>{data}</dct:description>'.format(data=dataall[0][5])+
|
|
||||||
'<dct:language>{data}</dct:language>'.format(data=dataall[0][26])+
|
|
||||||
'<dct:spatial>{data}</dct:spatial>'.format(data=dataall[0][28])+
|
|
||||||
'<dct:created rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">{data}</dct:created>'.format(data=dataall[0][20])+
|
|
||||||
'<dct:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">{data}</dct:issued>'.format(data=dataall[0][11])+
|
|
||||||
'<dct:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">{data}</dct:modified>'.format(data=dataall[0][21])+
|
|
||||||
'<dct:license>{data}</dct:license>'.format(data=dataall[0][13])+
|
|
||||||
distribution+
|
|
||||||
publisher+
|
|
||||||
'<dcat:theme>{data}</dcat:theme>'.format(data=", ".join(str(x) for x in dataall[0][24]))+
|
|
||||||
'<dcat:keyword>{data}</dcat:keyword>'.format(data=", ".join(str(x) for x in dataall[0][6]))+
|
|
||||||
'<dct:accrualPeriodicity>{data}</dct:accrualPeriodicity>'.format(data=dataall[0][12])]]
|
|
||||||
|
|
||||||
return data_str
|
return data_str
|
||||||
|
|
||||||
@@ -277,7 +232,7 @@ publisher+
|
|||||||
locale = QgsSettings().value("locale/userLocale", QLocale().name())
|
locale = QgsSettings().value("locale/userLocale", QLocale().name())
|
||||||
locale = locale.split('_')[0].lower()
|
locale = locale.split('_')[0].lower()
|
||||||
|
|
||||||
if output_format == [OutputFormats.HTML,OutputFormats.DCAT]:
|
if output_format == [OutputFormats.HTML, OutputFormats.DCAT]:
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT pgmetadata.get_dataset_item_html_content('{schema}', '{table}', '{locale}');"
|
"SELECT pgmetadata.get_dataset_item_html_content('{schema}', '{table}', '{locale}');"
|
||||||
).format(schema=uri.schema(), table=uri.table(), locale=locale)
|
).format(schema=uri.schema(), table=uri.table(), locale=locale)
|
||||||
@@ -292,7 +247,6 @@ publisher+
|
|||||||
self.current_connection = None
|
self.current_connection = None
|
||||||
self.ce_trouve_dans_psql(layer)
|
self.ce_trouve_dans_psql(layer)
|
||||||
|
|
||||||
|
|
||||||
def add_flatten_dataset_table(self):
|
def add_flatten_dataset_table(self):
|
||||||
""" Add a flatten dataset table with all links and contacts. """
|
""" Add a flatten dataset table with all links and contacts. """
|
||||||
'''
|
'''
|
||||||
@@ -337,17 +291,17 @@ publisher+
|
|||||||
|
|
||||||
def set_html_content(self, title=None, body=None):
|
def set_html_content(self, title=None, body=None):
|
||||||
""" Set the content in the dock. """
|
""" Set the content in the dock. """
|
||||||
#link_logo=resources_path('icons', 'CEN_RA.png')
|
# ink_logo=resources_path('icons', 'CEN_RA.png')
|
||||||
css_file = resources_path('css', 'dock.css')
|
css_file = resources_path('css', 'dock.css')
|
||||||
with open(css_file, 'r', encoding='utf8') as f:
|
with open(css_file, 'r', encoding='utf8') as f:
|
||||||
css = f.read()
|
css = f.read()
|
||||||
|
|
||||||
html = '<html><head>'
|
html = '<html><head>'
|
||||||
#html += '<script src="http://ignf.github.io/geoportal-sdk/latest/dist/2d/GpSDK2D.js" defer ></script>'
|
# html += '<script src="http://ignf.github.io/geoportal-sdk/latest/dist/2d/GpSDK2D.js" defer ></script>'
|
||||||
html += '<style>{css}</style></head><body>'.format(css=css)
|
html += '<style>{css}</style></head><body>'.format(css=css)
|
||||||
#html += '<link rel="stylesheet" href="http://ignf.github.io/geoportal-sdk/latest/dist/2d/GpSDK2D.css" >'
|
# html += '<link rel="stylesheet" href="http://ignf.github.io/geoportal-sdk/latest/dist/2d/GpSDK2D.css" >'
|
||||||
#html += '<script src="file:///C:/Users/tlaveille/Desktop/maps.js" defer></script>'
|
# html += '<script src="file:///C:/Users/tlaveille/Desktop/maps.js" defer></script>'
|
||||||
#html += '<noscript>Your browser does not support JavaScript!</noscript>'
|
# html += '<noscript>Your browser does not support JavaScript!</noscript>'
|
||||||
if title:
|
if title:
|
||||||
html += '<h2>{title} <img class=logo src=https://i2.wp.com/www.cen-rhonealpes.fr/wp-content/uploads/2013/04/cen-rhonealpes-couleurs1.jpg?w=340&ssl=1></h2>'.format(title=title)
|
html += '<h2>{title} <img class=logo src=https://i2.wp.com/www.cen-rhonealpes.fr/wp-content/uploads/2013/04/cen-rhonealpes-couleurs1.jpg?w=340&ssl=1></h2>'.format(title=title)
|
||||||
if body:
|
if body:
|
||||||
@@ -356,16 +310,16 @@ publisher+
|
|||||||
html += '</body></html>'
|
html += '</body></html>'
|
||||||
|
|
||||||
# It must be a file, even if it does not exist on the file system.
|
# It must be a file, even if it does not exist on the file system.
|
||||||
base_url = QUrl.fromLocalFile(resources_path('images', 'must_be_a_file.png'))
|
# base_url = QUrl.fromLocalFile(resources_path('images', 'must_be_a_file.png'))
|
||||||
self.viewer.setHtml(html)#, base_url)
|
self.viewer.setHtml(html)
|
||||||
|
|
||||||
def ce_trouve_dans_psql(self,layer):
|
def ce_trouve_dans_psql(self, layer):
|
||||||
try:
|
try:
|
||||||
uri = layer.dataProvider().uri()
|
uri = layer.dataProvider().uri()
|
||||||
except:
|
except AttributeError:
|
||||||
self.default_html_content_not_pg_layer()
|
self.default_html_content_not_pg_layer()
|
||||||
self.save_button.setEnabled(False)
|
self.save_button.setEnabled(False)
|
||||||
uri=''
|
uri = ''
|
||||||
if uri != '':
|
if uri != '':
|
||||||
if not uri.table():
|
if not uri.table():
|
||||||
layertype = layer.providerType().lower()
|
layertype = layer.providerType().lower()
|
||||||
@@ -376,23 +330,23 @@ publisher+
|
|||||||
self.save_button.setEnabled(False)
|
self.save_button.setEnabled(False)
|
||||||
else:
|
else:
|
||||||
data_count = self.sql_check(uri)
|
data_count = self.sql_check(uri)
|
||||||
#print(data_count)
|
# print(data_count)
|
||||||
if data_count == 0:
|
if data_count == 0:
|
||||||
self.default_html_content_not_metadata()
|
self.default_html_content_not_metadata()
|
||||||
self.save_button.setEnabled(False)
|
self.save_button.setEnabled(False)
|
||||||
else:
|
else:
|
||||||
self.build_html_content(layer,uri)
|
self.build_html_content(layer, uri)
|
||||||
self.save_button.setEnabled(True)
|
self.save_button.setEnabled(True)
|
||||||
|
|
||||||
def build_html_content(self,layer,uri):
|
def build_html_content(self, layer, uri):
|
||||||
body = ''
|
body = ''
|
||||||
|
|
||||||
dataall=self.sql_info(uri)
|
dataall = self.sql_info(uri)
|
||||||
data=dataall[0]
|
data = dataall[0]
|
||||||
data_url=dataall[1]
|
data_url = dataall[1]
|
||||||
data_contact=dataall[2]
|
data_contact = dataall[2]
|
||||||
#print(len(data_url))
|
# print(len(data_url))
|
||||||
data_collonne=[field.name() for field in layer.dataProvider().fields()]
|
# data_collonne = [field.name() for field in layer.dataProvider().fields()]
|
||||||
|
|
||||||
body += '<div><h3>Identification</h3><table class="table table-condensed">'
|
body += '<div><h3>Identification</h3><table class="table table-condensed">'
|
||||||
body += '<tr><th>Titre</th><td>{data[4]}</td></tr>'.format(data=data)
|
body += '<tr><th>Titre</th><td>{data[4]}</td></tr>'.format(data=data)
|
||||||
@@ -415,7 +369,7 @@ publisher+
|
|||||||
body += '<tr><th>Emprise</th><td>{data[28]}</td></tr>'.format(data=data)
|
body += '<tr><th>Emprise</th><td>{data[28]}</td></tr>'.format(data=data)
|
||||||
body += '</table></div>'
|
body += '</table></div>'
|
||||||
|
|
||||||
#body += '<div id="map"></div>'
|
# body += '<div id="map"></div>'
|
||||||
|
|
||||||
body += '<div><h3>Publication</h3><table class="table table-condensed">'
|
body += '<div><h3>Publication</h3><table class="table table-condensed">'
|
||||||
body += '<tr><th>Date</th><td>{data[11]}</td></tr>'.format(data=data)
|
body += '<tr><th>Date</th><td>{data[11]}</td></tr>'.format(data=data)
|
||||||
@@ -454,45 +408,46 @@ publisher+
|
|||||||
self.set_html_content(
|
self.set_html_content(
|
||||||
layer.name(), body)
|
layer.name(), body)
|
||||||
|
|
||||||
def set_html_to_wms(self,layer):
|
def set_html_to_wms(self, layer):
|
||||||
self.set_html_content(
|
self.set_html_content(
|
||||||
'CenRa Metadata',(layer.htmlMetadata()))
|
'CenRa Metadata', (layer.htmlMetadata()))
|
||||||
|
|
||||||
def default_html_content_not_pg_layer(self):
|
def default_html_content_not_pg_layer(self):
|
||||||
""" When it's not a PostgreSQL layer. """
|
""" When it's not a PostgreSQL layer. """
|
||||||
self.set_html_content(
|
self.set_html_content(
|
||||||
'CenRa Metadata', ('Vous devez cliquer sur une couche dans la légende qui est stockée dans PostgreSQL.'))
|
'CenRa Metadata', ('Vous devez cliquer sur une couche dans la légende qui est stockée dans PostgreSQL.'))
|
||||||
|
|
||||||
def default_html_content_not_metadata(self):
|
def default_html_content_not_metadata(self):
|
||||||
self.set_html_content(
|
self.set_html_content(
|
||||||
'CenRa Metadata', ('La couche ne contien pas de métadonnée.'))
|
'CenRa Metadata', ('La couche ne contien pas de métadonnée.'))
|
||||||
|
|
||||||
def sql_check(self,uri):
|
def sql_check(self, uri):
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
table = uri.table()
|
table = uri.table()
|
||||||
schema = uri.schema()
|
schema = uri.schema()
|
||||||
|
|
||||||
sql_count = """SELECT count(uid) FROM metadata.dataset
|
sql_count = """SELECT count(uid) FROM metadata.dataset
|
||||||
WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
|
|
||||||
cur.execute(sql_count)
|
cur.execute(sql_count)
|
||||||
data_count = cur.fetchall()
|
data_count = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
return data_count[0][0]
|
return data_count[0][0]
|
||||||
|
|
||||||
def sql_info(self,uri):
|
def sql_info(self, uri):
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
table = uri.table()
|
table = uri.table()
|
||||||
schema = uri.schema()
|
schema = uri.schema()
|
||||||
#[s for s in iface.activeLayer().source().split(" ") if "dbname" in s][0].split("'")[1]
|
# [s for s in iface.activeLayer().source().split(" ") if "dbname" in s][0].split("'")[1]
|
||||||
sql_find = """SELECT *,right(left(st_astext(geom,2),-2),-9) FROM metadata.dataset
|
sql_find = """SELECT *,right(left(st_astext(geom,2),-2),-9) FROM metadata.dataset
|
||||||
WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
cur.execute(sql_find)
|
cur.execute(sql_find)
|
||||||
data_general = cur.fetchall()
|
data_general = cur.fetchall()
|
||||||
sql_findurl = """SELECT type,url,mime,format,taille FROM metadata.dataurl WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
sql_findurl = """SELECT type,url,mime,format,taille FROM metadata.dataurl WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
cur.execute(sql_findurl)
|
cur.execute(sql_findurl)
|
||||||
data_url = cur.fetchall()
|
data_url = cur.fetchall()
|
||||||
sql_findcontact = """SELECT role,nom,organisation,email,telephone FROM metadata.datacontact WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
sql_findcontact = """SELECT role,nom,organisation,email,telephone FROM metadata.datacontact WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
cur.execute(sql_findcontact)
|
cur.execute(sql_findcontact)
|
||||||
data_contact = cur.fetchall()
|
data_contact = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
return data_general[0],data_url,data_contact
|
return data_general[0], data_url, data_contact
|
||||||
|
|
||||||
|
|||||||
+258
-258
@@ -1,66 +1,54 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from collections import namedtuple
|
# from collections import namedtuple
|
||||||
from enum import Enum
|
# from enum import Enum
|
||||||
from functools import partial
|
# from functools import partial
|
||||||
from pathlib import Path
|
# from pathlib import Path
|
||||||
from xml.dom.minidom import parseString
|
# from xml.dom.minidom import parseString
|
||||||
from qgis.gui import *
|
# from qgis.gui import *
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
NULL,
|
|
||||||
QgsApplication,
|
QgsApplication,
|
||||||
QgsDataSourceUri,
|
|
||||||
QgsProject,
|
|
||||||
QgsProviderConnectionException,
|
|
||||||
QgsProviderRegistry,
|
|
||||||
QgsRasterLayer,
|
|
||||||
QgsSettings,
|
QgsSettings,
|
||||||
QgsVectorLayer,
|
|
||||||
QgsGeometry,
|
QgsGeometry,
|
||||||
QgsWkbTypes,
|
QgsWkbTypes,
|
||||||
|
Qgis,
|
||||||
)
|
)
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui, QtCore
|
||||||
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime
|
from qgis.PyQt.QtGui import QIcon
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
# from qgis.PyQt.QtPrintSupport import QPrinter
|
||||||
from qgis.PyQt.QtPrintSupport import QPrinter
|
# from qgis.PyQt.QtWebKitWidgets import QWebPage
|
||||||
#from qgis.PyQt.QtWebKitWidgets import QWebPage
|
import psycopg2
|
||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
QDialog,
|
||||||
QAction,
|
|
||||||
QDockWidget,
|
|
||||||
QFileDialog,
|
QFileDialog,
|
||||||
QInputDialog,
|
|
||||||
QMenu,
|
|
||||||
QToolButton,
|
|
||||||
QTableWidget,
|
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
)
|
)
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .tools.PythonSQL import login_base
|
from .tools.PythonSQL import login_base
|
||||||
except:
|
except ValueError:
|
||||||
print('Pas de fichier PythonSQL')
|
print('Pas de fichier PythonSQL')
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_Metabase_editorwidget_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_Metabase_editorwidget_base.ui')
|
||||||
LOGGER = logging.getLogger('CenRa_Metabase')
|
LOGGEr = logging.getLogger('CenRa_Metabase')
|
||||||
|
|
||||||
|
|
||||||
class Metabase_Editor(QDialog, EDITOR_CLASS):
|
class Metabase_Editor(QDialog, EDITOR_CLASS):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
self.import_xml.setAutoRaise(True)
|
self.import_xml.setAutoRaise(True)
|
||||||
self.import_xml.setText('')
|
self.import_xml.setText('')
|
||||||
self.import_xml.setIcon(QIcon(QgsApplication.iconPath('mActionAddHtml.svg')))
|
self.import_xml.setIcon(QIcon(QgsApplication.iconPath('mActionAddHtml.svg')))
|
||||||
@@ -68,13 +56,13 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.issues_app.setAutoRaise(True)
|
self.issues_app.setAutoRaise(True)
|
||||||
self.issues_app.setText('')
|
self.issues_app.setText('')
|
||||||
self.issues_app.setIcon(QIcon(QgsApplication.iconPath('mIconInfo.svg')))
|
self.issues_app.setIcon(QIcon(QgsApplication.iconPath('mIconInfo.svg')))
|
||||||
self.auto_adding.setIcon(QtGui.QIcon(resources_path('icons','auto_add.png')))
|
self.auto_adding.setIcon(QtGui.QIcon(resources_path('icons', 'auto_add.png')))
|
||||||
self.auto_adding.hide()
|
self.auto_adding.hide()
|
||||||
if os.getlogin() == 'tlaveille' or 'lpoulin' or 'rclement':
|
if os.getlogin() == 'tlaveille' or 'lpoulin' or 'rclement':
|
||||||
self.auto_adding.show()
|
self.auto_adding.show()
|
||||||
|
|
||||||
self.auto_adding.clicked.connect(self.auto_run)
|
self.auto_adding.clicked.connect(self.auto_run)
|
||||||
self.issues_app.clicked.connect(self.issues_open)
|
# self.issues_app.clicked.connect(self.issues_open)
|
||||||
self.categories_select_view.itemDoubleClicked.connect(self.add_categories_view)
|
self.categories_select_view.itemDoubleClicked.connect(self.add_categories_view)
|
||||||
self.categories_view.itemDoubleClicked.connect(self.deleter_categories_view)
|
self.categories_view.itemDoubleClicked.connect(self.deleter_categories_view)
|
||||||
self.themes_select_view.itemDoubleClicked.connect(self.add_themes_view)
|
self.themes_select_view.itemDoubleClicked.connect(self.add_themes_view)
|
||||||
@@ -102,6 +90,7 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.format_box.setCurrentIndex(0)
|
self.format_box.setCurrentIndex(0)
|
||||||
self.taille_line.setText('45')
|
self.taille_line.setText('45')
|
||||||
self.add_lien()
|
self.add_lien()
|
||||||
|
|
||||||
def add_metadata(self):
|
def add_metadata(self):
|
||||||
table_name = layer.dataProvider().uri().table()
|
table_name = layer.dataProvider().uri().table()
|
||||||
schema_name = layer.dataProvider().uri().schema()
|
schema_name = layer.dataProvider().uri().schema()
|
||||||
@@ -117,19 +106,19 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
array_categories = '{'
|
array_categories = '{'
|
||||||
while row_count_categories >= row:
|
while row_count_categories >= row:
|
||||||
if row_count_categories != row:
|
if row_count_categories != row:
|
||||||
array_categories += (self.categories_view.item(row-1,0).text())+','
|
array_categories += (self.categories_view.item(row - 1, 0).text()) + ', '
|
||||||
else:
|
else:
|
||||||
array_categories += (self.categories_view.item(row-1,0).text())
|
array_categories += (self.categories_view.item(row - 1, 0).text())
|
||||||
row = row+1
|
row = row + 1
|
||||||
array_categories += '}'
|
array_categories += '}'
|
||||||
row = 1
|
row = 1
|
||||||
array_themes = '{'
|
array_themes = '{'
|
||||||
while row_count_themes >= row:
|
while row_count_themes >= row:
|
||||||
if row_count_themes != row:
|
if row_count_themes != row:
|
||||||
array_themes += (self.themes_view.item(row-1,0).text())+','
|
array_themes += (self.themes_view.item(row - 1, 0).text()) + ', '
|
||||||
else:
|
else:
|
||||||
array_themes += (self.themes_view.item(row-1,0).text())
|
array_themes += (self.themes_view.item(row - 1, 0).text())
|
||||||
row = row+1
|
row = row + 1
|
||||||
array_themes += '}'
|
array_themes += '}'
|
||||||
|
|
||||||
text_date_creation = str(self.date_creation_date.date().toPyDate())
|
text_date_creation = str(self.date_creation_date.date().toPyDate())
|
||||||
@@ -162,65 +151,65 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
array_link = ''
|
array_link = ''
|
||||||
while row_count_link >= row:
|
while row_count_link >= row:
|
||||||
if row_count_link != row:
|
if row_count_link != row:
|
||||||
array_link += "('"+ table_name +"','"+ schema_name +"','"+ (self.table_lien.item(row-1,1).text()) +"','"+ (self.table_lien.item(row-1,2).text()) +"','"+ (self.table_lien.item(row-1,3).text()) +"','"+ (self.table_lien.item(row-1,4).text()) +"','"+ (self.table_lien.item(row-1,5).text()) +"')"+','
|
array_link += "('" + table_name + "', '" + schema_name + "', '" + (self.table_lien.item(row - 1,1).text()) + "', '" + (self.table_lien.item(row - 1,2).text()) + "', '" + (self.table_lien.item(row - 1,3).text()) + "', '" + (self.table_lien.item(row - 1,4).text()) + "', '" + (self.table_lien.item(row - 1,5).text()) + "')" + ', '
|
||||||
else:
|
else:
|
||||||
array_link += "('"+ table_name +"','"+ schema_name +"','"+ (self.table_lien.item(row-1,1).text()) +"','"+ (self.table_lien.item(row-1,2).text()) +"','"+ (self.table_lien.item(row-1,3).text()) +"','"+ (self.table_lien.item(row-1,4).text()) +"','"+ (self.table_lien.item(row-1,5).text()) +"')"
|
array_link += "('" + table_name + "', '" + schema_name + "', '" + (self.table_lien.item(row - 1,1).text()) + "', '" + (self.table_lien.item(row - 1,2).text()) + "', '" + (self.table_lien.item(row - 1,3).text()) + "', '" + (self.table_lien.item(row - 1,4).text()) + "', '" + (self.table_lien.item(row - 1,5).text()) + "')"
|
||||||
row = row+1
|
row = row + 1
|
||||||
|
|
||||||
row_count_contact = self.table_contact.rowCount()
|
row_count_contact = self.table_contact.rowCount()
|
||||||
row = 1
|
row = 1
|
||||||
array_contact = ''
|
array_contact = ''
|
||||||
while row_count_contact >= row:
|
while row_count_contact >= row:
|
||||||
if row_count_contact != row:
|
if row_count_contact != row:
|
||||||
array_contact += "('"+ table_name +"','"+ schema_name +"','"+ (self.table_contact.item(row-1,1).text()) +"','"+ (self.table_contact.item(row-1,2).text()) +"','"+ (self.table_contact.item(row-1,3).text()) +"','"+ (self.table_contact.item(row-1,4).text()) +"','"+ (self.table_contact.item(row-1,5).text()) +"')"+','
|
array_contact += "('" + table_name + "', '" + schema_name + "', '" + (self.table_contact.item(row - 1,1).text()) + "', '" + (self.table_contact.item(row - 1,2).text()) + "', '" + (self.table_contact.item(row - 1,3).text()) + "', '" + (self.table_contact.item(row - 1,4).text()) + "', '" + (self.table_contact.item(row - 1,5).text()) + "')" + ', '
|
||||||
else:
|
else:
|
||||||
array_contact += "('"+ table_name +"','"+ schema_name +"','"+ (self.table_contact.item(row-1,1).text()) +"','"+ (self.table_contact.item(row-1,2).text()) +"','"+ (self.table_contact.item(row-1,3).text()) +"','"+ (self.table_contact.item(row-1,4).text()) +"','"+ (self.table_contact.item(row-1,5).text()) +"')"
|
array_contact += "('" + table_name + "', '" + schema_name + "', '" + (self.table_contact.item(row - 1,1).text()) + "', '" + (self.table_contact.item(row - 1,2).text()) + "', '" + (self.table_contact.item(row - 1,3).text()) + "', '" + (self.table_contact.item(row - 1,4).text()) + "', '" + (self.table_contact.item(row - 1,5).text()) + "')"
|
||||||
row = row+1
|
row = row + 1
|
||||||
'''
|
'''
|
||||||
|
|
||||||
exist=self.status_metadata(layer)
|
exist = self.status_metadata(layer)
|
||||||
cur_con=login_base(take=True)
|
cur_con = login_base(take=True)
|
||||||
cur=cur_con[0]
|
cur = cur_con[0]
|
||||||
con=cur_con[1]
|
con = cur_con[1]
|
||||||
list_champs_sql = ''
|
list_champs_sql = ''
|
||||||
values_sql_add = ''
|
values_sql_add = ''
|
||||||
if exist:
|
if exist:
|
||||||
SQL_uid = """SELECT uid from metadata.dataset where table_name like '"""+table_name+"""' and schema_name like '"""+schema_name+"""';"""
|
SQL_uid = """SELECT uid from metadata.dataset where table_name like '""" + table_name + """' and schema_name like '""" + schema_name + """';"""
|
||||||
cur.execute(SQL_uid)
|
cur.execute(SQL_uid)
|
||||||
text_uid = (cur.fetchall())[0][0]
|
text_uid = (cur.fetchall())[0][0]
|
||||||
|
|
||||||
SQL_delete = """DELETE from metadata.dataset where table_name like '"""+table_name+"""' and schema_name like '"""+schema_name+"""';"""
|
SQL_delete = """DELETE from metadata.dataset where table_name like '""" + table_name + """' and schema_name like '""" + schema_name + """';"""
|
||||||
cur.execute(SQL_delete)
|
cur.execute(SQL_delete)
|
||||||
values_sql_add += "'"+text_uid+"',"
|
values_sql_add += "'" + text_uid + "',"
|
||||||
|
|
||||||
list_champs_sql+='uid,'
|
list_champs_sql += 'uid,'
|
||||||
global uid_delete_list_link,uid_delete_list_contact
|
global uid_delete_list_link, uid_delete_list_contact
|
||||||
if len(uid_delete_list_link) >= 35:
|
if len(uid_delete_list_link) >= 35:
|
||||||
SQL_delete_link = """DELETE FROM metadata.dataurl WHERE uid IN ("""+ uid_delete_list_link[:-1] +""");"""
|
SQL_delete_link = """DELETE FROM metadata.dataurl WHERE uid IN (""" + uid_delete_list_link[:- 1] + """);"""
|
||||||
cur.execute(SQL_delete_link)
|
cur.execute(SQL_delete_link)
|
||||||
uid_delete_list_link = ''
|
uid_delete_list_link = ''
|
||||||
if len(uid_delete_list_contact) >= 35:
|
if len(uid_delete_list_contact) >= 35:
|
||||||
SQL_delete_contact = """DELETE FROM metadata.datacontact WHERE uid IN ("""+ uid_delete_list_contact[:-1] +""");"""
|
SQL_delete_contact = """DELETE FROM metadata.datacontact WHERE uid IN (""" + uid_delete_list_contact[:- 1] + """);"""
|
||||||
cur.execute(SQL_delete_contact)
|
cur.execute(SQL_delete_contact)
|
||||||
uid_delete_list_contact=''
|
uid_delete_list_contact = ''
|
||||||
|
|
||||||
list_champs_sql += 'table_name,schema_name,title,abstract,keywords,data_last_update,langue,categories,themes,creation_date,update_date,encode,geom,spatial_extent,feature_count,geometry_type,projection_name,projection_authid,spatial_level,minimum_optimal_scale,maximum_optimal_scale,publication_date,publication_frequency,confidentiality,license,license_attribution'
|
list_champs_sql += 'table_name, schema_name, title, abstract, keywords, data_last_update, langue, categories, themes, creation_date, update_date, encode, geom, spatial_extent, feature_count, geometry_type, projection_name, projection_authid, spatial_level, minimum_optimal_scale, maximum_optimal_scale, publication_date, publication_frequency, confidentiality, license, license_attribution'
|
||||||
values_sql_add += "'"+table_name+"','"+schema_name+"','"+text_titre+"','"+text_description+"','"+text_mots_cles+"','"+text_date_maj+"','"+text_langue+"','"+array_categories+"','"+array_themes+"','"+text_date_creation+"','"+text_date_modification+"','"+text_encode+"','"+text_extend+"','"+text_extend+"','"+int_nbr_entites+"','"+text_geomtype+"','"+text_crsname+"','"+text_crscode+"','"+text_niveau+"',"+text_echelle_min+","+text_echelle_max+",'"+text_date_publication+"','"+text_frequence+"','"+text_restriction+"','"+text_licence+"','"+text_licence_attrib+"'"
|
values_sql_add += "'" + table_name + "', '" + schema_name + "', '" + text_titre + "', '" + text_description + "', '" + text_mots_cles + "', '" + text_date_maj + "', '" + text_langue + "', '" + array_categories + "', '" + array_themes + "', '" + text_date_creation + "', '" + text_date_modification + "', '" + text_encode + "', '" + text_extend + "', '" + text_extend + "', '" + int_nbr_entites + "', '" + text_geomtype + "', '" + text_crsname + "', '" + text_crscode + "', '" + text_niveau + "'," + text_echelle_min + "," + text_echelle_max + ",'" + text_date_publication + "', '" + text_frequence + "', '" + text_restriction + "', '" + text_licence + "', '" + text_licence_attrib + "'"
|
||||||
|
|
||||||
SQL_add = """INSERT INTO metadata.dataset ("""+list_champs_sql+""") VALUES ("""+values_sql_add+""");"""
|
SQL_add = """INSERT INTO metadata.dataset (""" + list_champs_sql + """) VALUES (""" + values_sql_add + """);"""
|
||||||
|
|
||||||
cur.execute(SQL_add)
|
cur.execute(SQL_add)
|
||||||
|
|
||||||
global array_link,array_contact
|
global array_link, array_contact
|
||||||
if len(array_link) >= 25:
|
if len(array_link) >= 25:
|
||||||
array_link=array_link[:-1]
|
array_link = array_link[:- 1]
|
||||||
SQL_add_link = """INSERT INTO metadata.dataurl (table_name,schema_name,type,url,mime,format,taille) VALUES """+array_link+""";"""
|
SQL_add_link = """INSERT INTO metadata.dataurl (table_name, schema_name, type, url, mime, format, taille) VALUES """ + array_link + """;"""
|
||||||
cur.execute(SQL_add_link)
|
cur.execute(SQL_add_link)
|
||||||
array_link = ''
|
array_link = ''
|
||||||
|
|
||||||
if len(array_contact) >= 25:
|
if len(array_contact) >= 25:
|
||||||
array_contact=array_contact[0:-1]
|
array_contact = array_contact[0:- 1]
|
||||||
SQL_add_contact = """INSERT INTO metadata.datacontact (table_name,schema_name,role,nom,organisation,email,telephone) VALUES """+array_contact+""";"""
|
SQL_add_contact = """INSERT INTO metadata.datacontact (table_name, schema_name, role, nom, organisation, email, telephone) VALUES """ + array_contact + """;"""
|
||||||
cur.execute(SQL_add_contact)
|
cur.execute(SQL_add_contact)
|
||||||
array_contact = ''
|
array_contact = ''
|
||||||
|
|
||||||
@@ -235,28 +224,28 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
global layer
|
global layer
|
||||||
layer = iface.activeLayer()
|
layer = iface.activeLayer()
|
||||||
global uid_delete_list_link,uid_delete_list_contact,array_link,array_contact
|
global uid_delete_list_link, uid_delete_list_contact, array_link, array_contact
|
||||||
uid_delete_list_link=''
|
uid_delete_list_link = ''
|
||||||
uid_delete_list_contact=''
|
uid_delete_list_contact = ''
|
||||||
array_link = ''
|
array_link = ''
|
||||||
array_contact = ''
|
array_contact = ''
|
||||||
|
|
||||||
is_ok=self.is_in_psql(layer)
|
is_ok = self.is_in_psql(layer)
|
||||||
if is_ok:
|
if is_ok:
|
||||||
exist=self.status_metadata(layer)
|
exist = self.status_metadata(layer)
|
||||||
if exist:
|
if exist:
|
||||||
self.reload_data(layer)
|
self.reload_data(layer)
|
||||||
else:
|
else:
|
||||||
self.new_data(layer)
|
self.new_data(layer)
|
||||||
else:
|
else:
|
||||||
self.close()
|
self.close()
|
||||||
iface.messageBar().pushMessage("Information :", "Cette couche n'est pas stockée dans PostgreSQL", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("Information:", "Cette couche n'est pas stockée dans PostgreSQL", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
def is_in_psql(self,layer):
|
def is_in_psql(self, layer):
|
||||||
try:
|
try:
|
||||||
uri = layer.dataProvider().uri()
|
uri = layer.dataProvider().uri()
|
||||||
except:
|
except AttributeError:
|
||||||
uri=''
|
uri = ''
|
||||||
return False
|
return False
|
||||||
if uri != '':
|
if uri != '':
|
||||||
if not uri.table():
|
if not uri.table():
|
||||||
@@ -264,13 +253,13 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def status_metadata(self,layer):
|
def status_metadata(self, layer):
|
||||||
uri = layer.dataProvider().uri()
|
uri = layer.dataProvider().uri()
|
||||||
table = uri.table()
|
table = uri.table()
|
||||||
schema = uri.schema()
|
schema = uri.schema()
|
||||||
|
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
count_sql = """ SELECT count(uid) FROM metadata.dataset WHERE table_name LIKE '"""+table+"""' AND schema_name LIKE '"""+schema+"""';"""
|
count_sql = """ SELECT count(uid) FROM metadata.dataset WHERE table_name LIKE '""" + table + """' AND schema_name LIKE '""" + schema + """';"""
|
||||||
|
|
||||||
cur.execute(count_sql)
|
cur.execute(count_sql)
|
||||||
data_count = (cur.fetchall())[0][0]
|
data_count = (cur.fetchall())[0][0]
|
||||||
@@ -280,17 +269,17 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
return False
|
return False
|
||||||
cur.close()
|
cur.close()
|
||||||
|
|
||||||
def new_data(self,layer):
|
def new_data(self, layer):
|
||||||
#print(layer.name(),'is new data')
|
# print(layer.name(),'is new data')
|
||||||
reloader=False
|
reloader = False
|
||||||
self.interface_view(layer,reloader)
|
self.interface_view(layer, reloader)
|
||||||
|
|
||||||
def reload_data(self,layer):
|
def reload_data(self, layer):
|
||||||
#print(layer.name(),'reload data')
|
# print(layer.name(),'reload data')
|
||||||
reloader=True
|
reloader = True
|
||||||
self.interface_view(layer,reloader)
|
self.interface_view(layer, reloader)
|
||||||
|
|
||||||
def interface_view(self,layer,reloader):
|
def interface_view(self, layer, reloader):
|
||||||
|
|
||||||
self.description_text.setText(None)
|
self.description_text.setText(None)
|
||||||
self.mots_cles_text.setText(None)
|
self.mots_cles_text.setText(None)
|
||||||
@@ -309,27 +298,26 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.licence_attrib_box.clear()
|
self.licence_attrib_box.clear()
|
||||||
self.restriction_box.clear()
|
self.restriction_box.clear()
|
||||||
|
|
||||||
all_list=self.fletch_ref()
|
all_list = self.fletch_ref()
|
||||||
|
|
||||||
categories_list=all_list[0]
|
categories_list = all_list[0]
|
||||||
themes_list=all_list[1]
|
themes_list = all_list[1]
|
||||||
langue_list=all_list[2]
|
langue_list = all_list[2]
|
||||||
encodage_list=all_list[3]
|
encodage_list = all_list[3]
|
||||||
frequency_list=all_list[4]
|
frequency_list = all_list[4]
|
||||||
confidentiality_list=all_list[5]
|
confidentiality_list = all_list[5]
|
||||||
license_list=all_list[6]
|
license_list = all_list[6]
|
||||||
type_list=all_list[7]
|
type_list = all_list[7]
|
||||||
mime_list=all_list[8]
|
mime_list = all_list[8]
|
||||||
format_list=all_list[9]
|
format_list = all_list[9]
|
||||||
role_list=all_list[10]
|
role_list = all_list[10]
|
||||||
organisation_list=all_list[11]
|
organisation_list = all_list[11]
|
||||||
|
|
||||||
|
# langue_box
|
||||||
#langue_box
|
|
||||||
self.langue_box.clear()
|
self.langue_box.clear()
|
||||||
self.langue_box.addItem('')
|
self.langue_box.addItem('')
|
||||||
#self.langue_box.addItem('Fr')
|
# self.langue_box.addItem('Fr')
|
||||||
#self.langue_box.addItem('En')
|
# self.langue_box.addItem('En')
|
||||||
for langue_list_data in langue_list:
|
for langue_list_data in langue_list:
|
||||||
self.langue_box.addItem(langue_list_data[0])
|
self.langue_box.addItem(langue_list_data[0])
|
||||||
|
|
||||||
@@ -339,46 +327,46 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.table_ligne.setText(layer.dataProvider().uri().table())
|
self.table_ligne.setText(layer.dataProvider().uri().table())
|
||||||
self.schema_ligne.setText(layer.dataProvider().uri().schema())
|
self.schema_ligne.setText(layer.dataProvider().uri().schema())
|
||||||
|
|
||||||
#categories_select_view
|
# categories_select_view
|
||||||
self.categories_select_view.setColumnCount(1)
|
self.categories_select_view.setColumnCount(1)
|
||||||
self.categories_select_view.setColumnWidth(0, 230)
|
self.categories_select_view.setColumnWidth(0, 230)
|
||||||
self.categories_select_view.setHorizontalHeaderLabels(['List des categories'])
|
self.categories_select_view.setHorizontalHeaderLabels(['List des categories'])
|
||||||
#categories_view
|
# categories_view
|
||||||
self.categories_view.setRowCount(0)
|
self.categories_view.setRowCount(0)
|
||||||
self.categories_view.setColumnCount(1)
|
self.categories_view.setColumnCount(1)
|
||||||
self.categories_view.setColumnWidth(0, 230)
|
self.categories_view.setColumnWidth(0, 230)
|
||||||
self.categories_view.setHorizontalHeaderLabels(['Categories'])
|
self.categories_view.setHorizontalHeaderLabels(['Categories'])
|
||||||
|
|
||||||
#themes_select_view
|
# themes_select_view
|
||||||
self.themes_select_view.setColumnCount(1)
|
self.themes_select_view.setColumnCount(1)
|
||||||
self.themes_select_view.setColumnWidth(0, 230)
|
self.themes_select_view.setColumnWidth(0, 230)
|
||||||
self.themes_select_view.setHorizontalHeaderLabels(['List des thèmes'])
|
self.themes_select_view.setHorizontalHeaderLabels(['List des thèmes'])
|
||||||
#themes_view
|
# themes_view
|
||||||
self.themes_view.setRowCount(0)
|
self.themes_view.setRowCount(0)
|
||||||
self.themes_view.setColumnCount(1)
|
self.themes_view.setColumnCount(1)
|
||||||
self.themes_view.setColumnWidth(0, 230)
|
self.themes_view.setColumnWidth(0, 230)
|
||||||
self.themes_view.setHorizontalHeaderLabels(['Thèmes'])
|
self.themes_view.setHorizontalHeaderLabels(['Thèmes'])
|
||||||
|
|
||||||
#lien_view
|
# lien_view
|
||||||
self.table_lien.setRowCount(0)
|
self.table_lien.setRowCount(0)
|
||||||
self.table_lien.setColumnCount(6)
|
self.table_lien.setColumnCount(6)
|
||||||
self.table_lien.setColumnWidth(0, 0)
|
self.table_lien.setColumnWidth(0, 0)
|
||||||
self.table_lien.setHorizontalHeaderLabels(['','Type','URL','MIME','Format','Taille'])
|
self.table_lien.setHorizontalHeaderLabels(['', 'Type', 'URL', 'MIME', 'Format', 'Taille'])
|
||||||
|
|
||||||
#contact_view
|
# contact_view
|
||||||
self.table_contact.setRowCount(0)
|
self.table_contact.setRowCount(0)
|
||||||
self.table_contact.setColumnCount(6)
|
self.table_contact.setColumnCount(6)
|
||||||
self.table_contact.setColumnWidth(0, 0)
|
self.table_contact.setColumnWidth(0, 0)
|
||||||
self.table_contact.setHorizontalHeaderLabels(['','Rôle','Nom','Organisation','Email','Telephone'])
|
self.table_contact.setHorizontalHeaderLabels(['', 'Rôle', 'Nom', 'Organisation', 'Email', 'Telephone'])
|
||||||
|
|
||||||
#print(self.date_maj_date.date().toPyDate())
|
# print(self.date_maj_date.date().toPyDate())
|
||||||
vector_extend = layer.extent()
|
vector_extend = layer.extent()
|
||||||
polygone_extend = QgsGeometry.fromRect(vector_extend).asWkt()
|
polygone_extend = QgsGeometry.fromRect(vector_extend).asWkt()
|
||||||
self.extend_plaintext.setPlainText(str(polygone_extend))
|
self.extend_plaintext.setPlainText(str(polygone_extend))
|
||||||
|
|
||||||
qgstype = str(layer.type())[10:]
|
qgstype = str(layer.type())[10:]
|
||||||
|
|
||||||
if qgstype != 'Raster' :
|
if qgstype != 'Raster':
|
||||||
count_layers = str(layer.featureCount())
|
count_layers = str(layer.featureCount())
|
||||||
geomtype = QgsWkbTypes.displayString(layer.wkbType())
|
geomtype = QgsWkbTypes.displayString(layer.wkbType())
|
||||||
elif qgstype == 'Raster':
|
elif qgstype == 'Raster':
|
||||||
@@ -392,7 +380,6 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
crs_code = str(layer.crs().authid())
|
crs_code = str(layer.crs().authid())
|
||||||
self.crscode_plaintext.setPlainText(crs_code)
|
self.crscode_plaintext.setPlainText(crs_code)
|
||||||
|
|
||||||
|
|
||||||
self.frequence_box.addItem('')
|
self.frequence_box.addItem('')
|
||||||
self.restriction_box.addItem('')
|
self.restriction_box.addItem('')
|
||||||
self.licence_box.addItem('')
|
self.licence_box.addItem('')
|
||||||
@@ -428,12 +415,12 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.organisation_box.addItem(organisation_list_data[0])
|
self.organisation_box.addItem(organisation_list_data[0])
|
||||||
|
|
||||||
if reloader:
|
if reloader:
|
||||||
sql_dataload=self.sql_info(layer.dataProvider().uri())
|
sql_dataload = self.sql_info(layer.dataProvider().uri())
|
||||||
sql_contactlink=self.sql_infoother(layer.dataProvider().uri())
|
sql_contactlink = self.sql_infoother(layer.dataProvider().uri())
|
||||||
sql_datalink=sql_contactlink[0]
|
sql_datalink = sql_contactlink[0]
|
||||||
sql_datacontact=sql_contactlink[1]
|
sql_datacontact = sql_contactlink[1]
|
||||||
|
|
||||||
#print(sql_dataload)
|
# print(sql_dataload)
|
||||||
self.titre_line.setText(sql_dataload[4])
|
self.titre_line.setText(sql_dataload[4])
|
||||||
self.date_maj_date.setDateTime(sql_dataload[23])
|
self.date_maj_date.setDateTime(sql_dataload[23])
|
||||||
self.date_publication_date.setDateTime(sql_dataload[11])
|
self.date_publication_date.setDateTime(sql_dataload[11])
|
||||||
@@ -444,38 +431,38 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.uuid_ligne.setText(sql_dataload[1])
|
self.uuid_ligne.setText(sql_dataload[1])
|
||||||
|
|
||||||
self.categories_view.setRowCount(len(sql_dataload[6]))
|
self.categories_view.setRowCount(len(sql_dataload[6]))
|
||||||
i=0
|
i = 0
|
||||||
for categorie_data in sql_dataload[6]:
|
for categorie_data in sql_dataload[6]:
|
||||||
self.categories_view.setItem(i,0,QTableWidgetItem(categorie_data))
|
self.categories_view.setItem(i, 0, QTableWidgetItem(categorie_data))
|
||||||
i=i+1
|
i = i + 1
|
||||||
self.themes_view.setRowCount(len(sql_dataload[24]))
|
self.themes_view.setRowCount(len(sql_dataload[24]))
|
||||||
i=0
|
i = 0
|
||||||
for themes_data in sql_dataload[24]:
|
for themes_data in sql_dataload[24]:
|
||||||
self.themes_view.setItem(i,0,QTableWidgetItem(themes_data))
|
self.themes_view.setItem(i, 0, QTableWidgetItem(themes_data))
|
||||||
i=i+1
|
i = i + 1
|
||||||
|
|
||||||
self.categories_select_view.setRowCount(len(categories_list)-len(sql_dataload[6]))
|
self.categories_select_view.setRowCount(len(categories_list) - len(sql_dataload[6]))
|
||||||
self.themes_select_view.setRowCount(len(themes_list)-len(sql_dataload[24]))
|
self.themes_select_view.setRowCount(len(themes_list) - len(sql_dataload[24]))
|
||||||
i=0
|
i = 0
|
||||||
for categorie_select_data in categories_list:
|
for categorie_select_data in categories_list:
|
||||||
try:
|
try:
|
||||||
in_index = sql_dataload[6].index(categorie_select_data[0])
|
in_index = sql_dataload[6].index(categorie_select_data[0])
|
||||||
in_index=False
|
in_index = False
|
||||||
except:
|
except ValueError:
|
||||||
in_index=True
|
in_index = True
|
||||||
if in_index:
|
if in_index:
|
||||||
self.categories_select_view.setItem(i,0,QTableWidgetItem(categorie_select_data[0]))
|
self.categories_select_view.setItem(i, 0, QTableWidgetItem(categorie_select_data[0]))
|
||||||
i=i+1
|
i = i + 1
|
||||||
i=0
|
i = 0
|
||||||
for themes_select_data in themes_list:
|
for themes_select_data in themes_list:
|
||||||
try:
|
try:
|
||||||
in_index = sql_dataload[24].index(themes_select_data[0])
|
in_index = sql_dataload[24].index(themes_select_data[0])
|
||||||
in_index=False
|
in_index = False
|
||||||
except:
|
except ValueError:
|
||||||
in_index=True
|
in_index = True
|
||||||
if in_index:
|
if in_index:
|
||||||
self.themes_select_view.setItem(i,0,QTableWidgetItem(themes_select_data[0]))
|
self.themes_select_view.setItem(i, 0, QTableWidgetItem(themes_select_data[0]))
|
||||||
i=i+1
|
i = i + 1
|
||||||
|
|
||||||
array_encodage_box = [self.encodage_box.itemText(i) for i in range(self.encodage_box.count())]
|
array_encodage_box = [self.encodage_box.itemText(i) for i in range(self.encodage_box.count())]
|
||||||
self.encodage_box.setCurrentIndex(array_encodage_box.index(sql_dataload[27]))
|
self.encodage_box.setCurrentIndex(array_encodage_box.index(sql_dataload[27]))
|
||||||
@@ -504,35 +491,35 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
array_licence_attrib_box = [self.licence_attrib_box.itemText(i) for i in range(self.licence_attrib_box.count())]
|
array_licence_attrib_box = [self.licence_attrib_box.itemText(i) for i in range(self.licence_attrib_box.count())]
|
||||||
self.licence_attrib_box.setCurrentIndex(array_licence_attrib_box.index(sql_dataload[25]))
|
self.licence_attrib_box.setCurrentIndex(array_licence_attrib_box.index(sql_dataload[25]))
|
||||||
|
|
||||||
c=0
|
c = 0
|
||||||
#self.table_lien.setRowCount(len(sql_datalink))
|
# self.table_lien.setRowCount(len(sql_datalink))
|
||||||
for lien_data in sql_datalink:
|
for lien_data in sql_datalink:
|
||||||
self.table_lien.insertRow(c)
|
self.table_lien.insertRow(c)
|
||||||
self.table_lien.setItem(c,0,QTableWidgetItem(lien_data[1]))
|
self.table_lien.setItem(c, 0, QTableWidgetItem(lien_data[1]))
|
||||||
self.table_lien.setItem(c,1,QTableWidgetItem(lien_data[4]))
|
self.table_lien.setItem(c, 1, QTableWidgetItem(lien_data[4]))
|
||||||
self.table_lien.setItem(c,2,QTableWidgetItem(lien_data[5]))
|
self.table_lien.setItem(c, 2, QTableWidgetItem(lien_data[5]))
|
||||||
self.table_lien.setItem(c,3,QTableWidgetItem(lien_data[6]))
|
self.table_lien.setItem(c, 3, QTableWidgetItem(lien_data[6]))
|
||||||
self.table_lien.setItem(c,4,QTableWidgetItem(lien_data[7]))
|
self.table_lien.setItem(c, 4, QTableWidgetItem(lien_data[7]))
|
||||||
self.table_lien.setItem(c,5,QTableWidgetItem(lien_data[8]))
|
self.table_lien.setItem(c, 5, QTableWidgetItem(lien_data[8]))
|
||||||
c=c+1
|
c = c + 1
|
||||||
c=0
|
c = 0
|
||||||
#self.table_contact.setRowCount(len(sql_datacontact))
|
# self.table_contact.setRowCount(len(sql_datacontact))
|
||||||
for contact_data in sql_datacontact:
|
for contact_data in sql_datacontact:
|
||||||
self.table_contact.insertRow(c)
|
self.table_contact.insertRow(c)
|
||||||
self.table_contact.setItem(c,0,QTableWidgetItem(contact_data[1]))
|
self.table_contact.setItem(c, 0, QTableWidgetItem(contact_data[1]))
|
||||||
self.table_contact.setItem(c,1,QTableWidgetItem(contact_data[4]))
|
self.table_contact.setItem(c, 1, QTableWidgetItem(contact_data[4]))
|
||||||
self.table_contact.setItem(c,2,QTableWidgetItem(contact_data[5]))
|
self.table_contact.setItem(c, 2, QTableWidgetItem(contact_data[5]))
|
||||||
self.table_contact.setItem(c,3,QTableWidgetItem(contact_data[6]))
|
self.table_contact.setItem(c, 3, QTableWidgetItem(contact_data[6]))
|
||||||
self.table_contact.setItem(c,4,QTableWidgetItem(contact_data[7]))
|
self.table_contact.setItem(c, 4, QTableWidgetItem(contact_data[7]))
|
||||||
self.table_contact.setItem(c,5,QTableWidgetItem(contact_data[8]))
|
self.table_contact.setItem(c, 5, QTableWidgetItem(contact_data[8]))
|
||||||
c=c+1
|
c = c + 1
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
#titre_line
|
# titre_line
|
||||||
self.titre_line.setText(layer.name())
|
self.titre_line.setText(layer.name())
|
||||||
self.langue_box.setCurrentIndex(1)
|
self.langue_box.setCurrentIndex(1)
|
||||||
#date_maj_date
|
# date_maj_date
|
||||||
now = QtCore.QDateTime.currentDateTime()
|
now = QtCore.QDateTime.currentDateTime()
|
||||||
self.date_maj_date.setDateTime(now)
|
self.date_maj_date.setDateTime(now)
|
||||||
self.date_creation_date.setDateTime(now)
|
self.date_creation_date.setDateTime(now)
|
||||||
@@ -540,87 +527,89 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.date_publication_date.setDateTime(now)
|
self.date_publication_date.setDateTime(now)
|
||||||
self.categories_select_view.setRowCount(len(categories_list))
|
self.categories_select_view.setRowCount(len(categories_list))
|
||||||
self.themes_select_view.setRowCount(len(themes_list))
|
self.themes_select_view.setRowCount(len(themes_list))
|
||||||
i=0
|
i = 0
|
||||||
for categorie_select_data in categories_list:
|
for categorie_select_data in categories_list:
|
||||||
self.categories_select_view.setItem(i,0,QTableWidgetItem(categorie_select_data[0]))
|
self.categories_select_view.setItem(i, 0, QTableWidgetItem(categorie_select_data[0]))
|
||||||
i=i+1
|
i = i + 1
|
||||||
i=0
|
i = 0
|
||||||
for themes_select_data in themes_list:
|
for themes_select_data in themes_list:
|
||||||
self.themes_select_view.setItem(i,0,QTableWidgetItem(themes_select_data[0]))
|
self.themes_select_view.setItem(i, 0, QTableWidgetItem(themes_select_data[0]))
|
||||||
i=i+1
|
i = i + 1
|
||||||
|
|
||||||
#print(self.langue_box.currentText())
|
# print(self.langue_box.currentText())
|
||||||
|
|
||||||
def sql_info(self,uri):
|
def sql_info(self, uri):
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
table = uri.table()
|
table = uri.table()
|
||||||
schema = uri.schema()
|
schema = uri.schema()
|
||||||
#[s for s in iface.activeLayer().source().split(" ") if "dbname" in s][0].split("'")[1]
|
# [s for s in iface.activeLayer().source().split(" ") if "dbname" in s][0].split("'")[1]
|
||||||
sql_find = """SELECT *,right(left(st_astext(geom,2),-2),-9) FROM metadata.dataset
|
sql_find = """SELECT *, right(left(st_astext(geom,2),-2),-9) FROM metadata.dataset
|
||||||
WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
cur.execute(sql_find)
|
cur.execute(sql_find)
|
||||||
data_general = cur.fetchall()
|
data_general = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
return data_general[0]
|
return data_general[0]
|
||||||
|
|
||||||
def sql_infoother(self,uri):
|
def sql_infoother(self, uri):
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
table = uri.table()
|
table = uri.table()
|
||||||
schema = uri.schema()
|
schema = uri.schema()
|
||||||
|
|
||||||
sql_findlink = """SELECT * FROM metadata.dataurl
|
sql_findlink = """SELECT * FROM metadata.dataurl
|
||||||
WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
cur.execute(sql_findlink)
|
cur.execute(sql_findlink)
|
||||||
data_link = cur.fetchall()
|
data_link = cur.fetchall()
|
||||||
|
|
||||||
sql_findcontact = """SELECT * FROM metadata.datacontact
|
sql_findcontact = """SELECT * FROM metadata.datacontact
|
||||||
WHERE schema_name LIKE '"""+schema+"""' AND table_name LIKE '"""+table+"""';"""
|
WHERE schema_name LIKE '""" + schema + """' AND table_name LIKE '""" + table + """';"""
|
||||||
cur.execute(sql_findcontact)
|
cur.execute(sql_findcontact)
|
||||||
data_contact = cur.fetchall()
|
data_contact = cur.fetchall()
|
||||||
|
|
||||||
cur.close()
|
cur.close()
|
||||||
return data_link,data_contact
|
return data_link, data_contact
|
||||||
|
|
||||||
def add_categories_view(self):
|
def add_categories_view(self):
|
||||||
values_add_categories = self.categories_select_view.selectedItems()[0].text()
|
values_add_categories = self.categories_select_view.selectedItems()[0].text()
|
||||||
self.categories_select_view.removeRow(self.categories_select_view.currentRow())
|
self.categories_select_view.removeRow(self.categories_select_view.currentRow())
|
||||||
self.categories_view.insertRow(0)
|
self.categories_view.insertRow(0)
|
||||||
self.categories_view.setItem(0,0,QTableWidgetItem(values_add_categories))
|
self.categories_view.setItem(0, 0, QTableWidgetItem(values_add_categories))
|
||||||
|
|
||||||
def deleter_categories_view(self):
|
def deleter_categories_view(self):
|
||||||
values_deleter_categories = self.categories_view.selectedItems()[0].text()
|
values_deleter_categories = self.categories_view.selectedItems()[0].text()
|
||||||
self.categories_view.removeRow(self.categories_view.currentRow())
|
self.categories_view.removeRow(self.categories_view.currentRow())
|
||||||
self.categories_select_view.insertRow(0)
|
self.categories_select_view.insertRow(0)
|
||||||
self.categories_select_view.setItem(0,0,QTableWidgetItem(values_deleter_categories))
|
self.categories_select_view.setItem(0, 0, QTableWidgetItem(values_deleter_categories))
|
||||||
|
|
||||||
def add_themes_view(self):
|
def add_themes_view(self):
|
||||||
values_add_themes = self.themes_select_view.selectedItems()[0].text()
|
values_add_themes = self.themes_select_view.selectedItems()[0].text()
|
||||||
self.themes_select_view.removeRow(self.themes_select_view.currentRow())
|
self.themes_select_view.removeRow(self.themes_select_view.currentRow())
|
||||||
self.themes_view.insertRow(0)
|
self.themes_view.insertRow(0)
|
||||||
self.themes_view.setItem(0,0,QTableWidgetItem(values_add_themes))
|
self.themes_view.setItem(0, 0, QTableWidgetItem(values_add_themes))
|
||||||
|
|
||||||
def deleter_themes_view(self):
|
def deleter_themes_view(self):
|
||||||
values_deleter_themes = self.themes_view.selectedItems()[0].text()
|
values_deleter_themes = self.themes_view.selectedItems()[0].text()
|
||||||
self.themes_view.removeRow(self.themes_view.currentRow())
|
self.themes_view.removeRow(self.themes_view.currentRow())
|
||||||
self.themes_select_view.insertRow(0)
|
self.themes_select_view.insertRow(0)
|
||||||
self.themes_select_view.setItem(0,0,QTableWidgetItem(values_deleter_themes))
|
self.themes_select_view.setItem(0, 0, QTableWidgetItem(values_deleter_themes))
|
||||||
|
|
||||||
def add_lien(self):
|
def add_lien(self):
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
maxrow=self.table_lien.rowCount()
|
maxrow = self.table_lien.rowCount()
|
||||||
self.table_lien.insertRow(maxrow)
|
self.table_lien.insertRow(maxrow)
|
||||||
|
|
||||||
table = layer.dataProvider().uri().table()
|
table = layer.dataProvider().uri().table()
|
||||||
schema = layer.dataProvider().uri().schema()
|
schema = layer.dataProvider().uri().schema()
|
||||||
|
|
||||||
if self.taille_line.text() == '':
|
if self.taille_line.text() == '':
|
||||||
sql_sizefile = """SELECT pg_size_pretty(pg_total_relation_size('"""+schema+'.'+table+"""'));"""
|
sql_sizefile = """SELECT pg_size_pretty(pg_total_relation_size('""" + schema + '.' + table + """'));"""
|
||||||
try:
|
try:
|
||||||
cur.execute(sql_sizefile)
|
cur.execute(sql_sizefile)
|
||||||
boolean = True
|
boolean = True
|
||||||
|
|
||||||
except:
|
except psycopg2.errors.UndefinedTable:
|
||||||
boolean = False
|
boolean = False
|
||||||
|
|
||||||
if boolean == True:
|
if boolean is True:
|
||||||
size_file = (cur.fetchall())[0][0]
|
size_file = (cur.fetchall())[0][0]
|
||||||
else:
|
else:
|
||||||
size_file = ''
|
size_file = ''
|
||||||
@@ -628,148 +617,159 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
|
|||||||
else:
|
else:
|
||||||
size_file = self.taille_line.text()
|
size_file = self.taille_line.text()
|
||||||
|
|
||||||
self.table_lien.setItem(maxrow,0,QTableWidgetItem('new_value'))
|
self.table_lien.setItem(maxrow, 0, QTableWidgetItem('new_value'))
|
||||||
self.table_lien.setItem(maxrow,1,QTableWidgetItem(self.type_box.currentText()))
|
self.table_lien.setItem(maxrow, 1, QTableWidgetItem(self.type_box.currentText()))
|
||||||
self.table_lien.setItem(maxrow,2,QTableWidgetItem(self.url_line.text()))
|
self.table_lien.setItem(maxrow, 2, QTableWidgetItem(self.url_line.text()))
|
||||||
self.table_lien.setItem(maxrow,3,QTableWidgetItem(self.mime_box.currentText()))
|
self.table_lien.setItem(maxrow, 3, QTableWidgetItem(self.mime_box.currentText()))
|
||||||
self.table_lien.setItem(maxrow,4,QTableWidgetItem(self.format_box.currentText()))
|
self.table_lien.setItem(maxrow, 4, QTableWidgetItem(self.format_box.currentText()))
|
||||||
self.table_lien.setItem(maxrow,5,QTableWidgetItem(str(size_file)))
|
self.table_lien.setItem(maxrow, 5, QTableWidgetItem(str(size_file)))
|
||||||
|
|
||||||
global array_link
|
global array_link
|
||||||
array_link += "('"+ table +"','"+ schema +"','"+ self.type_box.currentText() +"','"+ self.url_line.text() +"','"+ self.mime_box.currentText() +"','"+ self.format_box.currentText() +"','"+ size_file +"'),"
|
array_link += "('" + table + "', '" + schema + "', '" + self.type_box.currentText() + "', '" + self.url_line.text() + "', '" + self.mime_box.currentText() + "', '" + self.format_box.currentText() + "', '" + size_file + "'),"
|
||||||
|
|
||||||
cur.close()
|
cur.close()
|
||||||
|
|
||||||
def add_contact(self):
|
def add_contact(self):
|
||||||
maxrow=self.table_contact.rowCount()
|
maxrow = self.table_contact.rowCount()
|
||||||
self.table_contact.insertRow(maxrow)
|
self.table_contact.insertRow(maxrow)
|
||||||
|
|
||||||
self.table_contact.setItem(maxrow,0,QTableWidgetItem('new_value'))
|
self.table_contact.setItem(maxrow, 0, QTableWidgetItem('new_value'))
|
||||||
self.table_contact.setItem(maxrow,1,QTableWidgetItem(self.role_box.currentText()))
|
self.table_contact.setItem(maxrow, 1, QTableWidgetItem(self.role_box.currentText()))
|
||||||
self.table_contact.setItem(maxrow,2,QTableWidgetItem(self.nom_line.text()))
|
self.table_contact.setItem(maxrow, 2, QTableWidgetItem(self.nom_line.text()))
|
||||||
self.table_contact.setItem(maxrow,3,QTableWidgetItem(self.organisation_box.currentText()))
|
self.table_contact.setItem(maxrow, 3, QTableWidgetItem(self.organisation_box.currentText()))
|
||||||
self.table_contact.setItem(maxrow,4,QTableWidgetItem(self.email_line.text()))
|
self.table_contact.setItem(maxrow, 4, QTableWidgetItem(self.email_line.text()))
|
||||||
self.table_contact.setItem(maxrow,5,QTableWidgetItem(self.telephone_line.text()))
|
self.table_contact.setItem(maxrow, 5, QTableWidgetItem(self.telephone_line.text()))
|
||||||
|
|
||||||
table = layer.dataProvider().uri().table()
|
table = layer.dataProvider().uri().table()
|
||||||
schema = layer.dataProvider().uri().schema()
|
schema = layer.dataProvider().uri().schema()
|
||||||
|
|
||||||
global array_contact
|
global array_contact
|
||||||
array_contact += "('"+ table +"','"+ schema +"','"+ self.role_box.currentText() +"','"+ self.nom_line.text() +"','"+ self.organisation_box.currentText() +"','"+ self.email_line.text() +"','"+ self.telephone_line.text() +"'),"
|
array_contact += "('" + table + "', '" + schema + "', '" + self.role_box.currentText() + "', '" + self.nom_line.text() + "', '" + self.organisation_box.currentText() + "', '" + self.email_line.text() + "', '" + self.telephone_line.text() + "'),"
|
||||||
|
|
||||||
def delete_lien(self):
|
def delete_lien(self):
|
||||||
|
fin = ''
|
||||||
global uid_delete_list_link,array_link
|
global uid_delete_list_link, array_link
|
||||||
lien_uid = self.table_lien.item(self.table_lien.currentRow(),0).text()
|
try:
|
||||||
|
lien_uid = self.table_lien.item(self.table_lien.currentRow(), 0).text()
|
||||||
|
except AttributeError:
|
||||||
|
lien_uid = True
|
||||||
self.table_lien.removeRow(self.table_lien.currentRow())
|
self.table_lien.removeRow(self.table_lien.currentRow())
|
||||||
if lien_uid == 'new_value':
|
if lien_uid == 'new_value':
|
||||||
position = self.table_lien.currentRow()
|
position = self.table_lien.currentRow()
|
||||||
if position < 0:
|
if position < 0:
|
||||||
position=position+1
|
position = position + 1
|
||||||
run_x = 0
|
run_x = 0
|
||||||
while position >= run_x:
|
while position >= run_x:
|
||||||
#print(position,run_x)
|
# print(position, run_x)
|
||||||
if run_x == 0:
|
if run_x == 0:
|
||||||
debut = array_link.find("(")
|
debut = array_link.find("(")
|
||||||
else:
|
else:
|
||||||
debut = array_link.find("(",fin+1)
|
debut = array_link.find("(", fin + 1)
|
||||||
fin = array_link.find(")",debut)
|
fin = array_link.find(")", debut)
|
||||||
#print(debut,fin)
|
# print(debut, fin)
|
||||||
if run_x == 50:
|
if run_x == 50:
|
||||||
break
|
break
|
||||||
run_x+=1
|
run_x += 1
|
||||||
#print(array_link[fin+1:])
|
# print(array_link[fin + 1:])
|
||||||
if debut <= 0:
|
if debut <= 0:
|
||||||
debut = 1
|
debut = 1
|
||||||
fin+= 1
|
fin += 1
|
||||||
array_link = array_link[:debut-1]+array_link[fin+1:]
|
array_link = array_link[:debut - 1] + array_link[fin + 1:]
|
||||||
#print('a:',array_link)
|
# print('a:', array_link)
|
||||||
|
elif lien_uid is True:
|
||||||
|
print('Pas de ligne "Lien"')
|
||||||
else:
|
else:
|
||||||
uid_delete_list_link += "'"+lien_uid+"',"
|
uid_delete_list_link += "'" + lien_uid + "',"
|
||||||
|
|
||||||
def delete_contact(self):
|
def delete_contact(self):
|
||||||
global uid_delete_list_contact,array_contact
|
fin = ''
|
||||||
contact_uid = self.table_contact.item(self.table_contact.currentRow(),0).text()
|
global uid_delete_list_contact, array_contact
|
||||||
|
try:
|
||||||
|
contact_uid = self.table_contact.item(self.table_contact.currentRow(), 0).text()
|
||||||
|
except AttributeError:
|
||||||
|
contact_uid = True
|
||||||
self.table_contact.removeRow(self.table_contact.currentRow())
|
self.table_contact.removeRow(self.table_contact.currentRow())
|
||||||
if contact_uid == 'new_value':
|
if contact_uid == 'new_value':
|
||||||
position = self.table_contact.currentRow()
|
position = self.table_contact.currentRow()
|
||||||
if position < 0:
|
if position < 0:
|
||||||
position=position+1
|
position = position + 1
|
||||||
#print('p:',position)
|
# print('p:', position)
|
||||||
run_x = 0
|
run_x = 0
|
||||||
while position >= run_x:
|
while position >= run_x:
|
||||||
if run_x == 0:
|
if run_x == 0:
|
||||||
debut = array_contact.find("(")
|
debut = array_contact.find("(")
|
||||||
else:
|
else:
|
||||||
debut = array_contact.find("(",fin+1)
|
debut = array_contact.find("(", fin + 1)
|
||||||
fin = array_contact.find(")",debut)
|
fin = array_contact.find(")", debut)
|
||||||
#print(debut,fin)
|
# print(debut, fin)
|
||||||
if run_x == 50:
|
if run_x == 50:
|
||||||
break
|
break
|
||||||
run_x+=1
|
run_x += 1
|
||||||
#print(array_contact[fin+1:])
|
# print(array_contact[fin + 1:])
|
||||||
if debut <= 0:
|
if debut <= 0:
|
||||||
debut = 1
|
debut = 1
|
||||||
fin+= 1
|
fin += 1
|
||||||
array_contact = array_contact[:debut-1]+array_contact[fin+1:]
|
array_contact = array_contact[:debut - 1] + array_contact[fin + 1:]
|
||||||
#print('a:',array_contact)
|
# print('a:', array_contact)
|
||||||
|
elif contact_uid is True:
|
||||||
|
print('Pas de ligne "Contact"')
|
||||||
else:
|
else:
|
||||||
uid_delete_list_contact += "'"+contact_uid+"',"
|
uid_delete_list_contact += "'" + contact_uid + "',"
|
||||||
|
|
||||||
|
|
||||||
def fletch_ref(self):
|
def fletch_ref(self):
|
||||||
cur=login_base()
|
cur = login_base()
|
||||||
|
|
||||||
SQL_categories="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.categories' ORDER BY code,item_order;"""
|
SQL_categories = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.categories' ORDER BY code, item_order;"""
|
||||||
SQL_themes="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.themes' ORDER BY label_fr;"""
|
SQL_themes = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.themes' ORDER BY label_fr;"""
|
||||||
SQL_langue="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.langue';"""
|
SQL_langue = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.langue';"""
|
||||||
SQL_encodage="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.encodage';"""
|
SQL_encodage = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.encodage';"""
|
||||||
SQL_frequency="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.publication_frequency' ORDER BY label_fr;"""
|
SQL_frequency = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.publication_frequency' ORDER BY label_fr;"""
|
||||||
SQL_confidentiality="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.confidentiality' ORDER BY label_fr;"""
|
SQL_confidentiality = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.confidentiality' ORDER BY label_fr;"""
|
||||||
SQL_license="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.license' ORDER BY label_fr;"""
|
SQL_license = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'dataset.license' ORDER BY label_fr;"""
|
||||||
SQL_type="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'link.type' ORDER BY label_fr;"""
|
SQL_type = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'link.type' ORDER BY label_fr;"""
|
||||||
SQL_mime="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'link.mime' ORDER BY label_fr;"""
|
SQL_mime = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'link.mime' ORDER BY label_fr;"""
|
||||||
SQL_format="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'link.format' ORDER BY label_fr;"""
|
SQL_format = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'link.format' ORDER BY label_fr;"""
|
||||||
SQL_role="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'contact.contact_role' ORDER BY label_fr;"""
|
SQL_role = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'contact.contact_role' ORDER BY label_fr;"""
|
||||||
SQL_organisation="""SELECT label_fr FROM metadata.glossary WHERE field LIKE 'contact.organisation' ORDER BY label_fr;"""
|
SQL_organisation = """SELECT label_fr FROM metadata.glossary WHERE field LIKE 'contact.organisation' ORDER BY label_fr;"""
|
||||||
|
|
||||||
cur.execute(SQL_categories)
|
cur.execute(SQL_categories)
|
||||||
categories_list=cur.fetchall()
|
categories_list = cur.fetchall()
|
||||||
cur.execute(SQL_themes)
|
cur.execute(SQL_themes)
|
||||||
themes_list=cur.fetchall()
|
themes_list = cur.fetchall()
|
||||||
cur.execute(SQL_langue)
|
cur.execute(SQL_langue)
|
||||||
langue_list=cur.fetchall()
|
langue_list = cur.fetchall()
|
||||||
cur.execute(SQL_encodage)
|
cur.execute(SQL_encodage)
|
||||||
encodage_list=cur.fetchall()
|
encodage_list = cur.fetchall()
|
||||||
|
|
||||||
cur.execute(SQL_frequency)
|
cur.execute(SQL_frequency)
|
||||||
frequency_list=cur.fetchall()
|
frequency_list = cur.fetchall()
|
||||||
cur.execute(SQL_confidentiality)
|
cur.execute(SQL_confidentiality)
|
||||||
confidentiality_list=cur.fetchall()
|
confidentiality_list = cur.fetchall()
|
||||||
cur.execute(SQL_license)
|
cur.execute(SQL_license)
|
||||||
license_list=cur.fetchall()
|
license_list = cur.fetchall()
|
||||||
|
|
||||||
cur.execute(SQL_type)
|
cur.execute(SQL_type)
|
||||||
type_list=cur.fetchall()
|
type_list = cur.fetchall()
|
||||||
cur.execute(SQL_mime)
|
cur.execute(SQL_mime)
|
||||||
mime_list=cur.fetchall()
|
mime_list = cur.fetchall()
|
||||||
cur.execute(SQL_format)
|
cur.execute(SQL_format)
|
||||||
format_list=cur.fetchall()
|
format_list = cur.fetchall()
|
||||||
cur.execute(SQL_role)
|
cur.execute(SQL_role)
|
||||||
role_list=cur.fetchall()
|
role_list = cur.fetchall()
|
||||||
cur.execute(SQL_organisation)
|
cur.execute(SQL_organisation)
|
||||||
organisation_list=cur.fetchall()
|
organisation_list = cur.fetchall()
|
||||||
|
|
||||||
return categories_list,themes_list,langue_list,encodage_list,frequency_list,confidentiality_list,license_list,type_list,mime_list,format_list,role_list,organisation_list
|
return categories_list, themes_list, langue_list, encodage_list, frequency_list, confidentiality_list, license_list, type_list, mime_list, format_list, role_list, organisation_list
|
||||||
|
|
||||||
cur.close()
|
cur.close()
|
||||||
|
|
||||||
def py_import_xml(self):
|
def py_import_xml(self):
|
||||||
folder = QFileDialog.getOpenFileName()
|
folder = QFileDialog.getOpenFileName()
|
||||||
if folder:
|
if folder:
|
||||||
folder=folder[0]
|
folder = folder[0]
|
||||||
if folder[len(folder)-4:] == '.xml' :
|
if folder[len(folder) - 4:] == '.xml':
|
||||||
print('is .xml')
|
print('is .xml')
|
||||||
def issues_open(self):
|
|
||||||
self.issues = CenRa_Issues()
|
# def issues_open(self):
|
||||||
self.issues.show()
|
# self.issues = CenRa_Issues()
|
||||||
|
# self.issues.show()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ name=CenRa_Metabase
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=CenRa_METABASE
|
description=CenRa_METABASE
|
||||||
version=0.3.0
|
version=0.3.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_METABASE:</h2></br><p><h3>19/05/2025 - Version 0.3.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>09/04/2025 - Version 0.2.3: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 0.2.2: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 0.2.1: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 0.2.0: </h3> - Deployment sur serveur SIG.</p></br><p><h3>07/01/2025 - Version 0.1.6: </h3> - ByPass du certif ssl ci erreur</p></br><p><h3>19/12/2024 - Version 0.1.5: </h3> - Fix les problem de lenteur qu'en la base est down.</p></br><p><h3>12/12/2024 - Version 0.1.4: </h3> - Crash Fix .</p></br><p><h3>08/10/2024 - Version 0.1.3: </h3> - Lecture de métadonnée des flux WMS/WFS.</p></br><p><h3>07/10/2024 - Version 0.1.2: </h3> - Correctif de bug.</p></br><p><h3>03/10/2024 - Version 0.1.1: </h3> - Remonte la fênetre dans la pille.</p></br><p><h3>26/08/2024 - Version 0.1.0: </h3> - Lancement du plugin CenRa_Metabase </p>
|
changelog=<h2>CenRa_METABASE:</h2></br><p><h3>30/07/2025 - Version 0.3.1: </h3> - Correctife de bug.</p></br><p><h3>19/05/2025 - Version 0.3.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>09/04/2025 - Version 0.2.3: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 0.2.2: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 0.2.1: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 0.2.0: </h3> - Deployment sur serveur SIG.</p></br><p><h3>07/01/2025 - Version 0.1.6: </h3> - ByPass du certif ssl ci erreur</p></br><p><h3>19/12/2024 - Version 0.1.5: </h3> - Fix les problem de lenteur qu'en la base est down.</p></br><p><h3>12/12/2024 - Version 0.1.4: </h3> - Crash Fix .</p></br><p><h3>08/10/2024 - Version 0.1.3: </h3> - Lecture de métadonnée des flux WMS/WFS.</p></br><p><h3>07/10/2024 - Version 0.1.2: </h3> - Correctif de bug.</p></br><p><h3>03/10/2024 - Version 0.1.1: </h3> - Remonte la fênetre dans la pille.</p></br><p><h3>26/08/2024 - Version 0.1.0: </h3> - Lancement du plugin CenRa_Metabase </p>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=python
|
tags=python
|
||||||
|
|||||||
@@ -3,9 +3,12 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
|
# import base64
|
||||||
|
# import psycopg2
|
||||||
|
# import psycopg2.extras
|
||||||
import os
|
import os
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
from qgis.PyQt.QtWidgets import QApplication
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
|
|
||||||
__copyright__ = "Copyright 2019, 3Liz"
|
__copyright__ = "Copyright 2019, 3Liz"
|
||||||
@@ -92,14 +95,6 @@ def resources_path(*args):
|
|||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def pyperclip():
|
|
||||||
dst = dirname(dirname(__file__))+"\\tools\\"
|
|
||||||
if os.access('N:/',os.R_OK):
|
|
||||||
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
|
||||||
try:
|
|
||||||
shutil.copy(src, dst)
|
|
||||||
except:
|
|
||||||
print('404')
|
|
||||||
|
|
||||||
def load_ui(*args):
|
def load_ui(*args):
|
||||||
"""Get compile UI file.
|
"""Get compile UI file.
|
||||||
@@ -113,65 +108,77 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def send_issues(url,titre,body,labels):
|
|
||||||
|
def pyperclip():
|
||||||
|
dst = dirname(dirname(__file__)) + "\\tools\\"
|
||||||
|
if os.access('N:/', os.R_OK):
|
||||||
|
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
||||||
|
try:
|
||||||
|
shutil.copy(src, dst)
|
||||||
|
except FileNotFoundError:
|
||||||
|
print('404')
|
||||||
|
except UnboundLocalError:
|
||||||
|
print('404')
|
||||||
|
|
||||||
|
|
||||||
|
def send_issues(url, titre, body, labels):
|
||||||
import requests
|
import requests
|
||||||
|
import urllib.request
|
||||||
import json
|
import json
|
||||||
import os
|
# import os
|
||||||
import qgis
|
# import qgis
|
||||||
|
|
||||||
usr = os.environ['USERNAME']
|
# usr = os.environ['USERNAME']
|
||||||
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
||||||
url=url+'?token='+token
|
url = url + '?token=' + token
|
||||||
|
|
||||||
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
|
||||||
|
|
||||||
|
headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'}
|
||||||
|
|
||||||
payload = {'title': titre, 'body': body, 'labels': labels}
|
payload = {'title': titre, 'body': body, 'labels': labels}
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except ValueError:
|
||||||
binar = False
|
binar = False
|
||||||
r = ''
|
r = ''
|
||||||
if binar:
|
if binar:
|
||||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def maj_verif(NAME):
|
def maj_verif(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
import urllib.request
|
import urllib.request
|
||||||
iface = qgis.utils.iface
|
iface = qgis.utils.iface
|
||||||
from qgis.core import Qgis
|
from qgis.core import Qgis
|
||||||
|
|
||||||
url = qgis.utils.pluginMetadata(NAME,'repository')
|
# url = qgis.utils.pluginMetadata(NAME, 'repository')
|
||||||
#URL = url+'/raw/branch/main/plugins.xml'
|
# URL = url+'/raw/branch/main/plugins.xml'
|
||||||
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||||
# print(URL)
|
# print(URL)
|
||||||
version = qgis.utils.pluginMetadata(NAME,'version')
|
version = qgis.utils.pluginMetadata(NAME, 'version')
|
||||||
len_version = len(version)
|
len_version = len(version)
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except urllib.error.URLError:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
try:
|
try:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
plugin_num = version_web.find(NAME)
|
plugin_num = version_web.find(NAME)
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
valeur_version_web = version_web.find('<version>', plugin_num) + 9
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
version_plugin = version_web[valeur_version_web:valeur_version_web + len_version]
|
||||||
if version_plugin != version:
|
if version_plugin != version:
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
except:
|
except urllib.error.URLError:
|
||||||
print("error gitea version ssl")
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
def tr(text, context="@default"):
|
|
||||||
return QApplication.translate(context, text)
|
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||||
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog')
|
||||||
return devmaj
|
return devmaj
|
||||||
@@ -4,14 +4,14 @@ __email__ = "info@3liz.org"
|
|||||||
|
|
||||||
|
|
||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
from qgis.PyQt.QtCore import QUrl, QSettings
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
from qgis.PyQt.QtWidgets import QAction
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
# include <QSettings>
|
||||||
'''
|
'''
|
||||||
from pg_metadata.connection_manager import (
|
from pg_metadata.connection_manager import (
|
||||||
store_connections,
|
store_connections,
|
||||||
@@ -25,15 +25,13 @@ from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
|||||||
'''
|
'''
|
||||||
import os
|
import os
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
# plugin_path,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
from .canvas_editor import PageRender_Editor
|
from .canvas_editor import PageRender_Editor
|
||||||
from .about_form import AboutDialog
|
from .about_form import AboutDialog
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
|
||||||
|
|
||||||
|
|
||||||
class PgPageRender:
|
class PgPageRender:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -45,18 +43,18 @@ class PgPageRender:
|
|||||||
self.dock_action = None
|
self.dock_action = None
|
||||||
self.help_action = None
|
self.help_action = None
|
||||||
plugin_dir = os.path.dirname(__file__)
|
plugin_dir = os.path.dirname(__file__)
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
global NAME
|
global NAME
|
||||||
NAME = plugin_dir[end_find:]
|
NAME = plugin_dir[end_find:]
|
||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_PAGERENDER','version')
|
version = qgis.utils.pluginMetadata('CenRa_PAGERENDER', 'version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("pagerender/version", 1, type=str)
|
versionUse = s.value("pagerender/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version):
|
||||||
s.setValue("pagerender/version", str(version))
|
s.setValue("pagerender/version", str(version))
|
||||||
print(versionUse,version)
|
print(versionUse, version)
|
||||||
self.open_about_dialog()
|
self.open_about_dialog()
|
||||||
|
|
||||||
def initGui(self):
|
def initGui(self):
|
||||||
@@ -74,8 +72,7 @@ class PgPageRender:
|
|||||||
if not self.canvas_editor:
|
if not self.canvas_editor:
|
||||||
self.canvas_editor = PageRender_Editor()
|
self.canvas_editor = PageRender_Editor()
|
||||||
|
|
||||||
|
self.pagerender_action = QAction(icon, 'CenRa_PAGERENDER', None)
|
||||||
self.pagerender_action = QAction(icon, 'CenRa_PAGERENDER',None)
|
|
||||||
self.toolBar.addAction(self.pagerender_action)
|
self.toolBar.addAction(self.pagerender_action)
|
||||||
self.pagerender_action.triggered.connect(self.open_editor)
|
self.pagerender_action.triggered.connect(self.open_editor)
|
||||||
'''
|
'''
|
||||||
@@ -117,6 +114,7 @@ class PgPageRender:
|
|||||||
"""
|
"""
|
||||||
dialog = AboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||||
@@ -128,7 +126,7 @@ class PgPageRender:
|
|||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.canvas_editor:
|
if self.canvas_editor:
|
||||||
iface.removePluginMenu('CenRa_PAGERENDER',self.pagerender_action)
|
iface.removePluginMenu('CenRa_PAGERENDER', self.pagerender_action)
|
||||||
|
|
||||||
if self.provider:
|
if self.provider:
|
||||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os.path
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
from qgis.PyQt.QtGui import QPixmap
|
# from qgis.PyQt.QtGui import QPixmap
|
||||||
from qgis.PyQt.QtWidgets import QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
|
|
||||||
from .tools.resources import devlog
|
from .tools.resources import devlog
|
||||||
|
|||||||
+202
-259
@@ -1,144 +1,84 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from collections import namedtuple
|
# from collections import namedtuple
|
||||||
from enum import Enum
|
# from enum import Enum
|
||||||
from functools import partial
|
# from functools import partial
|
||||||
from pathlib import Path
|
# from pathlib import Path
|
||||||
from xml.dom.minidom import parseString
|
# from xml.dom.minidom import parseString
|
||||||
from qgis.gui import *
|
# from qgis.gui import *
|
||||||
import qgis
|
# import qgis
|
||||||
from qgis.core import (
|
from qgis.core import QgsSettings
|
||||||
NULL,
|
from qgis.PyQt.QtCore import Qt
|
||||||
QgsApplication,
|
# from qgis.PyQt.QtPrintSupport import QPrinter
|
||||||
QgsScaleBarSettings,
|
# from qgis.PyQt.QtWebKitWidgets import QWebPage
|
||||||
QgsDataSourceUri,
|
|
||||||
QgsProject,
|
|
||||||
QgsProviderConnectionException,
|
|
||||||
QgsProviderRegistry,
|
|
||||||
QgsRasterLayer,
|
|
||||||
QgsSettings,
|
|
||||||
QgsVectorLayer,
|
|
||||||
QgsGeometry,
|
|
||||||
QgsPrintLayout,
|
|
||||||
QgsReadWriteContext,
|
|
||||||
QgsLayoutItemMap,
|
|
||||||
QgsLayoutItemPage,
|
|
||||||
QgsLayoutSize,
|
|
||||||
QgsUnitTypes,
|
|
||||||
QgsLayoutPoint,
|
|
||||||
QgsLayoutItemLabel,
|
|
||||||
QgsLayoutItemPicture,
|
|
||||||
QgsLayoutItemLegend,
|
|
||||||
QgsLegendStyle,
|
|
||||||
QgsLayoutItemScaleBar,
|
|
||||||
QgsLayerTreeGroup,
|
|
||||||
QgsCoordinateReferenceSystem,
|
|
||||||
QgsCoordinateTransform,
|
|
||||||
QgsLayerTree,
|
|
||||||
QgsLayoutTableColumn,
|
|
||||||
QgsRectangle,
|
|
||||||
QgsLayoutItemMapOverviewStack,
|
|
||||||
QgsLayoutItemHtml,
|
|
||||||
)
|
|
||||||
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt
|
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie
|
|
||||||
from qgis.PyQt.QtPrintSupport import QPrinter
|
|
||||||
#from qgis.PyQt.QtWebKitWidgets import QWebPage
|
|
||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
QDialog,
|
||||||
QAction,
|
|
||||||
QDockWidget,
|
|
||||||
QFileDialog,
|
QFileDialog,
|
||||||
QInputDialog,
|
|
||||||
QMenu,
|
|
||||||
QToolButton,
|
|
||||||
QTableWidget,
|
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QVBoxLayout,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui
|
||||||
from qgis.PyQt.QtWidgets import QApplication
|
from qgis.PyQt.QtWidgets import QApplication
|
||||||
from qgis.PyQt.QtCore import QSettings,QPointF
|
from qgis.PyQt.QtCore import QSettings
|
||||||
|
|
||||||
from qgis.PyQt.QtXml import QDomDocument
|
# from qgis.PyQt.QtXml import QDomDocument
|
||||||
from qgis.utils import iface
|
# from qgis.utils import iface
|
||||||
import glob
|
# import glob
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
from datetime import date
|
# from datetime import date
|
||||||
|
|
||||||
last_select = None
|
last_select = None
|
||||||
maxV=210
|
maxV = 210
|
||||||
maxH=296
|
maxH = 296
|
||||||
EDITOR_CLASS = load_ui('CenRa_PageRender_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_PageRender_base.ui')
|
||||||
LOGGER = logging.getLogger('CenRa_PageRender')
|
LOGGER = logging.getLogger('CenRa_PageRender')
|
||||||
url_osm = 'https://osm.datagrandest.fr/mapcache/?crs=EPSG:2154&featureCount=10&format=image/png&layers=pure&maxHeight=256&maxWidth=256&styles=&url=https://osm.datagrandest.fr/mapcache'
|
url_osm = 'https://osm.datagrandest.fr/mapcache/?crs=EPSG:2154&featureCount=10&format=image/png&layers=pure&maxHeight=256&maxWidth=256&styles=&url=https://osm.datagrandest.fr/mapcache'
|
||||||
url_ortho = 'http://tiles.craig.fr/ortho/service/?crs=EPSG:2154&featureCount=10&format=image/jpeg&layers=ortho&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/ortho/service'
|
url_ortho = 'http://tiles.craig.fr/ortho/service/?crs=EPSG:2154&featureCount=10&format=image/jpeg&layers=ortho&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/ortho/service'
|
||||||
url_mnt = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=relief&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
url_mnt = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=relief&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
||||||
url_pente = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=pente&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
url_pente = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=pente&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
|
||||||
data_source = [
|
data_source = ['CENRA', 'IGN', 'CRAIG', 'OpenStreetMap', 'Sandre', 'BRGM', 'MUSÉUM NATIONAL D’HISTOIRE NATURELLE', "Muséum national d'Histoire naturelle", 'ONF', '20xx LPO', 'ofb.gouv.fr', 'Stamen Design', 'MTES', 'MTES', 'FEDER', 'DREAL Auvergne-Rhône-Alpes', 'INSEE', 'DGFiP', 'Fédération des Conservatoires d’espaces naturels', 'Plan cadastral informatisé - Etalab - juillet 202X', 'Parcellaire Express - IGN - 202X']
|
||||||
'CENRA',
|
|
||||||
'IGN',
|
|
||||||
'CRAIG',
|
|
||||||
'OpenStreetMap',
|
|
||||||
'Sandre',
|
|
||||||
'BRGM',
|
|
||||||
'MUSÉUM NATIONAL D’HISTOIRE NATURELLE',
|
|
||||||
"Muséum national d'Histoire naturelle",
|
|
||||||
'ONF',
|
|
||||||
'20xx LPO',
|
|
||||||
'ofb.gouv.fr',
|
|
||||||
'Stamen Design',
|
|
||||||
'MTES',
|
|
||||||
'MTES',
|
|
||||||
'FEDER',
|
|
||||||
'DREAL Auvergne-Rhône-Alpes',
|
|
||||||
'INSEE',
|
|
||||||
'DGFiP',
|
|
||||||
'Fédération des Conservatoires d’espaces naturels',
|
|
||||||
'Plan cadastral informatisé - Etalab - juillet 202X',
|
|
||||||
'Parcellaire Express - IGN - 202X',
|
|
||||||
]
|
|
||||||
class PageRender_Editor(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
|
||||||
|
class PageRender_Editor(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
|
|
||||||
self.varLandscape = {}
|
self.varLandscape = {}
|
||||||
self.varPortrait = {}
|
self.varPortrait = {}
|
||||||
self.rotate_object = {
|
self.rotate_object = {
|
||||||
'Titre':0,
|
'Titre': 0,
|
||||||
'Sous_titre':0,
|
'Sous_titre': 0,
|
||||||
'Carte':0,
|
'Carte': 0,
|
||||||
'Carte_2':0,
|
'Carte_2': 0,
|
||||||
'Legande':0,
|
'Legande': 0,
|
||||||
'Arrow':0,
|
'Arrow': 0,
|
||||||
'Echelle':0,
|
'Echelle': 0,
|
||||||
'Logo':0,
|
'Logo': 0,
|
||||||
'Credit':0,
|
'Credit': 0,
|
||||||
'Source':0,
|
'Source': 0,
|
||||||
'Echelle_2':0,
|
'Echelle_2': 0,
|
||||||
'Logo_2':0,}
|
'Logo_2': 0}
|
||||||
|
|
||||||
path = ''
|
path = ''
|
||||||
ix = 0
|
ix = 0
|
||||||
plugin_dir = str(os.path.dirname(os.path.abspath(__file__))).split(os.sep)
|
plugin_dir = str(os.path.dirname(os.path.abspath(__file__))).split(os.sep)
|
||||||
for i in plugin_dir:
|
for i in plugin_dir:
|
||||||
ix = ix+1
|
ix = ix + 1
|
||||||
path = path+'\\'+i
|
path = path + '\\' + i
|
||||||
self.path = path[1:]+'\\demoV2.py'
|
self.path = path[1:] + '\\demoV2.py'
|
||||||
|
|
||||||
#self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);')
|
# self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);')
|
||||||
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui','rotate.png')))
|
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui', 'rotate.png')))
|
||||||
|
|
||||||
self.horizontalSlider.valueChanged.connect(self.horizontal)
|
self.horizontalSlider.valueChanged.connect(self.horizontal)
|
||||||
self.verticalSlider.valueChanged.connect(self.vertical)
|
self.verticalSlider.valueChanged.connect(self.vertical)
|
||||||
@@ -151,44 +91,44 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.toolButton_2.clicked.connect(self.type_page)
|
self.toolButton_2.clicked.connect(self.type_page)
|
||||||
self.pushButton_2.clicked.connect(self.load)
|
self.pushButton_2.clicked.connect(self.load)
|
||||||
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
||||||
#self.setAcceptHoverEvents(True)
|
# self.setAcceptHoverEvents(True)
|
||||||
self.tableWidget.setTabKeyNavigation(False)
|
self.tableWidget.setTabKeyNavigation(False)
|
||||||
|
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
self.setNavigator()
|
self.setNavigator()
|
||||||
self.verticalScrollBar.setValue(self.frame.y())
|
self.verticalScrollBar.setValue(self.frame.y())
|
||||||
|
|
||||||
def mousePressEvent(self, event):
|
def mousePressEvent(self, event):
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
QApplication.setOverrideCursor(Qt.CursorShape(18))
|
QApplication.setOverrideCursor(Qt.CursorShape(18))
|
||||||
global lastPos
|
global lastPos
|
||||||
lastPos = {'x':event.pos().x(),'y':event.pos().y()}
|
lastPos = {'x': event.pos().x(), 'y': event.pos().y()}
|
||||||
|
|
||||||
def moveFrame(self):
|
def moveFrame(self):
|
||||||
self.frame.move(self.frame.x(),self.verticalScrollBar.value())
|
self.frame.move(self.frame.x(), self.verticalScrollBar.value())
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
#if event.modifiers() & Qt.ControlModifier:
|
# if event.modifiers() & Qt.ControlModifier:
|
||||||
if event.key() == Qt.Key(0x01000015):
|
if event.key() == Qt.Key(0x01000015):
|
||||||
self.verticalSlider.setValue(self.spinBox_2.value()+1)
|
self.verticalSlider.setValue(self.spinBox_2.value() + 1)
|
||||||
if event.key() == Qt.Key(0x01000013):
|
if event.key() == Qt.Key(0x01000013):
|
||||||
self.verticalSlider.setValue(self.spinBox_2.value()-1)
|
self.verticalSlider.setValue(self.spinBox_2.value() - 1)
|
||||||
if event.key() == Qt.Key(0x01000014):
|
if event.key() == Qt.Key(0x01000014):
|
||||||
self.horizontalSlider.setValue(self.spinBox.value()+1)
|
self.horizontalSlider.setValue(self.spinBox.value() + 1)
|
||||||
if event.key() == Qt.Key(0x01000012):
|
if event.key() == Qt.Key(0x01000012):
|
||||||
self.horizontalSlider.setValue(self.spinBox.value()-1)
|
self.horizontalSlider.setValue(self.spinBox.value() - 1)
|
||||||
|
|
||||||
|
def wheelEvent(self, event):
|
||||||
def wheelEvent(self,event):
|
|
||||||
if (event.angleDelta().y() >= 1):
|
if (event.angleDelta().y() >= 1):
|
||||||
vsb = self.verticalScrollBar.value()+50
|
vsb = self.verticalScrollBar.value() + 50
|
||||||
else:
|
else:
|
||||||
vsb = self.verticalScrollBar.value()-50
|
vsb = self.verticalScrollBar.value() - 50
|
||||||
self.verticalScrollBar.setValue(vsb)
|
self.verticalScrollBar.setValue(vsb)
|
||||||
|
|
||||||
def mouseMoveEvent(self, event):
|
def mouseMoveEvent(self, event):
|
||||||
updated_cursor_position = event.pos()
|
updated_cursor_position = event.pos()
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
selection_name = (self.tableWidget.currentItem()).text()
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
selection = 0
|
selection = 0
|
||||||
@@ -198,96 +138,97 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
frame_x = self.frame.x()
|
frame_x = self.frame.x()
|
||||||
frame_y = self.frame.y()
|
frame_y = self.frame.y()
|
||||||
frame_w = self.frame.width()+frame_x
|
frame_w = self.frame.width() + frame_x
|
||||||
frame_h = self.frame.height()+frame_y
|
frame_h = self.frame.height() + frame_y
|
||||||
global lastPos
|
global lastPos
|
||||||
|
|
||||||
orig_position_w = selection.width()
|
orig_position_w = selection.width()
|
||||||
orig_position_h = selection.height()
|
orig_position_h = selection.height()
|
||||||
if (frame_x <= round(updated_cursor_position.x()) <= frame_w and self.radioButton.isChecked() == True):
|
if (frame_x <= round(updated_cursor_position.x()) <= frame_w and self.radioButton.isChecked() is True):
|
||||||
updated_cursor_position_x = orig_position_w+(round(updated_cursor_position.x()-lastPos['x']))
|
updated_cursor_position_x = orig_position_w + (round(updated_cursor_position.x() - lastPos['x']))
|
||||||
lastPos['x'] = event.pos().x()
|
lastPos['x'] = event.pos().x()
|
||||||
selection.resize(updated_cursor_position_x,orig_position_h)
|
selection.resize(updated_cursor_position_x, orig_position_h)
|
||||||
self.horizontalSlider.setValue(round(updated_cursor_position_x/3.5))
|
self.horizontalSlider.setValue(round(updated_cursor_position_x / 3.5))
|
||||||
orig_position_w = selection.width()
|
orig_position_w = selection.width()
|
||||||
orig_position_h = selection.height()
|
orig_position_h = selection.height()
|
||||||
if (frame_y <= round(updated_cursor_position.y()) <= frame_h and self.radioButton.isChecked() == True):
|
if (frame_y <= round(updated_cursor_position.y()) <= frame_h and self.radioButton.isChecked() is True):
|
||||||
updated_cursor_position_y = orig_position_h+(round(updated_cursor_position.y()-lastPos['y']))
|
updated_cursor_position_y = orig_position_h + (round(updated_cursor_position.y() - lastPos['y']))
|
||||||
lastPos['y'] = event.pos().y()
|
lastPos['y'] = event.pos().y()
|
||||||
selection.resize(orig_position_w,updated_cursor_position_y)
|
selection.resize(orig_position_w, updated_cursor_position_y)
|
||||||
self.verticalSlider.setValue(round(updated_cursor_position_y/3.5))
|
self.verticalSlider.setValue(round(updated_cursor_position_y / 3.5))
|
||||||
|
|
||||||
orig_position_x = selection.pos().x()
|
orig_position_x = selection.pos().x()
|
||||||
orig_position_y = selection.pos().y()
|
orig_position_y = selection.pos().y()
|
||||||
if (frame_x <= round(updated_cursor_position.x()) <= frame_w and self.radioButton.isChecked() == False):
|
if (frame_x <= round(updated_cursor_position.x()) <= frame_w and self.radioButton.isChecked() is False):
|
||||||
updated_cursor_position_x = orig_position_x+(round(updated_cursor_position.x()-lastPos['x']))
|
updated_cursor_position_x = orig_position_x + (round(updated_cursor_position.x() - lastPos['x']))
|
||||||
lastPos['x'] = event.pos().x()
|
lastPos['x'] = event.pos().x()
|
||||||
#print(updated_cursor_position_x)
|
# print(updated_cursor_position_x)
|
||||||
selection.move(updated_cursor_position_x,orig_position_y)
|
selection.move(updated_cursor_position_x, orig_position_y)
|
||||||
self.horizontalSlider.setValue(round(updated_cursor_position_x/3.5))
|
self.horizontalSlider.setValue(round(updated_cursor_position_x / 3.5))
|
||||||
|
|
||||||
orig_position_x = selection.pos().x()
|
orig_position_x = selection.pos().x()
|
||||||
orig_position_y = selection.pos().y()
|
orig_position_y = selection.pos().y()
|
||||||
if (frame_y <= round(updated_cursor_position.y()) <= frame_h and self.radioButton.isChecked() == False):
|
if (frame_y <= round(updated_cursor_position.y()) <= frame_h and self.radioButton.isChecked() is False):
|
||||||
updated_cursor_position_y = orig_position_y+(round(updated_cursor_position.y()-lastPos['y']))
|
updated_cursor_position_y = orig_position_y + (round(updated_cursor_position.y() - lastPos['y']))
|
||||||
lastPos['y'] = event.pos().y()
|
lastPos['y'] = event.pos().y()
|
||||||
#print(updated_cursor_position_y)
|
# print(updated_cursor_position_y)
|
||||||
selection.move(orig_position_x,updated_cursor_position_y)
|
selection.move(orig_position_x, updated_cursor_position_y)
|
||||||
self.verticalSlider.setValue(round(updated_cursor_position_y/3.5))
|
self.verticalSlider.setValue(round(updated_cursor_position_y / 3.5))
|
||||||
|
|
||||||
def mouseReleaseEvent(self, event):
|
def mouseReleaseEvent(self, event):
|
||||||
#print('x: {0}, y: {1}'.format(event.pos().x(), event.pos().y()))
|
# print('x: {0}, y: {1}'.format(event.pos().x(), event.pos().y()))
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
QApplication.restoreOverrideCursor()
|
QApplication.restoreOverrideCursor()
|
||||||
|
|
||||||
def select_file(self):
|
def select_file(self):
|
||||||
options = QFileDialog.Options()
|
options = QFileDialog.Options()
|
||||||
options |= QFileDialog.ShowDirsOnly
|
options |= QFileDialog.ShowDirsOnly
|
||||||
folder = QFileDialog.getOpenFileName(self, "Sélection du fichier ",'','Python(*.py)')
|
folder = QFileDialog.getOpenFileName(self, "Sélection du fichier ", '', 'Python(*.py)')
|
||||||
if folder[0] != '':
|
if folder[0] != '':
|
||||||
return folder[0]
|
return folder[0]
|
||||||
else:
|
else:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
folder = self.select_file()
|
folder = self.select_file()
|
||||||
logopath = folder
|
logopath = folder
|
||||||
if logopath != '':
|
if logopath != '':
|
||||||
#logopath = (os.path.dirname(logopath).split('/'))
|
# logopath = (os.path.dirname(logopath).split('/'))
|
||||||
sourcefile = open(logopath, 'r')
|
sourcefile = open(logopath, 'r')
|
||||||
splitsource = sourcefile.read().splitlines()
|
splitsource = sourcefile.read().splitlines()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
all_element = ['_locals','_size','_rotate']
|
all_element = ['_locals', '_size', '_rotate']
|
||||||
for children in all_children:
|
for children in all_children:
|
||||||
flen = 0
|
flen = 0
|
||||||
for element in all_element:
|
for element in all_element:
|
||||||
flen = 0
|
flen = 0
|
||||||
recherche_element = children.objectName()+element
|
recherche_element = children.objectName() + element
|
||||||
for find_it in splitsource:
|
for find_it in splitsource:
|
||||||
if find_it.find(recherche_element) != -1:
|
if find_it.find(recherche_element) != -1:
|
||||||
flen = flen+1
|
flen = flen + 1
|
||||||
if flen == 1:
|
if flen == 1:
|
||||||
if element != '_rotate':
|
if element != '_rotate':
|
||||||
value_find = (find_it[find_it[:].find('(')+1:-33]).split(',')
|
value_find = (find_it[find_it[:].find('(') + 1:-33]).split(',')
|
||||||
if element == '_size':
|
if element == '_size':
|
||||||
Psize_h = float(value_find[0])*3.5
|
Psize_h = float(value_find[0]) * 3.5
|
||||||
Psize_w = float(value_find[1])*3.5
|
Psize_w = float(value_find[1]) * 3.5
|
||||||
if element == '_locals':
|
if element == '_locals':
|
||||||
Plocals_h = float(value_find[0])*3.5
|
Plocals_h = float(value_find[0]) * 3.5
|
||||||
Plocals_w = float(value_find[1])*3.5
|
Plocals_w = float(value_find[1]) * 3.5
|
||||||
else:
|
else:
|
||||||
Protate = float((find_it[find_it[:].find('=')+2:]).split(',')[0])
|
Protate = float((find_it[find_it[:].find('=') + 2:]).split(',')[0])
|
||||||
if flen == 3:
|
if flen == 3:
|
||||||
if element != '_rotate':
|
if element != '_rotate':
|
||||||
value_find = (find_it[find_it[:].find('(')+1:-33]).split(',')
|
value_find = (find_it[find_it[:].find('(') + 1:-33]).split(',')
|
||||||
if element == '_size':
|
if element == '_size':
|
||||||
Lsize_h = float(value_find[0])*3.5
|
Lsize_h = float(value_find[0]) * 3.5
|
||||||
Lsize_w = float(value_find[1])*3.5
|
Lsize_w = float(value_find[1]) * 3.5
|
||||||
if element == '_locals':
|
if element == '_locals':
|
||||||
Llocals_h = float(value_find[0])*3.5
|
Llocals_h = float(value_find[0]) * 3.5
|
||||||
Llocals_w = float(value_find[1])*3.5
|
Llocals_w = float(value_find[1]) * 3.5
|
||||||
else:
|
else:
|
||||||
Lrotate = float((find_it[find_it[:].find('=')+2:]).split(',')[0])
|
Lrotate = float((find_it[find_it[:].find('=') + 2:]).split(',')[0])
|
||||||
#print('sh',Psize_h,',sw',Psize_w,',lh',Plocals_h,',lw',Plocals_w,',r',Protate)
|
# print('sh',Psize_h,',sw',Psize_w,',lh',Plocals_h,',lw',Plocals_w,',r',Protate)
|
||||||
if Lrotate == 90 or Lrotate == 270:
|
if Lrotate == 90 or Lrotate == 270:
|
||||||
old = Lsize_w
|
old = Lsize_w
|
||||||
Lsize_w = Lsize_h
|
Lsize_w = Lsize_h
|
||||||
@@ -297,12 +238,12 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
|
|||||||
Psize_w = Psize_h
|
Psize_w = Psize_h
|
||||||
Psize_h = old
|
Psize_h = old
|
||||||
if self.toolButton_2.text() == 'Landscape':
|
if self.toolButton_2.text() == 'Landscape':
|
||||||
children.resize(round(Lsize_h),round(Lsize_w))
|
children.resize(round(Lsize_h), round(Lsize_w))
|
||||||
children.move(round(Llocals_h),round(Llocals_w))
|
children.move(round(Llocals_h), round(Llocals_w))
|
||||||
self.rotate_object[children.objectName()] = Lrotate
|
self.rotate_object[children.objectName()] = Lrotate
|
||||||
if self.toolButton_2.text() == 'Portrait':
|
if self.toolButton_2.text() == 'Portrait':
|
||||||
children.resize(round(Psize_h),round(Psize_w))
|
children.resize(round(Psize_h), round(Psize_w))
|
||||||
children.move(round(Plocals_h),round(Plocals_w))
|
children.move(round(Plocals_h), round(Plocals_w))
|
||||||
self.rotate_object[children.objectName()] = Protate
|
self.rotate_object[children.objectName()] = Protate
|
||||||
|
|
||||||
def valueSlider(self):
|
def valueSlider(self):
|
||||||
@@ -311,52 +252,53 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
def setNavigator(self):
|
def setNavigator(self):
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
xR=0
|
xR = 0
|
||||||
baseRow = self.tableWidget.rowCount()
|
baseRow = self.tableWidget.rowCount()
|
||||||
while baseRow >= xR:
|
while baseRow >= xR:
|
||||||
self.tableWidget.removeRow(0)
|
self.tableWidget.removeRow(0)
|
||||||
xR = xR+1
|
xR = xR + 1
|
||||||
self.tableWidget.clear()
|
self.tableWidget.clear()
|
||||||
id=0
|
# id = 0
|
||||||
for children in all_children:
|
for children in all_children:
|
||||||
position = self.tableWidget.rowCount()
|
position = self.tableWidget.rowCount()
|
||||||
self.tableWidget.insertRow(position)
|
self.tableWidget.insertRow(position)
|
||||||
self.tableWidget.setItem(position,0,QTableWidgetItem(children.objectName()))
|
self.tableWidget.setItem(position, 0, QTableWidgetItem(children.objectName()))
|
||||||
#print(children.objectName())
|
# print(children.objectName())
|
||||||
|
|
||||||
def export(self):
|
def export(self):
|
||||||
self.type_page()
|
self.type_page()
|
||||||
self.type_page()
|
self.type_page()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
#selection_name = (self.tableWidget.currentItem()).text()
|
# selection_name = (self.tableWidget.currentItem()).text()
|
||||||
export_str = """
|
export_str = """
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
QgsLayoutSize,
|
QgsLayoutSize,
|
||||||
QgsUnitTypes,
|
QgsUnitTypes,
|
||||||
QgsLayoutPoint,
|
QgsLayoutPoint,
|
||||||
)
|
)
|
||||||
def fletch_canvas(self):
|
def fletch_canvas(self):
|
||||||
if self.radioButton_6.isChecked():
|
if self.radioButton_6.isChecked():
|
||||||
values_page = 'A4'
|
values_page = 'A4'
|
||||||
else:
|
else:
|
||||||
values_page = 'A3'
|
values_page = 'A3'
|
||||||
if self.radioButton_7.isChecked():
|
if self.radioButton_7.isChecked():
|
||||||
page_rotate = 'Portrait'
|
page_rotate = 'Portrait'
|
||||||
else:
|
else:
|
||||||
page_rotate = 'Landscape'
|
page_rotate = 'Landscape'
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type = ["Portrait","Landscape"]
|
type = ["Portrait", "Landscape"]
|
||||||
page = ["A4","A3"]
|
page = ["A4", "A3"]
|
||||||
for page_type in type:
|
for page_type in type:
|
||||||
export_str = export_str+"""
|
export_str = export_str + """
|
||||||
if page_rotate == '"""+page_type+"""':"""
|
if page_rotate == '""" + page_type + """':"""
|
||||||
for page_size in page:
|
for page_size in page:
|
||||||
export_str = export_str+"""
|
export_str = export_str + """
|
||||||
if values_page == '"""+page_size+"""':"""
|
if values_page == '""" + page_size + """':"""
|
||||||
for children in all_children:
|
for children in all_children:
|
||||||
selection = children
|
selection = children
|
||||||
if page_type == 'Portrait':
|
if page_type == 'Portrait':
|
||||||
item_rotate_object=self.varPortrait[selection.objectName()+'_rotate'][0]
|
item_rotate_object = self.varPortrait[selection.objectName() + '_rotate'][0]
|
||||||
if item_rotate_object == 0 or item_rotate_object == 180:
|
if item_rotate_object == 0 or item_rotate_object == 180:
|
||||||
sw = 0
|
sw = 0
|
||||||
sh = 1
|
sh = 1
|
||||||
@@ -364,17 +306,17 @@ def fletch_canvas(self):
|
|||||||
sw = 1
|
sw = 1
|
||||||
sh = 0
|
sh = 0
|
||||||
if page_size == 'A3':
|
if page_size == 'A3':
|
||||||
size_w = (round((self.varPortrait[selection.objectName()+'_size'][sw]/3.5)*1.41))
|
size_w = (round((self.varPortrait[selection.objectName() + '_size'][sw] / 3.5) * 1.41))
|
||||||
size_h = (round((self.varPortrait[selection.objectName()+'_size'][sh]/3.5)*1.41))
|
size_h = (round((self.varPortrait[selection.objectName() + '_size'][sh] / 3.5) * 1.41))
|
||||||
locals_w = (round((self.varPortrait[selection.objectName()+'_locals'][1]/3.5)*1.41))
|
locals_w = (round((self.varPortrait[selection.objectName() + '_locals'][1] / 3.5) * 1.41))
|
||||||
locals_h = (round((self.varPortrait[selection.objectName()+'_locals'][0]/3.5)*1.41))
|
locals_h = (round((self.varPortrait[selection.objectName() + '_locals'][0] / 3.5) * 1.41))
|
||||||
else:
|
else:
|
||||||
size_w = (round(self.varPortrait[selection.objectName()+'_size'][sw])/3.5)
|
size_w = (round(self.varPortrait[selection.objectName() + '_size'][sw]) / 3.5)
|
||||||
size_h = (round(self.varPortrait[selection.objectName()+'_size'][sh]/3.5))
|
size_h = (round(self.varPortrait[selection.objectName() + '_size'][sh] / 3.5))
|
||||||
locals_w = (round(self.varPortrait[selection.objectName()+'_locals'][1]/3.5))
|
locals_w = (round(self.varPortrait[selection.objectName() + '_locals'][1] / 3.5))
|
||||||
locals_h = (round(self.varPortrait[selection.objectName()+'_locals'][0]/3.5))
|
locals_h = (round(self.varPortrait[selection.objectName() + '_locals'][0] / 3.5))
|
||||||
if page_type == 'Landscape':
|
if page_type == 'Landscape':
|
||||||
item_rotate_object=self.varLandscape[selection.objectName()+'_rotate'][0]
|
item_rotate_object = self.varLandscape[selection.objectName() + '_rotate'][0]
|
||||||
if item_rotate_object == 0 or item_rotate_object == 180:
|
if item_rotate_object == 0 or item_rotate_object == 180:
|
||||||
sw = 0
|
sw = 0
|
||||||
sh = 1
|
sh = 1
|
||||||
@@ -382,42 +324,43 @@ def fletch_canvas(self):
|
|||||||
sw = 1
|
sw = 1
|
||||||
sh = 0
|
sh = 0
|
||||||
if page_size == 'A3':
|
if page_size == 'A3':
|
||||||
size_w = (round((self.varLandscape[selection.objectName()+'_size'][sw]/3.5)*1.41))
|
size_w = (round((self.varLandscape[selection.objectName() + '_size'][sw] / 3.5) * 1.41))
|
||||||
size_h = (round((self.varLandscape[selection.objectName()+'_size'][sh]/3.5)*1.41))
|
size_h = (round((self.varLandscape[selection.objectName() + '_size'][sh] / 3.5) * 1.41))
|
||||||
locals_w = (round((self.varLandscape[selection.objectName()+'_locals'][1]/3.5)*1.41))
|
locals_w = (round((self.varLandscape[selection.objectName() + '_locals'][1] / 3.5) * 1.41))
|
||||||
locals_h = (round((self.varLandscape[selection.objectName()+'_locals'][0]/3.5)*1.41))
|
locals_h = (round((self.varLandscape[selection.objectName() + '_locals'][0] / 3.5) * 1.41))
|
||||||
else:
|
else:
|
||||||
size_w = (round(self.varLandscape[selection.objectName()+'_size'][sw])/3.5)
|
size_w = (round(self.varLandscape[selection.objectName() + '_size'][sw]) / 3.5)
|
||||||
size_h = (round(self.varLandscape[selection.objectName()+'_size'][sh]/3.5))
|
size_h = (round(self.varLandscape[selection.objectName() + '_size'][sh] / 3.5))
|
||||||
locals_w = (round(self.varLandscape[selection.objectName()+'_locals'][1]/3.5))
|
locals_w = (round(self.varLandscape[selection.objectName() + '_locals'][1] / 3.5))
|
||||||
locals_h = (round(self.varLandscape[selection.objectName()+'_locals'][0]/3.5))
|
locals_h = (round(self.varLandscape[selection.objectName() + '_locals'][0] / 3.5))
|
||||||
|
|
||||||
if item_rotate_object == 270:
|
if item_rotate_object == 270:
|
||||||
locals_h= locals_h + size_w
|
locals_h = locals_h + size_w
|
||||||
if item_rotate_object == 180:
|
if item_rotate_object == 180:
|
||||||
locals_h= locals_h + size_h
|
locals_h = locals_h + size_h
|
||||||
locals_w= locals_w + size_w
|
locals_w = locals_w + size_w
|
||||||
|
|
||||||
size_w = str(size_w)
|
size_w = str(size_w)
|
||||||
size_h = str(size_h)
|
size_h = str(size_h)
|
||||||
locals_w = str(locals_w)
|
locals_w = str(locals_w)
|
||||||
locals_h = str(locals_h)
|
locals_h = str(locals_h)
|
||||||
|
|
||||||
export_str = export_str+"""
|
export_str = export_str + """
|
||||||
self.template_parameters['"""+selection.objectName()+"""_size'] = QgsLayoutSize("""+size_w+""","""+ size_h+""", QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['""" + selection.objectName() + """_size'] = QgsLayoutSize(""" + size_w + """,""" + size_h + """, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['"""+selection.objectName()+"""_locals'] = QgsLayoutPoint("""+locals_w+""", """+locals_h+""", QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['""" + selection.objectName() + """_locals'] = QgsLayoutPoint(""" + locals_w + """, """ + locals_h + """, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['"""+selection.objectName()+"""_rotate'] = """+str(item_rotate_object)
|
self.template_parameters['""" + selection.objectName() + """_rotate'] = """ + str(item_rotate_object)
|
||||||
export_str= export_str+"""
|
export_str = export_str + """
|
||||||
return self.template_parameters"""
|
return self.template_parameters"""
|
||||||
sourceFile = open(self.path,'w')
|
sourceFile = open(self.path, 'w')
|
||||||
print(export_str, file = sourceFile)
|
print(export_str, file=sourceFile)
|
||||||
sourceFile.close()
|
sourceFile.close()
|
||||||
|
|
||||||
def type_page(self):
|
def type_page(self):
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
if self.toolButton_2.text() == 'Landscape':
|
if self.toolButton_2.text() == 'Landscape':
|
||||||
self.horizontalSlider.setMaximum(maxV)
|
self.horizontalSlider.setMaximum(maxV)
|
||||||
self.verticalSlider.setMaximum(maxH)
|
self.verticalSlider.setMaximum(maxH)
|
||||||
last_children=0
|
last_children = 0
|
||||||
for children in all_children:
|
for children in all_children:
|
||||||
selection = children
|
selection = children
|
||||||
size_w = selection.size().width()
|
size_w = selection.size().width()
|
||||||
@@ -425,20 +368,20 @@ def fletch_canvas(self):
|
|||||||
locals_h = selection.x()
|
locals_h = selection.x()
|
||||||
locals_w = selection.y()
|
locals_w = selection.y()
|
||||||
item_rotate_object = self.rotate_object[selection.objectName()]
|
item_rotate_object = self.rotate_object[selection.objectName()]
|
||||||
self.varLandscape[selection.objectName()+'_size'] = [size_w,size_h]
|
self.varLandscape[selection.objectName() + '_size'] = [size_w, size_h]
|
||||||
self.varLandscape[selection.objectName()+'_locals'] = [locals_w,locals_h]
|
self.varLandscape[selection.objectName() + '_locals'] = [locals_w, locals_h]
|
||||||
self.varLandscape[selection.objectName()+'_rotate'] = [item_rotate_object]
|
self.varLandscape[selection.objectName() + '_rotate'] = [item_rotate_object]
|
||||||
if self.varPortrait != {}:
|
if self.varPortrait != {}:
|
||||||
selection.move(self.varPortrait[selection.objectName()+'_locals'][1],self.varPortrait[selection.objectName()+'_locals'][0])
|
selection.move(self.varPortrait[selection.objectName() + '_locals'][1], self.varPortrait[selection.objectName() + '_locals'][0])
|
||||||
selection.resize(self.varPortrait[selection.objectName()+'_size'][0],self.varPortrait[selection.objectName()+'_size'][1])
|
selection.resize(self.varPortrait[selection.objectName() + '_size'][0], self.varPortrait[selection.objectName() + '_size'][1])
|
||||||
self.rotate_object[selection.objectName()] = self.varPortrait[selection.objectName()+'_rotate'][0]
|
self.rotate_object[selection.objectName()] = self.varPortrait[selection.objectName() + '_rotate'][0]
|
||||||
self.rotate_color(selection,last_children)
|
self.rotate_color(selection, last_children)
|
||||||
last_children = selection
|
last_children = selection
|
||||||
self.toolButton_2.setText('Portrait')
|
self.toolButton_2.setText('Portrait')
|
||||||
elif self.toolButton_2.text() == 'Portrait':
|
elif self.toolButton_2.text() == 'Portrait':
|
||||||
self.horizontalSlider.setMaximum(maxH)
|
self.horizontalSlider.setMaximum(maxH)
|
||||||
self.verticalSlider.setMaximum(maxV)
|
self.verticalSlider.setMaximum(maxV)
|
||||||
last_children=0
|
last_children = 0
|
||||||
for children in all_children:
|
for children in all_children:
|
||||||
selection = children
|
selection = children
|
||||||
size_w = selection.size().width()
|
size_w = selection.size().width()
|
||||||
@@ -446,24 +389,25 @@ def fletch_canvas(self):
|
|||||||
locals_h = selection.x()
|
locals_h = selection.x()
|
||||||
locals_w = selection.y()
|
locals_w = selection.y()
|
||||||
item_rotate_object = self.rotate_object[selection.objectName()]
|
item_rotate_object = self.rotate_object[selection.objectName()]
|
||||||
self.varPortrait[selection.objectName()+'_size'] = [size_w,size_h]
|
self.varPortrait[selection.objectName() + '_size'] = [size_w, size_h]
|
||||||
self.varPortrait[selection.objectName()+'_locals'] = [locals_w,locals_h]
|
self.varPortrait[selection.objectName() + '_locals'] = [locals_w, locals_h]
|
||||||
self.varPortrait[selection.objectName()+'_rotate'] = [item_rotate_object]
|
self.varPortrait[selection.objectName() + '_rotate'] = [item_rotate_object]
|
||||||
if self.varLandscape != {}:
|
if self.varLandscape != {}:
|
||||||
selection.move(self.varLandscape[selection.objectName()+'_locals'][1],self.varLandscape[selection.objectName()+'_locals'][0])
|
selection.move(self.varLandscape[selection.objectName() + '_locals'][1], self.varLandscape[selection.objectName() + '_locals'][0])
|
||||||
selection.resize(self.varLandscape[selection.objectName()+'_size'][0],self.varLandscape[selection.objectName()+'_size'][1])
|
selection.resize(self.varLandscape[selection.objectName() + '_size'][0], self.varLandscape[selection.objectName() + '_size'][1])
|
||||||
self.rotate_object[selection.objectName()] = self.varLandscape[selection.objectName()+'_rotate'][0]
|
self.rotate_object[selection.objectName()] = self.varLandscape[selection.objectName() + '_rotate'][0]
|
||||||
self.rotate_color(selection,last_children)
|
self.rotate_color(selection, last_children)
|
||||||
last_children = selection
|
last_children = selection
|
||||||
self.toolButton_2.setText('Landscape')
|
self.toolButton_2.setText('Landscape')
|
||||||
frame_w = self.frame.width()
|
frame_w = self.frame.width()
|
||||||
frame_h = self.frame.height()
|
frame_h = self.frame.height()
|
||||||
self.frame.resize(frame_h,frame_w)
|
self.frame.resize(frame_h, frame_w)
|
||||||
frame_x = round(frame_w / 3)
|
frame_x = round(frame_w / 3)
|
||||||
frame_y = self.frame.y()
|
frame_y = self.frame.y()
|
||||||
self.frame.move(frame_x,frame_y)
|
self.frame.move(frame_x, frame_y)
|
||||||
|
|
||||||
def setSlider(self):
|
def setSlider(self):
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
print(self.tableWidget.tabKeyNavigation())
|
print(self.tableWidget.tabKeyNavigation())
|
||||||
selection_name = (self.tableWidget.currentItem()).text()
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
@@ -475,33 +419,33 @@ def fletch_canvas(self):
|
|||||||
if selection_name == children.objectName():
|
if selection_name == children.objectName():
|
||||||
selection = children
|
selection = children
|
||||||
if selection != 0:
|
if selection != 0:
|
||||||
self.rotate_color(selection,last_children)
|
self.rotate_color(selection, last_children)
|
||||||
if self.radioButton.isChecked() == False:
|
if self.radioButton.isChecked() is False:
|
||||||
xx = round(selection.x()/3.5)
|
xx = round(selection.x() / 3.5)
|
||||||
yy = round(selection.y()/3.5)
|
yy = round(selection.y() / 3.5)
|
||||||
else:
|
else:
|
||||||
xx = round(selection.size().width()/3.5)
|
xx = round(selection.size().width() / 3.5)
|
||||||
yy = round(selection.size().height()/3.5)
|
yy = round(selection.size().height() / 3.5)
|
||||||
#print(xx,yy)
|
# print(xx,yy)
|
||||||
self.horizontalSlider.setValue(xx)
|
self.horizontalSlider.setValue(xx)
|
||||||
self.verticalSlider.setValue(yy)
|
self.verticalSlider.setValue(yy)
|
||||||
self.spinBox.setValue(xx)
|
self.spinBox.setValue(xx)
|
||||||
self.spinBox_2.setValue(yy)
|
self.spinBox_2.setValue(yy)
|
||||||
|
|
||||||
def rotate_color(self,selection,last_children):
|
def rotate_color(self, selection, last_children):
|
||||||
global last_select
|
global last_select
|
||||||
if self.radioButton.isChecked() == False:
|
if self.radioButton.isChecked() is False:
|
||||||
ColorCode = "10, 10, 80, 50"
|
ColorCode = "10, 10, 80, 50"
|
||||||
else:
|
else:
|
||||||
ColorCode = "249, 238, 148, 50"
|
ColorCode = "249, 238, 148, 50"
|
||||||
if self.rotate_object[selection.objectName()] == 0:
|
if self.rotate_object[selection.objectName()] == 0:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-bottom-color: blue;background-color: rgb("+ColorCode+")")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-bottom-color: blue;background-color: rgb(" + ColorCode + ")")
|
||||||
elif self.rotate_object[selection.objectName()] == 90:
|
elif self.rotate_object[selection.objectName()] == 90:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-left-color: blue;background-color: rgb("+ColorCode+")")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-left-color: blue;background-color: rgb(" + ColorCode + ")")
|
||||||
elif self.rotate_object[selection.objectName()] == 180:
|
elif self.rotate_object[selection.objectName()] == 180:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-top-color: blue;background-color: rgb("+ColorCode+")")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-top-color: blue;background-color: rgb(" + ColorCode + ")")
|
||||||
elif self.rotate_object[selection.objectName()] == 270:
|
elif self.rotate_object[selection.objectName()] == 270:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-right-color: blue;background-color: rgb("+ColorCode+")")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-right-color: blue;background-color: rgb(" + ColorCode + ")")
|
||||||
if last_children != 0:
|
if last_children != 0:
|
||||||
if last_select != selection.objectName():
|
if last_select != selection.objectName():
|
||||||
last_children.setStyleSheet("background-color: rgb(10, 10, 10, 50)")
|
last_children.setStyleSheet("background-color: rgb(10, 10, 10, 50)")
|
||||||
@@ -509,7 +453,7 @@ def fletch_canvas(self):
|
|||||||
last_select = selection.objectName()
|
last_select = selection.objectName()
|
||||||
|
|
||||||
def rotate(self):
|
def rotate(self):
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
selection_name = (self.tableWidget.currentItem()).text()
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
selection = 0
|
selection = 0
|
||||||
@@ -522,21 +466,21 @@ def fletch_canvas(self):
|
|||||||
if selection != 0:
|
if selection != 0:
|
||||||
xx = round(selection.size().width())
|
xx = round(selection.size().width())
|
||||||
yy = round(selection.size().height())
|
yy = round(selection.size().height())
|
||||||
selection.resize(round(yy),round(xx))
|
selection.resize(round(yy), round(xx))
|
||||||
if self.radioButton.isChecked() == True:
|
if self.radioButton.isChecked() is True:
|
||||||
self.spinBox.setValue(yy)
|
self.spinBox.setValue(yy)
|
||||||
self.spinBox_2.setValue(xx)
|
self.spinBox_2.setValue(xx)
|
||||||
self.horizontalSlider.setValue(round(yy/3.5))
|
self.horizontalSlider.setValue(round(yy / 3.5))
|
||||||
self.verticalSlider.setValue(round(xx/3.5))
|
self.verticalSlider.setValue(round(xx / 3.5))
|
||||||
|
|
||||||
if self.rotate_object[selection.objectName()] == 270:
|
if self.rotate_object[selection.objectName()] == 270:
|
||||||
self.rotate_object[selection.objectName()] = 0
|
self.rotate_object[selection.objectName()] = 0
|
||||||
else:
|
else:
|
||||||
self.rotate_object[selection.objectName()] = self.rotate_object[selection.objectName()] + 90
|
self.rotate_object[selection.objectName()] = self.rotate_object[selection.objectName()] + 90
|
||||||
self.rotate_color(selection,last_children)
|
self.rotate_color(selection, last_children)
|
||||||
|
|
||||||
def vertical(self):
|
def vertical(self):
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
selection_name = (self.tableWidget.currentItem()).text()
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
selection = 0
|
selection = 0
|
||||||
@@ -544,15 +488,15 @@ def fletch_canvas(self):
|
|||||||
if selection_name == children.objectName():
|
if selection_name == children.objectName():
|
||||||
selection = children
|
selection = children
|
||||||
if selection != 0:
|
if selection != 0:
|
||||||
if self.radioButton.isChecked() == False:
|
if self.radioButton.isChecked() is False:
|
||||||
selection.move(round(self.horizontalSlider.value()*3.5),round(self.verticalSlider.value()*3.5))
|
selection.move(round(self.horizontalSlider.value() * 3.5), round(self.verticalSlider.value() * 3.5))
|
||||||
else:
|
else:
|
||||||
selection.resize(round(self.horizontalSlider.value()*3.5),round(self.verticalSlider.value()*3.5))
|
selection.resize(round(self.horizontalSlider.value() * 3.5), round(self.verticalSlider.value() * 3.5))
|
||||||
self.spinBox.setValue(round(self.horizontalSlider.value()))
|
self.spinBox.setValue(round(self.horizontalSlider.value()))
|
||||||
self.spinBox_2.setValue(round(self.verticalSlider.value()))
|
self.spinBox_2.setValue(round(self.verticalSlider.value()))
|
||||||
|
|
||||||
def horizontal(self):
|
def horizontal(self):
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() is not None:
|
||||||
selection_name = (self.tableWidget.currentItem()).text()
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
selection = 0
|
selection = 0
|
||||||
@@ -560,10 +504,9 @@ def fletch_canvas(self):
|
|||||||
if selection_name == children.objectName():
|
if selection_name == children.objectName():
|
||||||
selection = children
|
selection = children
|
||||||
if selection != 0:
|
if selection != 0:
|
||||||
if self.radioButton.isChecked() == False:
|
if self.radioButton.isChecked() is False:
|
||||||
selection.move(round(self.horizontalSlider.value()*3.5),round(self.verticalSlider.value()*3.5))
|
selection.move(round(self.horizontalSlider.value() * 3.5), round(self.verticalSlider.value() * 3.5))
|
||||||
else:
|
else:
|
||||||
selection.resize(round(self.horizontalSlider.value()*3.5),round(self.verticalSlider.value()*3.5))
|
selection.resize(round(self.horizontalSlider.value() * 3.5), round(self.verticalSlider.value() * 3.5))
|
||||||
self.spinBox.setValue(round(self.horizontalSlider.value()))
|
self.spinBox.setValue(round(self.horizontalSlider.value()))
|
||||||
self.spinBox_2.setValue(round(self.verticalSlider.value()))
|
self.spinBox_2.setValue(round(self.verticalSlider.value()))
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,167 @@
|
|||||||
|
|
||||||
|
from qgis.core import (
|
||||||
|
QgsLayoutSize,
|
||||||
|
QgsUnitTypes,
|
||||||
|
QgsLayoutPoint,
|
||||||
|
)
|
||||||
|
def fletch_canvas(self):
|
||||||
|
if self.radioButton_6.isChecked():
|
||||||
|
values_page = 'A4'
|
||||||
|
else:
|
||||||
|
values_page = 'A3'
|
||||||
|
if self.radioButton_7.isChecked():
|
||||||
|
page_rotate = 'Portrait'
|
||||||
|
else:
|
||||||
|
page_rotate = 'Landscape'
|
||||||
|
|
||||||
|
if page_rotate == 'Portrait':
|
||||||
|
if values_page == 'A4':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(200.0,200, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(85.71428571428571,69, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(209, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(140.0,147, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(41, 110, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(189, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(51.42857142857143,7, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(9, 197, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(45.714285714285715,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(154.28571428571428,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(51, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(151, 197, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(229, 197, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(125.71428571428571,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(60, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(51.42857142857143,13, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(9, 184, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(28.571428571428573,29, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(9, 151, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
if values_page == 'A3':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(282,282, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(121,97, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(294, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(197,207, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(58, 156, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(266, 28, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(73,10, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(12, 278, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(64,16, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(218,16, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(73, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(214, 278, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(322, 278, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(177,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(85, 28, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(73,18, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(12, 260, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(40,40, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(12, 214, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
if page_rotate == 'Landscape':
|
||||||
|
if values_page == 'A4':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(200.0,200, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(85.71428571428571,69, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(209, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(140.0,147, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(49, 15, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(189, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(51.42857142857143,7, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(9, 197, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(45.714285714285715,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(154.28571428571428,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(51, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(151, 197, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(229, 197, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(125.71428571428571,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(60, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(51.42857142857143,13, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(9, 184, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(28.571428571428573,29, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(9, 151, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
if values_page == 'A3':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(282,282, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(121,97, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(294, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(197,207, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(69, 21, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(266, 28, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(73,10, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(12, 278, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(64,16, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(218,16, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(73, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(214, 278, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(322, 278, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(177,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(85, 28, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(73,18, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(12, 260, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(40,40, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(12, 214, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
return self.template_parameters
|
||||||
@@ -7,7 +7,7 @@ name=CenRa_PageRender
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=CenRa_PageRender
|
description=CenRa_PageRender
|
||||||
version=0.2.0
|
version=0.2.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_PAGERENDER:</h2></br><p><h3>19/05/2025 - Version 0.2.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>03/04/2025 - Version 0.1.6: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 0.1.5: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>14/11/2024 - Version 0.1.4: </h3> - Implementation de la mollet. </br> - Implementation du dragging pour déplacer et modification de la taille </br></p></br><p><h3>08/11/2024 - Version 0.1.3: </h3> - Correctif de bug. </br><p><h3>21/10/2024 - Version 0.1.1: </h3> - Les match en if. </br> - Bouton de scroll et adaptation portrait.</p></br><p><h3>09/10/2024 - Version 0.1.0: </h3> - Création.</p>
|
changelog=<h2>CenRa_PAGERENDER:</h2></br><p><h3>30/07/2025 - Version 0.2.1: </h3> - Correctife de bug.</p></br><p><h3>19/05/2025 - Version 0.2.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>03/04/2025 - Version 0.1.6: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 0.1.5: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>14/11/2024 - Version 0.1.4: </h3> - Implementation de la mollet. </br> - Implementation du dragging pour déplacer et modification de la taille </br></p></br><p><h3>08/11/2024 - Version 0.1.3: </h3> - Correctif de bug. </br><p><h3>21/10/2024 - Version 0.1.1: </h3> - Les match en if. </br> - Bouton de scroll et adaptation portrait.</p></br><p><h3>09/10/2024 - Version 0.1.0: </h3> - Création.</p>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=python
|
tags=python
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import base64
|
# import base64
|
||||||
import psycopg2
|
# import psycopg2
|
||||||
import psycopg2.extras
|
# import psycopg2.extras
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
from qgis.PyQt.QtWidgets import QApplication
|
from qgis.PyQt.QtWidgets import QApplication
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
@@ -107,65 +107,68 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def send_issues(url,titre,body,labels):
|
|
||||||
|
def send_issues(url, titre, body, labels):
|
||||||
import requests
|
import requests
|
||||||
|
import urllib.request
|
||||||
import json
|
import json
|
||||||
import os
|
# import os
|
||||||
import qgis
|
|
||||||
|
|
||||||
usr = os.environ['USERNAME']
|
# usr = os.environ['USERNAME']
|
||||||
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
||||||
url=url+'?token='+token
|
url = url + '?token=' + token
|
||||||
|
|
||||||
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
|
||||||
|
|
||||||
|
headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'}
|
||||||
|
|
||||||
payload = {'title': titre, 'body': body, 'labels': labels}
|
payload = {'title': titre, 'body': body, 'labels': labels}
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except urllib.requests.URLError:
|
||||||
binar = False
|
binar = False
|
||||||
r = ''
|
r = ''
|
||||||
if binar:
|
if binar:
|
||||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def maj_verif(NAME):
|
def maj_verif(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
import urllib.request
|
import urllib.request
|
||||||
iface = qgis.utils.iface
|
iface = qgis.utils.iface
|
||||||
from qgis.core import Qgis
|
from qgis.core import Qgis
|
||||||
|
|
||||||
url = qgis.utils.pluginMetadata(NAME,'repository')
|
# url = qgis.utils.pluginMetadata(NAME, 'repository')
|
||||||
#URL = url+'/raw/branch/main/plugins.xml'
|
# URL = url+'/raw/branch/main/plugins.xml'
|
||||||
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||||
# print(URL)
|
# print(URL)
|
||||||
version = qgis.utils.pluginMetadata(NAME,'version')
|
version = qgis.utils.pluginMetadata(NAME, 'version')
|
||||||
len_version = len(version)
|
len_version = len(version)
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except urllib.requests.URLError:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
try:
|
try:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
plugin_num = version_web.find(NAME)
|
plugin_num = version_web.find(NAME)
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
valeur_version_web = version_web.find('<version>', plugin_num) + 9
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
version_plugin = version_web[valeur_version_web:valeur_version_web + len_version]
|
||||||
if version_plugin != version:
|
if version_plugin != version:
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
except:
|
except urllib.requests.URLError:
|
||||||
print("error gitea version ssl")
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|
||||||
def tr(text, context="@default"):
|
def tr(text, context="@default"):
|
||||||
return QApplication.translate(context, text)
|
return QApplication.translate(context, text)
|
||||||
|
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||||
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog')
|
||||||
return devmaj
|
return devmaj
|
||||||
@@ -4,19 +4,21 @@ __email__ = "info@3liz.org"
|
|||||||
|
|
||||||
|
|
||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
from qgis.PyQt.QtCore import QUrl
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
from qgis.PyQt.QtWidgets import QAction
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import qgis
|
import qgis
|
||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
# include <QSettings>
|
||||||
|
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
|
from qgis.PyQt.QtCore import QSettings
|
||||||
|
from .about_form import AboutDialog
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
# plugin_path,
|
||||||
pyperclip,
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
@@ -26,12 +28,10 @@ pyperclip()
|
|||||||
from .postgis_editor import Postgis_Editor
|
from .postgis_editor import Postgis_Editor
|
||||||
from .postgis_creator import Postgis_Creator
|
from .postgis_creator import Postgis_Creator
|
||||||
from .postgis_rename import Postgis_Rename
|
from .postgis_rename import Postgis_Rename
|
||||||
from .about_form import AboutDialog
|
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
|
||||||
|
|
||||||
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
IPAddr = socket.gethostbyname(socket.gethostname())
|
||||||
|
|
||||||
|
|
||||||
class PgPostgis:
|
class PgPostgis:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -45,18 +45,18 @@ class PgPostgis:
|
|||||||
self.dock_action = None
|
self.dock_action = None
|
||||||
self.help_action = None
|
self.help_action = None
|
||||||
plugin_dir = os.path.dirname(__file__)
|
plugin_dir = os.path.dirname(__file__)
|
||||||
end_find = plugin_dir.rfind('\\')+1
|
end_find = plugin_dir.rfind('\\') + 1
|
||||||
global NAME
|
global NAME
|
||||||
NAME = plugin_dir[end_find:]
|
NAME = plugin_dir[end_find:]
|
||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_POSTGIS','version')
|
version = qgis.utils.pluginMetadata('CenRa_POSTGIS', 'version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("postgis/version", 1, type=str)
|
versionUse = s.value("postgis/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version):
|
||||||
s.setValue("postgis/version", str(version))
|
s.setValue("postgis/version", str(version))
|
||||||
print(versionUse,version)
|
print(versionUse, version)
|
||||||
self.open_about_dialog()
|
self.open_about_dialog()
|
||||||
|
|
||||||
def initGui(self):
|
def initGui(self):
|
||||||
@@ -76,29 +76,29 @@ class PgPostgis:
|
|||||||
if not self.action_creator:
|
if not self.action_creator:
|
||||||
self.action_creator = Postgis_Creator()
|
self.action_creator = Postgis_Creator()
|
||||||
|
|
||||||
self.postgis_creator = QAction(icon, 'dossier_creator',None)
|
self.postgis_creator = QAction(icon, 'dossier_creator', None)
|
||||||
self.toolBar.addAction(self.postgis_creator)
|
self.toolBar.addAction(self.postgis_creator)
|
||||||
self.postgis_creator.triggered.connect(self.open_creator)
|
self.postgis_creator.triggered.connect(self.open_creator)
|
||||||
|
|
||||||
self.postgis_creator.setEnabled(False)
|
self.postgis_creator.setEnabled(False)
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
self.postgis_creator.setEnabled(True)
|
self.postgis_creator.setEnabled(True)
|
||||||
|
|
||||||
if not self.action_editor:
|
if not self.action_editor:
|
||||||
self.action_editor = Postgis_Editor()
|
self.action_editor = Postgis_Editor()
|
||||||
|
|
||||||
self.postgis_editor = QAction(icon2, 'dossier_editor',None)
|
self.postgis_editor = QAction(icon2, 'dossier_editor', None)
|
||||||
self.toolBar.addAction(self.postgis_editor)
|
self.toolBar.addAction(self.postgis_editor)
|
||||||
self.postgis_editor.triggered.connect(self.open_editor)
|
self.postgis_editor.triggered.connect(self.open_editor)
|
||||||
|
|
||||||
self.postgis_editor.setEnabled(False)
|
self.postgis_editor.setEnabled(False)
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
self.postgis_editor.setEnabled(True)
|
self.postgis_editor.setEnabled(True)
|
||||||
|
|
||||||
if not self.action_rename:
|
if not self.action_rename:
|
||||||
self.action_rename = Postgis_Rename()
|
self.action_rename = Postgis_Rename()
|
||||||
|
|
||||||
self.postgis_rename = QAction(icon3, 'dossier_rename',None)
|
self.postgis_rename = QAction(icon3, 'dossier_rename', None)
|
||||||
self.toolBar.addAction(self.postgis_rename)
|
self.toolBar.addAction(self.postgis_rename)
|
||||||
self.postgis_rename.triggered.connect(self.open_rename)
|
self.postgis_rename.triggered.connect(self.open_rename)
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ class PgPostgis:
|
|||||||
self.postgis_rename.setVisible(0)
|
self.postgis_rename.setVisible(0)
|
||||||
|
|
||||||
self.postgis_rename.setEnabled(False)
|
self.postgis_rename.setEnabled(False)
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
self.postgis_rename.setEnabled(True)
|
self.postgis_rename.setEnabled(True)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
@@ -121,6 +121,7 @@ class PgPostgis:
|
|||||||
"""
|
"""
|
||||||
dialog = AboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec()
|
dialog.exec()
|
||||||
|
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||||
@@ -140,11 +141,11 @@ class PgPostgis:
|
|||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.action_editor:
|
if self.action_editor:
|
||||||
iface.removePluginMenu('CenRa_Postgis',self.postgis_editor)
|
iface.removePluginMenu('CenRa_Postgis', self.postgis_editor)
|
||||||
if self.action_creator:
|
if self.action_creator:
|
||||||
iface.removePluginMenu('CenRa_Postgis',self.postgis_creator)
|
iface.removePluginMenu('CenRa_Postgis', self.postgis_creator)
|
||||||
if self.action_rename:
|
if self.action_rename:
|
||||||
iface.removePluginMenu('CenRa_Postgis',self.postgis_rename)
|
iface.removePluginMenu('CenRa_Postgis', self.postgis_rename)
|
||||||
|
|
||||||
if self.provider:
|
if self.provider:
|
||||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os.path
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
from qgis.PyQt.QtGui import QPixmap
|
# from qgis.PyQt.QtGui import QPixmap
|
||||||
from qgis.PyQt.QtWidgets import QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
|
|
||||||
from .tools.resources import devlog
|
from .tools.resources import devlog
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ name=CenRa_POSTGIS
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=Permet de crée un dossier dans la base PostGis
|
description=Permet de crée un dossier dans la base PostGis
|
||||||
version=3.0
|
version=3.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
# Optional items:
|
# Optional items:
|
||||||
|
|
||||||
# Uncomment the following line and add your changelog entries:
|
# Uncomment the following line and add your changelog entries:
|
||||||
changelog=<h2>CenRa_POSTGIS:</h2></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>03/04/2025 - Version 2.7: </h3> - Mise a jour de securite.</p></br><p><h3>12/02/2025 - Version 2.6: </h3> - InDev:renomé les schema et table.</p></br><p><h3>04/02/2025 - Version 2.5: </h3> - Correctif bug création de couche.</p></br><p><h3>23/01/2025 - Version 2.4: </h3> - Correctif sur les pkey.</p></br><p><h3>22/01/2025 - Version 2.3: </h3> - Correctif sur la creation de projet.</p></br><p><h3>21/01/2025 - Version 2.2: </h3> - Correctif sur la longeur des nom.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.0:</h3>- Refont du code.</p>
|
changelog=<h2>CenRa_POSTGIS:</h2></br><p><h3>30/07/2025 - Version 3.1: </h3> - Correctife de bug.</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>03/04/2025 - Version 2.7: </h3> - Mise a jour de securite.</p></br><p><h3>12/02/2025 - Version 2.6: </h3> - InDev:renomé les schema et table.</p></br><p><h3>04/02/2025 - Version 2.5: </h3> - Correctif bug création de couche.</p></br><p><h3>23/01/2025 - Version 2.4: </h3> - Correctif sur les pkey.</p></br><p><h3>22/01/2025 - Version 2.3: </h3> - Correctif sur la creation de projet.</p></br><p><h3>21/01/2025 - Version 2.2: </h3> - Correctif sur la longeur des nom.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.0:</h3>- Refont du code.</p>
|
||||||
|
|
||||||
# tags are comma separated with spaces allowed
|
# tags are comma separated with spaces allowed
|
||||||
tags=cenra, postgis, database
|
tags=cenra, postgis, database
|
||||||
|
|||||||
@@ -2,57 +2,57 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
# Import the PyQt and QGIS libraries
|
# Import the PyQt and QGIS libraries
|
||||||
from builtins import next
|
# from builtins import next
|
||||||
from builtins import str
|
# from builtins import str
|
||||||
from builtins import object
|
# from builtins import object
|
||||||
import qgis
|
# import qgis
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog,QMessageBox
|
from qgis.PyQt.QtWidgets import QDialog, QMessageBox
|
||||||
from qgis.PyQt.QtGui import QIcon
|
# from qgis.PyQt.QtGui import QIcon
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
# from qgis.PyQt.QtCore import *
|
||||||
from qgis.PyQt.QtGui import *
|
# from qgis.PyQt.QtGui import *
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui
|
||||||
|
|
||||||
from qgis.core import *
|
# from qgis.core import *
|
||||||
from qgis.core import QgsDataSourceUri
|
from qgis.core import QgsSettings, Qgis
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .tools.PythonSQL import login_base
|
from .tools.PythonSQL import login_base
|
||||||
except:
|
except ValueError:
|
||||||
print('Pas de fichier PythonSQL')
|
print('Pas de fichier PythonSQL')
|
||||||
|
|
||||||
from .tools.SQLRequet import *
|
# from .tools.SQLRequet import *
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
create_vierge,
|
create_vierge,
|
||||||
create_contour,
|
create_contour,
|
||||||
create_travaux,
|
create_travaux,
|
||||||
create_habita
|
create_habita
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import os.path
|
# import os.path
|
||||||
import webbrowser, os
|
# import webbrowser, os
|
||||||
import psycopg2
|
# import psycopg2
|
||||||
import psycopg2.extras
|
# import psycopg2.extras
|
||||||
import base64
|
# import base64
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_Postgis_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_Postgis_base.ui')
|
||||||
|
|
||||||
class Postgis_Creator(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
class Postgis_Creator(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
self.iface = iface
|
self.iface = iface
|
||||||
|
|
||||||
# run method that performs all the real work
|
# run method that performs all the real work
|
||||||
@@ -64,23 +64,23 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
|
|||||||
result = self.exec()
|
result = self.exec()
|
||||||
# See if OK was pressed
|
# See if OK was pressed
|
||||||
if result == 1:
|
if result == 1:
|
||||||
|
# **********************************Debut_script****************************************
|
||||||
#**********************************Debut_script****************************************
|
# Creation du schema pour le nouveau site
|
||||||
|
|
||||||
### Creation du schema pour le nouveau site
|
|
||||||
if self.at.isChecked():
|
if self.at.isChecked():
|
||||||
schema = "_" + self.dept.currentText() + "_at_" + self.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
|
# Ajout de "_" pour eviter pb de numero en premier caractere
|
||||||
else :
|
schema = "_" + self.dept.currentText() + "_at_" + self.nom.text().lower()
|
||||||
schema = "_" + self.dept.currentText() + "_" + self.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
|
else:
|
||||||
|
# Ajout de "_" pour eviter pb de numero en premier caractere
|
||||||
|
schema = "_" + self.dept.currentText() + "_" + self.nom.text().lower()
|
||||||
|
|
||||||
if self.nom.text() == "" or self.nom.text() == "NULL":
|
if self.nom.text() == "" or self.nom.text() == "NULL":
|
||||||
QMessageBox.warning(None, "Oups :", "Veuillez renseigner un nom de dossier.")
|
QMessageBox.warning(None, "Oups :", "Veuillez renseigner un nom de dossier.")
|
||||||
return
|
return
|
||||||
|
|
||||||
ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
|
ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
|
||||||
for car in ch :
|
for car in ch:
|
||||||
if self.nom.text().find(car) != -1 :
|
if self.nom.text().find(car) != - 1:
|
||||||
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower() )
|
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower())
|
||||||
return
|
return
|
||||||
account = login_base("account")
|
account = login_base("account")
|
||||||
user = account[0]
|
user = account[0]
|
||||||
@@ -92,7 +92,7 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
|
|||||||
con = account[8]
|
con = account[8]
|
||||||
|
|
||||||
SQL_schema = "CREATE SCHEMA " + schema + ";"
|
SQL_schema = "CREATE SCHEMA " + schema + ";"
|
||||||
SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;"
|
SQL_GRANT_SCHEMA = "GRANT CREATE, USAGE ON SCHEMA " + schema + " TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA " + schema + " TO grp_sig;"
|
||||||
|
|
||||||
if self.couche_contour.isChecked() or self.couche_habitat.isChecked() or self.couche_travaux_prevus.isChecked() or self.couche_vierge.isChecked():
|
if self.couche_contour.isChecked() or self.couche_habitat.isChecked() or self.couche_travaux_prevus.isChecked() or self.couche_vierge.isChecked():
|
||||||
cur.execute(SQL_schema)
|
cur.execute(SQL_schema)
|
||||||
@@ -100,11 +100,10 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
|
|||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("POSTGRESQL :", "Pas de couche sélectionnée, création refusée.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("POSTGRESQL :", "Pas de couche sélectionnée, création refusée.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_contour(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_habita(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_travaux(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_vierge(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
|
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
pass
|
pass
|
||||||
@@ -4,57 +4,55 @@ from __future__ import absolute_import
|
|||||||
# Import the PyQt and QGIS libraries
|
# Import the PyQt and QGIS libraries
|
||||||
from builtins import next
|
from builtins import next
|
||||||
from builtins import str
|
from builtins import str
|
||||||
from builtins import object
|
# from builtins import object
|
||||||
import qgis
|
# import qgis
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
from qgis.PyQt.QtWidgets import QDialog, QMessageBox
|
||||||
from qgis.PyQt.QtGui import QIcon
|
# from qgis.PyQt.QtGui import QIcon
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
|
||||||
from qgis.PyQt.QtGui import *
|
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui
|
||||||
|
|
||||||
from qgis.core import *
|
# from qgis.core import *
|
||||||
from qgis.core import QgsDataSourceUri
|
from qgis.core import QgsSettings
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .tools.PythonSQL import login_base
|
from .tools.PythonSQL import login_base
|
||||||
except:
|
except ValueError:
|
||||||
print('Pas de fichier PythonSQL')
|
print('Pas de fichier PythonSQL')
|
||||||
from .tools.SQLRequet import *
|
# from .tools.SQLRequet import *
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
create_vierge,
|
create_vierge,
|
||||||
create_contour,
|
create_contour,
|
||||||
create_travaux,
|
create_travaux,
|
||||||
create_habita
|
create_habita
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
import os.path
|
# import os.path
|
||||||
import webbrowser, os
|
# import webbrowser
|
||||||
import psycopg2
|
# import psycopg2
|
||||||
import psycopg2.extras
|
# import psycopg2.extras
|
||||||
import base64
|
# import base64
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_PostgisTable_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_PostgisTable_base.ui')
|
||||||
|
|
||||||
class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
class Postgis_Editor(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
self.iface = iface
|
self.iface = iface
|
||||||
|
|
||||||
### Outil Ajout de nouvelles couche a un dossier
|
# Outil Ajout de nouvelles couche a un dossier
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
account = login_base("account")
|
account = login_base("account")
|
||||||
@@ -65,13 +63,12 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
dbname = account[4]
|
dbname = account[4]
|
||||||
cur = account[7]
|
cur = account[7]
|
||||||
con = account[8]
|
con = account[8]
|
||||||
# Creation de la liste des schemas de la base de donnees
|
# Creation de la liste des schemas de la base de donnees
|
||||||
SQL = """WITH list_schema AS (
|
SQL = """WITH list_schema AS (
|
||||||
select schemaname,'sig' as group from pg_catalog.pg_tables
|
select schemaname,'sig' as group from pg_catalog.pg_tables
|
||||||
where schemaname ~ E'^_(0|1|2|3|4|6|7|f)'
|
where schemaname ~ E'^_(0|1|2|3|4|6|7|f)'
|
||||||
group by schemaname
|
group by schemaname
|
||||||
order by schemaname)
|
order by schemaname)
|
||||||
|
|
||||||
select string_agg(schemaname,',')
|
select string_agg(schemaname,',')
|
||||||
from list_schema
|
from list_schema
|
||||||
group by "group";"""
|
group by "group";"""
|
||||||
@@ -79,14 +76,15 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
cur.execute(SQL)
|
cur.execute(SQL)
|
||||||
|
|
||||||
list_brut = str(next(cur))
|
list_brut = str(next(cur))
|
||||||
list = list_brut [2:-2]
|
list = list_brut[2:-2]
|
||||||
listItems = list.split(",")
|
listItems = list.split(",")
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
self.schema.clear()
|
self.schema.clear()
|
||||||
self.schema.addItems(listItems)
|
self.schema.addItems(listItems)
|
||||||
self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
|
# Pour ne pas commencer la liste au premier schema
|
||||||
|
self.schema.setCurrentIndex(-1)
|
||||||
|
|
||||||
# show the dialog
|
# show the dialog
|
||||||
self.show()
|
self.show()
|
||||||
@@ -94,7 +92,7 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
result = self.exec()
|
result = self.exec()
|
||||||
# See if OK was pressed
|
# See if OK was pressed
|
||||||
if result == 1:
|
if result == 1:
|
||||||
#******************************debut script*********************************
|
# ******************************debut script*********************************
|
||||||
account = login_base("account")
|
account = login_base("account")
|
||||||
user = account[0]
|
user = account[0]
|
||||||
mdp = account[1]
|
mdp = account[1]
|
||||||
@@ -104,16 +102,16 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
cur = account[7]
|
cur = account[7]
|
||||||
con = account[8]
|
con = account[8]
|
||||||
|
|
||||||
if self.schema.currentIndex() == -1 :
|
if self.schema.currentIndex() == - 1:
|
||||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
|
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
|
||||||
return
|
return
|
||||||
|
|
||||||
schema = self.schema.currentText()
|
schema = self.schema.currentText()
|
||||||
|
|
||||||
create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_contour(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_habita(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_travaux(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
create_vierge(self, schema, cur, con, host, port, dbname, user, mdp)
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
pass
|
pass
|
||||||
@@ -2,43 +2,39 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
# Import the PyQt and QGIS libraries
|
# Import the PyQt and QGIS libraries
|
||||||
from builtins import next
|
# from builtins import next
|
||||||
from builtins import str
|
from builtins import str
|
||||||
from builtins import object
|
# from builtins import object
|
||||||
import qgis
|
# import qgis
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox,QDialogButtonBox
|
from qgis.PyQt.QtWidgets import QDialog, QMessageBox, QDialogButtonBox
|
||||||
from qgis.PyQt.QtGui import QIcon
|
# from qgis.PyQt.QtGui import QIcon
|
||||||
|
|
||||||
from qgis.PyQt.QtCore import *
|
# from qgis.PyQt.QtCore import *
|
||||||
from qgis.PyQt.QtGui import *
|
# from qgis.PyQt.QtGui import *
|
||||||
from qgis.PyQt import QtGui
|
from qgis.PyQt import QtGui
|
||||||
|
|
||||||
from qgis.core import *
|
# from qgis.core import *
|
||||||
from qgis.core import QgsDataSourceUri
|
from qgis.core import QgsSettings, QgsDataSourceUri, QgsProject
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .tools.PythonSQL import login_base
|
from .tools.PythonSQL import login_base
|
||||||
except:
|
except ValueError:
|
||||||
print('Pas de fichier PythonSQL')
|
print('Pas de fichier PythonSQL')
|
||||||
from .tools.SQLRequet import *
|
# from .tools.SQLRequet import *
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
send_issues,
|
# send_issues,
|
||||||
create_vierge,
|
|
||||||
create_contour,
|
|
||||||
create_travaux,
|
|
||||||
create_habita
|
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
# from .issues import CenRa_Issues
|
||||||
|
|
||||||
import os.path
|
# import os.path
|
||||||
import webbrowser, os
|
# import webbrowser
|
||||||
import psycopg2
|
# import psycopg2
|
||||||
import psycopg2.extras
|
# import psycopg2.extras
|
||||||
import base64
|
# import base64
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui')
|
||||||
@@ -52,22 +48,24 @@ try:
|
|||||||
dbname = account[4]
|
dbname = account[4]
|
||||||
cur = account[7]
|
cur = account[7]
|
||||||
con = account[8]
|
con = account[8]
|
||||||
except:
|
except ValueError:
|
||||||
print('')
|
print('')
|
||||||
class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|
||||||
|
|
||||||
|
|
||||||
|
class Postgis_Rename(QDialog, EDITOR_CLASS):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
_ = parent
|
_ = parent
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.settings = QgsSettings()
|
self.settings = QgsSettings()
|
||||||
self.s = QSettings()
|
self.s = QSettings()
|
||||||
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
|
||||||
self.iface = iface
|
self.iface = iface
|
||||||
|
|
||||||
self.schema.currentIndexChanged.connect(self.Test)
|
self.schema.currentIndexChanged.connect(self.Test)
|
||||||
self.buttonBox.accepted.connect(self.msgBox)
|
self.buttonBox.accepted.connect(self.msgBox)
|
||||||
### Outil Ajout de nouvelles couche a un dossier
|
# Outil Ajout de nouvelles couche a un dossier
|
||||||
|
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
self.groupBox_3.hide()
|
self.groupBox_3.hide()
|
||||||
@@ -82,7 +80,7 @@ class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|||||||
self.schema.addItems([''])
|
self.schema.addItems([''])
|
||||||
for Schema in AllSchema:
|
for Schema in AllSchema:
|
||||||
self.schema.addItems(Schema)
|
self.schema.addItems(Schema)
|
||||||
self.departement.addItems(['','01','07','26','42','69','form'])
|
self.departement.addItems(['', '01', '07', '26', '42', '69', 'form'])
|
||||||
if last_value_schema != '':
|
if last_value_schema != '':
|
||||||
self.schema.setCurrentIndex(self.schema.findText(last_value_schema))
|
self.schema.setCurrentIndex(self.schema.findText(last_value_schema))
|
||||||
if last_value_departement != '':
|
if last_value_departement != '':
|
||||||
@@ -93,8 +91,8 @@ class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|||||||
if oldSchema != '':
|
if oldSchema != '':
|
||||||
allIsGood = 0
|
allIsGood = 0
|
||||||
|
|
||||||
GET_COUNT_LEFT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE left(table_name,"+str(len(oldSchema))+") AND table_schema LIKE '"+oldSchema+"';"
|
GET_COUNT_LEFT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE left(table_name," + str(len(oldSchema)) + ") AND table_schema LIKE '" + oldSchema + "';"
|
||||||
GET_COUNT_TOT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE '"+oldSchema+"';"
|
GET_COUNT_TOT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE '" + oldSchema + "';"
|
||||||
|
|
||||||
cur.execute(GET_COUNT_TOT)
|
cur.execute(GET_COUNT_TOT)
|
||||||
CountTot = cur.fetchall()[0]
|
CountTot = cur.fetchall()[0]
|
||||||
@@ -102,17 +100,17 @@ class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|||||||
CountLeft = cur.fetchall()[0]
|
CountLeft = cur.fetchall()[0]
|
||||||
|
|
||||||
if CountLeft[0] == CountTot[0]:
|
if CountLeft[0] == CountTot[0]:
|
||||||
allIsGood = allIsGood+1
|
allIsGood = allIsGood + 1
|
||||||
self.couche.setChecked(1)
|
self.couche.setChecked(1)
|
||||||
else:
|
else:
|
||||||
self.couche.setChecked(0)
|
self.couche.setChecked(0)
|
||||||
|
|
||||||
GET_GRANTEE_PRIVILEGE = "SELECT DISTINCT count(*) FROM information_schema.role_table_grants WHERE table_schema LIKE '"+oldSchema+"' AND grantee LIKE 'grp_qgis' AND privilege_type LIKE 'UPDATE';"
|
GET_GRANTEE_PRIVILEGE = "SELECT DISTINCT count(*) FROM information_schema.role_table_grants WHERE table_schema LIKE '" + oldSchema + "' AND grantee LIKE 'grp_qgis' AND privilege_type LIKE 'UPDATE';"
|
||||||
cur.execute(GET_GRANTEE_PRIVILEGE)
|
cur.execute(GET_GRANTEE_PRIVILEGE)
|
||||||
CountPrivilege = cur.fetchall()[0]
|
CountPrivilege = cur.fetchall()[0]
|
||||||
|
|
||||||
if CountTot[0] == CountPrivilege[0]:
|
if CountTot[0] == CountPrivilege[0]:
|
||||||
allIsGood = allIsGood+1
|
allIsGood = allIsGood + 1
|
||||||
self.compte.setChecked(1)
|
self.compte.setChecked(1)
|
||||||
else:
|
else:
|
||||||
self.compte.setChecked(0)
|
self.compte.setChecked(0)
|
||||||
@@ -149,52 +147,50 @@ class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|||||||
def updateName(self):
|
def updateName(self):
|
||||||
if self.departement.currentText() != '':
|
if self.departement.currentText() != '':
|
||||||
oldTableName = self.old_name.text()
|
oldTableName = self.old_name.text()
|
||||||
newTableName = ((self.new_name.text()).lower()).replace(' ','_')
|
newTableName = ((self.new_name.text()).lower()).replace(' ', '_')
|
||||||
newPrefixSchema = '_'+self.departement.currentText()+'_'
|
newPrefixSchema = '_' + self.departement.currentText() + '_'
|
||||||
if self.schema.currentText()[:6] == '_form_':
|
if self.schema.currentText()[:6] == '_form_':
|
||||||
oldPrefixSchema = self.schema.currentText()[:6]
|
oldPrefixSchema = self.schema.currentText()[:6]
|
||||||
if (self.schema.currentText()[6:9]) == "at_":
|
if (self.schema.currentText()[6:9]) == "at_":
|
||||||
oldPrefixSchema=oldPrefixSchema+'at_'
|
oldPrefixSchema = oldPrefixSchema + 'at_'
|
||||||
else:
|
else:
|
||||||
oldPrefixSchema = self.schema.currentText()[:4]
|
oldPrefixSchema = self.schema.currentText()[:4]
|
||||||
if (self.schema.currentText()[4:7]) == 'at_':
|
if (self.schema.currentText()[4:7]) == 'at_':
|
||||||
oldPrefixSchema=oldPrefixSchema+'at_'
|
oldPrefixSchema = oldPrefixSchema + 'at_'
|
||||||
|
|
||||||
if self.animation.isChecked():
|
if self.animation.isChecked():
|
||||||
newPrefixSchema=newPrefixSchema+'at_'
|
newPrefixSchema = newPrefixSchema + 'at_'
|
||||||
oldSchemaName = oldPrefixSchema+oldTableName
|
oldSchemaName = oldPrefixSchema + oldTableName
|
||||||
newSchemaName = newPrefixSchema+newTableName
|
newSchemaName = newPrefixSchema + newTableName
|
||||||
|
|
||||||
if oldSchemaName != newSchemaName:
|
if oldSchemaName != newSchemaName:
|
||||||
global AllSQLrun
|
global AllSQLrun
|
||||||
allSQLrun=''
|
allSQLrun = ''
|
||||||
|
|
||||||
SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '"""+newSchemaName+"""',f_table_name = replace(replace(f_table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') WHERE f_table_schema LIKE '"""+oldSchemaName+"""';"""
|
SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '""" + newSchemaName + """',f_table_name = replace(replace(f_table_name,'""" + oldTableName + """','""" + newTableName + """'),'""" + oldPrefixSchema + """','""" + newPrefixSchema + """') WHERE f_table_schema LIKE '""" + oldSchemaName + """';"""
|
||||||
allSQLrun = allSQLrun+SQL_UPDATE
|
allSQLrun = allSQLrun + SQL_UPDATE
|
||||||
cur.execute(SQL_UPDATE)
|
cur.execute(SQL_UPDATE)
|
||||||
|
|
||||||
SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') from information_schema.tables WHERE table_schema LIKE '"""+oldSchemaName+"""';"""
|
SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'""" + oldTableName + """','""" + newTableName + """'),'""" + oldPrefixSchema + """','""" + newPrefixSchema + """') from information_schema.tables WHERE table_schema LIKE '""" + oldSchemaName + """';"""
|
||||||
cur.execute(SQL_GET_TABLE_RENAME)
|
cur.execute(SQL_GET_TABLE_RENAME)
|
||||||
allTableRename = cur.fetchall()
|
allTableRename = cur.fetchall()
|
||||||
allTableList = []
|
allTableList = []
|
||||||
for TableRename in allTableRename:
|
for TableRename in allTableRename:
|
||||||
oldTable = TableRename[0]
|
oldTable = TableRename[0]
|
||||||
newTable = TableRename[1]
|
newTable = TableRename[1]
|
||||||
allTableList.append([oldTable,newSchemaName,newTable])
|
allTableList.append([oldTable, newSchemaName, newTable])
|
||||||
SQL_RENAME_TABLE = """ALTER TABLE """+oldSchemaName+'.'+oldTable+""" RENAME TO """+newTable+""";"""
|
SQL_RENAME_TABLE = """ALTER TABLE """ + oldSchemaName + '.' + oldTable + """ RENAME TO """ + newTable + """;"""
|
||||||
allSQLrun = allSQLrun+SQL_RENAME_TABLE
|
allSQLrun = allSQLrun + SQL_RENAME_TABLE
|
||||||
cur.execute(SQL_RENAME_TABLE)
|
cur.execute(SQL_RENAME_TABLE)
|
||||||
|
|
||||||
SQL_RENAME_SCHEMA = 'ALTER SCHEMA '+oldSchemaName+' RENAME TO '+newSchemaName
|
SQL_RENAME_SCHEMA = 'ALTER SCHEMA ' + oldSchemaName + ' RENAME TO ' + newSchemaName
|
||||||
allSQLrun = allSQLrun+SQL_RENAME_SCHEMA
|
allSQLrun = allSQLrun + SQL_RENAME_SCHEMA
|
||||||
cur.execute(SQL_RENAME_SCHEMA)
|
cur.execute(SQL_RENAME_SCHEMA)
|
||||||
#print(allSQLrun)
|
|
||||||
con.commit()
|
con.commit()
|
||||||
for LayerOpen in allTableList:
|
for LayerOpen in allTableList:
|
||||||
self.UnloadLoadLayers(LayerOpen[0],LayerOpen[1],LayerOpen[2])
|
self.UnloadLoadLayers(LayerOpen[0], LayerOpen[1], LayerOpen[2])
|
||||||
|
|
||||||
|
def UnloadLoadLayers(self, OldName, NewSchema, NewTable):
|
||||||
def UnloadLoadLayers(self,OldName,NewSchema,NewTable):
|
|
||||||
allLayers = (QgsProject.instance().mapLayers().values())
|
allLayers = (QgsProject.instance().mapLayers().values())
|
||||||
listLayers = []
|
listLayers = []
|
||||||
listLayersName = []
|
listLayersName = []
|
||||||
@@ -210,10 +206,10 @@ class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|||||||
host = QgsDataSourceUri(provider.dataSourceUri()).host()
|
host = QgsDataSourceUri(provider.dataSourceUri()).host()
|
||||||
port = QgsDataSourceUri(provider.dataSourceUri()).port()
|
port = QgsDataSourceUri(provider.dataSourceUri()).port()
|
||||||
|
|
||||||
### Affichage de la table
|
# Affichage de la table
|
||||||
uri = QgsDataSourceUri()
|
uri = QgsDataSourceUri()
|
||||||
# set host name, port, database name, username and password
|
# set host name, port, database name, username and password
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
uri.setConnection(host, port, dbname, user, mdp)
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
uri.setDataSource(NewSchema, NewTable, 'geom')
|
uri.setDataSource(NewSchema, NewTable, 'geom')
|
||||||
QgsProject.instance().removeMapLayer(layer.id())
|
QgsProject.instance().removeMapLayer(layer.id())
|
||||||
@@ -224,16 +220,16 @@ class Postgis_Rename(QDialog, EDITOR_CLASS):
|
|||||||
self.QMBquestion.setWindowTitle(u"Attention !")
|
self.QMBquestion.setWindowTitle(u"Attention !")
|
||||||
self.QMBquestion.setIcon(QMessageBox.Icon.Warning)
|
self.QMBquestion.setIcon(QMessageBox.Icon.Warning)
|
||||||
self.QMBquestion.setText("Attention, le renommage de dossier PostGIS peut engendrer des pertes de liaisons avec des projets QGIS !")
|
self.QMBquestion.setText("Attention, le renommage de dossier PostGIS peut engendrer des pertes de liaisons avec des projets QGIS !")
|
||||||
self.QMBquestion.setStandardButtons(QMessageBox.StandardButton(0x00004000)|QMessageBox.StandardButton(0x00010000))
|
self.QMBquestion.setStandardButtons(QMessageBox.StandardButton(0x00004000) | QMessageBox.StandardButton(0x00010000))
|
||||||
if self.new_name.text() != '':
|
if self.new_name.text() != '':
|
||||||
error_caracteres = 0
|
error_caracteres = 0
|
||||||
for caracteres in ch :
|
for caracteres in ch:
|
||||||
if self.new_name.text().find(caracteres) != -1 :
|
if self.new_name.text().find(caracteres) != - 1:
|
||||||
error_caracteres = 1
|
error_caracteres = 1
|
||||||
if error_caracteres == 0:
|
if error_caracteres == 0:
|
||||||
self.QMBquestion = self.QMBquestion.exec()
|
self.QMBquestion = self.QMBquestion.exec()
|
||||||
else:
|
else:
|
||||||
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.new_name.text().lower() )
|
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.new_name.text().lower())
|
||||||
else:
|
else:
|
||||||
QMessageBox.warning(None, "Oups :", "Votre projet doit avoire un nom !")
|
QMessageBox.warning(None, "Oups :", "Votre projet doit avoire un nom !")
|
||||||
if self.QMBquestion == QMessageBox.StandardButton(0x00004000):
|
if self.QMBquestion == QMessageBox.StandardButton(0x00004000):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
geom = "geom"
|
geom = "geom"
|
||||||
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
champ_travaux_prevus_multipolygon = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
||||||
champ_travaux_prevus_multilinestring="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))"""
|
champ_travaux_prevus_multilinestring = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))"""
|
||||||
champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))"""
|
champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))"""
|
||||||
|
|
||||||
champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))"""
|
champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))"""
|
||||||
@@ -10,7 +10,7 @@ champ_viergePoint = """(gid serial NOT NULL, commentaire text, x_wgs84 double pr
|
|||||||
|
|
||||||
champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
||||||
|
|
||||||
champ_contour="""(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154))
|
champ_contour = """(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
champ_vegethab_point = """(
|
champ_vegethab_point = """(
|
||||||
|
|||||||
+484
-468
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
"""
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
SICEN
|
SICEN
|
||||||
A QGIS plugin
|
A QGIS plugin
|
||||||
Filtre sur données SICEN
|
Filtre sur données SICEN
|
||||||
-------------------
|
-------------------
|
||||||
begin : 2014-10-17
|
begin : 2014-10-17
|
||||||
copyright : (C) 2014 by Guillaume COSTES
|
copyright : (C) 2014 by Guillaume COSTES
|
||||||
email : guillaume.costes@espaces-naturels.fr
|
email : guillaume.costes@espaces-naturels.fr
|
||||||
@@ -18,10 +18,11 @@
|
|||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
This script initializes the plugin, making it known to QGIS.
|
This script initializes the plugin, making it known to QGIS.
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
|
||||||
def classFactory(iface):
|
def classFactory(iface):
|
||||||
# load SICEN class from file SICEN
|
# load SICEN class from file SICEN
|
||||||
from .sicen import SICEN
|
from .sicen import SICEN
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ name=CenRa SICEN
|
|||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
supportsQt6=True
|
supportsQt6=True
|
||||||
description=Filtre des données saisies dans SICEN et export d'une liste d'espèces.
|
description=Filtre des données saisies dans SICEN et export d'une liste d'espèces.
|
||||||
version=2.0
|
version=2.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
# Optional items:
|
# Optional items:
|
||||||
|
|
||||||
# Uncomment the following line and add your changelog entries:
|
# Uncomment the following line and add your changelog entries:
|
||||||
changelog=<h2>CenRa_SICEN:</h2></br><p><h3>19/05/2025 - Version 2.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>09/04/2025 - Version 1.11: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 1.10: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 1.9: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 1.8: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>13/09/2024 - Version 1.7:</h3> - Il est maintenant possible de sélectionné plusieurs entité pour le filtre par Emprise.</br>- Ajoute d'un changelog.</br>- Ajoute une vérification de mise à jour.</p>
|
changelog=<h2>CenRa_SICEN:</h2></br><p><h3>30/07/2025 - Version 2.1: </h3> - Correctife de bug.</p></br><p><h3>19/05/2025 - Version 2.0: </h3> - Compatible PyQt5 et PyQt6</p></br><p><h3>09/04/2025 - Version 1.11: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 1.10: </h3> - Optimisation pour le TT.</p></br><p><h3>03/04/2025 - Version 1.9: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 1.8: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>13/09/2024 - Version 1.7:</h3> - Il est maintenant possible de sélectionné plusieurs entité pour le filtre par Emprise.</br>- Ajoute d'un changelog.</br>- Ajoute une vérification de mise à jour.</p>
|
||||||
|
|
||||||
# tags are comma separated with spaces allowed
|
# tags are comma separated with spaces allowed
|
||||||
tags=cenra, postgis, sicen
|
tags=cenra, postgis, sicen
|
||||||
|
|||||||
@@ -5,10 +5,9 @@
|
|||||||
# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
|
# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
|
||||||
#
|
#
|
||||||
# WARNING! All changes made in this file will be lost!
|
# WARNING! All changes made in this file will be lost!
|
||||||
try:
|
|
||||||
from PyQt5 import QtCore
|
from qgis.PyQt import QtCore
|
||||||
except:
|
|
||||||
from PyQt6 import QtCore
|
|
||||||
qt_resource_data = b"\
|
qt_resource_data = b"\
|
||||||
\x00\x00\x0d\x89\
|
\x00\x00\x0d\x89\
|
||||||
\x89\
|
\x89\
|
||||||
@@ -558,10 +557,13 @@ else:
|
|||||||
rcc_version = 2
|
rcc_version = 2
|
||||||
qt_resource_struct = qt_resource_struct_v2
|
qt_resource_struct = qt_resource_struct_v2
|
||||||
|
|
||||||
|
|
||||||
def qInitResources():
|
def qInitResources():
|
||||||
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||||
|
|
||||||
|
|
||||||
def qCleanupResources():
|
def qCleanupResources():
|
||||||
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||||
|
|
||||||
|
|
||||||
qInitResources()
|
qInitResources()
|
||||||
|
|||||||
+301
-330
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
"""
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
SICENDialog
|
SICENDialog
|
||||||
A QGIS plugin
|
A QGIS plugin
|
||||||
Filtre sur données SICEN
|
Filtre sur données SICEN
|
||||||
-------------------
|
-------------------
|
||||||
begin : 2014-10-17
|
begin : 2014-10-17
|
||||||
copyright : (C) 2014 by Guillaume COSTES
|
copyright : (C) 2014 by Guillaume COSTES
|
||||||
email : guillaume.costes@espaces-naturels.fr
|
email : guillaume.costes@espaces-naturels.fr
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from qgis.PyQt import QtCore, QtGui
|
# from qgis.PyQt import QtCore, QtGui
|
||||||
from qgis.PyQt.QtWidgets import QAction, QDialog
|
from qgis.PyQt.QtWidgets import QDialog
|
||||||
from .ui_sicen import Ui_SICEN
|
from .ui_sicen import Ui_SICEN
|
||||||
# create the dialog for zoom to point
|
# create the dialog for zoom to point
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
|
# import base64
|
||||||
|
# import psycopg2
|
||||||
|
# import psycopg2.extras
|
||||||
import os
|
import os
|
||||||
import base64
|
|
||||||
import psycopg2
|
|
||||||
import psycopg2.extras
|
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
@@ -90,7 +90,7 @@ def resources_path(*args):
|
|||||||
:return: Absolute path to the resources folder.
|
:return: Absolute path to the resources folder.
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
path = abspath(abspath(join(plugin_path(), "CenRa_SICEN\\tools")))
|
path = abspath(abspath(join(plugin_path(), "CenRa_COPIE\\tools")))
|
||||||
for item in args:
|
for item in args:
|
||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
return path
|
return path
|
||||||
@@ -108,72 +108,77 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
|
|
||||||
def pyperclip():
|
def pyperclip():
|
||||||
dst = dirname(dirname(__file__))+"\\tools\\"
|
dst = dirname(dirname(__file__)) + "\\tools\\"
|
||||||
if os.access('N:/',os.R_OK):
|
if os.access('N:/', os.R_OK):
|
||||||
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
||||||
try:
|
try:
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
except:
|
except FileNotFoundError:
|
||||||
|
print('404')
|
||||||
|
except UnboundLocalError:
|
||||||
print('404')
|
print('404')
|
||||||
|
|
||||||
def send_issues(url,titre,body,labels):
|
|
||||||
|
def send_issues(url, titre, body, labels):
|
||||||
import requests
|
import requests
|
||||||
|
import urllib.request
|
||||||
import json
|
import json
|
||||||
import os
|
# import os
|
||||||
import qgis
|
# import qgis
|
||||||
|
|
||||||
usr = os.environ['USERNAME']
|
# usr = os.environ['USERNAME']
|
||||||
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
||||||
url=url+'?token='+token
|
url = url + '?token=' + token
|
||||||
|
|
||||||
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
|
||||||
|
|
||||||
|
headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'}
|
||||||
|
|
||||||
payload = {'title': titre, 'body': body, 'labels': labels}
|
payload = {'title': titre, 'body': body, 'labels': labels}
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except ValueError:
|
||||||
binar = False
|
binar = False
|
||||||
r = ''
|
r = ''
|
||||||
if binar:
|
if binar:
|
||||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def maj_verif(NAME):
|
def maj_verif(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
import urllib.request
|
import urllib.request
|
||||||
iface = qgis.utils.iface
|
iface = qgis.utils.iface
|
||||||
from qgis.core import Qgis
|
from qgis.core import Qgis
|
||||||
|
|
||||||
url = qgis.utils.pluginMetadata(NAME,'repository')
|
# url = qgis.utils.pluginMetadata(NAME, 'repository')
|
||||||
#URL = url+'/raw/branch/main/plugins.xml'
|
# URL = url+'/raw/branch/main/plugins.xml'
|
||||||
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||||
# print(URL)
|
# print(URL)
|
||||||
version = qgis.utils.pluginMetadata(NAME,'version')
|
version = qgis.utils.pluginMetadata(NAME, 'version')
|
||||||
len_version = len(version)
|
len_version = len(version)
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except urllib.error.URLError:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
try:
|
try:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
plugin_num = version_web.find(NAME)
|
plugin_num = version_web.find(NAME)
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
valeur_version_web = version_web.find('<version>', plugin_num) + 9
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
version_plugin = version_web[valeur_version_web:valeur_version_web + len_version]
|
||||||
if version_plugin != version:
|
if version_plugin != version:
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
except:
|
except urllib.error.URLError:
|
||||||
print("error gitea version ssl")
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
#return version_plugin
|
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||||
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog')
|
||||||
return devmaj
|
return devmaj
|
||||||
+10
-7
@@ -8,9 +8,10 @@
|
|||||||
# WARNING! All changes made in this file will be lost!
|
# WARNING! All changes made in this file will be lost!
|
||||||
|
|
||||||
from builtins import object
|
from builtins import object
|
||||||
from qgis.PyQt import QtCore, QtGui
|
from qgis.PyQt import QtCore
|
||||||
from qgis.PyQt.QtGui import QFont
|
from qgis.PyQt.QtGui import QFont
|
||||||
from qgis.PyQt.QtWidgets import QAction, QDialog, QDialogButtonBox, QLabel, QApplication, QTabWidget, QWidget, QGroupBox, QGridLayout, QComboBox, QCheckBox, QCalendarWidget, QToolBox, QFrame, QLineEdit, QSizePolicy #Modifié
|
# Modifié
|
||||||
|
from qgis.PyQt.QtWidgets import QDialogButtonBox, QLabel, QApplication, QTabWidget, QWidget, QGroupBox, QGridLayout, QComboBox, QCheckBox, QCalendarWidget, QToolBox, QFrame, QLineEdit, QSizePolicy
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -21,20 +22,22 @@ except AttributeError:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
_encoding = QApplication.UnicodeUTF8
|
_encoding = QApplication.UnicodeUTF8
|
||||||
|
|
||||||
def _translate(context, text, disambig):
|
def _translate(context, text, disambig):
|
||||||
return QApplication.translate(context, text, disambig, _encoding)
|
return QApplication.translate(context, text, disambig, _encoding)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
def _translate(context, text, disambig):
|
def _translate(context, text, disambig):
|
||||||
return QApplication.translate(context, text, disambig)
|
return QApplication.translate(context, text, disambig)
|
||||||
|
|
||||||
|
|
||||||
class Ui_SICEN(object):
|
class Ui_SICEN(object):
|
||||||
def setupUi(self, SICEN):
|
def setupUi(self, SICEN):
|
||||||
SICEN.setObjectName(_fromUtf8("SICEN"))
|
SICEN.setObjectName(_fromUtf8("SICEN"))
|
||||||
SICEN.resize(592, 556)
|
SICEN.resize(592, 556)
|
||||||
self.buttonBox = QDialogButtonBox(SICEN)
|
self.buttonBox = QDialogButtonBox(SICEN)
|
||||||
self.buttonBox.setGeometry(QtCore.QRect(390, 520, 161, 32))
|
self.buttonBox.setGeometry(QtCore.QRect(390, 520, 161, 32))
|
||||||
#self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
# self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||||
self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton(0x00400000)|QDialogButtonBox.StandardButton(0x00000400))
|
self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton(0x00400000) | QDialogButtonBox.StandardButton(0x00000400))
|
||||||
self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
|
self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
|
||||||
self.Titre = QLabel(SICEN)
|
self.Titre = QLabel(SICEN)
|
||||||
self.Titre.setGeometry(QtCore.QRect(110, 10, 331, 31))
|
self.Titre.setGeometry(QtCore.QRect(110, 10, 331, 31))
|
||||||
@@ -529,7 +532,7 @@ class Ui_SICEN(object):
|
|||||||
font.setBold(True)
|
font.setBold(True)
|
||||||
font.setWeight(75)
|
font.setWeight(75)
|
||||||
self.groupBox_6.setFont(font)
|
self.groupBox_6.setFont(font)
|
||||||
self.groupBox_6.setAlignment(QtCore.Qt.AlignmentFlag(0x0001)|QtCore.Qt.AlignmentFlag(0x0001)|QtCore.Qt.AlignmentFlag(0x0080))
|
self.groupBox_6.setAlignment(QtCore.Qt.AlignmentFlag(0x0001) | QtCore.Qt.AlignmentFlag(0x0001) | QtCore.Qt.AlignmentFlag(0x0080))
|
||||||
self.groupBox_6.setObjectName(_fromUtf8("groupBox_6"))
|
self.groupBox_6.setObjectName(_fromUtf8("groupBox_6"))
|
||||||
self.gridLayoutWidget_7 = QWidget(self.groupBox_6)
|
self.gridLayoutWidget_7 = QWidget(self.groupBox_6)
|
||||||
self.gridLayoutWidget_7.setGeometry(QtCore.QRect(10, 20, 491, 21))
|
self.gridLayoutWidget_7.setGeometry(QtCore.QRect(10, 20, 491, 21))
|
||||||
@@ -681,7 +684,8 @@ class Ui_SICEN(object):
|
|||||||
self.Emprise.setCurrentIndex(0)
|
self.Emprise.setCurrentIndex(0)
|
||||||
self.protections.setCurrentIndex(0)
|
self.protections.setCurrentIndex(0)
|
||||||
self.buttonBox.accepted.connect(SICEN.accept)
|
self.buttonBox.accepted.connect(SICEN.accept)
|
||||||
self.buttonBox.rejected.connect(SICEN.reject) #Modifié
|
# Modifié
|
||||||
|
self.buttonBox.rejected.connect(SICEN.reject)
|
||||||
QtCore.QMetaObject.connectSlotsByName(SICEN)
|
QtCore.QMetaObject.connectSlotsByName(SICEN)
|
||||||
|
|
||||||
def retranslateUi(self, SICEN):
|
def retranslateUi(self, SICEN):
|
||||||
@@ -753,4 +757,3 @@ class Ui_SICEN(object):
|
|||||||
self.label_11.setText(_translate("SICEN", "4.", None))
|
self.label_11.setText(_translate("SICEN", "4.", None))
|
||||||
self.Emprise.setTabText(self.Emprise.indexOf(self.tab_4), _translate("SICEN", "Filtre par Emprise", None))
|
self.Emprise.setTabText(self.Emprise.indexOf(self.tab_4), _translate("SICEN", "Filtre par Emprise", None))
|
||||||
self.centroide.setText(_translate("SICEN", "Utiliser les centroïdes pour les observations autres que ponctuelles", None))
|
self.centroide.setText(_translate("SICEN", "Utiliser les centroïdes pour les observations autres que ponctuelles", None))
|
||||||
|
|
||||||
|
|||||||
+21
-21
@@ -1,7 +1,7 @@
|
|||||||
<plugins>
|
<plugins>
|
||||||
<pyqgis_plugin name="CenRa_POSTGIS" version="3.0">
|
<pyqgis_plugin name="CenRa_POSTGIS" version="3.1">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>3.0</version>
|
<version>3.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_POSTGIS.zip</file_name>
|
<file_name>CenRa_POSTGIS.zip</file_name>
|
||||||
@@ -10,15 +10,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2025-05-19</update_date>
|
<update_date>2025-07-30</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,postgis</tags>
|
<tags>cenra,postgis</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_COPIE" version="3.0">
|
<pyqgis_plugin name="CenRa_COPIE" version="3.1">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>3.0</version>
|
<version>3.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_COPIE.zip</file_name>
|
<file_name>CenRa_COPIE.zip</file_name>
|
||||||
@@ -27,15 +27,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COPIE.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COPIE.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2025-05-19</update_date>
|
<update_date>2025-07-30</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,copie</tags>
|
<tags>cenra,copie</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_SICEN" version="2.0">
|
<pyqgis_plugin name="CenRa_SICEN" version="2.1">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>2.0</version>
|
<version>2.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_SICEN.zip</file_name>
|
<file_name>CenRa_SICEN.zip</file_name>
|
||||||
@@ -44,15 +44,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_SICEN.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_SICEN.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2025-05-19</update_date>
|
<update_date>2025-07-30</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,sicen</tags>
|
<tags>cenra,sicen</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_FLUX" version="3.1">
|
<pyqgis_plugin name="CenRa_FLUX" version="3.7">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>3.1</version>
|
<version>3.7</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_FLUX.zip</file_name>
|
<file_name>CenRa_FLUX.zip</file_name>
|
||||||
@@ -61,15 +61,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_FLUX.zip</download_url>
|
<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>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2025-07-21</update_date>
|
<update_date>2025-09-05</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,flux</tags>
|
<tags>cenra,flux</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_METABASE" version="0.3.0">
|
<pyqgis_plugin name="CenRa_METABASE" version="0.3.1">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>0.3.0</version>
|
<version>0.3.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_METABASE.zip</file_name>
|
<file_name>CenRa_METABASE.zip</file_name>
|
||||||
@@ -78,15 +78,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_METABASE.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_METABASE.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-09-12</create_date>
|
<create_date>2024-09-12</create_date>
|
||||||
<update_date>2025-05-19</update_date>
|
<update_date>2025-07-30</update_date>
|
||||||
<experimental>True</experimental>
|
<experimental>True</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,metabase</tags>
|
<tags>cenra,metabase</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_AUTOMAP" version="2.0">
|
<pyqgis_plugin name="CenRa_AUTOMAP" version="2.1">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>2.0</version>
|
<version>2.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_AUTOMAP.zip</file_name>
|
<file_name>CenRa_AUTOMAP.zip</file_name>
|
||||||
@@ -95,15 +95,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_AUTOMAP.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_AUTOMAP.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-09-25</create_date>
|
<create_date>2024-09-25</create_date>
|
||||||
<update_date>2025-05-19</update_date>
|
<update_date>2025-07-30</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,mise en page,atlas</tags>
|
<tags>cenra,mise en page,atlas</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_PAGERENDER" version="0.2.0">
|
<pyqgis_plugin name="CenRa_PAGERENDER" version="0.2.1">
|
||||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>0.2.0</version>
|
<version>0.2.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_PAGERENDER.zip</file_name>
|
<file_name>CenRa_PAGERENDER.zip</file_name>
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_PAGERENDER.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_PAGERENDER.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-10-09</create_date>
|
<create_date>2024-10-09</create_date>
|
||||||
<update_date>2025-05-19</update_date>
|
<update_date>2025-07-30</update_date>
|
||||||
<experimental>True</experimental>
|
<experimental>True</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,mise en page,atlas</tags>
|
<tags>cenra,mise en page,atlas</tags>
|
||||||
|
|||||||
Reference in New Issue
Block a user