✨ admin area newsletter content preview (#45)
This commit is contained in:
parent
0b7cc8f296
commit
9844610045
1
meta.php
1
meta.php
|
@ -45,5 +45,6 @@
|
|||
["path" => "admin", "target" => "page/admin/start"],
|
||||
["path" => "admin/login", "target" => "page/admin/login"],
|
||||
["path" => "admin/newsletter", "target" => "page/admin/newsletter/overview.php"],
|
||||
["path" => "admin/newsletter/:content", "target" => "page/admin/newsletter/content.php"],
|
||||
];
|
||||
?>
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
declare(strict_types = 1);
|
||||
namespace Kimendisch\Sbgg_Jetzt;
|
||||
use Flake\Lang;
|
||||
use Flake\Lang_Dict;
|
||||
use Flake\Page;
|
||||
use Flake\Project;
|
||||
use Flake\Excuse;
|
||||
|
||||
// HANDLE AUTHENTICATION //
|
||||
require("./page/admin/auth_handler.php");
|
||||
|
||||
|
||||
// LOAD CONTENT //
|
||||
// get content name from url param
|
||||
$content_name = Project::param("content");
|
||||
|
||||
// check whether this content exists
|
||||
if(!in_array($content_name, Newsletter::content_list())){
|
||||
Excuse::show("not_found");
|
||||
}
|
||||
|
||||
// load content data
|
||||
$content = Newsletter::content_file_read(name: $content_name);
|
||||
|
||||
|
||||
// MAYBE PROVIDE PREVIEW HTML //
|
||||
if(isset($_GET["preview"])){
|
||||
// validate language
|
||||
$language = $_GET["preview"];
|
||||
if(!in_array($language, ["de", "en"])){
|
||||
http_response_code(400);
|
||||
echo("invalid preview language requested");
|
||||
die();
|
||||
}
|
||||
|
||||
// render preview
|
||||
$preview = Newsletter::content_render_preview(content: $content, language: $language);
|
||||
|
||||
// output preview
|
||||
echo($preview);
|
||||
die();
|
||||
}
|
||||
|
||||
|
||||
// LANGUAGE MANAGER //
|
||||
// hack: fake get param from constant
|
||||
$_GET["lang"] = "en";
|
||||
|
||||
// initialize
|
||||
$lang = new Lang(list: ["de", "en"], default: "en");
|
||||
|
||||
// load dict
|
||||
$dict = new Lang_Dict($lang);
|
||||
require("./page/strings.php");
|
||||
|
||||
|
||||
// PAGE INIT //
|
||||
Page::start();
|
||||
|
||||
Page::title("SBGG.jetzt - Admin Area");
|
||||
Page::icon("./asset/logo-256.png");
|
||||
|
||||
Page::lang($lang->get());
|
||||
Page::viewport(scale: 1, zoom: true);
|
||||
|
||||
Page::robots(index: false, follow: false);
|
||||
Page::author("Kim Endisch");
|
||||
|
||||
Page::$head["analytics"] = '<script defer data-domain="sbgg.jetzt" src="https://analytics.tjdev.de/js/script.js"></script>';
|
||||
Page::css("./page/start/style.css");
|
||||
Page::js(__DIR__ . "/iframe-magic.js");
|
||||
|
||||
Page::font("ubuntu");
|
||||
Page::font("tabler");
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="page-container full-page">
|
||||
<div class="page">
|
||||
<div class="section">
|
||||
<div class="content">
|
||||
<div class="button-list align-left">
|
||||
<a href="/admin/newsletter" class="button on-bg">
|
||||
<span class="icon ti ti-arrow-left"></span>
|
||||
<span class="text">Go Back</span>
|
||||
</a>
|
||||
<a href="/admin" class="button on-bg">
|
||||
<span class="icon ti ti-home"></span>
|
||||
<span class="text">Go Home</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="header">
|
||||
<span class="icon ti ti-news"></span>
|
||||
<span class="text">Preview</span>
|
||||
</div>
|
||||
<div class="content full-page rows">
|
||||
<div class="box">
|
||||
<span class="extra"><i class="ti ti-world"></i> Language: <span class="white">DE</span></span>
|
||||
<div class="preview-container">
|
||||
<iframe src="?preview=de" width="576" scrolling="no" onload="iframe_resize(this)"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box">
|
||||
<span class="extra"><i class="ti ti-world"></i> Language: <span class="white">EN</span></span>
|
||||
<div class="preview-container">
|
||||
<iframe src="?preview=en" width="576" scrolling="no" onload="iframe_resize(this)"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php require(dirname(__DIR__) . "/footer.php"); ?>
|
|
@ -0,0 +1,5 @@
|
|||
"use strict";
|
||||
|
||||
function iframe_resize(self){
|
||||
self.style.height = self.contentWindow.document.documentElement.scrollHeight + "px";
|
||||
}
|
|
@ -122,6 +122,9 @@ span.inline {
|
|||
.gray {
|
||||
color: var(--color-gray);
|
||||
}
|
||||
.white {
|
||||
color: var(--color-white);
|
||||
}
|
||||
|
||||
.hidden {
|
||||
visibility: hidden !important;
|
||||
|
@ -143,6 +146,9 @@ span.inline {
|
|||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.page-container.full-page {
|
||||
width: 100%;
|
||||
}
|
||||
.page {
|
||||
max-width: 50vw;
|
||||
|
||||
|
@ -154,6 +160,9 @@ span.inline {
|
|||
|
||||
text-align: center;
|
||||
}
|
||||
.page-container.full-page .page {
|
||||
width: 100%;
|
||||
}
|
||||
@media only screen and (max-width: 1600px) {
|
||||
.page {
|
||||
max-width: 70vw;
|
||||
|
@ -247,6 +256,14 @@ span.inline {
|
|||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
}
|
||||
.section > .content.full-page {
|
||||
width: 100vw;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
right: 50%;
|
||||
margin-left: -50vw;
|
||||
margin-right: -50vw;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -418,7 +418,7 @@
|
|||
*
|
||||
* @return array Content data.
|
||||
*/
|
||||
private static function content_file_read(string $name): array {
|
||||
public static function content_file_read(string $name): array {
|
||||
// GET AVAILABLE CONTENT FILES //
|
||||
$content_file_list = self::content_file_list();
|
||||
|
||||
|
@ -521,6 +521,36 @@
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* HELPER: Render content definition to html body as preview.
|
||||
*
|
||||
* @param array $content Content data.
|
||||
* @param string $language Preview language.
|
||||
*
|
||||
* @return string Html body.
|
||||
*/
|
||||
public static function content_render_preview(array $content, string $language): string {
|
||||
// PREPARE A FAKE DATASET //
|
||||
// defaults
|
||||
$dataset = [
|
||||
"language" => $language,
|
||||
"unsubscribe_key" => Id64::new(length: 16),
|
||||
"mail_address" => "mail@example.com",
|
||||
"mail_address_urlencoded" => urlencode("mail@example.com"),
|
||||
];
|
||||
|
||||
// content: `verify`
|
||||
if($content["name"]["de"] === "0000-00-00-verify"){
|
||||
unset($dataset["unsubscribe_key"]);
|
||||
$dataset["verify_key"] = Id64::new(length: 16);
|
||||
}
|
||||
|
||||
|
||||
// RENDER //
|
||||
return self::content_render(content: $content, dataset: $dataset);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* HELPER: Read template file.
|
||||
|
|
Loading…
Reference in New Issue