#88 Modifications simples: mauvaises balises HTML, fautes d'orthographes, DashBoard attributs à traduire en français.

This commit is contained in:
josephine.vetu
2026-03-24 14:59:24 +01:00
parent 5fcd68261a
commit e804e13df6
11 changed files with 72 additions and 130 deletions

View File

@@ -41,40 +41,40 @@ public class DashboardController : Controller
/// <returns>La vue Index du tableau de bord.</returns> /// <returns>La vue Index du tableau de bord.</returns>
public IActionResult Index() public IActionResult Index()
{ {
var mostChronicledArtist = _titres var artisteLePlusChronique = _titres
.GroupBy(t => t.Artiste) .GroupBy(t => t.Artiste)
.OrderByDescending(g => g.Count()) .OrderByDescending(g => g.Count())
.FirstOrDefault(); .FirstOrDefault();
var topArtistAlbums = _titres var albumLePlusChronique = _titres
.GroupBy(t => t.Artiste) .GroupBy(t => t.Artiste)
.OrderByDescending(g => g.Select(t => t.Album).Distinct().Count()) .OrderByDescending(g => g.Select(t => t.Album).Distinct().Count())
.FirstOrDefault(); .FirstOrDefault();
var mostPlayedTrack = _titres var musiqueLaPlusJouee = _titres
.OrderByDescending(t => t.NbLectures) .OrderByDescending(t => t.NbLectures)
.FirstOrDefault(); .FirstOrDefault();
var model = new DashboardViewModel var model = new DashboardViewModel
{ {
ArtistCount = _artistes.Count, NombreArtistes = _artistes.Count,
MostChronicledArtistName = mostChronicledArtist?.Key.Nom, ArtisteLePlusChronique = artisteLePlusChronique?.Key.Nom,
TopArtistAlbumsName = topArtistAlbums?.Key.Nom, AlbumLePlusChronique = albumLePlusChronique?.Key.Nom,
BiographyCount = _artistes.Count(a => !string.IsNullOrEmpty(a.Biographie)), NombreBiographies = _artistes.Count(a => !string.IsNullOrEmpty(a.Biographie)),
MostPlayedTrackId = mostPlayedTrack?.IdTitre ?? 0, IdMusiqueLaPlusJouee = musiqueLaPlusJouee?.IdTitre ?? 0,
MostPlayedTrack = mostPlayedTrack?.Libelle, MusiqueLaPlusJouee = musiqueLaPlusJouee?.Libelle,
TrackCount = _titres.Count, NombreTitres = _titres.Count,
GenreCount = _styles.Count, NombreGenres = _styles.Count,
TotalPlays = _titres.Sum(t => t.NbLectures), NombreLectures = _titres.Sum(t => t.NbLectures),
TotalLikes = _titres.Sum(t => t.NbLikes) NombreLikes = _titres.Sum(t => t.NbLikes)
}; };
return View(model); return View(model);

View File

@@ -8,49 +8,49 @@ public class DashboardViewModel
/// <summary> /// <summary>
/// Définit le nombre total d'artistes chroniqués dans le webzine. /// Définit le nombre total d'artistes chroniqués dans le webzine.
/// </summary> /// </summary>
public int ArtistCount { get; set; } public int NombreArtistes { get; set; }
/// <summary> /// <summary>
/// Définit le nom de l'artiste le plus chroniqué dans le webzine. /// Définit le nom de l'artiste le plus chroniqué dans le webzine.
/// </summary> /// </summary>
public string MostChronicledArtistName { get; set; } public string ArtisteLePlusChronique { get; set; }
/// <summary> /// <summary>
/// Définit le nom de l'album le plus chroniqué dans le webzine. /// Définit le nom de l'album le plus chroniqué dans le webzine.
/// </summary> /// </summary>
public string TopArtistAlbumsName { get; set; } public string AlbumLePlusChronique { get; set; }
/// <summary> /// <summary>
/// Définit le nombre total de biographies d'artistes dans le webzine. /// Définit le nombre total de biographies d'artistes dans le webzine.
/// </summary> /// </summary>
public int BiographyCount { get; set; } public int NombreBiographies { get; set; }
/// <summary> /// <summary>
/// Définit l'identifiant de la biographie d'artiste la plus lue dans le webzine. /// Définit l'identifiant de la biographie d'artiste la plus lue dans le webzine.
/// </summary> /// </summary>
public int MostPlayedTrackId { get; set; } public int IdMusiqueLaPlusJouee { get; set; }
/// <summary> /// <summary>
/// Définit le nom de la biographie d'artiste la plus lue dans le webzine. /// Définit le nom de la biographie d'artiste la plus lue dans le webzine.
/// </summary> /// </summary>
public string MostPlayedTrack { get; set; } public string MusiqueLaPlusJouee { get; set; }
/// <summary> /// <summary>
/// Définit le nombre total de titres chroniqués dans le webzine. /// Définit le nombre total de titres chroniqués dans le webzine.
/// </summary> /// </summary>
public int TrackCount { get; set; } public int NombreTitres { get; set; }
/// <summary> /// <summary>
/// Définit le nombre total de genres musicaux chroniqués dans le webzine. /// Définit le nombre total de genres musicaux chroniqués dans le webzine.
/// </summary> /// </summary>
public int GenreCount { get; set; } public int NombreGenres { get; set; }
/// <summary> /// <summary>
/// Définit le nombre total de chroniques d'albums dans le webzine. /// Définit le nombre total de chroniques d'albums dans le webzine.
/// </summary> /// </summary>
public int TotalPlays { get; set; } public int NombreLectures { get; set; }
/// <summary> /// <summary>
/// Définit le nombre total de likes sur les chroniques d'albums dans le webzine. /// Définit le nombre total de likes sur les chroniques d'albums dans le webzine.
/// </summary> /// </summary>
public int TotalLikes { get; set; } public int NombreLikes { get; set; }
} }

View File

@@ -30,12 +30,12 @@
<td class="text-center p-2"> <td class="text-center p-2">
<a asp-action="Edit" asp-route-id="@artiste.IdArtiste" <a asp-action="Edit" asp-route-id="@artiste.IdArtiste"
class="text-primary"> >
<i class="fa fa-edit"></i> <i class="fa fa-edit"></i>
</a> </a>
<a asp-action="Delete" asp-route-id="@artiste.IdArtiste" <a asp-action="Delete" asp-route-id="@artiste.IdArtiste"
class="text-primary"> >
<i class="fa fa-trash"></i> <i class="fa fa-trash"></i>
</a> </a>

View File

@@ -16,11 +16,11 @@
<div class="mb-4"> <div class="mb-4">
<h4>@Model.Contenu</h4> <h4>@Model.Contenu</h4>
<div class="text-muted"> // TODO y a des balises pour les citations, <blockquote></blockquote> <blockquote>
— <strong>@Model.Auteur</strong> — <strong>@Model.Auteur</strong>
le @Model.DateCreation.ToString("dd/MM/yyyy HH:mm:ss") // TODO à virer, c'est pas très lisible, trouver un format de date plus sympa, ou même afficher "il y a X minutes/heures/jours" comme sur les réseaux sociaux le @Model.DateCreation.ToString("dd/MM/yyyy HH:mm:ss")
sur <em>@Model.TitreLibelle</em> sur <em>@Model.TitreLibelle</em>
</div> </blockquote>
</div> </div>
<form asp-action="Delete" method="post"> <form asp-action="Delete" method="post">

View File

@@ -2,7 +2,7 @@
<h1 class="mb-4">Tableau de bord</h1> <h1 class="mb-4">Tableau de bord</h1>
<hr /> <hr/>
<div class="container"> <div class="container">
@@ -11,17 +11,16 @@
<!-- ARTISTS --> <!-- ARTISTS -->
<div class="col-md-4"> <div class="col-md-4">
<a asp-area="Administration" <a asp-area="Administration"
asp-controller="Artiste" asp-controller="Artiste">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-users fa-3x text-primary mb-3"></i> <i class="fa fa-users fa-3x text-primary mb-3"></i>
<h3 class="text-primary"> <h3>
@Model.ArtistCount @Model.NombreArtistes
</h3> </h3>
<p class="text-primary"> <p>
artistes artistes
</p> </p>
</div> </div>
@@ -29,24 +28,20 @@
</a> </a>
</div> </div>
<!-- Test remote --> <!-- L'ARTIST LE PLUS CHRONIQUE -->
<!-- L'ARTIST LE PLUS CHRONICLED --> // TODO faute de frappe, à virer
<div class="col-md-4"> <div class="col-md-4">
<a asp-area="" <a asp-area=""
asp-controller="Artiste" asp-controller="Artiste"
asp-route-nom="@Model.MostChronicledArtistName" // TODO enlever texte décorationnel, pas maintenable asp-route-nom="@Model.ArtisteLePlusChronique">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-user fa-3x text-primary mb-3"></i> <i class="fa fa-user fa-3x text-primary mb-3"></i>
<h3 class="text-primary"> // TODO c'est déjà par défaut en couleur primaire, pas besoin de le redéfinir <h3>
@Model.MostChronicledArtistName @Model.ArtisteLePlusChronique
</h3> </h3>
<p class="text-primary"> <p>artiste le plus chroniqué</p>
artiste le plus chroniqué
</p>
</div> </div>
</a> </a>
@@ -56,17 +51,16 @@
<div class="col-md-4"> <div class="col-md-4">
<a asp-area="" <a asp-area=""
asp-controller="Artiste" asp-controller="Artiste"
asp-route-nom="@Model.TopArtistAlbumsName" asp-route-nom="@Model.AlbumLePlusChronique">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-trophy fa-3x text-primary mb-3"></i> <i class="fa fa-trophy fa-3x text-primary mb-3"></i>
<h3 class="text-primary"> <h3>
@Model.TopArtistAlbumsName @Model.AlbumLePlusChronique
</h3> </h3>
<p class="text-primary"> <p>
artiste avec le plus d'albums distincts artiste avec le plus d'albums distincts
</p> </p>
</div> </div>
@@ -77,17 +71,16 @@
<!-- BIOGRAPHIES --> <!-- BIOGRAPHIES -->
<div class="col-md-4"> <div class="col-md-4">
<a asp-area="Administration" <a asp-area="Administration"
asp-controller="Titre" asp-controller="Titre">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-book fa-3x text-primary mb-3"></i> <i class="fa fa-book fa-3x text-primary mb-3"></i>
<h3 class="text-primary"> <h3>
@Model.BiographyCount @Model.NombreBiographies
</h3> </h3>
<p class="text-primary"> <p>
biographies d'artistes biographies d'artistes
</p> </p>
</div> </div>
@@ -100,17 +93,16 @@
<a asp-area="" <a asp-area=""
asp-controller="Titre" asp-controller="Titre"
asp-action="Details" asp-action="Details"
asp-route-id="@Model.MostPlayedTrackId" asp-route-id="@Model.IdMusiqueLaPlusJouee">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-compact-disc fa-3x text-primary mb-3"></i> <i class="fa fa-compact-disc fa-3x text-primary mb-3"></i>
<h4 class="text-primary"> <h4>
@Model.MostPlayedTrack @Model.MusiqueLaPlusJouee
</h4> </h4>
<p class="text-primary"> <p>
titre le plus lu titre le plus lu
</p> </p>
</div> </div>
@@ -121,17 +113,16 @@
<!-- TITRE NOMBRE --> <!-- TITRE NOMBRE -->
<div class="col-md-4"> <div class="col-md-4">
<a asp-area="Administration" <a asp-area="Administration"
asp-controller="Titre" asp-controller="Titre">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-music fa-3x text-primary mb-3"></i> <i class="fa fa-music fa-3x text-primary mb-3"></i>
<h3 class="text-primary"> <h3>
@Model.TrackCount @Model.NombreTitres
</h3> </h3>
<p class="text-primary"> <p>
titres titres
</p> </p>
</div> </div>
@@ -142,17 +133,16 @@
<!-- GENRES --> <!-- GENRES -->
<div class="col-md-4"> <div class="col-md-4">
<a asp-area="Administration" <a asp-area="Administration"
asp-controller="Styles" asp-controller="Styles">
class="text-decoration-none">
<div class="card shadow-sm p-4 bg-light h-100 dashboard-card"> <div class="card shadow-sm p-4 bg-light h-100 dashboard-card">
<i class="fa fa-tags fa-3x text-primary mb-3"></i> <i class="fa fa-tags fa-3x text-primary mb-3"></i>
<h3 class="text-primary"> <h3>
@Model.GenreCount @Model.NombreGenres
</h3> </h3>
<p class="text-primary"> <p>
styles de musique styles de musique
</p> </p>
</div> </div>
@@ -166,7 +156,7 @@
<i class="fa fa-eye fa-3x text-dark mb-3"></i> <i class="fa fa-eye fa-3x text-dark mb-3"></i>
<h3> <h3>
@Model.TotalPlays @Model.NombreLectures
</h3> </h3>
<p> <p>
@@ -181,7 +171,7 @@
<i class="fa fa-thumbs-up fa-3x text-dark mb-3"></i> <i class="fa fa-thumbs-up fa-3x text-dark mb-3"></i>
<h3> <h3>
@Model.TotalLikes @Model.NombreLikes
</h3> </h3>
<p> <p>

View File

@@ -14,13 +14,9 @@
</p> </p>
<div class="mb-4"> <div class="mb-4">
@* On affiche le Libellé en gros *@ // TODO c'est quoi ces commentaires Baptiste @* On affiche le Libellé en gros *@
<h4>@Model.Libelle</h4> <h4>@Model.Libelle</h4>
@* On affiche l'ID discrètement en dessous *@
<div class="text-muted">
Identifiant technique : @Model.IdStyle
</div>
</div> </div>
<form asp-action="Delete" method="post"> <form asp-action="Delete" method="post">

View File

@@ -36,7 +36,7 @@
<a asp-action="Edit" asp-route-id="@style.IdStyle" class="text-primary me-2" title="Éditer"> <a asp-action="Edit" asp-route-id="@style.IdStyle" class="text-primary me-2" title="Éditer">
<i class="fas fa-edit"></i> <i class="fas fa-edit"></i>
</a> </a>
<a asp-action="Delete" asp-route-id="@style.IdStyle" class="text-primary" title="Supprimer"> <a asp-action="Delete" asp-route-id="@style.IdStyle" title="Supprimer">
<i class="fas fa-trash"></i> <i class="fas fa-trash"></i>
</a> </a>
</td> </td>

View File

@@ -5,36 +5,6 @@
<h1>Derniers titres chroniqués</h1> <h1>Derniers titres chroniqués</h1>
@* TEMPLATE TODO: virer *@
@* <div class="container">
<div class="container bg-light row p-3 mt-3">
<div class="col-auto">
<img class="img-thumbnail"
src="" />
</div>
<div class="col">
<a class="text-primary text-decoration-none fw-light h4">Justice - D.A.N.C.E</a>
<p class="mt-2 mb-3 text-muted ">
Insérer texte
</p>
<div class="d-flex flex-wrap align-items-center gap-3">
<a class="btn btn-primary btn-sm">Lire la suite</a>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-calendar"></i>
Date :
17/12/2022 11:08:08
</div>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-tags"></i>
<a class="text-decoration-none m-1">Insérer style</a>
</div>
</div>
</div>
</div>
</div> *@
<div class="container"> <div class="container">
@foreach (var titre in Model.DerniersTitres) @foreach (var titre in Model.DerniersTitres)
{ {
@@ -76,7 +46,7 @@
<div class="d-flex align-items-center text-muted small"> <div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-tags"></i> <i class="fa-solid fa-tags"></i>
@* Style *@ @* Style *@
<a asp-controller="Titre" asp-action="Style" asp-route-id="Pop" class="text-decoration-none m-1">Pop</a> <a asp-controller="Titre" asp-action="Style" asp-route-id="Pop" class="m-1">Pop</a>
</div> </div>
</div> </div>
</div> </div>
@@ -87,20 +57,6 @@
</div> </div>
</div> </div>
@* TEMPLATE *@
@* <div class="container">
<div class="row">
<div class="card col m-1" style="width: 18rem;">
<img class="card-img-top"
src="" alt="Alternate Text" />
<div class="card-body">
<a class="card-link" href="#">Album</a><br />
par <a class="card-link">Artiste</a>
</div>
</div>
</div>
</div> *@
<div class="container"> <div class="container">
<h1 class="mt-5">Titres les plus populaires</h1> <h1 class="mt-5">Titres les plus populaires</h1>
<div class="row"> <div class="row">

View File

@@ -21,42 +21,42 @@
<h2>Suivez-nous</h2> <h2>Suivez-nous</h2>
<div class="row g-4 text-center"> <div class="row g-4 text-center">
<div class="col-md-4"> <div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none"> <a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle">
<i class="fa-solid fa-link fa-3x text-primary mb-3"></i> <i class="fa-solid fa-link fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Site officiel du DIIAGE</div> <div class="fw-bold text-primary">Site officiel du DIIAGE</div>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none"> <a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle">
<i class="fa-brands fa-facebook fa-3x text-primary mb-3"></i> <i class="fa-brands fa-facebook fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Facebook</div> <div class="fw-bold text-primary">Facebook</div>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none"> <a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle">
<i class="fa-brands fa-instagram fa-3x text-primary mb-3"></i> <i class="fa-brands fa-instagram fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Instagram</div> <div class="fw-bold text-primary">Instagram</div>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none"> <a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle">
<i class="fa-brands fa-linkedin fa-3x text-primary mb-3"></i> <i class="fa-brands fa-linkedin fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">LinkedIn</div> <div class="fw-bold text-primary">LinkedIn</div>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none"> <a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle">
<i class="fa-solid fa-map fa-3x text-primary mb-3"></i> <i class="fa-solid fa-map fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Google Maps</div> <div class="fw-bold text-primary">Google Maps</div>
</a> </a>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none"> <a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle">
<i class="fa-brands fa-twitter fa-3x text-primary mb-3"></i> <i class="fa-brands fa-twitter fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Twitter</div> <div class="fw-bold text-primary">Twitter</div>
</a> </a>

View File

@@ -40,7 +40,7 @@
{ {
var style = Model.Details.Styles[i]; var style = Model.Details.Styles[i];
<a class="text-primary text-decoration-none fw-semibold" <a class="text-primary fw-semibold"
asp-controller="Titre" asp-controller="Titre"
asp-action="Style" asp-action="Style"
asp-route-style="@style.Libelle"> asp-route-style="@style.Libelle">

View File

@@ -11,9 +11,9 @@
<Content Include="..\.dockerignore"> <Content Include="..\.dockerignore">
<Link>.dockerignore</Link> <Link>.dockerignore</Link>
</Content> </Content>
<Content Include="..\Webzine.Documentation\StyleCop\stylecop.json"> <AdditionalFiles Include="..\Webzine.Documentation\StyleCop\stylecop.json">
<Link>stylecop.json</Link> <Link>stylecop.json</Link>
</Content> </AdditionalFiles>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>