diff --git a/src/core/courses/pages/my-courses/my-courses.ts b/src/core/courses/pages/my-courses/my-courses.ts
index f59d1051b..da0bd3dae 100644
--- a/src/core/courses/pages/my-courses/my-courses.ts
+++ b/src/core/courses/pages/my-courses/my-courses.ts
@@ -37,6 +37,7 @@ export class CoreCoursesMyCoursesPage implements OnDestroy {
showFilter = false;
coursesLoaded = false;
prefetchCoursesData: any = {};
+ downloadAllCoursesEnabled: boolean;
protected prefetchIconInitialized = false;
protected myCoursesObserver;
@@ -53,6 +54,7 @@ export class CoreCoursesMyCoursesPage implements OnDestroy {
*/
ionViewDidLoad(): void {
this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
this.fetchCourses().finally(() => {
this.coursesLoaded = true;
@@ -62,8 +64,17 @@ export class CoreCoursesMyCoursesPage implements OnDestroy {
this.fetchCourses();
}, this.sitesProvider.getCurrentSiteId());
+ // Refresh the enabled flags if site is updated.
this.siteUpdatedObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
+ const wasEnabled = this.downloadAllCoursesEnabled;
+
this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
+
+ if (!wasEnabled && this.downloadAllCoursesEnabled && this.coursesLoaded) {
+ // Download all courses is enabled now, initialize it.
+ this.initPrefetchCoursesIcon();
+ }
}, this.sitesProvider.getCurrentSiteId());
}
@@ -176,7 +187,7 @@ export class CoreCoursesMyCoursesPage implements OnDestroy {
* Initialize the prefetch icon for the list of courses.
*/
protected initPrefetchCoursesIcon(): void {
- if (this.prefetchIconInitialized) {
+ if (this.prefetchIconInitialized || !this.downloadAllCoursesEnabled) {
// Already initialized.
return;
}
diff --git a/src/core/courses/pages/my-overview/my-overview.html b/src/core/courses/pages/my-overview/my-overview.html
index a6a5e8481..8771c672a 100644
--- a/src/core/courses/pages/my-overview/my-overview.html
+++ b/src/core/courses/pages/my-overview/my-overview.html
@@ -71,7 +71,7 @@
-
1" class="core-button-spinner" float-end>
+
1" class="core-button-spinner" float-end>
diff --git a/src/core/courses/pages/my-overview/my-overview.ts b/src/core/courses/pages/my-overview/my-overview.ts
index b24c5b184..956267823 100644
--- a/src/core/courses/pages/my-overview/my-overview.ts
+++ b/src/core/courses/pages/my-overview/my-overview.ts
@@ -14,6 +14,7 @@
import { Component, OnDestroy } from '@angular/core';
import { IonicPage, NavController } from 'ionic-angular';
+import { CoreEventsProvider } from '@providers/events';
import { CoreSitesProvider } from '@providers/sites';
import { CoreDomUtilsProvider } from '@providers/utils/dom';
import { CoreCoursesProvider } from '../../providers/courses';
@@ -64,20 +65,38 @@ export class CoreCoursesMyOverviewPage implements OnDestroy {
past: {},
future: {}
};
+ downloadAllCoursesEnabled: boolean;
protected prefetchIconsInitialized = false;
protected isDestroyed;
+ protected updateSiteObserver;
constructor(private navCtrl: NavController, private coursesProvider: CoreCoursesProvider,
private domUtils: CoreDomUtilsProvider, private myOverviewProvider: CoreCoursesMyOverviewProvider,
private courseHelper: CoreCourseHelperProvider, private sitesProvider: CoreSitesProvider,
- private siteHomeProvider: CoreSiteHomeProvider, private courseOptionsDelegate: CoreCourseOptionsDelegate) { }
+ private siteHomeProvider: CoreSiteHomeProvider, private courseOptionsDelegate: CoreCourseOptionsDelegate,
+ private eventsProvider: CoreEventsProvider) {
+ }
/**
* View loaded.
*/
ionViewDidLoad(): void {
this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
+
+ // Refresh the enabled flags if site is updated.
+ this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
+ const wasEnabled = this.downloadAllCoursesEnabled;
+
+ this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
+
+ if (!wasEnabled && this.downloadAllCoursesEnabled && this.courses.loaded) {
+ // Download all courses is enabled now, initialize it.
+ this.initPrefetchCoursesIcons();
+ }
+ });
// Decide which tab to load first.
this.siteHomeProvider.isAvailable().then((enabled) => {
@@ -378,7 +397,7 @@ export class CoreCoursesMyOverviewPage implements OnDestroy {
* Initialize the prefetch icon for selected courses.
*/
protected initPrefetchCoursesIcons(): void {
- if (this.prefetchIconsInitialized) {
+ if (this.prefetchIconsInitialized || !this.downloadAllCoursesEnabled) {
// Already initialized.
return;
}
@@ -410,5 +429,6 @@ export class CoreCoursesMyOverviewPage implements OnDestroy {
*/
ngOnDestroy(): void {
this.isDestroyed = true;
+ this.updateSiteObserver && this.updateSiteObserver.off();
}
}
diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts
index 84a8ba485..8f825e8a3 100644
--- a/src/core/courses/providers/courses.ts
+++ b/src/core/courses/providers/courses.ts
@@ -120,6 +120,54 @@ export class CoreCoursesProvider {
});
}
+ /**
+ * Check if download a whole course is disabled in a certain site.
+ *
+ * @param {string} [siteId] Site Id. If not defined, use current site.
+ * @return {Promise} Promise resolved with true if disabled, rejected or resolved with false otherwise.
+ */
+ isDownloadCourseDisabled(siteId?: string): Promise {
+ return this.sitesProvider.getSite(siteId).then((site) => {
+ return this.isDownloadCoursesDisabledInSite(site);
+ });
+ }
+
+ /**
+ * Check if download a whole course is disabled in a certain site.
+ *
+ * @param {CoreSite} [site] Site. If not defined, use current site.
+ * @return {boolean} Whether it's disabled.
+ */
+ isDownloadCourseDisabledInSite(site?: CoreSite): boolean {
+ site = site || this.sitesProvider.getCurrentSite();
+
+ return site.isFeatureDisabled('NoDelegate_CoreCourseDownload');
+ }
+
+ /**
+ * Check if download all courses is disabled in a certain site.
+ *
+ * @param {string} [siteId] Site Id. If not defined, use current site.
+ * @return {Promise} Promise resolved with true if disabled, rejected or resolved with false otherwise.
+ */
+ isDownloadCoursesDisabled(siteId?: string): Promise {
+ return this.sitesProvider.getSite(siteId).then((site) => {
+ return this.isDownloadCoursesDisabledInSite(site);
+ });
+ }
+
+ /**
+ * Check if download all courses is disabled in a certain site.
+ *
+ * @param {CoreSite} [site] Site. If not defined, use current site.
+ * @return {boolean} Whether it's disabled.
+ */
+ isDownloadCoursesDisabledInSite(site?: CoreSite): boolean {
+ site = site || this.sitesProvider.getCurrentSite();
+
+ return site.isFeatureDisabled('NoDelegate_CoreCoursesDownload');
+ }
+
/**
* Check if My Courses is disabled in a certain site.
*