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 | 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 | 100 | <IfModule mod_deflate.c> |
101 | 101 | AddOutputFilterByType DEFLATE text/plain |
... | ... | @@ -117,25 +117,25 @@ RewriteCond %{HTTP:Accept-encoding} gzip |
117 | 117 | RewriteCond %{REQUEST_FILENAME}.gz -f |
118 | 118 | RewriteRule ^(.*)$ $1.gz [QSA,L] |
119 | 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 | 140 | #Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE |
141 | 141 | <IfModule mod_setenvif.c> | ... | ... |
backend/config/main.php
1 | 1 | <?php |
2 | -use developeruz\db_rbac\behaviors\AccessBehavior; | |
2 | +use common\behaviors\ArtBoxAccessBehavior; | |
3 | 3 | $params = array_merge( |
4 | 4 | require(__DIR__ . '/../../common/config/params.php'), |
5 | 5 | require(__DIR__ . '/../../common/config/params-local.php'), |
... | ... | @@ -40,7 +40,7 @@ return [ |
40 | 40 | 'controllerNamespace' => 'backend\controllers', |
41 | 41 | 'bootstrap' => ['log'], |
42 | 42 | 'as AccessBehavior' => [ |
43 | - 'class' => AccessBehavior::className(), | |
43 | + 'class' => ArtBoxAccessBehavior::className(), | |
44 | 44 | 'rules' => |
45 | 45 | [ |
46 | 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 | 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 | 35 | "unclead/yii2-multiple-input": "~1.0", |
36 | 36 | "codeception/codeception":"*", |
37 | 37 | "phpmailer/phpmailer": "^5.2", |
38 | - "league/oauth2-client": "^1.3", | |
39 | 38 | "kartik-v/yii2-grid": "@dev", |
40 | 39 | "kartik-v/yii2-mpdf": "@dev", |
41 | 40 | "kartik-v/yii2-widget-fileinput": "@dev", | ... | ... |
frontend/controllers/BasketController.php
... | ... | @@ -40,29 +40,36 @@ class BasketController extends Controller |
40 | 40 | $body .= "\n\r"; |
41 | 41 | |
42 | 42 | if ($modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { |
43 | + $productV = $_POST['ProductVariant']; | |
44 | + | |
43 | 45 | foreach ($_POST['ProductVariant'] as $index=>$row) { |
44 | - $modelOrdersProducts = new OrdersProducts(); | |
46 | + $modelOrdersProducts = new OrdersProducts(); | |
45 | 47 | $mod_id = $row['id']; |
46 | 48 | unset($row['id']); |
47 | - $data['OrdersProducts'] = $row; | |
49 | + $data['OrdersProducts'] = $row; | |
48 | 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 | 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 | 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 | 1 | <?php |
2 | 2 | use yii\helpers\Url; |
3 | 3 | use yii\helpers\Html; |
4 | +use yii\web\View; | |
4 | 5 | use yii\widgets\Breadcrumbs; |
5 | 6 | use yii\widgets\ActiveForm; |
6 | 7 | |
... | ... | @@ -8,6 +9,29 @@ $this->title = 'Корзина'; |
8 | 9 | $this->registerMetaTag(['name' => 'description', 'content' => 'Корзина']); |
9 | 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 | 36 | <nav class="bread-crumbs"> |
13 | 37 | <?= Breadcrumbs::widget([ | ... | ... |
frontend/views/layouts/main.php
... | ... | @@ -64,6 +64,16 @@ $this->registerJsFile (Yii::$app->request->baseUrl . '/js/fix_height.js', ['posi |
64 | 64 | }); |
65 | 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 | 77 | // AssetBundle jcarousel :D [close] |
68 | 78 | |
69 | 79 | ?> | ... | ... |
frontend/web/css/style.dev.css
1 | 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 | 8 | h1,h2,h3{margin:0px;padding:0px 0px 10px 0px;} |
6 | 9 | .fl{float:left;} | ... | ... |