Skip to content

Commit 4197234

Browse files
authored
Merge pull request #693 from crazyserver/MOBILE-1824
Mobile 1824
2 parents c9ab8f6 + c4c3d69 commit 4197234

File tree

11 files changed

+109
-47
lines changed

11 files changed

+109
-47
lines changed

www/addons/mod/wiki/controllers/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ angular.module('mm.addons.mod_wiki')
7373
moduleid: module.id,
7474
courseid: courseId,
7575
pagetitle: page.title,
76+
pageid: null,
7677
wikiid: wiki.id,
7778
subwikiid: page.subwikiid,
7879
action: 'page'

www/core/components/courses/controllers/search.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ angular.module('mm.core.courses')
5050
if (message) {
5151
$mmUtil.showErrorModal(message);
5252
} else {
53-
$mmUtil.showErrorModal('mma.searchcourses.errorsearching', true);
53+
$mmUtil.showErrorModal('mm.courses.errorsearching', true);
5454
}
5555
return $q.reject();
5656
});

www/core/components/login/controllers/sites.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@ angular.module('mm.core.login')
6464
});
6565
};
6666

67-
$scope.login = function(siteid) {
67+
$scope.login = function(siteId) {
6868
var modal = $mmUtil.showModalLoading();
6969

70-
$mmSitesManager.loadSite(siteid).then(function() {
70+
$mmSitesManager.loadSite(siteId).then(function() {
7171
$ionicHistory.nextViewOptions({disableBack: true});
7272
return $mmLoginHelper.goToSiteInitialPage();
7373
}, function(error) {
74-
$log.error('Error loading site '+siteid);
74+
$log.error('Error loading site ' + siteId);
7575
error = error || 'Error loading site.';
7676
$mmUtil.showErrorModal(error);
7777
}).finally(function() {

www/core/components/login/main.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
angular.module('mm.core.login', [])
1616

17+
.constant('mmCoreLoginTokenChangePassword', '*changepassword*')
18+
1719
.config(function($stateProvider, $urlRouterProvider, $mmInitDelegateProvider, mmInitDelegateMaxAddonPriority) {
1820

1921
$stateProvider
@@ -96,11 +98,12 @@ angular.module('mm.core.login', [])
9698

9799
.run(function($log, $state, $mmUtil, $translate, $mmSitesManager, $rootScope, $mmSite, $mmURLDelegate, $ionicHistory, $timeout,
98100
$mmEvents, $mmLoginHelper, mmCoreEventSessionExpired, $mmApp, $ionicPlatform, mmCoreConfigConstants,
99-
mmCoreEventPasswordChangeForced) {
101+
mmCoreEventPasswordChangeForced, mmCoreLoginTokenChangePassword) {
100102

101103
$log = $log.getInstance('mmLogin');
102104

103-
var isSSOConfirmShown,
105+
var isSSOConfirmShown = false,
106+
isChangePasswordConfirmShown = false,
104107
waitingForBrowser = false;
105108

106109
// Listen for sessionExpired event to reconnect the user.
@@ -230,19 +233,29 @@ angular.module('mm.core.login', [])
230233
}
231234

232235
// Expire user token for the site.
233-
$mmSitesManager.updateSiteToken(siteUrl, site.infos.username, 'expired');
236+
$log.debug('Expiring token for site ' + siteId);
237+
$mmSitesManager.updateSiteTokenBySiteId(siteId, mmCoreLoginTokenChangePassword);
234238

235239
// Site that triggered the event is not current site.
236240
if (siteId !== $mmSite.getId()) {
237241
return;
238242
}
239243

240-
// User password change forced, invalidate all site caches.
241-
site.invalidateWsCache();
244+
if (!isChangePasswordConfirmShown && !waitingForBrowser) {
245+
isChangePasswordConfirmShown = true;
246+
247+
// User password change forced, invalidate all site caches.
248+
site.invalidateWsCache();
242249

243-
$mmEvents.trigger(mmCoreEventSessionExpired, siteId);
244-
// Session expired, trigger event.
245-
$mmUtil.openChangePassword(siteUrl, $translate.instant('mm.core.nopasswordchangeforced'));
250+
$mmEvents.trigger(mmCoreEventSessionExpired, siteId);
251+
252+
// Session expired, trigger event.
253+
$mmLoginHelper.openChangePassword(siteUrl, $translate.instant('mm.core.nopasswordchangeforced')).then(function() {
254+
waitingForBrowser = true;
255+
}).finally(function() {
256+
isChangePasswordConfirmShown = false;
257+
});
258+
}
246259
});
247260

248261
}

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,11 +248,29 @@ angular.module('mm.core.login')
248248
if (typeof error == 'string') {
249249
$mmUtil.showErrorModal(error);
250250
} else if (error.errorcode == 'forcepasswordchangenotice') {
251-
$mmUtil.openChangePassword(siteurl, error.error);
251+
self.openChangePassword(siteurl, error.error);
252252
} else {
253253
$mmUtil.showErrorModal(error.error);
254254
}
255255
};
256256

257+
/**
258+
* Convenient helper to open change password page.
259+
*
260+
* @module mm.core.login
261+
* @ngdoc method
262+
* @name $mmLoginHelper#openChangePassword
263+
* @param {String} siteurl Site URL to construct change password URL.
264+
* @param {String} error Error message.
265+
*/
266+
self.openChangePassword = function(siteurl, error) {
267+
var message = error + "<br>" + $translate.instant('mm.login.visitchangepassword');
268+
return $mmUtil.showConfirm(message, $translate.instant('mm.core.notice')).then(function() {
269+
var changepasswordurl = siteurl + "/login/change_password.php";
270+
$mmUtil.openInApp(changepasswordurl);
271+
return $q.when();
272+
});
273+
};
274+
257275
return self;
258276
});

www/core/components/question/scss/styles.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ li.mm-question-answer-correct,
2828
.mm-question-comment,
2929
.mm-question-comment p {
3030
color: $mm-question-correct-color;
31+
-webkit-text-fill-color: $mm-question-correct-color; /* Override iOS / Android font color change */
3132
background-color: #dff0d8;
3233
}
3334

@@ -53,6 +54,7 @@ li.mm-question-answer-incorrect,
5354
.mm-question-incorrect,
5455
.mm-question-incorrect p {
5556
color: $mm-question-incorrect-color;
57+
-webkit-text-fill-color: $mm-question-incorrect-color; /* Override iOS / Android font color change */
5658
background-color: #f2dede;
5759
}
5860

@@ -62,6 +64,11 @@ li.mm-question-answer-incorrect,
6264
border-color: $mm-question-incorrect-color;
6365
}
6466

67+
.mm-question-answer-correct input:disabled,
68+
.mm-question-answer-incorrect input:disabled {
69+
opacity: 1;
70+
}
71+
6572
.mm-question-feedback-container {
6673
background-color: #fcf8e3;
6774
color: #8a6d3b;

www/core/directives/richtexteditor.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,14 +414,16 @@ angular.module('mm.core')
414414
editorHeightWithoutResize = editorInitialHeight + toolbarHeight,
415415
contentVisibleHeight,
416416
editorContentNewHeight,
417-
screenSmallerThanEditor;
417+
screenSmallerThanEditor,
418+
editorMaximized;
418419

419420
if (typeof fixedBarsHeight == 'undefined') {
420421
fixedBarsHeight = calculateFixedBarsHeight(editorEl);
421422
}
422423

424+
editorMaximized = !!editorEl.querySelector('.cke_maximized');
423425
contentVisibleHeight = $window.innerHeight - fixedBarsHeight;
424-
screenSmallerThanEditor = contentVisibleHeight > 0 && contentVisibleHeight < editorHeightWithoutResize;
426+
screenSmallerThanEditor = !editorMaximized && contentVisibleHeight > 0 && contentVisibleHeight < editorHeightWithoutResize;
425427
editorContentNewHeight = contentVisibleHeight - toolbarHeight;
426428

427429
if (resized && !screenSmallerThanEditor) {

www/core/lib/sitesfactory.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ angular.module('mm.core')
117117

118118
this.$get = function($http, $q, $mmWS, $mmDB, $log, md5, $mmApp, $mmLang, $mmUtil, $mmFS, mmCoreWSCacheStore,
119119
mmCoreWSPrefix, mmCoreSessionExpired, $mmEvents, mmCoreEventSessionExpired, mmCoreUserDeleted, mmCoreEventUserDeleted,
120-
$mmText, $translate, mmCoreConfigConstants, mmCoreUserPasswordChangeForced, mmCoreEventPasswordChangeForced) {
120+
$mmText, $translate, mmCoreConfigConstants, mmCoreUserPasswordChangeForced, mmCoreEventPasswordChangeForced,
121+
mmCoreLoginTokenChangePassword) {
121122

122123
$log = $log.getInstance('$mmSite');
123124

@@ -254,6 +255,15 @@ angular.module('mm.core')
254255
this.token = token;
255256
};
256257

258+
/**
259+
* Check if token is already expired using local data.
260+
*
261+
* @return {Boolean} is token is expired or not.
262+
*/
263+
Site.prototype.isTokenExpired = function() {
264+
return this.token == mmCoreLoginTokenChangePassword;
265+
};
266+
257267
/**
258268
* Set site info.
259269
*
@@ -425,6 +435,13 @@ angular.module('mm.core')
425435
initialToken = site.token;
426436
data = data || {};
427437

438+
// Prevent calls with expired tokens.
439+
if (site.isTokenExpired()) {
440+
$log.debug('Token expired, rejecting.');
441+
$mmEvents.trigger(mmCoreEventSessionExpired, site.id);
442+
return $mmLang.translateAndReject('mm.login.reconnectdescription');
443+
}
444+
428445
// Get the method to use based on the available ones.
429446
method = site.getCompatibleFunction(method);
430447

www/core/lib/sitesmanager.js

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ angular.module('mm.core')
109109
}
110110
return $mmLang.translateAndReject('mm.login.checksiteversion');
111111
});
112-
});;
112+
});
113113
}
114114
};
115115

@@ -159,7 +159,7 @@ angular.module('mm.core')
159159
return {siteurl: siteurl, code: data.code, warning: data.warning};
160160
});
161161
});
162-
};
162+
}
163163

164164
/**
165165
* Check if a site exists.
@@ -410,23 +410,29 @@ angular.module('mm.core')
410410
* @module mm.core
411411
* @ngdoc method
412412
* @name $mmSitesManager#loadSite
413-
* @param {String} siteid ID of the site to load.
413+
* @param {String} siteId ID of the site to load.
414414
* @return {Promise} Promise to be resolved when the site is loaded.
415415
*/
416-
self.loadSite = function(siteid) {
417-
$log.debug('Load site '+siteid);
416+
self.loadSite = function(siteId) {
417+
$log.debug('Load site ' + siteId);
418418

419-
return self.getSite(siteid).then(function(site) {
419+
return self.getSite(siteId).then(function(site) {
420420
currentSite = site;
421-
self.login(siteid);
421+
self.login(siteId);
422+
423+
if (site.isTokenExpired()) {
424+
$log.debug('Token expired, rejecting.');
425+
$mmEvents.trigger(mmCoreEventSessionExpired, siteId);
426+
return $mmLang.translateAndReject('mm.login.reconnectdescription');
427+
}
422428

423429
// Check if local_mobile was installed to Moodle.
424430
return site.checkIfLocalMobileInstalledAndNotUsed().then(function() {
425431
// Local mobile was added. Throw invalid session to force reconnect and create a new token.
426-
$mmEvents.trigger(mmCoreEventSessionExpired, siteid);
432+
$mmEvents.trigger(mmCoreEventSessionExpired, siteId);
427433
}, function() {
428434
// Update site info. We don't block the UI.
429-
self.updateSiteInfo(siteid).finally(function() {
435+
self.updateSiteInfo(siteId).finally(function() {
430436
var infos = site.getInfo(),
431437
validation = validateSiteInfo(infos);
432438
if (validation !== true) {
@@ -670,18 +676,32 @@ angular.module('mm.core')
670676
* @module mm.core
671677
* @ngdoc method
672678
* @name $mmSitesManager#updateSiteToken
673-
* @param {String} siteurl Site's URL.
679+
* @param {String} siteUrl Site's URL.
674680
* @param {String} username Username.
675681
* @param {String} token User's new token.
676682
* @return {Promise} A promise to be resolved when the site is updated.
677683
*/
678-
self.updateSiteToken = function(siteurl, username, token) {
679-
var siteid = self.createSiteID(siteurl, username);
680-
return self.getSite(siteid).then(function(site) {
684+
self.updateSiteToken = function(siteUrl, username, token) {
685+
var siteId = self.createSiteID(siteUrl, username);
686+
return self.updateSiteTokenBySiteId(siteId, token);
687+
};
688+
689+
/**
690+
* Updates a site's token usign siteId.
691+
*
692+
* @module mm.core
693+
* @ngdoc method
694+
* @name $mmSitesManager#updateSiteTokenBySiteId
695+
* @param {String} siteId Site Id.
696+
* @param {String} token User's new token.
697+
* @return {Promise} A promise to be resolved when the site is updated.
698+
*/
699+
self.updateSiteTokenBySiteId = function(siteId, token) {
700+
return self.getSite(siteId).then(function(site) {
681701
site.token = token;
682702

683703
return $mmApp.getDB().insert(mmCoreSitesStore, {
684-
id: siteid,
704+
id: siteId,
685705
siteurl: site.getURL(),
686706
token: token,
687707
infos: site.getInfo()

www/core/lib/util.js

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,23 +1652,6 @@ angular.module('mm.core')
16521652
return error && localErrors.indexOf(error) == -1;
16531653
};
16541654

1655-
/**
1656-
* Convenient helper to open change password page.
1657-
*
1658-
* @module mm.core
1659-
* @ngdoc method
1660-
* @name $mmUtil#openChangePassword
1661-
* @param {String} siteurl Site URL to construct change password URL.
1662-
* @param {String} error Error message.
1663-
*/
1664-
self.openChangePassword = function(siteurl, error) {
1665-
var message = error + "<br>" + $translate.instant('mm.login.visitchangepassword');
1666-
self.showConfirm(message, $translate.instant('mm.core.notice')).then(function() {
1667-
var changepasswordurl = siteurl + "/login/change_password.php";
1668-
self.openInApp(changepasswordurl);
1669-
});
1670-
};
1671-
16721655
/**
16731656
* Focus an element and open keyboard.
16741657
*

0 commit comments

Comments
 (0)