aabosham/laravel-comment

Just another comment system for your awesome Laravel project.

v1.0.1 2022-05-28 16:24 UTC

This package is auto-updated.

Last update: 2024-11-06 11:52:14 UTC


README

Latest Version on Packagist Software License Build Status Total Downloads Scrutinizer Code Quality Code Coverage

Just another comment system for your awesome Laravel project.

Version Compatibility

For >5.5 you can use ^1.0.0 version.

Install

Via Composer

$ composer require aaboshamravel-comment

If you don't use auto-discovery, or using Laravel version < 5.5 Add service provider to your app.php file

\Aabosham\LaravelComment\LaravelCommentServiceProvider::class

Publish configurations and migrations, then migrate comments table.

$ php artisan vendor:publish
$ php artisan migrate

Add CanComment trait to your User model.

use Aabosham\LaravelComment\CanComment;

class User extends Model
{
    use CanComment;
    
    // ...   
}

Add Commentable interface and HasComments trait to your commentable model(s).

use Aabosham\LaravelComment\Contracts\Commentable;
use Aabosham\LaravelComment\HasComments;

class Product extends Model implements Commentable
{
    use HasComments;
    
    // ...   
}

If you want to have your own Comment Model create a new one and extend my Comment model.

use Aabosham\LaravelComment\Models\Comment as LaravelComment;

class Comment extends LaravelComment
{
    // ...
}

and dont forget to update the model name in the config/comment.php file.

Comment package comes with several modes.

1- If you want to users can rate your commentable models;

class Product extends Model implements Commentable 
{
    use HasComments;

    public function canBeRated(): bool
    {
        return true; // default false
    }

    //...
}

2- If you want to approve comments for your commentable models;

class Product extends Model implements Commentable 
{
    use HasComments;

    public function mustBeApproved(): bool
    {
        return true; // default false
    }

    // ...
}

3- Sometimes you don't want to approve comments for all users;

class User extends Model 
{
    use CanComment;
  
    protected $fillable = [
        'isAdmin',
        // ..
    ];

    public function canCommentWithoutApprove(): bool
    {
        return $this->isAdmin;
    }

    // ..
}

Usage

$user = App\User::first();
$product = App\Product::first();

// $user->comment(Commentable $model, $comment = '', $rate = 0);
$user->comment($product, 'Lorem ipsum ..', 3);

// approve it -- if the user model `canCommentWithoutApprove()` or you don't use `mustBeApproved()`, it is not necessary
$product->comments[0]->approve();

// get avg rating -- it calculates approved average rate.
$product->averageRate();

// get total comments count -- it calculates approved comments count.
$product->totalCommentsCount();

Tip: You might want to look at the tests/CommentTest.php file to check all potential usages.

Change log

Please see CHANGELOG for more information what has changed recently.

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please email mehmet.aydin.bahadir@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.