Merge branch 'master' into 'production'
Master See merge request Romulus21/portal!27
This commit is contained in:
20
app/Listeners/UserLoginAttempt.php
Normal file
20
app/Listeners/UserLoginAttempt.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Listeners;
|
||||||
|
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
|
class UserLoginAttempt
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the event.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
Auth::user()->update(['login_at' => now()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,7 +19,10 @@ class User extends Authenticatable
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name', 'email', 'password',
|
'name',
|
||||||
|
'email',
|
||||||
|
'password',
|
||||||
|
'login_at',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Events\UserLoggedIn;
|
||||||
|
use App\Listeners\UpdateUserMetaData;
|
||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
@@ -18,6 +20,9 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
Registered::class => [
|
Registered::class => [
|
||||||
SendEmailVerificationNotification::class,
|
SendEmailVerificationNotification::class,
|
||||||
],
|
],
|
||||||
|
\Illuminate\Auth\Events\Authenticated::class => [
|
||||||
|
'App\Listeners\UserLoginAttempt@handle'
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddLoginAtToUsersTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('users', function (Blueprint $table) {
|
||||||
|
$table->timestamp('login_at')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('users', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('login_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,6 +38,6 @@ then
|
|||||||
php artisan migrate --force
|
php artisan migrate --force
|
||||||
php artisan optimize
|
php artisan optimize
|
||||||
|
|
||||||
npm install
|
npm install --no-progress
|
||||||
npm run prod
|
npm run prod
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -10,10 +10,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="authUser.data.attributes.is_admin">
|
<div v-if="authUser.data.attributes.is_admin">
|
||||||
|
<div class="box-toggle">
|
||||||
|
<div class="box-toggle-header" @click="userAddToggle = !userAddToggle">
|
||||||
<h2 class="mb-1">Ajouter un membre</h2>
|
<h2 class="mb-1">Ajouter un membre</h2>
|
||||||
|
<svg-vue icon="arrow" v-bind:class="{ open: userAddToggle }" />
|
||||||
|
</div>
|
||||||
|
<transition name="fade">
|
||||||
|
<form @submit.prevent="addMember" v-if="userAddToggle" class="box-toggle-content" >
|
||||||
<AlertBox v-if="alertType" :type="alertType" :message="alertMessage" class="mb-1" />
|
<AlertBox v-if="alertType" :type="alertType" :message="alertMessage" class="mb-1" />
|
||||||
<form @submit.prevent="addMember" class="mb-2">
|
<div class="flex mb-1">
|
||||||
<div class="flex">
|
|
||||||
<InputField name="name" label="Nom du nouveau membre" placeholder="Nom" required :errors="errors" @update:field="form.name = $event" class="mr-1" />
|
<InputField name="name" label="Nom du nouveau membre" placeholder="Nom" required :errors="errors" @update:field="form.name = $event" class="mr-1" />
|
||||||
<InputField name="email" type="email" label="Adresse email du nouveau membre" placeholder="E-mail" required :errors="errors" @update:field="form.email = $event" class="mr-1" />
|
<InputField name="email" type="email" label="Adresse email du nouveau membre" placeholder="E-mail" required :errors="errors" @update:field="form.email = $event" class="mr-1" />
|
||||||
<div class="flex-middle mt-4">
|
<div class="flex-middle mt-4">
|
||||||
@@ -21,12 +26,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="mb-2">
|
</transition>
|
||||||
|
</div>
|
||||||
|
<div class="mb-2 box-toggle">
|
||||||
|
<div class="box-toggle-header" @click="userListToggle = !userListToggle">
|
||||||
<h2>Liste des utilisateurs</h2>
|
<h2>Liste des utilisateurs</h2>
|
||||||
<ul>
|
<svg-vue icon="arrow" v-bind:class="{ open: userListToggle }" />
|
||||||
|
</div>
|
||||||
|
<transition name="fade">
|
||||||
|
<ul v-if="userListToggle" class="box-toggle-content">
|
||||||
<Loader v-if="loading" />
|
<Loader v-if="loading" />
|
||||||
<li v-else v-for="user in users"><a :href="user.links.self">{{ user.data.attributes.name }}</a> - {{ user.data.attributes.email }} - {{ user.data.attributes.is_admin }}</li>
|
<li v-else v-for="user in users"><a :href="user.links.self">{{ user.data.attributes.name }}</a> - {{ user.data.attributes.email }} - {{ user.data.attributes.is_admin }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
<div>Css Testeur pour constituer un thème : <router-link to="/css-testeur">Css Testeur</router-link></div>
|
<div>Css Testeur pour constituer un thème : <router-link to="/css-testeur">Css Testeur</router-link></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -56,6 +68,8 @@
|
|||||||
errors: null,
|
errors: null,
|
||||||
loading: true,
|
loading: true,
|
||||||
users: null,
|
users: null,
|
||||||
|
userListToggle: false,
|
||||||
|
userAddToggle: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|||||||
1
resources/sass/app.scss
vendored
1
resources/sass/app.scss
vendored
@@ -6,6 +6,7 @@
|
|||||||
@import "setup/containers";
|
@import "setup/containers";
|
||||||
@import "setup/effects";
|
@import "setup/effects";
|
||||||
|
|
||||||
|
@import "components/transitions";
|
||||||
@import "components/btn";
|
@import "components/btn";
|
||||||
@import "components/elements";
|
@import "components/elements";
|
||||||
@import "components/loader";
|
@import "components/loader";
|
||||||
|
|||||||
6
resources/sass/components/_transitions.scss
vendored
Normal file
6
resources/sass/components/_transitions.scss
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
.fade-enter-active, .fade-leave-active {
|
||||||
|
transition: opacity .3s;
|
||||||
|
}
|
||||||
|
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
31
resources/sass/setup/_containers.scss
vendored
31
resources/sass/setup/_containers.scss
vendored
@@ -46,3 +46,34 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.box-toggle {
|
||||||
|
box-shadow: 1px 2px 5px rgba(0,0,0,0.2);
|
||||||
|
|
||||||
|
&-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
background-color: $light;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border-radius: 0.2rem;
|
||||||
|
|
||||||
|
svg {
|
||||||
|
width: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
transform: rotate(270deg);
|
||||||
|
transition: transform 0.3s;
|
||||||
|
|
||||||
|
&.open {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&-content {
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
10
resources/sass/setup/_reset.scss
vendored
10
resources/sass/setup/_reset.scss
vendored
@@ -13,3 +13,13 @@ body {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin-top:0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user