Skip to content

Commit 7a01cc6

Browse files
committed
updating role every time we open a project + visibility condition on editing buttons
1 parent 5da5eca commit 7a01cc6

File tree

9 files changed

+26
-15
lines changed

9 files changed

+26
-15
lines changed

app/activeproject.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,14 @@ QString ActiveProject::projectFullName() const
9797

9898
bool ActiveProject::load( const QString &filePath )
9999
{
100-
updateProjectMetadata();
101100
return forceLoad( filePath, false );
102101
}
103102

104103
bool ActiveProject::forceLoad( const QString &filePath, bool force )
105104
{
105+
// update user's role each time a project is opened, following #3174
106+
updateProjectMetadata();
107+
106108
CoreUtils::log( QStringLiteral( "Project loading" ), filePath + " " + ( force ? "true" : "false" ) );
107109

108110
// clear autosync
@@ -567,6 +569,7 @@ bool ActiveProject::updateProjectMetadata()
567569
QNetworkReply *reply = mMerginApi->getProjectInfo( projectFullName() );
568570
if ( !reply )
569571
{
572+
restoreCachedRole();
570573
return false;
571574
}
572575

@@ -589,24 +592,24 @@ void ActiveProject::updateProjectMetadataReplyFinished()
589592
QByteArray data = r->readAll();
590593

591594
MerginProjectMetadata serverProject = MerginProjectMetadata::fromJson( data );
592-
593595
QString role = serverProject.role;
594596
setProjectRole( role );
595597
}
596598
else
597599
{
598-
QString serverMsg = mMerginApi->extractServerErrorMsg( r->readAll() );
599-
600-
QString projectDir = mQgsProject->absolutePath();
601-
MerginProjectMetadata cachedProjectMetadata = MerginProjectMetadata::fromCachedJson( mLocalProject.projectDir + "/" + mMerginApi->sMetadataFile );
602-
603-
QString role = cachedProjectMetadata.role;
604-
setProjectRole( role );
600+
restoreCachedRole();
605601
}
606602

607603
r->deleteLater();
608604
}
609605

606+
void ActiveProject::restoreCachedRole()
607+
{
608+
MerginProjectMetadata cachedProjectMetadata = MerginProjectMetadata::fromCachedJson( mLocalProject.projectDir + "/" + mMerginApi->sMetadataFile );
609+
QString role = cachedProjectMetadata.role;
610+
setProjectRole( role );
611+
}
612+
610613
QString ActiveProject::projectRole() const
611614
{
612615
return mProjectRole;

app/activeproject.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,14 @@ class ActiveProject: public QObject
125125
* Returns role/permission level of current user for this project
126126
*/
127127
Q_INVOKABLE QString projectRole() const;
128+
128129
void setProjectRole( const QString &role );
129130

131+
/**
132+
* Restores cached project role in metadata
133+
*/
134+
void restoreCachedRole();
135+
130136
/**
131137
* Creates a network request to fetch latest project information and define user role in this project
132138
*/

app/qml/form/MMFormPage.qml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ Page {
201201

202202
footer: MMComponents.MMToolbar {
203203

204-
visible: !root.layerIsReadOnly
204+
visible: !root.layerIsReadOnly && __activeProject.projectRole !== "reader"
205205

206206
ObjectModel {
207207
id: readStateButtons
@@ -231,7 +231,7 @@ Page {
231231
id: editGeometry
232232
text: qsTr( "Edit geometry" )
233233
iconSource: __style.editIcon
234-
visible: root.layerIsSpatial
234+
visible: root.layerIsSpatial && __activeProject.projectRole !== "reader"
235235
onClicked: root.editGeometryRequested( root.controller.featureLayerPair )
236236
}
237237
}

app/qml/form/MMPreviewDrawer.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ Item {
295295
property bool isHTMLType: root.controller.type === MM.AttributePreviewController.HTML
296296
property bool isEmptyType: root.controller.type === MM.AttributePreviewController.Empty
297297

298-
property bool showEditButton: !root.layerIsReadOnly
298+
property bool showEditButton: !root.layerIsReadOnly && __activeProject.projectRole !== "reader"
299299
property bool showStakeoutButton: __inputUtils.isPointLayerFeature( controller.featureLayerPair )
300300
property bool showButtons: showEditButton || showStakeoutButton
301301

app/qml/form/components/MMFeaturesListPageDrawer.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ Drawer {
103103
}
104104

105105
text: qsTr( "Add feature" )
106+
visible: __activeProject.projectRole !== "reader"
106107

107108
onClicked: root.buttonClicked()
108109
}

app/qml/layers/MMFeaturesListPage.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ MMComponents.MMPage {
8989
anchors.bottom: parent.bottom
9090
anchors.bottomMargin: root.hasToolbar ? __style.margin20 : ( __style.safeAreaBottom + __style.margin8 )
9191

92-
visible: __inputUtils.isNoGeometryLayer( root.selectedLayer ) && !root.layerIsReadOnly
92+
visible: __inputUtils.isNoGeometryLayer( root.selectedLayer ) && !root.layerIsReadOnly && __activeProject.projectRole !== "reader"
9393

9494
text: qsTr("Add feature")
9595

app/qml/project/MMProjectController.qml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ Item {
5050
{
5151
// just hide the panel - project already loaded
5252
hidePanel()
53+
// update user's role in project ( in case user has changed )
54+
__activeProject.updateProjectMetadata()
5355
}
5456
else
5557
{

core/merginapi.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,6 @@ bool MerginApi::pullProject( const QString &projectNamespace, const QString &pro
720720

721721
CoreUtils::log( "pull " + projectFullName, "### Starting ###" );
722722

723-
qDebug() << "HERE projectNamespace AND projectName : " << projectNamespace << " " << projectName;
724723
QNetworkReply *reply = getProjectInfo( projectFullName, withAuth );
725724
if ( reply )
726725
{

core/merginprojectmetadata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ MerginProjectMetadata MerginProjectMetadata::fromJson( const QByteArray &data )
100100
project.name = docObj.value( QStringLiteral( "name" ) ).toString();
101101
project.projectNamespace = docObj.value( QStringLiteral( "namespace" ) ).toString();
102102
project.role = docObj.value( QStringLiteral( "role" ) ).toString();
103-
qDebug() << "MerginProjectMetadata MerginProjectMetadata::fromJson( const QByteArray &data ) called, getting role: " << project.role;
103+
104104
QJsonValue access = docObj.value( QStringLiteral( "access" ) );
105105
if ( access.isObject() )
106106
{

0 commit comments

Comments
 (0)