QGIS API Documentation  3.20.0-Odense (decaadbb31)
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"
27 #include "qgsserverprojectutils.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 
39 class QgsRectangle;
41 class QgsVectorLayer;
42 
43 #ifndef SIP_RUN
44 #include "nlohmann/json_fwd.hpp"
45 using namespace nlohmann;
46 #endif
47 
53 class SERVER_EXPORT QgsServerApiUtils
54 {
55 
56  public:
57 
63  static QgsRectangle parseBbox( const QString &bbox );
64 
69  static QList< QgsVectorLayerServerProperties::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 
88  // T is TemporalDateInterval|TemporalDateTimeInterval, T2 is QDate|QdateTime
89  template<typename T, class T2> static T parseTemporalInterval( const QString &interval ) SIP_SKIP;
91 
92 
105  static QgsExpression temporalFilterExpression( const QgsVectorLayer *layer, const QString &interval );
106 
110  static json layerExtent( const QgsVectorLayer *layer ) SIP_SKIP;
111 
129  static json temporalExtent( const QgsVectorLayer *layer ) SIP_SKIP;
130 
147  static QVariantList temporalExtentList( const QgsVectorLayer *layer ) SIP_PYNAME( temporalExtent );
148 
152  static QgsCoordinateReferenceSystem parseCrs( const QString &bboxCrs );
153 
159  static const QVector<QgsVectorLayer *> publishedWfsLayers( const QgsServerApiContext &context );
160 
161 #ifndef SIP_RUN
162 
172  template <typename T>
173  static const QVector<T> publishedWfsLayers( const QgsServerApiContext &context )
174  {
175 #ifdef HAVE_SERVER_PYTHON_PLUGINS
176  QgsAccessControl *accessControl = context.serverInterface()->accessControls();
177 #endif
178  const QgsProject *project = context.project();
179  QVector<T> result;
180  if ( project )
181  {
182  const QStringList wfsLayerIds = QgsServerProjectUtils::wfsLayerIds( *project );
183  const auto constLayers { project->layers<T>() };
184  for ( const auto &layer : constLayers )
185  {
186  if ( ! wfsLayerIds.contains( layer->id() ) )
187  {
188  continue;
189  }
190 #ifdef HAVE_SERVER_PYTHON_PLUGINS
191  if ( accessControl && !accessControl->layerReadPermission( layer ) )
192  {
193  continue;
194  }
195 #endif
196  result.push_back( layer );
197  }
198  }
199  return result;
200  }
201 
202 #endif
203 
204 
209  static QString sanitizedFieldValue( const QString &value );
210 
215  static QStringList publishedCrsList( const QgsProject *project );
216 
221  static QString crsToOgcUri( const QgsCoordinateReferenceSystem &crs );
222 
226  static QString appendMapParameter( const QString &path, const QUrl &requestUrl );
227 
228 };
229 #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() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:99
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
Definition: qgsproject.h:1075
A rectangle specified with double values.
Definition: qgsrectangle.h:42
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.
QgsRectangle parseBbox(const QString &bboxStr)
Parse bounding box.
#define SIP_THROW(name)
Definition: qgis_sip.h:189
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
const QgsCoordinateReferenceSystem & crs