use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Renderer;
-use Friendica\Core\Session;
-use Friendica\Core\Theme;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Group;
use Friendica\Model\Notify\Type;
use Friendica\Model\User;
+use Friendica\Module\BaseSettings;
use Friendica\Module\Security\Login;
use Friendica\Protocol\Email;
use Friendica\Util\Strings;
use Friendica\Util\Temporal;
use Friendica\Worker\Delivery;
-function get_theme_config_file($theme)
-{
- $theme = Strings::sanitizeFilePathItem($theme);
-
- $a = DI::app();
- $base_theme = $a->theme_info['extends'] ?? '';
-
- if (file_exists("view/theme/$theme/config.php")) {
- return "view/theme/$theme/config.php";
- }
- if ($base_theme && file_exists("view/theme/$base_theme/config.php")) {
- return "view/theme/$base_theme/config.php";
- }
- return null;
-}
-
function settings_init(App $a)
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.') . EOL);
+ notice(DI::l10n()->t('Permission denied.'));
return;
}
- // These lines provide the javascript needed by the acl selector
-
- $tpl = Renderer::getMarkupTemplate('settings/head.tpl');
- DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [
- '$ispublic' => DI::l10n()->t('everybody')
- ]);
-
- $tabs = [
- [
- 'label' => DI::l10n()->t('Account'),
- 'url' => 'settings',
- 'selected' => (($a->argc == 1) && ($a->argv[0] === 'settings')?'active':''),
- 'accesskey' => 'o',
- ],
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Two-factor authentication'),
- 'url' => 'settings/2fa',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === '2fa') ? 'active' : ''),
- 'accesskey' => 'o',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Profile'),
- 'url' => 'settings/profile',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'profile')?'active':''),
- 'accesskey' => 'p',
- ];
-
- if (Feature::get()) {
- $tabs[] = [
- 'label' => DI::l10n()->t('Additional features'),
- 'url' => 'settings/features',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'features') ? 'active' : ''),
- 'accesskey' => 't',
- ];
- }
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Display'),
- 'url' => 'settings/display',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'display')?'active':''),
- 'accesskey' => 'i',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Social Networks'),
- 'url' => 'settings/connectors',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'connectors')?'active':''),
- 'accesskey' => 'w',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Addons'),
- 'url' => 'settings/addon',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'addon')?'active':''),
- 'accesskey' => 'l',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Delegations'),
- 'url' => 'settings/delegation',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'delegation')?'active':''),
- 'accesskey' => 'd',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Connected apps'),
- 'url' => 'settings/oauth',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'oauth')?'active':''),
- 'accesskey' => 'b',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Export personal data'),
- 'url' => 'settings/userexport',
- 'selected' => (($a->argc > 1) && ($a->argv[1] === 'userexport')?'active':''),
- 'accesskey' => 'e',
- ];
-
- $tabs[] = [
- 'label' => DI::l10n()->t('Remove account'),
- 'url' => 'removeme',
- 'selected' => (($a->argc == 1) && ($a->argv[0] === 'removeme')?'active':''),
- 'accesskey' => 'r',
- ];
-
-
- $tabtpl = Renderer::getMarkupTemplate("generic_links_widget.tpl");
- DI::page()['aside'] = Renderer::replaceMacros($tabtpl, [
- '$title' => DI::l10n()->t('Settings'),
- '$class' => 'settings-widget',
- '$items' => $tabs,
- ]);
-
+ BaseSettings::content();
}
function settings_post(App $a)
return;
}
- if (($a->argc > 1) && ($a->argv[1] === 'display')) {
- BaseModule::checkFormSecurityTokenRedirectOnError('/settings/display', 'settings_display');
-
- $theme = !empty($_POST['theme']) ? Strings::escapeTags(trim($_POST['theme'])) : $a->user['theme'];
- $mobile_theme = !empty($_POST['mobile_theme']) ? Strings::escapeTags(trim($_POST['mobile_theme'])) : '';
- $nosmile = !empty($_POST['nosmile']) ? intval($_POST['nosmile']) : 0;
- $first_day_of_week = !empty($_POST['first_day_of_week']) ? intval($_POST['first_day_of_week']) : 0;
- $noinfo = !empty($_POST['noinfo']) ? intval($_POST['noinfo']) : 0;
- $infinite_scroll = !empty($_POST['infinite_scroll']) ? intval($_POST['infinite_scroll']) : 0;
- $no_auto_update = !empty($_POST['no_auto_update']) ? intval($_POST['no_auto_update']) : 0;
- $bandwidth_saver = !empty($_POST['bandwidth_saver']) ? intval($_POST['bandwidth_saver']) : 0;
- $no_smart_threading = !empty($_POST['no_smart_threading']) ? intval($_POST['no_smart_threading']) : 0;
- $nowarn_insecure = !empty($_POST['nowarn_insecure']) ? intval($_POST['nowarn_insecure']) : 0;
- $browser_update = !empty($_POST['browser_update']) ? intval($_POST['browser_update']) : 0;
- if ($browser_update != -1) {
- $browser_update = $browser_update * 1000;
- if ($browser_update < 10000) {
- $browser_update = 10000;
- }
- }
-
- $itemspage_network = !empty($_POST['itemspage_network']) ?
- intval($_POST['itemspage_network']) :
- DI::config()->get('system', 'itemspage_network');
- if ($itemspage_network > 100) {
- $itemspage_network = 100;
- }
- $itemspage_mobile_network = !empty($_POST['itemspage_mobile_network']) ?
- intval($_POST['itemspage_mobile_network']) :
- DI::config()->get('system', 'itemspage_network_mobile');
- if ($itemspage_mobile_network > 100) {
- $itemspage_mobile_network = 100;
- }
-
- if ($mobile_theme !== '') {
- DI::pConfig()->set(local_user(), 'system', 'mobile_theme', $mobile_theme);
- }
-
- DI::pConfig()->set(local_user(), 'system', 'nowarn_insecure' , $nowarn_insecure);
- DI::pConfig()->set(local_user(), 'system', 'update_interval' , $browser_update);
- DI::pConfig()->set(local_user(), 'system', 'itemspage_network' , $itemspage_network);
- DI::pConfig()->set(local_user(), 'system', 'itemspage_mobile_network', $itemspage_mobile_network);
- DI::pConfig()->set(local_user(), 'system', 'no_smilies' , $nosmile);
- DI::pConfig()->set(local_user(), 'system', 'first_day_of_week' , $first_day_of_week);
- DI::pConfig()->set(local_user(), 'system', 'ignore_info' , $noinfo);
- DI::pConfig()->set(local_user(), 'system', 'infinite_scroll' , $infinite_scroll);
- DI::pConfig()->set(local_user(), 'system', 'no_auto_update' , $no_auto_update);
- DI::pConfig()->set(local_user(), 'system', 'bandwidth_saver' , $bandwidth_saver);
- DI::pConfig()->set(local_user(), 'system', 'no_smart_threading' , $no_smart_threading);
-
- if (in_array($theme, Theme::getAllowedList())) {
- if ($theme == $a->user['theme']) {
- // call theme_post only if theme has not been changed
- if (($themeconfigfile = get_theme_config_file($theme)) !== null) {
- require_once $themeconfigfile;
- theme_post($a);
- }
- } else {
- DBA::update('user', ['theme' => $theme], ['uid' => local_user()]);
- }
- } else {
- notice(DI::l10n()->t('The theme you chose isn\'t available.'));
- }
-
- Hook::callAll('display_settings_post', $_POST);
- DI::baseUrl()->redirect('settings/display');
- return; // NOTREACHED
- }
-
BaseModule::checkFormSecurityTokenRedirectOnError('/settings', 'settings');
// Import Contacts from CSV file
unlink($_FILES['importcontact-filename']['tmp_name']);
}
}
+
+ return;
}
if (!empty($_POST['resend_relocate'])) {
$blocktags = ((!empty($_POST['blocktags']) && (intval($_POST['blocktags']) == 1)) ? 0: 1); // this setting is inverted!
$unkmail = ((!empty($_POST['unkmail']) && (intval($_POST['unkmail']) == 1)) ? 1: 0);
$cntunkmail = (!empty($_POST['cntunkmail']) ? intval($_POST['cntunkmail']) : 0);
- $suggestme = (!empty($_POST['suggestme']) ? intval($_POST['suggestme']) : 0);
$hide_friends = (($_POST['hide-friends'] == 1) ? 1: 0);
$hidewall = (($_POST['hidewall'] == 1) ? 1: 0);
if ($username != $a->user['username']) {
if (strlen($username) > 40) {
- $err .= DI::l10n()->t(' Please use a shorter name.');
+ $err .= DI::l10n()->t('Please use a shorter name.');
}
if (strlen($username) < 3) {
- $err .= DI::l10n()->t(' Name too short.');
+ $err .= DI::l10n()->t('Name too short.');
}
}
if ($email != $a->user['email']) {
// check for the correct password
if (!User::authenticate(intval(local_user()), $_POST['mpassword'])) {
- $err .= DI::l10n()->t('Wrong Password') . EOL;
+ $err .= DI::l10n()->t('Wrong Password.');
$email = $a->user['email'];
}
// check the email is valid
}
if (strlen($err)) {
- notice($err . EOL);
+ notice($err);
return;
}
DI::pConfig()->set(local_user(), 'expire', 'photos', $expire_photos);
DI::pConfig()->set(local_user(), 'expire', 'network_only', $expire_network_only);
- DI::pConfig()->set(local_user(), 'system', 'suggestme', $suggestme);
-
DI::pConfig()->set(local_user(), 'system', 'email_textonly', $email_textonly);
DI::pConfig()->set(local_user(), 'system', 'detailed_notif', $detailed_notif);
$arr[$fname] = [];
$arr[$fname][0] = $fdata[0];
foreach (array_slice($fdata,1) as $f) {
- $arr[$fname][1][] = ['feature_' .$f[0], $f[1],((intval(Feature::isEnabled(local_user(), $f[0]))) ? "1" : ''), $f[2],[DI::l10n()->t('Off'), DI::l10n()->t('On')]];
+ $arr[$fname][1][] = ['feature_' . $f[0], $f[1], Feature::isEnabled(local_user(), $f[0]), $f[2]];
}
}
return $o;
}
- /*
- * DISPLAY SETTINGS
- */
- if (($a->argc > 1) && ($a->argv[1] === 'display')) {
- $default_theme = DI::config()->get('system', 'theme');
- if (!$default_theme) {
- $default_theme = 'default';
- }
- $default_mobile_theme = DI::config()->get('system', 'mobile-theme');
- if (!$default_mobile_theme) {
- $default_mobile_theme = 'none';
- }
-
- $allowed_themes = Theme::getAllowedList();
-
- $themes = [];
- $mobile_themes = ["---" => DI::l10n()->t('No special theme for mobile devices')];
- foreach ($allowed_themes as $theme) {
- $is_experimental = file_exists('view/theme/' . $theme . '/experimental');
- $is_unsupported = file_exists('view/theme/' . $theme . '/unsupported');
- $is_mobile = file_exists('view/theme/' . $theme . '/mobile');
- if (!$is_experimental || ($is_experimental && (DI::config()->get('experimentals', 'exp_themes')==1 || is_null(DI::config()->get('experimentals', 'exp_themes'))))) {
- $theme_name = ucfirst($theme);
- if ($is_unsupported) {
- $theme_name = DI::l10n()->t('%s - (Unsupported)', $theme_name);
- } elseif ($is_experimental) {
- $theme_name = DI::l10n()->t('%s - (Experimental)', $theme_name);
- }
-
- if ($is_mobile) {
- $mobile_themes[$theme] = $theme_name;
- } else {
- $themes[$theme] = $theme_name;
- }
- }
- }
-
- $theme_selected = $a->user['theme'] ?: $default_theme;
- $mobile_theme_selected = Session::get('mobile-theme', $default_mobile_theme);
-
- $nowarn_insecure = intval(DI::pConfig()->get(local_user(), 'system', 'nowarn_insecure'));
-
- $browser_update = intval(DI::pConfig()->get(local_user(), 'system', 'update_interval'));
- if (intval($browser_update) != -1) {
- $browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
- }
-
- $itemspage_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_network'));
- $itemspage_network = (($itemspage_network > 0 && $itemspage_network < 101) ? $itemspage_network : DI::config()->get('system', 'itemspage_network'));
- $itemspage_mobile_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network'));
- $itemspage_mobile_network = (($itemspage_mobile_network > 0 && $itemspage_mobile_network < 101) ? $itemspage_mobile_network : DI::config()->get('system', 'itemspage_network_mobile'));
-
- $nosmile = DI::pConfig()->get(local_user(), 'system', 'no_smilies', 0);
- $first_day_of_week = DI::pConfig()->get(local_user(), 'system', 'first_day_of_week', 0);
- $weekdays = [0 => DI::l10n()->t("Sunday"), 1 => DI::l10n()->t("Monday")];
-
- $noinfo = DI::pConfig()->get(local_user(), 'system', 'ignore_info', 0);
- $infinite_scroll = DI::pConfig()->get(local_user(), 'system', 'infinite_scroll', 0);
- $no_auto_update = DI::pConfig()->get(local_user(), 'system', 'no_auto_update', 0);
- $bandwidth_saver = DI::pConfig()->get(local_user(), 'system', 'bandwidth_saver', 0);
- $no_smart_threading = DI::pConfig()->get(local_user(), 'system', 'no_smart_threading', 0);
-
- $theme_config = "";
- if (($themeconfigfile = get_theme_config_file($theme_selected)) !== null) {
- require_once $themeconfigfile;
- $theme_config = theme_content($a);
- }
-
- $tpl = Renderer::getMarkupTemplate('settings/display.tpl');
- $o = Renderer::replaceMacros($tpl, [
- '$ptitle' => DI::l10n()->t('Display Settings'),
- '$form_security_token' => BaseModule::getFormSecurityToken("settings_display"),
- '$submit' => DI::l10n()->t('Save Settings'),
- '$baseurl' => DI::baseUrl()->get(true),
- '$uid' => local_user(),
-
- '$theme' => ['theme', DI::l10n()->t('Display Theme:'), $theme_selected, '', $themes, true],
- '$mobile_theme' => ['mobile_theme', DI::l10n()->t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, false],
- '$nowarn_insecure' => ['nowarn_insecure', DI::l10n()->t('Suppress warning of insecure networks'), $nowarn_insecure, DI::l10n()->t("Should the system suppress the warning that the current group contains members of networks that can't receive non public postings.")],
- '$ajaxint' => ['browser_update', DI::l10n()->t("Update browser every xx seconds"), $browser_update, DI::l10n()->t('Minimum of 10 seconds. Enter -1 to disable it.')],
- '$itemspage_network' => ['itemspage_network', DI::l10n()->t("Number of items to display per page:"), $itemspage_network, DI::l10n()->t('Maximum of 100 items')],
- '$itemspage_mobile_network' => ['itemspage_mobile_network', DI::l10n()->t("Number of items to display per page when viewed from mobile device:"), $itemspage_mobile_network, DI::l10n()->t('Maximum of 100 items')],
- '$nosmile' => ['nosmile', DI::l10n()->t("Don't show emoticons"), $nosmile, ''],
- '$calendar_title' => DI::l10n()->t('Calendar'),
- '$first_day_of_week' => ['first_day_of_week', DI::l10n()->t('Beginning of week:'), $first_day_of_week, '', $weekdays, false],
- '$noinfo' => ['noinfo', DI::l10n()->t("Don't show notices"), $noinfo, ''],
- '$infinite_scroll' => ['infinite_scroll', DI::l10n()->t("Infinite scroll"), $infinite_scroll, ''],
- '$no_auto_update' => ['no_auto_update', DI::l10n()->t("Automatic updates only at the top of the network page"), $no_auto_update, DI::l10n()->t('When disabled, the network page is updated all the time, which could be confusing while reading.')],
- '$bandwidth_saver' => ['bandwidth_saver', DI::l10n()->t('Bandwidth Saver Mode'), $bandwidth_saver, DI::l10n()->t('When enabled, embedded content is not displayed on automatic updates, they only show on page reload.')],
- '$no_smart_threading' => ['no_smart_threading', DI::l10n()->t('Disable Smart Threading'), $no_smart_threading, DI::l10n()->t('Disable the automatic suppression of extraneous thread indentation.')],
-
- '$d_tset' => DI::l10n()->t('General Theme Settings'),
- '$d_ctset' => DI::l10n()->t('Custom Theme Settings'),
- '$d_cset' => DI::l10n()->t('Content Settings'),
- 'stitle' => DI::l10n()->t('Theme settings'),
- '$theme_config' => $theme_config,
- ]);
-
- return $o;
- }
-
-
/*
* ACCOUNT SETTINGS
*/
$expire_starred = DI::pConfig()->get(local_user(), 'expire', 'starred', true);
$expire_photos = DI::pConfig()->get(local_user(), 'expire', 'photos', false);
$expire_network_only = DI::pConfig()->get(local_user(), 'expire', 'network_only', false);
- $suggestme = DI::pConfig()->get(local_user(), 'system', 'suggestme', false);
-
- // nowarn_insecure
if (!strlen($a->user['timezone'])) {
$timezone = date_default_timezone_get();
'$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.')],
]);
- $suggestme = Renderer::replaceMacros($opt_tpl, [
- '$field' => ['suggestme', DI::l10n()->t('Allow us to suggest you as a potential friend to new members?'), $suggestme, DI::l10n()->t('If you like, Friendica may suggest new members to add you as a contact.')],
- ]);
-
$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.')],
]);
$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')],
- 'advanced' => DI::l10n()->t('Advanced expiration settings'),
- 'label' => DI::l10n()->t('Advanced Expiration'),
- 'items' => ['expire_items', DI::l10n()->t("Expire posts:"), $expire_items],
- 'notes' => ['expire_notes', DI::l10n()->t("Expire personal notes:"), $expire_notes],
- 'starred' => ['expire_starred', DI::l10n()->t("Expire starred posts:"), $expire_starred],
- 'photos' => ['expire_photos', DI::l10n()->t("Expire photos:"), $expire_photos],
- 'network_only' => ['expire_network_only', DI::l10n()->t("Only expire posts by others:"), $expire_network_only],
+ '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']);
'$permdesc' => DI::l10n()->t("\x28click to open/close\x29"),
'$visibility' => $profile['net-publish'],
'$aclselect' => ACL::getFullSelectorHTML(DI::page(), $a->user),
- '$suggestme' => $suggestme,
'$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, ''),