From c90f87918b1239df21002eebb7583cdd9d47f672 Mon Sep 17 00:00:00 2001 From: FERGUI SAMY <samy.fergui@etu.unistra.fr> Date: Sun, 10 Apr 2022 05:45:01 +0200 Subject: [PATCH] =?UTF-8?q?finalisation=20de=20front,=20ajout=20de=20fonct?= =?UTF-8?q?ionnalit=C3=A9=20en=20back=20et=20gestion=20de=20la=20session?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/API/ArticleController.php | 128 ++++++++++++++++ .../Http/Controllers/API/UserController.php | 86 +++++++++-- backend/app/Models/User.php | 3 +- backend/app/Models/article.php | 20 +++ backend/database/factories/UserFactory.php | 1 + .../2014_10_12_000000_create_users_table.php | 4 +- ...022_03_29_101303_create_articles_table.php | 35 +++++ backend/routes/api.php | 27 ++++ frontend/package-lock.json | 32 +++- frontend/package.json | 2 + frontend/src/components/navbar.vue | 24 ++- frontend/src/main.js | 2 + frontend/src/router/index.js | 7 + frontend/src/views/affich_article.vue | 129 ++++++++++++++++ frontend/src/views/ajout_article.vue | 51 ++++++- frontend/src/views/article.vue | 138 ++++++++++++++++++ frontend/src/views/home.vue | 52 +++++-- frontend/src/views/info.vue | 112 ++++++++++++++ frontend/src/views/login.vue | 43 +++++- frontend/src/views/sign_up.vue | 38 ++++- 20 files changed, 893 insertions(+), 41 deletions(-) create mode 100644 backend/app/Http/Controllers/API/ArticleController.php create mode 100644 backend/app/Models/article.php create mode 100644 backend/database/migrations/2022_03_29_101303_create_articles_table.php create mode 100644 frontend/src/views/affich_article.vue diff --git a/backend/app/Http/Controllers/API/ArticleController.php b/backend/app/Http/Controllers/API/ArticleController.php new file mode 100644 index 0000000..9b0d1e6 --- /dev/null +++ b/backend/app/Http/Controllers/API/ArticleController.php @@ -0,0 +1,128 @@ +<?php + +namespace App\Http\Controllers\API; + +use App\Http\Controllers\Controller; +use App\Models\article; + +use Illuminate\Http\Request; +use Illuminate\Http\Response; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Facades\Session; + +class ArticleController extends Controller +{ + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + $article = DB::select('select * from articles' ); + return response()->json($article, 201); + + + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + + $article = [ + 'title' => $request->titre, + 'description' => $request->description, + 'text' => $request->text, + 'IDuser' => $request->IDuser, + + ]; + $art = article::create($article); + return response()->json($art, 201); + //return $request; + + + } + + /** + * Display the specified resource. + * + * @param \App\Models\User $use + * @return \Illuminate\Http\Response + */ + public function show($article) + { + // + // return article::find($user); + $arc = DB::select('select * from articles WHERE IDuser = :IDuser',['IDuser' => $article] ); + return response()->json($arc, 201); + + } + + public function get_article(Request $request, $id) + { + // + // return article::find($user); + try { + $arc = DB::select('select * from articles WHERE id = :id',['id' => $id] ); + return response()->json($arc, 201); + } catch(e) { + + } + + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\User $user + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $artic) + { + // + $ar = article::find($artic); + $ar->title = $request->title; + $ar->description = $request->description; + $ar->text = $request->text; + + $ar->save(); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\User $user + * @return \Illuminate\Http\Response + */ + public function destroy($user) + { + $artic = article::find($user); + $result = $artic->delete() ; + if ($result) return ["result"=>"test"]; + + // + //$user->delete(); + + } + + public function deleteall(User $user) { + $user->delete(); + } + + + + + + + + + +} diff --git a/backend/app/Http/Controllers/API/UserController.php b/backend/app/Http/Controllers/API/UserController.php index 313fcae..deea472 100644 --- a/backend/app/Http/Controllers/API/UserController.php +++ b/backend/app/Http/Controllers/API/UserController.php @@ -5,6 +5,13 @@ use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Http\Response; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Facades\Session; + + class UserController extends Controller { @@ -15,11 +22,20 @@ class UserController extends Controller */ public function index() { - // - $users = User::all(); + //Session::flash('clef', 'valeurs'); + + dd(Session::get('clef')); + //$users = DB::select('select * from users' ); + + + // dd($users); + // $user = DB::select('select * from users where name = "sdqdqdqdqdqdsq"'); + // dd($user); + + //return redirect()->route('check'); // On retourne les informations des utilisateurs en JSON - return response()->json($users); + //return 'test'; } @@ -32,11 +48,22 @@ public function index() public function store(Request $request) { // - $user = User::create([ + + // $validated = $request->validate([ + // 'name' => 'required|max:255', + // 'prenom' => 'required|max:255', + // 'email' => 'required|email', + // 'password' => 'required' + + // ]); + //dd(Cookie::get('user')); + $user = [ 'name' => $request->name, + 'prenom' => $request->prenom, 'email' => $request->email, - 'password' => $request->password - ]); + 'password'=> Hash::make($request->password), + ]; + $user = User::create($user); return response()->json($user, 201); //return $request; @@ -49,9 +76,11 @@ public function store(Request $request) * @param \App\Models\User $user * @return \Illuminate\Http\Response */ - public function show(User $user) + public function show($user) { - // + //affichage des article dun utilisateur specifique + $arc = DB::select('select * from users WHERE id = :id',['id' => $user] ); + return response()->json($arc, 201); } /** @@ -61,8 +90,15 @@ public function show(User $user) * @param \App\Models\User $user * @return \Illuminate\Http\Response */ - public function update(Request $request, User $user) + public function update(Request $request, $user) { + $usr = User::find($user); + $usr->email = $request->email; + $usr->name = $request->name; + $usr->prenom = $request->prenom; + + $usr->save(); + // } @@ -76,11 +112,41 @@ public function destroy(User $user) { // - $user->delete(); + //$user->delete(); } public function deleteall(User $user) { $user->delete(); } + + public function checkuser(Request $request) { + + //if (empty($user)) dd("fail"); else dd($user); + $hachpassword = DB::select('select password from users WHERE email = :email',['email' => $request->email] ); + $id = DB::select('select id from users WHERE email = :email',['email' => $request->email] ); + $name = DB::select('select name from users WHERE email = :email',['email' => $request->email] ); + //$kk = Hash::make($hachpassword[0]->password); + $combin = [ + $id, + $name, + ]; + if (Hash::check($request->password, $hachpassword[0]->password )) { + // $minute = 5; + // $response = new Response('Hello World'); + // $response->withCookie(cookie()->forever('user', 'love u')); + return response($combin, 200); + + } + return response('erreur', 504); + + + + } + + + + + + } diff --git a/backend/app/Models/User.php b/backend/app/Models/User.php index 8996368..d49ada9 100644 --- a/backend/app/Models/User.php +++ b/backend/app/Models/User.php @@ -11,14 +11,15 @@ class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; - /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ + 'name', + 'prenom', 'email', 'password', ]; diff --git a/backend/app/Models/article.php b/backend/app/Models/article.php new file mode 100644 index 0000000..560cb0b --- /dev/null +++ b/backend/app/Models/article.php @@ -0,0 +1,20 @@ +<?php + +namespace App\Models; + +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Model; + +class article extends Model +{ + use HasFactory; + + protected $fillable = [ + 'title', + 'description', + 'text', + 'IDuser' + + + ]; +} diff --git a/backend/database/factories/UserFactory.php b/backend/database/factories/UserFactory.php index 23b61d2..49dba51 100644 --- a/backend/database/factories/UserFactory.php +++ b/backend/database/factories/UserFactory.php @@ -18,6 +18,7 @@ class UserFactory extends Factory public function definition() { return [ + 'prenom' => $this->faker->prenom(), 'name' => $this->faker->name(), 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), diff --git a/backend/database/migrations/2014_10_12_000000_create_users_table.php b/backend/database/migrations/2014_10_12_000000_create_users_table.php index 3d856ea..1b1f797 100644 --- a/backend/database/migrations/2014_10_12_000000_create_users_table.php +++ b/backend/database/migrations/2014_10_12_000000_create_users_table.php @@ -16,11 +16,13 @@ public function up() Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); + $table->string('prenom'); + $table->string('email')->unique(); //$table->timestamp('email_verified_at')->nullable(); $table->string('password'); //$table->rememberToken(); - //$table->timestamps(); + $table->timestamps(); }); } diff --git a/backend/database/migrations/2022_03_29_101303_create_articles_table.php b/backend/database/migrations/2022_03_29_101303_create_articles_table.php new file mode 100644 index 0000000..b01f6d6 --- /dev/null +++ b/backend/database/migrations/2022_03_29_101303_create_articles_table.php @@ -0,0 +1,35 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +return new class extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('articles', function (Blueprint $table) { + $table->id(); + $table->timestamps(); + $table->string('title'); + $table->string('text'); + $table->string('description'); + $table->integer('IDuser'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('articles'); + } +}; diff --git a/backend/routes/api.php b/backend/routes/api.php index a925c1a..71fb004 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -3,6 +3,8 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\API\UserController; +use App\Http\Controllers\API\ArticleController; + /* |-------------------------------------------------------------------------- @@ -20,9 +22,34 @@ }); Route::apiResource('/loginApi', UserController::class ); + +Route::apiResource('/articleApi', ArticleController::class ); + // Route::post('/register', [UserController::class, 'store']); Route::delete('/delete', [UserController::class, 'deleteall']); + +Route::post('/check', [UserController::class, 'checkuser']); + +Route::get('/get_article/{id}', [ArticleController::class, 'get_article']); + + // Route::get('/user', function() { // return 'test'; +// }); + +// Route::get('/set-cookie', function() { +// $response = new Illuminate\Http\Response(); + +// $response->cookie('test5', 'zz',5, '/', ' 127.0.0.1'); // this will last five years +// dd($response); +// return $response; +// }); + +// Route::get('/get-cookie', function() { +// // +// $res = new Response("test"); + +// $res->data = "qsdq"; // showing you different ways to set / get the cookie +// return $res; // }); \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7b9069a..59ba852 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,8 +8,10 @@ "name": "frontend", "version": "0.1.0", "dependencies": { + "axios": "^0.26.1", "core-js": "^3.8.3", "vue": "^2.6.14", + "vue-cookies": "^1.8.0", "vue-router": "^3.1.3", "vuetify": "^2.6.0" }, @@ -3226,6 +3228,14 @@ "postcss": "^8.1.0" } }, + "node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, "node_modules/babel-loader": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", @@ -5914,7 +5924,6 @@ "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true, "funding": [ { "type": "individual", @@ -10660,6 +10669,11 @@ "node": ">=10" } }, + "node_modules/vue-cookies": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/vue-cookies/-/vue-cookies-1.8.0.tgz", + "integrity": "sha512-5nxAwW4kIS6uP0G9UnWcmSj2NlFpV1wkvAAwGgkWqyPDVCP1IEzFZfg7YUBLiYowZ/cFnxaXqS1nWPIBwfXGRw==" + }, "node_modules/vue-eslint-parser": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", @@ -14073,6 +14087,14 @@ "postcss-value-parser": "^4.2.0" } }, + "axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "requires": { + "follow-redirects": "^1.14.8" + } + }, "babel-loader": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", @@ -16079,8 +16101,7 @@ "follow-redirects": { "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, "forwarded": { "version": "0.2.0", @@ -19554,6 +19575,11 @@ } } }, + "vue-cookies": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/vue-cookies/-/vue-cookies-1.8.0.tgz", + "integrity": "sha512-5nxAwW4kIS6uP0G9UnWcmSj2NlFpV1wkvAAwGgkWqyPDVCP1IEzFZfg7YUBLiYowZ/cFnxaXqS1nWPIBwfXGRw==" + }, "vue-eslint-parser": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 8368abb..7163954 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,8 +8,10 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "axios": "^0.26.1", "core-js": "^3.8.3", "vue": "^2.6.14", + "vue-cookies": "^1.8.0", "vue-router": "^3.1.3", "vuetify": "^2.6.0" }, diff --git a/frontend/src/components/navbar.vue b/frontend/src/components/navbar.vue index 797f67d..9c3556f 100644 --- a/frontend/src/components/navbar.vue +++ b/frontend/src/components/navbar.vue @@ -4,7 +4,7 @@ <div class="menu-item"><a href="/home">Home</a></div> <dropdown title="Article" :items="services"/> <div class="menu-item"><a href="/info">info</a></div> - <div class="menu-item"><a href="/logout">Logout</a></div> + <div class="menu-item"><a @click = "logout()">Logout</a></div> </nav> @@ -12,6 +12,10 @@ <script> import dropdown from './dropdown.vue' +import router from '../router/index' +import Vue from 'vue' +import VueCookies from 'vue-cookies' +Vue.use(VueCookies) export default { name : "navbar", @@ -31,10 +35,28 @@ data () { }, ] } +}, +methods : { + logout() { + router.push({ path: '/' }); + this.$cookies.remove("IDuser"); // return this + this.$cookies.remove("username"); // return this + this.$cookies.remove("tmp"); // return this + this.$cookies.remove("nameuser"); // return this + + + + //suppression de la session } } + +} + + </script> + + <style> diff --git a/frontend/src/main.js b/frontend/src/main.js index c91889b..bcd17ac 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -2,7 +2,9 @@ import Vue from 'vue' import App from './App.vue' import vuetify from './plugins/vuetify' import router from './router' +import VueCookies from 'vue-cookies'; +Vue.use(VueCookies); Vue.config.productionTip = false new Vue({ diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 1a7a7e0..8d5c16a 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -7,6 +7,8 @@ import login from '../views/login.vue' import signup from '../views/sign_up.vue' import info from '../views/info.vue' import add_article from '../views/ajout_article.vue' +import affich_article from '../views/affich_article.vue' + Vue.use(VueRouter) // eslint-disable-next-line @@ -53,6 +55,11 @@ const routes = [ name: 'add_article', component: add_article }, + { + path: '/affich_article', + name: 'affich_article', + component: affich_article + }, ] diff --git a/frontend/src/views/affich_article.vue b/frontend/src/views/affich_article.vue new file mode 100644 index 0000000..ecc63f2 --- /dev/null +++ b/frontend/src/views/affich_article.vue @@ -0,0 +1,129 @@ +<template> +<v-app> + <v-main> + <div class="top1"> + <Navbar/> + </div> + <div class="top2"> + <v-img + src="../assets/blog2.jpg" + max-height="200" + max-width="100%" + > + </v-img> + </div> + </v-main> + <v-card + width="80%" + class="mx-auto my-15"> + <v-img + height="150" + src="../assets/blog.jpg"> + + </v-img> + <v-card-title></v-card-title> + <v-card-text> + <v-form> + <h5 >Auteur : {{auteur}}</h5> + <v-text-field label="Titre" v-model="object.title" ></v-text-field> + <v-text-field label="Description" v-model="object.description" ></v-text-field> + <v-text-field label="Texte" v-model="object.text" ></v-text-field> + + + + + + + + + + + + </v-form> + </v-card-text> + <v-card-actions> + <v-btn outlined color="orange" @click="up()"> + <v-icon >mdi-plus</v-icon> + + <span>modifier article</span> + </v-btn> + </v-card-actions> + </v-card> + <Footer/> +</v-app> +</template> + +<script> + +import router from '../router/index' +import Footer from '../components/footer.vue' +import Navbar from '../components/navbar.vue' +import axios from 'axios'; +import Vue from 'vue' +import VueCookies from 'vue-cookies' +Vue.use(VueCookies) + +export default { + name: "signup", + components: {Navbar, Footer}, + data(){ + return { + object: "", + auteur : this.$cookies.get("username"), + } + }, + + methods: { + async up() { + try { + console.log(this.$cookies.get("IDuser")); + res = axios.put('http://127.0.0.1:8000/api/articleApi/' + this.$cookies.get("tmp"), this.object, + { + // headers : { + // 'Authorization' : 'Bearear ' + localStorage.getItem('token') + // }, + }) + console.log(res); + + } + catch(e) { + + } + + } + // + + + }, + + async mounted () { + try { + let res1 = await axios.get('http://127.0.0.1:8000/api/get_article/' + this.$cookies.get("tmp") ) + // + + this.object = res1.data[0]; + + + } catch(e) { + console.log(e); + } + }, + + + + +} + + +</script> + +<style> +.top1 { + position: relative; + z-index: 2; +} +.top2 { + position: relative; + z-index: 1; +} +</style> \ No newline at end of file diff --git a/frontend/src/views/ajout_article.vue b/frontend/src/views/ajout_article.vue index d950cc9..d6fb578 100644 --- a/frontend/src/views/ajout_article.vue +++ b/frontend/src/views/ajout_article.vue @@ -24,7 +24,9 @@ <v-card-title>Fascine nous avec ta créativité ! </v-card-title> <v-card-text> <v-form> - <v-text-field label="Titre pour ton blog" v-model="object.nom" required :rules="[v => !!v || 'veuillez saisir votre nom']"></v-text-field> + <v-text-field label="Titre pour ton blog" v-model="object.titre" required :rules="[v => !!v || 'veuillez saisir le titre']"></v-text-field> + <v-text-field label="Description" v-model="object.description" required :rules="[v => !!v || 'veuillez saisir le titre']"></v-text-field> + <v-container fluid> <v-textarea @@ -32,6 +34,7 @@ clear-icon="mdi-close-circle" label="Allez, balance tes idées !" value="You can do it" + v-model="object.text" ></v-textarea> </v-container> @@ -57,6 +60,9 @@ import router from '../router/index' import Footer from '../components/footer.vue' import Navbar from '../components/navbar.vue' +import axios from 'axios'; + + export default { name: "signup", components: {Navbar, Footer}, @@ -64,14 +70,47 @@ export default { return { object: { - nom : '', - prenom : '', - email: '', - password: '', - type_profil: '' + titre:'', + description:'', + text:'', + IDuser:this.$cookies.get("IDuser"), + } } }, + + methods: { + async ajouter_article() { + try { + // const res1 = await axios.get('http://127.0.0.1:8000/api/get-cookie',this.object) + // console.log(res1) + const res = await axios.post('http://127.0.0.1:8000/api/articleApi',this.object, { + Headers : { + 'Content-Type' : 'multipart/form-data; boundary=<calculated when request is sent>', + 'Content-Length' : '<calculated when request is sent>', + 'Connection' : 'keep-alive' + } + } + + ) + router.push({ path: '/home' }); + + console.log(res) + //router.push({ name: 'acceuil' }); + } catch(e) { + console.log(e); + //alert('une erreur est servenu, veuillez refaire linscription a nouveau'); + //router.push({ name: 'inscription' }); + + } + + + + }, + // + + + }, diff --git a/frontend/src/views/article.vue b/frontend/src/views/article.vue index e69de29..c2af8c3 100644 --- a/frontend/src/views/article.vue +++ b/frontend/src/views/article.vue @@ -0,0 +1,138 @@ +<template> +<v-app> + + <div class="top1"> + <Navbar/> + </div> + <div class="top2"> + <v-img + src="../assets/blog2.jpg" + max-height="200" + max-width="100%" + > + </v-img> + </div> + + <v-container class="my-5"> + <v-layout row wrap max-width="344"> + <v-flex xs12 sm6 md4 lg3 v-for="blog in blogs" :key="blog.name" > + <v-card + :loading="loading" + class=" ma-3" + max-width = "375" + > + <template > + <v-progress-linear + color="black" + height="5" + + > + </v-progress-linear> + + </template> + + <v-img + height="150" + src="../assets/blog.jpg"> + + </v-img> + + <v-card-title>{{blog.title}}</v-card-title> + <v-divider class="mx-4"></v-divider> + <v-card-text> + <v-row + align="center" + class="mx-0" + > + + + + </v-row> + + <div class="my-4 text-subtitle-1"> + {{blog.description}} + </div> + + <!-- <div>{{blog.text}}</div> --> + </v-card-text> + <v-divider class="mx-4"></v-divider> + <v-card-actions> + <v-btn + color="deep-purple lighten-2" + text + @click="lire(blog.id)" + > + Lire article + </v-btn> + </v-card-actions> + + + + + </v-card> + </v-flex> + </v-layout> + </v-container> + + + <Footer/> + +</v-app> + +</template> + +<script> +import router from '../router/index' + +import Footer from '../components/footer.vue' +import Navbar from '../components/navbar.vue' +import axios from 'axios' +import Vue from 'vue' +import VueCookies from 'vue-cookies' +Vue.use(VueCookies) +export default { + components: { Footer, + Navbar }, + + data(){ + return { + + blogs: + [ + + ] + } + }, + methods : { + async lire(id) { + this.$cookies.set("tmp", id); + router.push({ name: 'affich_article' }); + + } + }, + mounted () { + console.log(this.$cookies.get("username")); // gowtham + axios.get('http://127.0.0.1:8000/api/articleApi/'+ this.$cookies.get("IDuser"), + { + // headers : { + // 'Authorization' : 'Bearear ' + localStorage.getItem('token') + // }, + }) + .then(res => this.blogs = res.data); + + + }, +} + +</script> + +<style> +.top1 { + position: relative; + z-index: 2; +} +.top2 { + position: relative; + z-index: 1; +} +</style> diff --git a/frontend/src/views/home.vue b/frontend/src/views/home.vue index 4b84d96..39005c4 100644 --- a/frontend/src/views/home.vue +++ b/frontend/src/views/home.vue @@ -1,7 +1,7 @@ <template> <v-app> - <v-main> - <div class="top1"> + + <div class="top1"> <Navbar/> </div> <div class="top2"> @@ -12,11 +12,13 @@ > </v-img> </div> - </v-main> - <v-card + <v-container class="my-5"> + <v-layout row wrap max-width="344"> + <v-flex xs12 sm6 md4 lg3 v-for="blog in blogs" :key="blog.name" > + <v-card :loading="loading" - class="mx-auto my-12" + class=" ma-3" max-width = "375" > <template > @@ -24,19 +26,18 @@ color="black" height="5" - > - + > </v-progress-linear> </template> <v-img - height="250" - src="../assets/avion.png"> + height="150" + src="../assets/blog.jpg"> </v-img> - <v-card-title>Article 1</v-card-title> + <v-card-title>{{blog.title}}</v-card-title> <v-divider class="mx-4"></v-divider> <v-card-text> <v-row @@ -49,10 +50,10 @@ </v-row> <div class="my-4 text-subtitle-1"> - $ • Machin Machin + {{blog.description}} </div> - <div>machin machin machin machin machin machin machin machin machin machin machin machin machin machin</div> + <!-- <div>{{blog.text}}</div> --> </v-card-text> <v-divider class="mx-4"></v-divider> <v-card-actions> @@ -68,7 +69,11 @@ - </v-card> + </v-card> + </v-flex> + </v-layout> + </v-container> + <Footer/> @@ -79,12 +84,33 @@ <script> import Footer from '../components/footer.vue' import Navbar from '../components/navbar.vue' +import axios from 'axios' export default { components: { Footer, Navbar }, + data(){ + return { + + blogs: + [ + + ] + } + }, + mounted () { + axios.get('http://127.0.0.1:8000/api/articleApi', + { + // headers : { + // 'Authorization' : 'Bearear ' + localStorage.getItem('token') + // }, + }) + .then(res => this.blogs = res.data); + + }, } + </script> <style> diff --git a/frontend/src/views/info.vue b/frontend/src/views/info.vue index e69de29..26d0e81 100644 --- a/frontend/src/views/info.vue +++ b/frontend/src/views/info.vue @@ -0,0 +1,112 @@ +<template> +<v-app> + <v-main> + <div class="top1"> + <Navbar/> + </div> + <div class="top2"> + <v-img + src="../assets/blog2.jpg" + max-height="200" + max-width="100%" + > + </v-img> + </div> + </v-main> + <v-card + width="80%" + class="mx-auto my-15"> + <v-img + height="150" + src="../assets/blog.jpg"> + + </v-img> + <v-card-title>Vos informations YES </v-card-title> + <v-card-text> + <v-form> + <v-text-field label="nouvelle adresse email" v-model="object.email" ></v-text-field> + <v-text-field label=" changer Nom" v-model="object.name" ></v-text-field> + <v-text-field label="changer Prénom" v-model="object.prenom" ></v-text-field> + + + + + + + + </v-form> + </v-card-text> + <v-card-actions> + <v-btn outlined color="orange" @click="up()"> + <v-icon >mdi-plus</v-icon> + + <span>modifier info</span> + </v-btn> + </v-card-actions> + </v-card> + <Footer/> +</v-app> +</template> + +<script> + +import router from '../router/index' +import Footer from '../components/footer.vue' +import Navbar from '../components/navbar.vue' +import axios from 'axios'; +import Vue from 'vue' +import VueCookies from 'vue-cookies' +Vue.use(VueCookies) + +export default { + name: "signup", + components: {Navbar, Footer}, + data(){ + return { + object: { + email:'', + name:'', + prenom:'', + + }, + } + }, + + methods: { + // + async up() { + try { + console.log(this.$cookies.get("IDuser")); + res = axios.put('http://127.0.0.1:8000/api/loginApi/' + this.$cookies.get("IDuser"), this.object, + { + // headers : { + // 'Authorization' : 'Bearear ' + localStorage.getItem('token') + // }, + }) + console.log(res); + + } + catch(e) { + + } + + } + + }, + + + + +} +</script> + +<style> +.top1 { + position: relative; + z-index: 2; +} +.top2 { + position: relative; + z-index: 1; +} +</style> \ No newline at end of file diff --git a/frontend/src/views/login.vue b/frontend/src/views/login.vue index a2a84bc..1c8f9b7 100644 --- a/frontend/src/views/login.vue +++ b/frontend/src/views/login.vue @@ -68,6 +68,11 @@ import router from '../router/index' import Footer from '../components/footer.vue' import Navbar from '../components/navbar.vue'; +import axios from 'axios'; +import Vue from 'vue' +import VueCookies from 'vue-cookies' +Vue.use(VueCookies) + //import Navbar from '../components/Navbar.vue' export default { components: { @@ -82,12 +87,48 @@ export default { object : { email: "", password: "", - type_profil:"" } }; + + + + }, + methods: { + async login() { + + try { + + const res = await axios.post('http://127.0.0.1:8000/api/check',this.object) + console.log(res.data[0][0].id) + alert('Logged in !'); + //crier un cookie pour sauvegarder le ID de l'utilisateur connecté + this.$cookies.set("IDuser", res.data[0][0].id, "1d"); + this.$cookies.set("nameuser", res.data[1][0].name, "1d"); + console.log(this.$cookies.get("IDuser")); // gowtham + + + + // it gets the cookie called `username` + router.push({ name: 'home' }); + //localStorage.setItem('token',res.data.token) + //router.push({ name: 'acceuil' }); + } catch(e) { + alert('adresse ou mot de passe incorrect'); + console.log(e); + this.object.email = "", + this.object.password = "", + router.push({ name: 'login' }); + + } + + }, + + // + + }, }; diff --git a/frontend/src/views/sign_up.vue b/frontend/src/views/sign_up.vue index 788a252..95fbe7f 100644 --- a/frontend/src/views/sign_up.vue +++ b/frontend/src/views/sign_up.vue @@ -18,7 +18,7 @@ <v-card-title>Inscription </v-card-title> <v-card-text> <v-form> - <v-text-field label="nom" v-model="object.nom" required :rules="[v => !!v || 'veuillez saisir votre nom']"></v-text-field> + <v-text-field label="nom" v-model="object.name" required :rules="[v => !!v || 'veuillez saisir votre nom']"></v-text-field> <v-text-field label="prenom" v-model="object.prenom" required :rules="[v => !!v || 'veuillez saisir votre prenom']"></v-text-field> <v-text-field label="Email" v-model="object.email" required :rules="[v => !!v || 'veuillez saisir votre adresse email']"></v-text-field> <v-text-field label="mot_de_passe" v-model="object.password" type="password" required :rules="[v => !!v || 'veuillez saisir votre mot de passe']"></v-text-field> @@ -44,21 +44,49 @@ import router from '../router/index' import Footer from '../components/footer.vue' import Navbar from '../components/navbar.vue' +import axios from 'axios' export default { name: "signup", components: {Navbar, Footer}, data(){ return { object: { - - nom : '', - prenom : '', + prenom: '', + name: '', email: '', password: '', - type_profil: '' + } } }, + + methods: { + async inscrire() { + try { + const res = await axios.post('http://127.0.0.1:8000/api/loginApi',this.object, { + Headers : { + 'Content-Type' : 'multipart/form-data; boundary=<calculated when request is sent>', + 'Content-Length' : '<calculated when request is sent>', + 'Connection' : 'keep-alive' + } + } + ) + console.log(res) + //router.push({ name: 'acceuil' }); + } catch(e) { + console.log(e); + //alert('une erreur est servenu, veuillez refaire linscription a nouveau'); + //router.push({ name: 'inscription' }); + + } + + + + }, + // + + + }, -- GitLab