Skip to content

Commit 410a278

Browse files
author
Jean-François Morin
committed
Resolved conflicts
2 parents 26caab1 + 0d63a85 commit 410a278

67 files changed

Lines changed: 1528 additions & 200 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { URLCombiner } from '../../core/url-combiner/url-combiner';
2-
import { getNotificationsModuleRoute } from '../admin-routing-paths';
31

42
export const QUALITY_ASSURANCE_EDIT_PATH = 'quality-assurance';
53
export const PUBLICATION_CLAIMS_PATH = 'publication-claim';
64

7-
export function getQualityAssuranceRoute(id: string) {
8-
return new URLCombiner(getNotificationsModuleRoute(), QUALITY_ASSURANCE_EDIT_PATH, id).toString();
5+
export function getQualityAssuranceEditRoute() {
6+
return `/${QUALITY_ASSURANCE_EDIT_PATH}`;
97
}

src/app/admin/admin-notifications/admin-notifications-routing.module.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import { AdminQualityAssuranceTopicsPageResolver } from './admin-quality-assuran
1414
import { AdminQualityAssuranceEventsPageResolver } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.resolver';
1515
import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component';
1616
import { AdminQualityAssuranceSourcePageResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service';
17+
import {
18+
SiteAdministratorGuard
19+
} from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
1720
import { QualityAssuranceBreadcrumbResolver } from '../../core/breadcrumbs/quality-assurance-breadcrumb.resolver';
1821
import { QualityAssuranceBreadcrumbService } from '../../core/breadcrumbs/quality-assurance-breadcrumb.service';
1922
import {
@@ -55,6 +58,21 @@ import {
5558
},
5659
{
5760
canActivate: [ AuthenticatedGuard ],
61+
path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/target/:targetId`,
62+
component: AdminQualityAssuranceTopicsPageComponent,
63+
pathMatch: 'full',
64+
resolve: {
65+
breadcrumb: I18nBreadcrumbResolver,
66+
openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver
67+
},
68+
data: {
69+
title: 'admin.quality-assurance.page.title',
70+
breadcrumbKey: 'admin.quality-assurance',
71+
showBreadcrumbsFluid: false
72+
}
73+
},
74+
{
75+
canActivate: [ SiteAdministratorGuard ],
5876
path: `${QUALITY_ASSURANCE_EDIT_PATH}`,
5977
component: AdminQualityAssuranceSourcePageComponent,
6078
pathMatch: 'full',

src/app/admin/admin-routing-paths.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { URLCombiner } from '../core/url-combiner/url-combiner';
22
import { getAdminModuleRoute } from '../app-routing-paths';
3+
import { getQualityAssuranceEditRoute } from './admin-notifications/admin-notifications-routing-paths';
34

45
export const REGISTRIES_MODULE_PATH = 'registries';
56
export const NOTIFICATIONS_MODULE_PATH = 'notifications';
7+
export const REPORTS_MODULE_PATH = 'reports';
68

79
export function getRegistriesModuleRoute() {
810
return new URLCombiner(getAdminModuleRoute(), REGISTRIES_MODULE_PATH).toString();
@@ -12,7 +14,9 @@ export function getNotificationsModuleRoute() {
1214
return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString();
1315
}
1416

15-
export const REPORTS_MODULE_PATH = 'reports';
17+
export function getNotificatioQualityAssuranceRoute() {
18+
return new URLCombiner(`/${NOTIFICATIONS_MODULE_PATH}`, getQualityAssuranceEditRoute()).toString();
19+
}
1620

1721
export function getReportsModuleRoute() {
1822
return new URLCombiner(getAdminModuleRoute(), REPORTS_MODULE_PATH).toString();

src/app/admin/admin-routing.module.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,20 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso
66
import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component';
77
import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service';
88
import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component';
9-
import { REGISTRIES_MODULE_PATH, NOTIFICATIONS_MODULE_PATH, REPORTS_MODULE_PATH } from './admin-routing-paths';
9+
import { REGISTRIES_MODULE_PATH, REPORTS_MODULE_PATH } from './admin-routing-paths';
1010
import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component';
11+
import {
12+
SiteAdministratorGuard
13+
} from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
1114

1215
@NgModule({
1316
imports: [
1417
RouterModule.forChild([
15-
{
16-
path: NOTIFICATIONS_MODULE_PATH,
17-
loadChildren: () => import('./admin-notifications/admin-notifications.module')
18-
.then((m) => m.AdminNotificationsModule),
19-
},
2018
{
2119
path: REGISTRIES_MODULE_PATH,
2220
loadChildren: () => import('./admin-registries/admin-registries.module')
2321
.then((m) => m.AdminRegistriesModule),
22+
canActivate: [SiteAdministratorGuard]
2423
},
2524
{
2625
path: REPORTS_MODULE_PATH,
@@ -31,37 +30,43 @@ import { BatchImportPageComponent } from './admin-import-batch-page/batch-import
3130
path: 'search',
3231
resolve: { breadcrumb: I18nBreadcrumbResolver },
3332
component: AdminSearchPageComponent,
34-
data: { title: 'admin.search.title', breadcrumbKey: 'admin.search' }
33+
data: { title: 'admin.search.title', breadcrumbKey: 'admin.search' },
34+
canActivate: [SiteAdministratorGuard]
3535
},
3636
{
3737
path: 'workflow',
3838
resolve: { breadcrumb: I18nBreadcrumbResolver },
3939
component: AdminWorkflowPageComponent,
40-
data: { title: 'admin.workflow.title', breadcrumbKey: 'admin.workflow' }
40+
data: { title: 'admin.workflow.title', breadcrumbKey: 'admin.workflow' },
41+
canActivate: [SiteAdministratorGuard]
4142
},
4243
{
4344
path: 'curation-tasks',
4445
resolve: { breadcrumb: I18nBreadcrumbResolver },
4546
component: AdminCurationTasksComponent,
46-
data: { title: 'admin.curation-tasks.title', breadcrumbKey: 'admin.curation-tasks' }
47+
data: { title: 'admin.curation-tasks.title', breadcrumbKey: 'admin.curation-tasks' },
48+
canActivate: [SiteAdministratorGuard]
4749
},
4850
{
4951
path: 'metadata-import',
5052
resolve: { breadcrumb: I18nBreadcrumbResolver },
5153
component: MetadataImportPageComponent,
52-
data: { title: 'admin.metadata-import.title', breadcrumbKey: 'admin.metadata-import' }
54+
data: { title: 'admin.metadata-import.title', breadcrumbKey: 'admin.metadata-import' },
55+
canActivate: [SiteAdministratorGuard]
5356
},
5457
{
5558
path: 'batch-import',
5659
resolve: { breadcrumb: I18nBreadcrumbResolver },
5760
component: BatchImportPageComponent,
58-
data: { title: 'admin.batch-import.title', breadcrumbKey: 'admin.batch-import' }
61+
data: { title: 'admin.batch-import.title', breadcrumbKey: 'admin.batch-import' },
62+
canActivate: [SiteAdministratorGuard]
5963
},
6064
{
6165
path: 'system-wide-alert',
6266
resolve: { breadcrumb: I18nBreadcrumbResolver },
6367
loadChildren: () => import('../system-wide-alert/system-wide-alert.module').then((m) => m.SystemWideAlertModule),
64-
data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'}
68+
data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'},
69+
canActivate: [SiteAdministratorGuard]
6570
},
6671
])
6772
],

src/app/app-routing-paths.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,10 @@ export const SUBSCRIPTIONS_MODULE_PATH = 'subscriptions';
132132
export function getSubscriptionsModuleRoute() {
133133
return `/${SUBSCRIPTIONS_MODULE_PATH}`;
134134
}
135+
136+
export const EDIT_ITEM_PATH = 'edit-items';
137+
export function getEditItemPageRoute() {
138+
return `/${EDIT_ITEM_PATH}`;
139+
}
140+
export const CORRECTION_TYPE_PATH = 'corrections';
141+

src/app/app-routing.module.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@ import { NoPreloading, RouterModule } from '@angular/router';
33
import { AuthBlockingGuard } from './core/auth/auth-blocking.guard';
44

55
import { AuthenticatedGuard } from './core/auth/authenticated.guard';
6-
import {
7-
SiteAdministratorGuard
8-
} from './core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
96
import {
107
ACCESS_CONTROL_MODULE_PATH,
118
ADMIN_MODULE_PATH,
@@ -41,6 +38,7 @@ import { ServerCheckGuard } from './core/server-check/server-check.guard';
4138
import { SUGGESTION_MODULE_PATH } from './suggestions-page/suggestions-page-routing-paths';
4239
import { MenuResolver } from './menu.resolver';
4340
import { ThemedPageErrorComponent } from './page-error/themed-page-error.component';
41+
import { NOTIFICATIONS_MODULE_PATH } from './admin/admin-routing-paths';
4442
import { ForgotPasswordCheckGuard } from './core/rest-property/forgot-password-check-guard.guard';
4543

4644
@NgModule({
@@ -159,7 +157,13 @@ import { ForgotPasswordCheckGuard } from './core/rest-property/forgot-password-c
159157
path: ADMIN_MODULE_PATH,
160158
loadChildren: () => import('./admin/admin.module')
161159
.then((m) => m.AdminModule),
162-
canActivate: [SiteAdministratorGuard, EndUserAgreementCurrentUserGuard]
160+
canActivate: [EndUserAgreementCurrentUserGuard]
161+
},
162+
{
163+
path: NOTIFICATIONS_MODULE_PATH,
164+
loadChildren: () => import('./admin/admin-notifications/admin-notifications.module')
165+
.then((m) => m.AdminNotificationsModule),
166+
canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard]
163167
},
164168
{
165169
path: 'login',
@@ -247,7 +251,7 @@ import { ForgotPasswordCheckGuard } from './core/rest-property/forgot-password-c
247251
.then((m) => m.SubscriptionsPageRoutingModule),
248252
canActivate: [AuthenticatedGuard]
249253
},
250-
{ path: '**', pathMatch: 'full', component: ThemedPageNotFoundComponent },
254+
{ path: '**', pathMatch: 'full', component: ThemedPageNotFoundComponent }
251255
]
252256
}
253257
], {

src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderSer
3333
*/
3434
getBreadcrumbs(key: string, url: string): Observable<Breadcrumb[]> {
3535
const sourceId = key.split(':')[0];
36-
const topicId = key.split(':')[1];
36+
const topicId = key.split(':')[2];
3737

3838
if (topicId) {
3939
return this.qualityAssuranceService.getTopic(topicId).pipe(
4040
getFirstCompletedRemoteData(),
4141
map((topic) => {
4242
return [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
4343
new Breadcrumb(sourceId, `${url}${sourceId}`),
44-
new Breadcrumb(topicId, undefined)];
44+
new Breadcrumb(topicId.replace(/[!:]/g, '/'), undefined)];
4545
})
4646
);
4747
} else {

src/app/core/core.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ import { FlatBrowseDefinition } from './shared/flat-browse-definition.model';
185185
import { ValueListBrowseDefinition } from './shared/value-list-browse-definition.model';
186186
import { NonHierarchicalBrowseDefinition } from './shared/non-hierarchical-browse-definition';
187187
import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model';
188+
import { CorrectionTypeDataService } from './submission/correctiontype-data.service';
188189
import { SuggestionTarget } from './suggestion-notifications/models/suggestion-target.model';
189190
import { SuggestionSource } from './suggestion-notifications/models/suggestion-source.model';
190191

@@ -309,7 +310,8 @@ const PROVIDERS = [
309310
OrcidAuthService,
310311
OrcidQueueDataService,
311312
OrcidHistoryDataService,
312-
SupervisionOrderDataService
313+
SupervisionOrderDataService,
314+
CorrectionTypeDataService
313315
];
314316

315317
/**

src/app/core/notifications/qa/events/quality-assurance-event-data.service.ts

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Injectable } from '@angular/core';
22

33
import { Observable } from 'rxjs';
4-
import { find, take } from 'rxjs/operators';
4+
import { find, switchMap, take } from 'rxjs/operators';
55
import { ReplaceOperation } from 'fast-json-patch';
66

77
import { HALEndpointService } from '../../../shared/hal-endpoint.service';
@@ -25,6 +25,11 @@ import { SearchData, SearchDataImpl } from '../../../data/base/search-data';
2525
import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service';
2626
import { hasValue } from '../../../../shared/empty.util';
2727
import { DeleteByIDRequest, PostRequest } from '../../../data/request.models';
28+
import { HttpHeaders, HttpParams } from '@angular/common/http';
29+
import { HttpOptions } from '../../../dspace-rest/dspace-rest.service';
30+
import {
31+
QualityAssuranceEventData
32+
} from '../../../../notifications/qa/project-entry-import-modal/project-entry-import-modal.component';
2833

2934
/**
3035
* The service handling all Quality Assurance topic REST requests.
@@ -84,6 +89,16 @@ export class QualityAssuranceEventDataService extends IdentifiableDataService<Qu
8489
return this.searchData.searchBy('findByTopic', options, true, true, ...linksToFollow);
8590
}
8691

92+
/**
93+
* Service for retrieving Quality Assurance events by topic and target.
94+
* @param options (Optional) The search options to use when retrieving the events.
95+
* @param linksToFollow (Optional) The links to follow when retrieving the events.
96+
* @returns An observable of the remote data containing the paginated list of Quality Assurance events.
97+
*/
98+
public searchEventsByTopic(options: FindListOptions = {}, ...linksToFollow: FollowLinkConfig<QualityAssuranceEventObject>[]): Observable<RemoteData<PaginatedList<QualityAssuranceEventObject>>> {
99+
return this.searchData.searchBy('findByTopic', options, true, true, ...linksToFollow);
100+
}
101+
87102
/**
88103
* Clear findByTopic requests from cache
89104
*/
@@ -200,4 +215,38 @@ export class QualityAssuranceEventDataService extends IdentifiableDataService<Qu
200215

201216
return this.rdbService.buildFromRequestUUID<QualityAssuranceEventObject>(requestId);
202217
}
218+
219+
/**
220+
* Perform a post on an endpoint related to correction type
221+
* @param data the data to post
222+
* @returns the RestResponse as an Observable
223+
*/
224+
postData(target: string, correctionType: string, related: string, reason: string): Observable<RemoteData<QualityAssuranceEventObject>> {
225+
const requestId = this.requestService.generateRequestId();
226+
const href$ = this.getBrowseEndpoint();
227+
228+
return href$.pipe(
229+
switchMap((href: string) => {
230+
const options: HttpOptions = Object.create({});
231+
let headers = new HttpHeaders();
232+
headers = headers.append('Content-Type', 'application/json');
233+
options.headers = headers;
234+
let params = new HttpParams();
235+
params = params.append('target', target)
236+
.append('correctionType', correctionType);
237+
options.params = params;
238+
const request = new PostRequest(requestId, href, {'reason': reason} , options);
239+
if (hasValue(this.responseMsToLive)) {
240+
request.responseMsToLive = this.responseMsToLive;
241+
}
242+
this.requestService.send(request);
243+
return this.rdbService.buildFromRequestUUID<QualityAssuranceEventObject>(requestId);
244+
})
245+
);
246+
}
247+
248+
public deleteQAEvent(qaEvent: QualityAssuranceEventData): Observable<RemoteData<NoContent>> {
249+
return this.deleteData.delete(qaEvent.id);
250+
}
251+
203252
}

src/app/core/notifications/qa/models/quality-assurance-event.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export interface SourceQualityAssuranceEventMessageObject {
2828
*/
2929
type: string;
3030

31+
reason: string;
32+
3133
/**
3234
* The value suggested by Notifications
3335
*/

0 commit comments

Comments
 (0)