From 68ff3026e41318d5ffb0d9c1e716917fb3389474 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Wed, 14 Feb 2018 17:21:03 +0100 Subject: [PATCH] MOBILE-2325 badges: Issued badges for user page --- .../badges/pages/user-badges/user-badges.html | 28 +++++ .../pages/user-badges/user-badges.module.ts | 35 ++++++ .../badges/pages/user-badges/user-badges.ts | 105 ++++++++++++++++++ src/addon/badges/providers/user-handler.ts | 4 +- 4 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 src/addon/badges/pages/user-badges/user-badges.html create mode 100644 src/addon/badges/pages/user-badges/user-badges.module.ts create mode 100644 src/addon/badges/pages/user-badges/user-badges.ts diff --git a/src/addon/badges/pages/user-badges/user-badges.html b/src/addon/badges/pages/user-badges/user-badges.html new file mode 100644 index 000000000..58c3b5d82 --- /dev/null +++ b/src/addon/badges/pages/user-badges/user-badges.html @@ -0,0 +1,28 @@ + + + {{ 'addon.badges.badges' | translate }} + + + + + + + + + + + + + + {{badge.name}} + + {{ 'addon.badges.expired' | translate }} + +

+

{{ badge.dateissued | coreToLocaleString }}

+
+
+ +
+
+
\ No newline at end of file diff --git a/src/addon/badges/pages/user-badges/user-badges.module.ts b/src/addon/badges/pages/user-badges/user-badges.module.ts new file mode 100644 index 000000000..e831ae877 --- /dev/null +++ b/src/addon/badges/pages/user-badges/user-badges.module.ts @@ -0,0 +1,35 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { NgModule } from '@angular/core'; +import { IonicPageModule } from 'ionic-angular'; +import { TranslateModule } from '@ngx-translate/core'; +import { CoreComponentsModule } from '../../../../components/components.module'; +import { CoreDirectivesModule } from '../../../../directives/directives.module'; +import { CorePipesModule } from '../../../../pipes/pipes.module'; +import { AddonBadgesUserBadgesPage } from './user-badges'; + +@NgModule({ + declarations: [ + AddonBadgesUserBadgesPage, + ], + imports: [ + CoreComponentsModule, + CoreDirectivesModule, + CorePipesModule, + IonicPageModule.forChild(AddonBadgesUserBadgesPage), + TranslateModule.forChild() + ], +}) +export class AddonBadgesUserBadgesPageModule {} diff --git a/src/addon/badges/pages/user-badges/user-badges.ts b/src/addon/badges/pages/user-badges/user-badges.ts new file mode 100644 index 000000000..795f0c304 --- /dev/null +++ b/src/addon/badges/pages/user-badges/user-badges.ts @@ -0,0 +1,105 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Component, ViewChild } from '@angular/core'; +import { IonicPage, Content, NavParams, NavController } from 'ionic-angular'; +import { TranslateService } from '@ngx-translate/core'; +import { AddonBadgesProvider } from '../../providers/badges'; +import { CoreTimeUtilsProvider } from '../../../../providers/utils/time'; +import { CoreDomUtilsProvider } from '../../../../providers/utils/dom'; +import { CoreSitesProvider } from '../../../../providers/sites'; +import { CoreSplitViewComponent } from '../../../../components/split-view/split-view'; + +/** + * Page that displays the list of calendar events. + */ +@IonicPage({ segment: 'addon-badges-user-badges' }) +@Component({ + selector: 'page-addon-badges-user-badges', + templateUrl: 'user-badges.html', +}) +export class AddonBadgesUserBadgesPage { + @ViewChild(Content) content: Content; + @ViewChild(CoreSplitViewComponent) splitviewCtrl: CoreSplitViewComponent; + + courseId: number; + userId: number; + + badgesLoaded = false; + badges = []; + currentTime = 0; + badgeHash = ''; + + constructor(private translate: TranslateService, private badgesProvider: AddonBadgesProvider, navParams: NavParams, + private domUtils: CoreDomUtilsProvider, private timeUtils: CoreTimeUtilsProvider, + sitesProvider: CoreSitesProvider, private navCtrl: NavController) { + + this.courseId = navParams.get('courseId') || 0; // Use 0 for site badges. + this.userId = navParams.get('userId') || sitesProvider.getCurrentSite().getUserId(); + } + + /** + * View loaded. + */ + ionViewDidLoad(): void { + + this.fetchBadges().finally(() => { + this.badgesLoaded = true; + }); + } + + /** + * Fetch all the badges required for the view. + * + * @return {Promise} Promise resolved when done. + */ + fetchBadges(): Promise { + this.currentTime = this.timeUtils.timestamp(); + + return this.badgesProvider.getUserBadges(this.courseId, this.userId).then((badges) => { + this.badges = badges; + }).catch((message) => { + if (message) { + this.domUtils.showErrorModal(message); + } else { + this.domUtils.showErrorModal('Error getting badges data.'); + } + + return Promise.reject(null); + }); + } + + /** + * Refresh the badges. + * + * @param {any} refresher Refresher. + */ + refreshBadges(refresher: any): void { + this.badgesProvider.invalidateUserBadges(this.courseId, this.userId).finally(() => { + this.fetchBadges().finally(() => { + refresher.complete(); + }); + }); + } + + /** + * Navigate to a particular badge. + * + * @param {string} badgeHash Badge to load. + */ + loadIssuedBadge(badgeHash: string): void { + this.badgeHash = badgeHash; + //this.splitviewCtrl.push('', { id: }); + } +} diff --git a/src/addon/badges/providers/user-handler.ts b/src/addon/badges/providers/user-handler.ts index 12bd8ee95..a6257089c 100644 --- a/src/addon/badges/providers/user-handler.ts +++ b/src/addon/badges/providers/user-handler.ts @@ -62,13 +62,13 @@ export class AddonBadgesUserHandler implements CoreUserProfileHandler { */ getDisplayData(user: any, courseId: number): CoreUserProfileHandlerData { return { - icon: 'ion-trophy', + icon: 'trophy', title: 'addon.badges.badges', class: '', action: (event, navCtrl, user, courseId): void => { event.preventDefault(); event.stopPropagation(); - //navCtrl.push(); + navCtrl.push('AddonBadgesUserBadgesPage', {courseId: courseId, userId: user.id }); } }; }