Merge branch 'backend-user'
This commit is contained in:
commit
9096865ecb
|
@ -1,4 +1,5 @@
|
|||
config/config.php
|
||||
config/config-backup.php
|
||||
scripts/.loc_hash
|
||||
.idea
|
||||
public/uploads/*
|
||||
|
@ -7,4 +8,4 @@ public/uploads/*
|
|||
vendor
|
||||
composer.json
|
||||
composer.lock
|
||||
/src/Framework/SwiftMailerFactory.php
|
||||
src/Framework/SwiftMailerFactory.php
|
||||
|
|
|
@ -48,6 +48,6 @@ return [
|
|||
},
|
||||
// MAILER
|
||||
'mail.to' => 'admin@gmarche-testmail.com',
|
||||
'mail.from' => '$mail_from',
|
||||
'mail.from' => "$mail_from",
|
||||
Swift_Mailer::class => \DI\factory(\Framework\SwiftMailerFactory::class)
|
||||
];
|
||||
|
|
|
@ -116,12 +116,6 @@ header.header img {
|
|||
border: 0px;
|
||||
}
|
||||
|
||||
.profil_user {
|
||||
height: 400px;
|
||||
width: 900px;
|
||||
background-color: lightgray;
|
||||
text-align: center;
|
||||
}
|
||||
.records_content th, .records_content2 th {
|
||||
background-color: lightgray;
|
||||
color: rgba(0,0,0,0.85);
|
||||
|
@ -131,6 +125,17 @@ header.header img {
|
|||
margin: 5px auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
/* profil.twig */
|
||||
/******************************************************************/
|
||||
.profil_user {
|
||||
background-color: lightgray;
|
||||
text-align: center;
|
||||
margin-top:5px;
|
||||
padding-bottom: 2rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
/******************************************************************/
|
||||
/* signup.twig */
|
||||
/******************************************************************/
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
$(document).ready(function () {
|
||||
var nom_connecte = $("#nom_connecte").text();
|
||||
document.querySelector('#avatar').addEventListener('change', function() {
|
||||
//alert('ok');
|
||||
// alert(this.files[0].name);
|
||||
|
||||
});
|
||||
$('#avatar').change(function(){
|
||||
var fda = new FormData();
|
||||
//var input = $('#avatar').files[0];
|
||||
//var file = $('#avatar').files[0].name;
|
||||
//alert(file);
|
||||
|
||||
let files_avatar = $('#avatar')[0].files[0];
|
||||
fda.append('avatar',files_avatar);
|
||||
fda.append('nom_user',nom_connecte);
|
||||
// requête AJAX pour copier la photo et l'afficher
|
||||
$.ajax({
|
||||
url: '/models/upload_avatar.php',
|
||||
type: 'post',
|
||||
data: fda,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(response){
|
||||
if(response != 0){
|
||||
// Show image preview
|
||||
$('#avatar_preview').html('');
|
||||
$('#avatar_preview').append("<img src='"+response+"' width='140' height='140' style='display: inline-block;'>");
|
||||
} else {
|
||||
alert('L\'image n\'a pu être uploadée');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
|
@ -237,7 +237,7 @@ $(document).ready(function () {
|
|||
$("#hidden_antenne_slug").val(antenne_slug);
|
||||
readRecords(antenne_slug, nom_connecte);
|
||||
var source = 'products';
|
||||
} else {
|
||||
} else if (affichage_slug == 'recherches') {
|
||||
$("#hidden_antenne_slug_r").val(antenne_slug);
|
||||
readRecords2(antenne_slug, nom_connecte);
|
||||
var source = 'recherches';
|
||||
|
@ -305,4 +305,47 @@ $(document).ready(function () {
|
|||
}
|
||||
});
|
||||
});
|
||||
/*function dump(obj) {
|
||||
var out = '';
|
||||
for (var i in obj) {
|
||||
out += i + ": " + obj[i] + "\n";
|
||||
}
|
||||
alert(out);
|
||||
// or, if you wanted to avoid alerts...
|
||||
var pre = document.createElement('pre');
|
||||
pre.innerHTML = out;
|
||||
document.body.appendChild(pre)
|
||||
}*/
|
||||
$('#avatar').change(function(){
|
||||
var fda = new FormData();
|
||||
var nom_connecte = $("#nom_connecte").text();
|
||||
//var file = $('#avatar').files[0].name;
|
||||
//alert(file);
|
||||
var test = document.getElementById('avatar');
|
||||
//dump(test);
|
||||
//var files_avatar = $('#avatar')[0].files[0];
|
||||
fda.append('avatar',$('#avatar')[0].files[0]);
|
||||
fda.append('nom_user',nom_connecte);
|
||||
// requête AJAX pour copier l'avatar et l'afficher
|
||||
$.ajax({
|
||||
url: '/models/upload_avatar.php',
|
||||
type: 'post',
|
||||
data: fda,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(response){
|
||||
if(response != 0){
|
||||
// Show image preview
|
||||
alert('ok');
|
||||
$('#avatar_preview').html('');
|
||||
$('#avatar_preview').append("<img src='"+response+"' width='140' height='140' style='display: inline-block;'>");
|
||||
} else {
|
||||
alert('L\'image n\'a pu être uploadée');
|
||||
}
|
||||
},
|
||||
error: function(response) {
|
||||
alert('erreur');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,7 +5,7 @@ include '../../config/config.php';
|
|||
try {
|
||||
|
||||
$bdd = new \PDO("mysql:host=$db_server;dbname=$db_name", $db_username, $db_password);
|
||||
if (isset($_POST['nom_connecte']) && isset($_POST['mdp']) != "") {
|
||||
if (isset($_POST['nom_connecte']) && isset($_POST['mdp'])) {
|
||||
|
||||
$params["username"] = $_POST['nom_connecte'];
|
||||
$requete = "SELECT username, password
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
// Nom du fichier image
|
||||
$filename = $_FILES['avatar']['name'];
|
||||
|
||||
// Emplacement
|
||||
$path = str_replace('\\', '/', dirname(realpath(__DIR__)));
|
||||
$location = $path.'/uploads/avatars/';
|
||||
|
||||
// Extension du fichier
|
||||
$file_extension = pathinfo($filename, PATHINFO_EXTENSION);
|
||||
$file_extension = strtolower($file_extension);
|
||||
|
||||
// Extensions valides d'image
|
||||
$image_ext = array("jpg","png","jpeg");
|
||||
$nom_user = $_POST['nom_user'];
|
||||
$response = 0;
|
||||
if(in_array($file_extension,$image_ext)){
|
||||
$directory = '/uploads/avatars';
|
||||
if (file_exists($directory) === false) {
|
||||
mkdir($directory, 0777, true);
|
||||
}
|
||||
$nom_fichier = $nom_user.'-'.uniqid("",true).'.'.$file_extension;
|
||||
$location2 = '/uploads/avatars/'.$nom_fichier;
|
||||
// Upload du fichier
|
||||
if(move_uploaded_file($_FILES['avatar']['tmp_name'],$directory.'/'.$nom_fichier)){
|
||||
$response = $location2;
|
||||
}
|
||||
}
|
||||
|
||||
echo $response;
|
|
@ -5,6 +5,7 @@ use App\Account\Action\AccountAction;
|
|||
use App\Account\Action\AccountEditAction;
|
||||
use App\Account\Action\ProfilAction;
|
||||
use App\Account\Action\SignupAction;
|
||||
use App\Auth\Action\PasswordForgetAction;
|
||||
use Framework\Auth\LoggedInMiddleware;
|
||||
use Framework\Module;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
|
@ -24,7 +25,7 @@ class AccountModule extends Module
|
|||
$router->post('/inscription', SignupAction::class);
|
||||
$router->get('/mon-profil', [LoggedInMiddleware::class, AccountAction::class], 'account');
|
||||
$router->post('/mon-profil', [LoggedInMiddleware::class, AccountEditAction::class]);
|
||||
$router->get('/profil-utilisateur', ProfilAction::class, 'account.profil');
|
||||
$router->get('/profil-utilisateur', [PasswordForgetAction::class, ProfilAction::class], 'account.profil');
|
||||
$router->post('/profil-utilisateur', ProfilAction::class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
namespace App\Account\Action;
|
||||
|
||||
use App\Auth\UserTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
@ -16,24 +17,35 @@ class ProfilAction
|
|||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Auth $auth
|
||||
Auth $auth,
|
||||
UserTable $userTable
|
||||
) {
|
||||
$this->renderer = $renderer;
|
||||
$this->auth = $auth;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
/* Transmission du nom de l'utilistateur connecté à la vue Twig */
|
||||
session_start();
|
||||
/* Transmission du nom et de l'avatar de l'utilisateur connecté à la vue Twig */
|
||||
if(!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
$requete_user = $this->userTable->findBy('username', $nom_user);
|
||||
$nom_avatar = $requete_user->avatar;
|
||||
$email = $requete_user->email;
|
||||
} else {
|
||||
$nom_user = '';
|
||||
}
|
||||
return $this->renderer->render('@account/profil', compact('nom_user'));
|
||||
return $this->renderer->render('@account/profil', compact('nom_user','nom_avatar','email'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,71 @@
|
|||
{% extends 'layout.twig' %}
|
||||
|
||||
{% block body %}
|
||||
<script type="text/javascript" src="/js/script.js"></script>
|
||||
<div class="profil_user">
|
||||
<h4>Profil utilisateur {{ nom_user }}</h4>
|
||||
<div id="avatar" class="col-sm-10 card" style="text-align:left;margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Changement d'avatar</h5>
|
||||
<!--<div class="col-sm-5" style="float:left;">
|
||||
|
||||
<div class="profil_user" style="margin-top:5px;">
|
||||
<h4>Profil utilisateur {{ nom_user }}</h4>
|
||||
<div>
|
||||
<h5>Biens achetés</h5>
|
||||
</div>
|
||||
<div>
|
||||
<h5>Biens vendus</h5>
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="col-sm-8" style="float:left;margin-left:0rem;">
|
||||
<div class="form-group">
|
||||
<form method='post' action='' enctype="multipart/form-data">
|
||||
Choisir la nouvelle image : <input type='file' name='file' id='avatar' class='form-control' ><br>
|
||||
</form>
|
||||
<div class="col-sm-8">
|
||||
<div id="avatar_preview" style="max-width:140px;max-height:140px;">
|
||||
<img src="/uploads/avatars/{{ nom_avatar }}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mot_de_passe" class="col-sm-10 card" style="text-align: left;margin-top:0.8rem; margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;margin-top:0.6rem;">
|
||||
<h5 class="card-title">Changement de mot de passe</h5>
|
||||
<h5 class="card-title">(via l'envoi d'un lien par mail)</h5>
|
||||
<div class="container" style="background-color: lightgray;opacity: 0.9;
|
||||
margin-left: 0rem;margin-bottom:1rem; padding:1rem;">
|
||||
<form action="/password" method="post">
|
||||
{{ csrf_input() }}
|
||||
{{ field('email', email, 'Votre Email', {type: 'email'}) }}
|
||||
<button class="btn btn-primary">Changer de mot de passe</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="antennes_suivies" class="col-sm-10 card" style="text-align: left;margin-top:0.8rem;margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Antennes suivies</h5>
|
||||
<div>
|
||||
<div class="row" style="margin-left: 2rem;">
|
||||
Paris
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="prochains_gmarches" class="col-sm-10 card" style="text-align: left;margin-top:0.8rem;margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Prochains Ğ-Marchés</h5>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-10 card" style="text-align: left;margin-left: 1.7rem;margin-top:0.8rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Statistiques diverses</h5>
|
||||
<div>
|
||||
<h6 style="margin-left: 1rem;">Biens achetés</h6>
|
||||
</div>
|
||||
<div>
|
||||
<h6 style="margin-left: 1rem;">Biens vendus</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -3,12 +3,15 @@ namespace App\Auth\Action;
|
|||
|
||||
use App\Auth\Mailer\PasswordResetMailer;
|
||||
use App\Auth\UserTable;
|
||||
use Framework\Actions\RouterAwareAction;
|
||||
use Framework\Database\NoRecordException;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Validator;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Zend\Expressive\Router\RouterInterface;
|
||||
|
||||
class PasswordForgetAction
|
||||
{
|
||||
|
@ -18,6 +21,10 @@ class PasswordForgetAction
|
|||
*/
|
||||
private $renderer;
|
||||
/**
|
||||
* @var RouterInterface
|
||||
*/
|
||||
private $router;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
@ -30,14 +37,17 @@ class PasswordForgetAction
|
|||
*/
|
||||
private $flashService;
|
||||
|
||||
use RouterAwareAction;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Router $router,
|
||||
UserTable $userTable,
|
||||
PasswordResetMailer $mailer,
|
||||
FlashService $flashService
|
||||
) {
|
||||
|
||||
$this->renderer = $renderer;
|
||||
$this->router = $router;
|
||||
$this->userTable = $userTable;
|
||||
$this->mailer = $mailer;
|
||||
$this->flashService = $flashService;
|
||||
|
@ -46,7 +56,8 @@ class PasswordForgetAction
|
|||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
return $this->renderer->render('@auth/password');
|
||||
$affichage_div = true;
|
||||
return $this->renderer->render('@auth/password',compact('affichage_div'));
|
||||
}
|
||||
$params = $request->getParsedBody();
|
||||
$validator = (new Validator($params))
|
||||
|
@ -61,13 +72,21 @@ class PasswordForgetAction
|
|||
'token' => $token
|
||||
]);
|
||||
$this->flashService->success('Un email vous a été envoyé');
|
||||
return new RedirectResponse($request->getUri()->getPath());
|
||||
//return new RedirectResponse($request->getUri()->getPath());
|
||||
//$path = $this->router->generateUri('account.profil');
|
||||
//$this->session->delete('auth.redirect');
|
||||
|
||||
//return new RedirectResponse($path);
|
||||
$affichage_div = false;
|
||||
return $this->renderer->render('@auth/password',compact('affichage_div'));
|
||||
} catch (NoRecordException $e) {
|
||||
$errors = ['email' => 'Aucun utilisateur ne correspond à cet email'];
|
||||
//$errors = ['email' => 'Aucun utilisateur ne correspond à cet email'];
|
||||
$this->flashService->error('Aucun utilisateur ne correspond à cet email');
|
||||
}
|
||||
} else {
|
||||
$errors = $validator->getErrors();
|
||||
}
|
||||
return $this->renderer->render('@auth/password', compact('errors'));
|
||||
$affichage_div = true;
|
||||
return $this->renderer->render('@auth/password', compact('errors','affichage_div'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
{% extends 'layout.twig' %}
|
||||
|
||||
|
||||
{% block body %}
|
||||
|
||||
{% if flash('error') %}
|
||||
<div class="alert alert-danger">
|
||||
{{ flash('error') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- if flash('success') %}
|
||||
<div class="alert alert-success">
|
||||
flash('success')
|
||||
</div>
|
||||
endif -->
|
||||
|
||||
{% if flash('error') %}
|
||||
<div class="alert alert-danger">
|
||||
{{ flash('error') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- if flash('success') %}
|
||||
<div class="alert alert-success">
|
||||
flash('success')
|
||||
</div>
|
||||
endif -->
|
||||
<div class="container" style="background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
|
||||
<form action="" method="post">
|
||||
{{ csrf_input() }}
|
||||
{{ field('email', null, 'Email', {type: 'email'}) }}
|
||||
<button class="btn btn-primary">Réinitialiser mon mot de passe</button>
|
||||
</form>
|
||||
</div>
|
||||
{% if affichage_div %}
|
||||
<div id="password" class="container" style="background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
|
||||
<form action="" method="post">
|
||||
<!-- csrf_input() -->
|
||||
{{ field('email', null, 'Votre Email', {type: 'email'}) }}
|
||||
<button class="btn btn-primary">Réinitialiser mon mot de passe</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,7 +9,8 @@ class SwiftMailerFactory
|
|||
public function __invoke(ContainerInterface $container): \Swift_Mailer
|
||||
{
|
||||
if ($container->get('env') === 'production') {
|
||||
$transport = new \Swift_SendmailTransport();
|
||||
//$transport = new \Swift_SendmailTransport();
|
||||
$transport = new \Swift_SmtpTransport('localhost', 1025);
|
||||
} else {
|
||||
$transport = new \Swift_SmtpTransport('localhost', 1025);
|
||||
}
|
||||
|
|
|
@ -121,6 +121,9 @@
|
|||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form method='post' action='' enctype="multipart/form-data">
|
||||
Choisir la nouvelle image : <input type='file' name='file' id='avatar' class='form-control' ><br>
|
||||
</form>
|
||||
<div class="form-group">
|
||||
<label for="update_vendeur">Vendeur</label>
|
||||
<input type="input" disabled="disabled" id="update_vendeur" placeholder="Vendeur" class="form-control"/>
|
||||
|
|
|
@ -55,11 +55,10 @@
|
|||
{{ "now"|date('d/m/y') }}
|
||||
</div>
|
||||
{% if nom_user != '' %}
|
||||
<!-- <button style="background-color: transparent;padding:0;border:0;" -->
|
||||
<form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}">
|
||||
<span><img src="\avatar_user.png" width="22" height="22" /></span>
|
||||
<!--<span id="nom_connecte"> nom_user </span>-->
|
||||
<button style="color:white;font-size: 14px;" class="btn-primary">{{ nom_user }}</button>
|
||||
<button id="nom_connecte" style="color:white;font-size: 14px;" class="btn-primary">{{ nom_user }}</button>
|
||||
</form>
|
||||
<form method="post" action="{{ path('auth.logout') }}">
|
||||
<!-- csrf_input() }}-->
|
||||
|
@ -69,8 +68,8 @@
|
|||
<div class="nav-item" id="bouton-connexion">
|
||||
<button style="color:white; font-size: 14px;" class="btn btn-primary" data-toggle="modal" data-target="#connexion_modal">Se connecter</button>
|
||||
</div>
|
||||
<div id="nom_connecte" style="display:none;margin-left:10px;margin-top:6px;margin-right:8px;">
|
||||
</div>
|
||||
<!-- <div id="nom_connecte" style="display:none;margin-left:10px;margin-top:6px;margin-right:8px;">
|
||||
</div>-->
|
||||
<div id="deconnexion" style="display:none;">
|
||||
<form method="post" action="{{ path('auth.logout') }}">
|
||||
<!-- csrf_input() }}-->
|
||||
|
|
Loading…
Reference in New Issue