1056 lines
37 KiB
TypeScript
1056 lines
37 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 { CoreSiteWSPreSets } from '@classes/sites/authenticated-site';
|
|
import { CoreSite } from '@classes/sites/site';
|
|
import { CoreCommentsArea } from '@features/comments/services/comments';
|
|
import { CoreCourseSummary } from '@features/course/services/course';
|
|
import { CoreUserSummary } from '@features/user/services/user';
|
|
import { CoreSites } from '@services/sites';
|
|
import { CoreUtils } from '@services/utils/utils';
|
|
import { makeSingleton } from '@singletons';
|
|
|
|
const ROOT_CACHE_KEY = 'mmaCompetency:';
|
|
|
|
/**
|
|
* Service to handle caompetency learning plans.
|
|
*/
|
|
@Injectable( { providedIn: 'root' })
|
|
export class AddonCompetencyProvider {
|
|
|
|
// Learning plan status.
|
|
static readonly STATUS_DRAFT = 0;
|
|
static readonly STATUS_ACTIVE = 1;
|
|
static readonly STATUS_COMPLETE = 2;
|
|
static readonly STATUS_WAITING_FOR_REVIEW = 3;
|
|
static readonly STATUS_IN_REVIEW = 4;
|
|
|
|
// Competency status.
|
|
static readonly REVIEW_STATUS_IDLE = 0;
|
|
static readonly REVIEW_STATUS_WAITING_FOR_REVIEW = 1;
|
|
static readonly REVIEW_STATUS_IN_REVIEW = 2;
|
|
|
|
/**
|
|
* Check if all competencies features are disabled.
|
|
*
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved with boolean: whether all competency features are disabled.
|
|
*/
|
|
async allCompetenciesDisabled(siteId?: string): Promise<boolean> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
return site.isFeatureDisabled('CoreMainMenuDelegate_AddonCompetency') &&
|
|
site.isFeatureDisabled('CoreCourseOptionsDelegate_AddonCompetency') &&
|
|
site.isFeatureDisabled('CoreUserDelegate_AddonCompetency');
|
|
}
|
|
|
|
/**
|
|
* Returns whether current user can see another user competencies in a course.
|
|
*
|
|
* @param courseId Course ID.
|
|
* @param userId User ID.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved with boolean: whether the user can view the competencies.
|
|
*/
|
|
async canViewUserCompetenciesInCourse(courseId: number, userId?: number, siteId?: string): Promise<boolean> {
|
|
if (!CoreSites.isLoggedIn()) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
const response = await this.getCourseCompetenciesPage(courseId, siteId);
|
|
|
|
if (!response.competencies.length) {
|
|
// No competencies.
|
|
return false;
|
|
}
|
|
|
|
if (!userId || userId == CoreSites.getCurrentSiteUserId()) {
|
|
// Current user.
|
|
return true;
|
|
}
|
|
|
|
// Check if current user can view any competency of the user.
|
|
await this.getCompetencyInCourse(courseId, response.competencies[0].competency.id, userId, siteId);
|
|
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get cache key for user learning plans data WS calls.
|
|
*
|
|
* @param userId User ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getLearningPlansCacheKey(userId: number): string {
|
|
return ROOT_CACHE_KEY + 'userplans:' + userId;
|
|
}
|
|
|
|
/**
|
|
* Get cache key for learning plan data WS calls.
|
|
*
|
|
* @param planId Plan ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getLearningPlanCacheKey(planId: number): string {
|
|
return ROOT_CACHE_KEY + 'learningplan:' + planId;
|
|
}
|
|
|
|
/**
|
|
* Get cache key for competency in plan data WS calls.
|
|
*
|
|
* @param planId Plan ID.
|
|
* @param competencyId Competency ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getCompetencyInPlanCacheKey(planId: number, competencyId: number): string {
|
|
return ROOT_CACHE_KEY + 'plancompetency:' + planId + ':' + competencyId;
|
|
}
|
|
|
|
/**
|
|
* Get cache key for competency in course data WS calls.
|
|
*
|
|
* @param courseId Course ID.
|
|
* @param competencyId Competency ID.
|
|
* @param userId User ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getCompetencyInCourseCacheKey(courseId: number, competencyId: number, userId: number): string {
|
|
return ROOT_CACHE_KEY + 'coursecompetency:' + userId + ':' + courseId + ':' + competencyId;
|
|
}
|
|
|
|
/**
|
|
* Get cache key for competency summary data WS calls.
|
|
*
|
|
* @param competencyId Competency ID.
|
|
* @param userId User ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getCompetencySummaryCacheKey(competencyId: number, userId: number): string {
|
|
return ROOT_CACHE_KEY + 'competencysummary:' + userId + ':' + competencyId;
|
|
}
|
|
|
|
/**
|
|
* Get cache key for course competencies data WS calls.
|
|
*
|
|
* @param courseId Course ID.
|
|
* @returns Cache key.
|
|
*/
|
|
protected getCourseCompetenciesCacheKey(courseId: number): string {
|
|
return ROOT_CACHE_KEY + 'coursecompetencies:' + courseId;
|
|
}
|
|
|
|
/**
|
|
* Returns whether competencies are enabled.
|
|
*
|
|
* @param courseId Course ID.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns competencies if enabled for the given course, false otherwise.
|
|
*/
|
|
async isPluginForCourseEnabled(courseId: number, siteId?: string): Promise<boolean> {
|
|
if (!CoreSites.isLoggedIn()) {
|
|
return false;
|
|
}
|
|
|
|
return CoreUtils.promiseWorks(this.getCourseCompetencies(courseId, undefined, siteId));
|
|
}
|
|
|
|
/**
|
|
* Get plans for a certain user.
|
|
*
|
|
* @param userId ID of the user. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise to be resolved when the plans are retrieved.
|
|
*/
|
|
async getLearningPlans(userId?: number, siteId?: string): Promise<AddonCompetencyPlan[]> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
const params: AddonCompetencyDataForPlansPageWSParams = {
|
|
userid: userId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
cacheKey: this.getLearningPlansCacheKey(userId),
|
|
updateFrequency: CoreSite.FREQUENCY_RARELY,
|
|
};
|
|
|
|
const response = await site.read<AddonCompetencyDataForPlansPageWSResponse>('tool_lp_data_for_plans_page', params, preSets);
|
|
|
|
return response.plans;
|
|
}
|
|
|
|
/**
|
|
* Get a certain plan.
|
|
*
|
|
* @param planId ID of the plan.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise to be resolved when the plan is retrieved.
|
|
*/
|
|
async getLearningPlan(planId: number, siteId?: string): Promise<AddonCompetencyDataForPlanPageWSResponse> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
const params: AddonCompetencyDataForPlanPageWSParams = {
|
|
planid: planId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
cacheKey: this.getLearningPlanCacheKey(planId),
|
|
updateFrequency: CoreSite.FREQUENCY_RARELY,
|
|
};
|
|
|
|
return site.read('tool_lp_data_for_plan_page', params, preSets);
|
|
}
|
|
|
|
/**
|
|
* Get a certain competency in a plan.
|
|
*
|
|
* @param planId ID of the plan.
|
|
* @param competencyId ID of the competency.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise to be resolved when the competency is retrieved.
|
|
*/
|
|
async getCompetencyInPlan(
|
|
planId: number,
|
|
competencyId: number,
|
|
siteId?: string,
|
|
): Promise<AddonCompetencyDataForUserCompetencySummaryInPlanWSResponse> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
const params: AddonCompetencyDataForUserCompetencySummaryInPlanWSParams = {
|
|
planid: planId,
|
|
competencyid: competencyId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
cacheKey: this.getCompetencyInPlanCacheKey(planId, competencyId),
|
|
updateFrequency: CoreSite.FREQUENCY_SOMETIMES,
|
|
};
|
|
|
|
return site.read(
|
|
'tool_lp_data_for_user_competency_summary_in_plan',
|
|
params,
|
|
preSets,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get a certain competency in a course.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param competencyId ID of the competency.
|
|
* @param userId ID of the user. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @param ignoreCache True if it should ignore cached data (it will always fail in offline or server down).
|
|
* @returns Promise to be resolved when the competency is retrieved.
|
|
*/
|
|
async getCompetencyInCourse(
|
|
courseId: number,
|
|
competencyId: number,
|
|
userId?: number,
|
|
siteId?: string,
|
|
ignoreCache = false,
|
|
): Promise<AddonCompetencyDataForUserCompetencySummaryInCourseWSResponse> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
const params: AddonCompetencyDataForUserCompetencySummaryInCourseWSParams = {
|
|
courseid: courseId,
|
|
competencyid: competencyId,
|
|
userid: userId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
cacheKey: this.getCompetencyInCourseCacheKey(courseId, competencyId, userId),
|
|
updateFrequency: CoreSite.FREQUENCY_SOMETIMES,
|
|
};
|
|
|
|
if (ignoreCache) {
|
|
preSets.getFromCache = false;
|
|
preSets.emergencyCache = false;
|
|
}
|
|
|
|
return site.read('tool_lp_data_for_user_competency_summary_in_course', params, preSets);
|
|
}
|
|
|
|
/**
|
|
* Get a certain competency summary.
|
|
*
|
|
* @param competencyId ID of the competency.
|
|
* @param userId ID of the user. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @param ignoreCache True if it should ignore cached data (it will always fail in offline or server down).
|
|
* @returns Promise to be resolved when the competency summary is retrieved.
|
|
*/
|
|
async getCompetencySummary(
|
|
competencyId: number,
|
|
userId?: number,
|
|
siteId?: string,
|
|
ignoreCache = false,
|
|
): Promise<AddonCompetencyDataForUserCompetencySummaryWSResponse> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
const params: AddonCompetencyDataForUserCompetencySummaryWSParams = {
|
|
competencyid: competencyId,
|
|
userid: userId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
cacheKey: this.getCompetencySummaryCacheKey(competencyId, userId),
|
|
updateFrequency: CoreSite.FREQUENCY_SOMETIMES,
|
|
};
|
|
|
|
if (ignoreCache) {
|
|
preSets.getFromCache = false;
|
|
preSets.emergencyCache = false;
|
|
}
|
|
|
|
return site.read('tool_lp_data_for_user_competency_summary', params, preSets);
|
|
}
|
|
|
|
/**
|
|
* Get all competencies in a course for a certain user.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param userId ID of the user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @param ignoreCache True if it should ignore cached data (it will always fail in offline or server down).
|
|
* @returns Promise to be resolved when the course competencies are retrieved.
|
|
*/
|
|
async getCourseCompetencies(
|
|
courseId: number,
|
|
userId?: number,
|
|
siteId?: string,
|
|
ignoreCache = false,
|
|
): Promise<AddonCompetencyDataForCourseCompetenciesPageWSResponse> {
|
|
|
|
const courseCompetencies = await this.getCourseCompetenciesPage(courseId, siteId, ignoreCache);
|
|
|
|
if (!userId || userId == CoreSites.getCurrentSiteUserId()) {
|
|
return courseCompetencies;
|
|
}
|
|
|
|
const userCompetenciesSumaries: AddonCompetencyDataForUserCompetencySummaryInCourseWSResponse[] =
|
|
await Promise.all(courseCompetencies.competencies.map((competency) =>
|
|
this.getCompetencyInCourse(courseId, competency.competency.id, userId, siteId)));
|
|
|
|
userCompetenciesSumaries.forEach((userCompetenciesSumary, index) => {
|
|
courseCompetencies.competencies[index].usercompetencycourse =
|
|
userCompetenciesSumary.usercompetencysummary.usercompetencycourse;
|
|
});
|
|
|
|
return courseCompetencies;
|
|
}
|
|
|
|
/**
|
|
* Get all competencies in a course.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @param ignoreCache True if it should ignore cached data (it will always fail in offline or server down).
|
|
* @returns Promise to be resolved when the course competencies are retrieved.
|
|
*/
|
|
async getCourseCompetenciesPage(
|
|
courseId: number,
|
|
siteId?: string,
|
|
ignoreCache = false,
|
|
): Promise<AddonCompetencyDataForCourseCompetenciesPageWSResponse> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
const params: AddonCompetencyDataForCourseCompetenciesPageWSParams = {
|
|
courseid: courseId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
cacheKey: this.getCourseCompetenciesCacheKey(courseId),
|
|
updateFrequency: CoreSite.FREQUENCY_SOMETIMES,
|
|
};
|
|
|
|
if (ignoreCache) {
|
|
preSets.getFromCache = false;
|
|
preSets.emergencyCache = false;
|
|
}
|
|
|
|
return site.read<AddonCompetencyDataForCourseCompetenciesPageWSResponse>(
|
|
'tool_lp_data_for_course_competencies_page',
|
|
params,
|
|
preSets,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Invalidates User Learning Plans data.
|
|
*
|
|
* @param userId ID of the user. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateLearningPlans(userId?: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
await site.invalidateWsCacheForKey(this.getLearningPlansCacheKey(userId));
|
|
}
|
|
|
|
/**
|
|
* Invalidates Learning Plan data.
|
|
*
|
|
* @param planId ID of the plan.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateLearningPlan(planId: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
await site.invalidateWsCacheForKey(this.getLearningPlanCacheKey(planId));
|
|
}
|
|
|
|
/**
|
|
* Invalidates Competency in Plan data.
|
|
*
|
|
* @param planId ID of the plan.
|
|
* @param competencyId ID of the competency.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateCompetencyInPlan(planId: number, competencyId: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
await site.invalidateWsCacheForKey(this.getCompetencyInPlanCacheKey(planId, competencyId));
|
|
}
|
|
|
|
/**
|
|
* Invalidates Competency in Course data.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param competencyId ID of the competency.
|
|
* @param userId ID of the user. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateCompetencyInCourse(courseId: number, competencyId: number, userId?: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
await site.invalidateWsCacheForKey(this.getCompetencyInCourseCacheKey(courseId, competencyId, userId));
|
|
}
|
|
|
|
/**
|
|
* Invalidates Competency Summary data.
|
|
*
|
|
* @param competencyId ID of the competency.
|
|
* @param userId ID of the user. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateCompetencySummary(competencyId: number, userId?: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
await site.invalidateWsCacheForKey(this.getCompetencySummaryCacheKey(competencyId, userId));
|
|
}
|
|
|
|
/**
|
|
* Invalidates Course Competencies data.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param userId ID of the user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the data is invalidated.
|
|
*/
|
|
async invalidateCourseCompetencies(courseId: number, userId?: number, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
await site.invalidateWsCacheForKey(this.getCourseCompetenciesCacheKey(courseId));
|
|
|
|
if (!userId || userId == CoreSites.getCurrentSiteUserId()) {
|
|
return;
|
|
}
|
|
|
|
const competencies = await this.getCourseCompetencies(courseId, 0, siteId);
|
|
const promises = competencies.competencies.map((competency) =>
|
|
this.invalidateCompetencyInCourse(courseId, competency.competency.id, userId, siteId));
|
|
|
|
await Promise.all(promises);
|
|
}
|
|
|
|
/**
|
|
* Report the competency as being viewed in plan.
|
|
*
|
|
* @param planId ID of the plan.
|
|
* @param competencyId ID of the competency.
|
|
* @param planStatus Current plan Status to decide what action should be logged.
|
|
* @param name Deprecated, not used anymore.
|
|
* @param userId User ID. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the WS call is successful.
|
|
*/
|
|
async logCompetencyInPlanView(
|
|
planId: number,
|
|
competencyId: number,
|
|
planStatus: number,
|
|
name?: string,
|
|
userId?: number,
|
|
siteId?: string,
|
|
): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
const params: AddonCompetencyUserCompetencyPlanViewedWSParams = {
|
|
planid: planId,
|
|
competencyid: competencyId,
|
|
userid: userId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
typeExpected: 'boolean',
|
|
};
|
|
|
|
const wsName = planStatus == AddonCompetencyProvider.STATUS_COMPLETE
|
|
? 'core_competency_user_competency_plan_viewed'
|
|
: 'core_competency_user_competency_viewed_in_plan';
|
|
|
|
await site.write(wsName, params, preSets);
|
|
}
|
|
|
|
/**
|
|
* Report the competency as being viewed in course.
|
|
*
|
|
* @param courseId ID of the course.
|
|
* @param competencyId ID of the competency.
|
|
* @param name Deprecated, not used anymore.
|
|
* @param userId User ID. If not defined, current user.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the WS call is successful.
|
|
*/
|
|
async logCompetencyInCourseView(
|
|
courseId: number,
|
|
competencyId: number,
|
|
name?: string,
|
|
userId?: number,
|
|
siteId?: string,
|
|
): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
userId = userId || site.getUserId();
|
|
|
|
const params: AddonCompetencyUserCompetencyViewedInCourseWSParams = {
|
|
courseid: courseId,
|
|
competencyid: competencyId,
|
|
userid: userId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
typeExpected: 'boolean',
|
|
};
|
|
|
|
await site.write('core_competency_user_competency_viewed_in_course', params, preSets);
|
|
}
|
|
|
|
/**
|
|
* Report the competency as being viewed.
|
|
*
|
|
* @param competencyId ID of the competency.
|
|
* @param name Name of the competency.
|
|
* @param siteId Site ID. If not defined, current site.
|
|
* @returns Promise resolved when the WS call is successful.
|
|
*/
|
|
async logCompetencyView(competencyId: number, name?: string, siteId?: string): Promise<void> {
|
|
const site = await CoreSites.getSite(siteId);
|
|
|
|
const params: AddonCompetencyCompetencyViewedWSParams = {
|
|
id: competencyId,
|
|
};
|
|
|
|
const preSets: CoreSiteWSPreSets = {
|
|
typeExpected: 'boolean',
|
|
};
|
|
|
|
await site.write('core_competency_competency_viewed', params, preSets);
|
|
}
|
|
|
|
}
|
|
export const AddonCompetency = makeSingleton(AddonCompetencyProvider);
|
|
|
|
/**
|
|
* Data returned by competency's plan_exporter.
|
|
*/
|
|
export type AddonCompetencyPlan = {
|
|
name: string; // Name.
|
|
description: string; // Description.
|
|
descriptionformat?: number; // Description format (1 = HTML, 0 = MOODLE, 2 = PLAIN or 4 = MARKDOWN).
|
|
userid: number; // Userid.
|
|
templateid: number; // Templateid.
|
|
origtemplateid: number; // Origtemplateid.
|
|
status: number; // Status.
|
|
duedate: number; // Duedate.
|
|
reviewerid: number; // Reviewerid.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
statusname: string; // Statusname.
|
|
isbasedontemplate: boolean; // Isbasedontemplate.
|
|
canmanage: boolean; // Canmanage.
|
|
canrequestreview: boolean; // Canrequestreview.
|
|
canreview: boolean; // Canreview.
|
|
canbeedited: boolean; // Canbeedited.
|
|
isactive: boolean; // Isactive.
|
|
isdraft: boolean; // Isdraft.
|
|
iscompleted: boolean; // Iscompleted.
|
|
isinreview: boolean; // Isinreview.
|
|
iswaitingforreview: boolean; // Iswaitingforreview.
|
|
isreopenallowed: boolean; // Isreopenallowed.
|
|
iscompleteallowed: boolean; // Iscompleteallowed.
|
|
isunlinkallowed: boolean; // Isunlinkallowed.
|
|
isrequestreviewallowed: boolean; // Isrequestreviewallowed.
|
|
iscancelreviewrequestallowed: boolean; // Iscancelreviewrequestallowed.
|
|
isstartreviewallowed: boolean; // Isstartreviewallowed.
|
|
isstopreviewallowed: boolean; // Isstopreviewallowed.
|
|
isapproveallowed: boolean; // Isapproveallowed.
|
|
isunapproveallowed: boolean; // Isunapproveallowed.
|
|
duedateformatted: string; // Duedateformatted.
|
|
commentarea: CoreCommentsArea;
|
|
reviewer?: CoreUserSummary;
|
|
template?: AddonCompetencyTemplate;
|
|
url: string; // Url.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's template_exporter.
|
|
*/
|
|
export type AddonCompetencyTemplate = {
|
|
shortname: string; // Shortname.
|
|
description: string; // Description.
|
|
descriptionformat?: number; // Description format (1 = HTML, 0 = MOODLE, 2 = PLAIN or 4 = MARKDOWN).
|
|
duedate: number; // Duedate.
|
|
visible: boolean; // Visible.
|
|
contextid: number; // Contextid.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
duedateformatted: string; // Duedateformatted.
|
|
cohortscount: number; // Cohortscount.
|
|
planscount: number; // Planscount.
|
|
canmanage: boolean; // Canmanage.
|
|
canread: boolean; // Canread.
|
|
contextname: string; // Contextname.
|
|
contextnamenoprefix: string; // Contextnamenoprefix.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's competency_exporter.
|
|
*/
|
|
export type AddonCompetencyCompetency = {
|
|
shortname: string; // Shortname.
|
|
idnumber: string; // Idnumber.
|
|
description: string; // Description.
|
|
descriptionformat: number; // Description format (1 = HTML, 0 = MOODLE, 2 = PLAIN or 4 = MARKDOWN).
|
|
sortorder: number; // Sortorder.
|
|
parentid: number; // Parentid.
|
|
path: string; // Path.
|
|
ruleoutcome: number; // Ruleoutcome.
|
|
ruletype: string; // Ruletype.
|
|
ruleconfig: string; // Ruleconfig.
|
|
scaleid: number; // Scaleid.
|
|
scaleconfiguration: string; // Scaleconfiguration.
|
|
competencyframeworkid: number; // Competencyframeworkid.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's competency_path_exporter.
|
|
*/
|
|
export type AddonCompetencyPath = {
|
|
ancestors: AddonCompetencyPathNode[]; // Ancestors.
|
|
framework: AddonCompetencyPathNode;
|
|
pluginbaseurl: string; // Pluginbaseurl.
|
|
pagecontextid: number; // Pagecontextid.
|
|
showlinks: boolean; // @since 3.7. Showlinks.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's path_node_exporter.
|
|
*/
|
|
export type AddonCompetencyPathNode = {
|
|
id: number; // Id.
|
|
name: string; // Name.
|
|
first: boolean; // First.
|
|
last: boolean; // Last.
|
|
position: number; // Position.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's user_competency_exporter.
|
|
*/
|
|
export type AddonCompetencyUserCompetency = {
|
|
userid: number; // Userid.
|
|
competencyid: number; // Competencyid.
|
|
status: number; // Status.
|
|
reviewerid: number; // Reviewerid.
|
|
proficiency: boolean; // Proficiency.
|
|
grade: number; // Grade.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
canrequestreview: boolean; // Canrequestreview.
|
|
canreview: boolean; // Canreview.
|
|
gradename: string; // Gradename.
|
|
isrequestreviewallowed: boolean; // Isrequestreviewallowed.
|
|
iscancelreviewrequestallowed: boolean; // Iscancelreviewrequestallowed.
|
|
isstartreviewallowed: boolean; // Isstartreviewallowed.
|
|
isstopreviewallowed: boolean; // Isstopreviewallowed.
|
|
isstatusidle: boolean; // Isstatusidle.
|
|
isstatusinreview: boolean; // Isstatusinreview.
|
|
isstatuswaitingforreview: boolean; // Isstatuswaitingforreview.
|
|
proficiencyname: string; // Proficiencyname.
|
|
reviewer?: CoreUserSummary;
|
|
statusname: string; // Statusname.
|
|
url: string; // Url.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's user_competency_plan_exporter.
|
|
*/
|
|
export type AddonCompetencyUserCompetencyPlan = {
|
|
userid: number; // Userid.
|
|
competencyid: number; // Competencyid.
|
|
proficiency: boolean; // Proficiency.
|
|
grade: number; // Grade.
|
|
planid: number; // Planid.
|
|
sortorder: number; // Sortorder.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
gradename: string; // Gradename.
|
|
proficiencyname: string; // Proficiencyname.
|
|
};
|
|
|
|
/**
|
|
* Params of tool_lp_data_for_user_competency_summary_in_plan WS.
|
|
*/
|
|
type AddonCompetencyDataForUserCompetencySummaryInPlanWSParams = {
|
|
competencyid: number; // Data base record id for the competency.
|
|
planid: number; // Data base record id for the plan.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's user_competency_summary_in_plan_exporter.
|
|
*/
|
|
export type AddonCompetencyDataForUserCompetencySummaryInPlanWSResponse = {
|
|
usercompetencysummary: AddonCompetencyDataForUserCompetencySummaryWSResponse;
|
|
plan: AddonCompetencyPlan;
|
|
};
|
|
|
|
/**
|
|
* Params of tool_lp_data_for_user_competency_summary WS.
|
|
*/
|
|
type AddonCompetencyDataForUserCompetencySummaryWSParams = {
|
|
userid: number; // Data base record id for the user.
|
|
competencyid: number; // Data base record id for the competency.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's user_competency_summary_exporter.
|
|
*/
|
|
export type AddonCompetencyDataForUserCompetencySummaryWSResponse = {
|
|
showrelatedcompetencies: boolean; // Showrelatedcompetencies.
|
|
cangrade: boolean; // Cangrade.
|
|
competency: AddonCompetencySummary;
|
|
user: CoreUserSummary;
|
|
usercompetency?: AddonCompetencyUserCompetency;
|
|
usercompetencyplan?: AddonCompetencyUserCompetencyPlan;
|
|
usercompetencycourse?: AddonCompetencyUserCompetencyCourse;
|
|
evidence: AddonCompetencyEvidence[]; // Evidence.
|
|
commentarea?: CoreCommentsArea;
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's competency_summary_exporter.
|
|
*/
|
|
export type AddonCompetencySummary = {
|
|
linkedcourses: CoreCourseSummary; // Linkedcourses.
|
|
relatedcompetencies: AddonCompetencyCompetency[]; // Relatedcompetencies.
|
|
competency: AddonCompetencyCompetency;
|
|
framework: AddonCompetencyFramework;
|
|
hascourses: boolean; // Hascourses.
|
|
hasrelatedcompetencies: boolean; // Hasrelatedcompetencies.
|
|
scaleid: number; // Scaleid.
|
|
scaleconfiguration: string; // Scaleconfiguration.
|
|
taxonomyterm: string; // Taxonomyterm.
|
|
comppath: AddonCompetencyPath;
|
|
pluginbaseurl: string; // @since 3.7. Pluginbaseurl.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's competency_framework_exporter.
|
|
*/
|
|
export type AddonCompetencyFramework = {
|
|
shortname: string; // Shortname.
|
|
idnumber: string; // Idnumber.
|
|
description: string; // Description.
|
|
descriptionformat: number; // Description format (1 = HTML, 0 = MOODLE, 2 = PLAIN or 4 = MARKDOWN).
|
|
visible: boolean; // Visible.
|
|
scaleid: number; // Scaleid.
|
|
scaleconfiguration: string; // Scaleconfiguration.
|
|
contextid: number; // Contextid.
|
|
taxonomies: string; // Taxonomies.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
canmanage: boolean; // Canmanage.
|
|
competenciescount: number; // Competenciescount.
|
|
contextname: string; // Contextname.
|
|
contextnamenoprefix: string; // Contextnamenoprefix.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's user_competency_course_exporter.
|
|
*/
|
|
export type AddonCompetencyUserCompetencyCourse = {
|
|
userid: number; // Userid.
|
|
courseid: number; // Courseid.
|
|
competencyid: number; // Competencyid.
|
|
proficiency: boolean; // Proficiency.
|
|
grade: number; // Grade.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
gradename: string; // Gradename.
|
|
proficiencyname: string; // Proficiencyname.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's evidence_exporter.
|
|
*/
|
|
export type AddonCompetencyEvidence = {
|
|
usercompetencyid: number; // Usercompetencyid.
|
|
contextid: number; // Contextid.
|
|
action: number; // Action.
|
|
actionuserid: number; // Actionuserid.
|
|
descidentifier: string; // Descidentifier.
|
|
desccomponent: string; // Desccomponent.
|
|
desca: string; // Desca.
|
|
url: string; // Url.
|
|
grade: number; // Grade.
|
|
note: string; // Note.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
actionuser?: CoreUserSummary;
|
|
description: string; // Description.
|
|
gradename: string; // Gradename.
|
|
userdate: string; // Userdate.
|
|
candelete: boolean; // Candelete.
|
|
};
|
|
|
|
/**
|
|
* Params of tool_lp_data_for_user_competency_summary_in_course WS.
|
|
*/
|
|
type AddonCompetencyDataForUserCompetencySummaryInCourseWSParams = {
|
|
userid: number; // Data base record id for the user.
|
|
competencyid: number; // Data base record id for the competency.
|
|
courseid: number; // Data base record id for the course.
|
|
};
|
|
|
|
/**
|
|
* Data returned by tool_lp_data_for_user_competency_summary_in_course WS.
|
|
*
|
|
* WS Description: Load a summary of a user competency.
|
|
*/
|
|
export type AddonCompetencyDataForUserCompetencySummaryInCourseWSResponse = {
|
|
usercompetencysummary: AddonCompetencyDataForUserCompetencySummaryWSResponse;
|
|
course: CoreCourseSummary;
|
|
coursemodules: AddonCompetencyCourseModuleInfo[]; // Coursemodules.
|
|
plans: AddonCompetencyPlan[]; // @since 3.7. Plans.
|
|
pluginbaseurl: string; // @since 3.7. Pluginbaseurl.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's course_competency_settings_exporter.
|
|
*/
|
|
export type AddonCompetencyCourseCompetencySettings = {
|
|
courseid: number; // Courseid.
|
|
pushratingstouserplans: boolean; // Pushratingstouserplans.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's course_competency_statistics_exporter.
|
|
*/
|
|
export type AddonCompetencyCourseCompetencyStatistics = {
|
|
competencycount: number; // Competencycount.
|
|
proficientcompetencycount: number; // Proficientcompetencycount.
|
|
proficientcompetencypercentage: number; // Proficientcompetencypercentage.
|
|
proficientcompetencypercentageformatted: string; // Proficientcompetencypercentageformatted.
|
|
leastproficient: AddonCompetencyCompetency[]; // Leastproficient.
|
|
leastproficientcount: number; // Leastproficientcount.
|
|
canbegradedincourse: boolean; // Canbegradedincourse.
|
|
canmanagecoursecompetencies: boolean; // Canmanagecoursecompetencies.
|
|
};
|
|
|
|
/**
|
|
* Data returned by competency's course_competency_exporter.
|
|
*/
|
|
export type AddonCompetencyCourseCompetency = {
|
|
courseid: number; // Courseid.
|
|
competencyid: number; // Competencyid.
|
|
sortorder: number; // Sortorder.
|
|
ruleoutcome: number; // Ruleoutcome.
|
|
id: number; // Id.
|
|
timecreated: number; // Timecreated.
|
|
timemodified: number; // Timemodified.
|
|
usermodified: number; // Usermodified.
|
|
};
|
|
|
|
/**
|
|
* Params of tool_lp_data_for_plans_page WS.
|
|
*/
|
|
type AddonCompetencyDataForPlansPageWSParams = {
|
|
userid: number; // The user id.
|
|
};
|
|
|
|
/**
|
|
* Data returned by tool_lp_data_for_plans_page WS.
|
|
*/
|
|
export type AddonCompetencyDataForPlansPageWSResponse = {
|
|
userid: number; // The learning plan user id.
|
|
plans: AddonCompetencyPlan[];
|
|
pluginbaseurl: string; // Url to the tool_lp plugin folder on this Moodle site.
|
|
navigation: string[];
|
|
canreaduserevidence: boolean; // Can the current user view the user's evidence.
|
|
canmanageuserplans: boolean; // Can the current user manage the user's plans.
|
|
};
|
|
|
|
/**
|
|
* Params of tool_lp_data_for_plan_page WS.
|
|
*/
|
|
type AddonCompetencyDataForPlanPageWSParams = {
|
|
planid: number; // The plan id.
|
|
};
|
|
|
|
/**
|
|
* Data returned by tool_lp_data_for_plan_page WS.
|
|
*/
|
|
export type AddonCompetencyDataForPlanPageWSResponse = {
|
|
plan: AddonCompetencyPlan;
|
|
contextid: number; // Context ID.
|
|
pluginbaseurl: string; // Plugin base URL.
|
|
competencies: AddonCompetencyDataForPlanPageCompetency[];
|
|
competencycount: number; // Count of competencies.
|
|
proficientcompetencycount: number; // Count of proficientcompetencies.
|
|
proficientcompetencypercentage: number; // Percentage of competencies proficient.
|
|
proficientcompetencypercentageformatted: string; // Displayable percentage.
|
|
};
|
|
|
|
/**
|
|
* Competency data returned by tool_lp_data_for_plan_page.
|
|
*/
|
|
export type AddonCompetencyDataForPlanPageCompetency = {
|
|
competency: AddonCompetencyCompetency;
|
|
comppath: AddonCompetencyPath;
|
|
usercompetency?: AddonCompetencyUserCompetency;
|
|
usercompetencyplan?: AddonCompetencyUserCompetencyPlan;
|
|
};
|
|
|
|
/**
|
|
* Params of tool_lp_data_for_course_competencies_page WS.
|
|
*/
|
|
type AddonCompetencyDataForCourseCompetenciesPageWSParams = {
|
|
courseid: number; // The course id.
|
|
moduleid?: number; // The module id.
|
|
};
|
|
|
|
/**
|
|
* Data returned by tool_lp_data_for_course_competencies_page WS.
|
|
*/
|
|
export type AddonCompetencyDataForCourseCompetenciesPageWSResponse = {
|
|
courseid: number; // The current course id.
|
|
pagecontextid: number; // The current page context ID.
|
|
gradableuserid?: number; // Current user id, if the user is a gradable user.
|
|
canmanagecompetencyframeworks: boolean; // User can manage competency frameworks.
|
|
canmanagecoursecompetencies: boolean; // User can manage linked course competencies.
|
|
canconfigurecoursecompetencies: boolean; // User can configure course competency settings.
|
|
cangradecompetencies: boolean; // User can grade competencies.
|
|
settings: AddonCompetencyCourseCompetencySettings;
|
|
statistics: AddonCompetencyCourseCompetencyStatistics;
|
|
competencies: AddonCompetencyDataForCourseCompetenciesPageCompetency[];
|
|
manageurl: string; // Url to the manage competencies page.
|
|
pluginbaseurl: string; // @since 3.6. Url to the course competencies page.
|
|
};
|
|
|
|
/**
|
|
* Competency data returned by tool_lp_data_for_course_competencies_page.
|
|
*/
|
|
export type AddonCompetencyDataForCourseCompetenciesPageCompetency = {
|
|
competency: AddonCompetencyCompetency;
|
|
coursecompetency: AddonCompetencyCourseCompetency;
|
|
coursemodules: AddonCompetencyCourseModuleInfo[];
|
|
usercompetencycourse?: AddonCompetencyUserCompetencyCourse;
|
|
ruleoutcomeoptions: {
|
|
value: number; // The option value.
|
|
text: string; // The name of the option.
|
|
selected: boolean; // If this is the currently selected option.
|
|
}[];
|
|
comppath: AddonCompetencyPath;
|
|
plans: AddonCompetencyPlan[]; // @since 3.7.
|
|
};
|
|
|
|
type AddonCompetencyCourseModuleInfo = {
|
|
id: number; // Id.
|
|
name: string; // Name.
|
|
url?: string; // Url.
|
|
iconurl: string; // Iconurl.
|
|
};
|
|
|
|
/**
|
|
* Params of core_competency_user_competency_plan_viewed and core_competency_user_competency_viewed_in_plan WS.
|
|
*/
|
|
type AddonCompetencyUserCompetencyPlanViewedWSParams = {
|
|
competencyid: number; // The competency id.
|
|
userid: number; // The user id.
|
|
planid: number; // The plan id.
|
|
};
|
|
|
|
/**
|
|
* Params of core_competency_user_competency_viewed_in_course WS.
|
|
*/
|
|
type AddonCompetencyUserCompetencyViewedInCourseWSParams = {
|
|
competencyid: number; // The competency id.
|
|
userid: number; // The user id.
|
|
courseid: number; // The course id.
|
|
};
|
|
|
|
/**
|
|
* Params of core_competency_competency_viewed WS.
|
|
*/
|
|
type AddonCompetencyCompetencyViewedWSParams = {
|
|
id: number; // The competency id.
|
|
};
|