diff --git a/src/app/core/shared/version.model.ts b/src/app/core/shared/version.model.ts index 48d6eb0b68..7207637a21 100644 --- a/src/app/core/shared/version.model.ts +++ b/src/app/core/shared/version.model.ts @@ -47,6 +47,12 @@ export class Version extends DSpaceObject { @autoserialize summary: string; + /** + * The name of the submitter of this version + */ + @autoserialize + submitterName: string; + /** * The Date this version was created */ diff --git a/src/app/shared/item/item-versions/item-versions.component.html b/src/app/shared/item/item-versions/item-versions.component.html index d8850bc544..432b10e8f1 100644 --- a/src/app/shared/item/item-versions/item-versions.component.html +++ b/src/app/shared/item/item-versions/item-versions.component.html @@ -17,7 +17,7 @@ {{"item.version.history.table.version" | translate}} - {{"item.version.history.table.editor" | translate}} + {{"item.version.history.table.editor" | translate}} {{"item.version.history.table.date" | translate}} {{"item.version.history.table.summary" | translate}} @@ -87,10 +87,8 @@ - - - {{eperson?.name}} - + + {{version?.submitterName}} {{version?.created | date : 'yyyy-MM-dd HH:mm:ss'}} diff --git a/src/app/shared/item/item-versions/item-versions.component.spec.ts b/src/app/shared/item/item-versions/item-versions.component.spec.ts index fff0744aba..8bb5554b77 100644 --- a/src/app/shared/item/item-versions/item-versions.component.spec.ts +++ b/src/app/shared/item/item-versions/item-versions.component.spec.ts @@ -24,6 +24,7 @@ import { AuthorizationDataService } from '../../../core/data/feature-authorizati import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem-data.service'; import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; +import { ConfigurationDataService } from '../../../core/data/configuration-data.service'; describe('ItemVersionsComponent', () => { let component: ItemVersionsComponent; @@ -34,6 +35,7 @@ describe('ItemVersionsComponent', () => { let workspaceItemDataService: WorkspaceitemDataService; let workflowItemDataService: WorkflowItemDataService; let versionService: VersionDataService; + let configurationService: ConfigurationDataService; const versionHistory = Object.assign(new VersionHistory(), { id: '1', @@ -109,6 +111,10 @@ describe('ItemVersionsComponent', () => { findById: EMPTY, }); + const configurationServiceSpy = jasmine.createSpyObj('configurationService', { + findByPropertyName: of(true), + }); + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ @@ -125,6 +131,7 @@ describe('ItemVersionsComponent', () => { {provide: VersionDataService, useValue: versionServiceSpy}, {provide: WorkspaceitemDataService, useValue: workspaceItemDataServiceSpy}, {provide: WorkflowItemDataService, useValue: workflowItemDataServiceSpy}, + {provide: ConfigurationDataService, useValue: configurationServiceSpy}, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); @@ -135,6 +142,7 @@ describe('ItemVersionsComponent', () => { workspaceItemDataService = TestBed.inject(WorkspaceitemDataService); workflowItemDataService = TestBed.inject(WorkflowItemDataService); versionService = TestBed.inject(VersionDataService); + configurationService = TestBed.inject(ConfigurationDataService); })); diff --git a/src/app/shared/item/item-versions/item-versions.component.ts b/src/app/shared/item/item-versions/item-versions.component.ts index e7d65919d6..6796dfd1ad 100644 --- a/src/app/shared/item/item-versions/item-versions.component.ts +++ b/src/app/shared/item/item-versions/item-versions.component.ts @@ -5,7 +5,6 @@ import { RemoteData } from '../../../core/data/remote-data'; import { BehaviorSubject, combineLatest, - combineLatest as observableCombineLatest, Observable, of, Subscription, @@ -48,6 +47,7 @@ import { ItemVersionsSharedService } from './item-versions-shared.service'; import { WorkspaceItem } from '../../../core/submission/models/workspaceitem.model'; import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem-data.service'; import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; +import { ConfigurationDataService } from '../../../core/data/configuration-data.service'; @Component({ selector: 'ds-item-versions', @@ -180,6 +180,7 @@ export class ItemVersionsComponent implements OnInit { private authorizationService: AuthorizationDataService, private workspaceItemDataService: WorkspaceitemDataService, private workflowItemDataService: WorkflowItemDataService, + private configurationService: ConfigurationDataService, ) { } @@ -375,6 +376,36 @@ export class ItemVersionsComponent implements OnInit { return this.authorizationService.isAuthorized(FeatureID.CanEditVersion, version.self); } + /** + * Show submitter in version history table + */ + showSubmitter() { + + const includeSubmitter$ = this.configurationService.findByPropertyName('versioning.item.history.include.submitter').pipe( + getFirstSucceededRemoteDataPayload(), + map((configurationProperty) => configurationProperty.values[0]), + startWith(false), + ); + + const isAdmin$ = combineLatest([ + this.authorizationService.isAuthorized(FeatureID.IsCollectionAdmin), + this.authorizationService.isAuthorized(FeatureID.IsCommunityAdmin), + this.authorizationService.isAuthorized(FeatureID.AdministratorOf), + ]).pipe( + map(([isCollectionAdmin, isCommunityAdmin, isSiteAdmin]) => { + return isCollectionAdmin || isCommunityAdmin || isSiteAdmin; + }), + take(1), + ); + + return combineLatest([includeSubmitter$, isAdmin$]).pipe( + map(([includeSubmitter, isAdmin]) => { + return includeSubmitter && isAdmin; + }) + ); + + } + /** * Check if the current user can delete the version * @param version @@ -389,7 +420,7 @@ export class ItemVersionsComponent implements OnInit { */ getAllVersions(versionHistory$: Observable): void { const currentPagination = this.paginationService.getCurrentPagination(this.options.id, this.options); - observableCombineLatest([versionHistory$, currentPagination]).pipe( + combineLatest([versionHistory$, currentPagination]).pipe( switchMap(([versionHistory, options]: [VersionHistory, PaginationComponentOptions]) => { return this.versionHistoryService.getVersions(versionHistory.id, new PaginatedSearchOptions({pagination: Object.assign({}, options, {currentPage: options.currentPage})}), @@ -486,7 +517,7 @@ export class ItemVersionsComponent implements OnInit { ); this.itemPageRoutes$ = this.versionsRD$.pipe( getAllSucceededRemoteDataPayload(), - switchMap((versions) => observableCombineLatest(...versions.page.map((version) => version.item.pipe(getAllSucceededRemoteDataPayload())))), + switchMap((versions) => combineLatest(versions.page.map((version) => version.item.pipe(getAllSucceededRemoteDataPayload())))), map((versions) => { const itemPageRoutes = {}; versions.forEach((item) => itemPageRoutes[item.uuid] = getItemPageRoute(item));