Ajout article v3
This commit is contained in:
@@ -7,19 +7,25 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.servlet.LocaleResolver;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
import org.springframework.web.servlet.support.RequestContextUtils;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@Controller
|
||||
public class LanguageController {
|
||||
private final LocaleResolver localeResolver;
|
||||
|
||||
public LanguageController(LocaleResolver localeResolver) {
|
||||
this.localeResolver = localeResolver;
|
||||
}
|
||||
|
||||
@GetMapping("/change-language")
|
||||
public String changeLanguage(HttpServletRequest request, HttpServletResponse response, @RequestParam("lang") String lang, @RequestHeader String referer) {
|
||||
public String changeLanguage(HttpServletRequest request, HttpServletResponse response, @RequestParam("lang") String lang) {
|
||||
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
|
||||
if (localeResolver != null) {
|
||||
localeResolver.setLocale(request, response, new Locale(lang));
|
||||
localeResolver.setLocale(request, response, Locale.forLanguageTag(lang));
|
||||
}
|
||||
return "redirect:" + referer;
|
||||
return "redirect:/";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,22 +31,16 @@ public class ArticleRepositoryImpl implements ArticleRepository {
|
||||
@Override
|
||||
public Article mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
Article article = new Article();
|
||||
article.setId(rs.getInt("no_article"));
|
||||
article.setNom(rs.getString("nom_article"));
|
||||
article.setDesc(rs.getString("description"));
|
||||
article.setDateDebutEnch(rs.getDate("date_debut_encheres"));
|
||||
article.setDateFinEnch(rs.getDate("date_fin_encheres"));
|
||||
article.setPrixInitial(rs.getFloat("prix_initial"));
|
||||
article.setPrixVente(rs.getFloat("prix_vente"));
|
||||
|
||||
UserProfil user = userService.utilisateurById(rs.getInt("no_utilisateur"));
|
||||
if (user != null) {
|
||||
article.setUtilisateur(user);
|
||||
} else {
|
||||
logger.error("erreur de l'utilisateur");
|
||||
}
|
||||
|
||||
article.setNumCategorie(rs.getInt("no_categorie"));
|
||||
article.setId(rs.getInt("a.no_article"));
|
||||
article.setNom(rs.getString("a.nom_article"));
|
||||
article.setDesc(rs.getString("a.description"));
|
||||
article.setDateDebutEnch(rs.getDate("a.date_debut_encheres"));
|
||||
article.setDateFinEnch(rs.getDate("a.date_fin_encheres"));
|
||||
article.setPrixInitial(rs.getFloat("a.prix_initial"));
|
||||
article.setPrixVente(rs.getFloat("a.prix_vente"));
|
||||
article.setNoUtilisateur(rs.getInt("u.no_utilisateur"));
|
||||
article.setPseudoUtilisateur(rs.getString("u.pseudo"));
|
||||
article.setNumCategorie(rs.getInt("a.no_categorie"));
|
||||
return article;
|
||||
}
|
||||
}
|
||||
@@ -59,24 +53,26 @@ public class ArticleRepositoryImpl implements ArticleRepository {
|
||||
|
||||
@Override
|
||||
public List<Article> findAllArticle() {
|
||||
String sql = "SELECT * FROM ARTICLES_VENDUS";
|
||||
String sql = "SELECT * FROM ARTICLES_VENDUS a";
|
||||
List<Article> articles = jdbcTemplate.query(sql, new ArticleRowMapper());
|
||||
return articles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Article> searchArticle(SearchArticleCritere critere) {
|
||||
StringBuilder sql = new StringBuilder("SELECT * FROM ARTICLES_VENDUS WHERE 1 = 1 AND isDelete = 0");
|
||||
StringBuilder sql = new StringBuilder("SELECT a.*, u.* FROM ARTICLES_VENDUS a ");
|
||||
sql.append("JOIN UTILISATEURS u ON a.no_utilisateur = u.no_utilisateur ");
|
||||
sql.append("WHERE 1 = 1 AND a.isDelete = 0");
|
||||
|
||||
List<Object> params = new ArrayList<>();
|
||||
|
||||
if (critere.getNoCategorie() != null) {
|
||||
sql.append(" AND no_categorie = ?");
|
||||
sql.append(" AND a.no_categorie = ?");
|
||||
params.add(critere.getNoCategorie());
|
||||
}
|
||||
if (critere.getTitle() != null && !critere.getTitle().isEmpty()) {
|
||||
sql.append(" AND nom_article LIKE ?");
|
||||
params.add( '%' + critere.getTitle() + "%");
|
||||
sql.append(" AND a.nom_article LIKE ?");
|
||||
params.add('%' + critere.getTitle() + '%');
|
||||
}
|
||||
|
||||
return jdbcTemplate.query(sql.toString(), new ArticleRowMapper(), params.toArray());
|
||||
@@ -89,7 +85,7 @@ public class ArticleRepositoryImpl implements ArticleRepository {
|
||||
|
||||
@Override
|
||||
public List<Article> findArticleByTitle(String title) {
|
||||
String sql = "SELECT * FROM ARTICLES_VENDUS WHERE nom_article LIKE ?";
|
||||
String sql = "SELECT * FROM ARTICLES_VENDUS a WHERE nom_article LIKE ?";
|
||||
List<Article> articles = jdbcTemplate.query(sql, new ArticleRowMapper(), "%" + title + "%");
|
||||
return articles;
|
||||
}
|
||||
|
||||
@@ -18,12 +18,15 @@ public class WebSecurityConfig{
|
||||
http.authorizeHttpRequests((requests) -> requests
|
||||
.requestMatchers("/", "/accueil").permitAll()
|
||||
.requestMatchers("/accueil", "/login", "/inscription/**", "/searchArticle", "/article/show", "/change-language").permitAll()
|
||||
.requestMatchers("/css/**", "/images/**", "/assets/**", "/img/**", "/js/**", "/assets/**").permitAll()
|
||||
.requestMatchers("/css/**", "/images/**", "/assets/**", "/img/**", "/js/**", "/assets/**", "/i18n/**").permitAll()
|
||||
.requestMatchers("/profil/**", "/article/new/**", "/article/update", "/article/delete").authenticated()
|
||||
.requestMatchers("/admin").hasRole("ADMIN")
|
||||
.anyRequest().authenticated())
|
||||
.formLogin((form) -> form.loginPage("/login").defaultSuccessUrl("/", true))
|
||||
.logout((logout) -> logout.clearAuthentication(true).invalidateHttpSession(true)
|
||||
.formLogin((form) -> form
|
||||
.loginPage("/login")
|
||||
.defaultSuccessUrl("/", true))
|
||||
.logout((logout) -> logout
|
||||
.clearAuthentication(true).invalidateHttpSession(true)
|
||||
.deleteCookies("JSESSIONID").logoutSuccessUrl("/login?logout")
|
||||
.logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll());
|
||||
|
||||
|
||||
@@ -1 +1,44 @@
|
||||
accueil.search.title = Search for an article by name...
|
||||
home.search.title = Search for an item by name...
|
||||
home.search.cat = All categories
|
||||
home.search.button = Search
|
||||
|
||||
profil.title = My Profile
|
||||
profil.button = Edit
|
||||
profil.pseudo = Username:
|
||||
profil.surname = First Name:
|
||||
profil.name = Last Name:
|
||||
profil.email = Email:
|
||||
profil.phone = Phone:
|
||||
profil.street = Street:
|
||||
profil.postal = Zip Code:
|
||||
profil.city = City:
|
||||
profil.credit = Credits:
|
||||
|
||||
edit.profil.currentpassword = Current Password:
|
||||
edit.profil.newpassword = New Password:
|
||||
edit.profil.confirmnewpassword = Confirm New Password:
|
||||
edit.profil.title = Edit My Profile
|
||||
edit.profil.button.edit = Save Changes
|
||||
edit.profil.button.del = Delete My Account
|
||||
|
||||
login.title = To Log In:
|
||||
login.id = Username:
|
||||
login.password = Password:
|
||||
login.save = Remember Me
|
||||
login.forgotpassword = Forgot Password
|
||||
login.connection = Login
|
||||
login.makecompte = Create an Account
|
||||
|
||||
register.title = My Profile
|
||||
register.button = Edit
|
||||
register.pseudo = Username:
|
||||
register.surname = First Name:
|
||||
register.name = Last Name:
|
||||
register.email = Email:
|
||||
register.phone = Phone:
|
||||
register.street = Street:
|
||||
register.postal = Zip Code:
|
||||
register.city = City:
|
||||
register.credit = Credits:
|
||||
register.make = create
|
||||
register.cancel = cancel
|
||||
@@ -1,6 +1,6 @@
|
||||
accueil.search.title = Rechercher un article par nom...
|
||||
accueil.search.cat = Toutes les cat\u00e9gories
|
||||
accueil.search.button = Recherche
|
||||
home.search.title = Rechercher un article par nom...
|
||||
home.search.cat = Toutes les cat\u00e9gories
|
||||
home.search.button = Recherche
|
||||
|
||||
profil.title = Mon profil
|
||||
profil.button = Modifier
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" th:replace="~{modele-page :: layout('Accueil - ENI-Enchères',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<html th:replace="~{modele-page :: layout('Accueil - ENI-Enchères',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
@@ -9,21 +9,25 @@
|
||||
<div class="row mb-4">
|
||||
<div class="col-12">
|
||||
<!-- Formulaire de recherche avec sélection de catégorie -->
|
||||
<form th:action="@{/accueil}" method="post" class="mb-3">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form th:action="@{/accueil}" method="post" class="row g-3 align-items-center">
|
||||
<div class="col-md-8">
|
||||
<!-- Barre de recherche -->
|
||||
<div class="mb-3">
|
||||
<input type="text" class="form-control" th:attr="placeholder=#{accueil.search.title}" name="searchTitle">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<select class="form-control" name="searchCategory">
|
||||
<option value="" th:text="#{accueil.search.cat}"></option>
|
||||
<input type="text" class="form-control" th:attr="placeholder=#{home.search.title}" name="searchTitle">
|
||||
<select class="form-control mt-2" name="searchCategory">
|
||||
<option value="" th:text="#{home.search.cat}"></option>
|
||||
<option th:each="category : ${categories}" th:value="${category.id}" th:text="${category.libelle}"></option>
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary"th:text="#{accueil.search.button}"></button>
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="submit" class="btn btn-primary" th:text="#{home.search.button}">Search</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div th:each="article : ${articles}" class="col-md-6 mb-4">
|
||||
<div class="card shadow-sm h-100">
|
||||
@@ -39,7 +43,7 @@
|
||||
<div>
|
||||
<h6>Prix de vente: <span th:text="${article.prixVente}"></span> €</h6>
|
||||
|
||||
<h6>Vendeur: <span th:text="${article.utilisateur.getPseudo()}"></span> </h6>
|
||||
<h6>Vendeur: <span th:text="${article.pseudoUtilisateur}"></span> </h6>
|
||||
</div>
|
||||
</div>
|
||||
</br>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" th:replace="~{modele-page :: layout('Panel administrateur',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<html th:replace="~{modele-page :: layout('Panel administrateur',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" th:replace="~{modele-page :: layout('Article - NOMARTICLE',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<html th:replace="~{modele-page :: layout('Article - NOMARTICLE',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" th:replace="~{modele-page :: layout('Modifier votre profile' , ~{::#link}, ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<html th:replace="~{modele-page :: layout('Modifier votre profile' , ~{::#link}, ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link href="css/bootstrap/bootstrap.min.css" rel="stylesheet">
|
||||
@@ -110,7 +110,7 @@
|
||||
<span th:text="#{profil.credit}"></span> <span th:text="${userProfile.credit}"></span>
|
||||
</div>
|
||||
<input type="hidden" th:field="*{id}" id="userId" th:value="${userProfile.id}">
|
||||
<button type="submit" class="btn btn-primary" th:text="#{edit.profil.button.edit}"></button>
|
||||
<button type="submit" class="btn btn-primary border-right" th:text="#{edit.profil.button.edit}"></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" th:replace="~{modele-page :: layout('Inscription',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<html th:replace="~{modele-page :: layout('Inscription',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
@@ -107,7 +107,7 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="champ-saisie">
|
||||
<label for="password">Mot de passe: </label>
|
||||
<label for="password" th:text="#{re}">Mot de passe: </label>
|
||||
<div>
|
||||
<input type="password" th:field="*{password}" id="password" />
|
||||
</div>
|
||||
@@ -118,7 +118,7 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="champ-saisie">
|
||||
<label for="confirmPassword">Confirmation du mot de passe: </label>
|
||||
<label for="confirmPassword" th:text="#{}">Confirmation du mot de passe: </label>
|
||||
<div>
|
||||
<input type="password" id="confirmPassword" />
|
||||
</div>
|
||||
|
||||
@@ -38,13 +38,15 @@
|
||||
<a class="btn btn-primary" href="/login" role="button" style="background-color: #1B4463;">S'inscrire / Se connecter</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-expanded="false">
|
||||
<div class="dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa-solid fa-earth-americas"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink">
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink" role="menu">
|
||||
<a class="dropdown-item" th:href="@{/change-language(lang='en')}">English</a>
|
||||
<a class="dropdown-item" th:href="@{/change-language(lang='fr')}">Français</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -101,6 +103,7 @@
|
||||
© 2024 Copyright:
|
||||
</div>
|
||||
</footer>
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
|
||||
<script src="/js/bootstrap/bootstrap.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" th:replace="~{modele-page :: layout('Votre profile',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<html th:replace="~{modele-page :: layout('Votre profile',~{::link} , ~{::#container-main})}" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user