Beantragen
diff --git a/static/src/app/app.routing.ts b/static/src/app/app.routing.ts
index 1ffd6cf..0973f27 100644
--- a/static/src/app/app.routing.ts
+++ b/static/src/app/app.routing.ts
@@ -1,7 +1,7 @@
import {RouterModule, Routes} from "@angular/router";
import {LoginComponent} from "./login/index";
import {NotFoundComponent} from "./not-found/not-found.component";
-import {LoginGuardAdmin, LoginGuardHL, LoginGuardSQL} from "./login/login.guard";
+import {LoginGuardAdmin, LoginGuardHL, LoginGuardMT, LoginGuardSQL} from "./login/login.guard";
import {usersRoutes, usersRoutingComponents} from "./users/users.routing";
import {squadsRoutes, squadsRoutingComponents} from "./squads/squads.routing";
import {decorationsRoutes, decorationsRoutingComponents} from "./decorations/decoration.routing";
@@ -13,7 +13,7 @@ import {RequestAwardComponent} from "./request/award/req-award.component";
import {RequestPromotionComponent} from "./request/promotion/req-promotion.component";
import {ConfirmPromotionComponent} from "./request/confirm-promotion/confirm-promotion.component";
import {ConfirmAwardComponent} from "./request/confirm-award/confirm-award.component";
-import {WarDetailComponent} from "./wars/war-detail.component";
+import {warRoutes, warsRoutingComponents} from "./wars/wars.routing";
export const appRoutes: Routes = [
@@ -21,7 +21,7 @@ export const appRoutes: Routes = [
{path: 'cc-overview', children: armyRoutes},
{path: '', redirectTo: '/cc-overview', pathMatch: 'full'},
- {path: 'cc-wars/:id', component: WarDetailComponent},
+ {path: 'cc-wars', children: warRoutes},
{path: 'login', component: LoginComponent},
{path: 'signup', component: SignupComponent},
@@ -47,6 +47,6 @@ export const appRouting = RouterModule.forRoot(appRoutes);
export const routingComponents = [LoginComponent, SignupComponent, RequestAwardComponent, RequestPromotionComponent, ConfirmAwardComponent,
ConfirmPromotionComponent, AdminComponent, ...armyRoutingComponents, NotFoundComponent, ...usersRoutingComponents,
- ...squadsRoutingComponents, ...decorationsRoutingComponents, ...ranksRoutingComponents, WarDetailComponent];
+ ...squadsRoutingComponents, ...decorationsRoutingComponents, ...ranksRoutingComponents, ...warsRoutingComponents];
-export const routingProviders = [LoginGuardHL];
+export const routingProviders = [LoginGuardSQL, LoginGuardHL, LoginGuardMT, LoginGuardAdmin];
diff --git a/static/src/app/login/login.component.html b/static/src/app/login/login.component.html
index 1300f59..b66611c 100644
--- a/static/src/app/login/login.component.html
+++ b/static/src/app/login/login.component.html
@@ -18,7 +18,7 @@
{{error}}
-
+
diff --git a/static/src/app/login/login.guard.ts b/static/src/app/login/login.guard.ts
index 1083734..1edecee 100644
--- a/static/src/app/login/login.guard.ts
+++ b/static/src/app/login/login.guard.ts
@@ -1,10 +1,11 @@
-import { Injectable } from '@angular/core';
-import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
+import {Injectable} from '@angular/core';
+import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
@Injectable()
export class LoginGuardSQL implements CanActivate {
- constructor(private router: Router) { }
+ constructor(private router: Router) {
+ }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (localStorage.getItem('currentUser')) {
@@ -16,7 +17,7 @@ export class LoginGuardSQL implements CanActivate {
}
// not logged in so redirect to login page with the return url
- this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
+ this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});
return false;
}
}
@@ -24,7 +25,8 @@ export class LoginGuardSQL implements CanActivate {
@Injectable()
export class LoginGuardHL implements CanActivate {
- constructor(private router: Router) { }
+ constructor(private router: Router) {
+ }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (localStorage.getItem('currentUser')) {
@@ -36,7 +38,28 @@ export class LoginGuardHL implements CanActivate {
}
// not logged in so redirect to login page with the return url
- this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
+ this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});
+ return false;
+ }
+}
+
+@Injectable()
+export class LoginGuardMT implements CanActivate {
+
+ constructor(private router: Router) {
+ }
+
+ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
+ if (localStorage.getItem('currentUser')) {
+ let currentUser = JSON.parse(localStorage.getItem('currentUser'));
+ if (currentUser.permission >= 3) {
+ // logged and correct permission so return true
+ return true;
+ }
+ }
+
+ // not logged in so redirect to login page with the return url
+ this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});
return false;
}
}
@@ -44,7 +67,8 @@ export class LoginGuardHL implements CanActivate {
@Injectable()
export class LoginGuardAdmin implements CanActivate {
- constructor(private router: Router) { }
+ constructor(private router: Router) {
+ }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (localStorage.getItem('currentUser')) {
@@ -56,7 +80,7 @@ export class LoginGuardAdmin implements CanActivate {
}
// not logged in so redirect to login page with the return url
- this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
+ this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});
return false;
}
}
diff --git a/static/src/app/models/model-interfaces.ts b/static/src/app/models/model-interfaces.ts
index 18cb679..5b0a706 100644
--- a/static/src/app/models/model-interfaces.ts
+++ b/static/src/app/models/model-interfaces.ts
@@ -30,7 +30,7 @@ export interface Player {
export interface War {
_id?: string;
title?: string;
- date?: Date;
+ date?: string;
ptBlufor?: number;
ptOpfor?: number;
bestPlayerId?: Player;
diff --git a/static/src/app/services/war-service/war.service.ts b/static/src/app/services/war-service/war.service.ts
index 9805a60..343fcfd 100644
--- a/static/src/app/services/war-service/war.service.ts
+++ b/static/src/app/services/war-service/war.service.ts
@@ -21,7 +21,7 @@ export class WarService {
}
- submitDecoration(war: War, logFile?) {
+ submitWar(war: War, logFile?) {
let body;
if (logFile) {
@@ -34,11 +34,8 @@ export class WarService {
body.append('log', logFile, logFile.name);
}
- return this.http.post(this.config.apiUrl + this.config.apiDecorationPath, body)
+ return this.http.post(this.config.apiUrl + this.config.apiWarPath, body)
.map(res => res.json())
- .do(savedDecoration => {
- console.log('saved successfully')
- });
}
}
diff --git a/static/src/app/wars/war-detail.component.ts b/static/src/app/wars/war-detail.component.ts
index fd64ccc..ac11f9b 100644
--- a/static/src/app/wars/war-detail.component.ts
+++ b/static/src/app/wars/war-detail.component.ts
@@ -39,7 +39,6 @@ export class WarDetailComponent {
filterPlayersByFraction(fraction: string) {
if (fraction) {
this.players = this.war.players.filter((player) => {
- console.log(player.fraction + " .... " + fraction);
return player.fraction === fraction;
})
} else {
diff --git a/static/src/app/wars/war-submit.component.css b/static/src/app/wars/war-submit.component.css
new file mode 100644
index 0000000..9adf959
--- /dev/null
+++ b/static/src/app/wars/war-submit.component.css
@@ -0,0 +1,28 @@
+.overview {
+ position: fixed;
+ width: 25%;
+ padding-left: 50px;
+ padding-top: 70px;
+ margin-left: 10px;
+}
+
+.load-arrow {
+ background: url(../../assets/loading.png) no-repeat;
+ display: block;
+ width: 120px;
+ height: 120px;
+}
+
+/* Loading Animation */
+.glyphicon-refresh-animate {
+ animation: spin 1.5s linear infinite;
+}
+
+@keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
diff --git a/static/src/app/wars/war-submit.component.html b/static/src/app/wars/war-submit.component.html
new file mode 100644
index 0000000..bfea0a9
--- /dev/null
+++ b/static/src/app/wars/war-submit.component.html
@@ -0,0 +1,75 @@
+
diff --git a/static/src/app/wars/war-submit.component.ts b/static/src/app/wars/war-submit.component.ts
new file mode 100644
index 0000000..9ac4b12
--- /dev/null
+++ b/static/src/app/wars/war-submit.component.ts
@@ -0,0 +1,72 @@
+import {Component, ViewChild} from "@angular/core";
+import {Player, War} from "../models/model-interfaces";
+import {WarService} from "../services/war-service/war.service";
+import {ActivatedRoute, Router} from "@angular/router";
+import {NgForm} from "@angular/forms";
+
+
+@Component({
+ selector: 'war-submit',
+ templateUrl: './war-submit.component.html',
+ styleUrls: ['./war-submit.component.css']
+})
+export class WarSubmitComponent {
+
+ war: War = {date: new Date().toISOString().slice(0, 10), players: []};
+
+ fileList: FileList;
+
+ showImageError = false;
+
+ showErrorLabel = false;
+
+ loading = false;
+
+ error;
+
+ @ViewChild(NgForm) form: NgForm;
+
+ constructor(private route: ActivatedRoute,
+ private router: Router,
+ private warService: WarService) {
+ }
+
+ fileChange(event) {
+ if (!event.target.files[0].name.endsWith('.rpt')
+ && !event.target.files[0].name.endsWith('.log')
+ && !event.target.files[0].name.endsWith('.txt')) {
+ this.showImageError = true;
+ this.fileList = undefined;
+ } else {
+ this.showImageError = false;
+ this.fileList = event.target.files;
+ }
+ }
+
+ saveWar() {
+ let file: File;
+ console.log(this.war.date)
+ if (this.fileList) {
+ file = this.fileList[0];
+ this.loading = true;
+
+ this.warService.submitWar(this.war, file)
+ .subscribe(war => {
+ this.router.navigate([war._id], {relativeTo: this.route});
+ },
+ error => {
+ this.error = error._body;
+ this.showErrorLabel = true;
+ this.loading = false;
+ });
+ } else {
+ return window.alert(`Logfile ist ein Pflichtfeld`);
+ }
+ }
+
+ cancel() {
+ this.router.navigate(['..'], {relativeTo: this.route});
+ return false;
+ }
+
+}
diff --git a/static/src/app/wars/wars.routing.ts b/static/src/app/wars/wars.routing.ts
new file mode 100644
index 0000000..70085c8
--- /dev/null
+++ b/static/src/app/wars/wars.routing.ts
@@ -0,0 +1,19 @@
+import {Routes} from "@angular/router";
+import {WarSubmitComponent} from "./war-submit.component";
+import {WarDetailComponent} from "./war-detail.component";
+import {LoginGuardMT} from "../login/login.guard";
+
+
+export const warRoutes: Routes = [
+ {
+ path: '',
+ component: WarSubmitComponent,
+ canActivate: [LoginGuardMT]
+ },
+ {
+ path: ':id',
+ component: WarDetailComponent,
+ }];
+
+export const warsRoutingComponents = [WarSubmitComponent, WarDetailComponent];
+
diff --git a/static/src/assets/loading.png b/static/src/assets/loading.png
new file mode 100644
index 0000000..0e00d49
Binary files /dev/null and b/static/src/assets/loading.png differ