diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index aee690650b1c21b8aa8c71e9998e9c2dcd71a653..d761ec5c3e30b28a2696320c3acbec24e1dd726f 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -15,6 +15,7 @@ import { StatisticsComponent } from './components/fragments/statistics/statistic import { ContentCreatePageComponent } from './components/pages/content-create-page/content-create-page.component'; import { ContentCarouselPageComponent } from './components/pages/content-carousel-page/content-carousel-page.component'; import { FeedbackBarometerPageComponent } from './components/pages/feedback-barometer-page/feedback-barometer-page.component'; +import { FooterImprintComponent } from './components/pages/footer-imprint/footer-imprint.component'; const routes: Routes = [ { @@ -98,6 +99,10 @@ const routes: Routes = [ canActivate: [AuthenticationGuard], data: { roles: [UserRole.PARTICIPANT] } }, + { + path: 'imprint', + component: FooterImprintComponent + }, { path: '**', component: PageNotFoundPageComponent diff --git a/src/app/app.component.html b/src/app/app.component.html index 49832c88f4eb5d81419b4f0108ad6349b99bd2c0..b86ef90e22afcc573488a94b2a31092e5d3f795c 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -3,4 +3,5 @@ <div fxFlex class="app-component"> <router-outlet></router-outlet> </div> + <app-footer></app-footer> </div> diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3937566e8a94a1ffdd708874024d2e2bff766dcb..f3f3484c4c59d7f7933989d8557d7fada018333d 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -91,6 +91,9 @@ import { MarkdownModule } from 'ngx-markdown'; import { MarkdownToolbarComponent } from './components/fragments/markdown-toolbar/markdown-toolbar.component'; import { MarkdownHelpDialogComponent } from './components/dialogs/markdown-help-dialog/markdown-help-dialog.component'; import { GenericDataDialogComponent } from './components/dialogs/generic-data-dialog/generic-data-dialog.component'; +import { FooterComponent } from './components/fragments/footer/footer.component'; +import { FooterLoginDialogComponent } from './components/dialogs/footer-login-dialog/footer-login-dialog.component'; +import { FooterImprintComponent } from './components/pages/footer-imprint/footer-imprint.component'; @NgModule({ declarations: [ @@ -131,7 +134,10 @@ import { GenericDataDialogComponent } from './components/dialogs/generic-data-di FeedbackBarometerPageComponent, MarkdownToolbarComponent, MarkdownHelpDialogComponent, - GenericDataDialogComponent + GenericDataDialogComponent, + FooterComponent, + FooterLoginDialogComponent, + FooterImprintComponent ], entryComponents: [ RegisterComponent, @@ -146,7 +152,8 @@ import { GenericDataDialogComponent } from './components/dialogs/generic-data-di ContentYesNoCreatorComponent, ContentDeleteComponent, MarkdownHelpDialogComponent, - GenericDataDialogComponent + GenericDataDialogComponent, + FooterLoginDialogComponent ], imports: [ AppRoutingModule, diff --git a/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.html b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.html new file mode 100644 index 0000000000000000000000000000000000000000..045bdd3d15b2d007c63c3b52c8f57cf5ceedbc8e --- /dev/null +++ b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.html @@ -0,0 +1,8 @@ +<h3 mat-header>Login as Guest</h3> +<p mat-line>Do you really want to leave the current page and login as a guest?</p> +<p mat-line>You'll be logged out if you are currently logged in</p> + +<mat-action-row> + <button mat-button (click)="dialogRef.close('login')">Login</button> + <button mat-button (click)="onNoClick()">Cancel</button> +</mat-action-row> \ No newline at end of file diff --git a/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.scss b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.spec.ts b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..dcb44e78bfb42fc82105489a6ff88778d8f7d8a0 --- /dev/null +++ b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterLoginDialogComponent } from './footer-login-dialog.component'; + +describe('FooterLoginDialogComponent', () => { + let component: FooterLoginDialogComponent; + let fixture: ComponentFixture<FooterLoginDialogComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FooterLoginDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FooterLoginDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.ts b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..281d27d3c1d8272d05a14abfa25bbb9e205275a9 --- /dev/null +++ b/src/app/components/dialogs/footer-login-dialog/footer-login-dialog.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import { FooterComponent } from '../../fragments/footer/footer.component'; +import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; + +@Component({ + selector: 'app-footer-login-dialog', + templateUrl: './footer-login-dialog.component.html', + styleUrls: ['./footer-login-dialog.component.scss'] +}) +export class FooterLoginDialogComponent implements OnInit { + + constructor( + public dialogRef: MatDialogRef<FooterComponent>, + @Inject(MAT_DIALOG_DATA) public data: any + ) { } + + onNoClick(): void { + this.dialogRef.close(); + } + + ngOnInit() { + } +} diff --git a/src/app/components/fragments/footer/footer.component.html b/src/app/components/fragments/footer/footer.component.html new file mode 100644 index 0000000000000000000000000000000000000000..ec2a042563e0e9f097552f7d2c56ca85a72eb401 --- /dev/null +++ b/src/app/components/fragments/footer/footer.component.html @@ -0,0 +1,9 @@ +<footer> + <mat-toolbar> + <div class="container"> + <a href="imprint" target="_parent"> + <button mat-button>Impressum</button> + </a> + </div> + </mat-toolbar> +</footer> \ No newline at end of file diff --git a/src/app/components/fragments/footer/footer.component.scss b/src/app/components/fragments/footer/footer.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..97bba6929502cb49b703697086809bbd5a0d9634 --- /dev/null +++ b/src/app/components/fragments/footer/footer.component.scss @@ -0,0 +1,38 @@ +footer { + overflow-y: auto; +} + +mat-expansion-panel { + background-color: rgb(235, 235, 235); + color: rgb(60, 60, 60); + height: auto; +} + +mat-toolbar { + background-color: rgb(240, 240, 240); + color: rgb(140, 140, 140); + height: auto; +} + +button { + min-height: 28px; + font-size: 12px; + color: rgb(140, 140, 140); +} + +.container { + display: flex; + justify-content: space-around; +} + +/* Small screens */ +@media all and (max-width: 300px) { + .container { + flex-direction: column; + margin: auto; + } + + mat-toolbar { + height: auto; + } +} \ No newline at end of file diff --git a/src/app/components/fragments/footer/footer.component.spec.ts b/src/app/components/fragments/footer/footer.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ca6c45431d529bbf993d17231e1c7604bb6a480 --- /dev/null +++ b/src/app/components/fragments/footer/footer.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterComponent } from './footer.component'; + +describe('FooterComponent', () => { + let component: FooterComponent; + let fixture: ComponentFixture<FooterComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FooterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/fragments/footer/footer.component.ts b/src/app/components/fragments/footer/footer.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..8675f2f5dac38dff9c835e2c0ea1c9cda0e3447d --- /dev/null +++ b/src/app/components/fragments/footer/footer.component.ts @@ -0,0 +1,45 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { AuthenticationService } from '../../../services/http/authentication.service'; +import { NotificationService } from '../../../services/util/notification.service'; +import { Router } from '@angular/router'; +import { MatDialog } from '@angular/material'; +import { FooterLoginDialogComponent } from '../../dialogs/footer-login-dialog/footer-login-dialog.component'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'] +}) +export class FooterComponent implements OnInit { + + constructor( + public authenticationService: AuthenticationService, + public notificationService: NotificationService, + public router: Router, + public dialog: MatDialog + ) { } + + ngOnInit() { + } + + guestLogin(): void { + this.authenticationService.guestLogin().subscribe(loginSuccessful => this.checkLogin(loginSuccessful)); + } + + openLoginDialog(): void { + const dialogRef = this.dialog.open(FooterLoginDialogComponent, { + width: '400px' + }); + dialogRef.afterClosed() + .subscribe(result => { + if(result === 'login'){this.guestLogin();} + }); + } + + private checkLogin(loginSuccessful: boolean) { + if (loginSuccessful) { + this.notificationService.show('Login successful!'); + this.router.navigate(['participant']); + } + } +} diff --git a/src/app/components/pages/footer-imprint/footer-imprint.component.html b/src/app/components/pages/footer-imprint/footer-imprint.component.html new file mode 100644 index 0000000000000000000000000000000000000000..53eaf18269306fe6b7c1b7ecfd73c6c348fd528c --- /dev/null +++ b/src/app/components/pages/footer-imprint/footer-imprint.component.html @@ -0,0 +1,117 @@ +<mat-accordion> + <mat-expansion-panel [expanded]="step === 0" (opened)="setStep(0)" hideToggle="true"> + <mat-expansion-panel-header> + <mat-panel-title>Impressum</mat-panel-title> + </mat-expansion-panel-header> + <p> + <a>Technische Hochschule Mittelhessen (THM) University of Applied Sciences</a> + <br>Wiesenstraße 14 + <br>35390 Gießen + <br>Germany + <br> + </p> + + <p> + <mat-icon>phone</mat-icon> +49 641 309-0 + <br> + <mat-icon>print</mat-icon> +49 641 309-2901 + <br> + <mat-icon>mail</mat-icon> praesident@thm.de + <br> + </p> + + <mat-divider></mat-divider> + <br> + + <p> + Die Technische Hochschule Mittelhessen ist eine rechtsfähige Körperschaft des öffentlichen Rechts und zugleich staatliche + Einrichtung gemäß § 1 (1) HHG (Hessisches Hochschulgesetz vom 14. Dezember 2009, GVBl. I, S. 666). + </p> + + <p> Sie wird gesetzlich vertreten durch den Präsidenten + <a>Prof. Dr. Matthias Willems</a>. + </p> + + <p>Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz: + <br> + <a>DE 813885934</a> + </p> + + <p> + <a>Zuständige Aufsichtsbehörde:</a> + <br> Hessisches Ministerium für Wissenschaft und Kunst Rheinstraße 23 - 25 65185 Wiesbaden + </p> + + <p> + <a>Inhaltlich Verantwortlicher gemäß § 55 Abs. 2 RStV:</a> + <br> Das Präsidium hat die allgemeine inhaltliche Verantwortung und entscheidet in Zweifelsfällen über die Zulässigkeit + von Daten. Die Einrichtungen und Organe der Technischen Hochschule Mittelhessen (u.a. Fachbereiche, Bibliothek, AStA, + Personalräte) erstellen ihre Webseiten in eigener Verantwortung. Die inhaltliche Verantwortung dieser Webseiten liegt + bei der/dem Vertretungsberechtigten der jeweils zuständigen Einrichtung bzw. bei der von ihr/ihm autorisierten Person. + Die Kontaktdaten dieser Personen sind dort jeweils im Impressum angegeben. + </p> + + <p> + <a>Das Impressum gilt auch für folgende Social Media Profile:</a> + <br>www.thm.de/facebook + <br>www.thm.de/twitter + <br>www.thm.de/plus.google + <br>www.thm.de/youtube + </p> + + <p> + <a>Technische Ansprechpartner für den Internetauftritt:</a> + <br>Referat Neue Medien + <br>Ostanlage 37 - 41 + <br>35390 Gießen + <br>webredaktion@thm.de + </p> + </mat-expansion-panel> + + <mat-expansion-panel [expanded]="step === 1" (opened)="setStep(1)" hideToggle="true"> + <mat-expansion-panel-header>Haftungsausschluss</mat-expansion-panel-header> + <h4>1. Inhalt der Internetpräsenz</h4> + Die Technische Hochschule Mittelhessen (THM) ist bemüht, die bereitgestellte Internetpräsenz stets informativ, aktuell, klar + strukturiert und übersichtlich zu halten. Trotzdem können Fehler und Unklarheiten nicht vollständig ausgeschlossen werden. + Aus diesem Grunde übernimmt die Technische Hochschule Mittelhessen keine Gewähr für die Vollständigkeit, die Richtigkeit, + die Aktualität und die Qualität der zur Verfügung gestellten Informationen. Für Schäden immaterieller oder materieller + Art, die durch die Nutzung oder die Nichtnutzung der dargebotenen Informationen oder durch die Nutzung fehlerhafter oder + unvollständiger Informationen mittelbar oder unmittelbar entstehen, haftet die Technische Hochschule Mittelhessen nicht, + sofern ihr nicht nachweislich ein grob fahrlässiges oder vorsätzliches Verschulden zur Last gelegt werden kann. Gleiches + gilt für kostenlos zur Verfügung gestellte Software. Die Technische Hochschule Mittelhessen kann ohne vorherige Ankündigung + Teile des Internetangebotes oder auch das gesamte Internetangebot verändern, ergänzen löschen oder endgültig oder zeitweise + sperren. + + <h4>2. Links und Verweise</h4> + Für „fremde Inhalte“, die durch direkte oder indirekte Verknüpfungen (sogenannte Links) von anderen Anbietern zur Verfügung + gestellt werden, übernimmt die Technische Hochschule Mittelhessen keine Haftung. Sie macht sich diese Seiten ausdrücklich + nicht zu Eigen und distanziert sich auch von den Inhalten der gelinkten/verknüpften Seiten. Diese Feststellung betrifft + auch die von der Technischen Hochschule Mittelhessen eingerichteten Diskussionsforen, Gästebücher und Mailinglisten. + Für unvollständige, fehlerhafte oder auch illegale Inhalte und insbesondere für Schäden, die aus der Nutzung dieser Seiten + und der in ihnen dargebotenen Informationen entstehen, haftet allein der Anbieter der entsprechenden Seiten. Die Technische + Hochschule Mittelhessen hat keine Kenntnis über anstößige oder rechtswidrige Inhalte der gelinkten/verknüpften Seiten + der Anbieter. Sollten auf diesen Seiten dennoch rechtswidrige oder anstößige Inhalte enthalten sein, distanziert sich + die Technische Hochschule Mittelhessen ausdrücklich von diesen Inhalten. + + <h4>3. Urheberrecht</h4> + Die Technische Hochschule Mittelhessen ist bestrebt, in ihren Publikationen die Urheberrechte der verwendeten Dokumente, + Texte, Grafiken, Tondokumente und Videosequenzen zu beachten, von ihr selbst erstellte Grafiken, Tondokumente, Videosequenzen + und Texte zu nutzen oder auf lizenzfreie Grafiken, Tondokumente, Videosequenzen und Texte zurückzugreifen. Alle innerhalb + des Internetangebotes genannten und ggf. durch Dritte geschützten Marken- und Warenzeichen unterliegen uneingeschränkt + den Bestimmungen des gültigen Kennzeichenrechts und den Besitzrechten der jeweiligen eingetragenen Eigentümer. Allein + aufgrund der bloßen Nennung ist nicht der Schluss zu ziehen, dass Markenzeichen nicht durch Rechte Dritter geschützt + sind! Das Copyright für von der Technischen Hochschule Mittelhessen veröffentlichte Dokumente bleibt alleine bei der + Technische Hochschule Mittelhessen. Die Vervielfältigung der von der Technischen Hochschule Mittelhessen erstellten Dokumente + und Publikationen ist ohne ausdrückliche Zustimmung der Technischen Hochschule Mittelhessen nicht gestattet. Das Layout + der Homepage und die verwendeten Graphiken sowie sonstige Inhalte sind urheberrechtlich geschützt. + + <h4>4. Datenschutz</h4> + Sofern auf unserer Webseite die Möglichkeit zur Eingabe persönlicher oder geschäftlicher Daten wie Namen, E-Mail-Adressen, + Anschriften usw. besteht, erfolgt die Preisgabe dieser Daten seitens des Nutzers auf freiwilliger Basis. + + <h4>5. Rechtswirksamkeit dieses Haftungsausschlusses</h4> + Dieser Haftungsausschluss ist als Teil des Internetangebots zu betrachten, von dem aus auf diese Seite verwiesen wurde. Sofern + Teile oder einzelne Formulierungen dieses Textes der geltenden Rechtsgrundlage nicht oder nicht vollständig entsprechen, + bleiben die übrigen Teile der Internetpräsentation in ihrem Inhalt und in ihrer Gültigkeit unberührt. + </mat-expansion-panel> +</mat-accordion> \ No newline at end of file diff --git a/src/app/components/pages/footer-imprint/footer-imprint.component.scss b/src/app/components/pages/footer-imprint/footer-imprint.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..c105e35b241b7c4a3457781d97940f273977eceb --- /dev/null +++ b/src/app/components/pages/footer-imprint/footer-imprint.component.scss @@ -0,0 +1,12 @@ +mat-icon { + font-size: 20px; + vertical-align: middle; +} + +p { + margin: 2%; +} + +a{ + font-weight:bolder; +} \ No newline at end of file diff --git a/src/app/components/pages/footer-imprint/footer-imprint.component.spec.ts b/src/app/components/pages/footer-imprint/footer-imprint.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..28cf091c05b3741ecb12ccf56352b358764048b9 --- /dev/null +++ b/src/app/components/pages/footer-imprint/footer-imprint.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterImprintComponent } from './footer-imprint.component'; + +describe('FooterImprintComponent', () => { + let component: FooterImprintComponent; + let fixture: ComponentFixture<FooterImprintComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FooterImprintComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FooterImprintComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/pages/footer-imprint/footer-imprint.component.ts b/src/app/components/pages/footer-imprint/footer-imprint.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..a21da8acf9724796e2ffe687ac952807f249f8d0 --- /dev/null +++ b/src/app/components/pages/footer-imprint/footer-imprint.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-footer-imprint', + templateUrl: './footer-imprint.component.html', + styleUrls: ['./footer-imprint.component.scss'] +}) +export class FooterImprintComponent implements OnInit { + step = 0; + + constructor() { } + + ngOnInit() { + } + + setStep(index: number) { + this.step = index; + } + + nextStep() { + this.step++; + } + + prevStep() { + this.step--; + } +} \ No newline at end of file