rmrevin/yii2-comments

Comments module for Yii2

Maintainers

👁 rmrevin

Package info

github.com/rmrevin/yii2-comments

Type:yii2-extension

pkg:composer/rmrevin/yii2-comments

Statistics

Installs: 31 747

Dependents: 1

Suggesters: 0

Stars: 51

Open Issues: 4

1.4.4 2016-06-27 10:30 UTC

Requires

Requires (Dev)

None

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT dfc463a37336a3fc7c39698b4b41b2c79f2fb56a

commentmoduleyiiwidget


README

👁 License
👁 Latest Stable Version
👁 Latest Unstable Version
👁 Total Downloads

Code Status

👁 Scrutinizer Code Quality
👁 Code Coverage
👁 Travis CI Build Status
👁 Dependency Status

Installation

composer require "rmrevin/yii2-comments:~1.4"

Configuration

In config /protected/config/main.php

<?php
return [
	// ...
	'modules' => [
		// ...
		'comments' => [
		 'class' => 'rmrevin\yii\module\Comments\Module',
		 'userIdentityClass' => 'app\models\User',
		 'useRbac' => true,
		]
	],
	// ...
];

In your User model (or another model implements the interface IdentityInterface) need to implement the interface "\rmrevin\yii\module\Comments\interfaces\CommentatorInterface"

class User extends \yii\db\ActiveRecord
 implements
 \yii\web\IdentityInterface,
 \rmrevin\yii\module\Comments\interfaces\CommentatorInterface
{
 // ...
 
 public function getCommentatorAvatar()
 {
 return $this->avatar_url;
 }
 
 public function getCommentatorName()
 {
 return $this->name;
 }
 
 public function getCommentatorUrl()
 {
 return ['/profile', 'id' => $this->id]; // or false, if user does not have a public page
 }
 
 // ...
}

In auth manager add rules (if Module::$useRbac = true):

<?php
use \rmrevin\yii\module\Comments\Permission;
use \rmrevin\yii\module\Comments\rbac\ItsMyComment;

$AuthManager = \Yii::$app->getAuthManager();
$ItsMyCommentRule = new ItsMyComment();

$AuthManager->add($ItsMyCommentRule);

$AuthManager->add(new \yii\rbac\Permission([
 'name' => Permission::CREATE,
 'description' => 'Can create own comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
 'name' => Permission::UPDATE,
 'description' => 'Can update all comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
 'name' => Permission::UPDATE_OWN,
 'ruleName' => $ItsMyCommentRule->name,
 'description' => 'Can update own comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
 'name' => Permission::DELETE,
 'description' => 'Can delete all comments',
]));
$AuthManager->add(new \yii\rbac\Permission([
 'name' => Permission::DELETE_OWN,
 'ruleName' => $ItsMyCommentRule->name,
 'description' => 'Can delete own comments',
]));

Updating database schema

After you downloaded and configured rmrevin/yii2-comments, the last thing you need to do is updating your database schema by applying the migrations:

In command line:

php yii migrate/up --migrationPath=@vendor/rmrevin/yii2-comments/migrations/

Usage

In view

<?php
// ...

use rmrevin\yii\module\Comments;

echo Comments\widgets\CommentListWidget::widget([
 'entity' => (string) 'photo-15', // type and id
]);

Parameters

### Module parameters

  • userIdentityClass (required, string) The user identity class that Yii2 uses to provide identity information about the users in the App.

  • useRbac (optional, boolean) Default TRUE. Defines if the comment system will use Rbac validation to check the comment permissions when trying to update, delete or add new comments.

  • modelClasses (optional, string[]) Stores the user defined model classes that will be used instead of the default ones in the comment system. Must have a key => classname format. e.g. 'Comment' => '@app\comments\CommentModel'

Widget parameters

  • entity (required, string) The entity that will identify the comments under on section from all the comments in this module.

  • theme (optional, string) In case you want to use a theme in your application you should define here it's location.

  • viewParams (optional, array) Data that will be sent directly into the widget view files. Must have a key => data format. The key will be the variable name in the view. The variable CommentsDataProvider it's already taken.

  • options (optional, array) Default ['class' => 'comments-widget']. Option data array that will be sent into the div holding the comment system in your views.

  • pagination (optional, array) Pagination configuration that will be used in the comment panel. Default data:

public $pagination = 
 [
 'pageParam' => 'page',
 'pageSizeParam' => 'per-page',
 'pageSize' => 20,
 'pageSizeLimit' => [1, 50],
 ];
  • sort (optional, array) Type of sorting used to retrieve the comments into the panel. Can be sorted by any of the columns defined in the comment table. Default data:
 'defaultOrder' => [
 'id' => SORT_ASC,
 ],
  • showDeleted (optional, boolean) Default True. Defines if the comments panel will show a message indicating the deleted comments.

  • showCreateForm (optional, boolean) Default True. Will show or hide the form to add a comment in this panel.

Extending the package

### Extending Model files

Depending on which ones you need, you can set the modelMap config property:

	// ...
	'modules' => [
		// ...
		'comments' => [
		 'class' => 'rmrevin\yii\module\Comments\Module',
		 'userIdentityClass' => 'app\models\User',
		 'useRbac' => true,
		 'modelMap' => [
		 'Comment' => '@app\comments\CommentModel'
		 ]
		]
	],
	// ...

Attention: keep in mind that if you are changing the Comment model, the new class should always extend the package's original Comment class.

### Attaching behaviors and event handlers

The package allows you to attach behavior or event handler to any model. To do this you can set model map like so:

	// ...
	'modules' => [
		// ...
		'comments' => [
		 'class' => 'rmrevin\yii\module\Comments\Module',
		 'userIdentityClass' => 'app\models\User',
		 'useRbac' => true,
		 'modelMap' => [
		 'Comment' => [
		 'class' => '@app\comments\CommentModel',
		 'on event' => function(){
		 // code here
		 },
		 'as behavior' => 
		 ['class' => 'Foo'],
		 ]
		]
	],
	// ...

Extending View files

You can extend the view files supplied by this package using the theme component in the config file.

// app/config/web.php

'components' => [
 'view' => [
 'theme' => [
 'pathMap' => [
 '@vendor/rmrevin/yii2-comments/widgets/views' => '@app/views/comments', // example: @app/views/comment/comment-form.php
 ],
 ],
 ],
],

### Extending Widgets

To extend the widget code and behavior you only have to extend the widget classes and call them instead of the package's ones.