PHPIndex

This page lists files in the current directory. You can view content, get download/execute commands for Wget, Curl, or PowerShell, or filter the list using wildcards (e.g., `*.sh`).

aside_configure.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/aside_configure.phtml'
View Content
<?php
	declare(strict_types=1);
?>
<nav class="nav nav-list aside" id="aside_feed">
	<a class="toggle_aside" href="#close"><?= _i('close') ?></a>

	<ul>
		<li class="item nav-section">
			<div class="item nav-header"><?= _t('gen.menu.account') ?>: <?= htmlspecialchars(Minz_User::name() ?? '', ENT_NOQUOTES, 'UTF-8')?></div>
			<ul>
				<li class="item<?= Minz_Request::controllerName() === 'user' && Minz_Request::actionName() === 'profile' ? ' active' : '' ?>">
					<a href="<?= _url('user', 'profile') ?>"><?= _t('gen.menu.user_profile') ?></a>
				</li>
				<li class="item">
					<a class="signout" href="<?= FreshRSS_auth_Controller::getLogoutUrl() ?>">
						<?php
						echo _t('gen.auth.logout'); ?> <?= _i('logout') ?></a>
				</li>
			</ul>
		</li>

		<li class="item nav-section">
			<div class="item nav-header"><?= _t('gen.menu.configuration') ?></div>
			<ul>
				<li class="item<?= Minz_Request::actionName() === 'display' ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'display') ?>"><?= _t('gen.menu.display') ?></a>
				</li>
				<li class="item<?= Minz_Request::actionName() === 'reading' ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'reading') ?>"><?= _t('gen.menu.reading') ?></a>
				</li>
				<li class="item<?= Minz_Request::actionName() === 'archiving' ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'archiving') ?>"><?= _t('gen.menu.archiving') ?></a>
				</li>
				<li class="item<?= Minz_Request::actionName() === 'integration' ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'integration') ?>"><?= _t('gen.menu.sharing') ?></a>
				</li>
				<li class="item<?= Minz_Request::actionName() === 'shortcut' ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'shortcut') ?>"><?= _t('gen.menu.shortcuts') ?></a>
				</li>
				<li class="item<?= in_array(Minz_Request::actionName(), ['queries', 'query'], true) ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'queries') ?>"><?= _t('gen.menu.queries') ?></a>
				</li>
				<li class="item<?= Minz_Request::controllerName() === 'extension' ? ' active' : '' ?>">
					<a href="<?= _url('extension', 'index') ?>"><?= _t('gen.menu.extensions') ?></a>
				</li>
				<?php if (!FreshRSS_Auth::hasAccess('admin')) { ?>
				<li class="item<?= Minz_Request::actionName() === 'logs' ? ' active' : '' ?>">
					<a href="<?= _url('index', 'logs') ?>"><?= _t('gen.menu.logs') ?></a>
				</li>
				<?php } ?>
				<?= Minz_ExtensionManager::callHookString('menu_configuration_entry') ?>
			</ul>
		</li>

		<?php if (FreshRSS_Auth::hasAccess('admin')) { ?>
		<li class="item nav-section">
			<div class="item nav-header"><?= _t('gen.menu.admin') ?></div>
			<ul>
				<li class="item<?= Minz_Request::actionName() === 'system' ? ' active' : '' ?>">
					<a href="<?= _url('configure', 'system') ?>"><?= _t('gen.menu.system') ?></a>
				</li>
				<li class="item<?= Minz_Request::controllerName() === 'user' && in_array(Minz_Request::actionName(), ['manage', 'details'], true) ? ' active' : '' ?>">
					<a href="<?= _url('user', 'manage') ?>"><?= _t('gen.menu.user_management') ?></a>
				</li>
				<li class="item<?= Minz_Request::controllerName() === 'auth' ? ' active' : '' ?>">
					<a href="<?= _url('auth', 'index') ?>"><?= _t('gen.menu.authentication') ?></a>
				</li>
				<li class="item<?= Minz_Request::controllerName() === 'update' && Minz_Request::actionName() === 'checkInstall' ? ' active' : '' ?>">
					<a href="<?= _url('update', 'checkInstall') ?>"><?= _t('gen.menu.check_install') ?></a>
				</li>
				<?php if (!FreshRSS_Context::systemConf()->disable_update) { ?>
				<li class="item<?= Minz_Request::controllerName() === 'update' && Minz_Request::actionName() === 'index' ? ' active' : '' ?>">
					<a href="<?= _url('update', 'index') ?>"><?= _t('gen.menu.update') ?></a>
				</li>
				<?php } ?>
				<li class="item<?= Minz_Request::actionName() === 'logs' ? ' active' : '' ?>">
					<a href="<?= _url('index', 'logs') ?>"><?= _t('gen.menu.logs') ?></a>
				</li>
				<?= Minz_ExtensionManager::callHookString('menu_admin_entry') ?>
			</ul>
		</li>
		<?php } ?>

		<li class="item nav-section">
			<div class="item nav-header"><!-- empty headline --></div>
			<ul>
				<li class="item<?= Minz_Request::actionName() === 'about' ? ' active' : '' ?>">
					<a href="<?= _url('index', 'about') ?>"><?= _t('gen.menu.about') ?></a>
				</li>
				<?php if (file_exists(TOS_FILENAME)) { ?>
					<li class="item<?= Minz_Request::actionName() === 'tos' ? ' active' : '' ?>">
						<a href="<?= _url('index', 'tos') ?>"><?= _t('index.tos.title')?></a>
					</li>
				<?php } ?>
			</ul>
		</li>
	</ul>
</nav>
<a class="close-aside" href="#close">❌</a>
<nav class="nav_menu nav_mobile">
	<a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a>
</nav>
aside_feed.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/aside_feed.phtml'
View Content
<?php
	declare(strict_types=1);
	/** @var FreshRSS_View $this */
	$actual_view = Minz_Request::actionName();
	$class = '';
	if (FreshRSS_Context::userConf()->hide_read_feeds &&
			FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ) &&
			!FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_READ)) {
		$class = ' state_unread';
	}

	$state_filter_manual = Minz_Request::paramString('state');
	if ($state_filter_manual !== '') {
		$state_filter_manual = '&state=' . $state_filter_manual;
	}
?>
<nav class="nav aside aside_feed<?= $class ?>" id="aside_feed">
	<a class="toggle_aside" href="#close"><?= _i('close') ?></a>

	<?php if (FreshRSS_Auth::hasAccess()) { ?>
	<div class="stick configure-feeds">
		<a id="btn-subscription" class="btn btn-important" href="<?= _url('subscription', 'index') ?>"><?= _t('index.menu.subscription') ?></a>
		<a id="btn-add" class="btn btn-important" href="<?= _url('subscription', 'add') ?>"><?= _i('add') ?></a>
	</div>
	<?php } elseif (FreshRSS_Auth::accessNeedsLogin()) { ?>
	<a href="<?= _url('index', 'about') ?>" class="about"><?= _t('index.menu.about') ?></a>
	<?php } ?>

	<form id="mark-read-aside" method="post">
	<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
	<ul id="sidebar" class="tree scrollbar-thin">
		<li class="tree-folder category all<?= FreshRSS_Context::isCurrentGet('a') ? ' active' : '' ?>">
			<a class="tree-folder-title" data-unread="<?= format_number(FreshRSS_Context::$total_unread) ?>" href="<?= _url('index', $actual_view) . $state_filter_manual ?>">
				<?= _i('all') ?><span class="title" data-unread="<?= format_number(FreshRSS_Context::$total_unread) ?>"><?= _t('index.menu.main_stream') ?></span>
			</a>
		</li>

		<li class="tree-folder category important<?= FreshRSS_Context::isCurrentGet('i') ? ' active' : '' ?>">
			<a class="tree-folder-title" data-unread="<?= format_number(FreshRSS_Context::$total_important_unread) ?>" href="<?= _url('index', $actual_view, 'get', 'i') . $state_filter_manual ?>">
				<?= _i('important') ?><span class="title" data-unread="<?= format_number(FreshRSS_Context::$total_important_unread) ?>"><?= _t('index.menu.important') ?></span>
			</a>
		</li>

		<li class="tree-folder category favorites<?= FreshRSS_Context::isCurrentGet('s') ? ' active' : '' ?>">
			<a class="tree-folder-title" data-unread="<?= format_number(FreshRSS_Context::$total_starred['unread']) ?>" href="<?= _url('index', $actual_view, 'get', 's') . $state_filter_manual ?>">
				<?= _i('starred') ?><span class="title" data-unread="<?= format_number(FreshRSS_Context::$total_starred['unread']) ?>"><?= _t('index.menu.favorites', format_number(FreshRSS_Context::$total_starred['all'])) ?></span>
			</a>
		</li>

		<?php
			$t_active = FreshRSS_Context::isCurrentGet('T');
			$t_show = ($t_active && in_array(FreshRSS_Context::userConf()->display_categories, ['active', 'remember'], true)) || FreshRSS_Context::userConf()->display_categories === 'all';
		?>
		<li id="tags" class="tree-folder category tags<?= $t_active ? ' active' : '' ?>" data-unread="<?= format_number($this->nbUnreadTags) ?>">
			<a href="<?= _url('index', $actual_view, 'get', 'T') . $state_filter_manual ?>" class="tree-folder-title">
				<button class="dropdown-toggle" title="<?= _t('sub.category.expand') ?>"><?= _i($t_show ? 'up' : 'down') ?></button><span class="title" title="<?= _t('sub.category.open') ?>" data-unread="<?= format_number($this->nbUnreadTags) ?>"><?= _t('index.menu.tags') ?></span>
			</a>
			<ul class="tree-folder-items<?= $t_show ? ' active' : '' ?>">
				<?php
					foreach ($this->tags as $tag):
				?>
				<li id="t_<?= $tag->id() ?>" class="item feed<?= FreshRSS_Context::isCurrentGet('t_' . $tag->id()) ? ' active' : '' ?>" data-unread="<?= $tag->nbUnread() ?>">
					<div class="dropdown no-mobile">
						<div id="dropdown-t-<?= $tag->id() ?>" class="dropdown-target"></div>
						<a class="dropdown-toggle" href="#dropdown-t-<?= $tag->id() ?>"><?= _i('configure') ?></a>
						<?php /* tag_config_template */ ?>
					</div>
					<a class="item-title" data-unread="<?= format_number($tag->nbUnread()) ?>" href="<?=
						_url('index', $actual_view, 'get', 't_' . $tag->id()) . $state_filter_manual ?>"><?= _i('label') ?> <?= $tag->name() ?></a>
				</li>
				<?php endforeach; ?>
			</ul>
		</li>

		<?php
			$nbFeedsTotal = 0;
			foreach ($this->categories as $cat) {
				$nbFeedsTotal += $cat->nbFeeds();
			}

			foreach ($this->categories as $cat):
				$feeds = $cat->feeds();
				$position = $cat->attributeInt('position');
				if (!empty($feeds)) {
					$c_active = FreshRSS_Context::isCurrentGet('c_' . $cat->id());
					$c_show = ($c_active && in_array(FreshRSS_Context::userConf()->display_categories, ['active', 'remember'], true))
						|| FreshRSS_Context::userConf()->display_categories === 'all';
		?>
		<li id="c_<?= $cat->id() ?>" class="tree-folder category<?= $c_active ? ' active' : '' ?>"<?=
			null === $position ? '' : " data-position='$position'" ?> data-unread="<?= $cat->nbNotRead() ?>">
			<a href="<?= _url('index', $actual_view, 'get', 'c_' . $cat->id()) . $state_filter_manual ?>" class="tree-folder-title">
				<button class="dropdown-toggle" title="<?= _t('sub.category.expand') ?>"><?= _i($c_show ? 'up' : 'down') ?></button><span title="<?= _t('sub.category.open') ?>" class="title<?= $cat->hasFeedsWithError() ? ' error' : '' ?>" data-unread="<?=
					format_number($cat->nbNotRead()) ?>" ><?=
						$cat->name()
					?><?php if ($cat->kind() == FreshRSS_Category::KIND_DYNAMIC_OPML) { echo _i('opml-dyn'); } ?></span>
			</a>

			<ul class="tree-folder-items<?= $c_show ? ' active' : '' ?>">
<?php
	// NB: Reduce whitespace in that loop
	$show_favicon = FreshRSS_Context::userConf()->show_favicons && $nbFeedsTotal < FreshRSS_Context::userConf()->simplify_over_n_feeds;

	foreach ($feeds as $feed):
		$f_active = FreshRSS_Context::isCurrentGet('f_' . $feed->id());
		$f_active_class = $f_active ? ' active' : '';

		$error_class = '';
		$error_title = '';
		if ($feed->inError() && !$feed->mute()) {
			$error_class = ' error';
			$error_title = _t('sub.feed.error');
		}

		$empty_class = '';
		$empty_title = '';
		if ($feed->nbEntries() <= 0) {
			$empty_class = ' empty';
			$empty_title = _t('sub.feed.empty');
		}
		$mute_class = $feed->mute() ? ' mute' : '';
?>
<li id="f_<?= $feed->id() ?>" class="item feed<?= $f_active_class, $mute_class, $error_class, $empty_class ?>"
		data-unread="<?= $feed->nbNotRead() ?>" data-priority="<?= $feed->priority() ?>"><?php
		if ($f_active || $nbFeedsTotal < FreshRSS_Context::userConf()->simplify_over_n_feeds):
			?><div class="dropdown no-mobile">
				<div id="dropdown-<?= $feed->id() ?>" class="dropdown-target"></div><a href="#dropdown-<?= $feed->id() ?>" class="dropdown-toggle" title="<?= _t('gen.action.menu.open') ?>" data-fweb="<?= $feed->website() ?>"><?= _i('configure') ?></a><?php /* feed_config_template */ ?>
			</div><?php
		endif;
		$title = _t('sub.feed.open_feed', $feed->name());
		$title .= $error_title !== '' ? '&#13;⚠ ' . $error_title : '';
		$title .= $empty_title !== '' ? '&#13;' . $empty_title : '';
		$title .= $feed->mute() ? '&#13;🔇 ' . _t('sub.feed.mute.state_is_muted') : '';
		?><a class="item-title" title="<?= $title ?>"
		data-unread="<?= format_number($feed->nbNotRead()) ?>" href="<?=
		_url('index', $actual_view, 'get', 'f_' . $feed->id()) . $state_filter_manual ?>">
		<?php
		if ($show_favicon || $f_active) { ?><img class="favicon" src="<?= $feed->favicon() ?>" alt="✇" loading="lazy" /><?php }
		?><span class="title"><?= $feed->name() ?></span></a></li>
<?php
	endforeach;
?>
			</ul>
		</li>
		<?php
				}
			endforeach;
		?>
		<li class="tree-bottom"></li>
	</ul>
	</form>
</nav>
<a class="close-aside" href="#close">❌</a>

<div id="first_load" class="loading"></div>
<?php flush(); ?>

<script id="tag_config_template" type="text/html">
	<ul class="dropdown-menu">
		<li class="item">
			<a class="configure open-slider" href="<?= _url('tag', 'update', 'id', '------') ?>"><?= _t('gen.action.manage') ?></a>
		</li>
	</ul>
	<a class="dropdown-close" href="#close">❌</a>
</script>

<script id="feed_config_template" type="text/html">
	<ul class="dropdown-menu">
		<li class="item"><a href="<?= _url('index', $actual_view, 'get', 'f_------') ?>"><?= _t('gen.action.filter') ?></a></li>
		<?php if (FreshRSS_Auth::hasAccess()) { ?>
		<li class="item"><a href="<?= _url('stats', 'repartition', 'id', '------') ?>"><?= _t('index.menu.stats') ?></a></li>
		<?php } ?>
		<li class="item link website"><a target="_blank" rel="noreferrer" href="http://example.net/"><?= _t('gen.action.see_website') ?></a></li>
		<?php if (FreshRSS_Auth::hasAccess()) {
		$get = Minz_Request::paramString('get');
		if ($get === '') {
			$url = _url('subscription', 'feed', 'id', '------', 'from', $actual_view);
		} else {
			$url = _url('subscription', 'feed', 'id', '------', 'get', $get, 'from', $actual_view);
		}
		?>
		<li class="item"><a class="configure open-slider" href="<?= $url ?>"><?= _t('gen.action.manage') ?></a></li>
		<li class="item"><a href="<?= _url('feed', 'actualize', 'id', '------') ?>"><?= _t('gen.action.actualize') ?></a></li>
		<li class="item">
			<?php $confirm = FreshRSS_Context::userConf()->reading_confirm ? 'confirm" disabled="disabled' : ''; ?>
			<button class="read_all as-link <?= $confirm ?>"
				form="mark-read-aside"
				formaction="<?= _url('entry', 'read', 'get', 'f_------') ?>"
				type="submit"><?= _t('index.menu.mark_feed_read') ?></button>
		</li>
		<?php } ?>
	</ul>
	<a class="dropdown-close" href="#close">❌</a>
</script>
aside_subscription.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/aside_subscription.phtml'
View Content
<?php
	declare(strict_types=1);
?>
<nav class="nav nav-list aside" id="aside_feed">
	<a class="toggle_aside" href="#close"><?= _i('close') ?></a>
	<ul>
		<li class="item nav-section">
			<div class="nav-header"><?= _t('sub.menu.subscription_management') ?></div>
			<ul>
				<li class="item<?= Minz_Request::controllerName() === 'subscription' && Minz_Request::actionName() === 'add' ? ' active' : '' ?>">
					<a href="<?= _url('subscription', 'add') ?>"><?= _t('sub.menu.add') ?></a>
				</li>

				<li class="item<?= Minz_Request::controllerName() === 'subscription' && in_array(Minz_Request::actionName(), ['index', 'category', 'feed'], true) ? ' active' : '' ?>">
					<a href="<?= _url('subscription', 'index') ?>"><?= _t('sub.menu.subscription_management') ?></a>
				</li>

				<li class="item<?= Minz_Request::controllerName() === 'tag' ? ' active' : '' ?>">
					<a href="<?= _url('tag', 'index') ?>"><?= _t('sub.menu.label_management') ?></a>
				</li>

				<li class="item<?= Minz_Request::controllerName() === 'importExport' ? ' active' : '' ?>">
					<a href="<?= _url('importExport', 'index') ?>"><?= _t('sub.menu.import_export') ?></a>
				</li>

				<li class="item<?= Minz_Request::controllerName() === 'subscription' && Minz_Request::actionName() === 'bookmarklet' ? ' active' : '' ?>">
					<a href="<?= _url('subscription', 'bookmarklet') ?>"><?= _t('sub.menu.subscription_tools') ?></a>
				</li>
			</ul>
		</li>

		<li class="item nav-section">
			<div class="nav-header"><?= _t('admin.stats') ?></div>
			<ul>
				<li class="item<?= Minz_Request::controllerName() == 'stats' && Minz_Request::actionName() == 'index' ? ' active' : '' ?>">
					<a href="<?= _url('stats', 'index') ?>"><?= _t('sub.menu.stats.main') ?></a>
				</li>
				<li class="item<?= Minz_Request::actionName() == 'idle' ? ' active' : '' ?>">
					<a href="<?= _url('stats', 'idle') ?>"><?= _t('sub.menu.stats.idle') ?></a>
				</li>
				<li class="item<?= Minz_Request::actionName() == 'repartition' ? ' active' : '' ?>">
					<a href="<?= _url('stats', 'repartition') ?>"><?= _t('sub.menu.stats.repartition') ?></a>
				</li>
			</ul>
		</li>
	</ul>
</nav>
<a class="close-aside" href="#close">❌</a>
<nav class="nav_menu nav_mobile">
	<a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a>
</nav>
header.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/header.phtml'
View Content
<?php
	declare(strict_types=1);
	/** @var FreshRSS_View $this */
?>
<header class="header">
	<div class="item title">
		<a href="<?= Minz_Url::display(['c' => 'index', 'a' => 'index'], 'html', 'root') ?>">
			<?php if (FreshRSS_Context::systemConf()->logo_html == '') { ?>
				<img class="logo" src="<?= _i('FreshRSS-logo', FreshRSS_Themes::ICON_URL) ?>" alt="FreshRSS" loading="lazy" />
			<?php
				} else {
					echo FreshRSS_Context::systemConf()->logo_html;
				}
			?>
		</a>
	</div>

	<div class="item search">
		<?php if (FreshRSS_Auth::hasAccess() || FreshRSS_Context::systemConf()->allow_anonymous) { ?>
		<form action="<?= $this->html_url ?>" method="get">
			<?php if (Minz_Request::controllerName() === 'index'): ?>
				<?php if (in_array(Minz_Request::actionName(), ['normal', 'global', 'reader'], true)) { ?>
				<input type="hidden" name="a" value="<?= Minz_Request::actionName() ?>" />
				<?php } if (Minz_Request::paramString('get') !== '') { ?>
				<input type="hidden" name="get" value="<?= FreshRSS_Context::currentGet() ?>" />
				<?php } if (Minz_Request::paramInt('state') !== 0) { ?>
				<input type="hidden" name="state" value="<?= Minz_Request::paramInt('state') ?>" />
				<?php } ?>
			<?php endif; ?>
			<?php if (Minz_Request::paramString('user') !== '') { ?>
			<input type="hidden" name="user" value="<?= Minz_User::name() ?>" />
			<?php } if (ctype_alnum(Minz_Request::paramString('t'))) { ?>
			<input type="hidden" name="t" value="<?= Minz_Request::paramString('t') ?>" />
			<?php } if (ctype_upper(Minz_Request::paramString('order'))) { ?>
			<input type="hidden" name="order" value="<?= FreshRSS_Context::$order ?>" />
			<?php } if (ctype_lower(Minz_Request::paramString('f'))) { ?>
			<input type="hidden" name="f" value="<?= Minz_Request::paramString('f') ?>" />
			<?php } ?>
			<div class="stick">
				<input type="search" name="search" id="search"
					value="<?= htmlspecialchars(htmlspecialchars_decode(Minz_Request::paramString('search'), ENT_QUOTES), ENT_COMPAT, 'UTF-8') ?>"
					placeholder="<?= _t('gen.menu.search') ?>" />
				<button class="btn" type="submit"><?= _i('search') ?></button>
			</div>
		</form>
		<?php } ?>
	</div>

	<?php if (FreshRSS_Auth::hasAccess()) { ?>
	<nav class="item configure">
		<div class="dropdown">
			<div id="dropdown-configure" class="dropdown-target"></div>
			<a class="btn dropdown-toggle" href="#dropdown-configure"><?= _i('configure') ?></a>
			<ul class="dropdown-menu scrollbar-thin">
				<li class="dropdown-header-close"><a class="toggle_aside" href="#close"><?= _i('close') ?></a></li>

				<li class="item dropdown-section">
					<div class="dropdown-section-title">
						<?= _t('gen.menu.account') ?>: <?= htmlspecialchars(Minz_User::name() ?? '', ENT_NOQUOTES, 'UTF-8') ?>
					</div>
					<ul>
						<li class="item"><a href="<?= _url('user', 'profile') ?>"><?= _t('gen.menu.user_profile') ?></a></li>
						<?php if (FreshRSS_Auth::accessNeedsAction()): ?>
						<li class="item"><a class="signout" href="<?= _url('auth', 'logout') ?>"><?= _t('gen.auth.logout'); ?><?= _i('logout') ?></a></li>
						<?php else: ?>
						<li class="item"><span class="signout">(<?= htmlspecialchars(Minz_User::name() ?? '', ENT_NOQUOTES, 'UTF-8') ?>)</span></li>
						<?php endif; ?>
					</ul>
				</li>
				<li class="item dropdown-section">
					<div class="dropdown-section-title">
						<?= _t('gen.menu.configuration') ?>
					</div>
					<ul>
						<li class="item"><a href="<?= _url('configure', 'display') ?>"><?= _t('gen.menu.display') ?></a></li>
						<li class="item"><a href="<?= _url('configure', 'reading') ?>"><?= _t('gen.menu.reading') ?></a></li>
						<li class="item"><a href="<?= _url('configure', 'archiving') ?>"><?= _t('gen.menu.archiving') ?></a></li>
						<li class="item"><a href="<?= _url('configure', 'integration') ?>"><?= _t('gen.menu.sharing') ?></a></li>
						<li class="item"><a href="<?= _url('configure', 'shortcut') ?>"><?= _t('gen.menu.shortcuts') ?></a></li>
						<li class="item"><a href="<?= _url('configure', 'queries') ?>"><?= _t('gen.menu.queries') ?></a></li>
						<li class="item"><a href="<?= _url('extension', 'index') ?>"><?= _t('gen.menu.extensions') ?></a></li>
						<?= Minz_ExtensionManager::callHookString('menu_configuration_entry') ?>
					</ul>
				</li>
				<?php if (FreshRSS_Auth::hasAccess('admin')) { ?>
				<li class="item dropdown-section">
					<div class="dropdown-section-title">
						<?= _t('gen.menu.admin') ?>
					</div>
					<ul>
						<li class="item"><a href="<?= _url('configure', 'system') ?>"><?= _t('gen.menu.system') ?></a></li>
						<li class="item"><a href="<?= _url('user', 'manage') ?>"><?= _t('gen.menu.user_management') ?></a></li>
						<li class="item"><a href="<?= _url('auth', 'index') ?>"><?= _t('gen.menu.authentication') ?></a></li>
						<li class="item"><a href="<?= _url('update', 'checkInstall') ?>"><?= _t('gen.menu.check_install') ?></a></li>
						<?php if (!FreshRSS_Context::systemConf()->disable_update) { ?>
						<li class="item"><a href="<?= _url('update', 'index') ?>"><?= _t('gen.menu.update') ?></a></li>
						<?php } ?>
						<?= Minz_ExtensionManager::callHookString('menu_admin_entry') ?>
					</ul>
				</li>
				<?php } ?>

				<li class="item dropdown-section">
					<ul>
						<li class="item"><a href="<?= _url('index', 'logs') ?>"><?= _t('gen.menu.logs') ?></a></li>
						<li class="item"><a href="<?= _url('index', 'about') ?>"><?= _t('gen.menu.about') ?></a></li>
						<?php if (file_exists(TOS_FILENAME)) { ?>
							<li class="item">
								<a href="<?= _url('index', 'tos') ?>"><?= _t('index.tos.title')?></a>
							</li>
						<?php } ?>
						<?= Minz_ExtensionManager::callHookString('menu_other_entry') ?>
					</ul>
				</li>
			</ul>
			<a class="dropdown-close" href="#close">❌</a>
		</div>
	</nav>
	<?php } elseif (FreshRSS_Auth::accessNeedsAction()) { ?>
	<div class="item configure">
		<a class="signin" href="<?= Minz_Url::display(['c' => 'auth', 'a' => 'login'], 'html', 'root') ?>"><?= _i('login') ?><?= _t('gen.auth.login') ?></a>
	</div>
	<?php } ?>
</header>
layout.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/layout.phtml'
View Content
<?php
	declare(strict_types=1);
	/** @var FreshRSS_View $this */
	FreshRSS::preLayout();
	$class = '';
	$dir = '';
	if (_t('gen.dir') === 'rtl') {
		$dir = ' dir="rtl"';
		$class = 'rtl ';
	}
	if (FreshRSS_Context::userConf()->darkMode !== 'no') {
		$class .= 'darkMode_' . FreshRSS_Context::userConf()->darkMode;
	}
?>
<!DOCTYPE html>
<html lang="<?= FreshRSS_Context::userConf()->language ?>"<?= $dir ?> xml:lang="<?= FreshRSS_Context::userConf()->language ?>" class="<?= $class ?>">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
		<?= FreshRSS_View::metaThemeColor() ?>
		<?= FreshRSS_View::headStyle() ?>
		<script id="jsonVars" type="application/json">
<?php $this->renderHelper('javascript_vars'); ?>
		</script>
		<?= FreshRSS_View::headScript() ?>
		<link rel="manifest" href="<?= Minz_Url::display('/themes/manifest.json') ?>" />
		<link rel="shortcut icon" id="favicon" type="image/x-icon" sizes="16x16 64x64" href="<?= Minz_Url::display('/favicon.ico') ?>" />
		<link rel="icon msapplication-TileImage apple-touch-icon" type="image/png" sizes="256x256" href="<?= Minz_Url::display('/themes/icons/favicon-256.png') ?>" />
		<link rel="apple-touch-icon" href="<?= Minz_Url::display('/themes/icons/apple-touch-icon.png') ?>" />
		<meta name="apple-mobile-web-app-capable" content="yes" />
		<meta name="apple-mobile-web-app-status-bar-style" content="black" />
		<meta name="apple-mobile-web-app-title" content="<?= FreshRSS_Context::systemConf()->title ?>">
		<meta name="msapplication-TileColor" content="#FFF" />
		<meta name="theme-color" content="#FFF" />
<?php if (!FreshRSS_Context::systemConf()->allow_referrer) { ?>
		<meta name="referrer" content="never" />
<?php } ?>
		<?= FreshRSS_View::headTitle() ?>
<?php
	$url_base = Minz_Request::currentRequest();
	if ($this->rss_title != '') {
		$url_rss = $url_base;
		$url_rss['a'] = 'rss';
		$url_rss['params']['user'] = Minz_User::name() ?? '';
		$url_rss['params']['token'] = FreshRSS_Context::userConf()->token;
		unset($url_rss['params']['rid']);
		if (FreshRSS_Context::userConf()->since_hours_posts_per_rss) {
			$url_rss['params']['hours'] = FreshRSS_Context::userConf()->since_hours_posts_per_rss;
		}
?>
		<link rel="alternate" type="application/rss+xml" title="<?= $this->rss_title ?>" href="<?= Minz_Url::display($url_rss) ?>" />
<?php } if (FreshRSS_Context::isAll() || FreshRSS_Context::isCategory() || FreshRSS_Context::isFeed()) {
		$opml_rss = $url_base;
		$opml_rss['a'] = 'opml';
		$opml_rss['params']['user'] = Minz_User::name() ?? '';
		$opml_rss['params']['token'] = FreshRSS_Context::userConf()->token;
		unset($opml_rss['params']['rid']);
?>
		<link rel="outline" type="text/x-opml" title="OPML" href="<?= Minz_Url::display($opml_rss) ?>" />
<?php } if (FreshRSS_Context::systemConf()->allow_robots) { ?>
		<meta name="description" content="<?= htmlspecialchars(FreshRSS_Context::$name . ' | ' . FreshRSS_Context::$description, ENT_COMPAT, 'UTF-8') ?>" />
<?php } else { ?>
		<meta name="robots" content="noindex,nofollow" />
<?php } ?>
	</head>
	<body class="<?= Minz_Request::actionName() ?>">
<?php
	if (!Minz_Request::paramBoolean('ajax')) {
		flush();
		$this->partial('header');
	}
?>

<div id="global">
	<?php
		flush();
		if (isset($this->callbackBeforeFeeds)) {
			call_user_func($this->callbackBeforeFeeds, $this);
		}
		$this->render();
	?>
</div>

<?php
	$msg = '';
	$status = 'closed';
	$notif = Minz_Request::getNotification();
	if (!empty($notif)) {
		$msg = $notif['content'];
		$status = $notif['type'];
		invalidateHttpCache();
	}
?>
<div id="notification" class="notification <?= $status ?>">
	<span class="msg"><?= $msg ?></span>
	<a class="close" href=""><?= _i('close') ?></a>
</div>
	</body>
</html>
nav_entries.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/nav_entries.phtml'
View Content
<?php
	declare(strict_types=1);
?>
<nav id="nav_entries">
	<button class="previous_entry" title="<?= _t('gen.action.nav_buttons.prev') ?>"><?= _i('prev') ?></button>
	<button class="up" title="<?= _t('gen.action.nav_buttons.up') ?>"><?= _i('up') ?></button>
	<button class="next_entry" title="<?= _t('gen.action.nav_buttons.next') ?>"><?= _i('next') ?></button>
</nav>
nav_menu.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/nav_menu.phtml'
View Content
<?php
	declare(strict_types=1);
	$actual_view = Minz_Request::actionName();
?>
<nav class="nav_menu">
	<?php if ($actual_view === 'normal' || $actual_view === 'reader') { ?>
		<div class="group">
			<a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a>
		</div>
	<?php } ?>

	<?php if (FreshRSS_Auth::hasAccess()) { ?>
	<div id="nav_menu_actions" class="group">
		<?php
			$states = array(
				'read' => FreshRSS_Entry::STATE_READ,
				'unread' => FreshRSS_Entry::STATE_NOT_READ,
				'starred' => FreshRSS_Entry::STATE_FAVORITE,
				'non-starred' => FreshRSS_Entry::STATE_NOT_FAVORITE,
			);

			foreach ($states as $state_str => $state) {
				$state_enabled = FreshRSS_Context::isStateEnabled($state);
				$url_state = Minz_Request::currentRequest();
				$url_state['params']['state'] = FreshRSS_Context::getRevertState($state);
		?>
		<a id="toggle-<?= $state_str ?>"
			class="btn <?= $state_enabled ? 'active' : '' ?>"
			role="checkbox" aria-checked="<?= $state_enabled ? 'true' : 'false' ?>"
			title="<?= _t('index.menu.' . $state_str) ?>"
			href="<?= Minz_Url::display($url_state) ?>"><?= _i($state_str) ?></a>
		<?php } ?>

		<div class="dropdown only-mobile" id="dropdown-search-wrapper">
			<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
			<div id="dropdown-search" class="dropdown-target"></div>

			<a id="toggle-search" class="dropdown-toggle btn<?= (strlen(FreshRSS_Context::$search->getRawInput()) > 0) ? ' active' : ''; ?>" title="<?= _t('gen.menu.search') ?>"
				href="#dropdown-search"><?= _i('search') ?></a>
			<ul class="dropdown-menu">
				<li class="item">
					<span>
						<form action="<?= _url('index', 'index') ?>" method="get">
							<?php if (in_array(Minz_Request::actionName(), ['normal', 'global', 'reader'], true)) { ?>
							<input type="hidden" name="a" value="<?= Minz_Request::actionName() ?>" />
							<?php } if (Minz_Request::paramString('get') !== '') { ?>
							<input type="hidden" name="get" value="<?= FreshRSS_Context::currentGet() ?>" />
							<?php } if (ctype_upper(Minz_Request::paramString('order'))) { ?>
							<input type="hidden" name="order" value="<?= FreshRSS_Context::$order ?>" />
							<?php } if (Minz_Request::paramInt('state') !== 0) { ?>
							<input type="hidden" name="state" value="<?= FreshRSS_Context::$state ?>" />
							<?php } ?>
							<div class="stick search">
								<input type="search" name="search"
									value="<?= htmlspecialchars(htmlspecialchars_decode(FreshRSS_Context::$search->getRawInput(), ENT_QUOTES), ENT_COMPAT, 'UTF-8'); ?>"
									placeholder="<?= _t('gen.menu.search') ?>" title="<?= _t('gen.menu.search') ?>" /><button class="btn" type="submit" title="<?= _t('index.menu.search_short') ?>"><?= _i('search') ?></button>
							</div>
							<p class="help"><?= _i('help') ?> <?= _t('gen.menu.search_help') ?></a></p>
						</form>
					</span>
				</li>
			</ul>
			<a class="dropdown-close" href="#close">❌</a>
		</div>

		<div class="dropdown">
			<div id="dropdown-query" class="dropdown-target"></div>

			<a id="toggle-userqueries" class="dropdown-toggle btn" href="#dropdown-query" title="<?= _t('index.menu.queries') ?>"><?= _i('bookmark-tag') ?></a>
			<ul class="dropdown-menu">
				<li class="dropdown-header">
					<?= _t('index.menu.queries') ?>
					<a href="<?= _url('configure', 'queries') ?>"><?= _i('configure') ?></a>
				</li>

				<?php foreach (FreshRSS_Context::userConf()->queries as $raw_query): ?>
					<li class="item query">
						<?php if (!empty($raw_query['url'])): ?>
							<a href="<?= $raw_query['url'] ?>"><?= $raw_query['name'] ?? $raw_query['url'] ?></a>
						<?php else: ?>
						<?php $query = new FreshRSS_UserQuery($raw_query, FreshRSS_Context::categories(), FreshRSS_Context::labels()); ?>
							<a href="<?= $query->getUrl() ?>"><?= $query->getName() ?></a>
						<?php endif; ?>
					</li>
				<?php endforeach; ?>

				<?php
					$classSeparator = '';
					if (count(FreshRSS_Context::userConf()->queries) > 0) {
						$classSeparator = ' separator';
					}

					$url_query = Minz_Request::currentRequest();
					$url_query['c'] = 'configure';
					$url_query['a'] = 'bookmarkQuery';
				?>
				<li class="item<?= $classSeparator ?>"><a href="<?= Minz_Url::display($url_query) ?>"><?= _i('bookmark-add') ?> <?= _t('index.menu.bookmark_query') ?></a></li>
			</ul>
			<a class="dropdown-close" href="#close">❌</a>
		</div>
	</div>

	<?php
		$get = FreshRSS_Context::currentGet();
		$string_mark = _t('index.menu.mark_all_read');
		$string_unmark = _t('index.menu.mark_selection_unread');
		if ($get[0] === 'f') {
			$string_mark = _t('index.menu.mark_feed_read');
		} elseif ($get[0] === 'c') {
			$string_mark = _t('index.menu.mark_cat_read');
		}

		$mark_read_url = array(
			'c' => 'entry',
			'a' => 'read',
			'params' => array(
				'get' => $get,
				'nextGet' => FreshRSS_Context::$next_get,
				'idMax' => FreshRSS_Context::$id_max,
				'search' => htmlspecialchars_decode(FreshRSS_Context::$search->getRawInput(), ENT_QUOTES),
				'state' => FreshRSS_Context::$state,
			),
		);

		$mark_unread_url = $mark_read_url;
		$mark_unread_url['params']['is_read'] = '0';
		$mark_unread_url['params']['nextGet'] = $get;
	?>

	<div class="group stick" id="nav_menu_read_all">
		<form id="mark-read-menu" method="post">
		<?php $confirm = FreshRSS_Context::userConf()->reading_confirm ? 'confirm" disabled="disabled' : ''; ?>
		<button class="read_all btn <?= $confirm ?>"
			form="mark-read-menu"
			formaction="<?= Minz_Url::display($mark_read_url) ?>"
			type="submit"><?= _t('gen.action.mark_read') ?></button>

		<div class="dropdown">
			<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
			<div id="dropdown-read" class="dropdown-target"></div>

			<a class="dropdown-toggle btn" href="#dropdown-read"><?= _i('down') ?></a>
			<ul class="dropdown-menu">
				<li class="item">
					<button class="as-link <?= $confirm ?>"
						form="mark-read-menu"
						formaction="<?= Minz_Url::display($mark_read_url) ?>"
						type="submit"><?= $string_mark ?></button>
				</li>
<?php
	$today = @strtotime('today');
	$mark_before_today = $mark_read_url;
	$mark_before_today['params']['idMax'] = $today . '000000';
	$mark_before_one_week = $mark_read_url;
	$mark_before_one_week['params']['idMax'] = ($today - 604800) . '000000';
	$mark_unread_enabled = FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_READ) or !FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ);
?>
				<li class="item separator">
					<button class="as-link <?= $confirm ?>"
						form="mark-read-menu"
						formaction="<?= Minz_Url::display($mark_before_today) ?>"
						type="submit"><?= _t('index.menu.before_one_day') ?></button>
				</li>
				<li class="item">
					<button class="as-link <?= $confirm ?>"
						form="mark-read-menu"
						formaction="<?= Minz_Url::display($mark_before_one_week) ?>"
						type="submit"><?= _t('index.menu.before_one_week') ?></button>
				</li>
				<li class="item separator">
					<button class="as-link <?= $mark_unread_enabled ? $confirm : '" disabled="disabled' ?>"
						form="mark-read-menu"
						formaction="<?= Minz_Url::display($mark_unread_url) ?>"
						type="submit"><?= $string_unmark ?></button>
				</li>
			</ul>
			<a class="dropdown-close" href="#close">❌</a>
		</div>
		</form>
	</div>
	<?php } ?>

	<?php $url_output = Minz_Request::currentRequest(); ?>
	<div class="group" id="nav_menu_views">
		<?php
		$readingModes = FreshRSS_ReadingMode::getReadingModes();
		$readingModes = Minz_ExtensionManager::callHook('nav_reading_modes', $readingModes);
		if (!is_iterable($readingModes)) {
			$readingModes = FreshRSS_ReadingMode::getReadingModes();
		}

		/** @var FreshRSS_ReadingMode $mode */
		foreach ($readingModes as $mode) {
			?>
			<a class="<?= $mode->getId() ?> btn <?php if ($mode->isActive()) { echo 'active'; } ?>" title="<?=
				$mode->getTitle() ?>" href="<?= Minz_Url::display($mode->getUrlParams()) ?>">
				<?= $mode->getName() ?>
			</a>
			<?php
		}
		?>
	</div>

	<?php $nav_menu_hooks = Minz_ExtensionManager::callHookString('nav_menu'); ?>
	<?php if ($nav_menu_hooks != '') { ?>
	<div class="group" id="nav_menu_hooks">
		<?= $nav_menu_hooks ?>
	</div>
	<?php } ?>

	<?php
		if (FreshRSS_Context::$order === 'DESC') {
			$order = 'ASC';
			$icon = 'sort-up';
			$title = _t('index.menu.older_first');
		} else {
			$order = 'DESC';
			$icon = 'sort-down';
			$title = _t('index.menu.newer_first');
		}
		$url_order = Minz_Request::currentRequest();
		$url_order['params']['order'] = $order;
	?>
	<div class="group">
		<a id="toggle-order" class="btn" href="<?= Minz_Url::display($url_order) ?>" title="<?= $title ?>">
			<?= _i($icon) ?>
		</a>
	</div>

	<?php if (FreshRSS_Auth::hasAccess() || FreshRSS_Context::systemConf()->allow_anonymous_refresh) { ?>
		<div class="group">
			<a id="actualize" class="btn" href="<?= _url('feed', 'actualize') ?>" title="<?= _t('gen.action.actualize') ?>"><?= _i('refresh') ?></a>
		</div>
	<?php } ?>
</nav>
<?php flush(); ?>
simple.phtml
wget 'https://lists2.roe3.org/FreshRSS/app/layout/simple.phtml'
View Content
<?php
	declare(strict_types=1);
	/** @var FreshRSS_View $this */
	FreshRSS::preLayout();
	$class = '';
	$dir = '';
	if (_t('gen.dir') === 'rtl') {
		$dir = ' dir="rtl"';
		$class = 'rtl ';
	}
	if (FreshRSS_Context::userConf()->darkMode !== 'no') {
		$class .= 'darkMode_' . FreshRSS_Context::userConf()->darkMode;
	}
?>
<!DOCTYPE html>
<html lang="<?= FreshRSS_Context::userConf()->language ?>"<?= $dir ?> xml:lang="<?= FreshRSS_Context::userConf()->language ?>" class="<?= $class ?>">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
		<?= FreshRSS_View::metaThemeColor() ?>
		<?= FreshRSS_View::headStyle() ?>
		<script id="jsonVars" type="application/json">
<?php $this->renderHelper('javascript_vars'); ?>
		</script>
		<?= FreshRSS_View::headScript() ?>
		<link rel="manifest" href="<?= Minz_Url::display('/themes/manifest.json') ?>" />
		<link rel="shortcut icon" id="favicon" type="image/x-icon" sizes="16x16 64x64" href="<?= Minz_Url::display('/favicon.ico') ?>" />
		<link rel="icon msapplication-TileImage apple-touch-icon" type="image/png" sizes="256x256" href="<?= Minz_Url::display('/themes/icons/favicon-256.png') ?>" />
		<link rel="apple-touch-icon" href="<?= Minz_Url::display('/themes/icons/apple-touch-icon.png') ?>" />
		<meta name="apple-mobile-web-app-capable" content="yes" />
		<meta name="apple-mobile-web-app-status-bar-style" content="black" />
		<meta name="apple-mobile-web-app-title" content="<?= FreshRSS_Context::systemConf()->title ?>">
		<meta name="msapplication-TileColor" content="#FFF" />
		<meta name="theme-color" content="#FFF" />
<?php if (!FreshRSS_Context::systemConf()->allow_referrer) { ?>
		<meta name="referrer" content="never" />
<?php } ?>
		<?= FreshRSS_View::headTitle() ?>
		<?php if ($this->rss_url != ''): ?>
		<link rel="alternate" type="application/rss+xml" title="<?= $this->rss_title ?>" href="<?= $this->rss_url ?>" />
		<?php endif; ?>
		<meta name="robots" content="noindex,nofollow" />
	</head>
	<body>

<?php flush(); ?>
<div class="app-layout app-layout-simple">
	<div class="header">
		<div class="item title">
			<a href="<?= Minz_Url::display(['c' => 'index', 'a' => 'index'], 'html', 'root') ?>">
				<?php if (FreshRSS_Context::systemConf()->logo_html == '') { ?>
					<img class="logo" src="<?= _i('FreshRSS-logo', FreshRSS_Themes::ICON_URL) ?>" alt="FreshRSS" loading="lazy" />
				<?php
					} else {
						echo FreshRSS_Context::systemConf()->logo_html;
					}
				?>
			</a>
		</div>

		<div class="item"></div>

		<?php if (FreshRSS_Auth::accessNeedsAction()): ?>
			<div class="item configure">
			<?php if (FreshRSS_Auth::hasAccess()): ?>
				<a class="signout" href="<?= Minz_Url::display(['c' => 'auth', 'a' => 'logout'], 'html', 'root') ?>">
					<?= _i('logout') ?><?= _t('gen.auth.logout') ?>
					(<?= htmlspecialchars(Minz_User::name() ?? '', ENT_NOQUOTES, 'UTF-8') ?>)
				</a>
			<?php else: ?>
				<a class="signin" href="<?= Minz_Url::display(['c' => 'auth', 'a' => 'login'], 'html', 'root') ?>">
					<?= _i('login') ?><?= _t('gen.auth.login') ?>
				</a>
			<?php endif; ?>
			</div>
		<?php endif; ?>
	</div>

	<?php $this->render(); ?>
</div>

<?php
	$msg = '';
	$status = 'closed';
	$notif = Minz_Request::getNotification();
	if (!empty($notif)) {
		$msg = $notif['content'];
		$status = $notif['type'];
		invalidateHttpCache();
	}
?>
<div id="notification" class="notification <?= $status ?>">
	<span class="msg"><?= $msg ?></span>
	<a class="close" href=""><?= _i('close') ?></a>
</div>

	</body>
</html>