RegistrationForm.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace app\models;
  3. use Yii;
  4. use app\models\Profile;
  5. use dektrium\user\models\RegistrationForm as BaseRegistrationForm;
  6. class RegistrationForm extends BaseRegistrationForm
  7. {
  8. public $role;
  9. public $fio;
  10. public $at_org;
  11. public $org_type;
  12. public $member_phone;
  13. public $fax;
  14. public $firma_full;
  15. public $inn;
  16. public $zkpo;
  17. public $u_address;
  18. public $f_address;
  19. public $member;
  20. public $phone;
  21. public $member_email;
  22. public $site;
  23. // public $captcha;
  24. public $repeatpassword;
  25. // public function rules()
  26. // {
  27. // $rules = parent::rules();
  28. // $rules[] = [['role', 'fio', 'at_org', 'org_type', 'member_phone', 'phone', 'member_email', 'email', 'username', 'password'], 'required'];
  29. // $rules[] = [['fax', 'site', 'member', 'repeatpassword'], 'safe'];
  30. // $rules[] = ['role', 'in', 'range' => [1, 2]];
  31. // $rules[] = ['org_type', 'in', 'range' => ['entity', 'individual', 'fop']];
  32. // $rules[] = ['member_email', 'email'];
  33. // // $rules[] = ['captcha', 'captcha', 'captchaAction' => 'registration/captcha'];
  34. // $rules[] = ['repeatpassword', 'compare', 'compareAttribute' => 'password', 'message' => Yii::t('app', "Passwords don't match")];
  35. // $rules[] = [['firma_full', 'inn', 'zkpo', 'u_address', 'f_address'], 'required', 'when' => function ($model) {
  36. // return $model->role == 1;
  37. // }, 'whenClient' => "function(attribute, value) {
  38. // return $('#registrationform-role input:checked').val() == '1';
  39. // }"];
  40. // $rules[] = [['firma_full', 'inn', 'zkpo', 'u_address', 'f_address'], 'default', 'value' => null];
  41. // return $rules;
  42. // }
  43. public function rules()
  44. {
  45. $rules = parent::rules();
  46. $rules[] = [['role', 'org_type', 'phone', 'u_address', 'fio', 'inn'], 'required'];
  47. $rules[] = ['inn', 'match', 'pattern' => '/^[0-9]+$/'];
  48. $rules[] = ['inn', 'string', 'min' => 6, 'max' => 20];
  49. $rules[] = ['zkpo', 'match', 'pattern' => '/^[0-9]+$/'];
  50. $rules[] = ['zkpo', 'string', 'min' => 6];
  51. $rules[] = ['role', 'in', 'range' => [1, 2]];
  52. $rules[] = ['org_type', 'in', 'range' => ['entity', 'individual', 'fop']];
  53. $rules[] = [['email', 'username', 'password', 'repeatpassword'], 'required'];
  54. $rules[] = ['email', 'email'];
  55. $rules[] = ['repeatpassword', 'compare', 'compareAttribute' => 'password', 'message' => Yii::t('app', "Passwords don't match")];
  56. $rules[] = [['at_org','member','f_address', 'zkpo'], 'safe'];
  57. $rules[] = ['at_org', 'required',
  58. 'when' => fn($model) => !($model->org_type === 'entity'),
  59. 'whenClient' => "function () {
  60. return !(
  61. $('input[name=\"register-form[org_type]\"]:checked').val() == 'entity'
  62. );
  63. }"
  64. ];
  65. return $rules;
  66. }
  67. public function attributeLabels()
  68. {
  69. return array_merge(parent::attributeLabels(), [
  70. 'fio' => Yii::t('app', 'FIO'),
  71. 'role' => Yii::t('app', 'Role'),
  72. 'at_org' => Yii::t('app', 'Company full name'),
  73. 'org_type' => Yii::t('app', 'Organization type'),
  74. 'member_phone' => Yii::t('app', 'Member phone'),
  75. 'fax' => Yii::t('app', 'Fax'),
  76. 'firma_full' => Yii::t('app', 'Full organization name'),
  77. 'inn' => Yii::t('app', 'ЄДРПОУ/ІПН'),
  78. // 'zkpo' => Yii::t('app', 'ZKPO'),
  79. 'u_address' => Yii::t('app', 'Legal address'),
  80. 'f_address' => Yii::t('app', 'Personal address'),
  81. 'member' => Yii::t('app', 'Contact Person'),
  82. 'phone' => Yii::t('app', 'Phone'),
  83. 'member_email' => Yii::t('app', 'E-mail'),
  84. 'site' => Yii::t('app', 'Site'),
  85. // 'captcha' => Yii::t('app', 'Captcha'),
  86. 'repeatpassword' => Yii::t('app', 'Repeat Password'),
  87. 'files' => Yii::t('app', 'Files') . ' (jpg, doc, pdf)',
  88. ]);
  89. }
  90. public function register()
  91. {
  92. if (!$this->validate()) {
  93. Yii::error('Validation failed: ' . print_r($this->errors, true), __METHOD__);
  94. return false;
  95. }
  96. // Создаем пользователя
  97. $user = Yii::createObject(User::class);
  98. $user->setScenario('register');
  99. $user->username = $this->username;
  100. $user->email = $this->email;
  101. $user->password = $this->password;
  102. $user->fio = $this->fio;
  103. $user->at_org = $this->at_org;
  104. if(empty(trim($user->at_org))){
  105. $user->at_org = $this->fio;
  106. }
  107. $user->org_type = $this->org_type;
  108. $user->member_phone = $this->member_phone || 0;
  109. $user->fax = $this->fax || 0;
  110. $user->role = $this->role;
  111. if (!$user->save()) {
  112. Yii::error('User save failed: ' . print_r($user->errors, true), __METHOD__);
  113. return false;
  114. }
  115. // Создаем профиль
  116. $profile = Profile::findOne(['user_id' => $user->id]);
  117. if (!$profile) {
  118. $profile = new Profile();
  119. $profile->user_id = $user->id;
  120. }
  121. $profile->fio = $this->fio;
  122. $profile->at_org = $this->at_org;
  123. $profile->org_type = $this->org_type;
  124. $profile->member_phone = $this->member_phone;
  125. $profile->fax = $this->fax;
  126. $profile->firma_full = $this->firma_full;
  127. $profile->inn = $this->inn;
  128. $profile->zkpo = $this->inn;
  129. $profile->u_address = $this->u_address;
  130. $profile->f_address = $this->f_address;
  131. $profile->member = $this->member;
  132. $profile->phone = $this->phone;
  133. $profile->member_email = $this->email;
  134. $profile->site = $this->site;
  135. if (!$profile->save()) {
  136. Yii::error('Profile save failed: ' . print_r($profile->errors, true), __METHOD__);
  137. $user->delete(); // Удаляем пользователя, если профиль не сохранился
  138. return false;
  139. }
  140. return $user;
  141. }
  142. }