Refactor user settings page

- Fix header hierarchy
- [frio] Fix panel display
- Move checkbox sub-template calls to template
This commit is contained in:
Hypolite Petovan 2020-03-31 21:38:56 -04:00
parent 193e0d9613
commit 5ce404f517
4 changed files with 289 additions and 381 deletions

View file

@ -823,44 +823,11 @@ function settings_content(App $a)
]);
}
$net_pub_desc = '';
if (strlen(DI::config()->get('system', 'directory'))) {
$net_pub_desc = ' ' . DI::l10n()->t('Your profile will also be published in the global friendica directories (e.g. <a href="%s">%s</a>).', DI::config()->get('system', 'directory'), DI::config()->get('system', 'directory'));
} else {
$net_pub_desc = '';
}
$profile_in_net_dir = Renderer::replaceMacros($opt_tpl, [
'$field' => ['profile_in_netdirectory', DI::l10n()->t('Allow your profile to be searchable globally?'), $profile['net-publish'], DI::l10n()->t("Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.") . $net_pub_desc]
]);
$hide_friends = Renderer::replaceMacros($opt_tpl, [
'$field' => ['hide-friends', DI::l10n()->t('Hide your contact/friend list from viewers of your profile?'), $profile['hide-friends'], DI::l10n()->t('A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.')],
]);
$hide_wall = Renderer::replaceMacros($opt_tpl, [
'$field' => ['hidewall', DI::l10n()->t('Hide your profile details from anonymous viewers?'), $a->user['hidewall'], DI::l10n()->t('Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.')],
]);
$unlisted = Renderer::replaceMacros($opt_tpl, [
'$field' => ['unlisted', DI::l10n()->t('Make public posts unlisted'), DI::pConfig()->get(local_user(), 'system', 'unlisted'), DI::l10n()->t('Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.')],
]);
$accessiblephotos = Renderer::replaceMacros($opt_tpl, [
'$field' => ['accessible-photos', DI::l10n()->t('Make all posted pictures accessible'), DI::pConfig()->get(local_user(), 'system', 'accessible-photos'), DI::l10n()->t("This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can't handle permissions on pictures. Non public pictures still won't be visible for the public on your photo albums though.")],
]);
$blockwall = Renderer::replaceMacros($opt_tpl, [
'$field' => ['blockwall', DI::l10n()->t('Allow friends to post to your profile page?'), (intval($a->user['blockwall']) ? '0' : '1'), DI::l10n()->t('Your contacts may write posts on your profile wall. These posts will be distributed to your contacts')],
]);
$blocktags = Renderer::replaceMacros($opt_tpl, [
'$field' => ['blocktags', DI::l10n()->t('Allow friends to tag your posts?'), (intval($a->user['blocktags']) ? '0' : '1'), DI::l10n()->t('Your contacts can add additional tags to your posts.')],
]);
$unkmail = Renderer::replaceMacros($opt_tpl, [
'$field' => ['unkmail', DI::l10n()->t('Permit unknown people to send you private mail?'), $unkmail, DI::l10n()->t('Friendica network users may send you private messages even if they are not in your contact list.')],
]);
$tpl_addr = Renderer::getMarkupTemplate('settings/nick_set.tpl');
$prof_addr = Renderer::replaceMacros($tpl_addr,[
@ -870,18 +837,6 @@ function settings_content(App $a)
$stpl = Renderer::getMarkupTemplate('settings/settings.tpl');
$expire_arr = [
'days' => ['expire', DI::l10n()->t("Automatically expire posts after this many days:"), $expire, DI::l10n()->t('If empty, posts will not expire. Expired posts will be deleted')],
'label' => DI::l10n()->t('Expiration settings'),
'items' => ['expire_items', DI::l10n()->t('Expire posts'), $expire_items, DI::l10n()->t('When activated, posts and comments will be expired.')],
'notes' => ['expire_notes', DI::l10n()->t('Expire personal notes'), $expire_notes, DI::l10n()->t('When activated, the personal notes on your profile page will be expired.')],
'starred' => ['expire_starred', DI::l10n()->t('Expire starred posts'), $expire_starred, DI::l10n()->t('Starring posts keeps them from being expired. That behaviour is overwritten by this setting.')],
'photos' => ['expire_photos', DI::l10n()->t('Expire photos'), $expire_photos, DI::l10n()->t('When activated, photos will be expired.')],
'network_only' => ['expire_network_only', DI::l10n()->t('Only expire posts by others'), $expire_network_only, DI::l10n()->t('When activated, your own posts never expire. Then the settings above are only valid for posts you received.')],
];
$group_select = Group::displayGroupSelection(local_user(), $a->user['def_gid']);
// Private/public post links for the non-JS ACL form
$private_post = 1;
if (!empty($_REQUEST['public']) && !$_REQUEST['public']) {
@ -932,40 +887,32 @@ function settings_content(App $a)
'$defloc' => ['defloc', DI::l10n()->t('Default Post Location:'), $defloc, ''],
'$allowloc' => ['allow_location', DI::l10n()->t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''],
'$h_prv' => DI::l10n()->t('Security and Privacy Settings'),
'$visibility' => $profile['net-publish'],
'$maxreq' => ['maxreq', DI::l10n()->t('Maximum Friend Requests/Day:'), $maxreq , DI::l10n()->t("\x28to prevent spam abuse\x29")],
'$profile_in_dir' => $profile_in_dir,
'$profile_in_net_dir' => ['profile_in_netdirectory', DI::l10n()->t('Allow your profile to be searchable globally?'), $profile['net-publish'], DI::l10n()->t("Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.") . $net_pub_desc],
'$hide_friends' => ['hide-friends', DI::l10n()->t('Hide your contact/friend list from viewers of your profile?'), $profile['hide-friends'], DI::l10n()->t('A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.')],
'$hide_wall' => ['hidewall', DI::l10n()->t('Hide your profile details from anonymous viewers?'), $a->user['hidewall'], DI::l10n()->t('Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.')],
'$unlisted' => ['unlisted', DI::l10n()->t('Make public posts unlisted'), DI::pConfig()->get(local_user(), 'system', 'unlisted'), DI::l10n()->t('Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.')],
'$accessiblephotos' => ['accessible-photos', DI::l10n()->t('Make all posted pictures accessible'), DI::pConfig()->get(local_user(), 'system', 'accessible-photos'), DI::l10n()->t("This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can't handle permissions on pictures. Non public pictures still won't be visible for the public on your photo albums though.")],
'$blockwall' => ['blockwall', DI::l10n()->t('Allow friends to post to your profile page?'), (intval($a->user['blockwall']) ? '0' : '1'), DI::l10n()->t('Your contacts may write posts on your profile wall. These posts will be distributed to your contacts')], // array('blockwall', DI::l10n()->t('Allow friends to post to your profile page:'), !$blockwall, ''),
'$blocktags' => ['blocktags', DI::l10n()->t('Allow friends to tag your posts?'), (intval($a->user['blocktags']) ? '0' : '1'), DI::l10n()->t('Your contacts can add additional tags to your posts.')], // array('blocktags', DI::l10n()->t('Allow friends to tag your posts:'), !$blocktags, ''),
'$unkmail' => ['unkmail', DI::l10n()->t('Permit unknown people to send you private mail?'), $unkmail, DI::l10n()->t('Friendica network users may send you private messages even if they are not in your contact list.')],
'$cntunkmail' => ['cntunkmail', DI::l10n()->t('Maximum private messages per day from unknown people:'), $cntunkmail , DI::l10n()->t("\x28to prevent spam abuse\x29")],
'$group_select' => Group::displayGroupSelection(local_user(), $a->user['def_gid']),
'$permissions' => DI::l10n()->t('Default Post Permissions'),
'$aclselect' => ACL::getFullSelectorHTML(DI::page(), $a->user),
'$h_prv' => DI::l10n()->t('Security and Privacy Settings'),
'$maxreq' => ['maxreq', DI::l10n()->t('Maximum Friend Requests/Day:'), $maxreq , DI::l10n()->t("\x28to prevent spam abuse\x29")],
'$permissions' => DI::l10n()->t('Default Post Permissions'),
'$visibility' => $profile['net-publish'],
'$aclselect' => ACL::getFullSelectorHTML(DI::page(), $a->user),
'$blockwall'=> $blockwall, // array('blockwall', DI::l10n()->t('Allow friends to post to your profile page:'), !$blockwall, ''),
'$blocktags'=> $blocktags, // array('blocktags', DI::l10n()->t('Allow friends to tag your posts:'), !$blocktags, ''),
// ACL permissions box
'$group_perms' => DI::l10n()->t('Show to Groups'),
'$contact_perms' => DI::l10n()->t('Show to Contacts'),
'$private' => DI::l10n()->t('Default Private Post'),
'$public' => DI::l10n()->t('Default Public Post'),
'$is_private' => $private_post,
'$return_path' => $query_str,
'$public_link' => $public_post_link,
'$settings_perms' => DI::l10n()->t('Default Permissions for New Posts'),
'$group_select' => $group_select,
'$expire' => $expire_arr,
'$profile_in_dir' => $profile_in_dir,
'$profile_in_net_dir' => $profile_in_net_dir,
'$hide_friends' => $hide_friends,
'$hide_wall' => $hide_wall,
'$unlisted' => $unlisted,
'$accessiblephotos' => $accessiblephotos,
'$unkmail' => $unkmail,
'$cntunkmail' => ['cntunkmail', DI::l10n()->t('Maximum private messages per day from unknown people:'), $cntunkmail , DI::l10n()->t("\x28to prevent spam abuse\x29")],
'$expire' => [
'label' => DI::l10n()->t('Expiration settings'),
'days' => ['expire', DI::l10n()->t("Automatically expire posts after this many days:"), $expire, DI::l10n()->t('If empty, posts will not expire. Expired posts will be deleted')],
'items' => ['expire_items', DI::l10n()->t('Expire posts'), $expire_items, DI::l10n()->t('When activated, posts and comments will be expired.')],
'notes' => ['expire_notes', DI::l10n()->t('Expire personal notes'), $expire_notes, DI::l10n()->t('When activated, the personal notes on your profile page will be expired.')],
'starred' => ['expire_starred', DI::l10n()->t('Expire starred posts'), $expire_starred, DI::l10n()->t('Starring posts keeps them from being expired. That behaviour is overwritten by this setting.')],
'photos' => ['expire_photos', DI::l10n()->t('Expire photos'), $expire_photos, DI::l10n()->t('When activated, photos will be expired.')],
'network_only' => ['expire_network_only', DI::l10n()->t('Only expire posts by others'), $expire_network_only, DI::l10n()->t('When activated, your own posts never expire. Then the settings above are only valid for posts you received.')],
],
'$h_not' => DI::l10n()->t('Notification Settings'),
'$lbl_not' => DI::l10n()->t('Send a notification email when:'),

View file

@ -2,183 +2,173 @@
{{$nickname_block nofilter}}
<form action="settings" id="settings-form" method="post" autocomplete="off" enctype="multipart/form-data" >
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<form action="settings" id="settings-form" method="post" autocomplete="off" enctype="multipart/form-data">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<h3 class="settings-heading"><a href="javascript:;">{{$h_pass}}</a></h3>
<div class="settings-content-block">
{{include file="field_password.tpl" field=$password1}}
{{include file="field_password.tpl" field=$password2}}
{{include file="field_password.tpl" field=$password3}}
<h2 class="settings-heading"><a href="javascript:;">{{$h_pass}}</a></h2>
<div class="settings-content-block">
{{include file="field_password.tpl" field=$password1}}
{{include file="field_password.tpl" field=$password2}}
{{include file="field_password.tpl" field=$password3}}
{{if $oid_enable}}
{{include file="field_input.tpl" field=$openid}}
{{/if}}
{{if $oid_enable}}
{{include file="field_input.tpl" field=$openid}}
{{/if}}
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div>
</div>
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"/>
</div>
</div>
<h3 class="settings-heading"><a href="javascript:;">{{$h_basic}}</a></h3>
<div class="settings-content-block">
<h2 class="settings-heading"><a href="javascript:;">{{$h_basic}}</a></h2>
<div class="settings-content-block">
{{include file="field_input.tpl" field=$username}}
{{include file="field_input.tpl" field=$email}}
{{include file="field_password.tpl" field=$password4}}
{{include file="field_custom.tpl" field=$timezone}}
{{include file="field_select.tpl" field=$language}}
{{include file="field_input.tpl" field=$defloc}}
{{include file="field_checkbox.tpl" field=$allowloc}}
{{include file="field_input.tpl" field=$username}}
{{include file="field_input.tpl" field=$email}}
{{include file="field_password.tpl" field=$password4}}
{{include file="field_custom.tpl" field=$timezone}}
{{include file="field_select.tpl" field=$language}}
{{include file="field_input.tpl" field=$defloc}}
{{include file="field_checkbox.tpl" field=$allowloc}}
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div>
</div>
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"/>
</div>
</div>
<h2 class="settings-heading"><a href="javascript:;">{{$h_prv}}</a></h2>
<div class="settings-content-block">
<h3 class="settings-heading"><a href="javascript:;">{{$h_prv}}</a></h3>
<div class="settings-content-block">
<input type="hidden" name="visibility" value="{{$visibility}}"/>
<input type="hidden" name="visibility" value="{{$visibility}}" />
{{include file="field_input.tpl" field=$maxreq}}
{{include file="field_input.tpl" field=$maxreq}}
{{$profile_in_dir nofilter}}
{{$profile_in_dir nofilter}}
{{include file="field_checkbox.tpl" field=$profile_in_net_dir}}
{{include file="field_checkbox.tpl" field=$hide_friends}}
{{include file="field_checkbox.tpl" field=$hide_wall}}
{{include file="field_checkbox.tpl" field=$unlisted}}
{{include file="field_checkbox.tpl" field=$accessiblephotos}}
{{include file="field_checkbox.tpl" field=$blockwall}}
{{include file="field_checkbox.tpl" field=$blocktags}}
{{include file="field_checkbox.tpl" field=$unkmail}}
{{include file="field_input.tpl" field=$cntunkmail}}
{{$profile_in_net_dir nofilter}}
{{$group_select nofilter}}
{{$hide_friends nofilter}}
<h3>{{$permissions}}</h3>
{{$hide_wall nofilter}}
{{$aclselect nofilter}}
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"/>
</div>
</div>
{{$unlisted nofilter}}
<h2 class="settings-heading"><a href="javascript:;">{{$expire.label}}</a></h2>
<div class="settings-content-block">
<div id="settings-expiry">
{{include file="field_input.tpl" field=$expire.days}}
{{include file="field_checkbox.tpl" field=$expire.items}}
{{include file="field_checkbox.tpl" field=$expire.notes}}
{{include file="field_checkbox.tpl" field=$expire.starred}}
{{include file="field_checkbox.tpl" field=$expire.network_only}}
{{$accessiblephotos nofilter}}
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"/>
</div>
</div>
</div>
{{$blockwall nofilter}}
<h2 class="settings-heading"><a href="javascript:;">{{$h_not}}</a></h2>
<div class="settings-content-block">
<div id="settings-notifications">
{{$blocktags nofilter}}
<div id="settings-notification-desc">{{$lbl_not}}</div>
{{$unkmail nofilter}}
<div class="group">
{{include file="field_intcheckbox.tpl" field=$notify1}}
{{include file="field_intcheckbox.tpl" field=$notify2}}
{{include file="field_intcheckbox.tpl" field=$notify3}}
{{include file="field_intcheckbox.tpl" field=$notify4}}
{{include file="field_intcheckbox.tpl" field=$notify5}}
{{include file="field_intcheckbox.tpl" field=$notify6}}
{{include file="field_intcheckbox.tpl" field=$notify7}}
{{include file="field_intcheckbox.tpl" field=$notify8}}
</div>
{{include file="field_input.tpl" field=$cntunkmail}}
{{include file="field_checkbox.tpl" field=$email_textonly}}
{{include file="field_checkbox.tpl" field=$detailed_notif}}
{{$group_select nofilter}}
{{include file="field_checkbox.tpl" field=$desktop_notifications}}
<script>
(function () {
let $notificationField = $("#div_id_{{$desktop_notifications.0}}");
let $notificationCheckbox = $("#id_{{$desktop_notifications.0}}");
<h3>{{$permissions}}</h3>
if (getNotificationPermission() === 'granted') {
$notificationCheckbox.prop('checked', true);
}
if (getNotificationPermission() === null) {
$notificationField.hide();
}
{{$aclselect nofilter}}
$notificationCheckbox.on('change', function (e) {
if (Notification.permission === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else if (Notification.permission === 'denied') {
localStorage.setItem('notification-permissions', 'denied');
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div>
</div>
$notificationCheckbox.prop('checked', false);
} else if (Notification.permission === 'default') {
Notification.requestPermission(function (choice) {
if (choice === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
}
});
}
})
})();
</script>
<h3 class="settings-heading"><a href="javascript:;">{{$expire.label}}</a></h3>
<div class="settings-content-block">
<div id="settings-expiry">
{{include file="field_input.tpl" field=$expire.days}}
{{include file="field_checkbox.tpl" field=$expire.items}}
{{include file="field_checkbox.tpl" field=$expire.notes}}
{{include file="field_checkbox.tpl" field=$expire.starred}}
{{include file="field_checkbox.tpl" field=$expire.network_only}}
</div>
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div>
</div>
</div>
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"/>
</div>
</div>
<h3 class="settings-heading"><a href="javascript:;">{{$h_not}}</a></h3>
<div class="settings-content-block">
<div id="settings-notifications">
<h2 class="settings-heading"><a href="javascript:;">{{$h_advn}}</a></h2>
<div class="settings-content-block">
<div id="settings-pagetype-desc">{{$h_descadvn}}</div>
<div id="settings-notification-desc">{{$lbl_not}}</div>
{{$pagetype nofilter}}
<div class="group">
{{include file="field_intcheckbox.tpl" field=$notify1}}
{{include file="field_intcheckbox.tpl" field=$notify2}}
{{include file="field_intcheckbox.tpl" field=$notify3}}
{{include file="field_intcheckbox.tpl" field=$notify4}}
{{include file="field_intcheckbox.tpl" field=$notify5}}
{{include file="field_intcheckbox.tpl" field=$notify6}}
{{include file="field_intcheckbox.tpl" field=$notify7}}
{{include file="field_intcheckbox.tpl" field=$notify8}}
</div>
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"/>
</div>
</div>
{{include file="field_checkbox.tpl" field=$email_textonly}}
{{include file="field_checkbox.tpl" field=$detailed_notif}}
<h2 class="settings-heading"><a href="javascript:;">{{$importcontact}}</a></h2>
<div class="settings-content-block">
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}"/>
<div id="settings-pagetype-desc">{{$importcontact_text}}</div>
<input type="file" name="importcontact-filename"/>
{{include file="field_checkbox.tpl" field=$desktop_notifications}}
<script>
(function(){
let $notificationField = $("#div_id_{{$desktop_notifications.0}}");
let $notificationCheckbox = $("#id_{{$desktop_notifications.0}}");
<div class="settings-submit-wrapper">
<input type="submit" name="importcontact-submit" class="importcontact-submit" value="{{$importcontact_button}}"/>
</div>
</div>
if (getNotificationPermission() === 'granted') {
$notificationCheckbox.prop('checked', true);
}
if (getNotificationPermission() === null) {
$notificationField.hide();
}
<h2 class="settings-heading"><a href="javascript:;">{{$relocate}}</a></h2>
<div class="settings-content-block">
<div id="settings-pagetype-desc">{{$relocate_text}}</div>
$notificationCheckbox.on('change', function(e) {
if (Notification.permission === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else if (Notification.permission === 'denied') {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
} else if (Notification.permission === 'default') {
Notification.requestPermission(function(choice) {
if (choice === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
}
});
}
})
})();
</script>
</div>
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div>
</div>
<h3 class="settings-heading"><a href="javascript:;">{{$h_advn}}</a></h3>
<div class="settings-content-block">
<div id="settings-pagetype-desc">{{$h_descadvn}}</div>
{{$pagetype nofilter}}
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div>
</div>
<h3 class="settings-heading"><a href="javascript:;">{{$importcontact}}</a></h3>
<div class="settings-content-block">
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}" />
<div id="settings-pagetype-desc">{{$importcontact_text}}</div>
<input type="file" name="importcontact-filename" />
<div class="settings-submit-wrapper" >
<input type="submit" name="importcontact-submit" class="importcontact-submit" value="{{$importcontact_button}}" />
</div>
</div>
<h3 class="settings-heading"><a href="javascript:;">{{$relocate}}</a></h3>
<div class="settings-content-block">
<div id="settings-pagetype-desc">{{$relocate_text}}</div>
<div class="settings-submit-wrapper" >
<input type="submit" name="resend_relocate" class="settings-submit" value="{{$relocate_button}}" />
</div>
</div>
<div class="settings-submit-wrapper">
<input type="submit" name="resend_relocate" class="settings-submit" value="{{$relocate_button}}"/>
</div>
</div>

View file

@ -2904,6 +2904,12 @@ details.profile-jot-net[open] summary:before {
font-size: 18px;
}
.section-subtitle-wrapper > h2 {
font-size: 18px;
margin-top: 10px;
margin-bottom: 10px;
}
.fakelink > h3:before {
padding-right: 10px;
}

View file

@ -1,54 +1,50 @@
<div class="generic-page-wrapper">
{{* include the title template for the settings title *}}
{{include file="section_title.tpl" title=$ptitle }}
<h1>{{$ptitle}}</h1>
{{$nickname_block nofilter}}
<form action="settings" id="settings-form" method="post" autocomplete="off" enctype="multipart/form-data">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
{{* We organize the settings in collapsable panel-groups *}}
<div class="panel-group panel-group-settings" id="settings" role="tablist" aria-multiselectable="true">
{{* The password setting section *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="password-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="password-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#password-settings-collapse" aria-expanded="false" aria-controls="password-settings-collapse">
{{$h_pass}}
</a>
</h4>
</h2>
</div>
<div id="password-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="password-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
{{include file="field_password.tpl" field=$password1}}
{{include file="field_password.tpl" field=$password2}}
{{include file="field_password.tpl" field=$password3}}
{{if $oid_enable}}
{{if $oid_enable}}
{{include file="field_input.tpl" field=$openid}}
{{include file="field_checkbox.tpl" field=$delete_openid}}
{{/if}}
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
{{/if}}
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
{{* The basic setting section *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="basic-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="basic-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#basic-settings-collapse" aria-expanded="false" aria-controls="basic-settings-collapse">
{{$h_basic}}
</a>
</h4>
</h2>
</div>
<div id="basic-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="basic-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
{{include file="field_input.tpl" field=$username}}
{{include file="field_input.tpl" field=$email}}
{{include file="field_password.tpl" field=$password4}}
@ -56,26 +52,24 @@
{{include file="field_select.tpl" field=$language}}
{{include file="field_input.tpl" field=$defloc}}
{{include file="field_checkbox.tpl" field=$allowloc}}
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
{{* The privacity setting section *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="privacy-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="privacy-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#privacy-settings-collapse" aria-expanded="false" aria-controls="privacy-settings-collapse">
{{$h_prv}}
</a>
</h4>
</h2>
</div>
<div id="privacy-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="privacy-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
<input type="hidden" name="visibility" value="{{$visibility}}" />
@ -83,212 +77,183 @@
{{$profile_in_dir nofilter}}
{{$profile_in_net_dir nofilter}}
{{$hide_friends nofilter}}
{{$hide_wall nofilter}}
{{$unlisted nofilter}}
{{$accessiblephotos nofilter}}
{{$blockwall nofilter}}
{{$blocktags nofilter}}
{{$unkmail nofilter}}
{{include file="field_checkbox.tpl" field=$profile_in_net_dir}}
{{include file="field_checkbox.tpl" field=$hide_friends}}
{{include file="field_checkbox.tpl" field=$hide_wall}}
{{include file="field_checkbox.tpl" field=$unlisted}}
{{include file="field_checkbox.tpl" field=$accessiblephotos}}
{{include file="field_checkbox.tpl" field=$blockwall}}
{{include file="field_checkbox.tpl" field=$blocktags}}
{{include file="field_checkbox.tpl" field=$unkmail}}
{{include file="field_input.tpl" field=$cntunkmail}}
{{$group_select nofilter}}
<h4>{{$permissions}}</h4>
<h3>{{$permissions}}</h3>
{{$aclselect nofilter}}
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="expire-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="expire-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#expire-settings-collapse" aria-expanded="false" aria-controls="expire-settings-collapse">
{{$expire.label}}
</a>
</h4>
</h2>
</div>
<div id="expire-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="expire-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
{{include file="field_input.tpl" field=$expire.days}}
{{include file="field_checkbox.tpl" field=$expire.items}}
{{include file="field_checkbox.tpl" field=$expire.notes}}
{{include file="field_checkbox.tpl" field=$expire.starred}}
{{include file="field_checkbox.tpl" field=$expire.network_only}}
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
{{* The notification setting section *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="notification-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="notification-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#notification-settings-collapse" aria-expanded="false" aria-controls="notification-settings-collapse">
{{$h_not}}
</a>
</h4>
</h2>
</div>
<div id="notification-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="notification-settings">
<div class="section-content-tools-wrapper">
<div id="settings-notifications">
<div id="settings-notifications" class="panel-body">
<div id="settings-notification-desc"><h4>{{$lbl_not}}</h4></div>
<div id="settings-notification-desc">{{$lbl_not}}</div>
<div class="group">
{{include file="field_intcheckbox.tpl" field=$notify1}}
{{include file="field_intcheckbox.tpl" field=$notify2}}
{{include file="field_intcheckbox.tpl" field=$notify3}}
{{include file="field_intcheckbox.tpl" field=$notify4}}
{{include file="field_intcheckbox.tpl" field=$notify5}}
{{include file="field_intcheckbox.tpl" field=$notify6}}
{{include file="field_intcheckbox.tpl" field=$notify7}}
{{include file="field_intcheckbox.tpl" field=$notify8}}
</div>
{{include file="field_checkbox.tpl" field=$email_textonly}}
{{include file="field_checkbox.tpl" field=$detailed_notif}}
{{* commented out because it was commented out in the original template
<div class="field">
<button type="button" onclick="javascript:Notification.requestPermission(function(perm){if(perm === 'granted')alert('{{$desktop_notifications_success_message}}');});">{{$desktop_notifications}}</button>
<span class="field_help">{{$desktop_notifications_note}}</span>
</div>
*}}
{{include file="field_checkbox.tpl" field=$desktop_notifications}}
<script type="text/javascript">
(function(){
let $notificationField = $("#div_id_{{$desktop_notifications.0}}");
let $notificationCheckbox = $("#id_{{$desktop_notifications.0}}");
if (getNotificationPermission() === 'granted') {
$notificationCheckbox.prop('checked', true);
}
if (getNotificationPermission() === null) {
$notificationField.hide();
}
$notificationCheckbox.on('change', function(e){
if (Notification.permission === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else if (Notification.permission === 'denied') {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
} else if (Notification.permission === 'default') {
Notification.requestPermission(function(choice) {
if (choice === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
}
});
}
})
})();
</script>
<div class="group">
{{include file="field_intcheckbox.tpl" field=$notify1}}
{{include file="field_intcheckbox.tpl" field=$notify2}}
{{include file="field_intcheckbox.tpl" field=$notify3}}
{{include file="field_intcheckbox.tpl" field=$notify4}}
{{include file="field_intcheckbox.tpl" field=$notify5}}
{{include file="field_intcheckbox.tpl" field=$notify6}}
{{include file="field_intcheckbox.tpl" field=$notify7}}
{{include file="field_intcheckbox.tpl" field=$notify8}}
</div>
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
{{include file="field_checkbox.tpl" field=$email_textonly}}
{{include file="field_checkbox.tpl" field=$detailed_notif}}
{{* commented out because it was commented out in the original template
<div class="field">
<button type="button" onclick="javascript:Notification.requestPermission(function(perm){if(perm === 'granted')alert('{{$desktop_notifications_success_message}}');});">{{$desktop_notifications}}</button>
<span class="field_help">{{$desktop_notifications_note}}</span>
</div>
<div class="clear"></div>
*}}
{{include file="field_checkbox.tpl" field=$desktop_notifications}}
<script type="text/javascript">
(function(){
let $notificationField = $("#div_id_{{$desktop_notifications.0}}");
let $notificationCheckbox = $("#id_{{$desktop_notifications.0}}");
if (getNotificationPermission() === 'granted') {
$notificationCheckbox.prop('checked', true);
}
if (getNotificationPermission() === null) {
$notificationField.hide();
}
$notificationCheckbox.on('change', function(e){
if (Notification.permission === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else if (Notification.permission === 'denied') {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
} else if (Notification.permission === 'default') {
Notification.requestPermission(function(choice) {
if (choice === 'granted') {
localStorage.setItem('notification-permissions', $notificationCheckbox.prop('checked') ? 'granted' : 'denied');
} else {
localStorage.setItem('notification-permissions', 'denied');
$notificationCheckbox.prop('checked', false);
}
});
}
})
})();
</script>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
{{* The additional account setting section *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="additional-account-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="additional-account-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#additional-account-settings-collapse" aria-expanded="false" aria-controls="additional-account-settings-collapse">
{{$h_advn}}
</a>
</h4>
</h2>
</div>
<div id="additional-account-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="additional-account-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
<div id="settings-pagetype-desc">{{$h_descadvn}}</div>
{{$pagetype nofilter}}
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
{{* Import contacts CSV *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="importcontact-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="importcontact-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#importcontact-settings-collapse" aria-expanded="false" aria-controls="importcontact-settings-collapse">
{{$importcontact}}
</a>
</h4>
</h2>
</div>
<div id="importcontact-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="importcontact-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
<div id="importcontact-relocate-desc">{{$importcontact_text}}</div>
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}" />
<input type="file" name="importcontact-filename" />
<br/>
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="importcontact-submit" class="btn btn-primary" value="{{$importcontact_button}}">{{$importcontact_button}}</button>
</div>
<div class="clear"></div>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>
{{* The relocate setting section *}}
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="relocate-settings">
<h4>
<div class="section-subtitle-wrapper panel-heading" role="tab" id="relocate-settings">
<h2>
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#settings" href="#relocate-settings-collapse" aria-expanded="false" aria-controls="relocate-settings-collapse">
{{$relocate}}
</a>
</h4>
</h2>
</div>
<div id="relocate-settings-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="relocate-settings">
<div class="section-content-tools-wrapper">
<div class="panel-body">
<div id="settings-relocate-desc">{{$relocate_text}}</div>
<br/>
<div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="resend_relocate" class="btn btn-primary" value="{{$relocate_button}}">{{$relocate_button}}</button>
</div>
<div class="clear"></div>
</div>
<div class="panel-footer">
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</div>