From 5d8d3e35d58f2151e37faff9191159b44c5a33c9 Mon Sep 17 00:00:00 2001 From: Luca Giamminonni Date: Tue, 29 Mar 2022 16:16:22 +0200 Subject: [PATCH 001/504] [CST-5249] Added suggestions from openaire --- .../admin-notifications-routing-paths.ts | 9 + .../admin-notifications-routing.module.ts | 42 + ...uggestion-targets-page-resolver.service.ts | 32 + ...ons-suggestion-targets-page.component.html | 1 + ...ons-suggestion-targets-page.component.scss | 0 ...-suggestion-targets-page.component.spec.ts | 38 + ...tions-suggestion-targets-page.component.ts | 10 + .../admin-notifications.module.ts | 27 + src/app/admin/admin-routing-paths.ts | 5 + src/app/admin/admin-routing.module.ts | 7 +- .../admin-sidebar/admin-sidebar.component.ts | 38 +- src/app/app-routing.module.ts | 6 + src/app/core/core.module.ts | 6 + ...enaire-suggestion-objects.resource-type.ts | 25 + .../openaire-suggestion-source.model.ts | 47 + .../openaire-suggestion-target.model.ts | 60 + .../models/openaire-suggestion.model.ts | 85 + .../openaire-suggestions-data.service.ts | 301 +++ src/app/openaire/openaire.module.ts | 72 + src/app/openaire/openaire.reducer.ts | 19 + .../openaire/reciter-suggestions/selectors.ts | 97 + .../suggestion-actions.component.html | 28 + .../suggestion-actions.component.scss | 1 + .../suggestion-actions.component.ts | 92 + .../suggestion-evidences.component.html | 20 + .../suggestion-evidences.component.scss | 0 .../suggestion-evidences.component.ts | 15 + .../suggestion-list-element.component.html | 44 + .../suggestion-list-element.component.scss | 16 + .../suggestion-list-element.component.ts | 98 + .../suggestion-targets.actions.ts | 154 ++ .../suggestion-targets.component.html | 51 + .../suggestion-targets.component.scss | 0 .../suggestion-targets.component.ts | 150 ++ .../suggestion-targets.effects.ts | 110 + .../suggestion-targets.reducer.ts | 100 + .../suggestion-targets.state.service.ts | 164 ++ .../suggestions-notification.component.html | 8 + .../suggestions-notification.component.scss | 0 .../suggestions-notification.component.ts | 42 + .../suggestions-popup.component.html | 1 + .../suggestions-popup.component.scss | 0 .../suggestions-popup.component.spec.ts | 79 + .../suggestions-popup.component.ts | 67 + .../suggestions.service.ts | 296 +++ src/app/shared/mocks/openaire.mock.ts | 1797 +++++++++++++++++ .../mocks/reciter-suggestion-targets.mock.ts | 42 + .../shared/mocks/reciter-suggestion.mock.ts | 210 ++ .../suggestions-page-routing-paths.ts | 11 + .../suggestions-page-routing.module.ts | 36 + .../suggestions-page.component.html | 48 + .../suggestions-page.component.scss | 0 .../suggestions-page.component.spec.ts | 107 + .../suggestions-page.component.ts | 285 +++ .../suggestions-page.module.ts | 24 + .../suggestions-page.resolver.ts | 32 + src/assets/i18n/en.json5 | 65 + 57 files changed, 5112 insertions(+), 8 deletions(-) create mode 100644 src/app/admin/admin-notifications/admin-notifications-routing-paths.ts create mode 100644 src/app/admin/admin-notifications/admin-notifications-routing.module.ts create mode 100644 src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page-resolver.service.ts create mode 100644 src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.html create mode 100644 src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.scss create mode 100644 src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.spec.ts create mode 100644 src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.ts create mode 100644 src/app/admin/admin-notifications/admin-notifications.module.ts create mode 100644 src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-objects.resource-type.ts create mode 100644 src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts create mode 100644 src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts create mode 100644 src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts create mode 100644 src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts create mode 100644 src/app/openaire/openaire.module.ts create mode 100644 src/app/openaire/openaire.reducer.ts create mode 100644 src/app/openaire/reciter-suggestions/selectors.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.html create mode 100644 src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.scss create mode 100644 src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.html create mode 100644 src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.scss create mode 100644 src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html create mode 100644 src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.scss create mode 100644 src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.html create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.scss create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.html create mode 100644 src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.scss create mode 100644 src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.html create mode 100644 src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.scss create mode 100644 src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.spec.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts create mode 100644 src/app/openaire/reciter-suggestions/suggestions.service.ts create mode 100644 src/app/shared/mocks/openaire.mock.ts create mode 100644 src/app/shared/mocks/reciter-suggestion-targets.mock.ts create mode 100644 src/app/shared/mocks/reciter-suggestion.mock.ts create mode 100644 src/app/suggestions-page/suggestions-page-routing-paths.ts create mode 100644 src/app/suggestions-page/suggestions-page-routing.module.ts create mode 100644 src/app/suggestions-page/suggestions-page.component.html create mode 100644 src/app/suggestions-page/suggestions-page.component.scss create mode 100644 src/app/suggestions-page/suggestions-page.component.spec.ts create mode 100644 src/app/suggestions-page/suggestions-page.component.ts create mode 100644 src/app/suggestions-page/suggestions-page.module.ts create mode 100644 src/app/suggestions-page/suggestions-page.resolver.ts diff --git a/src/app/admin/admin-notifications/admin-notifications-routing-paths.ts b/src/app/admin/admin-notifications/admin-notifications-routing-paths.ts new file mode 100644 index 00000000000..614b2ef49b2 --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications-routing-paths.ts @@ -0,0 +1,9 @@ +import { URLCombiner } from '../../core/url-combiner/url-combiner'; +import { getNotificationsModuleRoute } from '../admin-routing-paths'; + +export const NOTIFICATIONS_EDIT_PATH = 'openaire-broker'; +export const NOTIFICATIONS_RECITER_SUGGESTION_PATH = 'suggestion-targets'; + +export function getNotificationsOpenairebrokerRoute(id: string) { + return new URLCombiner(getNotificationsModuleRoute(), NOTIFICATIONS_EDIT_PATH, id).toString(); +} diff --git a/src/app/admin/admin-notifications/admin-notifications-routing.module.ts b/src/app/admin/admin-notifications/admin-notifications-routing.module.ts new file mode 100644 index 00000000000..12bc7b9ec73 --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications-routing.module.ts @@ -0,0 +1,42 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AuthenticatedGuard } from '../../core/auth/authenticated.guard'; +import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; +import { I18nBreadcrumbsService } from '../../core/breadcrumbs/i18n-breadcrumbs.service'; +import { NOTIFICATIONS_EDIT_PATH, NOTIFICATIONS_RECITER_SUGGESTION_PATH } from './admin-notifications-routing-paths'; +import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component'; +import { AdminNotificationsSuggestionTargetsPageResolver } from './admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page-resolver.service'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + canActivate: [ AuthenticatedGuard ], + path: `${NOTIFICATIONS_RECITER_SUGGESTION_PATH}`, + component: AdminNotificationsSuggestionTargetsPageComponent, + pathMatch: 'full', + resolve: { + breadcrumb: I18nBreadcrumbResolver, + reciterSuggestionTargetParams: AdminNotificationsSuggestionTargetsPageResolver + }, + data: { + title: 'admin.notifications.recitersuggestion.page.title', + breadcrumbKey: 'admin.notifications.recitersuggestion', + showBreadcrumbsFluid: false + } + }, + ]) + ], + providers: [ + I18nBreadcrumbResolver, + I18nBreadcrumbsService, + AdminNotificationsSuggestionTargetsPageResolver + ] +}) +/** + * Routing module for the Notifications section of the admin sidebar + */ +export class AdminNotificationsRoutingModule { + +} diff --git a/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page-resolver.service.ts b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page-resolver.service.ts new file mode 100644 index 00000000000..df1f4b81e69 --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page-resolver.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; + +/** + * Interface for the route parameters. + */ +export interface AdminNotificationsSuggestionTargetsPageParams { + pageId?: string; + pageSize?: number; + currentPage?: number; +} + +/** + * This class represents a resolver that retrieve the route data before the route is activated. + */ +@Injectable() +export class AdminNotificationsSuggestionTargetsPageResolver implements Resolve { + + /** + * Method for resolving the parameters in the current route. + * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot + * @param {RouterStateSnapshot} state The current RouterStateSnapshot + * @returns AdminNotificationsSuggestionTargetsPageParams Emits the route parameters + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): AdminNotificationsSuggestionTargetsPageParams { + return { + pageId: route.queryParams.pageId, + pageSize: parseInt(route.queryParams.pageSize, 10), + currentPage: parseInt(route.queryParams.page, 10) + }; + } +} diff --git a/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.html b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.html new file mode 100644 index 00000000000..5d06a1a6bdd --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.html @@ -0,0 +1 @@ + diff --git a/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.scss b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.spec.ts b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.spec.ts new file mode 100644 index 00000000000..f9e407f4021 --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.spec.ts @@ -0,0 +1,38 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-suggestion-targets-page.component'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; + +describe('AdminNotificationsSuggestionTargetsPageComponent', () => { + let component: AdminNotificationsSuggestionTargetsPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + CommonModule, + TranslateModule.forRoot() + ], + declarations: [ + AdminNotificationsSuggestionTargetsPageComponent + ], + providers: [ + AdminNotificationsSuggestionTargetsPageComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AdminNotificationsSuggestionTargetsPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.ts b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.ts new file mode 100644 index 00000000000..a9a77f50890 --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-admin-notifications-reciter-page', + templateUrl: './admin-notifications-suggestion-targets-page.component.html', + styleUrls: ['./admin-notifications-suggestion-targets-page.component.scss'] +}) +export class AdminNotificationsSuggestionTargetsPageComponent { + +} diff --git a/src/app/admin/admin-notifications/admin-notifications.module.ts b/src/app/admin/admin-notifications/admin-notifications.module.ts new file mode 100644 index 00000000000..47125daad64 --- /dev/null +++ b/src/app/admin/admin-notifications/admin-notifications.module.ts @@ -0,0 +1,27 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { CoreModule } from '../../core/core.module'; +import { SharedModule } from '../../shared/shared.module'; +import { AdminNotificationsRoutingModule } from './admin-notifications-routing.module'; +import { OpenaireModule } from '../../openaire/openaire.module'; +import { AdminNotificationsSuggestionTargetsPageComponent } from './admin-notifications-suggestion-targets-page/admin-notifications-suggestion-targets-page.component'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + CoreModule.forRoot(), + AdminNotificationsRoutingModule, + OpenaireModule + ], + declarations: [ + AdminNotificationsSuggestionTargetsPageComponent + ], + entryComponents: [] +}) +/** + * This module handles all components related to the notifications pages + */ +export class AdminNotificationsModule { + +} diff --git a/src/app/admin/admin-routing-paths.ts b/src/app/admin/admin-routing-paths.ts index 3168ea93c92..30f801cecb7 100644 --- a/src/app/admin/admin-routing-paths.ts +++ b/src/app/admin/admin-routing-paths.ts @@ -2,7 +2,12 @@ import { URLCombiner } from '../core/url-combiner/url-combiner'; import { getAdminModuleRoute } from '../app-routing-paths'; export const REGISTRIES_MODULE_PATH = 'registries'; +export const NOTIFICATIONS_MODULE_PATH = 'notifications'; export function getRegistriesModuleRoute() { return new URLCombiner(getAdminModuleRoute(), REGISTRIES_MODULE_PATH).toString(); } + +export function getNotificationsModuleRoute() { + return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString(); +} diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts index ee5cb8737bc..782a7faa380 100644 --- a/src/app/admin/admin-routing.module.ts +++ b/src/app/admin/admin-routing.module.ts @@ -6,11 +6,16 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service'; import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component'; -import { REGISTRIES_MODULE_PATH } from './admin-routing-paths'; +import { REGISTRIES_MODULE_PATH, NOTIFICATIONS_MODULE_PATH } from './admin-routing-paths'; @NgModule({ imports: [ RouterModule.forChild([ + { + path: NOTIFICATIONS_MODULE_PATH, + loadChildren: () => import('./admin-notifications/admin-notifications.module') + .then((m) => m.AdminNotificationsModule), + }, { path: REGISTRIES_MODULE_PATH, loadChildren: () => import('./admin-registries/admin-registries.module') diff --git a/src/app/admin/admin-sidebar/admin-sidebar.component.ts b/src/app/admin/admin-sidebar/admin-sidebar.component.ts index dc9d2a817ff..dd5d7e507a0 100644 --- a/src/app/admin/admin-sidebar/admin-sidebar.component.ts +++ b/src/app/admin/admin-sidebar/admin-sidebar.component.ts @@ -22,6 +22,7 @@ import { CSSVariableService } from '../../shared/sass-helper/sass-helper.service import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; import { Router, ActivatedRoute } from '@angular/router'; +import {NOTIFICATIONS_RECITER_SUGGESTION_PATH} from "../admin-notifications/admin-notifications-routing-paths"; /** * Component representing the admin sidebar @@ -277,7 +278,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { // link: '' // } as LinkMenuItemModel, // icon: 'chart-bar', - // index: 8 + // index: 9 // }, /* Control Panel */ @@ -292,7 +293,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { // link: '' // } as LinkMenuItemModel, // icon: 'cogs', - // index: 9 + // index: 10 // }, /* Processes */ @@ -306,7 +307,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { link: '/processes' } as LinkMenuItemModel, icon: 'terminal', - index: 10 + index: 12 }, ]; menuList.forEach((menuSection) => this.menuService.addSection(this.menuID, Object.assign(menuSection, { @@ -465,6 +466,29 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { createSiteAdministratorMenuSections() { this.authorizationService.isAuthorized(FeatureID.AdministratorOf).subscribe((authorized) => { const menuList = [ + /* Notifications */ + { + id: 'notifications', + active: false, + visible: authorized, + model: { + type: MenuItemType.TEXT, + text: 'menu.section.notifications' + } as TextMenuItemModel, + icon: 'bell', + index: 4 + }, + { + id: 'notifications_reciter', + parentID: 'notifications', + active: false, + visible: authorized, + model: { + type: MenuItemType.LINK, + text: 'menu.section.notifications_reciter', + link: '/admin/notifications/' + NOTIFICATIONS_RECITER_SUGGESTION_PATH + } as LinkMenuItemModel, + }, /* Admin Search */ { id: 'admin_search', @@ -476,7 +500,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { link: '/admin/search' } as LinkMenuItemModel, icon: 'search', - index: 5 + index: 6 }, /* Registries */ { @@ -488,7 +512,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { text: 'menu.section.registries' } as TextMenuItemModel, icon: 'list', - index: 6 + index: 7 }, { id: 'registries_metadata', @@ -524,7 +548,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { link: 'admin/curation-tasks' } as LinkMenuItemModel, icon: 'filter', - index: 7 + index: 8 }, /* Workflow */ @@ -601,7 +625,7 @@ export class AdminSidebarComponent extends MenuComponent implements OnInit { text: 'menu.section.access_control' } as TextMenuItemModel, icon: 'key', - index: 4 + index: 5 }, ]; diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 88f7791b1b2..9bf55185584 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -30,6 +30,7 @@ import { ThemedForbiddenComponent } from './forbidden/themed-forbidden.component import { GroupAdministratorGuard } from './core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; import { ThemedPageInternalServerErrorComponent } from './page-internal-server-error/themed-page-internal-server-error.component'; import { ServerCheckGuard } from './core/server-check/server-check.guard'; +import { SUGGESTION_MODULE_PATH } from './suggestions-page/suggestions-page-routing-paths'; @NgModule({ imports: [ @@ -190,6 +191,11 @@ import { ServerCheckGuard } from './core/server-check/server-check.guard'; .then((m) => m.ProcessPageModule), canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard] }, + { path: SUGGESTION_MODULE_PATH, + loadChildren: () => import('./suggestions-page/suggestions-page.module') + .then((m) => m.SuggestionsPageModule), + canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard] + }, { path: INFO_MODULE_PATH, loadChildren: () => import('./info/info.module').then((m) => m.InfoModule) diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 8d8a614a899..6293fbd1092 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -162,6 +162,9 @@ import { SearchConfig } from './shared/search/search-filters/search-config.model import { SequenceService } from './shared/sequence.service'; import { GroupDataService } from './eperson/group-data.service'; import { SubmissionAccessesModel } from './config/models/config-submission-accesses.model'; +import { OpenaireSuggestionTarget } from './openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { OpenaireSuggestion } from './openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { OpenaireSuggestionSource } from './openaire/reciter-suggestions/models/openaire-suggestion-source.model'; /** * When not in production, endpoint responses can be mocked for testing purposes @@ -343,6 +346,9 @@ export const models = ShortLivedToken, Registration, UsageReport, + OpenaireSuggestion, + OpenaireSuggestionTarget, + OpenaireSuggestionSource, Root, SearchConfig, SubmissionAccessesModel diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-objects.resource-type.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-objects.resource-type.ts new file mode 100644 index 00000000000..e31006959ff --- /dev/null +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-objects.resource-type.ts @@ -0,0 +1,25 @@ +import { ResourceType } from '../../../shared/resource-type'; + +/** + * The resource type for the Suggestion Target object + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const SUGGESTION_TARGET = new ResourceType('suggestiontarget'); + +/** + * The resource type for the Suggestion Source object + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const SUGGESTION_SOURCE = new ResourceType('suggestionsource'); + +/** + * The resource type for the Suggestion object + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const SUGGESTION = new ResourceType('suggestion'); diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts new file mode 100644 index 00000000000..6da9fd47b9b --- /dev/null +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts @@ -0,0 +1,47 @@ +import { autoserialize, deserialize } from 'cerialize'; + +import { CacheableObject } from '../../../cache/object-cache.reducer'; +import { SUGGESTION_SOURCE } from './openaire-suggestion-objects.resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { ResourceType } from '../../../shared/resource-type'; +import { HALLink } from '../../../shared/hal-link.model'; +import { typedObject } from '../../../cache/builders/build-decorators'; + +/** + * The interface representing the Suggestion Source model + */ +@typedObject +export class OpenaireSuggestionSource implements CacheableObject { + /** + * A string representing the kind of object, e.g. community, item, … + */ + static type = SUGGESTION_SOURCE; + + /** + * The Suggestion Target id + */ + @autoserialize + id: string; + + /** + * The total number of suggestions provided by Suggestion Target for + */ + @autoserialize + total: number; + + /** + * The type of this ConfigObject + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + /** + * The links to all related resources returned by the rest api. + */ + @deserialize + _links: { + self: HALLink, + suggestiontargets: HALLink + }; +} diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts new file mode 100644 index 00000000000..e35972bc798 --- /dev/null +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts @@ -0,0 +1,60 @@ +import { autoserialize, deserialize } from 'cerialize'; + +import { CacheableObject } from '../../../cache/object-cache.reducer'; +import { SUGGESTION_TARGET } from './openaire-suggestion-objects.resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { ResourceType } from '../../../shared/resource-type'; +import { HALLink } from '../../../shared/hal-link.model'; +import { typedObject } from '../../../cache/builders/build-decorators'; + +/** + * The interface representing the Suggestion Target model + */ +@typedObject +export class OpenaireSuggestionTarget implements CacheableObject { + /** + * A string representing the kind of object, e.g. community, item, … + */ + static type = SUGGESTION_TARGET; + + /** + * The Suggestion Target id + */ + @autoserialize + id: string; + + /** + * The Suggestion Target name to display + */ + @autoserialize + display: string; + + /** + * The Suggestion Target source to display + */ + @autoserialize + source: string; + + /** + * The total number of suggestions provided by Suggestion Target for + */ + @autoserialize + total: number; + + /** + * The type of this ConfigObject + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + /** + * The links to all related resources returned by the rest api. + */ + @deserialize + _links: { + self: HALLink, + suggestions: HALLink, + target: HALLink + }; +} diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts new file mode 100644 index 00000000000..3ff5d7b630c --- /dev/null +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts @@ -0,0 +1,85 @@ +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; + +import { CacheableObject } from '../../../cache/object-cache.reducer'; +import { SUGGESTION } from './openaire-suggestion-objects.resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { ResourceType } from '../../../shared/resource-type'; +import { HALLink } from '../../../shared/hal-link.model'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { MetadataMap, MetadataMapSerializer } from '../../../shared/metadata.models'; + +export interface SuggestionEvidences { + [sectionId: string]: { + score: string; + notes: string + }; +} +/** + * The interface representing the Suggestion Source model + */ +@typedObject +export class OpenaireSuggestion implements CacheableObject { + /** + * A string representing the kind of object, e.g. community, item, … + */ + static type = SUGGESTION; + + /** + * The Suggestion id + */ + @autoserialize + id: string; + + /** + * The Suggestion name to display + */ + @autoserialize + display: string; + + /** + * The Suggestion source to display + */ + @autoserialize + source: string; + + /** + * The Suggestion external source uri + */ + @autoserialize + externalSourceUri: string; + + /** + * The Total Score of the suggestion + */ + @autoserialize + score: string; + + /** + * The total number of suggestions provided by Suggestion Target for + */ + @autoserialize + evidences: SuggestionEvidences; + + /** + * All metadata of this suggestion object + */ + @excludeFromEquals + @autoserializeAs(MetadataMapSerializer) + metadata: MetadataMap; + + /** + * The type of this ConfigObject + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + /** + * The links to all related resources returned by the rest api. + */ + @deserialize + _links: { + self: HALLink, + target: HALLink + }; +} diff --git a/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts b/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts new file mode 100644 index 00000000000..d961eaf9b52 --- /dev/null +++ b/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts @@ -0,0 +1,301 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Store } from '@ngrx/store'; + +import { Observable } from 'rxjs'; + +import { CoreState } from '../../core.reducers'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { dataService } from '../../cache/builders/build-decorators'; +import { RequestService } from '../../data/request.service'; +import { FindListOptions } from '../../data/request.models'; +import { DataService } from '../../data/data.service'; +import { ChangeAnalyzer } from '../../data/change-analyzer'; +import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service'; +import { RemoteData } from '../../data/remote-data'; +import { SUGGESTION_TARGET } from './models/openaire-suggestion-objects.resource-type'; +import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; +import { PaginatedList } from '../../data/paginated-list.model'; +import { OpenaireSuggestionSource } from './models/openaire-suggestion-source.model'; +import { OpenaireSuggestionTarget } from './models/openaire-suggestion-target.model'; +import { OpenaireSuggestion } from './models/openaire-suggestion.model'; +import { RequestParam } from '../../cache/models/request-param.model'; +import { NoContent } from '../../shared/NoContent.model'; + +/* tslint:disable:max-classes-per-file */ + +/** + * A private DataService implementation to delegate specific methods to. + */ +class SuggestionDataServiceImpl extends DataService { + /** + * The REST endpoint. + */ + protected linkPath = 'suggestions'; + + /** + * Initialize service variables + * @param {RequestService} requestService + * @param {RemoteDataBuildService} rdbService + * @param {Store} store + * @param {ObjectCacheService} objectCache + * @param {HALEndpointService} halService + * @param {NotificationsService} notificationsService + * @param {HttpClient} http + * @param {ChangeAnalyzer} comparator + */ + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected store: Store, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + protected notificationsService: NotificationsService, + protected http: HttpClient, + protected comparator: ChangeAnalyzer) { + super(); + } +} + +/** + * A private DataService implementation to delegate specific methods to. + */ +class SuggestionTargetsDataServiceImpl extends DataService { + /** + * The REST endpoint. + */ + protected linkPath = 'suggestiontargets'; + + /** + * Initialize service variables + * @param {RequestService} requestService + * @param {RemoteDataBuildService} rdbService + * @param {Store} store + * @param {ObjectCacheService} objectCache + * @param {HALEndpointService} halService + * @param {NotificationsService} notificationsService + * @param {HttpClient} http + * @param {ChangeAnalyzer} comparator + */ + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected store: Store, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + protected notificationsService: NotificationsService, + protected http: HttpClient, + protected comparator: ChangeAnalyzer) { + super(); + } +} + +/** + * A private DataService implementation to delegate specific methods to. + */ +class SuggestionSourcesDataServiceImpl extends DataService { + /** + * The REST endpoint. + */ + protected linkPath = 'suggestionsources'; + + /** + * Initialize service variables + * @param {RequestService} requestService + * @param {RemoteDataBuildService} rdbService + * @param {Store} store + * @param {ObjectCacheService} objectCache + * @param {HALEndpointService} halService + * @param {NotificationsService} notificationsService + * @param {HttpClient} http + * @param {ChangeAnalyzer} comparator + */ + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected store: Store, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + protected notificationsService: NotificationsService, + protected http: HttpClient, + protected comparator: ChangeAnalyzer) { + super(); + } +} + +/** + * The service handling all Suggestion Target REST requests. + */ +@Injectable() +@dataService(SUGGESTION_TARGET) +export class OpenaireSuggestionsDataService { + protected searchFindBySourceMethod = 'findBySource'; + protected searchFindByTargetMethod = 'findByTarget'; + protected searchFindByTargetAndSourceMethod = 'findByTargetAndSource'; + + /** + * A private DataService implementation to delegate specific methods to. + */ + private suggestionsDataService: SuggestionDataServiceImpl; + + /** + * A private DataService implementation to delegate specific methods to. + */ + private suggestionSourcesDataService: SuggestionSourcesDataServiceImpl; + + /** + * A private DataService implementation to delegate specific methods to. + */ + private suggestionTargetsDataService: SuggestionTargetsDataServiceImpl; + + /** + * Initialize service variables + * @param {RequestService} requestService + * @param {RemoteDataBuildService} rdbService + * @param {ObjectCacheService} objectCache + * @param {HALEndpointService} halService + * @param {NotificationsService} notificationsService + * @param {HttpClient} http + * @param {DefaultChangeAnalyzer} comparatorSuggestions + * @param {DefaultChangeAnalyzer} comparatorSources + * @param {DefaultChangeAnalyzer} comparatorTargets + */ + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + protected notificationsService: NotificationsService, + protected http: HttpClient, + protected comparatorSuggestions: DefaultChangeAnalyzer, + protected comparatorSources: DefaultChangeAnalyzer, + protected comparatorTargets: DefaultChangeAnalyzer, + ) { + this.suggestionsDataService = new SuggestionDataServiceImpl(requestService, rdbService, null, objectCache, halService, notificationsService, http, comparatorSuggestions); + this.suggestionSourcesDataService = new SuggestionSourcesDataServiceImpl(requestService, rdbService, null, objectCache, halService, notificationsService, http, comparatorSources); + this.suggestionTargetsDataService = new SuggestionTargetsDataServiceImpl(requestService, rdbService, null, objectCache, halService, notificationsService, http, comparatorTargets); + } + + /** + * Return the list of Suggestion Target + * + * @param options + * Find list options object. + * @return Observable>> + * The list of Suggestion Sources. + */ + public getSources(options: FindListOptions = {}): Observable>> { + return this.suggestionSourcesDataService.findAll(options); + } + + /** + * Return the list of Suggestion Target for a given source + * + * @param source + * The source for which to find targets. + * @param options + * Find list options object. + * @param linksToFollow + * List of {@link FollowLinkConfig} that indicate which {@link HALLink}s should be automatically resolved. + * @return Observable>> + * The list of Suggestion Target. + */ + public getTargets( + source: string, + options: FindListOptions = {}, + ...linksToFollow: FollowLinkConfig[] + ): Observable>> { + options.searchParams = [new RequestParam('source', source)]; + + return this.suggestionTargetsDataService.searchBy(this.searchFindBySourceMethod, options, true, true, ...linksToFollow); + } + + /** + * Return the list of Suggestion Target for a given user + * + * @param userId + * The user Id for which to find targets. + * @param options + * Find list options object. + * @param linksToFollow + * List of {@link FollowLinkConfig} that indicate which {@link HALLink}s should be automatically resolved. + * @return Observable>> + * The list of Suggestion Target. + */ + public getTargetsByUser( + userId: string, + options: FindListOptions = {}, + ...linksToFollow: FollowLinkConfig[] + ): Observable>> { + options.searchParams = [new RequestParam('target', userId)]; + + return this.suggestionTargetsDataService.searchBy(this.searchFindByTargetMethod, options, true, true, ...linksToFollow); + } + + /** + * Return a Suggestion Target for a given id + * + * @param targetId + * The target id to retrieve. + * + * @return Observable> + * The list of Suggestion Target. + */ + public getTargetById(targetId: string): Observable> { + return this.suggestionTargetsDataService.findById(targetId); + } + + /** + * Used to delete Suggestion + * @suggestionId + */ + public deleteSuggestion(suggestionId: string): Observable> { + return this.suggestionsDataService.delete(suggestionId); + } + + /** + * Used to fetch Suggestion notification for user + * @suggestionId + */ + public getSuggestion(suggestionId: string, ...linksToFollow: FollowLinkConfig[]): Observable> { + return this.suggestionsDataService.findById(suggestionId, true, true, ...linksToFollow); + } + + /** + * Return the list of Suggestion for a given target and source + * + * @param target + * The target for which to find suggestions. + * @param source + * The source for which to find suggestions. + * @param options + * Find list options object. + * @param linksToFollow + * List of {@link FollowLinkConfig} that indicate which {@link HALLink}s should be automatically resolved. + * @return Observable>> + * The list of Suggestion. + */ + public getSuggestionsByTargetAndSource( + target: string, + source: string, + options: FindListOptions = {}, + ...linksToFollow: FollowLinkConfig[] + ): Observable>> { + options.searchParams = [ + new RequestParam('target', target), + new RequestParam('source', source) + ]; + + return this.suggestionsDataService.searchBy(this.searchFindByTargetAndSourceMethod, options, true, true, ...linksToFollow); + } + + /** + * Clear findByTargetAndSource suggestions requests from cache + */ + public clearSuggestionRequests() { + this.requestService.setStaleByHrefSubstring(this.searchFindByTargetAndSourceMethod); + } +} diff --git a/src/app/openaire/openaire.module.ts b/src/app/openaire/openaire.module.ts new file mode 100644 index 00000000000..22d04f3002b --- /dev/null +++ b/src/app/openaire/openaire.module.ts @@ -0,0 +1,72 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Action, StoreConfig, StoreModule } from '@ngrx/store'; +import { EffectsModule } from '@ngrx/effects'; + +import { CoreModule } from '../core/core.module'; +import { SharedModule } from '../shared/shared.module'; +import { storeModuleConfig } from '../app.reducer'; +import { openaireReducers, OpenaireState } from './openaire.reducer'; +import { SuggestionTargetsStateService } from './reciter-suggestions/suggestion-targets/suggestion-targets.state.service'; +import { SuggestionsService } from './reciter-suggestions/suggestions.service'; +import { OpenaireSuggestionsDataService } from '../core/openaire/reciter-suggestions/openaire-suggestions-data.service'; +import { SuggestionTargetsComponent } from './reciter-suggestions/suggestion-targets/suggestion-targets.component'; +import { SuggestionListElementComponent } from './reciter-suggestions/suggestion-list-element/suggestion-list-element.component'; +import { SuggestionEvidencesComponent } from './reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component'; +import { SuggestionActionsComponent } from './reciter-suggestions/suggestion-actions/suggestion-actions.component'; +import { SuggestionsPopupComponent } from './reciter-suggestions/suggestions-popup/suggestions-popup.component'; +import { SuggestionsNotificationComponent } from './reciter-suggestions/suggestions-notification/suggestions-notification.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { SearchModule } from '../shared/search/search.module'; + +const MODULES = [ + CommonModule, + SharedModule, + CoreModule.forRoot(), + StoreModule.forFeature('openaire', openaireReducers, storeModuleConfig as StoreConfig), + TranslateModule +]; + +const COMPONENTS = [ + SuggestionTargetsComponent, + SuggestionActionsComponent, + SuggestionListElementComponent, + SuggestionEvidencesComponent, + SuggestionsPopupComponent, + SuggestionsNotificationComponent +]; + +const DIRECTIVES = [ ]; + + +const PROVIDERS = [ + SuggestionTargetsStateService, + SuggestionsService, + OpenaireSuggestionsDataService +]; + +@NgModule({ + imports: [ + ...MODULES, + SearchModule + ], + declarations: [ + ...COMPONENTS, + ...DIRECTIVES, + ], + providers: [ + ...PROVIDERS + ], + entryComponents: [ + ], + exports: [ + ...COMPONENTS, + ...DIRECTIVES + ] +}) + +/** + * This module handles all components that are necessary for the OpenAIRE components + */ +export class OpenaireModule { +} diff --git a/src/app/openaire/openaire.reducer.ts b/src/app/openaire/openaire.reducer.ts new file mode 100644 index 00000000000..cacf3c72834 --- /dev/null +++ b/src/app/openaire/openaire.reducer.ts @@ -0,0 +1,19 @@ +import { ActionReducerMap, createFeatureSelector } from '@ngrx/store'; + +import { + SuggestionTargetsReducer, + SuggestionTargetState +} from './reciter-suggestions/suggestion-targets/suggestion-targets.reducer'; + +/** + * The OpenAIRE State + */ +export interface OpenaireState { + 'suggestionTarget': SuggestionTargetState; +} + +export const openaireReducers: ActionReducerMap = { + suggestionTarget: SuggestionTargetsReducer, +}; + +export const openaireSelector = createFeatureSelector('openaire'); diff --git a/src/app/openaire/reciter-suggestions/selectors.ts b/src/app/openaire/reciter-suggestions/selectors.ts new file mode 100644 index 00000000000..e699b27dbae --- /dev/null +++ b/src/app/openaire/reciter-suggestions/selectors.ts @@ -0,0 +1,97 @@ +import { createSelector, MemoizedSelector } from '@ngrx/store'; +import { subStateSelector } from '../../shared/selector.util'; +import { openaireSelector, OpenaireState } from '../openaire.reducer'; +import { OpenaireSuggestionTarget } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTargetState } from './suggestion-targets/suggestion-targets.reducer'; + +/** + * Returns the Reciter Suggestion Target state. + * @function _getReciterSuggestionTargetState + * @param {AppState} state Top level state. + * @return {OpenaireState} + */ +const _getReciterSuggestionTargetState = (state: any) => state.openaire; + +// Reciter Suggestion Targets +// ---------------------------------------------------------------------------- + +/** + * Returns the Reciter Suggestion Targets State. + * @function reciterSuggestionTargetStateSelector + * @return {OpenaireState} + */ +export function reciterSuggestionTargetStateSelector(): MemoizedSelector { + return subStateSelector(openaireSelector, 'suggestionTarget'); +} + +/** + * Returns the Reciter Suggestion Targets list. + * @function reciterSuggestionTargetObjectSelector + * @return {OpenaireReciterSuggestionTarget[]} + */ +export function reciterSuggestionTargetObjectSelector(): MemoizedSelector { + return subStateSelector(reciterSuggestionTargetStateSelector(), 'targets'); +} + +/** + * Returns true if the Reciter Suggestion Targets are loaded. + * @function isReciterSuggestionTargetLoadedSelector + * @return {boolean} + */ +export const isReciterSuggestionTargetLoadedSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.loaded +); + +/** + * Returns true if the deduplication sets are processing. + * @function isDeduplicationSetsProcessingSelector + * @return {boolean} + */ +export const isreciterSuggestionTargetProcessingSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.processing +); + +/** + * Returns the total available pages of Reciter Suggestion Targets. + * @function getreciterSuggestionTargetTotalPagesSelector + * @return {number} + */ +export const getreciterSuggestionTargetTotalPagesSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.totalPages +); + +/** + * Returns the current page of Reciter Suggestion Targets. + * @function getreciterSuggestionTargetCurrentPageSelector + * @return {number} + */ +export const getreciterSuggestionTargetCurrentPageSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.currentPage +); + +/** + * Returns the total number of Reciter Suggestion Targets. + * @function getreciterSuggestionTargetTotalsSelector + * @return {number} + */ +export const getreciterSuggestionTargetTotalsSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.totalElements +); + +/** + * Returns Suggestion Targets for the current user. + * @function getCurrentUserReciterSuggestionTargetSelector + * @return {OpenaireSuggestionTarget[]} + */ +export const getCurrentUserSuggestionTargetsSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.currentUserTargets +); + +/** + * Returns whether or not the user has consulted their suggestions + * @function getCurrentUserReciterSuggestionTargetSelector + * @return {boolean} + */ +export const getCurrentUserSuggestionTargetsVisitedSelector = createSelector(_getReciterSuggestionTargetState, + (state: OpenaireState) => state.suggestionTarget.currentUserTargetsVisited +); diff --git a/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.html b/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.html new file mode 100644 index 00000000000..7ec3e61395e --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.html @@ -0,0 +1,28 @@ +
+
+ + + + + + + +
+ + +
diff --git a/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.scss b/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.scss new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.scss @@ -0,0 +1 @@ + diff --git a/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts b/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts new file mode 100644 index 00000000000..cf219011237 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts @@ -0,0 +1,92 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { ItemType } from '../../../core/shared/item-relationships/item-type.model'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { OpenaireSuggestion } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { SuggestionApproveAndImport } from '../suggestion-list-element/suggestion-list-element.component'; +import { Collection } from '../../../core/shared/collection.model'; +import { take } from 'rxjs/operators'; +import { CreateItemParentSelectorComponent } from '../../../shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; + +@Component({ + selector: 'ds-suggestion-actions', + styleUrls: [ './suggestion-actions.component.scss' ], + templateUrl: './suggestion-actions.component.html' +}) +export class SuggestionActionsComponent { + + @Input() object: OpenaireSuggestion; + + @Input() isBulk = false; + + @Input() hasEvidence = false; + + @Input() seeEvidence = false; + + @Input() isCollectionFixed = false; + + /** + * The component is used to Delete suggestion + */ + @Output() notMineClicked = new EventEmitter(); + + /** + * The component is used to approve & import + */ + @Output() approveAndImport = new EventEmitter(); + + /** + * The component is used to approve & import + */ + @Output() seeEvidences = new EventEmitter(); + + constructor(private modalService: NgbModal) { } + + /** + * Method called on clicking the button "approve & import", It opens a dialog for + * select a collection and it emits an approveAndImport event. + */ + openDialog(entity: ItemType) { + + const modalRef = this.modalService.open(CreateItemParentSelectorComponent); + modalRef.componentInstance.emitOnly = true; + modalRef.componentInstance.entityType = entity.label; + + modalRef.componentInstance.select.pipe(take(1)) + .subscribe((collection: Collection) => { + this.approveAndImport.emit({ + suggestion: this.isBulk ? undefined : this.object, + collectionId: collection.id + }); + }); + } + + approveAndImportCollectionFixed() { + this.approveAndImport.emit({ + suggestion: this.isBulk ? undefined : this.object, + collectionId: null + }); + } + + + /** + * Delete the suggestion + */ + notMine() { + this.notMineClicked.emit(this.isBulk ? undefined : this.object.id); + } + + /** + * Toggle See Evidence + */ + toggleSeeEvidences() { + this.seeEvidences.emit(!this.seeEvidence); + } + + notMineLabel(): string { + return this.isBulk ? 'reciter.suggestion.notMine.bulk' : 'reciter.suggestion.notMine' ; + } + + approveAndImportLabel(): string { + return this.isBulk ? 'reciter.suggestion.approveAndImport.bulk' : 'reciter.suggestion.approveAndImport'; + } +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.html b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.html new file mode 100644 index 00000000000..5ad4f0a9783 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.html @@ -0,0 +1,20 @@ +
+
+ + + + + + + + + + + + + + + +
{{'reciter.suggestion.evidence.score' | translate}}{{'reciter.suggestion.evidence.type' | translate}}{{'reciter.suggestion.evidence.notes' | translate}}
{{evidences[evidence].score}}{{evidence | translate}}{{evidences[evidence].notes}}
+
+
diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.scss b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts new file mode 100644 index 00000000000..e0536ae7234 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts @@ -0,0 +1,15 @@ +import { Component, Input } from '@angular/core'; +import { fadeIn } from '../../../../shared/animations/fade'; +import { SuggestionEvidences } from '../../../../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; + +@Component({ + selector: 'ds-suggestion-evidences', + styleUrls: [ './suggestion-evidences.component.scss' ], + templateUrl: './suggestion-evidences.component.html', + animations: [fadeIn] +}) +export class SuggestionEvidencesComponent { + + @Input() evidences: SuggestionEvidences; + +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html new file mode 100644 index 00000000000..05f9c0ac771 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html @@ -0,0 +1,44 @@ +
+
+ +
+
+ +
+
+ +
+
+
{{'reciter.suggestion.totalScore' | translate}}
+ {{ object.score }} +
+
+ +
+ + + + +
+
+ +
+
+ +
+
+
+
diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.scss b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.scss new file mode 100644 index 00000000000..1c522095189 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.scss @@ -0,0 +1,16 @@ +.issue-date { + color: #c8c8c8; +} + +.parent { + display: flex; + gap:10px; +} + +.import { + flex: initial; +} + +.suggestion-score { + font-size: 1.5rem; +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts new file mode 100644 index 00000000000..8227dc3213b --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts @@ -0,0 +1,98 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; + +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; + +import { fadeIn } from '../../../shared/animations/fade'; +import { OpenaireSuggestion } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { Item } from '../../../core/shared/item.model'; +import { isNotEmpty } from '../../../shared/empty.util'; + +export interface SuggestionApproveAndImport { + suggestion: OpenaireSuggestion; + collectionId: string; +} + +@Component({ + selector: 'ds-suggestion-list-item', + styleUrls: ['./suggestion-list-element.component.scss'], + templateUrl: './suggestion-list-element.component.html', + animations: [fadeIn] +}) +export class SuggestionListElementComponent implements OnInit { + + @Input() object: OpenaireSuggestion; + + @Input() isSelected = false; + + @Input() isCollectionFixed = false; + + public listableObject: any; + + public seeEvidence = false; + + /** + * The component is used to Delete suggestion + */ + @Output() notMineClicked = new EventEmitter(); + + /** + * The component is used to approve & import + */ + @Output() approveAndImport = new EventEmitter(); + + /** + * New value whether the element is selected + */ + @Output() selected = new EventEmitter(); + + /** + * Initialize instance variables + * + * @param {NgbModal} modalService + */ + constructor(private modalService: NgbModal) { } + + ngOnInit() { + this.listableObject = { + indexableObject: Object.assign(new Item(), {id: this.object.id, metadata: this.object.metadata}), + hitHighlights: {} + }; + } + + /** + * Approve and import the suggestion + */ + onApproveAndImport(event: SuggestionApproveAndImport) { + this.approveAndImport.emit(event); + } + + /** + * Delete the suggestion + */ + onNotMine(suggestionId: string) { + this.notMineClicked.emit(suggestionId); + } + + /** + * Change is selected value. + */ + changeSelected(event) { + this.isSelected = event.target.checked; + this.selected.next(this.isSelected); + } + + /** + * See the Evidence + */ + hasEvidences() { + return isNotEmpty(this.object.evidences); + } + + /** + * Set the see evidence variable. + */ + onSeeEvidences(seeEvidence: boolean) { + this.seeEvidence = seeEvidence; + } + +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts new file mode 100644 index 00000000000..6c44d40b915 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts @@ -0,0 +1,154 @@ +import { Action } from '@ngrx/store'; +import { type } from '../../../shared/ngrx/type'; +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; + +/** + * For each action type in an action group, make a simple + * enum object for all of this group's action types. + * + * The 'type' utility function coerces strings into string + * literal types and runs a simple check to guarantee all + * action types in the application are unique. + */ +export const SuggestionTargetActionTypes = { + ADD_TARGETS: type('dspace/integration/openaire/suggestions/target/ADD_TARGETS'), + CLEAR_TARGETS: type('dspace/integration/openaire/suggestions/target/CLEAR_TARGETS'), + RETRIEVE_TARGETS_BY_SOURCE: type('dspace/integration/openaire/suggestions/target/RETRIEVE_TARGETS_BY_SOURCE'), + RETRIEVE_TARGETS_BY_SOURCE_ERROR: type('dspace/integration/openaire/suggestions/target/RETRIEVE_TARGETS_BY_SOURCE_ERROR'), + ADD_USER_SUGGESTIONS: type('dspace/integration/openaire/suggestions/target/ADD_USER_SUGGESTIONS'), + REFRESH_USER_SUGGESTIONS: type('dspace/integration/openaire/suggestions/target/REFRESH_USER_SUGGESTIONS'), + MARK_USER_SUGGESTIONS_AS_VISITED: type('dspace/integration/openaire/suggestions/target/MARK_USER_SUGGESTIONS_AS_VISITED') +}; + +/* tslint:disable:max-classes-per-file */ + +/** + * An ngrx action to retrieve all the Suggestion Targets. + */ +export class RetrieveTargetsBySourceAction implements Action { + type = SuggestionTargetActionTypes.RETRIEVE_TARGETS_BY_SOURCE; + payload: { + source: string; + elementsPerPage: number; + currentPage: number; + }; + + /** + * Create a new RetrieveTargetsBySourceAction. + * + * @param source + * the source for which to retrieve suggestion targets + * @param elementsPerPage + * the number of targets per page + * @param currentPage + * The page number to retrieve + */ + constructor(source: string, elementsPerPage: number, currentPage: number) { + this.payload = { + source, + elementsPerPage, + currentPage + }; + } +} + +/** + * An ngrx action for retrieving 'all Suggestion Targets' error. + */ +export class RetrieveAllTargetsErrorAction implements Action { + type = SuggestionTargetActionTypes.RETRIEVE_TARGETS_BY_SOURCE_ERROR; +} + +/** + * An ngrx action to load the Suggestion Target objects. + */ +export class AddTargetAction implements Action { + type = SuggestionTargetActionTypes.ADD_TARGETS; + payload: { + targets: OpenaireSuggestionTarget[]; + totalPages: number; + currentPage: number; + totalElements: number; + }; + + /** + * Create a new AddTargetAction. + * + * @param targets + * the list of targets + * @param totalPages + * the total available pages of targets + * @param currentPage + * the current page + * @param totalElements + * the total available Suggestion Targets + */ + constructor(targets: OpenaireSuggestionTarget[], totalPages: number, currentPage: number, totalElements: number) { + this.payload = { + targets, + totalPages, + currentPage, + totalElements + }; + } + +} + +/** + * An ngrx action to load the user Suggestion Target object. + * Called by the ??? effect. + */ +export class AddUserSuggestionsAction implements Action { + type = SuggestionTargetActionTypes.ADD_USER_SUGGESTIONS; + payload: { + suggestionTargets: OpenaireSuggestionTarget[]; + }; + + /** + * Create a new AddUserSuggestionsAction. + * + * @param suggestionTargets + * the user suggestions target + */ + constructor(suggestionTargets: OpenaireSuggestionTarget[]) { + this.payload = { suggestionTargets }; + } + +} + +/** + * An ngrx action to reload the user Suggestion Target object. + * Called by the ??? effect. + */ +export class RefreshUserSuggestionsAction implements Action { + type = SuggestionTargetActionTypes.REFRESH_USER_SUGGESTIONS; +} + +/** + * An ngrx action to Mark User Suggestions As Visited. + * Called by the ??? effect. + */ +export class MarkUserSuggestionsAsVisitedAction implements Action { + type = SuggestionTargetActionTypes.MARK_USER_SUGGESTIONS_AS_VISITED; +} + +/** + * An ngrx action to clear targets state. + */ +export class ClearSuggestionTargetsAction implements Action { + type = SuggestionTargetActionTypes.CLEAR_TARGETS; +} + +/* tslint:enable:max-classes-per-file */ + +/** + * Export a type alias of all actions in this action group + * so that reducers can easily compose action types. + */ +export type SuggestionTargetsActions + = AddTargetAction + | AddUserSuggestionsAction + | ClearSuggestionTargetsAction + | MarkUserSuggestionsAsVisitedAction + | RetrieveTargetsBySourceAction + | RetrieveAllTargetsErrorAction; diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.html b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.html new file mode 100644 index 00000000000..791e694ba90 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.html @@ -0,0 +1,51 @@ +
+
+
+ + + + + + + + +
+ + + + + + + + + + + + + +
{{'reciter.suggestion.table.name' | translate}}{{'reciter.suggestion.table.actions' | translate}}
+ {{targetElement.display}} + +
+ +
+
+
+
+
+
+
+
diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.scss b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts new file mode 100644 index 00000000000..b9ed6c4e87b --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts @@ -0,0 +1,150 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Observable, Subscription } from 'rxjs'; +import { distinctUntilChanged, take } from 'rxjs/operators'; + +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { hasValue } from '../../../shared/empty.util'; +import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; +import { SuggestionTargetsStateService } from './suggestion-targets.state.service'; +import { getSuggestionPageRoute } from '../../../suggestions-page/suggestions-page-routing-paths'; +import { SuggestionsService } from '../suggestions.service'; +import { PaginationService } from '../../../core/pagination/pagination.service'; + +/** + * Component to display the Suggestion Target list. + */ +@Component({ + selector: 'ds-suggestion-target', + templateUrl: './suggestion-targets.component.html', + styleUrls: ['./suggestion-targets.component.scss'], +}) +export class SuggestionTargetsComponent implements OnInit { + + /** + * The source for which to list targets + */ + @Input() source: string; + + /** + * The pagination system configuration for HTML listing. + * @type {PaginationComponentOptions} + */ + public paginationConfig: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { + id: 'stp', + pageSizeOptions: [5, 10, 20, 40, 60] + }); + + /** + * The Suggestion Target list. + */ + public targets$: Observable; + /** + * The total number of Suggestion Targets. + */ + public totalElements$: Observable; + /** + * Array to track all the component subscriptions. Useful to unsubscribe them with 'onDestroy'. + * @type {Array} + */ + protected subs: Subscription[] = []; + + /** + * Initialize the component variables. + * @param {PaginationService} paginationService + * @param {SuggestionTargetsStateService} suggestionTargetsStateService + * @param {SuggestionsService} suggestionService + * @param {Router} router + */ + constructor( + private paginationService: PaginationService, + private suggestionTargetsStateService: SuggestionTargetsStateService, + private suggestionService: SuggestionsService, + private router: Router + ) { + } + + /** + * Component initialization. + */ + ngOnInit(): void { + this.targets$ = this.suggestionTargetsStateService.getReciterSuggestionTargets(); + this.totalElements$ = this.suggestionTargetsStateService.getReciterSuggestionTargetsTotals(); + } + + /** + * First Suggestion Targets loading after view initialization. + */ + ngAfterViewInit(): void { + this.subs.push( + this.suggestionTargetsStateService.isReciterSuggestionTargetsLoaded().pipe( + take(1) + ).subscribe(() => { + this.getSuggestionTargets(); + }) + ); + } + + /** + * Returns the information about the loading status of the Suggestion Targets (if it's running or not). + * + * @return Observable + * 'true' if the targets are loading, 'false' otherwise. + */ + public isTargetsLoading(): Observable { + return this.suggestionTargetsStateService.isReciterSuggestionTargetsLoading(); + } + + /** + * Returns the information about the processing status of the Suggestion Targets (if it's running or not). + * + * @return Observable + * 'true' if there are operations running on the targets (ex.: a REST call), 'false' otherwise. + */ + public isTargetsProcessing(): Observable { + return this.suggestionTargetsStateService.isReciterSuggestionTargetsProcessing(); + } + + /** + * Redirect to suggestion page. + * + * @param {string} id + * the id of suggestion target + * @param {string} name + * the name of suggestion target + */ + public redirectToSuggestions(id: string, name: string) { + this.router.navigate([getSuggestionPageRoute(id)]); + } + + /** + * Unsubscribe from all subscriptions. + */ + ngOnDestroy(): void { + this.suggestionTargetsStateService.dispatchClearSuggestionTargetsAction(); + this.subs + .filter((sub) => hasValue(sub)) + .forEach((sub) => sub.unsubscribe()); + } + + /** + * Dispatch the Suggestion Targets retrival. + */ + public getSuggestionTargets(): void { + this.paginationService.getCurrentPagination(this.paginationConfig.id, this.paginationConfig).pipe( + distinctUntilChanged(), + take(1) + ).subscribe((options: PaginationComponentOptions) => { + this.suggestionTargetsStateService.dispatchRetrieveReciterSuggestionTargets( + this.source, + options.pageSize, + options.currentPage + ); + }); + } + + public getTargetUuid(target: OpenaireSuggestionTarget) { + return this.suggestionService.getTargetUuid(target); + } +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts new file mode 100644 index 00000000000..85e871403c4 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts @@ -0,0 +1,110 @@ +import { Injectable } from '@angular/core'; + +import { Store } from '@ngrx/store'; +import { Actions, Effect, ofType } from '@ngrx/effects'; +import { TranslateService } from '@ngx-translate/core'; +import { catchError, map, switchMap, tap } from 'rxjs/operators'; +import { of } from 'rxjs'; + +import { + AddTargetAction, + AddUserSuggestionsAction, + RefreshUserSuggestionsAction, + RetrieveAllTargetsErrorAction, + RetrieveTargetsBySourceAction, + SuggestionTargetActionTypes, +} from './suggestion-targets.actions'; +import { PaginatedList } from '../../../core/data/paginated-list.model'; +import { SuggestionsService } from '../suggestions.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { AuthActionTypes, RetrieveAuthenticatedEpersonSuccessAction } from '../../../core/auth/auth.actions'; +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { EPerson } from '../../../core/eperson/models/eperson.model'; + +/** + * Provides effect methods for the Suggestion Targets actions. + */ +@Injectable() +export class SuggestionTargetsEffects { + + /** + * Retrieve all Suggestion Targets managing pagination and errors. + */ + @Effect() retrieveTargetsBySource$ = this.actions$.pipe( + ofType(SuggestionTargetActionTypes.RETRIEVE_TARGETS_BY_SOURCE), + switchMap((action: RetrieveTargetsBySourceAction) => { + return this.suggestionsService.getTargets( + action.payload.source, + action.payload.elementsPerPage, + action.payload.currentPage + ).pipe( + map((targets: PaginatedList) => + new AddTargetAction(targets.page, targets.totalPages, targets.currentPage, targets.totalElements) + ), + catchError((error: Error) => { + if (error) { + console.error(error.message); + } + return of(new RetrieveAllTargetsErrorAction()); + }) + ); + }) + ); + + /** + * Show a notification on error. + */ + @Effect({ dispatch: false }) retrieveAllTargetsErrorAction$ = this.actions$.pipe( + ofType(SuggestionTargetActionTypes.RETRIEVE_TARGETS_BY_SOURCE_ERROR), + tap(() => { + this.notificationsService.error(null, this.translate.get('reciter.suggestion.target.error.service.retrieve')); + }) + ); + + /** + * Show a notification on error. + */ + @Effect() retrieveUserTargets$ = this.actions$.pipe( + ofType(AuthActionTypes.RETRIEVE_AUTHENTICATED_EPERSON_SUCCESS), + switchMap((action: RetrieveAuthenticatedEpersonSuccessAction) => { + return this.suggestionsService.retrieveCurrentUserSuggestions(action.payload).pipe( + map((suggestionTargets: OpenaireSuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)) + ); + })); + + /** + * Fetch the current user suggestion + */ + @Effect() refreshUserTargets$ = this.actions$.pipe( + ofType(SuggestionTargetActionTypes.REFRESH_USER_SUGGESTIONS), + switchMap((action: RefreshUserSuggestionsAction) => { + return this.store$.select((state: any) => state.core.auth.user) + .pipe( + switchMap((user: EPerson) => { + return this.suggestionsService.retrieveCurrentUserSuggestions(user) + .pipe( + map((suggestionTargets: OpenaireSuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)), + catchError((errors) => of(errors)) + ); + }), + catchError((errors) => of(errors)) + ); + })); + + /** + * Initialize the effect class variables. + * @param {Actions} actions$ + * @param {Store} store$ + * @param {TranslateService} translate + * @param {NotificationsService} notificationsService + * @param {SuggestionsService} suggestionsService + */ + constructor( + private actions$: Actions, + private store$: Store, + private translate: TranslateService, + private notificationsService: NotificationsService, + private suggestionsService: SuggestionsService + ) { + } +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts new file mode 100644 index 00000000000..f8bd53ec050 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts @@ -0,0 +1,100 @@ +import { SuggestionTargetActionTypes, SuggestionTargetsActions } from './suggestion-targets.actions'; +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; + +/** + * The interface representing the OpenAIRE suggestion targets state. + */ +export interface SuggestionTargetState { + targets: OpenaireSuggestionTarget[]; + processing: boolean; + loaded: boolean; + totalPages: number; + currentPage: number; + totalElements: number; + currentUserTargets: OpenaireSuggestionTarget[]; + currentUserTargetsVisited: boolean; +} + +/** + * Used for the OpenAIRE Suggestion Target state initialization. + */ +const SuggestionTargetInitialState: SuggestionTargetState = { + targets: [], + processing: false, + loaded: false, + totalPages: 0, + currentPage: 0, + totalElements: 0, + currentUserTargets: null, + currentUserTargetsVisited: false +}; + +/** + * The OpenAIRE Broker Topic Reducer + * + * @param state + * the current state initialized with SuggestionTargetInitialState + * @param action + * the action to perform on the state + * @return SuggestionTargetState + * the new state + */ +export function SuggestionTargetsReducer(state = SuggestionTargetInitialState, action: SuggestionTargetsActions): SuggestionTargetState { + switch (action.type) { + case SuggestionTargetActionTypes.RETRIEVE_TARGETS_BY_SOURCE: { + return Object.assign({}, state, { + targets: [], + processing: true + }); + } + + case SuggestionTargetActionTypes.ADD_TARGETS: { + return Object.assign({}, state, { + targets: state.targets.concat(action.payload.targets), + processing: false, + loaded: true, + totalPages: action.payload.totalPages, + currentPage: state.currentPage, + totalElements: action.payload.totalElements + }); + } + + case SuggestionTargetActionTypes.RETRIEVE_TARGETS_BY_SOURCE_ERROR: { + return Object.assign({}, state, { + targets: [], + processing: false, + loaded: true, + totalPages: 0, + currentPage: 0, + totalElements: 0, + }); + } + + case SuggestionTargetActionTypes.ADD_USER_SUGGESTIONS: { + return Object.assign({}, state, { + currentUserTargets: action.payload.suggestionTargets + }); + } + + case SuggestionTargetActionTypes.MARK_USER_SUGGESTIONS_AS_VISITED: { + return Object.assign({}, state, { + currentUserTargetsVisited: true + }); + } + + case SuggestionTargetActionTypes.CLEAR_TARGETS: { + return Object.assign({}, state, { + targets: [], + processing: false, + loaded: false, + totalPages: 0, + currentPage: 0, + totalElements: 0, + }); + } + + default: { + return state; + } + } +} diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts new file mode 100644 index 00000000000..2e05bce0a9b --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts @@ -0,0 +1,164 @@ +import { Injectable } from '@angular/core'; + +import { select, Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { + getCurrentUserSuggestionTargetsSelector, + getCurrentUserSuggestionTargetsVisitedSelector, + getreciterSuggestionTargetCurrentPageSelector, + getreciterSuggestionTargetTotalsSelector, + isReciterSuggestionTargetLoadedSelector, + isreciterSuggestionTargetProcessingSelector, + reciterSuggestionTargetObjectSelector +} from '../selectors'; +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { + ClearSuggestionTargetsAction, + MarkUserSuggestionsAsVisitedAction, + RefreshUserSuggestionsAction, + RetrieveTargetsBySourceAction +} from './suggestion-targets.actions'; +import { OpenaireState } from '../../openaire.reducer'; + +/** + * The service handling the Suggestion targets State. + */ +@Injectable() +export class SuggestionTargetsStateService { + + /** + * Initialize the service variables. + * @param {Store} store + */ + constructor(private store: Store) { } + + /** + * Returns the list of Reciter Suggestion Targets from the state. + * + * @return Observable + * The list of Reciter Suggestion Targets. + */ + public getReciterSuggestionTargets(): Observable { + return this.store.pipe(select(reciterSuggestionTargetObjectSelector())); + } + + /** + * Returns the information about the loading status of the Reciter Suggestion Targets (if it's running or not). + * + * @return Observable + * 'true' if the targets are loading, 'false' otherwise. + */ + public isReciterSuggestionTargetsLoading(): Observable { + return this.store.pipe( + select(isReciterSuggestionTargetLoadedSelector), + map((loaded: boolean) => !loaded) + ); + } + + /** + * Returns the information about the loading status of the Reciter Suggestion Targets (whether or not they were loaded). + * + * @return Observable + * 'true' if the targets are loaded, 'false' otherwise. + */ + public isReciterSuggestionTargetsLoaded(): Observable { + return this.store.pipe(select(isReciterSuggestionTargetLoadedSelector)); + } + + /** + * Returns the information about the processing status of the Reciter Suggestion Targets (if it's running or not). + * + * @return Observable + * 'true' if there are operations running on the targets (ex.: a REST call), 'false' otherwise. + */ + public isReciterSuggestionTargetsProcessing(): Observable { + return this.store.pipe(select(isreciterSuggestionTargetProcessingSelector)); + } + + /** + * Returns, from the state, the total available pages of the Reciter Suggestion Targets. + * + * @return Observable + * The number of the Reciter Suggestion Targets pages. + */ + public getReciterSuggestionTargetsTotalPages(): Observable { + return this.store.pipe(select(getreciterSuggestionTargetTotalsSelector)); + } + + /** + * Returns the current page of the Reciter Suggestion Targets, from the state. + * + * @return Observable + * The number of the current Reciter Suggestion Targets page. + */ + public getReciterSuggestionTargetsCurrentPage(): Observable { + return this.store.pipe(select(getreciterSuggestionTargetCurrentPageSelector)); + } + + /** + * Returns the total number of the Reciter Suggestion Targets. + * + * @return Observable + * The number of the Reciter Suggestion Targets. + */ + public getReciterSuggestionTargetsTotals(): Observable { + return this.store.pipe(select(getreciterSuggestionTargetTotalsSelector)); + } + + /** + * Dispatch a request to change the Reciter Suggestion Targets state, retrieving the targets from the server. + * + * @param source + * the source for which to retrieve suggestion targets + * @param elementsPerPage + * The number of the targets per page. + * @param currentPage + * The number of the current page. + */ + public dispatchRetrieveReciterSuggestionTargets(source: string, elementsPerPage: number, currentPage: number): void { + this.store.dispatch(new RetrieveTargetsBySourceAction(source, elementsPerPage, currentPage)); + } + + /** + * Returns, from the state, the reciter suggestion targets for the current user. + * + * @return Observable + * The Reciter Suggestion Targets object. + */ + public getCurrentUserSuggestionTargets(): Observable { + return this.store.pipe(select(getCurrentUserSuggestionTargetsSelector)); + } + + /** + * Returns, from the state, whether or not the user has consulted their suggestion targets. + * + * @return Observable + * True if user already visited, false otherwise. + */ + public hasUserVisitedSuggestions(): Observable { + return this.store.pipe(select(getCurrentUserSuggestionTargetsVisitedSelector)); + } + + /** + * Dispatch a new MarkUserSuggestionsAsVisitedAction + */ + public dispatchMarkUserSuggestionsAsVisitedAction(): void { + this.store.dispatch(new MarkUserSuggestionsAsVisitedAction()); + } + + /** + * Dispatch an action to clear the Reciter Suggestion Targets state. + */ + public dispatchClearSuggestionTargetsAction(): void { + this.store.dispatch(new ClearSuggestionTargetsAction()); + } + + /** + * Dispatch an action to refresh the user suggestions. + */ + public dispatchRefreshUserSuggestionsAction(): void { + this.store.dispatch(new RefreshUserSuggestionsAction()); + } +} diff --git a/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.html b/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.html new file mode 100644 index 00000000000..577aa496b38 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.html @@ -0,0 +1,8 @@ + + +
+
+
+
+
+
diff --git a/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.scss b/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts b/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts new file mode 100644 index 00000000000..094dfab0174 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts @@ -0,0 +1,42 @@ +import { Component, OnInit } from '@angular/core'; +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { TranslateService } from '@ngx-translate/core'; +import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { SuggestionsService } from '../suggestions.service'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'ds-suggestions-notification', + templateUrl: './suggestions-notification.component.html', + styleUrls: ['./suggestions-notification.component.scss'] +}) +export class SuggestionsNotificationComponent implements OnInit { + + labelPrefix = 'mydspace.'; + + /** + * The user suggestion targets. + */ + suggestionsRD$: Observable; + + constructor( + private translateService: TranslateService, + private reciterSuggestionStateService: SuggestionTargetsStateService, + private notificationsService: NotificationsService, + private suggestionsService: SuggestionsService + ) { } + + ngOnInit() { + this.suggestionsRD$ = this.reciterSuggestionStateService.getCurrentUserSuggestionTargets(); + } + + /** + * Interpolated params to build the notification suggestions notification. + * @param suggestionTarget + */ + public getNotificationSuggestionInterpolation(suggestionTarget: OpenaireSuggestionTarget): any { + return this.suggestionsService.getNotificationSuggestionInterpolation(suggestionTarget); + } + +} diff --git a/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.html b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.html new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.html @@ -0,0 +1 @@ + diff --git a/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.scss b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.spec.ts b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.spec.ts new file mode 100644 index 00000000000..67678354caf --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.spec.ts @@ -0,0 +1,79 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SuggestionsPopupComponent } from './suggestions-popup.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { of as observableOf } from 'rxjs'; +import { mockSuggestionTargetsObjectOne } from '../../../shared/mocks/reciter-suggestion-targets.mock'; +import { SuggestionsService } from '../suggestions.service'; + +describe('SuggestionsPopupComponent', () => { + let component: SuggestionsPopupComponent; + let fixture: ComponentFixture; + + const suggestionStateService = jasmine.createSpyObj('SuggestionTargetsStateService', { + hasUserVisitedSuggestions: jasmine.createSpy('hasUserVisitedSuggestions'), + getCurrentUserSuggestionTargets: jasmine.createSpy('getCurrentUserSuggestionTargets'), + dispatchMarkUserSuggestionsAsVisitedAction: jasmine.createSpy('dispatchMarkUserSuggestionsAsVisitedAction') + }); + + const mockNotificationInterpolation = { count: 12, source: 'source', suggestionId: 'id', displayName: 'displayName' }; + const suggestionService = jasmine.createSpyObj('SuggestionService', { + getNotificationSuggestionInterpolation: + jasmine.createSpy('getNotificationSuggestionInterpolation').and.returnValue(mockNotificationInterpolation) + }); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [ SuggestionsPopupComponent ], + providers: [ + { provide: SuggestionTargetsStateService, useValue: suggestionStateService }, + { provide: SuggestionsService, useValue: suggestionService }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + ], + schemas: [NO_ERRORS_SCHEMA] + + }) + .compileComponents(); + })); + + describe('should create', () => { + + beforeEach(() => { + fixture = TestBed.createComponent(SuggestionsPopupComponent); + component = fixture.componentInstance; + spyOn(component, 'initializePopup').and.returnValue(null); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + expect(component.initializePopup).toHaveBeenCalled(); + }); + + }); + + describe('when there are publication suggestions', () => { + + beforeEach(() => { + + suggestionStateService.hasUserVisitedSuggestions.and.returnValue(observableOf(false)); + suggestionStateService.getCurrentUserSuggestionTargets.and.returnValue(observableOf([mockSuggestionTargetsObjectOne])); + suggestionStateService.dispatchMarkUserSuggestionsAsVisitedAction.and.returnValue(observableOf(null)); + + fixture = TestBed.createComponent(SuggestionsPopupComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should show a notification when new publication suggestions are available', () => { + expect((component as any).notificationsService.success).toHaveBeenCalled(); + expect(suggestionStateService.dispatchMarkUserSuggestionsAsVisitedAction).toHaveBeenCalled(); + }); + + }); +}); diff --git a/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts new file mode 100644 index 00000000000..6135cd99eab --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts @@ -0,0 +1,67 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service'; +import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { SuggestionsService } from '../suggestions.service'; +import { takeUntil } from 'rxjs/operators'; +import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { isNotEmpty } from '../../../shared/empty.util'; +import { combineLatest, Subject } from 'rxjs'; + +@Component({ + selector: 'ds-suggestions-popup', + templateUrl: './suggestions-popup.component.html', + styleUrls: ['./suggestions-popup.component.scss'] +}) +export class SuggestionsPopupComponent implements OnInit, OnDestroy { + + labelPrefix = 'mydspace.'; + + subscription; + + constructor( + private translateService: TranslateService, + private reciterSuggestionStateService: SuggestionTargetsStateService, + private notificationsService: NotificationsService, + private suggestionsService: SuggestionsService + ) { } + + ngOnInit() { + this.initializePopup(); + } + + public initializePopup() { + const notifier = new Subject(); + this.subscription = combineLatest([ + this.reciterSuggestionStateService.getCurrentUserSuggestionTargets(), + this.reciterSuggestionStateService.hasUserVisitedSuggestions() + ]).pipe(takeUntil(notifier)).subscribe(([suggestions, visited]) => { + if (isNotEmpty(suggestions)) { + if (!visited) { + suggestions.forEach((suggestionTarget: OpenaireSuggestionTarget) => this.showNotificationForNewSuggestions(suggestionTarget)); + this.reciterSuggestionStateService.dispatchMarkUserSuggestionsAsVisitedAction(); + notifier.next(); + notifier.complete(); + } + } + }); + } + + /** + * Show a notification to user for a new suggestions detected + * @param suggestionTarget + * @private + */ + private showNotificationForNewSuggestions(suggestionTarget: OpenaireSuggestionTarget): void { + const content = this.translateService.instant(this.labelPrefix + 'notification.suggestion', + this.suggestionsService.getNotificationSuggestionInterpolation(suggestionTarget)); + this.notificationsService.success('', content, {timeOut:0}, true); + } + + ngOnDestroy() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + +} diff --git a/src/app/openaire/reciter-suggestions/suggestions.service.ts b/src/app/openaire/reciter-suggestions/suggestions.service.ts new file mode 100644 index 00000000000..de743d95e34 --- /dev/null +++ b/src/app/openaire/reciter-suggestions/suggestions.service.ts @@ -0,0 +1,296 @@ +import { Injectable } from '@angular/core'; + +import { of, forkJoin, Observable } from 'rxjs'; +import { catchError, map, mergeMap, take } from 'rxjs/operators'; + +import { OpenaireSuggestionsDataService } from '../../core/openaire/reciter-suggestions/openaire-suggestions-data.service'; +import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; +import { FindListOptions } from '../../core/data/request.models'; +import { RemoteData } from '../../core/data/remote-data'; +import { PaginatedList } from '../../core/data/paginated-list.model'; +import { OpenaireSuggestionTarget } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { ResearcherProfileService } from '../../core/profile/researcher-profile.service'; +import { AuthService } from '../../core/auth/auth.service'; +import { EPerson } from '../../core/eperson/models/eperson.model'; +import { hasValue, isNotEmpty } from '../../shared/empty.util'; +import { ResearcherProfile } from '../../core/profile/model/researcher-profile.model'; +import { + getAllSucceededRemoteDataPayload, + getFinishedRemoteData, + getFirstSucceededRemoteDataPayload, + getFirstSucceededRemoteListPayload +} from '../../core/shared/operators'; +import { OpenaireSuggestion } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service'; +import { TranslateService } from '@ngx-translate/core'; +import { NoContent } from '../../core/shared/NoContent.model'; +import { environment } from '../../../environments/environment'; +import { SuggestionConfig } from '../../../config/layout-config.interfaces'; +import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; + +export interface SuggestionBulkResult { + success: number; + fails: number; +} + +/** + * The service handling all Suggestion Target requests to the REST service. + */ +@Injectable() +export class SuggestionsService { + + /** + * Initialize the service variables. + * @param {AuthService} authService + * @param {ResearcherProfileService} researcherProfileService + * @param {OpenaireSuggestionsDataService} suggestionsDataService + */ + constructor( + private authService: AuthService, + private researcherProfileService: ResearcherProfileService, + private suggestionsDataService: OpenaireSuggestionsDataService, + private translateService: TranslateService + ) { + } + + /** + * Return the list of Suggestion Target managing pagination and errors. + * + * @param source + * The source for which to retrieve targets + * @param elementsPerPage + * The number of the target per page + * @param currentPage + * The page number to retrieve + * @return Observable> + * The list of Suggestion Targets. + */ + public getTargets(source, elementsPerPage, currentPage): Observable> { + const sortOptions = new SortOptions('display', SortDirection.ASC); + + const findListOptions: FindListOptions = { + elementsPerPage: elementsPerPage, + currentPage: currentPage, + sort: sortOptions + }; + + return this.suggestionsDataService.getTargets(source, findListOptions).pipe( + getFinishedRemoteData(), + take(1), + map((rd: RemoteData>) => { + if (rd.hasSucceeded) { + return rd.payload; + } else { + throw new Error('Can\'t retrieve Suggestion Target from the Search Target REST service'); + } + }) + ); + } + + /** + * Return the list of review suggestions Target managing pagination and errors. + * + * @param targetId + * The target id for which to find suggestions. + * @param elementsPerPage + * The number of the target per page + * @param currentPage + * The page number to retrieve + * @param sortOptions + * The sort options + * @return Observable>> + * The list of Suggestion. + */ + public getSuggestions(targetId: string, elementsPerPage, currentPage, sortOptions: SortOptions): Observable> { + const [source, target] = targetId.split(':'); + + const findListOptions: FindListOptions = { + elementsPerPage: elementsPerPage, + currentPage: currentPage, + sort: sortOptions + }; + + return this.suggestionsDataService.getSuggestionsByTargetAndSource(target, source, findListOptions).pipe( + getAllSucceededRemoteDataPayload() + ); + } + + /** + * Clear suggestions requests from cache + */ + public clearSuggestionRequests() { + this.suggestionsDataService.clearSuggestionRequests(); + } + + /** + * Used to delete Suggestion + * @suggestionId + */ + public deleteReviewedSuggestion(suggestionId: string): Observable> { + return this.suggestionsDataService.deleteSuggestion(suggestionId).pipe( + map((response: RemoteData) => { + if (response.isSuccess) { + return response; + } else { + throw new Error('Can\'t delete Suggestion from the Search Target REST service'); + } + }), + take(1) + ); + } + + /** + * Retrieve suggestion targets for the given user + * + * @param user + * The EPerson object for which to retrieve suggestion targets + */ + public retrieveCurrentUserSuggestions(user: EPerson): Observable { + return this.researcherProfileService.findById(user.uuid).pipe( + mergeMap((profile: ResearcherProfile) => { + if (isNotEmpty(profile)) { + return this.researcherProfileService.findRelatedItemId(profile).pipe( + mergeMap((itemId: string) => { + return this.suggestionsDataService.getTargetsByUser(itemId).pipe( + getFirstSucceededRemoteListPayload() + ); + }) + ); + } else { + return of([]); + } + }), + take(1) + ); + } + + /** + * Perform the approve and import operation over a single suggestion + * @param suggestion target suggestion + * @param collectionId the collectionId + * @param workspaceitemService injected dependency + * @private + */ + public approveAndImport(workspaceitemService: WorkspaceitemDataService, + suggestion: OpenaireSuggestion, + collectionId: string): Observable { + + const resolvedCollectionId = this.resolveCollectionId(suggestion, collectionId); + return workspaceitemService.importExternalSourceEntry(suggestion.externalSourceUri, resolvedCollectionId) + .pipe( + getFirstSucceededRemoteDataPayload(), + catchError((error) => of(null)) + ); + } + + /** + * Perform the delete operation over a single suggestion. + * @param suggestionId + */ + public notMine(suggestionId): Observable> { + return this.deleteReviewedSuggestion(suggestionId).pipe( + catchError((error) => of(null)) + ); + } + + /** + * Perform a bulk approve and import operation. + * @param workspaceitemService injected dependency + * @param suggestions the array containing the suggestions + * @param collectionId the collectionId + */ + public approveAndImportMultiple(workspaceitemService: WorkspaceitemDataService, + suggestions: OpenaireSuggestion[], + collectionId: string): Observable { + + return forkJoin(suggestions.map((suggestion: OpenaireSuggestion) => + this.approveAndImport(workspaceitemService, suggestion, collectionId))) + .pipe(map((results: WorkspaceItem[]) => { + return { + success: results.filter((result) => result != null).length, + fails: results.filter((result) => result == null).length + }; + }), take(1)); + } + + /** + * Perform a bulk notMine operation. + * @param suggestions the array containing the suggestions + */ + public notMineMultiple(suggestions: OpenaireSuggestion[]): Observable { + return forkJoin(suggestions.map((suggestion: OpenaireSuggestion) => this.notMine(suggestion.id))) + .pipe(map((results: RemoteData[]) => { + return { + success: results.filter((result) => result != null).length, + fails: results.filter((result) => result == null).length + }; + }), take(1)); + } + + /** + * Get the researcher uuid (for navigation purpose) from a target instance. + * TODO Find a better way + * @param target + * @return the researchUuid + */ + public getTargetUuid(target: OpenaireSuggestionTarget): string { + const tokens = target.id.split(':'); + return tokens.length === 2 ? tokens[1] : null; + } + + /** + * Interpolated params to build the notification suggestions notification. + * @param suggestionTarget + */ + public getNotificationSuggestionInterpolation(suggestionTarget: OpenaireSuggestionTarget): any { + return { + count: suggestionTarget.total, + source: this.translateService.instant(this.translateSuggestionSource(suggestionTarget.source)), + type: this.translateService.instant(this.translateSuggestionType(suggestionTarget.source)), + suggestionId: suggestionTarget.id, + displayName: suggestionTarget.display + }; + } + + public translateSuggestionType(source: string): string { + return 'reciter.suggestion.type.' + source; + } + + public translateSuggestionSource(source: string): string { + return 'reciter.suggestion.source.' + source; + } + + /** + * If the provided collectionId ha no value, tries to resolve it by suggestion source. + * @param suggestion + * @param collectionId + */ + public resolveCollectionId(suggestion: OpenaireSuggestion, collectionId): string { + if (hasValue(collectionId)) { + return collectionId; + } + return environment.suggestion + .find((suggestionConf: SuggestionConfig) => suggestionConf.source === suggestion.source) + .collectionId; + } + + /** + * Return true if all the suggestion are configured with the same fixed collection + * in the configuration. + * @param suggestions + */ + public isCollectionFixed(suggestions: OpenaireSuggestion[]): boolean { + return this.getFixedCollectionIds(suggestions).length === 1; + } + + private getFixedCollectionIds(suggestions: OpenaireSuggestion[]): string[] { + const collectionIds = {}; + suggestions.forEach((suggestion: OpenaireSuggestion) => { + const conf = environment.suggestion.find((suggestionConf: SuggestionConfig) => suggestionConf.source === suggestion.source); + if (hasValue(conf)) { + collectionIds[conf.collectionId] = true; + } + }); + return Object.keys(collectionIds); + } +} diff --git a/src/app/shared/mocks/openaire.mock.ts b/src/app/shared/mocks/openaire.mock.ts new file mode 100644 index 00000000000..95ea8717274 --- /dev/null +++ b/src/app/shared/mocks/openaire.mock.ts @@ -0,0 +1,1797 @@ +import { of as observableOf } from 'rxjs'; +import { ResourceType } from '../../core/shared/resource-type'; +import { OpenaireBrokerTopicObject } from '../../core/openaire/broker/models/openaire-broker-topic.model'; +import { OpenaireBrokerEventObject } from '../../core/openaire/broker/models/openaire-broker-event.model'; +import { OpenaireBrokerTopicRestService } from '../../core/openaire/broker/topics/openaire-broker-topic-rest.service'; +import { OpenaireBrokerEventRestService } from '../../core/openaire/broker/events/openaire-broker-event-rest.service'; +import { DSpaceObject } from '../../core/shared/dspace-object.model'; +import { OpenaireStateService } from '../../openaire/openaire-state.service'; +import { Item } from '../../core/shared/item.model'; +import { + createNoContentRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$ +} from '../remote-data.utils'; +import { SearchResult } from '../search/models/search-result.model'; +import { SuggestionsService } from '../../openaire/reciter-suggestions/suggestions.service'; + +// REST Mock --------------------------------------------------------------------- +// ------------------------------------------------------------------------------- + +// Items +// ------------------------------------------------------------------------------- + +const ItemMockPid1: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174001', + uuid: 'ITEM4567-e89b-12d3-a456-426614174001', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Index nominum et rerum' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +const ItemMockPid2: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174004', + uuid: 'ITEM4567-e89b-12d3-a456-426614174004', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'UNA NUOVA RILETTURA DELL\u0027 ARISTOTELE DI FRANZ BRENTANO ALLA LUCE DI ALCUNI INEDITI' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +const ItemMockPid3: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174005', + uuid: 'ITEM4567-e89b-12d3-a456-426614174005', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Sustainable development' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +const ItemMockPid4: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174006', + uuid: 'ITEM4567-e89b-12d3-a456-426614174006', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Reply to Critics' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +const ItemMockPid5: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174007', + uuid: 'ITEM4567-e89b-12d3-a456-426614174007', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'PROGETTAZIONE, SINTESI E VALUTAZIONE DELL\u0027ATTIVITA\u0027 ANTIMICOBATTERICA ED ANTIFUNGINA DI NUOVI DERIVATI ETEROCICLICI' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +const ItemMockPid6: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174008', + uuid: 'ITEM4567-e89b-12d3-a456-426614174008', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Donald Davidson' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +const ItemMockPid7: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174009', + uuid: 'ITEM4567-e89b-12d3-a456-426614174009', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Missing abstract article' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +export const ItemMockPid8: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174002', + uuid: 'ITEM4567-e89b-12d3-a456-426614174002', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Egypt, crossroad of translations and literary interweavings (3rd-6th centuries). A reconsideration of earlier Coptic literature' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +export const ItemMockPid9: Item = Object.assign( + new Item(), + { + handle: '10077/21486', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'ITEM4567-e89b-12d3-a456-426614174003', + uuid: 'ITEM4567-e89b-12d3-a456-426614174003', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Morocco, crossroad of translations and literary interweavings (3rd-6th centuries). A reconsideration of earlier Coptic literature' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +export const ItemMockPid10: Item = Object.assign( + new Item(), + { + handle: '10713/29832', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'P23e4567-e89b-12d3-a456-426614174002', + uuid: 'P23e4567-e89b-12d3-a456-426614174002', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Tracking Papyrus and Parchment Paths: An Archaeological Atlas of Coptic Literature.\nLiterary Texts in their Geographical Context: Production, Copying, Usage, Dissemination and Storage' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +export const OpenaireMockDspaceObject: SearchResult = Object.assign( + new SearchResult(), + { + handle: '10713/29832', + lastModified: '2017-04-24T19:44:08.178+0000', + isArchived: true, + isDiscoverable: true, + isWithdrawn: false, + _links:{ + self: { + href: 'https://rest.api/rest/api/core/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357' + } + }, + id: 'P23e4567-e89b-12d3-a456-426614174002', + uuid: 'P23e4567-e89b-12d3-a456-426614174002', + type: 'item', + metadata: { + 'dc.creator': [ + { + language: 'en_US', + value: 'Doe, Jane' + } + ], + 'dc.date.accessioned': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.available': [ + { + language: null, + value: '1650-06-26T19:58:25Z' + } + ], + 'dc.date.issued': [ + { + language: null, + value: '1650-06-26' + } + ], + 'dc.identifier.issn': [ + { + language: 'en_US', + value: '123456789' + } + ], + 'dc.identifier.uri': [ + { + language: null, + value: 'http://dspace7.4science.it/xmlui/handle/10673/6' + } + ], + 'dc.description.abstract': [ + { + language: 'en_US', + value: 'This is really just a sample abstract. If it was a real abstract it would contain useful information about this test document. Sorry though, nothing useful in this paragraph. You probably shouldn\'t have even bothered to read it!' + } + ], + 'dc.description.provenance': [ + { + language: 'en', + value: 'Made available in DSpace on 2012-06-26T19:58:25Z (GMT). No. of bitstreams: 2\r\ntest_ppt.ppt: 12707328 bytes, checksum: a353fc7d29b3c558c986f7463a41efd3 (MD5)\r\ntest_ppt.pptx: 12468572 bytes, checksum: 599305edb4ebee329667f2c35b14d1d6 (MD5)' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T09:17:34Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2013-06-13T11:04:16Z (GMT).' + }, + { + language: 'en', + value: 'Restored into DSpace on 2017-04-24T19:44:08Z (GMT).' + } + ], + 'dc.language': [ + { + language: 'en_US', + value: 'en' + } + ], + 'dc.rights': [ + { + language: 'en_US', + value: '© Jane Doe' + } + ], + 'dc.subject': [ + { + language: 'en_US', + value: 'keyword1' + }, + { + language: 'en_US', + value: 'keyword2' + }, + { + language: 'en_US', + value: 'keyword3' + } + ], + 'dc.title': [ + { + language: 'en_US', + value: 'Tracking Papyrus and Parchment Paths: An Archaeological Atlas of Coptic Literature.\nLiterary Texts in their Geographical Context: Production, Copying, Usage, Dissemination and Storage' + } + ], + 'dc.type': [ + { + language: 'en_US', + value: 'text' + } + ] + } + } +); + +// Topics +// ------------------------------------------------------------------------------- + +export const openaireBrokerTopicObjectMorePid: OpenaireBrokerTopicObject = { + type: new ResourceType('nbtopic'), + id: 'ENRICH!MORE!PID', + name: 'ENRICH/MORE/PID', + lastEvent: '2020/10/09 10:11 UTC', + totalEvents: 33, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MORE!PID' + } + } +}; + +export const openaireBrokerTopicObjectMoreAbstract: OpenaireBrokerTopicObject = { + type: new ResourceType('nbtopic'), + id: 'ENRICH!MORE!ABSTRACT', + name: 'ENRICH/MORE/ABSTRACT', + lastEvent: '2020/09/08 21:14 UTC', + totalEvents: 5, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MORE!ABSTRACT' + } + } +}; + +export const openaireBrokerTopicObjectMissingPid: OpenaireBrokerTopicObject = { + type: new ResourceType('nbtopic'), + id: 'ENRICH!MISSING!PID', + name: 'ENRICH/MISSING/PID', + lastEvent: '2020/10/01 07:36 UTC', + totalEvents: 4, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!PID' + } + } +}; + +export const openaireBrokerTopicObjectMissingAbstract: OpenaireBrokerTopicObject = { + type: new ResourceType('nbtopic'), + id: 'ENRICH!MISSING!ABSTRACT', + name: 'ENRICH/MISSING/ABSTRACT', + lastEvent: '2020/10/08 16:14 UTC', + totalEvents: 71, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!ABSTRACT' + } + } +}; + +export const openaireBrokerTopicObjectMissingAcm: OpenaireBrokerTopicObject = { + type: new ResourceType('nbtopic'), + id: 'ENRICH!MISSING!SUBJECT!ACM', + name: 'ENRICH/MISSING/SUBJECT/ACM', + lastEvent: '2020/09/21 17:51 UTC', + totalEvents: 18, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!SUBJECT!ACM' + } + } +}; + +export const openaireBrokerTopicObjectMissingProject: OpenaireBrokerTopicObject = { + type: new ResourceType('nbtopic'), + id: 'ENRICH!MISSING!PROJECT', + name: 'ENRICH/MISSING/PROJECT', + lastEvent: '2020/09/17 10:28 UTC', + totalEvents: 6, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!PROJECT' + } + } +}; + +// Events +// ------------------------------------------------------------------------------- + +export const openaireBrokerEventObjectMissingPid: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174001', + uuid: '123e4567-e89b-12d3-a456-426614174001', + type: new ResourceType('nbevent'), + originalId: 'oai:www.openstarts.units.it:10077/21486', + title: 'Index nominum et rerum', + trust: 0.375, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: 'doi', + value: '10.18848/1447-9494/cgp/v15i09/45934', + abstract: null, + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001', + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid1)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingPid2: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174004', + uuid: '123e4567-e89b-12d3-a456-426614174004', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/21486', + title: 'UNA NUOVA RILETTURA DELL\u0027 ARISTOTELE DI FRANZ BRENTANO ALLA LUCE DI ALCUNI INEDITI', + trust: 1.0, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: 'urn', + value: 'http://thesis2.sba.units.it/store/handle/item/12238', + abstract: null, + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid2)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingPid3: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174005', + uuid: '123e4567-e89b-12d3-a456-426614174005', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/554', + title: 'Sustainable development', + trust: 0.375, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: 'doi', + value: '10.4324/9780203408889', + abstract: null, + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid3)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingPid4: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174006', + uuid: '123e4567-e89b-12d3-a456-426614174006', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/10787', + title: 'Reply to Critics', + trust: 1.0, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: 'doi', + value: '10.1080/13698230.2018.1430104', + abstract: null, + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid4)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingPid5: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174007', + uuid: '123e4567-e89b-12d3-a456-426614174007', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/11339', + title: 'PROGETTAZIONE, SINTESI E VALUTAZIONE DELL\u0027ATTIVITA\u0027 ANTIMICOBATTERICA ED ANTIFUNGINA DI NUOVI DERIVATI ETEROCICLICI', + trust: 0.375, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: 'urn', + value: 'http://thesis2.sba.units.it/store/handle/item/12477', + abstract: null, + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid5)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingPid6: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174008', + uuid: '123e4567-e89b-12d3-a456-426614174008', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/29860', + title: 'Donald Davidson', + trust: 0.375, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: 'doi', + value: '10.1111/j.1475-4975.2004.00098.x', + abstract: null, + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid6)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingAbstract: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174009', + uuid: '123e4567-e89b-12d3-a456-426614174009', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/21110', + title: 'Missing abstract article', + trust: 0.751, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: null, + value: null, + abstract: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit.', + openaireId: null, + acronym: null, + code: null, + funder: null, + fundingProgram: null, + jurisdiction: null, + title: null + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009/related' + } + }, + target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid7)), + related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) +}; + +export const openaireBrokerEventObjectMissingProjectFound: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174002', + uuid: '123e4567-e89b-12d3-a456-426614174002', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/21838', + title: 'Egypt, crossroad of translations and literary interweavings (3rd-6th centuries). A reconsideration of earlier Coptic literature', + trust: 1.0, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: null, + value: null, + abstract: null, + openaireId: null, + acronym: 'PAThs', + code: '687567', + funder: 'EC', + fundingProgram: 'H2020', + jurisdiction: 'EU', + title: 'Tracking Papyrus and Parchment Paths: An Archaeological Atlas of Coptic Literature.\nLiterary Texts in their Geographical Context: Production, Copying, Usage, Dissemination and Storage' + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002/related' + } + }, + target: createSuccessfulRemoteDataObject$(ItemMockPid8), + related: createSuccessfulRemoteDataObject$(ItemMockPid10) +}; + +export const openaireBrokerEventObjectMissingProjectNotFound: OpenaireBrokerEventObject = { + id: '123e4567-e89b-12d3-a456-426614174003', + uuid: '123e4567-e89b-12d3-a456-426614174003', + type: new ResourceType('openaireBrokerEvent'), + originalId: 'oai:www.openstarts.units.it:10077/21838', + title: 'Morocco, crossroad of translations and literary interweavings (3rd-6th centuries). A reconsideration of earlier Coptic literature', + trust: 1.0, + eventDate: '2020/10/09 10:11 UTC', + status: 'PENDING', + message: { + type: null, + value: null, + abstract: null, + openaireId: null, + acronym: 'PAThs', + code: '687567B', + funder: 'EC', + fundingProgram: 'H2021', + jurisdiction: 'EU', + title: 'Tracking Unknown Papyrus and Parchment Paths: An Archaeological Atlas of Coptic Literature.\nLiterary Texts in their Geographical Context: Production, Copying, Usage, Dissemination and Storage' + }, + _links: { + self: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003' + }, + target: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003/target' + }, + related: { + href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003/related' + } + }, + target: createSuccessfulRemoteDataObject$(ItemMockPid9), + related: createNoContentRemoteDataObject$() +}; + +// Classes +// ------------------------------------------------------------------------------- + +/** + * Mock for [[OpenaireStateService]] + */ +export function getMockOpenaireStateService(): any { + return jasmine.createSpyObj('OpenaireStateService', { + getOpenaireBrokerTopics: jasmine.createSpy('getOpenaireBrokerTopics'), + isOpenaireBrokerTopicsLoading: jasmine.createSpy('isOpenaireBrokerTopicsLoading'), + isOpenaireBrokerTopicsLoaded: jasmine.createSpy('isOpenaireBrokerTopicsLoaded'), + isOpenaireBrokerTopicsProcessing: jasmine.createSpy('isOpenaireBrokerTopicsProcessing'), + getOpenaireBrokerTopicsTotalPages: jasmine.createSpy('getOpenaireBrokerTopicsTotalPages'), + getOpenaireBrokerTopicsCurrentPage: jasmine.createSpy('getOpenaireBrokerTopicsCurrentPage'), + getOpenaireBrokerTopicsTotals: jasmine.createSpy('getOpenaireBrokerTopicsTotals'), + dispatchRetrieveOpenaireBrokerTopics: jasmine.createSpy('dispatchRetrieveOpenaireBrokerTopics'), + dispatchMarkUserSuggestionsAsVisitedAction: jasmine.createSpy('dispatchMarkUserSuggestionsAsVisitedAction') + }); +} + +/** + * Mock for [[OpenaireBrokerTopicRestService]] + */ +export function getMockOpenaireBrokerTopicRestService(): OpenaireBrokerTopicRestService { + return jasmine.createSpyObj('OpenaireBrokerTopicRestService', { + getTopics: jasmine.createSpy('getTopics'), + getTopic: jasmine.createSpy('getTopic'), + }); +} + +/** + * Mock for [[OpenaireBrokerEventRestService]] + */ +export function getMockOpenaireBrokerEventRestService(): OpenaireBrokerEventRestService { + return jasmine.createSpyObj('OpenaireBrokerEventRestService', { + getEventsByTopic: jasmine.createSpy('getEventsByTopic'), + getEvent: jasmine.createSpy('getEvent'), + patchEvent: jasmine.createSpy('patchEvent'), + boundProject: jasmine.createSpy('boundProject'), + removeProject: jasmine.createSpy('removeProject'), + clearFindByTopicRequests: jasmine.createSpy('.clearFindByTopicRequests') + }); +} + +/** + * Mock for [[OpenaireBrokerEventRestService]] + */ +export function getMockSuggestionsService(): any { + return jasmine.createSpyObj('SuggestionsService', { + getTargets: jasmine.createSpy('getTargets'), + getSuggestions: jasmine.createSpy('getSuggestions'), + clearSuggestionRequests: jasmine.createSpy('clearSuggestionRequests'), + deleteReviewedSuggestion: jasmine.createSpy('deleteReviewedSuggestion'), + retrieveCurrentUserSuggestions: jasmine.createSpy('retrieveCurrentUserSuggestions'), + getTargetUuid: jasmine.createSpy('getTargetUuid'), + }); +} diff --git a/src/app/shared/mocks/reciter-suggestion-targets.mock.ts b/src/app/shared/mocks/reciter-suggestion-targets.mock.ts new file mode 100644 index 00000000000..42e293e6031 --- /dev/null +++ b/src/app/shared/mocks/reciter-suggestion-targets.mock.ts @@ -0,0 +1,42 @@ +import { ResourceType } from '../../core/shared/resource-type'; +import { OpenaireSuggestionTarget } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; + +// REST Mock --------------------------------------------------------------------- +// ------------------------------------------------------------------------------- +export const mockSuggestionTargetsObjectOne: OpenaireSuggestionTarget = { + type: new ResourceType('suggestiontarget'), + id: 'reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26', + display: 'Bollini, Andrea', + source: 'reciter', + total: 31, + _links: { + target: { + href: 'https://rest.api/rest/api/core/items/gf3d657-9d6d-4a87-b905-fef0f8cae26' + }, + suggestions: { + href: 'https://rest.api/rest/api/integration/suggestions/search/findByTargetAndSource?target=gf3d657-9d6d-4a87-b905-fef0f8cae26c&source=reciter' + }, + self: { + href: 'https://rest.api/rest/api/integration/suggestiontargets/reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26' + } + } +}; + +export const mockSuggestionTargetsObjectTwo: OpenaireSuggestionTarget = { + type: new ResourceType('suggestiontarget'), + id: 'reciter:nhy567-9d6d-ty67-b905-fef0f8cae26', + display: 'Digilio, Andrea', + source: 'reciter', + total: 12, + _links: { + target: { + href: 'https://rest.api/rest/api/core/items/nhy567-9d6d-ty67-b905-fef0f8cae26' + }, + suggestions: { + href: 'https://rest.api/rest/api/integration/suggestions/search/findByTargetAndSource?target=nhy567-9d6d-ty67-b905-fef0f8cae26&source=reciter' + }, + self: { + href: 'https://rest.api/rest/api/integration/suggestiontargets/reciter:nhy567-9d6d-ty67-b905-fef0f8cae26' + } + } +}; diff --git a/src/app/shared/mocks/reciter-suggestion.mock.ts b/src/app/shared/mocks/reciter-suggestion.mock.ts new file mode 100644 index 00000000000..2ddb49868f1 --- /dev/null +++ b/src/app/shared/mocks/reciter-suggestion.mock.ts @@ -0,0 +1,210 @@ + +// REST Mock --------------------------------------------------------------------- +// ------------------------------------------------------------------------------- + +import { OpenaireSuggestion } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { SUGGESTION } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-objects.resource-type'; + +export const mockSuggestionPublicationOne: OpenaireSuggestion = { + id: '24694772', + display: 'publication one', + source: 'reciter', + externalSourceUri: 'https://dspace7.4science.cloud/server/api/integration/reciterSourcesEntry/pubmed/entryValues/24694772', + score: '48', + evidences: { + acceptedRejectedEvidence: { + score: '2.7', + notes: 'some notes, eventually empty or null' + }, + authorNameEvidence: { + score: '0', + notes: 'some notes, eventually empty or null' + }, + journalCategoryEvidence: { + score: '6', + notes: 'some notes, eventually empty or null' + }, + affiliationEvidence: { + score: 'xxx', + notes: 'some notes, eventually empty or null' + }, + relationshipEvidence: { + score: '9', + notes: 'some notes, eventually empty or null' + }, + educationYearEvidence: { + score: '3.6', + notes: 'some notes, eventually empty or null' + }, + personTypeEvidence: { + score: '4', + notes: 'some notes, eventually empty or null' + }, + articleCountEvidence: { + score: '6.7', + notes: 'some notes, eventually empty or null' + }, + averageClusteringEvidence: { + score: '7', + notes: 'some notes, eventually empty or null' + } + }, + metadata: { + 'dc.identifier.uri': [ + { + value: 'https://publication/0000-0003-3681-2038', + language: null, + authority: null, + confidence: -1, + place: -1 + } as any + ], + 'dc.title': [ + { + value: 'publication one', + language: null, + authority: null, + confidence: -1 + } as any + ], + 'dc.date.issued': [ + { + value: '2010-11-03', + language: null, + authority: null, + confidence: -1 + } as any + ], + 'dspace.entity.type': [ + { + uuid: '95f21fe6-ce38-43d6-96d4-60ae66385a06', + language: null, + value: 'OrgUnit', + place: 0, + authority: null, + confidence: -1 + } as any + ], + 'dc.description': [ + { + uuid: '95f21fe6-ce38-43d6-96d4-60ae66385a06', + language: null, + value: "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).", + place: 0, + authority: null, + confidence: -1 + } as any + ] + }, + type: SUGGESTION, + _links: { + target: { + href: 'https://dspace7.4science.cloud/server/api/core/items/gf3d657-9d6d-4a87-b905-fef0f8cae26' + }, + self: { + href: 'https://dspace7.4science.cloud/server/api/integration/suggestions/reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26c:24694772' + } + } +}; + +export const mockSuggestionPublicationTwo: OpenaireSuggestion = { + id: '24694772', + display: 'publication two', + source: 'reciter', + externalSourceUri: 'https://dspace7.4science.cloud/server/api/integration/reciterSourcesEntry/pubmed/entryValues/24694772', + score: '48', + evidences: { + acceptedRejectedEvidence: { + score: '2.7', + notes: 'some notes, eventually empty or null' + }, + authorNameEvidence: { + score: '0', + notes: 'some notes, eventually empty or null' + }, + journalCategoryEvidence: { + score: '6', + notes: 'some notes, eventually empty or null' + }, + affiliationEvidence: { + score: 'xxx', + notes: 'some notes, eventually empty or null' + }, + relationshipEvidence: { + score: '9', + notes: 'some notes, eventually empty or null' + }, + educationYearEvidence: { + score: '3.6', + notes: 'some notes, eventually empty or null' + }, + personTypeEvidence: { + score: '4', + notes: 'some notes, eventually empty or null' + }, + articleCountEvidence: { + score: '6.7', + notes: 'some notes, eventually empty or null' + }, + averageClusteringEvidence: { + score: '7', + notes: 'some notes, eventually empty or null' + } + }, + metadata: { + 'dc.identifier.uri': [ + { + value: 'https://publication/0000-0003-3681-2038', + language: null, + authority: null, + confidence: -1, + place: -1 + } as any + ], + 'dc.title': [ + { + value: 'publication one', + language: null, + authority: null, + confidence: -1 + } as any + ], + 'dc.date.issued': [ + { + value: '2010-11-03', + language: null, + authority: null, + confidence: -1 + } as any + ], + 'dspace.entity.type': [ + { + uuid: '95f21fe6-ce38-43d6-96d4-60ae66385a06', + language: null, + value: 'OrgUnit', + place: 0, + authority: null, + confidence: -1 + } as any + ], + 'dc.description': [ + { + uuid: '95f21fe6-ce38-43d6-96d4-60ae66385a06', + language: null, + value: "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).", + place: 0, + authority: null, + confidence: -1 + } as any + ] + }, + type: SUGGESTION, + _links: { + target: { + href: 'https://dspace7.4science.cloud/server/api/core/items/gf3d657-9d6d-4a87-b905-fef0f8cae26' + }, + self: { + href: 'https://dspace7.4science.cloud/server/api/integration/suggestions/reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26c:24694772' + } + } +}; diff --git a/src/app/suggestions-page/suggestions-page-routing-paths.ts b/src/app/suggestions-page/suggestions-page-routing-paths.ts new file mode 100644 index 00000000000..0f3aa782d21 --- /dev/null +++ b/src/app/suggestions-page/suggestions-page-routing-paths.ts @@ -0,0 +1,11 @@ +import { URLCombiner } from '../core/url-combiner/url-combiner'; + +export const SUGGESTION_MODULE_PATH = 'suggestions'; + +export function getSuggestionModuleRoute() { + return `/${SUGGESTION_MODULE_PATH}`; +} + +export function getSuggestionPageRoute(SuggestionId: string) { + return new URLCombiner(getSuggestionModuleRoute(), SuggestionId).toString(); +} diff --git a/src/app/suggestions-page/suggestions-page-routing.module.ts b/src/app/suggestions-page/suggestions-page-routing.module.ts new file mode 100644 index 00000000000..20ed658707e --- /dev/null +++ b/src/app/suggestions-page/suggestions-page-routing.module.ts @@ -0,0 +1,36 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { SuggestionsPageResolver } from './suggestions-page.resolver'; +import { SuggestionsPageComponent } from './suggestions-page.component'; +import { AuthenticatedGuard } from '../core/auth/authenticated.guard'; +import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; +import { SiteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + path: ':targetId', + resolve: { + suggestionTargets: SuggestionsPageResolver, + breadcrumb: I18nBreadcrumbResolver + }, + data: { + title: 'admin.notifications.recitersuggestion.page.title', + breadcrumbKey: 'admin.notifications.recitersuggestion', + showBreadcrumbsFluid: false + }, + canActivate: [AuthenticatedGuard], + runGuardsAndResolvers: 'always', + component: SuggestionsPageComponent, + }, + ]) + ], + providers: [ + SuggestionsPageResolver + ] +}) +export class SuggestionsPageRoutingModule { + +} diff --git a/src/app/suggestions-page/suggestions-page.component.html b/src/app/suggestions-page/suggestions-page.component.html new file mode 100644 index 00000000000..fb5f08b6a4c --- /dev/null +++ b/src/app/suggestions-page/suggestions-page.component.html @@ -0,0 +1,48 @@ +
+
+
+ +
+ +

+ {{ translateSuggestionType() | translate }} + {{'reciter.suggestion.suggestionFor' | translate}} + {{researcherName}} + {{'reciter.suggestion.from.source' | translate}} {{ translateSuggestionSource() | translate }} +

+ +
+ + ({{ getSelectedSuggestionsCount() }}) + + +
+ + +
    +
  • + +
  • +
+
+
+
+
+
+
diff --git a/src/app/suggestions-page/suggestions-page.component.scss b/src/app/suggestions-page/suggestions-page.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/suggestions-page/suggestions-page.component.spec.ts b/src/app/suggestions-page/suggestions-page.component.spec.ts new file mode 100644 index 00000000000..ad518930d98 --- /dev/null +++ b/src/app/suggestions-page/suggestions-page.component.spec.ts @@ -0,0 +1,107 @@ +import { CommonModule } from '@angular/common'; +import { BrowserModule } from '@angular/platform-browser'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TranslateModule, TranslateService } from '@ngx-translate/core'; +import { of as observableOf } from 'rxjs'; + +import { SuggestionsPageComponent } from './suggestions-page.component'; +import { SuggestionListElementComponent } from '../openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component'; +import { SuggestionsService } from '../openaire/reciter-suggestions/suggestions.service'; +import { getMockOpenaireStateService, getMockSuggestionsService } from '../shared/mocks/openaire.mock'; +import { buildPaginatedList, PaginatedList } from '../core/data/paginated-list.model'; +import { OpenaireSuggestion } from '../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { mockSuggestionPublicationOne, mockSuggestionPublicationTwo } from '../shared/mocks/reciter-suggestion.mock'; +import { SuggestionEvidencesComponent } from '../openaire/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component'; +import { ObjectKeysPipe } from '../shared/utils/object-keys-pipe'; +import { VarDirective } from '../shared/utils/var.directive'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RouterStub } from '../shared/testing/router.stub'; +import { mockSuggestionTargetsObjectOne } from '../shared/mocks/reciter-suggestion-targets.mock'; +import { AuthService } from '../core/auth/auth.service'; +import { NotificationsService } from '../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../shared/testing/notifications-service.stub'; +import { getMockTranslateService } from '../shared/mocks/translate.service.mock'; +import { SuggestionTargetsStateService } from '../openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service'; +import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; +import { createSuccessfulRemoteDataObject } from '../shared/remote-data.utils'; +import { PageInfo } from '../core/shared/page-info.model'; +import { TestScheduler } from 'rxjs/testing'; +import { getTestScheduler } from 'jasmine-marbles'; +import { PaginationServiceStub } from '../shared/testing/pagination-service.stub'; +import { PaginationService } from '../core/pagination/pagination.service'; + +describe('SuggestionPageComponent', () => { + let component: SuggestionsPageComponent; + let fixture: ComponentFixture; + let scheduler: TestScheduler; + const mockSuggestionsService = getMockSuggestionsService(); + const mockSuggestionsTargetStateService = getMockOpenaireStateService(); + const suggestionTargetsList: PaginatedList = buildPaginatedList(new PageInfo(), [mockSuggestionPublicationOne, mockSuggestionPublicationTwo]); + const router = new RouterStub(); + const routeStub = { + data: observableOf({ + suggestionTargets: createSuccessfulRemoteDataObject(mockSuggestionTargetsObjectOne) + }), + queryParams: observableOf({}) + }; + const workspaceitemServiceMock = jasmine.createSpyObj('WorkspaceitemDataService', { + importExternalSourceEntry: jasmine.createSpy('importExternalSourceEntry') + }); + + const authService = jasmine.createSpyObj('authService', { + isAuthenticated: observableOf(true), + setRedirectUrl: {} + }); + const paginationService = new PaginationServiceStub(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + BrowserModule, + CommonModule, + TranslateModule.forRoot() + ], + declarations: [ + SuggestionEvidencesComponent, + SuggestionListElementComponent, + SuggestionsPageComponent, + ObjectKeysPipe, + VarDirective + ], + providers: [ + { provide: AuthService, useValue: authService }, + { provide: ActivatedRoute, useValue: routeStub }, + { provide: WorkspaceitemDataService, useValue: workspaceitemServiceMock }, + { provide: Router, useValue: router }, + { provide: SuggestionsService, useValue: mockSuggestionsService }, + { provide: SuggestionTargetsStateService, useValue: mockSuggestionsTargetStateService }, + { provide: NotificationsService, useValue: new NotificationsServiceStub() }, + { provide: TranslateService, useValue: getMockTranslateService() }, + { provide: PaginationService, useValue: paginationService }, + SuggestionsPageComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }) + .compileComponents().then(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SuggestionsPageComponent); + component = fixture.componentInstance; + scheduler = getTestScheduler(); + }); + + it('should create', () => { + spyOn(component, 'updatePage').and.stub(); + + scheduler.schedule(() => fixture.detectChanges()); + scheduler.flush(); + + expect(component).toBeTruthy(); + expect(component.suggestionId).toBe(mockSuggestionTargetsObjectOne.id); + expect(component.researcherName).toBe(mockSuggestionTargetsObjectOne.display); + expect(component.updatePage).toHaveBeenCalled(); + }); +}); diff --git a/src/app/suggestions-page/suggestions-page.component.ts b/src/app/suggestions-page/suggestions-page.component.ts new file mode 100644 index 00000000000..911f6167de5 --- /dev/null +++ b/src/app/suggestions-page/suggestions-page.component.ts @@ -0,0 +1,285 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Data, Router } from '@angular/router'; + +import { BehaviorSubject, combineLatest, Observable } from 'rxjs'; +import { distinctUntilChanged, map, switchMap, take } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; + +import { SortDirection, SortOptions, } from '../core/cache/models/sort-options.model'; +import { PaginatedList } from '../core/data/paginated-list.model'; +import { RemoteData } from '../core/data/remote-data'; +import { getFirstSucceededRemoteDataPayload, redirectOn4xx } from '../core/shared/operators'; +import { SuggestionBulkResult, SuggestionsService } from '../openaire/reciter-suggestions/suggestions.service'; +import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model'; +import { OpenaireSuggestion } from '../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; +import { OpenaireSuggestionTarget } from '../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; +import { AuthService } from '../core/auth/auth.service'; +import { SuggestionApproveAndImport } from '../openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component'; +import { NotificationsService } from '../shared/notifications/notifications.service'; +import { SuggestionTargetsStateService } from '../openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service'; +import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; +import { PaginationService } from '../core/pagination/pagination.service'; +import { FindListOptions } from '../core/data/request.models'; +import { WorkspaceItem } from '../core/submission/models/workspaceitem.model'; + +@Component({ + selector: 'ds-suggestion-page', + templateUrl: './suggestions-page.component.html', + styleUrls: ['./suggestions-page.component.scss'], +}) +export class SuggestionsPageComponent implements OnInit { + + /** + * The pagination configuration + */ + paginationOptions: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), { + id: 'sp', + pageSizeOptions: [5, 10, 20, 40, 60] + }); + + /** + * The sorting configuration + */ + paginationSortConfig: SortOptions = new SortOptions('trust', SortDirection.DESC); + + /** + * The FindListOptions object + */ + defaultConfig: FindListOptions = Object.assign(new FindListOptions(), {sort: this.paginationSortConfig}); + + /** + * A boolean representing if results are loading + */ + public processing$ = new BehaviorSubject(false); + + /** + * A list of remote data objects of suggestions + */ + suggestionsRD$: BehaviorSubject> = new BehaviorSubject>({} as any); + + targetRD$: Observable>; + targetId$: Observable; + + suggestionTarget: OpenaireSuggestionTarget; + suggestionId: any; + suggestionSource: any; + researcherName: any; + researcherUuid: any; + + selectedSuggestions: { [id: string]: OpenaireSuggestion } = {}; + isBulkOperationPending = false; + + constructor( + private authService: AuthService, + private notificationService: NotificationsService, + private paginationService: PaginationService, + private route: ActivatedRoute, + private router: Router, + private suggestionService: SuggestionsService, + private suggestionTargetsStateService: SuggestionTargetsStateService, + private translateService: TranslateService, + private workspaceItemService: WorkspaceitemDataService + ) { + } + + ngOnInit(): void { + this.targetRD$ = this.route.data.pipe( + map((data: Data) => data.suggestionTargets as RemoteData), + redirectOn4xx(this.router, this.authService) + ); + + this.targetId$ = this.targetRD$.pipe( + getFirstSucceededRemoteDataPayload(), + map((target: OpenaireSuggestionTarget) => target.id) + ); + this.targetRD$.pipe( + getFirstSucceededRemoteDataPayload() + ).subscribe((suggestionTarget: OpenaireSuggestionTarget) => { + this.suggestionTarget = suggestionTarget; + this.suggestionId = suggestionTarget.id; + this.researcherName = suggestionTarget.display; + this.suggestionSource = suggestionTarget.source; + this.researcherUuid = this.suggestionService.getTargetUuid(suggestionTarget); + this.updatePage(); + }); + + this.suggestionTargetsStateService.dispatchMarkUserSuggestionsAsVisitedAction(); + } + + /** + * Called when one of the pagination settings is changed + */ + onPaginationChange() { + this.updatePage(); + } + + /** + * Update the list of suggestions + */ + updatePage() { + this.processing$.next(true); + const pageConfig$: Observable = this.paginationService.getFindListOptions( + this.paginationOptions.id, + this.defaultConfig, + ).pipe( + distinctUntilChanged() + ); + combineLatest([this.targetId$, pageConfig$]).pipe( + switchMap(([targetId, config]: [string, FindListOptions]) => { + return this.suggestionService.getSuggestions( + targetId, + config.elementsPerPage, + config.currentPage, + config.sort + ); + }), + take(1) + ).subscribe((results: PaginatedList) => { + this.processing$.next(false); + this.suggestionsRD$.next(results); + this.suggestionService.clearSuggestionRequests(); + // navigate to the mydspace if no suggestions remains + + // if (results.totalElements === 0) { + // const content = this.translateService.instant('reciter.suggestion.empty', + // this.suggestionService.getNotificationSuggestionInterpolation(this.suggestionTarget)); + // this.notificationService.success('', content, {timeOut:0}, true); + // TODO if the target is not the current use route to the suggestion target page + // this.router.navigate(['/mydspace']); + // } + }); + } + + /** + * Used to delete a suggestion. + * @suggestionId + */ + notMine(suggestionId) { + this.suggestionService.notMine(suggestionId).subscribe((res) => { + this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction(); + this.updatePage(); + }); + } + + /** + * Used to delete all selected suggestions. + */ + notMineAllSelected() { + this.isBulkOperationPending = true; + this.suggestionService + .notMineMultiple(Object.values(this.selectedSuggestions)) + .subscribe((results: SuggestionBulkResult) => { + this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction(); + this.updatePage(); + this.isBulkOperationPending = false; + this.selectedSuggestions = {}; + if (results.success > 0) { + this.notificationService.success( + this.translateService.get('reciter.suggestion.notMine.bulk.success', + {count: results.success})); + } + if (results.fails > 0) { + this.notificationService.error( + this.translateService.get('reciter.suggestion.notMine.bulk.error', + {count: results.fails})); + } + }); + } + + /** + * Used to approve & import. + * @param event contains the suggestion and the target collection + */ + approveAndImport(event: SuggestionApproveAndImport) { + this.suggestionService.approveAndImport(this.workspaceItemService, event.suggestion, event.collectionId) + .subscribe((workspaceitem: WorkspaceItem) => { + const content = this.translateService.instant('reciter.suggestion.approveAndImport.success', { workspaceItemId: workspaceitem.id }); + this.notificationService.success('', content, {timeOut:0}, true); + this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction(); + this.updatePage(); + }); + } + + /** + * Used to approve & import all selected suggestions. + * @param event contains the target collection + */ + approveAndImportAllSelected(event: SuggestionApproveAndImport) { + this.isBulkOperationPending = true; + this.suggestionService + .approveAndImportMultiple(this.workspaceItemService, Object.values(this.selectedSuggestions), event.collectionId) + .subscribe((results: SuggestionBulkResult) => { + this.suggestionTargetsStateService.dispatchRefreshUserSuggestionsAction(); + this.updatePage(); + this.isBulkOperationPending = false; + this.selectedSuggestions = {}; + if (results.success > 0) { + this.notificationService.success( + this.translateService.get('reciter.suggestion.approveAndImport.bulk.success', + {count: results.success})); + } + if (results.fails > 0) { + this.notificationService.error( + this.translateService.get('reciter.suggestion.approveAndImport.bulk.error', + {count: results.fails})); + } + }); + } + + /** + * When a specific suggestion is selected. + * @param object the suggestions + * @param selected the new selected value for the suggestion + */ + onSelected(object: OpenaireSuggestion, selected: boolean) { + if (selected) { + this.selectedSuggestions[object.id] = object; + } else { + delete this.selectedSuggestions[object.id]; + } + } + + /** + * When Toggle Select All occurs. + * @param suggestions all the visible suggestions inside the page + */ + onToggleSelectAll(suggestions: OpenaireSuggestion[]) { + if ( this.getSelectedSuggestionsCount() > 0) { + this.selectedSuggestions = {}; + } else { + suggestions.forEach((suggestion) => { + this.selectedSuggestions[suggestion.id] = suggestion; + }); + } + } + + /** + * The current number of selected suggestions. + */ + getSelectedSuggestionsCount(): number { + return Object.keys(this.selectedSuggestions).length; + } + + /** + * Return true if all the suggestion are configured with the same fixed collection in the configuration. + * @param suggestions + */ + isCollectionFixed(suggestions: OpenaireSuggestion[]): boolean { + return this.suggestionService.isCollectionFixed(suggestions); + } + + /** + * Label to be used to translate the suggestion source. + */ + translateSuggestionSource() { + return this.suggestionService.translateSuggestionSource(this.suggestionSource); + } + + /** + * Label to be used to translate the suggestion type. + */ + translateSuggestionType() { + return this.suggestionService.translateSuggestionType(this.suggestionSource); + } + +} diff --git a/src/app/suggestions-page/suggestions-page.module.ts b/src/app/suggestions-page/suggestions-page.module.ts new file mode 100644 index 00000000000..3fad2d0c19e --- /dev/null +++ b/src/app/suggestions-page/suggestions-page.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { SuggestionsPageComponent } from './suggestions-page.component'; +import { SharedModule } from '../shared/shared.module'; +import { SuggestionsPageRoutingModule } from './suggestions-page-routing.module'; +import { SuggestionsService } from '../openaire/reciter-suggestions/suggestions.service'; +import { OpenaireSuggestionsDataService } from '../core/openaire/reciter-suggestions/openaire-suggestions-data.service'; +import { OpenaireModule } from '../openaire/openaire.module'; + +@NgModule({ + declarations: [SuggestionsPageComponent], + imports: [ + CommonModule, + SharedModule, + OpenaireModule, + SuggestionsPageRoutingModule + ], + providers: [ + OpenaireSuggestionsDataService, + SuggestionsService + ] +}) +export class SuggestionsPageModule { } diff --git a/src/app/suggestions-page/suggestions-page.resolver.ts b/src/app/suggestions-page/suggestions-page.resolver.ts new file mode 100644 index 00000000000..0027ae2e779 --- /dev/null +++ b/src/app/suggestions-page/suggestions-page.resolver.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; + +import { Observable } from 'rxjs'; +import { find } from 'rxjs/operators'; + +import { RemoteData } from '../core/data/remote-data'; +import { hasValue } from '../shared/empty.util'; +import { OpenaireSuggestionsDataService } from '../core/openaire/reciter-suggestions/openaire-suggestions-data.service'; +import { OpenaireSuggestionTarget } from '../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; + +/** + * This class represents a resolver that requests a specific collection before the route is activated + */ +@Injectable() +export class SuggestionsPageResolver implements Resolve> { + constructor(private suggestionsDataService: OpenaireSuggestionsDataService) { + } + + /** + * Method for resolving a suggestion target based on the parameters in the current route + * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot + * @param {RouterStateSnapshot} state The current RouterStateSnapshot + * @returns Observable<> Emits the found collection based on the parameters in the current route, + * or an error if something went wrong + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> { + return this.suggestionsDataService.getTargetById(route.params.targetId).pipe( + find((RD) => hasValue(RD.hasFailed) || RD.hasSucceeded), + ); + } +} diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 2af9d16b0c3..e2919097d6c 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -27,6 +27,10 @@ "404.page-not-found": "page not found", + "admin.notifications.recitersuggestion.breadcrumbs": "Suggestions", + + "admin.notifications.recitersuggestion.page.title": "Suggestions", + "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.title": "System curation tasks", @@ -2511,6 +2515,7 @@ "menu.section.icon.unpin": "Unpin sidebar", + "menu.section.icon.notifications": "Notifictions menu section", "menu.section.import": "Import", @@ -2533,6 +2538,10 @@ "menu.section.new_process": "Process", + "menu.section.notifications": "Notifications", + + "menu.section.notifications_reciter": "Publication Claim", + "menu.section.pin": "Pin sidebar", @@ -2960,6 +2969,62 @@ "media-viewer.playlist": "Playlist", + "reciter.suggestion.loading": "Loading ...", + + "reciter.suggestion.title": "Suggestions", + + "reciter.suggestion.targets.description": "Below you can see all the suggestions ", + + "reciter.suggestion.targets": "Current Suggestions", + + "reciter.suggestion.table.name": "Researcher Name", + + "reciter.suggestion.table.actions": "Actions", + + "reciter.suggestion.button.review": "Review {{ total }} suggestion(s)", + + "reciter.suggestion.noTargets": "No target found.", + + "reciter.suggestion.target.error.service.retrieve": "An error occurred while loading the Suggestion targets", + + "reciter.suggestion.evidence.type": "Type", + + "reciter.suggestion.evidence.score": "Score", + + "reciter.suggestion.evidence.notes": "Notes", + + "reciter.suggestion.approveAndImport": "Approve & import", + + "reciter.suggestion.approveAndImport.success": "The suggestion has been imported successfully", + + "reciter.suggestion.approveAndImport.bulk": "Approve & import Selected", + + "reciter.suggestion.approveAndImport.bulk.success": "{{ count }} suggestions have been imported successfully ", + + "reciter.suggestion.approveAndImport.bulk.error": "{{ count }} suggestions haven't been imported due to unexpected server errors", + + "reciter.suggestion.notMine": "Not mine", + + "reciter.suggestion.notMine.success": "The suggestion has been discarded", + + "reciter.suggestion.notMine.bulk": "Not mine Selected", + + "reciter.suggestion.notMine.bulk.success": "{{ count }} suggestions have been discarded ", + + "reciter.suggestion.notMine.bulk.error": "{{ count }} suggestions haven't been discarded due to unexpected server errors", + + "reciter.suggestion.seeEvidence": "See evidence", + + "reciter.suggestion.hideEvidence": "Hide evidence", + + "reciter.suggestion.suggestionFor": "Suggestion for", + + "reciter.suggestion.source.oaire": "OpenAIRE Graph", + + "reciter.suggestion.from.source": "from the ", + + "reciter.suggestion.totalScore": "Total Score", + "register-email.title": "New user registration", From b4d6fbc390282a381e1f7cc340615c40f39e936a Mon Sep 17 00:00:00 2001 From: Luca Giamminonni Date: Mon, 2 May 2022 17:40:51 +0200 Subject: [PATCH 002/504] [CST-5249] Fixed compilation issues --- .../admin-sidebar/admin-sidebar.component.ts | 1 - .../openaire-suggestion-source.model.ts | 2 +- .../openaire-suggestion-target.model.ts | 2 +- .../models/openaire-suggestion.model.ts | 2 +- .../openaire-suggestions-data.service.ts | 4 +- .../submission/workspaceitem-data.service.ts | 31 ++++++++++++- src/app/openaire/openaire.effects.ts | 5 ++ src/app/openaire/openaire.module.ts | 2 + .../openaire/reciter-suggestions/selectors.ts | 6 +-- .../suggestion-list-element.component.html | 1 - .../suggestion-targets.component.html | 1 - .../suggestion-targets.effects.ts | 2 +- .../suggestions.service.ts | 12 ++--- .../suggestions-page.component.ts | 5 +- src/config/app-config.interface.ts | 2 + src/config/default-app-config.ts | 9 ++++ src/config/layout-config.interfaces.ts | 46 +++++++++++++++++++ 17 files changed, 112 insertions(+), 21 deletions(-) create mode 100644 src/app/openaire/openaire.effects.ts create mode 100644 src/config/layout-config.interfaces.ts diff --git a/src/app/admin/admin-sidebar/admin-sidebar.component.ts b/src/app/admin/admin-sidebar/admin-sidebar.component.ts index a8c5ef800c7..b770e3d6753 100644 --- a/src/app/admin/admin-sidebar/admin-sidebar.component.ts +++ b/src/app/admin/admin-sidebar/admin-sidebar.component.ts @@ -42,7 +42,6 @@ import { Router, ActivatedRoute } from '@angular/router'; import {NOTIFICATIONS_RECITER_SUGGESTION_PATH} from "../admin-notifications/admin-notifications-routing-paths"; import { MenuID } from '../../shared/menu/menu-id.model'; import { MenuItemType } from '../../shared/menu/menu-item-type.model'; -import { ActivatedRoute } from '@angular/router'; /** * Component representing the admin sidebar diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts index 6da9fd47b9b..d71b49b913f 100644 --- a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts @@ -1,11 +1,11 @@ import { autoserialize, deserialize } from 'cerialize'; -import { CacheableObject } from '../../../cache/object-cache.reducer'; import { SUGGESTION_SOURCE } from './openaire-suggestion-objects.resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; import { typedObject } from '../../../cache/builders/build-decorators'; +import {CacheableObject} from "../../../cache/cacheable-object.model"; /** * The interface representing the Suggestion Source model diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts index e35972bc798..06f85ea5b3c 100644 --- a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts @@ -1,11 +1,11 @@ import { autoserialize, deserialize } from 'cerialize'; -import { CacheableObject } from '../../../cache/object-cache.reducer'; import { SUGGESTION_TARGET } from './openaire-suggestion-objects.resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; import { typedObject } from '../../../cache/builders/build-decorators'; +import {CacheableObject} from "../../../cache/cacheable-object.model"; /** * The interface representing the Suggestion Target model diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts index 3ff5d7b630c..2d28ccf9bc3 100644 --- a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts @@ -1,12 +1,12 @@ import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { CacheableObject } from '../../../cache/object-cache.reducer'; import { SUGGESTION } from './openaire-suggestion-objects.resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; import { typedObject } from '../../../cache/builders/build-decorators'; import { MetadataMap, MetadataMapSerializer } from '../../../shared/metadata.models'; +import {CacheableObject} from "../../../cache/cacheable-object.model"; export interface SuggestionEvidences { [sectionId: string]: { diff --git a/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts b/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts index d961eaf9b52..7454caa1d93 100644 --- a/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts +++ b/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts @@ -4,14 +4,12 @@ import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { CoreState } from '../../core.reducers'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { dataService } from '../../cache/builders/build-decorators'; import { RequestService } from '../../data/request.service'; -import { FindListOptions } from '../../data/request.models'; import { DataService } from '../../data/data.service'; import { ChangeAnalyzer } from '../../data/change-analyzer'; import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service'; @@ -24,6 +22,8 @@ import { OpenaireSuggestionTarget } from './models/openaire-suggestion-target.mo import { OpenaireSuggestion } from './models/openaire-suggestion.model'; import { RequestParam } from '../../cache/models/request-param.model'; import { NoContent } from '../../shared/NoContent.model'; +import {CoreState} from "../../core-state.model"; +import {FindListOptions} from "../../data/find-list-options.model"; /* tslint:disable:max-classes-per-file */ diff --git a/src/app/core/submission/workspaceitem-data.service.ts b/src/app/core/submission/workspaceitem-data.service.ts index 1b9782834c0..a4dbaab6ca5 100644 --- a/src/app/core/submission/workspaceitem-data.service.ts +++ b/src/app/core/submission/workspaceitem-data.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import {HttpClient, HttpHeaders} from '@angular/common/http'; import { Store } from '@ngrx/store'; import { dataService } from '../cache/builders/build-decorators'; @@ -17,6 +17,10 @@ import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RequestParam } from '../cache/models/request-param.model'; import { CoreState } from '../core-state.model'; import { FindListOptions } from '../data/find-list-options.model'; +import {HttpOptions} from "../dspace-rest/dspace-rest.service"; +import {find, map} from "rxjs/operators"; +import {PostRequest} from "../data/request.models"; +import {hasValue} from "../../shared/empty.util"; /** * A service that provides methods to make REST requests with workspaceitems endpoint. @@ -57,4 +61,29 @@ export class WorkspaceitemDataService extends DataService { return this.findByHref(href$, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } + /** + * Import an external source entry into a collection + * @param externalSourceEntryHref + * @param collectionId + */ + public importExternalSourceEntry(externalSourceEntryHref: string, collectionId: string): Observable> { + const options: HttpOptions = Object.create({}); + let headers = new HttpHeaders(); + headers = headers.append('Content-Type', 'text/uri-list'); + options.headers = headers; + + const requestId = this.requestService.generateRequestId(); + const href$ = this.halService.getEndpoint(this.linkPath).pipe(map((href) => `${href}?owningCollection=${collectionId}`)); + + href$.pipe( + find((href: string) => hasValue(href)), + map((href: string) => { + const request = new PostRequest(requestId, href, externalSourceEntryHref, options); + this.requestService.send(request); + }) + ).subscribe(); + + return this.rdbService.buildFromRequestUUID(requestId); + } + } diff --git a/src/app/openaire/openaire.effects.ts b/src/app/openaire/openaire.effects.ts new file mode 100644 index 00000000000..d771089f92b --- /dev/null +++ b/src/app/openaire/openaire.effects.ts @@ -0,0 +1,5 @@ +import { SuggestionTargetsEffects } from './reciter-suggestions/suggestion-targets/suggestion-targets.effects'; + +export const openaireEffects = [ + SuggestionTargetsEffects +]; diff --git a/src/app/openaire/openaire.module.ts b/src/app/openaire/openaire.module.ts index 22d04f3002b..ace4622190f 100644 --- a/src/app/openaire/openaire.module.ts +++ b/src/app/openaire/openaire.module.ts @@ -18,12 +18,14 @@ import { SuggestionsPopupComponent } from './reciter-suggestions/suggestions-pop import { SuggestionsNotificationComponent } from './reciter-suggestions/suggestions-notification/suggestions-notification.component'; import { TranslateModule } from '@ngx-translate/core'; import { SearchModule } from '../shared/search/search.module'; +import {openaireEffects} from "./openaire.effects"; const MODULES = [ CommonModule, SharedModule, CoreModule.forRoot(), StoreModule.forFeature('openaire', openaireReducers, storeModuleConfig as StoreConfig), + EffectsModule.forFeature(openaireEffects), TranslateModule ]; diff --git a/src/app/openaire/reciter-suggestions/selectors.ts b/src/app/openaire/reciter-suggestions/selectors.ts index e699b27dbae..292e63472a7 100644 --- a/src/app/openaire/reciter-suggestions/selectors.ts +++ b/src/app/openaire/reciter-suggestions/selectors.ts @@ -1,8 +1,8 @@ -import { createSelector, MemoizedSelector } from '@ngrx/store'; -import { subStateSelector } from '../../shared/selector.util'; +import {createFeatureSelector, createSelector, MemoizedSelector} from '@ngrx/store'; import { openaireSelector, OpenaireState } from '../openaire.reducer'; import { OpenaireSuggestionTarget } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; import { SuggestionTargetState } from './suggestion-targets/suggestion-targets.reducer'; +import {subStateSelector} from "../../submission/selectors"; /** * Returns the Reciter Suggestion Target state. @@ -10,7 +10,7 @@ import { SuggestionTargetState } from './suggestion-targets/suggestion-targets.r * @param {AppState} state Top level state. * @return {OpenaireState} */ -const _getReciterSuggestionTargetState = (state: any) => state.openaire; +const _getReciterSuggestionTargetState = createFeatureSelector('openaire'); // Reciter Suggestion Targets // ---------------------------------------------------------------------------- diff --git a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html index 05f9c0ac771..f37d595c45b 100644 --- a/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html +++ b/src/app/openaire/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.html @@ -21,7 +21,6 @@ [showLabel]="false" [object]="listableObject" [linkType]="0" - [hideMetrics]="true" > {{'reciter.suggestion.title'| transla [paginationOptions]="paginationConfig" [collectionSize]="(totalElements$ | async)" [hideGear]="false" - [hideSortOptions]="true" [retainScrollPosition]="false" (paginationChange)="getSuggestionTargets()"> diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts index 85e871403c4..9a007fab214 100644 --- a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts @@ -81,7 +81,7 @@ export class SuggestionTargetsEffects { return this.store$.select((state: any) => state.core.auth.user) .pipe( switchMap((user: EPerson) => { - return this.suggestionsService.retrieveCurrentUserSuggestions(user) + return this.suggestionsService.retrieveCurrentUserSuggestions(user.uuid) .pipe( map((suggestionTargets: OpenaireSuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)), catchError((errors) => of(errors)) diff --git a/src/app/openaire/reciter-suggestions/suggestions.service.ts b/src/app/openaire/reciter-suggestions/suggestions.service.ts index de743d95e34..5908c8c6bff 100644 --- a/src/app/openaire/reciter-suggestions/suggestions.service.ts +++ b/src/app/openaire/reciter-suggestions/suggestions.service.ts @@ -5,7 +5,6 @@ import { catchError, map, mergeMap, take } from 'rxjs/operators'; import { OpenaireSuggestionsDataService } from '../../core/openaire/reciter-suggestions/openaire-suggestions-data.service'; import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; -import { FindListOptions } from '../../core/data/request.models'; import { RemoteData } from '../../core/data/remote-data'; import { PaginatedList } from '../../core/data/paginated-list.model'; import { OpenaireSuggestionTarget } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; @@ -25,8 +24,9 @@ import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-da import { TranslateService } from '@ngx-translate/core'; import { NoContent } from '../../core/shared/NoContent.model'; import { environment } from '../../../environments/environment'; -import { SuggestionConfig } from '../../../config/layout-config.interfaces'; import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; +import {FindListOptions} from "../../core/data/find-list-options.model"; +import {SuggestionConfig} from "../../../config/layout-config.interfaces"; export interface SuggestionBulkResult { success: number; @@ -142,11 +142,11 @@ export class SuggestionsService { /** * Retrieve suggestion targets for the given user * - * @param user - * The EPerson object for which to retrieve suggestion targets + * @param userUuid + * The EPerson id for which to retrieve suggestion targets */ - public retrieveCurrentUserSuggestions(user: EPerson): Observable { - return this.researcherProfileService.findById(user.uuid).pipe( + public retrieveCurrentUserSuggestions(userUuid: string): Observable { + return this.researcherProfileService.findById(userUuid).pipe( mergeMap((profile: ResearcherProfile) => { if (isNotEmpty(profile)) { return this.researcherProfileService.findRelatedItemId(profile).pipe( diff --git a/src/app/suggestions-page/suggestions-page.component.ts b/src/app/suggestions-page/suggestions-page.component.ts index 911f6167de5..850a30da221 100644 --- a/src/app/suggestions-page/suggestions-page.component.ts +++ b/src/app/suggestions-page/suggestions-page.component.ts @@ -8,7 +8,7 @@ import { TranslateService } from '@ngx-translate/core'; import { SortDirection, SortOptions, } from '../core/cache/models/sort-options.model'; import { PaginatedList } from '../core/data/paginated-list.model'; import { RemoteData } from '../core/data/remote-data'; -import { getFirstSucceededRemoteDataPayload, redirectOn4xx } from '../core/shared/operators'; +import { getFirstSucceededRemoteDataPayload } from '../core/shared/operators'; import { SuggestionBulkResult, SuggestionsService } from '../openaire/reciter-suggestions/suggestions.service'; import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model'; import { OpenaireSuggestion } from '../core/openaire/reciter-suggestions/models/openaire-suggestion.model'; @@ -19,8 +19,9 @@ import { NotificationsService } from '../shared/notifications/notifications.serv import { SuggestionTargetsStateService } from '../openaire/reciter-suggestions/suggestion-targets/suggestion-targets.state.service'; import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; import { PaginationService } from '../core/pagination/pagination.service'; -import { FindListOptions } from '../core/data/request.models'; import { WorkspaceItem } from '../core/submission/models/workspaceitem.model'; +import {FindListOptions} from "../core/data/find-list-options.model"; +import {redirectOn4xx} from "../core/shared/authorized.operators"; @Component({ selector: 'ds-suggestion-page', diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index 121e80cd74b..6446e7f127f 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -14,6 +14,7 @@ import { AuthConfig } from './auth-config.interfaces'; import { UIServerConfig } from './ui-server-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; import { BrowseByConfig } from './browse-by-config.interface'; +import {SuggestionConfig} from "./layout-config.interfaces"; interface AppConfig extends Config { ui: UIServerConfig; @@ -32,6 +33,7 @@ interface AppConfig extends Config { collection: CollectionPageConfig; themes: ThemeConfig[]; mediaViewer: MediaViewerConfig; + suggestion: SuggestionConfig[]; } const APP_CONFIG = new InjectionToken('APP_CONFIG'); diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index dc54c2fcb0f..aea29fc819e 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -14,6 +14,7 @@ import { ServerConfig } from './server-config.interface'; import { SubmissionConfig } from './submission-config.interface'; import { ThemeConfig } from './theme.model'; import { UIServerConfig } from './ui-server-config.interface'; +import {SuggestionConfig} from "./layout-config.interfaces"; export class DefaultAppConfig implements AppConfig { production = false; @@ -210,6 +211,14 @@ export class DefaultAppConfig implements AppConfig { } }; + suggestion: SuggestionConfig[] = [ + // { + // // Use this configuration to map a suggestion import to a specific collection based on the suggestion type. + // source: 'suggestionSource', + // collectionId: 'collectionUUID' + // } + ]; + // Theme Config themes: ThemeConfig[] = [ // Add additional themes here. In the case where multiple themes match a route, the first one diff --git a/src/config/layout-config.interfaces.ts b/src/config/layout-config.interfaces.ts new file mode 100644 index 00000000000..0b15a06aa92 --- /dev/null +++ b/src/config/layout-config.interfaces.ts @@ -0,0 +1,46 @@ +import { Config } from './config.interface'; + +export interface UrnConfig extends Config { + name: string; + baseUrl: string; +} + +export interface CrisRefConfig extends Config { + entityType: string; + icon: string; +} + +export interface CrisLayoutMetadataBoxConfig extends Config { + defaultMetadataLabelColStyle: string; + defaultMetadataValueColStyle: string; +} + +export interface CrisLayoutTypeConfig { + orientation: string; +} + +export interface NavbarConfig extends Config { + showCommunityCollection: boolean; +} + +export interface CrisItemPageConfig extends Config { + [entity: string]: CrisLayoutTypeConfig; + default: CrisLayoutTypeConfig; +} + + +export interface CrisLayoutConfig extends Config { + urn: UrnConfig[]; + crisRef: CrisRefConfig[]; + itemPage: CrisItemPageConfig; + metadataBox: CrisLayoutMetadataBoxConfig; +} + +export interface LayoutConfig extends Config { + navbar: NavbarConfig; +} + +export interface SuggestionConfig extends Config { + source: string; + collectionId: string; +} From 11d25e66997d99bd1cb932c057feff3f8dc30e70 Mon Sep 17 00:00:00 2001 From: Luca Giamminonni Date: Wed, 4 May 2022 13:16:13 +0200 Subject: [PATCH 003/504] [CST-5249] Fixed suggestion page --- .../admin-sidebar/admin-sidebar.component.ts | 2 +- src/app/core/core.module.ts | 2 +- .../openaire-suggestion-source.model.ts | 2 +- .../openaire-suggestion-target.model.ts | 2 +- .../models/openaire-suggestion.model.ts | 2 +- .../openaire-suggestions-data.service.ts | 5 +- .../submission/workspaceitem-data.service.ts | 8 +- src/app/openaire/openaire.module.ts | 2 +- .../openaire/reciter-suggestions/selectors.ts | 2 +- .../suggestion-targets.actions.ts | 1 + .../suggestion-targets.effects.ts | 6 +- .../suggestions.service.ts | 4 +- .../dso-selector-modal-wrapper.component.ts | 24 +- src/app/shared/mocks/openaire.mock.ts | 445 ------------------ .../suggestions-page.component.ts | 4 +- src/assets/i18n/en.json5 | 1 + src/config/app-config.interface.ts | 2 +- src/config/default-app-config.ts | 2 +- src/environments/environment.test.ts | 8 + 19 files changed, 55 insertions(+), 469 deletions(-) diff --git a/src/app/admin/admin-sidebar/admin-sidebar.component.ts b/src/app/admin/admin-sidebar/admin-sidebar.component.ts index b770e3d6753..c13599be9da 100644 --- a/src/app/admin/admin-sidebar/admin-sidebar.component.ts +++ b/src/app/admin/admin-sidebar/admin-sidebar.component.ts @@ -39,7 +39,7 @@ import { CSSVariableService } from '../../shared/sass-helper/sass-helper.service import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; import { Router, ActivatedRoute } from '@angular/router'; -import {NOTIFICATIONS_RECITER_SUGGESTION_PATH} from "../admin-notifications/admin-notifications-routing-paths"; +import {NOTIFICATIONS_RECITER_SUGGESTION_PATH} from '../admin-notifications/admin-notifications-routing-paths'; import { MenuID } from '../../shared/menu/menu-id.model'; import { MenuItemType } from '../../shared/menu/menu-item-type.model'; diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 7273996401c..879ba76c7df 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -168,7 +168,7 @@ import { OpenaireSuggestionSource } from './openaire/reciter-suggestions/models/ import { ResearcherProfileService } from './profile/researcher-profile.service'; import { ProfileClaimService } from '../profile-page/profile-claim/profile-claim.service'; import { ResearcherProfile } from './profile/model/researcher-profile.model'; -import {SubmissionAccessesModel} from "./config/models/config-submission-accesses.model"; +import {SubmissionAccessesModel} from './config/models/config-submission-accesses.model'; /** * When not in production, endpoint responses can be mocked for testing purposes diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts index d71b49b913f..00f5f11936b 100644 --- a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-source.model.ts @@ -5,7 +5,7 @@ import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; import { typedObject } from '../../../cache/builders/build-decorators'; -import {CacheableObject} from "../../../cache/cacheable-object.model"; +import {CacheableObject} from '../../../cache/cacheable-object.model'; /** * The interface representing the Suggestion Source model diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts index 06f85ea5b3c..96a43c96544 100644 --- a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion-target.model.ts @@ -5,7 +5,7 @@ import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; import { typedObject } from '../../../cache/builders/build-decorators'; -import {CacheableObject} from "../../../cache/cacheable-object.model"; +import {CacheableObject} from '../../../cache/cacheable-object.model'; /** * The interface representing the Suggestion Target model diff --git a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts index 2d28ccf9bc3..0f84072c6ba 100644 --- a/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts +++ b/src/app/core/openaire/reciter-suggestions/models/openaire-suggestion.model.ts @@ -6,7 +6,7 @@ import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; import { typedObject } from '../../../cache/builders/build-decorators'; import { MetadataMap, MetadataMapSerializer } from '../../../shared/metadata.models'; -import {CacheableObject} from "../../../cache/cacheable-object.model"; +import {CacheableObject} from '../../../cache/cacheable-object.model'; export interface SuggestionEvidences { [sectionId: string]: { diff --git a/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts b/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts index 7454caa1d93..3c1d04c0404 100644 --- a/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts +++ b/src/app/core/openaire/reciter-suggestions/openaire-suggestions-data.service.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-classes-per-file */ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Store } from '@ngrx/store'; @@ -22,8 +23,8 @@ import { OpenaireSuggestionTarget } from './models/openaire-suggestion-target.mo import { OpenaireSuggestion } from './models/openaire-suggestion.model'; import { RequestParam } from '../../cache/models/request-param.model'; import { NoContent } from '../../shared/NoContent.model'; -import {CoreState} from "../../core-state.model"; -import {FindListOptions} from "../../data/find-list-options.model"; +import {CoreState} from '../../core-state.model'; +import {FindListOptions} from '../../data/find-list-options.model'; /* tslint:disable:max-classes-per-file */ diff --git a/src/app/core/submission/workspaceitem-data.service.ts b/src/app/core/submission/workspaceitem-data.service.ts index a4dbaab6ca5..6c0e909bb48 100644 --- a/src/app/core/submission/workspaceitem-data.service.ts +++ b/src/app/core/submission/workspaceitem-data.service.ts @@ -17,10 +17,10 @@ import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RequestParam } from '../cache/models/request-param.model'; import { CoreState } from '../core-state.model'; import { FindListOptions } from '../data/find-list-options.model'; -import {HttpOptions} from "../dspace-rest/dspace-rest.service"; -import {find, map} from "rxjs/operators"; -import {PostRequest} from "../data/request.models"; -import {hasValue} from "../../shared/empty.util"; +import {HttpOptions} from '../dspace-rest/dspace-rest.service'; +import {find, map} from 'rxjs/operators'; +import {PostRequest} from '../data/request.models'; +import {hasValue} from '../../shared/empty.util'; /** * A service that provides methods to make REST requests with workspaceitems endpoint. diff --git a/src/app/openaire/openaire.module.ts b/src/app/openaire/openaire.module.ts index ace4622190f..8ae52b27f4b 100644 --- a/src/app/openaire/openaire.module.ts +++ b/src/app/openaire/openaire.module.ts @@ -18,7 +18,7 @@ import { SuggestionsPopupComponent } from './reciter-suggestions/suggestions-pop import { SuggestionsNotificationComponent } from './reciter-suggestions/suggestions-notification/suggestions-notification.component'; import { TranslateModule } from '@ngx-translate/core'; import { SearchModule } from '../shared/search/search.module'; -import {openaireEffects} from "./openaire.effects"; +import {openaireEffects} from './openaire.effects'; const MODULES = [ CommonModule, diff --git a/src/app/openaire/reciter-suggestions/selectors.ts b/src/app/openaire/reciter-suggestions/selectors.ts index 292e63472a7..cfbb36d4c2a 100644 --- a/src/app/openaire/reciter-suggestions/selectors.ts +++ b/src/app/openaire/reciter-suggestions/selectors.ts @@ -2,7 +2,7 @@ import {createFeatureSelector, createSelector, MemoizedSelector} from '@ngrx/sto import { openaireSelector, OpenaireState } from '../openaire.reducer'; import { OpenaireSuggestionTarget } from '../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; import { SuggestionTargetState } from './suggestion-targets/suggestion-targets.reducer'; -import {subStateSelector} from "../../submission/selectors"; +import {subStateSelector} from '../../submission/selectors'; /** * Returns the Reciter Suggestion Target state. diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts index 6c44d40b915..33dfb1474b2 100644 --- a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; import { type } from '../../../shared/ngrx/type'; import { OpenaireSuggestionTarget } from '../../../core/openaire/reciter-suggestions/models/openaire-suggestion-target.model'; diff --git a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts index 9a007fab214..29672ad49b8 100644 --- a/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts +++ b/src/app/openaire/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts @@ -78,10 +78,10 @@ export class SuggestionTargetsEffects { @Effect() refreshUserTargets$ = this.actions$.pipe( ofType(SuggestionTargetActionTypes.REFRESH_USER_SUGGESTIONS), switchMap((action: RefreshUserSuggestionsAction) => { - return this.store$.select((state: any) => state.core.auth.user) + return this.store$.select((state: any) => state.core.auth.userId) .pipe( - switchMap((user: EPerson) => { - return this.suggestionsService.retrieveCurrentUserSuggestions(user.uuid) + switchMap((userId: string) => { + return this.suggestionsService.retrieveCurrentUserSuggestions(userId) .pipe( map((suggestionTargets: OpenaireSuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)), catchError((errors) => of(errors)) diff --git a/src/app/openaire/reciter-suggestions/suggestions.service.ts b/src/app/openaire/reciter-suggestions/suggestions.service.ts index 5908c8c6bff..67b496b903a 100644 --- a/src/app/openaire/reciter-suggestions/suggestions.service.ts +++ b/src/app/openaire/reciter-suggestions/suggestions.service.ts @@ -25,8 +25,8 @@ import { TranslateService } from '@ngx-translate/core'; import { NoContent } from '../../core/shared/NoContent.model'; import { environment } from '../../../environments/environment'; import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; -import {FindListOptions} from "../../core/data/find-list-options.model"; -import {SuggestionConfig} from "../../../config/layout-config.interfaces"; +import {FindListOptions} from '../../core/data/find-list-options.model'; +import {SuggestionConfig} from '../../../config/layout-config.interfaces'; export interface SuggestionBulkResult { success: number; diff --git a/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts b/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts index ca8343cfad4..3b3ef59ae51 100644 --- a/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { RemoteData } from '../../../core/data/remote-data'; @@ -21,11 +21,22 @@ export enum SelectorActionType { template: '' }) export abstract class DSOSelectorModalWrapperComponent implements OnInit { + + /** + * The discovery configuration. + */ + @Input() configuration = 'default'; + /** * The current page's DSO */ @Input() dsoRD: RemoteData; + /** + * Representing if component should emit value of selected entries or navigate + */ + @Input() emitOnly = false; + /** * Optional header to display above the selection list * Supports i18n keys @@ -47,6 +58,11 @@ export abstract class DSOSelectorModalWrapperComponent implements OnInit { */ action: SelectorActionType; + /** + * Event emitted when a DSO entry is selected if emitOnly is set to true + */ + @Output() select: EventEmitter = new EventEmitter(); + constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute) { } @@ -85,7 +101,11 @@ export abstract class DSOSelectorModalWrapperComponent implements OnInit { */ selectObject(dso: DSpaceObject) { this.close(); - this.navigate(dso); + if (this.emitOnly) { + this.select.emit(dso); + } else { + this.navigate(dso); + } } /** diff --git a/src/app/shared/mocks/openaire.mock.ts b/src/app/shared/mocks/openaire.mock.ts index 95ea8717274..d6c50510cd5 100644 --- a/src/app/shared/mocks/openaire.mock.ts +++ b/src/app/shared/mocks/openaire.mock.ts @@ -1,17 +1,5 @@ -import { of as observableOf } from 'rxjs'; -import { ResourceType } from '../../core/shared/resource-type'; -import { OpenaireBrokerTopicObject } from '../../core/openaire/broker/models/openaire-broker-topic.model'; -import { OpenaireBrokerEventObject } from '../../core/openaire/broker/models/openaire-broker-event.model'; -import { OpenaireBrokerTopicRestService } from '../../core/openaire/broker/topics/openaire-broker-topic-rest.service'; -import { OpenaireBrokerEventRestService } from '../../core/openaire/broker/events/openaire-broker-event-rest.service'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { OpenaireStateService } from '../../openaire/openaire-state.service'; import { Item } from '../../core/shared/item.model'; -import { - createNoContentRemoteDataObject$, - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$ -} from '../remote-data.utils'; import { SearchResult } from '../search/models/search-result.model'; import { SuggestionsService } from '../../openaire/reciter-suggestions/suggestions.service'; @@ -1330,414 +1318,6 @@ export const OpenaireMockDspaceObject: SearchResult = Object.assig } ); -// Topics -// ------------------------------------------------------------------------------- - -export const openaireBrokerTopicObjectMorePid: OpenaireBrokerTopicObject = { - type: new ResourceType('nbtopic'), - id: 'ENRICH!MORE!PID', - name: 'ENRICH/MORE/PID', - lastEvent: '2020/10/09 10:11 UTC', - totalEvents: 33, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MORE!PID' - } - } -}; - -export const openaireBrokerTopicObjectMoreAbstract: OpenaireBrokerTopicObject = { - type: new ResourceType('nbtopic'), - id: 'ENRICH!MORE!ABSTRACT', - name: 'ENRICH/MORE/ABSTRACT', - lastEvent: '2020/09/08 21:14 UTC', - totalEvents: 5, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MORE!ABSTRACT' - } - } -}; - -export const openaireBrokerTopicObjectMissingPid: OpenaireBrokerTopicObject = { - type: new ResourceType('nbtopic'), - id: 'ENRICH!MISSING!PID', - name: 'ENRICH/MISSING/PID', - lastEvent: '2020/10/01 07:36 UTC', - totalEvents: 4, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!PID' - } - } -}; - -export const openaireBrokerTopicObjectMissingAbstract: OpenaireBrokerTopicObject = { - type: new ResourceType('nbtopic'), - id: 'ENRICH!MISSING!ABSTRACT', - name: 'ENRICH/MISSING/ABSTRACT', - lastEvent: '2020/10/08 16:14 UTC', - totalEvents: 71, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!ABSTRACT' - } - } -}; - -export const openaireBrokerTopicObjectMissingAcm: OpenaireBrokerTopicObject = { - type: new ResourceType('nbtopic'), - id: 'ENRICH!MISSING!SUBJECT!ACM', - name: 'ENRICH/MISSING/SUBJECT/ACM', - lastEvent: '2020/09/21 17:51 UTC', - totalEvents: 18, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!SUBJECT!ACM' - } - } -}; - -export const openaireBrokerTopicObjectMissingProject: OpenaireBrokerTopicObject = { - type: new ResourceType('nbtopic'), - id: 'ENRICH!MISSING!PROJECT', - name: 'ENRICH/MISSING/PROJECT', - lastEvent: '2020/09/17 10:28 UTC', - totalEvents: 6, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!PROJECT' - } - } -}; - -// Events -// ------------------------------------------------------------------------------- - -export const openaireBrokerEventObjectMissingPid: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174001', - uuid: '123e4567-e89b-12d3-a456-426614174001', - type: new ResourceType('nbevent'), - originalId: 'oai:www.openstarts.units.it:10077/21486', - title: 'Index nominum et rerum', - trust: 0.375, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: 'doi', - value: '10.18848/1447-9494/cgp/v15i09/45934', - abstract: null, - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001', - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid1)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingPid2: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174004', - uuid: '123e4567-e89b-12d3-a456-426614174004', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/21486', - title: 'UNA NUOVA RILETTURA DELL\u0027 ARISTOTELE DI FRANZ BRENTANO ALLA LUCE DI ALCUNI INEDITI', - trust: 1.0, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: 'urn', - value: 'http://thesis2.sba.units.it/store/handle/item/12238', - abstract: null, - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid2)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingPid3: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174005', - uuid: '123e4567-e89b-12d3-a456-426614174005', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/554', - title: 'Sustainable development', - trust: 0.375, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: 'doi', - value: '10.4324/9780203408889', - abstract: null, - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid3)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingPid4: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174006', - uuid: '123e4567-e89b-12d3-a456-426614174006', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/10787', - title: 'Reply to Critics', - trust: 1.0, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: 'doi', - value: '10.1080/13698230.2018.1430104', - abstract: null, - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid4)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingPid5: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174007', - uuid: '123e4567-e89b-12d3-a456-426614174007', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/11339', - title: 'PROGETTAZIONE, SINTESI E VALUTAZIONE DELL\u0027ATTIVITA\u0027 ANTIMICOBATTERICA ED ANTIFUNGINA DI NUOVI DERIVATI ETEROCICLICI', - trust: 0.375, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: 'urn', - value: 'http://thesis2.sba.units.it/store/handle/item/12477', - abstract: null, - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid5)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingPid6: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174008', - uuid: '123e4567-e89b-12d3-a456-426614174008', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/29860', - title: 'Donald Davidson', - trust: 0.375, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: 'doi', - value: '10.1111/j.1475-4975.2004.00098.x', - abstract: null, - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid6)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingAbstract: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174009', - uuid: '123e4567-e89b-12d3-a456-426614174009', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/21110', - title: 'Missing abstract article', - trust: 0.751, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: null, - value: null, - abstract: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit.', - openaireId: null, - acronym: null, - code: null, - funder: null, - fundingProgram: null, - jurisdiction: null, - title: null - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009/related' - } - }, - target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid7)), - related: observableOf(createSuccessfulRemoteDataObject(ItemMockPid10)) -}; - -export const openaireBrokerEventObjectMissingProjectFound: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174002', - uuid: '123e4567-e89b-12d3-a456-426614174002', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/21838', - title: 'Egypt, crossroad of translations and literary interweavings (3rd-6th centuries). A reconsideration of earlier Coptic literature', - trust: 1.0, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: null, - value: null, - abstract: null, - openaireId: null, - acronym: 'PAThs', - code: '687567', - funder: 'EC', - fundingProgram: 'H2020', - jurisdiction: 'EU', - title: 'Tracking Papyrus and Parchment Paths: An Archaeological Atlas of Coptic Literature.\nLiterary Texts in their Geographical Context: Production, Copying, Usage, Dissemination and Storage' - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002/related' - } - }, - target: createSuccessfulRemoteDataObject$(ItemMockPid8), - related: createSuccessfulRemoteDataObject$(ItemMockPid10) -}; - -export const openaireBrokerEventObjectMissingProjectNotFound: OpenaireBrokerEventObject = { - id: '123e4567-e89b-12d3-a456-426614174003', - uuid: '123e4567-e89b-12d3-a456-426614174003', - type: new ResourceType('openaireBrokerEvent'), - originalId: 'oai:www.openstarts.units.it:10077/21838', - title: 'Morocco, crossroad of translations and literary interweavings (3rd-6th centuries). A reconsideration of earlier Coptic literature', - trust: 1.0, - eventDate: '2020/10/09 10:11 UTC', - status: 'PENDING', - message: { - type: null, - value: null, - abstract: null, - openaireId: null, - acronym: 'PAThs', - code: '687567B', - funder: 'EC', - fundingProgram: 'H2021', - jurisdiction: 'EU', - title: 'Tracking Unknown Papyrus and Parchment Paths: An Archaeological Atlas of Coptic Literature.\nLiterary Texts in their Geographical Context: Production, Copying, Usage, Dissemination and Storage' - }, - _links: { - self: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003' - }, - target: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003/target' - }, - related: { - href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003/related' - } - }, - target: createSuccessfulRemoteDataObject$(ItemMockPid9), - related: createNoContentRemoteDataObject$() -}; - // Classes // ------------------------------------------------------------------------------- @@ -1757,31 +1337,6 @@ export function getMockOpenaireStateService(): any { dispatchMarkUserSuggestionsAsVisitedAction: jasmine.createSpy('dispatchMarkUserSuggestionsAsVisitedAction') }); } - -/** - * Mock for [[OpenaireBrokerTopicRestService]] - */ -export function getMockOpenaireBrokerTopicRestService(): OpenaireBrokerTopicRestService { - return jasmine.createSpyObj('OpenaireBrokerTopicRestService', { - getTopics: jasmine.createSpy('getTopics'), - getTopic: jasmine.createSpy('getTopic'), - }); -} - -/** - * Mock for [[OpenaireBrokerEventRestService]] - */ -export function getMockOpenaireBrokerEventRestService(): OpenaireBrokerEventRestService { - return jasmine.createSpyObj('OpenaireBrokerEventRestService', { - getEventsByTopic: jasmine.createSpy('getEventsByTopic'), - getEvent: jasmine.createSpy('getEvent'), - patchEvent: jasmine.createSpy('patchEvent'), - boundProject: jasmine.createSpy('boundProject'), - removeProject: jasmine.createSpy('removeProject'), - clearFindByTopicRequests: jasmine.createSpy('.clearFindByTopicRequests') - }); -} - /** * Mock for [[OpenaireBrokerEventRestService]] */ diff --git a/src/app/suggestions-page/suggestions-page.component.ts b/src/app/suggestions-page/suggestions-page.component.ts index 850a30da221..3d6ced5ef57 100644 --- a/src/app/suggestions-page/suggestions-page.component.ts +++ b/src/app/suggestions-page/suggestions-page.component.ts @@ -20,8 +20,8 @@ import { SuggestionTargetsStateService } from '../openaire/reciter-suggestions/s import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service'; import { PaginationService } from '../core/pagination/pagination.service'; import { WorkspaceItem } from '../core/submission/models/workspaceitem.model'; -import {FindListOptions} from "../core/data/find-list-options.model"; -import {redirectOn4xx} from "../core/shared/authorized.operators"; +import {FindListOptions} from '../core/data/find-list-options.model'; +import {redirectOn4xx} from '../core/shared/authorized.operators'; @Component({ selector: 'ds-suggestion-page', diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index fbc04033d61..f79cf799e5d 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3033,6 +3033,7 @@ "reciter.suggestion.totalScore": "Total Score", + "reciter.suggestion.type.oaire": "OpenAIRE", "register-email.title": "New user registration", diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index 6446e7f127f..fbd84fae844 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -14,7 +14,7 @@ import { AuthConfig } from './auth-config.interfaces'; import { UIServerConfig } from './ui-server-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; import { BrowseByConfig } from './browse-by-config.interface'; -import {SuggestionConfig} from "./layout-config.interfaces"; +import {SuggestionConfig} from './layout-config.interfaces'; interface AppConfig extends Config { ui: UIServerConfig; diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index aea29fc819e..9def4849f57 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -14,7 +14,7 @@ import { ServerConfig } from './server-config.interface'; import { SubmissionConfig } from './submission-config.interface'; import { ThemeConfig } from './theme.model'; import { UIServerConfig } from './ui-server-config.interface'; -import {SuggestionConfig} from "./layout-config.interfaces"; +import {SuggestionConfig} from './layout-config.interfaces'; export class DefaultAppConfig implements AppConfig { production = false; diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 7c24ef8f05f..6bf3a9ab8f9 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -2,6 +2,7 @@ import { BuildConfig } from 'src/config/build-config.interface'; import { RestRequestMethod } from '../app/core/data/rest-request-method'; import { NotificationAnimationsType } from '../app/shared/notifications/models/notification-animations-type'; +import {SuggestionConfig} from '../config/layout-config.interfaces'; export const environment: BuildConfig = { production: false, @@ -203,6 +204,13 @@ export const environment: BuildConfig = { undoTimeout: 10000 // 10 seconds } }, + suggestion: [ + // { + // // Use this configuration to map a suggestion import to a specific collection based on the suggestion type. + // source: 'suggestionSource', + // collectionId: 'collectionUUID' + // } + ], themes: [ { name: 'full-item-page-theme', From 63bba677bbcffda2554b263ef38f06c5e31aae00 Mon Sep 17 00:00:00 2001 From: Luca Giamminonni Date: Thu, 7 Jul 2022 17:09:48 +0200 Subject: [PATCH 004/504] [CST-5249] Removed Openaire prefix on Suggestion classes --- .../admin-notifications-routing.module.ts | 1 + src/app/core/core.module.ts | 12 ++-- ...ts => suggestion-objects.resource-type.ts} | 0 ...ce.model.ts => suggestion-source.model.ts} | 4 +- ...et.model.ts => suggestion-target.model.ts} | 4 +- ...uggestion.model.ts => suggestion.model.ts} | 4 +- ...service.ts => suggestions-data.service.ts} | 68 +++++++++---------- .../mocks/reciter-suggestion-targets.mock.ts | 6 +- .../shared/mocks/reciter-suggestion.mock.ts | 8 +-- .../{openaire.mock.ts => suggestion.mock.ts} | 0 .../reciter-suggestions/selectors.ts | 10 +-- .../suggestion-actions.component.ts | 4 +- .../suggestion-evidences.component.ts | 2 +- .../suggestion-list-element.component.ts | 6 +- .../suggestion-targets.actions.ts | 10 +-- .../suggestion-targets.component.ts | 6 +- .../suggestion-targets.effects.ts | 8 +-- .../suggestion-targets.reducer.ts | 6 +- .../suggestion-targets.state.service.ts | 6 +- .../suggestions-notification.component.ts | 6 +- .../suggestions-popup.component.ts | 6 +- .../suggestions.service.ts | 42 ++++++------ src/app/suggestion-notifications/selectors.ts | 2 +- .../suggestion-notifications.module.ts | 6 +- .../suggestion-notifications.reducer.ts | 2 +- .../suggestions-page.component.spec.ts | 6 +- .../suggestions-page.component.ts | 26 +++---- .../suggestions-page.module.ts | 4 +- .../suggestions-page.resolver.ts | 10 +-- 29 files changed, 138 insertions(+), 137 deletions(-) rename src/app/core/suggestion-notifications/reciter-suggestions/models/{openaire-suggestion-objects.resource-type.ts => suggestion-objects.resource-type.ts} (100%) rename src/app/core/suggestion-notifications/reciter-suggestions/models/{openaire-suggestion-source.model.ts => suggestion-source.model.ts} (87%) rename src/app/core/suggestion-notifications/reciter-suggestions/models/{openaire-suggestion-target.model.ts => suggestion-target.model.ts} (89%) rename src/app/core/suggestion-notifications/reciter-suggestions/models/{openaire-suggestion.model.ts => suggestion.model.ts} (92%) rename src/app/core/suggestion-notifications/reciter-suggestions/{openaire-suggestions-data.service.ts => suggestions-data.service.ts} (79%) rename src/app/shared/mocks/{openaire.mock.ts => suggestion.mock.ts} (100%) diff --git a/src/app/admin/admin-notifications/admin-notifications-routing.module.ts b/src/app/admin/admin-notifications/admin-notifications-routing.module.ts index ca6a8cf572d..60fa679777c 100644 --- a/src/app/admin/admin-notifications/admin-notifications-routing.module.ts +++ b/src/app/admin/admin-notifications/admin-notifications-routing.module.ts @@ -87,6 +87,7 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon I18nBreadcrumbsService, AdminNotificationsSuggestionTargetsPageResolver, SourceDataResolver, + AdminQualityAssuranceSourcePageResolver, AdminQualityAssuranceTopicsPageResolver, AdminQualityAssuranceEventsPageResolver, ] diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index bd82e0adc01..8986fa76fff 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -166,9 +166,9 @@ import { SearchConfig } from './shared/search/search-filters/search-config.model import { SequenceService } from './shared/sequence.service'; import { CoreState } from './core-state.model'; import { GroupDataService } from './eperson/group-data.service'; -import { OpenaireSuggestionTarget } from './suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; -import { OpenaireSuggestion } from './suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; -import { OpenaireSuggestionSource } from './suggestion-notifications/reciter-suggestions/models/openaire-suggestion-source.model'; +import { SuggestionTarget } from './suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; +import { Suggestion } from './suggestion-notifications/reciter-suggestions/models/suggestion.model'; +import { SuggestionSource } from './suggestion-notifications/reciter-suggestions/models/suggestion-source.model'; import { ResearcherProfileService } from './profile/researcher-profile.service'; import { ProfileClaimService } from '../profile-page/profile-claim/profile-claim.service'; import { ResearcherProfile } from './profile/model/researcher-profile.model'; @@ -372,9 +372,9 @@ export const models = ShortLivedToken, Registration, UsageReport, - OpenaireSuggestion, - OpenaireSuggestionTarget, - OpenaireSuggestionSource, + Suggestion, + SuggestionTarget, + SuggestionSource, QualityAssuranceTopicObject, QualityAssuranceEventObject, Root, diff --git a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-objects.resource-type.ts b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-objects.resource-type.ts similarity index 100% rename from src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-objects.resource-type.ts rename to src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-objects.resource-type.ts diff --git a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-source.model.ts b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-source.model.ts similarity index 87% rename from src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-source.model.ts rename to src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-source.model.ts index 00f5f11936b..64ddf9863c8 100644 --- a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-source.model.ts +++ b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-source.model.ts @@ -1,6 +1,6 @@ import { autoserialize, deserialize } from 'cerialize'; -import { SUGGESTION_SOURCE } from './openaire-suggestion-objects.resource-type'; +import { SUGGESTION_SOURCE } from './suggestion-objects.resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; @@ -11,7 +11,7 @@ import {CacheableObject} from '../../../cache/cacheable-object.model'; * The interface representing the Suggestion Source model */ @typedObject -export class OpenaireSuggestionSource implements CacheableObject { +export class SuggestionSource implements CacheableObject { /** * A string representing the kind of object, e.g. community, item, … */ diff --git a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model.ts b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model.ts similarity index 89% rename from src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model.ts rename to src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model.ts index 96a43c96544..fa23dd0ffa7 100644 --- a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model.ts +++ b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model.ts @@ -1,6 +1,6 @@ import { autoserialize, deserialize } from 'cerialize'; -import { SUGGESTION_TARGET } from './openaire-suggestion-objects.resource-type'; +import { SUGGESTION_TARGET } from './suggestion-objects.resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; @@ -11,7 +11,7 @@ import {CacheableObject} from '../../../cache/cacheable-object.model'; * The interface representing the Suggestion Target model */ @typedObject -export class OpenaireSuggestionTarget implements CacheableObject { +export class SuggestionTarget implements CacheableObject { /** * A string representing the kind of object, e.g. community, item, … */ diff --git a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model.ts b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion.model.ts similarity index 92% rename from src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model.ts rename to src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion.model.ts index 0f84072c6ba..c36d36794b5 100644 --- a/src/app/core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model.ts +++ b/src/app/core/suggestion-notifications/reciter-suggestions/models/suggestion.model.ts @@ -1,6 +1,6 @@ import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { SUGGESTION } from './openaire-suggestion-objects.resource-type'; +import { SUGGESTION } from './suggestion-objects.resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { ResourceType } from '../../../shared/resource-type'; import { HALLink } from '../../../shared/hal-link.model'; @@ -18,7 +18,7 @@ export interface SuggestionEvidences { * The interface representing the Suggestion Source model */ @typedObject -export class OpenaireSuggestion implements CacheableObject { +export class Suggestion implements CacheableObject { /** * A string representing the kind of object, e.g. community, item, … */ diff --git a/src/app/core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service.ts b/src/app/core/suggestion-notifications/reciter-suggestions/suggestions-data.service.ts similarity index 79% rename from src/app/core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service.ts rename to src/app/core/suggestion-notifications/reciter-suggestions/suggestions-data.service.ts index 3c1d04c0404..880c7b2f336 100644 --- a/src/app/core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service.ts +++ b/src/app/core/suggestion-notifications/reciter-suggestions/suggestions-data.service.ts @@ -15,12 +15,12 @@ import { DataService } from '../../data/data.service'; import { ChangeAnalyzer } from '../../data/change-analyzer'; import { DefaultChangeAnalyzer } from '../../data/default-change-analyzer.service'; import { RemoteData } from '../../data/remote-data'; -import { SUGGESTION_TARGET } from './models/openaire-suggestion-objects.resource-type'; +import { SUGGESTION_TARGET } from './models/suggestion-objects.resource-type'; import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { PaginatedList } from '../../data/paginated-list.model'; -import { OpenaireSuggestionSource } from './models/openaire-suggestion-source.model'; -import { OpenaireSuggestionTarget } from './models/openaire-suggestion-target.model'; -import { OpenaireSuggestion } from './models/openaire-suggestion.model'; +import { SuggestionSource } from './models/suggestion-source.model'; +import { SuggestionTarget } from './models/suggestion-target.model'; +import { Suggestion } from './models/suggestion.model'; import { RequestParam } from '../../cache/models/request-param.model'; import { NoContent } from '../../shared/NoContent.model'; import {CoreState} from '../../core-state.model'; @@ -31,7 +31,7 @@ import {FindListOptions} from '../../data/find-list-options.model'; /** * A private DataService implementation to delegate specific methods to. */ -class SuggestionDataServiceImpl extends DataService { +class SuggestionDataServiceImpl extends DataService { /** * The REST endpoint. */ @@ -46,7 +46,7 @@ class SuggestionDataServiceImpl extends DataService { * @param {HALEndpointService} halService * @param {NotificationsService} notificationsService * @param {HttpClient} http - * @param {ChangeAnalyzer} comparator + * @param {ChangeAnalyzer} comparator */ constructor( protected requestService: RequestService, @@ -56,7 +56,7 @@ class SuggestionDataServiceImpl extends DataService { protected halService: HALEndpointService, protected notificationsService: NotificationsService, protected http: HttpClient, - protected comparator: ChangeAnalyzer) { + protected comparator: ChangeAnalyzer) { super(); } } @@ -64,7 +64,7 @@ class SuggestionDataServiceImpl extends DataService { /** * A private DataService implementation to delegate specific methods to. */ -class SuggestionTargetsDataServiceImpl extends DataService { +class SuggestionTargetsDataServiceImpl extends DataService { /** * The REST endpoint. */ @@ -79,7 +79,7 @@ class SuggestionTargetsDataServiceImpl extends DataService} comparator + * @param {ChangeAnalyzer} comparator */ constructor( protected requestService: RequestService, @@ -89,7 +89,7 @@ class SuggestionTargetsDataServiceImpl extends DataService) { + protected comparator: ChangeAnalyzer) { super(); } } @@ -97,7 +97,7 @@ class SuggestionTargetsDataServiceImpl extends DataService { +class SuggestionSourcesDataServiceImpl extends DataService { /** * The REST endpoint. */ @@ -112,7 +112,7 @@ class SuggestionSourcesDataServiceImpl extends DataService} comparator + * @param {ChangeAnalyzer} comparator */ constructor( protected requestService: RequestService, @@ -122,7 +122,7 @@ class SuggestionSourcesDataServiceImpl extends DataService) { + protected comparator: ChangeAnalyzer) { super(); } } @@ -132,7 +132,7 @@ class SuggestionSourcesDataServiceImpl extends DataService} comparatorSuggestions - * @param {DefaultChangeAnalyzer} comparatorSources - * @param {DefaultChangeAnalyzer} comparatorTargets + * @param {DefaultChangeAnalyzer} comparatorSuggestions + * @param {DefaultChangeAnalyzer} comparatorSources + * @param {DefaultChangeAnalyzer} comparatorTargets */ constructor( protected requestService: RequestService, @@ -171,9 +171,9 @@ export class OpenaireSuggestionsDataService { protected halService: HALEndpointService, protected notificationsService: NotificationsService, protected http: HttpClient, - protected comparatorSuggestions: DefaultChangeAnalyzer, - protected comparatorSources: DefaultChangeAnalyzer, - protected comparatorTargets: DefaultChangeAnalyzer, + protected comparatorSuggestions: DefaultChangeAnalyzer, + protected comparatorSources: DefaultChangeAnalyzer, + protected comparatorTargets: DefaultChangeAnalyzer, ) { this.suggestionsDataService = new SuggestionDataServiceImpl(requestService, rdbService, null, objectCache, halService, notificationsService, http, comparatorSuggestions); this.suggestionSourcesDataService = new SuggestionSourcesDataServiceImpl(requestService, rdbService, null, objectCache, halService, notificationsService, http, comparatorSources); @@ -185,10 +185,10 @@ export class OpenaireSuggestionsDataService { * * @param options * Find list options object. - * @return Observable>> + * @return Observable>> * The list of Suggestion Sources. */ - public getSources(options: FindListOptions = {}): Observable>> { + public getSources(options: FindListOptions = {}): Observable>> { return this.suggestionSourcesDataService.findAll(options); } @@ -201,14 +201,14 @@ export class OpenaireSuggestionsDataService { * Find list options object. * @param linksToFollow * List of {@link FollowLinkConfig} that indicate which {@link HALLink}s should be automatically resolved. - * @return Observable>> + * @return Observable>> * The list of Suggestion Target. */ public getTargets( source: string, options: FindListOptions = {}, - ...linksToFollow: FollowLinkConfig[] - ): Observable>> { + ...linksToFollow: FollowLinkConfig[] + ): Observable>> { options.searchParams = [new RequestParam('source', source)]; return this.suggestionTargetsDataService.searchBy(this.searchFindBySourceMethod, options, true, true, ...linksToFollow); @@ -223,14 +223,14 @@ export class OpenaireSuggestionsDataService { * Find list options object. * @param linksToFollow * List of {@link FollowLinkConfig} that indicate which {@link HALLink}s should be automatically resolved. - * @return Observable>> + * @return Observable>> * The list of Suggestion Target. */ public getTargetsByUser( userId: string, options: FindListOptions = {}, - ...linksToFollow: FollowLinkConfig[] - ): Observable>> { + ...linksToFollow: FollowLinkConfig[] + ): Observable>> { options.searchParams = [new RequestParam('target', userId)]; return this.suggestionTargetsDataService.searchBy(this.searchFindByTargetMethod, options, true, true, ...linksToFollow); @@ -242,10 +242,10 @@ export class OpenaireSuggestionsDataService { * @param targetId * The target id to retrieve. * - * @return Observable> + * @return Observable> * The list of Suggestion Target. */ - public getTargetById(targetId: string): Observable> { + public getTargetById(targetId: string): Observable> { return this.suggestionTargetsDataService.findById(targetId); } @@ -261,7 +261,7 @@ export class OpenaireSuggestionsDataService { * Used to fetch Suggestion notification for user * @suggestionId */ - public getSuggestion(suggestionId: string, ...linksToFollow: FollowLinkConfig[]): Observable> { + public getSuggestion(suggestionId: string, ...linksToFollow: FollowLinkConfig[]): Observable> { return this.suggestionsDataService.findById(suggestionId, true, true, ...linksToFollow); } @@ -276,15 +276,15 @@ export class OpenaireSuggestionsDataService { * Find list options object. * @param linksToFollow * List of {@link FollowLinkConfig} that indicate which {@link HALLink}s should be automatically resolved. - * @return Observable>> + * @return Observable>> * The list of Suggestion. */ public getSuggestionsByTargetAndSource( target: string, source: string, options: FindListOptions = {}, - ...linksToFollow: FollowLinkConfig[] - ): Observable>> { + ...linksToFollow: FollowLinkConfig[] + ): Observable>> { options.searchParams = [ new RequestParam('target', target), new RequestParam('source', source) diff --git a/src/app/shared/mocks/reciter-suggestion-targets.mock.ts b/src/app/shared/mocks/reciter-suggestion-targets.mock.ts index ae8cacb2737..489bb7733d8 100644 --- a/src/app/shared/mocks/reciter-suggestion-targets.mock.ts +++ b/src/app/shared/mocks/reciter-suggestion-targets.mock.ts @@ -1,9 +1,9 @@ import { ResourceType } from '../../core/shared/resource-type'; -import { OpenaireSuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; // REST Mock --------------------------------------------------------------------- // ------------------------------------------------------------------------------- -export const mockSuggestionTargetsObjectOne: OpenaireSuggestionTarget = { +export const mockSuggestionTargetsObjectOne: SuggestionTarget = { type: new ResourceType('suggestiontarget'), id: 'reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26', display: 'Bollini, Andrea', @@ -22,7 +22,7 @@ export const mockSuggestionTargetsObjectOne: OpenaireSuggestionTarget = { } }; -export const mockSuggestionTargetsObjectTwo: OpenaireSuggestionTarget = { +export const mockSuggestionTargetsObjectTwo: SuggestionTarget = { type: new ResourceType('suggestiontarget'), id: 'reciter:nhy567-9d6d-ty67-b905-fef0f8cae26', display: 'Digilio, Andrea', diff --git a/src/app/shared/mocks/reciter-suggestion.mock.ts b/src/app/shared/mocks/reciter-suggestion.mock.ts index ae1732808e0..aceca72fc8f 100644 --- a/src/app/shared/mocks/reciter-suggestion.mock.ts +++ b/src/app/shared/mocks/reciter-suggestion.mock.ts @@ -2,10 +2,10 @@ // REST Mock --------------------------------------------------------------------- // ------------------------------------------------------------------------------- -import { OpenaireSuggestion } from '../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; -import { SUGGESTION } from '../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-objects.resource-type'; +import { Suggestion } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; +import { SUGGESTION } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-objects.resource-type'; -export const mockSuggestionPublicationOne: OpenaireSuggestion = { +export const mockSuggestionPublicationOne: Suggestion = { id: '24694772', display: 'publication one', source: 'reciter', @@ -107,7 +107,7 @@ export const mockSuggestionPublicationOne: OpenaireSuggestion = { } }; -export const mockSuggestionPublicationTwo: OpenaireSuggestion = { +export const mockSuggestionPublicationTwo: Suggestion = { id: '24694772', display: 'publication two', source: 'reciter', diff --git a/src/app/shared/mocks/openaire.mock.ts b/src/app/shared/mocks/suggestion.mock.ts similarity index 100% rename from src/app/shared/mocks/openaire.mock.ts rename to src/app/shared/mocks/suggestion.mock.ts diff --git a/src/app/suggestion-notifications/reciter-suggestions/selectors.ts b/src/app/suggestion-notifications/reciter-suggestions/selectors.ts index 6ba474bfd83..aa81ab4bc87 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/selectors.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/selectors.ts @@ -1,6 +1,6 @@ import {createFeatureSelector, createSelector, MemoizedSelector} from '@ngrx/store'; import { suggestionNotificationsSelector, SuggestionNotificationsState } from '../suggestion-notifications.reducer'; -import { OpenaireSuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { SuggestionTargetState } from './suggestion-targets/suggestion-targets.reducer'; import {subStateSelector} from '../../submission/selectors'; @@ -10,7 +10,7 @@ import {subStateSelector} from '../../submission/selectors'; * @param {AppState} state Top level state. * @return {SuggestionNotificationsState} */ -const _getReciterSuggestionTargetState = createFeatureSelector('openaire'); +const _getReciterSuggestionTargetState = createFeatureSelector('suggestion-notifications'); // Reciter Suggestion Targets // ---------------------------------------------------------------------------- @@ -29,8 +29,8 @@ export function reciterSuggestionTargetStateSelector(): MemoizedSelector { - return subStateSelector(reciterSuggestionTargetStateSelector(), 'targets'); +export function reciterSuggestionTargetObjectSelector(): MemoizedSelector { + return subStateSelector(reciterSuggestionTargetStateSelector(), 'targets'); } /** @@ -81,7 +81,7 @@ export const getreciterSuggestionTargetTotalsSelector = createSelector(_getRecit /** * Returns Suggestion Targets for the current user. * @function getCurrentUserReciterSuggestionTargetSelector - * @return {OpenaireSuggestionTarget[]} + * @return {SuggestionTarget[]} */ export const getCurrentUserSuggestionTargetsSelector = createSelector(_getReciterSuggestionTargetState, (state: SuggestionNotificationsState) => state.suggestionTarget.currentUserTargets diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts index 7a3312af0c3..35599669ef6 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-actions/suggestion-actions.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ItemType } from '../../../core/shared/item-relationships/item-type.model'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { OpenaireSuggestion } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; +import { Suggestion } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; import { SuggestionApproveAndImport } from '../suggestion-list-element/suggestion-list-element.component'; import { Collection } from '../../../core/shared/collection.model'; import { take } from 'rxjs/operators'; @@ -14,7 +14,7 @@ import { CreateItemParentSelectorComponent } from '../../../shared/dso-selector/ }) export class SuggestionActionsComponent { - @Input() object: OpenaireSuggestion; + @Input() object: Suggestion; @Input() isBulk = false; diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts index 7bd5fc6e1bc..431749eaa58 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; import { fadeIn } from '../../../../shared/animations/fade'; -import { SuggestionEvidences } from '../../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; +import { SuggestionEvidences } from '../../../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; @Component({ selector: 'ds-suggestion-evidences', diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts index ca531655fc5..a1ef454037b 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component.ts @@ -3,12 +3,12 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { fadeIn } from '../../../shared/animations/fade'; -import { OpenaireSuggestion } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; +import { Suggestion } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; import { Item } from '../../../core/shared/item.model'; import { isNotEmpty } from '../../../shared/empty.util'; export interface SuggestionApproveAndImport { - suggestion: OpenaireSuggestion; + suggestion: Suggestion; collectionId: string; } @@ -20,7 +20,7 @@ export interface SuggestionApproveAndImport { }) export class SuggestionListElementComponent implements OnInit { - @Input() object: OpenaireSuggestion; + @Input() object: Suggestion; @Input() isSelected = false; diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts index 627b8155546..09e4f6e20c6 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; import { type } from '../../../shared/ngrx/type'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; /** * For each action type in an action group, make a simple @@ -66,7 +66,7 @@ export class RetrieveAllTargetsErrorAction implements Action { export class AddTargetAction implements Action { type = SuggestionTargetActionTypes.ADD_TARGETS; payload: { - targets: OpenaireSuggestionTarget[]; + targets: SuggestionTarget[]; totalPages: number; currentPage: number; totalElements: number; @@ -84,7 +84,7 @@ export class AddTargetAction implements Action { * @param totalElements * the total available Suggestion Targets */ - constructor(targets: OpenaireSuggestionTarget[], totalPages: number, currentPage: number, totalElements: number) { + constructor(targets: SuggestionTarget[], totalPages: number, currentPage: number, totalElements: number) { this.payload = { targets, totalPages, @@ -102,7 +102,7 @@ export class AddTargetAction implements Action { export class AddUserSuggestionsAction implements Action { type = SuggestionTargetActionTypes.ADD_USER_SUGGESTIONS; payload: { - suggestionTargets: OpenaireSuggestionTarget[]; + suggestionTargets: SuggestionTarget[]; }; /** @@ -111,7 +111,7 @@ export class AddUserSuggestionsAction implements Action { * @param suggestionTargets * the user suggestions target */ - constructor(suggestionTargets: OpenaireSuggestionTarget[]) { + constructor(suggestionTargets: SuggestionTarget[]) { this.payload = { suggestionTargets }; } diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts index 7cd882d01ed..cfa168e2b83 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.component.ts @@ -4,7 +4,7 @@ import { Router } from '@angular/router'; import { Observable, Subscription } from 'rxjs'; import { distinctUntilChanged, take } from 'rxjs/operators'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { hasValue } from '../../../shared/empty.util'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { SuggestionTargetsStateService } from './suggestion-targets.state.service'; @@ -39,7 +39,7 @@ export class SuggestionTargetsComponent implements OnInit { /** * The Suggestion Target list. */ - public targets$: Observable; + public targets$: Observable; /** * The total number of Suggestion Targets. */ @@ -144,7 +144,7 @@ export class SuggestionTargetsComponent implements OnInit { }); } - public getTargetUuid(target: OpenaireSuggestionTarget) { + public getTargetUuid(target: SuggestionTarget) { return this.suggestionService.getTargetUuid(target); } } diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts index 01b305bbd4c..9c595a1e0df 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.effects.ts @@ -18,7 +18,7 @@ import { PaginatedList } from '../../../core/data/paginated-list.model'; import { SuggestionsService } from '../suggestions.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { AuthActionTypes, RetrieveAuthenticatedEpersonSuccessAction } from '../../../core/auth/auth.actions'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { EPerson } from '../../../core/eperson/models/eperson.model'; /** @@ -38,7 +38,7 @@ export class SuggestionTargetsEffects { action.payload.elementsPerPage, action.payload.currentPage ).pipe( - map((targets: PaginatedList) => + map((targets: PaginatedList) => new AddTargetAction(targets.page, targets.totalPages, targets.currentPage, targets.totalElements) ), catchError((error: Error) => { @@ -68,7 +68,7 @@ export class SuggestionTargetsEffects { ofType(AuthActionTypes.RETRIEVE_AUTHENTICATED_EPERSON_SUCCESS), switchMap((action: RetrieveAuthenticatedEpersonSuccessAction) => { return this.suggestionsService.retrieveCurrentUserSuggestions(action.payload).pipe( - map((suggestionTargets: OpenaireSuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)) + map((suggestionTargets: SuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)) ); })); @@ -83,7 +83,7 @@ export class SuggestionTargetsEffects { switchMap((userId: string) => { return this.suggestionsService.retrieveCurrentUserSuggestions(userId) .pipe( - map((suggestionTargets: OpenaireSuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)), + map((suggestionTargets: SuggestionTarget[]) => new AddUserSuggestionsAction(suggestionTargets)), catchError((errors) => of(errors)) ); }), diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts index b0b551dfa9a..2d315e69956 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.reducer.ts @@ -1,17 +1,17 @@ import { SuggestionTargetActionTypes, SuggestionTargetsActions } from './suggestion-targets.actions'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; /** * The interface representing the OpenAIRE suggestion targets state. */ export interface SuggestionTargetState { - targets: OpenaireSuggestionTarget[]; + targets: SuggestionTarget[]; processing: boolean; loaded: boolean; totalPages: number; currentPage: number; totalElements: number; - currentUserTargets: OpenaireSuggestionTarget[]; + currentUserTargets: SuggestionTarget[]; currentUserTargetsVisited: boolean; } diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts index 164750d2215..97792df6af7 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestion-targets/suggestion-targets.state.service.ts @@ -13,7 +13,7 @@ import { isreciterSuggestionTargetProcessingSelector, reciterSuggestionTargetObjectSelector } from '../selectors'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { ClearSuggestionTargetsAction, MarkUserSuggestionsAsVisitedAction, @@ -40,7 +40,7 @@ export class SuggestionTargetsStateService { * @return Observable * The list of Reciter Suggestion Targets. */ - public getReciterSuggestionTargets(): Observable { + public getReciterSuggestionTargets(): Observable { return this.store.pipe(select(reciterSuggestionTargetObjectSelector())); } @@ -127,7 +127,7 @@ export class SuggestionTargetsStateService { * @return Observable * The Reciter Suggestion Targets object. */ - public getCurrentUserSuggestionTargets(): Observable { + public getCurrentUserSuggestionTargets(): Observable { return this.store.pipe(select(getCurrentUserSuggestionTargetsSelector)); } diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts index 19f94c433df..23b34c4de99 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestions-notification/suggestions-notification.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { TranslateService } from '@ngx-translate/core'; import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion-targets.state.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; @@ -18,7 +18,7 @@ export class SuggestionsNotificationComponent implements OnInit { /** * The user suggestion targets. */ - suggestionsRD$: Observable; + suggestionsRD$: Observable; constructor( private translateService: TranslateService, @@ -35,7 +35,7 @@ export class SuggestionsNotificationComponent implements OnInit { * Interpolated params to build the notification suggestions notification. * @param suggestionTarget */ - public getNotificationSuggestionInterpolation(suggestionTarget: OpenaireSuggestionTarget): any { + public getNotificationSuggestionInterpolation(suggestionTarget: SuggestionTarget): any { return this.suggestionsService.getNotificationSuggestionInterpolation(suggestionTarget); } diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts index 9478ed2d1d6..0195f074ae8 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestions-popup/suggestions-popup.component.ts @@ -4,7 +4,7 @@ import { SuggestionTargetsStateService } from '../suggestion-targets/suggestion- import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { SuggestionsService } from '../suggestions.service'; import { takeUntil } from 'rxjs/operators'; -import { OpenaireSuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { isNotEmpty } from '../../../shared/empty.util'; import { combineLatest, Subject } from 'rxjs'; @@ -38,7 +38,7 @@ export class SuggestionsPopupComponent implements OnInit, OnDestroy { ]).pipe(takeUntil(notifier)).subscribe(([suggestions, visited]) => { if (isNotEmpty(suggestions)) { if (!visited) { - suggestions.forEach((suggestionTarget: OpenaireSuggestionTarget) => this.showNotificationForNewSuggestions(suggestionTarget)); + suggestions.forEach((suggestionTarget: SuggestionTarget) => this.showNotificationForNewSuggestions(suggestionTarget)); this.reciterSuggestionStateService.dispatchMarkUserSuggestionsAsVisitedAction(); notifier.next(null); notifier.complete(); @@ -52,7 +52,7 @@ export class SuggestionsPopupComponent implements OnInit, OnDestroy { * @param suggestionTarget * @private */ - private showNotificationForNewSuggestions(suggestionTarget: OpenaireSuggestionTarget): void { + private showNotificationForNewSuggestions(suggestionTarget: SuggestionTarget): void { const content = this.translateService.instant(this.labelPrefix + 'notification.suggestion', this.suggestionsService.getNotificationSuggestionInterpolation(suggestionTarget)); this.notificationsService.success('', content, {timeOut:0}, true); diff --git a/src/app/suggestion-notifications/reciter-suggestions/suggestions.service.ts b/src/app/suggestion-notifications/reciter-suggestions/suggestions.service.ts index c4a2fa4b4b2..be43285df26 100644 --- a/src/app/suggestion-notifications/reciter-suggestions/suggestions.service.ts +++ b/src/app/suggestion-notifications/reciter-suggestions/suggestions.service.ts @@ -3,11 +3,11 @@ import { Injectable } from '@angular/core'; import { of, forkJoin, Observable } from 'rxjs'; import { catchError, map, mergeMap, take } from 'rxjs/operators'; -import { OpenaireSuggestionsDataService } from '../../core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service'; +import { SuggestionsDataService } from '../../core/suggestion-notifications/reciter-suggestions/suggestions-data.service'; import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; import { RemoteData } from '../../core/data/remote-data'; import { PaginatedList } from '../../core/data/paginated-list.model'; -import { OpenaireSuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionTarget } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { ResearcherProfileService } from '../../core/profile/researcher-profile.service'; import { AuthService } from '../../core/auth/auth.service'; import { EPerson } from '../../core/eperson/models/eperson.model'; @@ -19,7 +19,7 @@ import { getFirstSucceededRemoteDataPayload, getFirstSucceededRemoteListPayload } from '../../core/shared/operators'; -import { OpenaireSuggestion } from '../../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; +import { Suggestion } from '../../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service'; import { TranslateService } from '@ngx-translate/core'; import { NoContent } from '../../core/shared/NoContent.model'; @@ -43,12 +43,12 @@ export class SuggestionsService { * Initialize the service variables. * @param {AuthService} authService * @param {ResearcherProfileService} researcherProfileService - * @param {OpenaireSuggestionsDataService} suggestionsDataService + * @param {SuggestionsDataService} suggestionsDataService */ constructor( private authService: AuthService, private researcherProfileService: ResearcherProfileService, - private suggestionsDataService: OpenaireSuggestionsDataService, + private suggestionsDataService: SuggestionsDataService, private translateService: TranslateService ) { } @@ -65,7 +65,7 @@ export class SuggestionsService { * @return Observable> * The list of Suggestion Targets. */ - public getTargets(source, elementsPerPage, currentPage): Observable> { + public getTargets(source, elementsPerPage, currentPage): Observable> { const sortOptions = new SortOptions('display', SortDirection.ASC); const findListOptions: FindListOptions = { @@ -77,7 +77,7 @@ export class SuggestionsService { return this.suggestionsDataService.getTargets(source, findListOptions).pipe( getFinishedRemoteData(), take(1), - map((rd: RemoteData>) => { + map((rd: RemoteData>) => { if (rd.hasSucceeded) { return rd.payload; } else { @@ -98,10 +98,10 @@ export class SuggestionsService { * The page number to retrieve * @param sortOptions * The sort options - * @return Observable>> + * @return Observable>> * The list of Suggestion. */ - public getSuggestions(targetId: string, elementsPerPage, currentPage, sortOptions: SortOptions): Observable> { + public getSuggestions(targetId: string, elementsPerPage, currentPage, sortOptions: SortOptions): Observable> { const [source, target] = targetId.split(':'); const findListOptions: FindListOptions = { @@ -145,7 +145,7 @@ export class SuggestionsService { * @param userUuid * The EPerson id for which to retrieve suggestion targets */ - public retrieveCurrentUserSuggestions(userUuid: string): Observable { + public retrieveCurrentUserSuggestions(userUuid: string): Observable { return this.researcherProfileService.findById(userUuid).pipe( getFirstSucceededRemoteDataPayload(), mergeMap((profile: ResearcherProfile) => { @@ -173,7 +173,7 @@ export class SuggestionsService { * @private */ public approveAndImport(workspaceitemService: WorkspaceitemDataService, - suggestion: OpenaireSuggestion, + suggestion: Suggestion, collectionId: string): Observable { const resolvedCollectionId = this.resolveCollectionId(suggestion, collectionId); @@ -201,10 +201,10 @@ export class SuggestionsService { * @param collectionId the collectionId */ public approveAndImportMultiple(workspaceitemService: WorkspaceitemDataService, - suggestions: OpenaireSuggestion[], + suggestions: Suggestion[], collectionId: string): Observable { - return forkJoin(suggestions.map((suggestion: OpenaireSuggestion) => + return forkJoin(suggestions.map((suggestion: Suggestion) => this.approveAndImport(workspaceitemService, suggestion, collectionId))) .pipe(map((results: WorkspaceItem[]) => { return { @@ -218,8 +218,8 @@ export class SuggestionsService { * Perform a bulk notMine operation. * @param suggestions the array containing the suggestions */ - public notMineMultiple(suggestions: OpenaireSuggestion[]): Observable { - return forkJoin(suggestions.map((suggestion: OpenaireSuggestion) => this.notMine(suggestion.id))) + public notMineMultiple(suggestions: Suggestion[]): Observable { + return forkJoin(suggestions.map((suggestion: Suggestion) => this.notMine(suggestion.id))) .pipe(map((results: RemoteData[]) => { return { success: results.filter((result) => result != null).length, @@ -234,7 +234,7 @@ export class SuggestionsService { * @param target * @return the researchUuid */ - public getTargetUuid(target: OpenaireSuggestionTarget): string { + public getTargetUuid(target: SuggestionTarget): string { const tokens = target.id.split(':'); return tokens.length === 2 ? tokens[1] : null; } @@ -243,7 +243,7 @@ export class SuggestionsService { * Interpolated params to build the notification suggestions notification. * @param suggestionTarget */ - public getNotificationSuggestionInterpolation(suggestionTarget: OpenaireSuggestionTarget): any { + public getNotificationSuggestionInterpolation(suggestionTarget: SuggestionTarget): any { return { count: suggestionTarget.total, source: this.translateService.instant(this.translateSuggestionSource(suggestionTarget.source)), @@ -266,7 +266,7 @@ export class SuggestionsService { * @param suggestion * @param collectionId */ - public resolveCollectionId(suggestion: OpenaireSuggestion, collectionId): string { + public resolveCollectionId(suggestion: Suggestion, collectionId): string { if (hasValue(collectionId)) { return collectionId; } @@ -280,13 +280,13 @@ export class SuggestionsService { * in the configuration. * @param suggestions */ - public isCollectionFixed(suggestions: OpenaireSuggestion[]): boolean { + public isCollectionFixed(suggestions: Suggestion[]): boolean { return this.getFixedCollectionIds(suggestions).length === 1; } - private getFixedCollectionIds(suggestions: OpenaireSuggestion[]): string[] { + private getFixedCollectionIds(suggestions: Suggestion[]): string[] { const collectionIds = {}; - suggestions.forEach((suggestion: OpenaireSuggestion) => { + suggestions.forEach((suggestion: Suggestion) => { const conf = environment.suggestion.find((suggestionConf: SuggestionConfig) => suggestionConf.source === suggestion.source); if (hasValue(conf)) { collectionIds[conf.collectionId] = true; diff --git a/src/app/suggestion-notifications/selectors.ts b/src/app/suggestion-notifications/selectors.ts index c5947e3196d..a20e9000253 100644 --- a/src/app/suggestion-notifications/selectors.ts +++ b/src/app/suggestion-notifications/selectors.ts @@ -12,7 +12,7 @@ import { QualityAssuranceSourceObject } from '../core/suggestion-notifications/q * @param {AppState} state Top level state. * @return {SuggestionNotificationsState} */ -const _getNotificationsState = createFeatureSelector('notifications'); +const _getNotificationsState = createFeatureSelector('suggestion-notifications'); // Quality Assurance topics // ---------------------------------------------------------------------------- diff --git a/src/app/suggestion-notifications/suggestion-notifications.module.ts b/src/app/suggestion-notifications/suggestion-notifications.module.ts index b69427d70db..2b2e41ece3e 100644 --- a/src/app/suggestion-notifications/suggestion-notifications.module.ts +++ b/src/app/suggestion-notifications/suggestion-notifications.module.ts @@ -34,13 +34,13 @@ import {SuggestionActionsComponent} from './reciter-suggestions/suggestion-actio import {SuggestionTargetsComponent} from './reciter-suggestions/suggestion-targets/suggestion-targets.component'; import {SuggestionTargetsStateService} from './reciter-suggestions/suggestion-targets/suggestion-targets.state.service'; import {SuggestionsService} from './reciter-suggestions/suggestions.service'; -import {OpenaireSuggestionsDataService} from '../core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service'; +import {SuggestionsDataService} from '../core/suggestion-notifications/reciter-suggestions/suggestions-data.service'; const MODULES = [ CommonModule, SharedModule, CoreModule.forRoot(), - StoreModule.forFeature('notifications', suggestionNotificationsReducers, storeModuleConfig as StoreConfig), + StoreModule.forFeature('suggestion-notifications', suggestionNotificationsReducers, storeModuleConfig as StoreConfig), EffectsModule.forFeature(suggestionNotificationsEffects), TranslateModule ]; @@ -72,7 +72,7 @@ const PROVIDERS = [ QualityAssuranceEventRestService, SuggestionTargetsStateService, SuggestionsService, - OpenaireSuggestionsDataService + SuggestionsDataService ]; @NgModule({ diff --git a/src/app/suggestion-notifications/suggestion-notifications.reducer.ts b/src/app/suggestion-notifications/suggestion-notifications.reducer.ts index cdd072bb397..bab0984304d 100644 --- a/src/app/suggestion-notifications/suggestion-notifications.reducer.ts +++ b/src/app/suggestion-notifications/suggestion-notifications.reducer.ts @@ -21,4 +21,4 @@ export const suggestionNotificationsReducers: ActionReducerMap('notifications'); +export const suggestionNotificationsSelector = createFeatureSelector('suggestion-notifications'); diff --git a/src/app/suggestions-page/suggestions-page.component.spec.ts b/src/app/suggestions-page/suggestions-page.component.spec.ts index aef93326058..61e66a99cf7 100644 --- a/src/app/suggestions-page/suggestions-page.component.spec.ts +++ b/src/app/suggestions-page/suggestions-page.component.spec.ts @@ -9,9 +9,9 @@ import { of as observableOf } from 'rxjs'; import { SuggestionsPageComponent } from './suggestions-page.component'; import { SuggestionListElementComponent } from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component'; import { SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service'; -import { getMockSuggestionNotificationsStateService, getMockSuggestionsService } from '../shared/mocks/openaire.mock'; +import { getMockSuggestionNotificationsStateService, getMockSuggestionsService } from '../shared/mocks/suggestion.mock'; import { buildPaginatedList, PaginatedList } from '../core/data/paginated-list.model'; -import { OpenaireSuggestion } from '../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; +import { Suggestion } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; import { mockSuggestionPublicationOne, mockSuggestionPublicationTwo } from '../shared/mocks/reciter-suggestion.mock'; import { SuggestionEvidencesComponent } from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-evidences/suggestion-evidences.component'; import { ObjectKeysPipe } from '../shared/utils/object-keys-pipe'; @@ -38,7 +38,7 @@ describe('SuggestionPageComponent', () => { let scheduler: TestScheduler; const mockSuggestionsService = getMockSuggestionsService(); const mockSuggestionsTargetStateService = getMockSuggestionNotificationsStateService(); - const suggestionTargetsList: PaginatedList = buildPaginatedList(new PageInfo(), [mockSuggestionPublicationOne, mockSuggestionPublicationTwo]); + const suggestionTargetsList: PaginatedList = buildPaginatedList(new PageInfo(), [mockSuggestionPublicationOne, mockSuggestionPublicationTwo]); const router = new RouterStub(); const routeStub = { data: observableOf({ diff --git a/src/app/suggestions-page/suggestions-page.component.ts b/src/app/suggestions-page/suggestions-page.component.ts index e8e76ff606d..b4ca0108d5a 100644 --- a/src/app/suggestions-page/suggestions-page.component.ts +++ b/src/app/suggestions-page/suggestions-page.component.ts @@ -11,8 +11,8 @@ import { RemoteData } from '../core/data/remote-data'; import { getFirstSucceededRemoteDataPayload } from '../core/shared/operators'; import { SuggestionBulkResult, SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service'; import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model'; -import { OpenaireSuggestion } from '../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion.model'; -import { OpenaireSuggestionTarget } from '../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { Suggestion } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion.model'; +import { SuggestionTarget } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; import { AuthService } from '../core/auth/auth.service'; import { SuggestionApproveAndImport } from '../suggestion-notifications/reciter-suggestions/suggestion-list-element/suggestion-list-element.component'; import { NotificationsService } from '../shared/notifications/notifications.service'; @@ -56,18 +56,18 @@ export class SuggestionsPageComponent implements OnInit { /** * A list of remote data objects of suggestions */ - suggestionsRD$: BehaviorSubject> = new BehaviorSubject>({} as any); + suggestionsRD$: BehaviorSubject> = new BehaviorSubject>({} as any); - targetRD$: Observable>; + targetRD$: Observable>; targetId$: Observable; - suggestionTarget: OpenaireSuggestionTarget; + suggestionTarget: SuggestionTarget; suggestionId: any; suggestionSource: any; researcherName: any; researcherUuid: any; - selectedSuggestions: { [id: string]: OpenaireSuggestion } = {}; + selectedSuggestions: { [id: string]: Suggestion } = {}; isBulkOperationPending = false; constructor( @@ -85,17 +85,17 @@ export class SuggestionsPageComponent implements OnInit { ngOnInit(): void { this.targetRD$ = this.route.data.pipe( - map((data: Data) => data.suggestionTargets as RemoteData), + map((data: Data) => data.suggestionTargets as RemoteData), redirectOn4xx(this.router, this.authService) ); this.targetId$ = this.targetRD$.pipe( getFirstSucceededRemoteDataPayload(), - map((target: OpenaireSuggestionTarget) => target.id) + map((target: SuggestionTarget) => target.id) ); this.targetRD$.pipe( getFirstSucceededRemoteDataPayload() - ).subscribe((suggestionTarget: OpenaireSuggestionTarget) => { + ).subscribe((suggestionTarget: SuggestionTarget) => { this.suggestionTarget = suggestionTarget; this.suggestionId = suggestionTarget.id; this.researcherName = suggestionTarget.display; @@ -135,7 +135,7 @@ export class SuggestionsPageComponent implements OnInit { ); }), take(1) - ).subscribe((results: PaginatedList) => { + ).subscribe((results: PaginatedList) => { this.processing$.next(false); this.suggestionsRD$.next(results); this.suggestionService.clearSuggestionRequests(); @@ -232,7 +232,7 @@ export class SuggestionsPageComponent implements OnInit { * @param object the suggestions * @param selected the new selected value for the suggestion */ - onSelected(object: OpenaireSuggestion, selected: boolean) { + onSelected(object: Suggestion, selected: boolean) { if (selected) { this.selectedSuggestions[object.id] = object; } else { @@ -244,7 +244,7 @@ export class SuggestionsPageComponent implements OnInit { * When Toggle Select All occurs. * @param suggestions all the visible suggestions inside the page */ - onToggleSelectAll(suggestions: OpenaireSuggestion[]) { + onToggleSelectAll(suggestions: Suggestion[]) { if ( this.getSelectedSuggestionsCount() > 0) { this.selectedSuggestions = {}; } else { @@ -265,7 +265,7 @@ export class SuggestionsPageComponent implements OnInit { * Return true if all the suggestion are configured with the same fixed collection in the configuration. * @param suggestions */ - isCollectionFixed(suggestions: OpenaireSuggestion[]): boolean { + isCollectionFixed(suggestions: Suggestion[]): boolean { return this.suggestionService.isCollectionFixed(suggestions); } diff --git a/src/app/suggestions-page/suggestions-page.module.ts b/src/app/suggestions-page/suggestions-page.module.ts index 726af26c0f3..a3f24f34682 100644 --- a/src/app/suggestions-page/suggestions-page.module.ts +++ b/src/app/suggestions-page/suggestions-page.module.ts @@ -5,7 +5,7 @@ import { SuggestionsPageComponent } from './suggestions-page.component'; import { SharedModule } from '../shared/shared.module'; import { SuggestionsPageRoutingModule } from './suggestions-page-routing.module'; import { SuggestionsService } from '../suggestion-notifications/reciter-suggestions/suggestions.service'; -import { OpenaireSuggestionsDataService } from '../core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service'; +import { SuggestionsDataService } from '../core/suggestion-notifications/reciter-suggestions/suggestions-data.service'; import {SuggestionNotificationsModule} from '../suggestion-notifications/suggestion-notifications.module'; @NgModule({ @@ -17,7 +17,7 @@ import {SuggestionNotificationsModule} from '../suggestion-notifications/suggest SuggestionsPageRoutingModule ], providers: [ - OpenaireSuggestionsDataService, + SuggestionsDataService, SuggestionsService ] }) diff --git a/src/app/suggestions-page/suggestions-page.resolver.ts b/src/app/suggestions-page/suggestions-page.resolver.ts index cf22b04aa68..6cc89a72d43 100644 --- a/src/app/suggestions-page/suggestions-page.resolver.ts +++ b/src/app/suggestions-page/suggestions-page.resolver.ts @@ -6,15 +6,15 @@ import { find } from 'rxjs/operators'; import { RemoteData } from '../core/data/remote-data'; import { hasValue } from '../shared/empty.util'; -import { OpenaireSuggestionsDataService } from '../core/suggestion-notifications/reciter-suggestions/openaire-suggestions-data.service'; -import { OpenaireSuggestionTarget } from '../core/suggestion-notifications/reciter-suggestions/models/openaire-suggestion-target.model'; +import { SuggestionsDataService } from '../core/suggestion-notifications/reciter-suggestions/suggestions-data.service'; +import { SuggestionTarget } from '../core/suggestion-notifications/reciter-suggestions/models/suggestion-target.model'; /** * This class represents a resolver that requests a specific collection before the route is activated */ @Injectable() -export class SuggestionsPageResolver implements Resolve> { - constructor(private suggestionsDataService: OpenaireSuggestionsDataService) { +export class SuggestionsPageResolver implements Resolve> { + constructor(private suggestionsDataService: SuggestionsDataService) { } /** @@ -24,7 +24,7 @@ export class SuggestionsPageResolver implements Resolve> Emits the found collection based on the parameters in the current route, * or an error if something went wrong */ - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> { + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> { return this.suggestionsDataService.getTargetById(route.params.targetId).pipe( find((RD) => hasValue(RD.hasFailed) || RD.hasSucceeded), ); From f37122b23cb578407e4dd4055d799736f43c0c34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Morin?= Date: Wed, 30 Nov 2022 15:41:56 -0500 Subject: [PATCH 005/504] Content Reports --- .../admin-reports-routing.module.ts | 37 ++ .../admin-reports/admin-reports.module.ts | 28 ++ .../filtered-collection.model.ts | 36 ++ .../filtered-collections.actions.ts | 0 .../filtered-collections.component.html | 64 +++ .../filtered-collections.component.scss | 15 + .../filtered-collections.component.spec.ts | 83 ++++ .../filtered-collections.component.ts | 58 +++ .../filtered-collections.model.ts | 26 ++ .../filtered-items/filtered-items-model.ts | 23 + .../filtered-items/filtered-items.actions.ts | 0 .../filtered-items.component.html | 156 +++++++ .../filtered-items.component.scss | 19 + .../filtered-items.component.spec.ts | 108 +++++ .../filtered-items.component.ts | 301 ++++++++++++ .../filtered-items/option-vo.model.ts | 46 ++ .../filtered-items/preset-query.model.ts | 17 + .../filtered-items/query-predicate.model.ts | 36 ++ .../filters-section/filter-group.model.ts | 19 + .../filters-section/filter.model.ts | 8 + .../filters-section.component.html | 19 + .../filters-section.component.scss | 0 .../filters-section.component.spec.ts | 101 ++++ .../filters-section.component.ts | 129 ++++++ src/app/admin/admin-routing-paths.ts | 6 + src/app/admin/admin-routing.module.ts | 7 +- src/app/admin/admin.module.ts | 2 + src/app/menu.resolver.ts | 54 +++ src/assets/i18n/ar.json5 | 424 ++++++++++++++++- src/assets/i18n/bn.json5 | 426 ++++++++++++++++- src/assets/i18n/cs.json5 | 424 ++++++++++++++++- src/assets/i18n/de.json5 | 421 ++++++++++++++++- src/assets/i18n/el.json5 | 414 +++++++++++++++++ src/assets/i18n/en.json5 | 211 +++++++++ src/assets/i18n/es.json5 | 425 +++++++++++++++++ src/assets/i18n/fi.json5 | 422 +++++++++++++++++ src/assets/i18n/fr.json5 | 309 +++++++++++++ src/assets/i18n/gd.json5 | 422 +++++++++++++++++ src/assets/i18n/hi.json5 | 425 +++++++++++++++++ src/assets/i18n/hu.json5 | 424 ++++++++++++++++- src/assets/i18n/ja.json5 | 424 ++++++++++++++++- src/assets/i18n/kk.json5 | 424 +++++++++++++++++ src/assets/i18n/lv.json5 | 420 +++++++++++++++++ src/assets/i18n/nl.json5 | 421 ++++++++++++++++- src/assets/i18n/pl.json5 | 424 ++++++++++++++++- src/assets/i18n/pt-BR.json5 | 431 +++++++++++++++++- src/assets/i18n/pt-PT.json5 | 421 ++++++++++++++++- src/assets/i18n/sv.json5 | 423 +++++++++++++++++ src/assets/i18n/sw.json5 | 424 ++++++++++++++++- src/assets/i18n/tr.json5 | 396 +++++++++++++++- 50 files changed, 10313 insertions(+), 40 deletions(-) create mode 100644 src/app/admin/admin-reports/admin-reports-routing.module.ts create mode 100644 src/app/admin/admin-reports/admin-reports.module.ts create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collection.model.ts create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collections.actions.ts create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collections.component.html create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collections.component.scss create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collections.component.spec.ts create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts create mode 100644 src/app/admin/admin-reports/filtered-collections/filtered-collections.model.ts create mode 100644 src/app/admin/admin-reports/filtered-items/filtered-items-model.ts create mode 100644 src/app/admin/admin-reports/filtered-items/filtered-items.actions.ts create mode 100644 src/app/admin/admin-reports/filtered-items/filtered-items.component.html create mode 100644 src/app/admin/admin-reports/filtered-items/filtered-items.component.scss create mode 100644 src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts create mode 100644 src/app/admin/admin-reports/filtered-items/filtered-items.component.ts create mode 100644 src/app/admin/admin-reports/filtered-items/option-vo.model.ts create mode 100644 src/app/admin/admin-reports/filtered-items/preset-query.model.ts create mode 100644 src/app/admin/admin-reports/filtered-items/query-predicate.model.ts create mode 100644 src/app/admin/admin-reports/filters-section/filter-group.model.ts create mode 100644 src/app/admin/admin-reports/filters-section/filter.model.ts create mode 100644 src/app/admin/admin-reports/filters-section/filters-section.component.html create mode 100644 src/app/admin/admin-reports/filters-section/filters-section.component.scss create mode 100644 src/app/admin/admin-reports/filters-section/filters-section.component.spec.ts create mode 100644 src/app/admin/admin-reports/filters-section/filters-section.component.ts diff --git a/src/app/admin/admin-reports/admin-reports-routing.module.ts b/src/app/admin/admin-reports/admin-reports-routing.module.ts new file mode 100644 index 00000000000..9022429502f --- /dev/null +++ b/src/app/admin/admin-reports/admin-reports-routing.module.ts @@ -0,0 +1,37 @@ +import { FilteredCollectionsComponent } from './filtered-collections/filtered-collections.component'; +import { FilteredItemsComponent } from './filtered-items/filtered-items.component'; +import { RouterModule } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.resolver'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + path: 'collections', + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: {title: 'admin.reports.collections.title', breadcrumbKey: 'admin.reports.collections'}, + children: [ + { + path: '', + component: FilteredCollectionsComponent + } + ] + }, + { + path: 'queries', + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: {title: 'admin.reports.items.title', breadcrumbKey: 'admin.reports.items'}, + children: [ + { + path: '', + component: FilteredItemsComponent + } + ] + } + ]) + ] +}) +export class AdminReportsRoutingModule { + +} diff --git a/src/app/admin/admin-reports/admin-reports.module.ts b/src/app/admin/admin-reports/admin-reports.module.ts new file mode 100644 index 00000000000..70dfba8a072 --- /dev/null +++ b/src/app/admin/admin-reports/admin-reports.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FilteredCollectionsComponent } from './filtered-collections/filtered-collections.component'; +import { RouterModule } from '@angular/router'; +import { SharedModule } from '../../shared/shared.module'; +import { FormModule } from '../../shared/form/form.module'; +import { FilteredItemsComponent } from './filtered-items/filtered-items.component'; +import { AdminReportsRoutingModule } from './admin-reports-routing.module'; +import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { FiltersComponent } from './filters-section/filters-section.component'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + RouterModule, + FormModule, + AdminReportsRoutingModule, + NgbAccordionModule + ], + declarations: [ + FilteredCollectionsComponent, + FilteredItemsComponent, + FiltersComponent + ] +}) +export class AdminReportsModule { +} diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collection.model.ts b/src/app/admin/admin-reports/filtered-collections/filtered-collection.model.ts new file mode 100644 index 00000000000..a48b1e02fa8 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collection.model.ts @@ -0,0 +1,36 @@ +export class FilteredCollection { + + public label: string; + public handle: string; + public communityLabel: string; + public communityHandle: string; + public nbTotalItems: number; + public values = {}; + public allFiltersValue: number; + + public clear() { + this.label = ''; + this.handle = ''; + this.communityLabel = ''; + this.communityHandle = ''; + this.nbTotalItems = 0; + this.values = {}; + this.allFiltersValue = 0; + } + + public deserialize(object: any) { + this.clear(); + this.label = object.label; + this.handle = object.handle; + this.communityLabel = object.community_label; + this.communityHandle = object.community_handle; + this.nbTotalItems = object.nb_total_items; + let valuesPerFilter = object.values; + for (let filter in valuesPerFilter) { + if (valuesPerFilter.hasOwnProperty(filter)) { + this.values[filter] = valuesPerFilter[filter]; + } + } + this.allFiltersValue = object.all_filters_value; + } +} diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.actions.ts b/src/app/admin/admin-reports/filtered-collections/filtered-collections.actions.ts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.html b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.html new file mode 100644 index 00000000000..514b06719aa --- /dev/null +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.html @@ -0,0 +1,64 @@ +
+ +
diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.scss b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.scss new file mode 100644 index 00000000000..476341a8b94 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.scss @@ -0,0 +1,15 @@ +.num { + text-align: center; +} + +.stats tbody tr:nth-child(even) { + background: #CCC +} +.stats tbody tr:nth-child(odd) { + background: #FFF +} + +.stats thead tr { + border-bottom-width: 1px; + border-bottom-style: solid; +} diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.spec.ts b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.spec.ts new file mode 100644 index 00000000000..73f3e86a0b3 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.spec.ts @@ -0,0 +1,83 @@ +import { waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { TranslateLoaderMock } from 'src/app/shared/mocks/translate-loader.mock'; +import { FormBuilder } from '@angular/forms'; +import { FilteredCollectionsComponent } from './filtered-collections.component'; +import { DspaceRestService } from 'src/app/core/dspace-rest/dspace-rest.service'; +import { NgbAccordion, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { of as observableOf } from 'rxjs'; +import { RawRestResponse } from 'src/app/core/dspace-rest/raw-rest-response.model'; + +describe('FiltersComponent', () => { + let component: FilteredCollectionsComponent; + let fixture: ComponentFixture; + let formBuilder: FormBuilder; + + const expected = { + payload: { + collections: [], + summary: { + label: 'Test' + } + }, + statusCode: 200, + statusText: 'OK' + } as RawRestResponse; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [FilteredCollectionsComponent], + imports: [ + NgbAccordionModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), + HttpClientTestingModule + ], + providers: [ + FormBuilder, + DspaceRestService + ], + schemas: [NO_ERRORS_SCHEMA] + }); + })); + + beforeEach(waitForAsync(() => { + formBuilder = TestBed.inject(FormBuilder); + + fixture = TestBed.createComponent(FilteredCollectionsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should be displaying the filters panel initially', () => { + let accordion: NgbAccordion = component.accordionComponent; + expect(accordion.isExpanded('filters')).toBeTrue(); + }); + + describe('toggle', () => { + beforeEach(() => { + spyOn(component, 'postFilteredCollections').and.returnValue(observableOf(expected)); + spyOn(component.results, 'deserialize'); + spyOn(component.accordionComponent, 'expand').and.callThrough(); + component.submit(); + fixture.detectChanges(); + }); + + it('should be displaying the collections panel after submitting', waitForAsync(() => { + fixture.whenStable().then(() => { + expect(component.accordionComponent.expand).toHaveBeenCalledWith('collections'); + expect(component.accordionComponent.isExpanded('collections')).toBeTrue(); + }); + })); + }); +}); diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts new file mode 100644 index 00000000000..4f7e7bb5db8 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts @@ -0,0 +1,58 @@ +import { Component, ViewChild } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'; +import { Observable } from 'rxjs'; +import { RestRequestMethod } from 'src/app/core/data/rest-request-method'; +import { DspaceRestService } from 'src/app/core/dspace-rest/dspace-rest.service'; +import { RawRestResponse } from 'src/app/core/dspace-rest/raw-rest-response.model'; +import { environment } from 'src/environments/environment'; +import { FiltersComponent } from '../filters-section/filters-section.component'; +import { FilteredCollections } from './filtered-collections.model'; + +@Component({ + selector: 'ds-report-filtered-collections', + templateUrl: './filtered-collections.component.html', + styleUrls: ['./filtered-collections.component.scss'] +}) +export class FilteredCollectionsComponent { + + queryForm: FormGroup; + results: FilteredCollections = new FilteredCollections(); + @ViewChild('acc') accordionComponent: NgbAccordion; + + constructor( + private formBuilder: FormBuilder, + private restService: DspaceRestService) {} + + ngOnInit() { + this.queryForm = this.formBuilder.group({ + filters: FiltersComponent.formGroup(this.formBuilder) + }); + } + + filtersFormGroup(): FormGroup { + return this.queryForm.get('filters') as FormGroup; + } + + getGroup(filterId: string): string { + return FiltersComponent.getGroup(filterId).id; + } + + submit() { + this + .postFilteredCollections() + .subscribe( + response => { + this.results.deserialize(response.payload); + this.accordionComponent.expand('collections'); + } + ); + } + + postFilteredCollections(): Observable { + let form = this.queryForm.value; + let scheme = environment.rest.ssl ? 'https' : 'http'; + let urlRestApp = `${scheme}://${environment.rest.host}:${environment.rest.port}${environment.rest.nameSpace}`; + return this.restService.request(RestRequestMethod.POST, `${urlRestApp}/api/contentreports/filteredcollections`, form); + } +} diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.model.ts b/src/app/admin/admin-reports/filtered-collections/filtered-collections.model.ts new file mode 100644 index 00000000000..6ea5a2fc80a --- /dev/null +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collections.model.ts @@ -0,0 +1,26 @@ +import { FilteredCollection } from './filtered-collection.model'; + +export class FilteredCollections { + + public collections: Array = []; + public summary: FilteredCollection = new FilteredCollection(); + + public clear() { + this.collections.splice(0, this.collections.length); + this.summary.clear(); + } + + public deserialize(object: any) { + this.clear(); + let summary = object.summary; + this.summary.deserialize(summary); + let collections = object.collections; + for (let i = 0; i < collections.length; i++) { + let collection = collections[i]; + let coll = new FilteredCollection(); + coll.deserialize(collection); + this.collections.push(coll); + } + } + +} diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts b/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts new file mode 100644 index 00000000000..5811efe53bd --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts @@ -0,0 +1,23 @@ +import { Item } from "src/app/core/shared/item.model"; + +export class FilteredItems { + + public items: Item[] = []; + public itemCount: number; + + public clear() { + this.items.splice(0, this.items.length); + } + + public deserialize(object: any, offset: number = 0) { + this.clear(); + this.itemCount = object.itemCount; + let items = object.items; + for (let i = 0; i < items.length; i++) { + let item = items[i]; + item.index = this.items.length + offset + 1; + this.items.push(item); + } + } + +} diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.actions.ts b/src/app/admin/admin-reports/filtered-items/filtered-items.actions.ts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.html b/src/app/admin/admin-reports/filtered-items/filtered-items.component.html new file mode 100644 index 00000000000..34bad69e852 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.html @@ -0,0 +1,156 @@ +
+ +
diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.scss b/src/app/admin/admin-reports/filtered-items/filtered-items.component.scss new file mode 100644 index 00000000000..61a7a4516b5 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.scss @@ -0,0 +1,19 @@ +.predicate { + height: 26px; +} + +.num { + text-align: center; +} + +.stats tbody tr:nth-child(even) { + background: #CCC +} +.stats tbody tr:nth-child(odd) { + background: #FFF +} + +.stats thead tr { + border-bottom-width: 1px; + border-bottom-style: solid; +} diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts b/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts new file mode 100644 index 00000000000..70e32d402fc --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts @@ -0,0 +1,108 @@ +import { waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { TranslateLoaderMock } from 'src/app/shared/mocks/translate-loader.mock'; +import { FormBuilder } from '@angular/forms'; +import { FilteredItemsComponent } from './filtered-items.component'; +import { DspaceRestService } from 'src/app/core/dspace-rest/dspace-rest.service'; +import { NgbAccordion, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { of as observableOf } from 'rxjs'; +import { RawRestResponse } from 'src/app/core/dspace-rest/raw-rest-response.model'; +import { CommunityDataService } from 'src/app/core/data/community-data.service'; +import { ObjectCacheService } from 'src/app/core/cache/object-cache.service'; +import { ActionsSubject, ReducerManager, ReducerManagerDispatcher, StateObservable, Store, StoreModule } from '@ngrx/store'; +import { UUIDService } from 'src/app/core/shared/uuid.service'; +import { RemoteDataBuildService } from 'src/app/core/cache/builders/remote-data-build.service'; +import { HALEndpointService } from 'src/app/core/shared/hal-endpoint.service'; +import { DSOChangeAnalyzer } from 'src/app/core/data/dso-change-analyzer.service'; +import { NotificationsService } from 'src/app/shared/notifications/notifications.service'; +import { BitstreamFormatDataService } from 'src/app/core/data/bitstream-format-data.service'; +import { CollectionDataService } from 'src/app/core/data/collection-data.service'; +import { MetadataSchemaDataService } from 'src/app/core/data/metadata-schema-data.service'; +import { MetadataFieldDataService } from 'src/app/core/data/metadata-field-data.service'; +import { StoreMock } from 'src/app/shared/testing/store.mock'; + +describe('FiltersComponent', () => { + let component: FilteredItemsComponent; + let fixture: ComponentFixture; + let formBuilder: FormBuilder; + + const expected = { + payload: { + items: [], + itemCount: 0 + }, + statusCode: 200, + statusText: 'OK' + } as RawRestResponse; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [FilteredItemsComponent], + imports: [ + NgbAccordionModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }), + HttpClientTestingModule, + StoreModule.forRoot({}) + ], + providers: [ + CommunityDataService, + CollectionDataService, + MetadataSchemaDataService, + MetadataFieldDataService, + //TranslateService, + FormBuilder, + DspaceRestService, + // Starting here, these services not referenced directly by the component. + ObjectCacheService, + UUIDService, + RemoteDataBuildService, + HALEndpointService, + DSOChangeAnalyzer, + NotificationsService, + BitstreamFormatDataService + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(waitForAsync(() => { + formBuilder = TestBed.inject(FormBuilder); + + fixture = TestBed.createComponent(FilteredItemsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should be displaying the collectionSelector panel initially', () => { + let accordion: NgbAccordion = component.accordionComponent; + expect(accordion.isExpanded('collectionSelector')).toBeTrue(); + }); + + describe('expand', () => { + beforeEach(() => { + spyOn(component, 'postFilteredItems').and.returnValue(observableOf(expected)); + spyOn(component.results, 'deserialize'); + spyOn(component.accordionComponent, 'expand').and.callThrough(); + component.submit(); + fixture.detectChanges(); + }); + + it('should be displaying the itemResults panel after submitting', waitForAsync(() => { + fixture.whenStable().then(() => { + expect(component.accordionComponent.expand).toHaveBeenCalledWith('itemResults'); + expect(component.accordionComponent.isExpanded('itemResults')).toBeTrue(); + }); + })); + }); +}); diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts b/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts new file mode 100644 index 00000000000..21b7f2e12b4 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts @@ -0,0 +1,301 @@ +import { Component, ViewChild } from '@angular/core'; +import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateService } from '@ngx-translate/core'; +import { map, Observable } from 'rxjs'; +import { CollectionDataService } from 'src/app/core/data/collection-data.service'; +import { CommunityDataService } from 'src/app/core/data/community-data.service'; +import { MetadataFieldDataService } from 'src/app/core/data/metadata-field-data.service'; +import { MetadataSchemaDataService } from 'src/app/core/data/metadata-schema-data.service'; +import { RestRequestMethod } from 'src/app/core/data/rest-request-method'; +import { DspaceRestService } from 'src/app/core/dspace-rest/dspace-rest.service'; +import { RawRestResponse } from 'src/app/core/dspace-rest/raw-rest-response.model'; +import { MetadataField } from 'src/app/core/metadata/metadata-field.model'; +import { MetadataSchema } from 'src/app/core/metadata/metadata-schema.model'; +import { Collection } from 'src/app/core/shared/collection.model'; +import { Community } from 'src/app/core/shared/community.model'; +import { Item } from 'src/app/core/shared/item.model'; +import { getFirstSucceededRemoteListPayload } from 'src/app/core/shared/operators'; +import { isEmpty } from 'src/app/shared/empty.util'; +import { environment } from 'src/environments/environment'; +import { FiltersComponent } from '../filters-section/filters-section.component'; +import { FilteredItems } from './filtered-items-model'; +import { OptionVO } from './option-vo.model'; +import { PresetQuery } from './preset-query.model'; +import { QueryPredicate } from './query-predicate.model'; + +@Component({ + selector: 'ds-report-filtered-items', + templateUrl: './filtered-items.component.html', + styleUrls: ['./filtered-items.component.scss'] +}) +export class FilteredItemsComponent { + + collections: OptionVO[]; + presetQueries: PresetQuery[]; + metadataFields: OptionVO[]; + metadataFieldsWithAny: OptionVO[]; + predicates: OptionVO[]; + pageLimits: OptionVO[]; + + queryForm: FormGroup; + currentPage: number = 0; + results: FilteredItems = new FilteredItems(); + results$: Observable; + @ViewChild('acc') accordionComponent: NgbAccordion; + + constructor( + private communityService: CommunityDataService, + private collectionService: CollectionDataService, + private metadataSchemaService: MetadataSchemaDataService, + private metadataFieldService: MetadataFieldDataService, + private translateService: TranslateService, + private formBuilder: FormBuilder, + private restService: DspaceRestService) {} + + ngOnInit() { + this.loadCollections(); + this.loadPresetQueries(); + this.loadMetadataFields(); + this.loadPredicates(); + this.loadPageLimits(); + + let formQueryPredicates: FormGroup[] = [ + new QueryPredicate().toFormGroup(this.formBuilder) + ]; + + this.queryForm = this.formBuilder.group({ + collections: this.formBuilder.control([''], []), + presetQuery: this.formBuilder.control('new', []), + queryPredicates: this.formBuilder.array(formQueryPredicates), + pageLimit: this.formBuilder.control('100', []), + filters: FiltersComponent.formGroup(this.formBuilder), + additionalFields: this.formBuilder.control([], []) + }); + } + + loadCollections(): void { + this.collections = []; + let wholeRepo$ = this.translateService.stream('admin.reports.items.wholeRepo'); + this.collections.push(OptionVO.collectionLoc('', wholeRepo$)); + + this.communityService.findAll({ elementsPerPage: 10000, currentPage: 1 }).pipe( + getFirstSucceededRemoteListPayload() + ).subscribe( + (communitiesRest: Community[]) => { + communitiesRest.forEach(community => { + let commVO = OptionVO.collection(community.uuid, community.name, true); + this.collections.push(commVO); + + this.collectionService.findByParent(community.uuid, { elementsPerPage: 10000, currentPage: 1 }).pipe( + getFirstSucceededRemoteListPayload() + ).subscribe( + (collectionsRest: Collection[]) => { + collectionsRest.filter(collection => collection.firstMetadataValue('dspace.entity.type') === 'Publication') + .forEach(collection => { + let collVO = OptionVO.collection(collection.uuid, '–' + collection.name); + this.collections.push(collVO); + }); + } + ); + }); + } + ); + } + + loadPresetQueries(): void { + this.presetQueries = [ + PresetQuery.of('new', 'admin.reports.items.preset.new', []), + PresetQuery.of('q1', 'admin.reports.items.preset.hasNoTitle', [ + QueryPredicate.of('dc.title', QueryPredicate.DOES_NOT_EXIST) + ]), + PresetQuery.of('q2', 'admin.reports.items.preset.hasNoIdentifierUri', [ + QueryPredicate.of('dc.identifier.uri', QueryPredicate.DOES_NOT_EXIST) + ]), + PresetQuery.of('q3', 'admin.reports.items.preset.hasCompoundSubject', [ + QueryPredicate.of('dc.subject.*', QueryPredicate.LIKE, '%;%') + ]), + PresetQuery.of('q4', 'admin.reports.items.preset.hasCompoundAuthor', [ + QueryPredicate.of('dc.contributor.author', QueryPredicate.LIKE, '% and %') + ]), + PresetQuery.of('q5', 'admin.reports.items.preset.hasCompoundCreator', [ + QueryPredicate.of('dc.creator', QueryPredicate.LIKE, '% and %') + ]), + PresetQuery.of('q6', 'admin.reports.items.preset.hasUrlInDescription', [ + QueryPredicate.of('dc.description', QueryPredicate.MATCHES, '^.*(http://|https://|mailto:).*$') + ]), + PresetQuery.of('q7', 'admin.reports.items.preset.hasFullTextInProvenance', [ + QueryPredicate.of('dc.description.provenance', QueryPredicate.MATCHES, '^.*No\. of bitstreams(.|\r|\n|\r\n)*\.(PDF|pdf|DOC|doc|PPT|ppt|DOCX|docx|PPTX|pptx).*$') + ]), + PresetQuery.of('q8', 'admin.reports.items.preset.hasNonFullTextInProvenance', [ + QueryPredicate.of('dc.description.provenance', QueryPredicate.DOES_NOT_MATCH, '^.*No\. of bitstreams(.|\r|\n|\r\n)*\.(PDF|pdf|DOC|doc|PPT|ppt|DOCX|docx|PPTX|pptx).*$') + ]), + PresetQuery.of('q9', 'admin.reports.items.preset.hasEmptyMetadata', [ + QueryPredicate.of('*', QueryPredicate.MATCHES, '^\s*$') + ]), + PresetQuery.of('q10', 'admin.reports.items.preset.hasUnbreakingDataInDescription', [ + QueryPredicate.of('dc.description.*', QueryPredicate.MATCHES, '^.*[^\s]{50,}.*$') + ]), + PresetQuery.of('q12', 'admin.reports.items.preset.hasXmlEntityInMetadata', [ + QueryPredicate.of('*', QueryPredicate.MATCHES, '^.*&#.*$') + ]), + PresetQuery.of('q13', 'admin.reports.items.preset.hasNonAsciiCharInMetadata', [ + QueryPredicate.of('*', QueryPredicate.MATCHES, '^.*[^[:ascii:]].*$') + ]) + ]; + } + + loadMetadataFields(): void { + this.metadataFields = []; + this.metadataFieldsWithAny = []; + let anyField$ = this.translateService.stream('admin.reports.items.anyField'); + this.metadataFieldsWithAny.push(OptionVO.itemLoc('*', anyField$)); + this.metadataSchemaService.findAll({ elementsPerPage: 10000, currentPage: 1 }).pipe( + getFirstSucceededRemoteListPayload() + ).subscribe( + (schemasRest: MetadataSchema[]) => { + schemasRest.forEach(schema => { + this.metadataFieldService.findBySchema(schema, { elementsPerPage: 10000, currentPage: 1 }).pipe( + getFirstSucceededRemoteListPayload() + ).subscribe( + (fieldsRest: MetadataField[]) => { + fieldsRest.forEach(field => { + let fieldName = schema.prefix + '.' + field.toString(); + let fieldVO = OptionVO.item(fieldName, fieldName); + this.metadataFields.push(fieldVO); + this.metadataFieldsWithAny.push(fieldVO); + if (isEmpty(field.qualifier)) { + fieldName = schema.prefix + '.' + field.element + '.*'; + fieldVO = OptionVO.item(fieldName, fieldName); + this.metadataFieldsWithAny.push(fieldVO); + } + }); + } + ); + }); + } + ); + } + + loadPredicates(): void { + this.predicates = [ + OptionVO.item(QueryPredicate.EXISTS, 'admin.reports.items.predicate.exists'), + OptionVO.item(QueryPredicate.DOES_NOT_EXIST, 'admin.reports.items.predicate.doesNotExist'), + OptionVO.item(QueryPredicate.EQUALS, 'admin.reports.items.predicate.equals'), + OptionVO.item(QueryPredicate.DOES_NOT_EQUAL, 'admin.reports.items.predicate.doesNotEqual'), + OptionVO.item(QueryPredicate.LIKE, 'admin.reports.items.predicate.like'), + OptionVO.item(QueryPredicate.NOT_LIKE, 'admin.reports.items.predicate.notLike'), + OptionVO.item(QueryPredicate.CONTAINS, 'admin.reports.items.predicate.contains'), + OptionVO.item(QueryPredicate.DOES_NOT_CONTAIN, 'admin.reports.items.predicate.doesNotContain'), + OptionVO.item(QueryPredicate.MATCHES, 'admin.reports.items.predicate.matches'), + OptionVO.item(QueryPredicate.DOES_NOT_MATCH, 'admin.reports.items.predicate.doesNotMatch') + ]; + } + + loadPageLimits(): void { + this.pageLimits = [ + OptionVO.item('10', '10'), + OptionVO.item('25', '25'), + OptionVO.item('50', '50'), + OptionVO.item('100', '100'), + OptionVO.item('250', '250'), + OptionVO.item('1000', '1000') + ]; + } + + queryPredicatesArray(): FormArray { + return (this.queryForm.get('queryPredicates') as FormArray); + } + + addQueryPredicate(newItem: FormGroup = new QueryPredicate().toFormGroup(this.formBuilder)) { + this.queryPredicatesArray().push(newItem); + } + + deleteQueryPredicateDisabled(): boolean { + return this.queryPredicatesArray().length < 2; + } + + deleteQueryPredicate(index: number, nbToDelete: number = 1) { + if (index > -1) { + this.queryPredicatesArray().removeAt(index); + } + } + + setPresetQuery() { + let queryField = this.queryForm.controls.presetQuery as FormControl; + let value = queryField.value; + let query = this.presetQueries.find(q => q.id === value); + if (query !== undefined) { + this.queryPredicatesArray().clear(); + query.predicates + .map(qp => qp.toFormGroup(this.formBuilder)) + .forEach(qp => this.addQueryPredicate(qp)); + if (query.predicates.length == 0) { + this.addQueryPredicate(new QueryPredicate().toFormGroup(this.formBuilder)); + } + } + } + + filtersFormGroup(): FormGroup { + return this.queryForm.get('filters') as FormGroup; + } + + private pageSize() { + let form = this.queryForm.value; + return form.pageLimit; + } + + canNavigatePrevious(): boolean { + return this.currentPage > 0; + } + + prevPage() { + if (this.canNavigatePrevious()) { + this.currentPage--; + this.resubmit(); + } + } + + pageCount(): number { + let total = this.results.itemCount || 0; + return Math.ceil(total / this.pageSize()); + } + + canNavigateNext(): boolean { + return this.currentPage + 1 < this.pageCount(); + } + + nextPage() { + if (this.canNavigateNext()) { + this.currentPage++; + this.resubmit(); + } + } + + submit() { + this.accordionComponent.expand('itemResults'); + this.currentPage = 0; + this.resubmit(); + } + + resubmit() { + this.results$ = this + .postFilteredItems() + .pipe( + map(response => { + let offset = this.currentPage * this.pageSize(); + this.results.deserialize(response.payload, offset); + return this.results.items; + }) + ); + } + + postFilteredItems(): Observable { + let form = this.queryForm.value; + let scheme = environment.rest.ssl ? 'https' : 'http'; + let urlRestApp = `${scheme}://${environment.rest.host}:${environment.rest.port}${environment.rest.nameSpace}`; + let urlRequest = `${urlRestApp}/api/contentreports/filtereditems?page=${this.currentPage}&size=${this.pageSize()}`; + return this.restService.request(RestRequestMethod.POST, urlRequest, form); + } + +} diff --git a/src/app/admin/admin-reports/filtered-items/option-vo.model.ts b/src/app/admin/admin-reports/filtered-items/option-vo.model.ts new file mode 100644 index 00000000000..206388c2d70 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/option-vo.model.ts @@ -0,0 +1,46 @@ +import { Observable } from 'rxjs'; + +export class OptionVO { + + id: string; + name$: Observable; + disabled = false; + + static collection(id: string, name: string, disabled: boolean = false): OptionVO { + let opt = new OptionVO(); + opt.id = id; + opt.name$ = OptionVO.toObservable(name); + opt.disabled = disabled; + return opt; + } + + static collectionLoc(id: string, name$: Observable, disabled: boolean = false): OptionVO { + let opt = new OptionVO(); + opt.id = id; + opt.name$ = name$; + opt.disabled = disabled; + return opt; + } + + static item(id: string, name: string): OptionVO { + let opt = new OptionVO(); + opt.id = id; + opt.name$ = OptionVO.toObservable(name); + return opt; + } + + static itemLoc(id: string, name$: Observable): OptionVO { + let opt = new OptionVO(); + opt.id = id; + opt.name$ = name$; + return opt; + } + + private static toObservable(value: T): Observable { + return new Observable(subscriber => { + subscriber.next(value); + subscriber.complete(); + }); + + } +} diff --git a/src/app/admin/admin-reports/filtered-items/preset-query.model.ts b/src/app/admin/admin-reports/filtered-items/preset-query.model.ts new file mode 100644 index 00000000000..73522f02cf1 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/preset-query.model.ts @@ -0,0 +1,17 @@ +import { QueryPredicate } from './query-predicate.model'; + +export class PresetQuery { + + id: string; + label: string; + predicates: QueryPredicate[]; + + static of(id: string, label: string, predicates: QueryPredicate[]) { + let query = new PresetQuery(); + query.id = id; + query.label = label; + query.predicates = predicates; + return query; + } + +} diff --git a/src/app/admin/admin-reports/filtered-items/query-predicate.model.ts b/src/app/admin/admin-reports/filtered-items/query-predicate.model.ts new file mode 100644 index 00000000000..c5f323ed2c8 --- /dev/null +++ b/src/app/admin/admin-reports/filtered-items/query-predicate.model.ts @@ -0,0 +1,36 @@ +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; + +export class QueryPredicate { + + static EXISTS = 'exists'; + static DOES_NOT_EXIST = 'doesnt_exist'; + static EQUALS = 'equals'; + static DOES_NOT_EQUAL = 'not_equals'; + static LIKE = 'like'; + static NOT_LIKE = 'not_like'; + static CONTAINS = 'contains'; + static DOES_NOT_CONTAIN = 'doesnt_contain'; + static MATCHES = 'matches'; + static DOES_NOT_MATCH = 'doesnt_match'; + + field = '*'; + operator: string; + value: string; + + static of(field: string, operator: string, value: string = '') { + let pred = new QueryPredicate(); + pred.field = field; + pred.operator = operator; + pred.value = value; + return pred; + } + + toFormGroup(formBuilder: FormBuilder): FormGroup { + return formBuilder.group({ + field: new FormControl(this.field), + operator: new FormControl(this.operator), + value: new FormControl(this.value) + }); + } + +} diff --git a/src/app/admin/admin-reports/filters-section/filter-group.model.ts b/src/app/admin/admin-reports/filters-section/filter-group.model.ts new file mode 100644 index 00000000000..975b43a9860 --- /dev/null +++ b/src/app/admin/admin-reports/filters-section/filter-group.model.ts @@ -0,0 +1,19 @@ +import { Filter } from './filter.model'; + +export class FilterGroup { + + id: string; + key: string; + + constructor(id: string, public filters: Filter[]) { + this.id = id; + this.key = 'admin.reports.commons.filters.' + id; + filters.forEach(filter => { + filter.key = this.key + '.' + filter.id; + if (filter.hasTooltip) { + filter.tooltipKey = filter.key + '.tooltip'; + } + }); + } + +} diff --git a/src/app/admin/admin-reports/filters-section/filter.model.ts b/src/app/admin/admin-reports/filters-section/filter.model.ts new file mode 100644 index 00000000000..63eeb114cde --- /dev/null +++ b/src/app/admin/admin-reports/filters-section/filter.model.ts @@ -0,0 +1,8 @@ +export class Filter { + + key: string; + tooltipKey: string; + + constructor(public id: string, public hasTooltip: boolean = false) {} + +} diff --git a/src/app/admin/admin-reports/filters-section/filters-section.component.html b/src/app/admin/admin-reports/filters-section/filters-section.component.html new file mode 100644 index 00000000000..b0281e2153b --- /dev/null +++ b/src/app/admin/admin-reports/filters-section/filters-section.component.html @@ -0,0 +1,19 @@ +
+ +   +   + +   + +   +   + +
+
+ {{group.key | translate}} + +
+ +
+
+
diff --git a/src/app/admin/admin-reports/filters-section/filters-section.component.scss b/src/app/admin/admin-reports/filters-section/filters-section.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/admin/admin-reports/filters-section/filters-section.component.spec.ts b/src/app/admin/admin-reports/filters-section/filters-section.component.spec.ts new file mode 100644 index 00000000000..94f2753ec09 --- /dev/null +++ b/src/app/admin/admin-reports/filters-section/filters-section.component.spec.ts @@ -0,0 +1,101 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { FiltersComponent } from './filters-section.component'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { TranslateLoaderMock } from 'src/app/shared/mocks/translate-loader.mock'; +import { FormBuilder } from '@angular/forms'; + +describe('FiltersComponent', () => { + let component: FiltersComponent; + let fixture: ComponentFixture; + let formBuilder: FormBuilder; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [FiltersComponent], + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock + } + }) + ], + providers: [ + FormBuilder + ], + schemas: [NO_ERRORS_SCHEMA] + }); + })); + + beforeEach(waitForAsync(() => { + formBuilder = TestBed.inject(FormBuilder); + + fixture = TestBed.createComponent(FiltersComponent); + component = fixture.componentInstance; + component.filtersForm = FiltersComponent.formGroup(formBuilder); + fixture.detectChanges(); + })); + + const isOneSelected = (values: {}): boolean => { + let oneSelected = false; + let allFilters = FiltersComponent.FILTERS; + for (let i = 0; !oneSelected && i < allFilters.length; i++) { + let group = allFilters[i]; + for (let j = 0; j < group.filters.length; j++) { + let filter = group.filters[j]; + oneSelected = oneSelected || values[filter.id]; + } + } + return oneSelected; + }; + + const isAllSelected = (values: {}): boolean => { + let allSelected = true; + let allFilters = FiltersComponent.FILTERS; + for (let i = 0; allSelected && i < allFilters.length; i++) { + let group = allFilters[i]; + for (let j = 0; j < group.filters.length; j++) { + let filter = group.filters[j]; + allSelected = allSelected && values[filter.id]; + } + } + return allSelected; + }; + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should select all checkboxes', () => { + // By default, nothing is selected, so at least one item is not selected. + let values = component.filtersForm.value; + let allSelected: boolean = isAllSelected(values); + expect(allSelected).toBeFalse(); + + // Now we select everything... + component.selectAll(); + + // We must retrieve the form values again since selectAll() injects a new dictionary. + values = component.filtersForm.value; + allSelected = isAllSelected(values); + expect(allSelected).toBeTrue(); + }); + + it('should deselect all checkboxes', () => { + // Since nothing is selected by default, we select at least an item + // so that deselectAll() actually deselects something. + let values = component.filtersForm.value; + values.is_item = true; + let oneSelected: boolean = isOneSelected(values); + expect(oneSelected).toBeTrue(); + + // Now we deselect everything... + component.deselectAll(); + + // We must retrieve the form values again since deselectAll() injects a new dictionary. + values = component.filtersForm.value; + oneSelected = isOneSelected(values); + expect(oneSelected).toBeFalse(); + }); +}); diff --git a/src/app/admin/admin-reports/filters-section/filters-section.component.ts b/src/app/admin/admin-reports/filters-section/filters-section.component.ts new file mode 100644 index 00000000000..e6a7f683dd2 --- /dev/null +++ b/src/app/admin/admin-reports/filters-section/filters-section.component.ts @@ -0,0 +1,129 @@ +import { Component, Input } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { FilterGroup } from './filter-group.model'; +import { Filter } from './filter.model'; + +@Component({ + selector: 'ds-filters', + templateUrl: './filters-section.component.html', + styleUrls: ['./filters-section.component.scss'] +}) +export class FiltersComponent { + + static FILTERS = [ + new FilterGroup('property', [ + new Filter('is_item'), + new Filter('is_withdrawn'), + new Filter('is_not_withdrawn'), + new Filter('is_discoverable'), + new Filter('is_not_discoverable') + ]), + new FilterGroup('bitstream', [ + new Filter('has_multiple_originals'), + new Filter('has_no_originals'), + new Filter('has_one_original') + ]), + new FilterGroup('bitstream_mime', [ + new Filter('has_doc_original'), + new Filter('has_image_original'), + new Filter('has_unsupp_type'), + new Filter('has_mixed_original'), + new Filter('has_pdf_original'), + new Filter('has_jpg_original'), + new Filter('has_small_pdf'), + new Filter('has_large_pdf'), + new Filter('has_doc_without_text') + ]), + new FilterGroup('mime', [ + new Filter('has_only_supp_image_type'), + new Filter('has_unsupp_image_type'), + new Filter('has_only_supp_doc_type'), + new Filter('has_unsupp_doc_type') + ]), + new FilterGroup('bundle', [ + new Filter('has_unsupported_bundle'), + new Filter('has_small_thumbnail'), + new Filter('has_original_without_thumbnail'), + new Filter('has_invalid_thumbnail_name'), + new Filter('has_non_generated_thumb'), + new Filter('no_license'), + new Filter('has_license_documentation') + ]), + new FilterGroup('permission', [ + new Filter('has_restricted_original', true), + new Filter('has_restricted_thumbnail', true), + new Filter('has_restricted_metadata', true) + ]) + ]; + + @Input() filtersForm: FormGroup; + + static formGroup(formBuilder: FormBuilder): FormGroup { + let fields = {}; + let allFilters = FiltersComponent.FILTERS; + for (let i = 0; i < allFilters.length; i++) { + let group = allFilters[i]; + for (let j = 0; j < group.filters.length; j++) { + let filter = group.filters[j]; + fields[filter.id] = new FormControl(false); + } + } + return formBuilder.group(fields); + } + + static getFilter(filterId: string): Filter { + let allFilters = FiltersComponent.FILTERS; + for (let i = 0; i < allFilters.length; i++) { + let group = allFilters[i]; + for (let j = 0; j < group.filters.length; j++) { + let filter = group.filters[j]; + if (filter.id === filterId) { + return filter; + } + } + } + return undefined; + } + + static getGroup(filterId: string): FilterGroup { + let allFilters = FiltersComponent.FILTERS; + for (let i = 0; i < allFilters.length; i++) { + let group = allFilters[i]; + for (let j = 0; j < group.filters.length; j++) { + let filter = group.filters[j]; + if (filter.id === filterId) { + return group; + } + } + } + return undefined; + } + + allFilters(): FilterGroup[] { + return FiltersComponent.FILTERS; + } + + private setAllFilters(value: boolean) { + // I don't know why, but patchValue() with individual controls doesn't work. + // I therefore use setValue() with the whole set, which mercifully works... + let fields = {}; + let allFilters = FiltersComponent.FILTERS; + for (let i = 0; i < allFilters.length; i++) { + let group = allFilters[i]; + for (let j = 0; j < group.filters.length; j++) { + let filter = group.filters[j]; + fields[filter.id] = value; + } + } + this.filtersForm.setValue(fields); + } + + selectAll(): void { + this.setAllFilters(true); + } + + deselectAll(): void { + this.setAllFilters(false); + } + +} diff --git a/src/app/admin/admin-routing-paths.ts b/src/app/admin/admin-routing-paths.ts index 3168ea93c92..afad47044de 100644 --- a/src/app/admin/admin-routing-paths.ts +++ b/src/app/admin/admin-routing-paths.ts @@ -6,3 +6,9 @@ export const REGISTRIES_MODULE_PATH = 'registries'; export function getRegistriesModuleRoute() { return new URLCombiner(getAdminModuleRoute(), REGISTRIES_MODULE_PATH).toString(); } + +export const REPORTS_MODULE_PATH = 'reports'; + +export function getReportsModuleRoute() { + return new URLCombiner(getAdminModuleRoute(), REPORTS_MODULE_PATH).toString(); +} diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts index 1ea20bc9a0f..190d47a0e47 100644 --- a/src/app/admin/admin-routing.module.ts +++ b/src/app/admin/admin-routing.module.ts @@ -6,7 +6,7 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service'; import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component'; -import { REGISTRIES_MODULE_PATH } from './admin-routing-paths'; +import { REGISTRIES_MODULE_PATH, REPORTS_MODULE_PATH } from './admin-routing-paths'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; @NgModule({ @@ -17,6 +17,11 @@ import { BatchImportPageComponent } from './admin-import-batch-page/batch-import loadChildren: () => import('./admin-registries/admin-registries.module') .then((m) => m.AdminRegistriesModule), }, + { + path: REPORTS_MODULE_PATH, + loadChildren: () => import('./admin-reports/admin-reports.module') + .then((m) => m.AdminReportsModule), + }, { path: 'search', resolve: { breadcrumb: I18nBreadcrumbResolver }, diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index 0ddbefd2532..ca3eac36300 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -10,6 +10,7 @@ import { AdminSearchModule } from './admin-search-page/admin-search.module'; import { AdminSidebarSectionComponent } from './admin-sidebar/admin-sidebar-section/admin-sidebar-section.component'; import { ExpandableAdminSidebarSectionComponent } from './admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; +import { AdminReportsModule } from './admin-reports/admin-reports.module'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -22,6 +23,7 @@ const ENTRY_COMPONENTS = [ imports: [ AdminRoutingModule, AdminRegistriesModule, + AdminReportsModule, AccessControlModule, AdminSearchModule.withEntryComponents(), AdminWorkflowModuleModule.withEntryComponents(), diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index 8630150c58f..5ebc9f77330 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -155,6 +155,7 @@ export class MenuResolver implements Resolve { this.createExportMenuSections(); this.createImportMenuSections(); this.createAccessControlMenuSections(); + this.createReportMenuSections(); return this.waitForMenu$(MenuID.ADMIN); } @@ -668,4 +669,57 @@ export class MenuResolver implements Resolve { }))); }); } + + /** + * Create menu sections dependent on whether or not the current user is a site administrator + */ + createReportMenuSections() { + observableCombineLatest([ + this.authorizationService.isAuthorized(FeatureID.AdministratorOf) + ]).subscribe(([isSiteAdmin]) => { + const menuList = [ + { + id: 'reports', + active: false, + visible: isSiteAdmin, + model: { + type: MenuItemType.TEXT, + text: 'menu.section.reports' + } as TextMenuItemModel, + icon: 'file-alt', + index: 5 + }, + /* Collections Report */ + { + id: 'reports_collections', + parentID: 'reports', + active: false, + visible: isSiteAdmin, + model: { + type: MenuItemType.LINK, + text: 'menu.section.reports.collections', + link: '/admin/reports/collections' + } as LinkMenuItemModel, + icon: 'user-check' + }, + /* Queries Report */ + { + id: 'reports_queries', + parentID: 'reports', + active: false, + visible: isSiteAdmin, + model: { + type: MenuItemType.LINK, + text: 'menu.section.reports.queries', + link: '/admin/reports/queries' + } as LinkMenuItemModel, + icon: 'user-check' + }, + ]; + + menuList.forEach((menuSection) => this.menuService.addSection(MenuID.ADMIN, Object.assign(menuSection, { + shouldPersistOnRouteChange: true + }))); + }); + } } diff --git a/src/assets/i18n/ar.json5 b/src/assets/i18n/ar.json5 index 58c8c61eb5d..e0cdb41c0b9 100644 --- a/src/assets/i18n/ar.json5 +++ b/src/assets/i18n/ar.json5 @@ -877,9 +877,410 @@ // "admin.access-control.groups.form.return": "Return to groups", // TODO New key - Add a translation "admin.access-control.groups.form.return": "Return to groups", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", // TODO New key - Add a translation "admin.search.breadcrumbs": "Administrative Search", @@ -3886,6 +4287,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", // TODO New key - Add a translation "menu.section.admin_search": "Admin Search", @@ -3987,7 +4400,11 @@ // "menu.section.icon.access_control": "Access Control menu section", // TODO New key - Add a translation "menu.section.icon.access_control": "Access Control menu section", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", // TODO New key - Add a translation "menu.section.icon.admin_search": "Admin search menu section", @@ -4121,7 +4538,10 @@ "menu.section.statistics_task": "Statistics Task", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", // TODO New key - Add a translation "menu.section.toggle.access_control": "Toggle Access Control section", diff --git a/src/assets/i18n/bn.json5 b/src/assets/i18n/bn.json5 index 8020ee7a965..9f4e66c8d25 100644 --- a/src/assets/i18n/bn.json5 +++ b/src/assets/i18n/bn.json5 @@ -716,9 +716,410 @@ // "admin.access-control.groups.form.return": "Back", "admin.access-control.groups.form.return": "পেছনে", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "প্রশাসনিক অনুসন্ধান", @@ -3568,7 +3969,19 @@ "menu.section.access_control_people": "ব্যাক্তি", - + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "অ্যাডমিন অনুসন্ধান", @@ -3647,7 +4060,11 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "অ্যাক্সেস কন্ট্রোল মেনু বিভাগ", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "অ্যাডমিন অনুসন্ধান মেনু বিভাগ", @@ -3754,7 +4171,10 @@ "menu.section.statistics_task": "পরিসংখ্যান টাস্ক", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "অ্যাক্সেস কন্ট্রোল বিভাগ টগল করুন", diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index 12b67e54e25..25163a76a45 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -857,9 +857,410 @@ // "admin.access-control.groups.form.return": "Return to groups", // TODO New key - Add a translation "admin.access-control.groups.form.return": "Return to groups", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", // TODO New key - Add a translation "admin.search.breadcrumbs": "Administrative Search", @@ -3797,6 +4198,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", // TODO New key - Add a translation "menu.section.admin_search": "Admin Search", @@ -3898,7 +4311,11 @@ // "menu.section.icon.access_control": "Access Control menu section", // TODO New key - Add a translation "menu.section.icon.access_control": "Access Control menu section", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", // TODO New key - Add a translation "menu.section.icon.admin_search": "Admin search menu section", @@ -4032,7 +4449,10 @@ "menu.section.statistics_task": "Statistics Task", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", // TODO New key - Add a translation "menu.section.toggle.access_control": "Toggle Access Control section", diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 80a6b5605a8..da1e10373e0 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -683,9 +683,410 @@ // "admin.access-control.groups.form.return": "Return to groups", "admin.access-control.groups.form.return": "Zurück zu den Gruppen", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Admin-Suche", @@ -3185,6 +3586,15 @@ + // "menu.section.reports": "Reports", + "menu.section.reports": "Berichte", + + // "menu.section.reports.collections": "Filtered Collections", + "menu.section.reports.collections": "Filtrierte Sammlungen", + + // "menu.section.reports.queries": "Metadata Query", + "menu.section.reports.queries": "Metadatenabfrage", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Admin-Suche", @@ -3263,7 +3673,11 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Menübereich Zugriffskontrolle", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Menüabschnitt (Admin-Suche)", @@ -3367,7 +3781,10 @@ "menu.section.statistics_task": "Statistikaufgaben", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Bereich Zugriffskontrolle umschalten", diff --git a/src/assets/i18n/el.json5 b/src/assets/i18n/el.json5 index e8ae4ab2e9d..952c2244069 100644 --- a/src/assets/i18n/el.json5 +++ b/src/assets/i18n/el.json5 @@ -151,6 +151,410 @@ "admin.access-control.groups.title": "Ομάδες", "admin.access-control.groups.title.addGroup": "Νέα ομάδα", "admin.access-control.groups.title.singleGroup": "Επεξεργασία ομάδας", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + "admin.curation-tasks.breadcrumbs": "Εργασίες επιμέλειας συστήματος", "admin.curation-tasks.header": "Εργασίες επιμέλειας συστήματος", "admin.curation-tasks.title": "Εργασίες επιμέλειας συστήματος", @@ -1238,6 +1642,11 @@ "menu.section.export_metadata": "Μεταδεδομένα", "menu.section.health": "Υγεία", "menu.section.icon.access_control": "Ενότητα μενού ελέγχου πρόσβασης", + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + "menu.section.icon.admin_search": "Ενότητα μενού αναζήτησης διαχειριστή", "menu.section.icon.control_panel": "Ενότητα μενού Πίνακας Ελέγχου", "menu.section.icon.curation_tasks": "Ενότητα μενού Εργασίας Επιμέλειας", @@ -1269,6 +1678,11 @@ "menu.section.registries_metadata": "Μεταδεδομένα", "menu.section.statistics": "Στατιστικά", "menu.section.statistics_task": "Εργασία Στατιστικών", + + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + "menu.section.toggle.access_control": "Εναλλαγή ενότητας Ελέγχου πρόσβασης", "menu.section.toggle.control_panel": "Εναλλαγή ενότητας Πίνακας Ελέγχου", "menu.section.toggle.curation_task": "Εναλλαγή ενότητας Εργασία Επιμέλειας", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index a806588701f..6b1900708c7 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -503,6 +503,207 @@ + "admin.reports.collections.title": "Collection Filter Report", + + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + "admin.reports.collections.head": "Collection Filter Report", + + "admin.reports.button.show-collections": "Show Collections", + + "admin.reports.collections.collections-report": "Collection Report", + + "admin.reports.collections.item-results": "Item Results", + + "admin.reports.collections.community": "Community", + + "admin.reports.collections.collection": "Collection", + + "admin.reports.collections.nb_items": "Nb. Items", + + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + "admin.reports.items.title": "Metadata Query Report", + + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + "admin.reports.items.head": "Metadata Query Report", + + "admin.reports.items.run": "Run Item Query", + + "admin.reports.items.section.collectionSelector": "Collection Selector", + + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + "admin.reports.items.predefinedQueries": "Predefined Queries", + + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + "admin.reports.items.limit": "Limit/", + + "admin.reports.items.wholeRepo": "Whole Repository", + + "admin.reports.items.anyField": "Any field", + + "admin.reports.items.predicate.exists": "exists", + + "admin.reports.items.predicate.doesNotExist": "does not exist", + + "admin.reports.items.predicate.equals": "equals", + + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + "admin.reports.items.predicate.like": "like", + + "admin.reports.items.predicate.notLike": "not like", + + "admin.reports.items.predicate.contains": "contains", + + "admin.reports.items.predicate.doesNotContain": "does not contain", + + "admin.reports.items.predicate.matches": "matches", + + "admin.reports.items.predicate.doesNotMatch": "does not match", + + "admin.reports.items.preset.new": "New Query", + + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + "admin.reports.items.number": "No.", + + "admin.reports.items.id": "UUID", + + "admin.reports.items.collection": "Collection", + + "admin.reports.items.handle": "URI", + + "admin.reports.items.title": "Title", + + + "admin.reports.commons.filters": "Filters", + + "admin.reports.commons.additional-data": "Additional data to return", + + "admin.reports.commons.previous-page": "Prev Page", + + "admin.reports.commons.next-page": "Next Page", + + "admin.reports.commons.page": "Page", + + "admin.reports.commons.of": "of", + + "admin.reports.commons.export": "Export for Metadata Update", + + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + "admin.reports.commons.filters.select_all": "Select all filters", + + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + "admin.reports.commons.filters.property": "Item Property Filters", + + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + "admin.reports.commons.filters.permission": "Permission Filters", + + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + "admin.search.breadcrumbs": "Administrative Search", "admin.search.collection.edit": "Edit", @@ -2617,6 +2818,12 @@ + "menu.section.reports": "Reports", + + "menu.section.reports.collections": "Filtered Collections", + + "menu.section.reports.queries": "Metadata Query", + "menu.section.admin_search": "Admin Search", @@ -2674,6 +2881,8 @@ "menu.section.icon.access_control": "Access Control menu section", + "menu.section.icon.reports": "Reports menu section", + "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.control_panel": "Control Panel menu section", @@ -2756,6 +2965,8 @@ "menu.section.toggle.access_control": "Toggle Access Control section", + "menu.section.toggle.reports": "Toggle Reports section", + "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.curation_task": "Toggle Curation Task section", diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 02169514c45..f13e637c716 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -718,6 +718,412 @@ // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Grupo actual", + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + + // "admin.search.breadcrumbs": "Administrative Search", + "admin.search.breadcrumbs": "Búsqueda administrativa", + // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Subgrupo agregado exitosamente: \"{{ name }} \"", @@ -3247,6 +3653,18 @@ // "item.page.filesection.size": "Size:", "item.page.filesection.size": "Tamaño:", + // "menu.section.reports": "Reports", + "menu.section.reports": "Informes", + + // "menu.section.reports.collections": "Filtered Collections", + "menu.section.reports.collections": "Colecciones filtradas", + + // "menu.section.reports.queries": "Metadata Query", + "menu.section.reports.queries": "Consulta de metadatos", + + // "menu.section.admin_search": "Admin Search", + "menu.section.admin_search": "Búsqueda de administrador", + // "item.page.journal.search.title": "Articles in this journal", "item.page.journal.search.title": "Ítems de esta revista", @@ -3872,6 +4290,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Sección del menú de control de acceso", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Sección del menú de búsqueda de administrador", @@ -3984,6 +4406,9 @@ "menu.section.statistics_task": "Tarea de estadísticas", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Alternar sección de control de acceso", diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index 1ef67e2a484..398433ea445 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -665,6 +665,409 @@ + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Ylläpitäjän haku", @@ -2957,6 +3360,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Ylläpitäjän haku", @@ -3036,6 +3451,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Pääsyoikeudet", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Ylläpitäjän haku", @@ -3139,6 +3558,9 @@ "menu.section.statistics_task": "Tilastointitehtävä", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Vaihda Pääsyoikeudet-osion tilaa", diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index c8e992182ae..13644bdc4a2 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -718,6 +718,300 @@ // "admin.access-control.groups.form.return": "Back", "admin.access-control.groups.form.return": "Retour", + //"admin.reports.collections.title": "Collection Filter Report", + "admin.reports.collections.title": "Rapport de collections filtrées", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + "admin.reports.collections.breadcrumbs": "Collections filtrées", + + //"admin.reports.collections.head": "Collection Filter Report", + "admin.reports.collections.head": "Rapport de collections filtrées", + + //"admin.reports.button.show-collections": "Show Collections", + "admin.reports.button.show-collections": "Afficher les collections", + + //"admin.reports.collections.collections-report": "Collection Report", + "admin.reports.collections.collections-report": "Rapport des collections", + + //"admin.reports.collections.item-results": "Item Results", + "admin.reports.collections.item-results": "Éléments résultants", + + //"admin.reports.collections.community": "Community", + "admin.reports.collections.community": "Communauté", + + //"admin.reports.collections.collection": "Collection", + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + "admin.reports.collections.nb_items": "Nb. d'éléments", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + "admin.reports.collections.match_all_selected_filters": "Correspondant à tous les filtres sélectionnés", + + + //"admin.reports.items.title": "Metadata Query Report", + "admin.reports.items.title": "Rapport de requête de métadonnées", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + "admin.reports.items.breadcrumbs": "Requête de métadonnées", + + //"admin.reports.items.head": "Metadata Query Report", + "admin.reports.items.head": "Rapport de requête de métadonnées", + + //"admin.reports.items.run": "Run Item Query", + "admin.reports.items.run": "Exécuter la requête", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + "admin.reports.items.section.collectionSelector": "Sélecteur de collections", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + "admin.reports.items.section.metadataFieldQueries": "Requêtes sur les champs de métadonnées", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + "admin.reports.items.predefinedQueries": "Requêtes prédéfinies", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + "admin.reports.items.section.limitPaginateQueries": "Limiter/paginer les résultats", + + //"admin.reports.items.limit": "Limit/", + "admin.reports.items.limit": "Limite", + + //"admin.reports.items.wholeRepo": "Whole Repository", + "admin.reports.items.wholeRepo": "Tout le dépôt", + + //"admin.reports.items.anyField": "Any field", + "admin.reports.items.anyField": "Tous les champs", + + //"admin.reports.items.predicate.exists": "exists", + "admin.reports.items.predicate.exists": "existe", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + "admin.reports.items.predicate.doesNotExist": "n'existe pas", + + //"admin.reports.items.predicate.equals": "equals", + "admin.reports.items.predicate.equals": "est égal à", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + "admin.reports.items.predicate.doesNotEqual": "n'est pas égal à", + + //"admin.reports.items.predicate.like": "like", + "admin.reports.items.predicate.like": "est de forme (like)", + + //"admin.reports.items.predicate.notLike": "not like", + "admin.reports.items.predicate.notLike": "n'est pas de forme (not like)", + + //"admin.reports.items.predicate.contains": "contains", + "admin.reports.items.predicate.contains": "contient", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + "admin.reports.items.predicate.doesNotContain": "ne contient pas", + + //"admin.reports.items.predicate.matches": "matches", + "admin.reports.items.predicate.matches": "correspond à (matches)", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + "admin.reports.items.predicate.doesNotMatch": "ne correspond pas à (does not match)", + + //"admin.reports.items.preset.new": "New Query", + "admin.reports.items.preset.new": "Nouvelle requête", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + "admin.reports.items.preset.hasNoTitle": "Sans titre", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + "admin.reports.items.preset.hasNoIdentifierUri": "Sans dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + "admin.reports.items.preset.hasCompoundSubject": "A un sujet composite", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + "admin.reports.items.preset.hasCompoundAuthor": "A un dc.contributor.author composite", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + "admin.reports.items.preset.hasCompoundCreator": "A un dc.creator composite", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + "admin.reports.items.preset.hasUrlInDescription": "A un URL dans dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + "admin.reports.items.preset.hasFullTextInProvenance": "A des documents texte dans dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + "admin.reports.items.preset.hasNonFullTextInProvenance": "N'a pas de document texte dans dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + "admin.reports.items.preset.hasEmptyMetadata": "A des métadonnées vides", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + "admin.reports.items.preset.hasUnbreakingDataInDescription": "A du contenu insécable dans la description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + "admin.reports.items.preset.hasXmlEntityInMetadata": "A des entités XML dans les métadonnées", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ASCII character in metadata", + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "A des caractères non ASCII dans les métadonnées", + + //"admin.reports.items.number": "No.", + "admin.reports.items.number": "Nº", + + //"admin.reports.items.id": "UUID", + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + "admin.reports.items.title": "Titre", + + + //"admin.reports.commons.filters": "Filters", + "admin.reports.commons.filters": "Filtres", + + //"admin.reports.commons.additional-data": "Additional data to return", + "admin.reports.commons.additional-data": "Données additionnelles", + + //"admin.reports.commons.previous-page": "Prev Page", + "admin.reports.commons.previous-page": "Page précédente", + + //"admin.reports.commons.next-page": "Next Page", + "admin.reports.commons.next-page": "Page suivante", + + //"admin.reports.commons.page": "Page", + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + "admin.reports.commons.of": "de", + + //"admin.reports.commons.export": "Export for Metadata Update", + "admin.reports.commons.export": "Exporter les métadonnées", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + "admin.reports.commons.filters.deselect_all": "Désélectionner tous les filtres", + + //"admin.reports.commons.filters.select_all": "Select all filters", + "admin.reports.commons.filters.select_all": "Sélectionner tous les filtres", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + "admin.reports.commons.filters.matches_all": "Tous les filtres spécifiés", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + "admin.reports.commons.filters.property": "Filtres de propriétés d'éléments", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + "admin.reports.commons.filters.property.is_item": "Est un élément - toujours vrai", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + "admin.reports.commons.filters.property.is_withdrawn": "Éléments retirés", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + "admin.reports.commons.filters.property.is_not_withdrawn": "Éléments disponibles - Non retirés", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + "admin.reports.commons.filters.property.is_discoverable": "Éléments découvrables - Non privés", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + "admin.reports.commons.filters.property.is_not_discoverable": "Éléments non découvrables - Privés", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + "admin.reports.commons.filters.bitstream": "Filtres Bitstream de base", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + "admin.reports.commons.filters.bitstream.has_multiple_originals": "L'élément a plusieurs Bitstreams originaux", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + "admin.reports.commons.filters.bitstream.has_no_originals": "L'élément n'a pas de Bitstreams originaux", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + "admin.reports.commons.filters.bitstream.has_one_original": "L'élément a un seul Bitstream original", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + "admin.reports.commons.filters.bitstream_mime": "Filtres Bitstream par type MIME", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "L'élément a un Bitstream original de type document (PDF, Office, Text, HTML, XML, etc.)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + "admin.reports.commons.filters.bitstream_mime.has_image_original": "L'élément a un Bitstream original de type image", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "L'élément a d'autres types de Bitstream (ni document ni image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "L'élément a des Bitstreams originaux de types multiples (document, image, autres)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "L'élément a un Bitstream original PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "L'élément a un Bitstream original JPG", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "L'élément a un PDF anormalement petit", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "L'élément a un PDF anormalement grand", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "L'élément a un Bitstream sans élément TEXT", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + "admin.reports.commons.filters.mime": "Filtres de types MIME pris en charge", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + "admin.reports.commons.filters.mime.has_only_supp_image_type": "L'élément a des Bitstreams image pris en charge", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + "admin.reports.commons.filters.mime.has_unsupp_image_type": "L'élément a des Bitstreams image non pris en charge", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Les Bitstreams document de l'élément sont pris en charge", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "L'élément a des Bitstreams document non pris en charge", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + "admin.reports.commons.filters.bundle": "Filtres de Bitstreams de type Bundle", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "L'élément a un Bitstream dans un Bundle non pris en charge", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + "admin.reports.commons.filters.bundle.has_small_thumbnail": "L'élément a une vignette anormalement petite", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "L'élément a un Bitstream original sans vignette", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "L'élément a une vignette ayant un nom invalide (une vignette par original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "L'élément a une vignette non générée", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + "admin.reports.commons.filters.bundle.no_license": "L'élément n'a pas de licence", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + "admin.reports.commons.filters.bundle.has_license_documentation": "L'élément a de la documentation dans le Bundle de licence", + + //"admin.reports.commons.filters.permission": "Permission Filters", + "admin.reports.commons.filters.permission": "Filtres de permissions", + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + "admin.reports.commons.filters.permission.has_restricted_original": "L'élément a un Bitstream original à accès restreint", + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "L'élément a au moins un Bitstream original non accessible aux utilisateurs anonymes", + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "L'élément a une vignette à accès restreint", + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "L'élément a au moins une vignette non accessible aux utilisateurs anonymes", + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + "admin.reports.commons.filters.permission.has_restricted_metadata": "L'élément a des métadonnées à accès restreint", + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "L'élément a des métadonnées non accessibles aux utilisateurs anonymes", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Recherche Administrateur", @@ -3448,6 +3742,15 @@ // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Utilisateurs", + //"menu.section.reports": "Reports", + "menu.section.reports": "Rapports", + + //"menu.section.reports.collections": "Filtered Collections", + "menu.section.reports.collections": "Collections filtrées", + + //"menu.section.reports.queries": "Metadata Query", + "menu.section.reports.queries": "Requête de métadonnées", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Recherche Administrateur", @@ -3517,6 +3820,9 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Section du menu relative au contrôle d'accès", + //"menu.section.icon.reports": "Reports menu section", + "menu.section.icon.reports": "Section du menu d'accès aux rapports", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Section du menu relative à la recherche Administrateur", @@ -3616,6 +3922,9 @@ // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Ouvrir/Fermer section Contrôle d'accès", + //"menu.section.toggle.reports": "Toggle Reports section", + "menu.section.toggle.reports": "Ouvrir/Fermer section Rapports", + // "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.control_panel": "Ouvrir/Fermer section Panneau de configuration", diff --git a/src/assets/i18n/gd.json5 b/src/assets/i18n/gd.json5 index e42bb239f25..17cfae0ec4a 100644 --- a/src/assets/i18n/gd.json5 +++ b/src/assets/i18n/gd.json5 @@ -710,6 +710,409 @@ + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Rannsachadh Rianachd", @@ -3553,6 +3956,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Rannsachadh Rianachd", @@ -3632,6 +4047,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": " Earrann clàr-iùil Riaghladh Cothruim", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Earrann clàr-iùil rannsachadh rianachd", @@ -3738,6 +4157,9 @@ "menu.section.statistics_task": "Obair Staitistigs", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Suids earrann Riaghladh Cothruim", diff --git a/src/assets/i18n/hi.json5 b/src/assets/i18n/hi.json5 index 4a59dc1b1b1..34b4a014a48 100644 --- a/src/assets/i18n/hi.json5 +++ b/src/assets/i18n/hi.json5 @@ -309,6 +309,411 @@ "admin.access-control.groups.title.singleGroup": "समूह संपादित करें", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + + "admin.curation-tasks.breadcrumbs": "प्रणाली क्यूरेशन कार्य", "admin.curation-tasks.header": "प्रणाली क्यूरेशन कार्य", @@ -2475,6 +2880,18 @@ "menu.section.access_control_people": "लोग", + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + "menu.section.admin_search": "व्यवस्थापक खोज", "menu.section.browse_community": "यह समुदाय", @@ -2523,6 +2940,10 @@ "menu.section.icon.access_control": "अभिगम नियंत्रण मेन्यू अनुभाग", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + "menu.section.icon.admin_search": "व्यवस्थापक खोज मेनू अनुभाग", "menu.section.icon.control_panel": "नियंत्रण कक्ष मेन्यू अनुभाग", @@ -2585,6 +3006,10 @@ "menu.section.statistics_task": "सांख्यिकी कार्य", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + "menu.section.toggle.access_control": "अभिगम नियंत्रण अनुभाग टॉगल करें", "menu.section.toggle.control_panel": "नियंत्रण कक्ष अनुभाग टॉगल करें", diff --git a/src/assets/i18n/hu.json5 b/src/assets/i18n/hu.json5 index 8231f796520..98df544128e 100644 --- a/src/assets/i18n/hu.json5 +++ b/src/assets/i18n/hu.json5 @@ -666,9 +666,410 @@ // "admin.access-control.groups.form.return": "Return to groups", "admin.access-control.groups.form.return": "Vissza a csoportokhoz", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Adminisztratív keresés", @@ -2968,6 +3369,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Admin keresés", @@ -3046,7 +3459,11 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Hozzáférés kontroll menü felület", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Admin keresés menü felület", @@ -3150,7 +3567,10 @@ "menu.section.statistics_task": "Statisztikai feladatok", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Váltás a Hozzáférés kontrol felületre", diff --git a/src/assets/i18n/ja.json5 b/src/assets/i18n/ja.json5 index 58c8c61eb5d..e0cdb41c0b9 100644 --- a/src/assets/i18n/ja.json5 +++ b/src/assets/i18n/ja.json5 @@ -877,9 +877,410 @@ // "admin.access-control.groups.form.return": "Return to groups", // TODO New key - Add a translation "admin.access-control.groups.form.return": "Return to groups", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", // TODO New key - Add a translation "admin.search.breadcrumbs": "Administrative Search", @@ -3886,6 +4287,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", // TODO New key - Add a translation "menu.section.admin_search": "Admin Search", @@ -3987,7 +4400,11 @@ // "menu.section.icon.access_control": "Access Control menu section", // TODO New key - Add a translation "menu.section.icon.access_control": "Access Control menu section", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", // TODO New key - Add a translation "menu.section.icon.admin_search": "Admin search menu section", @@ -4121,7 +4538,10 @@ "menu.section.statistics_task": "Statistics Task", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", // TODO New key - Add a translation "menu.section.toggle.access_control": "Toggle Access Control section", diff --git a/src/assets/i18n/kk.json5 b/src/assets/i18n/kk.json5 index 8e46ee73cec..9c2e53f349d 100644 --- a/src/assets/i18n/kk.json5 +++ b/src/assets/i18n/kk.json5 @@ -748,6 +748,411 @@ + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + + + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Әкімшілік іздеу", @@ -3812,6 +4217,18 @@ "menu.section.access_control_people": "Адамдар", + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search":"Әкімші іздеу", @@ -3892,6 +4309,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Қатынасты басқару мәзірі бөлімі", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Әкімші іздеу мәзірі бөлімі", @@ -4004,6 +4425,9 @@ "menu.section.statistics_task": "Статистика тапсырмасы", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Қатынасты басқару бөлімін ауыстырып-қосқыш", diff --git a/src/assets/i18n/lv.json5 b/src/assets/i18n/lv.json5 index 995d8175af5..b9836d65cf8 100644 --- a/src/assets/i18n/lv.json5 +++ b/src/assets/i18n/lv.json5 @@ -703,6 +703,409 @@ + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Administratīvā Meklēšana", @@ -3186,7 +3589,17 @@ // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Personas", + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Administratora Meklēšana", @@ -3267,6 +3680,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Piekļuves kontroles izvēlnes sadaļa", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Administratoru meklēšanas izvēlnes sadaļa", @@ -3372,6 +3789,9 @@ "menu.section.statistics_task": "Statistikas Uzdevumi", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Pārslēgt Piekļuvas Kontronles sadaļu", diff --git a/src/assets/i18n/nl.json5 b/src/assets/i18n/nl.json5 index fb66f769aeb..7965cf1576f 100644 --- a/src/assets/i18n/nl.json5 +++ b/src/assets/i18n/nl.json5 @@ -797,9 +797,410 @@ // "admin.access-control.groups.form.return": "Return to groups", // TODO New key - Add a translation "admin.access-control.groups.form.return": "Return to groups", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", // TODO New key - Add a translation "admin.search.breadcrumbs": "Administrative Search", @@ -3457,6 +3858,15 @@ + // "menu.section.reports": "Reports", + "menu.section.reports": "Verslagen", + + // "menu.section.reports.collections": "Filtered Collections", + "menu.section.reports.collections": "Gefilterde collecties", + + // "menu.section.reports.queries": "Metadata Query", + "menu.section.reports.queries": "Metagegevensquery", + // "menu.section.admin_search": "Admin Search", // TODO New key - Add a translation "menu.section.admin_search": "Admin Search", @@ -3536,7 +3946,11 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Menusectie toegangscontrole", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", // TODO New key - Add a translation "menu.section.icon.admin_search": "Admin search menu section", @@ -3644,7 +4058,10 @@ "menu.section.statistics_task": "Statistiektaken", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Sectie Toegangscontrole aan/uit", diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index 58c8c61eb5d..e0cdb41c0b9 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -877,9 +877,410 @@ // "admin.access-control.groups.form.return": "Return to groups", // TODO New key - Add a translation "admin.access-control.groups.form.return": "Return to groups", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", // TODO New key - Add a translation "admin.search.breadcrumbs": "Administrative Search", @@ -3886,6 +4287,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", // TODO New key - Add a translation "menu.section.admin_search": "Admin Search", @@ -3987,7 +4400,11 @@ // "menu.section.icon.access_control": "Access Control menu section", // TODO New key - Add a translation "menu.section.icon.access_control": "Access Control menu section", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", // TODO New key - Add a translation "menu.section.icon.admin_search": "Admin search menu section", @@ -4121,7 +4538,10 @@ "menu.section.statistics_task": "Statistics Task", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", // TODO New key - Add a translation "menu.section.toggle.access_control": "Toggle Access Control section", diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index 77b06a6566a..819bf13aeb4 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -747,30 +747,412 @@ // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Ainda não há subgrupos no grupo.", + + // "admin.access-control.groups.form.return": "Return to groups", + "admin.access-control.groups.form.return": "Retornar aos grupos", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", - // "admin.access-control.groups.form.return": "Back", - "admin.access-control.groups.form.return": "Voltar", + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", - //"admin.batch-import.breadcrumbs": "Import Batch", - "admin.batch-import.breadcrumbs": "Importar um Lote", + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", - //"admin.batch-import.title": "Import Batch", - "admin.batch-import.title": "Importar um Lote", + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", - //"admin.batch-import.page.header": "Import Batch", - "admin.batch-import.page.header": "Importar um Lote", + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", - //"admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", - "admin.batch-import.page.help": "Selecione a Coleção para o qual deseja importar. Arraste ou selecione um arquivo zip no formato Simple Archive Format (SAF) que inclua os Items para importar", + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", - //"admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", - "admin.batch-import.page.dropMsg": "Arraste e solte um lote ZIP para importar", + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", - //"admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", - "admin.batch-import.page.dropMsgReplace": "Arraste e solte um lote ZIP para substituir o lote para importar", + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", - //"admin.batch-import.page.error.addFile": "Select Zip file first!", - "admin.batch-import.page.error.addFile": "Selecione um arquivo ZIP primeiro!", + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", //"admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", "admin.batch-import.page.validateOnly.hint": "Quando selecionado , o ZIP enviado sera validado. Você receberá um relatório das alterações detectadas, mas nenhuma alteração será salva.", @@ -3682,6 +4064,15 @@ // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Pessoas", + + // "menu.section.reports": "Reports", + "menu.section.reports": "Relatórios", + + // "menu.section.reports.collections": "Filtered Collections", + "menu.section.reports.collections": "Coleções filtradas", + + // "menu.section.reports.queries": "Metadata Query", + "menu.section.reports.queries": "Consultas de metadados", // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Pesquisa Administrativa", @@ -3752,6 +4143,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Seção do menu Controle de Acesso", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Seção do menu de busca administrativa", @@ -3854,6 +4249,10 @@ // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Tarefas de Estatísticas", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Alternar Seção Controle de Acesso", diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c0327c4b54e..8e1ed57cf8e 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -870,9 +870,410 @@ // "admin.access-control.groups.form.return": "Return to groups", "admin.access-control.groups.form.return": "Retornar aos grupos", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Pesquisa administrativa", @@ -3162,6 +3563,15 @@ + // "menu.section.reports": "Reports", + "menu.section.reports": "Relatórios", + + // "menu.section.reports.collections": "Filtered Collections", + "menu.section.reports.collections": "Coleções filtradas", + + // "menu.section.reports.queries": "Metadata Query", + "menu.section.reports.queries": "Consultas de metadados", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Pesquisa Administrativa", @@ -3240,7 +3650,11 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Secção do menu Controle de Acesso", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Secção do menu de Pesquisa Administrativa", @@ -3344,7 +3758,10 @@ "menu.section.statistics_task": "Tarefas de Estatísticas", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Alternar Secção Controle de Acesso", diff --git a/src/assets/i18n/sv.json5 b/src/assets/i18n/sv.json5 index 86a6b045ccf..80912440f4a 100644 --- a/src/assets/i18n/sv.json5 +++ b/src/assets/i18n/sv.json5 @@ -721,6 +721,410 @@ "admin.access-control.groups.form.return": "Tillbaka", + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Admin sökning", @@ -3621,6 +4025,18 @@ // "menu.section.access_control_people": "People", "menu.section.access_control_people": "EPersoner", + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", @@ -3702,6 +4118,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Åtkomstkontroll - meny", + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Admin sök - meny", @@ -3808,6 +4228,9 @@ "menu.section.statistics_task": "Statistik uppgift", + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Växla till åtkomstkontroll", diff --git a/src/assets/i18n/sw.json5 b/src/assets/i18n/sw.json5 index 58c8c61eb5d..e0cdb41c0b9 100644 --- a/src/assets/i18n/sw.json5 +++ b/src/assets/i18n/sw.json5 @@ -877,9 +877,410 @@ // "admin.access-control.groups.form.return": "Return to groups", // TODO New key - Add a translation "admin.access-control.groups.form.return": "Return to groups", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // "admin.search.breadcrumbs": "Administrative Search", // TODO New key - Add a translation "admin.search.breadcrumbs": "Administrative Search", @@ -3886,6 +4287,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", // TODO New key - Add a translation "menu.section.admin_search": "Admin Search", @@ -3987,7 +4400,11 @@ // "menu.section.icon.access_control": "Access Control menu section", // TODO New key - Add a translation "menu.section.icon.access_control": "Access Control menu section", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", // TODO New key - Add a translation "menu.section.icon.admin_search": "Admin search menu section", @@ -4121,7 +4538,10 @@ "menu.section.statistics_task": "Statistics Task", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", // TODO New key - Add a translation "menu.section.toggle.access_control": "Toggle Access Control section", diff --git a/src/assets/i18n/tr.json5 b/src/assets/i18n/tr.json5 index 8eb0ce7e199..de7625aacdd 100644 --- a/src/assets/i18n/tr.json5 +++ b/src/assets/i18n/tr.json5 @@ -662,9 +662,384 @@ // "admin.access-control.groups.form.return": "Return to groups", "admin.access-control.groups.form.return": "Gruplara dön", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + + + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Yönetimsel Arama", @@ -2956,7 +3331,17 @@ // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Kişiler", + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Yönetici araması", @@ -3036,7 +3421,11 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Erişim Kontrolü menüsü bölümü", - + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Yönetici arama menüsü bölümü", @@ -3140,7 +3529,10 @@ "menu.section.statistics_task": "İstatistiksel Görev", - + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Erişim kontrolü bölümünü aç/kapat", From 9533713a3d2b559c830df59556368c657f9ca601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Morin?= Date: Thu, 12 Jan 2023 11:37:45 -0500 Subject: [PATCH 006/504] Synchronized API update with REST layer + i18n update in Greek and Ukrainian files --- .../filtered-collections.component.ts | 2 +- .../filtered-items.component.ts | 2 +- src/assets/i18n/el.json5 | 12 + src/assets/i18n/uk.json5 | 421 ++++++++++++++++++ 4 files changed, 435 insertions(+), 2 deletions(-) diff --git a/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts index 4f7e7bb5db8..3d0c52d47e0 100644 --- a/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts +++ b/src/app/admin/admin-reports/filtered-collections/filtered-collections.component.ts @@ -53,6 +53,6 @@ export class FilteredCollectionsComponent { let form = this.queryForm.value; let scheme = environment.rest.ssl ? 'https' : 'http'; let urlRestApp = `${scheme}://${environment.rest.host}:${environment.rest.port}${environment.rest.nameSpace}`; - return this.restService.request(RestRequestMethod.POST, `${urlRestApp}/api/contentreports/filteredcollections`, form); + return this.restService.request(RestRequestMethod.POST, `${urlRestApp}/api/contentreport/filteredcollections`, form); } } diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts b/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts index 21b7f2e12b4..7b41a93fdc2 100644 --- a/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts @@ -294,7 +294,7 @@ export class FilteredItemsComponent { let form = this.queryForm.value; let scheme = environment.rest.ssl ? 'https' : 'http'; let urlRestApp = `${scheme}://${environment.rest.host}:${environment.rest.port}${environment.rest.nameSpace}`; - let urlRequest = `${urlRestApp}/api/contentreports/filtereditems?page=${this.currentPage}&size=${this.pageSize()}`; + let urlRequest = `${urlRestApp}/api/contentreport/filtereditems?page=${this.currentPage}&size=${this.pageSize()}`; return this.restService.request(RestRequestMethod.POST, urlRequest, form); } diff --git a/src/assets/i18n/el.json5 b/src/assets/i18n/el.json5 index fc98e92af35..53f449c986f 100644 --- a/src/assets/i18n/el.json5 +++ b/src/assets/i18n/el.json5 @@ -1618,6 +1618,18 @@ "menu.section.access_control_authorizations": "Εξουσιοδοτήσεις", "menu.section.access_control_groups": "Ομάδες", "menu.section.access_control_people": "Ανθρωποι", + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + "menu.section.admin_search": "Αναζήτηση διαχειριστή", "menu.section.browse_community": "Αυτή η Κοινότητα", "menu.section.browse_community_by_author": "Από Συγγραφέα", diff --git a/src/assets/i18n/uk.json5 b/src/assets/i18n/uk.json5 index b0413d9353a..da84e37bcc9 100644 --- a/src/assets/i18n/uk.json5 +++ b/src/assets/i18n/uk.json5 @@ -699,6 +699,407 @@ + // "admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + // "admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + // "admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + // "admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + // "admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + // "admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + // "admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + // "admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + // "admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + // "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + // "admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + // "admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + // "admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + // "admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + // "admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + // "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + // "admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + // "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + // "admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + // "admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + // "admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + // "admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + // "admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + // "admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + // "admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + // "admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + // "admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + // "admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + // "admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + // "admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + // "admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + // "admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + // "admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + // "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + // "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + // "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + // "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + // "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + // "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + // "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + // "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + // "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + // "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + // "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + // "admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + // "admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + // "admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + // "admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + // "admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + // "admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + // "admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + // "admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + // "admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + // "admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + // "admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + // "admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + // "admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + // "admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + // "admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + // "admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + // "admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + // "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + // "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + // "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + // "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + // "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + // "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + // "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + // "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + // "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + // "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + // "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + // "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + // "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + // "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + // "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + // "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + // "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + // "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + // "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + // "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + // "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + // "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + // "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + // "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + // "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + // "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + // "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + // "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + // "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + // "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + // "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + // "admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + // "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + // "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + // "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + // "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + // "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + // "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + + + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Пошук адміністратора", @@ -3078,6 +3479,18 @@ + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Пошук адміністратора", @@ -3157,6 +3570,10 @@ // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Меню контролю доступу", + // "menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Меню пошуку адміна", @@ -3266,6 +3683,10 @@ // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Переключити розділ контролю доступу", + // "menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + // "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.control_panel": "Переключити панель контролю доступу", From 9677de735ca85b7886f93d934364638cd9ce038c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Morin?= Date: Thu, 12 Jan 2023 13:56:47 -0500 Subject: [PATCH 007/504] Fixed code style errors --- .../admin-reports/filtered-items/filtered-items-model.ts | 2 +- .../filtered-items/filtered-items.component.spec.ts | 5 ++--- .../admin-reports/filtered-items/filtered-items.component.ts | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts b/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts index 5811efe53bd..2c384fe39cf 100644 --- a/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts +++ b/src/app/admin/admin-reports/filtered-items/filtered-items-model.ts @@ -1,4 +1,4 @@ -import { Item } from "src/app/core/shared/item.model"; +import { Item } from 'src/app/core/shared/item.model'; export class FilteredItems { diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts b/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts index 70e32d402fc..1626b66d341 100644 --- a/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.spec.ts @@ -1,6 +1,6 @@ import { waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; -import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from 'src/app/shared/mocks/translate-loader.mock'; import { FormBuilder } from '@angular/forms'; import { FilteredItemsComponent } from './filtered-items.component'; @@ -11,7 +11,7 @@ import { of as observableOf } from 'rxjs'; import { RawRestResponse } from 'src/app/core/dspace-rest/raw-rest-response.model'; import { CommunityDataService } from 'src/app/core/data/community-data.service'; import { ObjectCacheService } from 'src/app/core/cache/object-cache.service'; -import { ActionsSubject, ReducerManager, ReducerManagerDispatcher, StateObservable, Store, StoreModule } from '@ngrx/store'; +import { StoreModule } from '@ngrx/store'; import { UUIDService } from 'src/app/core/shared/uuid.service'; import { RemoteDataBuildService } from 'src/app/core/cache/builders/remote-data-build.service'; import { HALEndpointService } from 'src/app/core/shared/hal-endpoint.service'; @@ -21,7 +21,6 @@ import { BitstreamFormatDataService } from 'src/app/core/data/bitstream-format-d import { CollectionDataService } from 'src/app/core/data/collection-data.service'; import { MetadataSchemaDataService } from 'src/app/core/data/metadata-schema-data.service'; import { MetadataFieldDataService } from 'src/app/core/data/metadata-field-data.service'; -import { StoreMock } from 'src/app/shared/testing/store.mock'; describe('FiltersComponent', () => { let component: FilteredItemsComponent; diff --git a/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts b/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts index 7b41a93fdc2..0aaa56b1a06 100644 --- a/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts +++ b/src/app/admin/admin-reports/filtered-items/filtered-items.component.ts @@ -39,7 +39,7 @@ export class FilteredItemsComponent { pageLimits: OptionVO[]; queryForm: FormGroup; - currentPage: number = 0; + currentPage = 0; results: FilteredItems = new FilteredItems(); results$: Observable; @ViewChild('acc') accordionComponent: NgbAccordion; @@ -230,7 +230,7 @@ export class FilteredItemsComponent { query.predicates .map(qp => qp.toFormGroup(this.formBuilder)) .forEach(qp => this.addQueryPredicate(qp)); - if (query.predicates.length == 0) { + if (query.predicates.length === 0) { this.addQueryPredicate(new QueryPredicate().toFormGroup(this.formBuilder)); } } From 2c0e0ab991efbfb9c7236c23ac03730e82a67ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Morin?= Date: Fri, 24 Mar 2023 11:58:45 -0400 Subject: [PATCH 008/504] Fixed conflicts and added strings for Content Reports --- src/assets/i18n/pl.json5 | 427 +++++++++++++++++++++++++++++++++++++++ src/assets/i18n/tr.json5 | 26 +++ 2 files changed, 453 insertions(+) diff --git a/src/assets/i18n/pl.json5 b/src/assets/i18n/pl.json5 index 6bc9974a865..ce1f6dc596f 100644 --- a/src/assets/i18n/pl.json5 +++ b/src/assets/i18n/pl.json5 @@ -7398,6 +7398,410 @@ "admin.access-control.groups.form.subgroups-list.no-items":"Nie znaleziono grup z tą nazwą lub UUID", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet":"Brak podgrup w grupie.", "admin.access-control.groups.form.return":"Powrót", + + //"admin.reports.collections.title": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.title": "Collection Filter Report", + + //"admin.reports.collections.breadcrumbs": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.breadcrumbs": "Collection Filter Report", + + //"admin.reports.collections.head": "Collection Filter Report", + // TODO New key - Add a translation + "admin.reports.collections.head": "Collection Filter Report", + + //"admin.reports.button.show-collections": "Show Collections", + // TODO New key - Add a translation + "admin.reports.button.show-collections": "Show Collections", + + //"admin.reports.collections.collections-report": "Collection Report", + // TODO New key - Add a translation + "admin.reports.collections.collections-report": "Collection Report", + + //"admin.reports.collections.item-results": "Item Results", + // TODO New key - Add a translation + "admin.reports.collections.item-results": "Item Results", + + //"admin.reports.collections.community": "Community", + // TODO New key - Add a translation + "admin.reports.collections.community": "Community", + + //"admin.reports.collections.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.collections.collection": "Collection", + + //"admin.reports.collections.nb_items": "Nb. Items", + // TODO New key - Add a translation + "admin.reports.collections.nb_items": "Nb. Items", + + //"admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + // TODO New key - Add a translation + "admin.reports.collections.match_all_selected_filters": "Matching all selected filters", + + + //"admin.reports.items.title": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.title": "Metadata Query Report", + + //"admin.reports.items.breadcrumbs": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.breadcrumbs": "Metadata Query Report", + + //"admin.reports.items.head": "Metadata Query Report", + // TODO New key - Add a translation + "admin.reports.items.head": "Metadata Query Report", + + //"admin.reports.items.run": "Run Item Query", + // TODO New key - Add a translation + "admin.reports.items.run": "Run Item Query", + + //"admin.reports.items.section.collectionSelector": "Collection Selector", + // TODO New key - Add a translation + "admin.reports.items.section.collectionSelector": "Collection Selector", + + //"admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + // TODO New key - Add a translation + "admin.reports.items.section.metadataFieldQueries": "Metadata Field Queries", + + //"admin.reports.items.predefinedQueries": "Predefined Queries", + // TODO New key - Add a translation + "admin.reports.items.predefinedQueries": "Predefined Queries", + + //"admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + // TODO New key - Add a translation + "admin.reports.items.section.limitPaginateQueries": "Limit/Paginate Queries", + + //"admin.reports.items.limit": "Limit/", + // TODO New key - Add a translation + "admin.reports.items.limit": "Limit/", + + //"admin.reports.items.wholeRepo": "Whole Repository", + // TODO New key - Add a translation + "admin.reports.items.wholeRepo": "Whole Repository", + + //"admin.reports.items.anyField": "Any field", + // TODO New key - Add a translation + "admin.reports.items.anyField": "Any field", + + //"admin.reports.items.predicate.exists": "exists", + // TODO New key - Add a translation + "admin.reports.items.predicate.exists": "exists", + + //"admin.reports.items.predicate.doesNotExist": "does not exist", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotExist": "does not exist", + + //"admin.reports.items.predicate.equals": "equals", + // TODO New key - Add a translation + "admin.reports.items.predicate.equals": "equals", + + //"admin.reports.items.predicate.doesNotEqual": "does not equal", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotEqual": "does not equal", + + //"admin.reports.items.predicate.like": "like", + // TODO New key - Add a translation + "admin.reports.items.predicate.like": "like", + + //"admin.reports.items.predicate.notLike": "not like", + // TODO New key - Add a translation + "admin.reports.items.predicate.notLike": "not like", + + //"admin.reports.items.predicate.contains": "contains", + // TODO New key - Add a translation + "admin.reports.items.predicate.contains": "contains", + + //"admin.reports.items.predicate.doesNotContain": "does not contain", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotContain": "does not contain", + + //"admin.reports.items.predicate.matches": "matches", + // TODO New key - Add a translation + "admin.reports.items.predicate.matches": "matches", + + //"admin.reports.items.predicate.doesNotMatch": "does not match", + // TODO New key - Add a translation + "admin.reports.items.predicate.doesNotMatch": "does not match", + + //"admin.reports.items.preset.new": "New Query", + // TODO New key - Add a translation + "admin.reports.items.preset.new": "New Query", + + //"admin.reports.items.preset.hasNoTitle": "Has No Title", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoTitle": "Has No Title", + + //"admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNoIdentifierUri": "Has No dc.identifier.uri", + + //"admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundSubject": "Has compound subject", + + //"admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundAuthor": "Has compound dc.contributor.author", + + //"admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + // TODO New key - Add a translation + "admin.reports.items.preset.hasCompoundCreator": "Has compound dc.creator", + + //"admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUrlInDescription": "Has URL in dc.description", + + //"admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasFullTextInProvenance": "Has full text in dc.description.provenance", + + //"admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonFullTextInProvenance": "Has non-full text in dc.description.provenance", + + //"admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasEmptyMetadata": "Has empty metadata", + + //"admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + // TODO New key - Add a translation + "admin.reports.items.preset.hasUnbreakingDataInDescription": "Has unbreaking metadata in description", + + //"admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasXmlEntityInMetadata": "Has XML entity in metadata", + + //"admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + // TODO New key - Add a translation + "admin.reports.items.preset.hasNonAsciiCharInMetadata": "Has non-ascii character in metadata", + + //"admin.reports.items.number": "No.", + // TODO New key - Add a translation + "admin.reports.items.number": "No.", + + //"admin.reports.items.id": "UUID", + // TODO New key - Add a translation + "admin.reports.items.id": "UUID", + + //"admin.reports.items.collection": "Collection", + // TODO New key - Add a translation + "admin.reports.items.collection": "Collection", + + //"admin.reports.items.handle": "URI", + // TODO New key - Add a translation + "admin.reports.items.handle": "URI", + + //"admin.reports.items.title": "Title", + // TODO New key - Add a translation + "admin.reports.items.title": "Title", + + + //"admin.reports.commons.filters": "Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters": "Filters", + + //"admin.reports.commons.additional-data": "Additional data to return", + // TODO New key - Add a translation + "admin.reports.commons.additional-data": "Additional data to return", + + //"admin.reports.commons.previous-page": "Prev Page", + // TODO New key - Add a translation + "admin.reports.commons.previous-page": "Prev Page", + + //"admin.reports.commons.next-page": "Next Page", + // TODO New key - Add a translation + "admin.reports.commons.next-page": "Next Page", + + //"admin.reports.commons.page": "Page", + // TODO New key - Add a translation + "admin.reports.commons.page": "Page", + + //"admin.reports.commons.of": "of", + // TODO New key - Add a translation + "admin.reports.commons.of": "of", + + //"admin.reports.commons.export": "Export for Metadata Update", + // TODO New key - Add a translation + "admin.reports.commons.export": "Export for Metadata Update", + + //"admin.reports.commons.filters.deselect_all": "Deselect all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.deselect_all": "Deselect all filters", + + //"admin.reports.commons.filters.select_all": "Select all filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.select_all": "Select all filters", + + //"admin.reports.commons.filters.matches_all": "Matches all specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.matches_all": "Matches all specified filters", + + + //"admin.reports.commons.filters.property": "Item Property Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property": "Item Property Filters", + + //"admin.reports.commons.filters.property.is_item": "Is Item - always true", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_item": "Is Item - always true", + + //"admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_withdrawn": "Withdrawn Items", + + //"admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_withdrawn": "Available Items - Not Withdrawn", + + //"admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_discoverable": "Discoverable Items - Not Private", + + //"admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.is_not_discoverable": "Not Discoverable - Private Item", + + //"admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.property.all_filters.tooltip": "This filter includes all items that matched ALL specified filters", + + //"admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream": "Basic Bitstream Filters", + + //"admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_multiple_originals": "Item has Multiple Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_no_originals": "Item has No Original Bitstreams", + + //"admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream.has_one_original": "Item has One Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime": "Bitstream Filters by MIME Type", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_original": "Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", + + //"admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_image_original": "Item has an Image Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_unsupp_type": "Has Other Bitstream Types (not Doc or Image)", + + //"admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_mixed_original": "Item has multiple types of Original Bitstreams (Doc, Image, Other)", + + //"admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_pdf_original": "Item has a PDF Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_jpg_original": "Item has JPG Original Bitstream", + + //"admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_small_pdf": "Has unusually small PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_large_pdf": "Has unusually large PDF", + + //"admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + // TODO New key - Add a translation + "admin.reports.commons.filters.bitstream_mime.has_doc_without_text": "Has document bitstream without TEXT item", + + //"admin.reports.commons.filters.mime": "Supported MIME Type Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime": "Supported MIME Type Filters", + + //"admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_image_type": "Item Image Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_image_type": "Item has Image Bitstream that is Unsupported", + + //"admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_only_supp_doc_type": "Item Document Bitstreams are Supported", + + //"admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + // TODO New key - Add a translation + "admin.reports.commons.filters.mime.has_unsupp_doc_type": "Item has Document Bitstream that is Unsupported", + + //"admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle": "Bitstream Bundle Filters", + + //"admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_unsupported_bundle": "Has bitstream in an unsupported bundle", + + //"admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_small_thumbnail": "Has unusually small thumbnail", + + //"admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", + + //"admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_thumbnail.tooltip": "Item has at least one thumbnail that is not accessible to Anonymous user", + + //"admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata": "Item has Restricted Metadata", + + //"admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_metadata.tooltip": "Item has metadata that is not accessible to Anonymous user", + "admin.search.breadcrumbs":"Wyszukiwanie administracyjne", "admin.search.collection.edit":"Edytuj", "admin.search.community.edit":"Edytuj", @@ -8282,6 +8686,19 @@ "menu.section.access_control_authorizations":"Dostępy", "menu.section.access_control_groups":"Grupy", "menu.section.access_control_people":"Użytkownicy", + + // "menu.section.reports": "Reports", + // TODO New key - Add a translation + "menu.section.reports": "Reports", + + // "menu.section.reports.collections": "Filtered Collections", + // TODO New key - Add a translation + "menu.section.reports.collections": "Filtered Collections", + + // "menu.section.reports.queries": "Metadata Query", + // TODO New key - Add a translation + "menu.section.reports.queries": "Metadata Query", + "menu.section.admin_search":"Wyszukiwanie administracyjne", "menu.section.browse_community":"Ten zbiór", "menu.section.browse_community_by_author":"Wg autorów", @@ -8305,6 +8722,11 @@ "menu.section.export_item":"Pozycja", "menu.section.export_metadata":"Metadane", "menu.section.icon.access_control":"Sekcja menu Uprawnienia", + + //"menu.section.icon.reports": "Reports menu section", + // TODO New key - Add a translation + "menu.section.icon.reports": "Reports menu section", + "menu.section.icon.admin_search":"Sekcja menu Wyszukiwanie administracyjne", "menu.section.icon.control_panel":"Sekcja menu Panel sterowania", "menu.section.icon.curation_tasks":"Sekcja menu Zadanie administracyjne", @@ -8336,6 +8758,11 @@ "menu.section.registries_metadata":"Metadane", "menu.section.statistics":"Statystyki", "menu.section.statistics_task":"Zadanie statystyczne", + + //"menu.section.toggle.reports": "Toggle Reports section", + // TODO New key - Add a translation + "menu.section.toggle.reports": "Toggle Reports section", + "menu.section.toggle.access_control":"Przełącz sekcję Uprawnienia", "menu.section.toggle.control_panel":"Przełącz sekcję Panel sterowania", "menu.section.toggle.curation_task":"Przełącz sekcję Zadanie kuratora", diff --git a/src/assets/i18n/tr.json5 b/src/assets/i18n/tr.json5 index 331a291e1e2..4ebe8d60f2e 100644 --- a/src/assets/i18n/tr.json5 +++ b/src/assets/i18n/tr.json5 @@ -1020,6 +1020,32 @@ // TODO New key - Add a translation "admin.reports.commons.filters.bundle.has_original_without_thumbnail": "Has original bitstream without thumbnail", + //"admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_invalid_thumbnail_name": "Has invalid thumbnail name (assumes one thumbnail for each original)", + + //"admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_non_generated_thumb": "Has non-generated thumbnail", + + //"admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.no_license": "Doesn't have a license", + + //"admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + // TODO New key - Add a translation + "admin.reports.commons.filters.bundle.has_license_documentation": "Has documentation in the license bundle", + + //"admin.reports.commons.filters.permission": "Permission Filters", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission": "Permission Filters", + + //"admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + // TODO New key - Add a translation + "admin.reports.commons.filters.permission.has_restricted_original": "Item has Restricted Original Bitstream", + + //"admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", + // TODO New key - Add a translation "admin.reports.commons.filters.permission.has_restricted_original.tooltip": "Item has at least one original bitstream that is not accessible to Anonymous user", //"admin.reports.commons.filters.permission.has_restricted_thumbnail": "Item has Restricted Thumbnail", From 83a41652001bd17b30c68874815e16f5e73129bc Mon Sep 17 00:00:00 2001 From: Sondissimo Date: Wed, 17 May 2023 17:42:31 +0200 Subject: [PATCH 009/504] CST-9779 Provided changes to Title, repository name, added introduction text with links, as well added the small icon for coar-notify inside the navbar. --- src/assets/i18n/en.json5 | 2 +- src/assets/images/notify-coar-icon.png | Bin 0 -> 31117 bytes .../home-news/home-news.component.html | 45 ++++++++++-------- .../dspace/app/navbar/navbar.component.html | 3 ++ 4 files changed, 30 insertions(+), 20 deletions(-) create mode 100644 src/assets/images/notify-coar-icon.png diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 1af7c36e196..3a5ff742df0 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3599,7 +3599,7 @@ "repository.image.logo": "Repository logo", - "repository.title.prefix": "DSpace Angular :: ", + "repository.title.prefix": "Demo of COAR Notify in DSpace 7 :: ", "repository.title.prefixDSpace": "DSpace Angular ::", diff --git a/src/assets/images/notify-coar-icon.png b/src/assets/images/notify-coar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba021dfd27dcd323bade2c944c87c7d728c34d8 GIT binary patch literal 31117 zcmdqJ^;ecr(>6?8A|c%%EnR{%lG2TImvl;ZcY}0$At?G$<$IU$4KXklI9X;znUoH)h6rp%l=ub%RpYF!oXy5Z< zmSUIT-4%_j#f={=Ew0a)J)WL>Exmu@?)bt?Qu5(h&83mAh%wR9HCdDvjTqCu(Z2~d zzAK9BouBAm!%P?sj#5T^PR|%&{@78?Qf0mMFqnHOD-fpyT^3I!g&pY^&ss+qHGqq9 z&*Vf?ies9YV(<4=d8arim8gL#|2bP462aoHPAY7D(ZSzKgrWBFp0D`P8+bPHI_Udz zW*4>uEsO>#94nJ1bE@Oax0EF97iwnUCz3sP@VANn*sf^SrqYL+JnA+wzBxMkOY*g^ zBcdjrTN(!Bi0#nwLeLgZEmCVMY7x6Bd7ijQ=sEN?isb3Nv#y=ZM&ZBjnC1U^gdo@+ z`YcYRr1KU>9Nzg!wrVeAY&PCC-F(jd&9#8?tmX{;g-7O z|C@lVr%gA-%wE^hsvj;d5IN;5~bcP8%+MIqpy9KjfW7_6Q)o&SF+X&wUs! z-C6!{UZ=GmF^+{@7u!8e)^O}AH~;*q#fhC0M;<|G)U0L~ge{Ah-<`RTQJ?dEV+@Bi z83UVDr;nelhv81yTGKe5F=}xnOrZKl*gcMiV>uqN+0xQ!WzA=h5{O7{flFaQ62cN( zPHw+x{LCk%!-9`RN%M$qfTKq4bl(6-5%L77#eqNFV1# zE2DiZKJ+XZNnpF*YPM2Xl;GCIT4x_*@$k-VXCXdkEe>o$BlipAY30e=^&aVwcB!T3 z=&h3uF3hFwF_LnNdcmL&H^uNsx6Tk}6{X05g zR{deJ^uwg1tJ$w>)+vAZXCP)l)wy;KJz29}KGVB?5{@ z*`F5f8;_dc$evTTKPjA;+Di^vgaff z^`~PND+l68CY~R4?lb2W&ZF*(4GY)a50)}{21x!4|G*segUX7R?E1#*q;$w*km(uG zF0kC^elBA|Fd%4xRc?FVr*w$vc%S)>0r6ju1Tllk6$OvImWmzp*^&MmmcnfyU%)Q8 zpcqs*^!J-b7t@F`X#f40KQbH>MqD`eo3$oHL0mLBnrC!b9M^f~ch*875@dp?r$`pn ze`^Jzeue~uU%(cUQtInrzHMO0N|SpA4oYOuFRb)1A&+lgRJU^lVEuO}kEHFK`~WJq z4phG*X(7imh#MsTFD>Np!P$*`%LF6vQ#_Vr{OVsTZ;liRc;@JInNZp(x9URZvWqrs zV4aT|B>At^VBn@O-RGDt!?oo^S~uYBGOS#ZgW&%AWaLUTu+tNwKbxt|vfH0D->2;K z{zZPqiFOgIa`3>@(sj*jsApS8z1A+c!T%r2(W*w{a`IGq!rJH*;(uX$hPFznj_cAp zsMOV1)nl~i+69W5kwu@C^b1TNUSLWb`aR$jtP@`bai5bD!~O9p_ed}hVT;lqnv#WC zF(AHp#xwHd;8=DMz9N4e>VN5L>-#=+XXIH?tq`luD1cq_HbzZf_E=@SL`MEEjM1g~ zM>U@SVs^Mv*gWc2NPcQZ@R;u^ylvxO@jvE6X68v8-ndkFp&EThX`}_zVx;8UC>YxpribcDU@V8FJ^Ll$1)8v$;JRz zYOo6poqw~tS2>Tln7viu0kzH?^1F$`>q#D6~5lQnb708T< zxwz6h_(c@0m!~(pq`tlOVsdNB-sa<~tRCf$%mU6Nsqu*Q;5EL(3&{Qo8_^4q{BUwe zah|a#;Ot@9>cesH%lBmydeU`%O$u-QEq<)2G zX&qZk*0kOF7j6DE9tABfYlSrPTXn=&p~A|bU^4#_B8tP>6RWx)58REOPYC~UC{>Bh z2(6bQ!ZIsO;|5tBMX`rFU=O^Oo$iq&U&mX=+vX~-!Pi03qp4FbBD8({micneATPH7 zw@pWMHp)^V@~ntB!T6OSLF2Yj{~r|OdBS=0l%2Id-Ro(;`n>jMf(DYtsWd7|)u8)H zIl4MH>T*b}1Q{2C1~+q`Jy5Qj)8#|4A_Aklci+|fWI`HC%FjJ0otO>=lLU(@OeF_$PN@BJm=?f9Fr9MTlgAa%R zVL&jd3!M>Ynu$~YuY^gC+#xM6)xC7J(YGe*Jc2s%HMlmCsR$cKHe!MI`h(w)?zlNE zi@d||imYn5c4jXbtrY@(3KU?3aEs~<>!g}0J?Ir|gRZpeG2i|#XLL{?_hvhO^YF{I zxC&RN7?UV$e{nQwi%aIAqqFX(&n|o8oh2qj+kn!TF)YeK5pjVguarW%m7sY%=ssZAiyxlA4_C!wj-O#hMsXNHwz_#Us?W>T)ar#FD^W0>W^a*dlK~I z7!m&Up<>@)C7JkL#rhr|G+V_Tg%ba-WUf(IID35JqND*o(&?n?x1$+$Jt#Hqq<&F6 zKlWa9Rg;4^KY@-H748Cy=cf)Ctr_`aXGyk7j`^rh8zd?5|FEC`&%Uo&`DW;H2 z;cNZZ@ZWMG-DjCrjD1CY`eIO3ra42v>RfE^3iKNBL8_SXb_5@Y)hiTh5CWHjlnqmf z)sjPh{=X4R1TMpXuci2VwFO6NEw{vmMJPO!j!TM92vP^z-*= z?J%0us4FM!9TL?*cA)>zA3L@~RJo8XUcup`8{}xO_CwaDBU*HJqMWoB)XU+o+O59O zZ?)WgD@A|>Pmk*HUtU%5&bcDTeYO6`E@O&v2oF020=bTbFEyfZ(!3tV?!|4cjoBR% z-TY6S^CyR`mdXNB6Kt4;Vd<;ATPK$8;)f@II?&d-&qX@=lRktgI=sAWll79?=P47X zrX*;-LuwY!JnxcNTW89(Xc=c$WSyw9pr@6P?=ZLD-`F|&n$<`OhtVh^eEgMiX`9mK zf@p>#!AYzBu5Gp38+utG7YZo6;j&J-sx`adu~ugVe)(Q6j$};b1}ys=WzA^S`sQ$c z57VlZy9|9V#Ni0!MCV9|Oei%@)=oFA@y$1F9iiBu8fw)CSDX;f~VR1zFIfkh*6Us4FbF;9N&4~_ogW?P%1^DvALUfAC_{v z@6Eq62?QwgIKoZ43fB=~)%1}%iKbyUXQX2fUjslZCC6~m;GgM0$E3*;ez(?p_3h#t zcogeKvsE7Vi*C}~gc+Lv-+^q0Zbj~EhVE-*_ffx(s?9s=;||jkM+beKt5=F$sb0c) zL~vmU50UW!?i+XHRi3`3FLgPS;{pN9+#)tgm9k(Bi)+W=mcWhav_q72Z!Ho`5QPoj z1gMMMQYOmn1}S1?u$Z0=u|$74#8%6SsPjmOYL1w4b6YQ!W%>{+i3`_%^M~b4he>5N z3sXpxOn?i^AfJ^9uOlg_l-2>!Tzryfrc+}?dRIixhZ+RLMJ2%iGoKl8#R9Avgri#P z{Dz?-aWnuKif~IRkD+(vUxEvDv;^ev_bbIAB>YoH?++~2qPLRz&%Cpq$YgE4XvQ(n z!K|8`@Mu*<{k+a~zF2#$Y5wZ#8=P+ja&^`OE znY#g+`Mu2+Zc$IkMCPGme<5KguP`C6=$)odR{=z987d5u{vRcx69jkyMyC7_p;=j~ zvPyX-{f^j~D3Sq6E!geM;wpbLxtV+BmvgA8EmSXPr;+yZymAzc!0rrj%{#m8N z42ODie-A_2_2IrNW$>Yi8Q{18Be+HI5mFK1ZKST9Hl?*4Dsfys#`p*FzV01`*YPaX z!&|B%!yC*J92w_uixiaoC9EWt+TTp@IK&UhALa35@%+A-Tgr_QgHxP+XnhcisW8@! zJgo+>CDA_{*nhVAJztHJP3?jk_6pz?E+l7u!e*B;M{(nu1-IqHW{U}|BxE=>jBxVH zebJsm)p&Ty&{!Xh6TO>2v2POubg?UI`&cW)MI^&PL+91*U(Vz1!P8)&^2=>=lgFHE znNtc|MB&aaFl$OgpQRYh2jg88H8z}~eCh~l4p}idGTWy5C@*lOjD}1P?4Jk{?IlHJ zCDjvRZ$xL}I5=LYhZX%T{fbx7Y3NCzIBRJCJ=nHKA*HA_clq6=^N?Uv7Fa!gw*N59 z=iMnG+y(}s<^CwK&?7f({0SF0t5ik-2om&gi^j(<6uDaoc`q44LY)D`5W-P(_f~f> z)ARK(TqNt^utw7NpOQRAN?MW(6VbRjoA?tli+X9Bqe;rN<&S@rwRSQm*{iM3sZvaO%8e6_9?7pI{ExEKrVIVGKz5(}#13 zmvn}DrT(IB;)F(2Ew}^lF=LFi1<8vt6u+4mCZ3OBFd$=$G{It_aN10=E4EXLYzg5c zCH~BHZ@z42Unj}&7h;imy6kTpvdq5J%YXc1WsD~Fc6X-S|+oK6P{I2$Y8MVGISWV;$)D$I9{!Uvo1;4Be? z+ojVdd2krEl~O8EvKCEr6dxJU=n)(H01L`bvjXra>NTobhyOLEvca8?Qs4i}4p`xe*3r%ovb%xdWo@nXR2Tgh*|_!fQRv;8`983fNa{ zt}gpdzqk(N+Uj+3adTs^9jr>e8`>6c_OJa?i>(N3Y^r@&?w!v6Jm=f)`sgb+^B}Nv zltNU2>7!}Fx7pRhOX|yWY^c~D7ph}|N;8Jx4-{HPcBkBv)D_RQeaU)*zno)O0MTmV z=+#0KDY-IOg|H^cwwZCI$g_id<`5T7*3tFeY9zy~@Zrj&;GU#ubUF9`%ivG}8 zqz)uZz_)xptveCh*Q5Jzie*K%yl0a7ka2X9tqdo*I&^^Xo7b;pHZx9&ni*|B3vqLk zjZB<%Bv3;shyjn2qx|H;wuH#rsE*<(6 zscsiphFzu|z%Uhxz!LZi$+$AiOX#O=_NrvC@OGY{>)&W83iDbm!zVu3T#mP6ODZ(z z{J)N9m#)^}PPVvEQ4Pa+`%o{QBFb7_fI^%T>)KN$C>BnA@9$ztW{WBsqeJe4^1h=^ zZJ!OuF7Oo(MO`)a%J$-QeApKr&X~o41_4;Rz5-}odx}xaAhSm|%UK4S*gxO52+>*| zY35wg1+7-B(23HzHqpHeuK1kN=Apiwr!TAOW6^O>GcZ64t<0kg*ZMhYg|jYblRv&z zlnTx}Y8yRTd=mQh)98{=NI`UbS0{Q5AE}OV`shiZ5gDt>XQwW}E2kLjGav8GM5-6$ zfho7i+Pssx&gfkl8glohS~`W>I9)Gi9w0+b42ul=7bpk~log`weq~*)RztHAC>5Dn z4R?i`ki{$*H;g6>g`(?RuN{)#4KCo$q`Sg)nolIO{j?Wp^fn?cGa6U;5K)2~1O-rv z{ZZc$n|HB;vh~sKR#Tx8H{z)rL3Ynq(cW z`X%5L;!H0jH<7mmFI`K2UugtY@}~8;DPY?5W{w!|>aGr=MzIUcH-~m>d`_+Yv!+Ja zqU|kKlO<*;txEG7h`>YShT2Lz3Y@LysV)hL{6@rt+hU}{qSNAjUe-nQG+`A-pe)rEQT@_MeGqiM!KHnrtI!s04@Z>%4-VN0TrLB#=fy}dl$9VF<&F!jVnM@b zt=;E6S!HUq*M427!AN!dc+K?gYS&*Xw;@NaDxa*@n(!sIttEBVx8K`WKgOMa-zU4{ zQ&?G@D+I?L8PTY~wUJ+@QR@1ou~_MKG++zo7LK9Kdr1nh8^&zt&Y%*17imsWDC%tC z{AHXR;jC*accH$PXbVsLA_UdB%{P^w{WuZb@ilON6~=)ZxovW+UKK!=#JZ8mn{OLG zc(u)VKIz^br5{y8I;Qbq`#l!b$9^P}-vw^(97Ox5yHsxHKK~M0rXD8zfhVX!Z4&Oo z+rRYH0Yo>V3 zK*8{KQn3lh;Qc$*;1(5}I3p4J*}cTkbxj9TNdh`1Ud2V<@axackLrFR7Ge%S3>+hy zF-YzHLyWRtcqm3dK{;Yza}49?p3s3pTI)Vbf%e6FJ#qZxhx4js)+MHD<@ZbUcrq-N@Wnd zmd>XdKlnD7p|vhvM$yGOWITbV>v+5JIMHY(q~_4vS4C??rgFY_#x@hq%8HX!mFkPm&!_$7uMHeEKM&4!)`a`Vnf2Ce}hw;0?BiU zTlNaM@{=<|}mfpkV{e<^6HYNu#!d-Cf`JXn;WrN6yxNkpO)>sH0tKCtwo^~--Yuf&pU*e3zQJD+Az-&BGmLkmd zbN==5WIEW@WV6~ApM$faEOmdKDr0oz8wN!5#k%s^!ARuClrBNFZ#AbZR8~!qzT#h5 z(EOtui>iU8)rkAM~(;@>FkcM8h%4D);yPpsUi z%iNrg-ub@nZR0IqvL0B=hs}3Qy8ZHKk!RGrFO0a;>*_)vg!$;aGLFnuWd@7CwJeSc zrI!}*>w1}S*;~8Tr|L8umvqrd$0?gzA8q1AyaNP=Wgdr_?3QkhwJ7asM!tG9>qcGE z_g->hRga)gAPw$YQ@BxK_D zj5I+;6ueaDEqR`=JaO(RxFV=<1@CuYV)z4|)y(eRE9If%iPEaKRQECT!8+vdi?x`} z3n8$R$+G6_CEG8TlQ*%7ijTG%!SGJ)P1LvIVKx4_+0!1}=hLA}Z-Qtsn!rQ|mp z$m=hih)u)8_1>Q&>5@z015AF`T=Oe0|3N?VOyX0K%ZcEQ_&lW{`;aX4A=C8#{eHFvp_v{>{Z}tehK20Xtog7Y9 zwlg`un&naDLH=XuK+bP~Cg3umL>u=jOTOcc=Z3JAGNW_-FY!k$M%^6PjZd^qqgENk zQ=yFrd`B1F*$k~pO?$E(-z=DCB+@;GjY|a@HCZnkrimI)7gqn()0>g1#<@|P;!X@f z%sbm0)ly&BHm96pC5(p6k-@d%#RKskubUNV*PMO4c6`0J;V#=R6`8Fdf?LxmCT6t1jC$Dw`q#P%V#|5s zkC+!W$K|3-FUd)u>_&vh@x8xUoY^(AWw&tZE^OQRM~-IwWk!zklv%QOiOBg$%s4N1 zb}0L$Gm5>)a58sYv3Nda?47p>^Bw!crPIA5jSYt}E}o~gJjHCq+_A^5*}YIh z=dI|Bh1;MxV++PL8arzlxSiA)CzJItv`Q_$GTJ*Y z+GE=R4SFra2JPy-i*Sh!ech<#n>)qmeA!zlmK%Zh+VR7($;*H@7K{1g)!CVLJZdY1 zDoa1kt3IZ1A>ke6a2bi}?Go~RrOb*7Br@5`0;dcc6uY}&5r1IBnIU^Qo+{2fv)#Ef zFu1U+jM|qbLA}ZQ(kRNZ0x5U|#l_12yh1q9F9jX0=zIe=C9zQz`zx=5<2$pmHh2Q{ z&X};p9*uAHJSZ$LGrqWxNVMgj+_T(UWV9jfx9^ny4vjwHA?ob-`21c=rc@9HL)}{D z&3Kt>G7@1p(g)uGyELCJ`Yv-W1_H+)1pRZx89*s=rO|UHg5R>I%!!7ur<~4sy889k z?gfI++wPTVenlt>{p5+2w>=(@h0E)%b6Z!<=TGPF&xhzWZ+=GL&uIB@F$H%28r;3! zBf68t<=i@%MmHs^NuD~(d~9W&!gsu-xPq3Sjw6I!q5`RCylXn{inIh&X>4dP%I(Cx zIloL(-Wv0x>Ao4iZ1Ee*3<}30=;HLV4=H=v?A=%QAkcU(XdA4b(ZV)-;XOU-^$|N$x5P! z&B}*<)uqX;#=gjAmi<)ND2>9)mxnK*mjV6&PcY<>VL`ES^}>%Kz`sW-w~Q+1mL9YaZk0o_Uwa`h{GD!f$fc#BAj4B z6_~=4k<>Xr|GCb%S~XLlL1__!oO;85RfUN{C@9Wc3R%Ya8uMcH-5o~*5MXcsazCms z%41%}(UGLto3g{f5I7x@B%dE9_@WAwln`-5VU!u?U=~I)X^;yQjPhASi_^?HoqG^3 za&|&P-uDh5fXMSwglq5Z+==FVHw*uqoTbCGklcnVSC5+Ru9~y{6#`0SM6hDzh(S8R zS?$Ft59Z7&zclY`9T%5dFs!V{;D+D>K7r;e&G)vnOg0;&`$pGdezFjZ*8N~T)E-Hi zC{xyg7oFAaC6YI|5BWE5(1#^Fneo1=T)(x;jpZ&jlU1-DZBsC=xO~|4er;XMe8W}a z&_2Mwjo$nS?`I<9Re7gY1_nkVnJfSOnj#aL5II-K_3XB_n}JOiU}+e*X+&?rI!u>f z%@FjSksjYkS(~FgYn1#u+T`p7q823)+RM_{8#Q7Zj1#H}vks4fEETNuQZWT#wLyT4n|w@Ej%*!?A8 zBtzq0tXAVPG^kVCo|()VYGclld#_7l=;|hmx~6ecF`dzA#+0~ z{c?g_Cgktu8?GV2ENGji6At!;G0YmyS`sdq5`=24{Bk5hq=V}W-_+V3B04>`{N&ZB zCfE+ZJs6SP3Mqgy%ck~TkWuorM|RWwu~Vk7bpwV`s5LxDNx&{fd2%VD|xg0TpI>6rC;9GVIg^<1>Zr-9je5>hHL%g}3+9 zdPmbej+T6wF_7xfk~1L?GBvPau~CxQckD(|pr*D#P7sVpqG02&^Pc?Ei`x&2D(Km1 zZpTz{F`#D4`m5~tW=G5jY`2*6M)SP%rhnIDOlS{u?l{0kP${{}<$D)DvVp=q-;;P% zvv}MQMP4`zIEB)Le#DB=nfb^(=FTNS-LCrP%)ss59W6og7qi~-B59KNzcB%_fkSvi9aGMzzW@&7-x%6g-LXVO z)luZd3UgDRCnA2@cBg?Y+1R5*59=u(NHE^bii36!)Ubrd2UsjHJWLr+tx5$j>q~6{ z=s7?Pz-)oq*I)FGYM?pJLG{p{@2sYO8dNl#h%YJ|T|TvqWK$nPjZcp9KgQ1^Ae*gm zRZTJbcQv9%BDX5|Hqu5OpCjDj`v;$5o37R3sU?>)gt_PNbfTgu*@EbkXWUvW)Up-W z!sB!j<7q^zKV0f5+b$7xX6BjN0jMNl3r~Ku6RtrIAO`JEo#bO^h!1>qR%R>hI zCtUkl__JV@->raR?Y0GO`D^GTMkJ-7edln7wm2_A`k+D{8*#x!d^R&7uo0l`N)QG| zBsNEQYYnak=bxMoE}@)`Y0X$DjVLL=D9bj%4hn)QFt!W3NvJZJ9(}?9~58H^4E*FN{|Px;OcOF2v6bU zh(_u@hEG6)rVNq|Uie2X;o70m(#qrx5}o=FOS#GMe$W^uoW}v^Ld))4f7{}Cx_T$5%C+&irH?Bw=-^;6a!paIvXLRTZf#@3o6BtS<5=6)JU0JhzV-7l? z*6w|U4^Wz_nxs+20|<==z|1;Aq5BjT zQ1I>(V=g3B-}{LJxSEnU%xBPN5ZT)m_ycX7Ck)EU(hKTZjN&9f!vvzth>*bsM1 zizQ2Xzf+r{K@=1{UJ|Fh!_iUc|j1H2o)Rv zhRBbsJR?rz2*(@AzX!9_${z6YmlTExfZvOM|44)Q)2v>s+)eI(rWj-Z5~cu*G3{gc z7~5FzO@t;Bqc{K%09Cy(niK0SwH5QS6$gbWG(XHs1SD_~2|8U}mn2K;c*m@4`cA%( z!Y~S0nc3?j5#np4w9@&#EtBeNlz(Un!8YvldwqO{Z&2L#a*ne>Q>p#9FMVI6lL1x* zet9Z4oe^CK$h*tRQRH=Kb=#C4ql!ah0WZf;`T#?bPec*KS#l5PYSacgg#2%c$BKxF z9XR+ll9lVIRJfaIoZ#mXtLouJ`bIN^VB-|W+gq$AFy@CleCtCH@V>`awn&Qy>o zp}~Bs)_@72xq-ol7HS4WU_|omMBwjCo`4yi)ck|h9AJ?GkQ}NvCWPU_I8s2YQ*}{d zl8BwH9|%Nn-j!)B`90_fx#=|IKIsYg3e4y&dk-5B zI4ZpYq%;sKH@=UI{!43EYDZ0W^d+*Q(t6Ot^B+*ZgF{&hh6+F$Ua;9hcKOzscrmg`7&j1*i++qd( z8ak3E@5C>$REc3R?N)2H_!{(vR`(!S{QEdbr7o#K%RSbHOK**52RrAn_~h@s@W1c* zU{zd*l^L7;;sJa@yO@YXh(y;gg2%w*b-^6LZ+WRs`7>*(s)f2vu2Tk8Lxv4c+Mc#i zBK#>xyR1}_jx_lbM&B zM~ay`9Z`$RXGZ3cy+@=CArC3fOOf*-~w_^`i1BJ=Nbj;=eRiUa)ejorEA(1d=RFcH%34H&mpuE`b6+ zT)Sj3><$X6G`YMc^kU+5X8^R_QHqEz7{TZf|I{O&U}7!Qaqe6jMZJew=2= zxA1`sF34|j2hMl+i+y9JaLoA=hpGK~Z>gWO&&)MQrS;(~D~BV0+J;!zzN*~3+Hee! zy+(EM+8xGp%k~nXRJtmauZ`wQsJg}V_`X@US?apnmmBF^6`d~XE=5CdFWq+wM1X(K zJnrIM$hW|qXmI!{c*$azW;T(H7YV}rZR5=0`u8j$6hR@cXPP-1({kL;Yaf>@zGVKO zS#ZkGBo5FqQl=}U^hSvGpxtnzq^Ta>1)IANHrm*m1t5u7iUz~$q`Ub-RC8t(FJ#uu~i@0sW zgm`a@{aAk0Eo2d1S=ODwjga5?V*|=}Hwen75D5Qt?!neZ?F8w5M5hop%hMQ66wea8 zYrg4XQ!x{B#X^LRoIKMsz7SrVw)dc%;5>b(?DSCNDc-DgXVr%VzDY`c5EK+=V5$&~>4G#|KUN1>gKg|0T)pItr#&Ei zaDsz4xB<< zCOmWfElmOihKHrOzrS4NVl~n;CE7FnpmC21PHE?aEF6Y3%?w8>oBkuk#}xPU>pKrZ zk`n?nbt|H9EhK(H{h%OEss;>*%!PE9H-!}v`tgu^%EyKmd+{@8A>Q}6yu-!B1(%ow zr>3+-cuxtZm+o7j|?eQD9bQg0wO_vXOF`9YEKQB&iIsU)ASgV0!%*SMQghiA24 z)OosK*D)}=tEmCOdkSoX{&*69lFR9X`K@7}W=6oqI6i`gP zK$DCqFT8kJj2-UX?E=%fyfrPpM1 z8*nVcpOELeJA^z;pWbSj>_Um^0GZ7GYiOPKeHIBu|MhmNQ~0RNRP~@wZd+3^FipQ8 zn7sNJuH6kU09B(mBd@pE&Y@-95fShkf>naG#d9 z!Bb>-ikx;AC|L8~zl#{ljtbV%E7yc=I+z}-NA$FzMOYfSqSJqb8y^1{W zCNLnHZe{pl>*#5R6bI?%)QD(pDV26B>;@8*h|OLS^QpxJIn8b$gT76~e=W8td(?i6 z^p$@lxJ`DBI!i1!o45#P9O&>$r5|fz?AUV4<_wxAo24o(5$j!x#Z!w?0I1e>j#)`ItQ02eecB!vmc+0zAJJBvk1bX+%7!MU z4C*VzRf5JS*qIesE+n=0^W|4o-_YoHB~975xF5uTdR4jR_*RU=@gT1Kr89CJ;9On*(s;5i z5bw%-Wvw~p&9+zpWi-EMZmolkReN(J$BlZV@uZ56gY!vfHg_=U0k1lD5@R+>07skC z{ezRb|3X+C4uj&?y;`C_Jr;|qcJh%&vM>qc$x_ERg8Q!9dnL7hjA+FQ>tnO#h}3}$ z5uHCmRqCyCXD?U;GQ9P95(Kz~tO`m-;wCQYol#0HMZNG>X>Y7;O6$OLLnKfej6 z3OF(c+_Udg_$|Rsj)8&~@X%@1+~k4jZ|jgx5+XC-x)G-K*8LD3aKO<6wXP??R|63e zv_H>}Bkz9W46yp>G5daRc%Xk>xR$*}Rl;bD79AMdk$^)4QNTZ0&O8Fwo-qr@sRma} zyX$?9j<#_W(0KhplZhuKy%1G?NuT{*^AAw?EpVc#FE~e&M+C^z0BoM0wznl zMSZ&YX1p_d{G)bhR(QuvcQuYDD~G5IDODSQ>^E+C2t@}|uHYTgJNssuHfs4<%My0K zJ4!cq(aF;BBTPu}OaE|fGx1c0Ts`{v0gdeJ{+~^D>gulBeUIsS(gz2aFaP!iC`S8@ zXm@roOasRlu93`Ez!!>8sv@TOCW^jZS zTllpUZO_Bpy?c%g9m{*nf3G*L%UhRo{AZ54Mq}9uoTUc)4`B6pDK1_4daf63JNVy< z0$>+a#k_=_%l~!o3*X=kVrS9OVwo$Kclsi$&(F~&a}Wkp0aPZmeOaqp%Mrkvuc*ZY zMn6+;cd+HT-gMcKjWa^KGxCm-;*nC3u}0s#g;=@jCCj!TfP({HLd=(w2Z6h<$1KM9 zuJS5Bq*L^d>~?*zE^&dQco%e+)=VAfA5H$Y6H>NAGt_nsJb>AQG2v9X~k5ijtP173dU#NzZ(JLa?Tj)w#f6i%dXqgH?n4px_hTw!$*;Kg60?SItK4Jmt)BN z-^SB?j4BDE%KEjAL)*C0Qqyj&KWR+vH~qD7s_Cy+*Qm)7>|2+w-Oc{R)S9{3LL221 z{f{_M@3r00($nO3Dbpyphtzf{^IAuz80(y_D#92Es}t}Xo9=$?uwH6~TTZ^vn*giV zw&IhHk0)$0w-up(+HZY#d{LJiB4Q%pN9@^*UBW3weg7}Q*nailOEx0YM~W^qw7Q9g zOEG%8OQVL10$tO=8~XN6jaLoaU8C7rc9ek&X^!~-y~$zRg|b}+YjgFDXXcq<_;hWLfFjX25JXdMx7@QH+O#fE2{_T4Xn`j zXeS1|PY_1nYJKYVdz;QANQ7+GOv?a8*}A9GYFt0E^1~#ST@W-qz-d4ihq#$e7R>)h ztTPAdA`ZkU1Adsy6MV6&EfmNDKs&QObdlEj7xXz18Q~dsJ6R?UWZ%XotGHHKwZA@* z-5i4$;KP%0U!Tzx^BK=qazd>V=C^K>2grM_9XUETS@e+}o+Dq{eve`i$+0G1BsG7O zd=<`$ki|w__OV!o!fNogf>$}pGK`Jy>TqP`E_}HyhC93o0TjW1{L0&864lfaNM;(8 zO~q1`8j`1mb;q*Sj)q0o9;#JqJ#p5C=CrO7ML1`0{5efz7(0 zm#;q~M$f~zS~^L=NE!W7|9uix$p+XM`$pA^Y}ZwLX~t%6f>p`UF2E->$%mdllcYe; zn4%!2Q9}?e9L^EkIbqhN^TKGR&u`;?Cbrmgqg?%%c#XZc?2HTU^PY`^k;4cQDB7uV z%g?(z6y31jao=JL@97PXhJi<#oDOC9G6g$v> zjdo&0NXA8B#a2G#0@oleVYXPh?AKfVE`e5aK_zAB^Z<{+WjS*vE!R82+@~0O4f`u- zxRI1U#pq=!3cs>|`It=*t7o6Pe9Ot`PP$W{*wo2G+L|L8s1=DEaR3o6mXV*#vnBuP zg#u4cn5nmBTk%vRrJACt(}eJEX0Ag$FG>Azm%j@*C?na8ovp-~j$NH@-_A6gi3E*) z%+6Lb@n>lHl|0?E+6Z*2;@P`>J9JXIyP?KqKU5)v1;G-ER4G1W0i@A`sb+c^HI|^ zxNY9U)^iZ${?>bjhu0rix9t8zA58#N??mhu(D&j64HkNCVv~ty22&I0dr_O81J(5o zVn$+bnT>|~l0G7|y9gBbC*kE1d?>kh0@mfKsqMV}b5@;bX)|)V6i%nLT=(l#8-AWw z6uP2~mjYqI2k2@La7y~ygJ1Rwu2V?b{hLLCz;dpeue{?(e=bwOdap@|UK#9b7C!9% z=|$3YP1WA^N=Wxrc<~PD)^**<6R49qf`vV;r`;sQn0cS37_G{!=IHJDohDAK9@!>V ziK&ebJmn-1}Mlxau*M4=63vQggZOfcX9=ey-z{_f&=g)B1HV z!Q3|_lm2gwZFXjkS_tdEgj`*HDyT|Fzl%CLIs=C^26qZJS4$m3I}~hB5BVyS>`mmm z@v~~nMA`;cPk#c;Zp=O{Mo@TN#o3O@R2&%~wBOp$WSe-4W;kS=SDO%xsvH_SSt2}) z{jjd*pb}HBdHlnvbDI4gSdU)WaMT&(ag|MBC4F-w`n?!Z`C+!$M){h}R$8rvlA%Ee zewmF_Z-)0e7}d+9-|=8pfC}|8A^Na*ri|3)+#K~_LD%kp#yl1%^d`~y7bk;5p(|C2 zDi3e!4EP3*uGXG7+{K6H&uNMj=o39YBZE#ig(%Q`8@~7BJHZ*#kZFsPc zk14st9&W8t$FZrTMn}e`?)RN|1KRv12DGJd^ka&tH#&&K%ZUnePx|)ET8uXjHm5{F z4tEaB`1WXtG1Gl&jhA>}a~ol$24`lgZ9cfL`qo8h!ryS$8^x0F9}HDs{2j&lCo^#O z5EmDjOguF(1;~-a7=h2aDBx_gXVi_J2qDuxf6Ql{;)P6t*V|*Hj{w@$+A+@Qn0FLOoVWrSRYm-LApJLx{=3#&Q$AXq}V06xWe_YSk+K>@=*!~d= z6xky)0-^HGi7}t4pkE*p&=UoI^_typyb4ihQ^6p-M)R;)>_0{#zU+_X+qW>&Xj6I9 z;>EQaqkrfXlYL>d({On(WbOf=2fA8H>s50M+UC)9RWv%ZMWSf*gYK%T;dsaVq`R#N z=vexXSmFsRD>b7~!W;M*)cd{wn5}zOIgI20k+yB?YXYZa=G3&ro5jIiaM|A6A8A8Awx)lWhFJeZkK6O28tRF-GMErj z7d1FX>rj}rFaP5=iR4hf!2>cL!*AGc$<^ufSn0)kuiC=0T^JDV#a5kB5Zc>GZJxY= z_!(23&%!_F&9$pLHrN-NbVo=`ykiB=w1M}(A}T8aUURPzRcyLBGVQPV)w^o~2i1Q} zU|&IHY9_#ZWpBO7B`ZpCw(6bhq`4%q@sJjo%%9OtSFZP-QyQ=X)r9|x8}&$;e<;)z zE1zl^kz%IOQ7N(j^)2OV3Cx`*Pvur4M)Jl5*s~SV(NJBBu@xc?A-cZmPTg2DTO~r3MAu z1^K?hs#;9sM&8PRer5rQTgO(bQ*wF)X?v0#iuuy2Bk^Q|kWYNh$0*>a99oB;;GULR zuIKVSkN5>|?~jZwwGSz%?gQ7$7le@dosUt>evjdnFZW*5C;PMnkQ1T;%Dw z9I1V*S%OhTTn1zq7iJ4<@S_escObp!gq5{*YOvGIY;9O*cp-@q5uaW_j?=hW{{=sv z4t{~%aD*2Z^)6+INs6d{yr(@^d1u3z?)k4U#1#Y-Sc=o~5 z%8uBon=>mJQHMGWaC%j+xg??a){S>0uRj0RQ-(JDASJ3gciN)pTG zFi_THL}gjYE7$WQZ9^1~*2-k*{AAaCO86b`9YlbFn5yb)J_Lplvs=!rTkS70l^1}QxXw>R?=y}VHaua(y={_ zo+U;F?vDSgz2ai+G3=H)7?T?=6`ELKYLCb_sLaI9qmOZrr`10dEDImLrP4F#U~vaH zPNj2pf%VV7n%SJ*?hBQMm%dYoxN@PQ18}X;a~%CWU%ljPyatt|!;)}T4(*R1~WZK+=BJKJa4HR;}6 z5_S1IQq>GRM+ZBjY z5I4P7d1I>ojVr7bJpCgg zxoM!rW&c%*p@x0i1b8t>_a}T!R$XEc)8-MbxEMx^y%3o7`yDRFKGx}nW%;x>JEN@# zI7sd83nY=Da^(_RNM5O@BzWi>pwt)B^<=yQvMP#{rvxH>I(I<>w7PP#Aut*cO3cCf z0w_;1IPbM38H)Y3a1q^z1syw@m^!8{x>%^E7n$s&t#V*I&iil=@?T zyOjKNrK(@avfN>-DJ}!7O8zXrk&&kxv7>0+4<*o6Zk9Ji+*G+O)89$AeEKq90v^W; zU*0`!S6-}nh&{0UlSb<(A0vcW)L0*&Y{es@P*! zR{#My0HPWW&MCr5tEl#>%{*hL>Q2kQizTOt;VX1XN!N>Tx{;)7NcRI913?pM3UG}& zCU^BAuTDMMDf#aJnM9XlneS49T8{Y$Dw~y#Hx%WaUfE@h}@35i#E3<-^dFaUJb*js9pEikqM-dLYU@ zG2;t}t%2?t=cz3Um^)Fi5ALi4cCk*m;cFzFui$Bt9!j}b>|x9itSZ8Ykp#zz=1W!M zJiH1v3y4Nf1i8at4Q=E5`tRRe?SdL}5s^r_6Uge+T4k{Ro?JR~BJzNM9k_^9X?JN)C))ia4sFnf#8^nG$`OUrZV%iwxw%T-q6} zcc>>8LLi|er3qN6YUlZ%I+tNYZ+8PQU=*((dq+(sc*HGyP1`?&;}K@*D4ad;5c^~w zBKWM8FluM|duO*-a^^1)sT)=%zK5^rj0mChH+>P=g%?JQw?X28iBLqqtFUb97kg;10w?+|>4jstkgUDRo$q=W9%rX76HosHqG)<9LY0 z*0L`W3mVdyY*xfufB~~^@bBwV=+O5nUoMJj`?K#w>;V@Md%)>NNw#Hu#rk{3izTTq z6A6j*=cw)r&UK$73(n)`ab&bN9N@>hy_+ZCwSI>%L2KrOpm%N>6~ESqMjT@Jel%Yv${O>MnpKF%v7sL#>UjX~ z-0a%MuHO-&(SjGL@t*I0&xFd$F4=eFTLg7J2EJw!YVxTvRR^${5}eBg#X4#R9K z@tL%JljKyx3&PztuQ&+mTs_H8Js@4o$WB&P|JnZ}-^aR*XLr#*BrE*T?tZ>fv;@*z0Z zv;#OIU!+GzbjkV?0L&gBEIn6p@L|k9gL9EYcb|A~Sq|JQfo^rTvp$IozYleWA zH4LGTa?G6)tPr{syFxD0`(ie(BFzi>$o~P}(jZ+;l28{&&YnStfO?nEn$+G;y|y@C zJDwq1r>9%Neb5kLJV9a`s;$m=_wFfe&Z!n%<0`N+v5T>7O3W3mrK(=;Qajd+w`|GB zDtZqHi4;$S)@q+_D5|NK$<*vHpw*38ssH{xPp}ogB!efolw#N|MB&Im&T(59IM{ko z8R}q(`xpbrp1z20{SOymRu|j0VCdrA<~0FXc3t^VU0D+r+tr;l?5}RAF^v|;`)i*$ zblIILYn(+q=7?!2r%j|O!I3{QC_gXna}NjjxVVR8L>0bgM=`#N>5WfTRopJvC^zWF z$7)^NysgrF@Yu|(D|A4By0&|N^&L)#akuG=UKn#oJGw9^jQP#OH`tSCs zk8?*DNe>fpEJ2ul$`aq=gz(nlCQ+JSr0A@N?{x^^wY4NX_m-?Oz8erGO7s3wiHKGb z(%2DUy^(Y3uwQZa!26)jjya>ygu6%S8;UulclIikS0*KVeC=KY^1Z(+{JbH^X7Foi zxL#0W(rWy^A!}_em`3y*1@8lN=`JbuKcaWHtp9eG-WuO_n44zFmLz!?()+lt8= z*{coDb`$S;*41hVcMy})!~P3N3>T0To*Hvxfcp-@BtRca9&4uY{gL|et*Wd$Fp9&o zr`C1q%+gfl%LGBXyx{uWfrxv#>sghBN#G?Ej{Y8Y38F1W|9MCyxLTz4L!TF(8DU<6>02=VjVt4{k_1KdZ>W06 zc>(i8rDG6_hnR}lf;{MYfs;XHM9v9&E^K7^>TnScN$_-&@C<+l6*Nt|8jICDuJ+cVkY${ zX0FnFn<|Kww=)F5O)fBVXW5Zqs_GI+0el%|#vp`F_;(97yK(^?I)l1XT7;#JEA$#n z)W-#H;^KJfY1|^N?dKGc6Dbia(Itd6Axrwtt?{VFt96&_b6K};|j zn4oNe21E6%=g;5P=1Px>4%POm?zUKy*AARzP%V&?4v~E(7@MLA_!}0;b@>aOx9ufu zRdV#CtHP0wLgX)zG6bIeJ^LceKn3Nl+N2xMe}w!DGI-JB?%Aiq__@Up#jxbd6HoQ? zJJH|Y=~t%hqg6ZKp)XF;r!0Q&pypiPDIFB@n%zoB7b+0-9OaUkR&P&GlP``W(Euwq z*psrN6qMLpO)E>{*E#^txbN}awfwn`?e)&N`?S=egjTRcz^sQFx71p~WZ0rrd(VxD z^4Rp$+<(`cLhwG$5ne0JtE+=&fdii4bA%%r34v+R^t! z=mcwY?R96buI_1|&uMo0I2~NS+Ulim^)p(_J*&W}9vG-_U3GE7Yg}Y|)XSqq{)}hL zTV^qLLYm}C6(kiePKE9P-3-LsA#2%`nWuT{3dH;=>wLtJIE@|k?{%K*Yp-GD_Iez- zaRI6^MMHTLXygTyFT1-woO-*jJ3;V-VO;JS4}_8Pi`bbL-tSLmkYjFc5^d(aP$Bv| zjO4{I@~Oke8=J_Vy1So0n6|Q48>=ei#Vrw59xX0mA3H++{0UODeOqsx#^Gq#>Q?#k zQrnq`u?(0%q8$kw_NLE+u4}b)glf-d;n$HPHO(4Wtf%#Q^(GQ%Q_1}`(l#N>0uDfhq1-Jb{GZHG9r z&?$FNWKZBq?)R-|y;~gpr!jWS3Qtz4f^^e3iM;W_tWy$_rbXQ^CuPTE14)h zlA)*5T^(uudX4}uo(GnXvtE#=z6xAbl@6URZw`7R5kQFjT8~;2Y9in(tl?*vj|PL8R_*_fr?Sqtcl{7q^si#n)BXVJL436faq;w_|+ah9Ng$baDg!u&_#~|`%uOVXxGyn#SR98A-sOdxOXOz*z*VVU63Ky1|M%MH6_7~= zOiX6bA!3Y8y(&wbr&PSz`K<1vj)Y8~=*dKy&eREa($m*|D>GBs))fUxT5VBKyV9e&{yasP@LX7<5a&fgh zzX(LzKYP)$?<(0S@2qgl501KTE$B%H&U(VVT^RgwoP`-ee5HCJ0)TQa))R&3c0bq2 zbCL@Tv1-Xrc3zOUwcG#Q_t<6kgMv4=((|WSmFg@`l&uj}YZ|(?)zBk__2l7L$BvW! zP8lzn_x@M=tj5n5=SQl5rL(~WdOzr!4M>7BRkhnIrF-**aF@3Nc0p?^^uiKfu312X1}By?62Wv4nl>#7%KFOmQ8oX$G@r@no6QIUU&bB@d>>V%=t<%r0`nIase+3gjJ z{9glj;*Df6?{9)xzhNHl%w(>%TJ>ap^~Ee`uh7f)!bw9RzH&RvtG5vWDxIb0w$T*% zgOwSEL^=MLWy_#cIgNviPMP+s*R*p?cNarRLbQ&_JNP`& z7+P_0uPh&<+BWgYCA}>pVvgGWZ$BRXVt*{+I?Ql9_w@%((Mu00YNKg}J*uYn=@rek z0hGgF?AGU|r5>jb=08gMJFBGjrycdok2Wj{S%LmQQN$H_L60BaB+@ryQ} zdpb32w8PWB*?-Js+}4Dt3NwWjbNVs$LS(<405{BA||^kD-xWRLCR$;^9+@F!C_51h!)G#FWl|e#(T_S zHeezs7162ua&n%3CTI2a{7biH{dbLVbAh-t7P+?s@gb3)y%@%LskrFHP?>2k*0g=_ z!c0GhhV}IB6XBtHX>LfY7ju!M@<;y#&8v&A?d@r^BTutJZtvmv2gQD|Y|1A(-#5e! zo#}_$yH-C~)XScpamD;B$TTTD&2wbCzxH~l>&Sub1~1kTw-vrrx6&hm*rzlsSDx74 z1QA^UrG510>u3{sr#mjExBMDm+u=NH_lF{0lW;Z2>J;{`ef1~BFZ5bazz|$Yw>y}c ztO{Wsuf^Zodp6P#g#|RszC3`(o7geKM}$$KQ0IXob|6JxGZ^xX)YZY50rErMEBTlo zPmjyP?FBhTDn6dL>IhBz$#ZG4f^>o0C*;Ci9jL#t5Cw&Q?g*GyQUB;N>Inx(@7}FW z*(_DXPJ%w2Z+lPaZVbZ`R(htKH#8bOlKUmFj^2u|i@-qnKSO$6Pp*3=Sj;pF-XMG1 zKy(FAMCGCTM1SZ>+V|V~4rmP{ZBt2Pk>^cU^+c4Gqzvo=>B!b!gx}HH2gu9R&3|XzW1=+hpPD%Y1RR>@_6TEZ3 zS7>_k%fIBmD*9M-mPY|HFB%d4qEZuHN(BF!_RJ1J(!tKZj?$r6EH5zK88#bMo64<2CO+M;-c4DQ!jX{b}*wfsNv4+L@~@()M06^F@9EAY(%ByPk@Swi?4+EQZ#vA(fJ6M}3Mu zRSZl{Jkw1{$XpUwHvMmlO;jf|rt%6V?ScvO`rDaz{|oYXrB4j{&Ug32=Z{@Am&x(o zAlun(VR3a#yLZ&Rp_DNh;W#Q?#1;Qhpl0G2NZA@WSCfrWwGY%KX<53hRXiC|t|$=x z>(s`8S^>muJM-@YC!9=%r4cU~RU&C~eOyJW26M~S@dF8TaN6HvIE44rLf3SQ#VP0)EDmj z$7QuZ&n9fEuLAdvx~2Zgdhm~|qZ_@YC(|GaZ3VUjsUvqlI;>~HKYA=5W7xy>n*`3z zg@M|M(Fr6jdWvHxUrPkYJ`zR*^g^{4tDk{QMV}q)$+aH=WyYjetiV3fTf0bq3561k zYxxbp(dN7Ip3YSDe{hB~*3v_GiLABp+oV$TI&9sWljW!n-!An?zNsSy8R3e5(eV4< z7&ggmmX8EE<_okx71D5C9UPPIS5!zN0tevkxFAbPX`TL6<&EqirO6fN(j+F|_e7)3 zIdU7DPSbM4(JqaLRm_%dw~d3s9|Qu&As~5XU67ZP5$!I6Xbv2%|4uoy=R=RfUyHAy zLWB@_rK*Q^U)?KEA&GlCol`!>P=cRtZ;=?xr4H9go5+aazCszRT9D|E&Ok5lB$?HT zdp~r*?{1?7K~`IX9asv>6Ra4@VC@kQQk$GATa?p!rU8$pcs<#nNd7jk`8X7x5y~CG zeMT|uO*ydaeg2eFX68Fx`75jWuW-e$YDA^d$rY0{2K2;qF+nBoS0rz)`?Mb!P~c_D zE(nBZ_ed(R)u2}#Nb1!?IPI3oyM<}MYma%TKjH#OA{&vM^Y;Sx94PoF4a$t#7zO`6M`$$~Z`X zvg%{>ucxRiYPcgk$5^5f7mW*m!d@Ry+nei7xoI;)cfuwISs2|Yy~V#D;`rId8dk^j z(2{@0(AucOYILkdI>4dtm2xu36aU;e@|kKMuB2zTy{=9g6xxBHC2_A;%0UmWG{LT~ z;{Ek6c8PvQv0nE%)MYaLf@p__82oZwmp^f%MXSNkXr}x<19e_{v}?anVe&Q0@Vu8a zzkSDfBSsgh_kry?QZ&*jlNJLCQJRqIj32JI5N)#mJsOg)7zQl3e~d^j&KgnT{IAI% z*2K{JRgi}|YlHc`+AHEmK+}Z~{_`m&{WGi9?;_klYT&(?!&Q`8BKNaP9T-R!T9W~BipHQS#V%6yc?UMEh+rV|Y1CEc@ z9g^3~OtgX3*Q^vS$+NDZ>gU zyWx}n^RrGJGp z_fGP|$5BSutwH_$s>yAP*ZdCyy(zT6>ONK_dcm>|1&9c@c_=>?=;j?`7m!72IMb%9 zi(!de{$Hkv0*@CSf^LIr+MWuWnuQ;Vy0)LB9iB)?hhkrap zf`Gg~#M3c=(IoWsrsS({{=CkXZwR3Pe4w$ch5!FaJnGmiF9>fC@|0HrbcYa)8 z^?oS_KK0kz^j*Zlp7t8sAEwoBlU%34Ux9@^Fc=)`N&3}>bKMX=4ZcVq-HhA1?B4GV zS+4y;G#T+lsIG$G+6hbYbxJHMn2`@Eh8z8C{HT7mzXp~OLNuxTp8zg@E~6wYjsy7@ za_>Vvuvb%lI$=G(Mj9%Qea&3orD!-sjma-k$!%RXU;`4+SRSak&4ZRw7Lf-2cPPL! zEdomq;o?zwfIZxoQ{$$3(V6#OM$V20Fc_H5`;Fs`$Wi`lUM@pIS!EE7(nOh+wH%wP z${yijzV5X&pogJBPK_dS?DDzJq`RXBr1sW9V zty(PiK(uH2mu-kP10RU>=D<#w1+HPQE^s6@nfF0=CdrAhh(S!=%7AYAU+YCMik_}F zFA*bEKKO&8=Jwl^=(fE|>}#kcU;tUTK(m(Ab}F7~d{?0J&VRZ56a7(FIa#CT22C#Rrs~d>Wp+c#Y!UpCS1Y_}Y>*3C(FfuV3#G*)UULLbPAH2GwZrZjk5<<{91#7G%ymAOhnsVtoN?(%CKYUibA( z7}8u!q4xd{_3zx&bAMjb`WMmn;SEOip*-aQBNJksKbDdvNUs}rg08oqveYe!ho#&w z%8u}3=?&Hy{FH(`~7g3d%YfDm~)B0Xc-AG^w{ z!bB~uvwkF$MvSj`2KlhPUJS*2*aBU3M7@cNp3}|IE%JjAMQW$Uq4_+b0c`@73GH-X d42<8@Vre%hevd>S0M9HV$x13o6o@^0^MAC~1TO#p literal 0 HcmV?d00001 diff --git a/src/themes/dspace/app/home-page/home-news/home-news.component.html b/src/themes/dspace/app/home-page/home-news/home-news.component.html index ef576ed99cd..d61f2764c94 100644 --- a/src/themes/dspace/app/home-page/home-news/home-news.component.html +++ b/src/themes/dspace/app/home-page/home-news/home-news.component.html @@ -3,25 +3,29 @@
-

DSpace 7

-

DSpace is the world leading open source repository platform that enables - organisations to:

+

Demo of COAR Notify in DSpace 7 +

+

COAR Notify Project is: +

-
    -
  • easily ingest documents, audio, video, datasets and their corresponding Dublin Core - metadata -
  • -
  • open up this content to local and global audiences, thanks to the OAI-PMH interface and - Google Scholar optimizations -
  • -
  • issue permanent urls and trustworthy identifiers, including optional integrations with - handle.net and DataCite DOI -
  • -
-

Join an international community of leading institutions using DSpace.

+

developing and accelerating community adoption of standard, interoperable, and decentralised approach to + linking research outputs hosted in the distributed network of repositories with resources from external services + such as overlay-journals and open peer review services, using linked data notifications. +

+

As part of this project, COAR is funding the + development of platforms and systems to support the exchange of linked data notifications across partner + organisations and the workflows to manage notifications in those platforms and systems. +

+

4Science has been awarded of the Implementation of the + protocol for the DSpace platform and this site hosts the demo of the resulting implementation. +

+

Join an international community of leading institutions using DSpace. +

The test user accounts below have their password set to the name of this - software in lowercase.

+ software in lowercase. +

  • Demo Site Administrator = dspacedemo+admin@gmail.com
  • Demo Community Administrator = dspacedemo+commadmin@gmail.com
  • @@ -31,9 +35,12 @@

    DSpace 7

- - - + + + + Photo by @inspiredimages diff --git a/src/themes/dspace/app/navbar/navbar.component.html b/src/themes/dspace/app/navbar/navbar.component.html index 05afac7d7e9..81f13957431 100644 --- a/src/themes/dspace/app/navbar/navbar.component.html +++ b/src/themes/dspace/app/navbar/navbar.component.html @@ -1,6 +1,9 @@