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;} | ... | ... |