Project

General

Profile

« Previous | Next » 

Revision 52836

added cookie-law banner - 403 authorization via ui and new usage-stats pages

View differences:

modules/uoa-repository-dashboard-gui/trunk/app/pages/adminPg/adminPg-metrics.component.ts
35 35
  getPiwiks() {
36 36
    this.loadingMessage = loadingReposMessage;
37 37
    this.piwikService.getPiwikSitesForRepos()
38
      .subscribe(
39
        piwiks => this.piwiks = piwiks.sort( function(a,b){
40
          if(a.repositoryName<b.repositoryName){
38
      .subscribe (
39
        piwiks => this.piwiks = piwiks.sort( function(a,b) {
40
          if (a.repositoryName<b.repositoryName) {
41 41
            return -1;
42
          } else if(a.repositoryName>b.repositoryName){
42
          } else if (a.repositoryName>b.repositoryName) {
43 43
            return 1;
44 44
          } else {
45 45
            return 0;
modules/uoa-repository-dashboard-gui/trunk/app/pages/sources/sources-update.component.html
27 27
                        <h2 class="openAIRECompliantLogoMessage">
28 28
                          Congratulations! Your repository was successfully registered in OpenAIRE. You can download this logo to use in your site.
29 29
                        </h2>
30
                        <img src="assets/imgs/3_0ValidatedLogo.png" alt="OpenAireCompliant">
30
                        <img src="assets/imgs/OpenAIRE_validated_icon_medium.png" alt="OpenAireCompliant">
31 31
                      </div>
32 32
                    </div>
33 33
                    <a (click)="downloadLogo()">
modules/uoa-repository-dashboard-gui/trunk/app/pages/sources/sources-update.component.ts
12 12
  ngOnInit() {}
13 13

  
14 14
  downloadLogo() {
15
    window.open("../../../assets/imgs/3_0ValidatedLogo.png","_blank", "enabledstatus=0,toolbar=0,menubar=0,location=0");
15
    window.open("../../../assets/imgs/OpenAIRE_validated_icon_medium.png","_blank", "enabledstatus=0,toolbar=0,menubar=0,location=0");
16 16
  }
17 17
}
modules/uoa-repository-dashboard-gui/trunk/app/app.module.ts
24 24
import { PiwikService } from './services/piwik.service';
25 25
import { BrokerService } from './services/broker.service';
26 26
import { MonitorService } from './services/monitor.service';
27
import {LandingComponent} from "./pages/landing/landing.component";
28
import {DashboardComponent} from "./pages/dashboard/dashboard.component";
27
import { LandingComponent } from "./pages/landing/landing.component";
28
import { DashboardComponent } from "./pages/dashboard/dashboard.component";
29 29
import { UsagestatsService } from './services/usagestats.service';
30
import {AuthenticationInterceptor} from "./services/authentication-interceptor";
31
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
30
import { AuthenticationInterceptor } from "./services/authentication-interceptor";
31
import { HTTP_INTERCEPTORS, HttpClientModule } from "@angular/common/http";
32
import { CookieLawModule } from "./shared/reusablecomponents/cookie-law/cookie-law.module";
33
import { NoopAnimationsModule } from "@angular/platform-browser/animations";
32 34

  
33 35

  
34 36
@NgModule({
35 37
  imports: [
36 38
    BrowserModule,
39
    NoopAnimationsModule,
37 40
    FormsModule,
38 41
    ReactiveFormsModule,
39 42
    HttpModule,
......
47 50
    SourcesModule,
48 51
    CompatibilityModule,
49 52
    ContentModule,
50
    AdminPgModule
53
    AdminPgModule,
54
    CookieLawModule
51 55
  ],
52 56
  declarations: [
53 57
    AppComponent,
modules/uoa-repository-dashboard-gui/trunk/package.json
23 23
    "@angular/platform-browser-dynamic": "~4.4.3",
24 24
    "@angular/router": "~4.4.3",
25 25
    "@angular/upgrade": "~4.4.3",
26
    "@angular/animations": "^4.2.4",
26 27
    "angular-in-memory-web-api": "~0.3.2",
27 28
    "angular-oauth2-oidc": "^1.0.20",
28 29
    "bootstrap": "^3.3.7",
modules/uoa-repository-dashboard-gui/trunk/app/pages/sources/sources-update-repo.component.ts
3 3
import { DatasourceInterfaceFormComponent } from './sources-forms/datasource-interface-form.component';
4 4
import { Repository, RepositoryInterface } from '../../domain/typeScriptClasses';
5 5
import { RepositoryService } from '../../services/repository.service';
6
import { ActivatedRoute } from '@angular/router';
6
import {ActivatedRoute, Router} from '@angular/router';
7 7
import {
8 8
  Description,
9 9
  interfaceFormDesc,
......
11 11
import { formInfoLoading, loadingRepoError } from '../../domain/shared-messages';
12 12
import { DatasourceUpdateFormComponent } from './sources-forms/datasource-update-form.component';
13 13
import {ConfirmationDialogComponent} from "../../shared/reusablecomponents/confirmation-dialog.component";
14
import {AuthenticationService} from "../../services/authentication.service";
14 15

  
15 16

  
16 17

  
......
41 42
  constructor (
42 43
    private fb: FormBuilder,
43 44
    private repoService: RepositoryService,
44
    private route: ActivatedRoute )
45
    private authService: AuthenticationService,
46
    private route: ActivatedRoute,
47
    private router: Router)
45 48
  {}
46 49

  
47 50

  
......
71 74
        () => {
72 75
          this.loadingMessage = '';
73 76
          this.logoURL = this.repo.logoUrl;
77
          if ( this.authService.getUserEmail() !== this.repo.registeredBy ) {
78
            this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
79
          }
74 80
        }
75 81
      );
76 82
    }
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics.module.ts
12 12
import { TabsModule } from 'ngx-bootstrap';
13 13
import {MetricsUsagestatsComponent} from "./metrics-usagestats.component";
14 14
import { MetricsUsagestatsReportResultsComponent } from './metrics-usagestats-report-results.component';
15
import {MetricsUsagestatsReportComponent} from "./metrics-usagestats-report.component";
15 16

  
16 17
@NgModule ({
17 18
  imports: [
......
26 27
    MetricsInstructionsComponent,
27 28
    MetricsShowComponent,
28 29
    MetricsUsagestatsComponent,
30
    MetricsUsagestatsReportComponent,
29 31
    MetricsUsagestatsReportResultsComponent
30 32
  ]
31 33
})
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-enable.component.ts
62 62
          this.getOAid();
63 63
        }
64 64
        this.loadingMessage = '';
65
        if ( this.authService.getUserEmail() !== this.repo.registeredBy ) {
66
          this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
67
        }
65 68
      }
66 69
    );
67 70
  }
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics.routing.ts
10 10
import { MetricsShowComponent } from './metrics-show.component';
11 11
import {MetricsUsagestatsComponent} from "./metrics-usagestats.component";
12 12
import { MetricsUsagestatsReportResultsComponent } from './metrics-usagestats-report-results.component';
13
import {MetricsUsagestatsReportComponent} from "./metrics-usagestats-report.component";
13 14

  
14 15
const metricsRoutes: Routes = [
15 16
    {
......
33 34
      component: MetricsUsagestatsComponent
34 35
    },
35 36
    {
37
      path: 'usagestats/:id/:reportID',
38
      component: MetricsUsagestatsReportComponent
39
    },
40
    {
36 41
      path: 'usagestats-report-results',
37 42
      component: MetricsUsagestatsReportResultsComponent
38 43
    }
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats-report.component.ts
1
import {Component, OnInit} from "@angular/core";
2
import {RepositoryService} from "../../services/repository.service";
3
import {ActivatedRoute, Router} from "@angular/router";
4
import {AuthenticationService} from "../../services/authentication.service";
5
import {Repository} from "../../domain/typeScriptClasses";
6
import {Observable} from "rxjs/Observable";
7
import {ReportResponseWrapper} from "../../domain/usageStatsClasses";
8
import {loadingRepoMessage} from "../../domain/shared-messages";
9

  
10

  
11
@Component({
12
  selector: 'metrics-usagestats-report',
13
  templateUrl: 'metrics-usagestats-report.component.html'
14
})
15

  
16
export class MetricsUsagestatsReportComponent implements OnInit {
17

  
18
  errorMessage: string;
19
  loadingMessage: string;
20
  title: string;
21

  
22
  repo: Repository;
23
  repoId: string;
24
  shownRepoId: string;
25
  shownOpenaireId: string;
26
  issnToShow: string = '';
27
  chosen_report: string;
28

  
29
  userEmail: string;
30
  beginDate: string = '';
31
  endDate: string = '';
32
  itemIdentifier: string = '';
33
  itemDataType: string = '';
34
  granularity: string = 'Monthly';
35
  pretty: boolean = true;
36

  
37
  constructor(private repoService: RepositoryService,
38
              private route: ActivatedRoute,
39
              private router: Router,
40
              private authService: AuthenticationService) {}
41

  
42
  ngOnInit() {
43
    this.getParams();
44
    this.getUserEmail();
45
    this.getRepo();
46
  }
47

  
48
  getParams() {
49
    this.repoId = this.route.snapshot.paramMap.get('id');
50
    this.chosen_report = this.route.snapshot.paramMap.get('reportID');
51
    this.shownRepoId = this.convertToDisplayedFormat(this.repoId);
52
    console.log(`shownRepoId is ${this.repoId}`);
53
    this.title = `${this.chosen_report} report`;
54
  }
55

  
56
  convertToDisplayedFormat(input: string) {
57
    const tempArray = this.repoId.split('____::');
58
    return tempArray[0] + ':' + tempArray[1];
59
  }
60

  
61
  getUserEmail() {
62
    this.userEmail = this.authService.getUserEmail();
63
  }
64

  
65
  getRepo() {
66
    this.loadingMessage = loadingRepoMessage;
67
    this.repoService.getRepositoryById(this.repoId).subscribe(
68
      repo => this.repo = repo,
69
      error => {
70
        console.log(error);
71
        this.loadingMessage = '';
72
          this.errorMessage = 'The repository could not be retrieved';
73
      },
74
      () => {
75
        this.loadingMessage = '';
76
        if (this.repo.piwikInfo) {
77
          this.shownOpenaireId = this.convertToDisplayedFormat(this.repo.piwikInfo.openaireId);
78
        }
79
        if (this.repo.issn){
80
          this.issnToShow = this.repo.issn.slice(0, 4)+ '-' + this.repo.issn.toString().slice(4);
81
        }
82
        this.title = `${this.chosen_report} report for ${this.repo.officialName}`;
83
        if ( this.authService.getUserEmail() !== this.repo.registeredBy ) {
84
          this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
85
        }
86
      }
87
    );
88
  }
89

  
90
  updateBeginDate(event: any) {
91
    this.beginDate = event.target.value;
92
  }
93

  
94
  updateEndDate(event: any) {
95
    this.endDate = event.target.value;
96
  }
97

  
98
  updateItemDataType(event: any) {
99
    this.itemDataType = event.target.value;
100
  }
101

  
102
  updateItemIdentifier(event: any) {
103
    this.itemIdentifier = event.target.value;
104
  }
105

  
106
  updateGranularity(event: any) {
107
    this.granularity = event.target.value;
108
  }
109

  
110
  updatePretty(event: any) {
111
    this.pretty = !this.pretty;
112
  }
113

  
114
  goToReport() {
115
    /* additional field: */
116
    /*itemIdentifier: this.repo.piwikInfo.openaireId,*/
117
    /*this.router.navigate([`/getImpact/${this.repoId}/${this.chosen_report}/results'], {
118
      queryParams: {
119
        report: this.chosen_report,
120
        beginDate: this.beginDate,
121
        endDate: this.endDate,
122
        repoId: this.shownRepoId,
123
        itemDataType: this.itemDataType,
124
        itemIdentifier: this.itemIdentifier,
125
        granularity: this.granularity,
126
        pretty: this.pretty
127
      }
128
    });*/
129

  
130
    const params = new URLSearchParams();
131

  
132
    params.append('Report', this.chosen_report);
133
    params.append('Release', '4');
134
    params.append('RequestorID', this.authService.getUserEmail());
135
    params.append('BeginDate', this.beginDate);
136
    params.append('EndDate', this.endDate);
137
    params.append('RepositoryIdentifier', this.shownRepoId);
138
    if (this.itemIdentifier) {
139
      params.append('ItemIdentifier', this.itemIdentifier);
140
    }
141
    if (this.itemDataType) {
142
      params.append('ItemDataType', this.itemDataType);
143
    }
144
    params.append('Granularity', this.granularity);
145
    if (this.pretty && this.pretty === true) {
146
      params.append('Pretty', 'Pretty');
147
    }
148

  
149
    let url = `http://beta.services.openaire.eu/usagestats/sushilite/GetReport/?${params}`;
150
    console.log(`going to: ${url}`);
151

  
152
    window.location.href = url;
153
  }
154

  
155
}
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats.component.html
7 7
    <div class="uk-grid-margin uk-grid uk-grid-stack" uk-grid="">
8 8
      <div class="uk-width-1-1@m uk-first-column">
9 9

  
10
        <h1 class="uk-h2">Get usage statistics report</h1>
10
        <h1 class="uk-h2">{{ title }}</h1>
11 11

  
12 12
        <!-- TOP HELP CONTENT -->
13 13
        <help-content #topHelperContent [position]="'top'"
......
25 25
            <!-- MIDDLE -->
26 26
            <div class=" uk-width-expand@m" style="min-height:500px;">
27 27

  
28
              <div *ngIf="errorMessage" class="uk-alert uk-alert-warning">{{errorMessage}}</div>
28
              <div *ngIf="errorMessage" class="uk-alert uk-alert-warning">{{ errorMessage }}</div>
29 29
              <div *ngIf="repo">
30
                <label class="control-label">Supported Reports</label>
31
                <select class="form-control" (change)="onChooseReport($event)" [disabled]="disable_report_choice">
32
                  <option value="">-- none selected --</option>
33
                  <option value="AR1">AR1 Report</option>
34
                  <option value="IR1">IR1 Report</option>
35
                  <option value="RR1">RR1 Report</option>
36
                  <option *ngIf="repo && repo.issn && repo.issn !== 'null' " value="JR1">JR1 Report</option>
37
                  <option value="BR1">BR1 Report</option>
38
                  <option value="BR2">BR2 Report</option>
39
                </select>
40
              </div>
41
              <div *ngIf="chosen_report" class="uk-margin-top">
30
                <h3>Supported Reports</h3>
42 31

  
43
                <div class="uk-forml uk-width-1-1@s uk-width-2-3@m uk-container">
44
                  <h3>Report Request</h3>
45
                  <div class="uk-grid">
46
                    <div class=" uk-width-1-3 uk-text-right">
47
                      Report Name:
32
                <div class="uk-margin uk-grid repositoryTypeSelection">
33
                  <div class="uk-width-1-3 uk-grid-item-match uk-first-column">
34
                    <div class="uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview uk-animation-slide-top-medium">
35
                      <a [routerLink]="['AR1']" class="uk-position-cover uk-margin-remove-adjacent"></a>
36
                      <div class="uk-card-media-top">
37
                        <img src="../../../assets/imgs/Icons_Reports_wide_AR1.png" alt="" style="width: 100%;">
38
                      </div>
39
                      <div class="uk-card-body">
40
                        <h3 class="el-title uk-margin uk-card-title uk-margin-remove-adjacent uk-margin-small-bottom">
41
                          Article Report 1, number of successful article download requests by month and repository.
42
                        </h3>
43
                      </div>
48 44
                    </div>
49
                    <div class="uk-width-2-3">
50
                      {{ chosen_report }}
51
                    </div>
52 45
                  </div>
53
                  <div class="uk-grid">
54
                    <div class=" uk-width-1-3 uk-text-right">
55
                      Release:
46
                  <div class="uk-width-1-3 uk-grid-item-match uk-first-column">
47
                    <div class="uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview uk-animation-slide-top-medium">
48
                      <a [routerLink]="['IR1']" class="uk-position-cover uk-margin-remove-adjacent"></a>
49
                      <div class="uk-card-media-top">
50
                        <img class="el-image" src="../../../assets/imgs/Icons_Reports_wide_IR1.png" alt="" style="width:100%;">
51
                      </div>
52
                      <div class="uk-card-body">
53
                        <h3 class="el-title uk-margin uk-card-title uk-margin-remove-adjacent uk-margin-small-bottom">
54
                          Item Report 1, number of successful item download requests by month and repository.
55
                        </h3>
56
                      </div>
56 57
                    </div>
57
                    <div class="uk-width-2-3">
58
                      4
59
                    </div>
60 58
                  </div>
61
                  <div class="uk-grid">
62
                    <div class=" uk-width-1-3 uk-text-right">
63
                      Requestor:
59
                  <div class="uk-width-1-3 uk-grid-item-match uk-first-column">
60
                    <div class="uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview uk-animation-slide-top-medium">
61
                      <a [routerLink]="['RR1']" class="uk-position-cover uk-margin-remove-adjacent"></a>
62
                      <div class="uk-card-media-top">
63
                        <img class="el-image" src="../../../assets/imgs/Icons_Reports_wide_RR1.png" alt="" style="width:100%;">
64
                      </div>
65
                      <div class="uk-card-body">
66
                        <h3 class="el-title uk-margin uk-card-title uk-margin-remove-adjacent uk-margin-small-bottom">
67
                          Repository Report 1, number of successful item downloads for all repositories participating in the usage statistics service.
68
                        </h3>
69
                      </div>
64 70
                    </div>
65
                    <div class="uk-width-2-3">
66
                      {{ userEmail }}
67
                    </div>
68 71
                  </div>
69
                  <h3>Report Filters</h3>
70
                  <h5>Date range</h5>
71
                  <p>Valid date formats are yyyy-mm-dd or yyyy-mm. Default range is the last available month.
72
                  </p>
73
                  <div class="uk-grid">
74
                    <div class=" uk-width-1-3 uk-text-right">
75
                      Begin Date:
72
                  <div *ngIf="repo.datasourceType === 'journal'" class="uk-width-1-3 uk-grid-item-match uk-first-column">
73
                    <div class="uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview uk-animation-slide-top-medium">
74
                      <a [routerLink]="['JR1']" class="uk-position-cover uk-margin-remove-adjacent"></a>
75
                      <div class="uk-card-media-top">
76
                        <img class="el-image" src="../../../assets/imgs/Icons_Reports_wide_JR1.png" alt="" style="width:100%;">
77
                      </div>
78
                      <div class="uk-card-body">
79
                        <h2 class="el-title uk-margin uk-card-title uk-margin-remove-adjacent uk-margin-small-bottom">
80
                          Journal Report 1, number of successful full-text article requests by month and journal.
81
                        </h2>
82
                      </div>
76 83
                    </div>
77
                    <div class="uk-width-2-3">
78
                      <input name="BeginDate" placeholder="2016-03" type="text" (blur)="updateBeginDate($event)">
79
                    </div>
80 84
                  </div>
81
                  <div class="uk-grid">
82
                    <div class=" uk-width-1-3 uk-text-right">
83
                      End Date:
85
                  <div class="uk-width-1-3 uk-grid-item-match uk-first-column">
86
                    <div class="uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview uk-animation-slide-top-medium">
87
                      <a [routerLink]="['BR1']" class="uk-position-cover uk-margin-remove-adjacent"></a>
88
                      <div class="uk-card-media-top">
89
                        <img class="el-image" src="../../../assets/imgs/Icons_Reports_wide_BR1.png" alt="" style="width:100%;">
90
                      </div>
91
                      <div class="uk-card-body">
92
                        <h3 class="el-title uk-margin uk-card-title uk-margin-remove-adjacent uk-margin-small-bottom">
93
                          Book Report 1, number of successful title requests by month and title.
94
                        </h3>
95
                      </div>
84 96
                    </div>
85
                    <div class="uk-width-2-3">
86
                      <input name="EndDate" placeholder="2016-06" type="text" (blur)="updateEndDate($event)">
87
                    </div>
88 97
                  </div>
89
                  <h5><span *ngIf="chosen_report == 'RR1' || chosen_report == 'JR1'">Optional </span>Filters</h5>
90
                  <p>Provide either a Repository Identifier or an Item Identifier<br>
91
                    Identifier format: <b>namespace:value</b><br>
92
                    Valid namespace for Repository Identifier: <b>openaire</b> or <b>opendoar</b>.<br>
93
                    Valid namespace for Item Identifier: <b>openaire</b>, <b>doi</b> or <b>oid</b>(for OAI-PMH).
94
                  </p>
95
                  <div *ngIf="chosen_report != 'JR1'" class="uk-grid">
96
                    <div class=" uk-width-1-3 uk-text-right">
97
                      Repository Identifier:
98
                    </div>
99
                    <div class="uk-width-2-3">
100
                      {{ shownRepoId }}
101
                    </div>
102
                  </div>
103
                  <div *ngIf="repo.issn && chosen_report == 'JR1'" class="uk-grid">
104
                    <div class=" uk-width-1-3 uk-text-right">
105
                      Journal Identifier:
106
                    </div>
107
                    <div class="uk-width-2-3">
108
                      {{ issnToShow }}
109
                    </div>
110
                  </div>
111
                  <div *ngIf="chosen_report != 'JR1' && chosen_report != 'RR1'" class="uk-grid">
112
                    <div class=" uk-width-1-3 uk-text-right">
113
                      Item Identifier:
114
                    </div>
115
                    <div class="uk-width-2-3">
116
                      <input name="ItemIdentifier" placeholder="e.g. openaire:od_________::fb90de6f20d79783d05749d8f60417d5"
117
                             type="text" (blur)="updateItemIdentifier($event)">
118
                    </div>
119
                  </div>
120

  
121
                  <div *ngIf="chosen_report == 'IR1' || chosen_report == 'RR1' || chosen_report == 'JR1'">
122
                    <p>Optional filter to only show results for a single item type, e.g. article, book, etc.</p>
123
                    <div class="uk-grid">
124
                      <div class=" uk-width-1-3 uk-text-right">
125
                        Item Data Type:
98
                  <div class="uk-width-1-3 uk-grid-item-match uk-first-column">
99
                    <div class="uk-text-center uk-card uk-card-default uk-card-hover uk-scrollspy-inview uk-animation-slide-top-medium">
100
                      <a [routerLink]="['BR2']" class="uk-position-cover uk-margin-remove-adjacent"></a>
101
                      <div class="uk-card-media-top">
102
                        <img class="el-image" src="../../../assets/imgs/Icons_Reports_wide_BR2.png" alt="" style="width:100%;">
126 103
                      </div>
127
                      <div class="uk-width-2-3">
128
                        <select name="ItemDataType" (change)="updateItemDataType($event)">
129
                          <option value="">--- Select ItemDataType ---</option>
130
                          <option value="Annotation">Annotation</option>
131
                          <option value="Article">Article</option>
132
                          <option value="Bachelor thesis">Bachelor thesis</option>
133
                          <option value="Book">Book</option>
134
                          <option value="clinical trial">clinical trial</option>
135
                          <option value="Collection">Collection</option>
136
                          <option value="Conference object">Conference object</option>
137
                          <option value="Contribution for newspaper or weekly magazine">Contribution for newspaper or weekly magazine</option>
138
                          <option value="Dataset">Dataset</option>
139
                          <option value="Doctoral thesis">Doctoral thesis</option>
140
                          <option value="Event">Event</option>
141
                          <option value="External research report">External research report</option>
142
                          <option value="Film">Film</option>
143
                          <option value="Image">Image</option>
144
                          <option value="InteractiveResource">InteractiveResource</option>
145
                          <option value="Internal report">Internal report</option>
146
                          <option value="Lecture">Lecture</option>
147
                          <option value="Master thesis">Master thesis</option>
148
                          <option value="Newsletter">Newsletter</option>
149
                          <option value="Other">Other</option>
150
                          <option value="Part of book or chapter of book">Part of book or chapter of book</option>
151
                          <option value="Patent">Patent</option>
152
                          <option value="PhysicalObject">PhysicalObject</option>
153
                          <option value="Preprint">Preprint</option>
154
                          <option value="Report">Report</option>
155
                          <option value="Research">Research</option>
156
                          <option value="Review">Review</option>
157
                          <option value="Software">Software</option>
158
                          <option value="Sound">Sound</option>
159
                          <option value="Unknown">Unknown</option>
160
                        </select>
104
                      <div class="uk-card-body">
105
                        <h3 class="el-title uk-margin uk-card-title uk-margin-remove-adjacent uk-margin-small-bottom">
106
                          Book Report 2, number of successful section requests by month and title.
107
                        </h3>
161 108
                      </div>
162 109
                    </div>
163 110
                  </div>
164
                  <h3>Report Attributes</h3>
165
                  <p>Valid Granularity values: Monthly or Totals</p>
166
                  <div class="uk-grid">
167
                    <div class=" uk-width-1-3 uk-text-right">
168
                      Granularity:
169
                    </div>
170
                    <div class="uk-width-2-3">
171
                      <select name="Granularity" (change)="updateGranularity($event)">
172
                        <option value="Monthly">Monthly</option>
173
                        <option value="Totals">Totals</option>
174
                      </select>
175
                    </div>
176
                  </div>
177
                  <p>The Pretty attribute is just for humans playing with the API and looking at results in a browser.</p>
178
                  <p><input name="Pretty" value="Pretty" checked="checked" type="checkbox" (change)="updatePretty($event)">Pretty print json(p) for humans</p>
179
                  <a class="uk-button uk-button-primary" (click)="goToReport()">Get Report</a>
180 111
                </div>
181 112

  
182 113
              </div>
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-instructions.component.ts
4 4

  
5 5
import {Component, OnInit} from '@angular/core';
6 6
import {PiwikInfo} from '../../domain/typeScriptClasses';
7
import {ActivatedRoute} from '@angular/router';
7
import {ActivatedRoute, Router} from '@angular/router';
8 8
import { PiwikService } from '../../services/piwik.service';
9
import {AuthenticationService} from "../../services/authentication.service";
9 10

  
10 11
@Component ({
11 12
  selector: 'app-metrics-instructions',
......
18 19

  
19 20
  constructor(
20 21
    private route: ActivatedRoute,
21
    private piwikService: PiwikService
22
  ) {}
22
    private router: Router,
23
    private piwikService: PiwikService,
24
    private authService: AuthenticationService) {}
23 25

  
24 26
  ngOnInit() {
25 27
    this.getPiwik();
......
29 31
    let id = this.route.snapshot.paramMap.get('id');
30 32
    this.piwikService.getPiwikInfo(id).subscribe(
31 33
      piwik => this.piwik = piwik,
32
      error => console.log(error)
34
      error => console.log(error),
35
      () => {
36
        /*if ( this.authService.getUserEmail() !== this.piwik.requestorEmail ) {
37
          this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
38
        }*/
39
      }
33 40
    );
34 41
  }
35 42

  
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats-report.component.html
1
<div class="uk-section-default uk-section uk-section-small uk-padding-remove-bottom" style="min-height: 325px">
2

  
3
  <!-- MARGIN-TOP  -->
4
  <div class="uk-sticky-placeholder" style="height: 84px; margin: 0px;" aria-hidden="true"></div>
5
  <div class="uk-container">
6

  
7
    <div class="uk-grid-margin uk-grid uk-grid-stack" uk-grid="">
8
      <div class="uk-width-1-1@m uk-first-column">
9

  
10
        <h1 class="uk-h2">{{ title }}</h1>
11

  
12
        <!-- TOP HELP CONTENT -->
13
        <help-content #topHelperContent [position]="'top'"
14
                      [ngClass]="topHelperContent.isPresent()?'uk-margin-medium-top uk-margin-medium-bottom':'clear-style'">
15
        </help-content>
16

  
17
        <div class="uk-container uk-margin-medium-top uk-margin-medium-bottom">
18
          <div class="uk-grid">
19

  
20
            <!-- LEFT HELP CONTENT -->
21
            <aside-help-content #leftHelperContent [position]="'left'"
22
                                [ngClass]="leftHelperContent.isPresent()?'tm-sidebar uk-width-1-4@m uk-first-column':'clear-style'">
23
            </aside-help-content>
24

  
25
            <!-- MIDDLE -->
26
            <div class=" uk-width-expand@m" style="min-height:500px;">
27

  
28
              <div *ngIf="errorMessage" class="uk-alert uk-alert-warning">{{errorMessage}}</div>
29
              <div *ngIf="loadingMessage" class="loading-big">
30
                <div class="loader-big" style="text-align: center; padding-top: 170px; color: rgb(47, 64, 80); font-weight: bold;">
31
                  {{ loadingMessage }}
32
                </div>
33
                <div class="whiteFilm"></div>
34
              </div>
35
              <div *ngIf="repo && chosen_report" class="uk-margin-top">
36

  
37
                <div class="uk-forml uk-width-1-1@s uk-width-2-3@m uk-container">
38
                  <h3>Report Request</h3>
39
                  <div class="uk-grid">
40
                    <div class=" uk-width-1-3 uk-text-right">
41
                      Report Name:
42
                    </div>
43
                    <div class="uk-width-2-3">
44
                      {{ chosen_report }}
45
                    </div>
46
                  </div>
47
                  <div class="uk-grid">
48
                    <div class=" uk-width-1-3 uk-text-right">
49
                      Release:
50
                    </div>
51
                    <div class="uk-width-2-3">
52
                      4
53
                    </div>
54
                  </div>
55
                  <div class="uk-grid">
56
                    <div class=" uk-width-1-3 uk-text-right">
57
                      Requestor:
58
                    </div>
59
                    <div class="uk-width-2-3">
60
                      {{ userEmail }}
61
                    </div>
62
                  </div>
63
                  <h3>Report Filters</h3>
64
                  <h5>Date range</h5>
65
                  <p>Valid date formats are yyyy-mm-dd or yyyy-mm. Default range is the last available month.
66
                  </p>
67
                  <div class="uk-grid">
68
                    <div class=" uk-width-1-3 uk-text-right">
69
                      Begin Date:
70
                    </div>
71
                    <div class="uk-width-2-3">
72
                      <input name="BeginDate" placeholder="2016-03" type="text" (blur)="updateBeginDate($event)">
73
                    </div>
74
                  </div>
75
                  <div class="uk-grid">
76
                    <div class=" uk-width-1-3 uk-text-right">
77
                      End Date:
78
                    </div>
79
                    <div class="uk-width-2-3">
80
                      <input name="EndDate" placeholder="2016-06" type="text" (blur)="updateEndDate($event)">
81
                    </div>
82
                  </div>
83
                  <h5><span *ngIf="chosen_report == 'RR1' || chosen_report == 'JR1'">Optional </span>Filters</h5>
84
                  <p>Provide either a Repository Identifier or an Item Identifier<br>
85
                    Identifier format: <b>namespace:value</b><br>
86
                    Valid namespace for Repository Identifier: <b>openaire</b> or <b>opendoar</b>.<br>
87
                    Valid namespace for Item Identifier: <b>openaire</b>, <b>doi</b> or <b>oid</b>(for OAI-PMH).
88
                  </p>
89
                  <div *ngIf="chosen_report != 'JR1'" class="uk-grid">
90
                    <div class=" uk-width-1-3 uk-text-right">
91
                      Repository Identifier:
92
                    </div>
93
                    <div class="uk-width-2-3">
94
                      {{ shownRepoId }}
95
                    </div>
96
                  </div>
97
                  <div *ngIf="repo.issn && chosen_report == 'JR1'" class="uk-grid">
98
                    <div class=" uk-width-1-3 uk-text-right">
99
                      Journal Identifier:
100
                    </div>
101
                    <div class="uk-width-2-3">
102
                      {{ issnToShow }}
103
                    </div>
104
                  </div>
105
                  <div *ngIf="chosen_report != 'JR1' && chosen_report != 'RR1'" class="uk-grid">
106
                    <div class=" uk-width-1-3 uk-text-right">
107
                      Item Identifier:
108
                    </div>
109
                    <div class="uk-width-2-3">
110
                      <input name="ItemIdentifier" placeholder="e.g. openaire:od_________::fb90de6f20d79783d05749d8f60417d5"
111
                             type="text" (blur)="updateItemIdentifier($event)">
112
                    </div>
113
                  </div>
114

  
115
                  <div *ngIf="chosen_report == 'IR1' || chosen_report == 'RR1' || chosen_report == 'JR1'">
116
                    <p>Optional filter to only show results for a single item type, e.g. article, book, etc.</p>
117
                    <div class="uk-grid">
118
                      <div class=" uk-width-1-3 uk-text-right">
119
                        Item Data Type:
120
                      </div>
121
                      <div class="uk-width-2-3">
122
                        <select name="ItemDataType" (change)="updateItemDataType($event)">
123
                          <option value="">--- Select ItemDataType ---</option>
124
                          <option value="Annotation">Annotation</option>
125
                          <option value="Article">Article</option>
126
                          <option value="Bachelor thesis">Bachelor thesis</option>
127
                          <option value="Book">Book</option>
128
                          <option value="clinical trial">clinical trial</option>
129
                          <option value="Collection">Collection</option>
130
                          <option value="Conference object">Conference object</option>
131
                          <option value="Contribution for newspaper or weekly magazine">Contribution for newspaper or weekly magazine</option>
132
                          <option value="Dataset">Dataset</option>
133
                          <option value="Doctoral thesis">Doctoral thesis</option>
134
                          <option value="Event">Event</option>
135
                          <option value="External research report">External research report</option>
136
                          <option value="Film">Film</option>
137
                          <option value="Image">Image</option>
138
                          <option value="InteractiveResource">InteractiveResource</option>
139
                          <option value="Internal report">Internal report</option>
140
                          <option value="Lecture">Lecture</option>
141
                          <option value="Master thesis">Master thesis</option>
142
                          <option value="Newsletter">Newsletter</option>
143
                          <option value="Other">Other</option>
144
                          <option value="Part of book or chapter of book">Part of book or chapter of book</option>
145
                          <option value="Patent">Patent</option>
146
                          <option value="PhysicalObject">PhysicalObject</option>
147
                          <option value="Preprint">Preprint</option>
148
                          <option value="Report">Report</option>
149
                          <option value="Research">Research</option>
150
                          <option value="Review">Review</option>
151
                          <option value="Software">Software</option>
152
                          <option value="Sound">Sound</option>
153
                          <option value="Unknown">Unknown</option>
154
                        </select>
155
                      </div>
156
                    </div>
157
                  </div>
158
                  <h3>Report Attributes</h3>
159
                  <p>Valid Granularity values: Monthly or Totals</p>
160
                  <div class="uk-grid">
161
                    <div class=" uk-width-1-3 uk-text-right">
162
                      Granularity:
163
                    </div>
164
                    <div class="uk-width-2-3">
165
                      <select name="Granularity" (change)="updateGranularity($event)">
166
                        <option value="Monthly">Monthly</option>
167
                        <option value="Totals">Totals</option>
168
                      </select>
169
                    </div>
170
                  </div>
171
                  <p>The Pretty attribute is just for humans playing with the API and looking at results in a browser.</p>
172
                  <p><input name="Pretty" value="Pretty" checked="checked" type="checkbox" (change)="updatePretty($event)">Pretty print json(p) for humans</p>
173
                  <a class="uk-button uk-button-primary" (click)="goToReport()">Get Report</a>
174
                </div>
175

  
176
              </div>
177

  
178
            </div>
179

  
180
            <!-- RIGHT HELP CONTENT -->
181
            <aside-help-content #rightHelperContent [position]="'right'"
182
                                [ngClass]="rightHelperContent.isPresent()?'tm-sidebar uk-width-1-4@m uk-first-column':'clear-style'">
183
            </aside-help-content>
184

  
185
          </div>
186
        </div>
187

  
188

  
189
        <!-- BOTTOM HELP CONTENT -->
190
        <help-content #bottomHelperContent [position]="'bottom'"
191
                      [ngClass]="bottomHelperContent.isPresent()?'uk-margin-medium-top uk-margin-medium-bottom':'clear-style'">
192
        </help-content>
193

  
194

  
195
      </div>
196
    </div>
197
  </div>
198
</div>
199

  
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-show.component.ts
1 1
import { Component, OnInit } from '@angular/core';
2
import { ActivatedRoute } from '@angular/router';
2
import {ActivatedRoute, Router} from '@angular/router';
3 3
import { MetricsInfo, PiwikInfo } from '../../domain/typeScriptClasses';
4 4
import { PiwikService } from '../../services/piwik.service';
5 5
import { RepositoryService } from '../../services/repository.service';
6 6
import { loadingMetrics, loadingMetricsError } from '../../domain/shared-messages';
7 7
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
8
import {AuthenticationService} from "../../services/authentication.service";
8 9

  
9 10
@Component ({
10 11
  selector: 'metrics-show',
......
26 27

  
27 28
  constructor(
28 29
    private route: ActivatedRoute,
30
    private router: Router,
29 31
    private sanitizer: DomSanitizer,
30 32
    private piwikService: PiwikService,
31
    private repoService: RepositoryService
32
  ) {}
33
    private repoService: RepositoryService,
34
    private authService: AuthenticationService) {}
33 35

  
34 36
  ngOnInit() {
35 37
    this.repoId = this.route.snapshot.paramMap.get('id');
......
51 53
      () => {
52 54
        this.loadingMessage = '';
53 55
        this.errorMessage = '';
54
        this.getMetrics();
56
        /*if ( this.authService.getUserEmail() !== this.piwik.requestorEmail ) {
57
          this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
58
        } else {*/
59
          this.getMetrics();
60
        /*}*/
55 61
      }
56 62
    );
57 63
  }
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-instructions.component.html
37 37
                </p>
38 38
                <ul>
39 39
                  <li>as a patch for various versions of DSpace
40
                    (<a href="https://github.com/openaire/OpenAIRE-Piwik-DSpace">https://github.com/dimitrispie/OpenAIRE-Piwik-DSpace</a>)</li>
40
                    (<a target="_blank" href="https://github.com/openaire/OpenAIRE-Piwik-DSpace">https://github.com/openaire/OpenAIRE-Piwik-DSpace</a>)</li>
41 41
                  <li>as an Eprints plugin for version 3
42
                    (<a href="https://github.com/openaire/EPrints-OAPiwik">https://github.com/dimitrispie/EPrints-OAPiwik</a>)</li>
42
                    (<a target="_blank" href="https://github.com/openaire/EPrints-OAPiwik">https://github.com/openaire/EPrints-OAPiwik</a>)</li>
43 43
                </ul>
44 44
                <p>
45 45
                  To configure your repository to allow tracking in Piwik platform, please change the configuration files with the following parameters and values, generated for your site:
modules/uoa-repository-dashboard-gui/trunk/app/pages/metrics/metrics-usagestats.component.ts
15 15
export class MetricsUsagestatsComponent implements OnInit {
16 16

  
17 17
  errorMessage: string;
18
  title: string = 'Get usage statistics report';
18 19

  
19 20
  repo: Repository;
20 21
  repoId: string;
21
  shownRepoId: string;
22
  shownOpenaireId: string;
23
  issnToShow: string = '';
24
  chosen_report: string;
25
  disable_report_choice: boolean;
26 22

  
27
  userEmail: string;
28
  beginDate: string = '';
29
  endDate: string = '';
30
  itemIdentifier: string = '';
31
  itemDataType: string = '';
32
  granularity: string = 'Monthly';
33
  pretty: boolean = true;
23
  constructor(private repoService: RepositoryService,
24
              private authService: AuthenticationService,
25
              private route: ActivatedRoute,
26
              private router: Router) {}
34 27

  
35
  constructor(private repoService: RepositoryService, private route: ActivatedRoute, private router: Router, private authService: AuthenticationService) {}
36

  
37 28
  ngOnInit() {
38
    this.getRepoId();
39
    this.getUserEmail();
40 29
    this.getRepo();
41 30
  }
42 31

  
43
  getRepoId() {
32
  getRepo() {
44 33
    this.repoId = this.route.snapshot.paramMap.get('id');
45
    this.shownRepoId = this.convertToDisplayedFormat(this.repoId);
46
    console.log(`shownRepoId is ${this.repoId}`);
47
  }
48 34

  
49
  convertToDisplayedFormat(input: string) {
50
    const tempArray = this.repoId.split('____::');
51
    return tempArray[0] + ':' + tempArray[1];
52
  }
53

  
54
  onChooseReport(event: any) {
55
    this.chosen_report = event.target.value;
56
    console.log('chosen report is', this.chosen_report);
57
    this.disable_report_choice = true;
58
  }
59

  
60
  getUserEmail() {
61
    this.userEmail = this.authService.getUserEmail();
62
  }
63

  
64
  getRepo() {
65
    this.repoService.getRepositoryById(this.repoId).subscribe(
66
      repo => this.repo = repo,
67
      error => {
68
        console.log(error);
69
        this.errorMessage = 'The repository could not be retrieved';
70
      },
71
      () => {
72
        this.shownOpenaireId = this.convertToDisplayedFormat(this.repo.piwikInfo.openaireId);
73
        if (this.repo.issn){
74
          this.issnToShow = this.repo.issn.slice(0, 4)+ '-' + this.repo.issn.toString().slice(4);
35
    if (this.repoId) {
36
      this.repoService.getRepositoryById(this.repoId).subscribe(
37
        repo => this.repo = repo,
38
        error => {
39
          console.log(error);
40
          this.errorMessage = 'The repository could not be retrieved';
41
        },
42
        () => {
43
          this.title = this.title + ' for ' + this.repo.officialName;
44
          if ( this.authService.getUserEmail() !== this.repo.registeredBy ) {
45
            this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
46
          }
75 47
        }
76
      }
77
    );
48
      );
49
    }
78 50
  }
79 51

  
80
  updateBeginDate(event: any) {
81
    this.beginDate = event.target.value;
82
  }
83

  
84
  updateEndDate(event: any) {
85
    this.endDate = event.target.value;
86
  }
87

  
88
  updateItemDataType(event: any) {
89
    this.itemDataType = event.target.value;
90
  }
91

  
92
  updateItemIdentifier(event: any) {
93
    this.itemIdentifier = event.target.value;
94
  }
95

  
96
  updateGranularity(event: any) {
97
    this.granularity = event.target.value;
98
  }
99

  
100
  updatePretty(event: any) {
101
    this.pretty = !this.pretty;
102
  }
103

  
104
  goToReport() {
105
    /* additional field: */
106
    /*itemIdentifier: this.repo.piwikInfo.openaireId,*/
107
      /*this.router.navigate(['/getImpact/usagestats-report-results'], {
108
        queryParams: {
109
          report: this.chosen_report,
110
          beginDate: this.beginDate,
111
          endDate: this.endDate,
112
          repoId: this.shownRepoId,
113
          itemDataType: this.itemDataType,
114
          itemIdentifier: this.itemIdentifier,
115
          granularity: this.granularity,
116
          pretty: this.pretty
117
        }
118
      });*/
119

  
120
      const params = new URLSearchParams();
121

  
122
      params.append('Report', this.chosen_report);
123
      params.append('Release', '4');
124
      params.append('RequestorID', this.authService.getUserEmail());
125
      params.append('BeginDate', this.beginDate);
126
      params.append('EndDate', this.endDate);
127
      params.append('RepositoryIdentifier', this.shownRepoId);
128
      if (this.itemIdentifier) {
129
        params.append('ItemIdentifier', this.itemIdentifier);
130
      }
131
      if (this.itemDataType) {
132
        params.append('ItemDataType', this.itemDataType);
133
      }
134
      params.append('Granularity', this.granularity);
135
      if (this.pretty && this.pretty === true) {
136
        params.append('Pretty', 'Pretty');
137
      }
138

  
139
      let url = `http://beta.services.openaire.eu/usagestats/sushilite/GetReport/?${params}`;
140
      console.log(`going to: ${url}`);
141

  
142
      window.location.href = url;
143
  }
144

  
145 52
}
modules/uoa-repository-dashboard-gui/trunk/app/pages/compatibility/compatibility-validation-results.component.ts
1 1
import { Component, OnInit, ViewChild } from '@angular/core';
2
import { ActivatedRoute } from '@angular/router';
2
import {ActivatedRoute, Router} from '@angular/router';
3 3
import { JobResultEntry, StoredJob } from '../../domain/typeScriptClasses';
4 4
import { MonitorService } from '../../services/monitor.service';
5 5
import {
......
7 7
  noUsageRulesResults
8 8
} from '../../domain/shared-messages';
9 9
import { ConfirmationDialogComponent } from '../../shared/reusablecomponents/confirmation-dialog.component';
10
import {AuthenticationService} from "../../services/authentication.service";
10 11

  
11 12
@Component({
12 13
  selector: 'app-compatibility-validation-results',
......
32 33
  public checkErrors: ConfirmationDialogComponent;
33 34

  
34 35
  constructor (private route: ActivatedRoute,
35
               private monitorService: MonitorService) {}
36
               private router: Router,
37
               private monitorService: MonitorService,
38
               private authService: AuthenticationService) {}
36 39

  
37 40
  ngOnInit () {
38 41
    setTimeout(() => {
......
71 74
        if (!this.usageResults.length) {
72 75
          this.noUsage = noUsageRulesResults;
73 76
        }
77
        if ( this.authService.getUserEmail() !== this.jobSummary.userEmail ) {
78
          this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
79
        }
74 80
      }
75 81
    );
76 82
  }
modules/uoa-repository-dashboard-gui/trunk/app/pages/compatibility/compatibility-monitor-repo.component.ts
1 1
import { Component, OnInit } from '@angular/core';
2
import { ActivatedRoute } from '@angular/router';
2
import {ActivatedRoute, Router} from '@angular/router';
3 3
import {AggregationDetails, Aggregations, Repository} from '../../domain/typeScriptClasses';
4 4
import { RepositoryService } from '../../services/repository.service';
5 5
import {
......
9 9
  loadingRepoMessage,
10 10
  noAggregationHistory
11 11
} from '../../domain/shared-messages';
12
import {AuthenticationService} from "../../services/authentication.service";
12 13

  
13 14
@Component ({
14 15
  selector: 'app-compatibility-monitor-repo',
......
27 28
  latestAggregations: AggregationDetails[] = [];
28 29

  
29 30
  constructor(private route: ActivatedRoute,
30
              private repoService: RepositoryService) {}
31
              private router: Router,
32
              private repoService: RepositoryService,
33
              private authService: AuthenticationService) {}
31 34

  
32 35
  ngOnInit() {
33 36
    this.readRepoId();
......
55 58
          this.loadingMessage = '';
56 59
          if (this.repo) {
57 60
            this.repoName = this.repo.officialName;
58
            this.getLatestAggregationHistory();
61
            if ( this.authService.getUserEmail() !== this.repo.registeredBy ) {
62
              this.router.navigateByUrl('/403-forbidden', { skipLocationChange: true });
63
            } else {
64
              this.getLatestAggregationHistory();
65
            }
59 66
          } else {
60 67
            this.errorMessage = loadingRepoError;
61 68
          }
modules/uoa-repository-dashboard-gui/trunk/app/pages/compatibility/compatibility-monitor-fullHistory-repo.component.html
2 2
  <div class="uk-width-1-1@m uk-first-column">
3 3

  
4 4
    <h1 class="uk-h2">Aggregation history for {{ repoName }}</h1>
5
    <div *ngIf="repo">
6
      <a [routerLink]="['/compatibility/monitor', repo.id]" class="uk-h3 uk-link">Go back</a>
7
    </div>
8 5

  
9 6
    <!-- TOP HELP CONTENT -->
10 7
    <help-content #topHelperContent [position]="'top'"
......
32 29
          <div *ngIf="noAggregations">{{ noAggregations }}</div>
33 30
          <div *ngIf="aggregationsMap && years && (years.length > 0) && !noAggregations">
34 31
            <div *ngFor="let year of years" class="uk-width-1-1@m">
35
              <h4>{{ year }}</h4>
36
              <div class="section md-bg-blue-grey-700">
32
              <div>
33
                <h4>{{ year }}</h4>
34
                <div *ngFor="let aggr of aggregationsMap[year]">
35
                  <div class="uk-grid uk-child-width-1-4">
36
                    <div><span *ngIf="aggr.date">{{ aggr.date | date : "yyyy-MM-dd" }}</span></div>
37
                    <div><span *ngIf="aggr.aggregationStage">Aggregation stage: {{ aggr.aggregationStage }}</span></div>
38
                    <div><span *ngIf="aggr.collectionMode">CollectionMode: {{ aggr.collectionMode }}</span></div>
39
                    <div><span *ngIf="aggr.numberOfRecords">Number of records: {{ aggr.numberOfRecords }}</span></div>
40
                  </div>
41
                </div>
42
              </div>
43
              <!--<div class="section md-bg-blue-grey-700">
37 44
                <div class="uk-container uk-container-center">
38 45
                  <div class="al_timeline">
39 46
                    <div *ngFor="let aggr of aggregationsMap[year]" class="al_timeline_block versionChange">
......
47 54
                    </div>
48 55
                  </div>
49 56
                </div>
50
              </div>
57
              </div>-->
51 58
              <hr>
52 59
            </div>
53 60
          </div>
61

  
62
          <div *ngIf="repo" class="uk-inline">
63
            <div class="uk-float-right" style="z-index: 100; bottom: 30px; position: fixed; right: 30px;">
64
              <button [routerLink]="['/compatibility/monitor', repo.id]"
65
                      style="box-shadow: 0 1px 10px #444444"
66
                      class="uk-button uk-button-primary">
67
                Go back
68
              </button>
69
            </div>
70
          </div>
71

  
54 72
        </div>
55 73

  
56 74
        <!-- RIGHT HELP CONTENT -->
modules/uoa-repository-dashboard-gui/trunk/package-lock.json
110 110
      "integrity": "sha1-Qpai/324TdwuZ8KhB+J29yRj/40=",
111 111
      "dev": true
112 112
    },
113
    "@angular/animations": {
114
      "version": "4.4.7",
115
      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-4.4.7.tgz",
116
      "integrity": "sha512-clP1xZw3KCfdj5rGDies5L5iwLgXzVFQ/B66Yj9oc24mJyK9oZARmuXdHfu+y8YtlW2b3wNSK2JH3qygaxbNLA==",
117
      "requires": {
118
        "tslib": "^1.7.1"
119
      }
120
    },
113 121
    "@angular/common": {
114 122
      "version": "4.4.7",
115 123
      "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.4.7.tgz",
modules/uoa-repository-dashboard-gui/trunk/app/services/authentication.service.ts
86 86
            deleteCookie('openAIREUser');
87 87
            deleteCookie('AccessToken');
88 88
            this.isLoggedIn = false;
89
            this.router.navigate(['/landing']);
90
          },
91
          () => {
92
            if ( sessionStorage.getItem("state.location") ) {
93
              let state = sessionStorage.getItem("state.location");
94
              sessionStorage.removeItem("state.location");
95
              console.log(`tried to login - returning to state: ${state}`);
96
              if ( !this.getIsUserLoggedIn() ) {
97
                console.log('user hasn\'t logged in yet -- going to landing');
98
                this.router.navigate(['/landing']);
99
              } else if (this.redirectUrl) {
100
                this.router.navigate([this.redirectUrl]);
101
              } else {
102
                this.router.navigate([state]);
103
              }
104
            }
89 105
          }
90 106
        );
91 107
      } else {
92 108
        this.isLoggedIn = true;
93 109
        console.log(`the current user is: ${sessionStorage.getItem('name')}, ${sessionStorage.getItem('email')}, ${sessionStorage.getItem('role')}`);
94 110
      }
95
      if ( sessionStorage.getItem("state.location") ) {
96
        let state = sessionStorage.getItem("state.location");
97
        sessionStorage.removeItem("state.location");
98
        console.log(`tried to login - returning to state: ${state}`);
99
        if ( !this.getIsUserLoggedIn() ) {
100
          this.router.navigate(['/landing']);
101
        } else if (this.redirectUrl) {
102
          this.router.navigate([this.redirectUrl]);
103
        } else {
104
          this.router.navigate([state]);
105
        }
106
      }
107 111
    }
108 112
  }
109 113

  
modules/uoa-repository-dashboard-gui/trunk/app/app.component.html
26 26

  
27 27

  
28 28
  <footer></footer>
29
  <cookie-law position="bottom">
30
    OpenAIRE uses cookies in order to function properly.<br>
31
    Cookies are small pieces of data that websites store in your browser to allow us to give you the best browsing experience possible.
32
    By using the OpenAIRE portal you accept our use of cookies. <a href="//ec.europa.eu/ipg/basics/legal/cookies/index_en.htm" target="_blank"> Read more <span class="uk-icon">
33
    <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="chevron-right" ratio="1"><polyline fill="none" stroke="#000" stroke-width="1.03" points="7 4 13 10 7 16"></polyline></svg>
34
    </span></a>
35
  </cookie-law>
29 36
</div>
modules/uoa-repository-dashboard-gui/trunk/app/shared/reusablecomponents/cookie-law/cookie-law.component.ts
1
/**
2
 * angular2-cookie-law
3
 *
4
 * Copyright 2016-2017, @andreasonny83, All rights reserved.
5
 *
6
 * @author: @andreasonny83 <andreasonny83@gmail.com>
7
 */
8

  
9
import {
10
  Component,
11
  OnInit,
12
  ViewEncapsulation,
13
  HostBinding,
14
  Input,
15
  Output,
16
  EventEmitter,
17
  animate,
18
  state,
19
  trigger,
20
  style,
21
  transition,
22
  AnimationTransitionEvent,
23
} from '@angular/core';
24

  
25
import {
26
  DomSanitizer,
27
  SafeHtml,
28
} from '@angular/platform-browser';
29

  
30
import {
31
  CookieLawService,
32
} from './cookie-law.service';
33

  
34
// import {
35
//   closeIcon,
36
// } from './icons';
37

  
38
export type CookieLawPosition = 'top' | 'bottom';
39
export type CookieLawAnimation = 'topIn' | 'bottomIn' | 'topOut' | 'bottomOut';
40
export type CookieLawTarget = '_blank' | '_self';
41

  
42
@Component({
43
  selector: 'cookie-law',
44
  // encapsulation: ViewEncapsulation.None,
45
  animations: [
46
    trigger('state', [
47
      state('bottomOut', style({ transform: 'translateY(100%)' })),
48
      state('topOut', style({ transform: 'translateY(-100%)' })),
49
      state('*', style({ transform: 'translateY(0)' })),
50

  
51
      transition('void => topIn', [
52
        style({ transform: 'translateY(-100%)' }),
53
        animate('1000ms ease-in-out'),
54
      ]),
55

  
56
      transition('void => bottomIn', [
57
        style({ transform: 'translateY(100%)' }),
58
        animate('1000ms ease-in-out'),
59
      ]),
60

  
61
      transition('* => *', animate('1000ms ease-out')),
62
    ])
63
  ],
64
  styleUrls: [ './cookie-law.css' ],
65
  templateUrl: './cookie-law.html',
66
})
67
export class CookieLawComponent implements OnInit {
68
  public cookieLawSeen: boolean;
69

  
70
  @Input('learnMore')
71
  get learnMore() { return this._learnMore; }
72
  set learnMore(value: string) {
73
    this._learnMore = (value !== null && `${value}` !== 'false') ? value : null;
74
  }
75

  
76
  @Input('target')
77
  get target() { return this._target; }
78
  set target(value: CookieLawTarget) {
79
    this._target = (value !== null && `${value}` !== 'false' &&
80
                      (`${value}` === '_blank' || `${value}` === '_self')
81
                     ) ? value : '_blank';
82
  }
83

  
84
  @Input('position')
85
  get position() { return this._position; }
86
  set position(value: CookieLawPosition) {
87
    this._position = (value !== null && `${value}` !== 'false' &&
88
                      (`${value}` === 'top' || `${value}` === 'bottom')
89
                     ) ? value : 'bottom';
90
  }
91

  
92
  @Output('isSeen')
93
  private isSeenEvt: EventEmitter<boolean>;
94

  
95
  @HostBinding('attr.seen')
96
  public isSeen: boolean;
97

  
98
  private animation: CookieLawAnimation;
99
  private closeSvg: SafeHtml;
100
  private currentStyles: {};
101
  private _learnMore: string;
102
  private _target: CookieLawTarget;
103
  private _position: CookieLawPosition;
104

  
105
  constructor(
106
    private _service: CookieLawService,
107
    private domSanitizer: DomSanitizer,
108
  ) {
109
    this.isSeenEvt = new EventEmitter<boolean>();
110
    this.animation = 'topIn';
111
    this._position = 'bottom';
112
    this.cookieLawSeen = this._service.seen();
113
  }
114

  
115
  ngOnInit(): void {
116
    if (typeof document !== 'undefined') {
117
      this.animation = this.position === 'bottom' ? 'bottomIn' : 'topIn';
118

  
119
      this.closeSvg = '<span class="clickable uk-icon"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="close" ratio="1"><path fill="none" stroke="#000" stroke-width="1.06" d="M16,16 L4,4"></path><path fill="none" stroke="#000" stroke-width="1.06" d="M16,4 L4,16"></path></svg></span> ' ;
120

  
121
      if (this.cookieLawSeen) {
122
        this.isSeen = true;
123
      }
124

  
125
      this.currentStyles = {
126
        'top': this.position === 'top' ? '0' : null,
127
        'bottom': this.position === 'top' ? 'initial' : null,
128
      };
129
    }
130
  }
131

  
132
  afterDismissAnimation(evt: AnimationTransitionEvent) {
133
    if (evt.toState === 'topOut' ||
134
        evt.toState === 'bottomOut') {
135
      this.isSeen = true;
136
      this.isSeenEvt.emit(this.isSeen);
137
    }
138
  }
139

  
140
  public dismiss(evt?: MouseEvent): void {
141
    if (evt) {
142
      evt.preventDefault();
143
    }
144

  
145
    this._service.storeCookie();
146
    this.animation = this.position === 'top' ? 'topOut' : 'bottomOut';
147
  }
148
}
modules/uoa-repository-dashboard-gui/trunk/app/shared/reusablecomponents/cookie-law/icons.ts
1
/**
2
 * angular2-cookie-law
3
 *
4
 * Copyright 2016-2017, @andreasonny83, All rights reserved.
5
 *
6
 * @author: @andreasonny83 <andreasonny83@gmail.com>
7
 */
8

  
9
export const closeIcon: string = `
10
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
11
    <path d="M377.047 184.198q0 8.26-6.037 14.297L313.505 256l57.505 57.505q6.037 6.037 6.037 14.297 0 8.578-6.037 14.615l-28.593 28.593q-6.037 6.037-14.615 6.037-8.26 0-14.297-6.037L256 313.505l-57.505 57.505q-6.037 6.037-14.297 6.037-8.578 0-14.615-6.037l-28.593-28.593q-6.037-6.037-6.037-14.615 0-8.26 6.037-14.297L198.495 256l-57.505-57.505q-6.037-6.037-6.037-14.297 0-8.578 6.037-14.615l28.593-28.593q6.037-6.037 14.615-6.037 8.26 0 14.297 6.037L256 198.495l57.505-57.505q6.037-6.037 14.297-6.037 8.578 0 14.615 6.037l28.593 28.593q6.037 6.037 6.037 14.615zM500 256q0-66.401-32.724-122.477-32.724-56.075-88.799-88.799Q322.401 12 256 12q-66.401 0-122.477 32.724-56.075 32.724-88.799 88.799Q12 189.599 12 256q0 66.401 32.724 122.477 32.724 56.075 88.799 88.799Q189.599 500 256 500q66.401 0 122.477-32.724 56.075-32.724 88.799-88.799Q500 322.401 500 256z"></path>
12
  </svg>
13
`;
modules/uoa-repository-dashboard-gui/trunk/app/shared/reusablecomponents/cookie-law/cookie-law.css
1
.cookie-law-wrapper a {
2
  color: #bbb;
3
  -webkit-transition: color .2s;
4
  transition: color .2s;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff