From 83b0052c2e5a9e43b447da44902902f804143b47 Mon Sep 17 00:00:00 2001 From: Yarik Date: Wed, 16 Mar 2016 12:41:36 +0200 Subject: [PATCH] test --- common/models/Project.php | 15 +++++++++++++++ common/models/User.php | 2 +- common/modules/comment/models/Comment.php | 21 +++++++++++++++++++++ common/modules/comment/widgets/views/_review_comment_view.php | 43 +++++++++++++++++++++++++++++++++++++++++++ common/modules/comment/widgets/views/form-comment-review.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/modules/comment/widgets/views/list-comment-review.php | 16 ++++++++++++++++ frontend/controllers/AccountsController.php | 38 ++++++++++++++++++++++++++++++++++++++ frontend/views/accounts/_projects_form.php | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------- frontend/views/company/portfolio-view.php | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ frontend/views/company/review.php | 113 +++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------- frontend/views/performer/review.php | 40 +++++++++++++++++++++++++++++++++++----- 11 files changed, 596 insertions(+), 391 deletions(-) create mode 100644 common/modules/comment/widgets/views/_review_comment_view.php create mode 100644 common/modules/comment/widgets/views/form-comment-review.php create mode 100644 common/modules/comment/widgets/views/list-comment-review.php diff --git a/common/models/Project.php b/common/models/Project.php index e7999ad..1528a26 100644 --- a/common/models/Project.php +++ b/common/models/Project.php @@ -33,6 +33,7 @@ class Project extends \yii\db\ActiveRecord { + public $files; /** * @inheritdoc */ @@ -94,6 +95,7 @@ [ 'specializationInput', 'paymentInput', + 'files', ], 'safe', ], @@ -258,4 +260,17 @@ { $this->specializationString = $value; } + + /** + * @return File[] + */ + public function getFilesList() + { + $files = json_decode($this->files); + if(!empty( $files )) { + return File::findAll($files); + } else { + return [ ]; + } + } } diff --git a/common/models/User.php b/common/models/User.php index 8e960dc..58b3888 100755 --- a/common/models/User.php +++ b/common/models/User.php @@ -665,7 +665,7 @@ throw new InvalidConfigException('This method is available only in PostgreSQL'); } return $this->getCommentRating() - ->select('ROUND(SUM("rating"."value")/COUNT("rating"."rating_id")::float) as rating') + ->select(['rating' => 'ROUND(SUM("rating"."value")/COUNT("rating"."rating_id")::numeric, 2)']) ->andWhere([ 'not', [ 'rating.value' => NULL ], diff --git a/common/modules/comment/models/Comment.php b/common/modules/comment/models/Comment.php index 8796389..7275825 100644 --- a/common/modules/comment/models/Comment.php +++ b/common/modules/comment/models/Comment.php @@ -1,6 +1,7 @@ model == User::className()) { + if($user = User::findOne($this->model_id)) { + /** + * @var User $user + */ + $user->updateRating(); + } + } + parent::afterSave($insert, $changedAttributes); + } + public static function tableName() { return '{{%comment}}'; @@ -331,4 +347,9 @@ } } + public function getUser() + { + return $this->hasOne(User::className(), [ 'id' => 'user_id' ]); + } + } diff --git a/common/modules/comment/widgets/views/_review_comment_view.php b/common/modules/comment/widgets/views/_review_comment_view.php new file mode 100644 index 0000000..7c186c6 --- /dev/null +++ b/common/modules/comment/widgets/views/_review_comment_view.php @@ -0,0 +1,43 @@ +user; +?> +
name ?>
+ +
Pro
+ +
formatter->asDate($model->date_add, 'php:d.m.Y') ?>
+rating )) { + ?> +
+ + +
+ +
+ text ?> +
+ + + \ No newline at end of file diff --git a/common/modules/comment/widgets/views/form-comment-review.php b/common/modules/comment/widgets/views/form-comment-review.php new file mode 100644 index 0000000..95173e3 --- /dev/null +++ b/common/modules/comment/widgets/views/form-comment-review.php @@ -0,0 +1,66 @@ + +
+

Отзывы о пользователе: totalCount ?>

+
+ field($rating, 'value') + ->label(false) + ->radioList([ + 1 => 1, + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 5, + ]); + if($model->scenario == $model::SCENARIO_GUEST) { + echo $form->field($model, 'user_name', [ + 'options' => [ + 'class' => 'input-blocks-comm', + ], + 'inputOptions' => [ + 'class' => 'custom-input-4', + ], + ]) + ->textInput(); + echo $form->field($model, 'user_email', [ + 'options' => [ + 'class' => 'input-blocks-comm', + ], + 'inputOptions' => [ + 'class' => 'custom-input-4', + ], + ]) + ->textInput(); + } + + ?> +
+ field($model, 'text', [ + 'options' => [ + 'class' => 'input-blocks-comm area-comm', + ], + 'inputOptions' => [ + 'class' => 'custom-area-4', + ], + ]) + ->textarea(); + ?> +
+ +
+ end(); + ?> +
\ No newline at end of file diff --git a/common/modules/comment/widgets/views/list-comment-review.php b/common/modules/comment/widgets/views/list-comment-review.php new file mode 100644 index 0000000..2e5eccb --- /dev/null +++ b/common/modules/comment/widgets/views/list-comment-review.php @@ -0,0 +1,16 @@ + $dataProvider, + 'itemView' => '_review_comment_view', + 'options' => [ + 'tag' => 'ul', + 'class' => 'proektant-comments style' + ], + 'itemOptions' => [ + 'tag' => 'li', + ], + 'layout' => "{items}\n{pager}", +]); \ No newline at end of file diff --git a/frontend/controllers/AccountsController.php b/frontend/controllers/AccountsController.php index cdacc76..a00a4e6 100755 --- a/frontend/controllers/AccountsController.php +++ b/frontend/controllers/AccountsController.php @@ -9,6 +9,7 @@ use common\models\Department; use common\models\Employment; use common\models\Fields; + use common\models\File; use common\models\Gallery; use common\models\GallerySearch; use common\models\Job; @@ -36,6 +37,7 @@ use yii\filters\VerbFilter; use yii\web\Controller; use yii\web\NotFoundHttpException; + use yii\web\UploadedFile; /** * Site controller @@ -626,6 +628,24 @@ $post = \Yii::$app->request->post(); if(!empty( $post )) { $project->load($post); + $project->files = UploadedFile::getInstances($project, 'files'); + if(!empty( $project->files )) { + $file_id = [ ]; + if(is_array($project->files)) { + foreach($project->files as $file) { + if($file instanceof UploadedFile) { + $file_model = new File(); + $file_id[] = $file_model->saveFile($file); + } + } + } else { + if($project->files instanceof UploadedFile) { + $file_model = new File(); + $file_id[] = $file_model->saveFile($this->file); + } + } + $project->file = json_encode($file_id); + } $project->validate(); if(!$project->hasErrors()) { $date_end = new \DateTime(); @@ -706,6 +726,24 @@ $post = \Yii::$app->request->post(); if(!empty( $post )) { $project->load($post); + $project->files = UploadedFile::getInstances($project, 'files'); + if(!empty( $project->files )) { + $file_id = [ ]; + if(is_array($project->files)) { + foreach($project->files as $file) { + if($file instanceof UploadedFile) { + $file_model = new File(); + $file_id[] = $file_model->saveFile($file); + } + } + } else { + if($project->files instanceof UploadedFile) { + $file_model = new File(); + $file_id[] = $file_model->saveFile($this->file); + } + } + $project->file = json_encode($file_id); + } $project->validate(); if(!$project->hasErrors()) { $date_end = new \DateTime(); diff --git a/frontend/views/accounts/_projects_form.php b/frontend/views/accounts/_projects_form.php index e065131..5de9bee 100644 --- a/frontend/views/accounts/_projects_form.php +++ b/frontend/views/accounts/_projects_form.php @@ -23,21 +23,21 @@
title ?>
['enctype' => 'multipart/form-data']]); ?>
field($project, 'name') - ->textInput (['class'=> 'custom-input-2']) ?> + ->textInput([ 'class' => 'custom-input-2' ]) ?>
field($project, 'project_pid') - ->dropDownList($projects, [ 'prompt' => 'Родительский проект' ]) ?> + ->dropDownList($projects, [ 'prompt' => 'Родительский проект' ]) ?>
@@ -63,15 +63,15 @@
  • field($project, "specializationInput[{$child_second->specialization_id}]", [ - 'template' => '{input}{label}{hint}{error}', + 'template' => '{input}{label}{hint}{error}', ]) - ->label('' . $child_second->specialization_name) - ->checkbox([ - 'value' => $child_second->specialization_id, - 'label' => NULL, - 'uncheck' => NULL, - 'class' => 'custom-check', - ], false) ?> + ->label('' . $child_second->specialization_name) + ->checkbox([ + 'value' => $child_second->specialization_id, + 'label' => NULL, + 'uncheck' => NULL, + 'class' => 'custom-check', + ], false) ?>
  • @@ -91,7 +91,9 @@ -
    +
    + +
    Адрес проекта:
    @@ -99,38 +101,33 @@
    field($project, 'city') - ->widget(Select2::classname(), [ - 'options' => [ 'placeholder' => 'Выбор города ...' ], - 'pluginOptions' => [ - 'allowClear' => true, - 'minimumInputLength' => 3, - 'ajax' => [ - 'url' => \yii\helpers\Url::to([ 'site/city' ]), - 'dataType' => 'json', - 'data' => new JsExpression('function(params) { return {q:params.term}; }'), - ], - 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), - 'templateResult' => new JsExpression('function(city) { return city.text; }'), - 'templateSelection' => new JsExpression('function (city) { return city.text; }'), - ], - ]); - ?> + ->widget(Select2::classname(), [ + 'options' => [ 'placeholder' => 'Выбор города ...' ], + 'pluginOptions' => [ + 'allowClear' => true, + 'minimumInputLength' => 3, + 'ajax' => [ + 'url' => \yii\helpers\Url::to([ 'site/city' ]), + 'dataType' => 'json', + 'data' => new JsExpression('function(params) { return {q:params.term}; }'), + ], + 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), + 'templateResult' => new JsExpression('function(city) { return city.text; }'), + 'templateSelection' => new JsExpression('function (city) { return city.text; }'), + ], + ]); ?>
    - - -
    field($project, 'street', [ 'template' => "{label}{input}{hint}{error}" ]) - ->textInput (['class'=> 'custom-input-2']) ?> + ->textInput([ 'class' => 'custom-input-2' ]) ?>
    -
    field($project, 'house', [ 'template' => "{label}{input}{hint}{error}" ]) - ->textInput (['class'=> 'custom-input-2']) ?> + ->textInput([ 'class' => 'custom-input-2' ]) ?>
    @@ -138,20 +135,22 @@
    field($project, 'budget', [ - 'template' => "{label}
    {input}\n{hint}\n{error}" + 'template' => "{label}
    {input}\n{hint}\n{error}", ]) - ->textInput (['class'=> 'custom-input-2 custom-input-2-date','type'=>'number']) ?> + ->textInput([ + 'class' => 'custom-input-2 custom-input-2-date', + 'type' => 'number', + ]) ?>
    - field($project, 'budget_currency')->label(false)->dropDownList(Currency::getCurrencyDropdown(), ['class'=> 'custom-input-2']); - ?> + field($project, 'budget_currency') + ->label(false) + ->dropDownList(Currency::getCurrencyDropdown(), [ 'class' => 'custom-input-2' ]); ?>
    - field($project, 'contractual', ['template' => "{input}{label}\n{hint}\n{error}"]) - ->checkbox (['class'=> 'custom-check'], false) - ->label ('Договорной') - ?> + field($project, 'contractual', [ 'template' => "{input}{label}\n{hint}\n{error}" ]) + ->checkbox([ 'class' => 'custom-check' ], false) + ->label('Договорной') ?>
    @@ -159,37 +158,37 @@
    field($project, 'payment_variant') - ->radioList([ - 1 => 'Без предоплаты', - 2 => 'Предоплата возможна', - ],[ - 'item' => function($index, $label, $name, $checked, $value) { - $return = '
    '; - $return .= ''; - $return .= ''; - $return .= '
    '; - return $return; - } - ]) ?> + ->radioList([ + 1 => 'Без предоплаты', + 2 => 'Предоплата возможна', + ], [ + 'item' => function($index, $label, $name, $checked, $value) { + $return = '
    '; + $return .= ''; + $return .= ''; + $return .= '
    '; + return $return; + }, + ]) ?>
    field($project, 'paymentInput') - ->checkboxList($payment,[ - 'item' => function($index, $label, $name, $checked, $value) { - $return = '
    '; - $return .= ''; - $return .= ''; - $return .= '
    '; - return $return; - } - ]) ?> + ->checkboxList($payment, [ + 'item' => function($index, $label, $name, $checked, $value) { + $return = '
    '; + $return .= ''; + $return .= ''; + $return .= '
    '; + return $return; + }, + ]) ?>
    @@ -197,7 +196,10 @@
    field($project, 'deadline', [ 'template' => "{label}
    {input}дней\n{hint}\n{error}" ]) - ->textInput (['class'=> 'custom-input-2 custom-input-2-date','type'=>'number']) ?> + ->textInput([ + 'class' => 'custom-input-2 custom-input-2-date', + 'type' => 'number', + ]) ?>
    @@ -216,9 +218,8 @@
    До 3 Мб файл
    - field($project, 'file') - - ->fileInput([ 'multiple' => 'multiple' ]) ?> + field($project, 'files[]') + ->fileInput([ 'multiple' => 'multiple' ]) ?>
    @@ -227,17 +228,17 @@
    field($project, 'date_end') - ->dropDownList([ - 1 => 'Неделя', - 2 => '2 недели', - 3 => 'Месяц', - ]) ?> + ->dropDownList([ + 1 => 'Неделя', + 2 => '2 недели', + 3 => 'Месяц', + ]) ?>
    - isNewRecord?'Добавить':'Обновить', [ 'class' => 'input-blocks-wrapper button' ]) ?> + isNewRecord ? 'Добавить' : 'Обновить', [ 'class' => 'input-blocks-wrapper button' ]) ?>
    isNewRecord) { @@ -255,7 +256,7 @@ ?>
    - request->referrer)?\Yii::$app->request->referrer:['accounts/projects' ]) ?> + request->referrer) ? \Yii::$app->request->referrer : [ 'accounts/projects' ]) ?>
    @@ -264,29 +265,45 @@ $form->end(); ?> diff --git a/frontend/views/company/portfolio-view.php b/frontend/views/company/portfolio-view.php index 8f87967..3e45d4f 100644 --- a/frontend/views/company/portfolio-view.php +++ b/frontend/views/company/portfolio-view.php @@ -1,22 +1,22 @@ params[ 'company' ] = $user; + /** + * @var ViewAction $this + * @var User $user + * @var Portfolio $portfolio + */ + $this->params[ 'company' ] = $user; -$this->title = 'My Yii Application'; + $this->title = 'My Yii Application'; ?>
    - minImg($portfolio->cover,'720', '280')) ?> + minImg($portfolio->cover, '720', '280')) ?>
    @@ -57,29 +57,29 @@ $this->title = 'My Yii Application';
    name ?>
    gallery ) || !empty( $portfolio->gallery->photo )) { - ?> -
    -
    -
    -
      - gallery->photo) as $one_photo ) { - ?> -
    • + if(!empty( $portfolio->gallery ) || !empty( $portfolio->gallery->photo )) { + ?> +
      +
      +
      +
        gallery->photo) as $one_photo ) { ?> -
      -
      -
      - - +
    • + +
    +
    +
    + + +
    -
    -
    @@ -89,229 +89,235 @@ $this->title = 'My Yii Application'; preview ?>
    description )) { - ?> -
    Развернуть
    - description )) { + ?> +
    Развернуть
    +
    description )) { - ?> -
    -
    - description ?> + if(!empty( $portfolio->description )) { + ?> +
    +
    + description ?> +
    +
    Свернуть
    -
    Свернуть
    -
    -
    $portfolio::tableName().'-'.$portfolio->portfolio_id, - 'comment_class' => \common\modules\comment\models\Comment::className(), - 'class_options' => [ - 'scenario' => is_int(\Yii::$app->user->getId())?\common\modules\comment\models\Comment::SCENARIO_USER:\common\modules\comment\models\Comment::SCENARIO_GUEST, - 'user_id' => \Yii::$app->user->getId(), - ], - 'list_options' => [ - 'view' => 'list-comment', - ], - 'form_options' => [ - 'view' => 'form-comment', - 'tag' => false, - ], - 'options' => [ - 'class' => 'new-portf-comments-wr style', - ], - ]); + echo \common\modules\comment\widgets\CommentWidget::widget([ + 'context' => $this, + 'model' => $portfolio->className(), + 'model_id' => $portfolio->portfolio_id, + 'comment_class' => \common\modules\comment\models\Comment::className(), + 'rating_class' => \common\modules\comment\models\Rating::className(), + 'class_options' => [ + 'scenario' => is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST, + 'user_id' => \Yii::$app->user->getId(), + 'guestComment' => true, + 'status' => \common\modules\comment\models\Comment::STATUS_ACTIVE, + ], + 'list_options' => [ + 'view' => 'list-comment', + ], + 'form_options' => [ + 'view' => 'form-comment', + 'tag' => 'div', + 'class' => 'artbox_comment_form', + ], + 'options' => [ + 'class' => 'new-portf-comments-wr style', + ], + ]); ?> -
    -
    Комментарии: 3
    -
    + /* + ?> +
    +
    Комментарии: 3
    +
    -
    -
    - - -
    -
    + +
    + + +
    +
    - - -
    -
    - - -
    -
    - -
    - + + +
    +
    + + +
    +
    + +
    + -
    +
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - - - +
    +
    +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    +
    - -
    -

    Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    -

    Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    - +
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - - - +
    +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    +
    - -
    -

    Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    -

    Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    - +
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - - - +
    +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    +
    - -
    -

    Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    -

    Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    - +
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - - - +
    +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    +
    - -
    -

    Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    -

    Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    - +
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - - - - +
    +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    +
    - -
    -

    Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    -

    Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

    - +
    -
    -
    +
    -
    - */ + */ ?>