Commit 2beb82f0b10bc8b73c53975fb8f5fa92d64959e0
1 parent
182feb54
register
Showing
6 changed files
with
236 additions
and
28 deletions
Show diff stats
common/models/Customer.php
| @@ -3,7 +3,8 @@ | @@ -3,7 +3,8 @@ | ||
| 3 | namespace common\models; | 3 | namespace common\models; |
| 4 | 4 | ||
| 5 | use Yii; | 5 | use Yii; |
| 6 | - | 6 | + use yii\helpers\FileHelper; |
| 7 | + | ||
| 7 | /** | 8 | /** |
| 8 | * This is the model class for table "customer". | 9 | * This is the model class for table "customer". |
| 9 | * | 10 | * |
| @@ -26,6 +27,7 @@ | @@ -26,6 +27,7 @@ | ||
| 26 | */ | 27 | */ |
| 27 | class Customer extends \yii\db\ActiveRecord | 28 | class Customer extends \yii\db\ActiveRecord |
| 28 | { | 29 | { |
| 30 | + public $file; | ||
| 29 | const STATUS_NEW = 2; | 31 | const STATUS_NEW = 2; |
| 30 | const STATUS_ACTIVE = 1; | 32 | const STATUS_ACTIVE = 1; |
| 31 | const STATUS_NO = 0; | 33 | const STATUS_NO = 0; |
| @@ -103,7 +105,6 @@ | @@ -103,7 +105,6 @@ | ||
| 103 | 'organization', | 105 | 'organization', |
| 104 | 'name', | 106 | 'name', |
| 105 | 'secondname', | 107 | 'secondname', |
| 106 | - 'dignity', | ||
| 107 | 'birth', | 108 | 'birth', |
| 108 | 'citizenship', | 109 | 'citizenship', |
| 109 | 'passport', | 110 | 'passport', |
| @@ -113,7 +114,7 @@ | @@ -113,7 +114,7 @@ | ||
| 113 | 'required', | 114 | 'required', |
| 114 | ], | 115 | ], |
| 115 | ['email', 'email'], | 116 | ['email', 'email'], |
| 116 | - ['image', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024*1024*2] | 117 | + ['file', 'file', 'skipOnEmpty' => false, 'checkExtensionByMimeType'=>false,'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024*1024*2] |
| 117 | 118 | ||
| 118 | ]; | 119 | ]; |
| 119 | } | 120 | } |
| @@ -142,4 +143,27 @@ | @@ -142,4 +143,27 @@ | ||
| 142 | 'gere' => Yii::t('app', 'Gere'), | 143 | 'gere' => Yii::t('app', 'Gere'), |
| 143 | ]; | 144 | ]; |
| 144 | } | 145 | } |
| 146 | + | ||
| 147 | + | ||
| 148 | + public function upload($file) | ||
| 149 | + { | ||
| 150 | + /** | ||
| 151 | + * @var \yii\web\UploadedFile $file; | ||
| 152 | + */ | ||
| 153 | + $this->file = $file; | ||
| 154 | + if (!empty($file)) { | ||
| 155 | + if (!file_exists(\Yii::getAlias('@storage/customers/'))) { | ||
| 156 | + FileHelper::createDirectory(\Yii::getAlias('@storage/customers/')); | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + if ($file->saveAs(\Yii::getAlias('@storage/customers/') . $file->baseName.'_'.Yii::$app->security->generateRandomString(5).'.'.$file->extension)) { | ||
| 160 | + $this->image = $file->baseName.'_'.Yii::$app->security->generateRandomString(5).'.'.$file->extension; | ||
| 161 | + $this->file->name = $file->baseName.'_'.Yii::$app->security->generateRandomString(5).'.'.$file->extension;; | ||
| 162 | + return true; | ||
| 163 | + } | ||
| 164 | + return false; | ||
| 165 | + | ||
| 166 | + } | ||
| 167 | + return true; | ||
| 168 | + } | ||
| 145 | } | 169 | } |
frontend/assets/AppAsset.php
frontend/controllers/SiteController.php
| @@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
| 2 | namespace frontend\controllers; | 2 | namespace frontend\controllers; |
| 3 | 3 | ||
| 4 | use artbox\core\models\Feedback; | 4 | use artbox\core\models\Feedback; |
| 5 | + use common\models\Customer; | ||
| 5 | use common\models\Settings; | 6 | use common\models\Settings; |
| 6 | use common\models\speaker\Speaker; | 7 | use common\models\speaker\Speaker; |
| 7 | use Yii; | 8 | use Yii; |
| @@ -10,7 +11,8 @@ | @@ -10,7 +11,8 @@ | ||
| 10 | use yii\web\BadRequestHttpException; | 11 | use yii\web\BadRequestHttpException; |
| 11 | use yii\web\Controller; | 12 | use yii\web\Controller; |
| 12 | use yii\web\Response; | 13 | use yii\web\Response; |
| 13 | - | 14 | + use yii\web\UploadedFile; |
| 15 | + | ||
| 14 | /** | 16 | /** |
| 15 | * Site controller | 17 | * Site controller |
| 16 | */ | 18 | */ |
| @@ -149,5 +151,18 @@ | @@ -149,5 +151,18 @@ | ||
| 149 | } | 151 | } |
| 150 | } | 152 | } |
| 151 | 153 | ||
| 152 | - | 154 | + public function actionRegister() |
| 155 | + { | ||
| 156 | + $model = new Customer(); | ||
| 157 | + if ($model->load(\Yii::$app->request->post())){ | ||
| 158 | + | ||
| 159 | + if ($model->upload(UploadedFile::getInstance($model, 'file')) and $model->save()){ | ||
| 160 | + \Yii::$app->session->setFlash('success', \Yii::t('app', 'Дякуемо за реєстрацію. Підтвердження участі буде відправлено на вказаний email')); | ||
| 161 | + return $this->redirect(['site/index']); | ||
| 162 | + } | ||
| 163 | + } | ||
| 164 | + return $this->render('signup', [ | ||
| 165 | + 'model' => $model | ||
| 166 | + ]); | ||
| 167 | + } | ||
| 153 | } | 168 | } |
frontend/views/layouts/main.php
| @@ -65,6 +65,14 @@ | @@ -65,6 +65,14 @@ | ||
| 65 | ] | 65 | ] |
| 66 | ); | 66 | ); |
| 67 | $module = \Yii::$app->getModule('feedback'); | 67 | $module = \Yii::$app->getModule('feedback'); |
| 68 | + | ||
| 69 | + if (\Yii::$app->session->hasFlash('success')) { | ||
| 70 | + $message = \Yii::$app->session->getFlash('success'); | ||
| 71 | + $js = <<<JS | ||
| 72 | + success("$message"); | ||
| 73 | +JS; | ||
| 74 | + $this->registerJs($js, View::POS_READY); | ||
| 75 | + } | ||
| 68 | ?> | 76 | ?> |
| 69 | 77 | ||
| 70 | <?php $this->beginPage() ?> | 78 | <?php $this->beginPage() ?> |
frontend/views/site/signup.php
| @@ -2,34 +2,140 @@ | @@ -2,34 +2,140 @@ | ||
| 2 | 2 | ||
| 3 | /* @var $this yii\web\View */ | 3 | /* @var $this yii\web\View */ |
| 4 | /* @var $form yii\bootstrap\ActiveForm */ | 4 | /* @var $form yii\bootstrap\ActiveForm */ |
| 5 | -/* @var $model \frontend\models\SignupForm */ | 5 | +/* @var $model \common\models\Customer */ |
| 6 | 6 | ||
| 7 | use yii\helpers\Html; | 7 | use yii\helpers\Html; |
| 8 | -use yii\bootstrap\ActiveForm; | 8 | + use yii\web\View; |
| 9 | + use yii\widgets\ActiveForm; | ||
| 10 | +use common\models\Customer; | ||
| 9 | 11 | ||
| 10 | $this->title = 'Signup'; | 12 | $this->title = 'Signup'; |
| 11 | $this->params['breadcrumbs'][] = $this->title; | 13 | $this->params['breadcrumbs'][] = $this->title; |
| 14 | +$js = <<<JS | ||
| 15 | + $( '._datepicer' ).datepicker({ | ||
| 16 | + changeMonth: true, | ||
| 17 | + changeYear: true, | ||
| 18 | + dateFormat: 'dd.mm.yy', | ||
| 19 | + closeText: 'Закрыть', | ||
| 20 | + prevText: 'Пред', | ||
| 21 | + nextText: 'След', | ||
| 22 | + monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], | ||
| 23 | + monthNamesShort: ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], | ||
| 24 | + dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], | ||
| 25 | + dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], | ||
| 26 | + dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], | ||
| 27 | + firstDay: 1, | ||
| 28 | + defaultDate:'01.01.1990' | ||
| 29 | + }); | ||
| 30 | + | ||
| 31 | +JS; | ||
| 32 | + $this->registerJs($js, View::POS_LOAD) | ||
| 12 | ?> | 33 | ?> |
| 13 | -<div class="site-signup"> | ||
| 14 | - <h1><?= Html::encode($this->title) ?></h1> | ||
| 15 | - | ||
| 16 | - <p>Please fill out the following fields to signup:</p> | ||
| 17 | - | 34 | +<link rel="stylesheet" href="css/_buttons.scss"> |
| 35 | +<section class="section-register"> | ||
| 36 | + <div class="container"> | ||
| 18 | <div class="row"> | 37 | <div class="row"> |
| 19 | - <div class="col-lg-5"> | ||
| 20 | - <?php $form = ActiveForm::begin(['id' => 'form-signup']); ?> | ||
| 21 | - | ||
| 22 | - <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> | ||
| 23 | - | ||
| 24 | - <?= $form->field($model, 'email') ?> | ||
| 25 | - | ||
| 26 | - <?= $form->field($model, 'password')->passwordInput() ?> | ||
| 27 | - | ||
| 28 | - <div class="form-group"> | ||
| 29 | - <?= Html::submitButton('Signup', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?> | 38 | + <div class="col-xs-12 register-title"><?=\Yii::t('app', 'Реєстрація')?></div> |
| 39 | + </div> | ||
| 40 | + <div class="row"> | ||
| 41 | + <div class="col-xs-12 col-sm-10 col-sm-push-1"> | ||
| 42 | + <div class="form-register-wr"> | ||
| 43 | + <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']])?> | ||
| 44 | + <div class="row"> | ||
| 45 | + <div class="col-xs-12 col-sm-7 col-md-7 col-lg-6"> | ||
| 46 | + <div class="row"> | ||
| 47 | + <div class="col-xs-12 col-sm-12 col-md-9 col-md-push-2 form-register-inputs-wr"> | ||
| 48 | + <div class="input-wr"> | ||
| 49 | + <?=$form->field($model, 'secondname')->textInput(['class' => ''])?> | ||
| 50 | + </div> | ||
| 51 | + <div class="input-wr"> | ||
| 52 | + <?=$form->field($model, 'name')->textInput(['class' => ''])?> | ||
| 53 | + </div> | ||
| 54 | + | ||
| 55 | + <div class="input-wr"> | ||
| 56 | + <?=$form->field($model, 'dignity')->textInput(['class' => ''])?> | ||
| 57 | + </div> | ||
| 58 | + | ||
| 59 | + <div class="row"> | ||
| 60 | + <div class="col-xs-12 col-sm-6"> | ||
| 61 | + <div class="input-wr"> | ||
| 62 | + <?=$form->field($model, 'gender')->dropDownList([ | ||
| 63 | + Customer::MALE => \Yii::t('app', 'Male'), | ||
| 64 | + Customer::FEMALE => \Yii::t('app', 'Female'), | ||
| 65 | + ],['class' => ''])?> | ||
| 66 | + </div> | ||
| 67 | + </div> | ||
| 68 | + <div class="col-xs-12 col-sm-6"> | ||
| 69 | + <div class="input-wr"> | ||
| 70 | + <?=$form->field($model, 'birth')->textInput(['class' => '_datepicer'])?> | ||
| 71 | + </div> | ||
| 72 | + </div> | ||
| 73 | + </div> | ||
| 74 | + | ||
| 75 | + <div class="input-wr"> | ||
| 76 | + <?=$form->field($model, 'citizenship')->textInput(['class' => ''])?> | ||
| 77 | + </div> | ||
| 78 | + | ||
| 79 | + <div class="input-wr"> | ||
| 80 | + <?=$form->field($model, 'passport')->textInput(['class' => ''])?> | ||
| 81 | + </div> | ||
| 82 | + <div class="input-wr"> | ||
| 83 | + <?=$form->field($model, 'email')->textInput(['class' => ''])?> | ||
| 84 | + </div> | ||
| 85 | + <div class="input-wr"> | ||
| 86 | + <?=$form->field($model, 'organization')->textInput(['class' => ''])?> | ||
| 87 | + </div> | ||
| 88 | + </div> | ||
| 89 | + <div class="col-xs-12 col-sm-12 col-sm-push-1 col-md-push-2"> | ||
| 90 | + <div class="registr-text"><b>Участь у заходах</b> (відмітити необхідне)</div> | ||
| 91 | + | ||
| 92 | + <div class="input-wr sidebar_checks"> | ||
| 93 | + <?=$form->field($model, 'conference',[ | ||
| 94 | + 'template' => '{input}{label}', | ||
| 95 | + ]) | ||
| 96 | + ->checkbox([], false)->label(\Yii::t('app', 'Міністерська конференція'))?> | ||
| 97 | + </div> | ||
| 98 | + | ||
| 99 | + <div class="input-wr sidebar_checks"> | ||
| 100 | + <?=$form->field($model, 'geee',[ | ||
| 101 | + 'template' => '{input}{label}', | ||
| 102 | + ]) | ||
| 103 | + ->checkbox([], false)->label(\Yii::t('app', 'Група експертів з енергоефективності (GEEE)'))?> | ||
| 104 | + </div> | ||
| 105 | + | ||
| 106 | + <div class="input-wr sidebar_checks"> | ||
| 107 | + <?=$form->field($model, 'gere',[ | ||
| 108 | + 'template' => '{input}{label}', | ||
| 109 | + ]) | ||
| 110 | + ->checkbox([], false)->label(\Yii::t('app', 'Група експертів з відновлювальної ененргетики (GERE)'))?> | ||
| 111 | + </div> | ||
| 112 | + </div> | ||
| 30 | </div> | 113 | </div> |
| 31 | - | ||
| 32 | - <?php ActiveForm::end(); ?> | 114 | + </div> |
| 115 | + | ||
| 116 | + <div class="col-xs-12 col-sm-5 col-md-5 col-lg-6"> | ||
| 117 | + <div class="input-wr-file"> | ||
| 118 | + <?=$form->field($model, 'file',[ | ||
| 119 | + 'template' => '{label}{input}', | ||
| 120 | + ])->fileInput()->label(\Yii::t('app', '<span>приєднати фото</span>'))?> | ||
| 121 | + <!--выбранное изо--> | ||
| 122 | + <div class="img-file" style="display: none;"> | ||
| 123 | + <!--166x166--> | ||
| 124 | + <img src="/images/autor-img.jpg" alt=""> | ||
| 125 | + </div> | ||
| 126 | + </div> | ||
| 127 | + <div class="register-img-txt">зображення у форматі jpeg, gif, png розмір не більше 2Мб</div> | ||
| 128 | + </div> | ||
| 129 | + | ||
| 130 | + </div> | ||
| 131 | + <div class="row"> | ||
| 132 | + <div class="col-xs-12 button-wr"> | ||
| 133 | + <button type="submit">РЕЄСТРАЦІЯ</button> | ||
| 134 | + </div> | ||
| 135 | + </div> | ||
| 136 | + <?php ActiveForm::end(); ?> | ||
| 33 | </div> | 137 | </div> |
| 138 | + </div> | ||
| 34 | </div> | 139 | </div> |
| 35 | -</div> | 140 | + </div> |
| 141 | +</section> |
frontend/web/js/script.js
| @@ -637,7 +637,8 @@ $(document).ready(function() { | @@ -637,7 +637,8 @@ $(document).ready(function() { | ||
| 637 | } | 637 | } |
| 638 | //после удачной отправки формы запускать success() | 638 | //после удачной отправки формы запускать success() |
| 639 | // success() | 639 | // success() |
| 640 | - function success() { | 640 | + function success(message) { |
| 641 | + document.querySelector('#success_form .txt-success').innerHTML = message; | ||
| 641 | var pos = ($(window).scrollTop()) + 30; | 642 | var pos = ($(window).scrollTop()) + 30; |
| 642 | $('.forms_').animate({opacity: 0, top: '0'}, 200,function(){ | 643 | $('.forms_').animate({opacity: 0, top: '0'}, 200,function(){ |
| 643 | $(this).css('display', 'none'); | 644 | $(this).css('display', 'none'); |
| @@ -655,5 +656,58 @@ $(document).ready(function() { | @@ -655,5 +656,58 @@ $(document).ready(function() { | ||
| 655 | } | 656 | } |
| 656 | 657 | ||
| 657 | 658 | ||
| 659 | + window.success = success; | ||
| 658 | 660 | ||
| 659 | -}) | ||
| 660 | \ No newline at end of file | 661 | \ No newline at end of file |
| 662 | +}); | ||
| 663 | + | ||
| 664 | +var fileInput = document.getElementById('customer-file'); | ||
| 665 | +//var removeFileSelector = document.getElementsByClassName('remove-file-img')[ 0 ]; | ||
| 666 | +if (fileInput !== null){ | ||
| 667 | + fileInput.addEventListener('change', function(event) { | ||
| 668 | + var file = event.target.files[ 0 ]; | ||
| 669 | + // if (validateFiles(file)) { | ||
| 670 | + // displayImage(file); | ||
| 671 | + // } else { | ||
| 672 | + // new PNotify({ | ||
| 673 | + // title: "", | ||
| 674 | + // text: "Ошибка. Файл должен быть картинкой, не более 3Мб", | ||
| 675 | + // type: 'info', | ||
| 676 | + // styling: 'brighttheme' | ||
| 677 | + // }); | ||
| 678 | + // } | ||
| 679 | + | ||
| 680 | + displayImage(file); | ||
| 681 | + | ||
| 682 | + }); | ||
| 683 | +} | ||
| 684 | + | ||
| 685 | + | ||
| 686 | +//removeFileSelector.addEventListener('click', function(event) { | ||
| 687 | +// event.preventDefault(); | ||
| 688 | +// document.getElementsByClassName('cab-file-wrapp')[ 1 ].classList.remove('vis_'); | ||
| 689 | +// imageFile = null; | ||
| 690 | +//}); | ||
| 691 | + | ||
| 692 | +function validateFiles(file) { | ||
| 693 | + if (types.indexOf(file.type) !== -1 && file.size < maxFileSize) { | ||
| 694 | + return true; | ||
| 695 | + } else { | ||
| 696 | + return false; | ||
| 697 | + | ||
| 698 | + } | ||
| 699 | +} | ||
| 700 | + | ||
| 701 | +function displayImage(file) { | ||
| 702 | + | ||
| 703 | + var fr = new FileReader(); | ||
| 704 | + fr.onload = (function(file) { | ||
| 705 | + return function() { | ||
| 706 | + var selector = document.querySelector(".img-file"); | ||
| 707 | + selector.querySelector('img') | ||
| 708 | + .setAttribute('src', this.result); | ||
| 709 | + selector.style.display = 'block'; | ||
| 710 | + | ||
| 711 | + } | ||
| 712 | + })(file); | ||
| 713 | + fr.readAsDataURL(file); | ||
| 714 | +} | ||
| 661 | \ No newline at end of file | 715 | \ No newline at end of file |