Commit faff2c48bfd09f5ee437dc3d513eb8ed4665c2b0

Authored by Yarik
1 parent 2ac6a2f4

Artbox comment created

CHANGELOG.md 0 → 100755
  1 +# Change Log
  2 +All notable changes to this project will be documented in this file.
  3 +
  4 +## 1.0.0 - 2017-03-21
  5 +### Added
  6 +- This CHANGELOG file to hopefully serve as an evolving example of a standardized open source project CHANGELOG.
  7 +- Added initial Artbox Comment extension.
0 \ No newline at end of file 8 \ No newline at end of file
LICENSE.md 0 → 100755
  1 +The Yii framework is free software. It is released under the terms of
  2 +the following BSD License.
  3 +
  4 +Copyright © 2008 by Yii Software LLC (http://www.yiisoft.com)
  5 +All rights reserved.
  6 +
  7 +Redistribution and use in source and binary forms, with or without
  8 +modification, are permitted provided that the following conditions
  9 +are met:
  10 +
  11 + * Redistributions of source code must retain the above copyright
  12 + notice, this list of conditions and the following disclaimer.
  13 + * Redistributions in binary form must reproduce the above copyright
  14 + notice, this list of conditions and the following disclaimer in
  15 + the documentation and/or other materials provided with the
  16 + distribution.
  17 + * Neither the name of Yii Software LLC nor the names of its
  18 + contributors may be used to endorse or promote products derived
  19 + from this software without specific prior written permission.
  20 +
  21 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22 +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  24 +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  25 +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  26 +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  27 +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  28 +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29 +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30 +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  31 +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  32 +POSSIBILITY OF SUCH DAMAGE.
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment; 3 + namespace artbox\webcomment;
4 4
5 - use artweb\artbox\comment\models\CommentModel;  
6 - use artweb\artbox\comment\models\RatingModel; 5 + use artbox\webcomment\models\CommentModel;
  6 + use artbox\webcomment\models\RatingModel;
7 use Yii; 7 use Yii;
  8 + use yii\base\InvalidConfigException;
8 use yii\console\Application; 9 use yii\console\Application;
9 - 10 +
10 /** 11 /**
11 * Class Module 12 * Class Module
  13 + *
12 * @package artweb\artbox\comment 14 * @package artweb\artbox\comment
13 */ 15 */
14 class Module extends \yii\base\Module 16 class Module extends \yii\base\Module
@@ -20,39 +22,44 @@ @@ -20,39 +22,44 @@
20 public static $name = 'artbox-comment'; 22 public static $name = 'artbox-comment';
21 23
22 /** 24 /**
23 - * User identity class, default to artweb\artbox\comment\models\User 25 + * User identity class, default to artbox\order\models\Customer
  26 + *
24 * @var string|null 27 * @var string|null
25 */ 28 */
26 - public $userIdentityClass = NULL; 29 + public $userIdentityClass = null;
27 30
28 /** 31 /**
29 - * Comment model class, default to artweb\artbox\comment\modules\models\CommentModel 32 + * Comment model class, default to artbox\webcomment\modules\models\CommentModel
  33 + *
30 * @var string comment model class 34 * @var string comment model class
31 */ 35 */
32 - public $commentModelClass = NULL;  
33 -  
34 - public $ratingModelClass = NULL; 36 + public $commentModelClass = null;
  37 +
  38 + public $ratingModelClass = null;
35 39
36 /** 40 /**
37 * This namespace will be used to load controller classes by prepending it to the controller 41 * This namespace will be used to load controller classes by prepending it to the controller
38 * class name. 42 * class name.
  43 + *
39 * @var string the namespace that controller classes are in. 44 * @var string the namespace that controller classes are in.
40 */ 45 */
41 - public $controllerNamespace = 'artweb\artbox\comment\controllers'; 46 + public $controllerNamespace = 'artbox\webcomment\controllers';
42 47
43 /** 48 /**
44 * @var \yii\db\Connection DB connection, default to \Yii::$app->db 49 * @var \yii\db\Connection DB connection, default to \Yii::$app->db
45 */ 50 */
46 - public $db = NULL; 51 + public $db = null;
47 52
48 /** 53 /**
49 * Key, used to encrypt and decrypt comment service data. 54 * Key, used to encrypt and decrypt comment service data.
  55 + *
50 * @var string Encryption key 56 * @var string Encryption key
51 */ 57 */
52 public static $encryptionKey = 'artbox-comment'; 58 public static $encryptionKey = 'artbox-comment';
53 59
54 /** 60 /**
55 * Whether to enable comment rating or not. 61 * Whether to enable comment rating or not.
  62 + *
56 * @var bool 63 * @var bool
57 */ 64 */
58 public static $enableRating = true; 65 public static $enableRating = true;
@@ -66,22 +73,34 @@ @@ -66,22 +73,34 @@
66 */ 73 */
67 public function init() 74 public function init()
68 { 75 {
69 - if($this->commentModelClass === NULL) { 76 + if ($this->commentModelClass === null) {
70 $this->commentModelClass = CommentModel::className(); 77 $this->commentModelClass = CommentModel::className();
71 } 78 }
72 - if(self::$enableRating && $this->ratingModelClass === NULL) { 79 + if (self::$enableRating && $this->ratingModelClass === null) {
73 $this->ratingModelClass = RatingModel::className(); 80 $this->ratingModelClass = RatingModel::className();
74 } 81 }
75 - if(\Yii::$app instanceof Application) {  
76 - $this->controllerNamespace = 'artweb\artbox\comment\commands';  
77 - } elseif($this->userIdentityClass === NULL) { 82 + if (\Yii::$app instanceof Application) {
  83 + $this->controllerNamespace = 'artbox\webcomment\commands';
  84 + } elseif ($this->userIdentityClass === null) {
78 $this->userIdentityClass = Yii::$app->getUser()->identityClass; 85 $this->userIdentityClass = Yii::$app->getUser()->identityClass;
79 } 86 }
80 - if($this->db === NULL) { 87 + if ($this->db === null) {
81 $this->db = \Yii::$app->db; 88 $this->db = \Yii::$app->db;
82 } 89 }
83 - Yii::setAlias('@artbox-comment', __DIR__); 90 + if (!Yii::getAlias('@artbox/webcomment', false)) {
  91 + Yii::setAlias('@artbox/webcomment', __DIR__);
  92 + }
84 parent::init(); 93 parent::init();
85 } 94 }
  95 +
  96 + /**
  97 + * Prompt to register current module
  98 + *
  99 + * @throws \yii\base\InvalidConfigException
  100 + */
  101 + public static function registerMe()
  102 + {
  103 + throw new InvalidConfigException(\Yii::t('artbox-comment', 'Register artbox-comment module'));
  104 + }
86 105
87 } 106 }
README.md 0 → 100755
  1 +Artbox Comment
  2 +===============================
  3 +
  4 +Artbox Comment is an extension for working with comments developed by Artweb written with [Yii 2 framework](http://www.yiiframework.com/).
  5 +
  6 +Comment extension includes functionality for creating and maintaining comments on the website.
  7 +
  8 +This extension works with Artbox Core application and enough to add fully functional comment system to the website.
  9 +
  10 +To prepare your application you should run migrations:
  11 +
  12 + php yii migrate --migationPath=vendor/artweb/artbox-webcomment/migrations
  13 +
  14 +DIRECTORY STRUCTURE
  15 +-------------------
  16 +
  17 +```
  18 +assets contains AssetBundles
  19 +behaviors contains Behaviors classes
  20 +components contains custom Classes, which don't belong to other groups
  21 +controllers contains controllers for core models
  22 +helpers contains helper classes to manipulate, for example static files
  23 + and HTML
  24 +messages contains translations for core strings
  25 +migrations contains migrations, which should be applied after extension
  26 + installation
  27 +models contains core models
  28 +views contains views files for core controllers
  29 +web contains assets and other files, which should be web available
  30 +widgets contains widgets
  31 +```
assets/CommentAsset.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\assets; 3 + namespace artbox\webcomment\assets;
4 4
5 use yii\web\AssetBundle; 5 use yii\web\AssetBundle;
6 6
7 /** 7 /**
8 * Class CommentAsset 8 * Class CommentAsset
9 - * @package artweb\artbox\comment\assets  
10 */ 9 */
11 class CommentAsset extends AssetBundle 10 class CommentAsset extends AssetBundle
12 { 11 {
@@ -14,7 +13,7 @@ @@ -14,7 +13,7 @@
14 /** 13 /**
15 * @inheritdoc 14 * @inheritdoc
16 */ 15 */
17 - public $sourcePath = '@artbox-comment/resources'; 16 + public $sourcePath = '@artbox/webcomment/resources';
18 17
19 /** 18 /**
20 * @inheritdoc 19 * @inheritdoc
behaviors/CommentBehavior.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\behaviors; 3 + namespace artbox\webcomment\behaviors;
4 4
5 - use artweb\artbox\comment\models\CommentModel;  
6 - use artweb\artbox\comment\models\interfaces\RatingCacheInterface; 5 + use artbox\webcomment\models\CommentModel;
  6 + use artbox\webcomment\models\interfaces\RatingCacheInterface;
7 use yii\base\Behavior; 7 use yii\base\Behavior;
8 use yii\base\InvalidConfigException; 8 use yii\base\InvalidConfigException;
  9 + use yii\base\InvalidParamException;
9 use yii\db\ActiveQuery; 10 use yii\db\ActiveQuery;
10 use yii\db\ActiveRecord; 11 use yii\db\ActiveRecord;
11 12
@@ -14,7 +15,7 @@ @@ -14,7 +15,7 @@
14 * 15 *
15 * @property ActiveQuery $averageRating 16 * @property ActiveQuery $averageRating
16 * @property CommentModel[] $comments 17 * @property CommentModel[] $comments
17 - * @package artweb\artbox\comment\behaviors 18 + * @package artbox\webcomment\behaviors
18 */ 19 */
19 class CommentBehavior extends Behavior 20 class CommentBehavior extends Behavior
20 { 21 {
@@ -46,7 +47,7 @@ @@ -46,7 +47,7 @@
46 public function attach($owner) 47 public function attach($owner)
47 { 48 {
48 if ($this->cacheRating) { 49 if ($this->cacheRating) {
49 - if (empty( $this->cacheModelName ) || !is_string($this->cacheModelName)) { 50 + if (empty($this->cacheModelName) || !is_string($this->cacheModelName)) {
50 throw new InvalidConfigException( 51 throw new InvalidConfigException(
51 'To use rating cache you must set $cacheModelName where to store it' 52 'To use rating cache you must set $cacheModelName where to store it'
52 ); 53 );
@@ -67,7 +68,7 @@ @@ -67,7 +68,7 @@
67 * 68 *
68 * @return string 69 * @return string
69 */ 70 */
70 - public function getCacheModelName():string 71 + public function getCacheModelName(): string
71 { 72 {
72 return $this->cacheModelName; 73 return $this->cacheModelName;
73 } 74 }
@@ -84,10 +85,8 @@ @@ -84,10 +85,8 @@
84 85
85 /** 86 /**
86 * Get model to hold rating cache 87 * Get model to hold rating cache
87 - *  
88 - * @return \artweb\artbox\comment\models\interfaces\RatingCacheInterface  
89 */ 88 */
90 - public function getCacheModel():RatingCacheInterface 89 + public function getCacheModel(): RatingCacheInterface
91 { 90 {
92 return $this->cacheModel; 91 return $this->cacheModel;
93 } 92 }
@@ -95,7 +94,7 @@ @@ -95,7 +94,7 @@
95 /** 94 /**
96 * Set model to hold cache 95 * Set model to hold cache
97 * 96 *
98 - * @param \artweb\artbox\comment\models\interfaces\RatingCacheInterface|null $value 97 + * @param \artbox\webcomment\models\interfaces\RatingCacheInterface|null $value
99 */ 98 */
100 private function setCacheModel(RatingCacheInterface $value = null) 99 private function setCacheModel(RatingCacheInterface $value = null)
101 { 100 {
@@ -133,13 +132,19 @@ @@ -133,13 +132,19 @@
133 * @var ActiveRecord $owner 132 * @var ActiveRecord $owner
134 */ 133 */
135 $owner = $this->owner; 134 $owner = $this->owner;
136 - $pk = $owner->primaryKey()[ 0 ]; 135 + $pkKeys = $owner->primaryKey();
  136 + if (!empty($pkKeys)) {
  137 + $pkKey = $pkKeys[ 0 ];
  138 + } else {
  139 + throw new InvalidParamException('Entity must have primary key.');
  140 + }
  141 + $pk = $owner->getAttribute($pkKey);
137 $query = $owner->hasMany(CommentModel::className(), [ 'entity_id' => $pk ]) 142 $query = $owner->hasMany(CommentModel::className(), [ 'entity_id' => $pk ])
138 ->where( 143 ->where(
139 [ 144 [
140 - 'artbox_comment.entity' => $owner::className(),  
141 - 'artbox_comment.status' => CommentModel::STATUS_ACTIVE,  
142 - 'artbox_comment.artbox_comment_pid' => null, 145 + 'artbox_comment.entity' => $owner::className(),
  146 + 'artbox_comment.status' => CommentModel::STATUS_ACTIVE,
  147 + 'artbox_comment.parent_id' => null,
143 ] 148 ]
144 ); 149 );
145 return $query; 150 return $query;
@@ -180,7 +185,7 @@ @@ -180,7 +185,7 @@
180 } 185 }
181 $averageRating = $this->getAverageRating() 186 $averageRating = $this->getAverageRating()
182 ->one(); 187 ->one();
183 - if (!empty( $averageRating )) { 188 + if (!empty($averageRating)) {
184 $averageRating->setValue($average); 189 $averageRating->setValue($average);
185 } else { 190 } else {
186 /** 191 /**
behaviors/ParentBehavior.php
1 <?php 1 <?php
2 - namespace artweb\artbox\comment\behaviors;  
3 2
4 - use artweb\artbox\comment\models\CommentModel; 3 + namespace artbox\webcomment\behaviors;
  4 +
  5 + use artbox\webcomment\models\CommentModel;
5 use yii\base\Behavior; 6 use yii\base\Behavior;
6 - use yii\base\Event;  
7 use yii\db\ActiveRecord; 7 use yii\db\ActiveRecord;
8 8
9 class ParentBehavior extends Behavior 9 class ParentBehavior extends Behavior
@@ -17,24 +17,24 @@ @@ -17,24 +17,24 @@
17 } 17 }
18 18
19 /** 19 /**
20 - * @param Event $event 20 + * After validate event
21 */ 21 */
22 - public function afterValidate($event) 22 + public function afterValidate()
23 { 23 {
24 /** 24 /**
25 * @var CommentModel $owner 25 * @var CommentModel $owner
26 */ 26 */
27 $owner = $this->owner; 27 $owner = $this->owner;
28 - if(!empty( $owner->artbox_comment_pid )) { 28 + if (!empty($owner->parent_id)) {
29 /** 29 /**
30 * @var CommentModel $parent 30 * @var CommentModel $parent
31 */ 31 */
32 $parent = CommentModel::find() 32 $parent = CommentModel::find()
33 - ->where([ 'artbox_comment_id' => $owner->artbox_comment_pid ]) 33 + ->where([ 'id' => $owner->parent_id ])
34 ->one(); 34 ->one();
35 - if(!empty( $parent->artbox_comment_pid )) {  
36 - $owner->related_id = $owner->artbox_comment_pid;  
37 - $owner->artbox_comment_pid = $parent->artbox_comment_pid; 35 + if (!empty($parent->parent_id)) {
  36 + $owner->related_id = $owner->parent_id;
  37 + $owner->parent_id = $parent->parent_id;
38 } 38 }
39 } 39 }
40 } 40 }
1 { 1 {
2 - "name": "artweb/artbox-comment",  
3 - "description": "Yii2 light-weight CMS", 2 + "name": "artweb/artbox-webcomment",
  3 + "description": "Artbox comment extension",
4 "license": "BSD-3-Clause", 4 "license": "BSD-3-Clause",
5 "minimum-stability": "dev", 5 "minimum-stability": "dev",
6 "type": "yii2-extension", 6 "type": "yii2-extension",
7 "require": { 7 "require": {
8 - "php": ">=5.4",  
9 - "yiisoft/yii2": "*",  
10 - "artweb/artbox": "dev-master" 8 + "php": ">=7.0",
  9 + "yiisoft/yii2": "~2.0",
  10 + "artweb/artbox-core": "~0.0.1"
11 }, 11 },
12 "autoload": { 12 "autoload": {
13 "psr-4": { 13 "psr-4": {
14 - "artweb\\artbox\\comment\": "" 14 + "artbox\\webcomment\": ""
15 } 15 }
16 } 16 }
17 } 17 }
18 \ No newline at end of file 18 \ No newline at end of file
controllers/DefaultController.php
1 <?php 1 <?php
2 - namespace artweb\artbox\comment\controllers;  
3 2
4 - use artweb\artbox\comment\models\CommentModel;  
5 - use artweb\artbox\comment\models\RatingModel;  
6 - use artweb\artbox\comment\Module; 3 + namespace artbox\webcomment\controllers;
  4 +
  5 + use artbox\webcomment\models\CommentModel;
  6 + use artbox\webcomment\models\RatingModel;
  7 + use artbox\webcomment\Module;
7 use yii\filters\AccessControl; 8 use yii\filters\AccessControl;
8 use yii\filters\VerbFilter; 9 use yii\filters\VerbFilter;
9 use yii\helpers\Json; 10 use yii\helpers\Json;
@@ -16,6 +17,7 @@ @@ -16,6 +17,7 @@
16 17
17 /** 18 /**
18 * Returns a list of behaviors that this component should behave as. 19 * Returns a list of behaviors that this component should behave as.
  20 + *
19 * @return array 21 * @return array
20 */ 22 */
21 public function behaviors() 23 public function behaviors()
@@ -49,41 +51,53 @@ @@ -49,41 +51,53 @@
49 * 51 *
50 * @param string $entity 52 * @param string $entity
51 * 53 *
52 - * @return array|null|Response 54 + * @return array|null|\yii\web\Response
  55 + * @throws \yii\base\InvalidConfigException
53 */ 56 */
54 public function actionCreate(string $entity) 57 public function actionCreate(string $entity)
55 { 58 {
56 \Yii::$app->response->format = Response::FORMAT_JSON; 59 \Yii::$app->response->format = Response::FORMAT_JSON;
57 /* @var $module Module */ 60 /* @var $module Module */
58 $module = \Yii::$app->getModule(Module::$name); 61 $module = \Yii::$app->getModule(Module::$name);
  62 + if (!$module) {
  63 + Module::registerMe();
  64 + }
59 $entity_data_json = \Yii::$app->getSecurity() 65 $entity_data_json = \Yii::$app->getSecurity()
60 ->decryptByKey($entity, $module::$encryptionKey); 66 ->decryptByKey($entity, $module::$encryptionKey);
61 - if($entity_data_json != false) { 67 + if ($entity_data_json != false) {
62 $entity_data = Json::decode($entity_data_json); 68 $entity_data = Json::decode($entity_data_json);
63 $commentModelClass = $module->commentModelClass; 69 $commentModelClass = $module->commentModelClass;
64 /** 70 /**
65 * @var CommentModel $model 71 * @var CommentModel $model
66 */ 72 */
67 - $model = new $commentModelClass([  
68 - 'scenario' => \Yii::$app->user->getIsGuest() ? $commentModelClass::SCENARIO_GUEST : $commentModelClass::SCENARIO_USER,  
69 - ]);  
70 - if($model->load(\Yii::$app->request->post())) { 73 + $model = new $commentModelClass(
  74 + [
  75 + 'scenario' => \Yii::$app->user->getIsGuest(
  76 + ) ? CommentModel::SCENARIO_GUEST : CommentModel::SCENARIO_USER,
  77 + ]
  78 + );
  79 + if ($model->load(\Yii::$app->request->post())) {
71 $model->setAttributes($entity_data); 80 $model->setAttributes($entity_data);
72 - if($model->save()) {  
73 - if(empty( $model->artbox_comment_pid ) && $module::$enableRating) { 81 + if ($model->save()) {
  82 + if (empty($model->parent_id) && $module::$enableRating) {
74 $ratingModelClass = $module->ratingModelClass; 83 $ratingModelClass = $module->ratingModelClass;
75 /** 84 /**
76 * @var RatingModel $rating 85 * @var RatingModel $rating
77 */ 86 */
78 - $rating = new $ratingModelClass([  
79 - 'model' => $model::className(),  
80 - 'model_id' => $model->primaryKey,  
81 - ]);  
82 - if($rating->load(\Yii::$app->request->post())) { 87 + $rating = new $ratingModelClass(
  88 + [
  89 + 'model' => $model::className(),
  90 + 'model_id' => $model->primaryKey,
  91 + ]
  92 + );
  93 + if ($rating->load(\Yii::$app->request->post())) {
83 $rating->save(); 94 $rating->save();
84 } 95 }
85 } 96 }
86 - \Yii::$app->session->setFlash('artbox_comment_success', \Yii::t('artbox-comment', 'Comment posted')); 97 + \Yii::$app->session->setFlash(
  98 + 'artbox_comment_success',
  99 + \Yii::t('artbox-comment', 'Comment posted')
  100 + );
87 return [ 'status' => 'success' ]; 101 return [ 'status' => 'success' ];
88 } else { 102 } else {
89 return [ 103 return [
@@ -104,20 +118,23 @@ @@ -104,20 +118,23 @@
104 * 118 *
105 * @param integer $id Comment ID 119 * @param integer $id Comment ID
106 * 120 *
107 - * @return string Comment text 121 + * @return array Comment text
108 */ 122 */
109 public function actionDelete($id) 123 public function actionDelete($id)
110 { 124 {
111 \Yii::$app->response->format = Response::FORMAT_JSON; 125 \Yii::$app->response->format = Response::FORMAT_JSON;
112 $model = $this->findModel($id); 126 $model = $this->findModel($id);
113 - if($model->deleteComment()) { 127 + if ($model->deleteComment()) {
114 return [ 128 return [
115 'status' => 'success', 129 'status' => 'success',
116 - 'message' => \Yii::t('yii2mod.comments', 'Comment has been deleted.'), 130 + 'message' => \Yii::t('artbox-comment', 'Comment has been deleted.'),
117 ]; 131 ];
118 } else { 132 } else {
119 \Yii::$app->response->setStatusCode(500); 133 \Yii::$app->response->setStatusCode(500);
120 - return \Yii::t('yii2mod.comments', 'Comment has not been deleted. Please try again!'); 134 + return [
  135 + 'status' => 'error',
  136 + 'message' => \Yii::t('artbox-comment', 'Comment has not been deleted. Please try again!'),
  137 + ];
121 } 138 }
122 } 139 }
123 140
@@ -126,17 +143,26 @@ @@ -126,17 +143,26 @@
126 * 143 *
127 * @param integer|array $id Comment ID 144 * @param integer|array $id Comment ID
128 * 145 *
129 - * @return CommentModel  
130 - * @throws NotFoundHttpException 146 + * @return \artbox\webcomment\models\CommentModel
  147 + * @throws \yii\base\InvalidConfigException
  148 + * @throws \yii\web\NotFoundHttpException
131 */ 149 */
132 protected function findModel(int $id): CommentModel 150 protected function findModel(int $id): CommentModel
133 { 151 {
  152 + /**
  153 + * @var Module $module
  154 + */
  155 + $module = \Yii::$app->getModule(Module::$name);
  156 + if (!$module) {
  157 + Module::registerMe();
  158 + }
134 /** @var CommentModel $model */ 159 /** @var CommentModel $model */
135 - $commentModelClass = \Yii::$app->getModule(Module::$name)->commentModelClass;  
136 - if(( $model = $commentModelClass::findOne($id) ) !== NULL) {  
137 - return $model;  
138 - } else {  
139 - throw new NotFoundHttpException(\Yii::t('yii2mod.comments', 'The requested page does not exist.')); 160 + $commentModelClass = $module->commentModelClass;
  161 + if (method_exists($commentModelClass, 'findOne')) {
  162 + if ($model = $commentModelClass::findOne($id) !== null) {
  163 + return $model;
  164 + }
140 } 165 }
  166 + throw new NotFoundHttpException(\Yii::t('artbox-comment', 'The requested page does not exist.'));
141 } 167 }
142 } 168 }
143 \ No newline at end of file 169 \ No newline at end of file
controllers/ManageController.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\controllers; 3 + namespace artbox\webcomment\controllers;
4 4
5 - use artweb\artbox\comment\models\CommentModel;  
6 - use artweb\artbox\comment\models\CommentModelSearch;  
7 - use artweb\artbox\comment\Module; 5 + use artbox\webcomment\models\CommentModel;
  6 + use artbox\webcomment\models\CommentModelSearch;
  7 + use artbox\webcomment\Module;
8 use Yii; 8 use Yii;
9 use yii\filters\VerbFilter; 9 use yii\filters\VerbFilter;
10 use yii\web\Controller; 10 use yii\web\Controller;
@@ -42,9 +42,16 @@ @@ -42,9 +42,16 @@
42 */ 42 */
43 public function actionIndex() 43 public function actionIndex()
44 { 44 {
  45 + /**
  46 + * @var Module $module
  47 + */
  48 + $module = \Yii::$app->getModule(Module::$name);
  49 + if (!$module) {
  50 + Module::registerMe();
  51 + }
45 $searchModel = new CommentModelSearch(); 52 $searchModel = new CommentModelSearch();
46 $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 53 $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
47 - $commentModel = Yii::$app->getModule(Module::$name)->commentModelClass; 54 + $commentModel = $module->commentModelClass;
48 55
49 return $this->render( 56 return $this->render(
50 'index', 57 'index',
@@ -67,10 +74,11 @@ @@ -67,10 +74,11 @@
67 public function actionUpdate($id) 74 public function actionUpdate($id)
68 { 75 {
69 $model = $this->findModel($id); 76 $model = $this->findModel($id);
  77 + $model->scenario = $model::SCENARIO_ADMIN;
70 78
71 if ($model->load(Yii::$app->request->post()) && $model->save()) { 79 if ($model->load(Yii::$app->request->post()) && $model->save()) {
72 Yii::$app->session->setFlash( 80 Yii::$app->session->setFlash(
73 - 'artbox_comment_success', /*Yii::t('yii2mod.comments', 'Comment has been saved.')*/ 81 + 'artbox_comment_success',
74 'Comment has been saved.' 82 'Comment has been saved.'
75 ); 83 );
76 return $this->redirect([ 'index' ]); 84 return $this->redirect([ 'index' ]);
@@ -84,12 +92,23 @@ @@ -84,12 +92,23 @@
84 ); 92 );
85 93
86 } 94 }
87 - 95 +
  96 + /**
  97 + * Answer to particular comment from backend
  98 + *
  99 + * @param $id
  100 + *
  101 + * @return string|\yii\web\Response
  102 + */
88 public function actionAnswer($id) 103 public function actionAnswer($id)
89 { 104 {
90 $model = $this->findModel($id); 105 $model = $this->findModel($id);
91 -  
92 - $answer = new CommentModel(); 106 +
  107 + $answer = new CommentModel(
  108 + [
  109 + 'scenario' => CommentModel::SCENARIO_ADMIN_ANSWER,
  110 + ]
  111 + );
93 112
94 if ($answer->load(Yii::$app->request->post()) && $answer->save()) { 113 if ($answer->load(Yii::$app->request->post()) && $answer->save()) {
95 Yii::$app->session->setFlash( 114 Yii::$app->session->setFlash(
@@ -138,11 +157,11 @@ @@ -138,11 +157,11 @@
138 */ 157 */
139 protected function findModel($id) 158 protected function findModel($id)
140 { 159 {
141 - if (( $model = CommentModel::findOne($id) ) !== NULL) { 160 + if (( $model = CommentModel::findOne($id) ) !== null) {
142 return $model; 161 return $model;
143 } else { 162 } else {
144 - throw new NotFoundHttpException(/*Yii::t('yii2mod.comments', 'The requested page does not exist.')*/  
145 - 'The requested page does not exist.' 163 + throw new NotFoundHttpException(
  164 + \Yii::t('artbox-comment', 'The requested page does not exist.')
146 ); 165 );
147 } 166 }
148 } 167 }
migrations/m160724_162347_artbox_comment.php
@@ -10,43 +10,40 @@ @@ -10,43 +10,40 @@
10 $this->createTable( 10 $this->createTable(
11 '{{%artbox_comment}}', 11 '{{%artbox_comment}}',
12 [ 12 [
13 - 'artbox_comment_id' => $this->primaryKey(),  
14 - 'text' => $this->text()  
15 - ->notNull(),  
16 - 'user_id' => $this->integer(),  
17 - 'username' => $this->string(),  
18 - 'email' => $this->string(),  
19 - 'created_at' => $this->integer()  
20 - ->notNull(),  
21 - 'updated_at' => $this->integer()  
22 - ->notNull(),  
23 - 'deleted_at' => $this->integer(),  
24 - 'status' => $this->integer()  
25 - ->notNull()  
26 - ->defaultValue(1),  
27 - 'artbox_comment_pid' => $this->integer(),  
28 - 'related_id' => $this->integer(),  
29 - 'ip' => $this->string()  
30 - ->notNull(),  
31 - 'info' => $this->text(), 13 + 'id' => $this->primaryKey(),
  14 + 'text' => $this->text()
  15 + ->notNull(),
  16 + 'customer_id' => $this->integer(),
  17 + 'username' => $this->string(),
  18 + 'email' => $this->string(),
  19 + 'created_at' => $this->integer()
  20 + ->notNull(),
  21 + 'updated_at' => $this->integer()
  22 + ->notNull(),
  23 + 'deleted_at' => $this->integer(),
  24 + 'status' => $this->integer()
  25 + ->notNull()
  26 + ->defaultValue(1),
  27 + 'parent_id' => $this->integer(),
  28 + 'related_id' => $this->integer(),
  29 + 'ip' => $this->string()
  30 + ->notNull(),
  31 + 'info' => $this->text(),
  32 + 'entity' => $this->string()
  33 + ->notNull()
  34 + ->defaultValue(''),
  35 + 'entity_id' => $this->integer()
  36 + ->notNull()
  37 + ->defaultValue(1),
32 ] 38 ]
33 ); 39 );
34 40
35 $this->addForeignKey( 41 $this->addForeignKey(
36 - 'user_id_user', 42 + 'parent_id_artbox_comment',
37 '{{%artbox_comment}}', 43 '{{%artbox_comment}}',
38 - 'user_id',  
39 - 'customer',  
40 - 'id',  
41 - 'CASCADE',  
42 - 'CASCADE'  
43 - );  
44 - $this->addForeignKey(  
45 - 'artbox_comment_pid_artbox_comment',  
46 - '{{%artbox_comment}}',  
47 - 'artbox_comment_pid', 44 + 'parent_id',
48 'artbox_comment', 45 'artbox_comment',
49 - 'artbox_comment_id', 46 + 'id',
50 'CASCADE', 47 'CASCADE',
51 'CASCADE' 48 'CASCADE'
52 ); 49 );
@@ -55,7 +52,7 @@ @@ -55,7 +52,7 @@
55 '{{%artbox_comment}}', 52 '{{%artbox_comment}}',
56 'related_id', 53 'related_id',
57 'artbox_comment', 54 'artbox_comment',
58 - 'artbox_comment_id', 55 + 'id',
59 'CASCADE', 56 'CASCADE',
60 'CASCADE' 57 'CASCADE'
61 ); 58 );
@@ -63,10 +60,10 @@ @@ -63,10 +60,10 @@
63 $this->createTable( 60 $this->createTable(
64 '{{%artbox_like}}', 61 '{{%artbox_like}}',
65 [ 62 [
66 - 'artbox_like_id' => $this->primaryKey(), 63 + 'id' => $this->primaryKey(),
67 'artbox_comment_id' => $this->integer() 64 'artbox_comment_id' => $this->integer()
68 ->notNull(), 65 ->notNull(),
69 - 'user_id' => $this->integer(), 66 + 'customer_id' => $this->integer(),
70 'created_at' => $this->integer() 67 'created_at' => $this->integer()
71 ->notNull(), 68 ->notNull(),
72 'is_like' => $this->integer() 69 'is_like' => $this->integer()
@@ -80,17 +77,16 @@ @@ -80,17 +77,16 @@
80 '{{%artbox_like}}', 77 '{{%artbox_like}}',
81 'artbox_comment_id', 78 'artbox_comment_id',
82 'artbox_comment', 79 'artbox_comment',
83 - 'artbox_comment_id', 80 + 'id',
84 'CASCADE', 81 'CASCADE',
85 'CASCADE' 82 'CASCADE'
86 ); 83 );
87 - $this->addForeignKey('user_id_user', '{{%artbox_like}}', 'user_id', 'customer', 'id', 'CASCADE', 'CASCADE');  
88 $this->createIndex( 84 $this->createIndex(
89 'artbox_like_unique', 85 'artbox_like_unique',
90 '{{%artbox_like}}', 86 '{{%artbox_like}}',
91 [ 87 [
92 'artbox_comment_id', 88 'artbox_comment_id',
93 - 'user_id', 89 + 'customer_id',
94 'is_like', 90 'is_like',
95 ], 91 ],
96 true 92 true
@@ -100,11 +96,9 @@ @@ -100,11 +96,9 @@
100 96
101 public function down() 97 public function down()
102 { 98 {
103 - $this->dropForeignKey('user_id_user', '{{%artbox_comment}}');  
104 - $this->dropForeignKey('artbox_comment_pid_artbox_comment', '{{%artbox_comment}}'); 99 + $this->dropForeignKey('parent_id_artbox_comment', '{{%artbox_comment}}');
105 $this->dropForeignKey('related_id_artbox_comment', '{{%artbox_comment}}'); 100 $this->dropForeignKey('related_id_artbox_comment', '{{%artbox_comment}}');
106 $this->dropForeignKey('artbox_comment_id_artbox_comment', '{{%artbox_like}}'); 101 $this->dropForeignKey('artbox_comment_id_artbox_comment', '{{%artbox_like}}');
107 - $this->dropForeignKey('user_id_user', '{{%artbox_like}}');  
108 $this->dropIndex('artbox_like_unique', '{{%artbox_like}}'); 102 $this->dropIndex('artbox_like_unique', '{{%artbox_like}}');
109 $this->dropTable('{{%artbox_comment}}'); 103 $this->dropTable('{{%artbox_comment}}');
110 $this->dropTable('{{%artbox_like}}'); 104 $this->dropTable('{{%artbox_like}}');
migrations/m160726_092634_add_entity_fields.php deleted
1 -<?php  
2 -  
3 - use yii\db\Migration;  
4 -  
5 - class m160726_092634_add_entity_fields extends Migration  
6 - {  
7 -  
8 - public function up()  
9 - {  
10 - $this->addColumn('{{%artbox_comment}}', 'entity', $this->string()  
11 - ->notNull()  
12 - ->defaultValue(''));  
13 - $this->addColumn('{{%artbox_comment}}', 'entity_id', $this->integer()  
14 - ->notNull()  
15 - ->defaultValue(1));  
16 - }  
17 -  
18 - public function down()  
19 - {  
20 - $this->dropColumn('{{%artbox_comment}}', 'entity');  
21 - $this->dropColumn('{{%artbox_comment}}', 'entity_id');  
22 - }  
23 - }  
migrations/m160726_211227_create_artbox_comment_rating.php
@@ -10,33 +10,23 @@ @@ -10,33 +10,23 @@
10 $this->createTable( 10 $this->createTable(
11 '{{%artbox_comment_rating}}', 11 '{{%artbox_comment_rating}}',
12 [ 12 [
13 - 'artbox_comment_rating_id' => $this->primaryKey(),  
14 - 'created_at' => $this->integer()  
15 - ->notNull(),  
16 - 'updated_at' => $this->integer()  
17 - ->notNull(),  
18 - 'user_id' => $this->integer(),  
19 - 'value' => $this->float(),  
20 - 'model' => $this->string()  
21 - ->notNull(),  
22 - 'model_id' => $this->integer()  
23 - ->notNull(), 13 + 'id' => $this->primaryKey(),
  14 + 'created_at' => $this->integer()
  15 + ->notNull(),
  16 + 'updated_at' => $this->integer()
  17 + ->notNull(),
  18 + 'customer_id' => $this->integer(),
  19 + 'value' => $this->float(),
  20 + 'model' => $this->string()
  21 + ->notNull(),
  22 + 'model_id' => $this->integer()
  23 + ->notNull(),
24 ] 24 ]
25 ); 25 );
26 - $this->addForeignKey(  
27 - 'user_id_user',  
28 - '{{%artbox_comment_rating}}',  
29 - 'user_id',  
30 - 'customer',  
31 - 'id',  
32 - 'CASCADE',  
33 - 'CASCADE'  
34 - );  
35 } 26 }
36 27
37 public function down() 28 public function down()
38 { 29 {
39 - $this->dropForeignKey('user_id_user', '{{%artbox_comment_rating}}');  
40 $this->dropTable('{{%artbox_comment_rating}}'); 30 $this->dropTable('{{%artbox_comment_rating}}');
41 } 31 }
42 } 32 }
migrations/order-to-comment/m170525_095043_order_to_comment.php 0 → 100755
  1 +<?php
  2 +
  3 + use yii\db\Migration;
  4 +
  5 + class m170525_095043_order_to_comment extends Migration
  6 + {
  7 + public function safeUp()
  8 + {
  9 + $this->addForeignKey(
  10 + 'customer_id_customer',
  11 + '{{%artbox_comment}}',
  12 + 'customer_id',
  13 + 'customer',
  14 + 'id',
  15 + 'CASCADE',
  16 + 'CASCADE'
  17 + );
  18 +
  19 + $this->addForeignKey(
  20 + 'customer_id_customer',
  21 + '{{%artbox_like}}',
  22 + 'customer_id',
  23 + 'customer',
  24 + 'id',
  25 + 'CASCADE',
  26 + 'CASCADE'
  27 + );
  28 + }
  29 +
  30 + public function safeDown()
  31 + {
  32 + $this->dropForeignKey('customer_id_customer', '{{%artbox_comment}}');
  33 + $this->dropForeignKey('customer_id_customer', '{{%artbox_like}}');
  34 + }
  35 + }
migrations/order-to-comment/m170525_095044_order_to_rating.php 0 → 100755
  1 +<?php
  2 +
  3 + use yii\db\Migration;
  4 +
  5 + class m170525_095044_order_to_rating extends Migration
  6 + {
  7 + public function safeUp()
  8 + {
  9 + $this->addForeignKey(
  10 + 'customer_id_customer',
  11 + '{{%artbox_comment_rating}}',
  12 + 'customer_id',
  13 + 'customer',
  14 + 'id',
  15 + 'CASCADE',
  16 + 'CASCADE'
  17 + );
  18 + }
  19 +
  20 + public function safeDown()
  21 + {
  22 + $this->dropForeignKey('customer_id_customer', '{{%artbox_comment_rating}}');
  23 +
  24 + }
  25 + }
models/CommentModel.php
1 <?php 1 <?php
2 - namespace artweb\artbox\comment\models;  
3 2
4 - use artweb\artbox\comment\behaviors\ParentBehavior;  
5 - use artweb\artbox\comment\models\interfaces\CommentInterface;  
6 - use artweb\artbox\ecommerce\models\Product; 3 + namespace artbox\webcomment\models;
  4 +
  5 + use artbox\webcomment\behaviors\ParentBehavior;
  6 + use artbox\webcomment\models\interfaces\CommentInterface;
7 use yii\behaviors\AttributeBehavior; 7 use yii\behaviors\AttributeBehavior;
8 use yii\behaviors\BlameableBehavior; 8 use yii\behaviors\BlameableBehavior;
9 use yii\behaviors\TimestampBehavior; 9 use yii\behaviors\TimestampBehavior;
10 use yii\data\ActiveDataProvider; 10 use yii\data\ActiveDataProvider;
11 use yii\db\ActiveRecord; 11 use yii\db\ActiveRecord;
12 - use yii\helpers\Html;  
13 - use yii\helpers\VarDumper;  
14 12
15 /** 13 /**
16 * Class CommentModel 14 * Class CommentModel
17 * 15 *
18 - * @property int $artbox_comment_id  
19 - * @property string $text  
20 - * @property int $user_id  
21 - * @property string $username  
22 - * @property string $email  
23 - * @property int $created_at  
24 - * @property int $updated_at  
25 - * @property int $deleted_at  
26 - * @property int $status  
27 - * @property int $artbox_comment_pid  
28 - * @property int $related_id  
29 - * @property string $ip  
30 - * @property string $info  
31 - * @property string $entity  
32 - * @property int $entity_id  
33 - * @package artweb\artbox\comment\models  
34 - * @property ActiveRecord $entityModel  
35 - * @property string $link 16 + * @property int $id
  17 + * @property string $text
  18 + * @property int $customer_id
  19 + * @property string $username
  20 + * @property string $email
  21 + * @property int $created_at
  22 + * @property int $updated_at
  23 + * @property int $deleted_at
  24 + * @property int $status
  25 + * @property int $parent_id
  26 + * @property int $related_id
  27 + * @property string $ip
  28 + * @property string $info
  29 + * @property string $entity
  30 + * @property int $entity_id
  31 + * @property ActiveRecord $entityModel
  32 + * @property string $link
  33 + * @property \artbox\webcomment\models\CommentModel[] $children
  34 + * @property \artbox\order\models\Customer $customer
36 */ 35 */
37 class CommentModel extends ActiveRecord implements CommentInterface 36 class CommentModel extends ActiveRecord implements CommentInterface
38 { 37 {
@@ -43,11 +42,16 @@ @@ -43,11 +42,16 @@
43 42
44 const SCENARIO_USER = 'user'; 43 const SCENARIO_USER = 'user';
45 const SCENARIO_GUEST = 'guest'; 44 const SCENARIO_GUEST = 'guest';
  45 + const SCENARIO_ADMIN = 'admin';
  46 + const SCENARIO_ADMIN_ANSWER = 'admin';
46 47
47 public $encryptedEntity; 48 public $encryptedEntity;
48 49
49 public $entityId; 50 public $entityId;
50 - 51 +
  52 + /**
  53 + * @inheritdoc
  54 + */
51 public function scenarios() 55 public function scenarios()
52 { 56 {
53 $scenarios = parent::scenarios(); 57 $scenarios = parent::scenarios();
@@ -55,7 +59,7 @@ @@ -55,7 +59,7 @@
55 'text', 59 'text',
56 'entity', 60 'entity',
57 'entity_id', 61 'entity_id',
58 - 'artbox_comment_pid', 62 + 'parent_id',
59 'status', 63 'status',
60 ]; 64 ];
61 $scenarios[ self::SCENARIO_GUEST ] = [ 65 $scenarios[ self::SCENARIO_GUEST ] = [
@@ -66,14 +70,32 @@ @@ -66,14 +70,32 @@
66 'email', 70 'email',
67 'status', 71 'status',
68 ]; 72 ];
  73 + $scenarios[ self::SCENARIO_ADMIN ] = [
  74 + 'text',
  75 + 'status',
  76 + ];
  77 + $scenarios[ self::SCENARIO_ADMIN_ANSWER ] = [
  78 + 'text',
  79 + 'parent_id',
  80 + 'customer_id',
  81 + 'entity',
  82 + 'entity_id',
  83 + 'status',
  84 + ];
69 return $scenarios; 85 return $scenarios;
70 } 86 }
71 - 87 +
  88 + /**
  89 + * @inheritdoc
  90 + */
72 public static function tableName() 91 public static function tableName()
73 { 92 {
74 return '{{%artbox_comment}}'; 93 return '{{%artbox_comment}}';
75 } 94 }
76 - 95 +
  96 + /**
  97 + * @inheritdoc
  98 + */
77 public function rules() 99 public function rules()
78 { 100 {
79 return [ 101 return [
@@ -82,16 +104,10 @@ @@ -82,16 +104,10 @@
82 'text', 104 'text',
83 'entity', 105 'entity',
84 'entity_id', 106 'entity_id',
85 - ],  
86 - 'required',  
87 - ],  
88 - [  
89 - [  
90 'username', 107 'username',
91 'email', 108 'email',
92 ], 109 ],
93 'required', 110 'required',
94 - 'on' => self::SCENARIO_GUEST,  
95 ], 111 ],
96 [ 112 [
97 [ 113 [
@@ -110,7 +126,7 @@ @@ -110,7 +126,7 @@
110 [ 126 [
111 [ 127 [
112 'entity_id', 128 'entity_id',
113 - 'artbox_comment_pid', 129 + 'parent_id',
114 ], 130 ],
115 'integer', 131 'integer',
116 ], 132 ],
@@ -120,14 +136,17 @@ @@ -120,14 +136,17 @@
120 'value' => 0, 136 'value' => 0,
121 ], 137 ],
122 [ 138 [
123 - [ 'artbox_comment_pid' ], 139 + [ 'parent_id' ],
124 'exist', 140 'exist',
125 - 'targetAttribute' => 'artbox_comment_id', 141 + 'targetAttribute' => 'id',
126 'skipOnError' => true, 142 'skipOnError' => true,
127 ], 143 ],
128 ]; 144 ];
129 } 145 }
130 - 146 +
  147 + /**
  148 + * @inheritdoc
  149 + */
131 public function behaviors() 150 public function behaviors()
132 { 151 {
133 return [ 152 return [
@@ -136,7 +155,7 @@ @@ -136,7 +155,7 @@
136 ], 155 ],
137 [ 156 [
138 'class' => BlameableBehavior::className(), 157 'class' => BlameableBehavior::className(),
139 - 'createdByAttribute' => 'user_id', 158 + 'createdByAttribute' => 'customer_id',
140 'updatedByAttribute' => false, 159 'updatedByAttribute' => false,
141 ], 160 ],
142 [ 161 [
@@ -144,7 +163,7 @@ @@ -144,7 +163,7 @@
144 'attributes' => [ 163 'attributes' => [
145 ActiveRecord::EVENT_BEFORE_INSERT => 'ip', 164 ActiveRecord::EVENT_BEFORE_INSERT => 'ip',
146 ], 165 ],
147 - 'value' => function($event) { 166 + 'value' => function () {
148 return \Yii::$app->request->userIP; 167 return \Yii::$app->request->userIP;
149 }, 168 },
150 ], 169 ],
@@ -153,58 +172,88 @@ @@ -153,58 +172,88 @@
153 ], 172 ],
154 ]; 173 ];
155 } 174 }
156 - 175 +
  176 + /**
  177 + * @inheritdoc
  178 + */
157 public function attributeLabels() 179 public function attributeLabels()
158 { 180 {
159 return [ 181 return [
160 - 'artbox_comment_id' => \Yii::t('artbox-comment', 'ID'),  
161 - 'text' => \Yii::t('artbox-comment', 'Text'),  
162 - 'user_id' => \Yii::t('artbox-comment', 'User'),  
163 - 'username' => \Yii::t('artbox-comment', 'Username'),  
164 - 'email' => 'Email',  
165 - 'date_add' => \Yii::t('artbox-comment', 'Date add'),  
166 - 'updated_at' => \Yii::t('artbox-comment', 'Date update'),  
167 - 'deleted_at' => \Yii::t('artbox-comment', 'Date delete'),  
168 - 'status' => \Yii::t('artbox-comment', 'Status'),  
169 - 'artbox_comment_pid' => \Yii::t('artbox-comment', 'Comment parent'),  
170 - 'related_id' => \Yii::t('artbox-comment', 'Comment related'),  
171 - 'ip' => 'IP',  
172 - 'entity' => \Yii::t('artbox-comment', 'Entity'),  
173 - 'info' => \Yii::t('artbox-comment', 'Info'),  
174 - 'entity_id' => \Yii::t('artbox-comment', 'Entity ID'), 182 + 'id' => \Yii::t('artbox-comment', 'ID'),
  183 + 'text' => \Yii::t('artbox-comment', 'Text'),
  184 + 'customer_id' => \Yii::t('artbox-comment', 'User'),
  185 + 'username' => \Yii::t('artbox-comment', 'Username'),
  186 + 'email' => 'Email',
  187 + 'created_at' => \Yii::t('artbox-comment', 'Date add'),
  188 + 'updated_at' => \Yii::t('artbox-comment', 'Date update'),
  189 + 'deleted_at' => \Yii::t('artbox-comment', 'Date delete'),
  190 + 'status' => \Yii::t('artbox-comment', 'Status'),
  191 + 'parent_id' => \Yii::t('artbox-comment', 'Comment parent'),
  192 + 'related_id' => \Yii::t('artbox-comment', 'Comment related'),
  193 + 'ip' => 'IP',
  194 + 'entity' => \Yii::t('artbox-comment', 'Entity'),
  195 + 'info' => \Yii::t('artbox-comment', 'Info'),
  196 + 'entity_id' => \Yii::t('artbox-comment', 'Entity ID'),
175 ]; 197 ];
176 } 198 }
177 - 199 +
  200 + /**
  201 + * Set Entity of Comment model
  202 + *
  203 + * @param string $entity
  204 + */
178 public function setEntity(string $entity) 205 public function setEntity(string $entity)
179 { 206 {
180 $this->entity = $entity; 207 $this->entity = $entity;
181 } 208 }
182 - 209 +
  210 + /**
  211 + * Get Entity of Comment model
  212 + *
  213 + * @return string
  214 + */
183 public function getEntity(): string 215 public function getEntity(): string
184 { 216 {
185 return $this->entity; 217 return $this->entity;
186 } 218 }
187 - 219 +
  220 + /**
  221 + * Get ActiveDataProvider of comments for particular Entity according to its EntityId
  222 + *
  223 + * @param string $entity Entity name
  224 + * @param int $entityId Entity Id
  225 + *
  226 + * @return \yii\data\ActiveDataProvider
  227 + */
188 public static function getTree(string $entity, int $entityId): ActiveDataProvider 228 public static function getTree(string $entity, int $entityId): ActiveDataProvider
189 { 229 {
  230 + $query = self::find()
  231 + ->with(
  232 + [
  233 + 'children' => function ($query) {
  234 + /**
  235 + * @var \yii\db\ActiveQuery $query
  236 + */
  237 + if (class_exists(self::getCustomerClass())) {
  238 + $query->with('customer');
  239 + }
  240 + },
  241 + ]
  242 + )
  243 + ->where(
  244 + [
  245 + 'entity' => $entity,
  246 + 'entity_id' => $entityId,
  247 + 'status' => self::STATUS_ACTIVE,
  248 + 'parent_id' => null,
  249 + ]
  250 + );
  251 + if (class_exists(self::getCustomerClass())) {
  252 + $query->with('customer');
  253 + }
190 return new ActiveDataProvider( 254 return new ActiveDataProvider(
191 [ 255 [
192 - 'query' => self::find()  
193 - ->with(  
194 - [  
195 - 'children',  
196 - 'user',  
197 - 'children.user',  
198 - ]  
199 - )  
200 - ->where(  
201 - [  
202 - 'entity' => $entity,  
203 - 'entity_id' => $entityId,  
204 - 'status' => 1,  
205 - 'artbox_comment_pid' => NULL,  
206 - ]  
207 - ), 256 + 'query' => $query,
208 'pagination' => [ 257 'pagination' => [
209 'pageSize' => 20, 258 'pageSize' => 20,
210 ], 259 ],
@@ -216,93 +265,128 @@ @@ -216,93 +265,128 @@
216 ] 265 ]
217 ); 266 );
218 } 267 }
219 - 268 +
  269 + /**
  270 + * Delete comment
  271 + *
  272 + * @return bool
  273 + */
220 public function deleteComment(): bool 274 public function deleteComment(): bool
221 { 275 {
222 - if (\Yii::$app->user->id != NULL && \Yii::$app->user->id == $this->user_id) { 276 + if (!\Yii::$app->user->isGuest && \Yii::$app->user->id == $this->customer_id) {
223 if ($this->delete()) { 277 if ($this->delete()) {
224 return true; 278 return true;
225 } 279 }
226 } 280 }
227 return false; 281 return false;
228 } 282 }
229 - 283 +
  284 + /**
  285 + * Set EntityId of Comment model
  286 + *
  287 + * @param int $entityId
  288 + */
230 public function setEntityId(int $entityId) 289 public function setEntityId(int $entityId)
231 { 290 {
232 $this->entityId = $entityId; 291 $this->entityId = $entityId;
233 } 292 }
234 - 293 +
  294 + /**
  295 + * Get EntityId of Comment model
  296 + *
  297 + * @return int
  298 + */
235 public function getEntityId(): int 299 public function getEntityId(): int
236 { 300 {
237 return $this->entityId; 301 return $this->entityId;
238 } 302 }
239 - 303 +
  304 + /**
  305 + * Get children relation for current comment
  306 + *
  307 + * @return \yii\db\ActiveQuery
  308 + */
240 public function getChildren() 309 public function getChildren()
241 { 310 {
242 - return $this->hasMany(self::className(), [ 'artbox_comment_pid' => 'artbox_comment_id' ]) 311 + return $this->hasMany(self::className(), [ 'parent_id' => 'id' ])
243 ->andFilterWhere([ 'status' => self::STATUS_ACTIVE ]) 312 ->andFilterWhere([ 'status' => self::STATUS_ACTIVE ])
244 ->inverseOf('parent'); 313 ->inverseOf('parent');
245 } 314 }
246 - 315 +
  316 + /**
  317 + * Get parent relation for current comment
  318 + *
  319 + * @return \yii\db\ActiveQuery
  320 + */
247 public function getParent() 321 public function getParent()
248 { 322 {
249 - return $this->hasOne(self::className(), [ 'artbox_comment_id' => 'artbox_comment_pid' ]) 323 + return $this->hasOne(self::className(), [ 'id' => 'parent_id' ])
250 ->inverseOf('children'); 324 ->inverseOf('children');
251 } 325 }
252 -  
253 - public function getUser() 326 +
  327 + /**
  328 + * Get customer relation for current comment
  329 + *
  330 + * @return \yii\db\ActiveQuery
  331 + */
  332 + public function getCustomer()
254 { 333 {
255 - $module = \Yii::$app->getModule('artbox-comment');  
256 - return $this->hasOne($module->userIdentityClass, [ 'id' => 'user_id' ]); 334 + return $this->hasOne(self::getCustomerClass(), [ 'id' => 'customer_id' ]);
257 } 335 }
258 - 336 +
  337 + /**
  338 + * Get rating relation for current model
  339 + *
  340 + * @return \yii\db\ActiveQuery
  341 + */
259 public function getRating() 342 public function getRating()
260 { 343 {
261 - return $this->hasOne(RatingModel::className(), [ 'model_id' => 'artbox_comment_id' ]) 344 + return $this->hasOne(RatingModel::className(), [ 'model_id' => 'id' ])
262 ->andWhere( 345 ->andWhere(
263 [ 346 [
264 'or', 347 'or',
265 - [ 'artbox_comment_rating.model' => NULL ], 348 + [ 'artbox_comment_rating.model' => null ],
266 [ 'artbox_comment_rating.model' => self::className() ], 349 [ 'artbox_comment_rating.model' => self::className() ],
267 ] 350 ]
268 ); 351 );
269 } 352 }
270 - 353 +
  354 + /**
  355 + * Get entity model for current comment or false if not ActiveRecord
  356 + *
  357 + * @return ActiveRecord|false
  358 + */
271 public function getEntityModel() 359 public function getEntityModel()
272 { 360 {
273 - $model = call_user_func_array(  
274 - [  
275 - $this->entity,  
276 - 'findOne',  
277 - ],  
278 - [ $this->entity_id ]  
279 - );  
280 - return $model;  
281 - }  
282 -  
283 - public function getLink()  
284 - {  
285 - $model = $this->getEntityModel();  
286 - if (empty($model)) {  
287 - return Html::a('Страница не найдена', '#');  
288 - }  
289 - if (Product::className() == $this->entity) {  
290 - return Html::a(  
291 - 'Перейти на товар',  
292 - \Yii::$app->urlManagerFrontend->createAbsoluteUrl(  
293 - [  
294 - 'catalog/product',  
295 - 'product' => $model->lang->alias,  
296 - 'variant' => $model->variant->sku,  
297 - ]  
298 - ), 361 + if (method_exists($this->entity, 'findOne')) {
  362 + $model = call_user_func_array(
299 [ 363 [
300 - 'target' => '_blank',  
301 - 'data-pjax' => '0',  
302 - ] 364 + $this->entity,
  365 + 'findOne',
  366 + ],
  367 + [ $this->entity_id ]
303 ); 368 );
  369 + return $model;
  370 + } else {
  371 + return false;
  372 + }
  373 + }
  374 +
  375 + /**
  376 + * Get Customer model name
  377 + *
  378 + * @return string
  379 + */
  380 + protected static function getCustomerClass()
  381 + {
  382 + /**
  383 + * @var \artbox\webcomment\Module $module
  384 + */
  385 + $module = \Yii::$app->getModule('artbox-comment');
  386 + if ($module) {
  387 + return $module->userIdentityClass;
304 } else { 388 } else {
305 - return Html::a('Неизвестная модель', '#'); 389 + return 'artbox\order\models\Customer';
306 } 390 }
307 } 391 }
308 } 392 }
models/CommentModelSearch.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\models; 3 + namespace artbox\webcomment\models;
4 4
5 use yii\base\Model; 5 use yii\base\Model;
6 use yii\data\ActiveDataProvider; 6 use yii\data\ActiveDataProvider;
7 7
8 /** 8 /**
9 * CommentModelSearch represents the model behind the search form about 9 * CommentModelSearch represents the model behind the search form about
10 - * `artweb\artbox\comment\models\CommentModel`. 10 + * `artbox\webcomment\models\CommentModel`.
11 */ 11 */
12 class CommentModelSearch extends CommentModel 12 class CommentModelSearch extends CommentModel
13 { 13 {
@@ -24,12 +24,12 @@ @@ -24,12 +24,12 @@
24 return [ 24 return [
25 [ 25 [
26 [ 26 [
27 - 'artbox_comment_id', 27 + 'id',
28 'created_at', 28 'created_at',
29 'updated_at', 29 'updated_at',
30 'deleted_at', 30 'deleted_at',
31 'status', 31 'status',
32 - 'artbox_comment_pid', 32 + 'parent_id',
33 'related_id', 33 'related_id',
34 'entity_id', 34 'entity_id',
35 ], 35 ],
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 ], 52 ],
53 [ 53 [
54 [ 54 [
55 - 'user_id', 55 + 'customer_id',
56 'text', 56 'text',
57 'username', 57 'username',
58 'email', 58 'email',
@@ -64,14 +64,17 @@ @@ -64,14 +64,17 @@
64 ], 64 ],
65 ]; 65 ];
66 } 66 }
67 - 67 +
  68 + /**
  69 + * @inheritdoc
  70 + */
68 public function attributeLabels() 71 public function attributeLabels()
69 { 72 {
70 return array_merge( 73 return array_merge(
71 parent::attributeLabels(), 74 parent::attributeLabels(),
72 [ 75 [
73 - 'ratingValue' => 'Рейтинг',  
74 - 'childrenCount' => 'Количество ответов', 76 + 'ratingValue' => \Yii::t('artbox-comment', 'Рейтинг'),
  77 + 'childrenCount' => \Yii::t('artbox-comment', 'Количество ответов'),
75 ] 78 ]
76 ); 79 );
77 } 80 }
@@ -98,7 +101,7 @@ @@ -98,7 +101,7 @@
98 ->joinWith( 101 ->joinWith(
99 [ 102 [
100 'rating', 103 'rating',
101 - 'user', 104 + 'customer',
102 ] 105 ]
103 ); 106 );
104 107
@@ -113,10 +116,9 @@ @@ -113,10 +116,9 @@
113 'asc' => [ 'artbox_comment_rating.value' => SORT_ASC ], 116 'asc' => [ 'artbox_comment_rating.value' => SORT_ASC ],
114 'desc' => [ 'artbox_comment_rating.value' => SORT_DESC ], 117 'desc' => [ 'artbox_comment_rating.value' => SORT_DESC ],
115 ], 118 ],
116 - 'artbox_comment_id',  
117 - 'date_add', 119 + 'id',
118 'text', 120 'text',
119 - 'user_id', 121 + 'customer_id',
120 'status', 122 'status',
121 'entity', 123 'entity',
122 'entity_id', 124 'entity_id',
@@ -140,12 +142,12 @@ @@ -140,12 +142,12 @@
140 // grid filtering conditions 142 // grid filtering conditions
141 $query->andFilterWhere( 143 $query->andFilterWhere(
142 [ 144 [
143 - 'artbox_comment_id' => $this->artbox_comment_id, 145 + 'id' => $this->id,
144 'created_at' => $this->created_at, 146 'created_at' => $this->created_at,
145 'updated_at' => $this->updated_at, 147 'updated_at' => $this->updated_at,
146 'deleted_at' => $this->deleted_at, 148 'deleted_at' => $this->deleted_at,
147 'artbox_comment.status' => $this->status, 149 'artbox_comment.status' => $this->status,
148 - 'artbox_comment_pid' => $this->artbox_comment_pid, 150 + 'parent_id' => $this->parent_id,
149 'related_id' => $this->related_id, 151 'related_id' => $this->related_id,
150 'entity_id' => $this->entity_id, 152 'entity_id' => $this->entity_id,
151 ] 153 ]
@@ -198,26 +200,26 @@ @@ -198,26 +200,26 @@
198 'artbox_comment_rating.value' => $this->ratingValue, 200 'artbox_comment_rating.value' => $this->ratingValue,
199 ] 201 ]
200 ); 202 );
201 -  
202 - if (!empty( $this->user_id )) { 203 +
  204 + if (!empty($this->customer_id)) {
203 $query->andWhere( 205 $query->andWhere(
204 [ 206 [
205 'or', 207 'or',
206 - [ 'artbox_comment.user_id' => (int) $this->user_id ], 208 + [ 'artbox_comment.customer_id' => (int) $this->customer_id ],
207 [ 209 [
208 'like', 210 'like',
209 'user.username', 211 'user.username',
210 - $this->user_id, 212 + $this->customer_id,
211 ], 213 ],
212 [ 214 [
213 'like', 215 'like',
214 'artbox_comment.username', 216 'artbox_comment.username',
215 - $this->user_id, 217 + $this->customer_id,
216 ], 218 ],
217 [ 219 [
218 'like', 220 'like',
219 'artbox_comment.email', 221 'artbox_comment.email',
220 - $this->user_id, 222 + $this->customer_id,
221 ], 223 ],
222 ] 224 ]
223 ); 225 );
models/LikeModel.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\models; 3 + namespace artbox\webcomment\models;
4 4
5 use yii\db\ActiveRecord; 5 use yii\db\ActiveRecord;
6 6
7 /** 7 /**
8 * Class LikeModel 8 * Class LikeModel
9 - * @package artweb\artbox\comment\models  
10 */ 9 */
11 class LikeModel extends ActiveRecord 10 class LikeModel extends ActiveRecord
12 { 11 {
models/RatingModel.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\models; 3 + namespace artbox\webcomment\models;
4 4
5 use Yii; 5 use Yii;
6 use yii\behaviors\BlameableBehavior; 6 use yii\behaviors\BlameableBehavior;
@@ -10,12 +10,10 @@ @@ -10,12 +10,10 @@
10 /** 10 /**
11 * This is the model class for table "artbox_comment_rating". 11 * This is the model class for table "artbox_comment_rating".
12 * 12 *
13 - * @todo Refactor User to Identity  
14 - *  
15 - * @property integer $artbox_comment_rating_id 13 + * @property integer $id
16 * @property string $created_at 14 * @property string $created_at
17 * @property string $updated_at 15 * @property string $updated_at
18 - * @property integer $user_id 16 + * @property integer $customer_id
19 * @property integer $value 17 * @property integer $value
20 * @property string $model 18 * @property string $model
21 * @property integer $model_id 19 * @property integer $model_id
@@ -58,7 +56,7 @@ @@ -58,7 +56,7 @@
58 ], 56 ],
59 [ 57 [
60 'class' => BlameableBehavior::className(), 58 'class' => BlameableBehavior::className(),
61 - 'createdByAttribute' => 'user_id', 59 + 'createdByAttribute' => 'customer_id',
62 'updatedByAttribute' => false, 60 'updatedByAttribute' => false,
63 ], 61 ],
64 ]; 62 ];
@@ -70,18 +68,30 @@ @@ -70,18 +68,30 @@
70 public function attributeLabels() 68 public function attributeLabels()
71 { 69 {
72 return [ 70 return [
73 - 'rating_id' => Yii::t('app', 'Rating ID'),  
74 - 'date_add' => Yii::t('app', 'Date Add'),  
75 - 'updated_at' => Yii::t('app', 'Date Update'),  
76 - 'user_id' => Yii::t('app', 'User ID'),  
77 - 'entity' => Yii::t('app', 'Entity'),  
78 - 'value' => Yii::t('app', 'Value'), 71 + 'id' => Yii::t('app', 'Rating ID'),
  72 + 'created_at' => Yii::t('app', 'Date Add'),
  73 + 'updated_at' => Yii::t('app', 'Date Update'),
  74 + 'customer_id' => Yii::t('app', 'User ID'),
  75 + 'entity' => Yii::t('app', 'Entity'),
  76 + 'value' => Yii::t('app', 'Value'),
79 ]; 77 ];
80 } 78 }
81 - 79 +
  80 + /**
  81 + * Get entity model for current model
  82 + *
  83 + * @return \yii\db\ActiveQuery|null
  84 + */
82 public function getModel() 85 public function getModel()
83 { 86 {
84 $model = $this->model; 87 $model = $this->model;
85 - return $this->hasOne($model, [ $model::primaryKey() => 'model_id' ]); 88 + if (method_exists($model, 'primaryKey')) {
  89 + /**
  90 + * @var ActiveRecord $model
  91 + */
  92 + return $this->hasOne($model, [ $model::primaryKey()[ 0 ] => 'model_id' ]);
  93 + } else {
  94 + return null;
  95 + }
86 } 96 }
87 } 97 }
models/interfaces/CommentInterface.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\models\interfaces; 3 + namespace artbox\webcomment\models\interfaces;
4 4
5 use yii\data\ActiveDataProvider; 5 use yii\data\ActiveDataProvider;
6 6
7 /** 7 /**
8 * Interface CommentInterface 8 * Interface CommentInterface
9 - * @package artweb\artbox\comment\models\interfaces  
10 */ 9 */
11 interface CommentInterface 10 interface CommentInterface
12 { 11 {
models/interfaces/RatingCacheInterface.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\models\interfaces; 3 + namespace artbox\webcomment\models\interfaces;
4 4
5 use yii\db\ActiveRecordInterface; 5 use yii\db\ActiveRecordInterface;
6 6
resources/artbox_comment.js
@@ -174,8 +174,11 @@ @@ -174,8 +174,11 @@
174 var form = $(data.formSelector + '-reply'); 174 var form = $(data.formSelector + '-reply');
175 var button = this; 175 var button = this;
176 var item = $(button).parents(data.itemContainerSelector); 176 var item = $(button).parents(data.itemContainerSelector);
  177 + console.log(item);
177 var item_id = $(item).data('key'); 178 var item_id = $(item).data('key');
178 - $(form).find('#commentmodel-artbox_comment_pid-reply').val(item_id); 179 + $(form)
  180 + .find('#commentmodel-parent_id-reply')
  181 + .val(item_id);
179 $(item).find(data.itemReplySelector).append(form); 182 $(item).find(data.itemReplySelector).append(form);
180 } 183 }
181 184
@@ -252,8 +255,11 @@ @@ -252,8 +255,11 @@
252 var form = $(data.formSelector + '-reply'); 255 var form = $(data.formSelector + '-reply');
253 var button = this; 256 var button = this;
254 var item = $(button).parents(data.childContainerSelector); 257 var item = $(button).parents(data.childContainerSelector);
  258 + console.log(item);
255 var item_id = $(item).data('key'); 259 var item_id = $(item).data('key');
256 - $(form).find('#commentmodel-artbox_comment_pid-reply').val(item_id); 260 + $(form)
  261 + .find('#commentmodel-parent_id-reply')
  262 + .val(item_id);
257 $(item).find(data.childReplySelector).append(form); 263 $(item).find(data.childReplySelector).append(form);
258 } 264 }
259 265
views/artbox_comment_form.php
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel;  
3 - use artweb\artbox\comment\models\RatingModel; 2 + use artbox\webcomment\models\CommentModel;
  3 + use artbox\webcomment\models\RatingModel;
4 use yii\base\Model; 4 use yii\base\Model;
5 use yii\helpers\Html; 5 use yii\helpers\Html;
6 use yii\helpers\Url; 6 use yii\helpers\Url;
@@ -15,42 +15,54 @@ @@ -15,42 +15,54 @@
15 * @var View $this 15 * @var View $this
16 * @var RatingModel|NULL $rating_model 16 * @var RatingModel|NULL $rating_model
17 */ 17 */
18 - $form = ActiveForm::begin([  
19 - 'id' => $formId,  
20 - 'action' => Url::to([  
21 - 'artbox-comment/default/create',  
22 - 'entity' => $comment_model->encryptedEntity,  
23 - ]),  
24 - ]); 18 + $form = ActiveForm::begin(
  19 + [
  20 + 'id' => $formId,
  21 + 'action' => Url::to(
  22 + [
  23 + 'artbox-comment/default/create',
  24 + 'entity' => $comment_model->encryptedEntity,
  25 + ]
  26 + ),
  27 + ]
  28 + );
25 ?> 29 ?>
26 - <div class="form-comm-wr">  
27 - <?php  
28 - if(!empty( $rating_model )) {  
29 - ?>  
30 - <div class="input_bl stars-wr_">  
31 - <?php  
32 - echo $form->field($rating_model, 'value', [ 'enableClientValidation' => false ])  
33 - ->hiddenInput()  
34 - ->label(false);  
35 - echo Html::tag('div', '', [ 30 + <div class="form-comm-wr">
  31 + <?php
  32 + if (!empty($rating_model)) {
  33 + ?>
  34 + <div class="input_bl stars-wr_">
  35 + <?php
  36 + echo $form->field($rating_model, 'value', [ 'enableClientValidation' => false ])
  37 + ->hiddenInput()
  38 + ->label(false);
  39 + echo Html::tag(
  40 + 'div',
  41 + '',
  42 + [
36 'class' => 'rateit', 43 'class' => 'rateit',
37 'data-rateit-backingfld' => '#' . Html::getInputId($rating_model, 'value'), 44 'data-rateit-backingfld' => '#' . Html::getInputId($rating_model, 'value'),
38 - ]);  
39 - ?>  
40 - </div>  
41 - <?php  
42 - }  
43 - if(\Yii::$app->user->isGuest) {  
44 - echo $form->field($comment_model, 'username', [ 'options' => [ 'class' => 'form-group input_bl' ] ])  
45 - ->textInput();  
46 - echo $form->field($comment_model, 'email', [ 'options' => [ 'class' => 'form-group input_bl' ] ])  
47 - ->textInput();  
48 - }  
49 - echo $form->field($comment_model, 'text', [ 'options' => [ 'class' => 'form-group input_bl area_bl' ] ])  
50 - ->textarea();  
51 - echo Html::tag('div', Html::submitButton(Yii::t('artbox-comment', 'Submit')), [ 'class' => 'input_bl submit_btn' ]);  
52 - ?>  
53 - </div> 45 + ]
  46 + );
  47 + ?>
  48 + </div>
  49 + <?php
  50 + }
  51 + if (\Yii::$app->user->isGuest) {
  52 + echo $form->field($comment_model, 'username', [ 'options' => [ 'class' => 'form-group input_bl' ] ])
  53 + ->textInput();
  54 + echo $form->field($comment_model, 'email', [ 'options' => [ 'class' => 'form-group input_bl' ] ])
  55 + ->textInput();
  56 + }
  57 + echo $form->field($comment_model, 'text', [ 'options' => [ 'class' => 'form-group input_bl area_bl' ] ])
  58 + ->textarea();
  59 + echo Html::tag(
  60 + 'div',
  61 + Html::submitButton(Yii::t('artbox-comment', 'Submit')),
  62 + [ 'class' => 'input_bl submit_btn' ]
  63 + );
  64 + ?>
  65 + </div>
54 <?php 66 <?php
55 ActiveForm::end(); 67 ActiveForm::end();
56 ?> 68 ?>
57 \ No newline at end of file 69 \ No newline at end of file
views/artbox_comment_item.php
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel; 2 + use artbox\webcomment\models\CommentModel;
3 use yii\helpers\Html; 3 use yii\helpers\Html;
4 use yii\helpers\Url; 4 use yii\helpers\Url;
5 use yii\widgets\ListView; 5 use yii\widgets\ListView;
@@ -12,139 +12,149 @@ @@ -12,139 +12,149 @@
12 */ 12 */
13 ?> 13 ?>
14 <div class="comments-wr"> 14 <div class="comments-wr">
15 - <div class="artbox_item_info">  
16 - <div class="user-ico">  
17 - <?php  
18 - echo Html::img('/img/user-noimage.png');  
19 - ?>  
20 - </div>  
21 - <div class="user_data" itemprop="datePublished">  
22 - <?php  
23 - echo date('d.m.Y', $model->created_at);  
24 - ?>  
25 - </div>  
26 - <div class="user_name" itemprop="author">  
27 - <?php  
28 - if(!empty( $model->user )) {  
29 - echo $model->user->username;  
30 - } else {  
31 - echo $model->username . ' (' . Yii::t('artbox-comment', 'Guest') . ')';  
32 - }  
33 - ?>  
34 - </div> 15 + <div class="artbox_item_info">
  16 + <div class="user-ico">
35 <?php 17 <?php
36 - if(!empty( $model->rating )) {  
37 - ?>  
38 - <div class="user_rating" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">  
39 - <span itemprop="worstRating" style="display: none">1</span>  
40 - <span itemprop="ratingValue" style="display: none"><?php echo $model->rating->value; ?></span>  
41 - <span itemprop="bestRating" style="display: none">5</span>  
42 - <div class="rateit" data-rateit-value="<?php echo $model->rating->value; ?>" data-rateit-ispreset="true" data-rateit-readonly="true"></div>  
43 - </div>  
44 - <?php  
45 - } 18 + echo Html::img('/img/no-image.png');
46 ?> 19 ?>
47 - <div class="user_txt" itemprop="description">  
48 - <?php  
49 - echo $model->text;  
50 - ?>  
51 - </div>  
52 </div> 20 </div>
53 - <div class="artbox_item_tools comment-panel"> 21 + <div class="user_data" itemprop="datePublished">
54 <?php 22 <?php
55 - if(!\Yii::$app->user->isGuest) {  
56 - ?>  
57 - <a href="" class="btn-comm-answer" data-action="reply">Ответить</a>  
58 - <?php  
59 - }  
60 - if(!\Yii::$app->user->isGuest && \Yii::$app->user->id == $model->user_id) {  
61 - ?>  
62 - <a href="" class="btn-comm-delete" data-action="delete" data-url="<?php echo Url::to([  
63 - 'artbox-comment/default/delete',  
64 - 'id' => $model->artbox_comment_id,  
65 - ]); ?>">Удалить</a>  
66 - <?php 23 + echo date('d.m.Y', $model->created_at);
  24 + ?>
  25 + </div>
  26 + <div class="user_name" itemprop="author">
  27 + <?php
  28 + if (!empty($model->customer)) {
  29 + echo $model->customer->username;
  30 + } else {
  31 + echo $model->username . ' (' . Yii::t('artbox-comment', 'Guest') . ')';
67 } 32 }
68 - // Like / dislike to be done  
69 - /*  
70 - ?>  
71 - <a href="" class="btn-comm-like" data-action="like" data-url="<?php echo Url::to([  
72 - 'artbox-comment/default/like',  
73 - 'id' => $model->artbox_comment_id,  
74 - ]); ?>">Like</a>  
75 - <a href="" class="btn-comm-dislike" data-action="dislike" data-url="<?php echo Url::to([  
76 - 'artbox-comment/default/dislike',  
77 - 'id' => $model->artbox_comment_id,  
78 - ]); ?>">Dislike</a>  
79 - <?php  
80 - */  
81 ?> 33 ?>
82 - <div class="artbox_item_reply"></div>  
83 </div> 34 </div>
  35 + <?php
  36 + if (!empty($model->rating)) {
  37 + ?>
  38 + <div class="user_rating" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
  39 + <span itemprop="worstRating" style="display: none">1</span>
  40 + <span itemprop="ratingValue" style="display: none"><?php echo $model->rating->value; ?></span>
  41 + <span itemprop="bestRating" style="display: none">5</span>
  42 + <div class="rateit" data-rateit-value="<?php echo $model->rating->value; ?>" data-rateit-ispreset="true" data-rateit-readonly="true"></div>
  43 + </div>
  44 + <?php
  45 + }
  46 + ?>
  47 + <div class="user_txt" itemprop="description">
  48 + <?php
  49 + echo $model->text;
  50 + ?>
  51 + </div>
  52 + </div>
  53 + <div class="artbox_item_tools comment-panel">
  54 + <?php
  55 + if (!\Yii::$app->user->isGuest) {
  56 + ?>
  57 + <a href="" class="btn-comm-answer" data-action="reply"><?php echo \Yii::t(
  58 + 'artbox-comment',
  59 + 'Ответить'
  60 + ); ?></a>
  61 + <?php
  62 + }
  63 + if (!\Yii::$app->user->isGuest && \Yii::$app->user->id == $model->customer_id) {
  64 + ?>
  65 + <a href="" class="btn-comm-delete" data-action="delete" data-url="<?php echo Url::to(
  66 + [
  67 + 'artbox-comment/default/delete',
  68 + 'id' => $model->id,
  69 + ]
  70 + ); ?>"><?php echo \Yii::t('artbox-comment', 'Удалить'); ?></a>
  71 + <?php
  72 + }
  73 + // Like / dislike to be done
  74 + /*
  75 + ?>
  76 + <a href="" class="btn-comm-like" data-action="like" data-url="<?php echo Url::to([
  77 + 'artbox-comment/default/like',
  78 + 'id' => $model->artbox_comment_id,
  79 + ]); ?>">Like</a>
  80 + <a href="" class="btn-comm-dislike" data-action="dislike" data-url="<?php echo Url::to([
  81 + 'artbox-comment/default/dislike',
  82 + 'id' => $model->artbox_comment_id,
  83 + ]); ?>">Dislike</a>
  84 + <?php
  85 + */
  86 + ?>
  87 + <div class="artbox_item_reply"></div>
  88 + </div>
84 </div> 89 </div>
85 <div class="artbox_children_container"> 90 <div class="artbox_children_container">
86 <?php 91 <?php
87 - if(!empty( $model->children )) {  
88 - foreach($model->children as $index => $child) { 92 + if (!empty($model->children)) {
  93 + foreach ($model->children as $index => $child) {
89 ?> 94 ?>
90 - <div class="artbox_child_container comment-answer">  
91 - <div class="artbox_child_info">  
92 - <div class="user-ico">  
93 - <?php  
94 - echo Html::img('/img/user-noimage.png');  
95 - ?>  
96 - </div>  
97 - <div class="user_data">  
98 - <?php  
99 - echo date('d.m.Y', $child->created_at);  
100 - ?>  
101 - </div>  
102 - <div class="user_name">  
103 - <?php  
104 - if(!empty( $child->user )) {  
105 - echo $child->user->username;  
106 - } else {  
107 - echo $child->username . ' (' . Yii::t('artbox-comment', 'Guest') . ')';  
108 - } 95 + <div class="artbox_child_container comment-answer" data-key="<?php echo $child->id; ?>">
  96 + <div class="artbox_child_info">
  97 + <div class="user-ico">
  98 + <?php
  99 + echo Html::img('/img/no-image.png');
  100 + ?>
  101 + </div>
  102 + <div class="user_data">
  103 + <?php
  104 + echo date('d.m.Y', $child->created_at);
  105 + ?>
  106 + </div>
  107 + <div class="user_name">
  108 + <?php
  109 + if (!empty($child->customer)) {
  110 + echo $child->customer->username;
  111 + } else {
  112 + echo $child->username . ' (' . Yii::t('artbox-comment', 'Guest') . ')';
  113 + }
  114 + ?>
  115 + </div>
  116 + <div class="user_txt">
  117 + <?php
  118 + echo $child->text;
  119 + ?>
  120 + </div>
  121 + </div>
  122 + <div class="artbox_child_tools comment-panel">
  123 + <?php
  124 + if (!\Yii::$app->user->isGuest) {
109 ?> 125 ?>
110 - </div>  
111 - <div class="user_txt"> 126 + <a href="" class="btn-comm-answer" data-action="reply"><?php echo \Yii::t(
  127 + 'artbox-comment',
  128 + 'Ответить'
  129 + ); ?></a>
112 <?php 130 <?php
113 - echo $child->text; 131 + }
  132 + if (!\Yii::$app->user->isGuest && \Yii::$app->user->id == $child->customer_id) {
114 ?> 133 ?>
115 - </div>  
116 - </div>  
117 - <div class="artbox_child_tools comment-panel">  
118 - <?php  
119 - if(!\Yii::$app->user->isGuest) {  
120 - ?>  
121 - <a href="" class="btn-comm-answer" data-action="reply">Ответить</a>  
122 - <?php  
123 - }  
124 - if(!\Yii::$app->user->isGuest && \Yii::$app->user->id == $child->user_id) {  
125 - ?>  
126 - <a href="" class="btn-comm-delete" data-action="delete" data-url="<?php echo Url::to([  
127 - 'artbox-comment/default/delete',  
128 - 'id' => $child->artbox_comment_id,  
129 - ]); ?>">Удалить</a>  
130 - <?php  
131 - }  
132 - /* Like /dislike to be done  
133 - ?>  
134 - <a href="" class="btn-comm-like" data-action="like" data-url="<?php echo Url::to([  
135 - 'artbox-comment/default/like',  
136 - 'id' => $child->artbox_comment_id,  
137 - ]); ?>">Like</a>  
138 - <a href="" class="btn-comm-dislike" data-action="dislike" data-url="<?php echo Url::to([  
139 - 'artbox-comment/default/dislike',  
140 - 'id' => $child->artbox_comment_id,  
141 - ]); ?>">Dislike</a> 134 + <a href="" class="btn-comm-delete" data-action="delete" data-url="<?php echo Url::to(
  135 + [
  136 + 'artbox-comment/default/delete',
  137 + 'id' => $child->id,
  138 + ]
  139 + ); ?>"><?php echo \Yii::t('artbox-comment', 'Удалить'); ?></a>
142 <?php 140 <?php
143 - */ 141 + }
  142 + /* Like /dislike to be done
144 ?> 143 ?>
145 - <div class="artbox_child_reply"></div>  
146 - </div> 144 + <a href="" class="btn-comm-like" data-action="like" data-url="<?php echo Url::to([
  145 + 'artbox-comment/default/like',
  146 + 'id' => $child->artbox_comment_id,
  147 + ]); ?>">Like</a>
  148 + <a href="" class="btn-comm-dislike" data-action="dislike" data-url="<?php echo Url::to([
  149 + 'artbox-comment/default/dislike',
  150 + 'id' => $child->artbox_comment_id,
  151 + ]); ?>">Dislike</a>
  152 + <?php
  153 + */
  154 + ?>
  155 + <div class="artbox_child_reply"></div>
147 </div> 156 </div>
  157 + </div>
148 <?php 158 <?php
149 } 159 }
150 } 160 }
views/artbox_comment_list.php
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel; 2 + use artbox\webcomment\models\CommentModel;
3 use yii\base\Model; 3 use yii\base\Model;
4 use yii\data\ActiveDataProvider; 4 use yii\data\ActiveDataProvider;
5 use yii\helpers\Html; 5 use yii\helpers\Html;
views/artbox_comment_reply.php
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel; 2 + use artbox\webcomment\models\CommentModel;
3 use yii\base\Model; 3 use yii\base\Model;
4 use yii\helpers\Html; 4 use yii\helpers\Html;
5 use yii\helpers\Url; 5 use yii\helpers\Url;
@@ -14,14 +14,14 @@ @@ -14,14 +14,14 @@
14 * @var View $this 14 * @var View $this
15 */ 15 */
16 $text_input_id = Html::getInputId($comment_model, 'text') . '-reply'; 16 $text_input_id = Html::getInputId($comment_model, 'text') . '-reply';
17 - $artbox_comment_pid_input_id = Html::getInputId($comment_model, 'artbox_comment_pid') . '-reply'; 17 + $parent_id_input_id = Html::getInputId($comment_model, 'parent_id') . '-reply';
18 $text_input_selectors = [ 18 $text_input_selectors = [
19 'container' => '.field-' . $text_input_id, 19 'container' => '.field-' . $text_input_id,
20 'input' => '#' . $text_input_id, 20 'input' => '#' . $text_input_id,
21 ]; 21 ];
22 - $artbox_comment_pid_input_selectors = [  
23 - 'container' => '.field-' . $artbox_comment_pid_input_id,  
24 - 'input' => '#' . $artbox_comment_pid_input_id, 22 + $parent_id_input_selectors = [
  23 + 'container' => '.field-' . $parent_id_input_id,
  24 + 'input' => '#' . $parent_id_input_id,
25 ]; 25 ];
26 $form = ActiveForm::begin([ 26 $form = ActiveForm::begin([
27 'id' => $formId . '-reply', 27 'id' => $formId . '-reply',
@@ -33,10 +33,13 @@ @@ -33,10 +33,13 @@
33 ?> 33 ?>
34 <div class="answer-form"> 34 <div class="answer-form">
35 <?php 35 <?php
36 - echo $form->field($comment_model, 'artbox_comment_pid', [  
37 - 'selectors' => $artbox_comment_pid_input_selectors, 36 + echo $form->field(
  37 + $comment_model,
  38 + 'parent_id',
  39 + [
  40 + 'selectors' => $parent_id_input_selectors,
38 'inputOptions' => [ 41 'inputOptions' => [
39 - 'id' => $artbox_comment_pid_input_id, 42 + 'id' => $parent_id_input_id,
40 'class' => 'form-control', 43 'class' => 'form-control',
41 ], 44 ],
42 ]) 45 ])
views/manage/answer.php 100644 → 100755
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel; 2 + use artbox\webcomment\models\CommentModel;
3 use yii\helpers\Html; 3 use yii\helpers\Html;
4 use yii\web\View; 4 use yii\web\View;
5 use yii\widgets\ActiveForm; 5 use yii\widgets\ActiveForm;
@@ -10,14 +10,13 @@ @@ -10,14 +10,13 @@
10 * @var CommentModel $answer 10 * @var CommentModel $answer
11 */ 11 */
12 12
13 - $this->title = 'Ответить на комментарий# ' . $model->artbox_comment_id; 13 + $this->title = \Yii::t('artbox-comment', 'Ответить на комментарий') . '# ' . $model->id;
14 14
15 $this->params[ 'breadcrumbs' ][] = [ 15 $this->params[ 'breadcrumbs' ][] = [
16 - 'label' => 'Комментарии', 16 + 'label' => \Yii::t('artbox-comment', 'Комментарии'),
17 'url' => [ 'index' ], 17 'url' => [ 'index' ],
18 ]; 18 ];
19 $this->params[ 'breadcrumbs' ][] = $this->title; 19 $this->params[ 'breadcrumbs' ][] = $this->title;
20 -  
21 ?> 20 ?>
22 21
23 <div class="comment-answer"> 22 <div class="comment-answer">
@@ -26,16 +25,16 @@ @@ -26,16 +25,16 @@
26 <div class="form-group"> 25 <div class="form-group">
27 <?= $form->field($answer, 'text') 26 <?= $form->field($answer, 'text')
28 ->textarea() ?> 27 ->textarea() ?>
29 -  
30 - <?= $form->field($answer, 'artbox_comment_pid') 28 +
  29 + <?= $form->field($answer, 'parent_id')
31 ->hiddenInput( 30 ->hiddenInput(
32 [ 31 [
33 - 'value' => $model->artbox_comment_id, 32 + 'value' => $model->id,
34 ] 33 ]
35 ) 34 )
36 ->label(false) ?> 35 ->label(false) ?>
37 -  
38 - <?= $form->field($answer, 'user_id') 36 +
  37 + <?= $form->field($answer, 'customer_id')
39 ->hiddenInput( 38 ->hiddenInput(
40 [ 39 [
41 'value' => 1, 40 'value' => 1,
@@ -60,7 +59,7 @@ @@ -60,7 +59,7 @@
60 ->label(false) ?> 59 ->label(false) ?>
61 60
62 <?= Html::submitButton( 61 <?= Html::submitButton(
63 - \Yii::t('app', 'Ответить'), 62 + \Yii::t('artbox-comment', 'Ответить'),
64 [ 'class' => 'btn btn-primary' ] 63 [ 'class' => 'btn btn-primary' ]
65 ) ?> 64 ) ?>
66 </div> 65 </div>
views/manage/index.php
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel;  
3 - use artweb\artbox\comment\models\CommentModelSearch; 2 + use artbox\webcomment\models\CommentModel;
  3 + use artbox\webcomment\models\CommentModelSearch;
4 use yii\data\ActiveDataProvider; 4 use yii\data\ActiveDataProvider;
5 use yii\grid\GridView; 5 use yii\grid\GridView;
6 use yii\helpers\Html; 6 use yii\helpers\Html;
@@ -14,17 +14,17 @@ @@ -14,17 +14,17 @@
14 * @var string $commentModel 14 * @var string $commentModel
15 * @var View $this 15 * @var View $this
16 */ 16 */
17 - $this->title = 'Комментарии'; 17 + $this->title = \Yii::t('artbox-comment', 'Комментарии');
18 18
19 $this->params[ 'breadcrumbs' ][] = $this->title; 19 $this->params[ 'breadcrumbs' ][] = $this->title;
20 20
21 $statuses = [ 21 $statuses = [
22 - $searchModel::STATUS_ACTIVE => 'Активный',  
23 - $searchModel::STATUS_HIDDEN => 'Скрытый',  
24 - $searchModel::STATUS_DELETED => 'Удаленный', 22 + $searchModel::STATUS_ACTIVE => \Yii::t('artbox-comment', 'Активный'),
  23 + $searchModel::STATUS_HIDDEN => \Yii::t('artbox-comment', 'Скрытый'),
  24 + $searchModel::STATUS_DELETED => \Yii::t('artbox-comment', 'Удаленный'),
25 ]; 25 ];
26 Pjax::begin(); 26 Pjax::begin();
27 - if (( $success = \Yii::$app->session->getFlash('artbox_comment_success') ) != NULL) { 27 + if (( $success = \Yii::$app->session->getFlash('artbox_comment_success') ) != null) {
28 echo Html::tag('p', $success); 28 echo Html::tag('p', $success);
29 } 29 }
30 echo GridView::widget( 30 echo GridView::widget(
@@ -32,19 +32,7 @@ @@ -32,19 +32,7 @@
32 'dataProvider' => $dataProvider, 32 'dataProvider' => $dataProvider,
33 'filterModel' => $searchModel, 33 'filterModel' => $searchModel,
34 'columns' => [ 34 'columns' => [
35 - [  
36 - 'attribute' => 'artbox_comment_id',  
37 - 'label' => 'Id',  
38 - ],  
39 - [  
40 - 'label' => 'url',  
41 - 'content' => function (CommentModel $model) {  
42 - return $model->getLink();  
43 - },  
44 - ],  
45 - [  
46 - 'label' => 'Ссылка',  
47 - ], 35 + 'id',
48 [ 36 [
49 'attribute' => 'created_at', 37 'attribute' => 'created_at',
50 'format' => [ 38 'format' => [
@@ -54,51 +42,70 @@ @@ -54,51 +42,70 @@
54 'filter' => false, 42 'filter' => false,
55 ], 43 ],
56 [ 44 [
57 - 'label' => 'Комментарий',  
58 - 'content' => function(CommentModel $model) { 45 + 'label' => \Yii::t('artbox-comment', 'Комментарий'),
  46 + 'content' => function (CommentModel $model) {
59 return StringHelper::truncate($model->text, 40, '...'); 47 return StringHelper::truncate($model->text, 40, '...');
60 }, 48 },
61 ], 49 ],
62 [ 50 [
63 - 'attribute' => 'user_id',  
64 - 'value' => function($model) {  
65 - if (!empty($model->user)) {  
66 - return $model->user->username . ' (id:' . $model->user->id . ')'; 51 + 'attribute' => 'customer_id',
  52 + 'value' => function ($model) {
  53 + /**
  54 + * @var CommentModel $model
  55 + */
  56 + if (!empty($model->customer)) {
  57 + return $model->customer->username . ' (id:' . $model->customer->id . ')';
67 } else { 58 } else {
68 - return $model->username . ' ' . $model->email . ' (Гость)'; 59 + return $model->username . ' ' . $model->email . ' (' . \Yii::t(
  60 + 'artbox-comment',
  61 + 'Гость'
  62 + ) . ')';
69 } 63 }
70 }, 64 },
71 ], 65 ],
72 [ 66 [
73 'attribute' => 'status', 67 'attribute' => 'status',
74 'filter' => $statuses, 68 'filter' => $statuses,
75 - 'value' => function($model) use ($statuses) {  
76 - return $statuses[ $model->status ]; 69 + 'value' => function ($model) use ($statuses) {
  70 + /**
  71 + * @var CommentModel $model
  72 + */
  73 + if (array_key_exists($model->status, $statuses)) {
  74 + return $statuses[ $model->status ];
  75 + } else {
  76 + return null;
  77 + }
77 }, 78 },
78 ], 79 ],
79 [ 80 [
80 'attribute' => 'ratingValue', 81 'attribute' => 'ratingValue',
81 - 'value' => function($model) { 82 + 'value' => function ($model) {
  83 + /**
  84 + * @var CommentModel $model
  85 + */
82 if (!empty($model->rating)) { 86 if (!empty($model->rating)) {
83 return $model->rating->value; 87 return $model->rating->value;
84 } 88 }
85 - return NULL; 89 + return null;
86 }, 90 },
87 ], 91 ],
88 [ 92 [
89 'attribute' => 'childrenCount', 93 'attribute' => 'childrenCount',
90 - 'value' => function($model) { 94 + 'value' => function ($model) {
  95 + /**
  96 + * @var CommentModel $model
  97 + */
91 return count($model->children); 98 return count($model->children);
92 }, 99 },
93 ], 100 ],
94 [ 101 [
95 'class' => 'yii\grid\ActionColumn', 102 'class' => 'yii\grid\ActionColumn',
96 'buttons' => [ 103 'buttons' => [
97 - 'answer' => function(string $url) { 104 + 'answer' => function (string $url) {
98 return Html::a(Html::tag('i', '', [ 'class' => 'glyphicon glyphicon-bullhorn' ]), $url); 105 return Html::a(Html::tag('i', '', [ 'class' => 'glyphicon glyphicon-bullhorn' ]), $url);
99 }, 106 },
100 ], 107 ],
101 - 'template' => \Yii::$app->user->identity->isAdmin() ? '{update} {answer} {delete}' : '{update} {answer}', 108 + 'template' => '{update} {answer} {delete}',
102 ], 109 ],
103 ], 110 ],
104 ] 111 ]
views/manage/update.php
1 <?php 1 <?php
2 - use artweb\artbox\comment\models\CommentModel; 2 + use artbox\webcomment\models\CommentModel;
3 use yii\helpers\Html; 3 use yii\helpers\Html;
4 use yii\widgets\ActiveForm; 4 use yii\widgets\ActiveForm;
5 5
@@ -7,14 +7,14 @@ @@ -7,14 +7,14 @@
7 * @var CommentModel $model 7 * @var CommentModel $model
8 */ 8 */
9 $statuses = [ 9 $statuses = [
10 - $model::STATUS_ACTIVE => 'Активный',  
11 - $model::STATUS_HIDDEN => 'Скрытый',  
12 - $model::STATUS_DELETED => 'Удаленный', 10 + $model::STATUS_ACTIVE => \Yii::t('artbox-comment', 'Активный'),
  11 + $model::STATUS_HIDDEN => \Yii::t('artbox-comment', 'Скрытый'),
  12 + $model::STATUS_DELETED => \Yii::t('artbox-comment', 'Удаленный'),
13 ]; 13 ];
14 $form = ActiveForm::begin(); 14 $form = ActiveForm::begin();
15 echo $form->field($model, 'text') 15 echo $form->field($model, 'text')
16 ->textarea(); 16 ->textarea();
17 echo $form->field($model, 'status') 17 echo $form->field($model, 'status')
18 ->dropDownList($statuses); 18 ->dropDownList($statuses);
19 - echo Html::submitButton('Обновить'); 19 + echo Html::submitButton(\Yii::t('artbox-comment', 'Обновить'));
20 $form->end(); 20 $form->end();
21 \ No newline at end of file 21 \ No newline at end of file
widgets/CommentWidget.php
1 <?php 1 <?php
2 2
3 - namespace artweb\artbox\comment\widgets; 3 + namespace artbox\webcomment\widgets;
4 4
5 - use artweb\artbox\comment\assets\CommentAsset;  
6 - use artweb\artbox\comment\models\interfaces\CommentInterface;  
7 - use artweb\artbox\comment\models\RatingModel;  
8 - use artweb\artbox\comment\Module;  
9 - use artweb\artbox\models\Customer; 5 + use artbox\webcomment\assets\CommentAsset;
  6 + use artbox\webcomment\models\CommentModel;
  7 + use artbox\webcomment\models\interfaces\CommentInterface;
  8 + use artbox\webcomment\models\RatingModel;
  9 + use artbox\webcomment\Module;
10 use Yii; 10 use Yii;
11 use yii\base\InvalidConfigException; 11 use yii\base\InvalidConfigException;
12 use yii\base\Model; 12 use yii\base\Model;
@@ -19,20 +19,22 @@ @@ -19,20 +19,22 @@
19 19
20 /** 20 /**
21 * Class CommentWidget 21 * Class CommentWidget
  22 + *
22 * @property Model $model Model, to which comment attached 23 * @property Model $model Model, to which comment attached
23 - * @package artweb\artbox\comment\widgets  
24 */ 24 */
25 class CommentWidget extends Widget 25 class CommentWidget extends Widget
26 { 26 {
27 27
28 /** 28 /**
29 * Model, to which comment attached 29 * Model, to which comment attached
  30 + *
30 * @var Model Model 31 * @var Model Model
31 */ 32 */
32 //public $model; 33 //public $model;
33 34
34 /** 35 /**
35 * Options 36 * Options
  37 + *
36 * @var array 38 * @var array
37 */ 39 */
38 public $options = [ 40 public $options = [
@@ -43,10 +45,11 @@ @@ -43,10 +45,11 @@
43 /** 45 /**
44 * @var string the view file that will render comment form. 46 * @var string the view file that will render comment form.
45 */ 47 */
46 - public $formView = '@artbox-comment/views/artbox_comment_form'; 48 + public $formView = '@artbox/webcomment/views/artbox_comment_form';
47 49
48 /** 50 /**
49 * Form options 51 * Form options
  52 + *
50 * @var array 53 * @var array
51 */ 54 */
52 public $formOptions = [ 55 public $formOptions = [
@@ -55,6 +58,7 @@ @@ -55,6 +58,7 @@
55 58
56 /** 59 /**
57 * Params to be passed to form 60 * Params to be passed to form
  61 + *
58 * @var array 62 * @var array
59 */ 63 */
60 public $formParams = []; 64 public $formParams = [];
@@ -62,10 +66,11 @@ @@ -62,10 +66,11 @@
62 /** 66 /**
63 * @var string the view file that will render comments list. 67 * @var string the view file that will render comments list.
64 */ 68 */
65 - public $listView = '@artbox-comment/views/artbox_comment_list'; 69 + public $listView = '@artbox/webcomment/views/artbox_comment_list';
66 70
67 /** 71 /**
68 * List options 72 * List options
  73 + *
69 * @var array 74 * @var array
70 */ 75 */
71 public $listOptions = [ 76 public $listOptions = [
@@ -74,12 +79,14 @@ @@ -74,12 +79,14 @@
74 79
75 /** 80 /**
76 * List params 81 * List params
  82 + *
77 * @var array 83 * @var array
78 */ 84 */
79 public $listParams = []; 85 public $listParams = [];
80 86
81 /** 87 /**
82 * Reply options 88 * Reply options
  89 + *
83 * @var array 90 * @var array
84 */ 91 */
85 public $replyOptions = [ 92 public $replyOptions = [
@@ -89,30 +96,35 @@ @@ -89,30 +96,35 @@
89 96
90 /** 97 /**
91 * Reply view 98 * Reply view
  99 + *
92 * @var string 100 * @var string
93 */ 101 */
94 - public $replyView = '@artbox-comment/views/artbox_comment_reply'; 102 + public $replyView = '@artbox/webcomment/views/artbox_comment_reply';
95 103
96 /** 104 /**
97 * Comment form ID. If you have multiple forms on the same page, please use unique IDs. 105 * Comment form ID. If you have multiple forms on the same page, please use unique IDs.
  106 + *
98 * @var string Form ID 107 * @var string Form ID
99 */ 108 */
100 public $formId = 'artbox-comment-form'; 109 public $formId = 'artbox-comment-form';
101 110
102 /** 111 /**
103 * Comment list ID. If you have multiple forms on the same page, please use unique IDs. 112 * Comment list ID. If you have multiple forms on the same page, please use unique IDs.
  113 + *
104 * @var string List ID 114 * @var string List ID
105 */ 115 */
106 public $listId = 'artbox-comment-list'; 116 public $listId = 'artbox-comment-list';
107 117
108 /** 118 /**
109 * Item view 119 * Item view
  120 + *
110 * @var string 121 * @var string
111 */ 122 */
112 - public $itemView = '@artbox-comment/views/artbox_comment_item'; 123 + public $itemView = '@artbox/webcomment/views/artbox_comment_item';
113 124
114 /** 125 /**
115 * Item options 126 * Item options
  127 + *
116 * @var array 128 * @var array
117 */ 129 */
118 public $itemOptions = [ 130 public $itemOptions = [
@@ -125,24 +137,26 @@ @@ -125,24 +137,26 @@
125 /** 137 /**
126 * Entity ID attribute, default to primaryKey() if ActiveRecord and throws exception if not 138 * Entity ID attribute, default to primaryKey() if ActiveRecord and throws exception if not
127 * set 139 * set
  140 + *
128 * @var string entity id attribute 141 * @var string entity id attribute
129 */ 142 */
130 public $entityIdAttribute; 143 public $entityIdAttribute;
131 144
132 /** 145 /**
133 * Info to be passed to Comment Model 146 * Info to be passed to Comment Model
  147 + *
134 * @var string $info Additional info 148 * @var string $info Additional info
135 */ 149 */
136 - public $info = NULL; 150 + public $info = null;
137 151
138 /** 152 /**
139 * Client options to be passed to JS 153 * Client options to be passed to JS
  154 + *
140 * @var array comment widget client options 155 * @var array comment widget client options
141 */ 156 */
142 public $clientOptions = []; 157 public $clientOptions = [];
143 158
144 /** 159 /**
145 - * @todo Check if needed  
146 * @var string pjax container id 160 * @var string pjax container id
147 */ 161 */
148 public $pjaxContainerId; 162 public $pjaxContainerId;
@@ -151,12 +165,14 @@ @@ -151,12 +165,14 @@
151 165
152 /** 166 /**
153 * Model fully namespaced classname 167 * Model fully namespaced classname
  168 + *
154 * @var string Model namespace 169 * @var string Model namespace
155 */ 170 */
156 protected $entity; 171 protected $entity;
157 172
158 /** 173 /**
159 * Entity ID for attached model 174 * Entity ID for attached model
  175 + *
160 * @var integer Entity ID 176 * @var integer Entity ID
161 */ 177 */
162 protected $entityId; 178 protected $entityId;
@@ -166,12 +182,14 @@ @@ -166,12 +182,14 @@
166 * * Model::className() 182 * * Model::className()
167 * * entityId 183 * * entityId
168 * * info (optional) 184 * * info (optional)
  185 + *
169 * @var string encrypted entity key 186 * @var string encrypted entity key
170 */ 187 */
171 protected $encryptedEntityKey; 188 protected $encryptedEntityKey;
172 189
173 /** 190 /**
174 * Parts for widget 191 * Parts for widget
  192 + *
175 * @var array $parts 193 * @var array $parts
176 */ 194 */
177 protected $parts; 195 protected $parts;
@@ -182,26 +200,28 @@ @@ -182,26 +200,28 @@
182 public function init() 200 public function init()
183 { 201 {
184 // Module init 202 // Module init
185 - Yii::$app->getModule(Module::$name); 203 + $module = Yii::$app->getModule(Module::$name);
  204 + if (!$module) {
  205 + Module::registerMe();
  206 + }
186 // Model init 207 // Model init
187 $model = $this->getModel(); 208 $model = $this->getModel();
188 -  
189 - /**  
190 - * @todo Check if needed  
191 - */  
192 - if(empty( $this->pjaxContainerId )) { 209 +
  210 + if (empty($this->pjaxContainerId)) {
193 $this->pjaxContainerId = 'comment-pjax-container-' . $this->getId(); 211 $this->pjaxContainerId = 'comment-pjax-container-' . $this->getId();
194 } 212 }
195 213
196 $this->entity = $model::className(); 214 $this->entity = $model::className();
197 // Entity ID init 215 // Entity ID init
198 - if(!empty( $this->entityIdAttribute ) && $this->model->hasProperty($this->entityIdAttribute)) { 216 + if (!empty($this->entityIdAttribute) && $this->model->hasProperty($this->entityIdAttribute)) {
199 $this->entityId = $this->model->{$this->entityIdAttribute}; 217 $this->entityId = $this->model->{$this->entityIdAttribute};
200 } else { 218 } else {
201 - if($this->model instanceof ActiveRecord && !empty( $this->model->getPrimaryKey() )) { 219 + if ($this->model instanceof ActiveRecord && !empty($this->model->getPrimaryKey())) {
202 $this->entityId = (int) $this->model->getPrimaryKey(); 220 $this->entityId = (int) $this->model->getPrimaryKey();
203 } else { 221 } else {
204 - throw new InvalidConfigException(/*Yii::t('artbox-comment', 'The "entityIdAttribute" value for widget model cannot be empty.')*/); 222 + throw new InvalidConfigException(
  223 + Yii::t('artbox-comment', 'The "entityIdAttribute" value for widget model cannot be empty.')
  224 + );
205 } 225 }
206 } 226 }
207 227
@@ -213,27 +233,38 @@ @@ -213,27 +233,38 @@
213 233
214 /** 234 /**
215 * Executes the widget. 235 * Executes the widget.
  236 + *
216 * @return string the result of widget execution to be outputted. 237 * @return string the result of widget execution to be outputted.
217 */ 238 */
218 public function run() 239 public function run()
219 { 240 {
220 /* @var Module $module */ 241 /* @var Module $module */
221 $module = Yii::$app->getModule(Module::$name); 242 $module = Yii::$app->getModule(Module::$name);
  243 + if (!$module) {
  244 + Module::registerMe();
  245 + }
222 $commentModelClass = $module->commentModelClass; 246 $commentModelClass = $module->commentModelClass;
223 - $commentModel = $this->createModel($commentModelClass, [  
224 - 'entity' => $this->entity,  
225 - 'entityId' => $this->entityId,  
226 - 'encryptedEntity' => $this->encryptedEntityKey,  
227 - 'scenario' => \Yii::$app->user->getIsGuest() ? $commentModelClass::SCENARIO_GUEST : $commentModelClass::SCENARIO_USER,  
228 - ]);  
229 - if($module::$enableRating) { 247 + $commentModel = $this->createModel(
  248 + $commentModelClass,
  249 + [
  250 + 'entity' => $this->entity,
  251 + 'entityId' => $this->entityId,
  252 + 'encryptedEntity' => $this->encryptedEntityKey,
  253 + 'scenario' => \Yii::$app->user->getIsGuest(
  254 + ) ? CommentModel::SCENARIO_GUEST : CommentModel::SCENARIO_USER,
  255 + ]
  256 + );
  257 + if ($module::$enableRating) {
230 $ratingModelClass = $module->ratingModelClass; 258 $ratingModelClass = $module->ratingModelClass;
231 $ratingModel = $this->createRating($ratingModelClass); 259 $ratingModel = $this->createRating($ratingModelClass);
232 } else { 260 } else {
233 - $ratingModel = NULL; 261 + $ratingModel = null;
  262 + }
  263 + if (method_exists($commentModelClass, 'getTree')) {
  264 + $comments = $commentModelClass::getTree($this->entity, $this->entityId);
  265 + } else {
  266 + $comments = [];
234 } 267 }
235 -  
236 - $comments = $commentModelClass::getTree($this->entity, $this->entityId);  
237 268
238 $this->buildParts($commentModel, $comments, $ratingModel); 269 $this->buildParts($commentModel, $comments, $ratingModel);
239 270
@@ -255,16 +286,22 @@ @@ -255,16 +286,22 @@
255 286
256 /** 287 /**
257 * Get encrypted entity key 288 * Get encrypted entity key
  289 + *
258 * @return string 290 * @return string
259 */ 291 */
260 protected function generateEntityKey() 292 protected function generateEntityKey()
261 { 293 {
262 return Yii::$app->getSecurity() 294 return Yii::$app->getSecurity()
263 - ->encryptByKey(Json::encode([  
264 - 'entity' => $this->entity,  
265 - 'entity_id' => $this->entityId,  
266 - 'info' => $this->info,  
267 - ]), Module::$encryptionKey); 295 + ->encryptByKey(
  296 + Json::encode(
  297 + [
  298 + 'entity' => $this->entity,
  299 + 'entity_id' => $this->entityId,
  300 + 'info' => $this->info,
  301 + ]
  302 + ),
  303 + Module::$encryptionKey
  304 + );
268 } 305 }
269 306
270 /** 307 /**
@@ -280,10 +317,12 @@ @@ -280,10 +317,12 @@
280 { 317 {
281 $options = array_merge($config, [ 'class' => $className ]); 318 $options = array_merge($config, [ 'class' => $className ]);
282 $object = Yii::createObject($options); 319 $object = Yii::createObject($options);
283 - if($object instanceof CommentInterface) { 320 + if ($object instanceof CommentInterface) {
284 return $object; 321 return $object;
285 } 322 }
286 - throw new InvalidConfigException(/*Yii::t(\'artbox-comment\', \'Comment model must be instance of CommentInterface.\')*/); 323 + throw new InvalidConfigException(
  324 + Yii::t('artbox-comment', 'Comment model must be instance of CommentInterface.')
  325 + );
287 } 326 }
288 327
289 /** 328 /**
@@ -299,10 +338,12 @@ @@ -299,10 +338,12 @@
299 { 338 {
300 $options = array_merge($config, [ 'class' => $className ]); 339 $options = array_merge($config, [ 'class' => $className ]);
301 $object = Yii::createObject($options); 340 $object = Yii::createObject($options);
302 - if($object instanceof RatingModel) { 341 + if ($object instanceof RatingModel) {
303 return $object; 342 return $object;
304 } 343 }
305 - throw new InvalidConfigException(Yii::t('artbox-comment', 'Comment model must be instance of RatingModel.')); 344 + throw new InvalidConfigException(
  345 + Yii::t('artbox-comment', 'Comment model must be instance of RatingModel.')
  346 + );
306 } 347 }
307 348
308 /** 349 /**
@@ -312,36 +353,57 @@ @@ -312,36 +353,57 @@
312 * @param ActiveDataProvider $comments 353 * @param ActiveDataProvider $comments
313 * @param null|RatingModel $ratingModel 354 * @param null|RatingModel $ratingModel
314 */ 355 */
315 - protected function buildParts(CommentInterface $commentModel, ActiveDataProvider $comments, $ratingModel = NULL) 356 + protected function buildParts(CommentInterface $commentModel, ActiveDataProvider $comments, $ratingModel = null)
316 { 357 {
317 $form_options = $this->formOptions; 358 $form_options = $this->formOptions;
318 - $this->parts[ 'form' ] = Html::tag(ArrayHelper::remove($form_options, 'tag', 'div'), $this->render($this->formView, [  
319 - 'comment_model' => $commentModel,  
320 - 'form_params' => $this->formParams,  
321 - 'model' => $this->getModel(),  
322 - 'formId' => $this->formId,  
323 - 'rating_model' => $ratingModel,  
324 - ]), $form_options);  
325 -  
326 - if(!\Yii::$app->user->isGuest) { 359 + $this->parts[ 'form' ] = Html::tag(
  360 + ArrayHelper::remove($form_options, 'tag', 'div'),
  361 + $this->render(
  362 + $this->formView,
  363 + [
  364 + 'comment_model' => $commentModel,
  365 + 'form_params' => $this->formParams,
  366 + 'model' => $this->getModel(),
  367 + 'formId' => $this->formId,
  368 + 'rating_model' => $ratingModel,
  369 + ]
  370 + ),
  371 + $form_options
  372 + );
  373 +
  374 + if (!\Yii::$app->user->isGuest) {
327 $reply_options = $this->replyOptions; 375 $reply_options = $this->replyOptions;
328 - $this->parts[ 'reply_form' ] = Html::tag(ArrayHelper::remove($reply_options, 'tag', 'div'), $this->render($this->replyView, [  
329 - 'comment_model' => $commentModel,  
330 - 'form_params' => $this->formParams,  
331 - 'model' => $this->getModel(),  
332 - 'formId' => $this->formId,  
333 - ]), $reply_options); 376 + $this->parts[ 'reply_form' ] = Html::tag(
  377 + ArrayHelper::remove($reply_options, 'tag', 'div'),
  378 + $this->render(
  379 + $this->replyView,
  380 + [
  381 + 'comment_model' => $commentModel,
  382 + 'form_params' => $this->formParams,
  383 + 'model' => $this->getModel(),
  384 + 'formId' => $this->formId,
  385 + ]
  386 + ),
  387 + $reply_options
  388 + );
334 } 389 }
335 390
336 $list_options = array_merge($this->listOptions, [ 'id' => $this->listId ]); 391 $list_options = array_merge($this->listOptions, [ 'id' => $this->listId ]);
337 - $this->parts[ 'list' ] = Html::tag(ArrayHelper::remove($list_options, 'tag', 'div'), $this->render($this->listView, [  
338 - 'comment_model' => $commentModel,  
339 - 'list_params' => $this->listParams,  
340 - 'model' => $this->getModel(),  
341 - 'comments' => $comments,  
342 - 'item_options' => $this->itemOptions,  
343 - 'item_view' => $this->itemView,  
344 - ]), $list_options); 392 + $this->parts[ 'list' ] = Html::tag(
  393 + ArrayHelper::remove($list_options, 'tag', 'div'),
  394 + $this->render(
  395 + $this->listView,
  396 + [
  397 + 'comment_model' => $commentModel,
  398 + 'list_params' => $this->listParams,
  399 + 'model' => $this->getModel(),
  400 + 'comments' => $comments,
  401 + 'item_options' => $this->itemOptions,
  402 + 'item_view' => $this->itemView,
  403 + ]
  404 + ),
  405 + $list_options
  406 + );
345 } 407 }
346 408
347 /** 409 /**
@@ -366,9 +428,9 @@ @@ -366,9 +428,9 @@
366 428
367 public function getModel(): Model 429 public function getModel(): Model
368 { 430 {
369 - if(!empty( $this->model )) { 431 + if (!empty($this->model)) {
370 return $this->model; 432 return $this->model;
371 } 433 }
372 - throw new InvalidConfigException(/*Yii::t(\'artbox-comment\', \'The "model" property must be set.\')*/); 434 + throw new InvalidConfigException(Yii::t('artbox-comment', 'The "model" property must be set.'));
373 } 435 }
374 } 436 }
375 \ No newline at end of file 437 \ No newline at end of file