33 public function run() {
34 $uid = (int)
dbx()->user();
36 $db =
dbx()->get_system_obj(
'dbxDB');
37 $data =
$db->select1($this->ddUser, $uid);
38 $oForm =
dbx()->get_system_obj(
'dbxForm');
39 $oForm->init(
'dbxUser_profil',
'form-profil');
40 $oForm->_fd =
'dbxUser|user-profile';
41 $oForm->load_fd_messages();
42 if (!is_array($data)) {
43 return '<div class="alert alert-warning">'
44 . $oForm->get_fd_message(
'user_not_found')
47 $data[
'password_new'] =
'';
48 $data[
'password_new2'] =
'';
50 $oForm->add_rep(
'password_min_length', (
string)$passwordMinLength);
52 'password_length_recommendation',
53 $passwordMinLength < 12 ?
' · 12+ empfohlen' :
''
55 $designOptions = $this->design_options();
56 $colorOptions = $this->color_options($oForm);
57 if (!isset($designOptions[(
string)($data[
'design'] ??
'')])) {
58 $data[
'design'] = array_key_first($designOptions);
60 if (!isset($colorOptions[(
string)($data[
'color'] ??
'')])) {
61 $data[
'color'] =
'hell';
64 $oForm->set_workflow_scope(
'self-' . $uid);
65 $oForm->_dd = $this->ddUser;
66 $oForm->_fld_id =
'id';
67 $oForm->_data = $data;
68 $oForm->_msg_info = $oForm->get_fd_message(
'profile_info');
69 $oForm->_action =
'?dbx_modul=dbxUser&dbx_run1=user&dbx_run2=edit_profil';
70 $oForm->set_activ_id($uid);
72 $oForm->set_state_value(
'rid', $uid);
73 $oForm->add_module_bar(
74 $oForm->get_fd_message(
'profile_title'),
76 $oForm->get_fd_message(
'profile_subtitle')
78 $oForm->prepare_form_shell(array(
79 'class' =>
'dbx-user-profile-form',
80 'form_attrs' =>
'enctype="multipart/form-data"',
82 $oForm->add_module_bar_form_actions(array(
86 'reload_url' =>
'?dbx_modul=dbxUser&dbx_run1=user&dbx_run2=edit_profil',
89 $avatarObj =
dbx()->get_include_obj(
'dbxUser_avatar');
90 $oForm->add_obj(
'obs_rid',
'dbx|observe',
'name=usr_rid&value=' . (
int)$uid);
91 $oForm->add_obj(
'avatar',
'obj-value', $avatarObj->run());
93 $oForm->add_fld(
'name',
'text-label', $oForm->get_fd_message(
'label_name'),
'varchar|max=255');
94 $oForm->add_fld(
'name2',
'text-label', $oForm->get_fd_message(
'label_name2'),
'varchar|max=255');
95 $oForm->add_fld(
'email',
'text-label', $oForm->get_fd_message(
'label_email'),
'email|max=255');
96 $oForm->add_fld(
'telefon',
'text-label', $oForm->get_fd_message(
'label_phone'),
'varchar|max=64');
97 $oForm->add_fld(
'handy',
'text-label', $oForm->get_fd_message(
'label_mobile'),
'varchar|max=64');
98 $oForm->add_fld(
'strasse',
'text-label', $oForm->get_fd_message(
'label_street'),
'varchar|max=255');
99 $oForm->add_fld(
'plz',
'text-label', $oForm->get_fd_message(
'label_postcode'),
'varchar|max=16');
100 $oForm->add_fld(
'ort',
'text-label', $oForm->get_fd_message(
'label_city'),
'varchar|max=255');
101 $oForm->add_fld(
'land',
'text-label', $oForm->get_fd_message(
'label_country'),
'parameter|max=32');
102 $oForm->add_fld(
'language',
'select-single-label', $oForm->get_fd_message(
'label_language'),
'parameter|max=3', options: array(
103 'de' => $oForm->get_fd_message(
'language_de'),
104 'en' => $oForm->get_fd_message(
'language_en'),
105 'es' => $oForm->get_fd_message(
'language_es'),
107 $oForm->add_fld(
'design',
'select-single-label', $oForm->get_fd_message(
'label_design'),
'parameter|max=32', options: $designOptions);
108 $oForm->add_fld(
'color',
'select-single-label', $oForm->get_fd_message(
'label_color'),
'parameter|max=32', options: $colorOptions);
112 $oForm->get_fd_message(
'label_password_new'),
114 placeholder: $oForm->get_fd_message(
'password_unchanged_placeholder'),
115 tooltip:
'Nur ausfüllen, wenn das Passwort geändert werden soll.'
120 $oForm->get_fd_message(
'label_password_repeat'),
122 placeholder: $oForm->get_fd_message(
'password_repeat_placeholder'),
123 tooltip:
'Das neue Passwort zur Kontrolle noch einmal eingeben.'
127 if ($oForm->submit()) {
128 $passwordNew = (string)$oForm->get_post_data(
'password_new',
'',
'*');
129 $passwordNew2 = (string)$oForm->get_post_data(
'password_new2',
'',
'*');
130 $passwordChanged =
false;
131 $passwordErrorMessage =
'';
133 if ($passwordNew !==
'' || $passwordNew2 !==
'') {
137 (
string)($data[
'pass'] ??
''),
141 $oForm->add_fld_error(
147 $oForm->add_fld_error(
152 $passwordErrorMessage = implode(
157 $passwordChanged =
true;
161 if (!$oForm->errors() && !$oForm->warnings()) {
163 'name' => $oForm->get_post(
'name',
'',
'varchar|max=255'),
164 'name2' => $oForm->get_post(
'name2',
'',
'varchar|max=255'),
165 'email' => $oForm->get_post(
'email',
'',
'email|max=255'),
166 'telefon' => $oForm->get_post(
'telefon',
'',
'varchar|max=64'),
167 'handy' => $oForm->get_post(
'handy',
'',
'varchar|max=64'),
168 'strasse' => $oForm->get_post(
'strasse',
'',
'varchar|max=255'),
169 'plz' => $oForm->get_post(
'plz',
'',
'varchar|max=16'),
170 'ort' => $oForm->get_post(
'ort',
'',
'varchar|max=255'),
171 'land' => $oForm->get_post(
'land',
'',
'parameter|max=32'),
172 'language' => $oForm->get_post(
'language',
'de',
'parameter|max=3'),
173 'design' => $oForm->get_post(
'design', (
string)array_key_first($designOptions),
'parameter|max=32'),
174 'color' => $oForm->get_post(
'color',
'hell',
'parameter|max=32'),
175 'settings' => (
string)($data[
'settings'] ??
'{}'),
177 if (!isset($designOptions[$values[
'design']])) {
178 $values[
'design'] = (string)array_key_first($designOptions);
180 if (!isset($colorOptions[$values[
'color']])) {
181 $values[
'color'] =
'hell';
183 if ($passwordChanged) {
184 $values[
'pass'] = password_hash($passwordNew, PASSWORD_DEFAULT);
185 $settings = json_decode((
string)($data[
'settings'] ??
''),
true);
186 $settings = is_array($settings) ? $settings : array();
187 unset($settings[
'password_reset_required']);
188 $settings[
'password_changed_at'] = date(DATE_ATOM);
189 $values[
'settings'] = json_encode(
191 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
195 $ok =
$db->update($this->ddUser, $values, $uid);
196 $avatarSaved =
false;
198 if (
$ok && is_object($avatarObj) && method_exists($avatarObj,
'save_upload')) {
199 $avatarSaved = $avatarObj->save_upload($uid,
$db, $data, $oForm, $avatarError);
200 if ($avatarError !==
'') {
202 $oForm->_msg_error = $avatarError;
205 $oForm->_msg_success =
$ok
206 ? ($passwordChanged && $avatarSaved
207 ? $oForm->get_fd_message(
'profile_password_avatar_saved')
209 ? $oForm->get_fd_message(
'profile_password_saved')
211 ? $oForm->get_fd_message(
'profile_avatar_saved')
212 : $oForm->get_fd_message(
'profile_saved'))))
213 : $oForm->get_fd_message(
'profile_save_error');
215 $oForm->_msg_error = $passwordErrorMessage !==
''
216 ? $passwordErrorMessage
217 : $oForm->get_fd_message(
'check_input');
221 return $oForm->run();