diff --git a/src/config.json b/src/config.json index 245bd890e..71864677a 100644 --- a/src/config.json +++ b/src/config.json @@ -94,5 +94,12 @@ "statusbarlighttextremotetheme": true, "enableanalytics": false, "forceColorScheme": "", - "webviewscheme": "moodleappfs" + "webviewscheme": "moodleappfs", + "appstores": { + "android": "com.moodle.moodlemobile", + "ios": "id633359593", + "windows": "moodle-desktop/9p9bwvhdc8c8", + "mac": "id1255924440", + "linux": "https://download.moodle.org/desktop/download.php?platform=linux&arch=64" + } } diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 1bd6a43f6..c904be356 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -16,7 +16,7 @@ import { Injectable } from '@angular/core'; import { Location } from '@angular/common'; import { Platform, AlertController, NavController, NavOptions } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; -import { CoreAppProvider } from '@providers/app'; +import { CoreAppProvider, CoreStoreConfig } from '@providers/app'; import { CoreConfigProvider } from '@providers/config'; import { CoreEventsProvider } from '@providers/events'; import { CoreInitDelegate } from '@providers/init'; @@ -1180,13 +1180,7 @@ export class CoreLoginHelperProvider { * @param message The warning message. */ protected showWorkplaceNoticeModal(message: string): void { - let link; - - if (this.platform.is('android')) { - link = 'market://details?id=com.moodle.workplace'; - } else if (this.platform.is('ios')) { - link = 'itms-apps://itunes.apple.com/app/id1470929705'; - } + const link = this.appProvider.getAppStoreUrl({android: 'com.moodle.workplace', ios: 'id1470929705' }); this.showDownloadAppNoticeModal(message, link); } @@ -1197,20 +1191,12 @@ export class CoreLoginHelperProvider { * @param message The warning message. */ protected showMoodleAppNoticeModal(message: string): void { - let link; + const storesConfig: CoreStoreConfig = CoreConfigConstants.appstores; + storesConfig.desktop = 'https://download.moodle.org/desktop/'; + storesConfig.mobile = 'https://download.moodle.org/mobile/'; + storesConfig.default = 'https://download.moodle.org/mobile/'; - if (this.appProvider.isWindows()) { - link = 'https://download.moodle.org/desktop/download.php?platform=windows'; - } else if (this.appProvider.isLinux()) { - link = 'https://download.moodle.org/desktop/download.php?platform=linux&arch=' + - (this.appProvider.is64Bits() ? '64' : '32'); - } else if (this.appProvider.isMac()) { - link = 'itms-apps://itunes.apple.com/app/id1255924440'; - } else if (this.platform.is('android')) { - link = 'market://details?id=com.moodle.moodlemobile'; - } else if (this.platform.is('ios')) { - link = 'itms-apps://itunes.apple.com/app/id633359593'; - } + const link = this.appProvider.getAppStoreUrl(storesConfig); this.showDownloadAppNoticeModal(message, link); } diff --git a/src/providers/app.ts b/src/providers/app.ts index 4d29185e5..8f0625765 100644 --- a/src/providers/app.ts +++ b/src/providers/app.ts @@ -50,6 +50,51 @@ export interface CoreRedirectData { timemodified?: number; } +/** + * Store config data. + */ +export interface CoreStoreConfig { + /** + * ID of the Apple store where the desktop Mac app is uploaded. + */ + mac?: string; + + /** + * ID of the Windows store where the desktop Windows app is uploaded. + */ + windows?: string; + + /** + * Url with the desktop linux download link. + */ + linux?: string; + + /** + * Fallback URL when the desktop options is not set. + */ + desktop?: string; + + /** + * ID of the Apple store where the mobile iOS app is uploaded. + */ + ios?: string; + + /** + * ID of the Google play store where the android app is uploaded. + */ + android?: string; + + /** + * Fallback URL when the mobile options is not set. + */ + mobile?: string; + + /** + * Fallback URL when the other fallbacks options are not set. + */ + default?: string; +} + /** * App DB schema and migration function. */ @@ -255,6 +300,44 @@ export class CoreAppProvider { return this.appCtrl.getRootNavs()[0]; } + /** + * Get app store URL. + * + * @param storesConfig Config params to send the user to the right place. + * @return Store URL. + */ + getAppStoreUrl(storesConfig: CoreStoreConfig): string { + if (this.isMac() && storesConfig.mac) { + return 'itms-apps://itunes.apple.com/app/' + storesConfig.mac; + } + + if (this.isWindows() && storesConfig.windows) { + return 'https://www.microsoft.com/p/' + storesConfig.windows; + } + + if (this.isLinux() && storesConfig.linux) { + return storesConfig.linux; + } + + if (this.isDesktop() && storesConfig.desktop) { + return storesConfig.desktop; + } + + if (this.isIOS() && storesConfig.ios) { + return 'itms-apps://itunes.apple.com/app/' + storesConfig.ios; + } + + if (this.isAndroid() && storesConfig.android) { + return 'market://details?id=' + storesConfig.android; + } + + if (this.isMobile() && storesConfig.mobile) { + return storesConfig.mobile; + } + + return storesConfig.default || null; + } + /** * Returns whether the user agent is controlled by automation. I.e. Behat testing. * diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 5eabb68c0..df553e7d1 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -15,7 +15,7 @@ import { Injectable, Injector } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { TranslateService } from '@ngx-translate/core'; -import { CoreAppProvider, CoreAppSchema } from './app'; +import { CoreAppProvider, CoreAppSchema, CoreStoreConfig } from './app'; import { CoreEventsProvider } from './events'; import { CoreLoggerProvider } from './logger'; import { CoreSitesFactoryProvider } from './sites-factory'; @@ -1001,19 +1001,15 @@ export class CoreSitesProvider { appVersion = this.convertVersionName(CoreConfigConstants.versionname); if (requiredVersion > appVersion) { - let downloadUrl = ''; + const storesConfig: CoreStoreConfig = { + android: config.tool_mobile_androidappid || false, + ios: config.tool_mobile_iosappid || false, + desktop: config.tool_mobile_setuplink || 'https://download.moodle.org/desktop/', + mobile: config.tool_mobile_setuplink || 'https://download.moodle.org/mobile/', + default: config.tool_mobile_setuplink, + }; - if (this.appProvider.isAndroid() && config.tool_mobile_androidappid) { - downloadUrl = 'market://details?id=' + config.tool_mobile_androidappid; - } else if (this.appProvider.isIOS() && config.tool_mobile_iosappid) { - downloadUrl = 'itms-apps://itunes.apple.com/app/id' + config.tool_mobile_iosappid; - } else if (config.tool_mobile_setuplink) { - downloadUrl = config.tool_mobile_setuplink; - } else if (this.appProvider.isMobile()) { - downloadUrl = 'https://download.moodle.org/mobile/'; - } else { - downloadUrl = 'https://download.moodle.org/desktop/'; - } + const downloadUrl = this.appProvider.getAppStoreUrl(storesConfig); siteId = siteId || this.getCurrentSiteId();