commit
2c881793e9
|
@ -110,4 +110,13 @@
|
||||||
],
|
],
|
||||||
"description": "[Moodle] Create a Pure Singleton"
|
"description": "[Moodle] Create a Pure Singleton"
|
||||||
},
|
},
|
||||||
|
"Innherit doc": {
|
||||||
|
"prefix": "inheritdoc",
|
||||||
|
"body": [
|
||||||
|
"/**",
|
||||||
|
" * @inheritdoc",
|
||||||
|
" */"
|
||||||
|
],
|
||||||
|
"description": "Add @inheritdoc documentation block"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cli": {
|
"cli": {
|
||||||
|
"analytics": false,
|
||||||
"defaultCollection": "@ionic/angular-toolkit"
|
"defaultCollection": "@ionic/angular-toolkit"
|
||||||
},
|
},
|
||||||
"schematics": {
|
"schematics": {
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
<allow-intent href="sms:*" />
|
<allow-intent href="sms:*" />
|
||||||
<allow-intent href="mailto:*" />
|
<allow-intent href="mailto:*" />
|
||||||
<allow-intent href="geo:*" />
|
<allow-intent href="geo:*" />
|
||||||
|
<hook src="scripts/cordova-hooks/before_plugin_add.sh" type="before_plugin_add" />
|
||||||
<preference name="permissions" value="none" />
|
<preference name="permissions" value="none" />
|
||||||
<preference name="orientation" value="default" />
|
<preference name="orientation" value="default" />
|
||||||
<preference name="target-device" value="universal" />
|
<preference name="target-device" value="universal" />
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
"ionic:serve:before": "gulp",
|
"ionic:serve:before": "gulp",
|
||||||
"ionic:serve": "cross-env-shell ./scripts/serve.sh",
|
"ionic:serve": "cross-env-shell ./scripts/serve.sh",
|
||||||
"ionic:build:before": "gulp",
|
"ionic:build:before": "gulp",
|
||||||
"postinstall": "patch-package",
|
"postinstall": "patch-package && cd cordova-plugin-moodleapp && npm install",
|
||||||
"lang:update-langpacks": "./scripts/update_langpacks.sh",
|
"lang:update-langpacks": "./scripts/update_langpacks.sh",
|
||||||
"lang:detect-langpacks": "./scripts/update_langpacks.sh detect",
|
"lang:detect-langpacks": "./scripts/update_langpacks.sh detect",
|
||||||
"lang:create-langindex": "./scripts/create_langindex.sh"
|
"lang:create-langindex": "./scripts/create_langindex.sh"
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ $CORDOVA_PLUGINS == *cordova-plugin-moodleapp* ]]; then
|
||||||
|
echo "Building cordova-plugin-moodleapp"
|
||||||
|
|
||||||
|
cd cordova-plugin-moodleapp
|
||||||
|
npm run prod
|
||||||
|
fi
|
|
@ -22,7 +22,7 @@ function copy_lang {
|
||||||
lang=$1
|
lang=$1
|
||||||
|
|
||||||
index_keys=$(jq -r 'to_entries[] | "\"\(.key)\","' langindex.json)
|
index_keys=$(jq -r 'to_entries[] | "\"\(.key)\","' langindex.json)
|
||||||
index_keys=$(echo "$index_keys" | sed 's/,*$//')
|
index_keys=${index_keys:0:-1}
|
||||||
|
|
||||||
hyphenlang=${lang/_/-}
|
hyphenlang=${lang/_/-}
|
||||||
langfilepath=$LANG_PATH/$hyphenlang.json
|
langfilepath=$LANG_PATH/$hyphenlang.json
|
||||||
|
|
|
@ -447,7 +447,7 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
||||||
if (attempt.state == AddonModQuizProvider.ATTEMPT_IN_PROGRESS) {
|
if (attempt.state == AddonModQuizProvider.ATTEMPT_IN_PROGRESS) {
|
||||||
// Get data for each page.
|
// Get data for each page.
|
||||||
promises = promises.concat(pages.map(async (page) => {
|
promises = promises.concat(pages.map(async (page) => {
|
||||||
if (isSequential && attempt.currentpage && page < attempt.currentpage) {
|
if (isSequential && typeof attempt.currentpage === 'number' && page < attempt.currentpage) {
|
||||||
// Sequential quiz, cannot get pages before the current one.
|
// Sequential quiz, cannot get pages before the current one.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ import { CoreCaptureError } from './captureerror';
|
||||||
import { CoreNetworkError } from './network-error';
|
import { CoreNetworkError } from './network-error';
|
||||||
import { CoreSiteError } from './siteerror';
|
import { CoreSiteError } from './siteerror';
|
||||||
import { CoreLoginError } from './loginerror';
|
import { CoreLoginError } from './loginerror';
|
||||||
import { CoreErrorWithOptions } from './errorwithtitle';
|
import { CoreErrorWithOptions } from './errorwithoptions';
|
||||||
import { CoreHttpError } from './httperror';
|
import { CoreHttpError } from './httperror';
|
||||||
|
|
||||||
export const CORE_ERRORS_CLASSES: Type<unknown>[] = [
|
export const CORE_ERRORS_CLASSES: Type<unknown>[] = [
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
<core-navbar-buttons slot="end" prepend *ngIf="initialized && showFullscreenOnToolbar && !loading">
|
<core-navbar-buttons slot="end" prepend *ngIf="initialized && showFullscreenOnToolbar && !loading">
|
||||||
<ion-button fill="clear" (click)="toggleFullscreen()"
|
<ion-button fill="clear" (click)="toggleFullscreen()"
|
||||||
[attr.aria-label]="(fullscreen ? 'core.disablefullscreen' : 'core.fullscreen') | translate">
|
[attr.aria-label]="(fullscreen ? 'core.disablefullscreen' : 'core.fullscreen') | translate">
|
||||||
<ion-icon *ngIf="!fullscreen" name="fas-expand" slot="icon-only" aria-hidden="true"></ion-icon>
|
<ion-icon [name]="fullscreen ? 'fas-compress' : 'fas-expand'" slot="icon-only" aria-hidden="true"></ion-icon>
|
||||||
<ion-icon *ngIf="fullscreen" name="fas-compress" slot="icon-only" aria-hidden="true"></ion-icon>
|
|
||||||
</ion-button>
|
</ion-button>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,7 @@ export class CoreCourseSummaryPage implements OnInit, OnDestroy {
|
||||||
// Don't allow guest access if it requires a password if not supported.
|
// Don't allow guest access if it requires a password if not supported.
|
||||||
this.guestAccessPasswordRequired = info.passwordrequired;
|
this.guestAccessPasswordRequired = info.passwordrequired;
|
||||||
|
|
||||||
return info.status === true && (!info.passwordrequired || CoreCourses.isValidateGuestAccessPasswordAvailable());
|
return info.status && (!info.passwordrequired || CoreCourses.isValidateGuestAccessPasswordAvailable());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -193,7 +193,7 @@ export class CoreCourseSummaryPage implements OnInit, OnDestroy {
|
||||||
const enrolmentMethods = await CoreCourses.getCourseEnrolmentMethods(this.courseId);
|
const enrolmentMethods = await CoreCourses.getCourseEnrolmentMethods(this.courseId);
|
||||||
|
|
||||||
enrolmentMethods.forEach((method) => {
|
enrolmentMethods.forEach((method) => {
|
||||||
if (!method.status) {
|
if (!CoreUtils.isTrueOrOne(method.status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -634,8 +634,7 @@ export class CoreCourseHelperProvider {
|
||||||
|
|
||||||
// Don't allow guest access if it requires a password and it's available.
|
// Don't allow guest access if it requires a password and it's available.
|
||||||
return {
|
return {
|
||||||
guestAccess: info.status === true &&
|
guestAccess: info.status && (!info.passwordrequired || CoreCourses.isValidateGuestAccessPasswordAvailable()),
|
||||||
(!info.passwordrequired || CoreCourses.isValidateGuestAccessPasswordAvailable()),
|
|
||||||
passwordRequired: info.passwordrequired,
|
passwordRequired: info.passwordrequired,
|
||||||
};
|
};
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
@ -98,8 +98,8 @@ Feature: Test basic usage of one course in app
|
||||||
And I should find "Test scorm name" in the app
|
And I should find "Test scorm name" in the app
|
||||||
And I should find "Test workshop name" in the app
|
And I should find "Test workshop name" in the app
|
||||||
|
|
||||||
When I set "page-core-course-index .core-course-thumb" styles to "--course-color" "lightblue"
|
When I set "page-core-course-index .core-course-thumb" styles to "background" "lightblue"
|
||||||
And I set "page-core-course-index .core-course-thumb" styles to "--course-color-tint" "white"
|
And I set "page-core-course-index .core-course-thumb img" styles to "display" "none"
|
||||||
Then the UI should match the snapshot
|
Then the UI should match the snapshot
|
||||||
|
|
||||||
When I press "Choice course 1" in the app
|
When I press "Choice course 1" in the app
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 34 KiB |
|
@ -1827,7 +1827,6 @@ export type CoreCourseEnrolmentInfo = {
|
||||||
courseid: number; // Id of course.
|
courseid: number; // Id of course.
|
||||||
type: string; // Type of enrolment plugin.
|
type: string; // Type of enrolment plugin.
|
||||||
name: string; // Name of enrolment plugin.
|
name: string; // Name of enrolment plugin.
|
||||||
status: boolean | string; // Available status of enrolment plugin. True if successful, else error message or false.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1835,6 +1834,7 @@ export type CoreCourseEnrolmentInfo = {
|
||||||
*/
|
*/
|
||||||
export type CoreCourseEnrolmentMethod = CoreCourseEnrolmentInfo & {
|
export type CoreCourseEnrolmentMethod = CoreCourseEnrolmentInfo & {
|
||||||
wsfunction?: string; // Webservice function to get more information.
|
wsfunction?: string; // Webservice function to get more information.
|
||||||
|
status: string; // Status of enrolment plugin. True if successful, else error message or false.
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1877,6 +1877,7 @@ export type CoreCourseGetRecentCoursesOptions = CoreSitesCommonWSOptions & {
|
||||||
*/
|
*/
|
||||||
export type CoreCourseEnrolmentGuestMethod = CoreCourseEnrolmentInfo & {
|
export type CoreCourseEnrolmentGuestMethod = CoreCourseEnrolmentInfo & {
|
||||||
passwordrequired: boolean; // Is a password required?
|
passwordrequired: boolean; // Is a password required?
|
||||||
|
status: boolean; // Is the enrolment enabled?
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -241,7 +241,7 @@ export class CoreCoursesCourseLinkHandlerService extends CoreContentLinksHandler
|
||||||
let isSelfEnrolEnabled = false;
|
let isSelfEnrolEnabled = false;
|
||||||
let instances = 0;
|
let instances = 0;
|
||||||
methods.forEach((method) => {
|
methods.forEach((method) => {
|
||||||
if (method.type == 'self' && method.status) {
|
if (method.type == 'self' && CoreUtils.isTrueOrOne(method.status)) {
|
||||||
isSelfEnrolEnabled = true;
|
isSelfEnrolEnabled = true;
|
||||||
instances++;
|
instances++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,8 @@ export class CoreLoginSitesPage implements OnInit {
|
||||||
async ngOnInit(): Promise<void> {
|
async ngOnInit(): Promise<void> {
|
||||||
if (CoreNavigator.getRouteBooleanParam('openAddSite')) {
|
if (CoreNavigator.getRouteBooleanParam('openAddSite')) {
|
||||||
this.add();
|
this.add();
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.accountsList = await CoreLoginHelper.getAccountsList();
|
this.accountsList = await CoreLoginHelper.getAccountsList();
|
||||||
|
|
|
@ -51,7 +51,7 @@ import { CoreRedirectPayload } from './navigator';
|
||||||
import { CoreSitesFactory } from './sites-factory';
|
import { CoreSitesFactory } from './sites-factory';
|
||||||
import { CoreText } from '@singletons/text';
|
import { CoreText } from '@singletons/text';
|
||||||
import { CoreLoginHelper } from '@features/login/services/login-helper';
|
import { CoreLoginHelper } from '@features/login/services/login-helper';
|
||||||
import { CoreErrorWithOptions } from '@classes/errors/errorwithtitle';
|
import { CoreErrorWithOptions } from '@classes/errors/errorwithoptions';
|
||||||
import { CoreAjaxError } from '@classes/errors/ajaxerror';
|
import { CoreAjaxError } from '@classes/errors/ajaxerror';
|
||||||
import { CoreAjaxWSError } from '@classes/errors/ajaxwserror';
|
import { CoreAjaxWSError } from '@classes/errors/ajaxwserror';
|
||||||
import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins';
|
import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins';
|
||||||
|
|
|
@ -35,7 +35,7 @@ import { CoreWindow } from '@singletons/window';
|
||||||
import { CoreColors } from '@singletons/colors';
|
import { CoreColors } from '@singletons/colors';
|
||||||
import { CorePromisedValue } from '@classes/promised-value';
|
import { CorePromisedValue } from '@classes/promised-value';
|
||||||
import { CorePlatform } from '@services/platform';
|
import { CorePlatform } from '@services/platform';
|
||||||
import { CoreErrorWithOptions } from '@classes/errors/errorwithtitle';
|
import { CoreErrorWithOptions } from '@classes/errors/errorwithoptions';
|
||||||
import { CoreFilepool } from '@services/filepool';
|
import { CoreFilepool } from '@services/filepool';
|
||||||
import { CoreSites } from '@services/sites';
|
import { CoreSites } from '@services/sites';
|
||||||
import { CoreCancellablePromise } from '@classes/cancellable-promise';
|
import { CoreCancellablePromise } from '@classes/cancellable-promise';
|
||||||
|
|
Loading…
Reference in New Issue