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 | 3 | |
| 4 | 4 | class Controller extends \yii\web\Controller |
| 5 | 5 | { |
| 6 | + | |
| 7 | + public $enableCsrfValidation = false; | |
| 8 | + | |
| 6 | 9 | public function behaviors() |
| 7 | 10 | { |
| 8 | 11 | return [ |
| 9 | 12 | 'verbs' => [ |
| 10 | - 'class' => \yii\filters\VerbFilter::className(), | |
| 13 | + 'class' => \yii\filters\VerbFilter::className(), | |
| 11 | 14 | 'actions' => [ |
| 12 | - '*' => ['post'], | |
| 15 | + '*' => [ 'post' ], | |
| 13 | 16 | ], |
| 14 | 17 | ], |
| 15 | 18 | ]; |
| ... | ... | @@ -20,25 +23,25 @@ |
| 20 | 23 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; |
| 21 | 24 | $post = \Yii::$app->request->post('Comment'); |
| 22 | 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 | 32 | * @var \common\modules\comment\models\Comment $model |
| 30 | 33 | */ |
| 31 | 34 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; |
| 32 | 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 | 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 | 43 | } else { |
| 41 | - \Yii::$app->response->data = ['error' => 'Missing comment_id']; | |
| 44 | + \Yii::$app->response->data = [ 'error' => 'Missing comment_id' ]; | |
| 42 | 45 | } |
| 43 | 46 | \Yii::$app->response->send(); |
| 44 | 47 | } |
| ... | ... | @@ -47,55 +50,80 @@ |
| 47 | 50 | { |
| 48 | 51 | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; |
| 49 | 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 | 56 | * @var \common\modules\comment\models\Comment $model |
| 54 | 57 | */ |
| 55 | 58 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; |
| 56 | 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 | 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 | 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 | 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 | 96 | public function actionForm() |
| 75 | 97 | { |
| 98 | + \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | |
| 76 | 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 | 105 | if($model) { |
| 80 | 106 | /** |
| 81 | 107 | * @var \common\modules\comment\models\Comment $model |
| 82 | 108 | */ |
| 83 | 109 | $model->scenario = is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST; |
| 84 | 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 | 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 | 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 | 130 | \ No newline at end of file | ... | ... |
common/modules/comment/assets/CommentAsset.php
common/modules/comment/models/Comment.php
| ... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 | * @property int $model_id |
| 23 | 23 | * @property Rating $rating |
| 24 | 24 | * @property User $user |
| 25 | + * @property User $author | |
| 25 | 26 | * @package common\modules\comment\models |
| 26 | 27 | */ |
| 27 | 28 | class Comment extends \yii\db\ActiveRecord |
| ... | ... | @@ -206,7 +207,7 @@ |
| 206 | 207 | return false; |
| 207 | 208 | } else { |
| 208 | 209 | if($this->update()) { |
| 209 | - $this->clearSafe(); | |
| 210 | + // $this->clearSafe(); Clears safe attributes after AJAX update | |
| 210 | 211 | return true; |
| 211 | 212 | } else { |
| 212 | 213 | return false; |
| ... | ... | @@ -271,9 +272,11 @@ |
| 271 | 272 | return \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE, [ |
| 272 | 273 | 'model' => $this->model, |
| 273 | 274 | 'model_id' => $this->model_id, |
| 275 | + 'comment' => $this, | |
| 274 | 276 | ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE_OWN, [ |
| 275 | 277 | 'model' => $this->model, |
| 276 | 278 | 'model_id' => $this->model_id, |
| 279 | + 'comment' => $this, | |
| 277 | 280 | ]); |
| 278 | 281 | } |
| 279 | 282 | } |
| ... | ... | @@ -283,15 +286,24 @@ |
| 283 | 286 | if($this->scenario == self::SCENARIO_GUEST) { |
| 284 | 287 | return false; |
| 285 | 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 | 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 | 334 | public function getAuthor() |
| 314 | 335 | { |
| 315 | 336 | // if($this->user_id != NULL) { |
| ... | ... | @@ -378,6 +399,23 @@ |
| 378 | 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 | 16 | height: 13px; |
| 17 | 17 | top: 0; |
| 18 | 18 | cursor: pointer; |
| 19 | -} | |
| 20 | 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 | 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 | 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 | 112 | \ No newline at end of file |
| 113 | + ) | |
| 114 | + } | |
| 115 | + ); | |
| 116 | +}); | ... | ... |
common/modules/comment/widgets/CommentWidget.php
| 1 | 1 | <?php |
| 2 | 2 | namespace common\modules\comment\widgets; |
| 3 | 3 | |
| 4 | + use yii\data\Sort; | |
| 4 | 5 | use \yii\helpers\ArrayHelper; |
| 5 | 6 | use \yii\helpers\Html; |
| 6 | 7 | |
| ... | ... | @@ -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 | 37 | * @var null|\yii\web\View |
| 12 | 38 | */ |
| 13 | 39 | public $context = NULL; |
| ... | ... | @@ -50,6 +76,7 @@ |
| 50 | 76 | * @var bool Whether to allow one user post multiple comments |
| 51 | 77 | */ |
| 52 | 78 | public $allow_multiple = true; |
| 79 | + public $allow_reply = true; | |
| 53 | 80 | |
| 54 | 81 | /** |
| 55 | 82 | * @var array Options sent to list part |
| ... | ... | @@ -170,6 +197,11 @@ |
| 170 | 197 | if($this->display_comment_form && $this->comment_class->checkCreate()) { |
| 171 | 198 | $tag = ArrayHelper::remove($this->form_options, 'tag', 'div'); |
| 172 | 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 | 205 | $this->parts[ 'form' ] = Html::tag($tag, $this->renderForm($view), $this->form_options); |
| 174 | 206 | } |
| 175 | 207 | } |
| ... | ... | @@ -178,6 +210,11 @@ |
| 178 | 210 | { |
| 179 | 211 | $this->dataProvider = new \yii\data\ActiveDataProvider([ |
| 180 | 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 | 218 | 'pagination' => [ |
| 182 | 219 | 'pageSize' => 10, |
| 183 | 220 | ], |
| ... | ... | @@ -189,7 +226,10 @@ |
| 189 | 226 | if(empty( $view )) { |
| 190 | 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 | 235 | public function renderForm($view) |
| ... | ... | @@ -197,7 +237,7 @@ |
| 197 | 237 | if(empty( $view )) { |
| 198 | 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 | 241 | return $this->render($view, [ |
| 202 | 242 | 'model' => $this->comment_class, |
| 203 | 243 | 'rating' => $this->rating_class, |
| ... | ... | @@ -218,6 +258,11 @@ |
| 218 | 258 | $template = preg_replace('/{list}/', ArrayHelper::remove($parts, 'list', ''), $template); |
| 219 | 259 | $template = preg_replace('/{form}/', ArrayHelper::remove($parts, 'form', ''), $template); |
| 220 | 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 | 266 | return Html::tag($tag, $template, $options); |
| 222 | 267 | } |
| 223 | 268 | |
| ... | ... | @@ -233,4 +278,5 @@ |
| 233 | 278 | } |
| 234 | 279 | } |
| 235 | 280 | } |
| 281 | + | |
| 236 | 282 | } |
| 237 | 283 | \ No newline at end of file | ... | ... |
common/modules/comment/widgets/views/_review_comment_view.php
| 1 | 1 | <?php |
| 2 | 2 | use common\models\User; |
| 3 | + use common\modules\comment\widgets\CommentWidget; | |
| 3 | 4 | use yii\helpers\Html; |
| 5 | + use yii\web\View; | |
| 4 | 6 | |
| 5 | 7 | /** |
| 8 | + * @var View $this | |
| 6 | 9 | * @var \common\modules\comment\models\Comment $model Current comment model |
| 7 | 10 | * @var integer $key ID of current comment |
| 8 | 11 | * @var integer $index index of current element according |
| ... | ... | @@ -13,7 +16,7 @@ |
| 13 | 16 | $user = $model->user; |
| 14 | 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 | 20 | <?php |
| 18 | 21 | /* == STATUS PRO == |
| 19 | 22 | ?> |
| ... | ... | @@ -37,12 +40,27 @@ |
| 37 | 40 | </div> |
| 38 | 41 | <div> |
| 39 | 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 | 53 | </div> |
| 45 | 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 | 64 | /* == PROJECT INFO == |
| 47 | 65 | ?> |
| 48 | 66 | <div class="comments-project-link">Проект: <a href="#">Ремонт спальни</a></div> | ... | ... |
common/modules/comment/widgets/views/form-comment-review.php
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | + * @var View $this | |
| 3 | 4 | * @var \common\modules\comment\models\Comment $model |
| 4 | 5 | * @var \common\models\User $user |
| 5 | 6 | * @var \yii\data\ActiveDataProvider $dataProvider |
| 6 | 7 | * @var null|\common\modules\comment\models\Rating $rating |
| 7 | 8 | */ |
| 9 | + use common\modules\comment\widgets\CommentWidget; | |
| 10 | + use yii\web\View; | |
| 8 | 11 | use yii\widgets\ActiveForm; |
| 9 | 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 | 24 | <div class="new-portf-add-comm style"> |
| 15 | 25 | <?php |
| 16 | 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 | 34 | ->label(false) |
| 19 | 35 | ->radioList([ |
| 20 | 36 | 1 => 1, |
| ... | ... | @@ -43,10 +59,11 @@ |
| 43 | 59 | ]) |
| 44 | 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 | 67 | echo $form->field($model, 'text', [ |
| 51 | 68 | 'options' => [ |
| 52 | 69 | 'class' => 'input-blocks-comm area-comm', |
| ... | ... | @@ -58,7 +75,13 @@ |
| 58 | 75 | ->textarea(); |
| 59 | 76 | ?> |
| 60 | 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 | 85 | </div> |
| 63 | 86 | <?php |
| 64 | 87 | $form->end(); | ... | ... |
common/modules/comment/widgets/views/list-comment-review.php
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | 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 | 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 | 25 | \ No newline at end of file | ... | ... |
frontend/controllers/SiteController.php
| ... | ... | @@ -279,15 +279,11 @@ class SiteController extends Controller |
| 279 | 279 | |
| 280 | 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 | 288 | if (Yii::$app->getUser()->login($user)) { |
| 293 | 289 | ... | ... |