From dfa846a98e92ac3365025c8e0d5709c2f36768e0 Mon Sep 17 00:00:00 2001 From: Antoine Snyers Date: Mon, 14 Oct 2019 09:53:22 +0200 Subject: [PATCH 1/3] Track page views and searches in DSpace with a custom Angulartics2 provider --- .../collection-page.component.html | 1 + .../collection-page.module.ts | 4 +- .../community-page.component.html | 1 + .../+community-page/community-page.module.ts | 6 +- .../+home-page/home-page-routing.module.ts | 17 +- src/app/+home-page/home-page.component.html | 3 + src/app/+home-page/home-page.component.ts | 21 +- src/app/+home-page/home-page.module.ts | 4 +- src/app/+home-page/home-page.resolver.ts | 25 +++ .../full/full-item-page.component.html | 1 + src/app/+item-page/item-page.module.ts | 4 +- .../simple/item-page.component.html | 1 + .../my-dspace-page.component.scss | 2 +- ...onfiguration-search-page.component.spec.ts | 2 +- .../configuration-search-page.component.ts | 8 +- .../filtered-search-page.component.spec.ts | 2 +- .../filtered-search-page.component.ts | 8 +- .../search-page-routing.module.ts | 3 +- .../+search-page/search-page.component.html | 52 +---- src/app/+search-page/search-page.component.ts | 180 +---------------- src/app/+search-page/search-page.module.ts | 10 +- .../search-configuration.service.ts | 4 +- .../search-service/search.service.ts | 60 ++++-- .../search-tracker.component.html | 1 + .../search-tracker.component.scss | 3 + .../+search-page/search-tracker.component.ts | 88 +++++++++ src/app/+search-page/search.component.html | 50 +++++ ...e.component.scss => search.component.scss} | 0 ...onent.spec.ts => search.component.spec.ts} | 12 +- src/app/+search-page/search.component.ts | 184 ++++++++++++++++++ src/app/app.component.spec.ts | 2 + src/app/app.component.ts | 4 + .../cache/models/normalized-site.model.ts | 13 ++ src/app/core/core.module.ts | 4 + .../data/search-response-parsing.service.ts | 4 + src/app/core/data/site-data.service.spec.ts | 104 ++++++++++ src/app/core/data/site-data.service.ts | 68 +++++++ src/app/core/shared/site.model.ts | 11 ++ .../shared/mocks/mock-angulartics.service.ts | 1 + src/app/shared/mocks/mock-request.service.ts | 3 +- .../angulartics/dspace-provider.spec.ts | 26 +++ .../statistics/angulartics/dspace-provider.ts | 38 ++++ .../dspace/view-tracker.component.html | 1 + .../dspace/view-tracker.component.scss | 3 + .../dspace/view-tracker.component.ts | 27 +++ src/app/statistics/statistics.module.ts | 36 ++++ src/app/statistics/statistics.service.spec.ts | 145 ++++++++++++++ src/app/statistics/statistics.service.ts | 93 +++++++++ src/app/statistics/track-request.model.ts | 4 + src/modules/app/browser-app.module.ts | 5 +- src/modules/app/server-app.module.ts | 7 + 51 files changed, 1080 insertions(+), 276 deletions(-) create mode 100644 src/app/+home-page/home-page.resolver.ts create mode 100644 src/app/+search-page/search-tracker.component.html create mode 100644 src/app/+search-page/search-tracker.component.scss create mode 100644 src/app/+search-page/search-tracker.component.ts create mode 100644 src/app/+search-page/search.component.html rename src/app/+search-page/{search-page.component.scss => search.component.scss} (100%) rename src/app/+search-page/{search-page.component.spec.ts => search.component.spec.ts} (95%) create mode 100644 src/app/+search-page/search.component.ts create mode 100644 src/app/core/cache/models/normalized-site.model.ts create mode 100644 src/app/core/data/site-data.service.spec.ts create mode 100644 src/app/core/data/site-data.service.ts create mode 100644 src/app/core/shared/site.model.ts create mode 100644 src/app/statistics/angulartics/dspace-provider.spec.ts create mode 100644 src/app/statistics/angulartics/dspace-provider.ts create mode 100644 src/app/statistics/angulartics/dspace/view-tracker.component.html create mode 100644 src/app/statistics/angulartics/dspace/view-tracker.component.scss create mode 100644 src/app/statistics/angulartics/dspace/view-tracker.component.ts create mode 100644 src/app/statistics/statistics.module.ts create mode 100644 src/app/statistics/statistics.service.spec.ts create mode 100644 src/app/statistics/statistics.service.ts create mode 100644 src/app/statistics/track-request.model.ts diff --git a/src/app/+collection-page/collection-page.component.html b/src/app/+collection-page/collection-page.component.html index 436cd351a0..12d5c200fd 100644 --- a/src/app/+collection-page/collection-page.component.html +++ b/src/app/+collection-page/collection-page.component.html @@ -3,6 +3,7 @@ *ngVar="(collectionRD$ | async) as collectionRD">
+
+
diff --git a/src/app/+community-page/community-page.module.ts b/src/app/+community-page/community-page.module.ts index 6d63cadcc8..8b02471fc2 100644 --- a/src/app/+community-page/community-page.module.ts +++ b/src/app/+community-page/community-page.module.ts @@ -6,17 +6,19 @@ import { SharedModule } from '../shared/shared.module'; import { CommunityPageComponent } from './community-page.component'; import { CommunityPageSubCollectionListComponent } from './sub-collection-list/community-page-sub-collection-list.component'; import { CommunityPageRoutingModule } from './community-page-routing.module'; -import {CommunityPageSubCommunityListComponent} from './sub-community-list/community-page-sub-community-list.component'; +import { CommunityPageSubCommunityListComponent } from './sub-community-list/community-page-sub-community-list.component'; import { CreateCommunityPageComponent } from './create-community-page/create-community-page.component'; import { CommunityFormComponent } from './community-form/community-form.component'; import { EditCommunityPageComponent } from './edit-community-page/edit-community-page.component'; import { DeleteCommunityPageComponent } from './delete-community-page/delete-community-page.component'; +import { StatisticsModule } from '../statistics/statistics.module'; @NgModule({ imports: [ CommonModule, SharedModule, - CommunityPageRoutingModule + CommunityPageRoutingModule, + StatisticsModule.forRoot() ], declarations: [ CommunityPageComponent, diff --git a/src/app/+home-page/home-page-routing.module.ts b/src/app/+home-page/home-page-routing.module.ts index d7dcc18f49..78da529906 100644 --- a/src/app/+home-page/home-page-routing.module.ts +++ b/src/app/+home-page/home-page-routing.module.ts @@ -2,12 +2,25 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { HomePageComponent } from './home-page.component'; +import { HomePageResolver } from './home-page.resolver'; @NgModule({ imports: [ RouterModule.forChild([ - { path: '', component: HomePageComponent, pathMatch: 'full', data: { title: 'home.title' } } + { + path: '', + component: HomePageComponent, + pathMatch: 'full', + data: {title: 'home.title'}, + resolve: { + site: HomePageResolver + } + } ]) + ], + providers: [ + HomePageResolver ] }) -export class HomePageRoutingModule { } +export class HomePageRoutingModule { +} diff --git a/src/app/+home-page/home-page.component.html b/src/app/+home-page/home-page.component.html index 39ba479033..5515df595b 100644 --- a/src/app/+home-page/home-page.component.html +++ b/src/app/+home-page/home-page.component.html @@ -1,5 +1,8 @@
+ + +
diff --git a/src/app/+home-page/home-page.component.ts b/src/app/+home-page/home-page.component.ts index 902a0e820d..1b915ae683 100644 --- a/src/app/+home-page/home-page.component.ts +++ b/src/app/+home-page/home-page.component.ts @@ -1,9 +1,26 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { map } from 'rxjs/operators'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs'; +import { Site } from '../core/shared/site.model'; @Component({ selector: 'ds-home-page', styleUrls: ['./home-page.component.scss'], templateUrl: './home-page.component.html' }) -export class HomePageComponent { +export class HomePageComponent implements OnInit { + + site$:Observable; + + constructor( + private route:ActivatedRoute, + ) { + } + + ngOnInit():void { + this.site$ = this.route.data.pipe( + map((data) => data.site as Site), + ); + } } diff --git a/src/app/+home-page/home-page.module.ts b/src/app/+home-page/home-page.module.ts index c0c082b36c..51e978bbfe 100644 --- a/src/app/+home-page/home-page.module.ts +++ b/src/app/+home-page/home-page.module.ts @@ -6,12 +6,14 @@ import { HomePageRoutingModule } from './home-page-routing.module'; import { HomePageComponent } from './home-page.component'; import { TopLevelCommunityListComponent } from './top-level-community-list/top-level-community-list.component'; +import { StatisticsModule } from '../statistics/statistics.module'; @NgModule({ imports: [ CommonModule, SharedModule, - HomePageRoutingModule + HomePageRoutingModule, + StatisticsModule.forRoot() ], declarations: [ HomePageComponent, diff --git a/src/app/+home-page/home-page.resolver.ts b/src/app/+home-page/home-page.resolver.ts new file mode 100644 index 0000000000..1145d1d013 --- /dev/null +++ b/src/app/+home-page/home-page.resolver.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { SiteDataService } from '../core/data/site-data.service'; +import { Site } from '../core/shared/site.model'; +import { Observable } from 'rxjs'; +import { take } from 'rxjs/operators'; + +/** + * The class that resolve the Site object for a route + */ +@Injectable() +export class HomePageResolver implements Resolve { + constructor(private siteService:SiteDataService) { + } + + /** + * Method for resolving a site object + * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot + * @param {RouterStateSnapshot} state The current RouterStateSnapshot + * @returns Observable Emits the found Site object, or an error if something went wrong + */ + resolve(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable | Promise | Site { + return this.siteService.find().pipe(take(1)); + } +} diff --git a/src/app/+item-page/full/full-item-page.component.html b/src/app/+item-page/full/full-item-page.component.html index 7aec57da0c..c453df6bff 100644 --- a/src/app/+item-page/full/full-item-page.component.html +++ b/src/app/+item-page/full/full-item-page.component.html @@ -1,6 +1,7 @@
+