Git Product home page Git Product logo

messager's Introduction

(NOT MAINTAINED)

Laravel Messager

A convenient way to handle messages between users in a simple way

Table of Contents

  1. Installation
  2. Setup a Model
  3. Creating & Sending Messages
    1. Creating a message
    2. Sending the message
    3. Responding the message
    4. Drafting a message
  4. Working with Messages
    1. Getting messages between users
    2. Read messages
    3. Unread messages
    4. Draft messages
  5. Tags
    1. Create and Edit tags
    2. Assign tag to message
    3. Change and get tag of a message
    4. Remove a tag from a message

Installation:

First, install the package through Composer.

composer require inani/messager

Then include the service provider inside config/app.php.

'providers' => [
    ...
    Inani\Messager\MessagerServiceProvider::class,
    ...
];

Publish config and migrations

php artisan vendor:publish

Setup a Model

To setup a model all you have to do is add (and import) the MessageAccessible trait.

use Inani\Messager\Helpers\MessageAccessible;
use Inani\Messager\Helpers\TagsCreator;
class User extends Model
{
    use MessageAccessible, TagsCreator;
    ...
}

Creating & sending Messages

Creating a message

$receiver = User::find(1); 

// Message Data
$messageData = [
	'content' => 'Hello all this is just a test', // the content of the message
	'to_id' => $receiver->getKey(), // Who should receive the message
];

list($message, $user) = App\User::createFromRequest($messageData);

Sending the message

$sender = User::find(2);

$sent = $sender->writes($message)
                 ->to($user)
                 ->send();
		 
// send to multiple users the same message
// can execpt a user|array of users| array of ids| or array of users and ids
$sent = $sender->writes($message)
                 ->to($user)
		 ->cc([$user1, $user2])
		 ->cc([$user3->id, $user4->id])
                 ->send();

Responding the message

$sender = User::find(2);

$sent = $user->writes($newMessage)
                 ->to($sender)
		 ->responds($message)
                 ->send();

Drafting a message

$sender = User::find(2);

$draft = $sender->writes($message)
                  ->to($user)
                  ->draft()
                  ->keep();

Working with Messages

Once you've got messages you need to do something with them.

Getting messages between users

// Users
$userA = App\User::find(1);
$userB = App\User::find(2);

// Get seen messages sent from UserB to UserA
$messages = $userA->received()->from($userB)->seen()->get();

// OR you can pass an array of IDs 
$messages = $userA->received()->from([2, 3, 4, 5])->seen()->get();

Read messages

// Set the selected message(or id of messages as read)
$count = $userB->received()->select($message)->readThem();

Unread messages

// Get unread messages from UserB to User A
$messages = $userA->received()->from($userB)->unSeen()->get();

// Marking them as read
$messages = $userA->received()->from($userB)->unSeen()->readThem();

// check out if a conversation has new messages
$bool = $userA->received()->conversation($message)->hasNewMessages();

// Get the number of conversations that have new messages in it
$number = $userA->received()->unSeenConversations();

Sent messages

// Get unread messages from UserA to UserB
$messages = $userA->sent()->to($userB)->get();

// OR you can pass an array of IDs
$messages = $userA->received()->to([2, 3, 4, 5)->get();

Draft messages

// Get the draft messages for UserA
$messages = $userA->sent()->inDraft()->get().

Tags

You can tag (or structure your messages in different categories).

Create and Edit tags

each user can make any number of tags.

// create a new tag, $data can be (Tag instance, array, Request)
$tag = $userA->addNewTag($data);

// Modify the attributes of a tag
$user->tag($tag)->name("social")->color("#ffff")->apply();

Assign tag to message

Once you have the message and the tag

// you'll need the instance of user(to check if sender or receiver)
// $user and $tag can be ids or instance of User, Tag classes
$bool = $message->concerns($user)->putTag($tag);

Change and get tag of a message

// to change the tag just use the same method
$bool = $message->concerns($user)->putTag($tag);

// to get the tag of the message, null if not tagged
$tagOrNull = $message->concerns($user)->getTag();
// 

Remove a tag from a message

// To remove the tag from the message
$bool = $message->concerns($user)->removeTag();

messager's People

Contributors

akiyamasm avatar jason-cooke avatar sekonda avatar simondotwhite avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

messager's Issues

Subject, attachment, flag?

Hi do this package support attachment, subject, and flag (send/spam/read/unread) ?

It would be great to have this

Thanks

L 5.6 supported ?

Hi,

Thanks for this nice package !
Is it supported on Laravel 5.6 ?

Thanks

vendor:publish is not working

I am using Laravel 5.6 and I installed your package. I add Inani\Messager\MessagerServiceProvider::class, to may app.php file. But after run php artisan vendor:publish there are nothing. No migration tables added my database folder.

table name conflict

I am already using tags table to manage tags on my different models, which is very common name.
can the table names be configurable?
If you would like it I can create a pull request for same.

No default for title and no way to add one

You have a "title" (presumably message subject) field in the migration, but your code will not accept a title insert:

$message = new Message(['content' => $attribute['content']]);

so I have no idea how your tests are passing. I like the rest of this so I'll prolly send you a PR today

how can I mark a message as seen?

I am trying to update messages table's status column with

'DB::table('messages')->find($message_id)->update(['status'=>'2']);'

but I got error..

Also, I tried $count = $userB->received()->select($message)->readThem();

but Always there are same error.

Title?

Hey,

Looking through the repo I see in the migration there is a title column.

What's this used for? I haven't seen it used anywhere.

Question

Does this package have a option like the Mail option in LARAVEL? So like a premade PM option?

Mail::to($topicCreator->email)->send(new NewReply($user, $topic));

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.