dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
admin/include/dbxUser_profil.class.php
Go to the documentation of this file.
1<?php
2namespace dbx\dbxUser_admin;
3dbx()->use_system_class('dbxForm');
4require_once dirname(__DIR__, 3) . '/include/dbxPasswordPolicy.class.php';
5
6Class dbxUser_profil extends \dbxObj {
7
8 public function run($action) {
9 $content = '';
10 $texts = new \dbxForm();
11 $texts->init('dbxUser_admin_profile_texts');
12 $texts->_fd = 'dbxUser_admin|user-admin';
13 $texts->load_fd_messages();
14 $texts->set_form_help_enabled(false);
15 $oForm = dbx()->get_system_obj('dbxForm');
16 $oDB = dbx()->get_system_obj('dbxDB');
17 $dd = 'dbxUser';
18 $uid = (int) dbx()->user();
19 $work = dbx()->get_modul_var('dbx_run2', '', 'parameter');
20
21 $requestedRid = ($work === 'new_user') ? 0 : (int) dbx()->get_request_var('rid', $uid, 'int');
22 if ($requestedRid < 0) {
23 $requestedRid = $uid;
24 }
25
26 $oForm->init('form-profil');
27 $oForm->_fd = 'dbxUser_admin|user-admin';
28 $oForm->load_fd_messages();
29 $oForm->set_workflow_scope('admin-profil-' . (int) $requestedRid);
30 $rid = $requestedRid;
31 $oForm->_rid = (int) $rid;
32 $oForm->set_state_value('rid', (int) $rid);
33
34 $data = $rid > 0 ? $oDB->select1($dd, $rid) : array('id' => 0);
35
36 if (!is_array($data)) {
37 return '<div class="alert alert-warning">' . dbx()->esc($texts->get_fd_message('user_not_found')) . '</div>';
38 }
39 $currentPasswordHash = (string)($data['pass'] ?? '');
40 $data['pass'] = '';
41 $data['pass_repeat'] = '';
42 $passwordMinLength = \dbxPasswordPolicy::minimumLength();
43 $oForm->add_rep('password_min_length', (string)$passwordMinLength);
44 $oForm->add_rep(
45 'password_length_recommendation',
46 $passwordMinLength < 12 ? ' · 12+ empfohlen' : ''
47 );
48
49 $actionUrl = $work === 'new_user'
50 ? '?dbx_modul=dbxUser_admin&dbx_run1=user&dbx_run2=new_user'
51 : '?dbx_modul=dbxUser_admin&dbx_run1=user&dbx_run2=edit_profil&rid=' . $rid;
52 $oForm->_data = $data;
53 $oForm->_msg_info = $texts->get_fd_message('profile_info');
54 $oForm->_dd = $dd;
55 $oForm->_action = $actionUrl;
56 $oForm->add_rep('frame_skip_form_wrap', '1');
57 $oForm->add_rep('frame_panel_class', 'dbxForm_wrapper dbx-user-profile-form');
58 $oForm->add_rep('action_save', $texts->get_fd_message('action_save'));
59 $oForm->add_module_bar(
60 $texts->get_fd_message('profile_title'),
61 'bi-person-badge',
62 $texts->get_fd_message('profile_subtitle')
63 );
64 $oForm->add_module_bar_form_actions(array(
65 'save' => true,
66 'reload' => true,
67 'reload_url' => $actionUrl,
68 'delete' => false,
69 ));
70
71 $options_land = array(
72 '' => $texts->get_fd_message('selection'),
73 'de' => $texts->get_fd_message('country_de'),
74 'at' => $texts->get_fd_message('country_at'),
75 'ch' => $texts->get_fd_message('country_ch'),
76 'us' => $texts->get_fd_message('country_us')
77 );
78
79 $options_language = array(
80 'de' => $texts->get_fd_message('language_de'),
81 'en' => $texts->get_fd_message('language_en'),
82 'es' => $texts->get_fd_message('language_es')
83 );
84
85 $options_status = array(
86 0 => $texts->get_fd_message('status_new'),
87 1 => $texts->get_fd_message('status_active'),
88 2 => $texts->get_fd_message('status_locked'),
89 3 => $texts->get_fd_message('status_archive')
90 );
91
92 $options_confirm = array(
93 0 => $texts->get_fd_message('no'),
94 1 => $texts->get_fd_message('yes')
95 );
96
97 $options_gender = array(
98 '' => $texts->get_fd_message('selection'),
99 'm' => $texts->get_fd_message('gender_m'),
100 'w' => $texts->get_fd_message('gender_f'),
101 'd' => $texts->get_fd_message('gender_d')
102 );
103
104 $options_anrede = array(
105 '' => $texts->get_fd_message('selection'),
106 'Herr' => $texts->get_fd_message('salutation_mr'),
107 'Frau' => $texts->get_fd_message('salutation_ms'),
108 'Divers' => $texts->get_fd_message('salutation_diverse')
109 );
110
111 $oForm->add_fld('uname' ,'text-label', label: $texts->get_fd_message('label_username'));
112 $oForm->add_fld(
113 'pass',
114 'password-label',
115 label: $texts->get_fd_message('label_password_new'),
116 rules: 'varchar|max=128',
117 placeholder: $texts->get_fd_message('password_unchanged_placeholder'),
118 tooltip: 'Nur ausfüllen, wenn ein neues Passwort gesetzt werden soll.'
119 );
120 $oForm->add_fld(
121 'pass_repeat',
122 'password-label',
123 label: $texts->get_fd_message('label_password_repeat'),
124 rules: 'varchar|max=128',
125 placeholder: $texts->get_fd_message('password_repeat_placeholder'),
126 tooltip: 'Das neue Passwort zur Kontrolle noch einmal eingeben.',
127 dd: ''
128 );
129 $oForm->add_fld('status' ,'select-single-label', label: $texts->get_fd_message('label_status'), options: $options_status);
130 $oForm->add_fld('is_confirm','select-single-label', label: $texts->get_fd_message('label_confirmed_short'), options: $options_confirm);
131 $oForm->add_fld('roles' ,'multi-select', label: $texts->get_fd_message('label_roles'), rules: 'array|parameter', class: 'dbxMultiSelect2', data: array('size' => 8));
132
133 $oForm->add_fld('anrede' ,'select-single-label', label: $texts->get_fd_message('label_salutation'), options: $options_anrede);
134 $oForm->add_fld('geschlecht','select-single-label', label: $texts->get_fd_message('label_gender'), options: $options_gender);
135 $oForm->add_fld('name' ,'text-label', label: $texts->get_fd_message('label_first_name'));
136 $oForm->add_fld('name2' ,'text-label', label: $texts->get_fd_message('label_last_name'));
137 $oForm->add_fld('geburtstag','date-label', label: $texts->get_fd_message('label_birthday'));
138
139 $oForm->add_fld('email' ,'text-label', label: $texts->get_fd_message('label_email'));
140 $oForm->add_fld('emailbill' ,'text-label', label: $texts->get_fd_message('label_billing_email'));
141 $oForm->add_fld('telefon' ,'text-label', label: $texts->get_fd_message('label_phone'));
142 $oForm->add_fld('handy' ,'text-label', label: $texts->get_fd_message('label_mobile'));
143 $oForm->add_fld('fax' ,'text-label', label: $texts->get_fd_message('label_fax'));
144
145 $oForm->add_fld('strasse' ,'text-label', label: $texts->get_fd_message('label_street'));
146 $oForm->add_fld('land' ,'select-single-label', label: $texts->get_fd_message('label_country'), options: $options_land);
147 $oForm->add_fld('plz' ,'text-label', label: $texts->get_fd_message('label_zip'));
148 $oForm->add_fld('ort' ,'text-label', label: $texts->get_fd_message('label_city'));
149
150 $oForm->add_fld('language' ,'select-single-label', label: $texts->get_fd_message('label_language'), options: $options_language);
151 $oForm->add_fld('design' ,'text-label', label: $texts->get_fd_message('label_design'));
152 $oForm->add_fld('color' ,'text-label', label: $texts->get_fd_message('label_color'));
153 $oForm->add_fld('login_pid' ,'text-label', label: $texts->get_fd_message('label_login_page'));
154 $oForm->add_fld('logout_pid','text-label', label: $texts->get_fd_message('label_logout_page'));
155
156 if($oForm->submit()) {
157 $pas = (string)$oForm->get_post_data('pass', '', '*');
158 $pasRepeat = (string)$oForm->get_post_data(
159 'pass_repeat',
160 '',
161 '*'
162 );
163 $passwordErrorMessage = '';
164 if ($pas !== '' || $pasRepeat !== '') {
165 $passwordErrors = \dbxPasswordPolicy::errors(
166 $pas,
167 $pasRepeat,
168 $currentPasswordHash,
169 $passwordMinLength
170 );
171 if (isset($passwordErrors['password'])) {
172 $oForm->add_fld_error('pass', $passwordErrors['password']);
173 }
174 if (isset($passwordErrors['repeat'])) {
175 $oForm->add_fld_error(
176 'pass_repeat',
177 $passwordErrors['repeat']
178 );
179 }
180 $passwordErrorMessage = implode(
181 ' ',
182 array_values(array_unique($passwordErrors))
183 );
184 }
185 if(!$oForm->errors()) {
186 $change = $oForm->changed();
187 if ($change) {
188 $saveRid = (int) $rid;
189
190 if ($pas !== '') {
191 $oForm->_post['pass'] = password_hash(
192 $pas,
193 PASSWORD_DEFAULT
194 );
195 $settings = json_decode(
196 (string)($data['settings'] ?? ''),
197 true
198 );
199 $settings = is_array($settings) ? $settings : array();
200 unset($settings['password_reset_required']);
201 $settings['password_changed_at'] = date(DATE_ATOM);
202 $oForm->_post['settings'] = json_encode(
203 $settings,
204 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
205 );
206 } else {
207 unset($oForm->_post['pass']);
208 }
209 unset($oForm->_post['pass_repeat']);
210
211 if ($saveRid > 0) {
212 unset($oForm->_post['id']);
213 }
214
215 $ok = $oForm->save_post($dd, $saveRid);
216 if ($ok) {
217 $rid = (int) $oForm->_rid;
218 $oForm->_action = '?dbx_modul=dbxUser_admin&dbx_run1=user&dbx_run2=edit_profil&rid=' . $rid;
219 }
220
221 if ( $ok) $oForm->_msg_success = $texts->get_fd_message('user_saved');
222 if (!$ok) $oForm->_msg_error = $texts->get_fd_message('user_save_error');
223 } else {
224 $oForm->_msg_success = $texts->get_fd_message('no_change');
225 }
226 } else {
227 $err_flds = '';
228 foreach ($oForm->_errors as $key => $value) {
229 $err_flds .= $key . ' ';
230 }
231 $oForm->_msg_error = $passwordErrorMessage !== ''
232 ? $passwordErrorMessage
233 : $texts->get_fd_message('check_input')
234 . ' (' . trim($err_flds) . ')';
235 }
236 }
237
238 $rid = $oForm->_data['id'] ?? $rid;
239 $oForm->add_obj('obs_rid', 'dbx|observe', 'name=usr_rid&value=' . (int) $rid);
240 $oForm->add_obj('avatar', 'obj-value', dbx()->get_include_obj('dbxUser_avatar')->run((int) $rid));
241
242 $content = $oForm->run();
243 return $content;
244 }
245}
246
247?>
dbx()
Liefert die zentrale dbXapp-API als Singleton.
Definition dbxApi.php:2805