موقع تواصل إجتماعي بإستعمال laravel الجزء الثالت

فهاد الجزء الثالت من موقع تواصل إجتماعي بإستعمال laravel غادي نكملو الملفات الخاصة بإضافة وحدف أصدقاء وأيضا لي غادي تمكن المستخدم باش يكون عندو بروفايل .

نظرة سريعة بالفيديو


1- الملف FriendsController.php


كنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه FriendsController.php لي غادي تكون فيه fonction index لي كتوجه المستخدم للملف الرئيسي منبعد مكتسترجع أصدقاء المستخدم والطلبات لي صيفط ولي توصل بها ثم كاين fonction removeFriend لي كاتاخد لpseudo ديال المستخدم وكتقلب عليه كان كتخدم بremoveFriend لي كاينة ف User.php باش كيتحيد من لائحة الأصدقاء مكانش كتعرض رسالة خطأ ثم كاين addFriend كاتاخد لpseudo ديال المستخدم وكتقلب عليه كان كتخدم addFriend لي كاينة ف User.php باش كيتزاد فلائحة الأصدقاء مكانش كتعرض رسالة خطأ وأيضا كتأكد بواسطة hasFriendRequestWaiting واش هادا لي صيفط طلب صداقة سبقلو صيفطو من قبل ثم كاين acceptRequest لي كاتاخد لpseudo ديال المستخدم وكتقلب عليه كان كتعدل الحقل accepted لي عندنا فجدول friends مكانش كتعرض رسالة خطأ الكود ديال الملف هو :

                                    
                                        <?php

namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;
use DB;
class FriendsController extends Controller
{
   public function index(){
        $friends = Auth::user()->friends();
        $requestSent = Auth::user()->friendRequests();
        $requestReceived = Auth::user()->friendRequestWaiting();
        return view('friends.index',compact('friends','requestSent','requestReceived'));
   }
   public function removeFriend($username){
       $user = User::where('pseudo',$username)->first();
       if(!$user){
           return redirect()->route('home')->with('info','Utilisateur introuvable');
       }
       Auth::user()->removeFriend($user);
       return redirect()->route('users.profile',['username'=>$user->pseudo])->with('success','Retiré avec succés'); 
   }
   public function addFriend($username){
       $user = User::where('pseudo',$username)->first();
       if(!$user){
           return redirect()->route('home')->with('info','Utilisateur introuvable');
       }
       if(Auth::user()->hasFriendRequestWaiting($user) || $user->hasFriendRequestWaiting(Auth::user())){
           return redirect()->route('users.profile',['username'=>$user->pseudo])->with('info','Une demande d\'ajout déja en cours');
       }
       Auth::user()->addFriend($user);
       return redirect()->route('users.profile',['username'=>$user->pseudo])->with('success','Demande envoyée'); 
   }
   public function acceptRequest($username){
       $user = User::where('pseudo',$username)->first();
       if(!$user){
           return redirect()->route('home')->with('info','Utilisateur introuvable');
       }
       DB::table('friends')
            ->where('user_id',$user->id)
            ->update(['accepted' => 1]);
       return redirect()->route('users.profile',['username'=>$user->pseudo])->with('success','Demande accéptée'); 
   }
}
                                    
                                

2- الملف index.blade.php


فالمجلد views كنزيد مجلد جديد سميه friends وزيد فيه ملف جديد كنسميه index.blade.php وهي الصفحة لي غادي تعرض الأصدقاء ديال المستخدم والطلبات لي تصيفطو لو ولي صيفط ولي غادي يجيو من fonction index لي كاينة ف FriendsController.php فكنتحقق واش عندو شي أصدقاء كانو كيتعرضو مكانوش كيتعرض بلي معندو حتى صديق ونفس الشي بالنسبة للطلبات الصداقة الكود ديال الملف هو :

                                    
                                        @extends ('layouts.includes.main-index')
@section('content')
    <div class="row">
        <div class="col-md-6 col-md-offset-1">
        <div class="panel panel-default">
            <h4 class="text-info text-center">Liste d'amis</h4>
            <hr>
            @if(!$friends->count())
                <h4 class="text-info text-center">Aucun ami trouvé</h4>
            @else
                @foreach($friends as $user)
                    @include('users.user-block')
                @endforeach
            @endif
        </div>
        </div>
        <div class="col-md-3 col-md-offset-1">
            <h4 class="text-info text-center">Demande d'ajout envoyées</h4>
            @if(!$requestSent->count())
                <p class="text-info text-center">Aucune demande d'ajout</p>
            @else
                @foreach($requestSent as $user)
                    @include('users.user-block')
                @endforeach
            @endif
            <h4 class="text-info text-center">Demande d'ajout reçus</h4>
            @if(!$requestReceived->count())
                <p class="text-info text-center">Aucune demande d'ajout</p>
            @else
                @foreach($requestReceived as $user)
                    @include('users.user-block')
                    <a href="{{route('users.friend.accept',['username'=>$user->pseudo])}}" class="btn btn-primary">Accepter la demande</a>
                @endforeach
            @endif
        </div>
    </div>
@endsection
                                    
                                

3- الملف ProfileController.php


كنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه ProfileController.php لي غادي تكون فيه fonction getProfile لي كتوجه المستخدم للملف profile منبعد غادي نزيدوه فالمجلد users منبعد مكتسترجع المستخدم بإستعمال username لي هو ل pseudo ديالو ثم كاين getEdit لي كتوجه المستخدم للملف edit-profile منبعد غادي نزيدوه فالمجلد users ثم كاين postEdit لي كتعدل المعلومات ديال المستخدم الكود ديال الملف هو :

                                      
                                        <?php

namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;

class ProfileController extends Controller
{
   public function getProfile($username){ 
     $user = User::where('pseudo',$username)->orWhere('nom',$username)->first();
     if(!$user){
         abort(404);
     }
     return view('users.profile')->with(['user'=>$user]);
   }
   public function getEdit(){
      return view('users.edit-profile');
   }
   public function postEdit(Request $request){
       $this->validate($request,[
            'pseudo'=>'required|unique:users|max:50',
            'nom'=>'required|max:50',
            'prenom'=>'required|max:50',
            'ville'=>'required|max:50',
            'pays'=>'required|max:50'
        ]);
        Auth::user()->update([
           'pseudo'=>$request->pseudo,
           'nom'=>$request->nom,
           'prenom'=>$request->prenom,
           'ville'=>$request->ville,
           'pays'=>$request->pays,
        ]);
        return redirect()->route('users.update')->with('success','Profile modifié avec succés');
   }
}

                                      
                                    

4- الملف profile.blade.php


منبعد فusers فيه زيد ملف جديد سميه profile.blade.php هادا الملف لي غادي يمكن المستخدم باش يكون عندو بروفايل فكنسترجع لpublications ديال المستخدم بواسطة لfonction publications لي كينة ف User.php ثم منبعد مكيتعرضو كنسترجع التعاليق ديال كل منشور بل fonction replies لي كاينة ف Publication.php ثم كنعرض الأصدقاء لي عند المستخدم الكود ديال الملف هو :

                                        
                                            @extends ('layouts.includes.main-index')
@section('content')
    <div class="row">
        <div class="col-md-8">
            <div class="panel panel-default">
             @include('users.user-block')
                @if(Auth::user()->id != $user->id)
                    <h3 class="text-info text-center">Les publications de {{$user->pseudo}}</h3>
                @else
                    <h3 class="text-info text-center">Mes publications</h3>
                @endif
             <hr>
             <div class="row">
                @if($user->publications->count() != 0)
                    <div class="col-md-6">
                        @foreach($user->publications as $pub)
                        <div class="media">
                            <a href="{{route('users.profile',['username'=>$pub->user->pseudo])}}" class="pull-left">
                                <div class="media-object">
                                    <img src="{{$pub->user->getImage()}}" class="thumbnail" alt="$pub->user->pseudo">
                                </div>
                            </a>
                            <div class="media-body">
                                <h4 class="media-heading"><a href="{{route('users.profile',['username'=>$pub->user->pseudo])}}">{{$pub->user->pseudo}}</a></h4>
                                <p>{{$pub->body}}</p>
                                <p>
                                    <span class="text-success">{{$pub->created_at->diffForHumans()}} |</span>
                                    <span><a href="{{route('post.like',['id'=>$pub->id])}}">like</a> |</span>
                                    <span class="text-danger">{{$pub->likes->count()}} likes</span>
                                </p>
                                @foreach($pub->replies as $reply)
                                <div class="media">
                                    <a href="{{route('users.profile',['username'=>$reply->user->pseudo])}}" class="pull-left">
                                        <div class="media-object">
                                            <img src="{{$reply->user->getImage()}}" class="thumbnail" alt="$reply->user->pseudo">
                                        </div>
                                    </a>
                                    <div class="media-body">
                                        <h4 class="media-heading"><a href="{{route('users.profile',['username'=>$reply->user->pseudo])}}">{{$reply->user->pseudo}}</a></h4>
                                        <p>{{$reply->body}}</p>
                                        <p>
                                        <span>{{$reply->created_at->diffForHumans()}}</span>
                                        </p>
                                    </div>
                                </div>
                                @endforeach
                                @if(Auth::user()->id != $pub->user->id)
                                <div>
                                    <form action="{{route('post.reply',['postId'=>$pub->id])}}" method="post" class="form-vertical">
                                        <div class="form-group">
                                            <textarea rows="1" name="reponse-{{$pub->id}}" class="form-control{{$errors->has('reponse') ? ' bordered' : ''}}" placeholder="Répondre"></textarea>
                                                @if($errors->has("reponse-{$pub->id}"))
                                                <span style="color:red">{{$errors->first("reponse-{$pub->id}")}}</span>
                                                @endif
                                        </div>
                                        <div class="form-group">
                                            <input type="submit" name="submit" class="btn btn-default" value="Répondre">
                                        </div>
                                        <input type="hidden" name="_token" value="{{Session::token()}}"/>
                                    </form>
                                </div>
                                @endif
                            </div>
                        </div>
                        @endforeach
                    </div>
                    @else
                        <h3 class="text-info text-center">Aucune Publication</3>
                    @endif
                </div>
            </div>
        </div>
        <div class="col-md-4">
            @if(Auth::user()->areFriends($user))
                <h4 class="text-info">Vous êtes amis avec {{$user->pseudo}}</h4>
                <hr>
                <a href="{{route('users.friend.remove',$user->pseudo)}}" class="btn btn-danger">Retirer</a>
                <hr>
            @elseif(Auth::user()->email != $user->email)
                <a href="{{route('users.friend.add',$user->pseudo)}}" class="btn btn-primary">Ajouter</a>
            @endif
            <h4  class="text-success">Amis de {{$user->pseudo}}</h4>
            <hr>
            @if(!Auth::user()->friends()->count() && Auth::user()->email == $user->email)
                <h3 class="text-danger">Vous n'avez aucun amis</h3>
            @elseif(!$user->friends()->count())
                <h3 class="text-danger"> {{$user->pseudo}} n'as aucun ami</h3>
            @else
                @foreach($user->friends() as $user)
                    @include('users.user-block')
                @endforeach
            @endif
        </div>
    </div>
@endsection
                                        
                                    

5- الملف user-block.blade.php


منبعد ف users فيه زيد ملف جديد سميه user-block.blade.php هاد الملف غادي يكون intégré فكل الملفات ولي كيعرض المعلومات الخاصة بالمستخدم الصورة الإسم المدينة والبلد الكود ديال الملف هو :

                                        
                                            <div class="media">
    <a href="{{route('users.profile',['username'=>$user->pseudo])}}" class="pull-left">
        <img src="{{$user->getImage()}}" alt="{{$user->nom.' '.$user->prenom}}" height="60" width="70" class="media-object thumbnail">
    </a>
    <div class="media-body">
        <h4 class="media-heading"><a href="{{route('users.profile',['username'=>$user->pseudo])}}">{{$user->pseudo}}</a></h4>
        <h5 class="media-heading">{{($user->ville)? : 'aucune donnée'}}</h5>
        <h5 class="media-heading">{{($user->pays)? : 'aucun donnée'}}</h5>
    </div>
</div>
<hr>
                                        
                                    

كلمات مفاتيح :