Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion www/addons/coursecompletion/services/coursecompletion.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ angular.module('mm.addons.coursecompletion')
preSets = {
cacheKey: getCompletionCacheKey(courseid, userid)
};

return $mmSite.read('core_completion_get_course_completion_status', data, preSets).then(function(data) {
if (data.completionstatus) {
return data.completionstatus;
Expand Down Expand Up @@ -184,6 +183,24 @@ angular.module('mm.addons.coursecompletion')
});
};

/**
* Returns whether or not the view course completion plugin is enabled for a certain user.
*
* @module mm.addons.coursecompletion
* @ngdoc method
* @name $mmaCourseCompletion#isPluginViewEnabledForUser
* @param {Number} courseId Course ID.
* @param {Number} userId User ID.
* @return {Promise} Promise resolved with true if plugin is enabled, rejected or resolved with false otherwise.
*/
self.isPluginViewEnabledForUser = function(courseId, userId) {
return self.getCompletion(courseId, userId).then(function() {
return true;
}).catch(function() {
return false;
});
};

/**
* Returns whether or not the self completion is available in current site.
*
Expand Down
79 changes: 76 additions & 3 deletions www/addons/coursecompletion/services/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,50 @@ angular.module('mm.addons.coursecompletion')
*/
.factory('$mmaCourseCompletionHandlers', function($mmaCourseCompletion, $state, mmCoursesAccessMethods) {

var self = {};
// We use "caches" to decrease network usage.
var self = {},
viewCompletionEnabledCache = {},
coursesNavEnabledCache = {};

/**
* Get a cache key to identify a course and a user.
*
* @param {Number} courseId Course ID.
* @param {Number} userId User ID.
* @return {String} Cache key.
*/
function getCacheKey(courseId, userId) {
return courseId + '#' + userId;
}

/**
* Clear view completion cache.
* If a courseId and userId are specified, it will only delete the entry for that user and course.
*
* @module mm.addons.coursecompletion
* @ngdoc method
* @name $mmaCourseCompletionHandlers#clearViewCompletionCache
* @param {Number} [courseId] Course ID.
* @param {Number} [userId] User ID.
*/
self.clearViewCompletionCache = function(courseId, userId) {
if (courseId && userId) {
delete viewCompletionEnabledCache[getCacheKey(courseId, userId)];
} else {
viewCompletionEnabledCache = {};
}
};

/**
* Clear courses nav caches.
*
* @module mm.addons.coursecompletion
* @ngdoc method
* @name $mmaCourseCompletionHandlers#clearCoursesNavCache
*/
self.clearCoursesNavCache = function() {
coursesNavEnabledCache = {};
};

/**
* View user completion handler.
Expand Down Expand Up @@ -55,7 +98,16 @@ angular.module('mm.addons.coursecompletion')
* @return {Boolean} True if handler is enabled, false otherwise.
*/
self.isEnabledForUser = function(user, courseId) {
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId);
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId).then(function() {
var cacheKey = getCacheKey(courseId, user.id);
if (typeof viewCompletionEnabledCache[cacheKey] != 'undefined') {
return viewCompletionEnabledCache[cacheKey];
}
return $mmaCourseCompletion.isPluginViewEnabledForUser(courseId, user.id).then(function(enabled) {
viewCompletionEnabledCache[cacheKey] = enabled;
return enabled;
});
});
};

/**
Expand Down Expand Up @@ -126,7 +178,16 @@ angular.module('mm.addons.coursecompletion')
if (accessData && accessData.type == mmCoursesAccessMethods.guest) {
return false; // Not enabled for guests.
}
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId);
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId).then(function() {
// Check if the user can see his own report, teachers can't.
if (typeof coursesNavEnabledCache[courseId] != 'undefined') {
return coursesNavEnabledCache[courseId];
}
return $mmaCourseCompletion.isPluginViewEnabledForUser(courseId).then(function(enabled) {
coursesNavEnabledCache[courseId] = enabled;
return enabled;
});
});
};

/**
Expand Down Expand Up @@ -161,4 +222,16 @@ angular.module('mm.addons.coursecompletion')
};

return self;
})

.run(function($mmaCourseCompletionHandlers, $mmEvents, mmCoreEventLogout, mmCoursesEventMyCoursesRefreshed,
mmUserEventProfileRefreshed) {
$mmEvents.on(mmCoreEventLogout, function() {
$mmaCourseCompletionHandlers.clearViewCompletionCache();
$mmaCourseCompletionHandlers.clearCoursesNavCache();
});
$mmEvents.on(mmCoursesEventMyCoursesRefreshed, $mmaCourseCompletionHandlers.clearCoursesNavCache);
$mmEvents.on(mmUserEventProfileRefreshed, function(data) {
$mmaCourseCompletionHandlers.clearViewCompletionCache(data.courseid, data.userid);
});
});
24 changes: 24 additions & 0 deletions www/addons/grades/services/grades.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,30 @@ angular.module('mm.addons.grades')
});
};

/**
* Returns whether or not the grade addon is enabled for a certain user.
*
* @module mm.addons.grades
* @ngdoc method
* @name $mmaGrades#isPluginEnabledForUser
* @param {Number} courseId Course ID.
* @param {Number} userId User ID.
* @param {String} [siteId] Site ID. If not defined, current site.
* @return {Promise} Promise resolved with true if plugin is enabled, rejected or resolved with false otherwise.
*/
self.isPluginEnabledForUser = function(courseId, userId) {
// We don't use the getGradesTable function to prevent formatting the table.
var data = {
courseid: courseId,
userid: userId
};
return $mmSite.read('gradereport_user_get_grades_table', data, {}).then(function() {
return true;
}).catch(function() {
return false;
});
};

/**
* Get the grades for a certain course.
* For now we only support gradereport_user_get_grades_table. It returns the complete grades table.
Expand Down
50 changes: 48 additions & 2 deletions www/addons/grades/services/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,37 @@ angular.module('mm.addons.grades')
*/
.factory('$mmaGradesHandlers', function($mmaGrades, $state, $mmUtil, $mmContentLinksHelper, mmCoursesAccessMethods) {

var self = {};
var self = {},
viewGradesEnabledCache = {}; // We use a "cache" to decrease network usage.

/**
* Get a cache key to identify a course and a user.
*
* @param {Number} courseId Course ID.
* @param {Number} userId User ID.
* @return {String} Cache key.
*/
function getCacheKey(courseId, userId) {
return courseId + '#' + userId;
}

/**
* Clear view grades cache.
* If a courseId and userId are specified, it will only delete the entry for that user and course.
*
* @module mm.addons.grades
* @ngdoc method
* @name $mmaGradesHandlers#clearViewGradesCache
* @param {Number} [courseId] Course ID.
* @param {Number} [userId] User ID.
*/
self.clearViewGradesCache = function(courseId, userId) {
if (courseId && userId) {
delete viewGradesEnabledCache[getCacheKey(courseId, userId)];
} else {
viewGradesEnabledCache = {};
}
};

/**
* Course nav handler.
Expand Down Expand Up @@ -118,7 +148,16 @@ angular.module('mm.addons.grades')
* @return {Promise} Promise resolved with true if plugin is enabled, rejected or resolved with false otherwise.
*/
self.isEnabledForUser = function(user, courseId) {
return $mmaGrades.isPluginEnabledForCourse(courseId);
return $mmaGrades.isPluginEnabledForCourse(courseId).then(function() {
var cacheKey = getCacheKey(courseId, user.id);
if (typeof viewGradesEnabledCache[cacheKey] != 'undefined') {
return viewGradesEnabledCache[cacheKey];
}
return $mmaGrades.isPluginEnabledForUser(courseId, user.id).then(function(enabled) {
viewGradesEnabledCache[cacheKey] = enabled;
return enabled;
});
});
};

/**
Expand Down Expand Up @@ -237,4 +276,11 @@ angular.module('mm.addons.grades')
};

return self;
})

.run(function($mmaGradesHandlers, $mmEvents, mmCoreEventLogout, mmUserEventProfileRefreshed) {
$mmEvents.on(mmCoreEventLogout, $mmaGradesHandlers.clearViewGradesCache);
$mmEvents.on(mmUserEventProfileRefreshed, function(data) {
$mmaGradesHandlers.clearViewGradesCache(data.courseid, data.userid);
});
});
67 changes: 62 additions & 5 deletions www/addons/notes/services/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,40 @@ angular.module('mm.addons.notes')
* @ngdoc service
* @name $mmaNotesHandlers
*/
.factory('$mmaNotesHandlers', function($mmaNotes, $mmSite, $mmApp, $ionicModal, $mmUtil, mmCoursesAccessMethods) {
.factory('$mmaNotesHandlers', function($mmaNotes, $mmSite, $mmApp, $ionicModal, $mmUtil, $q, mmCoursesAccessMethods) {

var self = {};
// We use "caches" to decrease network usage.
var self = {},
addNoteEnabledCache = {},
coursesNavEnabledCache = {};

/**
* Clear add note cache.
* If a courseId is specified, it will only delete the entry for that course.
*
* @module mm.addons.notes
* @ngdoc method
* @name $mmaNotesHandlers#clearAddNoteCache
* @param {Number} [courseId] Course ID.
*/
self.clearAddNoteCache = function(courseId) {
if (courseId) {
delete addNoteEnabledCache[courseId];
} else {
addNoteEnabledCache = {};
}
};

/**
* Clear courses nav cache.
*
* @module mm.addons.notes
* @ngdoc method
* @name $mmaNotesHandlers#clearCoursesNavCache
*/
self.clearCoursesNavCache = function() {
coursesNavEnabledCache = {};
};

/**
* Add a note handler.
Expand All @@ -52,11 +83,20 @@ angular.module('mm.addons.notes')
*
* @param {Object} user User to check.
* @param {Number} courseId Course ID.
* @return {Boolean} True if handler is enabled, false otherwise.
* @return {Promise} Promise resolved with true if enabled, resolved with false otherwise.
*/
self.isEnabledForUser = function(user, courseId) {
// Active course required.
return courseId && user.id != $mmSite.getUserId();
if (!courseId || user.id == $mmSite.getUserId()) {
return $q.when(false);
}
if (typeof addNoteEnabledCache[courseId] != 'undefined') {
return addNoteEnabledCache[courseId];
}
return $mmaNotes.isPluginAddNoteEnabledForCourse(courseId).then(function(enabled) {
addNoteEnabledCache[courseId] = enabled;
return enabled;
});
};

/**
Expand Down Expand Up @@ -161,7 +201,13 @@ angular.module('mm.addons.notes')
if (accessData && accessData.type == mmCoursesAccessMethods.guest) {
return false; // Not enabled for guests.
}
return true;
if (typeof coursesNavEnabledCache[courseId] != 'undefined') {
return coursesNavEnabledCache[courseId];
}
return $mmaNotes.isPluginViewNotesEnabledForCourse(courseId).then(function(enabled) {
coursesNavEnabledCache[courseId] = enabled;
return enabled;
});
};

/**
Expand Down Expand Up @@ -196,4 +242,15 @@ angular.module('mm.addons.notes')
};

return self;
})

.run(function($mmaNotesHandlers, $mmEvents, mmCoreEventLogout, mmCoursesEventMyCoursesRefreshed, mmUserEventProfileRefreshed) {
$mmEvents.on(mmCoreEventLogout, function() {
$mmaNotesHandlers.clearAddNoteCache();
$mmaNotesHandlers.clearCoursesNavCache();
});
$mmEvents.on(mmCoursesEventMyCoursesRefreshed, $mmaNotesHandlers.clearCoursesNavCache);
$mmEvents.on(mmUserEventProfileRefreshed, function(data) {
$mmaNotesHandlers.clearAddNoteCache(data.courseid);
});
});
Loading