Skip to content

Commit

Permalink
New QGIS Server setting environement to do not load layouts
Browse files Browse the repository at this point in the history
Defined a new QGIS Server setting environnement `QGIS_SERVER_DONT_LOAD_LAYOUTS` to do not load layouts when QGIS Server reads projects.
This variable will disable QGIS Server GetPrint capabilities.
  • Loading branch information
rldhont committed Aug 13, 2020
1 parent bb6b061 commit fa7da5a
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 3 deletions.
10 changes: 10 additions & 0 deletions python/server/auto_generated/qgsserversettings.sip.in
Expand Up @@ -193,6 +193,16 @@ Returns ``True`` if the reading flag trust layer metadata is activated.
The default value is ``False``, this value can be changed by setting the environment
variable QGIS_SERVER_TRUST_LAYER_METADATA.

.. versionadded:: 3.16
%End

bool dontLoadLayouts() const;
%Docstring
Returns ``True`` if the reading flag don't load layouts is activated.

The default value is ``False``, this value can be changed by setting the environment
variable QGIS_SERVER_DONT_LOAD_LAYOUTS.

.. versionadded:: 3.16
%End

Expand Down
13 changes: 11 additions & 2 deletions src/server/qgsconfigcache.cpp
Expand Up @@ -49,9 +49,18 @@ const QgsProject *QgsConfigCache::project( const QString &path, QgsServerSetting
prj->setBadLayerHandler( badLayerHandler );

QgsProject::ReadFlags readFlags = QgsProject::ReadFlag();
if ( settings && settings->trustLayerMetadata() )
if ( settings )
{
readFlags |= QgsProject::ReadFlag::FlagTrustLayerMetadata;
// Activate trust layer metadata flag
if ( settings->trustLayerMetadata() )
{
readFlags |= QgsProject::ReadFlag::FlagTrustLayerMetadata;
}
// Activate don't load layouts flag
else if ( settings->dontLoadLayouts() )
{
readFlags |= QgsProject::ReadFlag::FlagDontLoadLayouts;
}
}

if ( prj->read( path, readFlags ) )
Expand Down
16 changes: 16 additions & 0 deletions src/server/qgsserversettings.cpp
Expand Up @@ -174,6 +174,17 @@ void QgsServerSettings::initSettings()
};
mSettings[ sTrustLayerMetadata.envVar ] = sTrustLayerMetadata;

// don't load layouts
const Setting sDontLoadLayouts = { QgsServerSettingsEnv::QGIS_SERVER_DONT_LOAD_LAYOUTS,
QgsServerSettingsEnv::DEFAULT_VALUE,
QStringLiteral( "Don't load layouts" ),
QString(),
QVariant::Bool,
QVariant( false ),
QVariant()
};
mSettings[ sDontLoadLayouts.envVar ] = sDontLoadLayouts;

// show group separator
const Setting sShowGroupSeparator = { QgsServerSettingsEnv::QGIS_SERVER_SHOW_GROUP_SEPARATOR,
QgsServerSettingsEnv::DEFAULT_VALUE,
Expand Down Expand Up @@ -450,3 +461,8 @@ bool QgsServerSettings::trustLayerMetadata() const
{
return value( QgsServerSettingsEnv::QGIS_SERVER_TRUST_LAYER_METADATA ).toBool();
}

bool QgsServerSettings::dontLoadLayouts() const
{
return value( QgsServerSettingsEnv::QGIS_SERVER_DONT_LOAD_LAYOUTS ).toBool();
}
13 changes: 12 additions & 1 deletion src/server/qgsserversettings.h
Expand Up @@ -68,7 +68,8 @@ class SERVER_EXPORT QgsServerSettingsEnv : public QObject
QGIS_SERVER_WMS_MAX_WIDTH, //!< Maximum width for a WMS request. The most conservative between this and the project one is used (since QGIS 3.6.2)
QGIS_SERVER_API_RESOURCES_DIRECTORY, //!< Base directory where HTML templates and static assets (e.g. images, js and css files) are searched for (since QGIS 3.10).
QGIS_SERVER_API_WFS3_MAX_LIMIT, //!< Maximum value for "limit" in a features request, defaults to 10000 (since QGIS 3.10).
QGIS_SERVER_TRUST_LAYER_METADATA //!< Trust layer metadata (since QGIS 3.16).
QGIS_SERVER_TRUST_LAYER_METADATA, //!< Trust layer metadata (since QGIS 3.16).
QGIS_SERVER_DONT_LOAD_LAYOUTS //!< Don't load layouts, this deactivated GetPrint capabilities (since QGIS 3.16).
};
Q_ENUM( EnvVar )
};
Expand Down Expand Up @@ -245,6 +246,16 @@ class SERVER_EXPORT QgsServerSettings
*/
bool trustLayerMetadata() const;

/**
* Returns TRUE if the reading flag don't load layouts is activated.
*
* The default value is FALSE, this value can be changed by setting the environment
* variable QGIS_SERVER_DONT_LOAD_LAYOUTS.
*
* \since QGIS 3.16
*/
bool dontLoadLayouts() const;

private:
void initSettings();
QVariant value( QgsServerSettingsEnv::EnvVar envVar ) const;
Expand Down

0 comments on commit fa7da5a

Please sign in to comment.