dbxapp 4.1.3
CMS, Shop, Workflows und modulare Geschäftsanwendungen
Loading...
Searching...
No Matches
include/dbxUser_profil.class.php
Go to the documentation of this file.
1<?php
2namespace dbx\dbxUser;
3
4require_once dirname(__DIR__, 3) . '/include/dbxPasswordPolicy.class.php';
5
7
8 private string $ddUser = 'dbxUser';
9
10 private function design_options(): array {
11 $options = array();
12 foreach (glob(dbx()->get_base_dir() . 'dbx/design/*', GLOB_ONLYDIR) ?: array() as $dir) {
13 $name = basename($dir);
14 if ($name !== '') {
15 $options[$name] = $name;
16 }
17 }
18
19 return $options ?: array('dbxapp' => 'dbxapp');
20 }
21
22 private function color_options($texts): array {
23 return array(
24 'hell' => $texts->get_fd_message('color_light'),
25 'gelb' => $texts->get_fd_message('color_yellow'),
26 'rot' => $texts->get_fd_message('color_red'),
27 'gruen' => $texts->get_fd_message('color_green'),
28 'blau' => $texts->get_fd_message('color_blue'),
29 'dunkel' => $texts->get_fd_message('color_dark'),
30 );
31 }
32
33 public function run() {
34 $uid = (int)dbx()->user();
35
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')
45 . '</div>';
46 }
47 $data['password_new'] = '';
48 $data['password_new2'] = '';
49 $passwordMinLength = \dbxPasswordPolicy::minimumLength();
50 $oForm->add_rep('password_min_length', (string)$passwordMinLength);
51 $oForm->add_rep(
52 'password_length_recommendation',
53 $passwordMinLength < 12 ? ' · 12+ empfohlen' : ''
54 );
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);
59 }
60 if (!isset($colorOptions[(string)($data['color'] ?? '')])) {
61 $data['color'] = 'hell';
62 }
63
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);
71 $oForm->_rid = $uid;
72 $oForm->set_state_value('rid', $uid);
73 $oForm->add_module_bar(
74 $oForm->get_fd_message('profile_title'),
75 'bi-person-circle',
76 $oForm->get_fd_message('profile_subtitle')
77 );
78 $oForm->prepare_form_shell(array(
79 'class' => 'dbx-user-profile-form',
80 'form_attrs' => 'enctype="multipart/form-data"',
81 ));
82 $oForm->add_module_bar_form_actions(array(
83 'save' => true,
84 'delete' => false,
85 'reload' => true,
86 'reload_url' => '?dbx_modul=dbxUser&dbx_run1=user&dbx_run2=edit_profil',
87 ));
88
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());
92
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'),
106 ));
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);
109 $oForm->add_fld(
110 'password_new',
111 'password-label',
112 $oForm->get_fd_message('label_password_new'),
113 'varchar|max=128',
114 placeholder: $oForm->get_fd_message('password_unchanged_placeholder'),
115 tooltip: 'Nur ausfüllen, wenn das Passwort geändert werden soll.'
116 );
117 $oForm->add_fld(
118 'password_new2',
119 'password-label',
120 $oForm->get_fd_message('label_password_repeat'),
121 'varchar|max=128',
122 placeholder: $oForm->get_fd_message('password_repeat_placeholder'),
123 tooltip: 'Das neue Passwort zur Kontrolle noch einmal eingeben.'
124 );
125
126
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 = '';
132
133 if ($passwordNew !== '' || $passwordNew2 !== '') {
135 $passwordNew,
136 $passwordNew2,
137 (string)($data['pass'] ?? ''),
138 $passwordMinLength
139 );
140 if (isset($passwordErrors['password'])) {
141 $oForm->add_fld_error(
142 'password_new',
143 $passwordErrors['password']
144 );
145 }
146 if (isset($passwordErrors['repeat'])) {
147 $oForm->add_fld_error(
148 'password_new2',
149 $passwordErrors['repeat']
150 );
151 }
152 $passwordErrorMessage = implode(
153 ' ',
154 array_values(array_unique($passwordErrors))
155 );
156 if ($passwordErrors === array()) {
157 $passwordChanged = true;
158 }
159 }
160
161 if (!$oForm->errors() && !$oForm->warnings()) {
162 $values = array(
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'] ?? '{}'),
176 );
177 if (!isset($designOptions[$values['design']])) {
178 $values['design'] = (string)array_key_first($designOptions);
179 }
180 if (!isset($colorOptions[$values['color']])) {
181 $values['color'] = 'hell';
182 }
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(
190 $settings,
191 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
192 );
193 }
194
195 $ok = $db->update($this->ddUser, $values, $uid);
196 $avatarSaved = false;
197 $avatarError = '';
198 if ($ok && is_object($avatarObj) && method_exists($avatarObj, 'save_upload')) {
199 $avatarSaved = $avatarObj->save_upload($uid, $db, $data, $oForm, $avatarError);
200 if ($avatarError !== '') {
201 $ok = false;
202 $oForm->_msg_error = $avatarError;
203 }
204 }
205 $oForm->_msg_success = $ok
206 ? ($passwordChanged && $avatarSaved
207 ? $oForm->get_fd_message('profile_password_avatar_saved')
208 : ($passwordChanged
209 ? $oForm->get_fd_message('profile_password_saved')
210 : ($avatarSaved
211 ? $oForm->get_fd_message('profile_avatar_saved')
212 : $oForm->get_fd_message('profile_saved'))))
213 : $oForm->get_fd_message('profile_save_error');
214 } else {
215 $oForm->_msg_error = $passwordErrorMessage !== ''
216 ? $passwordErrorMessage
217 : $oForm->get_fd_message('check_input');
218 }
219 }
220
221 return $oForm->run();
222 }
223}
224?>
static errors(string $password, string $repeat, string $currentHash='', ?int $minimumLength=null)
static minimumLength(?int $configured=null)
get_base_dir(int $cutData=0)
Liefert das Basisverzeichnis der Installation.
Definition dbxApi.php:1507
DBX schema administration.