MOBILE-3810 module: Add data to sync to module info
parent
f31fc5a6df
commit
a0687821ae
|
@ -31,23 +31,13 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline">
|
||||
<ion-list inset="true" description *ngIf="assign && assign.introattachments && assign.introattachments.length">
|
||||
<core-file *ngFor="let file of assign.introattachments" [file]="file" [component]="component" [componentId]="componentId">
|
||||
</core-file>
|
||||
</ion-list>
|
||||
</core-course-module-info>
|
||||
|
||||
|
||||
|
||||
<!-- Assign has something offline. -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- User can view all submissions (teacher). -->
|
||||
<ng-container *ngIf="assign && canViewAllSubmissions">
|
||||
<ion-list class="core-list-align-detail-right">
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Activity availability messages -->
|
||||
|
@ -58,14 +58,6 @@
|
|||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Choice done in offline but not synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate:{$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Inform what will happen with the choices. -->
|
||||
<ion-card class="core-info-card" *ngIf="canEdit && publishInfo && options.length">
|
||||
<ion-item>
|
||||
|
|
|
@ -40,17 +40,9 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline || hasOfflineRatings">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Data done in offline but not synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline || hasOfflineRatings">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<ion-item class="ion-text-wrap" *ngIf="groupInfo && (groupInfo.separateGroups || groupInfo.visibleGroups)">
|
||||
<ion-label id="addon-data-groupslabel">
|
||||
<ng-container *ngIf="groupInfo.separateGroups">{{'core.groupsseparate' | translate }}</ng-container>
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<core-tabs [hideUntil]="tabsReady" [selectedIndex]="firstSelectedTab">
|
||||
|
@ -106,14 +106,6 @@
|
|||
<core-loading [hideUntil]="tabsLoaded.overview">
|
||||
<ng-container *ngTemplateOutlet="basicInfo"></ng-container>
|
||||
|
||||
<!-- Feedback done in offline but not synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate:{$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<ion-card class="core-info-card" *ngIf="access && access.cancomplete && !access.isopen">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-question-circle" slot="start" aria-hidden="true"></ion-icon>
|
||||
|
|
|
@ -39,8 +39,8 @@
|
|||
<core-loading [hideUntil]="discussions.loaded">
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()"
|
||||
[description]="forum && forum.type != 'single' && description" [component]="component"
|
||||
[componentId]="componentId" [courseId]="courseId">
|
||||
[description]="forum && forum.type != 'single' && description" [component]="component" [componentId]="componentId"
|
||||
[courseId]="courseId" [hasDataToSync]="hasOffline || hasOfflineRatings">
|
||||
<ion-item>
|
||||
<ion-label>
|
||||
{{descriptionNote}}
|
||||
|
@ -48,14 +48,6 @@
|
|||
</ion-item>
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Forum discussions found to be synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline || hasOfflineRatings">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate:{$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Cut-off date or due date message -->
|
||||
<ion-card class="core-info-card" *ngIf="availabilityMessage">
|
||||
<ion-item>
|
||||
|
|
|
@ -51,17 +51,9 @@
|
|||
<core-loading [hideUntil]="loaded">
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info *ngIf="!isSearch" [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline || hasOfflineRatings">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Has offline data to be synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline || hasOfflineRatings">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate:{$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<ion-list *ngIf="!isSearch && entries.offlineEntries.length > 0">
|
||||
<ion-item-divider>
|
||||
<ion-label>
|
||||
|
|
|
@ -37,17 +37,9 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Offline data stored. -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Offline disabled. -->
|
||||
<ion-card class="core-warning-card" *ngIf="!siteCanDownload && playing">
|
||||
<ion-item>
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Prevent access messages. Only show the first one. -->
|
||||
|
@ -45,14 +45,6 @@
|
|||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Lesson has data to be synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Input password for protected lessons. -->
|
||||
<ion-card *ngIf="askPassword">
|
||||
<form (ngSubmit)="submitPassword($event, passwordinput)" #passwordForm>
|
||||
|
|
|
@ -30,7 +30,8 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId"
|
||||
[hasDataToSync]="buttonText && hasOffline && !showStatusSpinner">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Access rules description messages. -->
|
||||
|
@ -194,14 +195,6 @@
|
|||
</ion-label>
|
||||
</ion-item>
|
||||
|
||||
<!-- Quiz has data to be synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="buttonText && hasOffline && !showStatusSpinner">
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Other warnings. -->
|
||||
<ion-item class="core-warning-item ion-text-wrap" *ngIf="hasSupportedQuestions && unsupportedQuestions.length">
|
||||
<ion-label>
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [description]="description"
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId">
|
||||
[component]="component" [componentId]="componentId" [courseId]="courseId" [hasDataToSync]="!errorMessage && hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Warning message. -->
|
||||
|
@ -113,14 +113,6 @@
|
|||
</ion-list>
|
||||
</ion-card>
|
||||
|
||||
<!-- Synchronization warning. -->
|
||||
<ion-card class="core-warning-card" *ngIf="!errorMessage && hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- TOC. -->
|
||||
<ion-card *ngIf="scorm && organizations && !skip &&
|
||||
((scorm.displaycoursestructure && organizations.length) || organizations.length > 1)" class="addon-mod_scorm-toc">
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()"
|
||||
[description]="survey && !survey.surveydone && !hasOffline && description" [component]="component"
|
||||
[componentId]="componentId" [courseId]="courseId">
|
||||
[description]="survey && !survey.surveydone && !hasOffline && description" [component]="component" [componentId]="componentId"
|
||||
[courseId]="courseId" [hasDataToSync]="hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<!-- Survey already done -->
|
||||
|
@ -44,14 +44,6 @@
|
|||
</ion-button>
|
||||
</ion-card>
|
||||
|
||||
<!-- Survey done in offline but not synchronized -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Survey questions -->
|
||||
<form *ngIf="survey && !survey.surveydone && !hasOffline && questions && questions.length">
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
<core-loading [hideUntil]="loaded">
|
||||
|
||||
<!-- Activity info. -->
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()">
|
||||
<core-course-module-info [module]="module" (completionChanged)="onCompletionChange()" [hasDataToSync]="hasOffline">
|
||||
</core-course-module-info>
|
||||
|
||||
<ion-card *ngIf="phases">
|
||||
|
@ -60,14 +60,6 @@
|
|||
</ng-container>
|
||||
</ion-card>
|
||||
|
||||
<!-- Has something offline. -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasOffline">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleName} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<!-- Description (setup phase only) -->
|
||||
<ion-card *ngIf="description && workshop && workshop!.phase == PHASE_SETUP">
|
||||
<ion-item class="ion-text-wrap">
|
||||
|
|
|
@ -35,3 +35,11 @@
|
|||
</ion-label>
|
||||
</ion-item>
|
||||
<ng-content></ng-content>
|
||||
|
||||
<!-- Activity has something offline. -->
|
||||
<ion-card class="core-warning-card" *ngIf="hasDataToSync">
|
||||
<ion-item>
|
||||
<ion-icon name="fas-exclamation-triangle" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>{{ 'core.hasdatatosync' | translate: {$a: moduleNameTranslated} }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-card>
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
display: block;
|
||||
box-shadow: 0px 3px 3px rgba(var(--drop-shadow));
|
||||
margin-bottom: 8px;
|
||||
padding-bottom: 1px; // To allow margins inside.
|
||||
background-color: var(--contrast-background);
|
||||
|
||||
@include padding-horizontal(var(--ion-safe-area-left), var(--ion-safe-area-right));
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
// limitations under the License.
|
||||
|
||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||
import { CoreCourse } from '@features/course/services/course';
|
||||
import { CoreCourseModule, CoreCourseModuleCompletionData } from '@features/course/services/course-helper';
|
||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
|
||||
import { CoreSites } from '@services/sites';
|
||||
|
@ -42,10 +43,13 @@ export class CoreCourseModuleInfoComponent implements OnInit {
|
|||
|
||||
@Input() description?: string | false; // The description to display. If false, no description will be shown.
|
||||
|
||||
@Input() hasDataToSync = false; // If the activity has any data to be synced.
|
||||
|
||||
@Output() completionChanged = new EventEmitter<CoreCourseModuleCompletionData>(); // Notify when completion changes.
|
||||
|
||||
modicon = '';
|
||||
showCompletion = false; // Whether to show completion.
|
||||
moduleNameTranslated = '';
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
|
@ -53,6 +57,8 @@ export class CoreCourseModuleInfoComponent implements OnInit {
|
|||
async ngOnInit(): Promise<void> {
|
||||
this.modicon = await CoreCourseModuleDelegate.getModuleIconSrc(this.module.modname, this.module.modicon, this.module);
|
||||
|
||||
this.moduleNameTranslated = CoreCourse.translateModuleName(this.module.modname || '');
|
||||
|
||||
this.showCompletion = CoreSites.getRequiredCurrentSite().isVersionGreaterEqualThan('3.11');
|
||||
}
|
||||
|
||||
|
|
|
@ -109,7 +109,6 @@ export class CoreCoursesDashboardPage implements OnInit, OnDestroy {
|
|||
this.blocks = [];
|
||||
}
|
||||
|
||||
// this.dashboardEnabled = this.blockDelegate.hasSupportedBlock(this.blocks);
|
||||
this.loaded = true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue