Skip to content

Commit e1f0d18

Browse files
committed
MOBILE-1357 grades: Add grade content link handler
1 parent b8fc3e6 commit e1f0d18

File tree

4 files changed

+103
-2
lines changed

4 files changed

+103
-2
lines changed

www/addons/grades/main.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ angular.module('mm.addons.grades', [])
1717
.constant('mmaGradesPriority', 400)
1818
.constant('mmaGradesViewGradesPriority', 400)
1919

20-
.config(function($stateProvider, $mmUserDelegateProvider, $mmCoursesDelegateProvider, mmaGradesPriority, mmaGradesViewGradesPriority) {
20+
.config(function($stateProvider, $mmUserDelegateProvider, $mmCoursesDelegateProvider, $mmContentLinksDelegateProvider,
21+
mmaGradesPriority, mmaGradesViewGradesPriority) {
2122

2223
$stateProvider
2324

@@ -41,4 +42,7 @@ angular.module('mm.addons.grades', [])
4142

4243
// Register courses content plugin.
4344
$mmCoursesDelegateProvider.registerNavHandler('mmaGrades', '$mmaGradesHandlers.coursesNav', mmaGradesPriority);
45+
46+
// Register content links handler.
47+
$mmContentLinksDelegateProvider.registerLinkHandler('mmaGrades', '$mmaGradesHandlers.linksHandler');
4448
});

www/addons/grades/services/handlers.js

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ angular.module('mm.addons.grades')
2121
* @ngdoc service
2222
* @name $mmaGradesHandlers
2323
*/
24-
.factory('$mmaGradesHandlers', function($mmaGrades, $state, mmCoursesAccessMethods) {
24+
.factory('$mmaGradesHandlers', function($mmaGrades, $state, $mmUtil, $mmContentLinksHelper, mmCoursesAccessMethods) {
2525

2626
var self = {};
2727

@@ -155,5 +155,56 @@ angular.module('mm.addons.grades')
155155
return self;
156156
};
157157

158+
/**
159+
* Content links handler.
160+
*
161+
* @module mm.addons.grades
162+
* @ngdoc method
163+
* @name $mmaGradesHandlers#linksHandler
164+
*/
165+
self.linksHandler = function() {
166+
167+
var self = {};
168+
169+
/**
170+
* Whether or not the handler is enabled for the site.
171+
*
172+
* @return {Boolean}
173+
*/
174+
self.isEnabled = function() {
175+
return $mmaGrades.isPluginEnabled();
176+
};
177+
178+
/**
179+
* Get actions to perform with the link.
180+
*
181+
* @param {String} url URL to treat.
182+
* @return {Object[]} List of actions. See {@link $mmContentLinksDelegate#registerLinkHandler}.
183+
*/
184+
self.getActions = function(url) {
185+
// Check it's a grade URL.
186+
if (url.indexOf('/grade/report/user/index.php') > -1) {
187+
var params = $mmUtil.extractUrlParams(url);
188+
if (typeof params.id != 'undefined') {
189+
// Return actions.
190+
return [{
191+
message: 'mm.core.view',
192+
icon: 'ion-eye',
193+
action: function(siteId) {
194+
var stateParams = {
195+
course: {id: parseInt(params.id, 10)},
196+
userid: parseInt(params.userid, 10)
197+
};
198+
$mmContentLinksHelper.goInSite('site.grades', stateParams, siteId);
199+
}
200+
}];
201+
}
202+
}
203+
return [];
204+
};
205+
206+
return self;
207+
};
208+
158209
return self;
159210
});

www/core/components/contentlinks/services/helper.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,31 @@ angular.module('mm.core.contentlinks')
2828

2929
var self = {};
3030

31+
/**
32+
* Goes to a certain state in a certain site. If the site is current site it will perform a regular navigation,
33+
* otherwise it uses the 'redirect' state to change the site.
34+
*
35+
* @module mm.core
36+
* @ngdoc method
37+
* @name $mmUtil#goToSite
38+
* @param {String} stateName Name of the state to go.
39+
* @param {Object} stateParams Params to send to the state.
40+
* @param {String} [siteId] Site ID. If not defined, current site.
41+
* @return {Promise} Promise resolved when the state is changed.
42+
*/
43+
self.goInSite = function(stateName, stateParams, siteId) {
44+
siteId = siteId || $mmSite.getId();
45+
if (siteId == $mmSite.getId()) {
46+
return $state.go(stateName, stateParams);
47+
} else {
48+
return $state.go('redirect', {
49+
siteid: siteId,
50+
state: stateName,
51+
params: stateParams
52+
});
53+
}
54+
};
55+
3156
/**
3257
* Go to the view to choose a site.
3358
*

www/core/lib/util.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,9 @@ angular.module('mm.core')
886886
* 7.toFixed(2) -> 7.00
887887
* roundToDecimals(7, 2) -> 7
888888
*
889+
* @module mm.core
890+
* @ngdoc method
891+
* @name $mmUtil#roundToDecimals
889892
* @param {Float} number Float to round.
890893
* @param {Number} [decimals=2] Number of decimals. By default, 2.
891894
* @return {Float} Rounded number.
@@ -899,6 +902,24 @@ angular.module('mm.core')
899902
return Math.round(parseFloat(number) * multiplier) / multiplier;
900903
};
901904

905+
/**
906+
* Extracts the parameters from a URL and stores them in an object.
907+
*
908+
* @module mm.core
909+
* @ngdoc method
910+
* @name $mmUtil#extractUrlParams
911+
* @param {String} url URL to treat.
912+
* @return {Object} Object with the params.
913+
*/
914+
self.extractUrlParams = function(url) {
915+
var regex = /[?&]+([^=&]+)=?([^&]*)?/gi,
916+
params = {};
917+
url.replace(regex, function(match, key, value) {
918+
params[key] = value !== undefined ? value : '';
919+
});
920+
return params;
921+
};
922+
902923
return self;
903924
};
904925
});

0 commit comments

Comments
 (0)