QGIS API Documentation 3.40.0-Bratislava (b56115d8743)
Loading...
Searching...
No Matches
qgsserverapiutils.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsserverapiutils.h
3
4 Class defining utilities for QGIS server APIs.
5 -------------------
6 begin : 2019-04-16
7 copyright : (C) 2019 by Alessandro Pasotti
8 email : elpaso at itopen dot it
9 ***************************************************************************/
10
11/***************************************************************************
12 * *
13 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. *
17 * *
18 ***************************************************************************/
19
20
21#ifndef QGSSERVERAPIUTILS_H
22#define QGSSERVERAPIUTILS_H
23
24#include "qgis_server.h"
25#include <QString>
26#include "qgsproject.h"
28#include "qgsserverapicontext.h"
29#include "qgsserverexception.h"
31#include "qgsrange.h"
32#include "qgsjsonutils.h"
33
34#ifdef HAVE_SERVER_PYTHON_PLUGINS
35#include "qgsaccesscontrol.h"
36#include "qgsserverinterface.h"
37#endif
38
39class QgsRectangle;
41class QgsVectorLayer;
42
43#ifndef SIP_RUN
44#include <nlohmann/json_fwd.hpp>
45using namespace nlohmann;
46#endif
47
53class SERVER_EXPORT QgsServerApiUtils
54{
55
56 public:
57
63 static QgsRectangle parseBbox( const QString &bbox );
64
69 static QList< QgsServerWmsDimensionProperties::WmsDimensionInfo > temporalDimensions( const QgsVectorLayer *layer );
70
77 static QgsDateRange parseTemporalDateInterval( const QString &interval ) SIP_THROW( QgsServerApiBadRequestException );
78
85 static QgsDateTimeRange parseTemporalDateTimeInterval( const QString &interval ) SIP_THROW( QgsServerApiBadRequestException );
86
87
93 static QString fieldName( const QString &name, const QgsVectorLayer *layer ) SIP_THROW( QgsServerApiBadRequestException );
94
96 // T is TemporalDateInterval|TemporalDateTimeInterval, T2 is QDate|QdateTime
97 template<typename T, class T2> static T parseTemporalInterval( const QString &interval ) SIP_SKIP;
99
100
113 static QgsExpression temporalFilterExpression( const QgsVectorLayer *layer, const QString &interval );
114
118 static json layerExtent( const QgsVectorLayer *layer ) SIP_SKIP;
119
137 static json temporalExtent( const QgsVectorLayer *layer ) SIP_SKIP;
138
155 static QVariantList temporalExtentList( const QgsVectorLayer *layer ) SIP_PYNAME( temporalExtent );
156
160 static QgsCoordinateReferenceSystem parseCrs( const QString &bboxCrs );
161
167 static const QVector<QgsVectorLayer *> publishedWfsLayers( const QgsServerApiContext &context );
168
169#ifndef SIP_RUN
170
180 template <typename T>
181 static const QVector<T> publishedWfsLayers( const QgsServerApiContext &context )
182 {
183#ifdef HAVE_SERVER_PYTHON_PLUGINS
184 QgsAccessControl *accessControl = context.serverInterface()->accessControls();
185#endif
186 const QgsProject *project = context.project();
187 QVector<T> result;
188 if ( project )
189 {
190 const QStringList wfsLayerIds = QgsServerProjectUtils::wfsLayerIds( *project );
191 const auto constLayers { project->layers<T>() };
192 for ( const auto &layer : constLayers )
193 {
194 if ( ! wfsLayerIds.contains( layer->id() ) )
195 {
196 continue;
197 }
198#ifdef HAVE_SERVER_PYTHON_PLUGINS
199 if ( accessControl && !accessControl->layerReadPermission( layer ) )
200 {
201 continue;
202 }
203#endif
204 result.push_back( layer );
205 }
206 }
207 return result;
208 }
209
210#endif
211
212
217 static QString sanitizedFieldValue( const QString &value );
218
223 static QStringList publishedCrsList( const QgsProject *project );
224
231 Q_DECL_DEPRECATED static QString crsToOgcUri( const QgsCoordinateReferenceSystem &crs ) SIP_DEPRECATED;
232
236 static QString appendMapParameter( const QString &path, const QUrl &requestUrl );
237
238};
239#endif // QGSSERVERAPIUTILS_H
A helper class that centralizes restrictions given by all the access control filter plugins.
bool layerReadPermission(const QgsMapLayer *layer) const
Returns the layer read right.
This class represents a coordinate reference system (CRS).
Class for parsing and evaluation of expressions (formerly called "search strings").
QString id
Definition qgsmaplayer.h:79
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition qgsproject.h:107
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
A rectangle specified with double values.
Bad request error API exception.
The QgsServerApiContext class encapsulates the resources for a particular client request: the request...
const QgsProject * project() const
Returns the (possibly NULL) project.
QgsServerInterface * serverInterface() const
Returns the server interface.
The QgsServerApiUtils class contains helper functions to handle common API operations.
static const QVector< T > publishedWfsLayers(const QgsServerApiContext &context)
Returns the list of layers of type T accessible to the WFS service for a given project.
virtual QgsAccessControl * accessControls() const =0
Gets the registered access control filters.
Represents a vector layer which manages a vector based data sets.
SERVER_EXPORT QStringList wfsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WFS.
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_PYNAME(name)
Definition qgis_sip.h:81
#define SIP_THROW(name,...)
Definition qgis_sip.h:203
QgsTemporalRange< QDate > QgsDateRange
QgsRange which stores a range of dates.
Definition qgsrange.h:729
const QgsCoordinateReferenceSystem & crs