143 lines
5.1 KiB
TypeScript
143 lines
5.1 KiB
TypeScript
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { Injectable } from '@angular/core';
|
|
import { makeSingleton } from '@singletons';
|
|
import { CoreSite } from '@classes/site';
|
|
import { CoreSites } from '@services/sites';
|
|
import { CoreUtils } from '@services/utils/utils';
|
|
import { CoreEnrolAction, CoreEnrolDelegate } from './enrol-delegate';
|
|
|
|
/**
|
|
* Service that provides functions for enrolment plugins.
|
|
*/
|
|
@Injectable({ providedIn: 'root' })
|
|
export class CoreEnrolService {
|
|
|
|
protected static readonly ROOT_CACHE_KEY = 'CoreEnrol:';
|
|
|
|
/**
|
|
* Get the enrolment methods from a course.
|
|
* Please notice that this function will only return methods that implement get_enrol_info, it won't return all
|
|
* enrolment methods in a course.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param siteId Site ID. If not defined, use current site.
|
|
* @returns Promise resolved with the methods.
|
|
*/
|
|
async getCourseEnrolmentMethods(courseId: number, siteId?: string): Promise<CoreEnrolEnrolmentMethod[]> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
const params: CoreEnrolGetCourseEnrolmentMethodsWSParams = {
|
|
courseid: courseId,
|
|
};
|
|
const preSets = {
|
|
cacheKey: this.getCourseEnrolmentMethodsCacheKey(courseId),
|
|
updateFrequency: CoreSite.FREQUENCY_RARELY,
|
|
};
|
|
|
|
return site.read<CoreEnrolGetCourseEnrolmentMethodsWSResponse>('core_enrol_get_course_enrolment_methods', params, preSets);
|
|
}
|
|
|
|
/**
|
|
* Get the enrolment methods from a course that are enabled and supported by the app.
|
|
* Please notice that this function will only return methods that implement get_enrol_info, it won't return all
|
|
* enrolment methods in a course.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param options Options.
|
|
* @returns Promise resolved with the methods.
|
|
*/
|
|
async getSupportedCourseEnrolmentMethods(
|
|
courseId: number,
|
|
options: CoreEnrolGetSupportedMethodsOptions = {},
|
|
): Promise<CoreEnrolEnrolmentMethod[]> {
|
|
const methods = await CoreEnrol.getCourseEnrolmentMethods(courseId, options.siteId);
|
|
|
|
return methods.filter((method) => {
|
|
if (options.type && method.type !== options.type) {
|
|
return false;
|
|
}
|
|
|
|
return CoreEnrolDelegate.isEnrolSupported(method.type) && CoreUtils.isTrueOrOne(method.status) &&
|
|
(!options.action || CoreEnrolDelegate.getEnrolmentAction(method.type) === options.action);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get cache key for get course enrolment methods WS call.
|
|
*
|
|
* @param courseId Course ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getCourseEnrolmentMethodsCacheKey(courseId: number): string {
|
|
return CoreEnrolService.ROOT_CACHE_KEY + 'enrolmentmethods:' + courseId;
|
|
}
|
|
|
|
/**
|
|
* Invalidates get course enrolment methods WS call.
|
|
*
|
|
* @param courseId Course ID.
|
|
* @param siteId Site Id. If not defined, use current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateCourseEnrolmentMethods(courseId: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
await Promise.all([
|
|
site.invalidateWsCacheForKey(this.getCourseEnrolmentMethodsCacheKey(courseId)),
|
|
site.invalidateWsCacheForKey(`mmCourses:enrolmentmethods:${courseId}`), // @todo: Remove after 4.3 release.
|
|
]);
|
|
}
|
|
|
|
}
|
|
|
|
export const CoreEnrol = makeSingleton(CoreEnrolService);
|
|
|
|
/**
|
|
* Params of core_enrol_get_course_enrolment_methods WS.
|
|
*/
|
|
type CoreEnrolGetCourseEnrolmentMethodsWSParams = {
|
|
courseid: number; // Course id.
|
|
};
|
|
|
|
/**
|
|
* Data returned by core_enrol_get_course_enrolment_methods WS.
|
|
*/
|
|
type CoreEnrolGetCourseEnrolmentMethodsWSResponse = CoreEnrolEnrolmentMethod[];
|
|
|
|
/**
|
|
* Course enrolment method.
|
|
*/
|
|
export type CoreEnrolEnrolmentMethod = CoreEnrolEnrolmentInfo & {
|
|
wsfunction?: string; // Webservice function to get more information.
|
|
status: string; // Status of enrolment plugin. True if successful, else error message or false.
|
|
};
|
|
|
|
/**
|
|
* Course enrolment basic info.
|
|
*/
|
|
export type CoreEnrolEnrolmentInfo = {
|
|
id: number; // Id of course enrolment instance.
|
|
courseid: number; // Id of course.
|
|
type: string; // Type of enrolment plugin.
|
|
name: string; // Name of enrolment plugin.
|
|
};
|
|
|
|
export type CoreEnrolGetSupportedMethodsOptions = {
|
|
type?: string; // If set, only get methods of a certain type.
|
|
action?: CoreEnrolAction; // If set, only get methods that use a certain action.
|
|
siteId?: string; // Site ID. If not defined, use current site.
|
|
};
|