Commit 8a55149415c1ccd5a847a6feb694cbfd724a31e9
1 parent
8ab566d4
test
Showing
13 changed files
with
366 additions
and
157 deletions
Show diff stats
common/modules/comment/Controller.php
| @@ -3,13 +3,16 @@ | @@ -3,13 +3,16 @@ | ||
| 3 | 3 | ||
| 4 | class Controller extends \yii\web\Controller | 4 | class Controller extends \yii\web\Controller |
| 5 | { | 5 | { |
| 6 | + | ||
| 7 | + public $enableCsrfValidation = false; | ||
| 8 | + | ||
| 6 | public function behaviors() | 9 | public function behaviors() |
| 7 | { | 10 | { |
| 8 | return [ | 11 | return [ |
| 9 | 'verbs' => [ | 12 | 'verbs' => [ |
| 10 | - 'class' => \yii\filters\VerbFilter::className(), | 13 | + 'class' => \yii\filters\VerbFilter::className(), |
| 11 | 'actions' => [ | 14 | 'actions' => [ |
| 12 | - '*' => ['post'], | 15 | + '*' => [ 'post' ], |
| 13 | ], | 16 | ], |
| 14 | ], | 17 | ], |
| 15 | ]; | 18 | ]; |
| @@ -20,25 +23,25 @@ | @@ -20,25 +23,25 @@ | ||
| 20 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | 23 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; |
| 21 | $post = \Yii::$app->request->post('Comment'); | 24 | $post = \Yii::$app->request->post('Comment'); |
| 22 | $get = \Yii::$app->request->get(); | 25 | $get = \Yii::$app->request->get(); |
| 23 | - if(empty($post['comment_id']) && !empty($get['comment_id'])) { | ||
| 24 | - $post['comment_id'] = $get['comment_id']; | 26 | + if(empty( $post[ 'comment_id' ] ) && !empty( $get[ 'comment_id' ] )) { |
| 27 | + $post[ 'comment_id' ] = $get[ 'comment_id' ]; | ||
| 25 | } | 28 | } |
| 26 | - if(!empty($post['comment_id'])) { | ||
| 27 | - if($model = \common\modules\comment\models\Comment::findOne($post['comment_id'])) { | 29 | + if(!empty( $post[ 'comment_id' ] )) { |
| 30 | + if($model = \common\modules\comment\models\Comment::findOne($post[ 'comment_id' ])) { | ||
| 28 | /** | 31 | /** |
| 29 | * @var \common\modules\comment\models\Comment $model | 32 | * @var \common\modules\comment\models\Comment $model |
| 30 | */ | 33 | */ |
| 31 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; | 34 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; |
| 32 | if($model->deleteComment()) { | 35 | if($model->deleteComment()) { |
| 33 | - \Yii::$app->response->data = ['text' => 'Comment marked as deleted and will be check by administrators']; | 36 | + \Yii::$app->response->data = [ 'text' => 'Comment marked as deleted and will be check by administrators' ]; |
| 34 | } else { | 37 | } else { |
| 35 | - \Yii::$app->response->data = ['error' => $model->hasErrors('comment_id')?$model->getFirstError('comment_id'):'Cannot delete message']; | 38 | + \Yii::$app->response->data = [ 'error' => $model->hasErrors('comment_id') ? $model->getFirstError('comment_id') : 'Cannot delete message' ]; |
| 36 | } | 39 | } |
| 37 | - }else { | ||
| 38 | - \Yii::$app->response->data = ['error' => 'Comment not found']; | 40 | + } else { |
| 41 | + \Yii::$app->response->data = [ 'error' => 'Comment not found' ]; | ||
| 39 | }; | 42 | }; |
| 40 | } else { | 43 | } else { |
| 41 | - \Yii::$app->response->data = ['error' => 'Missing comment_id']; | 44 | + \Yii::$app->response->data = [ 'error' => 'Missing comment_id' ]; |
| 42 | } | 45 | } |
| 43 | \Yii::$app->response->send(); | 46 | \Yii::$app->response->send(); |
| 44 | } | 47 | } |
| @@ -47,55 +50,80 @@ | @@ -47,55 +50,80 @@ | ||
| 47 | { | 50 | { |
| 48 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | 51 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; |
| 49 | $post = \Yii::$app->request->post(); | 52 | $post = \Yii::$app->request->post(); |
| 50 | - if(!empty($post['Comment']['comment_id'])) { | ||
| 51 | - if($model = \common\modules\comment\models\Comment::findOne($post['Comment']['comment_id'])) { | 53 | + if(!empty( $post[ 'Comment' ][ 'comment_id' ] )) { |
| 54 | + if($model = \common\modules\comment\models\Comment::findOne($post[ 'Comment' ][ 'comment_id' ])) { | ||
| 52 | /** | 55 | /** |
| 53 | * @var \common\modules\comment\models\Comment $model | 56 | * @var \common\modules\comment\models\Comment $model |
| 54 | */ | 57 | */ |
| 55 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; | 58 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; |
| 56 | $model->load($post); | 59 | $model->load($post); |
| 57 | - if(empty($post['Comment']['comment_pid'])) { | ||
| 58 | - $model->comment_pid = null; | 60 | + if(empty( $post[ 'Comment' ][ 'comment_pid' ] )) { |
| 61 | + $model->comment_pid = NULL; | ||
| 59 | } | 62 | } |
| 60 | if($model->updateComment()) { | 63 | if($model->updateComment()) { |
| 61 | - \Yii::$app->response->data = ['text' => 'Comment successfully updated']; | 64 | + $model->rating->load($post); |
| 65 | + if($model->rating->save()) { | ||
| 66 | + return [ | ||
| 67 | + 'result' => [ | ||
| 68 | + 'text' => 'Comment successfully updated', | ||
| 69 | + 'html' => $this->renderAjax('@common/modules/comment/widgets/views/_review_comment_view', [ 'model' => $model ]), | ||
| 70 | + ], | ||
| 71 | + ]; | ||
| 72 | + } else { | ||
| 73 | + return [ | ||
| 74 | + 'error' => $model->hasErrors() ? $model->getFirstErrors() : 'Cannot update message', | ||
| 75 | + 'form' => $this->renderAjax('@common/modules/comment/widgets/views/form-comment-review', [ | ||
| 76 | + 'model' => $model, | ||
| 77 | + ]), | ||
| 78 | + ]; | ||
| 79 | + } | ||
| 62 | } else { | 80 | } else { |
| 63 | - \Yii::$app->response->data = ['error' => $model->hasErrors()?$model->getFirstErrors():'Cannot update message']; | 81 | + return [ |
| 82 | + 'error' => $model->hasErrors() ? $model->getFirstErrors() : 'Cannot update message', | ||
| 83 | + 'form' => $this->renderAjax('@common/modules/comment/widgets/views/form-comment-review', [ | ||
| 84 | + 'model' => $model, | ||
| 85 | + ]), | ||
| 86 | + ]; | ||
| 64 | } | 87 | } |
| 65 | - }else { | ||
| 66 | - \Yii::$app->response->data = ['error' => 'Comment not found']; | ||
| 67 | - }; | 88 | + } else { |
| 89 | + return [ 'error' => 'Comment not found' ]; | ||
| 90 | + } | ||
| 68 | } else { | 91 | } else { |
| 69 | - \Yii::$app->response->data = ['error' => 'Missing comment_id']; | 92 | + return [ 'error' => 'Missing comment_id' ]; |
| 70 | } | 93 | } |
| 71 | - \Yii::$app->response->send(); | ||
| 72 | } | 94 | } |
| 73 | 95 | ||
| 74 | public function actionForm() | 96 | public function actionForm() |
| 75 | { | 97 | { |
| 98 | + \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | ||
| 76 | $post = \Yii::$app->request->post('Comment'); | 99 | $post = \Yii::$app->request->post('Comment'); |
| 77 | - if(!empty($post['comment_id'])) { | ||
| 78 | - $model = \common\modules\comment\models\Comment::find()->where(['comment_id' => $post['comment_id']])->with('parent', 'author')->one(); | 100 | + if(!empty( $post[ 'comment_id' ] )) { |
| 101 | + $model = \common\modules\comment\models\Comment::find() | ||
| 102 | + ->where([ 'comment_id' => $post[ 'comment_id' ] ]) | ||
| 103 | + ->with('parent', 'author') | ||
| 104 | + ->one(); | ||
| 79 | if($model) { | 105 | if($model) { |
| 80 | /** | 106 | /** |
| 81 | * @var \common\modules\comment\models\Comment $model | 107 | * @var \common\modules\comment\models\Comment $model |
| 82 | */ | 108 | */ |
| 83 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; | 109 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; |
| 84 | if($model->checkUpdate()) { | 110 | if($model->checkUpdate()) { |
| 85 | - return $this->renderAjax('@common/modules/comment/views/comment_form', [ | ||
| 86 | - 'model' => $model, | ||
| 87 | - ]); | 111 | + return [ |
| 112 | + 'result' => [ | ||
| 113 | + 'form' => $this->renderAjax('@common/modules/comment/widgets/views/form-comment-review', [ | ||
| 114 | + 'model' => $model, | ||
| 115 | + ]), | ||
| 116 | + ], | ||
| 117 | + ]; | ||
| 88 | } else { | 118 | } else { |
| 89 | - \Yii::$app->response->data = ['error' => 'You are not able to update this comment']; | 119 | + return [ 'error' => 'You are not able to update this comment' ]; |
| 90 | } | 120 | } |
| 91 | - }else { | ||
| 92 | - \Yii::$app->response->data = ['error' => 'Comment not found']; | ||
| 93 | - }; | 121 | + } else { |
| 122 | + return [ 'error' => 'Comment not found' ]; | ||
| 123 | + } | ||
| 94 | } else { | 124 | } else { |
| 95 | - \Yii::$app->response->data = ['error' => 'Missing comment_id']; | 125 | + return [ 'error' => 'Missing comment_id' ]; |
| 96 | } | 126 | } |
| 97 | - \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | ||
| 98 | - \Yii::$app->response->send(); | ||
| 99 | } | 127 | } |
| 100 | 128 | ||
| 101 | } | 129 | } |
| 102 | \ No newline at end of file | 130 | \ No newline at end of file |
common/modules/comment/assets/CommentAsset.php
common/modules/comment/models/Comment.php
| @@ -22,6 +22,7 @@ | @@ -22,6 +22,7 @@ | ||
| 22 | * @property int $model_id | 22 | * @property int $model_id |
| 23 | * @property Rating $rating | 23 | * @property Rating $rating |
| 24 | * @property User $user | 24 | * @property User $user |
| 25 | + * @property User $author | ||
| 25 | * @package common\modules\comment\models | 26 | * @package common\modules\comment\models |
| 26 | */ | 27 | */ |
| 27 | class Comment extends \yii\db\ActiveRecord | 28 | class Comment extends \yii\db\ActiveRecord |
| @@ -206,7 +207,7 @@ | @@ -206,7 +207,7 @@ | ||
| 206 | return false; | 207 | return false; |
| 207 | } else { | 208 | } else { |
| 208 | if($this->update()) { | 209 | if($this->update()) { |
| 209 | - $this->clearSafe(); | 210 | + // $this->clearSafe(); Clears safe attributes after AJAX update |
| 210 | return true; | 211 | return true; |
| 211 | } else { | 212 | } else { |
| 212 | return false; | 213 | return false; |
| @@ -271,9 +272,11 @@ | @@ -271,9 +272,11 @@ | ||
| 271 | return \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE, [ | 272 | return \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE, [ |
| 272 | 'model' => $this->model, | 273 | 'model' => $this->model, |
| 273 | 'model_id' => $this->model_id, | 274 | 'model_id' => $this->model_id, |
| 275 | + 'comment' => $this, | ||
| 274 | ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE_OWN, [ | 276 | ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE_OWN, [ |
| 275 | 'model' => $this->model, | 277 | 'model' => $this->model, |
| 276 | 'model_id' => $this->model_id, | 278 | 'model_id' => $this->model_id, |
| 279 | + 'comment' => $this, | ||
| 277 | ]); | 280 | ]); |
| 278 | } | 281 | } |
| 279 | } | 282 | } |
| @@ -283,15 +286,24 @@ | @@ -283,15 +286,24 @@ | ||
| 283 | if($this->scenario == self::SCENARIO_GUEST) { | 286 | if($this->scenario == self::SCENARIO_GUEST) { |
| 284 | return false; | 287 | return false; |
| 285 | } else { | 288 | } else { |
| 286 | - return (\Yii::$app->user->can(\common\modules\comment\Permissions::DELETE, [ | ||
| 287 | - 'model' => $this->model, | ||
| 288 | - 'model_id' => $this->model_id, | ||
| 289 | - 'comment' => $this, | ||
| 290 | - ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [ | ||
| 291 | - 'model' => $this->model, | ||
| 292 | - 'model_id' => $this->model_id, | ||
| 293 | - 'comment' => $this, | ||
| 294 | - ])); | 289 | + return ( \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE, [ |
| 290 | + 'model' => $this->model, | ||
| 291 | + 'model_id' => $this->model_id, | ||
| 292 | + 'comment' => $this, | ||
| 293 | + ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [ | ||
| 294 | + 'model' => $this->model, | ||
| 295 | + 'model_id' => $this->model_id, | ||
| 296 | + 'comment' => $this, | ||
| 297 | + ]) ); | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + public function checkReply() | ||
| 302 | + { | ||
| 303 | + if($this->scenario == self::SCENARIO_GUEST) { | ||
| 304 | + return false; | ||
| 305 | + } else { | ||
| 306 | + return $this->allowReply; | ||
| 295 | } | 307 | } |
| 296 | } | 308 | } |
| 297 | 309 | ||
| @@ -310,6 +322,15 @@ | @@ -310,6 +322,15 @@ | ||
| 310 | return $this->hasOne(self::className(), [ 'comment_id' => 'comment_pid' ]); | 322 | return $this->hasOne(self::className(), [ 'comment_id' => 'comment_pid' ]); |
| 311 | } | 323 | } |
| 312 | 324 | ||
| 325 | + public function getAuthorName() | ||
| 326 | + { | ||
| 327 | + if(!empty( $this->author )) { | ||
| 328 | + return $this->author->name; | ||
| 329 | + } else { | ||
| 330 | + return $this->user_name; | ||
| 331 | + } | ||
| 332 | + } | ||
| 333 | + | ||
| 313 | public function getAuthor() | 334 | public function getAuthor() |
| 314 | { | 335 | { |
| 315 | // if($this->user_id != NULL) { | 336 | // if($this->user_id != NULL) { |
| @@ -378,6 +399,23 @@ | @@ -378,6 +399,23 @@ | ||
| 378 | 'comment_id' => $this->comment_id, | 399 | 'comment_id' => $this->comment_id, |
| 379 | ]); | 400 | ]); |
| 380 | } | 401 | } |
| 402 | + if($this->checkUpdate()) { | ||
| 403 | + $this->buttons[ 'update' ] = Url::to([ | ||
| 404 | + 'artbox-comment/update', | ||
| 405 | + 'comment_id' => $this->comment_id, | ||
| 406 | + ]); | ||
| 407 | + } | ||
| 408 | + if($this->checkReply()) { | ||
| 409 | + $this->buttons[ 'reply' ] = Url::to([ | ||
| 410 | + 'artbox-comment/reply', | ||
| 411 | + 'comment_id' => $this->comment_id, | ||
| 412 | + ]); | ||
| 413 | + } | ||
| 414 | + } | ||
| 415 | + | ||
| 416 | + public function getAllowReply() | ||
| 417 | + { | ||
| 418 | + return $this->hasAttribute('comment_pid'); | ||
| 381 | } | 419 | } |
| 382 | 420 | ||
| 383 | } | 421 | } |
common/modules/comment/rbac/ArtboxCommentUpdateOwnRule.php
common/modules/comment/rbac/ArtboxCommentUpdateRule.php
common/modules/comment/resources/comment.css
| @@ -16,4 +16,25 @@ | @@ -16,4 +16,25 @@ | ||
| 16 | height: 13px; | 16 | height: 13px; |
| 17 | top: 0; | 17 | top: 0; |
| 18 | cursor: pointer; | 18 | cursor: pointer; |
| 19 | -} | ||
| 20 | \ No newline at end of file | 19 | \ No newline at end of file |
| 20 | +} | ||
| 21 | +.removeable { | ||
| 22 | + color: #a94442; | ||
| 23 | + background-color: #f2dede; | ||
| 24 | + border-color: #ebccd1; | ||
| 25 | + border-radius: 4px; | ||
| 26 | + padding: 15px; | ||
| 27 | + padding-right: 35px; | ||
| 28 | + position: relative; | ||
| 29 | +} | ||
| 30 | +.removeable::after { | ||
| 31 | + content: ' '; | ||
| 32 | + display: block; | ||
| 33 | + position: absolute; | ||
| 34 | + right: 5px; | ||
| 35 | + top: 5px; | ||
| 36 | + width: 15px; | ||
| 37 | + height: 15px; | ||
| 38 | + background: url('delete-ico.png'); | ||
| 39 | + background-size: cover; | ||
| 40 | + cursor: pointer; | ||
| 41 | +} |
common/modules/comment/resources/comment.js
| 1 | $(function() { | 1 | $(function() { |
| 2 | 2 | ||
| 3 | - $(document).on('click', '.artbox_comment_delete', function() { | 3 | + $(document).on('click', '.artbox_comment_container .removeable', function(e) { |
| 4 | + e.preventDefault(); | ||
| 4 | var container = $(this).parents('.artbox_comment_container'); | 5 | var container = $(this).parents('.artbox_comment_container'); |
| 5 | - var comment_id = $(container).data('comment_id'); | ||
| 6 | - var form_name = $(container).data('form_name'); | ||
| 7 | - if(confirm("Уверены, что хотите удалить комментарий?")) { | ||
| 8 | - $.post( | ||
| 9 | - '/artbox-comment/delete', | ||
| 10 | - { | ||
| 11 | - Comment: { | ||
| 12 | - comment_id: comment_id | ||
| 13 | - } | ||
| 14 | - }, | ||
| 15 | - function(data, textStatus, jqXHR) { | ||
| 16 | - if(!data.error) { | ||
| 17 | - $(container).after('<p class="removeable">'+data.text+'</p>'); | ||
| 18 | - $(container).remove(); | ||
| 19 | - } else { | ||
| 20 | - $(container).prepend('<p class="removeable error_message">'+data.error+'</p>') | 6 | + $(container).remove(); |
| 7 | + }); | ||
| 8 | + | ||
| 9 | + $(document).on( | ||
| 10 | + 'click', '.artbox_comment_delete', function(e) | ||
| 11 | + { | ||
| 12 | + e.preventDefault(); | ||
| 13 | + var container = $(this).parents('.artbox_comment_container'); | ||
| 14 | + var comment_id = $(container).data('key'); | ||
| 15 | + var form_name = $(container).data('form'); | ||
| 16 | + if(confirm("Уверены, что хотите удалить комментарий?")) | ||
| 17 | + { | ||
| 18 | + $.post( | ||
| 19 | + '/artbox-comment/delete', { | ||
| 20 | + Comment : { | ||
| 21 | + comment_id : comment_id | ||
| 22 | + } | ||
| 23 | + }, function(data, textStatus, jqXHR) | ||
| 24 | + { | ||
| 25 | + if(!data.error) | ||
| 26 | + { | ||
| 27 | + $(container).empty(); | ||
| 28 | + $(container).append('<p class="removeable">' + data.text + '</p>'); | ||
| 29 | + } else | ||
| 30 | + { | ||
| 31 | + $(container).prepend('<p class="removeable error_message">' + data.error + '</p>') | ||
| 32 | + } | ||
| 21 | } | 33 | } |
| 34 | + ); | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + ); | ||
| 38 | + | ||
| 39 | + $(document).on( | ||
| 40 | + 'click', '.artbox_comment_reply', function(e) | ||
| 41 | + { | ||
| 42 | + e.preventDefault(); | ||
| 43 | + var container = $(this).parents('.artbox_comment_container').first(); | ||
| 44 | + var comment_id = $(container).data('key'); | ||
| 45 | + var form_name = $(container).data('form'); | ||
| 46 | + var author = $(container).find('.artbox_comment_author').first().text(); | ||
| 47 | + var comment_form = $(container).parents('.artbox_comment_widget').find('.artbox_comment_form').first(); | ||
| 48 | + var offset = $(comment_form).offset(); | ||
| 49 | + var reply_block = $(comment_form).find('.artbox_comment_reply_block').first(); | ||
| 50 | + $(reply_block).empty(); | ||
| 51 | + $(reply_block).append('<input type="hidden" name="' + form_name + '[comment_pid]" value="' + comment_id + '">'); | ||
| 52 | + $(reply_block).append('<p class="artbox_comment_reply_author">' + author + '</p>'); | ||
| 53 | + $('html, body').animate( | ||
| 54 | + { | ||
| 55 | + scrollTop : offset.top - 50, | ||
| 22 | } | 56 | } |
| 23 | ); | 57 | ); |
| 24 | } | 58 | } |
| 25 | - }); | 59 | + ); |
| 26 | 60 | ||
| 27 | - $(document).on('click', '.artbox_comment_reply', function() { | ||
| 28 | - var container = $(this).parents('.artbox_comment_container').first(); | ||
| 29 | - var comment_id = $(container).data('comment_id'); | ||
| 30 | - var form_name = $(container).data('form_name'); | ||
| 31 | - var author = $(container).find('.artbox_comment_author').first().text(); | ||
| 32 | - var comment_form = $('.artbox_comment_form').first(); | ||
| 33 | - var offset = $(comment_form).offset(); | ||
| 34 | - var reply_block = $(comment_form).find('.artbox_comment_reply_block').first(); | ||
| 35 | - $(reply_block).empty(); | ||
| 36 | - $(reply_block).append('<input type="hidden" name="'+form_name+'[comment_pid]" value="'+comment_id+'">'); | ||
| 37 | - $(reply_block).append('<p class="artbox_comment_reply_author">'+author+'</p>'); | ||
| 38 | - $('html, body').animate({ | ||
| 39 | - scrollTop: offset.top - 50, | ||
| 40 | - }); | ||
| 41 | - }); | ||
| 42 | - | ||
| 43 | - $(document).on('click', '.artbox_comment_reply_author', function() { | ||
| 44 | - $(this).parents('.artbox_comment_reply_block').first().empty(); | ||
| 45 | - }); | 61 | + $(document).on( |
| 62 | + 'click', '.artbox_comment_reply_author', function() | ||
| 63 | + { | ||
| 64 | + $(this).parents('.artbox_comment_reply_block').first().empty(); | ||
| 65 | + } | ||
| 66 | + ); | ||
| 46 | 67 | ||
| 47 | - $(document).on('click', '.artbox_comment_update', function() { | ||
| 48 | - $(this).removeClass('artbox_comment_update'); | ||
| 49 | - $(this).text('Сохранить'); | ||
| 50 | - $(this).addClass('artbox_comment_update_submit'); | ||
| 51 | - var container = $(this).parents('.artbox_comment_container').first(); | ||
| 52 | - var comment_id = $(container).data('comment_id'); | ||
| 53 | - var form_name = $(container).data('form_name'); | ||
| 54 | - var text = $(container).find('.artbox_comment_text'); | ||
| 55 | - var object = {}; | ||
| 56 | - object[form_name] = {comment_id: comment_id}; | ||
| 57 | - $.post( | ||
| 58 | - '/artbox-comment/form', | ||
| 59 | - object, | ||
| 60 | - function(data, textStatus, jqXHR) { | ||
| 61 | - $(text).hide(); | ||
| 62 | - $(text).after( | ||
| 63 | - '<div class="artbox_comment_text_edit new-portf-answer">' | ||
| 64 | - + data | ||
| 65 | - + '</div>' | ||
| 66 | - ); | ||
| 67 | - } | ||
| 68 | - ); | ||
| 69 | - }); | 68 | + $(document).on( |
| 69 | + 'click', '.artbox_comment_update', function(e) | ||
| 70 | + { | ||
| 71 | + e.preventDefault(); | ||
| 72 | + var container = $(this).parents('.artbox_comment_container').first(); | ||
| 73 | + var comment_id = $(container).data('key'); | ||
| 74 | + var form_name = $(container).data('form'); | ||
| 75 | + var object = {}; | ||
| 76 | + object[form_name] = {comment_id : comment_id}; | ||
| 77 | + $.post( | ||
| 78 | + '/artbox-comment/form', object, function(data, textStatus, jqXHR) | ||
| 79 | + { | ||
| 80 | + $(container).empty(); | ||
| 81 | + $(container).append(data.result.form); | ||
| 82 | + } | ||
| 83 | + ); | ||
| 84 | + } | ||
| 85 | + ); | ||
| 70 | 86 | ||
| 71 | - $(document).on('click', '.artbox_comment_update_reply', function() { | ||
| 72 | - $(this).remove(); | ||
| 73 | - }); | 87 | + // @TODO What is this |
| 88 | + $(document).on( | ||
| 89 | + 'click', '.artbox_comment_update_reply', function() | ||
| 90 | + { | ||
| 91 | + $(this).remove(); | ||
| 92 | + } | ||
| 93 | + ); | ||
| 74 | 94 | ||
| 75 | - $(document).on('click', '.artbox_comment_update_submit', function(e) { | ||
| 76 | - e.preventDefault(); | ||
| 77 | - var container = $(this).parents('.artbox_comment_container').first(); | ||
| 78 | - var edit = $(container).find('.artbox_comment_text_edit').first(); | ||
| 79 | - $.post( | ||
| 80 | - '/artbox-comment/update', | ||
| 81 | - $(edit).find('form').serialize(), | ||
| 82 | - function(data) { | ||
| 83 | - if(!data.error) { | ||
| 84 | - location.reload(true); | 95 | + $(document).on( |
| 96 | + 'click', '.artbox_comment_update_submit', function(e) | ||
| 97 | + { | ||
| 98 | + e.preventDefault(); | ||
| 99 | + var container = $(this).parents('.artbox_comment_container').first(); | ||
| 100 | + $.post( | ||
| 101 | + '/artbox-comment/update', $(container).find('form').serialize(), function(data) | ||
| 102 | + { | ||
| 103 | + $(container).empty(); | ||
| 104 | + if(!data.error) | ||
| 105 | + { | ||
| 106 | + $(container).append('<p>'+data.result.text+'</p>'); | ||
| 107 | + $(container).append(data.result.html); | ||
| 108 | + } else { | ||
| 109 | + $(container).append(data.form); | ||
| 110 | + } | ||
| 85 | } | 111 | } |
| 86 | - } | ||
| 87 | - ) | ||
| 88 | - }); | ||
| 89 | -}); | ||
| 90 | \ No newline at end of file | 112 | \ No newline at end of file |
| 113 | + ) | ||
| 114 | + } | ||
| 115 | + ); | ||
| 116 | +}); |
common/modules/comment/widgets/CommentWidget.php
| 1 | <?php | 1 | <?php |
| 2 | namespace common\modules\comment\widgets; | 2 | namespace common\modules\comment\widgets; |
| 3 | 3 | ||
| 4 | + use yii\data\Sort; | ||
| 4 | use \yii\helpers\ArrayHelper; | 5 | use \yii\helpers\ArrayHelper; |
| 5 | use \yii\helpers\Html; | 6 | use \yii\helpers\Html; |
| 6 | 7 | ||
| @@ -8,6 +9,31 @@ | @@ -8,6 +9,31 @@ | ||
| 8 | { | 9 | { |
| 9 | 10 | ||
| 10 | /** | 11 | /** |
| 12 | + * 'comment_container' - apply to container of one comment. Must have data-key and data-form | ||
| 13 | + * 'comment_delete' - apply to comment delete link | ||
| 14 | + * 'comment_reply' - apply to comment reply link | ||
| 15 | + * 'comment_author' - apply to comment author text wrapper | ||
| 16 | + * 'widget_container' - apply to comment widget | ||
| 17 | + * 'form_container' - apply to comment form wrapper | ||
| 18 | + * 'reply_block' - apply to reply block of comment form | ||
| 19 | + * 'reply_author' - apply to reply author text block inside of reply block of comment form | ||
| 20 | + * 'comment_update' - apply to comment update link | ||
| 21 | + * 'comment_update_submit' - apply to submit button of comment update form | ||
| 22 | + */ | ||
| 23 | + static $baseClass = [ | ||
| 24 | + 'comment_container' => 'artbox_comment_container', | ||
| 25 | + 'comment_delete' => 'artbox_comment_delete', | ||
| 26 | + 'comment_reply' => 'artbox_comment_reply', | ||
| 27 | + 'comment_author' => 'artbox_comment_author', | ||
| 28 | + 'widget_container' => 'artbox_comment_widget', | ||
| 29 | + 'form_container' => 'artbox_comment_form', | ||
| 30 | + 'reply_block' => 'artbox_comment_reply_block', | ||
| 31 | + 'reply_author' => 'artbox_comment_reply_author', | ||
| 32 | + 'comment_update' => 'artbox_comment_update', | ||
| 33 | + 'comment_update_submit' => 'artbox_comment_update_submit', | ||
| 34 | + ]; | ||
| 35 | + | ||
| 36 | + /** | ||
| 11 | * @var null|\yii\web\View | 37 | * @var null|\yii\web\View |
| 12 | */ | 38 | */ |
| 13 | public $context = NULL; | 39 | public $context = NULL; |
| @@ -50,6 +76,7 @@ | @@ -50,6 +76,7 @@ | ||
| 50 | * @var bool Whether to allow one user post multiple comments | 76 | * @var bool Whether to allow one user post multiple comments |
| 51 | */ | 77 | */ |
| 52 | public $allow_multiple = true; | 78 | public $allow_multiple = true; |
| 79 | + public $allow_reply = true; | ||
| 53 | 80 | ||
| 54 | /** | 81 | /** |
| 55 | * @var array Options sent to list part | 82 | * @var array Options sent to list part |
| @@ -170,6 +197,11 @@ | @@ -170,6 +197,11 @@ | ||
| 170 | if($this->display_comment_form && $this->comment_class->checkCreate()) { | 197 | if($this->display_comment_form && $this->comment_class->checkCreate()) { |
| 171 | $tag = ArrayHelper::remove($this->form_options, 'tag', 'div'); | 198 | $tag = ArrayHelper::remove($this->form_options, 'tag', 'div'); |
| 172 | $view = ArrayHelper::remove($this->form_options, 'view'); | 199 | $view = ArrayHelper::remove($this->form_options, 'view'); |
| 200 | + if(!empty($this->form_options['class'])) { | ||
| 201 | + $this->form_options['class'] .= ' '.self::$baseClass['form_container']; | ||
| 202 | + } else { | ||
| 203 | + $this->form_options['class'] = self::$baseClass['form_container']; | ||
| 204 | + } | ||
| 173 | $this->parts[ 'form' ] = Html::tag($tag, $this->renderForm($view), $this->form_options); | 205 | $this->parts[ 'form' ] = Html::tag($tag, $this->renderForm($view), $this->form_options); |
| 174 | } | 206 | } |
| 175 | } | 207 | } |
| @@ -178,6 +210,11 @@ | @@ -178,6 +210,11 @@ | ||
| 178 | { | 210 | { |
| 179 | $this->dataProvider = new \yii\data\ActiveDataProvider([ | 211 | $this->dataProvider = new \yii\data\ActiveDataProvider([ |
| 180 | 'query' => $this->comment_class->getComments($this->model, $this->model_id), | 212 | 'query' => $this->comment_class->getComments($this->model, $this->model_id), |
| 213 | + 'sort' => new Sort([ | ||
| 214 | + 'defaultOrder' => [ | ||
| 215 | + 'date_add' => SORT_DESC, | ||
| 216 | + ], | ||
| 217 | + ]), | ||
| 181 | 'pagination' => [ | 218 | 'pagination' => [ |
| 182 | 'pageSize' => 10, | 219 | 'pageSize' => 10, |
| 183 | ], | 220 | ], |
| @@ -189,7 +226,10 @@ | @@ -189,7 +226,10 @@ | ||
| 189 | if(empty( $view )) { | 226 | if(empty( $view )) { |
| 190 | throw new \yii\base\InvalidConfigException("list_options[view] must be set"); | 227 | throw new \yii\base\InvalidConfigException("list_options[view] must be set"); |
| 191 | } | 228 | } |
| 192 | - return $this->render($view, [ 'dataProvider' => $this->dataProvider ]); | 229 | + return $this->render($view, [ |
| 230 | + 'dataProvider' => $this->dataProvider, | ||
| 231 | + 'commentClass' => $this->comment_class, | ||
| 232 | + ]); | ||
| 193 | } | 233 | } |
| 194 | 234 | ||
| 195 | public function renderForm($view) | 235 | public function renderForm($view) |
| @@ -197,7 +237,7 @@ | @@ -197,7 +237,7 @@ | ||
| 197 | if(empty( $view )) { | 237 | if(empty( $view )) { |
| 198 | throw new \yii\base\InvalidConfigException("form_options[view] must be set"); | 238 | throw new \yii\base\InvalidConfigException("form_options[view] must be set"); |
| 199 | } | 239 | } |
| 200 | - if($this->comment_class->guestComment || !empty(\Yii::$app->user->identity)) { | 240 | + if($this->comment_class->guestComment || !empty( \Yii::$app->user->identity )) { |
| 201 | return $this->render($view, [ | 241 | return $this->render($view, [ |
| 202 | 'model' => $this->comment_class, | 242 | 'model' => $this->comment_class, |
| 203 | 'rating' => $this->rating_class, | 243 | 'rating' => $this->rating_class, |
| @@ -218,6 +258,11 @@ | @@ -218,6 +258,11 @@ | ||
| 218 | $template = preg_replace('/{list}/', ArrayHelper::remove($parts, 'list', ''), $template); | 258 | $template = preg_replace('/{list}/', ArrayHelper::remove($parts, 'list', ''), $template); |
| 219 | $template = preg_replace('/{form}/', ArrayHelper::remove($parts, 'form', ''), $template); | 259 | $template = preg_replace('/{form}/', ArrayHelper::remove($parts, 'form', ''), $template); |
| 220 | $tag = ArrayHelper::remove($options, 'tag', 'div'); | 260 | $tag = ArrayHelper::remove($options, 'tag', 'div'); |
| 261 | + if(!empty($options['class'])) { | ||
| 262 | + $options['class'] .= ' '.self::$baseClass['widget_container']; | ||
| 263 | + } else { | ||
| 264 | + $options['class'] = self::$baseClass['widget_container']; | ||
| 265 | + } | ||
| 221 | return Html::tag($tag, $template, $options); | 266 | return Html::tag($tag, $template, $options); |
| 222 | } | 267 | } |
| 223 | 268 | ||
| @@ -233,4 +278,5 @@ | @@ -233,4 +278,5 @@ | ||
| 233 | } | 278 | } |
| 234 | } | 279 | } |
| 235 | } | 280 | } |
| 281 | + | ||
| 236 | } | 282 | } |
| 237 | \ No newline at end of file | 283 | \ No newline at end of file |
common/modules/comment/widgets/views/_review_comment_view.php
| 1 | <?php | 1 | <?php |
| 2 | use common\models\User; | 2 | use common\models\User; |
| 3 | + use common\modules\comment\widgets\CommentWidget; | ||
| 3 | use yii\helpers\Html; | 4 | use yii\helpers\Html; |
| 5 | + use yii\web\View; | ||
| 4 | 6 | ||
| 5 | /** | 7 | /** |
| 8 | + * @var View $this | ||
| 6 | * @var \common\modules\comment\models\Comment $model Current comment model | 9 | * @var \common\modules\comment\models\Comment $model Current comment model |
| 7 | * @var integer $key ID of current comment | 10 | * @var integer $key ID of current comment |
| 8 | * @var integer $index index of current element according | 11 | * @var integer $index index of current element according |
| @@ -13,7 +16,7 @@ | @@ -13,7 +16,7 @@ | ||
| 13 | $user = $model->user; | 16 | $user = $model->user; |
| 14 | $model->buildButtons(); | 17 | $model->buildButtons(); |
| 15 | ?> | 18 | ?> |
| 16 | - <div class="comments-name"><?= $user->name ?></div> | 19 | + <div class="comments-name <?= CommentWidget::$baseClass[ 'comment_author' ] ?>"><?= $user->name ?></div> |
| 17 | <?php | 20 | <?php |
| 18 | /* == STATUS PRO == | 21 | /* == STATUS PRO == |
| 19 | ?> | 22 | ?> |
| @@ -37,12 +40,27 @@ | @@ -37,12 +40,27 @@ | ||
| 37 | </div> | 40 | </div> |
| 38 | <div> | 41 | <div> |
| 39 | <?php | 42 | <?php |
| 40 | - if(!empty($model->buttons['delete'])) { | ||
| 41 | - echo Html::a('Удалить', $model->buttons['delete'], ['data-method' => 'post', 'data-confirm' => 'Really?']); | 43 | + if(!empty( $model->buttons[ 'delete' ] )) { |
| 44 | + echo Html::a('Удалить', $model->buttons[ 'delete' ], [ 'class' => CommentWidget::$baseClass[ 'comment_delete' ] ]); | ||
| 45 | + } | ||
| 46 | + if(!empty( $model->buttons[ 'update' ] )) { | ||
| 47 | + echo Html::a('Редактировать', $model->buttons[ 'update' ], [ 'class' => CommentWidget::$baseClass[ 'comment_update' ] ]); | ||
| 48 | + } | ||
| 49 | + if(!empty( $model->buttons[ 'reply' ] )) { | ||
| 50 | + echo Html::a('Ответить', $model->buttons[ 'reply' ], [ 'class' => CommentWidget::$baseClass[ 'comment_reply' ] ]); | ||
| 42 | } | 51 | } |
| 43 | ?> | 52 | ?> |
| 44 | </div> | 53 | </div> |
| 45 | <?php | 54 | <?php |
| 55 | + if(!$model->isNewRecord) { | ||
| 56 | + $this->registerJs("$('div.rating').rating( | ||
| 57 | + { | ||
| 58 | + fx : 'full', readOnly : 'true', url : 'rating.php' | ||
| 59 | + } | ||
| 60 | + );"); | ||
| 61 | + } | ||
| 62 | +?> | ||
| 63 | +<?php | ||
| 46 | /* == PROJECT INFO == | 64 | /* == PROJECT INFO == |
| 47 | ?> | 65 | ?> |
| 48 | <div class="comments-project-link">Проект: <a href="#">Ремонт спальни</a></div> | 66 | <div class="comments-project-link">Проект: <a href="#">Ремонт спальни</a></div> |
common/modules/comment/widgets/views/form-comment-review.php
| 1 | <?php | 1 | <?php |
| 2 | /** | 2 | /** |
| 3 | + * @var View $this | ||
| 3 | * @var \common\modules\comment\models\Comment $model | 4 | * @var \common\modules\comment\models\Comment $model |
| 4 | * @var \common\models\User $user | 5 | * @var \common\models\User $user |
| 5 | * @var \yii\data\ActiveDataProvider $dataProvider | 6 | * @var \yii\data\ActiveDataProvider $dataProvider |
| 6 | * @var null|\common\modules\comment\models\Rating $rating | 7 | * @var null|\common\modules\comment\models\Rating $rating |
| 7 | */ | 8 | */ |
| 9 | + use common\modules\comment\widgets\CommentWidget; | ||
| 10 | + use yii\web\View; | ||
| 8 | use yii\widgets\ActiveForm; | 11 | use yii\widgets\ActiveForm; |
| 9 | use yii\helpers\Html; | 12 | use yii\helpers\Html; |
| 10 | 13 | ||
| 11 | ?> | 14 | ?> |
| 12 | -<div class="workplace-title style"> | ||
| 13 | - <p></p>Мнения о пользователе: <?= $dataProvider->totalCount ?></p></div> | 15 | +<?php |
| 16 | + if(!empty( $dataProvider )) { | ||
| 17 | + ?> | ||
| 18 | + <div class="workplace-title style"> | ||
| 19 | + <p>Мнения о пользователе: <?= $dataProvider->totalCount ?></p> | ||
| 20 | + </div> | ||
| 21 | + <?php | ||
| 22 | + } | ||
| 23 | +?> | ||
| 14 | <div class="new-portf-add-comm style"> | 24 | <div class="new-portf-add-comm style"> |
| 15 | <?php | 25 | <?php |
| 16 | $form = ActiveForm::begin(); | 26 | $form = ActiveForm::begin(); |
| 17 | - echo $form->field($rating, 'value') | 27 | + if(!$model->isNewRecord) { |
| 28 | + echo $form->field($model, 'comment_id') | ||
| 29 | + ->hiddenInput() | ||
| 30 | + ->label(false) | ||
| 31 | + ->error(false); | ||
| 32 | + } | ||
| 33 | + echo $form->field(( !empty( $model->rating ) ? $model->rating : $rating ), 'value') | ||
| 18 | ->label(false) | 34 | ->label(false) |
| 19 | ->radioList([ | 35 | ->radioList([ |
| 20 | 1 => 1, | 36 | 1 => 1, |
| @@ -43,10 +59,11 @@ | @@ -43,10 +59,11 @@ | ||
| 43 | ]) | 59 | ]) |
| 44 | ->textInput(); | 60 | ->textInput(); |
| 45 | } | 61 | } |
| 46 | - | ||
| 47 | - ?> | ||
| 48 | - <div class="artbox_comment_reply_block"></div> | ||
| 49 | - <?php | 62 | + if(!empty( $model->comment_pid )) { |
| 63 | + echo Html::tag('div', Html::activeHiddenInput($model, 'comment_pid') . Html::tag('p', $model->parent->authorName, [ 'class' => 'artbox_comment_reply_author' ]), [ 'class' => CommentWidget::$baseClass[ 'reply_block' ] ]); | ||
| 64 | + } else { | ||
| 65 | + echo Html::tag('div', '', [ 'class' => CommentWidget::$baseClass[ 'reply_block' ] ]); | ||
| 66 | + } | ||
| 50 | echo $form->field($model, 'text', [ | 67 | echo $form->field($model, 'text', [ |
| 51 | 'options' => [ | 68 | 'options' => [ |
| 52 | 'class' => 'input-blocks-comm area-comm', | 69 | 'class' => 'input-blocks-comm area-comm', |
| @@ -58,7 +75,13 @@ | @@ -58,7 +75,13 @@ | ||
| 58 | ->textarea(); | 75 | ->textarea(); |
| 59 | ?> | 76 | ?> |
| 60 | <div class="input-blocks-comm-button style"> | 77 | <div class="input-blocks-comm-button style"> |
| 61 | - <?= Html::submitButton('Добавить комментарий') ?> | 78 | + <?php |
| 79 | + if($model->isNewRecord) { | ||
| 80 | + echo Html::submitButton('Добавить комментарий'); | ||
| 81 | + } else { | ||
| 82 | + echo Html::submitButton('Обновить комментарий', [ 'class' => CommentWidget::$baseClass[ 'comment_update_submit' ] ]); | ||
| 83 | + } | ||
| 84 | + ?> | ||
| 62 | </div> | 85 | </div> |
| 63 | <?php | 86 | <?php |
| 64 | $form->end(); | 87 | $form->end(); |
common/modules/comment/widgets/views/list-comment-review.php
| 1 | <?php | 1 | <?php |
| 2 | /** | 2 | /** |
| 3 | * @var \yii\data\DataProviderInterface $dataProvider | 3 | * @var \yii\data\DataProviderInterface $dataProvider |
| 4 | + * @var Comment $commentClass | ||
| 4 | */ | 5 | */ |
| 5 | -echo \yii\widgets\ListView::widget([ | ||
| 6 | - 'dataProvider' => $dataProvider, | ||
| 7 | - 'itemView' => '_review_comment_view', | ||
| 8 | - 'options' => [ | ||
| 9 | - 'tag' => 'ul', | ||
| 10 | - 'class' => 'proektant-comments style' | ||
| 11 | - ], | ||
| 12 | - 'itemOptions' => [ | ||
| 13 | - 'tag' => 'li', | ||
| 14 | - ], | ||
| 15 | - 'layout' => "{items}\n{pager}", | ||
| 16 | -]); | ||
| 17 | \ No newline at end of file | 6 | \ No newline at end of file |
| 7 | + use common\modules\comment\models\Comment; | ||
| 8 | + use common\modules\comment\widgets\CommentWidget; | ||
| 9 | + echo \yii\widgets\ListView::widget([ | ||
| 10 | + 'dataProvider' => $dataProvider, | ||
| 11 | + 'itemView' => '_review_comment_view', | ||
| 12 | + 'options' => [ | ||
| 13 | + 'tag' => 'ul', | ||
| 14 | + 'class' => 'proektant-comments style', | ||
| 15 | + ], | ||
| 16 | + 'itemOptions' => [ | ||
| 17 | + 'tag' => 'li', | ||
| 18 | + 'class' => CommentWidget::$baseClass[ 'comment_container' ], | ||
| 19 | + 'data' => [ | ||
| 20 | + 'form' => $commentClass->formName(), | ||
| 21 | + ], | ||
| 22 | + ], | ||
| 23 | + 'layout' => "{items}\n{pager}", | ||
| 24 | + ]); | ||
| 18 | \ No newline at end of file | 25 | \ No newline at end of file |
frontend/controllers/SiteController.php
| @@ -279,15 +279,11 @@ class SiteController extends Controller | @@ -279,15 +279,11 @@ class SiteController extends Controller | ||
| 279 | 279 | ||
| 280 | $user_info->save(); | 280 | $user_info->save(); |
| 281 | 281 | ||
| 282 | - if($user->type == 2 ){ | 282 | + $company_info = new CompanyInfo(); |
| 283 | + $company_info->load(Yii::$app->request->post(), 'SignupForm'); | ||
| 284 | + $company_info->user_id = $user->id; | ||
| 283 | 285 | ||
| 284 | - $company_info = new CompanyInfo(); | ||
| 285 | - $company_info->load(Yii::$app->request->post(),'SignupForm'); | ||
| 286 | - $company_info->user_id = $user->id; | ||
| 287 | - | ||
| 288 | - $company_info->save(); | ||
| 289 | - | ||
| 290 | - } | 286 | + $company_info->save(); |
| 291 | 287 | ||
| 292 | if (Yii::$app->getUser()->login($user)) { | 288 | if (Yii::$app->getUser()->login($user)) { |
| 293 | 289 |