andheiberg / messenger
There is no license information available for the latest version (1.0.5) of this package.
Basic messaging package for laravel
1.0.5
2014-08-18 03:22 UTC
Requires
- illuminate/support: 4.x
- laravel/framework: 4.*
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2024-11-09 16:17:02 UTC
README
Basic Messaging System for Laravel4
Introduction
The main purpose of this package is providing an suited Foundation for extended communication platforms, based on laravel 4 (or compatible frameworks).
Overview
You have many users and they want to chat? Couldn't be simplier!
- Participants have many conversations
- A conversation belongs to many participants
- A message belongs to a single conversation
- A conversation consists of many Messages
- Participants latest read timestamp is stored
Installation
- Add
"andheiberg/messenger": "dev-master"
to your composer.json - Run
composer update
- Add
'Andheiberg\Messenger\MessengerServiceProvider',
toapp/config/app.php
underproviders
- Run
php artisan messenger:setup
- Add
use \Andheiberg\Messenger\Traits\UserCanMessage;
inside your User model class
Usage
Congratulations! Now you can use the laravel4 messenger.
php artisan messenger:setup
will publish a Conversation and a Message model to app/models. If you prefer to make them your self, just extend Pichkrement\Messenger\Models\Conversation and Pichkrement\Messenger\Models\Message.
Examples
Now you can use it like a pro.
/** * Display a listing of the resource. * * @return Response */ public function index() { $user = Auth::user(); $conversations = Conversation::forUser()->get(); if ($conversations->isEmpty()) { return Redirect::route('conversations.create'); } return Redirect::route('conversations.show', [$conversations->last()->id]); } /** * Show the form for creating a new resource. * * @return Response */ public function create() { $user = Auth::user(); $conversations = Conversation::forUser()->orderBy('updated_at', 'desc')->get(); return View::make('conversations.create', compact('conversations')); } /** * Store a newly created resource in storage. * * @return Response */ public function store() { $input = Input::all(); $conversation = Conversation::create([ 'subject' => $input['subject'], ]); $message = Message::create([ 'conversation_id' => $conversation->id, 'user_id' => Auth::user()->id, 'body' => $input['message'], ]); $sender = Participant::create([ 'conversation_id' => $conversation->id, 'user_id' => Auth::user()->id ]); if ($this->input->has('recipient')) { $recipient = User::where('email', $input['recipient'])->first(); Participant::create([ 'conversation_id' => $conversation->id, 'user_id' => $recipient->id, ]); } return Redirect::route('conversations.index'); } /** * Display the specified resource. * * @param int $id * @return Response */ public function show($id) { $user = Auth::user(); $conversations = Conversation::forUser()->orderBy('updated_at', 'desc')->get(); $conversation = Conversation::find($id); // $me = Participant::me()->where('conversation_id', $conversation->id)->first(); // $me->last_read = new DateTime; // $me->save(); return View::make('conversations.show', compact('conversations', 'conversation')); } /** * Show the form for creating a new resource. * * @return Response */ public function createMessage($conversation) { return View::make('conversations.create'); } /** * Store a newly created resource in storage. * * @return Response */ public function storeMessage($conversation) { $message = Message::create([ 'conversation_id' => $conversation, 'user_id' => $this->auth->user()->id, 'body' => $this->input->input('message'), ]); return Redirect::route('conversations.show', $conversation); }