Commit bada6a893fe788b7c9e0c0797878d9dab7c195ed

Authored by Alexey Boroda
1 parent 595ab5a0

-Artbox landing patched

backend/config/main.php
... ... @@ -17,11 +17,12 @@
17 17 'controllerNamespace' => 'backend\controllers',
18 18 'bootstrap' => [ 'log' ],
19 19 'controllerMap' => [
20   - 'profile' => 'artbox\core\controllers\ProfileController',
21   - 'page' => 'artbox\core\controllers\PageController',
22   - 'alias' => 'artbox\core\controllers\AliasController',
23   - 'seo' => 'artbox\core\controllers\SeoController',
24   - 'feedback' => 'artbox\core\controllers\FeedbackController',
  20 + 'profile' => 'artbox\core\controllers\ProfileController',
  21 + 'page' => 'artbox\core\controllers\PageController',
  22 + 'page-category' => 'artbox\core\controllers\PageCategoryController',
  23 + 'alias' => 'artbox\core\controllers\AliasController',
  24 + 'seo' => 'artbox\core\controllers\SeoController',
  25 + 'feedback' => 'artbox\core\controllers\FeedbackController',
25 26 ],
26 27 'components' => [
27 28 'assetManager' => [
... ...
backend/controllers/SettingsController.php
1 1 <?php
2 2 namespace backend\controllers;
3 3  
  4 + use common\models\Mail;
4 5 use common\models\Settings;
5 6 use yii\base\InvalidConfigException;
6 7 use yii\filters\AccessControl;
... ... @@ -47,17 +48,23 @@
47 48 public function actionIndex()
48 49 {
49 50 $model = $this->findSettings();
50   -
  51 + $mail = Mail::findOne(1);
  52 +
  53 + if ($mail->load(\Yii::$app->request->post())) {
  54 + $mail->save();
  55 + }
  56 +
51 57 if ($model->load(Yii::$app->request->post()) && $model->save()) {
52 58 Yii::$app->session->setFlash('success', \Yii::t('core', 'Settings saved'));
53   -
  59 +
54 60 return $this->goHome();
55 61 }
56   -
  62 +
57 63 return $this->render(
58 64 'settings',
59 65 [
60 66 'model' => $model,
  67 + 'mail' => $mail,
61 68 ]
62 69 );
63 70 }
... ...
backend/views/layouts/main.php
... ... @@ -10,7 +10,7 @@
10 10 use artbox\core\models\UserData;
11 11 use artbox\core\widgets\FeedbackWidget;
12 12 use artbox\core\widgets\FlashWidget;
13   - use noam148\imagemanager\components\ImageManagerGetPath;
  13 + use artbox\core\components\imagemanager\components\ImageManagerGetPath;
14 14 use yii\bootstrap\Html;
15 15 use yii\web\View;
16 16 use yii\widgets\Breadcrumbs;
... ...
backend/views/layouts/menu_items.php
... ... @@ -31,11 +31,20 @@
31 31 ],
32 32 [
33 33 'label' => \Yii::t('core', 'Static pages'),
34   - 'url' => [ 'page/index' ],
  34 + 'url' => '#',
35 35 'icon' => 'file-text',
36   - 'active' => function () {
37   - return \Yii::$app->controller->id === 'page';
38   - },
  36 + 'items' => [
  37 + [
  38 + 'label' => \Yii::t('core', 'Pages'),
  39 + 'url' => [ '/page/index' ],
  40 + 'icon' => 'file-text',
  41 + ],
  42 + [
  43 + 'label' => \Yii::t('core', 'Categories'),
  44 + 'url' => [ '/page-category/index' ],
  45 + 'icon' => 'archive',
  46 + ]
  47 + ],
39 48 ],
40 49 [
41 50 'label' => \Yii::t('core', 'SEO'),
... ...
backend/views/settings/_mail_tab.php 0 → 100644
  1 +<?php
  2 +
  3 + use common\models\Mail;
  4 + use yii\bootstrap\ActiveForm;
  5 + use yii\web\View;
  6 +
  7 + /**
  8 + * @var View $this
  9 + * @var Mail $mail
  10 + * @var ActiveForm $form
  11 + */
  12 +
  13 + echo $form->field($mail, 'host')
  14 + ->textInput();
  15 +
  16 + echo $form->field($mail, 'user')
  17 + ->textInput();
  18 +
  19 + echo $form->field($mail, 'pass')
  20 + ->textInput();
0 21 \ No newline at end of file
... ...
backend/views/settings/_main_tab.php
... ... @@ -12,7 +12,7 @@
12 12 ->textInput();
13 13 echo $form->field($model, 'logo')
14 14 ->widget(
15   - \noam148\imagemanager\components\ImageManagerInputWidget::className(),
  15 + \artbox\core\components\imagemanager\components\ImageManagerInputWidget::className(),
16 16 [
17 17 'showPreview' => true,
18 18 'showDeletePickedImageConfirm' => false,
... ...
backend/views/settings/settings.php
... ... @@ -73,6 +73,16 @@
73 73 ]
74 74 ),
75 75 ],
  76 + [
  77 + 'label' => \Yii::t('core', 'Email'),
  78 + 'content' => $this->render(
  79 + '_mail_tab',
  80 + [
  81 + 'form' => $form,
  82 + 'mail' => $mail,
  83 + ]
  84 + ),
  85 + ],
76 86 ],
77 87 ]
78 88 );
... ...
common/config/.gitignore
... ... @@ -2,4 +2,5 @@ main-local.php
2 2 db*
3 3 params-local.php
4 4 test-local.php
5   -#settings.php
6 5 \ No newline at end of file
  6 +settings.php
  7 +mail.php
7 8 \ No newline at end of file
... ...
common/config/mail.php 0 → 100755
  1 +<?php
  2 +
  3 +return [
  4 + 1 => [
  5 + 'host' => '',
  6 + 'user' => '',
  7 + 'pass' => '',
  8 + 'id' => 1,
  9 + ],
  10 +];
0 11 \ No newline at end of file
... ...
common/config/main.php
1 1 <?php
2 2 use artbox\core\components\SeoComponent;
3 3  
  4 + $mail = require ('mail.php');
  5 +
4 6 return [
5 7 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
6 8 'modules' => [
7 9 'imagemanager' => [
8   - 'class' => 'noam148\imagemanager\Module',
  10 + 'class' => 'artbox\core\components\imagemanager\Module',
9 11 'canUploadImage' => true,
10 12 'canRemoveImage' => function () {
11 13 return true;
... ... @@ -45,14 +47,26 @@
45 47 'class' => SeoComponent::className(),
46 48 ],
47 49 'imagemanager' => [
48   - 'class' => 'noam148\imagemanager\components\ImageManagerGetPath',
49   - 'mediaPath' => dirname(dirname(__DIR__)) . '/common/images',
50   - 'cachePath' => 'assets/images',
  50 + 'class' => 'artbox\core\components\imagemanager\components\ImageManagerGetPath',
  51 + 'mediaPath' => dirname(dirname(__DIR__)) . '/storage',
  52 + 'cachePath' => '../../storage/cache',
51 53 'useFilename' => true,
52 54 'absoluteUrl' => false,
53 55 ],
54 56 'aliasCache' => [
55 57 'class' => \artbox\core\components\AliasCache::className(),
56 58 ],
  59 + 'smtpmailer' => [
  60 + 'class' => 'yii\swiftmailer\Mailer',
  61 + 'transport' => [
  62 + 'class' => 'Swift_SmtpTransport',
  63 + 'host' => $mail[ 1 ][ 'host' ],
  64 + 'username' => $mail[ 1 ][ 'user' ],
  65 + 'password' => $mail[ 1 ][ 'pass' ],
  66 + 'port' => '587',
  67 + 'encryption' => 'tls',
  68 + ],
  69 + 'viewPath' => '@common/mail'
  70 + ],
57 71 ],
58 72 ];
... ...
common/mail/feedback.php 0 → 100644
  1 +<?php
  2 + use artbox\core\models\Feedback;
  3 + use yii\web\View;
  4 +
  5 + /**
  6 + * @var View $this
  7 + * @var Feedback $model
  8 + */
  9 +
  10 +?>
  11 +
  12 +<table>
  13 + <tbody>
  14 + <tr>
  15 + <td><b><?= \Yii::t('app', 'Name: ') ?></b></td>
  16 + <td><?= $model->name ?></td>
  17 + </tr>
  18 + <tr>
  19 + <td><b><?= \Yii::t('app', 'Phone: ') ?></b></td>
  20 + <td><?= $model->phone ?></td>
  21 + </tr>
  22 + <tr>
  23 + <td><b><?= \Yii::t('app', 'Email: ') ?></b></td>
  24 + <td><?= $model->email ?></td>
  25 + </tr>
  26 + <tr>
  27 + <td><b><?= \Yii::t('app', 'Message: ') ?></b></td>
  28 + <td><?= $model->message ?></td>
  29 + </tr>
  30 + </tbody>
  31 +</table>
... ...
common/models/Mail.php 0 → 100644
  1 +<?php
  2 +
  3 + namespace common\models;
  4 +
  5 + use yii2tech\filedb\ActiveRecord;
  6 +
  7 + /**
  8 + * Class Mail
  9 + *
  10 + * @property string $host
  11 + * @property string $user
  12 + * @property string $pass
  13 + * @package common\models
  14 + */
  15 + class Mail extends ActiveRecord
  16 + {
  17 + /**
  18 + * @inheritdoc
  19 + */
  20 + public static function fileName()
  21 + {
  22 + return 'mail';
  23 + }
  24 +
  25 + public function rules()
  26 + {
  27 + return [
  28 + [
  29 + [
  30 + 'user',
  31 + 'host',
  32 + 'pass',
  33 + ],
  34 + 'string',
  35 + ],
  36 + ];
  37 + }
  38 + }
0 39 \ No newline at end of file
... ...
common/models/Settings.php
1 1 <?php
2 2 namespace common\models;
3 3  
4   - use noam148\imagemanager\models\ImageManager;
  4 + use artbox\core\components\imagemanager\models\ImageManager;
5 5 use yii2tech\filedb\ActiveRecord;
6 6 use Yii;
7 7  
... ...
composer.lock
... ... @@ -4,6 +4,7 @@
4 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 5 "This file is @generated automatically"
6 6 ],
  7 + "hash": "fc40a7cfec5d7a574dd6b716d563a9b3",
7 8 "content-hash": "497cd4fa2109f53680f63a074ef3c552",
8 9 "packages": [
9 10 {
... ... @@ -64,7 +65,7 @@
64 65 "yii 2",
65 66 "yii2"
66 67 ],
67   - "time": "2017-06-09T14:12:14+00:00"
  68 + "time": "2017-06-09 14:12:14"
68 69 },
69 70 {
70 71 "name": "artweb/artbox-core",
... ... @@ -72,7 +73,7 @@
72 73 "source": {
73 74 "type": "git",
74 75 "url": "git@gitlab.artweb.com.ua:yarik.nechyporuk/artbox-core.git",
75   - "reference": "d80f6a3ae32b635fdeb8850f68867a494f59f5d8"
  76 + "reference": "b65a7fc01200b8e82deaafd0894e99eb9f771c67"
76 77 },
77 78 "require": {
78 79 "2amigos/yii2-tinymce-widget": "~1.0",
... ... @@ -95,7 +96,7 @@
95 96 "BSD-3-Clause"
96 97 ],
97 98 "description": "Artbox core extension",
98   - "time": "2017-07-07 12:33:25"
  99 + "time": "2017-07-20 13:16:43"
99 100 },
100 101 {
101 102 "name": "bower-asset/amcharts",
... ... @@ -154,7 +155,7 @@
154 155 "shasum": ""
155 156 },
156 157 "require": {
157   - "bower-asset/jquery": ">=1.9.1,<4.0"
  158 + "bower-asset/jquery": ">=1.9.1,<=3"
158 159 },
159 160 "type": "bower-asset-library",
160 161 "extra": {
... ... @@ -548,16 +549,16 @@
548 549 },
549 550 {
550 551 "name": "cebe/markdown",
551   - "version": "1.1.1",
  552 + "version": "1.1.2",
552 553 "source": {
553 554 "type": "git",
554 555 "url": "https://github.com/cebe/markdown.git",
555   - "reference": "c30eb5e01fe021cc5bba2f9ee0eeef96d4931166"
  556 + "reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e"
556 557 },
557 558 "dist": {
558 559 "type": "zip",
559   - "url": "https://api.github.com/repos/cebe/markdown/zipball/c30eb5e01fe021cc5bba2f9ee0eeef96d4931166",
560   - "reference": "c30eb5e01fe021cc5bba2f9ee0eeef96d4931166",
  560 + "url": "https://api.github.com/repos/cebe/markdown/zipball/25b28bae8a6f185b5030673af77b32e1163d5c6e",
  561 + "reference": "25b28bae8a6f185b5030673af77b32e1163d5c6e",
561 562 "shasum": ""
562 563 },
563 564 "require": {
... ... @@ -604,7 +605,7 @@
604 605 "markdown",
605 606 "markdown-extra"
606 607 ],
607   - "time": "2016-09-14T20:40:20+00:00"
  608 + "time": "2017-07-16 21:13:23"
608 609 },
609 610 {
610 611 "name": "ezyang/htmlpurifier",
... ... @@ -651,7 +652,7 @@
651 652 "keywords": [
652 653 "html"
653 654 ],
654   - "time": "2017-06-03T02:28:16+00:00"
  655 + "time": "2017-06-03 02:28:16"
655 656 },
656 657 {
657 658 "name": "firebase/php-jwt",
... ... @@ -694,7 +695,7 @@
694 695 ],
695 696 "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
696 697 "homepage": "https://github.com/firebase/php-jwt",
697   - "time": "2016-07-18T04:51:16+00:00"
  698 + "time": "2016-07-18 04:51:16"
698 699 },
699 700 {
700 701 "name": "fortawesome/font-awesome",
... ... @@ -742,27 +743,27 @@
742 743 "font",
743 744 "icon"
744 745 ],
745   - "time": "2016-10-24T15:52:54+00:00"
  746 + "time": "2016-10-24 15:52:54"
746 747 },
747 748 {
748 749 "name": "google/apiclient",
749   - "version": "v2.1.3",
  750 + "version": "v2.2.0",
750 751 "source": {
751 752 "type": "git",
752 753 "url": "https://github.com/google/google-api-php-client.git",
753   - "reference": "43996f09df274158fd04fce98e8a82effe5f3717"
  754 + "reference": "f3fadd538315d62ebd1191d89ac791468c617260"
754 755 },
755 756 "dist": {
756 757 "type": "zip",
757   - "url": "https://api.github.com/repos/google/google-api-php-client/zipball/43996f09df274158fd04fce98e8a82effe5f3717",
758   - "reference": "43996f09df274158fd04fce98e8a82effe5f3717",
  758 + "url": "https://api.github.com/repos/google/google-api-php-client/zipball/f3fadd538315d62ebd1191d89ac791468c617260",
  759 + "reference": "f3fadd538315d62ebd1191d89ac791468c617260",
759 760 "shasum": ""
760 761 },
761 762 "require": {
762   - "firebase/php-jwt": "~2.0|~3.0|~4.0",
763   - "google/apiclient-services": "^0.11",
764   - "google/auth": "^0.11",
765   - "guzzlehttp/guzzle": "~5.2|~6.0",
  763 + "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0",
  764 + "google/apiclient-services": "~0.13",
  765 + "google/auth": "^1.0",
  766 + "guzzlehttp/guzzle": "~5.3.1|~6.0",
766 767 "guzzlehttp/psr7": "^1.2",
767 768 "monolog/monolog": "^1.17",
768 769 "php": ">=5.4",
... ... @@ -801,20 +802,20 @@
801 802 "keywords": [
802 803 "google"
803 804 ],
804   - "time": "2017-03-22T18:32:04+00:00"
  805 + "time": "2017-07-10 15:34:54"
805 806 },
806 807 {
807 808 "name": "google/apiclient-services",
808   - "version": "v0.11",
  809 + "version": "v0.15",
809 810 "source": {
810 811 "type": "git",
811 812 "url": "https://github.com/google/google-api-php-client-services.git",
812   - "reference": "48c554aee06f2fd5700d7bdfa4fa6b82d184eb52"
  813 + "reference": "9eaaa1062fa2a7cd2d16d3b5ab39efc0bc02a37e"
813 814 },
814 815 "dist": {
815 816 "type": "zip",
816   - "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/48c554aee06f2fd5700d7bdfa4fa6b82d184eb52",
817   - "reference": "48c554aee06f2fd5700d7bdfa4fa6b82d184eb52",
  817 + "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/9eaaa1062fa2a7cd2d16d3b5ab39efc0bc02a37e",
  818 + "reference": "9eaaa1062fa2a7cd2d16d3b5ab39efc0bc02a37e",
818 819 "shasum": ""
819 820 },
820 821 "require": {
... ... @@ -838,25 +839,25 @@
838 839 "keywords": [
839 840 "google"
840 841 ],
841   - "time": "2017-03-13T17:40:44+00:00"
  842 + "time": "2017-07-13 19:18:11"
842 843 },
843 844 {
844 845 "name": "google/auth",
845   - "version": "v0.11.1",
  846 + "version": "v1.0",
846 847 "source": {
847 848 "type": "git",
848 849 "url": "https://github.com/google/google-auth-library-php.git",
849   - "reference": "a240674b08a09949fd5597f7590b3ed83663a12d"
  850 + "reference": "db77bd2de0bcc40bf50ebe851e9eed332aeaa4df"
850 851 },
851 852 "dist": {
852 853 "type": "zip",
853   - "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/a240674b08a09949fd5597f7590b3ed83663a12d",
854   - "reference": "a240674b08a09949fd5597f7590b3ed83663a12d",
  854 + "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/db77bd2de0bcc40bf50ebe851e9eed332aeaa4df",
  855 + "reference": "db77bd2de0bcc40bf50ebe851e9eed332aeaa4df",
855 856 "shasum": ""
856 857 },
857 858 "require": {
858 859 "firebase/php-jwt": "~2.0|~3.0|~4.0",
859   - "guzzlehttp/guzzle": "~5.3|~6.0",
  860 + "guzzlehttp/guzzle": "~5.3.1|~6.0",
860 861 "guzzlehttp/psr7": "~1.2",
861 862 "php": ">=5.4",
862 863 "psr/cache": "^1.0",
... ... @@ -886,7 +887,7 @@
886 887 "google",
887 888 "oauth2"
888 889 ],
889   - "time": "2016-11-02T14:59:14+00:00"
  890 + "time": "2017-06-13 18:00:07"
890 891 },
891 892 {
892 893 "name": "guzzlehttp/guzzle",
... ... @@ -951,7 +952,7 @@
951 952 "rest",
952 953 "web service"
953 954 ],
954   - "time": "2017-06-22T18:50:49+00:00"
  955 + "time": "2017-06-22 18:50:49"
955 956 },
956 957 {
957 958 "name": "guzzlehttp/promises",
... ... @@ -1002,7 +1003,7 @@
1002 1003 "keywords": [
1003 1004 "promise"
1004 1005 ],
1005   - "time": "2016-12-20T10:07:11+00:00"
  1006 + "time": "2016-12-20 10:07:11"
1006 1007 },
1007 1008 {
1008 1009 "name": "guzzlehttp/psr7",
... ... @@ -1067,7 +1068,7 @@
1067 1068 "uri",
1068 1069 "url"
1069 1070 ],
1070   - "time": "2017-03-20T17:10:46+00:00"
  1071 + "time": "2017-03-20 17:10:46"
1071 1072 },
1072 1073 {
1073 1074 "name": "hiqdev/yii2-asset-icheck",
... ... @@ -1139,7 +1140,7 @@
1139 1140 "iCheck",
1140 1141 "yii2"
1141 1142 ],
1142   - "time": "2016-03-30T10:59:26+00:00"
  1143 + "time": "2016-03-30 10:59:26"
1143 1144 },
1144 1145 {
1145 1146 "name": "hiqdev/yii2-asset-pnotify",
... ... @@ -1201,7 +1202,7 @@
1201 1202 "pnotify",
1202 1203 "yii2"
1203 1204 ],
1204   - "time": "2015-09-09T15:16:38+00:00"
  1205 + "time": "2015-09-09 15:16:38"
1205 1206 },
1206 1207 {
1207 1208 "name": "imagine/imagine",
... ... @@ -1258,7 +1259,7 @@
1258 1259 "image manipulation",
1259 1260 "image processing"
1260 1261 ],
1261   - "time": "2015-09-19T16:54:05+00:00"
  1262 + "time": "2015-09-19 16:54:05"
1262 1263 },
1263 1264 {
1264 1265 "name": "kartik-v/bootstrap-fileinput",
... ... @@ -1311,7 +1312,7 @@
1311 1312 "progress",
1312 1313 "upload"
1313 1314 ],
1314   - "time": "2017-06-24T05:15:30+00:00"
  1315 + "time": "2017-06-24 05:15:30"
1315 1316 },
1316 1317 {
1317 1318 "name": "kartik-v/yii2-krajee-base",
... ... @@ -1362,7 +1363,7 @@
1362 1363 "widget",
1363 1364 "yii2"
1364 1365 ],
1365   - "time": "2017-02-22T05:58:53+00:00"
  1366 + "time": "2017-02-22 05:58:53"
1366 1367 },
1367 1368 {
1368 1369 "name": "kartik-v/yii2-widget-fileinput",
... ... @@ -1417,7 +1418,7 @@
1417 1418 "widget",
1418 1419 "yii2"
1419 1420 ],
1420   - "time": "2017-05-25T20:12:30+00:00"
  1421 + "time": "2017-05-25 20:12:30"
1421 1422 },
1422 1423 {
1423 1424 "name": "kartik-v/yii2-widget-select2",
... ... @@ -1548,7 +1549,7 @@
1548 1549 "logging",
1549 1550 "psr-3"
1550 1551 ],
1551   - "time": "2017-06-19T01:22:40+00:00"
  1552 + "time": "2017-06-19 01:22:40"
1552 1553 },
1553 1554 {
1554 1555 "name": "noam148/yii2-image-manager",
... ... @@ -1597,7 +1598,7 @@
1597 1598 "widget",
1598 1599 "yii2"
1599 1600 ],
1600   - "time": "2017-06-11T09:21:10+00:00"
  1601 + "time": "2017-06-11 09:21:10"
1601 1602 },
1602 1603 {
1603 1604 "name": "noam148/yii2-image-resize",
... ... @@ -1643,7 +1644,7 @@
1643 1644 "resize",
1644 1645 "yii2"
1645 1646 ],
1646   - "time": "2016-11-29T18:17:37+00:00"
  1647 + "time": "2016-11-29 18:17:37"
1647 1648 },
1648 1649 {
1649 1650 "name": "phpseclib/phpseclib",
... ... @@ -1735,7 +1736,7 @@
1735 1736 "x.509",
1736 1737 "x509"
1737 1738 ],
1738   - "time": "2017-06-05T06:31:10+00:00"
  1739 + "time": "2017-06-05 06:31:10"
1739 1740 },
1740 1741 {
1741 1742 "name": "psr/cache",
... ... @@ -1781,7 +1782,7 @@
1781 1782 "psr",
1782 1783 "psr-6"
1783 1784 ],
1784   - "time": "2016-08-06T20:24:11+00:00"
  1785 + "time": "2016-08-06 20:24:11"
1785 1786 },
1786 1787 {
1787 1788 "name": "psr/http-message",
... ... @@ -1831,7 +1832,7 @@
1831 1832 "request",
1832 1833 "response"
1833 1834 ],
1834   - "time": "2016-08-06T14:39:51+00:00"
  1835 + "time": "2016-08-06 14:39:51"
1835 1836 },
1836 1837 {
1837 1838 "name": "psr/log",
... ... @@ -1878,7 +1879,7 @@
1878 1879 "psr",
1879 1880 "psr-3"
1880 1881 ],
1881   - "time": "2016-10-10T12:19:37+00:00"
  1882 + "time": "2016-10-10 12:19:37"
1882 1883 },
1883 1884 {
1884 1885 "name": "rmrevin/yii2-fontawesome",
... ... @@ -1930,7 +1931,7 @@
1930 1931 "font",
1931 1932 "yii"
1932 1933 ],
1933   - "time": "2017-01-11T14:05:47+00:00"
  1934 + "time": "2017-01-11 14:05:47"
1934 1935 },
1935 1936 {
1936 1937 "name": "speixoto/yii2-amcharts",
... ... @@ -1972,7 +1973,7 @@
1972 1973 "amcharts",
1973 1974 "yii"
1974 1975 ],
1975   - "time": "2016-08-23T13:52:28+00:00"
  1976 + "time": "2016-08-23 13:52:28"
1976 1977 },
1977 1978 {
1978 1979 "name": "swiftmailer/swiftmailer",
... ... @@ -2026,7 +2027,7 @@
2026 2027 "mail",
2027 2028 "mailer"
2028 2029 ],
2029   - "time": "2017-05-01T15:54:03+00:00"
  2030 + "time": "2017-05-01 15:54:03"
2030 2031 },
2031 2032 {
2032 2033 "name": "tinymce/tinymce",
... ... @@ -2072,20 +2073,20 @@
2072 2073 "tinymce",
2073 2074 "wysiwyg"
2074 2075 ],
2075   - "time": "2017-06-13T12:49:51+00:00"
  2076 + "time": "2017-06-13 12:49:51"
2076 2077 },
2077 2078 {
2078 2079 "name": "yii2tech/filedb",
2079   - "version": "1.0.3",
  2080 + "version": "1.0.4",
2080 2081 "source": {
2081 2082 "type": "git",
2082 2083 "url": "https://github.com/yii2tech/filedb.git",
2083   - "reference": "29af3a707fa2070b73b268e847b264f29c7dff31"
  2084 + "reference": "6a6391b035da2bb2049813f8bce9f49ed9b01426"
2084 2085 },
2085 2086 "dist": {
2086 2087 "type": "zip",
2087   - "url": "https://api.github.com/repos/yii2tech/filedb/zipball/29af3a707fa2070b73b268e847b264f29c7dff31",
2088   - "reference": "29af3a707fa2070b73b268e847b264f29c7dff31",
  2088 + "url": "https://api.github.com/repos/yii2tech/filedb/zipball/6a6391b035da2bb2049813f8bce9f49ed9b01426",
  2089 + "reference": "6a6391b035da2bb2049813f8bce9f49ed9b01426",
2089 2090 "shasum": ""
2090 2091 },
2091 2092 "require": {
... ... @@ -2120,7 +2121,7 @@
2120 2121 "static",
2121 2122 "yii2"
2122 2123 ],
2123   - "time": "2017-02-06T10:58:30+00:00"
  2124 + "time": "2017-07-07 12:50:56"
2124 2125 },
2125 2126 {
2126 2127 "name": "yiisoft/yii2",
... ... @@ -2220,7 +2221,7 @@
2220 2221 "framework",
2221 2222 "yii2"
2222 2223 ],
2223   - "time": "2017-06-05T14:33:41+00:00"
  2224 + "time": "2017-06-05 14:33:41"
2224 2225 },
2225 2226 {
2226 2227 "name": "yiisoft/yii2-bootstrap",
... ... @@ -2270,7 +2271,7 @@
2270 2271 "bootstrap",
2271 2272 "yii2"
2272 2273 ],
2273   - "time": "2016-03-17T03:29:28+00:00"
  2274 + "time": "2016-03-17 03:29:28"
2274 2275 },
2275 2276 {
2276 2277 "name": "yiisoft/yii2-composer",
... ... @@ -2320,7 +2321,7 @@
2320 2321 "extension installer",
2321 2322 "yii2"
2322 2323 ],
2323   - "time": "2016-12-20T13:26:02+00:00"
  2324 + "time": "2016-12-20 13:26:02"
2324 2325 },
2325 2326 {
2326 2327 "name": "yiisoft/yii2-imagine",
... ... @@ -2368,7 +2369,7 @@
2368 2369 "imagine",
2369 2370 "yii2"
2370 2371 ],
2371   - "time": "2016-11-03T19:28:39+00:00"
  2372 + "time": "2016-11-03 19:28:39"
2372 2373 },
2373 2374 {
2374 2375 "name": "yiisoft/yii2-swiftmailer",
... ... @@ -2418,20 +2419,20 @@
2418 2419 "swiftmailer",
2419 2420 "yii2"
2420 2421 ],
2421   - "time": "2017-05-01T08:29:00+00:00"
  2422 + "time": "2017-05-01 08:29:00"
2422 2423 },
2423 2424 {
2424 2425 "name": "yiister/yii2-gentelella",
2425   - "version": "1.2.3",
  2426 + "version": "1.2.5",
2426 2427 "source": {
2427 2428 "type": "git",
2428 2429 "url": "https://github.com/yiister/yii2-gentelella.git",
2429   - "reference": "ec02c7e89363ee2f2c074588f3f13d3751fea1b5"
  2430 + "reference": "60e79128a3999c8d9ff826ee5ea26e74c7c64eed"
2430 2431 },
2431 2432 "dist": {
2432 2433 "type": "zip",
2433   - "url": "https://api.github.com/repos/yiister/yii2-gentelella/zipball/ec02c7e89363ee2f2c074588f3f13d3751fea1b5",
2434   - "reference": "ec02c7e89363ee2f2c074588f3f13d3751fea1b5",
  2434 + "url": "https://api.github.com/repos/yiister/yii2-gentelella/zipball/60e79128a3999c8d9ff826ee5ea26e74c7c64eed",
  2435 + "reference": "60e79128a3999c8d9ff826ee5ea26e74c7c64eed",
2435 2436 "shasum": ""
2436 2437 },
2437 2438 "require": {
... ... @@ -2476,7 +2477,7 @@
2476 2477 "theme",
2477 2478 "yii2"
2478 2479 ],
2479   - "time": "2017-07-04T05:05:27+00:00"
  2480 + "time": "2017-07-12 03:46:01"
2480 2481 }
2481 2482 ],
2482 2483 "packages-dev": [
... ... @@ -2537,7 +2538,7 @@
2537 2538 "gherkin",
2538 2539 "parser"
2539 2540 ],
2540   - "time": "2016-10-30T11:50:56+00:00"
  2541 + "time": "2016-10-30 11:50:56"
2541 2542 },
2542 2543 {
2543 2544 "name": "bower-asset/typeahead.js",
... ... @@ -2568,16 +2569,16 @@
2568 2569 },
2569 2570 {
2570 2571 "name": "codeception/base",
2571   - "version": "2.3.3",
  2572 + "version": "2.3.4",
2572 2573 "source": {
2573 2574 "type": "git",
2574 2575 "url": "https://github.com/Codeception/base.git",
2575   - "reference": "6724500be5f890b086440a7f40941565b313b3d1"
  2576 + "reference": "c146cf4888f5789d9dbd35d6204e2aa7aa2e94e9"
2576 2577 },
2577 2578 "dist": {
2578 2579 "type": "zip",
2579   - "url": "https://api.github.com/repos/Codeception/base/zipball/6724500be5f890b086440a7f40941565b313b3d1",
2580   - "reference": "6724500be5f890b086440a7f40941565b313b3d1",
  2580 + "url": "https://api.github.com/repos/Codeception/base/zipball/c146cf4888f5789d9dbd35d6204e2aa7aa2e94e9",
  2581 + "reference": "c146cf4888f5789d9dbd35d6204e2aa7aa2e94e9",
2581 2582 "shasum": ""
2582 2583 },
2583 2584 "require": {
... ... @@ -2612,6 +2613,7 @@
2612 2613 "php-amqplib/php-amqplib": "~2.4",
2613 2614 "predis/predis": "^1.0",
2614 2615 "squizlabs/php_codesniffer": "~2.0",
  2616 + "symfony/process": ">=2.7 <4.0",
2615 2617 "vlucas/phpdotenv": "^2.4.0"
2616 2618 },
2617 2619 "suggest": {
... ... @@ -2656,7 +2658,7 @@
2656 2658 "functional testing",
2657 2659 "unit testing"
2658 2660 ],
2659   - "time": "2017-06-02T00:30:24+00:00"
  2661 + "time": "2017-07-10 20:30:59"
2660 2662 },
2661 2663 {
2662 2664 "name": "codeception/verify",
... ... @@ -2692,7 +2694,7 @@
2692 2694 }
2693 2695 ],
2694 2696 "description": "BDD assertion library for PHPUnit",
2695   - "time": "2017-01-09T10:58:51+00:00"
  2697 + "time": "2017-01-09 10:58:51"
2696 2698 },
2697 2699 {
2698 2700 "name": "doctrine/instantiator",
... ... @@ -2746,7 +2748,7 @@
2746 2748 "constructor",
2747 2749 "instantiate"
2748 2750 ],
2749   - "time": "2015-06-14T21:17:01+00:00"
  2751 + "time": "2015-06-14 21:17:01"
2750 2752 },
2751 2753 {
2752 2754 "name": "fzaninotto/faker",
... ... @@ -2794,7 +2796,7 @@
2794 2796 "faker",
2795 2797 "fixtures"
2796 2798 ],
2797   - "time": "2016-04-29T12:21:54+00:00"
  2799 + "time": "2016-04-29 12:21:54"
2798 2800 },
2799 2801 {
2800 2802 "name": "myclabs/deep-copy",
... ... @@ -2836,7 +2838,7 @@
2836 2838 "object",
2837 2839 "object graph"
2838 2840 ],
2839   - "time": "2017-04-12T18:52:22+00:00"
  2841 + "time": "2017-04-12 18:52:22"
2840 2842 },
2841 2843 {
2842 2844 "name": "phar-io/manifest",
... ... @@ -2891,7 +2893,7 @@
2891 2893 }
2892 2894 ],
2893 2895 "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
2894   - "time": "2017-03-05T18:14:27+00:00"
  2896 + "time": "2017-03-05 18:14:27"
2895 2897 },
2896 2898 {
2897 2899 "name": "phar-io/version",
... ... @@ -2938,7 +2940,7 @@
2938 2940 }
2939 2941 ],
2940 2942 "description": "Library for handling version information and constraints",
2941   - "time": "2017-03-05T17:38:23+00:00"
  2943 + "time": "2017-03-05 17:38:23"
2942 2944 },
2943 2945 {
2944 2946 "name": "phpdocumentor/reflection-common",
... ... @@ -2992,26 +2994,26 @@
2992 2994 "reflection",
2993 2995 "static analysis"
2994 2996 ],
2995   - "time": "2015-12-27T11:43:31+00:00"
  2997 + "time": "2015-12-27 11:43:31"
2996 2998 },
2997 2999 {
2998 3000 "name": "phpdocumentor/reflection-docblock",
2999   - "version": "3.1.1",
  3001 + "version": "3.2.0",
3000 3002 "source": {
3001 3003 "type": "git",
3002 3004 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
3003   - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e"
  3005 + "reference": "46f7e8bb075036c92695b15a1ddb6971c751e585"
3004 3006 },
3005 3007 "dist": {
3006 3008 "type": "zip",
3007   - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e",
3008   - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e",
  3009 + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/46f7e8bb075036c92695b15a1ddb6971c751e585",
  3010 + "reference": "46f7e8bb075036c92695b15a1ddb6971c751e585",
3009 3011 "shasum": ""
3010 3012 },
3011 3013 "require": {
3012 3014 "php": ">=5.5",
3013 3015 "phpdocumentor/reflection-common": "^1.0@dev",
3014   - "phpdocumentor/type-resolver": "^0.2.0",
  3016 + "phpdocumentor/type-resolver": "^0.4.0",
3015 3017 "webmozart/assert": "^1.0"
3016 3018 },
3017 3019 "require-dev": {
... ... @@ -3037,24 +3039,24 @@
3037 3039 }
3038 3040 ],
3039 3041 "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
3040   - "time": "2016-09-30T07:12:33+00:00"
  3042 + "time": "2017-07-15 11:38:20"
3041 3043 },
3042 3044 {
3043 3045 "name": "phpdocumentor/type-resolver",
3044   - "version": "0.2.1",
  3046 + "version": "0.4.0",
3045 3047 "source": {
3046 3048 "type": "git",
3047 3049 "url": "https://github.com/phpDocumentor/TypeResolver.git",
3048   - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb"
  3050 + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
3049 3051 },
3050 3052 "dist": {
3051 3053 "type": "zip",
3052   - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb",
3053   - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb",
  3054 + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
  3055 + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
3054 3056 "shasum": ""
3055 3057 },
3056 3058 "require": {
3057   - "php": ">=5.5",
  3059 + "php": "^5.5 || ^7.0",
3058 3060 "phpdocumentor/reflection-common": "^1.0"
3059 3061 },
3060 3062 "require-dev": {
... ... @@ -3084,7 +3086,7 @@
3084 3086 "email": "me@mikevanriel.com"
3085 3087 }
3086 3088 ],
3087   - "time": "2016-11-25T06:54:22+00:00"
  3089 + "time": "2017-07-14 14:27:02"
3088 3090 },
3089 3091 {
3090 3092 "name": "phpspec/php-diff",
... ... @@ -3122,7 +3124,7 @@
3122 3124 }
3123 3125 ],
3124 3126 "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).",
3125   - "time": "2016-04-07T12:29:16+00:00"
  3127 + "time": "2016-04-07 12:29:16"
3126 3128 },
3127 3129 {
3128 3130 "name": "phpspec/prophecy",
... ... @@ -3185,7 +3187,7 @@
3185 3187 "spy",
3186 3188 "stub"
3187 3189 ],
3188   - "time": "2017-03-02T20:05:34+00:00"
  3190 + "time": "2017-03-02 20:05:34"
3189 3191 },
3190 3192 {
3191 3193 "name": "phpunit/php-code-coverage",
... ... @@ -3249,7 +3251,7 @@
3249 3251 "testing",
3250 3252 "xunit"
3251 3253 ],
3252   - "time": "2017-04-21T08:03:57+00:00"
  3254 + "time": "2017-04-21 08:03:57"
3253 3255 },
3254 3256 {
3255 3257 "name": "phpunit/php-file-iterator",
... ... @@ -3296,7 +3298,7 @@
3296 3298 "filesystem",
3297 3299 "iterator"
3298 3300 ],
3299   - "time": "2016-10-03T07:40:28+00:00"
  3301 + "time": "2016-10-03 07:40:28"
3300 3302 },
3301 3303 {
3302 3304 "name": "phpunit/php-text-template",
... ... @@ -3337,7 +3339,7 @@
3337 3339 "keywords": [
3338 3340 "template"
3339 3341 ],
3340   - "time": "2015-06-21T13:50:34+00:00"
  3342 + "time": "2015-06-21 13:50:34"
3341 3343 },
3342 3344 {
3343 3345 "name": "phpunit/php-timer",
... ... @@ -3386,7 +3388,7 @@
3386 3388 "keywords": [
3387 3389 "timer"
3388 3390 ],
3389   - "time": "2017-02-26T11:10:40+00:00"
  3391 + "time": "2017-02-26 11:10:40"
3390 3392 },
3391 3393 {
3392 3394 "name": "phpunit/php-token-stream",
... ... @@ -3435,7 +3437,7 @@
3435 3437 "keywords": [
3436 3438 "tokenizer"
3437 3439 ],
3438   - "time": "2017-02-27T10:12:30+00:00"
  3440 + "time": "2017-02-27 10:12:30"
3439 3441 },
3440 3442 {
3441 3443 "name": "phpunit/phpunit",
... ... @@ -3519,7 +3521,7 @@
3519 3521 "testing",
3520 3522 "xunit"
3521 3523 ],
3522   - "time": "2017-07-03T15:54:24+00:00"
  3524 + "time": "2017-07-03 15:54:24"
3523 3525 },
3524 3526 {
3525 3527 "name": "phpunit/phpunit-mock-objects",
... ... @@ -3578,7 +3580,7 @@
3578 3580 "mock",
3579 3581 "xunit"
3580 3582 ],
3581   - "time": "2017-06-30T08:15:21+00:00"
  3583 + "time": "2017-06-30 08:15:21"
3582 3584 },
3583 3585 {
3584 3586 "name": "sebastian/code-unit-reverse-lookup",
... ... @@ -3623,7 +3625,7 @@
3623 3625 ],
3624 3626 "description": "Looks up which function or method a line of code belongs to",
3625 3627 "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
3626   - "time": "2017-03-04T06:30:41+00:00"
  3628 + "time": "2017-03-04 06:30:41"
3627 3629 },
3628 3630 {
3629 3631 "name": "sebastian/comparator",
... ... @@ -3687,7 +3689,7 @@
3687 3689 "compare",
3688 3690 "equality"
3689 3691 ],
3690   - "time": "2017-03-03T06:26:08+00:00"
  3692 + "time": "2017-03-03 06:26:08"
3691 3693 },
3692 3694 {
3693 3695 "name": "sebastian/diff",
... ... @@ -3739,7 +3741,7 @@
3739 3741 "keywords": [
3740 3742 "diff"
3741 3743 ],
3742   - "time": "2017-05-22T07:24:03+00:00"
  3744 + "time": "2017-05-22 07:24:03"
3743 3745 },
3744 3746 {
3745 3747 "name": "sebastian/environment",
... ... @@ -3789,7 +3791,7 @@
3789 3791 "environment",
3790 3792 "hhvm"
3791 3793 ],
3792   - "time": "2017-07-01T08:51:00+00:00"
  3794 + "time": "2017-07-01 08:51:00"
3793 3795 },
3794 3796 {
3795 3797 "name": "sebastian/exporter",
... ... @@ -3856,7 +3858,7 @@
3856 3858 "export",
3857 3859 "exporter"
3858 3860 ],
3859   - "time": "2017-04-03T13:19:02+00:00"
  3861 + "time": "2017-04-03 13:19:02"
3860 3862 },
3861 3863 {
3862 3864 "name": "sebastian/global-state",
... ... @@ -3907,7 +3909,7 @@
3907 3909 "keywords": [
3908 3910 "global state"
3909 3911 ],
3910   - "time": "2017-04-27T15:39:26+00:00"
  3912 + "time": "2017-04-27 15:39:26"
3911 3913 },
3912 3914 {
3913 3915 "name": "sebastian/object-enumerator",
... ... @@ -3954,7 +3956,7 @@
3954 3956 ],
3955 3957 "description": "Traverses array structures and object graphs to enumerate all referenced objects",
3956 3958 "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
3957   - "time": "2017-03-12T15:17:29+00:00"
  3959 + "time": "2017-03-12 15:17:29"
3958 3960 },
3959 3961 {
3960 3962 "name": "sebastian/object-reflector",
... ... @@ -3999,7 +4001,7 @@
3999 4001 ],
4000 4002 "description": "Allows reflection of object attributes, including inherited and non-public ones",
4001 4003 "homepage": "https://github.com/sebastianbergmann/object-reflector/",
4002   - "time": "2017-03-29T09:07:27+00:00"
  4004 + "time": "2017-03-29 09:07:27"
4003 4005 },
4004 4006 {
4005 4007 "name": "sebastian/recursion-context",
... ... @@ -4052,7 +4054,7 @@
4052 4054 ],
4053 4055 "description": "Provides functionality to recursively process PHP variables",
4054 4056 "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
4055   - "time": "2017-03-03T06:23:57+00:00"
  4057 + "time": "2017-03-03 06:23:57"
4056 4058 },
4057 4059 {
4058 4060 "name": "sebastian/resource-operations",
... ... @@ -4094,7 +4096,7 @@
4094 4096 ],
4095 4097 "description": "Provides a list of PHP built-in functions that operate on resources",
4096 4098 "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
4097   - "time": "2015-07-28T20:34:47+00:00"
  4099 + "time": "2015-07-28 20:34:47"
4098 4100 },
4099 4101 {
4100 4102 "name": "sebastian/version",
... ... @@ -4137,7 +4139,7 @@
4137 4139 ],
4138 4140 "description": "Library that helps with managing the version number of Git-hosted PHP projects",
4139 4141 "homepage": "https://github.com/sebastianbergmann/version",
4140   - "time": "2016-10-03T07:35:21+00:00"
  4142 + "time": "2016-10-03 07:35:21"
4141 4143 },
4142 4144 {
4143 4145 "name": "stecman/symfony-console-completion",
... ... @@ -4182,20 +4184,20 @@
4182 4184 }
4183 4185 ],
4184 4186 "description": "Automatic BASH completion for Symfony Console Component based applications.",
4185   - "time": "2016-02-24T05:08:54+00:00"
  4187 + "time": "2016-02-24 05:08:54"
4186 4188 },
4187 4189 {
4188 4190 "name": "symfony/browser-kit",
4189   - "version": "v3.3.4",
  4191 + "version": "v3.3.5",
4190 4192 "source": {
4191 4193 "type": "git",
4192 4194 "url": "https://github.com/symfony/browser-kit.git",
4193   - "reference": "3a4435e79a8401746e8525e98039199d0924b4e5"
  4195 + "reference": "8079a6b3668ef15cdbf73a4c7d31081abb8bb5f0"
4194 4196 },
4195 4197 "dist": {
4196 4198 "type": "zip",
4197   - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/3a4435e79a8401746e8525e98039199d0924b4e5",
4198   - "reference": "3a4435e79a8401746e8525e98039199d0924b4e5",
  4199 + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/8079a6b3668ef15cdbf73a4c7d31081abb8bb5f0",
  4200 + "reference": "8079a6b3668ef15cdbf73a4c7d31081abb8bb5f0",
4199 4201 "shasum": ""
4200 4202 },
4201 4203 "require": {
... ... @@ -4239,11 +4241,11 @@
4239 4241 ],
4240 4242 "description": "Symfony BrowserKit Component",
4241 4243 "homepage": "https://symfony.com",
4242   - "time": "2017-06-24T09:29:48+00:00"
  4244 + "time": "2017-07-12 13:03:20"
4243 4245 },
4244 4246 {
4245 4247 "name": "symfony/console",
4246   - "version": "v3.3.4",
  4248 + "version": "v3.3.5",
4247 4249 "source": {
4248 4250 "type": "git",
4249 4251 "url": "https://github.com/symfony/console.git",
... ... @@ -4308,11 +4310,11 @@
4308 4310 ],
4309 4311 "description": "Symfony Console Component",
4310 4312 "homepage": "https://symfony.com",
4311   - "time": "2017-07-03T13:19:36+00:00"
  4313 + "time": "2017-07-03 13:19:36"
4312 4314 },
4313 4315 {
4314 4316 "name": "symfony/css-selector",
4315   - "version": "v3.3.4",
  4317 + "version": "v3.3.5",
4316 4318 "source": {
4317 4319 "type": "git",
4318 4320 "url": "https://github.com/symfony/css-selector.git",
... ... @@ -4361,11 +4363,11 @@
4361 4363 ],
4362 4364 "description": "Symfony CssSelector Component",
4363 4365 "homepage": "https://symfony.com",
4364   - "time": "2017-05-01T15:01:29+00:00"
  4366 + "time": "2017-05-01 15:01:29"
4365 4367 },
4366 4368 {
4367 4369 "name": "symfony/debug",
4368   - "version": "v3.3.4",
  4370 + "version": "v3.3.5",
4369 4371 "source": {
4370 4372 "type": "git",
4371 4373 "url": "https://github.com/symfony/debug.git",
... ... @@ -4417,11 +4419,11 @@
4417 4419 ],
4418 4420 "description": "Symfony Debug Component",
4419 4421 "homepage": "https://symfony.com",
4420   - "time": "2017-07-05T13:02:37+00:00"
  4422 + "time": "2017-07-05 13:02:37"
4421 4423 },
4422 4424 {
4423 4425 "name": "symfony/dom-crawler",
4424   - "version": "v3.3.4",
  4426 + "version": "v3.3.5",
4425 4427 "source": {
4426 4428 "type": "git",
4427 4429 "url": "https://github.com/symfony/dom-crawler.git",
... ... @@ -4473,11 +4475,11 @@
4473 4475 ],
4474 4476 "description": "Symfony DomCrawler Component",
4475 4477 "homepage": "https://symfony.com",
4476   - "time": "2017-05-25T23:10:31+00:00"
  4478 + "time": "2017-05-25 23:10:31"
4477 4479 },
4478 4480 {
4479 4481 "name": "symfony/event-dispatcher",
4480   - "version": "v3.3.4",
  4482 + "version": "v3.3.5",
4481 4483 "source": {
4482 4484 "type": "git",
4483 4485 "url": "https://github.com/symfony/event-dispatcher.git",
... ... @@ -4536,11 +4538,11 @@
4536 4538 ],
4537 4539 "description": "Symfony EventDispatcher Component",
4538 4540 "homepage": "https://symfony.com",
4539   - "time": "2017-06-09T14:53:08+00:00"
  4541 + "time": "2017-06-09 14:53:08"
4540 4542 },
4541 4543 {
4542 4544 "name": "symfony/finder",
4543   - "version": "v3.3.4",
  4545 + "version": "v3.3.5",
4544 4546 "source": {
4545 4547 "type": "git",
4546 4548 "url": "https://github.com/symfony/finder.git",
... ... @@ -4585,7 +4587,7 @@
4585 4587 ],
4586 4588 "description": "Symfony Finder Component",
4587 4589 "homepage": "https://symfony.com",
4588   - "time": "2017-06-01T21:01:25+00:00"
  4590 + "time": "2017-06-01 21:01:25"
4589 4591 },
4590 4592 {
4591 4593 "name": "symfony/polyfill-mbstring",
... ... @@ -4644,11 +4646,11 @@
4644 4646 "portable",
4645 4647 "shim"
4646 4648 ],
4647   - "time": "2017-06-09T14:24:12+00:00"
  4649 + "time": "2017-06-09 14:24:12"
4648 4650 },
4649 4651 {
4650 4652 "name": "symfony/yaml",
4651   - "version": "v3.3.4",
  4653 + "version": "v3.3.5",
4652 4654 "source": {
4653 4655 "type": "git",
4654 4656 "url": "https://github.com/symfony/yaml.git",
... ... @@ -4699,7 +4701,7 @@
4699 4701 ],
4700 4702 "description": "Symfony Yaml Component",
4701 4703 "homepage": "https://symfony.com",
4702   - "time": "2017-06-15T12:58:50+00:00"
  4704 + "time": "2017-06-15 12:58:50"
4703 4705 },
4704 4706 {
4705 4707 "name": "theseer/tokenizer",
... ... @@ -4739,7 +4741,7 @@
4739 4741 }
4740 4742 ],
4741 4743 "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
4742   - "time": "2017-04-07T12:08:54+00:00"
  4744 + "time": "2017-04-07 12:08:54"
4743 4745 },
4744 4746 {
4745 4747 "name": "webmozart/assert",
... ... @@ -4789,7 +4791,7 @@
4789 4791 "check",
4790 4792 "validate"
4791 4793 ],
4792   - "time": "2016-11-23T20:04:58+00:00"
  4794 + "time": "2016-11-23 20:04:58"
4793 4795 },
4794 4796 {
4795 4797 "name": "yiisoft/yii2-debug",
... ... @@ -4836,7 +4838,7 @@
4836 4838 "debugger",
4837 4839 "yii2"
4838 4840 ],
4839   - "time": "2017-02-21T10:30:50+00:00"
  4841 + "time": "2017-02-21 10:30:50"
4840 4842 },
4841 4843 {
4842 4844 "name": "yiisoft/yii2-faker",
... ... @@ -4883,7 +4885,7 @@
4883 4885 "faker",
4884 4886 "yii2"
4885 4887 ],
4886   - "time": "2015-03-01T06:22:44+00:00"
  4888 + "time": "2015-03-01 06:22:44"
4887 4889 },
4888 4890 {
4889 4891 "name": "yiisoft/yii2-gii",
... ... @@ -4936,7 +4938,7 @@
4936 4938 "gii",
4937 4939 "yii2"
4938 4940 ],
4939   - "time": "2016-03-18T14:09:46+00:00"
  4941 + "time": "2016-03-18 14:09:46"
4940 4942 }
4941 4943 ],
4942 4944 "aliases": [],
... ...
frontend/controllers/PageController.php
... ... @@ -43,6 +43,7 @@
43 43 [
44 44 'model' => $model,
45 45 'pages' => $pages,
  46 + 'images' => $model->getImages(),
46 47 ]
47 48 );
48 49 }
... ...
frontend/controllers/SiteController.php
... ... @@ -5,6 +5,7 @@
5 5 use common\models\Order;
6 6 use common\models\Settings;
7 7 use Yii;
  8 + use yii\swiftmailer\Mailer;
8 9 use yii\web\BadRequestHttpException;
9 10 use yii\web\Controller;
10 11 use yii\filters\VerbFilter;
... ... @@ -102,11 +103,34 @@
102 103 public function actionFeedback()
103 104 {
104 105 Yii::$app->response->format = Response::FORMAT_JSON;
  106 +
  107 + /**
  108 + * @var Mailer $mailer
  109 + */
  110 + $mailer = \Yii::$app->get('smtpmailer');
  111 + $settings = Settings::getInstance();
  112 +
105 113 if (empty( Yii::$app->request->post() )) {
106 114 throw new BadRequestHttpException();
107 115 } else {
108 116 $model = new Order();
109 117 if ($model->load(Yii::$app->request->post()) && $model->save()) {
  118 +
  119 + try {
  120 + $mailer->compose(
  121 + 'feedback',
  122 + [
  123 + 'model' => $model,
  124 + ]
  125 + )
  126 + ->setFrom('artbox@domain.com')
  127 + ->setTo($settings->email)
  128 + ->setSubject(\Yii::t('app', 'Feedback'))
  129 + ->send();
  130 + } catch (\Error $error) {
  131 + // Do something on error
  132 + }
  133 +
110 134 return [
111 135 'success' => true,
112 136 'message' => 'Success message',
... ...
frontend/views/layouts/main.php
... ... @@ -9,13 +9,15 @@
9 9 use artbox\core\helpers\ImageHelper;
10 10 use artbox\core\models\Feedback;
11 11 use artbox\core\models\Page;
  12 + use artbox\core\models\PageCategory;
12 13 use artbox\core\models\User;
13 14 use common\models\Settings;
14 15 use frontend\assets\AppAsset;
15   - use noam148\imagemanager\models\ImageManager;
  16 + use artbox\core\components\imagemanager\models\ImageManager;
16 17 use yii\bootstrap\ActiveForm;
17 18 use yii\bootstrap\Nav;
18 19 use yii\bootstrap\Html;
  20 + use yii\db\ActiveQuery;
19 21 use yii\helpers\Json;
20 22 use yii\helpers\Url;
21 23 use yii\web\View;
... ... @@ -30,12 +32,22 @@
30 32 $default_controller = Yii::$app->defaultRoute;
31 33 $isHome = ( ( $controller->id === $default_controller ) && ( $controller->action->id === $controller->defaultAction ) ) ? true : false;
32 34 /**
33   - * @var Page[] $pages
  35 + * @var PageCategory[] $pageCategories
34 36 */
35   - $pages = Page::find()
36   - ->where([ 'in_menu' => true ])
37   - ->with('lang.alias')
38   - ->all();
  37 + $pageCategories = PageCategory::find()
  38 + ->with(
  39 + [
  40 + 'lang',
  41 + 'pages' => function (ActiveQuery $query) {
  42 + $query->with('lang.alias')
  43 + ->where(['in_menu' => true])
  44 + ->orderBy([ 'sort' => SORT_ASC ]);
  45 + },
  46 + ]
  47 + )
  48 + ->where([ 'status' => true ])
  49 + ->orderBy([ 'sort' => SORT_ASC ])
  50 + ->all();
39 51 $logo = null;
40 52 if ($settings->logo) {
41 53 $logo_img = ImageManager::findOne($settings->logo);
... ... @@ -260,41 +272,38 @@ _________________________________________________________ --&gt;
260 272  
261 273 <div class="navbar-collapse collapse" id="navigation">
262 274 <?php
263   - $pagesLinks = [];
264   - foreach ($pages as $page) {
265   - $route = [
266   - 'page/view',
267   - 'id' => $page->id,
268   - ];
269   - if (!empty($page->lang->alias) && !empty($page->lang->alias->route)) {
270   - $route = Json::decode($page->lang->alias->route);
  275 + $items = [];
  276 + $items[] = [
  277 + 'label' => \Yii::t('app', 'Home'),
  278 + 'url' => [ 'site/index' ],
  279 + ];
  280 + foreach ($pageCategories as $category) {
  281 + if (empty($category->pages)) {
  282 + continue;
271 283 }
272   - $pagesLinks[] = [
273   - 'label' => $page->lang->title,
274   - 'url' => $route,
  284 + $pages = [];
  285 + foreach ($category->pages as $page) {
  286 + $pages[] = [
  287 + 'label' => $page->lang->title,
  288 + 'url' => Url::to(['page/view','alias' => $page->lang->alias]),
  289 + ];
  290 + }
  291 + $items[] = [
  292 + 'label' => $category->lang->title,
  293 + 'items' => $pages,
275 294 ];
276 295 }
  296 + $items[] = [
  297 + 'label' => \Yii::t('app', 'Contatcs'),
  298 + 'url' => [ 'site/contact' ],
  299 + ];
  300 + $items[] = [
  301 + 'label' => \Yii::t('app', 'About'),
  302 + 'url' => [ 'site/about' ],
  303 + ];
277 304 echo Nav::widget(
278 305 [
279   - 'items' => [
280   - [
281   - 'label' => \Yii::t('app', 'Главная'),
282   - 'url' => [ 'site/index' ],
283   - ],
284   - [
285   - 'label' => \Yii::t('app', 'Наши предложения'),
286   - 'items' => $pagesLinks,
287   - 'visible' => count($pagesLinks),
288   - ],
289   - [
290   - 'label' => \Yii::t('app', 'Контакты'),
291   - 'url' => [ 'site/contact' ],
292   - ],
293   - [
294   - 'label' => \Yii::t('app', 'О нас'),
295   - 'url' => [ '/page/view', 'id' => 5 ],
296   - ],
297   - ],
  306 + 'items' => $items,
298 307 'options' => [
299 308 'class' => 'nav navbar-nav navbar-right',
300 309 ],
... ...
frontend/views/page/view.php
1 1 <?php
2 2 use artbox\core\components\SeoComponent;
  3 + use artbox\core\models\Image;
3 4 use artbox\core\models\Page;
4 5 use yii\helpers\Html;
5 6 use yii\web\View;
... ... @@ -9,77 +10,94 @@
9 10 * @var Page $model
10 11 * @var Page[] $pages
11 12 * @var SeoComponent $seo
  13 + * @var Image[] $images
12 14 */
13 15 $seo = \Yii::$app->get('seo');
14 16 $this->params[ 'breadcrumbs' ][] = $seo->title;
15 17 ?>
16 18  
17 19 <div id="content">
18   - <div class="container">
19   -
20   - <div class="row">
21   -
22   - <!-- *** LEFT COLUMN ***
23   - _________________________________________________________ -->
24   -
25   - <div class="col-md-9 clearfix">
26   - <section>
27   - <div id="text-page">
28   -
29   - <?= $model->lang->body ?>
30   -
31   - </div>
32   - </section>
33   -
34   - </div>
35   - <!-- /.col-md-9 -->
36   -
37   - <!-- *** LEFT COLUMN END *** -->
38   -
39   - <!-- *** RIGHT COLUMN ***
40   - _________________________________________________________ -->
41   -
42   - <div class="col-sm-3">
43   - <!-- *** PAGES MENU ***
44   - _________________________________________________________ -->
45   - <div class="panel panel-default sidebar-menu">
46   -
47   - <div class="panel-heading">
48   - <h3 class="panel-title">Наши предложения</h3>
49   - </div>
50   -
51   - <div class="panel-body">
52   - <ul class="nav nav-pills nav-stacked">
53   - <?php
54   - foreach ($pages as $page) {
55   - echo Html::tag(
56   - 'li',
57   - Html::a(
58   - $page->lang->title,
59   - [
60   - 'page/view',
61   - 'id' => $page->id,
62   - ]
63   - )
64   - );
65   - }
66   - ?>
67   - </ul>
68   -
  20 + <div class="container">
  21 +
  22 + <div class="row">
  23 +
  24 + <!-- *** LEFT COLUMN ***
  25 +_________________________________________________________ -->
  26 +
  27 + <div class="col-md-9 clearfix">
  28 +
  29 + <?php if (!empty($images)) { ?>
  30 + <section>
  31 + <div class="project owl-carousel">
  32 +
  33 + <?php foreach ($images as $image) { ?>
  34 + <div class="item">
  35 + <img class="img-responsive" src="<?= $image->getUrl() ?>" alt="">
69 36 </div>
70   - </div>
71   -
72   - <!-- *** PAGES MENU END *** -->
73   - </div>
74   - <!-- /.col-md-3 -->
75   -
76   - <!-- *** RIGHT COLUMN END *** -->
77   -
  37 + <?php } ?>
  38 +
  39 + </div>
  40 + <!-- /.project owl-slider -->
  41 + </section>
  42 + <?php } ?>
78 43  
  44 + <section>
  45 + <div id="text-page">
  46 +
  47 + <?= $model->lang->body ?>
  48 +
  49 + </div>
  50 + </section>
  51 +
  52 + </div>
  53 + <!-- /.col-md-9 -->
  54 +
  55 + <!-- *** LEFT COLUMN END *** -->
  56 +
  57 + <!-- *** RIGHT COLUMN ***
  58 + _________________________________________________________ -->
  59 +
  60 + <div class="col-sm-3">
  61 + <!-- *** PAGES MENU ***
  62 +_________________________________________________________ -->
  63 + <div class="panel panel-default sidebar-menu">
  64 +
  65 + <div class="panel-heading">
  66 + <h3 class="panel-title">Наши предложения</h3>
  67 + </div>
  68 +
  69 + <div class="panel-body">
  70 + <ul class="nav nav-pills nav-stacked">
  71 + <?php
  72 + foreach ($pages as $page) {
  73 + echo Html::tag(
  74 + 'li',
  75 + Html::a(
  76 + $page->lang->title,
  77 + [
  78 + 'page/view',
  79 + 'id' => $page->id,
  80 + ]
  81 + )
  82 + );
  83 + }
  84 + ?>
  85 + </ul>
  86 +
  87 + </div>
79 88 </div>
80   - <!-- /.row -->
  89 +
  90 + <!-- *** PAGES MENU END *** -->
  91 + </div>
  92 + <!-- /.col-md-3 -->
  93 +
  94 + <!-- *** RIGHT COLUMN END *** -->
  95 +
81 96  
82 97 </div>
83   - <!-- /.container -->
  98 + <!-- /.row -->
  99 +
  100 + </div>
  101 + <!-- /.container -->
84 102 </div>
85 103 <!-- /#content -->
... ...