Commit 16b1b04da2101d6b038f1e8ad58b0c25435f31da

Authored by Karnovsky A
2 parents 5672b289 3a2c6b0d

Merge branch 'master' of gitlab.artweb.com.ua:root/baucenter

Showing 54 changed files with 1338 additions and 276 deletions   Show diff stats
  1 +/tests
1 # yii console command 2 # yii console command
2 /yii 3 /yii
3 4
backend/controllers/SeoDynamicController.php
@@ -36,7 +36,7 @@ class SeoDynamicController extends Controller @@ -36,7 +36,7 @@ class SeoDynamicController extends Controller
36 public function actionIndex($seo_category_id) 36 public function actionIndex($seo_category_id)
37 { 37 {
38 $searchModel = new SeoDynamicSearch(); 38 $searchModel = new SeoDynamicSearch();
39 - $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 39 + $dataProvider = $searchModel->search($seo_category_id,Yii::$app->request->queryParams);
40 40
41 return $this->render('index', [ 41 return $this->render('index', [
42 'searchModel' => $searchModel, 42 'searchModel' => $searchModel,
backend/views/seo-dynamic/_form.php
@@ -16,6 +16,10 @@ use yii\widgets\ActiveForm; @@ -16,6 +16,10 @@ use yii\widgets\ActiveForm;
16 16
17 <?= $form->field($model, 'action')->textInput(['maxlength' => true]) ?> 17 <?= $form->field($model, 'action')->textInput(['maxlength' => true]) ?>
18 18
  19 + <?= $form->field($model, 'param')->textInput(['maxlength' => true]) ?>
  20 +
  21 + <?= $form->field($model, 'key')->textInput(['maxlength' => true]) ?>
  22 +
19 <?= $form->field($model, 'fields')->textInput(['maxlength' => true]) ?> 23 <?= $form->field($model, 'fields')->textInput(['maxlength' => true]) ?>
20 24
21 <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?> 25 <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
common/components/Mailer.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\components;
  4 +use PHPMailer\PHPMailer\PHPMailer;
  5 +use yii\base\Widget;
  6 +
  7 +class Mailer extends Widget{
  8 + public $message;
  9 + public $email = 'dockdep@gmail.com';
  10 + public $text;
  11 + public $subject;
  12 +
  13 + public function init(){
  14 +
  15 + parent::init();
  16 +
  17 + }
  18 +
  19 + public function run(){
  20 +
  21 + $mail = new PHPMailer();
  22 +
  23 + $mail->IsSMTP();
  24 +
  25 + $mail->CharSet = 'UTF-8';
  26 + $mail->Username = "dockdep@gmail.com";
  27 + $mail->Password = "k0l0b04eg";
  28 + $mail->SetFrom('dockdep@gmail.com');
  29 + $mail->Subject = $this->subject;
  30 + $mail->MsgHTML($this->text);
  31 + $address = "dockdep@gmail.com";
  32 + $mail->AddAddress($address);
  33 + if(!$mail->send()) {
  34 + \Yii::$app->getSession()->setFlash('error', 'Mailer Error: ' . $mail->ErrorInfo);
  35 + return 'Mailer Error: ' . $mail->ErrorInfo;
  36 + } else {
  37 + \Yii::$app->getSession()->setFlash('success', 'Мастер-приемщик свяжется с вами в ближайшее время');
  38 + return 'Message has been sent';
  39 + }
  40 + }
  41 +
  42 +}
  43 +
common/config/main.php
@@ -36,6 +36,9 @@ return [ @@ -36,6 +36,9 @@ return [
36 ] 36 ]
37 ], 37 ],
38 ], 38 ],
  39 + 'authManager' => [
  40 + 'class' => 'yii\rbac\DbManager',
  41 + ],
39 'cache' => [ 42 'cache' => [
40 'class' => 'yii\caching\FileCache', 43 'class' => 'yii\caching\FileCache',
41 ], 44 ],
common/models/Banner.php
@@ -47,14 +47,14 @@ class Banner extends \yii\db\ActiveRecord @@ -47,14 +47,14 @@ class Banner extends \yii\db\ActiveRecord
47 public function attributeLabels() 47 public function attributeLabels()
48 { 48 {
49 return [ 49 return [
50 - 'banner_id' => Yii::t('app', 'Banner ID'),  
51 - 'image' => Yii::t('app', 'Image'),  
52 - 'alt' => Yii::t('app', 'Alt'),  
53 - 'title' => Yii::t('app', 'Title'),  
54 - 'url' => Yii::t('app', 'Url'),  
55 - 'status' => Yii::t('app', 'Status'),  
56 - 'width' => Yii::t('app', 'Width'),  
57 - 'height' => Yii::t('app', 'Height'), 50 + 'banner_id' => Yii::t('app', 'status'),
  51 + 'image' => Yii::t('app', 'image'),
  52 + 'alt' => Yii::t('app', 'alt'),
  53 + 'title' => Yii::t('app', 'title'),
  54 + 'url' => Yii::t('app', 'url'),
  55 + 'status' => Yii::t('app', 'status'),
  56 + 'width' => Yii::t('app', 'width'),
  57 + 'height' => Yii::t('app', 'height'),
58 ]; 58 ];
59 } 59 }
60 } 60 }
common/models/Blog.php
@@ -93,15 +93,15 @@ @@ -93,15 +93,15 @@
93 public function attributeLabels() 93 public function attributeLabels()
94 { 94 {
95 return [ 95 return [
96 - 'blog_id' => Yii::t('app', 'Blog ID'),  
97 - 'user_id' => Yii::t('app', 'User ID'),  
98 - 'name' => Yii::t('app', 'Название'),  
99 - 'link' => Yii::t('app', 'URL'),  
100 - 'date_add' => Yii::t('app', 'Дата добавления'),  
101 - 'user_add_id' => Yii::t('app', 'User Add ID'),  
102 - 'view_count' => Yii::t('app', 'Количество просмотров'),  
103 - 'description' => Yii::t('app', 'Описание'),  
104 - 'cover' => Yii::t('app', 'Фото главное'), 96 + 'blog_id' => Yii::t('app', 'blog_id'),
  97 + 'user_id' => Yii::t('app', 'user_id'),
  98 + 'name' => Yii::t('app', 'name'),
  99 + 'link' => Yii::t('app', 'link'),
  100 + 'date_add' => Yii::t('app', 'date_add'),
  101 + 'user_add_id' => Yii::t('app', 'user_add_id'),
  102 + 'view_count' => Yii::t('app', 'view_count'),
  103 + 'description' => Yii::t('app', 'description'),
  104 + 'cover' => Yii::t('app', 'cover'),
105 ]; 105 ];
106 } 106 }
107 } 107 }
common/models/Customers.php
@@ -79,16 +79,16 @@ class Customers extends User @@ -79,16 +79,16 @@ class Customers extends User
79 { 79 {
80 return [ 80 return [
81 'id' => Yii::t('app', 'ID'), 81 'id' => Yii::t('app', 'ID'),
82 - 'username' => Yii::t('app', 'Username'),  
83 - 'surname' => Yii::t('app', 'Surname'),  
84 - 'auth_key' => Yii::t('app', 'Auth Key'),  
85 - 'password_hash' => Yii::t('app', 'Password Hash'),  
86 - 'password_reset_token' => Yii::t('app', 'Password Reset Token'),  
87 - 'email' => Yii::t('app', 'Email'),  
88 - 'phone' => Yii::t('app', 'Phone'),  
89 - 'status' => Yii::t('app', 'Status'),  
90 - 'created_at' => Yii::t('app', 'Created At'),  
91 - 'updated_at' => Yii::t('app', 'Updated At'), 82 + 'username' => Yii::t('app', 'username'),
  83 + 'surname' => Yii::t('app', 'surname'),
  84 + 'auth_key' => Yii::t('app', 'auth_key'),
  85 + 'password_hash' => Yii::t('app', 'password_hash'),
  86 + 'password_reset_token' => Yii::t('app', 'password_reset_token'),
  87 + 'email' => Yii::t('app', 'email'),
  88 + 'phone' => Yii::t('app', 'phone'),
  89 + 'status' => Yii::t('app', 'status'),
  90 + 'created_at' => Yii::t('app', 'created_at'),
  91 + 'updated_at' => Yii::t('app', 'updated_at'),
92 ]; 92 ];
93 } 93 }
94 } 94 }
common/models/Event.php
@@ -85,18 +85,18 @@ class Event extends \yii\db\ActiveRecord @@ -85,18 +85,18 @@ class Event extends \yii\db\ActiveRecord
85 public function attributeLabels() 85 public function attributeLabels()
86 { 86 {
87 return [ 87 return [
88 - 'event_id' => Yii::t('app', 'Event ID'),  
89 - 'name' => Yii::t('app', 'Name'),  
90 - 'alias' => Yii::t('app', 'Alias'),  
91 - 'body' => Yii::t('app', 'Body'),  
92 - 'image' => Yii::t('app', 'Image'),  
93 - 'meta_title' => Yii::t('app', 'Meta Title'),  
94 - 'description' => Yii::t('app', 'Description'),  
95 - 'h1' => Yii::t('app', 'H1'),  
96 - 'seo_text' => Yii::t('app', 'Seo Text'),  
97 - 'created_at' => Yii::t('app', 'Created At'),  
98 - 'updated_at' => Yii::t('app', 'Updated At'),  
99 - 'end_at' => Yii::t('app', 'End At'), 88 + 'event_id' => Yii::t('app', 'event_id'),
  89 + 'name' => Yii::t('app', 'name'),
  90 + 'alias' => Yii::t('app', 'alias'),
  91 + 'body' => Yii::t('app', 'body'),
  92 + 'image' => Yii::t('app', 'image'),
  93 + 'meta_title' => Yii::t('app', 'meta_title'),
  94 + 'description' => Yii::t('app', 'description'),
  95 + 'h1' => Yii::t('app', 'h1'),
  96 + 'seo_text' => Yii::t('app', 'seo_text'),
  97 + 'created_at' => Yii::t('app', 'created_at'),
  98 + 'updated_at' => Yii::t('app', 'updated_at'),
  99 + 'end_at' => Yii::t('app', 'end_at'),
100 ]; 100 ];
101 } 101 }
102 } 102 }
common/models/OrderItems.php
@@ -46,11 +46,11 @@ class OrderItems extends \yii\db\ActiveRecord @@ -46,11 +46,11 @@ class OrderItems extends \yii\db\ActiveRecord
46 public function attributeLabels() 46 public function attributeLabels()
47 { 47 {
48 return [ 48 return [
49 - 'order_items_id' => Yii::t('app', 'Order Items ID'),  
50 - 'order_id' => Yii::t('app', 'Order ID'),  
51 - 'item_id' => Yii::t('app', 'Item ID'),  
52 - 'item_count' => Yii::t('app', 'Item Count'),  
53 - 'price' => Yii::t('app', 'Price'), 49 + 'order_items_id' => Yii::t('app', 'order_items_id'),
  50 + 'order_id' => Yii::t('app', 'order_id'),
  51 + 'item_id' => Yii::t('app', 'item_id'),
  52 + 'item_count' => Yii::t('app', 'item_count'),
  53 + 'price' => Yii::t('app', 'price'),
54 ]; 54 ];
55 } 55 }
56 56
common/models/Orders.php
@@ -82,17 +82,17 @@ class Orders extends \yii\db\ActiveRecord @@ -82,17 +82,17 @@ class Orders extends \yii\db\ActiveRecord
82 public function attributeLabels() 82 public function attributeLabels()
83 { 83 {
84 return [ 84 return [
85 - 'order_id' => Yii::t('app', 'Order ID'),  
86 - 'customer_id' => Yii::t('app', 'Customer ID'),  
87 - 'name' => Yii::t('app', 'Name'),  
88 - 'email' => Yii::t('app', 'Email'),  
89 - 'phone' => Yii::t('app', 'Phone'),  
90 - 'delivery' => Yii::t('app', 'Delivery'),  
91 - 'payment' => Yii::t('app', 'Payment'),  
92 - 'code' => Yii::t('app', 'Code'),  
93 - 'status' => Yii::t('app', 'Status'),  
94 - 'created_at' => Yii::t('app', 'Created At'),  
95 - 'updated_at' => Yii::t('app', 'Updated At'), 85 + 'order_id' => Yii::t('app', 'order_id'),
  86 + 'customer_id' => Yii::t('app', 'customer_id'),
  87 + 'name' => Yii::t('app', 'name'),
  88 + 'email' => Yii::t('app', 'email'),
  89 + 'phone' => Yii::t('app', 'phone'),
  90 + 'delivery' => Yii::t('app', 'delivery'),
  91 + 'payment' => Yii::t('app', 'payment'),
  92 + 'code' => Yii::t('app', 'code'),
  93 + 'status' => Yii::t('app', 'status'),
  94 + 'created_at' => Yii::t('app', 'created_at'),
  95 + 'updated_at' => Yii::t('app', 'updated_at'),
96 ]; 96 ];
97 } 97 }
98 98
common/models/Page.php
@@ -46,15 +46,15 @@ class Page extends \yii\db\ActiveRecord @@ -46,15 +46,15 @@ class Page extends \yii\db\ActiveRecord
46 public function attributeLabels() 46 public function attributeLabels()
47 { 47 {
48 return [ 48 return [
49 - 'id' => 'ID',  
50 - 'name' => 'Название',  
51 - 'alias' => 'alias',  
52 - 'title' => 'Title',  
53 - 'body' => 'Body',  
54 - 'meta_title' => 'Meta Title',  
55 - 'description' => 'Description',  
56 - 'h1' => 'H1',  
57 - 'seo_text' => 'Seo Text', 49 + 'id' => Yii::t('app', 'id'),
  50 + 'name' => Yii::t('app', 'name'),
  51 + 'alias' => Yii::t('app', 'alias'),
  52 + 'title' => Yii::t('app', 'title'),
  53 + 'body' => Yii::t('app', 'body'),
  54 + 'meta_title' => Yii::t('app', 'meta_title'),
  55 + 'description' => Yii::t('app', 'description'),
  56 + 'h1' =>Yii::t('app', 'h1'),
  57 + 'seo_text' => Yii::t('app', 'seo_text'),
58 ]; 58 ];
59 } 59 }
60 60
common/models/Seo.php
@@ -42,12 +42,12 @@ class Seo extends \yii\db\ActiveRecord @@ -42,12 +42,12 @@ class Seo extends \yii\db\ActiveRecord
42 public function attributeLabels() 42 public function attributeLabels()
43 { 43 {
44 return [ 44 return [
45 - 'seo_id' => Yii::t('app', 'Seo ID'),  
46 - 'url' => Yii::t('app', 'Url'),  
47 - 'title' => Yii::t('app', 'Title'),  
48 - 'description' => Yii::t('app', 'Description'),  
49 - 'h1' => Yii::t('app', 'H1'),  
50 - 'seo_text' => Yii::t('app', 'Seo Text'), 45 + 'seo_id' => Yii::t('app', 'seo_id'),
  46 + 'url' => Yii::t('app', 'url'),
  47 + 'title' => Yii::t('app', 'title'),
  48 + 'description' => Yii::t('app', 'description'),
  49 + 'h1' => Yii::t('app', 'h1'),
  50 + 'seo_text' => Yii::t('app', 'seo_text'),
51 ]; 51 ];
52 } 52 }
53 } 53 }
common/models/SeoCategory.php
@@ -42,10 +42,10 @@ class SeoCategory extends \yii\db\ActiveRecord @@ -42,10 +42,10 @@ class SeoCategory extends \yii\db\ActiveRecord
42 public function attributeLabels() 42 public function attributeLabels()
43 { 43 {
44 return [ 44 return [
45 - 'seo_category_id' => Yii::t('app', 'Seo Category ID'),  
46 - 'name' => Yii::t('app', 'Name'),  
47 - 'controller' => Yii::t('app', 'Controller'),  
48 - 'status' => Yii::t('app', 'Status'), 45 + 'seo_category_id' => Yii::t('app', 'seo_category_id'),
  46 + 'name' => Yii::t('app', 'name'),
  47 + 'controller' => Yii::t('app', 'controller'),
  48 + 'status' => Yii::t('app', 'status'),
49 ]; 49 ];
50 } 50 }
51 51
common/models/SeoDynamic.php
@@ -15,8 +15,10 @@ use Yii; @@ -15,8 +15,10 @@ use Yii;
15 * @property string $title 15 * @property string $title
16 * @property string $h1 16 * @property string $h1
17 * @property string $description 17 * @property string $description
18 - * @property string $seo-text 18 + * @property string $seo_text
19 * @property integer $status 19 * @property integer $status
  20 + * @property string $param
  21 + * @property string $key
20 * 22 *
21 * @property SeoCategory $seoCategory 23 * @property SeoCategory $seoCategory
22 */ 24 */
@@ -39,7 +41,7 @@ class SeoDynamic extends \yii\db\ActiveRecord @@ -39,7 +41,7 @@ class SeoDynamic extends \yii\db\ActiveRecord
39 [['seo_category_id', 'status'], 'integer'], 41 [['seo_category_id', 'status'], 'integer'],
40 [['seo_text'], 'string'], 42 [['seo_text'], 'string'],
41 [['name', 'action'], 'string', 'max' => 200], 43 [['name', 'action'], 'string', 'max' => 200],
42 - [['fields', 'title', 'h1', 'description'], 'string', 'max' => 255], 44 + [['fields', 'title', 'h1', 'description', 'param', 'key'], 'string', 'max' => 255],
43 [['seo_category_id'], 'exist', 'skipOnError' => true, 'targetClass' => SeoCategory::className(), 'targetAttribute' => ['seo_category_id' => 'seo_category_id']], 45 [['seo_category_id'], 'exist', 'skipOnError' => true, 'targetClass' => SeoCategory::className(), 'targetAttribute' => ['seo_category_id' => 'seo_category_id']],
44 ]; 46 ];
45 } 47 }
@@ -50,16 +52,18 @@ class SeoDynamic extends \yii\db\ActiveRecord @@ -50,16 +52,18 @@ class SeoDynamic extends \yii\db\ActiveRecord
50 public function attributeLabels() 52 public function attributeLabels()
51 { 53 {
52 return [ 54 return [
53 - 'seo_dynamic_id' => Yii::t('app', 'Seo Dynamic ID'),  
54 - 'seo_category_id' => Yii::t('app', 'Seo Category ID'),  
55 - 'name' => Yii::t('app', 'Name'),  
56 - 'action' => Yii::t('app', 'Action'),  
57 - 'fields' => Yii::t('app', 'Fields'),  
58 - 'title' => Yii::t('app', 'Title'),  
59 - 'h1' => Yii::t('app', 'H1'),  
60 - 'description' => Yii::t('app', 'Description'),  
61 - 'seo_text' => Yii::t('app', 'Seo Text'),  
62 - 'status' => Yii::t('app', 'Status'), 55 + 'seo_dynamic_id' => Yii::t('app', 'seo_dynamic_id'),
  56 + 'seo_category_id' => Yii::t('app', 'seo_category_id'),
  57 + 'name' => Yii::t('app', 'name'),
  58 + 'action' => Yii::t('app', 'action'),
  59 + 'fields' => Yii::t('app', 'fields'),
  60 + 'title' => Yii::t('app', 'title'),
  61 + 'h1' => Yii::t('app', 'h1'),
  62 + 'description' => Yii::t('app', 'description'),
  63 + 'seo_text' => Yii::t('app', 'seo_text'),
  64 + 'status' => Yii::t('app', 'status'),
  65 + 'param' => Yii::t('app', 'param'),
  66 + 'key' => Yii::t('app', 'key'),
63 ]; 67 ];
64 } 68 }
65 69
common/models/SeoDynamicSearch.php
@@ -39,7 +39,7 @@ class SeoDynamicSearch extends SeoDynamic @@ -39,7 +39,7 @@ class SeoDynamicSearch extends SeoDynamic
39 * 39 *
40 * @return ActiveDataProvider 40 * @return ActiveDataProvider
41 */ 41 */
42 - public function search($params) 42 + public function search($seo_category_id, $params)
43 { 43 {
44 $query = SeoDynamic::find(); 44 $query = SeoDynamic::find();
45 45
@@ -60,7 +60,7 @@ class SeoDynamicSearch extends SeoDynamic @@ -60,7 +60,7 @@ class SeoDynamicSearch extends SeoDynamic
60 // grid filtering conditions 60 // grid filtering conditions
61 $query->andFilterWhere([ 61 $query->andFilterWhere([
62 'seo_dynamic_id' => $this->seo_dynamic_id, 62 'seo_dynamic_id' => $this->seo_dynamic_id,
63 - 'seo_category_id' => $this->seo_category_id, 63 + 'seo_category_id' => $seo_category_id,
64 'status' => $this->status, 64 'status' => $this->status,
65 ]); 65 ]);
66 66
common/models/Service.php
@@ -65,17 +65,17 @@ class Service extends \yii\db\ActiveRecord @@ -65,17 +65,17 @@ class Service extends \yii\db\ActiveRecord
65 public function attributeLabels() 65 public function attributeLabels()
66 { 66 {
67 return [ 67 return [
68 - 'service_id' => Yii::t('app', 'Service ID'),  
69 - 'name' => Yii::t('app', 'Name'),  
70 - 'alias' => Yii::t('app', 'Alias'),  
71 - 'body' => Yii::t('app', 'Body'),  
72 - 'image' => Yii::t('app', 'Image'),  
73 - 'meta_title' => Yii::t('app', 'Meta Title'),  
74 - 'description' => Yii::t('app', 'Description'),  
75 - 'h1' => Yii::t('app', 'H1'),  
76 - 'seo_text' => Yii::t('app', 'Seo Text'),  
77 - 'created_at' => Yii::t('app', 'Created At'),  
78 - 'updated_at' => Yii::t('app', 'Updated At'), 68 + 'service_id' => Yii::t('app', 'service_id'),
  69 + 'name' => Yii::t('app', 'name'),
  70 + 'alias' => Yii::t('app', 'alias'),
  71 + 'body' => Yii::t('app', 'body'),
  72 + 'image' => Yii::t('app', 'image'),
  73 + 'meta_title' => Yii::t('app', 'meta_title'),
  74 + 'description' => Yii::t('app', 'description'),
  75 + 'h1' => Yii::t('app', 'h1'),
  76 + 'seo_text' => Yii::t('app', 'seo_text'),
  77 + 'created_at' => Yii::t('app', 'created_at'),
  78 + 'updated_at' => Yii::t('app', 'updated_at'),
79 ]; 79 ];
80 } 80 }
81 } 81 }
common/models/Slider.php
@@ -48,13 +48,13 @@ class Slider extends \yii\db\ActiveRecord @@ -48,13 +48,13 @@ class Slider extends \yii\db\ActiveRecord
48 public function attributeLabels() 48 public function attributeLabels()
49 { 49 {
50 return [ 50 return [
51 - 'slider_id' => Yii::t('app', 'Slider ID'),  
52 - 'speed' => Yii::t('app', 'Speed'),  
53 - 'duration' => Yii::t('app', 'Duration'),  
54 - 'title' => Yii::t('app', 'Title'),  
55 - 'status' => Yii::t('app', 'Status'),  
56 - 'width' => Yii::t('app', 'Width'),  
57 - 'height' => Yii::t('app', 'Height'), 51 + 'slider_id' => Yii::t('app', 'slider_id'),
  52 + 'speed' => Yii::t('app', 'speed'),
  53 + 'duration' => Yii::t('app', 'duration'),
  54 + 'title' => Yii::t('app', 'title'),
  55 + 'status' => Yii::t('app', 'status'),
  56 + 'width' => Yii::t('app', 'width'),
  57 + 'height' => Yii::t('app', 'height'),
58 ]; 58 ];
59 } 59 }
60 60
common/models/SliderImage.php
@@ -48,15 +48,15 @@ class SliderImage extends \yii\db\ActiveRecord @@ -48,15 +48,15 @@ class SliderImage extends \yii\db\ActiveRecord
48 public function attributeLabels() 48 public function attributeLabels()
49 { 49 {
50 return [ 50 return [
51 - 'slider_image_id' => Yii::t('app', 'Slider Image ID'),  
52 - 'slider_id' => Yii::t('app', 'Slider ID'),  
53 - 'image' => Yii::t('app', 'Image'),  
54 - 'alt' => Yii::t('app', 'Alt'),  
55 - 'title' => Yii::t('app', 'Title'),  
56 - 'url' => Yii::t('app', 'Url'),  
57 - 'status' => Yii::t('app', 'Status'),  
58 - 'sort' => Yii::t('app', 'Sort'),  
59 - 'price' => Yii::t('app', 'Price'), 51 + 'slider_image_id' => Yii::t('app', 'slider_image_id'),
  52 + 'slider_id' => Yii::t('app', 'slider_id'),
  53 + 'image' => Yii::t('app', 'image'),
  54 + 'alt' => Yii::t('app', 'alt'),
  55 + 'title' => Yii::t('app', 'title'),
  56 + 'url' => Yii::t('app', 'url'),
  57 + 'status' => Yii::t('app', 'status'),
  58 + 'sort' => Yii::t('app', 'sort'),
  59 + 'price' => Yii::t('app', 'price'),
60 ]; 60 ];
61 } 61 }
62 62
common/modules/comment/Controller.php
@@ -93,4 +93,5 @@ @@ -93,4 +93,5 @@
93 \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 93 \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
94 \Yii::$app->response->send(); 94 \Yii::$app->response->send();
95 } 95 }
  96 +
96 } 97 }
97 \ No newline at end of file 98 \ No newline at end of file
common/modules/comment/assets/CommentAsset.php
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 3
4 class CommentAsset extends \yii\web\AssetBundle 4 class CommentAsset extends \yii\web\AssetBundle
5 { 5 {
  6 +
6 public $sourcePath = '@common/modules/comment/resources'; 7 public $sourcePath = '@common/modules/comment/resources';
7 8
8 public $css = [ 9 public $css = [
@@ -18,4 +19,8 @@ @@ -18,4 +19,8 @@
18 '\yii\web\JqueryAsset', 19 '\yii\web\JqueryAsset',
19 ]; 20 ];
20 21
  22 + public $jsOptions = [
  23 + 'position' => \yii\web\View::POS_READY,
  24 + ];
  25 +
21 } 26 }
22 \ No newline at end of file 27 \ No newline at end of file
common/modules/comment/models/Comment.php
1 <?php 1 <?php
2 namespace common\modules\comment\models; 2 namespace common\modules\comment\models;
3 3
  4 + use common\models\User;
4 use yii\db\ActiveQuery; 5 use yii\db\ActiveQuery;
5 6
6 /** 7 /**
@@ -18,6 +19,8 @@ @@ -18,6 +19,8 @@
18 * @property string $date_delete 19 * @property string $date_delete
19 * @property string $model 20 * @property string $model
20 * @property int $model_id 21 * @property int $model_id
  22 + * @property Rating $rating
  23 + * @property User $user
21 * @package common\modules\comment\models 24 * @package common\modules\comment\models
22 */ 25 */
23 class Comment extends \yii\db\ActiveRecord 26 class Comment extends \yii\db\ActiveRecord
@@ -117,6 +120,22 @@ @@ -117,6 +120,22 @@
117 ]; 120 ];
118 } 121 }
119 122
  123 + public function afterSave($insert, $changedAttributes)
  124 + {
  125 + if($this->model == User::className()) {
  126 + if($user = User::findOne($this->model_id)) {
  127 + /**
  128 + * @var User $user
  129 + */
  130 + $user->updateRating();
  131 + }
  132 + }
  133 + parent::afterSave($insert, $changedAttributes);
  134 + }
  135 +
  136 + /**
  137 + * @inheritdoc
  138 + */
120 public static function tableName() 139 public static function tableName()
121 { 140 {
122 return '{{%comment}}'; 141 return '{{%comment}}';
@@ -157,7 +176,7 @@ @@ -157,7 +176,7 @@
157 'comment.model' => $model, 176 'comment.model' => $model,
158 'comment.model_id' => $model_id, 177 'comment.model_id' => $model_id,
159 'comment.status' => 1, 178 'comment.status' => 1,
160 - ]); 179 + ])->with('rating');
161 } 180 }
162 181
163 public function postComment() 182 public function postComment()
@@ -294,7 +313,7 @@ @@ -294,7 +313,7 @@
294 'model' => $this->className(), 313 'model' => $this->className(),
295 ]) 314 ])
296 ->one(); 315 ->one();
297 - if(!$rating instanceof \common\modules\comment\models\Rating) { 316 + if(!$rating instanceof \common\modules\comment\models\Rating && !empty($this->primaryKey)) {
298 $rating = new \common\modules\comment\models\Rating([ 317 $rating = new \common\modules\comment\models\Rating([
299 'model' => $this->className(), 318 'model' => $this->className(),
300 'model_id' => $this->comment_id, 319 'model_id' => $this->comment_id,
@@ -331,4 +350,9 @@ @@ -331,4 +350,9 @@
331 } 350 }
332 } 351 }
333 352
  353 + public function getUser()
  354 + {
  355 + return $this->hasOne(User::className(), [ 'id' => 'user_id' ]);
  356 + }
  357 +
334 } 358 }
common/modules/comment/models/CommentProject.php
@@ -3,26 +3,32 @@ @@ -3,26 +3,32 @@
3 3
4 use common\models\Currency; 4 use common\models\Currency;
5 use common\models\File; 5 use common\models\File;
  6 + use common\models\Project;
  7 + use common\models\User;
6 use yii\db\ActiveQuery; 8 use yii\db\ActiveQuery;
  9 + use yii\db\ActiveRecord;
7 use yii\web\UploadedFile; 10 use yii\web\UploadedFile;
8 11
9 /** 12 /**
10 * Class Comment 13 * Class Comment
11 - * @property bool $guestComment  
12 - * @property integer $comment_id  
13 - * @property string $text  
14 - * @property int $user_id  
15 - * @property int $status  
16 - * @property string $date_add  
17 - * @property string $date_update  
18 - * @property string $date_delete  
19 - * @property string $model  
20 - * @property int $model_id  
21 - * @property string $files  
22 - * @property float $budget_from  
23 - * @property float $budget_to  
24 - * @property int $term_from  
25 - * @property int $term_to 14 + * @property bool $guestComment
  15 + * @property integer $comment_id
  16 + * @property string $text
  17 + * @property int $user_id
  18 + * @property int $status
  19 + * @property string $date_add
  20 + * @property string $date_update
  21 + * @property string $date_delete
  22 + * @property string $model
  23 + * @property int $model_id
  24 + * @property string $files
  25 + * @property float $budget_from
  26 + * @property float $budget_to
  27 + * @property int $term_from
  28 + * @property int $term_to
  29 + * @property int $state
  30 + * @property Currency $currency
  31 + * @property Project $project
26 * @package common\modules\comment\models 32 * @package common\modules\comment\models
27 */ 33 */
28 class CommentProject extends \yii\db\ActiveRecord 34 class CommentProject extends \yii\db\ActiveRecord
@@ -35,13 +41,22 @@ @@ -35,13 +41,22 @@
35 const STATUS_PERSONAL = 3; 41 const STATUS_PERSONAL = 3;
36 const STATUS_ANONYMOUS = 4; 42 const STATUS_ANONYMOUS = 4;
37 43
  44 + const STATE_NEW = 1;
  45 + const STATE_CANDIDATE = 2;
  46 + const STATE_PERFORMER = 3;
  47 + const STATE_DENY = 4;
  48 + const STATE_TRASH = 5;
  49 +
38 const SCENARIO_USER = 'user'; 50 const SCENARIO_USER = 'user';
39 const SCENARIO_GUEST = 'guest'; 51 const SCENARIO_GUEST = 'guest';
  52 + const SCENARIO_STATE = 'state';
  53 + const SCENARIO_OWNER = 'owner';
40 54
41 /** 55 /**
42 * @var bool 56 * @var bool
43 */ 57 */
44 public $guestComment = false; 58 public $guestComment = false;
  59 +
45 public $file; 60 public $file;
46 61
47 public function rules() 62 public function rules()
@@ -84,7 +99,7 @@ @@ -84,7 +99,7 @@
84 [ 99 [
85 [ 'budget_currency' ], 100 [ 'budget_currency' ],
86 'exist', 101 'exist',
87 - 'targetClass' => Currency::className(), 102 + 'targetClass' => Currency::className(),
88 'targetAttribute' => 'currency_id', 103 'targetAttribute' => 'currency_id',
89 ], 104 ],
90 [ 105 [
@@ -104,6 +119,32 @@ @@ -104,6 +119,32 @@
104 'default', 119 'default',
105 'value' => 1, 120 'value' => 1,
106 ], 121 ],
  122 + [
  123 + [ 'state' ],
  124 + 'integer',
  125 + 'max' => 4,
  126 + 'min' => 1,
  127 + 'on' => self::SCENARIO_STATE,
  128 + ],
  129 + [
  130 + [ 'state' ],
  131 + 'required',
  132 + 'on' => self::SCENARIO_STATE,
  133 + ],
  134 + [
  135 + [ 'state' ],
  136 + 'required',
  137 + 'on' => self::SCENARIO_OWNER,
  138 + ],
  139 + [
  140 + [ 'state' ],
  141 + 'in',
  142 + 'range' => [
  143 + 1,
  144 + 5,
  145 + ],
  146 + 'on' => self::SCENARIO_OWNER,
  147 + ],
107 ]; 148 ];
108 } 149 }
109 150
@@ -118,9 +159,15 @@ @@ -118,9 +159,15 @@
118 'term_to', 159 'term_to',
119 'file', 160 'file',
120 ], 161 ],
121 - self::SCENARIO_GUEST => [ 162 + self::SCENARIO_GUEST => [
122 163
123 ], 164 ],
  165 + self::SCENARIO_STATE => [
  166 + 'state',
  167 + ],
  168 + self::SCENARIO_OWNER => [
  169 + 'state',
  170 + ],
124 ]; 171 ];
125 } 172 }
126 173
@@ -150,11 +197,11 @@ @@ -150,11 +197,11 @@
150 public function attributeLabels() 197 public function attributeLabels()
151 { 198 {
152 return [ 199 return [
153 - 'text' => \Yii::t('app', 'Текст ответа'), 200 + 'text' => \Yii::t('app', 'Текст ответа'),
154 'budget_from' => \Yii::t('app', 'от'), 201 'budget_from' => \Yii::t('app', 'от'),
155 - 'budget_to' => \Yii::t('app', 'до'),  
156 - 'term_from' => \Yii::t('app', 'от'),  
157 - 'term_to' => \Yii::t('app', 'до'), 202 + 'budget_to' => \Yii::t('app', 'до'),
  203 + 'term_from' => \Yii::t('app', 'от'),
  204 + 'term_to' => \Yii::t('app', 'до'),
158 ]; 205 ];
159 } 206 }
160 207
@@ -163,10 +210,10 @@ @@ -163,10 +210,10 @@
163 return $this->guestComment; 210 return $this->guestComment;
164 } 211 }
165 212
166 -// public function setGuestComment($value)  
167 -// {  
168 -// $this->guestComment = $value;  
169 -// } 213 + // public function setGuestComment($value)
  214 + // {
  215 + // $this->guestComment = $value;
  216 + // }
170 217
171 /** 218 /**
172 * @param string $model 219 * @param string $model
@@ -181,27 +228,28 @@ @@ -181,27 +228,28 @@
181 'comment_project.model' => $model, 228 'comment_project.model' => $model,
182 'comment_project.model_id' => $model_id, 229 'comment_project.model_id' => $model_id,
183 'comment_project.status' => 1, 230 'comment_project.status' => 1,
184 - ]); 231 + ])
  232 + ->with('currency', 'user', 'user.userInfo', 'user.companyInfo', 'user.comments');
185 } 233 }
186 234
187 public function postComment() 235 public function postComment()
188 { 236 {
189 if($this->checkCreate()) { 237 if($this->checkCreate()) {
190 - if(!empty(\Yii::$app->request->post($this->formName())['anonymous'])) { 238 + if(!empty( \Yii::$app->request->post($this->formName())[ 'anonymous' ] )) {
191 $this->status = self::STATUS_ANONYMOUS; 239 $this->status = self::STATUS_ANONYMOUS;
192 } 240 }
193 $this->file = UploadedFile::getInstances($this, 'file'); 241 $this->file = UploadedFile::getInstances($this, 'file');
194 - if(!empty($this->file)) {  
195 - $file_id = [];  
196 - if(is_array($this->file)){  
197 - foreach($this->file as $file){  
198 - if($file instanceof UploadedFile){ 242 + if(!empty( $this->file )) {
  243 + $file_id = [ ];
  244 + if(is_array($this->file)) {
  245 + foreach($this->file as $file) {
  246 + if($file instanceof UploadedFile) {
199 $file_model = new File(); 247 $file_model = new File();
200 $file_id[] = $file_model->saveFile($file); 248 $file_id[] = $file_model->saveFile($file);
201 } 249 }
202 } 250 }
203 } else { 251 } else {
204 - if($this->file instanceof UploadedFile){ 252 + if($this->file instanceof UploadedFile) {
205 $file_model = new File(); 253 $file_model = new File();
206 $file_id[] = $file_model->saveFile($this->file); 254 $file_id[] = $file_model->saveFile($this->file);
207 } 255 }
@@ -325,4 +373,65 @@ @@ -325,4 +373,65 @@
325 // } 373 // }
326 } 374 }
327 375
  376 + /**
  377 + * @return ActiveQuery
  378 + */
  379 + public function getCurrency()
  380 + {
  381 + return $this->hasOne(Currency::className(), [ 'currency_id' => 'budget_currency' ]);
  382 + }
  383 +
  384 + /**
  385 + * @return File[]
  386 + */
  387 + public function getFilesList()
  388 + {
  389 + $files = json_decode($this->files);
  390 + if(!empty( $files )) {
  391 + return File::findAll($files);
  392 + } else {
  393 + return [ ];
  394 + }
  395 + }
  396 +
  397 + /**
  398 + * @return ActiveRecord
  399 + * @throws \TypeError
  400 + */
  401 + public function getOwner()
  402 + {
  403 + $model = new $this->model();
  404 + if($model instanceof ActiveRecord) {
  405 + return $model->findOne($this->model_id);
  406 + } else {
  407 + throw new \TypeError('Model must extends Active Record Class');
  408 + }
  409 + }
  410 +
  411 + public function getProject()
  412 + {
  413 + return $this->hasOne(Project::className(), [ 'project_id' => 'model_id' ]);
  414 + }
  415 +
  416 + /**
  417 + * @return User
  418 + */
  419 + public function getUser()
  420 + {
  421 + return $this->hasOne(User::className(), [ 'id' => 'user_id' ]);
  422 + }
  423 +
  424 + public function changeState()
  425 + {
  426 + if($this->isAttributeChanged('state')) {
  427 + if($this->save()) {
  428 + return true;
  429 + } else {
  430 + return false;
  431 + }
  432 + } else {
  433 + return true;
  434 + }
  435 + }
  436 +
328 } 437 }
common/modules/comment/models/CommentProjectSearch.php 0 → 100644
  1 +<?php
  2 + namespace common\modules\comment\models;
  3 +
  4 + use common\models\Currency;
  5 + use common\models\File;
  6 + use common\models\User;
  7 + use yii\data\ActiveDataProvider;
  8 + use yii\db\ActiveQuery;
  9 + use yii\db\ActiveRecord;
  10 + use yii\web\UploadedFile;
  11 +
  12 + /**
  13 + * Class Comment
  14 + * @property bool $guestComment
  15 + * @property integer $comment_id
  16 + * @property string $text
  17 + * @property int $user_id
  18 + * @property int $status
  19 + * @property string $date_add
  20 + * @property string $date_update
  21 + * @property string $date_delete
  22 + * @property string $model
  23 + * @property int $model_id
  24 + * @property string $files
  25 + * @property float $budget_from
  26 + * @property float $budget_to
  27 + * @property int $term_from
  28 + * @property int $term_to
  29 + * @property int $state
  30 + * @property Currency $currency
  31 + * @package common\modules\comment\models
  32 + */
  33 + class CommentProjectSearch extends CommentProject
  34 + {
  35 +
  36 + const SCENARIO_SEARCH = 'search';
  37 +
  38 + public function rules()
  39 + {
  40 + return [
  41 + [
  42 + [
  43 + 'state',
  44 + ],
  45 + 'integer',
  46 + 'max' => 5,
  47 + 'min' => 1,
  48 + ],
  49 + [
  50 + [
  51 + 'state',
  52 + ],
  53 + 'default',
  54 + 'value' => self::STATE_NEW,
  55 + ],
  56 + ];
  57 + }
  58 +
  59 + public function scenarios()
  60 + {
  61 + return array_merge(parent::scenarios(), [
  62 + self::SCENARIO_SEARCH => [
  63 + 'state',
  64 + ],
  65 + ]);
  66 + }
  67 +
  68 + public function search($params)
  69 + {
  70 + $query = CommentProject::find()
  71 + ->with('project')
  72 + ->with('project.budgetCurrency')
  73 + ->with('project.comments')
  74 + ->where([ 'user_id' => \Yii::$app->user->getId() ]);
  75 +
  76 + $dataProvider = new ActiveDataProvider([
  77 + 'query' => $query,
  78 + ]);
  79 +
  80 + $this->load($params);
  81 +
  82 + if(!$this->validate()) {
  83 + $query->andWhere('0=1');
  84 + return $dataProvider;
  85 + }
  86 +
  87 + $query->andWhere([ 'state' => $this->state ]);
  88 +
  89 + return $dataProvider;
  90 + }
  91 +
  92 + }
common/modules/comment/rbac/ArtboxCommentCreateRule.php
@@ -11,7 +11,28 @@ @@ -11,7 +11,28 @@
11 11
12 public function execute($user, $item, $params) 12 public function execute($user, $item, $params)
13 { 13 {
  14 + if($params[ 'model' ] == \common\models\Project::className()) {
  15 + return $this->checkProject($user, $item, $params);
  16 + }
14 return true; 17 return true;
15 } 18 }
16 19
  20 + public function checkProject($user, $item, $params)
  21 + {
  22 + $project = \common\models\Project::findOne($params['model_id']);
  23 + if($project->user_id == $user) {
  24 + return false;
  25 + }
  26 + $comment = \common\modules\comment\models\CommentProject::find()
  27 + ->where([ 'model' => $params[ 'model' ],
  28 + 'model_id' => $params[ 'model_id' ],
  29 + 'user_id' => $user,
  30 + ])->one();
  31 + if(empty($comment)) {
  32 + return true;
  33 + } else {
  34 + return false;
  35 + }
  36 + }
  37 +
17 } 38 }
18 \ No newline at end of file 39 \ No newline at end of file
common/modules/comment/rbac/ArtboxCommentUpdateOwnRule.php
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 11
12 public function execute($user, $item, $params) 12 public function execute($user, $item, $params)
13 { 13 {
14 - return true; 14 + return false;
15 } 15 }
16 16
17 } 17 }
18 \ No newline at end of file 18 \ No newline at end of file
common/modules/comment/widgets/CommentWidget.php
@@ -167,7 +167,7 @@ @@ -167,7 +167,7 @@
167 $this->parts[ 'list' ] = Html::tag($tag, $this->renderItems($view), $this->list_options); 167 $this->parts[ 'list' ] = Html::tag($tag, $this->renderItems($view), $this->list_options);
168 } 168 }
169 169
170 - if($this->display_comment_form) { 170 + if($this->display_comment_form && $this->comment_class->checkCreate()) {
171 $tag = ArrayHelper::remove($this->form_options, 'tag', 'div'); 171 $tag = ArrayHelper::remove($this->form_options, 'tag', 'div');
172 $view = ArrayHelper::remove($this->form_options, 'view'); 172 $view = ArrayHelper::remove($this->form_options, 'view');
173 $this->parts[ 'form' ] = Html::tag($tag, $this->renderForm($view), $this->form_options); 173 $this->parts[ 'form' ] = Html::tag($tag, $this->renderForm($view), $this->form_options);
@@ -197,12 +197,16 @@ @@ -197,12 +197,16 @@
197 if(empty( $view )) { 197 if(empty( $view )) {
198 throw new \yii\base\InvalidConfigException("form_options[view] must be set"); 198 throw new \yii\base\InvalidConfigException("form_options[view] must be set");
199 } 199 }
200 - return $this->render($view, [  
201 - 'model' => $this->comment_class,  
202 - 'rating' => $this->rating_class,  
203 - 'user' => \Yii::$app->user->identity,  
204 - 'dataProvider' => $this->dataProvider,  
205 - ]); 200 + if($this->comment_class->guestComment || !empty(\Yii::$app->user->identity)) {
  201 + return $this->render($view, [
  202 + 'model' => $this->comment_class,
  203 + 'rating' => $this->rating_class,
  204 + 'user' => \Yii::$app->user->identity,
  205 + 'dataProvider' => $this->dataProvider,
  206 + ]);
  207 + } else {
  208 + return '';
  209 + }
206 } 210 }
207 211
208 public function renderWidget() 212 public function renderWidget()
@@ -221,8 +225,11 @@ @@ -221,8 +225,11 @@
221 { 225 {
222 $data = \Yii::$app->request->post(); 226 $data = \Yii::$app->request->post();
223 if($this->comment_class->load($data) && $this->comment_class->postComment()) { 227 if($this->comment_class->load($data) && $this->comment_class->postComment()) {
224 - if(is_object($this->rating_class) && $this->comment_class->rating->load($data) && $this->comment_class->rating->save()) {  
225 - $this->isSuccess = true; 228 + if(is_object($this->rating_class)) {
  229 + $this->comment_class->checkRating();
  230 + if($this->comment_class->rating->load($data) && $this->comment_class->rating->save()) {
  231 + $this->isSuccess = true;
  232 + }
226 } 233 }
227 } 234 }
228 } 235 }
common/modules/comment/widgets/views/_project_comment_view.php
@@ -10,13 +10,7 @@ @@ -10,13 +10,7 @@
10 * @var \yii\widgets\ListView $widget current ListView instance 10 * @var \yii\widgets\ListView $widget current ListView instance
11 * @var User $user 11 * @var User $user
12 */ 12 */
13 - $user = NULL;  
14 - if(!empty( $model->user_id )) {  
15 - $user = User::find()  
16 - ->where([ 'id' => $model->user_id ])  
17 - ->with('userInfo')  
18 - ->one();  
19 - } 13 + $user = $model->user;
20 ?> 14 ?>
21 <div class="performer-vacancy-sidebar-left-wr"> 15 <div class="performer-vacancy-sidebar-left-wr">
22 <div class="performer-vacancy-sidebar-left"> 16 <div class="performer-vacancy-sidebar-left">
@@ -28,22 +22,22 @@ @@ -28,22 +22,22 @@
28 <ul> 22 <ul>
29 <?php 23 <?php
30 if(!empty( $user->userInfo->social_fb )) { 24 if(!empty( $user->userInfo->social_fb )) {
31 - echo '<li>'.Html::a(Html::img('/images/ico-fb.png'), $user->userInfo->social_fb, ['target' => '_blank']).'</li>'; 25 + echo '<li>' . Html::a(Html::img('/images/ico-fb.png'), $user->userInfo->social_fb, [ 'target' => '_blank' ]) . '</li>';
32 } 26 }
33 ?> 27 ?>
34 <?php 28 <?php
35 if(!empty( $user->userInfo->social_t )) { 29 if(!empty( $user->userInfo->social_t )) {
36 - echo '<li>'.Html::a(Html::img('/images/ico-tw.png'), $user->userInfo->social_t, ['target' => '_blank']).'</li>'; 30 + echo '<li>' . Html::a(Html::img('/images/ico-tw.png'), $user->userInfo->social_t, [ 'target' => '_blank' ]) . '</li>';
37 } 31 }
38 ?> 32 ?>
39 <?php 33 <?php
40 if(!empty( $user->userInfo->social_in )) { 34 if(!empty( $user->userInfo->social_in )) {
41 - echo '<li>'.Html::a(Html::img('/images/ico-in.png'), $user->userInfo->social_in, ['target' => '_blank']).'</li>'; 35 + echo '<li>' . Html::a(Html::img('/images/ico-in.png'), $user->userInfo->social_in, [ 'target' => '_blank' ]) . '</li>';
42 } 36 }
43 ?> 37 ?>
44 <?php 38 <?php
45 if(!empty( $user->userInfo->social_vk )) { 39 if(!empty( $user->userInfo->social_vk )) {
46 - echo '<li>'.Html::a(Html::img('/images/ico-vk.png'), $user->userInfo->social_vk, ['target' => '_blank']).'</li>'; 40 + echo '<li>' . Html::a(Html::img('/images/ico-vk.png'), $user->userInfo->social_vk, [ 'target' => '_blank' ]) . '</li>';
47 } 41 }
48 ?> 42 ?>
49 </ul> 43 </ul>
@@ -54,60 +48,96 @@ @@ -54,60 +48,96 @@
54 <div class="sidebarvievstxt"><?= $user->userInfo->view_count ?></div> 48 <div class="sidebarvievstxt"><?= $user->userInfo->view_count ?></div>
55 </li> 49 </li>
56 <li><img src="/images/sidebar-ico/ico-9.png" alt=""> 50 <li><img src="/images/sidebar-ico/ico-9.png" alt="">
57 - <div class="sidebarvievstxt"><span class="sidebar-views-txt">Статус: </span><?= (empty($user->userInfo->busy)?'Свободен':'Занят') ?> 51 + <div class="sidebarvievstxt">
  52 + <span class="sidebar-views-txt">Статус: </span><?= ( empty( $user->userInfo->busy ) ? 'Свободен' : 'Занят' ) ?>
58 </div> 53 </div>
59 </li> 54 </li>
60 <li><img src="/images/sidebar-ico/ico-2.png" alt=""> 55 <li><img src="/images/sidebar-ico/ico-2.png" alt="">
61 <div class="sidebarvievstxt"> 56 <div class="sidebarvievstxt">
62 - <span class="sidebar-views-txt">На сайте: </span>1г. 8 мес. 57 + <span class="sidebar-views-txt">На сайте: </span><?= $user->liveTime ?>
63 </div> 58 </div>
64 </li> 59 </li>
65 <li><img src="/images/sidebar-ico/ico-3.png" alt=""> 60 <li><img src="/images/sidebar-ico/ico-3.png" alt="">
66 - <div class="sidebarvievstxt"><span class="sidebar-views-txt">Последний визит:<br></span>2 дня назад 61 + <div class="sidebarvievstxt"><span class="sidebar-views-txt">Последний визит:<br></span><?= $user->lastVisit ?>
67 </div> 62 </div>
68 </li> 63 </li>
69 </ul> 64 </ul>
70 - <a href="#" class="tender-see-profile style">Посмотреть профиль</a> 65 + <?= Html::a('Посмотреть профиль', $user->link, [ 'class' => 'tender-see-profile style' ]) ?>
71 </div> 66 </div>
72 </div> 67 </div>
73 </div> 68 </div>
74 </div> 69 </div>
75 <div class="tender-offer-proj-block-right-wr"> 70 <div class="tender-offer-proj-block-right-wr">
76 <div class="tender-offer-proj-block-right"> 71 <div class="tender-offer-proj-block-right">
77 - <div class="tender-offer-proj-min-blocks"><span>2000 грн</span></div>  
78 - <div class="tender-offer-proj-min-blocks"><span>3 ДНЯ</span></div> 72 + <div class="tender-offer-proj-min-blocks">
  73 + <span><?= $model->budget_from . '-' . $model->budget_to . ' ' . $model->currency->label ?></span>
  74 + </div>
  75 + <div class="tender-offer-proj-min-blocks">
  76 + <span><?= $model->term_from . '-' . $model->term_to ?> ДНЯ</span></div>
79 </div> 77 </div>
80 <div class="tender-offer-proj-block-left"> 78 <div class="tender-offer-proj-block-left">
81 <div class="search-worker-blocks-title-wr"> 79 <div class="search-worker-blocks-title-wr">
82 - <div class="search-worker-blocks-title-title">Петер Цумтор</div> 80 + <div class="search-worker-blocks-title-title"><?= $user->name ?></div>
83 <div class="rating-new"> 81 <div class="rating-new">
84 <!--оценка--> 82 <!--оценка-->
85 - <input type="hidden" class="val" value="4"/> 83 + <input type="hidden" class="val" value="<?= $user->userInfo->rating ?>"/>
86 </div> 84 </div>
87 - <a href="#" class="link-to-comm">30 отзывов</a> 85 + <?= Html::a(count($user->comments) . ' отзывов', $user->getLink('review'), [ 'class' => 'link-to-comm' ]) ?>
88 </div> 86 </div>
89 <div class="tender-offer-proj-txt"> 87 <div class="tender-offer-proj-txt">
90 - <p>1.1 Строительная площадка расположена по адресу: г. Киев.</p>  
91 - <p>1.2 Существующий объект представляет собой помещение общей площадью ориентировочно – 140 м2.</p>  
92 - <p>1.3. Цель проекта состоит в проведении внутренних общестроительных и отделочных работ.</p>  
93 - <p>1.4. При разработке методов строительства и выборе материалов, используемых в настоящем проекте, необходимо учитывать климатические условия, характерные для г. Киева.</p>  
94 - <p>1.5. Требования к проектированию и производству работ определяются следующими документами:</p>  
95 - <p>- Техническим заданием.</p>  
96 - <p>- Строительными нормами и правилами.</p>  
97 - <p>Все проектные решения и все разделы рабочего проекта должны быть согласованы с Заказчиком в объеме, необходимом для последующей сдачи инженерных систем и коммуникаций.</p> 88 + <?= $model->text ?>
98 </div> 89 </div>
99 <ul class="download-list-files"> 90 <ul class="download-list-files">
100 - <li>  
101 - <span></span><a href="#" class="download-link-file">КП.doc</a><a href="#" class="download-link">Скачать</a>  
102 - </li>  
103 - <li>  
104 - <span></span><a href="#" class="download-link-file">Резюме.txt</a><a href="#" class="download-link">Скачать</a>  
105 - </li> 91 + <?php
  92 + foreach($model->getFilesList() as $file) {
  93 + ?>
  94 + <li>
  95 + <span></span>
  96 + <?= Html::a($file->name, $file->dir, [ 'class' => 'download-link-file' ]) ?>
  97 + <?= Html::a('Скачать', $file->dir, [
  98 + 'class' => 'download-link',
  99 + 'download' => 'download',
  100 + ]) ?>
  101 + </li>
  102 + <?php
  103 + }
  104 + ?>
106 </ul> 105 </ul>
107 </div> 106 </div>
108 <div class="tender-more-buttons-wr"> 107 <div class="tender-more-buttons-wr">
109 - <a class="get-project-new" href="#">Портфолио</a>  
110 - <a class="get-list-new" href="#">Конаткты</a> 108 + <?= Html::a('Портфолио', $user->getLink('portfolio'), [ 'class' => 'get-project-new' ]) ?>
  109 + <?= Html::a('Контакты', $user->link, [ 'class' => 'get-list-new' ]) ?>
111 </div> 110 </div>
  111 + <?php
  112 + if(\Yii::$app->user->getId() == $model->owner->user_id) {
  113 + ?>
  114 + <div class="project_owner_control" style="clear:both">
  115 + <span>Отметить как: </span>
  116 + <?php
  117 + echo Html::a('новый', [ '#' ], [
  118 + 'data-project-id' => $model->owner->project_id,
  119 + 'data-comment-id' => $model->comment_id,
  120 + 'class' => 'artbox_project_make_new',
  121 + ]);
  122 + echo Html::a('кандидат', [ '#' ], [
  123 + 'data-project-id' => $model->owner->project_id,
  124 + 'data-comment-id' => $model->comment_id,
  125 + 'class' => 'artbox_project_make_candidate',
  126 + ]);
  127 + echo Html::a('исполнитель', [ '#' ], [
  128 + 'data-project-id' => $model->owner->project_id,
  129 + 'data-comment-id' => $model->comment_id,
  130 + 'class' => 'artbox_project_make_performer',
  131 + ]);
  132 + echo Html::a('отказать', [ '#' ], [
  133 + 'data-project-id' => $model->owner->project_id,
  134 + 'data-comment-id' => $model->comment_id,
  135 + 'class' => 'artbox_project_make_deny',
  136 + ]);
  137 + ?>
  138 + </div>
  139 + <?php
  140 + }
  141 + ?>
112 142
113 </div> 143 </div>
common/modules/comment/widgets/views/_review_comment_view.php 0 → 100644
  1 +<?php
  2 + use common\models\User;
  3 + use yii\helpers\Html;
  4 +
  5 + /**
  6 + * @var \common\modules\comment\models\Comment $model Current comment model
  7 + * @var integer $key ID of current comment
  8 + * @var integer $index index of current element according
  9 + * to current page, starting from 0
  10 + * @var \yii\widgets\ListView $widget current ListView instance
  11 + * @var User $user
  12 + */
  13 + $user = $model->user;
  14 +?>
  15 + <div class="comments-name">
  16 + <?php
  17 + if(!empty($user)) {
  18 + echo $user->name;
  19 + } else {
  20 + echo $model->user_name;
  21 + }
  22 + ?>
  23 + </div>
  24 +<?php
  25 + /* == STATUS PRO ==
  26 + ?>
  27 + <div class="comments-status"><span>Pro</span></div>
  28 + <?php
  29 + */
  30 +?>
  31 + <div class="comments-date"><?= \Yii::$app->formatter->asDate($model->date_add, 'php:d.m.Y') ?></div>
  32 +<?php
  33 + if(!empty( $model->rating )) {
  34 + ?>
  35 + <div class="rating">
  36 + <!--оценка-->
  37 + <input type="hidden" class="val" value="<?= $model->rating->value ?>"/>
  38 + </div>
  39 + <?php
  40 + }
  41 +?>
  42 + <div class="comments-content">
  43 + <?= $model->text ?>
  44 + </div>
  45 +<?php
  46 + /* == PROJECT INFO ==
  47 + ?>
  48 + <div class="comments-project-link">Проект: <a href="#">Ремонт спальни</a></div>
  49 + <?php
  50 + */
  51 +?>
0 \ No newline at end of file 52 \ No newline at end of file
common/modules/comment/widgets/views/form-comment-review.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var \common\modules\comment\models\Comment $model
  4 + * @var \common\models\User $user
  5 + * @var \yii\data\ActiveDataProvider $dataProvider
  6 + * @var null|\common\modules\comment\models\Rating $rating
  7 + */
  8 + use yii\widgets\ActiveForm;
  9 + use yii\helpers\Html;
  10 +
  11 +?>
  12 +<div class="workplace-title style">
  13 + <p></p>Мнения о пользователе: <?= $dataProvider->totalCount ?></p></div>
  14 +<div class="new-portf-add-comm style">
  15 + <?php
  16 + $form = ActiveForm::begin();
  17 + echo $form->field($rating, 'value')
  18 + ->label(false)
  19 + ->radioList([
  20 + 1 => 1,
  21 + 2 => 2,
  22 + 3 => 3,
  23 + 4 => 4,
  24 + 5 => 5,
  25 + ]);
  26 + if($model->scenario == $model::SCENARIO_GUEST) {
  27 + echo $form->field($model, 'user_name', [
  28 + 'options' => [
  29 + 'class' => 'input-blocks-comm',
  30 + ],
  31 + 'inputOptions' => [
  32 + 'class' => 'custom-input-4',
  33 + ],
  34 + ])
  35 + ->textInput();
  36 + echo $form->field($model, 'user_email', [
  37 + 'options' => [
  38 + 'class' => 'input-blocks-comm',
  39 + ],
  40 + 'inputOptions' => [
  41 + 'class' => 'custom-input-4',
  42 + ],
  43 + ])
  44 + ->textInput();
  45 + }
  46 +
  47 + ?>
  48 + <div class="artbox_comment_reply_block"></div>
  49 + <?php
  50 + echo $form->field($model, 'text', [
  51 + 'options' => [
  52 + 'class' => 'input-blocks-comm area-comm',
  53 + ],
  54 + 'inputOptions' => [
  55 + 'class' => 'custom-area-4',
  56 + ],
  57 + ])
  58 + ->textarea();
  59 + ?>
  60 + <div class="input-blocks-comm-button style">
  61 + <?= Html::submitButton('Добавить комментарий') ?>
  62 + </div>
  63 + <?php
  64 + $form->end();
  65 + ?>
  66 +</div>
0 \ No newline at end of file 67 \ No newline at end of file
common/modules/comment/widgets/views/form-project-comment.php
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 <div class="new-portf-add-comm style"> 14 <div class="new-portf-add-comm style">
15 <div class="box-wr"> 15 <div class="box-wr">
16 <div class="box-all"> 16 <div class="box-all">
17 - <div class="tender-add-answer-title">Добавить ответ</div> 17 + <div class="tender-add-answer-title"><?= Yii::t('app', 'add_answer') ?></div>
18 <div class="form-tender-answer style"> 18 <div class="form-tender-answer style">
19 <?php 19 <?php
20 $form = ActiveForm::begin([ 'options' => [ 'class' => 'resformsfile MultiFile-intercepted', 'enctype' => 'multipart/form-data' ] ]); 20 $form = ActiveForm::begin([ 'options' => [ 'class' => 'resformsfile MultiFile-intercepted', 'enctype' => 'multipart/form-data' ] ]);
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <div class="form-value-wr style"> 22 <div class="form-value-wr style">
23 <div class="form-ico-ded-wr"> 23 <div class="form-ico-ded-wr">
24 <div class="header-cabinet-foto"> 24 <div class="header-cabinet-foto">
25 - <?= Html::img($user->userInfo->image) ?> 25 + <?= Html::img(($user->userInfo->image)?:'') ?>
26 </div> 26 </div>
27 <div class="form-value-ded-name"> 27 <div class="form-value-ded-name">
28 <?= $user->name ?> 28 <?= $user->name ?>
common/modules/comment/widgets/views/list-comment-review.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var \yii\data\DataProviderInterface $dataProvider
  4 + */
  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 +]);
0 \ No newline at end of file 17 \ No newline at end of file
common/modules/comment/widgets/views/list-project-comment.php
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 ?> 5 ?>
6 <div class="box-wr"> 6 <div class="box-wr">
7 <div class="box-all"> 7 <div class="box-all">
8 - <div class="tender-offer-proj-title-all style">Предложения проектантов</div> 8 + <div class="tender-offer-proj-title-all style">Предложения проектантов (<?=$dataProvider->getTotalCount()?>)</div>
9 <div class="tender-offer-proj-blocks-wr style"> 9 <div class="tender-offer-proj-blocks-wr style">
10 <?php 10 <?php
11 echo \yii\widgets\ListView::widget([ 11 echo \yii\widgets\ListView::widget([
common/modules/product/models/Brand.php
@@ -27,6 +27,12 @@ class Brand extends \yii\db\ActiveRecord @@ -27,6 +27,12 @@ class Brand extends \yii\db\ActiveRecord
27 public function behaviors() 27 public function behaviors()
28 { 28 {
29 return [ 29 return [
  30 + 'slug' => [
  31 + 'class' => Slug::className(),
  32 + 'in_attribute' => 'name',
  33 + 'out_attribute' => 'alias',
  34 + 'translit' => true
  35 + ],
30 'artboxsynonym' => [ 36 'artboxsynonym' => [
31 'class' => ArtboxSynonymBehavior::className(), 37 'class' => ArtboxSynonymBehavior::className(),
32 'keyNameValue' => 'brand_name_id', 38 'keyNameValue' => 'brand_name_id',
@@ -35,13 +41,7 @@ class Brand extends \yii\db\ActiveRecord @@ -35,13 +41,7 @@ class Brand extends \yii\db\ActiveRecord
35 'valueFields' => [ // postKey => DBFieldName 41 'valueFields' => [ // postKey => DBFieldName
36 'name' => 'value' 42 'name' => 'value'
37 ] 43 ]
38 - ],  
39 - 'slug' => [  
40 - 'class' => Slug::className(),  
41 - 'in_attribute' => 'name',  
42 - 'out_attribute' => 'alias',  
43 - 'translit' => true  
44 - ], 44 + ]
45 ]; 45 ];
46 } 46 }
47 47
common/modules/product/models/ProductVariant.php
@@ -34,7 +34,7 @@ class ProductVariant extends \yii\db\ActiveRecord @@ -34,7 +34,7 @@ class ProductVariant extends \yii\db\ActiveRecord
34 public function rules() 34 public function rules()
35 { 35 {
36 return [ 36 return [
37 - [['product_id', 'sku', 'product_unit_id'], 'required'], 37 + [['product_id', 'name', 'sku', 'product_unit_id'], 'required'],
38 [['product_id', 'product_unit_id'], 'integer'], 38 [['product_id', 'product_unit_id'], 'integer'],
39 [['price', 'price_old', 'stock'], 'number'], 39 [['price', 'price_old', 'stock'], 'number'],
40 [['name', 'sku'], 'string', 'max' => 255], 40 [['name', 'sku'], 'string', 'max' => 255],
common/modules/rubrication/models/TaxGroup.php
@@ -15,7 +15,7 @@ use Yii; @@ -15,7 +15,7 @@ use Yii;
15 * @property string $module 15 * @property string $module
16 * @property boolean $hierarchical 16 * @property boolean $hierarchical
17 * @property string $settings 17 * @property string $settings
18 - * @property boolean $is_filter 18 + * @property boolean is_filter
19 * 19 *
20 * @property TaxGroupToGroup[] $taxGroupToGroups 20 * @property TaxGroupToGroup[] $taxGroupToGroups
21 * @property TaxGroupToGroup[] $taxGroupToGroups0 21 * @property TaxGroupToGroup[] $taxGroupToGroups0
@@ -62,7 +62,7 @@ class TaxGroup extends \yii\db\ActiveRecord @@ -62,7 +62,7 @@ class TaxGroup extends \yii\db\ActiveRecord
62 return [ 62 return [
63 [['name', 'module'], 'required'], 63 [['name', 'module'], 'required'],
64 [['description', 'settings'], 'string'], 64 [['description', 'settings'], 'string'],
65 - [['hierarchical', 'is_filter'], 'boolean'], 65 + [['hierarchical'], 'boolean'],
66 [['alias', 'module'], 'string', 'max' => 50], 66 [['alias', 'module'], 'string', 'max' => 50],
67 [['name'], 'string', 'max' => 255], 67 [['name'], 'string', 'max' => 255],
68 [['group_to_category'], 'safe'] 68 [['group_to_category'], 'safe']
common/translation/ru/app.php
@@ -8,7 +8,7 @@ return [ @@ -8,7 +8,7 @@ return [
8 'password_reset_token' => 'Password Reset Token', 8 'password_reset_token' => 'Password Reset Token',
9 'email' => 'Логин (e-mail)', 9 'email' => 'Логин (e-mail)',
10 'phone' => 'Телефон', 10 'phone' => 'Телефон',
11 - 'status' => 'Status', 11 + 'status' => 'Статус',
12 'created_at' => 'Created At', 12 'created_at' => 'Created At',
13 'updated_at' => 'Updated At', 13 'updated_at' => 'Updated At',
14 'verifyCode' => 'Код проверки', 14 'verifyCode' => 'Код проверки',
@@ -32,4 +32,50 @@ return [ @@ -32,4 +32,50 @@ return [
32 'my_orders' => 'Мои заказы', 32 'my_orders' => 'Мои заказы',
33 'bookmarks' => 'Закладки', 33 'bookmarks' => 'Закладки',
34 'basket' => 'Корзина', 34 'basket' => 'Корзина',
  35 + 'banner_id' => 'Banner ID',
  36 + 'image' => 'Изображение',
  37 + 'alt' => 'Описание',
  38 + 'title' => 'Заголовок',
  39 + 'url' => 'Ссылка',
  40 + 'width' => 'Ширина',
  41 + 'height' => 'Высота',
  42 + 'blog_id' => 'Blog ID',
  43 + 'user_id' => 'User ID',
  44 + 'name' => 'Название',
  45 + 'link' => 'Ссылка',
  46 + 'date_add' => 'Дата добавления',
  47 + 'user_add_id' => 'User Add ID',
  48 + 'view_count' => 'Количество просмотров',
  49 + 'description' => 'Описание',
  50 + 'cover' => 'Фото главное',
  51 + 'event_id' => 'Event ID',
  52 + 'alias' => 'Ссылка',
  53 + 'body' => 'Тело',
  54 + 'meta_title' => 'Мета заголовок',
  55 + 'h1' => 'H1',
  56 + 'seo_text' => 'Сео Текст',
  57 + 'end_at' => 'Срок действия по',
  58 + 'order_items_id' => 'Order Items ID',
  59 + 'order_id' => 'Order ID',
  60 + 'item_id' => 'Item ID',
  61 + 'item_count' => 'Количество',
  62 + 'price' => 'Цена',
  63 + 'customer_id' => 'Customer ID',
  64 + 'delivery' => 'Доставка',
  65 + 'payment' => 'Оплата',
  66 + 'seo_id' => 'Seo ID',
  67 + 'controller' => 'Controller',
  68 + 'seo_category_id' => 'Seo Category ID',
  69 + 'seo_dynamic_id' => 'Seo Dynamic ID',
  70 + 'action' => 'Action',
  71 + 'fields' => 'Поля',
  72 + 'param' => 'Параметры',
  73 + 'key' => 'Ключ',
  74 + 'service_id' => 'Service ID',
  75 + 'slider_id' => 'Slider ID',
  76 + 'speed' => 'Скорость',
  77 + 'duration' => 'Продолжительность',
  78 + 'slider_image_id' => 'Slider Image ID',
  79 + 'sort' => 'Сортировка',
  80 +
35 ]; 81 ];
36 \ No newline at end of file 82 \ No newline at end of file
@@ -33,7 +33,9 @@ @@ -33,7 +33,9 @@
33 "FortAwesome/Font-Awesome": "*", 33 "FortAwesome/Font-Awesome": "*",
34 "kartik-v/yii2-widget-datepicker": "*", 34 "kartik-v/yii2-widget-datepicker": "*",
35 "unclead/yii2-multiple-input": "~1.0", 35 "unclead/yii2-multiple-input": "~1.0",
36 - "codeception/codeception":"*" 36 + "codeception/codeception":"*",
  37 + "phpmailer/phpmailer": "^5.2",
  38 + "league/oauth2-client": "^1.3"
37 }, 39 },
38 "require-dev": { 40 "require-dev": {
39 "yiisoft/yii2-codeception": "*", 41 "yiisoft/yii2-codeception": "*",
@@ -4,8 +4,8 @@ @@ -4,8 +4,8 @@
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 - "hash": "a7d36c8cf4be5f624bef0426936b9594",  
8 - "content-hash": "1e53816a430c74ec792d83ade8eac412", 7 + "hash": "d817e95d434dbdfff82796cc0b6e9c9e",
  8 + "content-hash": "a704572d721b5adc21f823d363fcd4de",
9 "packages": [ 9 "packages": [
10 { 10 {
11 "name": "2amigos/yii2-transliterator-helper", 11 "name": "2amigos/yii2-transliterator-helper",
@@ -559,7 +559,7 @@ @@ -559,7 +559,7 @@
559 }, 559 },
560 "dist": { 560 "dist": {
561 "type": "zip", 561 "type": "zip",
562 - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/a04ceaea52d2a050d8df19df1a85fb1b24456477", 562 + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c3a92199d02598de6fb59fa57913a10909628e4f",
563 "reference": "a04ceaea52d2a050d8df19df1a85fb1b24456477", 563 "reference": "a04ceaea52d2a050d8df19df1a85fb1b24456477",
564 "shasum": "" 564 "shasum": ""
565 }, 565 },
@@ -739,7 +739,7 @@ @@ -739,7 +739,7 @@
739 }, 739 },
740 "dist": { 740 "dist": {
741 "type": "zip", 741 "type": "zip",
742 - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 742 + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/416fb8ad1d095a87f1d21bc40711843cd122fd4a",
743 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 743 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
744 "shasum": "" 744 "shasum": ""
745 }, 745 },
@@ -880,7 +880,7 @@ @@ -880,7 +880,7 @@
880 }, 880 },
881 "dist": { 881 "dist": {
882 "type": "zip", 882 "type": "zip",
883 - "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/f97ab41d187553e86abb8c7f6c057c9c0b88de58", 883 + "url": "https://api.github.com/repos/FortAwesome/Font-Awesome/zipball/06b2efcda0d4612eccdaf8b79ae428fd079f2dfb",
884 "reference": "f97ab41d187553e86abb8c7f6c057c9c0b88de58", 884 "reference": "f97ab41d187553e86abb8c7f6c057c9c0b88de58",
885 "shasum": "" 885 "shasum": ""
886 }, 886 },
@@ -928,7 +928,7 @@ @@ -928,7 +928,7 @@
928 }, 928 },
929 "dist": { 929 "dist": {
930 "type": "zip", 930 "type": "zip",
931 - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d094e337976dff9d8e2424e8485872194e768662", 931 + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/85cb758d7367f3aaaa8ffc9269e777919c5f68bb",
932 "reference": "d094e337976dff9d8e2424e8485872194e768662", 932 "reference": "d094e337976dff9d8e2424e8485872194e768662",
933 "shasum": "" 933 "shasum": ""
934 }, 934 },
@@ -1147,6 +1147,106 @@ @@ -1147,6 +1147,106 @@
1147 "time": "2014-06-13 10:54:04" 1147 "time": "2014-06-13 10:54:04"
1148 }, 1148 },
1149 { 1149 {
  1150 + "name": "ircmaxell/random-lib",
  1151 + "version": "dev-master",
  1152 + "source": {
  1153 + "type": "git",
  1154 + "url": "https://github.com/ircmaxell/RandomLib.git",
  1155 + "reference": "ad6a37d7bce67b0954be63feb1b4c47da77c527f"
  1156 + },
  1157 + "dist": {
  1158 + "type": "zip",
  1159 + "url": "https://api.github.com/repos/ircmaxell/RandomLib/zipball/ad6a37d7bce67b0954be63feb1b4c47da77c527f",
  1160 + "reference": "ad6a37d7bce67b0954be63feb1b4c47da77c527f",
  1161 + "shasum": ""
  1162 + },
  1163 + "require": {
  1164 + "ircmaxell/security-lib": "1.1.*@dev",
  1165 + "php": ">=5.3.2"
  1166 + },
  1167 + "require-dev": {
  1168 + "mikey179/vfsstream": "1.1.*",
  1169 + "phpunit/phpunit": "3.7.*"
  1170 + },
  1171 + "type": "library",
  1172 + "extra": {
  1173 + "branch-alias": {
  1174 + "dev-master": "1.1.x-dev"
  1175 + }
  1176 + },
  1177 + "autoload": {
  1178 + "psr-0": {
  1179 + "RandomLib": "lib"
  1180 + }
  1181 + },
  1182 + "notification-url": "https://packagist.org/downloads/",
  1183 + "license": [
  1184 + "MIT"
  1185 + ],
  1186 + "authors": [
  1187 + {
  1188 + "name": "Anthony Ferrara",
  1189 + "email": "ircmaxell@ircmaxell.com",
  1190 + "homepage": "http://blog.ircmaxell.com"
  1191 + }
  1192 + ],
  1193 + "description": "A Library For Generating Secure Random Numbers",
  1194 + "homepage": "https://github.com/ircmaxell/RandomLib",
  1195 + "keywords": [
  1196 + "cryptography",
  1197 + "random",
  1198 + "random-numbers",
  1199 + "random-strings"
  1200 + ],
  1201 + "time": "2016-02-22 13:55:31"
  1202 + },
  1203 + {
  1204 + "name": "ircmaxell/security-lib",
  1205 + "version": "v1.1.0",
  1206 + "source": {
  1207 + "type": "git",
  1208 + "url": "https://github.com/ircmaxell/SecurityLib.git",
  1209 + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5"
  1210 + },
  1211 + "dist": {
  1212 + "type": "zip",
  1213 + "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5",
  1214 + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5",
  1215 + "shasum": ""
  1216 + },
  1217 + "require": {
  1218 + "php": ">=5.3.2"
  1219 + },
  1220 + "require-dev": {
  1221 + "mikey179/vfsstream": "1.1.*"
  1222 + },
  1223 + "type": "library",
  1224 + "extra": {
  1225 + "branch-alias": {
  1226 + "dev-master": "1.0.x-dev"
  1227 + }
  1228 + },
  1229 + "autoload": {
  1230 + "psr-0": {
  1231 + "SecurityLib": "lib"
  1232 + }
  1233 + },
  1234 + "notification-url": "https://packagist.org/downloads/",
  1235 + "license": [
  1236 + "MIT"
  1237 + ],
  1238 + "authors": [
  1239 + {
  1240 + "name": "Anthony Ferrara",
  1241 + "email": "ircmaxell@ircmaxell.com",
  1242 + "homepage": "http://blog.ircmaxell.com"
  1243 + }
  1244 + ],
  1245 + "description": "A Base Security Library",
  1246 + "homepage": "https://github.com/ircmaxell/SecurityLib",
  1247 + "time": "2015-03-20 14:31:23"
  1248 + },
  1249 + {
1150 "name": "kartik-v/yii2-krajee-base", 1250 "name": "kartik-v/yii2-krajee-base",
1151 "version": "dev-master", 1251 "version": "dev-master",
1152 "source": { 1252 "source": {
@@ -1156,7 +1256,7 @@ @@ -1156,7 +1256,7 @@
1156 }, 1256 },
1157 "dist": { 1257 "dist": {
1158 "type": "zip", 1258 "type": "zip",
1159 - "url": "https://api.github.com/repos/kartik-v/yii2-krajee-base/zipball/3e491e51ed742663b239cd6e0b7f76d403bed7e1", 1259 + "url": "https://api.github.com/repos/kartik-v/yii2-krajee-base/zipball/3115b09aeb15a5e06f38dc16860baf153d9bf70e",
1160 "reference": "3e491e51ed742663b239cd6e0b7f76d403bed7e1", 1260 "reference": "3e491e51ed742663b239cd6e0b7f76d403bed7e1",
1161 "shasum": "" 1261 "shasum": ""
1162 }, 1262 },
@@ -1207,7 +1307,7 @@ @@ -1207,7 +1307,7 @@
1207 }, 1307 },
1208 "dist": { 1308 "dist": {
1209 "type": "zip", 1309 "type": "zip",
1210 - "url": "https://api.github.com/repos/kartik-v/yii2-widget-colorinput/zipball/18537fcdab0f5491d5eebff8e2464ef6a616ee4c", 1310 + "url": "https://api.github.com/repos/kartik-v/yii2-widget-colorinput/zipball/1a10c5e9a528270e22dc8a5eba404c72f417665a",
1211 "reference": "18537fcdab0f5491d5eebff8e2464ef6a616ee4c", 1311 "reference": "18537fcdab0f5491d5eebff8e2464ef6a616ee4c",
1212 "shasum": "" 1312 "shasum": ""
1213 }, 1313 },
@@ -1261,7 +1361,7 @@ @@ -1261,7 +1361,7 @@
1261 }, 1361 },
1262 "dist": { 1362 "dist": {
1263 "type": "zip", 1363 "type": "zip",
1264 - "url": "https://api.github.com/repos/kartik-v/yii2-widget-datepicker/zipball/3f7b38886e334a2c8c4262f155d98812461efd36", 1364 + "url": "https://api.github.com/repos/kartik-v/yii2-widget-datepicker/zipball/52606c8764a174aa0d5e6483ed811f617c74ee4e",
1265 "reference": "3f7b38886e334a2c8c4262f155d98812461efd36", 1365 "reference": "3f7b38886e334a2c8c4262f155d98812461efd36",
1266 "shasum": "" 1366 "shasum": ""
1267 }, 1367 },
@@ -1359,6 +1459,69 @@ @@ -1359,6 +1459,69 @@
1359 "time": "2016-03-10 11:33:59" 1459 "time": "2016-03-10 11:33:59"
1360 }, 1460 },
1361 { 1461 {
  1462 + "name": "league/oauth2-client",
  1463 + "version": "1.3.0",
  1464 + "source": {
  1465 + "type": "git",
  1466 + "url": "https://github.com/thephpleague/oauth2-client.git",
  1467 + "reference": "5e5c0bc5bd219515c8d8db8bcb61f19753101b7c"
  1468 + },
  1469 + "dist": {
  1470 + "type": "zip",
  1471 + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/5e5c0bc5bd219515c8d8db8bcb61f19753101b7c",
  1472 + "reference": "5e5c0bc5bd219515c8d8db8bcb61f19753101b7c",
  1473 + "shasum": ""
  1474 + },
  1475 + "require": {
  1476 + "ext-curl": "*",
  1477 + "guzzlehttp/guzzle": "~6.0",
  1478 + "ircmaxell/random-lib": "~1.1",
  1479 + "php": ">=5.5.0"
  1480 + },
  1481 + "require-dev": {
  1482 + "jakub-onderka/php-parallel-lint": "0.8.*",
  1483 + "mockery/mockery": "~0.9",
  1484 + "phpunit/phpunit": "~4.0",
  1485 + "satooshi/php-coveralls": "0.6.*",
  1486 + "squizlabs/php_codesniffer": "~2.0"
  1487 + },
  1488 + "type": "library",
  1489 + "extra": {
  1490 + "branch-alias": {
  1491 + "dev-master": "1.0.x-dev"
  1492 + }
  1493 + },
  1494 + "autoload": {
  1495 + "psr-4": {
  1496 + "League\\OAuth2\\Client\\": "src/"
  1497 + }
  1498 + },
  1499 + "notification-url": "https://packagist.org/downloads/",
  1500 + "license": [
  1501 + "MIT"
  1502 + ],
  1503 + "authors": [
  1504 + {
  1505 + "name": "Alex Bilbie",
  1506 + "email": "hello@alexbilbie.com",
  1507 + "homepage": "http://www.alexbilbie.com",
  1508 + "role": "Developer"
  1509 + }
  1510 + ],
  1511 + "description": "OAuth 2.0 Client Library",
  1512 + "keywords": [
  1513 + "Authentication",
  1514 + "SSO",
  1515 + "authorization",
  1516 + "identity",
  1517 + "idp",
  1518 + "oauth",
  1519 + "oauth2",
  1520 + "single sign on"
  1521 + ],
  1522 + "time": "2016-02-13 20:18:03"
  1523 + },
  1524 + {
1362 "name": "lusitanian/oauth", 1525 "name": "lusitanian/oauth",
1363 "version": "v0.3.6", 1526 "version": "v0.3.6",
1364 "source": { 1527 "source": {
@@ -1670,6 +1833,60 @@ @@ -1670,6 +1833,60 @@
1670 "time": "2015-02-03 12:10:50" 1833 "time": "2015-02-03 12:10:50"
1671 }, 1834 },
1672 { 1835 {
  1836 + "name": "phpmailer/phpmailer",
  1837 + "version": "5.4.x-dev",
  1838 + "source": {
  1839 + "type": "git",
  1840 + "url": "https://github.com/PHPMailer/PHPMailer.git",
  1841 + "reference": "3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5"
  1842 + },
  1843 + "dist": {
  1844 + "type": "zip",
  1845 + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5",
  1846 + "reference": "3d4e3b1a0da0a33889f8b0b2afda6ad4f6d011b5",
  1847 + "shasum": ""
  1848 + },
  1849 + "require": {
  1850 + "php": ">=5.5.0"
  1851 + },
  1852 + "require-dev": {
  1853 + "phpdocumentor/phpdocumentor": "2.*",
  1854 + "phpunit/phpunit": "4.*"
  1855 + },
  1856 + "suggest": {
  1857 + "league/oauth2-client": "Needed for XOAUTH2 authentication"
  1858 + },
  1859 + "type": "library",
  1860 + "autoload": {
  1861 + "psr-4": {
  1862 + "PHPMailer\\PHPMailer\\": "src/"
  1863 + }
  1864 + },
  1865 + "notification-url": "https://packagist.org/downloads/",
  1866 + "license": [
  1867 + "LGPL-2.1"
  1868 + ],
  1869 + "authors": [
  1870 + {
  1871 + "name": "Jim Jagielski",
  1872 + "email": "jimjag@gmail.com"
  1873 + },
  1874 + {
  1875 + "name": "Marcus Bointon",
  1876 + "email": "phpmailer@synchromedia.co.uk"
  1877 + },
  1878 + {
  1879 + "name": "Andy Prevost",
  1880 + "email": "codeworxtech@users.sourceforge.net"
  1881 + },
  1882 + {
  1883 + "name": "Brent R. Matzelle"
  1884 + }
  1885 + ],
  1886 + "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
  1887 + "time": "2016-04-07 09:04:03"
  1888 + },
  1889 + {
1673 "name": "phpspec/prophecy", 1890 "name": "phpspec/prophecy",
1674 "version": "dev-master", 1891 "version": "dev-master",
1675 "source": { 1892 "source": {
@@ -1981,7 +2198,7 @@ @@ -1981,7 +2198,7 @@
1981 }, 2198 },
1982 "dist": { 2199 "dist": {
1983 "type": "zip", 2200 "type": "zip",
1984 - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a1b63266c046e1856fd03812a4e0ac2b51aa2d5", 2201 + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/496745aeba741e63b7149da3e1f712d441751182",
1985 "reference": "1a1b63266c046e1856fd03812a4e0ac2b51aa2d5", 2202 "reference": "1a1b63266c046e1856fd03812a4e0ac2b51aa2d5",
1986 "shasum": "" 2203 "shasum": ""
1987 }, 2204 },
@@ -2743,7 +2960,7 @@ @@ -2743,7 +2960,7 @@
2743 }, 2960 },
2744 "dist": { 2961 "dist": {
2745 "type": "zip", 2962 "type": "zip",
2746 - "url": "https://api.github.com/repos/symfony/console/zipball/6b1175135bc2a74c08a28d89761272de8beed8cd", 2963 + "url": "https://api.github.com/repos/symfony/console/zipball/7541c505d2b804cc65a4edf90a6f1cb496523fef",
2747 "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd", 2964 "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd",
2748 "shasum": "" 2965 "shasum": ""
2749 }, 2966 },
@@ -2856,7 +3073,7 @@ @@ -2856,7 +3073,7 @@
2856 }, 3073 },
2857 "dist": { 3074 "dist": {
2858 "type": "zip", 3075 "type": "zip",
2859 - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/18a06d7a9af41718c20764a674a0ebba3bc40d1f", 3076 + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/49b588841225b205700e5122fa01911cabada857",
2860 "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f", 3077 "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f",
2861 "shasum": "" 3078 "shasum": ""
2862 }, 3079 },
@@ -2912,7 +3129,7 @@ @@ -2912,7 +3129,7 @@
2912 }, 3129 },
2913 "dist": { 3130 "dist": {
2914 "type": "zip", 3131 "type": "zip",
2915 - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9002dcf018d884d294b1ef20a6f968efc1128f39", 3132 + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/17b04e6b1ede45b57d3ad5146abe50df6c3968b4",
2916 "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39", 3133 "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39",
2917 "shasum": "" 3134 "shasum": ""
2918 }, 3135 },
@@ -3174,7 +3391,7 @@ @@ -3174,7 +3391,7 @@
3174 }, 3391 },
3175 "dist": { 3392 "dist": {
3176 "type": "zip", 3393 "type": "zip",
3177 - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/bcc317666439a8ec1dc28874e0577b860b6dd6b3", 3394 + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/b7e62df2cfa1dfab4e70223770a99c3798d4a412",
3178 "reference": "bcc317666439a8ec1dc28874e0577b860b6dd6b3", 3395 "reference": "bcc317666439a8ec1dc28874e0577b860b6dd6b3",
3179 "shasum": "" 3396 "shasum": ""
3180 }, 3397 },
@@ -3268,7 +3485,7 @@ @@ -3268,7 +3485,7 @@
3268 }, 3485 },
3269 "dist": { 3486 "dist": {
3270 "type": "zip", 3487 "type": "zip",
3271 - "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/4dd9f52e2a376a875d998de6ab4c381291b0c69e", 3488 + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/772b610ea7940059584f9220f7b87e4b2b1a0e78",
3272 "reference": "4dd9f52e2a376a875d998de6ab4c381291b0c69e", 3489 "reference": "4dd9f52e2a376a875d998de6ab4c381291b0c69e",
3273 "shasum": "" 3490 "shasum": ""
3274 }, 3491 },
@@ -3318,7 +3535,7 @@ @@ -3318,7 +3535,7 @@
3318 }, 3535 },
3319 "dist": { 3536 "dist": {
3320 "type": "zip", 3537 "type": "zip",
3321 - "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/348122de0b2c2e343b579f93fcda1da78cab4912", 3538 + "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/f5fe6ba58dbc92b37daed5d9bd94cda777852ee4",
3322 "reference": "348122de0b2c2e343b579f93fcda1da78cab4912", 3539 "reference": "348122de0b2c2e343b579f93fcda1da78cab4912",
3323 "shasum": "" 3540 "shasum": ""
3324 }, 3541 },
@@ -3365,7 +3582,7 @@ @@ -3365,7 +3582,7 @@
3365 }, 3582 },
3366 "dist": { 3583 "dist": {
3367 "type": "zip", 3584 "type": "zip",
3368 - "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99", 3585 + "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/3be1ecc324aa156a97f03e3fc59045c8d61be1f8",
3369 "reference": "a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99", 3586 "reference": "a6c34ef6b69fb4670ba987ce4b9cfdb2131a8b99",
3370 "shasum": "" 3587 "shasum": ""
3371 }, 3588 },
@@ -3413,7 +3630,7 @@ @@ -3413,7 +3630,7 @@
3413 }, 3630 },
3414 "dist": { 3631 "dist": {
3415 "type": "zip", 3632 "type": "zip",
3416 - "url": "https://api.github.com/repos/yiisoft/yii2-jui/zipball/69cd9763b4807dbbce367d599dc615c5b8a8ef4f", 3633 + "url": "https://api.github.com/repos/yiisoft/yii2-jui/zipball/9ab9a2cb17cd7f13921339e11e5146295cf39083",
3417 "reference": "69cd9763b4807dbbce367d599dc615c5b8a8ef4f", 3634 "reference": "69cd9763b4807dbbce367d599dc615c5b8a8ef4f",
3418 "shasum": "" 3635 "shasum": ""
3419 }, 3636 },
@@ -3463,7 +3680,7 @@ @@ -3463,7 +3680,7 @@
3463 }, 3680 },
3464 "dist": { 3681 "dist": {
3465 "type": "zip", 3682 "type": "zip",
3466 - "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/20775fef1047cd927908270a8d7983580304eb57", 3683 + "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/163b9c6273e133c43a596aef46a9f5b1537731f9",
3467 "reference": "20775fef1047cd927908270a8d7983580304eb57", 3684 "reference": "20775fef1047cd927908270a8d7983580304eb57",
3468 "shasum": "" 3685 "shasum": ""
3469 }, 3686 },
@@ -3542,7 +3759,7 @@ @@ -3542,7 +3759,7 @@
3542 }, 3759 },
3543 "dist": { 3760 "dist": {
3544 "type": "zip", 3761 "type": "zip",
3545 - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/8deb6343c80c4edf546a6fff01a2b05c7dc59ac4", 3762 + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/1c33e894fbbad6cf65bd42871719cd33227ed6a7",
3546 "reference": "8deb6343c80c4edf546a6fff01a2b05c7dc59ac4", 3763 "reference": "8deb6343c80c4edf546a6fff01a2b05c7dc59ac4",
3547 "shasum": "" 3764 "shasum": ""
3548 }, 3765 },
@@ -3592,7 +3809,7 @@ @@ -3592,7 +3809,7 @@
3592 }, 3809 },
3593 "dist": { 3810 "dist": {
3594 "type": "zip", 3811 "type": "zip",
3595 - "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a", 3812 + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/0464787bfa7cd13576c5a1e318709768798bec6a",
3596 "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", 3813 "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a",
3597 "shasum": "" 3814 "shasum": ""
3598 }, 3815 },
@@ -3626,7 +3843,7 @@ @@ -3626,7 +3843,7 @@
3626 }, 3843 },
3627 "dist": { 3844 "dist": {
3628 "type": "zip", 3845 "type": "zip",
3629 - "url": "https://api.github.com/repos/yiisoft/yii2-codeception/zipball/e01b3c46917b3f00c42f6a4aabf612cc36d792e6", 3846 + "url": "https://api.github.com/repos/yiisoft/yii2-codeception/zipball/572a6d46d942cc5733c45931fdbd1d60228f3c89",
3630 "reference": "e01b3c46917b3f00c42f6a4aabf612cc36d792e6", 3847 "reference": "e01b3c46917b3f00c42f6a4aabf612cc36d792e6",
3631 "shasum": "" 3848 "shasum": ""
3632 }, 3849 },
@@ -3671,7 +3888,7 @@ @@ -3671,7 +3888,7 @@
3671 }, 3888 },
3672 "dist": { 3889 "dist": {
3673 "type": "zip", 3890 "type": "zip",
3674 - "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/081795536b31d29106b0d1de0cb3aefa3e05e995", 3891 + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/e26905af4bc1ca5ecbababac112c7f7f722cabd2",
3675 "reference": "081795536b31d29106b0d1de0cb3aefa3e05e995", 3892 "reference": "081795536b31d29106b0d1de0cb3aefa3e05e995",
3676 "shasum": "" 3893 "shasum": ""
3677 }, 3894 },
@@ -3718,7 +3935,7 @@ @@ -3718,7 +3935,7 @@
3718 }, 3935 },
3719 "dist": { 3936 "dist": {
3720 "type": "zip", 3937 "type": "zip",
3721 - "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/a8daa97749e7154d91676405a1c59ed81e1ca999", 3938 + "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/6e6eb430809e3f9c05e367303909a05a4912d4c0",
3722 "reference": "a8daa97749e7154d91676405a1c59ed81e1ca999", 3939 "reference": "a8daa97749e7154d91676405a1c59ed81e1ca999",
3723 "shasum": "" 3940 "shasum": ""
3724 }, 3941 },
@@ -3765,7 +3982,7 @@ @@ -3765,7 +3982,7 @@
3765 }, 3982 },
3766 "dist": { 3983 "dist": {
3767 "type": "zip", 3984 "type": "zip",
3768 - "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/989d6c52c92e51f0d562729c329ee1012191cba2", 3985 + "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/70edab5a7938b5bf4b5dc3ad1e1c3ce673552f48",
3769 "reference": "989d6c52c92e51f0d562729c329ee1012191cba2", 3986 "reference": "989d6c52c92e51f0d562729c329ee1012191cba2",
3770 "shasum": "" 3987 "shasum": ""
3771 }, 3988 },
console/migrations/m160225_143331_comment_test.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +class m160225_143331_comment_test extends Migration
  6 +{
  7 + public function up()
  8 + {
  9 + $this->createTable('{{%comment}}', [
  10 + 'comment_id' => $this->primaryKey(),
  11 + 'entity' => $this->string()->notNull(),
  12 + 'text' => $this->text()->notNull(),
  13 + 'user_id' => $this->integer(),
  14 + 'user_name' => $this->string(),
  15 + 'user_email' => $this->string(),
  16 + 'comment_pid' => $this->integer(),
  17 + 'status' => $this->integer(),
  18 + 'date_add' => $this->timestamp()->notNull()->defaultExpression('NOW()'),
  19 + 'date_update' => $this->timestamp()->notNull()->defaultExpression('NOW()'),
  20 + 'date_delete' => $this->timestamp(),
  21 + ]);
  22 +
  23 + $this->addForeignKey('comment_user', '{{%comment}}', 'user_id', '{{%user}}', 'id', 'CASCADE', 'CASCADE');
  24 + }
  25 +
  26 + public function down()
  27 + {
  28 + $this->dropForeignKey('comment_user', '{{%comment}}');
  29 + $this->dropTable('{{%comment}}');
  30 + }
  31 +
  32 + /*
  33 + // Use safeUp/safeDown to run migration code within a transaction
  34 + public function safeUp()
  35 + {
  36 + }
  37 +
  38 + public function safeDown()
  39 + {
  40 + }
  41 + */
  42 +}
console/migrations/m160304_081817_rating_table.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +class m160304_081817_rating_table extends Migration
  6 +{
  7 + public function up()
  8 + {
  9 + $this->createTable('{{%rating}}', [
  10 + 'rating_id' => $this->primaryKey(),
  11 + 'date_add' => $this->timestamp()->notNull()->defaultExpression('NOW()'),
  12 + 'date_update' => $this->timestamp()->notNull()->defaultExpression('NOW()'),
  13 + 'user_id' => $this->integer(),
  14 + 'entity' => $this->string(),
  15 + 'value' => $this->integer(),
  16 + ]);
  17 +
  18 + $this->addForeignKey('rating_user', '{{%rating}}', 'user_id', '{{%user}}', 'id', 'CASCADE', 'CASCADE');
  19 + }
  20 +
  21 + public function down()
  22 + {
  23 + $this->dropForeignKey('rating_user', '{{%rating}}');
  24 + $this->dropTable('{{%rating}}');
  25 + }
  26 +
  27 +}
console/migrations/m160311_132124_rating_comment_restyle.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +class m160311_132124_rating_comment_restyle extends Migration
  6 +{
  7 + public function up()
  8 + {
  9 + $this->truncateTable('{{%comment}}');
  10 + $this->truncateTable('{{%rating}}');
  11 + $this->dropColumn('{{%comment}}', 'entity');
  12 + $this->dropColumn('{{%rating}}', 'entity');
  13 + $this->addColumn('{{%comment}}', 'model', $this->string()->notNull());
  14 + $this->addColumn('{{%comment}}', 'model_id', $this->integer()->notNull());
  15 + $this->addColumn('{{%rating}}', 'model', $this->string()->notNull());
  16 + $this->addColumn('{{%rating}}', 'model_id', $this->integer()->notNull());
  17 + }
  18 +
  19 + public function down()
  20 + {
  21 + $this->truncateTable('{{%comment}}');
  22 + $this->truncateTable('{{%rating}}');
  23 + $this->dropColumn('{{%comment}}', 'model');
  24 + $this->dropColumn('{{%rating}}', 'model');
  25 + $this->dropColumn('{{%comment}}', 'model_id');
  26 + $this->dropColumn('{{%rating}}', 'model_id');
  27 + $this->addColumn('{{%comment}}', 'entity', $this->string()->notNull());
  28 + $this->addColumn('{{%rating}}', 'entity', $this->string()->notNull());
  29 + }
  30 +
  31 +}
console/migrations/m160414_101644_add_param_to_seo_dynamic.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +/**
  6 + * Handles adding the columns `param`
  7 + * for table `seo_dynamic`.
  8 + */
  9 +class m160414_101644_add_param_to_seo_dynamic extends Migration
  10 +{
  11 + /**
  12 + * @inheritdoc
  13 + */
  14 + public function up()
  15 + {
  16 + $this->addColumn('seo_dynamic', 'param', $this->string());
  17 + }
  18 +
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public function down()
  23 + {
  24 + $this->dropColumn('seo_dynamic', 'param');
  25 + }
  26 +}
console/migrations/m160414_214745_add_key_to_seo_dynamic.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +/**
  6 + * Handles adding the columns `key`
  7 + * for table `seo_dynamic`.
  8 + */
  9 +class m160414_214745_add_key_to_seo_dynamic extends Migration
  10 +{
  11 + /**
  12 + * @inheritdoc
  13 + */
  14 + public function up()
  15 + {
  16 + $this->addColumn('seo_dynamic', 'key', $this->string());
  17 + }
  18 +
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public function down()
  23 + {
  24 + $this->dropColumn('seo_dynamic', 'key');
  25 + }
  26 +}
frontend/controllers/SiteController.php
1 <?php 1 <?php
2 namespace frontend\controllers; 2 namespace frontend\controllers;
3 3
  4 +use common\components\Mailer;
4 use Yii; 5 use Yii;
5 use common\models\LoginForm; 6 use common\models\LoginForm;
6 use frontend\models\PasswordResetRequestForm; 7 use frontend\models\PasswordResetRequestForm;
@@ -91,6 +92,22 @@ class SiteController extends Controller @@ -91,6 +92,22 @@ class SiteController extends Controller
91 return $this->render('index'); 92 return $this->render('index');
92 } 93 }
93 94
  95 +
  96 + public function actionMail(){
  97 + $num = Yii::$app->request->post('num');
  98 + $type = Yii::$app->request->post('type');
  99 +
  100 + switch ($type) {
  101 + case 'call_me':
  102 + if(!empty($num)){
  103 + return json_encode(Mailer::widget(['text' => $num, 'subject' => 'Обратный звонок']));
  104 + }
  105 +
  106 + break;
  107 +
  108 + }
  109 + }
  110 +
94 /** 111 /**
95 * Logs in a user. 112 * Logs in a user.
96 * 113 *
frontend/views/catalog/product.php
1 <?php 1 <?php
2 /** @var $this \yii\web\View */ 2 /** @var $this \yii\web\View */
3 /** @var $dataProvider \yii\data\ActiveDataProvider */ 3 /** @var $dataProvider \yii\data\ActiveDataProvider */
4 - 4 +die('here1');
5 $this->title = $product->name; 5 $this->title = $product->name;
6 foreach($product->category->getParents()->all() as $parent) { 6 foreach($product->category->getParents()->all() as $parent) {
7 $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; 7 $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]];
frontend/views/catalog/products.php
@@ -3,14 +3,21 @@ @@ -3,14 +3,21 @@
3 /** @var $productProvider \yii\data\ActiveDataProvider */ 3 /** @var $productProvider \yii\data\ActiveDataProvider */
4 /** @var $brandProvider \yii\data\ActiveDataProvider */ 4 /** @var $brandProvider \yii\data\ActiveDataProvider */
5 5
  6 +
6 use yii\helpers\Url; 7 use yii\helpers\Url;
7 use common\modules\product\helpers\ProductHelper; 8 use common\modules\product\helpers\ProductHelper;
8 9
  10 +
9 $this->title = $category->categoryName->value; 11 $this->title = $category->categoryName->value;
10 foreach($category->getParents()->all() as $parent) { 12 foreach($category->getParents()->all() as $parent) {
11 $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]]; 13 $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]];
12 } 14 }
13 $this->params['breadcrumbs'][] = $category->categoryName->value; 15 $this->params['breadcrumbs'][] = $category->categoryName->value;
  16 +$this->params['seo']['seo_text'] = 'TEST SEO TEXT';
  17 +$this->params['seo']['h1'] = 'TEST H1';
  18 +$this->params['seo']['description'] = 'TEST DESCRIPTION';
  19 +$this->params['seo']['fields']['name'] = 'TEST NAME FROM FIELD';
  20 +$this->params['seo']['key']= 'product_list';
14 ?> 21 ?>
15 <script type="text/javascript"> 22 <script type="text/javascript">
16 <?php if ($priceLimits['min'] < $priceLimits['max']) :?> 23 <?php if ($priceLimits['min'] < $priceLimits['max']) :?>
frontend/views/event/index.php
@@ -2,6 +2,10 @@ @@ -2,6 +2,10 @@
2 use yii\widgets\ListView; 2 use yii\widgets\ListView;
3 use frontend\widgets\Seo; 3 use frontend\widgets\Seo;
4 $this->params['breadcrumbs'][] = ['label' => 'Акции', 'url' => ['index']]; 4 $this->params['breadcrumbs'][] = ['label' => 'Акции', 'url' => ['index']];
  5 +$this->params['seo']['seo_text'] = 'TEST SEO TEXT';
  6 +$this->params['seo']['h1'] = 'TEST H1';
  7 +$this->params['seo']['description'] = 'TEST DESCRIPTION';
  8 +$this->params['seo']['fields']['name'] = 'TEST NAME FROM FIELD';
5 ?> 9 ?>
6 10
7 <?php 11 <?php
frontend/views/event/view.php
@@ -20,6 +20,31 @@ $this-&gt;params[&#39;name&#39;] = $this-&gt;title; @@ -20,6 +20,31 @@ $this-&gt;params[&#39;name&#39;] = $this-&gt;title;
20 <div class="content-last-block-text-wrap"> 20 <div class="content-last-block-text-wrap">
21 <?= $model->body?> 21 <?= $model->body?>
22 </div> 22 </div>
  23 + <?php
  24 + echo \common\modules\comment\widgets\CommentWidget::widget([
  25 + 'context' => $this,
  26 + 'model' => $model->className(),
  27 + 'model_id' => $model->event_id,
  28 + 'comment_class' => \common\modules\comment\models\Comment::className(),
  29 + 'rating_class' => \common\modules\comment\models\Rating::className(),
  30 + 'class_options' => [
  31 + 'scenario' => is_int(\Yii::$app->user->getId()) ? \common\modules\comment\models\Comment::SCENARIO_USER : \common\modules\comment\models\Comment::SCENARIO_GUEST,
  32 + 'user_id' => \Yii::$app->user->getId(),
  33 + 'guestComment' => true,
  34 + 'status' => \common\modules\comment\models\Comment::STATUS_ACTIVE,
  35 + ],
  36 + 'list_options' => [
  37 + 'view' => 'list-comment-review',
  38 + ],
  39 + 'form_options' => [
  40 + 'view' => 'form-comment-review',
  41 + 'tag' => 'span',
  42 + ],
  43 + 'options' => [
  44 + 'class' => 'proektant-comments-wr style',
  45 + ],
  46 + ]);
  47 + ?>
23 </div> 48 </div>
24 <div class="seo-text"> 49 <div class="seo-text">
25 <?= Seo::widget(['row'=>'seo_text'])?> 50 <?= Seo::widget(['row'=>'seo_text'])?>
frontend/views/layouts/main.php
@@ -19,24 +19,8 @@ AppAsset::register($this); @@ -19,24 +19,8 @@ AppAsset::register($this);
19 <html lang="en"> 19 <html lang="en">
20 <head> 20 <head>
21 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 21 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
22 - <title><?= Seo::widget([  
23 - 'row'=>'title',  
24 - 'own_attr'=>$this->title,  
25 - 'fields' =>[  
26 - 'name' => isset($this->params[ 'name' ]) ? $this->params[ 'name' ] : ''  
27 - ]  
28 - ])?>  
29 - </title>  
30 - <?php $this->registerMetaTag([  
31 - 'name' => 'description',  
32 - 'content' => Seo::widget([  
33 - 'row'=>'description',  
34 - 'own_attr'=>isset($this->params[ 'description' ]) ? $this->params[ 'description' ] : '',  
35 - 'fields' =>[  
36 - 'name' => isset($this->params[ 'name' ]) ? $this->params[ 'name' ] : ''  
37 - ]  
38 - ])  
39 - ]); ?> 22 + <title><?= Seo::widget([ 'row'=>'title'])?></title>
  23 + <?= Seo::widget([ 'row'=>'description'])?>
40 <?php $this->head() ?> 24 <?php $this->head() ?>
41 <?//= Html::csrfMetaTags() ?> 25 <?//= Html::csrfMetaTags() ?>
42 <link href='https://fonts.googleapis.com/css?family=Ubuntu:400,300italic,300,400italic,500,500italic,700italic,700' rel='stylesheet' type='text/css'> 26 <link href='https://fonts.googleapis.com/css?family=Ubuntu:400,300italic,300,400italic,500,500italic,700italic,700' rel='stylesheet' type='text/css'>
frontend/views/modal/call_me.php 0 → 100755
  1 +<div class="call_me_modal_wrapper">
  2 + <!-- <form name="forgot_pass_form" id="forgot_pass_form"> -->
  3 + <div class="modal_window">
  4 + <form>
  5 + <div class="modal_close_btn"></div>
  6 + <div class="title">Перезвонить мне</div>
  7 + <label>Телефон:<input type="text" name="callme_head" id="phone_num_modal" placeholder="(0xx) xxx-xx-xx"></label>
  8 + <div class="for_btn_position"><button class="my_cust_btn" type="submit">перезвонить мне</button></div>
  9 + </form>
  10 + </div>
  11 + <!-- </form> -->
  12 +</div>
0 \ No newline at end of file 13 \ No newline at end of file
frontend/web/css/concat_all.css
@@ -233,7 +233,6 @@ @@ -233,7 +233,6 @@
233 font-size: 30px; 233 font-size: 30px;
234 font-weight: bold; 234 font-weight: bold;
235 padding-bottom: 20px; 235 padding-bottom: 20px;
236 - line-height: 1em;  
237 } 236 }
238 237
239 .cat_p_catalog_list .sort_price { 238 .cat_p_catalog_list .sort_price {
frontend/web/js/my_scripts.js
@@ -181,8 +181,13 @@ $(document).ready(function(){ @@ -181,8 +181,13 @@ $(document).ready(function(){
181 $(".phone_me_head").find("input").addClass("error"); 181 $(".phone_me_head").find("input").addClass("error");
182 } 182 }
183 else{ 183 else{
184 - callback_wrap.fadeIn(200);  
185 - $(".phone_me_head").find("input").val(''); 184 + var num = $(".phone_me_head").find("input").val();
  185 + var type = 'call_me';
  186 + send_call_me_back( num,type, function(data){
  187 + callback_wrap.fadeIn(200);
  188 + $(".phone_me_head").find("input").val('');
  189 + });
  190 +
186 } 191 }
187 }); 192 });
188 modal_busket_header_cont.click(function(){ // скрываем модальную корзину в хедере по ссылке 193 modal_busket_header_cont.click(function(){ // скрываем модальную корзину в хедере по ссылке
@@ -462,4 +467,28 @@ $(document).ready(function(){ @@ -462,4 +467,28 @@ $(document).ready(function(){
462 467
463 //=============================================== BUSKET MODAL WINDOW FUNCTIONS 468 //=============================================== BUSKET MODAL WINDOW FUNCTIONS
464 469
  470 + function send_call_me_back( num, type,callback )
  471 + {
  472 + $.ajax({
  473 + url: '/site/mail',
  474 + data :
  475 + {
  476 + 'num' : num,
  477 + 'type' : type
  478 + },
  479 + type : 'POST',
  480 + dataType: 'json',
  481 + success: function (data)
  482 + {
  483 + if(callback)
  484 + callback(data);
  485 + },
  486 + error: function()
  487 + {
  488 + console.info('error');
  489 + }
  490 + });
  491 + }
  492 +
  493 +
465 }); 494 });
466 \ No newline at end of file 495 \ No newline at end of file
frontend/widgets/Seo.php
1 <?php 1 <?php
2 namespace frontend\widgets; 2 namespace frontend\widgets;
3 -use common\models\SeoCategory;  
4 use common\models\SeoDynamic; 3 use common\models\SeoDynamic;
5 use yii\base\Widget; 4 use yii\base\Widget;
6 use yii\helpers\Html; 5 use yii\helpers\Html;
@@ -11,9 +10,20 @@ class Seo extends Widget @@ -11,9 +10,20 @@ class Seo extends Widget
11 public $row; 10 public $row;
12 public $own_attr; 11 public $own_attr;
13 public $fields; 12 public $fields;
  13 + public $description;
  14 + public $title;
  15 + public $seo_text;
  16 + public $h1;
  17 + public $key;
  18 + public $project_name;
  19 + const SEO_TEXT = 'seo_text';
  20 + const DESCRIPTION = 'description';
  21 + const H1 = 'h1';
  22 + const TITLE = 'title';
14 23
15 public function init(){ 24 public function init(){
16 - $this->url = $_SERVER['REQUEST_URI']; 25 + $this->url = \Yii::$app->request->url;
  26 + $this->project_name = \Yii::$app->name;
17 parent::init(); 27 parent::init();
18 28
19 } 29 }
@@ -21,27 +31,62 @@ class Seo extends Widget @@ -21,27 +31,62 @@ class Seo extends Widget
21 31
22 public function run() 32 public function run()
23 { 33 {
24 - $row = '';  
25 34
  35 + $seoData = $this->getViewData();
  36 + foreach($seoData as $key=>$value){
  37 + $this->$key = $value;
  38 + }
26 39
27 - $widgetData = $this->findSeoByUrl();  
28 - if($widgetData instanceof \common\models\Seo){  
29 40
30 - $row = $widgetData->{$this->row};  
31 - } else{ 41 + switch ($this->row) {
  42 + case self::SEO_TEXT:
  43 + return $this->selectSeoData(self::SEO_TEXT);
  44 +
  45 + break;
  46 + case self::H1:
  47 + return $this->selectSeoData(self::H1);
  48 + break;
  49 + case self::TITLE:
  50 +
  51 + $filter = \Yii::$app->request->get('filter', []);
  52 + if(!empty($filter)){
  53 + $filter_row = '';
  54 + foreach($filter as $sub_filter_name => $sub_filter_array){
  55 + if($sub_filter_name=='options'){
  56 + foreach($sub_filter_array as $f_name=>$f_values){
  57 + $filter_row .= $f_name.':'.implode(',',$f_values).'|';
  58 + }
  59 + }
  60 +
  61 + }
  62 + $this->fields['name'] = $filter_row;
  63 + }
  64 +
  65 + $title = $this->selectSeoData(self::TITLE);
32 66
33 - $widgetData = $this->findSeoByDynamic();  
34 - if($widgetData instanceof SeoDynamic){  
35 - $row = $widgetData->{$this->row};  
36 - }  
37 - }  
38 - if(!empty($this->own_attr) && empty($row)) {  
39 67
40 - $row = $this->own_attr;  
41 - }  
42 68
  69 + if(!empty($title)){
  70 + return $title;
  71 + } else {
  72 + return $this->project_name;
  73 + }
43 74
44 - return $this->replaceData($row); 75 + break;
  76 + case self::DESCRIPTION:
  77 + $description = $this->selectSeoData(self::DESCRIPTION);
  78 +
  79 + if(!empty($description)){
  80 +
  81 + $this->getView()->registerMetaTag([
  82 + 'name' => 'description',
  83 + 'content' => $description
  84 + ]);
  85 +
  86 + }
  87 +
  88 + break;
  89 + }
45 90
46 91
47 } 92 }
@@ -54,6 +99,7 @@ class Seo extends Widget @@ -54,6 +99,7 @@ class Seo extends Widget
54 $str = str_replace('{'.$field_name.'}', $field_value, $str); 99 $str = str_replace('{'.$field_name.'}', $field_value, $str);
55 } 100 }
56 } 101 }
  102 + $str = str_replace('{project_name}', $this->project_name, $str);
57 return Html::encode($str); 103 return Html::encode($str);
58 } 104 }
59 105
@@ -64,6 +110,51 @@ class Seo extends Widget @@ -64,6 +110,51 @@ class Seo extends Widget
64 110
65 protected function findSeoByDynamic() 111 protected function findSeoByDynamic()
66 { 112 {
67 - return SeoDynamic::find()->joinWith('seoCategory')->where(['controller'=> \Yii::$app->controller->id, 'action'=>\Yii::$app->controller->action->id])->one(); 113 + $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller'=> \Yii::$app->controller->id, 'action'=>\Yii::$app->controller->action->id]);
  114 + if(!empty($this->key)){
  115 + $query->andWhere(['key'=>$this->key]);
  116 + }
  117 + return $query->one();
68 } 118 }
  119 +
  120 +
  121 + protected function getViewData(){
  122 + $params = $this->getView()->params;
  123 + if(isset($params['seo'])){
  124 + return $params['seo'];
  125 + } else {
  126 + return [];
  127 + }
  128 + }
  129 +
  130 + protected function selectSeoData($param){
  131 + $result = '';
  132 +
  133 + $widgetData = $this->findSeoByUrl();
  134 +
  135 + if($widgetData instanceof \common\models\Seo){
  136 +
  137 + $result = $widgetData->$param;
  138 +
  139 + }else if(!empty($this->$param)){
  140 +
  141 + $result = $this->$param;
  142 +
  143 + } else {
  144 +
  145 + $widgetData = $this->findSeoByDynamic();
  146 +
  147 + if($widgetData instanceof SeoDynamic){
  148 +
  149 + $result = $widgetData->$param;
  150 +
  151 + }
  152 +
  153 + }
  154 +
  155 + return $this->replaceData($result);
  156 +
  157 + }
  158 +
  159 +
69 } 160 }
70 \ No newline at end of file 161 \ No newline at end of file