Skip to content

Commit fdd38c2

Browse files
Merge pull request symfony#1 from BekhechiWahib/email-template
Tache email template
2 parents 3ff2958 + ed176c8 commit fdd38c2

File tree

12 files changed

+832
-149
lines changed

12 files changed

+832
-149
lines changed

Gestion_PFE_Backend/app/Http/Controllers/EmailController.php

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@
33
namespace App\Http\Controllers;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Support\Facades\DB;
67
use App\Models\Email;
78
class EmailController extends Controller
89
{
910

1011

1112

13+
14+
public function getEmailTemplate() {
15+
$emailTemplates = DB::table('email_pfe_template')->get();
16+
return response()->json($emailTemplates);
17+
}
18+
19+
1220
public function ajouterEmail(Request $request)
1321
{
1422
$validatedData = $request->validate([
@@ -32,11 +40,27 @@ public function ajouterEmail(Request $request)
3240

3341

3442

43+
44+
public function modifierEmail(Request $request)
45+
{
46+
$validatedData = $request->validate([
47+
'id' => 'required|integer|exists:email_pfe_template,id',
48+
'contenue' => 'required|string|max:255',
49+
]);
50+
51+
$updatedTemplate = Email::where('id', $validatedData['id'])
52+
->update(['contenue' => $validatedData['contenue']]);
3553

36-
public function getEmailTemplate() {
37-
$emailTemplates = Email::select('type_email', 'contenue')->get();
38-
return response()->json($emailTemplates);
54+
if ($updatedTemplate) {
55+
return response()->json(['message' => 'Champ mis à jour avec succès'], 200);
56+
}
57+
58+
return response()->json(['error' => 'Impossible de mettre à jour le contenue de l\'email'],500);
3959
}
60+
61+
62+
63+
4064

4165

4266
}

Gestion_PFE_Backend/app/Models/Email.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@ class Email extends Model
1414

1515
'type_email',
1616
'contenue',
17-
'utilisateur_pfe_id',
1817
];
1918

20-
public function utilisateurPfe()
21-
{
22-
return $this->belongsTo(User::class, 'utilisateur_pfe_id');
23-
}
2419

2520
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
public function up()
10+
{
11+
Schema::table('email_pfe_template', function (Blueprint $table) {
12+
$table->String('nom_email');
13+
$table->String('description_email');
14+
15+
});
16+
}
17+
};

Gestion_PFE_Backend/routes/api.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@
2222
Route::get('/affiche-utilisateurs', [UserController::class, 'afficherUtilisateur']);
2323
Route::get('/affiche-etudiants', [EtudiantController::class, 'afficherEtudiant']);
2424
Route::get('/email-template', [EmailController::class, 'getEmailTemplate']);
25-
Route::get('/theme_detail', [ThemePfeController::class, 'afficherThemePfe']);
25+
Route::get('/theme_detail', [ThemePfeController::class, 'afficherThemePfe']);
26+
Route::put('/modif-email', [EmailController::class, 'modifierEmail']);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from "react";
2+
3+
const MyCardTemplate = ({ titre, description ,onClick,isSelected}) =>{
4+
5+
return (
6+
<div id="my-card-container" className={isSelected ? "active-template" : ""} onClick={onClick}>
7+
<div className="card-content">
8+
<div className="titre-container">
9+
<h1>{titre}</h1>
10+
</div>
11+
<div className="description-container">
12+
<p>{description}</p>
13+
</div>
14+
</div>
15+
</div>
16+
);
17+
18+
}
19+
20+
export default MyCardTemplate;

Gestion_PFE_Frontend_React/src/data/email_template_data.jsx

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,23 @@ import EmailTemplate from "../models/Email_template";
44
const UseFetchEmailTemplate = () => {
55
const [dataEmail, setDataEmail] = useState([]);
66
const [loading, setLoading] = useState(true);
7-
8-
97

10-
11-
128
useEffect(() => {
139
// Récupération des données
1410
fetch('http://localhost:8000/api/email-template')
1511
.then(response => response.json())
1612
.then(data => {
17-
console.log(data);
18-
const emailData = data.map(item => ({
19-
email: new EmailTemplate(item.type_email,item.contenue)
20-
}));
21-
setDataEmail(emailData);
22-
});
23-
24-
25-
setLoading(false);
26-
13+
console.log(data); // Vérifie bien les données ici
14+
setDataEmail(data); // Mets à jour les données
15+
setLoading(false); // Mets à jour loading une fois que les données sont récupérées
16+
})
17+
.catch((error) => {
18+
console.error('Erreur lors de la récupération des données :', error);
19+
setLoading(false); // Même en cas d'erreur, mettez à jour loading
20+
});
2721
}, []);
2822

29-
30-
31-
32-
33-
34-
return {
35-
dataEmail,
36-
loading,
37-
// Expose handleSearchChange for the search input
38-
};
23+
return { dataEmail, loading };
3924
};
4025

4126
export default UseFetchEmailTemplate;

Gestion_PFE_Frontend_React/src/index.css

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ html, body {
1717
}
1818

1919
#root{
20-
font-family: Arial, Helvetica, sans-serif;
20+
/* font-family: Arial, Helvetica, sans-serif;*/
21+
font-family:Verdana, Geneva, Tahoma, sans-serif;
2122
font-size: 13px;
2223
}
2324

@@ -90,6 +91,7 @@ form {
9091
border: 1px solid #dcdcdc;
9192
border-radius: 5px;
9293
font-size: 14px;
94+
font-family:Verdana, Geneva, Tahoma, sans-serif;
9395
}
9496

9597
input:hover{
@@ -110,6 +112,7 @@ input:hover{
110112

111113

112114
textarea {
115+
font-family:Verdana, Geneva, Tahoma, sans-serif;
113116
width: 100%;
114117
/* height: 250px; */
115118
max-height: 300px;
@@ -197,6 +200,96 @@ textarea:hover {
197200

198201

199202

203+
/*? style de MyCardTemplate */
204+
/* Conteneur et Styles principal de la carte */
205+
#my-card-container {
206+
position: relative;
207+
display: flex;
208+
flex-direction: column;
209+
justify-content: space-between;
210+
align-items: flex-start;
211+
padding: 20px;
212+
background: #e9efff;
213+
border-radius: 15px;
214+
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.06);
215+
width: 300px;
216+
min-height: 150px;
217+
transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.5s ease, color 0.5s ease; /* Transition sur fond et texte */
218+
overflow: hidden;
219+
cursor: pointer;
220+
}
221+
222+
/* Effet au survol de la carte */
223+
#my-card-container:hover {
224+
transform: translateY(-10px); /* Décalage de la carte */
225+
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.08); /* Ombre plus marquée au survol */
226+
}
227+
228+
/* Calque semi-transparent au survol de la carte */
229+
#my-card-container::after {
230+
content: '';
231+
position: absolute;
232+
top: 0;
233+
left: 0;
234+
width: 100%;
235+
height: 100%;
236+
background: rgba(21, 175, 144, 0); /* Calque transparent initial */
237+
transition: background 0.3s ease; /* Transition fluide pour l'effet de calque */
238+
z-index: 0;
239+
}
240+
241+
#my-card-container:hover::after {
242+
background: rgba(21, 175, 144, 0.374); /* Calque vert léger au survol */
243+
}
244+
245+
/* Styles lorsque la carte est active */
246+
#my-card-container.active-template {
247+
/* background: linear-gradient(65deg, #2c3e50, #3b5a79); best */
248+
background: linear-gradient(65deg, #15af90, #2c3e50);
249+
/*background: linear-gradient(65deg, #2c3e50, #1abc9c);*/
250+
/* background: linear-gradient(65deg, #00604d, #15af90); */
251+
color: #fcfcfc; /* Texte en couleur claire lorsque la carte est active */
252+
}
253+
254+
/* Transition sur la couleur du texte lors de l'activation de la carte */
255+
#my-card-container.active-template .titre-container h1,
256+
#my-card-container.active-template .description-container p {
257+
color: #fcfcfc; /* Couleur du texte claire */
258+
transition: color 0.7s ease; /* Transition lente pour la couleur du texte */
259+
}
260+
261+
/* Conteneur du contenu de la carte */
262+
.card-content {
263+
position: relative;
264+
z-index: 1; /* Assurer que le contenu soit au-dessus du calque */
265+
width: 100%;
266+
height: 100%;
267+
}
268+
269+
/* Styles du titre de la carte */
270+
.titre-container h1 {
271+
font-size: 1.5rem;
272+
font-weight: bold;
273+
color: #333333; /* Couleur par défaut du titre */
274+
margin: 0;
275+
padding: 0;
276+
}
277+
278+
/* Styles de la description de la carte */
279+
.description-container p {
280+
font-size: 1rem;
281+
color: #666666; /* Couleur par défaut de la description */
282+
margin-top: 10px;
283+
line-height: 1.5;
284+
}
285+
286+
287+
288+
289+
290+
291+
292+
200293

201294

202295

Gestion_PFE_Frontend_React/src/models/email_template.jsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@ class EmailTemplate {
33
/* dans chaque model on doit mettre les noms des d'attribut
44
comme les nom des attribut de la BDD pour eviter des problemes */
55

6-
constructor(type_email,contenue) {
6+
constructor(id,type_email,contenue) {
7+
this.id = id;
78
this.type_email = type_email;
89
this.contenue = contenue;
910
}
11+
getId() {
12+
return this.id;
13+
}
14+
1015

11-
getMoyenneM1() {
16+
17+
18+
getTypeEmail() {
1219
return this.type_email;
1320
}
1421

Gestion_PFE_Frontend_React/src/views/dashboard admin/pages/dashboard_admin_main.jsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ function DashboardAdminMain() {
5555
{ name: "Login", path: "/login", component: <Login/> },
5656
{ name: "Ajouter Utilisateurs", path: "/ajouter-utilisateurs", component: <AddUserForm/> },
5757
{ name: "Responsable", path: "/gestion-pfes-validation", component: <GestionValidationPfe/> },
58+
59+
60+
{ name: "Login", path: "/login", component: <Login/> },
61+
{ name: "Ajouter Utilisateurs", path: "/ajouter-utilisateurs", component: <AddUserForm/> },
62+
{ name: "Responsable", path: "/gestion-pfes-validation", component: <GestionValidationPfe/> },
63+
64+
5865

5966
];
6067

@@ -78,11 +85,13 @@ function DashboardAdminMain() {
7885

7986
</div>
8087

81-
<PageList
88+
<div className="side-bar-item-container">
89+
<PageList
8290
pages={pages}
8391
activePage={activePage}
8492
setActivePage={setActivePage}
8593
/>
94+
</div>
8695

8796

8897
</nav>

0 commit comments

Comments
 (0)