[terms] add terms and conditions gate
This commit is contained in:
parent
5cbbe5e1b3
commit
baf55a26fa
4 changed files with 94 additions and 0 deletions
|
@ -110,6 +110,7 @@ if(class_exists("\\PHPUnit\\Framework\\TestCase")) {
|
|||
$_SERVER['REQUEST_URI'] = make_link($page_name, http_build_query($get_args));
|
||||
$_GET = $get_args;
|
||||
$_POST = $post_args;
|
||||
$_COOKIE['shm_accepted_terms'] = "true";
|
||||
$page = new Page();
|
||||
send_event(new PageRequestEvent($method, $page_name, $get_args, $post_args));
|
||||
if ($page->mode == PageMode::REDIRECT) {
|
||||
|
|
16
ext/terms/info.php
Normal file
16
ext/terms/info.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Shimmie2;
|
||||
|
||||
class TermsInfo extends ExtensionInfo
|
||||
{
|
||||
public const KEY = "terms";
|
||||
|
||||
public string $key = self::KEY;
|
||||
public string $name = "Terms & Conditions Gate";
|
||||
public array $authors = ["discomrade" => ""];
|
||||
public string $license = "GPLv2";
|
||||
public string $description = "Show a page of terms which must be accepted before continuing";
|
||||
}
|
40
ext/terms/main.php
Normal file
40
ext/terms/main.php
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Shimmie2;
|
||||
|
||||
class Terms extends Extension
|
||||
{
|
||||
/** @var TermsTheme */
|
||||
protected Themelet $theme;
|
||||
|
||||
public function onInitExt(InitExtEvent $event): void
|
||||
{
|
||||
global $config;
|
||||
$config->set_default_string("terms_message", "Cookies may be used. Please read our [url=site://wiki/privacy]privacy policy[/url] for more information.\nBy accepting to enter you agree to our [url=site://wiki/rules]rules[/url] and [url=site://wiki/terms_of_service]terms of service[/url].");
|
||||
}
|
||||
|
||||
public function onSetupBuilding(SetupBuildingEvent $event): void
|
||||
{
|
||||
$sb = $event->panel->create_new_block("Terms & Conditions Gate");
|
||||
$sb->add_longtext_option("terms_message", 'Message (Use BBCode)');
|
||||
}
|
||||
|
||||
public function onPageRequest(PageRequestEvent $event): void
|
||||
{
|
||||
global $config, $page, $user;
|
||||
if ($event->page_starts_with("accept_terms")) {
|
||||
$page->add_cookie("accepted_terms", "true", time() + 60 * 60 * 24 * $config->get_int('login_memory'), "/");
|
||||
$page->set_mode(PageMode::REDIRECT);
|
||||
$page->set_redirect(make_link(explode('/', $event->path, 2)[1]));
|
||||
} else {
|
||||
// run on all pages unless logged in or cookie exists
|
||||
if ($user->is_anonymous() && !isset($_COOKIE[$config->get_string('cookie_prefix', 'shm') . '_' . 'accepted_terms'])) {
|
||||
$sitename = $config->get_string(SetupConfig::TITLE);
|
||||
$body = format_text($config->get_string("terms_message"));
|
||||
$this->theme->display_page($page, $sitename, $event->path, $body);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
37
ext/terms/theme.php
Normal file
37
ext/terms/theme.php
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Shimmie2;
|
||||
|
||||
class TermsTheme extends Themelet
|
||||
{
|
||||
public function display_page(Page $page, string $sitename, string $path, string $body): void
|
||||
{
|
||||
$page->set_mode(PageMode::DATA);
|
||||
$page->add_auto_html_headers();
|
||||
$hh = $page->get_all_html_headers();
|
||||
$page->set_data(
|
||||
<<<EOD
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>$sitename</title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
$hh
|
||||
</head>
|
||||
<body>
|
||||
<div id="front-page">
|
||||
<h1><span>$sitename</span></h1>
|
||||
$body
|
||||
<form action="/accept_terms/$path" method="POST">
|
||||
<button>Enter</button>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
EOD
|
||||
);
|
||||
}
|
||||
}
|
Reference in a new issue