mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
Merge remote-tracking branch 'origin/main' into CST-6153
This commit is contained in:
@@ -15,6 +15,7 @@ import { By } from '@angular/platform-browser';
|
|||||||
import { ConfigurationDataService } from '../core/data/configuration-data.service';
|
import { ConfigurationDataService } from '../core/data/configuration-data.service';
|
||||||
import { ConfigurationProperty } from '../core/shared/configuration-property.model';
|
import { ConfigurationProperty } from '../core/shared/configuration-property.model';
|
||||||
import { getProcessDetailRoute } from '../process-page/process-page-routing.paths';
|
import { getProcessDetailRoute } from '../process-page/process-page-routing.paths';
|
||||||
|
import { HandleService } from '../shared/handle.service';
|
||||||
|
|
||||||
describe('CurationFormComponent', () => {
|
describe('CurationFormComponent', () => {
|
||||||
let comp: CurationFormComponent;
|
let comp: CurationFormComponent;
|
||||||
@@ -23,6 +24,7 @@ describe('CurationFormComponent', () => {
|
|||||||
let scriptDataService: ScriptDataService;
|
let scriptDataService: ScriptDataService;
|
||||||
let processDataService: ProcessDataService;
|
let processDataService: ProcessDataService;
|
||||||
let configurationDataService: ConfigurationDataService;
|
let configurationDataService: ConfigurationDataService;
|
||||||
|
let handleService: HandleService;
|
||||||
let notificationsService;
|
let notificationsService;
|
||||||
let router;
|
let router;
|
||||||
|
|
||||||
@@ -51,6 +53,10 @@ describe('CurationFormComponent', () => {
|
|||||||
}))
|
}))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
handleService = {
|
||||||
|
normalizeHandle: (a) => a
|
||||||
|
} as any;
|
||||||
|
|
||||||
notificationsService = new NotificationsServiceStub();
|
notificationsService = new NotificationsServiceStub();
|
||||||
router = new RouterStub();
|
router = new RouterStub();
|
||||||
|
|
||||||
@@ -58,11 +64,12 @@ describe('CurationFormComponent', () => {
|
|||||||
imports: [TranslateModule.forRoot(), FormsModule, ReactiveFormsModule],
|
imports: [TranslateModule.forRoot(), FormsModule, ReactiveFormsModule],
|
||||||
declarations: [CurationFormComponent],
|
declarations: [CurationFormComponent],
|
||||||
providers: [
|
providers: [
|
||||||
{provide: ScriptDataService, useValue: scriptDataService},
|
{ provide: ScriptDataService, useValue: scriptDataService },
|
||||||
{provide: ProcessDataService, useValue: processDataService},
|
{ provide: ProcessDataService, useValue: processDataService },
|
||||||
{provide: NotificationsService, useValue: notificationsService},
|
{ provide: NotificationsService, useValue: notificationsService },
|
||||||
{provide: Router, useValue: router},
|
{ provide: HandleService, useValue: handleService },
|
||||||
{provide: ConfigurationDataService, useValue: configurationDataService},
|
{ provide: Router, useValue: router},
|
||||||
|
{ provide: ConfigurationDataService, useValue: configurationDataService },
|
||||||
],
|
],
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
@@ -143,4 +150,13 @@ describe('CurationFormComponent', () => {
|
|||||||
{name: '-i', value: 'all'},
|
{name: '-i', value: 'all'},
|
||||||
], []);
|
], []);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it(`should show an error notification and return when an invalid dsoHandle is provided`, () => {
|
||||||
|
comp.dsoHandle = 'test-handle';
|
||||||
|
spyOn(handleService, 'normalizeHandle').and.returnValue(null);
|
||||||
|
comp.submit();
|
||||||
|
|
||||||
|
expect(notificationsService.error).toHaveBeenCalled();
|
||||||
|
expect(scriptDataService.invoke).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -5,7 +5,7 @@ import { getFirstCompletedRemoteData } from '../core/shared/operators';
|
|||||||
import { find, map } from 'rxjs/operators';
|
import { find, map } from 'rxjs/operators';
|
||||||
import { NotificationsService } from '../shared/notifications/notifications.service';
|
import { NotificationsService } from '../shared/notifications/notifications.service';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { hasValue, isEmpty, isNotEmpty } from '../shared/empty.util';
|
import { hasValue, isEmpty, isNotEmpty, hasNoValue } from '../shared/empty.util';
|
||||||
import { RemoteData } from '../core/data/remote-data';
|
import { RemoteData } from '../core/data/remote-data';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { ProcessDataService } from '../core/data/processes/process-data.service';
|
import { ProcessDataService } from '../core/data/processes/process-data.service';
|
||||||
@@ -14,9 +14,9 @@ import { ConfigurationDataService } from '../core/data/configuration-data.servic
|
|||||||
import { ConfigurationProperty } from '../core/shared/configuration-property.model';
|
import { ConfigurationProperty } from '../core/shared/configuration-property.model';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { getProcessDetailRoute } from '../process-page/process-page-routing.paths';
|
import { getProcessDetailRoute } from '../process-page/process-page-routing.paths';
|
||||||
|
import { HandleService } from '../shared/handle.service';
|
||||||
|
|
||||||
export const CURATION_CFG = 'plugin.named.org.dspace.curate.CurationTask';
|
export const CURATION_CFG = 'plugin.named.org.dspace.curate.CurationTask';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component responsible for rendering the Curation Task form
|
* Component responsible for rendering the Curation Task form
|
||||||
*/
|
*/
|
||||||
@@ -39,6 +39,7 @@ export class CurationFormComponent implements OnInit {
|
|||||||
private processDataService: ProcessDataService,
|
private processDataService: ProcessDataService,
|
||||||
private notificationsService: NotificationsService,
|
private notificationsService: NotificationsService,
|
||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
|
private handleService: HandleService,
|
||||||
private router: Router
|
private router: Router
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
@@ -76,13 +77,19 @@ export class CurationFormComponent implements OnInit {
|
|||||||
const taskName = this.form.get('task').value;
|
const taskName = this.form.get('task').value;
|
||||||
let handle;
|
let handle;
|
||||||
if (this.hasHandleValue()) {
|
if (this.hasHandleValue()) {
|
||||||
handle = this.dsoHandle;
|
handle = this.handleService.normalizeHandle(this.dsoHandle);
|
||||||
|
if (isEmpty(handle)) {
|
||||||
|
this.notificationsService.error(this.translateService.get('curation.form.submit.error.head'),
|
||||||
|
this.translateService.get('curation.form.submit.error.invalid-handle'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
handle = this.form.get('handle').value;
|
handle = this.handleService.normalizeHandle(this.form.get('handle').value);
|
||||||
if (isEmpty(handle)) {
|
if (isEmpty(handle)) {
|
||||||
handle = 'all';
|
handle = 'all';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scriptDataService.invoke('curate', [
|
this.scriptDataService.invoke('curate', [
|
||||||
{ name: '-t', value: taskName },
|
{ name: '-t', value: taskName },
|
||||||
{ name: '-i', value: handle },
|
{ name: '-i', value: handle },
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<div *ngIf="content" class="content-with-optional-title mb-2">
|
<div *ngIf="content" class="content-with-optional-title mb-2">
|
||||||
<h2 class="d-inline-block h6" *ngIf="title">{{ title | translate }}</h2>
|
<h2 class="d-inline-block h6" *ngIf="title">{{ title | translate }}</h2>
|
||||||
<div class="d-inline-block "><a href="{{getHandle()}}">{{getHandle()}}</a></div>
|
<div class="d-inline-block px-2"><a href="{{getHandle()}}">{{getHandle()}}</a></div>
|
||||||
</div>
|
</div>
|
||||||
|
47
src/app/shared/handle.service.spec.ts
Normal file
47
src/app/shared/handle.service.spec.ts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import { HandleService } from './handle.service';
|
||||||
|
|
||||||
|
describe('HandleService', () => {
|
||||||
|
let service: HandleService;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
service = new HandleService();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe(`normalizeHandle`, () => {
|
||||||
|
it(`should simply return an already normalized handle`, () => {
|
||||||
|
let input, output;
|
||||||
|
|
||||||
|
input = '123456789/123456';
|
||||||
|
output = service.normalizeHandle(input);
|
||||||
|
expect(output).toEqual(input);
|
||||||
|
|
||||||
|
input = '12.3456.789/123456';
|
||||||
|
output = service.normalizeHandle(input);
|
||||||
|
expect(output).toEqual(input);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should normalize a handle url`, () => {
|
||||||
|
let input, output;
|
||||||
|
|
||||||
|
input = 'https://hdl.handle.net/handle/123456789/123456';
|
||||||
|
output = service.normalizeHandle(input);
|
||||||
|
expect(output).toEqual('123456789/123456');
|
||||||
|
|
||||||
|
input = 'https://rest.api/server/handle/123456789/123456';
|
||||||
|
output = service.normalizeHandle(input);
|
||||||
|
expect(output).toEqual('123456789/123456');
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should return null if the input doesn't contain a handle`, () => {
|
||||||
|
let input, output;
|
||||||
|
|
||||||
|
input = 'https://hdl.handle.net/handle/123456789';
|
||||||
|
output = service.normalizeHandle(input);
|
||||||
|
expect(output).toBeNull();
|
||||||
|
|
||||||
|
input = 'something completely different';
|
||||||
|
output = service.normalizeHandle(input);
|
||||||
|
expect(output).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
41
src/app/shared/handle.service.ts
Normal file
41
src/app/shared/handle.service.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { isNotEmpty, isEmpty } from './empty.util';
|
||||||
|
|
||||||
|
const PREFIX_REGEX = /handle\/([^\/]+\/[^\/]+)$/;
|
||||||
|
const NO_PREFIX_REGEX = /^([^\/]+\/[^\/]+)$/;
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class HandleService {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns a handle string into the default 123456789/12345 format
|
||||||
|
*
|
||||||
|
* @param handle the input handle
|
||||||
|
*
|
||||||
|
* normalizeHandle('123456789/123456') // '123456789/123456'
|
||||||
|
* normalizeHandle('12.3456.789/123456') // '12.3456.789/123456'
|
||||||
|
* normalizeHandle('https://hdl.handle.net/handle/123456789/123456') // '123456789/123456'
|
||||||
|
* normalizeHandle('https://rest.api/server/handle/123456789/123456') // '123456789/123456'
|
||||||
|
* normalizeHandle('https://rest.api/server/handle/123456789') // null
|
||||||
|
*/
|
||||||
|
normalizeHandle(handle: string): string {
|
||||||
|
let matches: string[];
|
||||||
|
if (isNotEmpty(handle)) {
|
||||||
|
matches = handle.match(PREFIX_REGEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty(matches) || matches.length < 2) {
|
||||||
|
matches = handle.match(NO_PREFIX_REGEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty(matches) || matches.length < 2) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return matches[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -16,11 +16,15 @@ import { SectionAccessesService } from './section-accesses.service';
|
|||||||
import { SectionFormOperationsService } from '../form/section-form-operations.service';
|
import { SectionFormOperationsService } from '../form/section-form-operations.service';
|
||||||
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
|
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
|
||||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||||
import { SubmissionJsonPatchOperationsService } from '../../../core/submission/submission-json-patch-operations.service';
|
import {
|
||||||
|
SubmissionJsonPatchOperationsService
|
||||||
|
} from '../../../core/submission/submission-json-patch-operations.service';
|
||||||
import { getSectionAccessesService } from '../../../shared/mocks/section-accesses.service.mock';
|
import { getSectionAccessesService } from '../../../shared/mocks/section-accesses.service.mock';
|
||||||
import { getMockFormOperationsService } from '../../../shared/mocks/form-operations-service.mock';
|
import { getMockFormOperationsService } from '../../../shared/mocks/form-operations-service.mock';
|
||||||
import { getMockTranslateService } from '../../../shared/mocks/translate.service.mock';
|
import { getMockTranslateService } from '../../../shared/mocks/translate.service.mock';
|
||||||
import { SubmissionJsonPatchOperationsServiceStub } from '../../../shared/testing/submission-json-patch-operations-service.stub';
|
import {
|
||||||
|
SubmissionJsonPatchOperationsServiceStub
|
||||||
|
} from '../../../shared/testing/submission-json-patch-operations-service.stub';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
|
||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
@@ -42,8 +46,6 @@ describe('SubmissionSectionAccessesComponent', () => {
|
|||||||
let fixture: ComponentFixture<SubmissionSectionAccessesComponent>;
|
let fixture: ComponentFixture<SubmissionSectionAccessesComponent>;
|
||||||
|
|
||||||
const sectionsServiceStub = new SectionsServiceStub();
|
const sectionsServiceStub = new SectionsServiceStub();
|
||||||
// const pathCombiner = new JsonPatchOperationPathCombiner('sections', sectionId, 'files', fileIndex);
|
|
||||||
|
|
||||||
const builderService: FormBuilderService = getMockFormBuilderService();
|
const builderService: FormBuilderService = getMockFormBuilderService();
|
||||||
const submissionAccessesConfigService = getSubmissionAccessesConfigService();
|
const submissionAccessesConfigService = getSubmissionAccessesConfigService();
|
||||||
const sectionAccessesService = getSectionAccessesService();
|
const sectionAccessesService = getSectionAccessesService();
|
||||||
@@ -55,6 +57,7 @@ describe('SubmissionSectionAccessesComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let formService: any;
|
let formService: any;
|
||||||
|
let formbuilderService: any;
|
||||||
|
|
||||||
const storeStub = jasmine.createSpyObj('store', ['dispatch']);
|
const storeStub = jasmine.createSpyObj('store', ['dispatch']);
|
||||||
|
|
||||||
@@ -86,7 +89,6 @@ describe('SubmissionSectionAccessesComponent', () => {
|
|||||||
declarations: [SubmissionSectionAccessesComponent, FormComponent],
|
declarations: [SubmissionSectionAccessesComponent, FormComponent],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: SectionsService, useValue: sectionsServiceStub },
|
{ provide: SectionsService, useValue: sectionsServiceStub },
|
||||||
{ provide: FormBuilderService, useValue: builderService },
|
|
||||||
{ provide: SubmissionAccessesConfigService, useValue: submissionAccessesConfigService },
|
{ provide: SubmissionAccessesConfigService, useValue: submissionAccessesConfigService },
|
||||||
{ provide: SectionAccessesService, useValue: sectionAccessesService },
|
{ provide: SectionAccessesService, useValue: sectionAccessesService },
|
||||||
{ provide: SectionFormOperationsService, useValue: sectionFormOperationsService },
|
{ provide: SectionFormOperationsService, useValue: sectionFormOperationsService },
|
||||||
@@ -97,6 +99,7 @@ describe('SubmissionSectionAccessesComponent', () => {
|
|||||||
{ provide: SubmissionJsonPatchOperationsService, useValue: SubmissionJsonPatchOperationsServiceStub },
|
{ provide: SubmissionJsonPatchOperationsService, useValue: SubmissionJsonPatchOperationsServiceStub },
|
||||||
{ provide: 'sectionDataProvider', useValue: sectionData },
|
{ provide: 'sectionDataProvider', useValue: sectionData },
|
||||||
{ provide: 'submissionIdProvider', useValue: '1508' },
|
{ provide: 'submissionIdProvider', useValue: '1508' },
|
||||||
|
FormBuilderService
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
@@ -106,6 +109,7 @@ describe('SubmissionSectionAccessesComponent', () => {
|
|||||||
fixture = TestBed.createComponent(SubmissionSectionAccessesComponent);
|
fixture = TestBed.createComponent(SubmissionSectionAccessesComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
formService = TestBed.inject(FormService);
|
formService = TestBed.inject(FormService);
|
||||||
|
formbuilderService = TestBed.inject(FormBuilderService);
|
||||||
formService.validateAllFormFields.and.callFake(() => null);
|
formService.validateAllFormFields.and.callFake(() => null);
|
||||||
formService.isValid.and.returnValue(observableOf(true));
|
formService.isValid.and.returnValue(observableOf(true));
|
||||||
formService.getFormData.and.returnValue(observableOf(mockAccessesFormData));
|
formService.getFormData.and.returnValue(observableOf(mockAccessesFormData));
|
||||||
@@ -133,11 +137,22 @@ describe('SubmissionSectionAccessesComponent', () => {
|
|||||||
it('formModel type array should have formgroup with 1 input and 2 datepickers', () => {
|
it('formModel type array should have formgroup with 1 input and 2 datepickers', () => {
|
||||||
const formModel: any = component.formModel[1];
|
const formModel: any = component.formModel[1];
|
||||||
const formGroup = formModel.groupFactory()[0].group;
|
const formGroup = formModel.groupFactory()[0].group;
|
||||||
|
|
||||||
expect(formGroup[0] instanceof DynamicSelectModel).toBeTrue();
|
expect(formGroup[0] instanceof DynamicSelectModel).toBeTrue();
|
||||||
expect(formGroup[1] instanceof DynamicDatePickerModel).toBeTrue();
|
expect(formGroup[1] instanceof DynamicDatePickerModel).toBeTrue();
|
||||||
expect(formGroup[2] instanceof DynamicDatePickerModel).toBeTrue();
|
expect(formGroup[2] instanceof DynamicDatePickerModel).toBeTrue();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should have set maxStartDate and maxEndDate properly', () => {
|
||||||
|
const maxStartDate = {year: 2024, month: 12, day: 20};
|
||||||
|
const maxEndDate = {year: 2022, month: 6, day: 20};
|
||||||
|
|
||||||
|
const startDateModel = formbuilderService.findById('startDate', component.formModel);
|
||||||
|
expect(startDateModel.max).toEqual(maxStartDate);
|
||||||
|
const endDateModel = formbuilderService.findById('endDate', component.formModel);
|
||||||
|
expect(endDateModel.max).toEqual(maxEndDate);
|
||||||
|
});
|
||||||
|
|
||||||
it('when checkbox changed it should call operationsBuilder replace function', () => {
|
it('when checkbox changed it should call operationsBuilder replace function', () => {
|
||||||
component.onChange(checkboxChangeEvent);
|
component.onChange(checkboxChangeEvent);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@@ -41,7 +41,9 @@ import {
|
|||||||
FORM_ACCESS_CONDITION_TYPE_LAYOUT
|
FORM_ACCESS_CONDITION_TYPE_LAYOUT
|
||||||
} from './section-accesses.model';
|
} from './section-accesses.model';
|
||||||
import { hasValue, isNotEmpty, isNotNull } from '../../../shared/empty.util';
|
import { hasValue, isNotEmpty, isNotNull } from '../../../shared/empty.util';
|
||||||
import { WorkspaceitemSectionAccessesObject } from '../../../core/submission/models/workspaceitem-section-accesses.model';
|
import {
|
||||||
|
WorkspaceitemSectionAccessesObject
|
||||||
|
} from '../../../core/submission/models/workspaceitem-section-accesses.model';
|
||||||
import { SubmissionAccessesConfigService } from '../../../core/config/submission-accesses-config.service';
|
import { SubmissionAccessesConfigService } from '../../../core/config/submission-accesses-config.service';
|
||||||
import { getFirstSucceededRemoteData } from '../../../core/shared/operators';
|
import { getFirstSucceededRemoteData } from '../../../core/shared/operators';
|
||||||
import { FormComponent } from '../../../shared/form/form.component';
|
import { FormComponent } from '../../../shared/form/form.component';
|
||||||
@@ -50,8 +52,12 @@ import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder
|
|||||||
import { SectionFormOperationsService } from '../form/section-form-operations.service';
|
import { SectionFormOperationsService } from '../form/section-form-operations.service';
|
||||||
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
|
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
|
||||||
import { AccessesConditionOption } from '../../../core/config/models/config-accesses-conditions-options.model';
|
import { AccessesConditionOption } from '../../../core/config/models/config-accesses-conditions-options.model';
|
||||||
import { SubmissionJsonPatchOperationsService } from '../../../core/submission/submission-json-patch-operations.service';
|
import {
|
||||||
|
SubmissionJsonPatchOperationsService
|
||||||
|
} from '../../../core/submission/submission-json-patch-operations.service';
|
||||||
import { dateToISOFormat } from '../../../shared/date.util';
|
import { dateToISOFormat } from '../../../shared/date.util';
|
||||||
|
import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-relation.model';
|
||||||
|
import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynamic-date-control.model';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This component represents a section for managing item's access conditions.
|
* This component represents a section for managing item's access conditions.
|
||||||
@@ -322,40 +328,61 @@ export class SubmissionSectionAccessesComponent extends SectionModelComponent {
|
|||||||
}
|
}
|
||||||
accessConditionTypeModelConfig.options = accessConditionTypeOptions;
|
accessConditionTypeModelConfig.options = accessConditionTypeOptions;
|
||||||
|
|
||||||
// Dynamically assign of relation in config. For startdate, endDate, groups.
|
// Dynamically assign of relation in config. For startDate and endDate.
|
||||||
const hasStart = [];
|
const startDateCondition: DynamicFormControlCondition[] = [];
|
||||||
const hasEnd = [];
|
const endDateCondition: DynamicFormControlCondition[] = [];
|
||||||
const hasGroups = [];
|
let maxStartDate: DynamicDateControlValue;
|
||||||
|
let maxEndDate: DynamicDateControlValue;
|
||||||
this.availableAccessConditionOptions.forEach((condition) => {
|
this.availableAccessConditionOptions.forEach((condition) => {
|
||||||
const showStart: boolean = condition.hasStartDate === true;
|
|
||||||
const showEnd: boolean = condition.hasEndDate === true;
|
if (condition.hasStartDate) {
|
||||||
const showGroups: boolean = showStart || showEnd;
|
startDateCondition.push({ id: 'name', value: condition.name });
|
||||||
if (showStart) {
|
if (condition.maxStartDate) {
|
||||||
hasStart.push({ id: 'name', value: condition.name });
|
const min = new Date(condition.maxStartDate);
|
||||||
|
maxStartDate = {
|
||||||
|
year: min.getUTCFullYear(),
|
||||||
|
month: min.getUTCMonth() + 1,
|
||||||
|
day: min.getUTCDate()
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (showEnd) {
|
if (condition.hasEndDate) {
|
||||||
hasEnd.push({ id: 'name', value: condition.name });
|
endDateCondition.push({ id: 'name', value: condition.name });
|
||||||
}
|
if (condition.maxEndDate) {
|
||||||
if (showGroups) {
|
const max = new Date(condition.maxEndDate);
|
||||||
hasGroups.push({ id: 'name', value: condition.name });
|
maxEndDate = {
|
||||||
|
year: max.getUTCFullYear(),
|
||||||
|
month: max.getUTCMonth() + 1,
|
||||||
|
day: max.getUTCDate()
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const confStart = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasStart }] };
|
const confStart = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: startDateCondition }] };
|
||||||
const confEnd = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasEnd }] };
|
const confEnd = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: endDateCondition }] };
|
||||||
|
const hasStartDate = startDateCondition.length > 0;
|
||||||
|
const hasEndDate = endDateCondition.length > 0;
|
||||||
|
|
||||||
accessConditionsArrayConfig.groupFactory = () => {
|
accessConditionsArrayConfig.groupFactory = () => {
|
||||||
const type = new DynamicSelectModel(accessConditionTypeModelConfig, FORM_ACCESS_CONDITION_TYPE_LAYOUT);
|
const type = new DynamicSelectModel(accessConditionTypeModelConfig, FORM_ACCESS_CONDITION_TYPE_LAYOUT);
|
||||||
const startDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart);
|
const startDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart);
|
||||||
|
if (maxStartDate) {
|
||||||
|
startDateConfig.max = maxStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
const endDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd);
|
const endDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd);
|
||||||
|
if (maxEndDate) {
|
||||||
|
endDateConfig.max = maxEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
const startDate = new DynamicDatePickerModel(startDateConfig, FORM_ACCESS_CONDITION_START_DATE_LAYOUT);
|
const startDate = new DynamicDatePickerModel(startDateConfig, FORM_ACCESS_CONDITION_START_DATE_LAYOUT);
|
||||||
const endDate = new DynamicDatePickerModel(endDateConfig, FORM_ACCESS_CONDITION_END_DATE_LAYOUT);
|
const endDate = new DynamicDatePickerModel(endDateConfig, FORM_ACCESS_CONDITION_END_DATE_LAYOUT);
|
||||||
const accessConditionGroupConfig = Object.assign({}, ACCESS_CONDITION_GROUP_CONFIG);
|
const accessConditionGroupConfig = Object.assign({}, ACCESS_CONDITION_GROUP_CONFIG);
|
||||||
accessConditionGroupConfig.group = [type];
|
accessConditionGroupConfig.group = [type];
|
||||||
if (hasStart.length > 0) {
|
if (hasStartDate) {
|
||||||
accessConditionGroupConfig.group.push(startDate);
|
accessConditionGroupConfig.group.push(startDate);
|
||||||
}
|
}
|
||||||
if (hasEnd.length > 0) {
|
if (hasEndDate) {
|
||||||
accessConditionGroupConfig.group.push(endDate);
|
accessConditionGroupConfig.group.push(endDate);
|
||||||
}
|
}
|
||||||
return [new DynamicFormGroupModel(accessConditionGroupConfig, ACCESS_CONDITION_GROUP_LAYOUT)];
|
return [new DynamicFormGroupModel(accessConditionGroupConfig, ACCESS_CONDITION_GROUP_LAYOUT)];
|
||||||
|
@@ -1,10 +1,9 @@
|
|||||||
import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { waitForAsync, ComponentFixture, inject, TestBed, fakeAsync, tick } from '@angular/core/testing';
|
import { ComponentFixture, fakeAsync, inject, TestBed, tick, waitForAsync } from '@angular/core/testing';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import {
|
import {
|
||||||
DynamicFormArrayGroupModel,
|
|
||||||
DynamicFormArrayModel,
|
DynamicFormArrayModel,
|
||||||
DynamicFormControlEvent,
|
DynamicFormControlEvent,
|
||||||
DynamicFormGroupModel,
|
DynamicFormGroupModel,
|
||||||
@@ -17,13 +16,13 @@ import { SubmissionService } from '../../../../submission.service';
|
|||||||
import { SubmissionSectionUploadFileEditComponent } from './section-upload-file-edit.component';
|
import { SubmissionSectionUploadFileEditComponent } from './section-upload-file-edit.component';
|
||||||
import { POLICY_DEFAULT_WITH_LIST } from '../../section-upload.component';
|
import { POLICY_DEFAULT_WITH_LIST } from '../../section-upload.component';
|
||||||
import {
|
import {
|
||||||
|
mockFileFormData,
|
||||||
mockSubmissionCollectionId,
|
mockSubmissionCollectionId,
|
||||||
mockSubmissionId,
|
mockSubmissionId,
|
||||||
|
mockSubmissionObject,
|
||||||
mockUploadConfigResponse,
|
mockUploadConfigResponse,
|
||||||
mockUploadConfigResponseMetadata,
|
mockUploadConfigResponseMetadata,
|
||||||
mockUploadFiles,
|
mockUploadFiles,
|
||||||
mockFileFormData,
|
|
||||||
mockSubmissionObject,
|
|
||||||
} from '../../../../../shared/mocks/submission.mock';
|
} from '../../../../../shared/mocks/submission.mock';
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { FormComponent } from '../../../../../shared/form/form.component';
|
import { FormComponent } from '../../../../../shared/form/form.component';
|
||||||
@@ -32,12 +31,20 @@ import { getMockFormService } from '../../../../../shared/mocks/form-service.moc
|
|||||||
import { createTestComponent } from '../../../../../shared/testing/utils.test';
|
import { createTestComponent } from '../../../../../shared/testing/utils.test';
|
||||||
import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { JsonPatchOperationsBuilder } from '../../../../../core/json-patch/builder/json-patch-operations-builder';
|
import { JsonPatchOperationsBuilder } from '../../../../../core/json-patch/builder/json-patch-operations-builder';
|
||||||
import { SubmissionJsonPatchOperationsServiceStub } from '../../../../../shared/testing/submission-json-patch-operations-service.stub';
|
import {
|
||||||
import { SubmissionJsonPatchOperationsService } from '../../../../../core/submission/submission-json-patch-operations.service';
|
SubmissionJsonPatchOperationsServiceStub
|
||||||
|
} from '../../../../../shared/testing/submission-json-patch-operations-service.stub';
|
||||||
|
import {
|
||||||
|
SubmissionJsonPatchOperationsService
|
||||||
|
} from '../../../../../core/submission/submission-json-patch-operations.service';
|
||||||
import { SectionUploadService } from '../../section-upload.service';
|
import { SectionUploadService } from '../../section-upload.service';
|
||||||
import { getMockSectionUploadService } from '../../../../../shared/mocks/section-upload.service.mock';
|
import { getMockSectionUploadService } from '../../../../../shared/mocks/section-upload.service.mock';
|
||||||
import { FormFieldMetadataValueObject } from '../../../../../shared/form/builder/models/form-field-metadata-value.model';
|
import {
|
||||||
import { JsonPatchOperationPathCombiner } from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
|
FormFieldMetadataValueObject
|
||||||
|
} from '../../../../../shared/form/builder/models/form-field-metadata-value.model';
|
||||||
|
import {
|
||||||
|
JsonPatchOperationPathCombiner
|
||||||
|
} from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
|
||||||
import { dateToISOFormat } from '../../../../../shared/date.util';
|
import { dateToISOFormat } from '../../../../../shared/date.util';
|
||||||
import { of } from 'rxjs';
|
import { of } from 'rxjs';
|
||||||
|
|
||||||
@@ -171,6 +178,8 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
|
|||||||
it('should init form model properly', () => {
|
it('should init form model properly', () => {
|
||||||
comp.fileData = fileData;
|
comp.fileData = fileData;
|
||||||
comp.formId = 'testFileForm';
|
comp.formId = 'testFileForm';
|
||||||
|
const maxStartDate = {year: 2022, month: 1, day: 12};
|
||||||
|
const maxEndDate = {year: 2019, month: 7, day: 12};
|
||||||
|
|
||||||
comp.ngOnInit();
|
comp.ngOnInit();
|
||||||
|
|
||||||
@@ -179,6 +188,10 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
|
|||||||
expect(comp.formModel[0] instanceof DynamicFormGroupModel).toBeTruthy();
|
expect(comp.formModel[0] instanceof DynamicFormGroupModel).toBeTruthy();
|
||||||
expect(comp.formModel[1] instanceof DynamicFormArrayModel).toBeTruthy();
|
expect(comp.formModel[1] instanceof DynamicFormArrayModel).toBeTruthy();
|
||||||
expect((comp.formModel[1] as DynamicFormArrayModel).groups.length).toBe(2);
|
expect((comp.formModel[1] as DynamicFormArrayModel).groups.length).toBe(2);
|
||||||
|
const startDateModel = formbuilderService.findById('startDate', comp.formModel);
|
||||||
|
expect(startDateModel.max).toEqual(maxStartDate);
|
||||||
|
const endDateModel = formbuilderService.findById('endDate', comp.formModel);
|
||||||
|
expect(endDateModel.max).toEqual(maxEndDate);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call setOptions method onChange', () => {
|
it('should call setOptions method onChange', () => {
|
||||||
@@ -208,20 +221,19 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
|
|||||||
const formGroup = formbuilderService.createFormGroup(comp.formModel);
|
const formGroup = formbuilderService.createFormGroup(comp.formModel);
|
||||||
const control = formbuilderService.getFormControlById('name', formGroup, comp.formModel, 0);
|
const control = formbuilderService.getFormControlById('name', formGroup, comp.formModel, 0);
|
||||||
|
|
||||||
spyOn(formbuilderService, 'findById').and.callThrough();
|
spyOn(control.parent, 'markAsDirty').and.callThrough();
|
||||||
|
|
||||||
control.value = 'openaccess';
|
control.value = 'openaccess';
|
||||||
comp.setOptions(model, control);
|
comp.setOptions(model, control);
|
||||||
expect(formbuilderService.findById).not.toHaveBeenCalledWith('endDate', (model.parent as DynamicFormArrayGroupModel).group);
|
expect(control.parent.markAsDirty).toHaveBeenCalled();
|
||||||
expect(formbuilderService.findById).not.toHaveBeenCalledWith('startDate', (model.parent as DynamicFormArrayGroupModel).group);
|
|
||||||
|
|
||||||
control.value = 'lease';
|
control.value = 'lease';
|
||||||
comp.setOptions(model, control);
|
comp.setOptions(model, control);
|
||||||
expect(formbuilderService.findById).toHaveBeenCalledWith('endDate', (model.parent as DynamicFormArrayGroupModel).group);
|
expect(control.parent.markAsDirty).toHaveBeenCalled();
|
||||||
|
|
||||||
control.value = 'embargo';
|
control.value = 'embargo';
|
||||||
comp.setOptions(model, control);
|
comp.setOptions(model, control);
|
||||||
expect(formbuilderService.findById).toHaveBeenCalledWith('startDate', (model.parent as DynamicFormArrayGroupModel).group);
|
expect(control.parent.markAsDirty).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should retrieve Value From Field properly', () => {
|
it('should retrieve Value From Field properly', () => {
|
||||||
|
@@ -3,9 +3,7 @@ import { FormControl } from '@angular/forms';
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER,
|
DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER,
|
||||||
DynamicDateControlModel,
|
|
||||||
DynamicDatePickerModel,
|
DynamicDatePickerModel,
|
||||||
DynamicFormArrayGroupModel,
|
|
||||||
DynamicFormArrayModel,
|
DynamicFormArrayModel,
|
||||||
DynamicFormControlEvent,
|
DynamicFormControlEvent,
|
||||||
DynamicFormControlModel,
|
DynamicFormControlModel,
|
||||||
@@ -15,7 +13,9 @@ import {
|
|||||||
OR_OPERATOR
|
OR_OPERATOR
|
||||||
} from '@ng-dynamic-forms/core';
|
} from '@ng-dynamic-forms/core';
|
||||||
|
|
||||||
import { WorkspaceitemSectionUploadFileObject } from '../../../../../core/submission/models/workspaceitem-section-upload-file.model';
|
import {
|
||||||
|
WorkspaceitemSectionUploadFileObject
|
||||||
|
} from '../../../../../core/submission/models/workspaceitem-section-upload-file.model';
|
||||||
import { FormBuilderService } from '../../../../../shared/form/builder/form-builder.service';
|
import { FormBuilderService } from '../../../../../shared/form/builder/form-builder.service';
|
||||||
import {
|
import {
|
||||||
BITSTREAM_ACCESS_CONDITION_GROUP_CONFIG,
|
BITSTREAM_ACCESS_CONDITION_GROUP_CONFIG,
|
||||||
@@ -43,12 +43,20 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
|
|||||||
import { filter, mergeMap, take } from 'rxjs/operators';
|
import { filter, mergeMap, take } from 'rxjs/operators';
|
||||||
import { dateToISOFormat } from '../../../../../shared/date.util';
|
import { dateToISOFormat } from '../../../../../shared/date.util';
|
||||||
import { SubmissionObject } from '../../../../../core/submission/models/submission-object.model';
|
import { SubmissionObject } from '../../../../../core/submission/models/submission-object.model';
|
||||||
import { WorkspaceitemSectionUploadObject } from '../../../../../core/submission/models/workspaceitem-section-upload.model';
|
import {
|
||||||
|
WorkspaceitemSectionUploadObject
|
||||||
|
} from '../../../../../core/submission/models/workspaceitem-section-upload.model';
|
||||||
import { JsonPatchOperationsBuilder } from '../../../../../core/json-patch/builder/json-patch-operations-builder';
|
import { JsonPatchOperationsBuilder } from '../../../../../core/json-patch/builder/json-patch-operations-builder';
|
||||||
import { SubmissionJsonPatchOperationsService } from '../../../../../core/submission/submission-json-patch-operations.service';
|
import {
|
||||||
import { JsonPatchOperationPathCombiner } from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
|
SubmissionJsonPatchOperationsService
|
||||||
|
} from '../../../../../core/submission/submission-json-patch-operations.service';
|
||||||
|
import {
|
||||||
|
JsonPatchOperationPathCombiner
|
||||||
|
} from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
|
||||||
import { SectionUploadService } from '../../section-upload.service';
|
import { SectionUploadService } from '../../section-upload.service';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
|
import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-relation.model';
|
||||||
|
import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynamic-date-control.model';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This component represents the edit form for bitstream
|
* This component represents the edit form for bitstream
|
||||||
@@ -237,8 +245,6 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit {
|
|||||||
this.availableAccessConditionOptions.filter((element) => element.name === control.value)
|
this.availableAccessConditionOptions.filter((element) => element.name === control.value)
|
||||||
.forEach((element) => accessCondition = element );
|
.forEach((element) => accessCondition = element );
|
||||||
if (isNotEmpty(accessCondition)) {
|
if (isNotEmpty(accessCondition)) {
|
||||||
const showGroups: boolean = accessCondition.hasStartDate === true || accessCondition.hasEndDate === true;
|
|
||||||
|
|
||||||
const startDateControl: FormControl = control.parent.get('startDate') as FormControl;
|
const startDateControl: FormControl = control.parent.get('startDate') as FormControl;
|
||||||
const endDateControl: FormControl = control.parent.get('endDate') as FormControl;
|
const endDateControl: FormControl = control.parent.get('endDate') as FormControl;
|
||||||
|
|
||||||
@@ -249,33 +255,6 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit {
|
|||||||
startDateControl?.setValue(null);
|
startDateControl?.setValue(null);
|
||||||
control.parent.markAsDirty();
|
control.parent.markAsDirty();
|
||||||
endDateControl?.setValue(null);
|
endDateControl?.setValue(null);
|
||||||
|
|
||||||
if (showGroups) {
|
|
||||||
if (accessCondition.hasStartDate) {
|
|
||||||
const startDateModel = this.formBuilderService.findById(
|
|
||||||
'startDate',
|
|
||||||
(model.parent as DynamicFormArrayGroupModel).group) as DynamicDateControlModel;
|
|
||||||
|
|
||||||
const min = new Date(accessCondition.maxStartDate);
|
|
||||||
startDateModel.max = {
|
|
||||||
year: min.getUTCFullYear(),
|
|
||||||
month: min.getUTCMonth() + 1,
|
|
||||||
day: min.getUTCDate()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if (accessCondition.hasEndDate) {
|
|
||||||
const endDateModel = this.formBuilderService.findById(
|
|
||||||
'endDate',
|
|
||||||
(model.parent as DynamicFormArrayGroupModel).group) as DynamicDateControlModel;
|
|
||||||
|
|
||||||
const max = new Date(accessCondition.maxEndDate);
|
|
||||||
endDateModel.max = {
|
|
||||||
year: max.getUTCFullYear(),
|
|
||||||
month: max.getUTCMonth() + 1,
|
|
||||||
day: max.getUTCDate()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,38 +314,63 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
accessConditionTypeModelConfig.options = accessConditionTypeOptions;
|
accessConditionTypeModelConfig.options = accessConditionTypeOptions;
|
||||||
|
|
||||||
// Dynamically assign of relation in config. For startdate, endDate, groups.
|
// Dynamically assign of relation in config. For startDate and endDate.
|
||||||
const hasStart = [];
|
const startDateCondition: DynamicFormControlCondition[] = [];
|
||||||
const hasEnd = [];
|
const endDateCondition: DynamicFormControlCondition[] = [];
|
||||||
const hasGroups = [];
|
let maxStartDate: DynamicDateControlValue;
|
||||||
|
let maxEndDate: DynamicDateControlValue;
|
||||||
this.availableAccessConditionOptions.forEach((condition) => {
|
this.availableAccessConditionOptions.forEach((condition) => {
|
||||||
const showStart: boolean = condition.hasStartDate === true;
|
|
||||||
const showEnd: boolean = condition.hasEndDate === true;
|
if (condition.hasStartDate) {
|
||||||
const showGroups: boolean = showStart || showEnd;
|
startDateCondition.push({ id: 'name', value: condition.name });
|
||||||
if (showStart) {
|
if (condition.maxStartDate) {
|
||||||
hasStart.push({id: 'name', value: condition.name});
|
const min = new Date(condition.maxStartDate);
|
||||||
|
maxStartDate = {
|
||||||
|
year: min.getUTCFullYear(),
|
||||||
|
month: min.getUTCMonth() + 1,
|
||||||
|
day: min.getUTCDate()
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (showEnd) {
|
if (condition.hasEndDate) {
|
||||||
hasEnd.push({id: 'name', value: condition.name});
|
endDateCondition.push({ id: 'name', value: condition.name });
|
||||||
}
|
if (condition.maxEndDate) {
|
||||||
if (showGroups) {
|
const max = new Date(condition.maxEndDate);
|
||||||
hasGroups.push({id: 'name', value: condition.name});
|
maxEndDate = {
|
||||||
|
year: max.getUTCFullYear(),
|
||||||
|
month: max.getUTCMonth() + 1,
|
||||||
|
day: max.getUTCDate()
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const confStart = {relations: [{match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasStart}]};
|
const confStart = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: startDateCondition }] };
|
||||||
const confEnd = {relations: [{match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasEnd}]};
|
const confEnd = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: endDateCondition }] };
|
||||||
|
const hasStartDate = startDateCondition.length > 0;
|
||||||
|
const hasEndDate = endDateCondition.length > 0;
|
||||||
|
|
||||||
accessConditionsArrayConfig.groupFactory = () => {
|
accessConditionsArrayConfig.groupFactory = () => {
|
||||||
const type = new DynamicSelectModel(accessConditionTypeModelConfig, BITSTREAM_FORM_ACCESS_CONDITION_TYPE_LAYOUT);
|
const type = new DynamicSelectModel(accessConditionTypeModelConfig, BITSTREAM_FORM_ACCESS_CONDITION_TYPE_LAYOUT);
|
||||||
const startDateConfig = Object.assign({}, BITSTREAM_FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart);
|
const startDateConfig = Object.assign({}, BITSTREAM_FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart);
|
||||||
|
if (maxStartDate) {
|
||||||
|
startDateConfig.max = maxStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
const endDateConfig = Object.assign({}, BITSTREAM_FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd);
|
const endDateConfig = Object.assign({}, BITSTREAM_FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd);
|
||||||
|
if (maxEndDate) {
|
||||||
|
endDateConfig.max = maxEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
const startDate = new DynamicDatePickerModel(startDateConfig, BITSTREAM_FORM_ACCESS_CONDITION_START_DATE_LAYOUT);
|
const startDate = new DynamicDatePickerModel(startDateConfig, BITSTREAM_FORM_ACCESS_CONDITION_START_DATE_LAYOUT);
|
||||||
const endDate = new DynamicDatePickerModel(endDateConfig, BITSTREAM_FORM_ACCESS_CONDITION_END_DATE_LAYOUT);
|
const endDate = new DynamicDatePickerModel(endDateConfig, BITSTREAM_FORM_ACCESS_CONDITION_END_DATE_LAYOUT);
|
||||||
const accessConditionGroupConfig = Object.assign({}, BITSTREAM_ACCESS_CONDITION_GROUP_CONFIG);
|
const accessConditionGroupConfig = Object.assign({}, BITSTREAM_ACCESS_CONDITION_GROUP_CONFIG);
|
||||||
accessConditionGroupConfig.group = [type];
|
accessConditionGroupConfig.group = [type];
|
||||||
if (hasStart.length > 0) { accessConditionGroupConfig.group.push(startDate); }
|
if (hasStartDate) {
|
||||||
if (hasEnd.length > 0) { accessConditionGroupConfig.group.push(endDate); }
|
accessConditionGroupConfig.group.push(startDate);
|
||||||
|
}
|
||||||
|
if (hasEndDate) {
|
||||||
|
accessConditionGroupConfig.group.push(endDate);
|
||||||
|
}
|
||||||
return [new DynamicFormGroupModel(accessConditionGroupConfig, BITSTREAM_ACCESS_CONDITION_GROUP_LAYOUT)];
|
return [new DynamicFormGroupModel(accessConditionGroupConfig, BITSTREAM_ACCESS_CONDITION_GROUP_LAYOUT)];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -50,7 +50,7 @@ import { ThemedSubmissionEditComponent } from './edit/themed-submission-edit.com
|
|||||||
import { ThemedSubmissionSubmitComponent } from './submit/themed-submission-submit.component';
|
import { ThemedSubmissionSubmitComponent } from './submit/themed-submission-submit.component';
|
||||||
import { ThemedSubmissionImportExternalComponent } from './import-external/themed-submission-import-external.component';
|
import { ThemedSubmissionImportExternalComponent } from './import-external/themed-submission-import-external.component';
|
||||||
import { FormModule } from '../shared/form/form.module';
|
import { FormModule } from '../shared/form/form.module';
|
||||||
import { NgbCollapseModule, NgbModalModule, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbAccordionModule, NgbCollapseModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { SubmissionSectionAccessesComponent } from './sections/accesses/section-accesses.component';
|
import { SubmissionSectionAccessesComponent } from './sections/accesses/section-accesses.component';
|
||||||
import { SubmissionAccessesConfigService } from '../core/config/submission-accesses-config.service';
|
import { SubmissionAccessesConfigService } from '../core/config/submission-accesses-config.service';
|
||||||
import { SectionAccessesService } from './sections/accesses/section-accesses.service';
|
import { SectionAccessesService } from './sections/accesses/section-accesses.service';
|
||||||
@@ -71,7 +71,6 @@ const ENTRY_COMPONENTS = [
|
|||||||
SubmissionSectionLicenseComponent,
|
SubmissionSectionLicenseComponent,
|
||||||
SubmissionSectionCcLicensesComponent,
|
SubmissionSectionCcLicensesComponent,
|
||||||
SubmissionSectionAccessesComponent,
|
SubmissionSectionAccessesComponent,
|
||||||
SubmissionSectionUploadFileEditComponent,
|
|
||||||
SubmissionSectionSherpaPoliciesComponent,
|
SubmissionSectionSherpaPoliciesComponent,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@@ -193,8 +193,8 @@
|
|||||||
// "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level",
|
// "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level",
|
||||||
"admin.registries.bitstream-formats.table.supportLevel.head": "Unterstützungsgrad",
|
"admin.registries.bitstream-formats.table.supportLevel.head": "Unterstützungsgrad",
|
||||||
|
|
||||||
// "admin.registries.bitstream-formats.title": "DSpace Angular :: Bitstream Format Registry",
|
// "admin.registries.bitstream-formats.title": "Bitstream Format Registry",
|
||||||
"admin.registries.bitstream-formats.title": "DSpace Angular :: Referenzliste der Dateiformate",
|
"admin.registries.bitstream-formats.title": "Referenzliste der Dateiformate",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -234,8 +234,8 @@
|
|||||||
// "admin.registries.metadata.schemas.table.namespace": "Namespace",
|
// "admin.registries.metadata.schemas.table.namespace": "Namespace",
|
||||||
"admin.registries.metadata.schemas.table.namespace": "Namensraum",
|
"admin.registries.metadata.schemas.table.namespace": "Namensraum",
|
||||||
|
|
||||||
// "admin.registries.metadata.title": "DSpace Angular :: Metadata Registry",
|
// "admin.registries.metadata.title": "Metadata Registry",
|
||||||
"admin.registries.metadata.title": "DSpace Angular :: Metadatenreferenzliste",
|
"admin.registries.metadata.title": "Metadatenreferenzliste",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
"admin.registries.schema.fields.no-items": "Es gibt keine Metadatenfelder in diesem Schema.",
|
"admin.registries.schema.fields.no-items": "Es gibt keine Metadatenfelder in diesem Schema.",
|
||||||
|
|
||||||
// "admin.registries.schema.fields.table.delete": "Delete selected",
|
// "admin.registries.schema.fields.table.delete": "Delete selected",
|
||||||
"admin.registries.schema.fields.table.delete": "Ausgewähltes löschen",
|
"admin.registries.schema.fields.table.delete": "Auswahl löschen",
|
||||||
|
|
||||||
// "admin.registries.schema.fields.table.field": "Field",
|
// "admin.registries.schema.fields.table.field": "Field",
|
||||||
"admin.registries.schema.fields.table.field": "Feld",
|
"admin.registries.schema.fields.table.field": "Feld",
|
||||||
@@ -311,8 +311,8 @@
|
|||||||
// "admin.registries.schema.return": "Return",
|
// "admin.registries.schema.return": "Return",
|
||||||
"admin.registries.schema.return": "Zurück",
|
"admin.registries.schema.return": "Zurück",
|
||||||
|
|
||||||
// "admin.registries.schema.title": "DSpace Angular :: Metadata Schema Registry",
|
// "admin.registries.schema.title": "Metadata Schema Registry",
|
||||||
"admin.registries.schema.title": "DSpace Angular :: Referenzliste der Metadatenschemata",
|
"admin.registries.schema.title": "Referenzliste der Metadatenschemata",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -328,8 +328,8 @@
|
|||||||
// "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson",
|
// "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson",
|
||||||
"admin.access-control.epeople.actions.stop-impersonating": "Von Person ausloggen",
|
"admin.access-control.epeople.actions.stop-impersonating": "Von Person ausloggen",
|
||||||
|
|
||||||
// "admin.access-control.epeople.title": "DSpace Angular :: EPeople",
|
// "admin.access-control.epeople.title": "EPeople",
|
||||||
"admin.access-control.epeople.title": "DSpace Angular :: Personen",
|
"admin.access-control.epeople.title": "Personen",
|
||||||
|
|
||||||
// "admin.access-control.epeople.head": "EPeople",
|
// "admin.access-control.epeople.head": "EPeople",
|
||||||
"admin.access-control.epeople.head": "Personen",
|
"admin.access-control.epeople.head": "Personen",
|
||||||
@@ -444,14 +444,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// "admin.access-control.groups.title": "DSpace Angular :: Groups",
|
// "admin.access-control.groups.title": "Groups",
|
||||||
"admin.access-control.groups.title": "DSpace Angular :: Gruppen",
|
"admin.access-control.groups.title": "Gruppen",
|
||||||
|
|
||||||
// "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Edit Group",
|
// "admin.access-control.groups.title.singleGroup": "Edit Group",
|
||||||
"admin.access-control.groups.title.singleGroup": "DSpace Angular :: Gruppe bearbeiten",
|
"admin.access-control.groups.title.singleGroup": "Gruppe bearbeiten",
|
||||||
|
|
||||||
// "admin.access-control.groups.title.addGroup": "DSpace Angular :: New Group",
|
// "admin.access-control.groups.title.addGroup": "New Group",
|
||||||
"admin.access-control.groups.title.addGroup": "DSpace Angular :: Neue Gruppe",
|
"admin.access-control.groups.title.addGroup": "Neue Gruppe",
|
||||||
|
|
||||||
// "admin.access-control.groups.head": "Groups",
|
// "admin.access-control.groups.head": "Groups",
|
||||||
"admin.access-control.groups.head": "Gruppen",
|
"admin.access-control.groups.head": "Gruppen",
|
||||||
@@ -1008,9 +1008,12 @@
|
|||||||
|
|
||||||
// "browse.startsWith.type_text": "Or enter first few letters:",
|
// "browse.startsWith.type_text": "Or enter first few letters:",
|
||||||
"browse.startsWith.type_text": "Oder geben Sie die ersten Buchstaben ein:",
|
"browse.startsWith.type_text": "Oder geben Sie die ersten Buchstaben ein:",
|
||||||
|
|
||||||
// "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}",
|
// "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}",
|
||||||
"browse.title": "Auflistung von {{ collection }} nach {{ field }} {{ value }}",
|
"browse.title": "Auflistung {{ collection }} nach {{ field }}{{ startsWith }} {{ value }}",
|
||||||
|
|
||||||
|
// "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}",
|
||||||
|
"browse.title.page": "Auflistung {{ collection }} nach {{ field }} {{ value }}",
|
||||||
|
|
||||||
|
|
||||||
// "chips.remove": "Remove chip",
|
// "chips.remove": "Remove chip",
|
||||||
@@ -1356,9 +1359,12 @@
|
|||||||
|
|
||||||
// "community.edit.logo.delete.title": "Delete logo",
|
// "community.edit.logo.delete.title": "Delete logo",
|
||||||
"community.edit.logo.delete.title": "Logo löschen",
|
"community.edit.logo.delete.title": "Logo löschen",
|
||||||
|
|
||||||
|
// "communityList.breadcrumbs": "Community List",
|
||||||
|
"communityList.breadcrumbs": "Bereichsliste",
|
||||||
|
|
||||||
// "communityList.tabTitle": "DSpace - Community List",
|
// "communityList.tabTitle": "Community List",
|
||||||
"communityList.tabTitle": "DSpace - Bereichsliste",
|
"communityList.tabTitle": "Bereichsliste",
|
||||||
|
|
||||||
// "communityList.title": "List of Communities",
|
// "communityList.title": "List of Communities",
|
||||||
"communityList.title": "Liste der Bereiche",
|
"communityList.title": "Liste der Bereiche",
|
||||||
@@ -1375,7 +1381,7 @@
|
|||||||
"community.create.notifications.success": "Bereich erfolgreich angelegt",
|
"community.create.notifications.success": "Bereich erfolgreich angelegt",
|
||||||
|
|
||||||
// "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}",
|
// "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}",
|
||||||
"community.create.sub-head": "Teilbeirech im Bereich {{ parent }} anlegen",
|
"community.create.sub-head": "Teilbereich im Bereich {{ parent }} anlegen",
|
||||||
|
|
||||||
// "community.curate.header": "Curate Community: {{community}}",
|
// "community.curate.header": "Curate Community: {{community}}",
|
||||||
"community.curate.header": "Bereich: {{community}} pflegen",
|
"community.curate.header": "Bereich: {{community}} pflegen",
|
||||||
@@ -1562,7 +1568,7 @@
|
|||||||
"community.form.errors.title.required": "Bitte geben Sie einen Namen für den Bereich ein.",
|
"community.form.errors.title.required": "Bitte geben Sie einen Namen für den Bereich ein.",
|
||||||
|
|
||||||
// "community.form.rights": "Copyright text (HTML)",
|
// "community.form.rights": "Copyright text (HTML)",
|
||||||
"community.form.rights": "Copyrighterklärung (HTML)",
|
"community.form.rights": "Copyright Text (HTML)",
|
||||||
|
|
||||||
// "community.form.tableofcontents": "News (HTML)",
|
// "community.form.tableofcontents": "News (HTML)",
|
||||||
"community.form.tableofcontents": "Neuigkeiten (HTML)",
|
"community.form.tableofcontents": "Neuigkeiten (HTML)",
|
||||||
@@ -1755,7 +1761,7 @@
|
|||||||
"dso-selector.create.community.sub-level": "Einen neuen Bereich anlegen in",
|
"dso-selector.create.community.sub-level": "Einen neuen Bereich anlegen in",
|
||||||
|
|
||||||
// "dso-selector.create.community.top-level": "Create a new top-level community",
|
// "dso-selector.create.community.top-level": "Create a new top-level community",
|
||||||
"dso-selector.create.community.top-level": "Einen neuen Bereich auf oberster Ebene anlgen",
|
"dso-selector.create.community.top-level": "Einen neuen Bereich auf oberster Ebene anlegen",
|
||||||
|
|
||||||
// "dso-selector.create.item.head": "New item",
|
// "dso-selector.create.item.head": "New item",
|
||||||
"dso-selector.create.item.head": "Neues Item",
|
"dso-selector.create.item.head": "Neues Item",
|
||||||
@@ -2141,8 +2147,8 @@
|
|||||||
// "home.search-form.placeholder": "Search the repository ...",
|
// "home.search-form.placeholder": "Search the repository ...",
|
||||||
"home.search-form.placeholder": "Durchsuche Repositorium",
|
"home.search-form.placeholder": "Durchsuche Repositorium",
|
||||||
|
|
||||||
// "home.title": "DSpace Angular :: Home",
|
// "home.title": "Home",
|
||||||
"home.title": "DSpace Angular :: Startseite",
|
"home.title": "Startseite",
|
||||||
|
|
||||||
// "home.top-level-communities.head": "Communities in DSpace",
|
// "home.top-level-communities.head": "Communities in DSpace",
|
||||||
"home.top-level-communities.head": "Hauptbereiche in DSpace",
|
"home.top-level-communities.head": "Hauptbereiche in DSpace",
|
||||||
@@ -2803,8 +2809,8 @@
|
|||||||
// "item.search.results.head": "Item Search Results",
|
// "item.search.results.head": "Item Search Results",
|
||||||
"item.search.results.head": "Item-Suchergebnisse",
|
"item.search.results.head": "Item-Suchergebnisse",
|
||||||
|
|
||||||
// "item.search.title": "DSpace Angular :: Item Search",
|
// "item.search.title": "Item Search",
|
||||||
"item.search.title": "DSpace Angular :: Item-Suche",
|
"item.search.title": "Item-Suche",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -3000,8 +3006,8 @@
|
|||||||
// "journal.search.results.head": "Journal Search Results",
|
// "journal.search.results.head": "Journal Search Results",
|
||||||
"journal.search.results.head": "Suchergebnisse für Zeitschriften",
|
"journal.search.results.head": "Suchergebnisse für Zeitschriften",
|
||||||
|
|
||||||
// "journal.search.title": "DSpace Angular :: Journal Search",
|
// "journal.search.title": "Journal Search",
|
||||||
"journal.search.title": "DSpace Angular :: Zeitschriftensuche",
|
"journal.search.title": "Zeitschriftensuche",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -3629,8 +3635,8 @@
|
|||||||
// "person.search.results.head": "Person Search Results",
|
// "person.search.results.head": "Person Search Results",
|
||||||
"person.search.results.head": "Ergebnisse der Personensuche",
|
"person.search.results.head": "Ergebnisse der Personensuche",
|
||||||
|
|
||||||
// "person.search.title": "DSpace Angular :: Person Search",
|
// "person.search.title": "Person Search",
|
||||||
"person.search.title": "DSpace Angular :: Personensuche",
|
"person.search.title": "Personensuche",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -3922,8 +3928,8 @@
|
|||||||
// "publication.search.results.head": "Publication Search Results",
|
// "publication.search.results.head": "Publication Search Results",
|
||||||
"publication.search.results.head": "Suchergebnisse Publikationen",
|
"publication.search.results.head": "Suchergebnisse Publikationen",
|
||||||
|
|
||||||
// "publication.search.title": "DSpace Angular :: Publication Search",
|
// "publication.search.title": "Publication Search",
|
||||||
"publication.search.title": "DSpace Angular :: Publikationssuche",
|
"publication.search.title": "Publikationssuche",
|
||||||
|
|
||||||
|
|
||||||
// "register-email.title": "New user registration",
|
// "register-email.title": "New user registration",
|
||||||
@@ -4081,9 +4087,27 @@
|
|||||||
|
|
||||||
// "relationships.isContributorOf": "Contributors",
|
// "relationships.isContributorOf": "Contributors",
|
||||||
"relationships.isContributorOf": "Beteiligte",
|
"relationships.isContributorOf": "Beteiligte",
|
||||||
|
|
||||||
|
// "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)",
|
||||||
|
"relationships.isContributorOf.OrgUnit": "Beteiligte (Organisationseinheit)",
|
||||||
|
|
||||||
|
// "relationships.isContributorOf.Person": "Contributor",
|
||||||
|
"relationships.isContributorOf.Person": "Beteiligte (Person)",
|
||||||
|
|
||||||
|
// "relationships.isFundingAgencyOf.OrgUnit": "Funder",
|
||||||
|
"relationships.isFundingAgencyOf.OrgUnit": "Förderer",
|
||||||
|
|
||||||
|
|
||||||
|
// "repository.image.logo": "Repository logo",
|
||||||
|
"repository.image.logo": "Repository Logo",
|
||||||
|
|
||||||
|
// "repository.title.prefix": "DSpace Angular :: ",
|
||||||
|
"repository.title.prefix": "DSpace Angular :: ",
|
||||||
|
|
||||||
|
// "repository.title.prefixDSpace": "DSpace Angular ::",
|
||||||
|
"repository.title.prefixDSpace": "DSpace Angular ::",
|
||||||
|
|
||||||
|
|
||||||
// "resource-policies.add.button": "Add",
|
// "resource-policies.add.button": "Add",
|
||||||
"resource-policies.add.button": "Hinzufügen",
|
"resource-policies.add.button": "Hinzufügen",
|
||||||
|
|
||||||
@@ -4245,8 +4269,8 @@
|
|||||||
// "search.switch-configuration.title": "Show",
|
// "search.switch-configuration.title": "Show",
|
||||||
"search.switch-configuration.title": "Zeige",
|
"search.switch-configuration.title": "Zeige",
|
||||||
|
|
||||||
// "search.title": "DSpace Angular :: Search",
|
// "search.title": "Search",
|
||||||
"search.title": "DSpace Angular :: Suche",
|
"search.title": "Suche",
|
||||||
|
|
||||||
// "search.breadcrumbs": "Search",
|
// "search.breadcrumbs": "Search",
|
||||||
"search.breadcrumbs": "Suche",
|
"search.breadcrumbs": "Suche",
|
||||||
@@ -4615,6 +4639,8 @@
|
|||||||
"statistics.table.header.views": "Aufrufe",
|
"statistics.table.header.views": "Aufrufe",
|
||||||
|
|
||||||
|
|
||||||
|
// "submission.edit.breadcrumbs": "Edit Submission",
|
||||||
|
"submission.edit.breadcrumbs": "Einreichung bearbeiten",
|
||||||
|
|
||||||
// "submission.edit.title": "Edit Submission",
|
// "submission.edit.title": "Edit Submission",
|
||||||
"submission.edit.title": "Einreichung bearbeiten",
|
"submission.edit.title": "Einreichung bearbeiten",
|
||||||
@@ -4640,6 +4666,12 @@
|
|||||||
// "submission.general.discard.submit": "Discard",
|
// "submission.general.discard.submit": "Discard",
|
||||||
"submission.general.discard.submit": "Verwerfen",
|
"submission.general.discard.submit": "Verwerfen",
|
||||||
|
|
||||||
|
// "submission.general.info.saved": "Saved",
|
||||||
|
"submission.general.info.saved": "Gespeichert",
|
||||||
|
|
||||||
|
// "submission.general.info.pending-changes": "Unsaved changes",
|
||||||
|
"submission.general.info.pending-changes": "Ungespeicherte Änderungen",
|
||||||
|
|
||||||
// "submission.general.save": "Save",
|
// "submission.general.save": "Save",
|
||||||
"submission.general.save": "Speichern",
|
"submission.general.save": "Speichern",
|
||||||
|
|
||||||
@@ -5199,7 +5231,7 @@
|
|||||||
"submission.workflow.generic.delete": "Löschen",
|
"submission.workflow.generic.delete": "Löschen",
|
||||||
|
|
||||||
// "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.",
|
// "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.",
|
||||||
"submission.workflow.generic.delete-help": "Wenn Sie dieses Item möchten, wählen Sie bitte \"Löschen\". Sie werden danach um Bestätigung gebeten.",
|
"submission.workflow.generic.delete-help": "Wenn Sie dieses Item verwerfen möchten, wählen Sie bitte \"Löschen\". Sie werden danach um Bestätigung gebeten.",
|
||||||
|
|
||||||
// "submission.workflow.generic.edit": "Edit",
|
// "submission.workflow.generic.edit": "Edit",
|
||||||
"submission.workflow.generic.edit": "Bearbeiten",
|
"submission.workflow.generic.edit": "Bearbeiten",
|
||||||
@@ -5279,6 +5311,13 @@
|
|||||||
// "submission.workflow.tasks.pool.show-detail": "Show detail",
|
// "submission.workflow.tasks.pool.show-detail": "Show detail",
|
||||||
"submission.workflow.tasks.pool.show-detail": "Details anzeigen",
|
"submission.workflow.tasks.pool.show-detail": "Details anzeigen",
|
||||||
|
|
||||||
|
// "submission.workspace.generic.view": "View",
|
||||||
|
"submission.workspace.generic.view": "Anzeige",
|
||||||
|
|
||||||
|
// "submission.workspace.generic.view-help": "Select this option to view the item's metadata.",
|
||||||
|
"submission.workspace.generic.view-help": "Wählen Sie diese Option, um die Metadaten des Items anzuzeigen.",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// "thumbnail.default.alt": "Thumbnail Image",
|
// "thumbnail.default.alt": "Thumbnail Image",
|
||||||
"thumbnail.default.alt": "Vorschaubild",
|
"thumbnail.default.alt": "Vorschaubild",
|
||||||
@@ -5358,10 +5397,14 @@
|
|||||||
"virtual-metadata.delete-relationship.modal-head": "Wählen Sie die Items aus, deren virtuelle Metadaten Sie als echte Metadaten speichern möchten.",
|
"virtual-metadata.delete-relationship.modal-head": "Wählen Sie die Items aus, deren virtuelle Metadaten Sie als echte Metadaten speichern möchten.",
|
||||||
|
|
||||||
|
|
||||||
|
// "workspace.search.results.head": "Your submissions",
|
||||||
|
"workspace.search.results.head": "Ihre Veröffentlichungen",
|
||||||
|
|
||||||
// "workflowAdmin.search.results.head": "Administer Workflow",
|
// "workflowAdmin.search.results.head": "Administer Workflow",
|
||||||
"workflowAdmin.search.results.head": "Workflow verwalten",
|
"workflowAdmin.search.results.head": "Workflow verwalten",
|
||||||
|
|
||||||
|
// "workflow.search.results.head": "Workflow tasks",
|
||||||
|
"workflow.search.results.head": "Workflow-Aufgaben",
|
||||||
|
|
||||||
|
|
||||||
// "workflow-item.delete.notification.success.title": "Deleted",
|
// "workflow-item.delete.notification.success.title": "Deleted",
|
||||||
|
@@ -1291,6 +1291,8 @@
|
|||||||
|
|
||||||
"curation.form.submit.error.content": "An error occured when trying to start the curation task.",
|
"curation.form.submit.error.content": "An error occured when trying to start the curation task.",
|
||||||
|
|
||||||
|
"curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object",
|
||||||
|
|
||||||
"curation.form.handle.label": "Handle:",
|
"curation.form.handle.label": "Handle:",
|
||||||
|
|
||||||
"curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)",
|
"curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)",
|
||||||
|
Reference in New Issue
Block a user