Commit fed9ec18574e8b21df6deb23d6f074f837121c84
1 parent
c6435b1f
image size
Showing
10 changed files
with
254 additions
and
100 deletions
Show diff stats
.htaccess
@@ -81,21 +81,21 @@ AddDefaultCharset utf-8 | @@ -81,21 +81,21 @@ AddDefaultCharset utf-8 | ||
81 | 81 | ||
82 | 82 | ||
83 | # кеширование в браузере на стороне пользователя | 83 | # кеширование в браузере на стороне пользователя |
84 | -<IfModule mod_expires.c> | ||
85 | -ExpiresActive On | ||
86 | -ExpiresDefault "access 7 days" | ||
87 | -ExpiresByType application/javascript "access plus 1 year" | ||
88 | -ExpiresByType text/javascript "access plus 1 year" | ||
89 | -ExpiresByType text/css "access plus 1 year" | ||
90 | -ExpiresByType text/html "access plus 7 day" | ||
91 | -ExpiresByType text/x-javascript "access 1 year" | ||
92 | -ExpiresByType image/gif "access plus 1 year" | ||
93 | -ExpiresByType image/jpeg "access plus 1 year" | ||
94 | -ExpiresByType image/png "access plus 1 year" | ||
95 | -ExpiresByType image/jpg "access plus 1 year" | ||
96 | -ExpiresByType image/x-icon "access 1 year" | ||
97 | -ExpiresByType application/x-shockwave-flash "access 1 year" | ||
98 | -</IfModule> | 84 | +#<IfModule mod_expires.c> |
85 | +#ExpiresActive On | ||
86 | +#ExpiresDefault "access 7 days" | ||
87 | +#ExpiresByType application/javascript "access plus 1 year" | ||
88 | +#ExpiresByType text/javascript "access plus 1 year" | ||
89 | +#ExpiresByType text/css "access plus 1 year" | ||
90 | +#ExpiresByType text/html "access plus 7 day" | ||
91 | +#ExpiresByType text/x-javascript "access 1 year" | ||
92 | +#ExpiresByType image/gif "access plus 1 year" | ||
93 | +#ExpiresByType image/jpeg "access plus 1 year" | ||
94 | +#ExpiresByType image/png "access plus 1 year" | ||
95 | +#ExpiresByType image/jpg "access plus 1 year" | ||
96 | +#ExpiresByType image/x-icon "access 1 year" | ||
97 | +#ExpiresByType application/x-shockwave-flash "access 1 year" | ||
98 | +#</IfModule> | ||
99 | 99 | ||
100 | <IfModule mod_deflate.c> | 100 | <IfModule mod_deflate.c> |
101 | AddOutputFilterByType DEFLATE text/plain | 101 | AddOutputFilterByType DEFLATE text/plain |
@@ -117,25 +117,25 @@ RewriteCond %{HTTP:Accept-encoding} gzip | @@ -117,25 +117,25 @@ RewriteCond %{HTTP:Accept-encoding} gzip | ||
117 | RewriteCond %{REQUEST_FILENAME}.gz -f | 117 | RewriteCond %{REQUEST_FILENAME}.gz -f |
118 | RewriteRule ^(.*)$ $1.gz [QSA,L] | 118 | RewriteRule ^(.*)$ $1.gz [QSA,L] |
119 | </IfModule> | 119 | </IfModule> |
120 | -# Cache-Control | ||
121 | -<ifModule mod_headers.c> | ||
122 | -# 30 дней | ||
123 | -<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> | ||
124 | -Header set Cache-Control "max-age=2592000, public" | ||
125 | -</filesMatch> | ||
126 | -# 30 дней | ||
127 | -<filesMatch "\.(css|js)$"> | ||
128 | -Header set Cache-Control "max-age=2592000, public" | ||
129 | -</filesMatch> | ||
130 | -# 2 дня | ||
131 | -<filesMatch "\.(xml|txt)$"> | ||
132 | -Header set Cache-Control "max-age=172800, public, must-revalidate" | ||
133 | -</filesMatch> | ||
134 | -# 1 день | ||
135 | -<filesMatch "\.(html|htm|php)$"> | ||
136 | -Header set Cache-Control "max-age=172800, private, must-revalidate" | ||
137 | -</filesMatch> | ||
138 | -</ifModule> | 120 | +## Cache-Control |
121 | +#<ifModule mod_headers.c> | ||
122 | +## 30 дней | ||
123 | +#<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> | ||
124 | +#Header set Cache-Control "max-age=2592000, public" | ||
125 | +#</filesMatch> | ||
126 | +## 30 дней | ||
127 | +#<filesMatch "\.(css|js)$"> | ||
128 | +#Header set Cache-Control "max-age=2592000, public" | ||
129 | +#</filesMatch> | ||
130 | +## 2 дня | ||
131 | +#<filesMatch "\.(xml|txt)$"> | ||
132 | +#Header set Cache-Control "max-age=172800, public, must-revalidate" | ||
133 | +#</filesMatch> | ||
134 | +## 1 день | ||
135 | +#<filesMatch "\.(html|htm|php)$"> | ||
136 | +#Header set Cache-Control "max-age=172800, private, must-revalidate" | ||
137 | +#</filesMatch> | ||
138 | +#</ifModule> | ||
139 | 139 | ||
140 | #Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE | 140 | #Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE |
141 | <IfModule mod_setenvif.c> | 141 | <IfModule mod_setenvif.c> |
backend/config/main.php
1 | <?php | 1 | <?php |
2 | -use developeruz\db_rbac\behaviors\AccessBehavior; | 2 | +use common\behaviors\ArtBoxAccessBehavior; |
3 | $params = array_merge( | 3 | $params = array_merge( |
4 | require(__DIR__ . '/../../common/config/params.php'), | 4 | require(__DIR__ . '/../../common/config/params.php'), |
5 | require(__DIR__ . '/../../common/config/params-local.php'), | 5 | require(__DIR__ . '/../../common/config/params-local.php'), |
@@ -40,7 +40,7 @@ return [ | @@ -40,7 +40,7 @@ return [ | ||
40 | 'controllerNamespace' => 'backend\controllers', | 40 | 'controllerNamespace' => 'backend\controllers', |
41 | 'bootstrap' => ['log'], | 41 | 'bootstrap' => ['log'], |
42 | 'as AccessBehavior' => [ | 42 | 'as AccessBehavior' => [ |
43 | - 'class' => AccessBehavior::className(), | 43 | + 'class' => ArtBoxAccessBehavior::className(), |
44 | 'rules' => | 44 | 'rules' => |
45 | [ | 45 | [ |
46 | 'permit/access' => | 46 | 'permit/access' => |
1 | +<?php | ||
2 | + | ||
3 | +namespace common\behaviors; | ||
4 | + | ||
5 | +use Yii; | ||
6 | +use yii\behaviors\AttributeBehavior; | ||
7 | +use yii\di\Instance; | ||
8 | +use yii\base\Module; | ||
9 | +use yii\web\User; | ||
10 | +use yii\web\ForbiddenHttpException; | ||
11 | + | ||
12 | +class ArtBoxAccessBehavior extends AttributeBehavior { | ||
13 | + | ||
14 | + public $rules=[]; | ||
15 | + | ||
16 | + private $_rules = []; | ||
17 | + | ||
18 | + public function events() | ||
19 | + { | ||
20 | + return [ | ||
21 | + Module::EVENT_BEFORE_ACTION => 'interception', | ||
22 | + ]; | ||
23 | + } | ||
24 | + | ||
25 | + public function interception($event) | ||
26 | + { | ||
27 | + if(!isset( Yii::$app->i18n->translations['db_rbac'])){ | ||
28 | + Yii::$app->i18n->translations['db_rbac'] = [ | ||
29 | + 'class' => 'yii\i18n\PhpMessageSource', | ||
30 | + 'sourceLanguage' => 'ru-Ru', | ||
31 | + 'basePath' => '@developeruz/db_rbac/messages', | ||
32 | + ]; | ||
33 | + } | ||
34 | + | ||
35 | + $route = Yii::$app->getRequest()->resolve(); | ||
36 | + | ||
37 | + //Проверяем права по конфигу | ||
38 | + $this->createRule(); | ||
39 | + $user = Instance::ensure(Yii::$app->user, User::className()); | ||
40 | + $request = Yii::$app->getRequest(); | ||
41 | + $action = $event->action; | ||
42 | + | ||
43 | + | ||
44 | + | ||
45 | + | ||
46 | + if(!$this->cheсkByRule($action, $user, $request)) | ||
47 | + { | ||
48 | + | ||
49 | + //И по AuthManager | ||
50 | + if(!$this->checkPermission($route)){ | ||
51 | + if ($user->getIsGuest()) { | ||
52 | + $user->loginRequired(); | ||
53 | + } else { | ||
54 | + throw new ForbiddenHttpException(Yii::t('db_rbac','Недостаточно прав')); | ||
55 | + } | ||
56 | + } | ||
57 | + | ||
58 | + } | ||
59 | + } | ||
60 | + | ||
61 | + protected function createRule() | ||
62 | + { | ||
63 | + | ||
64 | + foreach($this->rules as $controller => $rule) | ||
65 | + { | ||
66 | + | ||
67 | + foreach ($rule as $singleRule) { | ||
68 | + if (is_array($singleRule)) { | ||
69 | + $option = [ | ||
70 | + 'controllers' => [$controller], | ||
71 | + 'class' => 'yii\filters\AccessRule' | ||
72 | + ]; | ||
73 | + $this->_rules[] = Yii::createObject(array_merge($option, $singleRule)); | ||
74 | + | ||
75 | + } | ||
76 | + } | ||
77 | + } | ||
78 | + } | ||
79 | + | ||
80 | + protected function cheсkByRule($action, $user, $request) | ||
81 | + { | ||
82 | + | ||
83 | + foreach ($this->_rules as $rule) { | ||
84 | + | ||
85 | + if ($rule->allows($action, $user, $request)) | ||
86 | + return true; | ||
87 | + } | ||
88 | + return false; | ||
89 | + } | ||
90 | + | ||
91 | + protected function checkPermission($route) | ||
92 | + { | ||
93 | + //$route[0] - is the route, $route[1] - is the associated parameters | ||
94 | + | ||
95 | + $routePathTmp = explode('/', $route[0]); | ||
96 | + $routeVariant = array_shift($routePathTmp); | ||
97 | + if(Yii::$app->user->can($routeVariant, $route[1])) | ||
98 | + return true; | ||
99 | + | ||
100 | + foreach($routePathTmp as $routePart) | ||
101 | + { | ||
102 | + $routeVariant .= '/'.$routePart; | ||
103 | + | ||
104 | + if(Yii::$app->user->can($routeVariant, $route[1])) | ||
105 | + return true; | ||
106 | + } | ||
107 | + | ||
108 | + return false; | ||
109 | + } | ||
110 | + | ||
111 | +} | ||
0 | \ No newline at end of file | 112 | \ No newline at end of file |
common/components/Mailer.php deleted
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; | ||
10 | - public $text; | ||
11 | - public $subject; | ||
12 | - public $type; | ||
13 | - | ||
14 | - public function init(){ | ||
15 | - | ||
16 | - parent::init(); | ||
17 | - | ||
18 | - } | ||
19 | - | ||
20 | - public function run(){ | ||
21 | - | ||
22 | - $mail = new PHPMailer(); | ||
23 | - | ||
24 | - $mail->IsSMTP(); | ||
25 | - | ||
26 | - $mail->CharSet = 'UTF-8'; | ||
27 | - $mail->Username = "dockdep@gmail.com"; | ||
28 | - $mail->Password = "k0l0b04eg"; | ||
29 | - $mail->SetFrom('dockdep@gmail.com'); | ||
30 | - $mail->Subject = $this->subject; | ||
31 | - $mail->MsgHTML('test'); | ||
32 | - $address = "dockdep@gmail.com"; | ||
33 | - $mail->AddAddress($address); | ||
34 | - $mail->AddAddress($this->email); | ||
35 | - if(!$mail->send()) { | ||
36 | - | ||
37 | - \Yii::$app->getSession()->setFlash('error', 'Mailer Error: ' . $mail->ErrorInfo); | ||
38 | - return 'Mailer Error: ' . $mail->ErrorInfo; | ||
39 | - } else { | ||
40 | - | ||
41 | - \Yii::$app->getSession()->setFlash('success', 'Мастер-приемщик свяжется с вами в ближайшее время'); | ||
42 | - return 'Message has been sent'; | ||
43 | - } | ||
44 | - } | ||
45 | - | ||
46 | -} | ||
47 | - |
1 | +<?php | ||
2 | + | ||
3 | +namespace common\widgets; | ||
4 | + | ||
5 | +use yii\base\Widget; | ||
6 | + | ||
7 | +class Mailer extends Widget{ | ||
8 | + public $message; | ||
9 | + public $email; | ||
10 | + public $text; | ||
11 | + public $subject; | ||
12 | + public $type; | ||
13 | + | ||
14 | + public function init(){ | ||
15 | + | ||
16 | + parent::init(); | ||
17 | + | ||
18 | + } | ||
19 | + | ||
20 | + public function run(){ | ||
21 | + | ||
22 | +// $mail = new \PHPMailer(); | ||
23 | +// | ||
24 | +// $mail->IsSMTP(); | ||
25 | +// | ||
26 | +// $mail->CharSet = 'UTF-8'; | ||
27 | +// $mail->Username = "dockdep@gmail.com"; | ||
28 | +// $mail->Password = "k0l0b04eg@"; | ||
29 | +// $mail->SetFrom('dockdep@gmail.com'); | ||
30 | +// $mail->Subject = $this->subject; | ||
31 | +// $mail->MsgHTML('test'); | ||
32 | +// $address = "dockdep@gmail.com"; | ||
33 | +// $mail->AddAddress($address); | ||
34 | +// $mail->AddAddress($this->email); | ||
35 | +// if(!$mail->send()) { | ||
36 | +// | ||
37 | +// \Yii::$app->getSession()->setFlash('error', 'Mailer Error: ' . $mail->ErrorInfo); | ||
38 | +// return 'Mailer Error: ' . $mail->ErrorInfo; | ||
39 | +// } else { | ||
40 | +// | ||
41 | +// \Yii::$app->getSession()->setFlash('success', 'Мастер-приемщик свяжется с вами в ближайшее время'); | ||
42 | +// return 'Message has been sent'; | ||
43 | +// } | ||
44 | + } | ||
45 | + | ||
46 | +} | ||
47 | + |
composer.json
@@ -35,7 +35,6 @@ | @@ -35,7 +35,6 @@ | ||
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", | 37 | "phpmailer/phpmailer": "^5.2", |
38 | - "league/oauth2-client": "^1.3", | ||
39 | "kartik-v/yii2-grid": "@dev", | 38 | "kartik-v/yii2-grid": "@dev", |
40 | "kartik-v/yii2-mpdf": "@dev", | 39 | "kartik-v/yii2-mpdf": "@dev", |
41 | "kartik-v/yii2-widget-fileinput": "@dev", | 40 | "kartik-v/yii2-widget-fileinput": "@dev", |
frontend/controllers/BasketController.php
@@ -40,29 +40,36 @@ class BasketController extends Controller | @@ -40,29 +40,36 @@ class BasketController extends Controller | ||
40 | $body .= "\n\r"; | 40 | $body .= "\n\r"; |
41 | 41 | ||
42 | if ($modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { | 42 | if ($modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { |
43 | + $productV = $_POST['ProductVariant']; | ||
44 | + | ||
43 | foreach ($_POST['ProductVariant'] as $index=>$row) { | 45 | foreach ($_POST['ProductVariant'] as $index=>$row) { |
44 | - $modelOrdersProducts = new OrdersProducts(); | 46 | + $modelOrdersProducts = new OrdersProducts(); |
45 | $mod_id = $row['id']; | 47 | $mod_id = $row['id']; |
46 | unset($row['id']); | 48 | unset($row['id']); |
47 | - $data['OrdersProducts'] = $row; | 49 | + $data['OrdersProducts'] = $row; |
48 | $data['OrdersProducts']['mod_id'] = $mod_id; | 50 | $data['OrdersProducts']['mod_id'] = $mod_id; |
49 | - $data['OrdersProducts']['order_id'] = $modelOrder->id; | 51 | + $data['OrdersProducts']['order_id'] = $modelOrder->id; |
50 | 52 | ||
51 | - $modelOrdersProducts->load($data); | ||
52 | - $modelOrdersProducts->save(); | 53 | + $modelOrdersProducts->load($data); |
54 | + $modelOrdersProducts->save(); | ||
53 | } | 55 | } |
54 | if(!Yii::$app->user->id && !empty($modelOrder->email)){ | 56 | if(!Yii::$app->user->id && !empty($modelOrder->email)){ |
55 | - $modelUser = new Customer(); | ||
56 | - $modelUser->role = 'person'; | ||
57 | - $modelUser->username = $modelOrder->email; | ||
58 | - $modelUser->name = $modelOrder->name; | ||
59 | - $modelUser->phone = $modelOrder->phone; | ||
60 | - $modelUser->password = Yii::$app->getSecurity()->generateRandomString(10); | ||
61 | - $modelUser->group_id = 2; | ||
62 | - $modelUser->save(); | 57 | + $modelUser = new Customer(); |
58 | + $modelUser->role = 'person'; | ||
59 | + $modelUser->username = $modelOrder->email; | ||
60 | + $modelUser->name = $modelOrder->name; | ||
61 | + $modelUser->phone = $modelOrder->phone; | ||
62 | + $modelUser->password = Yii::$app->getSecurity()->generateRandomString(10); | ||
63 | + $modelUser->group_id = 2; | ||
64 | + $modelUser->save(); | ||
63 | } | 65 | } |
66 | + $order = clone $modelOrder; | ||
64 | $modelOrder->clearBasket(); | 67 | $modelOrder->clearBasket(); |
65 | - return Yii::$app->response->redirect(['basket/success']); | 68 | + |
69 | + return $this->render('success',[ | ||
70 | + 'order' => $order, | ||
71 | + 'variants' => $productV, | ||
72 | + ]); | ||
66 | } | 73 | } |
67 | } | 74 | } |
68 | 75 |
frontend/views/basket/success.php
1 | <?php | 1 | <?php |
2 | use yii\helpers\Url; | 2 | use yii\helpers\Url; |
3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
4 | +use yii\web\View; | ||
4 | use yii\widgets\Breadcrumbs; | 5 | use yii\widgets\Breadcrumbs; |
5 | use yii\widgets\ActiveForm; | 6 | use yii\widgets\ActiveForm; |
6 | 7 | ||
@@ -8,6 +9,29 @@ $this->title = 'Корзина'; | @@ -8,6 +9,29 @@ $this->title = 'Корзина'; | ||
8 | $this->registerMetaTag(['name' => 'description', 'content' => 'Корзина']); | 9 | $this->registerMetaTag(['name' => 'description', 'content' => 'Корзина']); |
9 | $this->registerMetaTag(['name' => 'keywords', 'content' => 'Корзина']); | 10 | $this->registerMetaTag(['name' => 'keywords', 'content' => 'Корзина']); |
10 | 11 | ||
12 | +if(isset($variants) && isset($order)){ | ||
13 | + $orderData = " | ||
14 | + ga('require', 'ecommerce'); | ||
15 | + ga('ecommerce:addTransaction', { | ||
16 | + 'id': $order->id, // где ID - транзакции, обязательно | ||
17 | + });"; | ||
18 | + | ||
19 | + foreach($variants as $index=>$row){ | ||
20 | + $orderData .= " | ||
21 | + ga('ecommerce:addItem', { | ||
22 | + 'id': {$row['id']}, // ID - транзакции, обязательно | ||
23 | + 'name': {$row['name']}, // Имя товара | ||
24 | + 'price': {$row['price']}, // Цена товара | ||
25 | + 'quantity': {$row['count']} // Количество | ||
26 | + }); | ||
27 | + ga('ecommerce:send');"; | ||
28 | + } | ||
29 | + | ||
30 | + $this->registerJs ($orderData, View::POS_HEAD); | ||
31 | + | ||
32 | +} | ||
33 | + | ||
34 | + | ||
11 | ?> | 35 | ?> |
12 | <nav class="bread-crumbs"> | 36 | <nav class="bread-crumbs"> |
13 | <?= Breadcrumbs::widget([ | 37 | <?= Breadcrumbs::widget([ |
frontend/views/layouts/main.php
@@ -64,6 +64,16 @@ $this->registerJsFile (Yii::$app->request->baseUrl . '/js/fix_height.js', ['posi | @@ -64,6 +64,16 @@ $this->registerJsFile (Yii::$app->request->baseUrl . '/js/fix_height.js', ['posi | ||
64 | }); | 64 | }); |
65 | ", View::POS_READY); | 65 | ", View::POS_READY); |
66 | 66 | ||
67 | +$this->registerJs(" | ||
68 | +(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
69 | + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
70 | +m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
71 | +})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | ||
72 | + | ||
73 | +ga('create', 'UA-75674711-1', 'auto'); | ||
74 | +ga('send', 'pageview'); | ||
75 | + ", View::POS_BEGIN); | ||
76 | + | ||
67 | // AssetBundle jcarousel :D [close] | 77 | // AssetBundle jcarousel :D [close] |
68 | 78 | ||
69 | ?> | 79 | ?> |
frontend/web/css/style.dev.css
1 | html,form, | 1 | html,form, |
2 | -body { padding:0;margin:0; | ||
3 | - font-family: 'Roboto';font-size:14px;color:#333;height:100%; | 2 | +body { |
3 | + padding:0; | ||
4 | + margin:0; | ||
5 | + font-family: 'Roboto'; | ||
6 | + font-size:14px;color:#333;height:100%; | ||
4 | } | 7 | } |
5 | h1,h2,h3{margin:0px;padding:0px 0px 10px 0px;} | 8 | h1,h2,h3{margin:0px;padding:0px 0px 10px 0px;} |
6 | .fl{float:left;} | 9 | .fl{float:left;} |