2namespace dbx\dbxUser_admin;
3dbx()->use_system_class(
'dbxForm');
4require_once dirname(__DIR__, 3) .
'/include/dbxPasswordPolicy.class.php';
6Class dbxUser_profil extends \dbxObj {
8 public function run($action) {
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');
18 $uid = (int)
dbx()->user();
19 $work =
dbx()->get_modul_var(
'dbx_run2',
'',
'parameter');
21 $requestedRid = (
$work ===
'new_user') ? 0 : (int)
dbx()->get_request_var(
'rid', $uid,
'int');
22 if ($requestedRid < 0) {
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);
31 $oForm->_rid = (int) $rid;
32 $oForm->set_state_value(
'rid', (
int) $rid);
34 $data = $rid > 0 ? $oDB->select1(
$dd, $rid) : array(
'id' => 0);
36 if (!is_array($data)) {
37 return '<div class="alert alert-warning">' .
dbx()->esc($texts->get_fd_message(
'user_not_found')) .
'</div>';
39 $currentPasswordHash = (string)($data[
'pass'] ??
'');
41 $data[
'pass_repeat'] =
'';
42 $passwordMinLength = \dbxPasswordPolicy::minimumLength();
43 $oForm->add_rep(
'password_min_length', (
string)$passwordMinLength);
45 'password_length_recommendation',
46 $passwordMinLength < 12 ?
' · 12+ empfohlen' :
''
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');
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'),
62 $texts->get_fd_message(
'profile_subtitle')
64 $oForm->add_module_bar_form_actions(array(
67 'reload_url' => $actionUrl,
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')
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')
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')
92 $options_confirm = array(
93 0 => $texts->get_fd_message(
'no'),
94 1 => $texts->get_fd_message(
'yes')
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')
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')
111 $oForm->add_fld(
'uname' ,
'text-label', label: $texts->get_fd_message(
'label_username'));
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.'
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.',
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));
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'));
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'));
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'));
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'));
156 if($oForm->submit()) {
157 $pas = (string)$oForm->get_post_data(
'pass',
'',
'*');
158 $pasRepeat = (string)$oForm->get_post_data(
163 $passwordErrorMessage =
'';
164 if ($pas !==
'' || $pasRepeat !==
'') {
168 $currentPasswordHash,
175 $oForm->add_fld_error(
180 $passwordErrorMessage = implode(
185 if(!$oForm->errors()) {
186 $change = $oForm->changed();
188 $saveRid = (int) $rid;
191 $oForm->_post[
'pass'] = password_hash(
195 $settings = json_decode(
196 (
string)($data[
'settings'] ??
''),
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(
204 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
207 unset($oForm->_post[
'pass']);
209 unset($oForm->_post[
'pass_repeat']);
212 unset($oForm->_post[
'id']);
215 $ok = $oForm->save_post(
$dd, $saveRid);
217 $rid = (int) $oForm->_rid;
218 $oForm->_action =
'?dbx_modul=dbxUser_admin&dbx_run1=user&dbx_run2=edit_profil&rid=' . $rid;
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');
224 $oForm->_msg_success = $texts->get_fd_message(
'no_change');
228 foreach ($oForm->_errors as $key =>
$value) {
229 $err_flds .= $key .
' ';
231 $oForm->_msg_error = $passwordErrorMessage !==
''
232 ? $passwordErrorMessage
233 : $texts->get_fd_message(
'check_input')
234 .
' (' . trim($err_flds) .
')';
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));
dbx()
Liefert die zentrale dbXapp-API als Singleton.