mirror of
https://github.com/YunoHost-Apps/webtrees_ynh.git
synced 2024-09-03 18:26:37 +02:00
325 lines
12 KiB
PHP
325 lines
12 KiB
PHP
<?php
|
||
/**
|
||
* webtrees: online genealogy
|
||
* Copyright (C) 2016 webtrees development team
|
||
* This program is free software: you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation, either version 3 of the License, or
|
||
* (at your option) any later version.
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
*/
|
||
namespace Fisharebest\Webtrees;
|
||
|
||
/**
|
||
* Defined in session.php
|
||
*
|
||
* @global Tree $WT_TREE
|
||
*/
|
||
global $WT_TREE;
|
||
|
||
use Fisharebest\Webtrees\Controller\PageController;
|
||
use Fisharebest\Webtrees\Functions\FunctionsEdit;
|
||
use Fisharebest\Webtrees\Functions\FunctionsPrint;
|
||
|
||
define('WT_SCRIPT_NAME', 'edituser.php');
|
||
require './includes/session.php';
|
||
|
||
// Need to be logged in
|
||
if (!Auth::check()) {
|
||
header('Location: ' . WT_BASE_URL);
|
||
|
||
return;
|
||
}
|
||
|
||
// Extract form variables
|
||
$form_action = Filter::post('form_action');
|
||
$form_username = Filter::post('form_username');
|
||
$form_realname = Filter::post('form_realname');
|
||
$form_pass1 = Filter::post('form_pass1', WT_REGEX_PASSWORD);
|
||
$form_pass2 = Filter::post('form_pass2', WT_REGEX_PASSWORD);
|
||
$form_email = Filter::postEmail('form_email');
|
||
$form_rootid = Filter::post('form_rootid', WT_REGEX_XREF);
|
||
$form_theme = Filter::post('form_theme', implode('|', array_keys(Theme::themeNames())), '');;
|
||
$form_language = Filter::post('form_language');
|
||
$form_timezone = Filter::post('form_timezone');
|
||
$form_contact_method = Filter::post('form_contact_method');
|
||
$form_visible_online = Filter::postBool('form_visible_online');
|
||
|
||
// Respond to form action
|
||
if ($form_action && Filter::checkCsrf()) {
|
||
switch ($form_action) {
|
||
case 'update':
|
||
if ($form_username !== Auth::user()->getUserName() && User::findByUserName($form_username)) {
|
||
FlashMessages::addMessage(I18N::translate('Duplicate username. A user with that username already exists. Please choose another username.'));
|
||
} elseif ($form_email !== Auth::user()->getEmail() && User::findByEmail($form_email)) {
|
||
FlashMessages::addMessage(I18N::translate('Duplicate email address. A user with that email already exists.'));
|
||
} else {
|
||
// Change username
|
||
if ($form_username !== Auth::user()->getUserName()) {
|
||
Log::addAuthenticationLog('User ' . Auth::user()->getUserName() . ' renamed to ' . $form_username);
|
||
Auth::user()->setUserName($form_username);
|
||
}
|
||
|
||
// Change password
|
||
if ($form_pass1 && $form_pass1 === $form_pass2) {
|
||
Auth::user()->setPassword($form_pass1);
|
||
}
|
||
|
||
// Change other settings
|
||
Auth::user()
|
||
->setRealName($form_realname)
|
||
->setEmail($form_email)
|
||
->setPreference('language', $form_language)
|
||
->setPreference('TIMEZONE', $form_timezone)
|
||
->setPreference('contactmethod', $form_contact_method)
|
||
->setPreference('visibleonline', $form_visible_online ? '1' : '0');
|
||
|
||
if ($form_theme === null) {
|
||
Auth::user()->deletePreference('theme');
|
||
} else {
|
||
Auth::user()->setPreference('theme', $form_theme);
|
||
}
|
||
|
||
$WT_TREE->setUserPreference(Auth::user(), 'rootid', $form_rootid);
|
||
}
|
||
break;
|
||
|
||
case 'delete':
|
||
// An administrator can only be deleted by another administrator
|
||
if (!Auth::user()->getPreference('canadmin')) {
|
||
// Keep a reference to the currently logged in user because after logging out this user,
|
||
// a call to Auth::user() will not return this user anymore
|
||
$currentUser = Auth::user();
|
||
Auth::logout();
|
||
$currentUser->delete();
|
||
}
|
||
break;
|
||
}
|
||
|
||
header('Location: ' . WT_BASE_URL . WT_SCRIPT_NAME);
|
||
|
||
return;
|
||
}
|
||
|
||
$controller = new PageController;
|
||
$controller
|
||
->setPageTitle(I18N::translate('My account'))
|
||
->pageHeader()
|
||
->addExternalJavascript(WT_AUTOCOMPLETE_JS_URL)
|
||
->addInlineJavascript('autocomplete();');
|
||
|
||
$my_individual_record = Individual::getInstance($WT_TREE->getUserPreference(Auth::user(), 'gedcomid'), $WT_TREE);
|
||
$default_individual = Individual::getInstance($WT_TREE->getUserPreference(Auth::user(), 'rootid'), $WT_TREE);
|
||
|
||
// Form validation
|
||
?>
|
||
<script>
|
||
function checkform(frm) {
|
||
if (frm.form_username.value=="") {
|
||
alert("<?php echo I18N::translate('You must enter a username.'); ?>");
|
||
frm.form_username.focus();
|
||
return false;
|
||
}
|
||
if (frm.form_realname.value=="") {
|
||
alert("<?php echo I18N::translate('You must enter a real name.'); ?>");
|
||
frm.form_realname.focus();
|
||
return false;
|
||
}
|
||
if (frm.form_pass1.value!=frm.form_pass2.value) {
|
||
alert("<?php echo I18N::translate('The passwords do not match.'); ?>");
|
||
frm.form_pass1.focus();
|
||
return false;
|
||
}
|
||
if (frm.form_pass1.value.length > 0 && frm.form_pass1.value.length < 6) {
|
||
alert("<?php echo I18N::translate('Passwords must contain at least 6 characters.'); ?>");
|
||
frm.form_pass1.focus();
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
</script>
|
||
|
||
<div id="edituser-page">
|
||
<h2><?php echo $controller->getPageTitle(); ?></h2>
|
||
|
||
<form name="editform" method="post" action="?" onsubmit="return checkform(this);">
|
||
|
||
<input type="hidden" id="form_action" name="form_action" value="update">
|
||
<?php echo Filter::getCsrf(); ?>
|
||
|
||
<div id="edituser-table">
|
||
<div class="label">
|
||
<label for="form_username">
|
||
<?php echo I18N::translate('Username'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<input type="text" id="form_username" name="form_username" value="<?php echo Filter::escapeHtml(Auth::user()->getUserName()); ?>" dir="auto">
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('Usernames are case-insensitive and ignore accented letters, so that “chloe”, “chloë”, and “Chloe” are considered to be the same.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_realname">
|
||
<?php echo I18N::translate('Real name'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<input type="text" id="form_realname" name="form_realname" value="<?php echo Filter::escapeHtml(Auth::user()->getRealName()); ?>" dir="auto">
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('This is your real name, as you would like it displayed on screen.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<?php echo I18N::translate('Individual record'); ?>
|
||
</div>
|
||
<div class="value">
|
||
<?php if ($my_individual_record): ?>
|
||
<?php echo $my_individual_record->formatList('span'); ?>
|
||
<?php else: ?>
|
||
<?php echo I18N::translateContext('unknown people', 'Unknown'); ?>
|
||
<?php endif; ?>
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('This is a link to your own record in the family tree. If this is the wrong individual, contact an administrator.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_rootid">
|
||
<?php echo I18N::translate('Default individual'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<input data-autocomplete-type="INDI" type="text" name="form_rootid" id="form_rootid" value="<?php echo $WT_TREE->getUserPreference(Auth::user(), 'rootid'); ?>">
|
||
<?php echo FunctionsPrint::printFindIndividualLink('form_rootid'); ?>
|
||
<br>
|
||
<?php if ($default_individual): ?>
|
||
<?php echo $default_individual->formatList('span'); ?>
|
||
<?php endif; ?>
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('This individual will be selected by default when viewing charts and reports.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_pass1">
|
||
<?php echo I18N::translate('Password'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<input type="password" id="form_pass1" name="form_pass1">
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('Passwords must be at least 6 characters long and are case-sensitive, so that “secret” is different from “SECRET”.'); ?>
|
||
<?php echo I18N::translate('Leave the password blank if you want to keep the current password.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_pass2">
|
||
<?php echo I18N::translate('Confirm password'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<input type="password" id="form_pass2" name="form_pass2">
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('Type your password again, to make sure you have typed it correctly.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_language">
|
||
<?php echo I18N::translate('Language'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<?php echo FunctionsEdit::editFieldLanguage('form_language', Auth::user()->getPreference('language')); ?>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_timezone">
|
||
<?php echo I18N::translate('Time zone'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<?php echo FunctionsEdit::selectEditControl('form_timezone', array_combine(\DateTimeZone::listIdentifiers(), \DateTimeZone::listIdentifiers()), null, Auth::user()->getPreference('TIMEZONE') ?: 'UTC', 'class="form-control"'); ?>
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('The time zone is required for date calculations, such as knowing today’s date.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_email">
|
||
<?php echo I18N::translate('Email address'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<input type="email" id="form_email" name="form_email" value="<?php echo Filter::escapeHtml(Auth::user()->getEmail()); ?>" size="50">
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('This email address will be used to send password reminders, website notifications, and messages from other family members who are registered on the website.'); ?>
|
||
</p>
|
||
</div>
|
||
<?php if (Site::getPreference('ALLOW_USER_THEMES')): ?>
|
||
|
||
<div class="label">
|
||
<label for="form_theme">
|
||
<?php echo I18N::translate('Theme'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<select id="form_theme" name="form_theme">
|
||
<option value="">
|
||
<?php echo Filter::escapeHtml(/* I18N: default option in list of themes */ I18N::translate('<default theme>')); ?>
|
||
</option>
|
||
<?php foreach (Theme::themeNames() as $theme_id => $theme_name): ?>
|
||
<option value="<?php echo $theme_id; ?>" <?php echo $theme_id === Auth::user()->getPreference('theme') ? 'selected' : ''; ?>>
|
||
<?php echo $theme_name; ?>
|
||
</option>
|
||
<?php endforeach; ?>
|
||
</select>
|
||
<p class="small text-muted">
|
||
<?php echo /* I18N: Help text for the "Default theme" site configuration setting */ I18N::translate('You can change the appearance of webtrees using “themes”. Each theme has a different style, layout, color scheme, etc.'); ?>
|
||
</p>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<div class="label">
|
||
<label for="form_contact_method">
|
||
<?php echo I18N::translate('Contact method'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<?php echo FunctionsEdit::editFieldContact('form_contact_method', Auth::user()->getPreference('contactmethod')); ?>
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('Site members can send each other messages. You can choose to how these messages are sent to you, or choose not receive them at all.'); ?>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="label">
|
||
<label for="form_visible_online">
|
||
<?php echo I18N::translate('Visible to other users when online'); ?>
|
||
</label>
|
||
</div>
|
||
<div class="value">
|
||
<?php echo FunctionsEdit::checkbox('form_visible_online', Auth::user()->getPreference('visibleonline')); ?>
|
||
<p class="small text-muted">
|
||
<?php echo I18N::translate('You can choose whether to appear in the list of users who are currently signed-in.'); ?>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div id="edituser_submit">
|
||
<input type="submit" value="<?php echo I18N::translate('save'); ?>">
|
||
</div>
|
||
<?php if (!Auth::user()->getPreference('canadmin')): ?>
|
||
<a href="#" onclick="if (confirm('<?php echo I18N::translate('Are you sure you want to delete “%s”?', Filter::escapeJs(Auth::user()->getUserName())); ?>')) {jQuery('#form_action').val('delete'); document.editform.submit(); }">
|
||
<?php echo I18N::translate('Delete your account'); ?>
|
||
</a>
|
||
<?php endif; ?>
|
||
</form>
|
||
</div>
|