Skip to content

Commit 6f9a9b5

Browse files
committed
Merge pull request #440 from dpalou/MOBILE-1465
Mobile 1465
2 parents b23c7fb + 1aa3b16 commit 6f9a9b5

File tree

10 files changed

+289
-18
lines changed

10 files changed

+289
-18
lines changed

www/addons/coursecompletion/services/coursecompletion.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ angular.module('mm.addons.coursecompletion')
106106
preSets = {
107107
cacheKey: getCompletionCacheKey(courseid, userid)
108108
};
109-
110109
return $mmSite.read('core_completion_get_course_completion_status', data, preSets).then(function(data) {
111110
if (data.completionstatus) {
112111
return data.completionstatus;
@@ -184,6 +183,24 @@ angular.module('mm.addons.coursecompletion')
184183
});
185184
};
186185

186+
/**
187+
* Returns whether or not the view course completion plugin is enabled for a certain user.
188+
*
189+
* @module mm.addons.coursecompletion
190+
* @ngdoc method
191+
* @name $mmaCourseCompletion#isPluginViewEnabledForUser
192+
* @param {Number} courseId Course ID.
193+
* @param {Number} userId User ID.
194+
* @return {Promise} Promise resolved with true if plugin is enabled, rejected or resolved with false otherwise.
195+
*/
196+
self.isPluginViewEnabledForUser = function(courseId, userId) {
197+
return self.getCompletion(courseId, userId).then(function() {
198+
return true;
199+
}).catch(function() {
200+
return false;
201+
});
202+
};
203+
187204
/**
188205
* Returns whether or not the self completion is available in current site.
189206
*

www/addons/coursecompletion/services/handlers.js

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,50 @@ angular.module('mm.addons.coursecompletion')
2525
*/
2626
.factory('$mmaCourseCompletionHandlers', function($mmaCourseCompletion, $state, mmCoursesAccessMethods) {
2727

28-
var self = {};
28+
// We use "caches" to decrease network usage.
29+
var self = {},
30+
viewCompletionEnabledCache = {},
31+
coursesNavEnabledCache = {};
32+
33+
/**
34+
* Get a cache key to identify a course and a user.
35+
*
36+
* @param {Number} courseId Course ID.
37+
* @param {Number} userId User ID.
38+
* @return {String} Cache key.
39+
*/
40+
function getCacheKey(courseId, userId) {
41+
return courseId + '#' + userId;
42+
}
43+
44+
/**
45+
* Clear view completion cache.
46+
* If a courseId and userId are specified, it will only delete the entry for that user and course.
47+
*
48+
* @module mm.addons.coursecompletion
49+
* @ngdoc method
50+
* @name $mmaCourseCompletionHandlers#clearViewCompletionCache
51+
* @param {Number} [courseId] Course ID.
52+
* @param {Number} [userId] User ID.
53+
*/
54+
self.clearViewCompletionCache = function(courseId, userId) {
55+
if (courseId && userId) {
56+
delete viewCompletionEnabledCache[getCacheKey(courseId, userId)];
57+
} else {
58+
viewCompletionEnabledCache = {};
59+
}
60+
};
61+
62+
/**
63+
* Clear courses nav caches.
64+
*
65+
* @module mm.addons.coursecompletion
66+
* @ngdoc method
67+
* @name $mmaCourseCompletionHandlers#clearCoursesNavCache
68+
*/
69+
self.clearCoursesNavCache = function() {
70+
coursesNavEnabledCache = {};
71+
};
2972

3073
/**
3174
* View user completion handler.
@@ -55,7 +98,16 @@ angular.module('mm.addons.coursecompletion')
5598
* @return {Boolean} True if handler is enabled, false otherwise.
5699
*/
57100
self.isEnabledForUser = function(user, courseId) {
58-
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId);
101+
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId).then(function() {
102+
var cacheKey = getCacheKey(courseId, user.id);
103+
if (typeof viewCompletionEnabledCache[cacheKey] != 'undefined') {
104+
return viewCompletionEnabledCache[cacheKey];
105+
}
106+
return $mmaCourseCompletion.isPluginViewEnabledForUser(courseId, user.id).then(function(enabled) {
107+
viewCompletionEnabledCache[cacheKey] = enabled;
108+
return enabled;
109+
});
110+
});
59111
};
60112

61113
/**
@@ -126,7 +178,16 @@ angular.module('mm.addons.coursecompletion')
126178
if (accessData && accessData.type == mmCoursesAccessMethods.guest) {
127179
return false; // Not enabled for guests.
128180
}
129-
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId);
181+
return $mmaCourseCompletion.isPluginViewEnabledForCourse(courseId).then(function() {
182+
// Check if the user can see his own report, teachers can't.
183+
if (typeof coursesNavEnabledCache[courseId] != 'undefined') {
184+
return coursesNavEnabledCache[courseId];
185+
}
186+
return $mmaCourseCompletion.isPluginViewEnabledForUser(courseId).then(function(enabled) {
187+
coursesNavEnabledCache[courseId] = enabled;
188+
return enabled;
189+
});
190+
});
130191
};
131192

132193
/**
@@ -161,4 +222,16 @@ angular.module('mm.addons.coursecompletion')
161222
};
162223

163224
return self;
225+
})
226+
227+
.run(function($mmaCourseCompletionHandlers, $mmEvents, mmCoreEventLogout, mmCoursesEventMyCoursesRefreshed,
228+
mmUserEventProfileRefreshed) {
229+
$mmEvents.on(mmCoreEventLogout, function() {
230+
$mmaCourseCompletionHandlers.clearViewCompletionCache();
231+
$mmaCourseCompletionHandlers.clearCoursesNavCache();
232+
});
233+
$mmEvents.on(mmCoursesEventMyCoursesRefreshed, $mmaCourseCompletionHandlers.clearCoursesNavCache);
234+
$mmEvents.on(mmUserEventProfileRefreshed, function(data) {
235+
$mmaCourseCompletionHandlers.clearViewCompletionCache(data.courseid, data.userid);
236+
});
164237
});

www/addons/grades/services/grades.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,30 @@ angular.module('mm.addons.grades')
224224
});
225225
};
226226

227+
/**
228+
* Returns whether or not the grade addon is enabled for a certain user.
229+
*
230+
* @module mm.addons.grades
231+
* @ngdoc method
232+
* @name $mmaGrades#isPluginEnabledForUser
233+
* @param {Number} courseId Course ID.
234+
* @param {Number} userId User ID.
235+
* @param {String} [siteId] Site ID. If not defined, current site.
236+
* @return {Promise} Promise resolved with true if plugin is enabled, rejected or resolved with false otherwise.
237+
*/
238+
self.isPluginEnabledForUser = function(courseId, userId) {
239+
// We don't use the getGradesTable function to prevent formatting the table.
240+
var data = {
241+
courseid: courseId,
242+
userid: userId
243+
};
244+
return $mmSite.read('gradereport_user_get_grades_table', data, {}).then(function() {
245+
return true;
246+
}).catch(function() {
247+
return false;
248+
});
249+
};
250+
227251
/**
228252
* Get the grades for a certain course.
229253
* For now we only support gradereport_user_get_grades_table. It returns the complete grades table.

www/addons/grades/services/handlers.js

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,37 @@ angular.module('mm.addons.grades')
2323
*/
2424
.factory('$mmaGradesHandlers', function($mmaGrades, $state, $mmUtil, $mmContentLinksHelper, mmCoursesAccessMethods) {
2525

26-
var self = {};
26+
var self = {},
27+
viewGradesEnabledCache = {}; // We use a "cache" to decrease network usage.
28+
29+
/**
30+
* Get a cache key to identify a course and a user.
31+
*
32+
* @param {Number} courseId Course ID.
33+
* @param {Number} userId User ID.
34+
* @return {String} Cache key.
35+
*/
36+
function getCacheKey(courseId, userId) {
37+
return courseId + '#' + userId;
38+
}
39+
40+
/**
41+
* Clear view grades cache.
42+
* If a courseId and userId are specified, it will only delete the entry for that user and course.
43+
*
44+
* @module mm.addons.grades
45+
* @ngdoc method
46+
* @name $mmaGradesHandlers#clearViewGradesCache
47+
* @param {Number} [courseId] Course ID.
48+
* @param {Number} [userId] User ID.
49+
*/
50+
self.clearViewGradesCache = function(courseId, userId) {
51+
if (courseId && userId) {
52+
delete viewGradesEnabledCache[getCacheKey(courseId, userId)];
53+
} else {
54+
viewGradesEnabledCache = {};
55+
}
56+
};
2757

2858
/**
2959
* Course nav handler.
@@ -118,7 +148,16 @@ angular.module('mm.addons.grades')
118148
* @return {Promise} Promise resolved with true if plugin is enabled, rejected or resolved with false otherwise.
119149
*/
120150
self.isEnabledForUser = function(user, courseId) {
121-
return $mmaGrades.isPluginEnabledForCourse(courseId);
151+
return $mmaGrades.isPluginEnabledForCourse(courseId).then(function() {
152+
var cacheKey = getCacheKey(courseId, user.id);
153+
if (typeof viewGradesEnabledCache[cacheKey] != 'undefined') {
154+
return viewGradesEnabledCache[cacheKey];
155+
}
156+
return $mmaGrades.isPluginEnabledForUser(courseId, user.id).then(function(enabled) {
157+
viewGradesEnabledCache[cacheKey] = enabled;
158+
return enabled;
159+
});
160+
});
122161
};
123162

124163
/**
@@ -237,4 +276,11 @@ angular.module('mm.addons.grades')
237276
};
238277

239278
return self;
279+
})
280+
281+
.run(function($mmaGradesHandlers, $mmEvents, mmCoreEventLogout, mmUserEventProfileRefreshed) {
282+
$mmEvents.on(mmCoreEventLogout, $mmaGradesHandlers.clearViewGradesCache);
283+
$mmEvents.on(mmUserEventProfileRefreshed, function(data) {
284+
$mmaGradesHandlers.clearViewGradesCache(data.courseid, data.userid);
285+
});
240286
});

www/addons/notes/services/handlers.js

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,40 @@ angular.module('mm.addons.notes')
2323
* @ngdoc service
2424
* @name $mmaNotesHandlers
2525
*/
26-
.factory('$mmaNotesHandlers', function($mmaNotes, $mmSite, $mmApp, $ionicModal, $mmUtil, mmCoursesAccessMethods) {
26+
.factory('$mmaNotesHandlers', function($mmaNotes, $mmSite, $mmApp, $ionicModal, $mmUtil, $q, mmCoursesAccessMethods) {
2727

28-
var self = {};
28+
// We use "caches" to decrease network usage.
29+
var self = {},
30+
addNoteEnabledCache = {},
31+
coursesNavEnabledCache = {};
32+
33+
/**
34+
* Clear add note cache.
35+
* If a courseId is specified, it will only delete the entry for that course.
36+
*
37+
* @module mm.addons.notes
38+
* @ngdoc method
39+
* @name $mmaNotesHandlers#clearAddNoteCache
40+
* @param {Number} [courseId] Course ID.
41+
*/
42+
self.clearAddNoteCache = function(courseId) {
43+
if (courseId) {
44+
delete addNoteEnabledCache[courseId];
45+
} else {
46+
addNoteEnabledCache = {};
47+
}
48+
};
49+
50+
/**
51+
* Clear courses nav cache.
52+
*
53+
* @module mm.addons.notes
54+
* @ngdoc method
55+
* @name $mmaNotesHandlers#clearCoursesNavCache
56+
*/
57+
self.clearCoursesNavCache = function() {
58+
coursesNavEnabledCache = {};
59+
};
2960

3061
/**
3162
* Add a note handler.
@@ -52,11 +83,20 @@ angular.module('mm.addons.notes')
5283
*
5384
* @param {Object} user User to check.
5485
* @param {Number} courseId Course ID.
55-
* @return {Boolean} True if handler is enabled, false otherwise.
86+
* @return {Promise} Promise resolved with true if enabled, resolved with false otherwise.
5687
*/
5788
self.isEnabledForUser = function(user, courseId) {
5889
// Active course required.
59-
return courseId && user.id != $mmSite.getUserId();
90+
if (!courseId || user.id == $mmSite.getUserId()) {
91+
return $q.when(false);
92+
}
93+
if (typeof addNoteEnabledCache[courseId] != 'undefined') {
94+
return addNoteEnabledCache[courseId];
95+
}
96+
return $mmaNotes.isPluginAddNoteEnabledForCourse(courseId).then(function(enabled) {
97+
addNoteEnabledCache[courseId] = enabled;
98+
return enabled;
99+
});
60100
};
61101

62102
/**
@@ -161,7 +201,13 @@ angular.module('mm.addons.notes')
161201
if (accessData && accessData.type == mmCoursesAccessMethods.guest) {
162202
return false; // Not enabled for guests.
163203
}
164-
return true;
204+
if (typeof coursesNavEnabledCache[courseId] != 'undefined') {
205+
return coursesNavEnabledCache[courseId];
206+
}
207+
return $mmaNotes.isPluginViewNotesEnabledForCourse(courseId).then(function(enabled) {
208+
coursesNavEnabledCache[courseId] = enabled;
209+
return enabled;
210+
});
165211
};
166212

167213
/**
@@ -196,4 +242,15 @@ angular.module('mm.addons.notes')
196242
};
197243

198244
return self;
245+
})
246+
247+
.run(function($mmaNotesHandlers, $mmEvents, mmCoreEventLogout, mmCoursesEventMyCoursesRefreshed, mmUserEventProfileRefreshed) {
248+
$mmEvents.on(mmCoreEventLogout, function() {
249+
$mmaNotesHandlers.clearAddNoteCache();
250+
$mmaNotesHandlers.clearCoursesNavCache();
251+
});
252+
$mmEvents.on(mmCoursesEventMyCoursesRefreshed, $mmaNotesHandlers.clearCoursesNavCache);
253+
$mmEvents.on(mmUserEventProfileRefreshed, function(data) {
254+
$mmaNotesHandlers.clearAddNoteCache(data.courseid);
255+
});
199256
});

0 commit comments

Comments
 (0)