1<?php 2/** 3 * @package tikiwiki 4 */ 5// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 6// 7// All Rights Reserved. See copyright.txt for details and a complete list of authors. 8// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 9// $Id$ 10 11$section = 'mytiki'; 12require_once('tiki-setup.php'); 13$modlib = TikiLib::lib('mod'); 14$userprefslib = TikiLib::lib('userprefs'); 15$perspectivelib = TikiLib::lib('perspective'); 16 17use BaconQrCode\Renderer\Image\SvgImageBackEnd; 18use PragmaRX\Google2FA\Google2FA; 19use BaconQrCode\Renderer\ImageRenderer; 20use BaconQrCode\Renderer\Image\ImagickImageBackEnd; 21use BaconQrCode\Renderer\RendererStyle\RendererStyle; 22use BaconQrCode\Writer; 23 24// User preferences screen 25if ($prefs['feature_userPreferences'] != 'y' && $prefs['change_password'] != 'y' && $tiki_p_admin_users != 'y') { 26 $smarty->assign('msg', tra("This feature is disabled") . ": feature_userPreferences"); 27 $smarty->display("error.tpl"); 28 die; 29} 30$access->check_user($user); 31 32$auto_query_args = ['userId', 'view_user']; 33 34$headerlib->add_map(); 35 36// Make sure user preferences uses https if set 37if (! $https_mode && isset($https_login) && $https_login == 'required') { 38 header('Location: ' . $base_url_https . 'tiki-user_preferences.php'); 39 die; 40} 41if (! empty($_REQUEST['userId'])) { 42 $userwatch = $tikilib->get_user_login($_REQUEST['userId']); 43} elseif (! empty($_REQUEST["view_user"])) { 44 $userwatch = $_REQUEST["view_user"]; 45} else { 46 $userwatch = $user; 47} 48 49if ($userwatch != $user) { 50 $access->check_permission('tiki_p_admin_users'); 51 if (empty($userwatch) || empty($userlib->user_exists($userwatch))) { 52 $smarty->assign('msg', tra("Unknown user")); 53 $smarty->display("error.tpl"); 54 die; 55 } 56} 57 58// Custom fields 59$registrationlib = TikiLib::lib('registration'); 60$customfields = $registrationlib->get_customfields(); 61foreach ($customfields as $i => $c) { 62 $customfields[$i]['value'] = $tikilib->get_user_preference($userwatch, $c['prefName']); 63} 64$smarty->assign_by_ref('customfields', $customfields); 65$smarty->assign('userwatch', $userwatch); 66$foo = parse_url($_SERVER["REQUEST_URI"]); 67$foo1 = str_replace("tiki-user_preferences", "tiki-editpage", $foo["path"]); 68$foo2 = str_replace("tiki-user_preferences", "tiki-index", $foo["path"]); 69$smarty->assign('url_edit', $tikilib->httpPrefix() . $foo1); 70$smarty->assign('url_visit', $tikilib->httpPrefix() . $foo2); 71$smarty->assign('show_mouseover_user_info', isset($prefs['show_mouseover_user_info']) ? $prefs['show_mouseover_user_info'] : $prefs['feature_community_mouseover']); 72 73if ($prefs['feature_perspective'] === 'y') { 74 $smarty->assign('perspectives', $perspectivelib->list_perspectives()); 75} 76 77// form in first tab "Personal Information" 78if ($prefs['feature_userPreferences'] == 'y' && isset($_POST["new_info"]) && $access->checkOrigin()) { 79 if (isset($_POST["realName"]) && ($prefs['auth_ldap_nameattr'] == '' || $prefs['auth_method'] != 'ldap')) { 80 $tikilib->set_user_preference($userwatch, 'realName', $_POST["realName"]); 81 if ($prefs['user_show_realnames'] == 'y') { 82 $cachelib = TikiLib::lib('cache'); 83 $cachelib->invalidate('userlink.' . $user . '0'); 84 } 85 } 86 87 if ($prefs['feature_community_gender'] == 'y') { 88 if (isset($_POST["gender"])) { 89 $tikilib->set_user_preference($userwatch, 'gender', $_POST["gender"]); 90 } 91 } 92 93 $tikilib->set_user_preference($userwatch, 'country', $_POST["country"]); 94 95 if (isset($_POST['location'])) { 96 if ($coords = TikiLib::lib('geo')->parse_coordinates($_POST['location'])) { 97 $tikilib->set_user_preference($userwatch, 'lat', $coords['lat']); 98 $tikilib->set_user_preference($userwatch, 'lon', $coords['lon']); 99 if (isset($coords['zoom'])) { 100 $tikilib->set_user_preference($userwatch, 'zoom', $coords['zoom']); 101 } 102 } 103 } 104 105 if (isset($_POST["homePage"])) { 106 $tikilib->set_user_preference($userwatch, 'homePage', $_POST["homePage"]); 107 } 108 109 $tikilib->set_user_preference($userwatch, 'user_information', $_POST['user_information']); 110 111} 112 113if ($prefs['feature_userPreferences'] == 'y' && isset($_REQUEST["new_prefs"]) && $access->checkOrigin()) { 114 check_ticket('user-prefs'); 115 // setting preferences 116 if ($prefs['change_theme'] == 'y' && empty($group_theme)) { 117 if (isset($_REQUEST['mytheme'])) { 118 $themeandoption = $themelib->extract_theme_and_option($_REQUEST['mytheme']); 119 $theme = $themeandoption[0]; 120 $themeOption = $themeandoption[1]; 121 $tikilib->set_user_preference($userwatch, 'theme', $theme); 122 if (isset($themeOption)) { 123 $tikilib->set_user_preference($userwatch, 'theme_option', empty($themeOption) ? '' : $themeOption); 124 } 125 //Something is needed for the theme change to be displayed without additional manual page refresh. Problem: when modifying another user's settings (not my user's) using any of the below ways the refreshed screen will show my user's preference screen instead of staying on the edited user's preference screen 126 //header("location: tiki-user_preferences.php?view_user=$userwatch"); 127 //$access->redirect($_SERVER['REQUEST_URI'], '', 200); 128 } 129 } 130 if (isset($_REQUEST["userbreadCrumb"])) { 131 $tikilib->set_user_preference($userwatch, 'userbreadCrumb', $_REQUEST["userbreadCrumb"]); 132 } 133 $langLib = TikiLib::lib('language'); 134 if (isset($_REQUEST["language"]) && $langLib->is_valid_language($_REQUEST['language'])) { 135 if ($tiki_p_admin || $prefs['change_language'] == 'y') { 136 $tikilib->set_user_preference($userwatch, 'language', $_REQUEST["language"]); 137 } 138 if ($userwatch == $user) { 139 include('lang/' . $_REQUEST["language"] . '/language.php'); 140 } 141 } else { 142 $tikilib->set_user_preference($userwatch, 'language', ''); 143 } 144 $smarty->assign('tiki_p_admin', $tiki_p_admin); 145 if ($tiki_p_admin && isset($_REQUEST['languageAdmin']) && $langLib->is_valid_language($_REQUEST['languageAdmin'])) { 146 $tikilib->set_user_preference($userwatch, 'language_admin', $_REQUEST['languageAdmin']); 147 } else { 148 $tikilib->set_user_preference($userwatch, 'language_admin', ''); 149 } 150 if (isset($_REQUEST['read_language'])) { 151 $list = []; 152 $tok = strtok($_REQUEST['read_language'], ' '); 153 while (false !== $tok) { 154 $list[] = $tok; 155 $tok = strtok(' '); 156 } 157 $list = array_unique($list); 158 $langLib = TikiLib::lib('language'); 159 $list = array_filter($list, [$langLib, 'is_valid_language']); 160 $list = implode(' ', $list); 161 $tikilib->set_user_preference($userwatch, 'read_language', $list); 162 } 163 if (isset($_REQUEST['display_timezone'])) { 164 $tikilib->set_user_preference($userwatch, 'display_timezone', $_REQUEST['display_timezone']); 165 } 166 167 if (isset($_REQUEST['display_12hr_clock']) && $_REQUEST['display_12hr_clock'] == 'on') { 168 $tikilib->set_user_preference($userwatch, 'display_12hr_clock', 'y'); 169 $smarty->assign('display_12hr_clock', 'y'); 170 } else { 171 $tikilib->set_user_preference($userwatch, 'display_12hr_clock', 'n'); 172 $smarty->assign('display_12hr_clock', 'n'); 173 } 174 if (isset($_REQUEST['diff_versions']) && $_REQUEST['diff_versions'] == 'on') { 175 $tikilib->set_user_preference($userwatch, 'diff_versions', 'y'); 176 $smarty->assign('diff_versions', 'y'); 177 } else { 178 $tikilib->set_user_preference($userwatch, 'diff_versions', 'n'); 179 $smarty->assign('diff_versions', 'n'); 180 } 181 if ($prefs['feature_community_mouseover'] == 'y') { 182 if (isset($_REQUEST['show_mouseover_user_info']) && $_REQUEST['show_mouseover_user_info'] == 'on') { 183 $tikilib->set_user_preference($userwatch, 'show_mouseover_user_info', 'y'); 184 $smarty->assign('show_mouseover_user_info', 'y'); 185 } else { 186 $tikilib->set_user_preference($userwatch, 'show_mouseover_user_info', 'n'); 187 $smarty->assign('show_mouseover_user_info', 'n'); 188 } 189 } 190 191 $tikilib->set_user_preference($userwatch, 'remember_closed_rboxes', empty($_REQUEST['remember_closed_rboxes']) ? 'n' : 'y'); 192 193 $email_isPublic = isset($_REQUEST['email_isPublic']) ? $_REQUEST['email_isPublic'] : 'n'; 194 $tikilib->set_user_preference($userwatch, 'email is public', $email_isPublic); 195 $tikilib->set_user_preference($userwatch, 'mailCharset', $_REQUEST['mailCharset']); 196 // Custom fields 197 foreach ($customfields as $custpref => $prefvalue) { 198 if (isset($_REQUEST[$customfields[$custpref]['prefName']])) { 199 $tikilib->set_user_preference($userwatch, $customfields[$custpref]['prefName'], $_REQUEST[$customfields[$custpref]['prefName']]); 200 } 201 } 202 // Custom fields 203 foreach ($customfields as $custpref => $prefvalue) { 204 // print $customfields[$custpref]['prefName']; 205 // print $_REQUEST[$customfields[$custpref]['prefName']]; 206 $tikilib->set_user_preference($userwatch, $customfields[$custpref]['prefName'], $_REQUEST[$customfields[$custpref]['prefName']]); 207 } 208 209 if (isset($_REQUEST['mess_maxRecords'])) { 210 $tikilib->set_user_preference($userwatch, 'mess_maxRecords', $_REQUEST['mess_maxRecords']); 211 } 212 if (isset($_REQUEST['mess_archiveAfter'])) { 213 $tikilib->set_user_preference($userwatch, 'mess_archiveAfter', $_REQUEST['mess_archiveAfter']); 214 } 215 if (isset($_REQUEST['mess_sendReadStatus']) && $_REQUEST['mess_sendReadStatus'] == 'on') { 216 $tikilib->set_user_preference($userwatch, 'mess_sendReadStatus', 'y'); 217 } else { 218 $tikilib->set_user_preference($userwatch, 'mess_sendReadStatus', 'n'); 219 } 220 if (isset($_REQUEST['minPrio'])) { 221 $tikilib->set_user_preference($userwatch, 'minPrio', $_REQUEST['minPrio']); 222 } 223 if ($prefs['allowmsg_is_optional'] == 'y') { 224 if (isset($_REQUEST['allowMsgs']) && $_REQUEST['allowMsgs'] == 'on') { 225 $tikilib->set_user_preference($userwatch, 'allowMsgs', 'y'); 226 } else { 227 $tikilib->set_user_preference($userwatch, 'allowMsgs', 'n'); 228 } 229 } 230 if (isset($_REQUEST['mytiki_pages']) && $_REQUEST['mytiki_pages'] == 'on') { 231 $tikilib->set_user_preference($userwatch, 'mytiki_pages', 'y'); 232 } else { 233 $tikilib->set_user_preference($userwatch, 'mytiki_pages', 'n'); 234 } 235 if (isset($_REQUEST['mytiki_blogs']) && $_REQUEST['mytiki_blogs'] == 'on') { 236 $tikilib->set_user_preference($userwatch, 'mytiki_blogs', 'y'); 237 } else { 238 $tikilib->set_user_preference($userwatch, 'mytiki_blogs', 'n'); 239 } 240 if (isset($_REQUEST['mytiki_gals']) && $_REQUEST['mytiki_gals'] == 'on') { 241 $tikilib->set_user_preference($userwatch, 'mytiki_gals', 'y'); 242 } else { 243 $tikilib->set_user_preference($userwatch, 'mytiki_gals', 'n'); 244 } 245 if (isset($_REQUEST['mytiki_msgs']) && $_REQUEST['mytiki_msgs'] == 'on') { 246 $tikilib->set_user_preference($userwatch, 'mytiki_msgs', 'y'); 247 } else { 248 $tikilib->set_user_preference($userwatch, 'mytiki_msgs', 'n'); 249 } 250 if (isset($_REQUEST['mytiki_tasks']) && $_REQUEST['mytiki_tasks'] == 'on') { 251 $tikilib->set_user_preference($userwatch, 'mytiki_tasks', 'y'); 252 } else { 253 $tikilib->set_user_preference($userwatch, 'mytiki_tasks', 'n'); 254 } 255 if (isset($_REQUEST['mytiki_forum_topics']) && $_REQUEST['mytiki_forum_topics'] == 'on') { 256 $tikilib->set_user_preference($userwatch, 'mytiki_forum_topics', 'y'); 257 } else { 258 $tikilib->set_user_preference($userwatch, 'mytiki_forum_topics', 'n'); 259 } 260 if (isset($_REQUEST['mytiki_forum_replies']) && $_REQUEST['mytiki_forum_replies'] == 'on') { 261 $tikilib->set_user_preference($userwatch, 'mytiki_forum_replies', 'y'); 262 } else { 263 $tikilib->set_user_preference($userwatch, 'mytiki_forum_replies', 'n'); 264 } 265 if (isset($_REQUEST['mytiki_items']) && $_REQUEST['mytiki_items'] == 'on') { 266 $tikilib->set_user_preference($userwatch, 'mytiki_items', 'y'); 267 } else { 268 $tikilib->set_user_preference($userwatch, 'mytiki_items', 'n'); 269 } 270 if (isset($_REQUEST['mytiki_articles']) && $_REQUEST['mytiki_articles'] == 'on') { 271 $tikilib->set_user_preference($userwatch, 'mytiki_articles', 'y'); 272 } else { 273 $tikilib->set_user_preference($userwatch, 'mytiki_articles', 'n'); 274 } 275 if (isset($_REQUEST['tasks_maxRecords'])) { 276 $tikilib->set_user_preference($userwatch, 'tasks_maxRecords', $_REQUEST['tasks_maxRecords']); 277 } 278 if ($prefs['feature_intertiki'] == 'y' && ! empty($prefs['feature_intertiki_mymaster']) && $prefs['feature_intertiki_import_preferences'] == 'y') { //send to the master 279 $userlib->interSendUserInfo($prefs['interlist'][$prefs['feature_intertiki_mymaster']], $userwatch); 280 } 281 282 if (isset($_REQUEST['xmpp_jid'])) { 283 $tikilib->set_user_preference($userwatch, 'xmpp_jid', $_REQUEST['xmpp_jid']); 284 } 285 if (isset($_REQUEST['xmpp_password'])) { 286 $tikilib->set_user_preference($userwatch, 'xmpp_password', $_REQUEST['xmpp_password']); 287 } 288 if (isset($_REQUEST['xmpp_custom_server_http_bind'])) { 289 $tikilib->set_user_preference($userwatch, 'xmpp_custom_server_http_bind', $_REQUEST['xmpp_custom_server_http_bind']); 290 } 291 292 if (isset($_REQUEST['perspective_preferred']) && $perspectivelib->perspective_exists($_REQUEST['perspective_preferred'])) { 293 $tikilib->set_user_preference($userwatch, 'perspective_preferred', $_REQUEST['perspective_preferred']); 294 } else { 295 $tikilib->set_user_preference($userwatch, 'perspective_preferred', null); 296 } 297 298 TikiLib::events()->trigger( 299 'tiki.user.update', 300 [ 301 'type' => 'user', 302 'object' => $userwatch, 303 'user' => $GLOBALS['user'], 304 ] 305 ); 306} 307if ($prefs['auth_method'] == 'ldap' && $user == 'admin' && $prefs['ldap_skip_admin'] == 'y') { 308 $change_password = 'y'; 309 $smarty->assign('change_password', $change_password); 310} 311 312 313$tfaSecret = $userlib->get_2_factor_secret($userwatch); 314if (isset($_REQUEST['chgadmin']) && $access->checkOrigin()) { 315 check_ticket('user-prefs'); 316 if (isset($_REQUEST['pass'])) { 317 $pass = $_REQUEST['pass']; 318 } else { 319 $pass = ''; 320 } 321 // check user's password, admin doesn't need it to change other user's info 322 if ($tiki_p_admin != 'y' || $user == $userwatch) { 323 if ($prefs['feature_intertiki'] == 'y' && ! empty($prefs['feature_intertiki_mymaster'])) { 324 if ($ok = $userlib->intervalidate($prefs['interlist'][$prefs['feature_intertiki_mymaster']], $userwatch, $pass)) { 325 if ($ok->faultCode()) { 326 $ok = false; 327 } 328 } 329 } else { 330 list($ok, $userwatch, $error) = $userlib->validate_user($userwatch, $pass); 331 } 332 if (! $ok) { 333 $smarty->assign('msg', tra("Invalid password. Your current password is required to change administrative information")); 334 $smarty->display("error.tpl"); 335 die; 336 } 337 } 338 if (! empty($_REQUEST['email']) && ($prefs['login_is_email'] != 'y' || $user == 'admin') && $_REQUEST['email'] != $userlib->get_user_email($userwatch)) { 339 if (validate_email($_REQUEST['email'])) { 340 $userlib->change_user_email($userwatch, $_REQUEST['email'], $pass); 341 Feedback::success(sprintf(tra('Email is set to %s'), $_REQUEST['email'])); 342 if ($prefs['feature_intertiki'] == 'y' && ! empty($prefs['feature_intertiki_mymaster']) && $prefs['feature_intertiki_import_preferences'] == 'y') { //send to the master 343 $userlib->interSendUserInfo($prefs['interlist'][$prefs['feature_intertiki_mymaster']], $userwatch); 344 } 345 } else { 346 Feedback::error(tr('Invalid email address "%0"', $_REQUEST['email'])); 347 } 348 } 349 // If user has provided new password, let's try to change 350 if (! empty($_REQUEST["pass1"])) { 351 if ($_REQUEST["pass1"] != $_REQUEST["pass2"]) { 352 $smarty->assign('msg', tra("The passwords did not match")); 353 $smarty->display("error.tpl"); 354 die; 355 } 356 $polerr = $userlib->check_password_policy($_REQUEST["pass1"]); 357 if (strlen($polerr) > 0) { 358 $smarty->assign('msg', $polerr); 359 $smarty->display("error.tpl"); 360 die; 361 } 362 $userlib->change_user_password($userwatch, $_REQUEST["pass1"]); 363 if ($prefs['feature_user_encryption'] === 'y') { 364 // Notify CryptLib about the login 365 $cryptlib = TikiLib::lib('crypt'); 366 $cryptlib->onChangeUserPassword($_REQUEST["pass"], $_REQUEST["pass1"]); 367 } 368 Feedback::success(sprintf(tra('Password has been changed'))); 369 } 370 371 if (! empty($_REQUEST["tfaEnable"]) && empty($tfaSecret)) { 372 $tfaSecret = $userlib->generate_2_factor_secret($userwatch); 373 } elseif (empty($_REQUEST["tfaEnable"])) { 374 $tfaSecret = $userlib->remove_2_factor_secret($userwatch); 375 } 376} 377 378$userinfo = $userlib->get_user_info($userwatch); 379 380if ($prefs['twoFactorAuth'] == 'y' && ! empty($tfaSecret)) { 381 $google2fa = new Google2FA(); 382 $smarty->assign('tfaSecretQR', $tfaSecret); 383 $g2faUrl = $google2fa->getQRCodeUrl( 384 $tikilib->get_preference('browsertitle', "Tiki Wiki"), 385 $userinfo['email'], 386 $tfaSecret 387 ); 388 389 if (extension_loaded('imagick')) { 390 $imageBackEnd = new ImagickImageBackEnd(); 391 $imageType = 'png'; 392 } else { 393 $imageBackEnd = new SvgImageBackEnd(); 394 $imageType = 'svg+xml'; 395 } 396 397 $writer = new Writer( 398 new ImageRenderer( 399 new RendererStyle(350), 400 $imageBackEnd 401 ) 402 ); 403 $tfaSecretQR = base64_encode($writer->writeString($g2faUrl)); 404 $tfaSecretQR = '<img src="data:image/' . $imageType . ';base64,' . $tfaSecretQR . '"/>'; 405 $smarty->assign('tfaSecretQR', $tfaSecretQR); 406} 407 408if (isset($_REQUEST['deleteaccount']) && $tiki_p_delete_account == 'y' && $access->checkOrigin()) { 409 check_ticket('user-prefs'); 410 if (! isset($_REQUEST['deleteaccountconfirm']) || $_REQUEST['deleteaccountconfirm'] != '1') { 411 $smarty->assign('msg', tra("If you really want to delete your account, you must check the checkbox")); 412 $smarty->display("error.tpl"); 413 die; 414 } 415 $userlib->remove_user($userwatch); 416 if ($user == $userwatch) { 417 header('Location: tiki-logout.php'); 418 } elseif ($tiki_p_admin_users == 'y') { 419 header('Location: tiki-adminusers.php'); 420 } else { 421 header("Location: $base_url"); 422 } 423 die(); 424} 425 426if (! empty($_POST)) { 427 // This avoids accident form ressubmission 428 header('Location:' . basename(__FILE__)); 429 return; 430} 431 432 433/** 434 * Don't do any write operation from here 435 */ 436 437 438$location = [ 439 'lat' => (float) $tikilib->get_user_preference($userwatch, 'lat', ''), 440 'lon' => (float) $tikilib->get_user_preference($userwatch, 'lon', ''), 441 'zoom' => (int) $tikilib->get_user_preference($userwatch, 'zoom', ''), 442]; 443 444$location = TikiLib::lib('geo')->build_location_string($location); 445 446$smarty->assign('location', $location); 447 448$tikilib->get_user_preference($userwatch, 'mytiki_pages', 'y'); 449$tikilib->get_user_preference($userwatch, 'mytiki_blogs', 'y'); 450$tikilib->get_user_preference($userwatch, 'mytiki_gals', 'y'); 451$tikilib->get_user_preference($userwatch, 'mytiki_items', 'y'); 452$tikilib->get_user_preference($userwatch, 'mytiki_msgs', 'y'); 453$tikilib->get_user_preference($userwatch, 'mytiki_tasks', 'y'); 454$tikilib->get_user_preference($userwatch, 'mylevel', '1'); 455$tikilib->get_user_preference($userwatch, 'tasks_maxRecords'); 456$tikilib->get_user_preference($userwatch, 'mess_maxRecords', 20); 457$tikilib->get_user_preference($userwatch, 'mess_archiveAfter', 0); 458$tikilib->get_user_preference($userwatch, 'mess_sendReadStatus', 0); 459$tikilib->get_user_preference($userwatch, 'allowMsgs', 'y'); 460$tikilib->get_user_preference($userwatch, 'minPrio', 3); 461$tikilib->get_user_preference($userwatch, 'theme', ''); 462$tikilib->get_user_preference($userwatch, 'language', $prefs['language']); 463$tikilib->get_user_preference($userwatch, 'realName', ''); 464if ($prefs['feature_community_gender'] == 'y') { 465 $tikilib->get_user_preference($userwatch, 'gender', 'Hidden'); 466} 467$tikilib->get_user_preference($userwatch, 'country', 'Other'); 468$tikilib->get_user_preference($userwatch, 'userbreadCrumb', $prefs['site_userbreadCrumb']); 469$tikilib->get_user_preference($userwatch, 'homePage', ''); 470$tikilib->get_user_preference($userwatch, 'email is public', 'n'); 471if (isset($user_preferences[$userwatch]['email is public'])) { 472 $user_preferences[$userwatch]['email_isPublic'] = $user_preferences[$userwatch]['email is public']; 473} 474$tikilib->get_user_preference($userwatch, 'mailCharset', $prefs['default_mail_charset']); 475$tikilib->get_user_preference($userwatch, 'display_12hr_clock', 'n'); 476$smarty->assign_by_ref('userinfo', $userinfo); 477//user theme 478$themelib = TikiLib::lib('theme'); 479$available_themesandoptions = $themelib->get_available_themesandoptions(); 480$smarty->assign_by_ref('available_themesandoptions', $available_themesandoptions); 481$userwatch_theme = $tikilib->get_user_preference($userwatch, 'theme', null); 482$userwatch_themeOption = $tikilib->get_user_preference($userwatch, 'theme_option', null); 483$smarty->assign_by_ref('userwatch_theme', $userwatch_theme); 484$smarty->assign_by_ref('userwatch_themeOption', $userwatch_themeOption); 485//user language 486$languages = []; 487$langLib = TikiLib::lib('language'); 488$languages = $langLib->list_languages(); 489$smarty->assign_by_ref('languages', $languages); 490 491$user_pages = $tikilib->get_user_pages($userwatch, -1); 492$smarty->assign_by_ref('user_pages', $user_pages); 493$bloglib = TikiLib::lib('blog'); 494$user_blogs = $bloglib->list_user_blogs($userwatch, false); 495$smarty->assign_by_ref('user_blogs', $user_blogs); 496$user_galleries = $tikilib->get_user_galleries($userwatch, -1); 497$smarty->assign_by_ref('user_galleries', $user_galleries); 498$user_items = TikiLib::lib('trk')->get_user_items($userwatch); 499$smarty->assign_by_ref('user_items', $user_items); 500$flags = $tikilib->get_flags('', '', '', true); 501$smarty->assign_by_ref('flags', $flags); 502$scramblingMethods = ["n", "strtr", "unicode", "x", 'y']; // email_isPublic utilizes 'n' 503$smarty->assign_by_ref('scramblingMethods', $scramblingMethods); 504$scramblingEmails = [ 505 tra("no"), 506 TikiMail::scrambleEmail($userinfo['email'], 'strtr'), 507 TikiMail::scrambleEmail($userinfo['email'], 'unicode') . "-" . tra("unicode"), 508 TikiMail::scrambleEmail($userinfo['email'], 'x'), $userinfo['email'], 509 ]; 510$smarty->assign_by_ref('scramblingEmails', $scramblingEmails); 511$avatar = $tikilib->get_user_avatar($userwatch); 512$smarty->assign_by_ref('avatar', $avatar); 513$mailCharsets = ['utf-8', 'iso-8859-1']; 514$smarty->assign_by_ref('mailCharsets', $mailCharsets); 515$smarty->assign_by_ref('user_prefs', $user_preferences[$userwatch]); 516$tikilib->get_user_preference($userwatch, 'user_information', 'public'); 517$tikilib->get_user_preference($userwatch, 'diff_versions', 'n'); 518$usertrackerId = false; 519$useritemId = false; 520if ($prefs['userTracker'] == 'y') { 521 $re = $userlib->get_usertracker($userinfo["userId"]); 522 if (isset($re['usersTrackerId']) && $re['usersTrackerId'] && Tracker_Definition::get($re['usersTrackerId'])) { 523 $trklib = TikiLib::lib('trk'); 524 $info = $trklib->get_item_id($re['usersTrackerId'], $re['usersFieldId'], $userwatch); 525 $usertrackerId = $re['usersTrackerId']; 526 $useritemId = $info; 527 } 528} 529$smarty->assign('usertrackerId', $usertrackerId); 530$smarty->assign('useritemId', $useritemId); 531// Custom fields 532foreach ($customfields as $custpref => $prefvalue) { 533 $customfields[$custpref]['value'] = $tikilib->get_user_preference($userwatch, $customfields[$custpref]['prefName'], $customfields[$custpref]['value']); 534 $smarty->assign($customfields[$custpref]['prefName'], $customfields[$custpref]['value']); 535} 536if ($prefs['feature_messages'] == 'y' && $tiki_p_messages == 'y') { 537 $unread = $tikilib->user_unread_messages($userwatch); 538 $smarty->assign('unread', $unread); 539} 540$smarty->assign('timezones', TikiDate::getTimeZoneList()); 541 542$tikilib->set_display_timezone($user); 543 544if (isset($prefs['display_timezone'])) { 545 $smarty->assign('display_timezone', $prefs['display_timezone']); 546} 547 548if ($prefs['users_prefs_display_timezone'] == 'Site') { 549 $smarty->assign('warning_site_timezone_set', 'y'); 550} else { 551 $smarty->assign('warning_site_timezone_set', 'n'); 552} 553 554$smarty->assign('userPageExists', 'n'); 555if ($prefs['feature_wiki'] == 'y' and $prefs['feature_wiki_userpage'] == 'y') { 556 if ($tikilib->page_exists($prefs['feature_wiki_userpage_prefix'] . $user)) { 557 $smarty->assign('userPageExists', 'y'); 558 } 559} 560include_once('tiki-section_options.php'); 561ask_ticket('user-prefs'); 562$smarty->assign('mid', 'tiki-user_preferences.tpl'); 563$smarty->display("tiki.tpl"); 564