diff --git a/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.html b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.html new file mode 100644 index 0000000..fb59dcb --- /dev/null +++ b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.html @@ -0,0 +1,43 @@ +
+
+ + + + + +
+ + +
+ +
+ + +
+
Login:
+
{{admin.login}}
+
+ + +
+
Mail:
+
{{admin.mail}}
+
+ + +
+
Date de création:
+
{{admin.createdAt | date:'dd/LL/YYYY'}}
+
+ + +
+ +
+ +
+ + +
+
diff --git a/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.scss b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.scss new file mode 100644 index 0000000..966c9a2 --- /dev/null +++ b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.scss @@ -0,0 +1,61 @@ +.myContainer { + max-width: 100vw; + height: 100vh; + overflow-x: hidden; +} + + +.boite { + margin-left: auto; + margin-right: auto; + width: 25%; + margin-top: 10vh; + border: solid 3px; + border-radius: 10px; + padding: 20px 40px 20px 40px; + background-color: #ffffff; + text-align: center; + box-shadow: 10px 5px 5px black; +} +.lightTheme .boite { + border-color: black; +} +.darkTheme .boite { + border-color: white; +} + + +img { + margin: 0px 0px 10px 0px; + width: 5vw; + height: 5vw; + border: solid 2px black; + border-radius: 50%; + font-size: xxx-large; +} + + +.myRow { + margin: 15px 0px 15px 0px; +} +.myLabel { + text-align: right; + padding: 0px 5px 0px 0px; + margin: 0px; + font-weight: bold; +} +.myValue { + text-align: left; + padding: 0px 0px 0px 5px; + margin: 0px; +} + + +.btnContainer { + text-align: center; + margin-top: 40px; +} +.myBtn { + border: solid 1px black; + background-color: white; +} diff --git a/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.spec.ts b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.spec.ts new file mode 100644 index 0000000..39fbdd9 --- /dev/null +++ b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PageProfilAdminComponent } from './page-profil-admin.component'; + +describe('PageProfilAdminComponent', () => { + let component: PageProfilAdminComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PageProfilAdminComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PageProfilAdminComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts new file mode 100644 index 0000000..15ee6ab --- /dev/null +++ b/src/app/admin/myProfil/page-profil-admin/page-profil-admin.component.ts @@ -0,0 +1,57 @@ +import { Component, OnInit } from '@angular/core'; +import {User} from "../../../utils/interfaces/user"; +import {ThemeService} from "../../../utils/services/theme/theme.service"; +import {FictitiousDatasService} from "../../../utils/services/fictitiousDatas/fictitious-datas.service"; +import {MatDialog} from "@angular/material/dialog"; +import {MatSnackBar} from "@angular/material/snack-bar"; +import {PopupUpdateAdminComponent} from "../popup-update-admin/popup-update-admin.component"; + + + +@Component({ + selector: 'app-page-profil-admin', + templateUrl: './page-profil-admin.component.html', + styleUrls: ['./page-profil-admin.component.scss'] +}) +export class PageProfilAdminComponent implements OnInit +{ + + admin: User; + + + constructor( public themeService: ThemeService, + private fictitiousDatasService: FictitiousDatasService, + public dialog: MatDialog, + private snackBar: MatSnackBar ) { } + + + ngOnInit(): void + { + this.admin = this.fictitiousDatasService.getAdmin(); + } + + + onModifier() + { + const config = { + width: '25%', + data: { admin: this.admin } + }; + this.dialog + .open(PopupUpdateAdminComponent, config) + .afterClosed() + .subscribe(retour => { + + if((retour === null) || (retour === undefined)) + { + const config = { duration: 1000, panelClass: "custom-class" }; + this.snackBar.open( "Opération annulé", "", config); + } + else + { + this.admin = retour; + } + }); + } + +} diff --git a/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.html b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.html new file mode 100644 index 0000000..06aa63a --- /dev/null +++ b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.html @@ -0,0 +1,65 @@ +
+
+ + +
+
+ +
+ + +

+ + + + Pseudo + +
+ + + + Email + +
+ + +
+ + +
+ Modifier mot de passe: + +
+ + +
+ + + Nouveau mot de passe + + +
+ + + Confirmation nouveau mot de passe + + +
+

+ + +
+ + +
+ {{errorMessage}} +
+ + +
+ + +
+ +
+
diff --git a/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.scss b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.scss new file mode 100644 index 0000000..8d72179 --- /dev/null +++ b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.scss @@ -0,0 +1,8 @@ +img { + margin: 0px 0px 10px 0px; + width: 5vw; + height: 5vw; + border: solid 2px black; + border-radius: 50%; + font-size: xxx-large; +} diff --git a/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.spec.ts b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.spec.ts new file mode 100644 index 0000000..9f1a0f5 --- /dev/null +++ b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PopupUpdateAdminComponent } from './popup-update-admin.component'; + +describe('PopupUpdateAdminComponent', () => { + let component: PopupUpdateAdminComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PopupUpdateAdminComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PopupUpdateAdminComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts new file mode 100644 index 0000000..74b7b7b --- /dev/null +++ b/src/app/admin/myProfil/popup-update-admin/popup-update-admin.component.ts @@ -0,0 +1,106 @@ +import {Component, Inject, OnInit} from '@angular/core'; +import {User} from "../../../utils/interfaces/user"; +import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; + +@Component({ + selector: 'app-popup-update-admin', + templateUrl: './popup-update-admin.component.html', + styleUrls: ['./popup-update-admin.component.scss'] +}) +export class PopupUpdateAdminComponent implements OnInit +{ + adminCopy: User; + newPassword: string = ""; + confirmNewPassword: string = "" ; + changePassword: boolean = false ; + hasError: boolean = false; + errorMessage: string = "" ; + + + constructor( public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + + ngOnInit(): void + { + const admin0 = this.data.admin; + this.adminCopy = { + _id: admin0._id, + login: admin0.login, + hashPass: admin0.hashPass, + mail: admin0.mail, + role: { + name: admin0.role.name, + permission: admin0.role.permission, + }, + profilePictureUrl: admin0.profilePictureUrl, + dateOfBirth: admin0.dateOfBirth, + gender: admin0.gender, + interests: [], + isActive: admin0.isActive, + createdAt: admin0.createdAt, + updatedAt: admin0.updatedAt, + }; + for(let interest of admin0.interests) this.adminCopy.interests.push(interest); + } + + + onValider() + { + this.checkField(); + if(!this.hasError) + { + const data = { + user: this.adminCopy, + newPassword: this.newPassword + }; + + // VRAI CODE: envoie au back ... + + this.dialogRef.close(this.adminCopy); + } + } + + + checkField() + { + if(this.adminCopy.login.length === 0) { + this.errorMessage = "Veuillez remplir le champ 'login'" ; + this.hasError = true; + } + else if(this.adminCopy.mail.length === 0) { + this.errorMessage = "Veuillez remplir le champ 'email'" ; + this.hasError = true; + } + else if(!this.isValidEmail(this.adminCopy.mail)) { + this.errorMessage = "Email invalide" ; + this.hasError = true; + } + else if(this.changePassword) { + if (this.newPassword.length === 0) { + this.errorMessage = "Veuillez remplir le champ 'mot de passe'" ; + this.hasError = true; + } else if (this.newPassword !== this.confirmNewPassword) { + this.errorMessage = "Le mot de passe est différent de sa confirmation" ; + this.hasError = true; + } + } + else { + this.errorMessage = "" ; + this.hasError = false; + } + } + + + isValidEmail(email) + { + let re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(email); + } + + + onEventInputInterests(myInterets: string[]) + { + this.adminCopy.interests = myInterets; + } +} diff --git a/src/app/admin/navbar-admin/navbar-admin.component.ts b/src/app/admin/navbar-admin/navbar-admin.component.ts index 20ca54c..7013cab 100644 --- a/src/app/admin/navbar-admin/navbar-admin.component.ts +++ b/src/app/admin/navbar-admin/navbar-admin.component.ts @@ -1,5 +1,6 @@ -import { Component, OnInit } from '@angular/core'; -import {ThemeService} from "../../utils/services/theme/theme.service"; +import { Component } from '@angular/core'; + + @Component({ selector: 'app-navbar-admin', @@ -8,11 +9,9 @@ import {ThemeService} from "../../utils/services/theme/theme.service"; }) export class NavbarAdminComponent { - urlImage: string = "" ; + urlImage: string = "https://www.reference-gaming.com/assets/media/product/41195/figurine-pop-duck-tales-n-309-loulou.jpg?format=product-cover-large&k=1519639530" ; - constructor( public themeService: ThemeService ) { } + constructor() { } - onDeconnexion(): void { - - } + onDeconnexion(): void {} } diff --git a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.html b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.html index 725e8d4..0e5470a 100644 --- a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.html +++ b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.html @@ -1 +1,43 @@ -

page-profil-advertiser works!

+
+
+ + + + + +
+ + +
+ +
+ + +
+
Login:
+
{{advertiser.login}}
+
+ + +
+
Mail:
+
{{advertiser.mail}}
+
+ + +
+
Date de création:
+
{{advertiser.createdAt | date:'dd/LL/YYYY'}}
+
+ + +
+ +
+ +
+ + +
+
diff --git a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.scss b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.scss index e69de29..966c9a2 100644 --- a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.scss +++ b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.scss @@ -0,0 +1,61 @@ +.myContainer { + max-width: 100vw; + height: 100vh; + overflow-x: hidden; +} + + +.boite { + margin-left: auto; + margin-right: auto; + width: 25%; + margin-top: 10vh; + border: solid 3px; + border-radius: 10px; + padding: 20px 40px 20px 40px; + background-color: #ffffff; + text-align: center; + box-shadow: 10px 5px 5px black; +} +.lightTheme .boite { + border-color: black; +} +.darkTheme .boite { + border-color: white; +} + + +img { + margin: 0px 0px 10px 0px; + width: 5vw; + height: 5vw; + border: solid 2px black; + border-radius: 50%; + font-size: xxx-large; +} + + +.myRow { + margin: 15px 0px 15px 0px; +} +.myLabel { + text-align: right; + padding: 0px 5px 0px 0px; + margin: 0px; + font-weight: bold; +} +.myValue { + text-align: left; + padding: 0px 0px 0px 5px; + margin: 0px; +} + + +.btnContainer { + text-align: center; + margin-top: 40px; +} +.myBtn { + border: solid 1px black; + background-color: white; +} diff --git a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts index 60db8d3..660d7a7 100644 --- a/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts +++ b/src/app/advertiser/myProfil/page-profil-advertiser/page-profil-advertiser.component.ts @@ -1,15 +1,56 @@ import { Component, OnInit } from '@angular/core'; +import {User} from "../../../utils/interfaces/user"; +import {ThemeService} from "../../../utils/services/theme/theme.service"; +import {FictitiousDatasService} from "../../../utils/services/fictitiousDatas/fictitious-datas.service"; +import {MatDialog} from "@angular/material/dialog"; +import {MatSnackBar} from "@angular/material/snack-bar"; +import {PopupUpdateAdvertiserComponent} from "../popup-update-advertiser/popup-update-advertiser.component"; + + @Component({ - selector: 'app-page-profil-advertiser', - templateUrl: './page-profil-advertiser.component.html', - styleUrls: ['./page-profil-advertiser.component.scss'] + selector: 'app-page-profil-advertiser', + templateUrl: './page-profil-advertiser.component.html', + styleUrls: ['./page-profil-advertiser.component.scss'] }) -export class PageProfilAdvertiserComponent implements OnInit { +export class PageProfilAdvertiserComponent implements OnInit +{ + advertiser: User; - constructor() { } - ngOnInit(): void { - } + constructor( public themeService: ThemeService, + private fictitiousDatasService: FictitiousDatasService, + public dialog: MatDialog, + private snackBar: MatSnackBar ) { } + + + ngOnInit(): void + { + this.advertiser = this.fictitiousDatasService.getAdvertiser(); + } + + + onModifier() + { + const config = { + width: '25%', + data: { advertiser: this.advertiser } + }; + this.dialog + .open(PopupUpdateAdvertiserComponent, config) + .afterClosed() + .subscribe(retour => { + + if((retour === null) || (retour === undefined)) + { + const config = { duration: 1000, panelClass: "custom-class" }; + this.snackBar.open( "Opération annulé", "", config); + } + else + { + this.advertiser = retour; + } + }); + } } diff --git a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.html b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.html index 3c79c22..856ba9c 100644 --- a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.html +++ b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.html @@ -1 +1,65 @@ -

popup-update-advertiser works!

+
+
+ + +
+
+ +
+ + +

+ + + + Pseudo + +
+ + + + Email + +
+ + +
+ + +
+ Modifier mot de passe: + +
+ + +
+ + + Nouveau mot de passe + + +
+ + + Confirmation nouveau mot de passe + + +
+

+ + +
+ + +
+ {{errorMessage}} +
+ + +
+ + +
+ +
+
diff --git a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.scss b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.scss index e69de29..8d72179 100644 --- a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.scss +++ b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.scss @@ -0,0 +1,8 @@ +img { + margin: 0px 0px 10px 0px; + width: 5vw; + height: 5vw; + border: solid 2px black; + border-radius: 50%; + font-size: xxx-large; +} diff --git a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts index 375a3f5..4c9a0c0 100644 --- a/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts +++ b/src/app/advertiser/myProfil/popup-update-advertiser/popup-update-advertiser.component.ts @@ -1,15 +1,109 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, Inject, OnInit} from '@angular/core'; +import {User} from "../../../utils/interfaces/user"; +import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; + + @Component({ - selector: 'app-popup-update-advertiser', - templateUrl: './popup-update-advertiser.component.html', - styleUrls: ['./popup-update-advertiser.component.scss'] + selector: 'app-popup-update-advertiser', + templateUrl: './popup-update-advertiser.component.html', + styleUrls: ['./popup-update-advertiser.component.scss'] }) -export class PopupUpdateAdvertiserComponent implements OnInit { +export class PopupUpdateAdvertiserComponent implements OnInit +{ + advertiserCopy: User; + newPassword: string = ""; + confirmNewPassword: string = "" ; + changePassword: boolean = false ; + hasError: boolean = false; + errorMessage: string = "" ; - constructor() { } - ngOnInit(): void { - } + constructor( public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data) { } + + + ngOnInit(): void + { + const advertiser0 = this.data.advertiser; + this.advertiserCopy = { + _id: advertiser0._id, + login: advertiser0.login, + hashPass: advertiser0.hashPass, + mail: advertiser0.mail, + role: { + name: advertiser0.role.name, + permission: advertiser0.role.permission, + }, + profilePictureUrl: advertiser0.profilePictureUrl, + dateOfBirth: advertiser0.dateOfBirth, + gender: advertiser0.gender, + interests: [], + isActive: advertiser0.isActive, + createdAt: advertiser0.createdAt, + updatedAt: advertiser0.updatedAt, + }; + for(let interest of advertiser0.interests) this.advertiserCopy.interests.push(interest); + } + + + onValider() + { + this.checkField(); + if(!this.hasError) + { + const data = { + user: this.advertiserCopy, + newPassword: this.newPassword + }; + + // VRAI CODE: envoie au back ... + + this.dialogRef.close(this.advertiserCopy); + } + } + + + checkField() + { + if(this.advertiserCopy.login.length === 0) { + this.errorMessage = "Veuillez remplir le champ 'login'" ; + this.hasError = true; + } + else if(this.advertiserCopy.mail.length === 0) { + this.errorMessage = "Veuillez remplir le champ 'email'" ; + this.hasError = true; + } + else if(!this.isValidEmail(this.advertiserCopy.mail)) { + this.errorMessage = "Email invalide" ; + this.hasError = true; + } + else if(this.changePassword) { + if (this.newPassword.length === 0) { + this.errorMessage = "Veuillez remplir le champ 'mot de passe'" ; + this.hasError = true; + } else if (this.newPassword !== this.confirmNewPassword) { + this.errorMessage = "Le mot de passe est différent de sa confirmation" ; + this.hasError = true; + } + } + else { + this.errorMessage = "" ; + this.hasError = false; + } + } + + + isValidEmail(email) + { + let re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(email); + } + + + onEventInputInterests(myInterets: string[]) + { + this.advertiserCopy.interests = myInterets; + } } diff --git a/src/app/advertiser/navbar-advertiser/navbar-advertiser.component.html b/src/app/advertiser/navbar-advertiser/navbar-advertiser.component.html index 03965d4..b388a0f 100644 --- a/src/app/advertiser/navbar-advertiser/navbar-advertiser.component.html +++ b/src/app/advertiser/navbar-advertiser/navbar-advertiser.component.html @@ -1,13 +1,23 @@