Commit 2beb82f0b10bc8b73c53975fb8f5fa92d64959e0

Authored by Anastasia
1 parent 182feb54

register

common/models/Customer.php
... ... @@ -3,7 +3,8 @@
3 3 namespace common\models;
4 4  
5 5 use Yii;
6   -
  6 + use yii\helpers\FileHelper;
  7 +
7 8 /**
8 9 * This is the model class for table "customer".
9 10 *
... ... @@ -26,6 +27,7 @@
26 27 */
27 28 class Customer extends \yii\db\ActiveRecord
28 29 {
  30 + public $file;
29 31 const STATUS_NEW = 2;
30 32 const STATUS_ACTIVE = 1;
31 33 const STATUS_NO = 0;
... ... @@ -103,7 +105,6 @@
103 105 'organization',
104 106 'name',
105 107 'secondname',
106   - 'dignity',
107 108 'birth',
108 109 'citizenship',
109 110 'passport',
... ... @@ -113,7 +114,7 @@
113 114 'required',
114 115 ],
115 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 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
... ... @@ -16,6 +16,7 @@
16 16 ];
17 17 public $js = [
18 18 'js/script.js',
  19 + 'js/jquery-ui.min.js'
19 20 ];
20 21 public $depends = [
21 22 'yii\web\YiiAsset',
... ...
frontend/controllers/SiteController.php
... ... @@ -2,6 +2,7 @@
2 2 namespace frontend\controllers;
3 3  
4 4 use artbox\core\models\Feedback;
  5 + use common\models\Customer;
5 6 use common\models\Settings;
6 7 use common\models\speaker\Speaker;
7 8 use Yii;
... ... @@ -10,7 +11,8 @@
10 11 use yii\web\BadRequestHttpException;
11 12 use yii\web\Controller;
12 13 use yii\web\Response;
13   -
  14 + use yii\web\UploadedFile;
  15 +
14 16 /**
15 17 * Site controller
16 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 65 ]
66 66 );
67 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 78 <?php $this->beginPage() ?>
... ...
frontend/views/site/signup.php
... ... @@ -2,34 +2,140 @@
2 2  
3 3 /* @var $this yii\web\View */
4 4 /* @var $form yii\bootstrap\ActiveForm */
5   -/* @var $model \frontend\models\SignupForm */
  5 +/* @var $model \common\models\Customer */
6 6  
7 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 12 $this->title = 'Signup';
11 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 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 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 137 </div>
  138 + </div>
34 139 </div>
35   -</div>
  140 + </div>
  141 +</section>
... ...
frontend/web/js/script.js
... ... @@ -637,7 +637,8 @@ $(document).ready(function() {
637 637 }
638 638 //после удачной отправки формы запускать success()
639 639 // success()
640   - function success() {
  640 + function success(message) {
  641 + document.querySelector('#success_form .txt-success').innerHTML = message;
641 642 var pos = ($(window).scrollTop()) + 30;
642 643 $('.forms_').animate({opacity: 0, top: '0'}, 200,function(){
643 644 $(this).css('display', 'none');
... ... @@ -655,5 +656,58 @@ $(document).ready(function() {
655 656 }
656 657  
657 658  
  659 + window.success = success;
658 660  
659   -})
660 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 715 \ No newline at end of file
... ...