Commit 7c514320101ae98e0f10c73c20eacdaaa482e77c

Authored by Yarik
1 parent 0ed9dcdf

Share basket

common/mail/shareBasket.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var \yii\web\View $this
  4 + * @var string $url
  5 + */
  6 + use yii\bootstrap\Html;
  7 +
  8 + echo Html::tag('p', \Yii::t('app', 'User shared with you basket, to view follow the link down below:'));
  9 + echo Html::tag('p', Html::a($url, $url));
0 \ No newline at end of file 10 \ No newline at end of file
@@ -37,7 +37,8 @@ @@ -37,7 +37,8 @@
37 "kartik-v/yii2-widget-colorinput": "*", 37 "kartik-v/yii2-widget-colorinput": "*",
38 "kartik-v/yii2-widget-datepicker": "@dev", 38 "kartik-v/yii2-widget-datepicker": "@dev",
39 "nodge/yii2-eauth": "~2.0", 39 "nodge/yii2-eauth": "~2.0",
40 - "skeeks/yii2-assets-auto-compress": "*" 40 + "skeeks/yii2-assets-auto-compress": "*",
  41 + "zyx/zyx-phpmailer": "@stable"
41 }, 42 },
42 "require-dev": { 43 "require-dev": {
43 "yiisoft/yii2-debug": "~2.0.0", 44 "yiisoft/yii2-debug": "~2.0.0",
@@ -4,20 +4,20 @@ @@ -4,20 +4,20 @@
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 - "content-hash": "05e52a3942b2da7e252a6d47a295317c", 7 + "content-hash": "f5d818fe2726a09810a6587656444937",
8 "packages": [ 8 "packages": [
9 { 9 {
10 "name": "2amigos/yii2-tinymce-widget", 10 "name": "2amigos/yii2-tinymce-widget",
11 - "version": "1.1.1", 11 + "version": "1.1.2",
12 "source": { 12 "source": {
13 "type": "git", 13 "type": "git",
14 "url": "https://github.com/2amigos/yii2-tinymce-widget.git", 14 "url": "https://github.com/2amigos/yii2-tinymce-widget.git",
15 - "reference": "d58bad3ede450f86acd475fb4ecda982b980132b" 15 + "reference": "4f519e37774ef231e4b4d6046854d5638548c8e0"
16 }, 16 },
17 "dist": { 17 "dist": {
18 "type": "zip", 18 "type": "zip",
19 - "url": "https://api.github.com/repos/2amigos/yii2-tinymce-widget/zipball/d58bad3ede450f86acd475fb4ecda982b980132b",  
20 - "reference": "d58bad3ede450f86acd475fb4ecda982b980132b", 19 + "url": "https://api.github.com/repos/2amigos/yii2-tinymce-widget/zipball/4f519e37774ef231e4b4d6046854d5638548c8e0",
  20 + "reference": "4f519e37774ef231e4b4d6046854d5638548c8e0",
21 "shasum": "" 21 "shasum": ""
22 }, 22 },
23 "require": { 23 "require": {
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
64 "yii 2", 64 "yii 2",
65 "yii2" 65 "yii2"
66 ], 66 ],
67 - "time": "2015-03-28T21:53:43+00:00" 67 + "time": "2017-06-09T14:12:14+00:00"
68 }, 68 },
69 { 69 {
70 "name": "bower-asset/amcharts", 70 "name": "bower-asset/amcharts",
@@ -82,10 +82,7 @@ @@ -82,10 +82,7 @@
82 }, 82 },
83 "type": "bower-asset-library", 83 "type": "bower-asset-library",
84 "extra": { 84 "extra": {
85 - "bower-asset-main": "./dist/amcharts/amcharts.js",  
86 - "branch-alias": {  
87 - "dev-master": "3.18.5-dev"  
88 - } 85 + "bower-asset-main": "./dist/amcharts/amcharts.js"
89 }, 86 },
90 "time": "2016-01-04 17:22:55" 87 "time": "2016-01-04 17:22:55"
91 }, 88 },
@@ -105,10 +102,7 @@ @@ -105,10 +102,7 @@
105 }, 102 },
106 "type": "bower-asset-library", 103 "type": "bower-asset-library",
107 "extra": { 104 "extra": {
108 - "bower-asset-main": "./dist/amcharts/amcharts.js",  
109 - "branch-alias": {  
110 - "dev-master": "3.13.0-dev"  
111 - } 105 + "bower-asset-main": "./dist/amcharts/amcharts.js"
112 }, 106 },
113 "time": "2015-01-28 07:40:20" 107 "time": "2015-01-28 07:40:20"
114 }, 108 },
@@ -1818,16 +1812,16 @@ @@ -1818,16 +1812,16 @@
1818 }, 1812 },
1819 { 1813 {
1820 "name": "mrclay/minify", 1814 "name": "mrclay/minify",
1821 - "version": "3.0.0", 1815 + "version": "3.0.1",
1822 "source": { 1816 "source": {
1823 "type": "git", 1817 "type": "git",
1824 "url": "https://github.com/mrclay/minify.git", 1818 "url": "https://github.com/mrclay/minify.git",
1825 - "reference": "e904f2e1ae5e893f942e07a4860b6c47393844f1" 1819 + "reference": "6a5b09a00e089bdf3e14d545fadd1525abac5e61"
1826 }, 1820 },
1827 "dist": { 1821 "dist": {
1828 "type": "zip", 1822 "type": "zip",
1829 - "url": "https://api.github.com/repos/mrclay/minify/zipball/e904f2e1ae5e893f942e07a4860b6c47393844f1",  
1830 - "reference": "e904f2e1ae5e893f942e07a4860b6c47393844f1", 1823 + "url": "https://api.github.com/repos/mrclay/minify/zipball/6a5b09a00e089bdf3e14d545fadd1525abac5e61",
  1824 + "reference": "6a5b09a00e089bdf3e14d545fadd1525abac5e61",
1831 "shasum": "" 1825 "shasum": ""
1832 }, 1826 },
1833 "require": { 1827 "require": {
@@ -1837,7 +1831,7 @@ @@ -1837,7 +1831,7 @@
1837 "mrclay/jsmin-php": "~2", 1831 "mrclay/jsmin-php": "~2",
1838 "mrclay/props-dic": "^2.2", 1832 "mrclay/props-dic": "^2.2",
1839 "php": "^5.3.0 || ^7.0", 1833 "php": "^5.3.0 || ^7.0",
1840 - "tubalmartin/cssmin": "~2.4.8-p5" 1834 + "tubalmartin/cssmin": "~4"
1841 }, 1835 },
1842 "require-dev": { 1836 "require-dev": {
1843 "firephp/firephp-core": "~0.4.0", 1837 "firephp/firephp-core": "~0.4.0",
@@ -1876,7 +1870,7 @@ @@ -1876,7 +1870,7 @@
1876 ], 1870 ],
1877 "description": "Minify is a PHP5 app that helps you follow several rules for client-side performance. It combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers", 1871 "description": "Minify is a PHP5 app that helps you follow several rules for client-side performance. It combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers",
1878 "homepage": "https://github.com/mrclay/minify", 1872 "homepage": "https://github.com/mrclay/minify",
1879 - "time": "2017-04-03T20:50:53+00:00" 1873 + "time": "2017-06-08T19:33:53+00:00"
1880 }, 1874 },
1881 { 1875 {
1882 "name": "mrclay/props-dic", 1876 "name": "mrclay/props-dic",
@@ -1979,16 +1973,16 @@ @@ -1979,16 +1973,16 @@
1979 }, 1973 },
1980 { 1974 {
1981 "name": "noam148/yii2-image-manager", 1975 "name": "noam148/yii2-image-manager",
1982 - "version": "1.2.5", 1976 + "version": "1.2.6",
1983 "source": { 1977 "source": {
1984 "type": "git", 1978 "type": "git",
1985 "url": "https://github.com/noam148/yii2-image-manager.git", 1979 "url": "https://github.com/noam148/yii2-image-manager.git",
1986 - "reference": "a1ceb0c856bd839c1c48edca0163221775aaf624" 1980 + "reference": "4f4568e40f461b6f5c6bcebbc1e56b0906319b47"
1987 }, 1981 },
1988 "dist": { 1982 "dist": {
1989 "type": "zip", 1983 "type": "zip",
1990 - "url": "https://api.github.com/repos/noam148/yii2-image-manager/zipball/a1ceb0c856bd839c1c48edca0163221775aaf624",  
1991 - "reference": "a1ceb0c856bd839c1c48edca0163221775aaf624", 1984 + "url": "https://api.github.com/repos/noam148/yii2-image-manager/zipball/4f4568e40f461b6f5c6bcebbc1e56b0906319b47",
  1985 + "reference": "4f4568e40f461b6f5c6bcebbc1e56b0906319b47",
1992 "shasum": "" 1986 "shasum": ""
1993 }, 1987 },
1994 "require": { 1988 "require": {
@@ -2024,7 +2018,7 @@ @@ -2024,7 +2018,7 @@
2024 "widget", 2018 "widget",
2025 "yii2" 2019 "yii2"
2026 ], 2020 ],
2027 - "time": "2017-05-18T15:12:11+00:00" 2021 + "time": "2017-06-11T09:21:10+00:00"
2028 }, 2022 },
2029 { 2023 {
2030 "name": "noam148/yii2-image-resize", 2024 "name": "noam148/yii2-image-resize",
@@ -2172,6 +2166,59 @@ @@ -2172,6 +2166,59 @@
2172 "time": "2017-04-09T20:23:01+00:00" 2166 "time": "2017-04-09T20:23:01+00:00"
2173 }, 2167 },
2174 { 2168 {
  2169 + "name": "phpmailer/phpmailer",
  2170 + "version": "v5.2.8",
  2171 + "source": {
  2172 + "type": "git",
  2173 + "url": "https://github.com/PHPMailer/PHPMailer.git",
  2174 + "reference": "d3802c597bff8f6c2ccfa3eab2a511aa01b8d68f"
  2175 + },
  2176 + "dist": {
  2177 + "type": "zip",
  2178 + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/d3802c597bff8f6c2ccfa3eab2a511aa01b8d68f",
  2179 + "reference": "d3802c597bff8f6c2ccfa3eab2a511aa01b8d68f",
  2180 + "shasum": ""
  2181 + },
  2182 + "require": {
  2183 + "php": ">=5.0.0"
  2184 + },
  2185 + "require-dev": {
  2186 + "phpdocumentor/phpdocumentor": "*",
  2187 + "phpunit/phpunit": "4.0.*"
  2188 + },
  2189 + "type": "library",
  2190 + "autoload": {
  2191 + "classmap": [
  2192 + "class.phpmailer.php",
  2193 + "class.pop3.php",
  2194 + "class.smtp.php"
  2195 + ]
  2196 + },
  2197 + "notification-url": "https://packagist.org/downloads/",
  2198 + "license": [
  2199 + "LGPL-2.1"
  2200 + ],
  2201 + "authors": [
  2202 + {
  2203 + "name": "Jim Jagielski",
  2204 + "email": "jimjag@gmail.com"
  2205 + },
  2206 + {
  2207 + "name": "Marcus Bointon",
  2208 + "email": "phpmailer@synchromedia.co.uk"
  2209 + },
  2210 + {
  2211 + "name": "Andy Prevost",
  2212 + "email": "codeworxtech@users.sourceforge.net"
  2213 + },
  2214 + {
  2215 + "name": "Brent R. Matzelle"
  2216 + }
  2217 + ],
  2218 + "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
  2219 + "time": "2014-05-14T07:04:18+00:00"
  2220 + },
  2221 + {
2175 "name": "phpoffice/phpexcel", 2222 "name": "phpoffice/phpexcel",
2176 "version": "1.8.1", 2223 "version": "1.8.1",
2177 "source": { 2224 "source": {
@@ -2851,29 +2898,34 @@ @@ -2851,29 +2898,34 @@
2851 }, 2898 },
2852 { 2899 {
2853 "name": "tubalmartin/cssmin", 2900 "name": "tubalmartin/cssmin",
2854 - "version": "v2.4.8-p10", 2901 + "version": "v4.1.0",
2855 "source": { 2902 "source": {
2856 "type": "git", 2903 "type": "git",
2857 "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git", 2904 "url": "https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port.git",
2858 - "reference": "9c640e5d2d6fe1eac2167ff138b8b0ce39475d03" 2905 + "reference": "1c7ae93cf6b392d4dae5c4ae18979918413af16e"
2859 }, 2906 },
2860 "dist": { 2907 "dist": {
2861 "type": "zip", 2908 "type": "zip",
2862 - "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/9c640e5d2d6fe1eac2167ff138b8b0ce39475d03",  
2863 - "reference": "9c640e5d2d6fe1eac2167ff138b8b0ce39475d03", 2909 + "url": "https://api.github.com/repos/tubalmartin/YUI-CSS-compressor-PHP-port/zipball/1c7ae93cf6b392d4dae5c4ae18979918413af16e",
  2910 + "reference": "1c7ae93cf6b392d4dae5c4ae18979918413af16e",
2864 "shasum": "" 2911 "shasum": ""
2865 }, 2912 },
2866 "require": { 2913 "require": {
2867 - "php": ">=5.0.0" 2914 + "ext-pcre": "*",
  2915 + "php": ">=5.3.2"
2868 }, 2916 },
2869 "require-dev": { 2917 "require-dev": {
2870 - "cogpowered/finediff": "0.3.*" 2918 + "cogpowered/finediff": "0.3.*",
  2919 + "phpunit/phpunit": "4.8.*"
2871 }, 2920 },
  2921 + "bin": [
  2922 + "cssmin"
  2923 + ],
2872 "type": "library", 2924 "type": "library",
2873 "autoload": { 2925 "autoload": {
2874 - "classmap": [  
2875 - "cssmin.php"  
2876 - ] 2926 + "psr-4": {
  2927 + "tubalmartin\\CssMin\\": "src"
  2928 + }
2877 }, 2929 },
2878 "notification-url": "https://packagist.org/downloads/", 2930 "notification-url": "https://packagist.org/downloads/",
2879 "license": [ 2931 "license": [
@@ -2895,7 +2947,7 @@ @@ -2895,7 +2947,7 @@
2895 "minify", 2947 "minify",
2896 "yui" 2948 "yui"
2897 ], 2949 ],
2898 - "time": "2017-04-04T14:38:03+00:00" 2950 + "time": "2017-05-16T13:45:26+00:00"
2899 }, 2951 },
2900 { 2952 {
2901 "name": "yii2tech/filedb", 2953 "name": "yii2tech/filedb",
@@ -3300,6 +3352,50 @@ @@ -3300,6 +3352,50 @@
3300 "yii2" 3352 "yii2"
3301 ], 3353 ],
3302 "time": "2017-05-22T11:24:30+00:00" 3354 "time": "2017-05-22T11:24:30+00:00"
  3355 + },
  3356 + {
  3357 + "name": "zyx/zyx-phpmailer",
  3358 + "version": "0.9.2",
  3359 + "source": {
  3360 + "type": "git",
  3361 + "url": "https://github.com/SDKiller/zyx-phpmailer.git",
  3362 + "reference": "2032706c35a345f875c4acf310600098a37ca469"
  3363 + },
  3364 + "dist": {
  3365 + "type": "zip",
  3366 + "url": "https://api.github.com/repos/SDKiller/zyx-phpmailer/zipball/2032706c35a345f875c4acf310600098a37ca469",
  3367 + "reference": "2032706c35a345f875c4acf310600098a37ca469",
  3368 + "shasum": ""
  3369 + },
  3370 + "require": {
  3371 + "phpmailer/phpmailer": "v5.2.8",
  3372 + "yiisoft/yii2": "*"
  3373 + },
  3374 + "type": "yii2-extension",
  3375 + "autoload": {
  3376 + "psr-4": {
  3377 + "zyx\\phpmailer\\": ""
  3378 + }
  3379 + },
  3380 + "notification-url": "https://packagist.org/downloads/",
  3381 + "license": [
  3382 + "BSD-3-Clause"
  3383 + ],
  3384 + "authors": [
  3385 + {
  3386 + "name": "Serge Postrash aka SDKiller",
  3387 + "email": "jexy.ru@gmail.com"
  3388 + }
  3389 + ],
  3390 + "description": "PHPMailer integration for Yii 2 framework",
  3391 + "keywords": [
  3392 + "email",
  3393 + "mail",
  3394 + "mailer",
  3395 + "phpmailer",
  3396 + "yii2"
  3397 + ],
  3398 + "time": "2014-05-14T20:30:24+00:00"
3303 } 3399 }
3304 ], 3400 ],
3305 "packages-dev": [ 3401 "packages-dev": [
@@ -5412,16 +5508,16 @@ @@ -5412,16 +5508,16 @@
5412 }, 5508 },
5413 { 5509 {
5414 "name": "symfony/polyfill-mbstring", 5510 "name": "symfony/polyfill-mbstring",
5415 - "version": "v1.3.0", 5511 + "version": "v1.4.0",
5416 "source": { 5512 "source": {
5417 "type": "git", 5513 "type": "git",
5418 "url": "https://github.com/symfony/polyfill-mbstring.git", 5514 "url": "https://github.com/symfony/polyfill-mbstring.git",
5419 - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" 5515 + "reference": "f29dca382a6485c3cbe6379f0c61230167681937"
5420 }, 5516 },
5421 "dist": { 5517 "dist": {
5422 "type": "zip", 5518 "type": "zip",
5423 - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4",  
5424 - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", 5519 + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937",
  5520 + "reference": "f29dca382a6485c3cbe6379f0c61230167681937",
5425 "shasum": "" 5521 "shasum": ""
5426 }, 5522 },
5427 "require": { 5523 "require": {
@@ -5433,7 +5529,7 @@ @@ -5433,7 +5529,7 @@
5433 "type": "library", 5529 "type": "library",
5434 "extra": { 5530 "extra": {
5435 "branch-alias": { 5531 "branch-alias": {
5436 - "dev-master": "1.3-dev" 5532 + "dev-master": "1.4-dev"
5437 } 5533 }
5438 }, 5534 },
5439 "autoload": { 5535 "autoload": {
@@ -5467,7 +5563,7 @@ @@ -5467,7 +5563,7 @@
5467 "portable", 5563 "portable",
5468 "shim" 5564 "shim"
5469 ], 5565 ],
5470 - "time": "2016-11-14T01:06:16+00:00" 5566 + "time": "2017-06-09T14:24:12+00:00"
5471 }, 5567 },
5472 { 5568 {
5473 "name": "symfony/yaml", 5569 "name": "symfony/yaml",
@@ -5769,7 +5865,8 @@ @@ -5769,7 +5865,8 @@
5769 "kartik-v/yii2-widget-select2": 20, 5865 "kartik-v/yii2-widget-select2": 20,
5770 "bower-asset/amcharts": 20, 5866 "bower-asset/amcharts": 20,
5771 "bower-asset/pnotify": 20, 5867 "bower-asset/pnotify": 20,
5772 - "kartik-v/yii2-widget-datepicker": 20 5868 + "kartik-v/yii2-widget-datepicker": 20,
  5869 + "zyx/zyx-phpmailer": 0
5773 }, 5870 },
5774 "prefer-stable": false, 5871 "prefer-stable": false,
5775 "prefer-lowest": false, 5872 "prefer-lowest": false,
frontend/controllers/SiteController.php
@@ -14,11 +14,14 @@ @@ -14,11 +14,14 @@
14 use artbox\order\models\SignupForm; 14 use artbox\order\models\SignupForm;
15 use artbox\weblog\models\Article; 15 use artbox\weblog\models\Article;
16 use common\models\Settings; 16 use common\models\Settings;
  17 + use frontend\models\ShareBasket;
17 use nodge\eauth\ErrorException; 18 use nodge\eauth\ErrorException;
18 use nodge\eauth\openid\ControllerBehavior; 19 use nodge\eauth\openid\ControllerBehavior;
19 use Yii; 20 use Yii;
20 use yii\base\InvalidParamException; 21 use yii\base\InvalidParamException;
21 use yii\bootstrap\Html; 22 use yii\bootstrap\Html;
  23 + use yii\helpers\Json;
  24 + use yii\helpers\Url;
22 use yii\web\BadRequestHttpException; 25 use yii\web\BadRequestHttpException;
23 use yii\web\Controller; 26 use yii\web\Controller;
24 use yii\filters\VerbFilter; 27 use yii\filters\VerbFilter;
@@ -50,7 +53,8 @@ @@ -50,7 +53,8 @@
50 'verbs' => [ 53 'verbs' => [
51 'class' => VerbFilter::className(), 54 'class' => VerbFilter::className(),
52 'actions' => [ 55 'actions' => [
53 - 'feedback' => [ 'post' ], 56 + 'feedback' => [ 'post' ],
  57 + 'share-basket' => [ 'post' ],
54 ], 58 ],
55 ], 59 ],
56 'eauth' => [ 60 'eauth' => [
@@ -298,14 +302,14 @@ @@ -298,14 +302,14 @@
298 Yii::$app->getUrlManager() 302 Yii::$app->getUrlManager()
299 ->createAbsoluteUrl('site/login') 303 ->createAbsoluteUrl('site/login')
300 ); 304 );
301 - 305 +
302 try { 306 try {
303 if ($eauth->authenticate()) { 307 if ($eauth->authenticate()) {
304 // var_dump($eauth->getIsAuthenticated(), $eauth->getAttributes()); exit; 308 // var_dump($eauth->getIsAuthenticated(), $eauth->getAttributes()); exit;
305 $identity = Customer::findByEAuth($eauth); 309 $identity = Customer::findByEAuth($eauth);
306 Yii::$app->getUser() 310 Yii::$app->getUser()
307 ->login($identity); 311 ->login($identity);
308 - 312 +
309 // special redirect with closing popup window 313 // special redirect with closing popup window
310 $eauth->redirect(); 314 $eauth->redirect();
311 } else { 315 } else {
@@ -316,7 +320,7 @@ @@ -316,7 +320,7 @@
316 // save error to show it later 320 // save error to show it later
317 Yii::$app->getSession() 321 Yii::$app->getSession()
318 ->setFlash('error', 'EAuthException: ' . $e->getMessage()); 322 ->setFlash('error', 'EAuthException: ' . $e->getMessage());
319 - 323 +
320 // close popup window and redirect to cancelUrl 324 // close popup window and redirect to cancelUrl
321 // $eauth->cancel(); 325 // $eauth->cancel();
322 $eauth->redirect($eauth->getCancelUrl()); 326 $eauth->redirect($eauth->getCancelUrl());
@@ -418,4 +422,33 @@ @@ -418,4 +422,33 @@
418 ] 422 ]
419 ); 423 );
420 } 424 }
  425 +
  426 + public function actionShareBasket()
  427 + {
  428 + $response = \Yii::$app->response;
  429 + $response->format = $response::FORMAT_JSON;
  430 + $model = new ShareBasket();
  431 + if ($model->load(\Yii::$app->request->post()) && $model->validate()) {
  432 + $result = $model->send();
  433 + return $result;
  434 + } else {
  435 + return [
  436 + 'success' => false,
  437 + 'msg' => \Yii::t('app', 'Email is not set.'),
  438 + ];
  439 + }
  440 + }
  441 +
  442 + public function actionGetBasket($items)
  443 + {
  444 + /**
  445 + * @var \artbox\order\models\Basket $basket
  446 + */
  447 + $basket = \Yii::$app->get('basket');
  448 + $itemArray = Json::decode($items);
  449 + foreach ($itemArray as $variantId => $count) {
  450 + $basket->set($variantId, $count);
  451 + }
  452 + return $this->redirect('/checkout/index');
  453 + }
421 } 454 }
frontend/models/ShareBasket.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * Created by PhpStorm.
  4 + * User: yarik
  5 + * Date: 12.06.17
  6 + * Time: 11:21
  7 + */
  8 +
  9 + namespace frontend\models;
  10 +
  11 + use yii\base\Model;
  12 + use yii\helpers\Json;
  13 + use yii\helpers\Url;
  14 +
  15 + class ShareBasket extends Model
  16 + {
  17 + public $email;
  18 + public $url = 'site/get-basket';
  19 + public $from = 'artbox@artbox.dev';
  20 +
  21 + /**
  22 + * @inheritdoc
  23 + */
  24 + public function rules()
  25 + {
  26 + return [
  27 + [
  28 + [
  29 + 'email',
  30 + ],
  31 + 'email',
  32 + ],
  33 + [
  34 + [
  35 + 'email',
  36 + ],
  37 + 'required',
  38 + ],
  39 + ];
  40 + }
  41 +
  42 + public function attributeLabels()
  43 + {
  44 + return [
  45 + 'email' => \Yii::t('app', 'Поделиться корзиной'),
  46 + ];
  47 + }
  48 +
  49 + public function send()
  50 + {
  51 + /**
  52 + * @var \artbox\order\models\Basket $basket
  53 + */
  54 + $basket = \Yii::$app->get('basket');
  55 + $data = $basket->getData();
  56 + if (empty($data)) {
  57 + return [
  58 + 'success' => false,
  59 + 'msg' => \Yii::t('app', 'Basket is empty'),
  60 + ];
  61 + }
  62 + $dataArray = [];
  63 + foreach ($data as $variantId => $item) {
  64 + $dataArray[ $variantId ] = $item[ 'count' ];
  65 + }
  66 + $dataString = Json::encode($dataArray);
  67 + $url = Url::to(
  68 + [
  69 + $this->url,
  70 + 'items' => $dataString,
  71 + ],
  72 + true
  73 + );
  74 + if (\Yii::$app->mailer->compose(
  75 + [ 'html' => 'shareBasket' ],
  76 + [
  77 + 'url' => $url,
  78 + ]
  79 + )
  80 + ->setFrom($this->from)
  81 + ->setTo($this->email)
  82 + ->setSubject(\Yii::t('app', 'Shared basket'))
  83 + ->send()
  84 + ) {
  85 + return [
  86 + 'success' => true,
  87 + 'msg' => \Yii::t('app', 'Email successfully sent.'),
  88 + ];
  89 + } else {
  90 + return [
  91 + 'success' => false,
  92 + 'msg' => \Yii::t('app', 'Email cannot be send.'),
  93 +
  94 + ];
  95 + }
  96 + }
  97 + }
0 \ No newline at end of file 98 \ No newline at end of file
frontend/views/checkout/index.php
@@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
6 * @var \artbox\catalog\models\Product[] $topItems 6 * @var \artbox\catalog\models\Product[] $topItems
7 */ 7 */
8 use artbox\core\helpers\ImageHelper; 8 use artbox\core\helpers\ImageHelper;
  9 + use frontend\models\ShareBasket;
  10 + use yii\bootstrap\ActiveForm;
9 use yii\bootstrap\Html; 11 use yii\bootstrap\Html;
10 12
11 $formatter = \Yii::$app->formatter; 13 $formatter = \Yii::$app->formatter;
@@ -136,33 +138,86 @@ @@ -136,33 +138,86 @@
136 <!-- /.table-responsive --> 138 <!-- /.table-responsive -->
137 139
138 <div class="box-footer"> 140 <div class="box-footer">
139 - <div class="pull-left">  
140 - <?php  
141 - echo Html::a(  
142 - Html::icon('chevron-left', [ 'prefix' => 'fa fa-' ]) . \Yii::t(  
143 - 'app',  
144 - ' Продолжить покупки'  
145 - ),  
146 - [ 'site/index' ],  
147 - [  
148 - 'class' => 'btn btn-default',  
149 - ]  
150 - )  
151 - ?> 141 + <div class="col-xs-12">
  142 + <div class="col-xs-12 col-sm-9">
  143 + <?php
  144 + $shareBasket = new ShareBasket();
  145 + $shareBasketForm = ActiveForm::begin(
  146 + [
  147 + 'action' => [ '/site/share-basket' ],
  148 + 'options' => [
  149 + 'class' => 'share-basket-form',
  150 + 'data' => [
  151 + 'title' => \Yii::t('app', 'Shared basket'),
  152 + 'msg' => \Yii::t('app', 'Basket successfully shared.'),
  153 + ],
  154 + ],
  155 + ]
  156 + );
  157 + ?>
  158 + <div class="col-xs-12 col-sm-4">
  159 + <?php
  160 + echo Html::label(
  161 + $shareBasket->getAttributeLabel('email'),
  162 + Html::getInputId($shareBasket, 'email')
  163 + );
  164 + ?>
  165 + </div>
  166 + <div class="col-xs-12 col-sm-6">
  167 + <?php
  168 + echo $shareBasketForm->field($shareBasket, 'email')
  169 + ->textInput(
  170 + [
  171 + 'placeholder' => 'email@email.com',
  172 + ]
  173 + )
  174 + ->label(false);
  175 + ?>
  176 + </div>
  177 + <div class="col-xs-12 col-sm-2">
  178 + <?php
  179 + echo Html::submitButton(
  180 + \Yii::t('app', 'Ok'),
  181 + [
  182 + 'class' => 'btn btn-primary',
  183 + ]
  184 + );
  185 + ?>
  186 + </div>
  187 + <?php
  188 + $shareBasketForm::end();
  189 + ?>
  190 + </div>
152 </div> 191 </div>
153 - <div class="pull-right">  
154 - <?php  
155 - echo Html::a(  
156 - \Yii::t(  
157 - 'app',  
158 - ' Оформить заказ '  
159 - ) . Html::icon('chevron-right', [ 'prefix' => 'fa fa-' ]),  
160 - [ 'checkout/info' ],  
161 - [  
162 - 'class' => 'btn btn-success',  
163 - ]  
164 - )  
165 - ?> 192 + <div class="col-xs-12">
  193 + <div class="pull-left">
  194 + <?php
  195 + echo Html::a(
  196 + Html::icon('chevron-left', [ 'prefix' => 'fa fa-' ]) . \Yii::t(
  197 + 'app',
  198 + ' Продолжить покупки'
  199 + ),
  200 + [ 'site/index' ],
  201 + [
  202 + 'class' => 'btn btn-default',
  203 + ]
  204 + )
  205 + ?>
  206 + </div>
  207 + <div class="pull-right">
  208 + <?php
  209 + echo Html::a(
  210 + \Yii::t(
  211 + 'app',
  212 + ' Оформить заказ '
  213 + ) . Html::icon('chevron-right', [ 'prefix' => 'fa fa-' ]),
  214 + [ 'checkout/info' ],
  215 + [
  216 + 'class' => 'btn btn-success',
  217 + ]
  218 + )
  219 + ?>
  220 + </div>
166 </div> 221 </div>
167 </div> 222 </div>
168 223
frontend/views/layouts/_basket_modal.php
@@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
5 <h4 class="modal-title callback text-center" id="Login"> 5 <h4 class="modal-title callback text-center" id="Login">
6 <?php 6 <?php
7 use artbox\core\helpers\ImageHelper; 7 use artbox\core\helpers\ImageHelper;
  8 + use frontend\models\ShareBasket;
  9 + use yii\bootstrap\ActiveForm;
8 use yii\bootstrap\Html; 10 use yii\bootstrap\Html;
9 11
10 echo Html::a( 12 echo Html::a(
@@ -189,6 +191,55 @@ @@ -189,6 +191,55 @@
189 <!-- /.table-responsive --> 191 <!-- /.table-responsive -->
190 192
191 <div class="box-footer"> 193 <div class="box-footer">
  194 + <div class="col-xs-12 col-sm-9">
  195 + <?php
  196 + $shareBasket = new ShareBasket();
  197 + $shareBasketForm = ActiveForm::begin(
  198 + [
  199 + 'action' => [ '/site/share-basket' ],
  200 + 'options' => [
  201 + 'class' => 'share-basket-form',
  202 + 'data' => [
  203 + 'title' => \Yii::t('app', 'Shared basket'),
  204 + 'msg' => \Yii::t('app', 'Basket successfully shared.'),
  205 + ],
  206 + ],
  207 + ]
  208 + );
  209 + ?>
  210 + <div class="col-xs-12 col-sm-4">
  211 + <?php
  212 + echo Html::label(
  213 + $shareBasket->getAttributeLabel('email'),
  214 + Html::getInputId($shareBasket, 'email')
  215 + );
  216 + ?>
  217 + </div>
  218 + <div class="col-xs-12 col-sm-6">
  219 + <?php
  220 + echo $shareBasketForm->field($shareBasket, 'email')
  221 + ->textInput(
  222 + [
  223 + 'placeholder' => 'email@email.com',
  224 + ]
  225 + )
  226 + ->label(false);
  227 + ?>
  228 + </div>
  229 + <div class="col-xs-12 col-sm-2">
  230 + <?php
  231 + echo Html::submitButton(
  232 + \Yii::t('app', 'Ok'),
  233 + [
  234 + 'class' => 'btn btn-primary',
  235 + ]
  236 + );
  237 + ?>
  238 + </div>
  239 + <?php
  240 + $shareBasketForm::end();
  241 + ?>
  242 + </div>
192 <div class="pull-right"> 243 <div class="pull-right">
193 <?php 244 <?php
194 echo Html::a( 245 echo Html::a(
frontend/web/js/script.js
@@ -126,12 +126,22 @@ $(function() { @@ -126,12 +126,22 @@ $(function() {
126 .parents('.product-row-basket') 126 .parents('.product-row-basket')
127 .data('id'); 127 .data('id');
128 showLoader('#basket'); 128 showLoader('#basket');
  129 + showLoader('#basket-modal');
129 var xhr = basket.remove(id); 130 var xhr = basket.remove(id);
130 xhr.done(function() { 131 xhr.done(function() {
  132 + if ($('#basket').length) {
  133 + $.pjax.reload({
  134 + container: '#basket',
  135 + fragment: '#basket',
  136 + timeout: 5000,
  137 + async: false
  138 + });
  139 + }
131 $.pjax.reload({ 140 $.pjax.reload({
132 - container: '#basket',  
133 - fragment: '#basket',  
134 - timeout: 5000 141 + container: '#basket-modal',
  142 + fragment: '#basket-modal',
  143 + timeout: 5000,
  144 + async: false
135 }); 145 });
136 }) 146 })
137 }); 147 });
@@ -150,13 +160,15 @@ $(function() { @@ -150,13 +160,15 @@ $(function() {
150 $.pjax.reload({ 160 $.pjax.reload({
151 container: '#basket', 161 container: '#basket',
152 fragment: '#basket', 162 fragment: '#basket',
153 - timeout: 5000 163 + timeout: 5000,
  164 + async: false
154 }); 165 });
155 } 166 }
156 $.pjax.reload({ 167 $.pjax.reload({
157 container: '#basket-modal', 168 container: '#basket-modal',
158 fragment: '#basket-modal', 169 fragment: '#basket-modal',
159 - timeout: 5000 170 + timeout: 5000,
  171 + async: false
160 }); 172 });
161 }); 173 });
162 }); 174 });
@@ -187,86 +199,88 @@ $(function() { @@ -187,86 +199,88 @@ $(function() {
187 }.bind(this)); 199 }.bind(this));
188 200
189 $(document) 201 $(document)
190 - .on(  
191 - 'click', '.wishlist-rm, .wishlist-add', function() {  
192 - var button = $(this);  
193 - $.ajax(  
194 - {  
195 - url: button.data('url'),  
196 - type: "POST",  
197 - data: {  
198 - 'variant': button.data('variant'),  
199 - 'product': button.data('product'),  
200 - 'user': button.data('user')  
201 - },  
202 - success: function(data) {  
203 - button.replaceWith(data.button);  
204 - new PNotify(  
205 - {  
206 - title: 'Info',  
207 - text: data.message,  
208 - type: 'info',  
209 - styling: 'fontawesome'  
210 - }  
211 - ); 202 + .on('click', '.wishlist-rm, .wishlist-add', function() {
  203 + var button = $(this);
  204 + $.ajax({
  205 + url: button.data('url'),
  206 + type: "POST",
  207 + data: {
  208 + 'variant': button.data('variant'),
  209 + 'product': button.data('product'),
  210 + 'user': button.data('user')
  211 + },
  212 + success: function(data) {
  213 + button.replaceWith(data.button);
  214 + new PNotify({
  215 + title: 'Info',
  216 + text: data.message,
  217 + type: 'info',
  218 + styling: 'fontawesome'
  219 + });
212 220
213 - }  
214 - }  
215 - )  
216 - }  
217 - ); 221 + }
  222 + })
  223 + });
218 224
219 $(document) 225 $(document)
220 - .on(  
221 - 'click', '.wishlist-delete', function(e) {  
222 - e.preventDefault();  
223 - var button = $(this);  
224 - $.ajax(  
225 - {  
226 - url: button.data('url'),  
227 - type: "POST",  
228 - data: {  
229 - 'product': button.data('product'),  
230 - 'variant': button.data('variant'),  
231 - 'user': button.data('user')  
232 - },  
233 - success: function(data) {  
234 - if (data.success) {  
235 - $.pjax.reload({container: '#wishlist-products'});  
236 - new PNotify(  
237 - {  
238 - title: 'Info',  
239 - text: data.message,  
240 - type: 'info',  
241 - styling: 'fontawesome'  
242 - }  
243 - );  
244 - }  
245 - } 226 + .on('click', '.wishlist-delete', function(e) {
  227 + e.preventDefault();
  228 + var button = $(this);
  229 + $.ajax({
  230 + url: button.data('url'),
  231 + type: "POST",
  232 + data: {
  233 + 'product': button.data('product'),
  234 + 'variant': button.data('variant'),
  235 + 'user': button.data('user')
  236 + },
  237 + success: function(data) {
  238 + if (data.success) {
  239 + $.pjax.reload({container: '#wishlist-products'});
  240 + new PNotify({
  241 + title: 'Info',
  242 + text: data.message,
  243 + type: 'info',
  244 + styling: 'fontawesome'
  245 + });
246 } 246 }
247 - );  
248 - }  
249 - );  
250 - $(document).on('click', '.sort-cat>a', function(e){  
251 - $(this).parent().toggleClass("active");  
252 - return false;  
253 - });  
254 - $(document).on('click', '.sorter li a', function(e){  
255 - var sortclick = $(this).text();  
256 - parentsort = $(".sort-cat a span");  
257 - pstext = $(parentsort).text();  
258 - mainlink = $(".sort-cat a").attr('href');  
259 - newmainlink = $(this).attr('href'); 247 + }
  248 + });
  249 + });
  250 + $(document)
  251 + .on('click', '.sort-cat>a', function(e) {
  252 + $(this)
  253 + .parent()
  254 + .toggleClass("active");
  255 + return false;
  256 + });
  257 + $(document)
  258 + .on('click', '.sorter li a', function(e) {
  259 + var sortclick = $(this)
  260 + .text();
  261 + parentsort = $(".sort-cat a span");
  262 + pstext = $(parentsort)
  263 + .text();
  264 + mainlink = $(".sort-cat a")
  265 + .attr('href');
  266 + newmainlink = $(this)
  267 + .attr('href');
260 268
261 - $(parentsort).text(sortclick);  
262 - $(".sort-cat>a").attr('href', newmainlink);  
263 - $(this).text(pstext);  
264 - $(this).attr('href', mainlink);  
265 - $(".sort-cat>a").click(); 269 + $(parentsort)
  270 + .text(sortclick);
  271 + $(".sort-cat>a")
  272 + .attr('href', newmainlink);
  273 + $(this)
  274 + .text(pstext);
  275 + $(this)
  276 + .attr('href', mainlink);
  277 + $(".sort-cat>a")
  278 + .click();
266 279
267 - $(location).attr('href',newmainlink);  
268 - return false;  
269 - }); 280 + $(location)
  281 + .attr('href', newmainlink);
  282 + return false;
  283 + });
270 284
271 // Price slider 285 // Price slider
272 $('.price-inputs input') 286 $('.price-inputs input')
@@ -371,14 +385,54 @@ $(function() { @@ -371,14 +385,54 @@ $(function() {
371 $('.vcovers') 385 $('.vcovers')
372 .perfectScrollbar({wheelSpeed: 0.5}); 386 .perfectScrollbar({wheelSpeed: 0.5});
373 387
374 - $(document).on('click', '.sidebar-menu .form-group .hiddens-button a.btn', function(){  
375 - $(this).parent().parent().find(".hiddens").toggleClass("active");  
376 - $(this).text(function(i, text){  
377 - return text === "Ещё" ? "Скрыть" : "Ещё"; 388 + $(document)
  389 + .on('click', '.sidebar-menu .form-group .hiddens-button a.btn', function() {
  390 + $(this)
  391 + .parent()
  392 + .parent()
  393 + .find(".hiddens")
  394 + .toggleClass("active");
  395 + $(this)
  396 + .text(function(i, text) {
  397 + return text === "Ещё" ? "Скрыть" : "Ещё";
  398 + });
  399 + return false;
378 }); 400 });
379 - return false;  
380 - });  
381 401
  402 + $(document)
  403 + .on('beforeSubmit', '.share-basket-form', function(e) {
  404 + $.post($(this)
  405 + .attr('action'), $(this)
  406 + .serialize(), function(data) {
  407 + });
  408 + new PNotify({
  409 + title: $(this)
  410 + .data('title'),
  411 + text: $(this)
  412 + .data('msg'),
  413 + type: 'info',
  414 + styling: 'fontawesome'
  415 + });
  416 + this.reset();
  417 + return false;
  418 + });
  419 + $(document)
  420 + .on('submit', '.share-basket-form', function(e) {
  421 + $.post($(this)
  422 + .attr('action'), $(this)
  423 + .serialize(), function(data) {
  424 + });
  425 + new PNotify({
  426 + title: $(this)
  427 + .data('title'),
  428 + text: $(this)
  429 + .data('msg'),
  430 + type: 'info',
  431 + styling: 'fontawesome'
  432 + });
  433 + this.reset();
  434 + return false;
  435 + });
382 }); 436 });
383 function showLoader(container) { 437 function showLoader(container) {
384 $(container) 438 $(container)