Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Followup PR #41823
  • Loading branch information
elpaso authored and nyalldawson committed Mar 7, 2021
1 parent 1a784c1 commit 75116a7
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 20 deletions.
41 changes: 22 additions & 19 deletions src/core/layout/qgslayoutitemattributetable.cpp
Expand Up @@ -709,35 +709,38 @@ QVariant QgsLayoutItemAttributeTable::replaceWrapChar( const QVariant &variant )
#ifdef HAVE_SERVER_PYTHON_PLUGINS
QgsLayoutTableColumns QgsLayoutItemAttributeTable::filteredColumns()
{
QgsLayoutTableColumns allowedColumns { mColumns };

QgsVectorLayer *source { sourceLayer() };
QgsLayoutTableColumns allowedColumns { mColumns };

if ( ! source )
// Filter columns
if ( mLayout->renderContext().featureFilterProvider() )
{
return allowedColumns;
}

QHash<const QString, QSet<QString>> columnAttributesMap;
QSet<QString> allowedAttributes;
QgsVectorLayer *source { sourceLayer() };

for ( const auto &c : qgis::as_const( allowedColumns ) )
{
if ( ! c.attribute().isEmpty() && ! columnAttributesMap.contains( c.attribute() ) )
if ( ! source )
{
return allowedColumns;
}

QHash<const QString, QSet<QString>> columnAttributesMap;
QSet<QString> allowedAttributes;

for ( const auto &c : qgis::as_const( allowedColumns ) )
{
columnAttributesMap[ c.attribute() ] = QSet<QString>();
const QgsExpression columnExp { c.attribute() };
const auto constRefs { columnExp.findNodes<QgsExpressionNodeColumnRef>() };
for ( const auto &cref : constRefs )
if ( ! c.attribute().isEmpty() && ! columnAttributesMap.contains( c.attribute() ) )
{
columnAttributesMap[ c.attribute() ].insert( cref->name() );
allowedAttributes.insert( cref->name() );
columnAttributesMap[ c.attribute() ] = QSet<QString>();
const QgsExpression columnExp { c.attribute() };
const auto constRefs { columnExp.findNodes<QgsExpressionNodeColumnRef>() };
for ( const auto &cref : constRefs )
{
columnAttributesMap[ c.attribute() ].insert( cref->name() );
allowedAttributes.insert( cref->name() );
}
}
}
}

if ( mLayout->renderContext().featureFilterProvider() )
{
const QStringList filteredAttributes { layout()->renderContext().featureFilterProvider()->layerAttributes( source, allowedAttributes.values() ) };
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
const QSet<QString> filteredAttributesSet( filteredAttributes.constBegin(), filteredAttributes.constEnd() );
Expand Down
2 changes: 1 addition & 1 deletion src/core/layout/qgslayoutitemattributetable.h
Expand Up @@ -393,7 +393,7 @@ class CORE_EXPORT QgsLayoutItemAttributeTable: public QgsLayoutTable
#ifdef HAVE_SERVER_PYTHON_PLUGINS

/**
* Returns the list of visible columns filtered by the access control filter rules.
* Returns the list of visible columns filtered by feature filter provider.
*/
QgsLayoutTableColumns filteredColumns( );
#endif
Expand Down

0 comments on commit 75116a7

Please sign in to comment.