MOBILE-4639 badges: Fix structure of alignments

main
Albert Gasset 2024-09-17 16:23:15 +02:00
parent 404cbf7965
commit 24fddd8f7e
2 changed files with 23 additions and 21 deletions

View File

@ -217,21 +217,16 @@
</ion-item-group>
<!-- Competencies alignment -->
<ion-item-group *ngIf="badge.alignment">
<ion-item-group *ngIf="badge.alignment?.length">
<ion-item-divider>
<ion-label>
<h2>{{ 'addon.badges.alignment' | translate}}</h2>
</ion-label>
</ion-item-divider>
<ion-item class="ion-text-wrap" *ngFor="let alignment of badge.alignment" [href]="alignment.targeturl" core-link
<ion-item class="ion-text-wrap" *ngFor="let alignment of badge.alignment" [href]="alignment.targetUrl" core-link
[autoLogin]="false">
<ion-label>
<p class="item-heading">{{ alignment.targetname }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="badge.alignment.length === 0">
<ion-label>
<p class="item-heading">{{ 'addon.badges.noalignment' | translate}}</p>
<p class="item-heading">{{ alignment.targetName }}</p>
</ion-label>
</ion-item>
</ion-item-group>

View File

@ -78,15 +78,18 @@ export class AddonBadgesProvider {
throw new CoreError('Invalid badges response');
}
// In 3.7, competencies was renamed to alignment. Rename the property in 3.6 too.
response.badges.forEach((badge) => {
// In 3.7, competencies was renamed to alignment.
if (!badge.alignment && badge.competencies) {
badge.alignment = badge.competencies.map((competency) => ({
targetName: competency.targetname,
targetUrl: competency.targeturl,
}));
}
badge.alignment = badge.alignment || badge.competencies;
// Check that the alignment is valid, they were broken in 3.7.
if (badge.alignment && badge.alignment[0] && badge.alignment[0].targetname === undefined) {
// If any badge lacks targetname it means they are affected by the Moodle bug, don't display them.
delete badge.alignment;
}
// Exclude alignments without targetName, we can't display them.
badge.alignment = badge.alignment?.filter((alignment) => alignment.targetName);
});
return response.badges;
@ -138,11 +141,15 @@ export class AddonBadgesProvider {
data,
preSets,
);
if (!response || !response.badge?.[0]) {
const badge = response?.badge?.[0];
if (!badge) {
throw new CoreError('Invalid badge response');
}
return response.badge[0];
// Exclude alignments without targetName, we can't display them.
badge.alignment = badge.alignment?.filter((alignment) => alignment.targetName);
return badge;
}
/**
@ -242,11 +249,11 @@ export type AddonBadgesUserBadge = {
alignment?: { // @since 3.7. Calculated by the app for 3.6 sites. Badge alignments.
id?: number; // Alignment id.
badgeid?: number; // Badge id.
targetname?: string; // Target name.
targeturl?: string; // Target URL.
targetdescription?: string; // Target description.
targetframework?: string; // Target framework.
targetcode?: string; // Target code.
targetName?: string; // Target name.
targetUrl?: string; // Target URL.
targetDescription?: string; // Target description.
targetFramework?: string; // Target framework.
targetCode?: string; // Target code.
}[];
competencies?: { // @deprecatedonmoodle since 3.7. @since 3.6. In 3.7 it was renamed to alignment.
id?: number; // Alignment id.