diff --git a/src/assets/i18n-en.json b/src/assets/i18n-en.json index 057a04bc..4c219c0e 100644 --- a/src/assets/i18n-en.json +++ b/src/assets/i18n-en.json @@ -45,9 +45,9 @@ "RANKING": { "DETAIL": "Ranking Details", "ME": "Me", - "MONTHLYPOINTS": "Points(Monthly)", - "PAGETITLE": "Leaderboard", - "TOTALPOINTS": "Points(Total)" + "MONTHLYPOINTS": "Points (Monthly)", + "PAGETITLE": "Ranking (Monthly)", + "TOTALPOINTS": "Points (Total)" }, "RESETPASSWORD": { "PAGETITLE": "Reset Password" diff --git a/src/pages/settings/settings.html b/src/pages/settings/settings.html index 5b516ab6..799dc693 100644 --- a/src/pages/settings/settings.html +++ b/src/pages/settings/settings.html @@ -8,23 +8,29 @@ {{ 'SETTINGS.PROFILE' | translate }} ({{ getUserEmail() }}) + + + + + Hide name in rankings + + + + + + {{ 'SETTINGS.SUPPORT' | translate }} + - - - - - {{ 'SETTINGS.SUPPORT' | translate }} - {{ 'SETTINGS.HELP' | translate }} + + diff --git a/src/pages/settings/settings.page.ts b/src/pages/settings/settings.page.ts index 34293901..774eed87 100644 --- a/src/pages/settings/settings.page.ts +++ b/src/pages/settings/settings.page.ts @@ -1,15 +1,15 @@ import { Component } from '@angular/core'; -import { App, NavController, MenuController, LoadingController } from 'ionic-angular'; +import { App, NavController, MenuController, LoadingController, AlertController } from 'ionic-angular'; // services import { CacheService } from '../../shared/cache/cache.service'; +import { GameService } from '../../services/game.service'; // pages -import { LeaderboardSettingsPage } from '../settings/leaderboard/leaderboard-settings.page'; import { LoginPage } from '../../pages/login/login'; import { TutorialPage } from '../settings/tutorial/tutorial.page'; import { TermsConditionsPage } from '../registration/terms-conditions/terms-conditions.page'; // Others import { TranslationService } from '../../shared/translation/translation.service'; -import { loadingMessages, errMessages } from '../../app/messages'; +import { loadingMessages } from '../../app/messages'; @Component({ selector: 'settings-page', @@ -17,34 +17,120 @@ import { loadingMessages, errMessages } from '../../app/messages'; }) export class SettingsPage { helpline: string = "help@practera.com"; + hideName: boolean = false; logoutMessage: any = loadingMessages.Logout.logout; settings: any = []; + isLock: boolean = false; + pageLoad: boolean = true; constructor( public appCtrl: App, + public alertCtrl: AlertController, + public cacheService: CacheService, + public gameService: GameService, public loadingCtrl: LoadingController, public menuCtrl: MenuController, public navCtrl: NavController, - public cache: CacheService, - public translationService: TranslationService) {} - getUserEmail() { - return this.cache.getLocal('email') || ''; + public translationService: TranslationService, + ) {} + + ionViewWillEnter(){ + this.pageLoad = true; + this.preload(); } - goLeaderBoardSettings(){ - this.navCtrl.push(LeaderboardSettingsPage); + + preload() { + const loading = this.loadingCtrl.create({ + content: 'Loading' + }); + loading.present(); + + let gameId = this.cacheService.getLocal('game_id'); + this.gameService.getCharacters(gameId) + .subscribe((characters) => { + let me = characters.Characters[0]; + if (me.meta == null) { + this.hideName = false; + } + if (me.meta != null){ + if (me.meta.private === 0) { + this.hideName = false; + } else { + this.hideName = true; + } + } + loading.dismiss(); + }, (err) => { + loading.dismiss(); + }); } + + triggerHideName() { + if (this.pageLoad) { + this.pageLoad = false; + return false; + } + + if (this.isLock) { + this.isLock = false; + } else { + const showAlert = (msg) => { + let alert = this.alertCtrl.create({ + subTitle: msg, + buttons: ['OK'] + }); + alert.present(); + } + + const loader = this.loadingCtrl.create({ + content: 'Updating' + }); + + loader.present().then(() => { + this.isLock = true; + this.gameService.postCharacter({ + Character: { + id: this.cacheService.getLocal('character_id'), + meta: { + private: (this.hideName) ? 1 : 0 + } + } + }) + .subscribe((result) => { + this.isLock = false; + loader.dismiss(); + let msg = 'You name will now be hidden if in the ranking'; + if (!this.hideName) { + msg = 'Your name will now be displayed if in the ranking'; + } + showAlert(msg); + }, (err) => { + this.hideName = !this.hideName; + showAlert('Unabled to change your privacy setting.'); + loader.dismiss(); + }); + }); + } + } + + getUserEmail() { + return this.cacheService.getLocal('email') || ''; + } + goToTutorial() { this.navCtrl.push(TutorialPage); } + goToTermConditions() { this.navCtrl.push(TermsConditionsPage); } + logout() { let loader = this.loadingCtrl.create({ spinner: 'hide', content: this.logoutMessage }); loader.present().then(() => { - this.cache.clear().then(() => { + this.cacheService.clear().then(() => { loader.dismiss(); this.navCtrl.push(LoginPage); localStorage.clear(); diff --git a/src/services/assessment.service.ts b/src/services/assessment.service.ts index dbc0e492..1cf66486 100755 --- a/src/services/assessment.service.ts +++ b/src/services/assessment.service.ts @@ -98,9 +98,7 @@ export class AssessmentService { } post(assessmentAnswer: Submission) { - return this.request.post('api/assessment_submissions.json', assessmentAnswer, { - 'Content-Type': 'application/json' - }); + return this.request.post('api/assessment_submissions.json', assessmentAnswer); } /** diff --git a/src/services/auth.service.ts b/src/services/auth.service.ts index c7997d4b..d9a03d3c 100755 --- a/src/services/auth.service.ts +++ b/src/services/auth.service.ts @@ -11,7 +11,9 @@ export class AuthService { public request: RequestService, ) {} private postRequest(type, body) { - return this.request.post(AUTH_ENDPOINT + type, body); + return this.request.post(AUTH_ENDPOINT + type, body, { + 'Content-Type': 'application/x-www-form-urlencoded' + }); } verifyRegistration(data) { let email = data.email; @@ -38,7 +40,9 @@ export class AuthService { return this.postRequest('reset_password', { key, email, password, verify_password }); } magicLinkLogin(auth_token) { - return this.request.post('api/auths.json', { auth_token }); + return this.request.post('api/auths.json', { auth_token }, { + 'Content-Type': 'application/x-www-form-urlencoded' + }); } getUser() { return this.request.get('api/users.json'); diff --git a/src/services/event.service.ts b/src/services/event.service.ts index cef12242..a789ad14 100755 --- a/src/services/event.service.ts +++ b/src/services/event.service.ts @@ -51,7 +51,7 @@ export class EventService { * @param {integer} eventId single event id */ bookEvent(eventId) { - return this.request.post(this.bookEventUrl, { event_id: eventId}); + return this.request.post(this.bookEventUrl, { event_id: eventId }); } cancelEventBooking(eventId){ diff --git a/src/services/game.service.ts b/src/services/game.service.ts index 13c5dc53..da72521f 100644 --- a/src/services/game.service.ts +++ b/src/services/game.service.ts @@ -31,9 +31,7 @@ export class GameService { * @param {object} data */ postCharacter(data) { - return this.request.post('api/characters', data, { - headers: new HttpHeaders().set('Content-Type', 'application/json') - }); + return this.request.post('api/characters', data); } /** * Get ranking @@ -79,8 +77,6 @@ export class GameService { "id": null } }) { - return this.request.post('api/items.json', options, { - headers: new HttpHeaders().set('Content-Type', 'application/json') - }); + return this.request.post('api/items.json', options); } } diff --git a/src/shared/cache/cache.service.ts b/src/shared/cache/cache.service.ts index 42e4e050..cfdb856d 100755 --- a/src/shared/cache/cache.service.ts +++ b/src/shared/cache/cache.service.ts @@ -31,6 +31,7 @@ export class CacheService { } /** + * DEPRECATED * get memory cached values by key * @param {object||string} */ @@ -42,6 +43,7 @@ export class CacheService { } /** + * DEPRECATED * Write data into local storage * @param {string} path - path to store data * @param {any} content - data to store @@ -57,6 +59,7 @@ export class CacheService { } /** + * DEPRECATED * Read data into local storage * @param {string} path - path to read data * @return {promise} @@ -92,6 +95,9 @@ export class CacheService { } } + /** + * DEPRECATED + */ public clear(): any { return this.storage.clear(); } diff --git a/src/shared/request/request.service.ts b/src/shared/request/request.service.ts index 903fb2ab..7c397880 100755 --- a/src/shared/request/request.service.ts +++ b/src/shared/request/request.service.ts @@ -65,31 +65,35 @@ export class RequestService { return Observable.throw(currentError); } // Inject required fields to header of API request - appendHeader(customHeader: any = { - 'contentType': 'application/json', - 'apikey': null - }): HttpHeaders { - let result:any; - let headers = new HttpHeaders(); - result = headers.set('Content-Type', customHeader.contentType); + appendHeader(custom: object = {}): HttpHeaders { + // Define default header + custom = _.merge({ + 'content-type': 'application/json' + }, custom); + + let header: HttpHeaders = new HttpHeaders(); + + _.forEach(custom, (value, key) => { + header = header.set(key, _.toString(value)); + }); + // Inject apiKey from cached - let apiKey = this.cacheService.getCached('apikey') || - this.cacheService.getLocal('apikey'); + let apiKey = this.cacheService.getLocal('apikey'); if (!_.isEmpty(apiKey)) { - result = result.set('apikey', apiKey.toString()); + header = header.set('apikey', _.toString(apiKey)); } // Inject timelineID from cached - let timelineId = this.cacheService.getCached('timelineID') || - this.cacheService.getLocal('timelineID'); + let timelineId = this.cacheService.getLocal('timelineID'); if (timelineId) { - result = result.set('timelineID', timelineId.toString()); + header = header.set('timelineID', _.toString(timelineId)); } - return result; + + return header; } // Set API request options setOptions(options?): { headers?: HttpHeaders; - observe?: "body"; + observe?: 'body'; params?: HttpParams; reportProgress?: boolean; withCredentials?: boolean; @@ -100,7 +104,7 @@ export class RequestService { let params = (options && options.params) ? options.params : new HttpParams(); if (options && options.search) { _.each(options.search, (value, key) => { - params = params.set(key, value.toString()); + params = params.set(key, _.toString(value)); }); } let timelineId = this.cacheService.getLocal('timelineID'); @@ -132,10 +136,8 @@ export class RequestService { * @param {Object} header */ post(endPoint: string, data: any, header?: any) { - let headers = this.appendHeader(); - // @TODO: make sure if Content-Type is optional - headers = headers.delete('Content-Type'); - headers = headers.set('Content-Type', 'application/x-www-form-urlencoded'); + let headers = this.appendHeader(header); + return this.http.post(this.prefixUrl + endPoint, data, { headers }) .map(this.extractData) .catch(this.handleError);