<commit_before><?php
/**
 * @copyright Copyright (C) 2010-2022, the Friendica project
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */

namespace Friendica\Module\Settings;

use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\Theme;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\User;
use Friendica\Module\BaseSettings;
use Friendica\Network\HTTPException;

/**
 * Module to update user settings
 */
class Display extends BaseSettings
{
	protected function post(array $request = [])
	{
		if (!DI::app()->isLoggedIn()) {
			throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
		}

		self::checkFormSecurityTokenRedirectOnError('/settings/display', 'settings_display');

		$user = User::getById(Session::getLocalUser());

		$theme                  = !empty($_POST['theme'])                  ? trim($_POST['theme'])                : $user['theme'];
		$mobile_theme           = !empty($_POST['mobile_theme'])           ? trim($_POST['mobile_theme'])         : '';
		$enable_smile           = !empty($_POST['enable_smile'])           ? intval($_POST['enable_smile'])       : 0;
		$first_day_of_week      = !empty($_POST['first_day_of_week'])      ? intval($_POST['first_day_of_week'])  : 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;
		$enable_smart_threading = !empty($_POST['enable_smart_threading']) ? intval($_POST['enable_smart_threading']) : 0;
		$enable_dislike         = !empty($_POST['enable_dislike'])         ? intval($_POST['enable_dislike'])       : 0;
		$display_resharer       = !empty($_POST['display_resharer'])       ? intval($_POST['display_resharer'])   : 0;
		$stay_local             = !empty($_POST['stay_local'])             ? intval($_POST['stay_local'])         : 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(Session::getLocalUser(), 'system', 'mobile_theme', $mobile_theme);
		}

		DI::pConfig()->set(Session::getLocalUser(), 'system', 'itemspage_network'       , $itemspage_network);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'itemspage_mobile_network', $itemspage_mobile_network);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'update_interval'         , $browser_update);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'no_auto_update'          , $no_auto_update);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'no_smilies'              , !$enable_smile);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'infinite_scroll'         , $infinite_scroll);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'no_smart_threading'      , !$enable_smart_threading);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'hide_dislike'            , !$enable_dislike);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'display_resharer'        , $display_resharer);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'stay_local'              , $stay_local);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'first_day_of_week'       , $first_day_of_week);

		if (in_array($theme, Theme::getAllowedList())) {
			if ($theme == $user['theme']) {
				// call theme_post only if theme has not been changed
				if (($themeconfigfile = Theme::getConfigFile($theme)) !== null) {
					require_once $themeconfigfile;
					theme_post(DI::app());
				}
			} else {
				DBA::update('user', ['theme' => $theme], ['uid' => Session::getLocalUser()]);
			}
		} else {
			DI::sysmsg()->addNotice(DI::l10n()->t('The theme you chose isn\'t available.'));
		}

		Hook::callAll('display_settings_post', $_POST);

		DI::baseUrl()->redirect('settings/display');
	}

	protected function content(array $request = []): string
	{
		parent::content();

		if (!Session::getLocalUser()) {
			throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
		}

		$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';
		}

		$user = User::getById(Session::getLocalUser());

		$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 || (DI::config()->get('experimentals', 'exp_themes') || 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        = $user['theme'] ?: $default_theme;
		$mobile_theme_selected = DI::session()->get('mobile-theme', $default_mobile_theme);

		$itemspage_network = intval(DI::pConfig()->get(Session::getLocalUser(), '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(Session::getLocalUser(), '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'));

		$browser_update = intval(DI::pConfig()->get(Session::getLocalUser(), 'system', 'update_interval'));
		if (intval($browser_update) != -1) {
			$browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
		}

		$no_auto_update         = DI::pConfig()->get(Session::getLocalUser(), 'system', 'no_auto_update', 0);
		$enable_smile           = !DI::pConfig()->get(Session::getLocalUser(), 'system', 'no_smilies', 0);
		$infinite_scroll        = DI::pConfig()->get(Session::getLocalUser(), 'system', 'infinite_scroll', 0);
		$enable_smart_threading = !DI::pConfig()->get(Session::getLocalUser(), 'system', 'no_smart_threading', 0);
		$enable_dislike         = !DI::pConfig()->get(Session::getLocalUser(), 'system', 'hide_dislike', 0);
		$display_resharer       = DI::pConfig()->get(Session::getLocalUser(), 'system', 'display_resharer', 0);
		$stay_local             = DI::pConfig()->get(Session::getLocalUser(), 'system', 'stay_local', 0);


		$first_day_of_week = DI::pConfig()->get(Session::getLocalUser(), 'system', 'first_day_of_week', 0);
		$weekdays = [
			0 => DI::l10n()->t("Sunday"),
			1 => DI::l10n()->t("Monday"),
			2 => DI::l10n()->t("Tuesday"),
			3 => DI::l10n()->t("Wednesday"),
			4 => DI::l10n()->t("Thursday"),
			5 => DI::l10n()->t("Friday"),
			6 => DI::l10n()->t("Saturday")
		];

		$theme_config = '';
		if ($themeconfigfile = Theme::getConfigFile($theme_selected)) {<commit_msg>Align pConfig calls in Module\Settings\Display<commit_after><?php
/**
 * @copyright Copyright (C) 2010-2022, the Friendica project
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */

namespace Friendica\Module\Settings;

use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\Theme;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\User;
use Friendica\Module\BaseSettings;
use Friendica\Network\HTTPException;

/**
 * Module to update user settings
 */
class Display extends BaseSettings
{
	protected function post(array $request = [])
	{
		if (!DI::app()->isLoggedIn()) {
			throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
		}

		self::checkFormSecurityTokenRedirectOnError('/settings/display', 'settings_display');

		$user = User::getById(Session::getLocalUser());

		$theme                  = !empty($_POST['theme'])                  ? trim($_POST['theme'])                : $user['theme'];
		$mobile_theme           = !empty($_POST['mobile_theme'])           ? trim($_POST['mobile_theme'])         : '';
		$enable_smile           = !empty($_POST['enable_smile'])           ? intval($_POST['enable_smile'])       : 0;
		$first_day_of_week      = !empty($_POST['first_day_of_week'])      ? intval($_POST['first_day_of_week'])  : 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;
		$enable_smart_threading = !empty($_POST['enable_smart_threading']) ? intval($_POST['enable_smart_threading']) : 0;
		$enable_dislike         = !empty($_POST['enable_dislike'])         ? intval($_POST['enable_dislike'])       : 0;
		$display_resharer       = !empty($_POST['display_resharer'])       ? intval($_POST['display_resharer'])   : 0;
		$stay_local             = !empty($_POST['stay_local'])             ? intval($_POST['stay_local'])         : 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(Session::getLocalUser(), 'system', 'mobile_theme', $mobile_theme);
		}

		DI::pConfig()->set(Session::getLocalUser(), 'system', 'itemspage_network'       , $itemspage_network);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'itemspage_mobile_network', $itemspage_mobile_network);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'update_interval'         , $browser_update);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'no_auto_update'          , $no_auto_update);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'no_smilies'              , !$enable_smile);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'infinite_scroll'         , $infinite_scroll);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'no_smart_threading'      , !$enable_smart_threading);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'hide_dislike'            , !$enable_dislike);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'display_resharer'        , $display_resharer);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'stay_local'              , $stay_local);
		DI::pConfig()->set(Session::getLocalUser(), 'system', 'first_day_of_week'       , $first_day_of_week);

		if (in_array($theme, Theme::getAllowedList())) {
			if ($theme == $user['theme']) {
				// call theme_post only if theme has not been changed
				if (($themeconfigfile = Theme::getConfigFile($theme)) !== null) {
					require_once $themeconfigfile;
					theme_post(DI::app());
				}
			} else {
				DBA::update('user', ['theme' => $theme], ['uid' => Session::getLocalUser()]);
			}
		} else {
			DI::sysmsg()->addNotice(DI::l10n()->t('The theme you chose isn\'t available.'));
		}

		Hook::callAll('display_settings_post', $_POST);

		DI::baseUrl()->redirect('settings/display');
	}

	protected function content(array $request = []): string
	{
		parent::content();

		if (!Session::getLocalUser()) {
			throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
		}

		$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';
		}

		$user = User::getById(Session::getLocalUser());

		$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 || (DI::config()->get('experimentals', 'exp_themes') || 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        = $user['theme'] ?: $default_theme;
		$mobile_theme_selected = DI::session()->get('mobile-theme', $default_mobile_theme);

		$itemspage_network = intval(DI::pConfig()->get(Session::getLocalUser(), '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(Session::getLocalUser(), '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'));

		$browser_update = intval(DI::pConfig()->get(Session::getLocalUser(), 'system', 'update_interval'));
		if (intval($browser_update) != -1) {
			$browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
		}

		$no_auto_update         =  DI::pConfig()->get(Session::getLocalUser(), 'system', 'no_auto_update', 0);
		$enable_smile           = !DI::pConfig()->get(Session::getLocalUser(), 'system', 'no_smilies', 0);
		$infinite_scroll        =  DI::pConfig()->get(Session::getLocalUser(), 'system', 'infinite_scroll', 0);
		$enable_smart_threading = !DI::pConfig()->get(Session::getLocalUser(), 'system', 'no_smart_threading', 0);
		$enable_dislike         = !DI::pConfig()->get(Session::getLocalUser(), 'system', 'hide_dislike', 0);
		$display_resharer       =  DI::pConfig()->get(Session::getLocalUser(), 'system', 'display_resharer', 0);
		$stay_local             =  DI::pConfig()->get(Session::getLocalUser(), 'system', 'stay_local', 0);


		$first_day_of_week = DI::pConfig()->get(Session::getLocalUser(), 'system', 'first_day_of_week', 0);
		$weekdays = [
			0 => DI::l10n()->t("Sunday"),
			1 => DI::l10n()->t("Monday"),
			2 => DI::l10n()->t("Tuesday"),
			3 => DI::l10n()->t("Wednesday"),
			4 => DI::l10n()->t("Thursday"),
			5 => DI::l10n()->t("Friday"),
			6 => DI::l10n()->t("Saturday")
		];

		$theme_config = '';
		if ($themeconfigfile = Theme::getConfigFile($theme_selected)) {
{'fraction_non_alphanumeric': 0.1854834168590574, 'fraction_numerical': 0.011824990145841546, 'mean_word_length': 4.466297322253001, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 129, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5154782', 'n_tokens_mistral': 6340, 'n_tokens_neox': 5663, 'n_words': 1030}