Skip to content

Commit 180471c

Browse files
committed
Merge remote-tracking branch 'bitbucket4science/dspace-cris-2025_02_x' into task/dspace-cris-2025_02_x/DSC-2256_dspace9
# Conflicts: # src/app/breadcrumbs/breadcrumbs.component.html # src/app/breadcrumbs/breadcrumbs.component.ts # src/app/core/locale/locale.service.spec.ts # src/app/core/locale/locale.service.ts # src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/rendering-types/longtext/longtext.component.ts # src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.ts # src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html # src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts # src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html # src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts # src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts # src/themes/custom/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts # src/themes/custom/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts
2 parents 80b2f71 + 9202925 commit 180471c

21 files changed

Lines changed: 206 additions & 25 deletions

File tree

bitbucket-pipelines.yml

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,18 @@ definitions:
299299
- export CLOUDFRONT_DISTRIBUTION_ID=$(aws cloudfront list-distributions --query "DistributionList.Items[?Comment=='test--${CLOUDFRONT_NAME}'].Id" --output text)
300300
- aws cloudfront create-invalidation --distribution-id $CLOUDFRONT_DISTRIBUTION_ID --paths "/*" || echo "CloudFront distribution $CLOUDFRONT_DISTRIBUTION_ID not found — skipping invalidation."
301301

302+
- step: &check-branch-name-allowed
303+
name: Check allowed branch name
304+
image: alpine:latest
305+
script:
306+
- |
307+
if [[ "$BITBUCKET_BRANCH" = "main-cris" ]] || [[ "$BITBUCKET_BRANCH" == dspace-cris-20*_02_x ]] || [[ "$BITBUCKET_BRANCH" == prod/* ]] || [[ "$BITBUCKET_BRANCH" == test/* ]]; then
308+
echo "Branch $BITBUCKET_BRANCH is allowed."
309+
else
310+
echo "This pipeline can only run on main-cris, dspace-cris-20*_02_x, prod/**, or test/**"
311+
exit 1
312+
fi
313+
302314
pipelines:
303315
custom:
304316
e2e-on-custom-backend:
@@ -312,6 +324,12 @@ pipelines:
312324
- step: *build-and-push
313325
- step: *deploy-on-dev
314326
- step: *find-and-invalidate-cloudfront-dev
327+
deploy-on-staging:
328+
- step: *check-branch-name-allowed
329+
- step: *angular-build
330+
- step: *build-and-push
331+
- step: *deploy-on-staging
332+
- step: *find-and-invalidate-cloudfront-staging
315333
turn-on-dev:
316334
- step: *turn-on-dev
317335
turn-on-staging:
@@ -320,11 +338,12 @@ pipelines:
320338
- step: *turn-on-test
321339
branches:
322340
'main-cris':
341+
- step: *check-branch-name-allowed
323342
- step: *preliminary-operation
324343
- step: *angular-build
325344
- parallel: *parallel-run-tests
326-
- step: *build-and-push
327-
'dspace-cris-2025_02_x':
345+
'dspace-cris-20*_02_x':
346+
- step: *check-branch-name-allowed
328347
- step: *preliminary-operation
329348
- step: *angular-build
330349
- parallel: *parallel-run-tests
@@ -334,6 +353,7 @@ pipelines:
334353
- step: *deploy-on-staging
335354
- step: *find-and-invalidate-cloudfront-staging
336355
'prod/**':
356+
- step: *check-branch-name-allowed
337357
- step: *preliminary-operation
338358
- step: *angular-build
339359
- parallel: *parallel-run-tests
@@ -343,6 +363,7 @@ pipelines:
343363
- step: *deploy-on-staging
344364
- step: *find-and-invalidate-cloudfront-staging
345365
'test/**':
366+
- step: *check-branch-name-allowed
346367
- step: *preliminary-operation
347368
- step: *angular-build
348369
- parallel: *parallel-run-tests

src/app/breadcrumbs/breadcrumbs.component.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
</ng-template>
1717

1818
<ng-template #activeBreadcrumb let-text="text">
19-
<li class="breadcrumb-item active" aria-current="page"><div class="breadcrumb-item-limiter"><span class="text-truncate" [innerHTML]="text | translate"></span></div></li>
19+
<li class="breadcrumb-item active" aria-current="page"><div class="breadcrumb-item-limiter"><span class="text-truncate" [innerHTML]="text | translate | dsEscapeHtml"></span></div></li>
2020
</ng-template>
2121
</ng-container>
22-

src/app/breadcrumbs/breadcrumbs.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
88
import { TranslateModule } from '@ngx-translate/core';
99
import { Observable } from 'rxjs';
1010

11+
import { EscapeHtmlPipe } from '../shared/utils/escape-html.pipe';
1112
import { VarDirective } from '../shared/utils/var.directive';
1213
import { Breadcrumb } from './breadcrumb/breadcrumb.model';
1314
import { BreadcrumbsService } from './breadcrumbs.service';
@@ -21,6 +22,7 @@ import { BreadcrumbsService } from './breadcrumbs.service';
2122
styleUrls: ['./breadcrumbs.component.scss'],
2223
imports: [
2324
AsyncPipe,
25+
EscapeHtmlPipe,
2426
NgbTooltipModule,
2527
NgTemplateOutlet,
2628
RouterLink,

src/app/core/locale/locale.service.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { PLATFORM_ID } from '@angular/core';
12
import {
23
TestBed,
34
waitForAsync,
@@ -36,6 +37,7 @@ describe('LocaleService', () => {
3637
let routeService;
3738
let document;
3839
let spyOnGetLanguage;
40+
const platformId = 'browser';
3941

4042

4143
const translateServiceStub: any = {
@@ -76,6 +78,7 @@ describe('LocaleService', () => {
7678
{ provide: RouteService, useValue: routeServiceStub },
7779
{ provide: TranslateService, useValue: translateServiceStub },
7880
{ provide: Document, useValue: document },
81+
{ provide: PLATFORM_ID, useValue: platformId },
7982
],
8083
});
8184
}));
@@ -86,7 +89,7 @@ describe('LocaleService', () => {
8689
routeService = TestBed.inject(RouteService);
8790
window = new NativeWindowRef();
8891
document = { documentElement: { lang: 'en' } };
89-
service = new LocaleService(window, cookieService, translateService, authService, routeService, document);
92+
service = new LocaleService(window, cookieService, translateService, authService, routeService, document, platformId);
9093
serviceAsAny = service;
9194
spyOnGet = spyOn(cookieService, 'get');
9295
spyOnSet = spyOn(cookieService, 'set');

src/app/core/locale/locale.service.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import { isPlatformBrowser } from '@angular/common';
12
import {
23
DOCUMENT,
34
Inject,
45
Injectable,
56
OnDestroy,
7+
PLATFORM_ID,
68
} from '@angular/core';
79
import { TranslateService } from '@ngx-translate/core';
810
import {
@@ -63,6 +65,7 @@ export class LocaleService implements OnDestroy {
6365
protected authService: AuthService,
6466
protected routeService: RouteService,
6567
@Inject(DOCUMENT) protected document: any,
68+
@Inject(PLATFORM_ID) protected platformId: string,
6669
) {
6770
this.initDefaults();
6871
}
@@ -74,7 +77,9 @@ export class LocaleService implements OnDestroy {
7477
this.routeService.getQueryParameterValue('lang').subscribe(lang => {
7578
if (lang && this.translate.getLangs().includes(lang)) {
7679
this.setCurrentLanguageCode(lang);
77-
this.routeService.removeQueryParam('lang');
80+
if (isPlatformBrowser(this.platformId)) {
81+
this.routeService.removeQueryParam('lang');
82+
}
7883
}
7984
});
8085
}

src/app/core/locale/server-locale.service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { DOCUMENT } from '@angular/common';
22
import {
33
Inject,
44
Injectable,
5+
PLATFORM_ID,
56
} from '@angular/core';
67
import { TranslateService } from '@ngx-translate/core';
78
import {
@@ -44,8 +45,9 @@ export class ServerLocaleService extends LocaleService {
4445
protected authService: AuthService,
4546
protected routeService: RouteService,
4647
@Inject(DOCUMENT) protected document: any,
48+
@Inject(PLATFORM_ID) protected platformId: string,
4749
) {
48-
super(_window, cookie, translate, authService, routeService, document);
50+
super(_window, cookie, translate, authService, routeService, document, platformId);
4951
}
5052

5153
/**

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/rendering-types/longtext/longtext.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="{{field.styleValue}}">
33
<ds-truncatable [id]="truncableId">
44
<ds-truncatable-part [id]="truncableId" [minLines]="3">
5-
<span [innerHTML]="formatText(metadataValue.value)" data-test="formatted-text"></span>
5+
<span [innerHTML]="metadataValue.value | dsEscapeHtml" data-test="formatted-text"></span>
66
</ds-truncatable-part>
77
</ds-truncatable>
88
</div>

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/rendering-types/longtext/longtext.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
22

33
import { TruncatableComponent } from '../../../../../../../shared/truncatable/truncatable.component';
44
import { TruncatablePartComponent } from '../../../../../../../shared/truncatable/truncatable-part/truncatable-part.component';
5+
import { EscapeHtmlPipe } from '../../../../../../../shared/utils/escape-html.pipe';
56
import { RenderingTypeValueModelComponent } from '../rendering-type-value.model';
67

78
/**
@@ -14,6 +15,7 @@ import { RenderingTypeValueModelComponent } from '../rendering-type-value.model'
1415
styleUrls: ['./longtext.component.scss'],
1516
standalone: true,
1617
imports: [
18+
EscapeHtmlPipe,
1719
TruncatableComponent,
1820
TruncatablePartComponent,
1921
],
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
<div [class]="field.styleValue">
2-
<span class="text-value" [attr.lang]="metadataValue.language" [innerHTML]="formatText(metadataValue.value)"></span>
2+
<span class="text-value" [attr.lang]="metadataValue.language" [innerHTML]="metadataValue.value | dsEscapeHtml"></span>
33
</div>

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/rendering-types/text/text.component.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Component } from '@angular/core';
22

3+
import { EscapeHtmlPipe } from '../../../../../../../shared/utils/escape-html.pipe';
34
import { RenderingTypeValueModelComponent } from '../rendering-type-value.model';
45

56
/**
@@ -11,6 +12,9 @@ import { RenderingTypeValueModelComponent } from '../rendering-type-value.model'
1112
templateUrl: './text.component.html',
1213
styleUrls: ['./text.component.scss'],
1314
standalone: true,
15+
imports: [
16+
EscapeHtmlPipe,
17+
],
1418
})
1519
export class TextComponent extends RenderingTypeValueModelComponent {
1620

0 commit comments

Comments
 (0)