Gestion des utilisateurs
10
app/Dossier.php
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Dossier extends Model
|
||||
{
|
||||
//
|
||||
}
|
||||
50
app/Http/Controllers/CommunController.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Mail\contact;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CommunController extends Controller
|
||||
{
|
||||
/**
|
||||
* page d'accueil
|
||||
*
|
||||
* @return \Illuminate\Contracts\Support\Renderable
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('home');
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoi d'un message
|
||||
*
|
||||
*/
|
||||
public function sendMessage(Request $request)
|
||||
{
|
||||
$data = $request->all(); // This will get all the request data.
|
||||
|
||||
$type = $request->input('type');
|
||||
$url = $request->input('url');
|
||||
$message = $request->input('message');
|
||||
|
||||
if (Auth::check()) {
|
||||
$user = auth()->user();
|
||||
Mail::to(env('MAIL_ADMIN_ADDRESS', "informatique.internet@ldc.fr"))->send(new contact($type, $url, $message, $user));
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* page gestion des médias
|
||||
*
|
||||
* @return \Illuminate\Contracts\Support\Renderable
|
||||
*/
|
||||
public function media_manager()
|
||||
{
|
||||
return view('media_manager');
|
||||
}
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class HomeController extends Controller
|
||||
{
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the application dashboard.
|
||||
*
|
||||
* @return \Illuminate\Contracts\Support\Renderable
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('home');
|
||||
}
|
||||
}
|
||||
225
app/Http/Controllers/UserController.php
Normal file
|
|
@ -0,0 +1,225 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\User;
|
||||
use App\Marque;
|
||||
use App\Sujet;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Adldap\Laravel\Facades\Adldap;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
Auth::user()->authorizeRoles(config('roles.const.ADMIN'));
|
||||
$users = User::all();
|
||||
return view('users.index')->with(['users'=> $users]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$roles = config('roles.label');
|
||||
$marques = Marque::all();
|
||||
$sujets = Sujet::all();
|
||||
return view('users.create')->with(['roles'=> $roles, 'marques'=> $marques, 'sujets'=> $sujets]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$validatedData = $request->validate([
|
||||
'matricule' => 'required',
|
||||
'firstname' => 'required',
|
||||
'lastname' => 'required',
|
||||
'email' => 'email',
|
||||
'role' => 'required'
|
||||
]);
|
||||
|
||||
$user = User::where('matricule', $request->matricule)->first();
|
||||
if($user){
|
||||
session()->flash('error', "Ce matricule est déjà présent dans l'application. Ajout impossible.");
|
||||
return redirect()->route('user.create');
|
||||
}else{
|
||||
// ---- L'utilisateur
|
||||
$user = new User();
|
||||
$user->matricule = $request->matricule;
|
||||
$user->firstname = $request->firstname;
|
||||
$user->lastname = $request->lastname;
|
||||
$user->email = $request->email;
|
||||
$user->role = $request->role;
|
||||
|
||||
if ($user->save()){
|
||||
|
||||
// ---- Les marques
|
||||
$sMarques = $request->marques;
|
||||
if($sMarques != ""){
|
||||
$marques = explode(",", $sMarques);
|
||||
foreach($marques as $marqueId){
|
||||
$user->marques()->attach($marqueId);
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Les sujets
|
||||
$sSujets = $request->sujets;
|
||||
if($sSujets != ""){
|
||||
$sujets = explode(",", $sSujets);
|
||||
foreach($sujets as $sujetId){
|
||||
$user->sujets()->attach($sujetId);
|
||||
}
|
||||
}
|
||||
|
||||
session()->flash('message', "L'utilisateur à été enregistré");
|
||||
return redirect()->route('user.edit', ['user' => $user]);
|
||||
}else{
|
||||
session()->flash('error', "Une erreur s'est produite, ajout impossible");
|
||||
return redirect()->route('user.create');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check le matricule avant ajout de l'utilisateur
|
||||
*
|
||||
*/
|
||||
public function checkMatricule(Request $request)
|
||||
{
|
||||
$response = array();
|
||||
$response["exist_bdd"] = false;
|
||||
$response["exist_ldap"] = false;
|
||||
|
||||
$data = $request->all(); // This will get all the request data.
|
||||
$matricule = $request->input('matricule');
|
||||
|
||||
// ---- Ctrl de la présence du matricule en base
|
||||
$user = User::where('matricule', $request->matricule)->first();
|
||||
if($user){
|
||||
$response["exist_bdd"] = true;
|
||||
}
|
||||
|
||||
$adldap = Adldap::getFacadeRoot();
|
||||
$results = $adldap->search()->where('uid', '=', $matricule)->first();
|
||||
|
||||
if($results){
|
||||
$response["exist_ldap"] = true;
|
||||
$ldap_user = array();
|
||||
$ldap_user['firstname'] = $results->getAttribute('givenname')[0];
|
||||
$ldap_user['lastname'] = $results->getAttribute('sn')[0];
|
||||
$ldap_user['email'] = $results->getAttribute('mail')[0];
|
||||
$response["ldap_user"] = $ldap_user;
|
||||
}
|
||||
|
||||
return json_encode($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show(User $user)
|
||||
{
|
||||
$roles = config('roles.label');
|
||||
$marques = $user->marques;
|
||||
$sujets = $user->sujets;
|
||||
return view('users.show')->with(['user'=> $user, 'roles'=> $roles, 'marques' => $marques, 'sujets' => $sujets]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function edit(User $user)
|
||||
{
|
||||
Auth::user()->authorizeRoles(config('roles.const.ADMIN'));
|
||||
$roles = config('roles.label');
|
||||
$userMarques = $user->marques;
|
||||
$marques = Marque::all();
|
||||
$userSujets = $user->sujets;
|
||||
$sujets = Sujet::all();
|
||||
return view('users.edit')->with(['user'=> $user, 'roles'=> $roles, 'userMarques' => $userMarques, 'marques' => $marques, 'userSujets' => $userSujets, 'sujets'=> $sujets]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \App\User $user
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, User $user)
|
||||
{
|
||||
$validatedData = $request->validate([
|
||||
'firstname' => 'required',
|
||||
'lastname' => 'required',
|
||||
'email' => 'email',
|
||||
'role' => 'required'
|
||||
]);
|
||||
|
||||
// ---- L'utilisateur
|
||||
$user->firstname = $request->firstname;
|
||||
$user->lastname = $request->lastname;
|
||||
$user->email = $request->email;
|
||||
$user->role = $request->role;
|
||||
$user->save();
|
||||
|
||||
// ---- Les marques
|
||||
$user->marques()->detach();
|
||||
$sMarques = $request->marques;
|
||||
if($sMarques != ""){
|
||||
$marques = explode(",", $sMarques);
|
||||
foreach($marques as $marqueId){
|
||||
$user->marques()->attach($marqueId);
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Les Sujets
|
||||
$user->sujets()->detach();
|
||||
$sSujets = $request->sujets;
|
||||
if($sSujets != ""){
|
||||
$sujets = explode(",", $sSujets);
|
||||
foreach($sujets as $sujetId){
|
||||
$user->sujets()->attach($sujetId);
|
||||
}
|
||||
}
|
||||
|
||||
session()->flash('message', "L'utilisateur à été mis à jour");
|
||||
return redirect()->route('user.edit', ['user' => $user]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
if ($user->delete()) {
|
||||
return redirect(route('user.index'));
|
||||
} else {
|
||||
session()->flash('error', 'Erreur lors de la suppression');
|
||||
return redirect()->route('user.edit', ['user' => $user]);
|
||||
}
|
||||
}
|
||||
}
|
||||
41
app/Mail/contact.php
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
|
||||
class contact extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public $type;
|
||||
public $url;
|
||||
public $message;
|
||||
public $user;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($type, $url, $message, $user)
|
||||
{
|
||||
$this->type = $type;
|
||||
$this->url = $url;
|
||||
$this->message = $message;
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->view('mails.contact')->with(['type' => $this->type, 'url' => $this->url, 'message' => $this->message, 'user' => $this->user]);
|
||||
}
|
||||
}
|
||||
25
app/Marque.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Marque extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* The primary key associated with the table.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $primaryKey = 'COD_MARQUE';
|
||||
|
||||
/**
|
||||
* The users that belong to the marque.
|
||||
*/
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany('App\User', 'marques_users', 'marque_id', 'user_id');
|
||||
}
|
||||
|
||||
}
|
||||
24
app/Sujet.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Sujet extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* The primary key associated with the table.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $primaryKey = 'CODE_SUJET';
|
||||
|
||||
/**
|
||||
* The users that belong to the sujet.
|
||||
*/
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany('App\User', 'sujets_users', 'sujet_id', 'user_id');
|
||||
}
|
||||
}
|
||||
50
app/User.php
|
|
@ -15,9 +15,9 @@ class User extends Authenticatable
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name', 'email', 'password',
|
||||
];
|
||||
// protected $fillable = [
|
||||
// 'name', 'email', 'password',
|
||||
// ];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
|
|
@ -36,4 +36,48 @@ class User extends Authenticatable
|
|||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
];
|
||||
|
||||
/**
|
||||
* @param string|array $roles
|
||||
*/
|
||||
public function authorizeRoles($roles){
|
||||
if (is_array($roles)) {
|
||||
return in_array($this->role, $roles) ||
|
||||
abort(401, 'Cette action n\'est pas autorisée.');
|
||||
}
|
||||
return $this->role == $roles ||
|
||||
abort(401, 'Cette action n\'est pas autorisée.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check one role
|
||||
* @param string $role
|
||||
*/
|
||||
public function hasRole($role) {
|
||||
return $this->role == $role;
|
||||
}
|
||||
|
||||
/**
|
||||
* get one role label
|
||||
* @param string $role
|
||||
*/
|
||||
public function getRoleLabel() {
|
||||
return config('roles.label.'.$this->role);
|
||||
}
|
||||
|
||||
/**
|
||||
* The marques that belong to the user.
|
||||
*/
|
||||
public function marques()
|
||||
{
|
||||
return $this->belongsToMany('App\Marque', 'marques_users', 'user_id', 'marque_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* The sujet that belong to the user.
|
||||
*/
|
||||
public function sujets()
|
||||
{
|
||||
return $this->belongsToMany('App\Sujet', 'sujets_users', 'user_id', 'sujet_id');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@
|
|||
"adldap2/adldap2-laravel": "^6.0",
|
||||
"fideloper/proxy": "^4.0",
|
||||
"laravel/framework": "5.8.*",
|
||||
"laravel/tinker": "^1.0"
|
||||
"laravel/tinker": "^1.0",
|
||||
"laravelcollective/html": "^5.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"barryvdh/laravel-debugbar": "^3.2",
|
||||
|
|
|
|||
70
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "378ddb1a929005e1d5dddce83e5f5f6e",
|
||||
"content-hash": "fa0af3ae376551c7f6bf0ef24731556a",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adldap2/adldap2",
|
||||
|
|
@ -775,6 +775,74 @@
|
|||
],
|
||||
"time": "2018-10-12T19:39:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravelcollective/html",
|
||||
"version": "v5.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/LaravelCollective/html.git",
|
||||
"reference": "0e360143d3476fe4141d267a260c140569fa207b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/LaravelCollective/html/zipball/0e360143d3476fe4141d267a260c140569fa207b",
|
||||
"reference": "0e360143d3476fe4141d267a260c140569fa207b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/http": "5.8.*",
|
||||
"illuminate/routing": "5.8.*",
|
||||
"illuminate/session": "5.8.*",
|
||||
"illuminate/support": "5.8.*",
|
||||
"illuminate/view": "5.8.*",
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"illuminate/database": "5.8.*",
|
||||
"mockery/mockery": "~1.0",
|
||||
"phpunit/phpunit": "~7.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.8-dev"
|
||||
},
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Collective\\Html\\HtmlServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"Form": "Collective\\Html\\FormFacade",
|
||||
"Html": "Collective\\Html\\HtmlFacade"
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Collective\\Html\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylorotwell@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Adam Engebretson",
|
||||
"email": "adam@laravelcollective.com"
|
||||
}
|
||||
],
|
||||
"description": "HTML and Form Builders for the Laravel Framework",
|
||||
"homepage": "https://laravelcollective.com",
|
||||
"time": "2019-03-01T22:53:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.0.50",
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'locale' => 'en',
|
||||
'locale' => 'fr',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -161,6 +161,7 @@ return [
|
|||
Illuminate\Translation\TranslationServiceProvider::class,
|
||||
Illuminate\Validation\ValidationServiceProvider::class,
|
||||
Illuminate\View\ViewServiceProvider::class,
|
||||
Collective\Html\HtmlServiceProvider::class,
|
||||
|
||||
/*
|
||||
* Package Service Providers...
|
||||
|
|
@ -226,6 +227,8 @@ return [
|
|||
'Validator' => Illuminate\Support\Facades\Validator::class,
|
||||
'View' => Illuminate\Support\Facades\View::class,
|
||||
'Adldap' => Adldap\Laravel\Facades\Adldap::class,
|
||||
'Form' => Collective\Html\FormFacade::class,
|
||||
'Html' => Collective\Html\HtmlFacade::class,
|
||||
],
|
||||
|
||||
];
|
||||
|
|
|
|||
16
config/roles.php
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'const' => [
|
||||
'ADMIN' => '1',
|
||||
'LECTEUR' => '2',
|
||||
'CONTRIBUTEUR' => '3',
|
||||
'REDACTEUR' => '4',
|
||||
],
|
||||
'label' => [
|
||||
'1' => 'Administrateur',
|
||||
'2' => 'Lecteur',
|
||||
'3' => 'Contributeur',
|
||||
'4' => 'Rédacteur',
|
||||
],
|
||||
];
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class CreateMarquesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('marques', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('marques');
|
||||
}
|
||||
}
|
||||
12706
public/css/app.css
vendored
1
public/css/jquery.fancybox.min.css
vendored
Normal file
BIN
public/fonts/fa-brands-400.eot
Normal file
3459
public/fonts/fa-brands-400.svg
Normal file
|
After Width: | Height: | Size: 678 KiB |
BIN
public/fonts/fa-brands-400.ttf
Normal file
BIN
public/fonts/fa-brands-400.woff
Normal file
BIN
public/fonts/fa-brands-400.woff2
Normal file
BIN
public/fonts/fa-light-300.eot
Normal file
9901
public/fonts/fa-light-300.svg
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
public/fonts/fa-light-300.ttf
Normal file
BIN
public/fonts/fa-light-300.woff
Normal file
BIN
public/fonts/fa-light-300.woff2
Normal file
BIN
public/fonts/fa-regular-400.eot
Normal file
9103
public/fonts/fa-regular-400.svg
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
public/fonts/fa-regular-400.ttf
Normal file
BIN
public/fonts/fa-regular-400.woff
Normal file
BIN
public/fonts/fa-regular-400.woff2
Normal file
BIN
public/fonts/fa-solid-900.eot
Normal file
7709
public/fonts/fa-solid-900.svg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
public/fonts/fa-solid-900.ttf
Normal file
BIN
public/fonts/fa-solid-900.woff
Normal file
BIN
public/fonts/fa-solid-900.woff2
Normal file
BIN
public/images/home_bg.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/ldc-logo.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
public/images/login_bg.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
38914
public/js/app.js
vendored
13
public/js/jquery.fancybox.min.js
vendored
Normal file
1087
public/js/jquery.nestable.js
vendored
Normal file
173
resources/js/admin.js
vendored
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
|
||||
$(document).ready(function() {
|
||||
|
||||
// ---- Gestion des utilisateurs : filtre role
|
||||
$(".filter_role_btn").on('click', function(event) {
|
||||
event.preventDefault();
|
||||
$(".filter_user_input").val('');
|
||||
var roleId = $(".filter_role").val();
|
||||
tableSearch('.datatable tr.data_row', 'attr-role', roleId)
|
||||
});
|
||||
|
||||
// ---- Gestion des utilisateurs : recherche d'utilisateur
|
||||
$(".filter_user_btn").on('click', function(event) {
|
||||
event.preventDefault();
|
||||
$(".filter_role").val(0);
|
||||
var search = $(".filter_user_input").val();
|
||||
tableGlobalSearch('.datatable tr.data_row', search, [1,2,3]);
|
||||
});
|
||||
// ---- Edition des utilisateurs : suppression d'utilisateur
|
||||
$(".btn_delete_user").on('click', function(event) {
|
||||
event.preventDefault();
|
||||
var form = $(".deleteform");
|
||||
$.fancyConfirm({
|
||||
title : "Suppression d'un utilisateur",
|
||||
message : "Êtes-vous sûr de vouloir supprimer cet utilisateur ?",
|
||||
okButton : 'Supprimer',
|
||||
noButton : 'Annuler',
|
||||
callback : function (value) {
|
||||
if (value) {
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// ---- Ajout des utilisateurs : vérification du matricule
|
||||
$(".check_matricule").on('blur', function(event) {
|
||||
var matricule = $(this).val();
|
||||
if(matricule == "") return false;
|
||||
|
||||
$(".loader").show();
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: '/check-matricule',
|
||||
method: 'POST',
|
||||
dataType : 'json',
|
||||
data: {
|
||||
matricule: matricule,
|
||||
},
|
||||
success: function(result){
|
||||
$(".loader").hide();
|
||||
if(result.exist_bdd){
|
||||
$.fancyMessage({
|
||||
title : "Attention",
|
||||
message : "Ce matricule existe déjà. Veuillez en indiquer un autre.",
|
||||
type : "error",
|
||||
});
|
||||
}else if(result.exist_ldap){
|
||||
$("#firstname").val(result.ldap_user.firstname);
|
||||
$("#lastname").val(result.ldap_user.lastname);
|
||||
$("#email").val(result.ldap_user.email);
|
||||
$.fancyMessage({
|
||||
title : "Information",
|
||||
message : "Ce matricule existe chez LDC. Le formulaire a été complété.",
|
||||
type : "info",
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
$(".loader").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
initSelector(".selector_marques");
|
||||
initSelector(".selector_sujets");
|
||||
});
|
||||
|
||||
|
||||
// ---- Module de gestion de liste de données
|
||||
function initSelector($selector){
|
||||
var datavalue = [];
|
||||
|
||||
// Init du module
|
||||
$($selector+" .selector_values li").each(function() {
|
||||
datavalue.push($(this).attr("data-value"));
|
||||
});
|
||||
$($selector+" .selector_choices li").each(function() {
|
||||
var id = $(this).attr("data-value");
|
||||
if(datavalue.indexOf(id)!= -1){
|
||||
$(this).addClass('selected');
|
||||
}
|
||||
});
|
||||
$($selector+" .selector_dataValues").val(datavalue.join());
|
||||
|
||||
// Recherche d'un élément
|
||||
$($selector+" .selector_filter").on('keyup', function(event) {
|
||||
var options = $(this).parent($selector).find(".selector_choices li");
|
||||
var search = $(this).val();
|
||||
$(options).each(function() {
|
||||
|
||||
if($(this).html().toUpperCase().indexOf(search.toUpperCase()) != -1 || search == ""){
|
||||
$(this).css("display", "block");
|
||||
}else{
|
||||
$(this).css("display", "none");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Ajout d'un élément
|
||||
$($selector+" .selector_choices" ).on( "click", "li", function() {
|
||||
if(!$(this).hasClass('selected')){
|
||||
var id = $(this).attr("data-value");
|
||||
var text = $(this).html();
|
||||
$(this).addClass('selected');
|
||||
$(this).parent().parent().find('.selector_values').append('<li data-value="'+id+'">'+text+' </li>');
|
||||
datavalue.push(id);
|
||||
$($selector+" .selector_dataValues").val(datavalue.join());
|
||||
}
|
||||
});
|
||||
// Suppression d'un élément
|
||||
$($selector+" .selector_values" ).on( "click", "li", function() {
|
||||
var id = $(this).attr("data-value");
|
||||
var text = $(this).html();
|
||||
$(this).parent().parent().find('.selector_choices li[data-value="'+id+'"]').removeClass('selected');
|
||||
$(this).remove();
|
||||
var index = datavalue.indexOf(id);
|
||||
if (index > -1) {
|
||||
datavalue.splice(index, 1);
|
||||
}
|
||||
$($selector+" .selector_dataValues").val(datavalue.join());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// --- Fct pour rechercher sur un attribut d'une ligne
|
||||
function tableSearch(field, attr, search){
|
||||
$(field).each(function (index, value) {
|
||||
if($(this).attr(attr) == search || search == 0){
|
||||
$(this).show();
|
||||
}else{
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// --- Fct pour rechercher dans des colonnes d'une table
|
||||
function tableGlobalSearch(field, search, cols){
|
||||
var search = search.toUpperCase();
|
||||
|
||||
$(field).each(function (index, value) {
|
||||
$row = $(this);
|
||||
var find = false;
|
||||
$.each(cols, function (index, value) {
|
||||
var dataCol = $row.find("td:nth-of-type("+value+")").text().toUpperCase();
|
||||
|
||||
if (dataCol.indexOf(search) != -1) {
|
||||
find = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if(find){
|
||||
$row.show();
|
||||
}else{
|
||||
$row.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
179
resources/js/app.js
vendored
|
|
@ -1,33 +1,164 @@
|
|||
|
||||
/**
|
||||
* First we will load all of this project's JavaScript dependencies which
|
||||
* includes Vue and other libraries. It is a great starting point when
|
||||
* building robust, powerful web applications using Vue and Laravel.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
require('./bootstrap');
|
||||
try {
|
||||
window.$ = window.jQuery = require('jquery')
|
||||
} catch (e) {}
|
||||
|
||||
window.Vue = require('vue');
|
||||
//confirm popup
|
||||
$.fancyConfirm = function( opts ) {
|
||||
opts = $.extend( true, {
|
||||
title : 'Are you sure?',
|
||||
message : '',
|
||||
okButton : 'OK',
|
||||
noButton : 'Cancel',
|
||||
callback : $.noop
|
||||
}, opts || {} );
|
||||
|
||||
/**
|
||||
* The following block of code may be used to automatically register your
|
||||
* Vue components. It will recursively scan this directory for the Vue
|
||||
* components and automatically register them with their "basename".
|
||||
*
|
||||
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
|
||||
*/
|
||||
$.fancybox.open({
|
||||
type : 'html',
|
||||
src :
|
||||
'<div class="fc-content">' +
|
||||
'<h3>' + opts.title + '</h3><hr/>' +
|
||||
'<p class="tcenter"><i class="fal fa-question-circle"></i>' +
|
||||
opts.message + '</p>' +
|
||||
'<hr/><p class="button_bar">' +
|
||||
'<a data-value="0" data-fancybox-close class="btn btn-black mr-10 btn-square" >' + opts.noButton + '</a>' +
|
||||
'<button data-value="1" data-fancybox-close class="btn btn-square">' + opts.okButton + '</button>' +
|
||||
'</p>' +
|
||||
'</div>',
|
||||
opts : {
|
||||
animationDuration : 350,
|
||||
animationEffect : 'material',
|
||||
modal : true,
|
||||
baseTpl :
|
||||
'<div class="fancybox-container fc-container" role="dialog" tabindex="-1">' +
|
||||
'<div class="fancybox-bg"></div>' +
|
||||
'<div class="fancybox-inner">' +
|
||||
'<div class="fancybox-stage"></div>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
afterClose : function( instance, current, e ) {
|
||||
var button = e ? e.target || e.currentTarget : null;
|
||||
var value = button ? $(button).data('value') : 0;
|
||||
|
||||
// const files = require.context('./', true, /\.vue$/i);
|
||||
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));
|
||||
opts.callback( value );
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
|
||||
|
||||
/**
|
||||
* Next, we will create a fresh Vue application instance and attach it to
|
||||
* the page. Then, you may begin adding components to this application
|
||||
* or customize the JavaScript scaffolding to fit your unique needs.
|
||||
*/
|
||||
// Message
|
||||
$.fancyMessage = function( opts ) {
|
||||
opts = $.extend( true, {
|
||||
title : 'Are you sure?',
|
||||
message : '',
|
||||
type : '',
|
||||
}, opts || {} );
|
||||
|
||||
const app = new Vue({
|
||||
el: '#app'
|
||||
$.fancybox.open({
|
||||
type : 'html',
|
||||
src :
|
||||
'<div class="fc-content '+opts.type+'">' +
|
||||
'<h3>' + opts.title + '</h3><hr/>' +
|
||||
'<p class="tcenter"><i class="fal fa-info-circle"></i></i><i class="fal fa-exclamation-triangle"></i>' +
|
||||
opts.message + '</p>' +
|
||||
'<hr/><p class="button_bar">' +
|
||||
'<a data-value="0" data-fancybox-close class="btn btn-square '+
|
||||
(opts.type == "error" ? 'btn-red':'')+' " >Ok</a>' +
|
||||
'</p>' +
|
||||
'</div>',
|
||||
opts : {
|
||||
animationDuration : 350,
|
||||
animationEffect : 'material',
|
||||
modal : false,
|
||||
baseTpl :
|
||||
'<div class="fancybox-container fc-container" role="dialog" tabindex="-1">' +
|
||||
'<div class="fancybox-bg"></div>' +
|
||||
'<div class="fancybox-inner">' +
|
||||
'<div class="fancybox-stage"></div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ---- Header : Menu utilisateur
|
||||
$(".userbar").on('click',function(event) {
|
||||
$(".submenu").toggle();
|
||||
});
|
||||
|
||||
$(document).mouseup(function(e) {
|
||||
var container = $(".userbar");
|
||||
if (!container.is(e.target) && container.has(e.target).length === 0) {
|
||||
$(".submenu").hide();
|
||||
}
|
||||
});
|
||||
|
||||
// ---- Header : Ouverture formulaire de contact
|
||||
$(".contact_btn").on('click',function(event) {
|
||||
event.preventDefault();
|
||||
var subjectId = 1;
|
||||
subjectId = $(this).attr("data-subjectId");
|
||||
|
||||
$.fancybox.open({
|
||||
src : '#form_contact',
|
||||
type : 'inline',
|
||||
opts : {
|
||||
animationDuration : 350,
|
||||
animationEffect : 'material',
|
||||
beforeShow : function( instance, current ) {
|
||||
$(".form_contact_type").val(subjectId);
|
||||
$(".form_contact_check_ko").hide();
|
||||
$(".form_contact_ok").hide();
|
||||
$(".form_contact_ko").hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ---- Header : fermeture formulaire de contact
|
||||
$(".form_contact_close").on('click',function(event) {
|
||||
event.preventDefault();
|
||||
$.fancybox.getInstance().close();
|
||||
});
|
||||
|
||||
// ---- Header : envoi formulaire de contact
|
||||
$(".form_contact_send").on('click',function(event) {
|
||||
event.preventDefault();
|
||||
var btn = $(this);
|
||||
if($('.form_contact_message').val() == ""){
|
||||
$(".form_contact_check_ko").show();
|
||||
return false;
|
||||
}else{
|
||||
$(".form_contact_check_ko").hide();
|
||||
}
|
||||
btn.addClass('loading');
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: '/send-message',
|
||||
method: 'POST',
|
||||
dataType : 'json',
|
||||
data: {
|
||||
type: $('.form_contact_type option:selected').text(),
|
||||
url: $('.form_contact_url').val(),
|
||||
message: $('.form_contact_message').val()
|
||||
},
|
||||
success: function(result){
|
||||
btn.removeClass('loading');
|
||||
$(".form_contact_ok").show();
|
||||
$('.form_contact_url').val('');
|
||||
$('.form_contact_message').val('');
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
btn.removeClass('loading');
|
||||
$(".form_contact_ko").show();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
56
resources/js/bootstrap.js
vendored
|
|
@ -1,56 +0,0 @@
|
|||
|
||||
window._ = require('lodash');
|
||||
|
||||
/**
|
||||
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
|
||||
* for JavaScript based Bootstrap features such as modals and tabs. This
|
||||
* code may be modified to fit the specific needs of your application.
|
||||
*/
|
||||
|
||||
try {
|
||||
window.Popper = require('popper.js').default;
|
||||
window.$ = window.jQuery = require('jquery');
|
||||
|
||||
require('bootstrap');
|
||||
} catch (e) {}
|
||||
|
||||
/**
|
||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||
* to our Laravel back-end. This library automatically handles sending the
|
||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||
*/
|
||||
|
||||
window.axios = require('axios');
|
||||
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
|
||||
/**
|
||||
* Next we will register the CSRF Token as a common header with Axios so that
|
||||
* all outgoing HTTP requests automatically have it attached. This is just
|
||||
* a simple convenience so we don't have to attach every token manually.
|
||||
*/
|
||||
|
||||
let token = document.head.querySelector('meta[name="csrf-token"]');
|
||||
|
||||
if (token) {
|
||||
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
|
||||
} else {
|
||||
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
|
||||
}
|
||||
|
||||
/**
|
||||
* Echo exposes an expressive API for subscribing to channels and listening
|
||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||||
* allows your team to easily build robust real-time web applications.
|
||||
*/
|
||||
|
||||
// import Echo from 'laravel-echo'
|
||||
|
||||
// window.Pusher = require('pusher-js');
|
||||
|
||||
// window.Echo = new Echo({
|
||||
// broadcaster: 'pusher',
|
||||
// key: process.env.MIX_PUSHER_APP_KEY,
|
||||
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||
// encrypted: true
|
||||
// });
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Example Component</div>
|
||||
|
||||
<div class="card-body">
|
||||
I'm an example component.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
mounted() {
|
||||
console.log('Component mounted.')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
17
resources/lang/fr/auth.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Login ou mot de passe incorrect',
|
||||
'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.',
|
||||
];
|
||||
17
resources/lang/fr/pagination.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Précédent',
|
||||
'next' => 'Suivant »',
|
||||
];
|
||||
20
resources/lang/fr/passwords.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Les mots de passe doivent contenir au moins six caractères et être identiques.',
|
||||
'reset' => 'Votre mot de passe a été réinitialisé !',
|
||||
'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !',
|
||||
'token' => "Ce jeton de réinitialisation du mot de passe n'est pas valide.",
|
||||
'user' => "Aucun utilisateur n'a été trouvé avec cette adresse email.",
|
||||
];
|
||||
177
resources/lang/fr/validation.php
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'Le champ :attribute doit être accepté.',
|
||||
'active_url' => "Le champ :attribute n'est pas une URL valide.",
|
||||
'after' => 'Le champ :attribute doit être une date postérieure au :date.',
|
||||
'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.',
|
||||
'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.',
|
||||
'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.',
|
||||
'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.',
|
||||
'array' => 'Le champ :attribute doit être un tableau.',
|
||||
'before' => 'Le champ :attribute doit être une date antérieure au :date.',
|
||||
'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.',
|
||||
'between' => [
|
||||
'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.',
|
||||
'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.',
|
||||
],
|
||||
'boolean' => 'Le champ :attribute doit être vrai ou faux.',
|
||||
'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.',
|
||||
'date' => "Le champ :attribute n'est pas une date valide.",
|
||||
'date_equals' => 'Le champ :attribute doit être une date égale à :date.',
|
||||
'date_format' => 'Le champ :attribute ne correspond pas au format :format.',
|
||||
'different' => 'Les champs :attribute et :other doivent être différents.',
|
||||
'digits' => 'Le champ :attribute doit contenir :digits chiffres.',
|
||||
'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.',
|
||||
'dimensions' => "La taille de l'image :attribute n'est pas conforme.",
|
||||
'distinct' => 'Le champ :attribute a une valeur en double.',
|
||||
'email' => 'Le champ :attribute doit être une adresse email valide.',
|
||||
'exists' => 'Le champ :attribute sélectionné est invalide.',
|
||||
'file' => 'Le champ :attribute doit être un fichier.',
|
||||
'filled' => 'Le champ :attribute doit avoir une valeur.',
|
||||
'gt' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir plus de :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir plus de :value éléments.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au moins :value éléments.',
|
||||
],
|
||||
'image' => 'Le champ :attribute doit être une image.',
|
||||
'in' => 'Le champ :attribute est invalide.',
|
||||
'in_array' => "Le champ :attribute n'existe pas dans :other.",
|
||||
'integer' => 'Le champ :attribute doit être un entier.',
|
||||
'ip' => 'Le champ :attribute doit être une adresse IP valide.',
|
||||
'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.',
|
||||
'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.',
|
||||
'json' => 'Le champ :attribute doit être un document JSON valide.',
|
||||
'lt' => [
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir moins de :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir moins de :value éléments.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.',
|
||||
'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au plus :value caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au plus :value éléments.',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => 'La valeur de :attribute ne peut être supérieure à :max.',
|
||||
'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.',
|
||||
'string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.',
|
||||
'array' => 'Le tableau :attribute ne peut contenir plus de :max éléments.',
|
||||
],
|
||||
'mimes' => 'Le champ :attribute doit être un fichier de type : :values.',
|
||||
'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.',
|
||||
'min' => [
|
||||
'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.',
|
||||
'file' => 'La taille du fichier de :attribute doit être supérieure à :min kilo-octets.',
|
||||
'string' => 'Le texte :attribute doit contenir au moins :min caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir au moins :min éléments.',
|
||||
],
|
||||
'not_in' => "Le champ :attribute sélectionné n'est pas valide.",
|
||||
'not_regex' => "Le format du champ :attribute n'est pas valide.",
|
||||
'numeric' => 'Le champ :attribute doit contenir un nombre.',
|
||||
'present' => 'Le champ :attribute doit être présent.',
|
||||
'regex' => 'Le format du champ :attribute est invalide.',
|
||||
'required' => 'Le champ :attribute est obligatoire.',
|
||||
'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.',
|
||||
'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.',
|
||||
'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.',
|
||||
'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.',
|
||||
'required_without' => "Le champ :attribute est obligatoire quand :values n'est pas présent.",
|
||||
'required_without_all' => "Le champ :attribute est requis quand aucun de :values n'est présent.",
|
||||
'same' => 'Les champs :attribute et :other doivent être identiques.',
|
||||
'size' => [
|
||||
'numeric' => 'La valeur de :attribute doit être :size.',
|
||||
'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.',
|
||||
'string' => 'Le texte de :attribute doit contenir :size caractères.',
|
||||
'array' => 'Le tableau :attribute doit contenir :size éléments.',
|
||||
],
|
||||
'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values',
|
||||
'string' => 'Le champ :attribute doit être une chaîne de caractères.',
|
||||
'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.',
|
||||
'unique' => 'La valeur du champ :attribute est déjà utilisée.',
|
||||
'uploaded' => "Le fichier du champ :attribute n'a pu être téléversé.",
|
||||
'url' => "Le format de l'URL de :attribute n'est pas valide.",
|
||||
'uuid' => 'Le champ :attribute doit être un UUID valide',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [
|
||||
'name' => 'nom',
|
||||
'username' => "nom d'utilisateur",
|
||||
'email' => 'adresse email',
|
||||
'first_name' => 'prénom',
|
||||
'last_name' => 'nom',
|
||||
'password' => 'mot de passe',
|
||||
'password_confirmation' => 'confirmation du mot de passe',
|
||||
'city' => 'ville',
|
||||
'country' => 'pays',
|
||||
'address' => 'adresse',
|
||||
'phone' => 'téléphone',
|
||||
'mobile' => 'portable',
|
||||
'age' => 'âge',
|
||||
'sex' => 'sexe',
|
||||
'gender' => 'genre',
|
||||
'day' => 'jour',
|
||||
'month' => 'mois',
|
||||
'year' => 'année',
|
||||
'hour' => 'heure',
|
||||
'minute' => 'minute',
|
||||
'second' => 'seconde',
|
||||
'title' => 'titre',
|
||||
'content' => 'contenu',
|
||||
'description' => 'description',
|
||||
'excerpt' => 'extrait',
|
||||
'date' => 'date',
|
||||
'time' => 'heure',
|
||||
'available' => 'disponible',
|
||||
'size' => 'taille',
|
||||
],
|
||||
];
|
||||
19
resources/sass/_variables.scss
vendored
|
|
@ -1,19 +0,0 @@
|
|||
|
||||
// Body
|
||||
$body-bg: #f8fafc;
|
||||
|
||||
// Typography
|
||||
$font-size-base: 0.9rem;
|
||||
$line-height-base: 1.6;
|
||||
|
||||
// Colors
|
||||
$blue: #3490dc;
|
||||
$indigo: #6574cd;
|
||||
$purple: #9561e2;
|
||||
$pink: #f66D9b;
|
||||
$red: #e3342f;
|
||||
$orange: #f6993f;
|
||||
$yellow: #ffed4a;
|
||||
$green: #38c172;
|
||||
$teal: #4dc0b5;
|
||||
$cyan: #6cb2eb;
|
||||
12
resources/sass/app.scss
vendored
|
|
@ -1,3 +1,13 @@
|
|||
|
||||
// Variables
|
||||
@import 'variables';
|
||||
@import 'partials/app_variables.scss',
|
||||
'partials/reset.scss',
|
||||
'partials/animate.scss',
|
||||
'partials/fontawesome/fontawesome.scss',
|
||||
'partials/fontawesome/solid.scss',
|
||||
'partials/fontawesome/regular.scss',
|
||||
'partials/fontawesome/light.scss',
|
||||
'partials/fontawesome/brands.scss',
|
||||
'partials/common.scss',
|
||||
'partials/form.scss',
|
||||
'partials/user.scss';
|
||||
|
|
|
|||
3623
resources/sass/partials/animate.scss
vendored
Normal file
30
resources/sass/partials/app_variables.scss
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
// Colors
|
||||
$grey2: #aaaaaa;
|
||||
$grey: #3b3b3b;
|
||||
$grey3: #333333;
|
||||
$dark: #1a1a1a;
|
||||
$lightdark: #272626;
|
||||
$black : #000000;
|
||||
$blue: #0a6fb7;
|
||||
$lightblue: #2489D1;
|
||||
$white: #ffffff;
|
||||
|
||||
|
||||
|
||||
$indigo: #6574cd;
|
||||
$purple: #9561e2;
|
||||
$pink: #f66D9b;
|
||||
$red: #e3342f;
|
||||
$orange: #f6993f;
|
||||
$yellow: #ffed4a;
|
||||
$green: #38c172;
|
||||
$teal: #4dc0b5;
|
||||
$cyan: #6cb2eb;
|
||||
|
||||
|
||||
$xs-phone: 320px;
|
||||
$phone: 480px;
|
||||
$tablet: 790px;
|
||||
$desktop: 1024px;
|
||||
$widescreen: 1200px;
|
||||
325
resources/sass/partials/common.scss
vendored
Normal file
|
|
@ -0,0 +1,325 @@
|
|||
|
||||
/******************************************
|
||||
HEADER
|
||||
******************************************/
|
||||
.mainheader{
|
||||
background-color: $grey;
|
||||
height: 48px;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
nav{
|
||||
a{
|
||||
font-size: 14px;
|
||||
padding: 13px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
transition: color 100ms ease-in;
|
||||
|
||||
&:hover{
|
||||
color: $white;
|
||||
}
|
||||
|
||||
i{
|
||||
font-size: 19px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
&:first-child{
|
||||
i{
|
||||
font-size: 23px;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
&.active{
|
||||
color: $white;
|
||||
background-color: $grey3;
|
||||
|
||||
&:after{
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
background-color: $blue;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.userbar{
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
right: 0;
|
||||
top:0;
|
||||
font-size: 14px;
|
||||
color: $white;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 10px 15px;
|
||||
|
||||
i.fa-user-circle{
|
||||
font-size: 28px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
i.fa-caret-down{
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.submenu{
|
||||
background-color: $grey3;
|
||||
position: absolute;
|
||||
top: 48px;
|
||||
width: 205px;
|
||||
right: 0;
|
||||
z-index: 2;
|
||||
display: none;
|
||||
|
||||
a{
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #505050;
|
||||
display: block;
|
||||
font-size: 13px;
|
||||
transition: background-color 200ms ease-in;
|
||||
|
||||
&:last-of-type{
|
||||
border: none;
|
||||
}
|
||||
&:hover{
|
||||
background-color: #505050;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
FANCYBOX
|
||||
******************************************/
|
||||
.fancybox-active{
|
||||
height: inherit;
|
||||
}
|
||||
.fancybox-content{
|
||||
background-color: #24272e;
|
||||
max-width : 700px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.fc-content{
|
||||
padding: 30px;
|
||||
|
||||
h3{
|
||||
font-size: 14px;
|
||||
margin-bottom: 12px;
|
||||
font-weight: bold;
|
||||
color: $white;
|
||||
}
|
||||
hr{
|
||||
color: #24272e;
|
||||
border-bottom: 1px solid #2c2f36;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
i{
|
||||
display: block;
|
||||
color: #0a6fb7;
|
||||
font-size: 71px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
p{
|
||||
color: white;
|
||||
margin: 37px;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
}
|
||||
p.button_bar{
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&.info{
|
||||
.fa-exclamation-triangle{
|
||||
display: none;
|
||||
}
|
||||
.fa-info-circle{
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
&.error{
|
||||
.fa-exclamation-triangle{
|
||||
display: block;
|
||||
color: $red;
|
||||
}
|
||||
.fa-info-circle{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
#form_contact{
|
||||
padding: 30px;
|
||||
|
||||
h3{
|
||||
font-size: 14px;
|
||||
margin-bottom: 12px;
|
||||
font-weight: bold;
|
||||
color: $white;
|
||||
}
|
||||
hr{
|
||||
color: #24272e;
|
||||
border-bottom: 1px solid #2c2f36;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.desc{
|
||||
text-align: justify;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
p.button_bar{
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
}
|
||||
select, input, textarea{
|
||||
width: 100%;
|
||||
}
|
||||
textarea{
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.btn{
|
||||
margin-right: 10px;
|
||||
}
|
||||
.form_contact_send{
|
||||
.fa-spinner-third{
|
||||
display: none;
|
||||
}
|
||||
&.loading{
|
||||
.fa-spinner-third{
|
||||
display: inline-block;
|
||||
}
|
||||
.fa-share{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.form_contact_ok{
|
||||
display: none;
|
||||
background-color: $green;
|
||||
padding: 15px;
|
||||
color: $white;
|
||||
font-size: 15px;
|
||||
i{
|
||||
font-size: 22px;
|
||||
margin-right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
.form_contact_ko, .form_contact_check_ko{
|
||||
display: none;
|
||||
background-color: $red;
|
||||
padding: 15px;
|
||||
color: $white;
|
||||
font-size: 15px;
|
||||
i{
|
||||
font-size: 22px;
|
||||
margin-right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
TEMPLATE
|
||||
******************************************/
|
||||
|
||||
.template_2col{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
min-height: calc(100% - 48px);
|
||||
|
||||
.main_content{
|
||||
padding: 15px 30px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
SIDE MENU
|
||||
******************************************/
|
||||
.side_menu{
|
||||
background-color: $dark;
|
||||
width: 300px;
|
||||
min-height: calc(100% - 48px);
|
||||
|
||||
a{
|
||||
padding: 20px 15px;
|
||||
border-bottom: 1px solid #505050;
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
transition: background-color 200ms ease-in;
|
||||
|
||||
&:last-of-type{
|
||||
border: none;
|
||||
}
|
||||
&:hover{
|
||||
background-color: $lightdark;
|
||||
}
|
||||
|
||||
i{
|
||||
float: right;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
&.active{
|
||||
background-color: $blue;
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
/******************************************
|
||||
HOME
|
||||
******************************************/
|
||||
|
||||
.home{
|
||||
.search{
|
||||
background: url("/images/home_bg.jpg");
|
||||
background-size: cover;
|
||||
width: 100%;
|
||||
height: 380px;
|
||||
position: relative;
|
||||
|
||||
.container{
|
||||
left: 50%;
|
||||
top:50%;
|
||||
transform: translate(-50%, -50%);
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: 560px;
|
||||
|
||||
h1{
|
||||
color: $white;
|
||||
font-size: 71px;
|
||||
i{
|
||||
|
||||
}
|
||||
}
|
||||
.input_search{
|
||||
margin-top: 20px;
|
||||
position: relative;
|
||||
|
||||
input{
|
||||
width: 100%;
|
||||
font-size: 17px;
|
||||
padding: 12px 48px 12px 14px;
|
||||
}
|
||||
button{
|
||||
border: none;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
background-color: transparent;
|
||||
color: $grey2;
|
||||
font-size: 25px;
|
||||
padding: 8px 15px 8px 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
20
resources/sass/partials/fontawesome/_animated.scss
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// Animated Icons
|
||||
// --------------------------
|
||||
|
||||
.#{$fa-css-prefix}-spin {
|
||||
animation: fa-spin 2s infinite linear;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-pulse {
|
||||
animation: fa-spin 1s infinite steps(8);
|
||||
}
|
||||
|
||||
@keyframes fa-spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
20
resources/sass/partials/fontawesome/_bordered-pulled.scss
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// Bordered & Pulled
|
||||
// -------------------------
|
||||
|
||||
.#{$fa-css-prefix}-border {
|
||||
border: solid .08em $fa-border-color;
|
||||
border-radius: .1em;
|
||||
padding: .2em .25em .15em;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-pull-left { float: left; }
|
||||
.#{$fa-css-prefix}-pull-right { float: right; }
|
||||
|
||||
.#{$fa-css-prefix},
|
||||
.fas,
|
||||
.far,
|
||||
.fal,
|
||||
.fab {
|
||||
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
|
||||
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
|
||||
}
|
||||
20
resources/sass/partials/fontawesome/_core.scss
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// Base Class Definition
|
||||
// -------------------------
|
||||
|
||||
.#{$fa-css-prefix},
|
||||
.fas,
|
||||
.far,
|
||||
.fal,
|
||||
.fab {
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
display: inline-block;
|
||||
font-style: normal;
|
||||
font-variant: normal;
|
||||
text-rendering: auto;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
%fa-icon {
|
||||
@include fa-icon;
|
||||
}
|
||||
6
resources/sass/partials/fontawesome/_fixed-width.scss
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
// Fixed Width Icons
|
||||
// -------------------------
|
||||
.#{$fa-css-prefix}-fw {
|
||||
text-align: center;
|
||||
width: $fa-fw-width;
|
||||
}
|
||||
1987
resources/sass/partials/fontawesome/_icons.scss
vendored
Normal file
23
resources/sass/partials/fontawesome/_larger.scss
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// Icon Sizes
|
||||
// -------------------------
|
||||
|
||||
// makes the font 33% larger relative to the icon container
|
||||
.#{$fa-css-prefix}-lg {
|
||||
font-size: (4em / 3);
|
||||
line-height: (3em / 4);
|
||||
vertical-align: -.0667em;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-xs {
|
||||
font-size: .75em;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-sm {
|
||||
font-size: .875em;
|
||||
}
|
||||
|
||||
@for $i from 1 through 10 {
|
||||
.#{$fa-css-prefix}-#{$i}x {
|
||||
font-size: $i * 1em;
|
||||
}
|
||||
}
|
||||
18
resources/sass/partials/fontawesome/_list.scss
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
// List Icons
|
||||
// -------------------------
|
||||
|
||||
.#{$fa-css-prefix}-ul {
|
||||
list-style-type: none;
|
||||
margin-left: $fa-li-width * 5/4;
|
||||
padding-left: 0;
|
||||
|
||||
> li { position: relative; }
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-li {
|
||||
left: -$fa-li-width;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: $fa-li-width;
|
||||
line-height: inherit;
|
||||
}
|
||||
56
resources/sass/partials/fontawesome/_mixins.scss
vendored
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
// Mixins
|
||||
// --------------------------
|
||||
|
||||
@mixin fa-icon {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
display: inline-block;
|
||||
font-style: normal;
|
||||
font-variant: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
@mixin fa-icon-rotate($degrees, $rotation) {
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
|
||||
transform: rotate($degrees);
|
||||
}
|
||||
|
||||
@mixin fa-icon-flip($horiz, $vert, $rotation) {
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
|
||||
transform: scale($horiz, $vert);
|
||||
}
|
||||
|
||||
|
||||
// Only display content to screen readers. A la Bootstrap 4.
|
||||
//
|
||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
||||
|
||||
@mixin sr-only {
|
||||
border: 0;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
// Use in conjunction with .sr-only to only display content when it's focused.
|
||||
//
|
||||
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
|
||||
//
|
||||
// Credit: HTML5 Boilerplate
|
||||
|
||||
@mixin sr-only-focusable {
|
||||
&:active,
|
||||
&:focus {
|
||||
clip: auto;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
position: static;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
24
resources/sass/partials/fontawesome/_rotated-flipped.scss
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
// Rotated & Flipped Icons
|
||||
// -------------------------
|
||||
|
||||
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
|
||||
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
|
||||
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
|
||||
|
||||
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
|
||||
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
|
||||
.#{$fa-css-prefix}-flip-both, .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); }
|
||||
|
||||
// Hook for IE8-9
|
||||
// -------------------------
|
||||
|
||||
:root {
|
||||
.#{$fa-css-prefix}-rotate-90,
|
||||
.#{$fa-css-prefix}-rotate-180,
|
||||
.#{$fa-css-prefix}-rotate-270,
|
||||
.#{$fa-css-prefix}-flip-horizontal,
|
||||
.#{$fa-css-prefix}-flip-vertical,
|
||||
.#{$fa-css-prefix}-flip-both {
|
||||
filter: none;
|
||||
}
|
||||
}
|
||||
5
resources/sass/partials/fontawesome/_screen-reader.scss
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
// Screen Readers
|
||||
// -------------------------
|
||||
|
||||
.sr-only { @include sr-only; }
|
||||
.sr-only-focusable { @include sr-only-focusable; }
|
||||
2062
resources/sass/partials/fontawesome/_shims.scss
vendored
Normal file
31
resources/sass/partials/fontawesome/_stacked.scss
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
// Stacked Icons
|
||||
// -------------------------
|
||||
|
||||
.#{$fa-css-prefix}-stack {
|
||||
display: inline-block;
|
||||
height: 2em;
|
||||
line-height: 2em;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
width: ($fa-fw-width*2);
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-stack-1x,
|
||||
.#{$fa-css-prefix}-stack-2x {
|
||||
left: 0;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-stack-1x {
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-stack-2x {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.#{$fa-css-prefix}-inverse {
|
||||
color: $fa-inverse;
|
||||
}
|
||||
2002
resources/sass/partials/fontawesome/_variables.scss
vendored
Normal file
22
resources/sass/partials/fontawesome/brands.scss
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
/*!
|
||||
* Font Awesome Pro 5.8.1 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license (Commercial License)
|
||||
*/
|
||||
@import 'variables';
|
||||
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 5 Brands';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-display: $fa-font-display;
|
||||
src: url('#{$fa-font-path}/fa-brands-400.eot');
|
||||
src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
|
||||
url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
|
||||
url('#{$fa-font-path}/fa-brands-400.woff') format('woff'),
|
||||
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'),
|
||||
url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
|
||||
}
|
||||
|
||||
.fab {
|
||||
font-family: 'Font Awesome 5 Brands';
|
||||
}
|
||||
16
resources/sass/partials/fontawesome/fontawesome.scss
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
/*!
|
||||
* Font Awesome Pro 5.8.1 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license (Commercial License)
|
||||
*/
|
||||
@import 'variables';
|
||||
@import 'mixins';
|
||||
@import 'core';
|
||||
@import 'larger';
|
||||
@import 'fixed-width';
|
||||
@import 'list';
|
||||
@import 'bordered-pulled';
|
||||
@import 'animated';
|
||||
@import 'rotated-flipped';
|
||||
@import 'stacked';
|
||||
@import 'icons';
|
||||
@import 'screen-reader';
|
||||
23
resources/sass/partials/fontawesome/light.scss
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/*!
|
||||
* Font Awesome Pro 5.8.1 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license (Commercial License)
|
||||
*/
|
||||
@import 'variables';
|
||||
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 5 Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: $fa-font-display;
|
||||
src: url('#{$fa-font-path}/fa-light-300.eot');
|
||||
src: url('#{$fa-font-path}/fa-light-300.eot?#iefix') format('embedded-opentype'),
|
||||
url('#{$fa-font-path}/fa-light-300.woff2') format('woff2'),
|
||||
url('#{$fa-font-path}/fa-light-300.woff') format('woff'),
|
||||
url('#{$fa-font-path}/fa-light-300.ttf') format('truetype'),
|
||||
url('#{$fa-font-path}/fa-light-300.svg#fontawesome') format('svg');
|
||||
}
|
||||
|
||||
.fal {
|
||||
font-family: 'Font Awesome 5 Pro';
|
||||
font-weight: 300;
|
||||
}
|
||||
23
resources/sass/partials/fontawesome/regular.scss
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/*!
|
||||
* Font Awesome Pro 5.8.1 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license (Commercial License)
|
||||
*/
|
||||
@import 'variables';
|
||||
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 5 Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: $fa-font-display;
|
||||
src: url('#{$fa-font-path}/fa-regular-400.eot');
|
||||
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
|
||||
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
|
||||
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
|
||||
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
|
||||
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
|
||||
}
|
||||
|
||||
.far {
|
||||
font-family: 'Font Awesome 5 Pro';
|
||||
font-weight: 400;
|
||||
}
|
||||
24
resources/sass/partials/fontawesome/solid.scss
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/*!
|
||||
* Font Awesome Pro 5.8.1 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license (Commercial License)
|
||||
*/
|
||||
@import 'variables';
|
||||
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 5 Pro';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: $fa-font-display;
|
||||
src: url('#{$fa-font-path}/fa-solid-900.eot');
|
||||
src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
|
||||
url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
|
||||
url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
|
||||
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
|
||||
url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
|
||||
}
|
||||
|
||||
.fa,
|
||||
.fas {
|
||||
font-family: 'Font Awesome 5 Pro';
|
||||
font-weight: 900;
|
||||
}
|
||||
6
resources/sass/partials/fontawesome/v4-shims.scss
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/*!
|
||||
* Font Awesome Pro 5.8.1 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license (Commercial License)
|
||||
*/
|
||||
@import 'variables';
|
||||
@import 'shims';
|
||||
262
resources/sass/partials/form.scss
vendored
Normal file
|
|
@ -0,0 +1,262 @@
|
|||
/******************************************
|
||||
FORM
|
||||
******************************************/
|
||||
|
||||
p{
|
||||
color: $grey2;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"], , input[type="email"], input[type="url"], select{
|
||||
border-radius: 3px;
|
||||
padding: 5px 10px;
|
||||
border: none;
|
||||
|
||||
&.is-invalid{
|
||||
border: 1px solid #D50C0C;
|
||||
}
|
||||
}
|
||||
textarea{
|
||||
font-family: "Arial", sans-serif;
|
||||
border-radius: 3px;
|
||||
padding: 8px 10px;
|
||||
font-size: 13px;
|
||||
border: none;
|
||||
|
||||
&.is-invalid{
|
||||
border: 1px solid #D50C0C;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="submit"].btn, button.btn, a.btn{
|
||||
border-radius: 17px;
|
||||
padding: 9px 19px;
|
||||
border: none;
|
||||
color: $white;
|
||||
background-color: $blue;
|
||||
transition: background-color 200ms ease-in;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover{
|
||||
background-color: $lightblue;
|
||||
}
|
||||
|
||||
&.btn-black{
|
||||
background-color: $dark;
|
||||
&:hover{
|
||||
background-color: $lightdark;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-red{
|
||||
background-color: $red;
|
||||
&:hover{
|
||||
background-color: $red;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-square{
|
||||
border-radius: 2px;
|
||||
padding: 8px 14px;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.ml-10{margin-left: 10px; }
|
||||
.mr-10{margin-right: 10px; }
|
||||
.floatr{float: right;}
|
||||
.floatl{float: left;}
|
||||
.tright{text-align: right;}
|
||||
.tleft{text-align: left;}
|
||||
.tcenter{text-align: center;}
|
||||
|
||||
.alert{
|
||||
color: $white;
|
||||
padding:10px;
|
||||
margin-bottom:10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
i{
|
||||
font-size: 26px;
|
||||
margin-right: 18px;
|
||||
}
|
||||
&.alert-danger {
|
||||
background-color:$red;
|
||||
}
|
||||
&.alert-ok {
|
||||
background-color:$green;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.invalid-feedback{
|
||||
color: $red;
|
||||
margin: 7px 0;
|
||||
display: block;
|
||||
}
|
||||
a{
|
||||
color: $grey2;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
.heading{
|
||||
margin-bottom: 30px;
|
||||
|
||||
a{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
h1{
|
||||
color: $white;
|
||||
font-size: 24px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.group:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.filter_row{
|
||||
margin-bottom: 10px;
|
||||
.right_col{
|
||||
float: right;
|
||||
}
|
||||
.left_col{
|
||||
float: left;
|
||||
}
|
||||
a{
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
table{
|
||||
width: 100%;
|
||||
background-color: $dark;
|
||||
|
||||
th{
|
||||
background-color: $lightdark;
|
||||
font-weight: bold;
|
||||
color: $white;
|
||||
}
|
||||
td, th{
|
||||
padding: 15px 7px;
|
||||
text-align: left;
|
||||
|
||||
a{
|
||||
color: $lightblue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
tr{
|
||||
border-bottom: 1px solid #505050;
|
||||
&:hover{
|
||||
background-color: $lightdark;
|
||||
}
|
||||
}
|
||||
tfoot tr{
|
||||
background-color: $lightdark;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dataform{
|
||||
|
||||
.form-field{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 10px;
|
||||
width: 600px;
|
||||
position: relative;
|
||||
|
||||
i.loader{
|
||||
position: relative;
|
||||
right: 24px;
|
||||
color: $blue;
|
||||
font-size: 19px;
|
||||
}
|
||||
|
||||
input, select, textarea{
|
||||
width: 255px;
|
||||
}
|
||||
label{
|
||||
min-width: 123px;
|
||||
}
|
||||
}
|
||||
.form-section{
|
||||
margin-top: 20px;
|
||||
|
||||
label{
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
.selector_form{
|
||||
width: 100%;
|
||||
|
||||
.selector_filter{
|
||||
width: 100%;
|
||||
border: #DFDFDF solid 1px;
|
||||
border-radius: 0;
|
||||
padding: 12px 11px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.selector_list{
|
||||
display: flex;
|
||||
border: #DFDFDF solid 1px;
|
||||
.selector_choices{
|
||||
border-right: #DFDFDF solid 1px;
|
||||
}
|
||||
.selector_values{
|
||||
|
||||
li:hover:after{
|
||||
content: "\f056";
|
||||
font-family: "Font Awesome 5 Pro";
|
||||
font-weight: 900;
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
font-size: 15px;
|
||||
}
|
||||
}
|
||||
.selector_values, .selector_choices{
|
||||
background-color: $white;
|
||||
width: 50%;
|
||||
height: 152px;
|
||||
overflow-y: auto;
|
||||
|
||||
li{
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
padding: 6px 5px;
|
||||
color: $black;
|
||||
background-color: $white;
|
||||
|
||||
&:hover{
|
||||
background-color: $blue;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
&.selected{
|
||||
color: $grey2;
|
||||
|
||||
&:hover{
|
||||
color: $grey2;
|
||||
background-color: $white;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.button-row{
|
||||
border-top: 1px solid #505050;
|
||||
padding: 15px;
|
||||
width: 100%;
|
||||
margin-top: 25px;
|
||||
}
|
||||
}
|
||||
63
resources/sass/partials/reset.scss
vendored
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html {
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
background-image: linear-gradient(139deg, #3d3d3d 37.50%, #262626 37.50%, #262626 50%, #3d3d3d 50%, #3d3d3d 87.50%, #262626 87.50%, #262626 100%);
|
||||
font-family: "Arial", sans-serif;
|
||||
font-size: 13px;
|
||||
color: $grey2;
|
||||
background-size: 6.10px 5.30px;
|
||||
height: 100%;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
*, *:before, *:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
81
resources/sass/partials/user.scss
vendored
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
/******************************************
|
||||
PAGE LOGIN
|
||||
******************************************/
|
||||
.login_container{
|
||||
width: 100%;
|
||||
max-width: 795px;
|
||||
min-height: 460px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
left: 50%;
|
||||
top:50%;
|
||||
transform: translate(-50%, -50%);
|
||||
position: absolute;
|
||||
background-color: $grey;
|
||||
|
||||
@media screen and (max-width: $tablet) {
|
||||
flex-direction: column;
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
.col{
|
||||
width: 50%;
|
||||
|
||||
@media screen and (max-width: $tablet) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
h1{
|
||||
font-size: 32px;
|
||||
color: $white;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
p{
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
&:first-child{
|
||||
background: url("/images/login_bg.jpg");
|
||||
background-size: cover;
|
||||
text-align: center;
|
||||
|
||||
@media screen and (max-width: $tablet) {
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
h2{
|
||||
font-size: 25px;
|
||||
color: $white;
|
||||
|
||||
@media screen and (max-width: $tablet) {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
img{
|
||||
margin-top: 120px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
@media screen and (max-width: $tablet) {
|
||||
margin-top: 0px;
|
||||
width: 80px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
&:last-child{
|
||||
padding: 10% 7% 0 7%;
|
||||
|
||||
input[type="text"], input[type="password"]{
|
||||
width: 100%;
|
||||
padding: 8px 10px;
|
||||
}
|
||||
.admin_link{
|
||||
margin-top: 86px;
|
||||
}
|
||||
a{
|
||||
color: $blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,73 +1,52 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Login') }}</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('login') }}">
|
||||
@csrf
|
||||
<div class="login_container animated fadeIn">
|
||||
<div class="col">
|
||||
<img src="{!! asset('images/ldc-logo.png') !!}" alt="">
|
||||
<h2>Gestion des médias</h2>
|
||||
</div>
|
||||
<div class="col">
|
||||
<form method="POST" action="{{ route('login') }}">
|
||||
@csrf
|
||||
<h1>Connectez-vous</h1>
|
||||
<p>Pour vous connecter, merci d’entrer votre login et votre mot de passe.</p>
|
||||
<p>
|
||||
<input id="matricule" type="text" class="form-control{{ $errors->has('matricule') ? ' is-invalid' : '' }}" name="matricule" value="{{ old('matricule') }}" placeholder="Login" required autofocus>
|
||||
@if ($errors->has('matricule'))
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $errors->first('matricule') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</p>
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="matricule" class="col-md-4 col-form-label text-md-right">{{ __('Matricule') }}</label>
|
||||
<p>
|
||||
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" placeholder="Mot de passe" required>
|
||||
@if ($errors->has('password'))
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $errors->first('password') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</p>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="matricule" type="text" class="form-control{{ $errors->has('matricule') ? ' is-invalid' : '' }}" name="matricule" value="{{ old('matricule') }}" required autofocus>
|
||||
<p>
|
||||
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="remember">Se souvenir de moi </label>
|
||||
</p>
|
||||
|
||||
@if ($errors->has('matricule'))
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $errors->first('matricule') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
|
||||
|
||||
@if ($errors->has('password'))
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $errors->first('password') }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
|
||||
|
||||
<label class="form-check-label" for="remember">
|
||||
{{ __('Remember Me') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mb-0">
|
||||
<div class="col-md-8 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Login') }}
|
||||
</button>
|
||||
|
||||
@if (Route::has('password.request'))
|
||||
<a class="btn btn-link" href="{{ route('password.request') }}">
|
||||
{{ __('Forgot Your Password?') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>
|
||||
<button type="submit" class="btn">Se connecter <i class="fal fa-long-arrow-right"></i></button>
|
||||
@if (Route::has('password.request'))
|
||||
<a class="btn btn-link" href="{{ route('password.request') }}">
|
||||
{{ __('Forgot Your Password?') }}
|
||||
</a>
|
||||
@endif
|
||||
</p>
|
||||
<p class="admin_link">
|
||||
Vous n'avez pas d'accès ? <a target="_blank" href="mailto:informatique.internet@ldc.fr?subject=Demande d'accès au DAM">faites-en la demande</a>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -1,23 +1,15 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@include('layouts.header')
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">Dashboard</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('status'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('status') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
You are logged in!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<main class="home">
|
||||
<div class="search">
|
||||
<div class="container">
|
||||
<h1><i class="fas fa-images"></i> Bienvenue</h1>
|
||||
<form class="input_search" action="{{ route('media_manager') }}" method="get">
|
||||
<input type="text" name="s" value="" placeholder="Rechercher un média...">
|
||||
<button type="submit"><i class="far fa-search"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -3,79 +3,44 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ asset('js/app.js') }}" defer></script>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
|
||||
|
||||
<!-- Styles -->
|
||||
<!-- Styles -->
|
||||
<link href="{{ asset('css/jquery.fancybox.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="{{ url('/') }}">
|
||||
{{ config('app.name', 'Laravel') }}
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
@yield('header')
|
||||
@yield('content')
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<!-- Left Side Of Navbar -->
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<div id="form_contact" style="display: none;" >
|
||||
<h3><i class="fal fa-bug"></i> Signaler un problème / suggestion d'amélioration</h3>
|
||||
<hr/>
|
||||
<p class="form_contact_ok animated slideInDown"><i class="fal fa-check-circle"></i> Votre message a bien été envoyé !</p>
|
||||
<p class="form_contact_ko animated slideInDown"><i class="fal fa-exclamation-circle"></i> Une erreur est survenue. Merci de recommencer ultérieurement.</p>
|
||||
<p class="form_contact_check_ko animated slideInDown"><i class="fal fa-exclamation-circle"></i> Merci de compléter le formulaire.</p>
|
||||
<p class="desc">Nous sommes particulièrement attaché à vous apporter une plate-forme de qualité. Malgré un travail minutieux, de nombreux tests, il se peut que des bugs subsistent. D'avance nous vous remercions de nous signaler tous bugs que vous auriez pu rencontrer. Ces signalements ouvrent un ticket de support et nous aide à vous proposer un meilleur service.</p>
|
||||
<p>
|
||||
<select class="form_contact_type">
|
||||
<option value="1">Signaler un bug</option>
|
||||
<option value="2">Proposer une amélioration</option>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<input type="url" class="form_contact_url" value="" placeholder="Précisez une url si vous le souhaitez">
|
||||
</p>
|
||||
<p>
|
||||
<textarea required class="form_contact_message" placeholder="Votre message..."></textarea>
|
||||
</p>
|
||||
<hr/>
|
||||
<p class="button_bar">
|
||||
<a href="#" class="btn form_contact_send btn-square"><i class="fal fa-spinner-third fa-spin"></i><i class="fas fa-share"></i> Envoyer</a><a href="#" class="btn form_contact_close btn-black btn-square">Annuler</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Right Side Of Navbar -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<!-- Authentication Links -->
|
||||
@guest
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
|
||||
</li>
|
||||
@if (Route::has('register'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@else
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
{{ Auth::user()->name }} <span class="caret"></span>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
|
||||
<a class="dropdown-item" href="{{ route('logout') }}"
|
||||
onclick="event.preventDefault();
|
||||
document.getElementById('logout-form').submit();">
|
||||
{{ __('Logout') }}
|
||||
</a>
|
||||
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
@endguest
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="py-4">
|
||||
@yield('content')
|
||||
</main>
|
||||
</div>
|
||||
@yield('script')
|
||||
<!-- Scripts -->
|
||||
<script src="{{ asset('js/jquery.fancybox.min.js') }}" defer></script>
|
||||
<script src="{{ asset('js/app.js') }}"></script>
|
||||
@yield('scripts')
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
27
resources/views/layouts/header.blade.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
@section('header')
|
||||
<header class="mainheader">
|
||||
<nav>
|
||||
<a href="{{ url('/') }}" class="{{(Route::currentRouteName() == 'home') ? 'active' : '' }}">
|
||||
<i class="fas fa-home"></i>
|
||||
</a>
|
||||
<a href="{{ route('media_manager') }}" class="{{(Route::currentRouteName() == 'media_manager') ? 'active' : '' }}">
|
||||
<i class="fas fa-images"></i> Gestion des média
|
||||
</a>
|
||||
</nav>
|
||||
<div class="userbar">
|
||||
<i class="fas fa-user-circle"></i> {{ Auth::user()->firstname." ".Auth::user()->lastname}} <i class="fas fa-caret-down"></i>
|
||||
<div class="submenu">
|
||||
<a href="{{ route('user.show', Auth::user()) }}" >Mes informations</a>
|
||||
<a class="contact_btn" data-subjectId="1" href="javascript:;" >Signaler un problème</a>
|
||||
<a class="contact_btn" data-subjectId="2" href="javascript:;" >Suggérer une amélioration</a>
|
||||
@if (Auth::user()->hasRole(config('roles.const.ADMIN')))
|
||||
<a href="{{ route('user.index') }}" >Paramétrage</a>
|
||||
@endif
|
||||
<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Déconnexion</a>
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
@endsection
|
||||
20
resources/views/mails/contact.blade.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<div style='height:20px; background-color: #393939;'></div>
|
||||
<p style='font-family: arial; font-size:13px; text-align: left; color: #393939;'>Message de {{$user->firstname." ".$user->lastname." (".$user->email.")"}}</p><br/>
|
||||
|
||||
<p style='font-family: arial; font-size:13px; text-align: left; color: #393939;'>
|
||||
Type de demande : </br>
|
||||
Url de la page : </br></br>
|
||||
Message : </br>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
7
resources/views/media_manager.blade.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
@extends('layouts.app')
|
||||
@include('layouts.header')
|
||||
@section('content')
|
||||
<main class="media_manager">
|
||||
|
||||
</main>
|
||||
@endsection
|
||||
106
resources/views/users/create.blade.php
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
@extends('layouts.app')
|
||||
@include('layouts.header')
|
||||
@section('content')
|
||||
<main class="user_index template_2col">
|
||||
<div class="side_menu">
|
||||
<a class="active" href="{{ route('user.index') }}"><span>Gestion des utilisateurs</span><i class="fas fa-users-cog"></i></a>
|
||||
</div>
|
||||
<div class="main_content">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<i class="fas fa-times"></i>
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ __($error) }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
@if (session()->has('error'))
|
||||
<div class="alert alert-danger">
|
||||
<i class="fas fa-times"></i>
|
||||
<ul>
|
||||
<li>{{ Session::get('error') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
@if (session()->has('message'))
|
||||
<div class="alert alert-ok">
|
||||
<i class="fas fa-check"></i>
|
||||
<ul>
|
||||
<li>{{ Session::get('message') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<div class="heading">
|
||||
<h1>Ajouter un utilisateur</h1>
|
||||
</div>
|
||||
{!! Form::open( ['route' => 'user.store', 'class' => 'dataform']) !!}
|
||||
@method('POST')
|
||||
<div class="form-field">
|
||||
{!! Form::label('matricule', 'Matricule') !!}
|
||||
{!! Form::text('matricule', null, ['required', 'class' => 'check_matricule']) !!} <i style="display:none;" class="fal fa-cog fa-spin loader"></i>
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('firstname', 'Prénom') !!}
|
||||
{!! Form::text('firstname', null, ['required']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('lastname', 'Nom') !!}
|
||||
{!! Form::text('lastname', null, ['required']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('email', 'Email') !!}
|
||||
{!! Form::email('email', null, ['required']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('role', 'Rôle') !!}
|
||||
{!! Form::select('role', $roles) !!}
|
||||
</div>
|
||||
<div class="form-section">
|
||||
{!! Form::label('marques', 'Marques associées') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
<div class="selector_form selector_marques">
|
||||
{!! Form::text('search', null, ['class' => "selector_filter", 'placeholder' => "Rechercher...", "autocomplete" => "off"]) !!}
|
||||
<div class="selector_list">
|
||||
<ul class="selector_choices" >
|
||||
@foreach ($marques as $marque)
|
||||
<li data-value="{{$marque->COD_MARQUE}}" >{{$marque->LIBELLE}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<ul class="selector_values" >
|
||||
</ul>
|
||||
<input class="selector_dataValues" type="hidden" name="marques" value="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-section">
|
||||
{!! Form::label('sujets', 'Sujets disponibles') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
<div class="selector_form selector_sujets">
|
||||
{!! Form::text('search', null, ['class' => "selector_filter", 'placeholder' => "Rechercher...", "autocomplete" => "off"]) !!}
|
||||
<div class="selector_list">
|
||||
<ul class="selector_choices" >
|
||||
@foreach ($sujets as $sujet)
|
||||
<li data-value="{{$sujet->CODE_SUJET}}" >{{$sujet->LIBELLE}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<ul class="selector_values" >
|
||||
</ul>
|
||||
<input class="selector_dataValues" type="hidden" name="sujets" value="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="button-row">
|
||||
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('user.index') }}" class="btn btn-black ml-10">Annuler</a>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
119
resources/views/users/edit.blade.php
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
@extends('layouts.app')
|
||||
@include('layouts.header')
|
||||
@section('content')
|
||||
<main class="user_index template_2col">
|
||||
<div class="side_menu">
|
||||
<a class="active" href="{{ route('user.index') }}"><span>Gestion des utilisateurs</span><i class="fas fa-users-cog"></i></a>
|
||||
</div>
|
||||
<div class="main_content">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<i class="fas fa-times"></i>
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ __($error) }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
@if (session()->has('error'))
|
||||
<div class="alert alert-danger">
|
||||
<i class="fas fa-times"></i>
|
||||
<ul>
|
||||
<li>{{ Session::get('error') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
@if (session()->has('message'))
|
||||
<div class="alert alert-ok">
|
||||
<i class="fas fa-check"></i>
|
||||
<ul>
|
||||
<li>{{ Session::get('message') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<div class="heading">
|
||||
<h1>Edition d'un utilisateur</h1>
|
||||
</div>
|
||||
{!! Form::model($user, ['route' => ['user.update', $user], 'enctype' => 'multipart/form-data', 'class' => 'dataform']) !!}
|
||||
@method('PUT')
|
||||
<div class="form-field">
|
||||
{!! Form::label('matricule', 'Matricule') !!}
|
||||
{!! Form::text('matricule', $user->matricule, ['disabled']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('firstname', 'Prénom') !!}
|
||||
{!! Form::text('firstname', $user->firstname, ['required']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('lastname', 'Nom') !!}
|
||||
{!! Form::text('lastname', $user->lastname, ['required']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('email', 'Email') !!}
|
||||
{!! Form::email('email', $user->email, ['required']) !!}
|
||||
</div>
|
||||
<div class="form-section">
|
||||
{!! Form::label('role', 'Rôle') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
{!! Form::select('role', $roles) !!}
|
||||
</div>
|
||||
<div class="form-section">
|
||||
{!! Form::label('marques', 'Marques associées') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
<div class="selector_form selector_marques">
|
||||
{!! Form::text('search', null, ['class' => "selector_filter", 'placeholder' => "Rechercher...", "autocomplete" => "off"]) !!}
|
||||
<div class="selector_list">
|
||||
<ul class="selector_choices" >
|
||||
@foreach ($marques as $marque)
|
||||
<li data-value="{{$marque->COD_MARQUE}}" >{{$marque->LIBELLE}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<ul class="selector_values" >
|
||||
@foreach ($userMarques as $userMarque)
|
||||
<li data-value="{{$userMarque->COD_MARQUE}}" >{{$userMarque->LIBELLE}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<input class="selector_dataValues" type="hidden" name="marques" value="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-section">
|
||||
{!! Form::label('marques', 'Sujets disponibles') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
<div class="selector_form selector_sujets">
|
||||
{!! Form::text('search', null, ['class' => "selector_filter", 'placeholder' => "Rechercher...", "autocomplete" => "off"]) !!}
|
||||
<div class="selector_list">
|
||||
<ul class="selector_choices" >
|
||||
@foreach ($sujets as $sujet)
|
||||
<li data-value="{{$sujet->CODE_SUJET}}" >{{$sujet->LIBELLE}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<ul class="selector_values" >
|
||||
@foreach ($userSujets as $userSujet)
|
||||
<li data-value="{{$userSujet->CODE_SUJET}}" >{{$userSujet->LIBELLE}}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<input class="selector_dataValues" type="hidden" name="sujets" value="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="button-row">
|
||||
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('user.index') }}" class="btn btn-black ml-10">Annuler</a>
|
||||
<a href="#" class="btn btn-black floatr btn_delete_user">Supprimer cet utilisateur</a>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
{!! Form::model($user, ['route' => ['user.destroy', $user], 'enctype' => 'multipart/form-data', 'class' => 'deleteform']) !!}
|
||||
@method('DELETE')
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
56
resources/views/users/index.blade.php
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
@extends('layouts.app')
|
||||
@include('layouts.header')
|
||||
@section('content')
|
||||
<main class="user_index template_2col">
|
||||
<div class="side_menu">
|
||||
<a class="active" href="{{ route('user.index') }}"><span>Gestion des utilisateurs</span><i class="fas fa-users-cog"></i></a>
|
||||
</div>
|
||||
<div class="main_content">
|
||||
<div class="heading">
|
||||
<h1>Gestion des utilisateurs</h1>
|
||||
<a href="{{ route('user.create') }}" class=" btn"><i class="fal fa-plus"></i> Ajouter</a>
|
||||
</div>
|
||||
|
||||
<div class="filter_row group">
|
||||
<div class="left_col">
|
||||
<select class="filter_role" >
|
||||
<option value="0">Filtrer par rôle</option>
|
||||
@foreach (config('roles.label') as $key => $oneRole)
|
||||
<option value="{{$key}}">{{$oneRole}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<a href="#" class=" btn btn-black filter_role_btn">Ok</a>
|
||||
</div>
|
||||
<div class="right_col">
|
||||
<input type="text" value="" class="filter_user_input">
|
||||
<a href="#" class=" btn btn-black filter_user_btn">Rechercher un utilisateur</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="datatable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>IDENTIFIANT</th>
|
||||
<th>NOM</th>
|
||||
<th>EMAIL</th>
|
||||
<th>ROLE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@foreach ($users as $user)
|
||||
<tr class="data_row" attr-role="{{ $user->role}}">
|
||||
<td><a href="{{ route('user.edit', $user) }}">{{ $user->matricule }}</a></td>
|
||||
<td>{{ $user->firstname." ".$user->lastname }}</td>
|
||||
<td>{{ $user->email }}</td>
|
||||
<td>{{ $user->getRoleLabel()}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
70
resources/views/users/show.blade.php
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
@extends('layouts.app')
|
||||
@include('layouts.header')
|
||||
@section('content')
|
||||
<main class="user_index template_2col">
|
||||
<div class="side_menu">
|
||||
<a class="active" href="{{ route('user.index') }}"><span>Mes informations</span><i class="fas fa-user"></i></a>
|
||||
</div>
|
||||
<div class="main_content">
|
||||
<div class="heading">
|
||||
<h1>Mes informations</h1>
|
||||
</div>
|
||||
|
||||
{!! Form::model($user, ['route' => ['user.update', $user], 'enctype' => 'multipart/form-data', 'class' => 'dataform']) !!}
|
||||
@method('PUT')
|
||||
<div class="form-field">
|
||||
{!! Form::label('matricule', 'Matricule') !!}
|
||||
{!! Form::text('matricule', $user->matricule, ['disabled']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('firstname', 'Prénom') !!}
|
||||
{!! Form::text('firstname', $user->firstname, ['disabled']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('lastname', 'Nom') !!}
|
||||
{!! Form::text('lastname', $user->lastname, ['disabled']) !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label('email', 'Email') !!}
|
||||
{!! Form::email('email', $user->email, ['disabled']) !!}
|
||||
</div>
|
||||
<div class="form-section">
|
||||
{!! Form::label('role', 'Rôle') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
{!! Form::text('role', $user->getRoleLabel(), ['disabled']) !!}
|
||||
</div>
|
||||
<div class="form-section">
|
||||
{!! Form::label('marques', 'Marques associées') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
<select size="10" id="marques" name="marques" disabled>
|
||||
@foreach ($marques as $marque)
|
||||
<option value="{{$marque->COD_MARQUE}}" >{{$marque->LIBELLE}}</option>
|
||||
@endforeach
|
||||
<option selected="true" hidden ></option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-section">
|
||||
{!! Form::label('marques', 'Sujets disponibles') !!}
|
||||
</div>
|
||||
<div class="form-field">
|
||||
{!! Form::label("", "") !!}
|
||||
<select size="10" id="sujets" name="sujets" disabled>
|
||||
@foreach ($sujets as $sujet)
|
||||
<option value="{{$sujet->CODE_SUJET}}" >{{$sujet->LIBELLE}}</option>
|
||||
@endforeach
|
||||
<option selected="true" hidden ></option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-field button-row">
|
||||
<a href="{{ URL::previous() }}" class=" btn btn-black">Retour</a>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
</main>
|
||||
@endsection
|
||||
BIN
resources/webfonts/fa-brands-400.eot
Normal file
3459
resources/webfonts/fa-brands-400.svg
Normal file
|
After Width: | Height: | Size: 678 KiB |
BIN
resources/webfonts/fa-brands-400.ttf
Normal file
BIN
resources/webfonts/fa-brands-400.woff
Normal file
BIN
resources/webfonts/fa-brands-400.woff2
Normal file
BIN
resources/webfonts/fa-light-300.eot
Normal file
9901
resources/webfonts/fa-light-300.svg
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
resources/webfonts/fa-light-300.ttf
Normal file
BIN
resources/webfonts/fa-light-300.woff
Normal file
BIN
resources/webfonts/fa-light-300.woff2
Normal file
BIN
resources/webfonts/fa-regular-400.eot
Normal file
9103
resources/webfonts/fa-regular-400.svg
Normal file
|
After Width: | Height: | Size: 1.7 MiB |