Skip to content

Commit 62ce8a3

Browse files
authored
Merge pull request #2220 from crazyserver/MOBILE-3213
Mobile 3213
2 parents ee648ee + 7a1b49c commit 62ce8a3

File tree

19 files changed

+125
-45
lines changed

19 files changed

+125
-45
lines changed

src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/addon-block-recentlyaccessedcourses.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<ion-item-divider>
22
<h2>{{ 'addon.block_recentlyaccessedcourses.pluginname' | translate }}</h2>
3-
<div *ngIf="downloadEnabled && courses && courses.length > 1" class="core-button-spinner" item-end>
3+
<div *ngIf="downloadCoursesEnabled && downloadEnabled && courses && courses.length > 1" class="core-button-spinner" item-end>
44
<button *ngIf="prefetchCoursesData.icon && prefetchCoursesData.icon != 'spinner'" ion-button icon-only clear color="dark" (click)="prefetchCourses()">
55
<core-icon [name]="prefetchCoursesData.icon"></core-icon>
66
</button>
@@ -13,7 +13,7 @@ <h2>{{ 'addon.block_recentlyaccessedcourses.pluginname' | translate }}</h2>
1313
<!-- List of courses. -->
1414
<div class="core-horizontal-scroll">
1515
<ng-container *ngFor="let course of courses">
16-
<core-courses-course-progress [course]="course" class="core-recentlyaccessedcourses" [showDownload]="downloadEnabled"></core-courses-course-progress>
16+
<core-courses-course-progress [course]="course" class="core-recentlyaccessedcourses" [showDownload]="downloadCourseEnabled && downloadEnabled"></core-courses-course-progress>
1717
</ng-container>
1818
</div>
1919
</core-loading>

src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,13 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom
3737
icon: '',
3838
badge: ''
3939
};
40+
downloadCourseEnabled: boolean;
41+
downloadCoursesEnabled: boolean;
4042

4143
protected prefetchIconsInitialized = false;
4244
protected isDestroyed;
4345
protected coursesObserver;
46+
protected updateSiteObserver;
4447
protected courseIds = [];
4548
protected fetchContentDefaultError = 'Error getting recent courses data.';
4649

@@ -58,6 +61,17 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom
5861
*/
5962
ngOnInit(): void {
6063

64+
// Refresh the enabled flags if enabled.
65+
this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite();
66+
this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
67+
68+
// Refresh the enabled flags if site is updated.
69+
this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
70+
this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite();
71+
this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
72+
73+
}, this.sitesProvider.getCurrentSiteId());
74+
6175
this.coursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => {
6276
this.refreshContent();
6377
}, this.sitesProvider.getCurrentSiteId());
@@ -154,5 +168,6 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom
154168
ngOnDestroy(): void {
155169
this.isDestroyed = true;
156170
this.coursesObserver && this.coursesObserver.off();
171+
this.updateSiteObserver && this.updateSiteObserver.off();
157172
}
158173
}

src/addon/block/starredcourses/components/starredcourses/addon-block-starredcourses.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<ion-item-divider>
22
<h2>{{ 'addon.block_starredcourses.pluginname' | translate }}</h2>
3-
<div *ngIf="downloadEnabled && courses && courses.length > 1" class="core-button-spinner" item-end>
3+
<div *ngIf="downloadCoursesEnabled && downloadEnabled && courses && courses.length > 1" class="core-button-spinner" item-end>
44
<button *ngIf="prefetchCoursesData.icon && prefetchCoursesData.icon != 'spinner'" ion-button icon-only clear color="dark" (click)="prefetchCourses()">
55
<core-icon [name]="prefetchCoursesData.icon"></core-icon>
66
</button>
@@ -13,7 +13,7 @@ <h2>{{ 'addon.block_starredcourses.pluginname' | translate }}</h2>
1313
<!-- List of courses. -->
1414
<div class="core-horizontal-scroll">
1515
<ng-container *ngFor="let course of courses">
16-
<core-courses-course-progress [course]="course" class="core-block_starredcourses" [showDownload]="downloadEnabled"></core-courses-course-progress>
16+
<core-courses-course-progress [course]="course" class="core-block_starredcourses" [showDownload]="downloadCourseEnabled && downloadEnabled"></core-courses-course-progress>
1717
</ng-container>
1818
</div>
1919
</core-loading>

src/addon/block/starredcourses/components/starredcourses/starredcourses.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,13 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im
3737
icon: '',
3838
badge: ''
3939
};
40+
downloadCourseEnabled: boolean;
41+
downloadCoursesEnabled: boolean;
4042

4143
protected prefetchIconsInitialized = false;
4244
protected isDestroyed;
4345
protected coursesObserver;
46+
protected updateSiteObserver;
4447
protected courseIds = [];
4548
protected fetchContentDefaultError = 'Error getting starred courses data.';
4649

@@ -58,6 +61,17 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im
5861
*/
5962
ngOnInit(): void {
6063

64+
// Refresh the enabled flags if enabled.
65+
this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite();
66+
this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
67+
68+
// Refresh the enabled flags if site is updated.
69+
this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
70+
this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite();
71+
this.downloadCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
72+
73+
}, this.sitesProvider.getCurrentSiteId());
74+
6175
this.coursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => {
6276
this.refreshContent();
6377
}, this.sitesProvider.getCurrentSiteId());
@@ -154,5 +168,6 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im
154168
ngOnDestroy(): void {
155169
this.isDestroyed = true;
156170
this.coursesObserver && this.coursesObserver.off();
171+
this.updateSiteObserver && this.updateSiteObserver.off();
157172
}
158173
}

src/addon/block/timeline/components/events/events.scss

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,32 @@ ion-app.app-root addon-block-timeline-events {
1414
pointer-events: auto;
1515
}
1616
}
17+
18+
ion-app.app-root core-courses-course-progress addon-block-timeline-events {
19+
@include media-breakpoint-up(md) {
20+
.hidden-tablet {
21+
display: block !important;
22+
opacity: 1 !important;
23+
&.button[disabled] {
24+
opacity: .4 !important;
25+
}
26+
}
27+
.hidden-phone {
28+
display: none !important;
29+
opacity: 0 !important;
30+
}
31+
}
32+
@include media-breakpoint-up(lg) {
33+
.hidden-tablet {
34+
display: none !important;
35+
opacity: 0 !important;
36+
}
37+
.hidden-phone {
38+
display: block !important;
39+
opacity: 1 !important;
40+
&.button[disabled] {
41+
opacity: .4 !important;
42+
}
43+
}
44+
}
45+
}

src/addon/mod/assign/providers/assign-sync.ts

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { CoreSyncBaseProvider } from '@classes/base-sync';
2929
import { AddonModAssignProvider, AddonModAssignAssign } from './assign';
3030
import { AddonModAssignOfflineProvider } from './assign-offline';
3131
import { AddonModAssignSubmissionDelegate } from './submission-delegate';
32+
import { AddonModAssignFeedbackDelegate } from './feedback-delegate';
3233

3334
/**
3435
* Data returned by an assign sync.
@@ -55,13 +56,22 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider {
5556

5657
protected componentTranslate: string;
5758

58-
constructor(loggerProvider: CoreLoggerProvider, sitesProvider: CoreSitesProvider, appProvider: CoreAppProvider,
59-
syncProvider: CoreSyncProvider, textUtils: CoreTextUtilsProvider, translate: TranslateService,
60-
private courseProvider: CoreCourseProvider, private eventsProvider: CoreEventsProvider,
61-
private assignProvider: AddonModAssignProvider, private assignOfflineProvider: AddonModAssignOfflineProvider,
62-
private utils: CoreUtilsProvider, private submissionDelegate: AddonModAssignSubmissionDelegate,
63-
private gradesHelper: CoreGradesHelperProvider, timeUtils: CoreTimeUtilsProvider,
64-
private logHelper: CoreCourseLogHelperProvider) {
59+
constructor(loggerProvider: CoreLoggerProvider,
60+
sitesProvider: CoreSitesProvider,
61+
appProvider: CoreAppProvider,
62+
syncProvider: CoreSyncProvider,
63+
textUtils: CoreTextUtilsProvider,
64+
translate: TranslateService,
65+
timeUtils: CoreTimeUtilsProvider,
66+
protected courseProvider: CoreCourseProvider,
67+
protected eventsProvider: CoreEventsProvider,
68+
protected assignProvider: AddonModAssignProvider,
69+
protected assignOfflineProvider: AddonModAssignOfflineProvider,
70+
protected utils: CoreUtilsProvider,
71+
protected submissionDelegate: AddonModAssignSubmissionDelegate,
72+
protected feedbackDelegate: AddonModAssignFeedbackDelegate,
73+
protected gradesHelper: CoreGradesHelperProvider,
74+
protected logHelper: CoreCourseLogHelperProvider) {
6575

6676
super('AddonModAssignSyncProvider', loggerProvider, sitesProvider, appProvider, syncProvider, textUtils, translate,
6777
timeUtils);
@@ -403,9 +413,19 @@ export class AddonModAssignSyncProvider extends CoreSyncBaseProvider {
403413
return this.assignProvider.submitGradingFormOnline(assign.id, userId, offlineData.grade, offlineData.attemptnumber,
404414
offlineData.addattempt, offlineData.workflowstate, offlineData.applytoall, offlineData.outcomes,
405415
offlineData.plugindata, siteId).then(() => {
416+
// Grades sent.
417+
// Discard grades drafts.
418+
const promises = [];
419+
if (status.feedback && status.feedback.plugins) {
420+
status.feedback.plugins.forEach((plugin) => {
421+
promises.push(this.feedbackDelegate.discardPluginFeedbackData(assign.id, userId, plugin, siteId));
422+
});
423+
}
406424

407-
// Grades sent, update cached data. No need to block the user for this.
408-
this.assignProvider.getSubmissionStatus(assign.id, userId, undefined, false, true, true, siteId);
425+
// Update cached data.
426+
promises.push(this.assignProvider.getSubmissionStatus(assign.id, userId, undefined, false, true, true, siteId));
427+
428+
return Promise.all(promises);
409429
}).catch((error) => {
410430
if (error && this.utils.isWebServiceError(error)) {
411431
// The WebService has thrown an error, this means it cannot be submitted. Discard the offline data.

src/addon/mod/data/components/index/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp
286286

287287
let entriesHTML = this.dataHelper.getTemplate(this.data, 'listtemplateheader', this.fieldsArray);
288288

289+
console.error(entriesHTML);
289290
// Get first entry from the whole list.
290291
if (!this.search.searching || !this.firstEntry) {
291292
this.firstEntry = this.entries[0].id;
@@ -305,7 +306,8 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp
305306
});
306307
entriesHTML += this.dataHelper.getTemplate(this.data, 'listtemplatefooter', this.fieldsArray);
307308

308-
this.entriesRendered = entriesHTML;
309+
this.entriesRendered = this.domUtils.fixHtml(entriesHTML);
310+
console.error(entriesHTML);
309311

310312
// Pass the input data to the component.
311313
this.jsData = {

src/addon/mod/data/data.scss

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
white-space: normal;
44
word-break: break-word;
55
padding: $content-padding;
6+
@include safe-area-padding-horizontal($content-padding !important, $content-padding !important);
67
background-color: $white;
78
border-top-width: 1px;
89
border-bottom-width: 1px;
@@ -31,6 +32,18 @@
3132
@extend .col;
3233
min-height: auto;
3334
}
35+
36+
// Do not let block elements to define widths or heights.
37+
address, article, aside, blockquote, canvas, dd, div, dl, dt, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6,
38+
header, hr, li, main, nav, noscript, ol, p, pre, section, table, tfoot, ul, video {
39+
width: auto !important;
40+
height: auto !important;
41+
min-width: auto !important;
42+
min-height: auto !important;
43+
// Avoid having one entry over another.
44+
max-height: none !important;
45+
46+
}
3447
}
3548

3649
page-addon-mod-data-search,

src/addon/mod/data/providers/helper.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,8 +599,10 @@ export class AddonModDataHelperProvider {
599599
getTemplate(data: any, type: string, fields: any[]): string {
600600
let template = data[type] || this.getDefaultTemplate(type, fields);
601601

602-
// Try to fix syntax errors so the template can be parsed by Angular.
603-
template = this.domUtils.fixHtml(template);
602+
if (type != 'listtemplateheader' && type != 'listtemplatefooter') {
603+
// Try to fix syntax errors so the template can be parsed by Angular.
604+
template = this.domUtils.fixHtml(template);
605+
}
604606

605607
// Add core-link directive to links.
606608
template = template.replace(/<a ([^>]*href="[^>]*)>/ig, (match, attributes) => {

src/addon/mod/workshop/components/index/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ export class AddonModWorkshopIndexComponent extends CoreCourseModuleMainActivity
154154
promises.push(this.workshopProvider.invalidateReviewerAssesmentsData(this.workshop.id));
155155
}
156156
promises.push(this.workshopProvider.invalidateGradesData(this.workshop.id));
157+
promises.push(this.workshopProvider.invalidateWorkshopWSData(this.workshop.id));
157158
}
158159

159160
return Promise.all(promises);

0 commit comments

Comments
 (0)