2021-08-22 21:45:26 -04:00
|
|
|
<?php
|
|
|
|
/* prevent inclusion of arbitrary files */
|
2023-05-13 20:05:10 -04:00
|
|
|
|
|
|
|
use PonePaste\Models\Report;
|
2023-05-13 21:19:35 -04:00
|
|
|
use PonePaste\Models\User;
|
2023-05-13 20:05:10 -04:00
|
|
|
|
2021-08-22 21:45:26 -04:00
|
|
|
$template_candidates = scandir(__DIR__);
|
|
|
|
if (!in_array($page_template . '.php', $template_candidates)) {
|
|
|
|
die('Failed to find template');
|
|
|
|
}
|
|
|
|
|
2021-08-27 06:46:27 -04:00
|
|
|
$flashes = getFlashes();
|
2021-08-22 21:45:26 -04:00
|
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
2021-08-26 05:35:21 -04:00
|
|
|
<html lang="en">
|
2021-08-22 21:45:26 -04:00
|
|
|
<head>
|
2021-08-25 02:08:30 -04:00
|
|
|
<meta charset="UTF-8" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
2021-08-22 21:45:26 -04:00
|
|
|
|
|
|
|
<title>
|
|
|
|
<?php
|
|
|
|
$title = $global_site_info['title'];
|
|
|
|
|
2021-08-26 05:35:21 -04:00
|
|
|
if (isset($page_title)) {
|
|
|
|
$title = $page_title . ' - ' . $title;
|
2021-08-22 21:45:26 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
echo pp_html_escape($title);
|
|
|
|
?>
|
|
|
|
</title>
|
|
|
|
<meta name="description" content="<?= pp_html_escape($global_site_info['description']) ?>"/>
|
|
|
|
<meta name="keywords" content="<?= pp_html_escape($global_site_info['keywords']) ?>"/>
|
2022-04-23 18:27:04 -04:00
|
|
|
<link rel="shortcut icon" href="/theme/bulma/img/favicon.ico">
|
|
|
|
<link href="/theme/bulma/css/paste.css" rel="stylesheet"/>
|
|
|
|
<link href="/theme/bulma/css/table-responsive.css" rel="stylesheet"/>
|
|
|
|
<link href="/theme/bulma/css/table-row-orders.css" rel="stylesheet"/>
|
2021-08-22 21:45:26 -04:00
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<nav id="navbar" class="bd-navbar navbar is-spaced">
|
|
|
|
<div class="container">
|
|
|
|
<div class="navbar-brand">
|
|
|
|
<a style="font-size: 24px;"
|
2022-04-23 18:27:04 -04:00
|
|
|
href="/"
|
2021-08-23 02:58:45 -04:00
|
|
|
class="navbar-item mx-1"><?= pp_html_escape($site_name); ?></a>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="theme-switch-wrapper">
|
|
|
|
<label class="theme-switch" for="checkbox">
|
2021-08-22 22:05:26 -04:00
|
|
|
<input type="checkbox" id="checkbox"/>
|
2021-08-23 02:58:45 -04:00
|
|
|
<span class="slider round"></span>
|
2021-08-22 21:45:26 -04:00
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
<div id="navbarBurger" class="navbar-burger burger" data-target="navMenuDocumentation">
|
|
|
|
<span></span><span></span><span></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div id="navMenuDocumentation" class="navbar-menu">
|
|
|
|
<div class="navbar-end">
|
|
|
|
<div class="navbar-item">
|
2021-08-26 05:58:37 -04:00
|
|
|
<?php if ($current_user !== null): ?>
|
|
|
|
<?php if (!$site_is_private): ?>
|
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage() ?>">
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-clipboard" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>New Paste</span>
|
|
|
|
</a>
|
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage('archive') ?>">
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-book" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>Archive</span>
|
|
|
|
</a>
|
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage('discover') ?>">
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-compass" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>Discover</span>
|
|
|
|
</a>
|
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage('event') ?>">
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-calendar" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>Events</span>
|
|
|
|
</a>
|
2023-05-13 21:19:35 -04:00
|
|
|
<?php if ($current_user !== null && $current_user->role >= User::ROLE_MODERATOR): ?>
|
2023-05-13 20:05:10 -04:00
|
|
|
<?php $has_reports = Report::where(['open' => true])->count() > 0; ?>
|
|
|
|
<a class="button navbar-item mx-2" href="/admin" <?= $has_reports ? 'style="color: red;"' : '' ?>>
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa <?= $has_reports ? 'fa-exclamation' : 'fa-toolbox' ?>" aria-hidden="true" <?= $has_reports ? 'style="color: red;"' : '' ?>></i>
|
|
|
|
</span>
|
|
|
|
<span>Admin</span>
|
|
|
|
</a>
|
|
|
|
<?php endif; ?>
|
2021-08-26 05:58:37 -04:00
|
|
|
<?php endif; /* !$site_is_private */ ?>
|
|
|
|
|
|
|
|
<div class="navbar-item has-dropdown is-hoverable">
|
|
|
|
<a class="navbar-link" role="presentation"><?= pp_html_escape($current_user->username) ?></a>
|
|
|
|
<div class="navbar-dropdown">
|
2021-08-29 01:26:29 -04:00
|
|
|
<a class="navbar-item" href="<?= urlForMember($current_user) ?>">Pastes</a>
|
2021-08-26 05:58:37 -04:00
|
|
|
<a class="navbar-item" href="<?= urlForPage('profile') ?>">Settings</a>
|
|
|
|
<hr class="navbar-divider"/>
|
|
|
|
<form action="<?= urlForPage('logout') ?>" method="POST">
|
|
|
|
<input class="button navbar-link" type="submit" value="Logout"
|
|
|
|
style="border:none;padding: 0.375rem 1rem;" />
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<?php else: /* $current_user !== null */ ?>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="buttons">
|
2021-08-26 05:58:37 -04:00
|
|
|
<?php if (!$site_is_private): ?>
|
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage('archive') ?>">
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-book" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>Archive</span>
|
|
|
|
</a>
|
2022-04-18 14:09:02 -04:00
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage('discover') ?>">
|
2021-08-26 05:58:37 -04:00
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-compass" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>Discover</span>
|
|
|
|
</a>
|
|
|
|
<a class="button navbar-item mx-2" href="<?= urlForPage('event') ?>">
|
|
|
|
<span class="icon has-text-info">
|
|
|
|
<i class="fa fa-calendar" aria-hidden="true"></i>
|
|
|
|
</span>
|
|
|
|
<span>Events</span>
|
|
|
|
</a>
|
|
|
|
<?php endif; ?>
|
2022-08-25 01:51:54 -04:00
|
|
|
<a class="button is-info modal-button" data-target="#signin" href="/login?login">Sign In / Up</a>
|
2021-08-22 21:45:26 -04:00
|
|
|
</div>
|
2021-08-26 05:58:37 -04:00
|
|
|
<?php endif; ?>
|
2021-08-22 21:45:26 -04:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
|
2022-03-14 15:43:01 -04:00
|
|
|
<?php if ($current_user): ?>
|
|
|
|
<div class="hidden" id="js-data-holder" data-user-id="<?= $current_user->id ?>" data-csrf-token="<?= $csrf_token ?>"></div>
|
|
|
|
<?php endif; ?>
|
|
|
|
|
2021-08-22 21:45:26 -04:00
|
|
|
<div id="#signin" class="modal modal-fx-fadeInScale">
|
|
|
|
<div class="modal-background"></div>
|
|
|
|
<div class="modal-content modal-card is-tiny">
|
|
|
|
<header class="modal-card-head">
|
|
|
|
<nav class="tabs" style="margin-bottom: -1.25rem;flex-grow:1;">
|
|
|
|
<div class="container">
|
|
|
|
<ul>
|
|
|
|
<li class="tab is-active" onclick="openTab(event,'logid')"><a>Login</a></li>
|
|
|
|
<li class="tab" onclick="openTab(event,'regid')"><a>Register</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
<button class="modal-button-close delete" aria-label="close"></button>
|
|
|
|
</header>
|
|
|
|
<div id="logid" class="content-tab">
|
|
|
|
<section class="modal-card-body">
|
2022-04-18 13:54:01 -04:00
|
|
|
<form method="POST" action="/login">
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="field">
|
2021-08-26 05:35:21 -04:00
|
|
|
<label class="label">Username</label>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="control has-icons-left has-icons-right">
|
|
|
|
<input type="text" class="input" name="username" autocomplete="on"
|
2021-08-26 05:35:21 -04:00
|
|
|
placeholder="Username">
|
2021-08-22 21:45:26 -04:00
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-user"></i>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="field">
|
2021-08-26 05:35:21 -04:00
|
|
|
<label class="label">Password</label>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="control has-icons-left has-icons-right">
|
|
|
|
<input type="password" class="input" name="password" autocomplete="on"
|
2021-08-26 05:35:21 -04:00
|
|
|
placeholder="Password">
|
2021-08-22 21:45:26 -04:00
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-key"></i>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
2021-08-25 02:08:30 -04:00
|
|
|
<input class="button is-link is-fullwidth my-4" type="submit" name="signin" value="Login"/>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="checkbox checkbox-primary">
|
|
|
|
<input id="rememberme" name="remember_me" type="checkbox" checked="">
|
|
|
|
<label for="rememberme">
|
2021-08-26 05:35:21 -04:00
|
|
|
Remember Me
|
2021-08-22 21:45:26 -04:00
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</section>
|
|
|
|
<footer class="modal-card-foot">
|
2022-04-23 18:22:16 -04:00
|
|
|
<a href="/forgot">Forgot Password?</a>
|
2021-08-22 21:45:26 -04:00
|
|
|
</footer>
|
|
|
|
</div>
|
|
|
|
<div id="regid" class="content-tab" style="display:none">
|
|
|
|
<section class="modal-card-body">
|
2022-04-18 13:54:01 -04:00
|
|
|
<form method="POST" action="/register">
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="field">
|
2021-08-26 05:35:21 -04:00
|
|
|
<label class="label">Username</label>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="control has-icons-left has-icons-right">
|
|
|
|
<input type="text" class="input" name="username"
|
2021-08-26 05:35:21 -04:00
|
|
|
placeholder="Username">
|
2021-08-22 21:45:26 -04:00
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-user"></i>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="field">
|
2021-08-26 05:35:21 -04:00
|
|
|
<label class="label">Password</label>
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="control has-icons-left has-icons-right">
|
|
|
|
<input type="password" class="input" name="password"
|
2021-08-26 05:35:21 -04:00
|
|
|
placeholder="Password">
|
2021-08-22 21:45:26 -04:00
|
|
|
<span class="icon is-small is-left">
|
|
|
|
<i class="fas fa-key"></i>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="field">
|
|
|
|
<div class="checkbox checkbox-primary">
|
|
|
|
<input required id="agecheck" name="agecheck" type="checkbox">
|
|
|
|
<label for="agecheck">
|
|
|
|
I'm over 18.
|
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
<div class="field">
|
2022-08-25 01:51:54 -04:00
|
|
|
<div class="captcha_container">
|
2023-02-24 06:26:40 -05:00
|
|
|
<img src="/captcha?t=<?= $captcha_token = setupCaptcha() ?>" alt="CAPTCHA Image" />
|
2022-08-25 01:51:54 -04:00
|
|
|
<span id="captcha_refresh" style="height: 100%;">
|
|
|
|
<a href="javascript:void(0)">
|
|
|
|
<i class="fa fa-refresh" style="height: 100%;"></i>
|
|
|
|
</a>
|
|
|
|
</span>
|
2023-02-24 06:26:40 -05:00
|
|
|
<input type="hidden" name="captcha_token" value="<?= $captcha_token ?>" />
|
|
|
|
<input type="text" class="input" name="captcha_answer" placeholder="Enter the CAPTCHA" />
|
2022-08-25 01:51:54 -04:00
|
|
|
<p class="is-size-6 has-text-grey-light has-text-left mt-2">and press "Enter"</p>
|
2021-08-22 21:45:26 -04:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2021-08-23 02:58:45 -04:00
|
|
|
<input class="button is-link is-fullwidth my-4" type="submit" name="signup" />
|
2021-08-22 21:45:26 -04:00
|
|
|
<div class="field">
|
|
|
|
<p style="float:left;">By signing up you agree to our <a href="page/privacy">Privacy policy </a>
|
2022-04-23 18:27:04 -04:00
|
|
|
and <a href="page/rules">Site rules</a>. This site may contain material not suitable for
|
|
|
|
those aged under 18.</p>
|
2021-08-22 21:45:26 -04:00
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2021-08-23 02:58:45 -04:00
|
|
|
<!-- Main page content begin -->
|
2021-08-22 21:54:46 -04:00
|
|
|
<?php require_once(__DIR__ . '/' . $page_template . '.php'); ?>
|
2021-08-23 02:58:45 -04:00
|
|
|
<!-- Main page content end -->
|
2021-08-22 21:45:26 -04:00
|
|
|
|
|
|
|
<footer class="footer has-background-white" style="border-top: 1px solid #ebeaeb">
|
|
|
|
<div class="container">
|
|
|
|
<div class="columns">
|
|
|
|
<div class="column">
|
|
|
|
<hr>
|
|
|
|
<div class="columns is-mobile is-centered">
|
|
|
|
<h5 class="title is-5">Support PonePaste</h5>
|
|
|
|
</div>
|
2021-08-26 05:58:37 -04:00
|
|
|
<a href='https://liberapay.com/Ponepaste/donate' target='_blank'><img src='../img/lib.png' alt="LiberaPay logo" /></a>
|
|
|
|
<a href='https://ko-fi.com/V7V02K3I2' target='_blank'><img src='../img/kofi.png' alt="Ko-Fi logo" /></a>
|
2021-08-22 21:45:26 -04:00
|
|
|
</div>
|
|
|
|
<div class="column">
|
|
|
|
<hr>
|
|
|
|
<div class="columns is-mobile is-centered">
|
|
|
|
<h5 class="title is-5">Links</h5>
|
|
|
|
</div>
|
|
|
|
<div class="columns">
|
|
|
|
<div class="column">
|
|
|
|
<ul>
|
2022-01-06 07:58:29 -05:00
|
|
|
<li><a href="/rules" target="_blank">Site Rules</a></li>
|
|
|
|
<li><a href="/privacy" target="_blank">Privacy Policy</a></li>
|
2021-08-22 21:45:26 -04:00
|
|
|
<li><a href="mailto:admin@ponepaste.org">Contact</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div class="column">
|
|
|
|
<ul>
|
|
|
|
<li><a href="/page/tags" target="_blank">Tag Guide</a></li>
|
|
|
|
<li><a href="/page/transparency " target="_blank">Transparency</a></li>
|
|
|
|
<li><a href="https://liberapay.com/Ponepaste" target="_blank">Donate </a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="column">
|
|
|
|
<hr>
|
|
|
|
<div class="columns is-mobile is-centered">
|
|
|
|
<h5 class="title is-5">Stats</h5>
|
|
|
|
</div>
|
|
|
|
<div class="columns">
|
|
|
|
<div class="column">
|
|
|
|
<ul>
|
2021-08-25 02:08:30 -04:00
|
|
|
<li>Page load: <?= round((microtime(true) - $start), 4) ?>s</li>
|
|
|
|
<li>Page Hits Today: <?= $total_page_views ?></li>
|
|
|
|
<li>Unique Visitors Today: <?= $total_unique_views ?></li>
|
|
|
|
<li>Total Pastes: <?= $total_pastes ?></li>
|
2021-08-22 21:45:26 -04:00
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</footer>
|
|
|
|
|
2022-04-23 18:27:04 -04:00
|
|
|
<script src="/theme/bulma/js/paste.js"></script>
|
2021-11-23 03:17:29 -05:00
|
|
|
<?php if (empty($script_bundles)): ?>
|
|
|
|
<?= javascriptIncludeTag('generic') ?>
|
|
|
|
<?php else: ?>
|
|
|
|
<?php foreach ($script_bundles as $bundle): ?>
|
|
|
|
<?= javascriptIncludeTag($bundle) ?>
|
|
|
|
<?php endforeach; ?>
|
|
|
|
<?php endif; ?>
|
2021-08-22 21:45:26 -04:00
|
|
|
<script>
|
|
|
|
// Tabs function for popup login
|
|
|
|
function openTab(evt, tabName) {
|
|
|
|
const x = document.getElementsByClassName("content-tab");
|
|
|
|
for (let i = 0; i < x.length; i++) {
|
|
|
|
x[i].style.display = "none";
|
|
|
|
}
|
|
|
|
|
|
|
|
const tablinks = document.getElementsByClassName("tab");
|
|
|
|
|
|
|
|
for (let i = 0; i < x.length; i++) {
|
|
|
|
tablinks[i].className = tablinks[i].className.replace(" is-active", "");
|
|
|
|
}
|
|
|
|
document.getElementById(tabName).style.display = "block";
|
|
|
|
evt.currentTarget.className += " is-active";
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<script nonce="D4rkm0d3">
|
|
|
|
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
|
2022-08-25 01:51:54 -04:00
|
|
|
const currentTheme = localStorage.getItem('theme') || "<?= @$_COOKIE['theme'] ?>";
|
2021-08-22 21:45:26 -04:00
|
|
|
|
|
|
|
if (currentTheme) {
|
|
|
|
document.documentElement.setAttribute('data-theme', currentTheme);
|
|
|
|
|
|
|
|
if (currentTheme === 'dark') {
|
|
|
|
toggleSwitch.checked = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function switchTheme(e) {
|
|
|
|
if (e.target.checked) {
|
|
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
|
|
localStorage.setItem('theme', 'dark');
|
|
|
|
} else {
|
|
|
|
document.documentElement.setAttribute('data-theme', 'light');
|
|
|
|
localStorage.setItem('theme', 'light');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
toggleSwitch.addEventListener('change', switchTheme, false);
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|