QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgsfilterrestorer.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsowsserver.cpp
3 -------------------
4 begin : February 27, 2012
5 copyright : (C) 2012 by René-Luc D'Hont & Marco Hugentobler
6 email : rldhont at 3liz dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgsfilterrestorer.h"
19
20#include "qgsmessagelog.h"
21#include "qgsvectorlayer.h"
22
23#include <QString>
24
25using namespace Qt::StringLiterals;
26
27#ifdef HAVE_SERVER_PYTHON_PLUGINS
28#include "qgsaccesscontrol.h"
29#endif
30
32#ifdef HAVE_SERVER_PYTHON_PLUGINS
33void QgsOWSServerFilterRestorer::applyAccessControlLayerFilters( const QgsAccessControl *accessControl, QgsMapLayer *mapLayer, QHash<QgsMapLayer *, QString> &originalLayerFilters )
34{
35 if ( QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( mapLayer ) )
36 {
37 QString sql = accessControl->extraSubsetString( layer );
38 if ( !sql.isEmpty() )
39 {
40 if ( !originalLayerFilters.contains( layer ) )
41 {
42 originalLayerFilters.insert( layer, layer->subsetString() );
43 }
44 if ( !layer->subsetString().isEmpty() )
45 {
46 sql.prepend( ") AND (" );
47 sql.append( ")" );
48 sql.prepend( layer->subsetString() );
49 sql.prepend( "(" );
50 }
51 if ( !layer->setSubsetString( sql ) )
52 {
53 QgsMessageLog::logMessage( u"Layer does not support Subset String"_s );
54 }
55 }
56 }
57}
58
60{
61 if ( QgsVectorLayer *layer = qobject_cast<QgsVectorLayer *>( mapLayer ) )
62 {
63 QString sql = accessControl->extraSubsetString( layer );
64 if ( !sql.isEmpty() )
65 {
66 if ( !layer->subsetString().isEmpty() )
67 {
68 sql.prepend( ") AND (" );
69 sql.append( ")" );
70 sql.prepend( layer->subsetString() );
71 sql.prepend( "(" );
72 }
73 if ( !layer->setSubsetString( sql ) )
74 {
75 QgsMessageLog::logMessage( u"Layer does not support Subset String"_s );
76 }
77 }
78 }
79}
80#endif
81
83void QgsOWSServerFilterRestorer::restoreLayerFilters( const QHash<QgsMapLayer *, QString> &filterMap )
84{
85 QHash<QgsMapLayer *, QString>::const_iterator filterIt = filterMap.constBegin();
86 for ( ; filterIt != filterMap.constEnd(); ++filterIt )
87 {
88 QgsVectorLayer *filteredLayer = qobject_cast<QgsVectorLayer *>( filterIt.key() );
89 if ( filteredLayer )
90 {
91 if ( !filteredLayer->setSubsetString( filterIt.value() ) )
92 {
93 QgsMessageLog::logMessage( u"Layer does not support Subset String"_s );
94 }
95 }
96 }
97}
A helper class that centralizes restrictions given by all the access control filter plugins.
QString extraSubsetString(const QgsVectorLayer *layer) const
Returns an additional subset string (typically SQL) filter.
Base class for all map layer types.
Definition qgsmaplayer.h:83
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
static void applyAccessControlLayerFilters(const QgsAccessControl *accessControl, QgsMapLayer *mapLayer, QHash< QgsMapLayer *, QString > &originalLayerFilters)
Apply filter from AccessControl.
void restoreLayerFilters(const QHash< QgsMapLayer *, QString > &filterMap)
Apply filter from AccessControal.
Represents a vector layer which manages a vector based dataset.
virtual bool setSubsetString(const QString &subset)
Sets the string (typically sql) used to define a subset of the layer.