forked from projects/fipamo
pages rendering to html
This commit is contained in:
parent
444189e527
commit
b09e1c7164
5 changed files with 330 additions and 4 deletions
|
@ -14,10 +14,12 @@ class SettingsAPI
|
||||||
switch ($task) {
|
switch ($task) {
|
||||||
case "publish":
|
case "publish":
|
||||||
$render = new Render();
|
$render = new Render();
|
||||||
$render->renderTags();
|
//$render->renderTags();
|
||||||
|
//$render->renderArchive();
|
||||||
|
$render->renderPages();
|
||||||
|
|
||||||
$result = [
|
$result = [
|
||||||
"message" => "Items sorted. GOOD EFFORT",
|
"message" => "Site Rendered. GOOD EFFORT",
|
||||||
"type" => "TASK_NONE",
|
"type" => "TASK_NONE",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
use Mni\FrontYAML\Parser;
|
||||||
|
|
||||||
class Render
|
class Render
|
||||||
{
|
{
|
||||||
|
@ -21,6 +22,125 @@ class Render
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function renderPages()
|
||||||
|
{
|
||||||
|
$pages = (new Book("../content/pages"))->getContents();
|
||||||
|
$recent = [];
|
||||||
|
$featured = [];
|
||||||
|
$limit = 4;
|
||||||
|
foreach ($pages as $page) {
|
||||||
|
if (!$page["deleted"] && $page["published"]) {
|
||||||
|
if (count($recent) < $limit) {
|
||||||
|
array_push($recent, [
|
||||||
|
"path" => $page["path"],
|
||||||
|
"slug" => $page["slug"],
|
||||||
|
"title" => $page["title"],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($page["featured"] == true) {
|
||||||
|
if (count($featured) < $limit) {
|
||||||
|
array_push($featured, [
|
||||||
|
"path" => $page["path"],
|
||||||
|
"slug" => $page["slug"],
|
||||||
|
"title" => $page["title"],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$taglist = explode(",", $page["tags"]);
|
||||||
|
$tags = [];
|
||||||
|
foreach ($taglist as $tag) {
|
||||||
|
$label = trim($tag);
|
||||||
|
array_push($tags, [
|
||||||
|
"tag_name" => $label,
|
||||||
|
"slug" => StringTools::safeString($label),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
$meta = [
|
||||||
|
"who" => $page["author"],
|
||||||
|
"when" => $page["updated"],
|
||||||
|
"tags" => $tags,
|
||||||
|
];
|
||||||
|
|
||||||
|
//render markdown content and clean it
|
||||||
|
$parser = new Parser();
|
||||||
|
$rendered = $parser->parse($page["content"]);
|
||||||
|
$sanitizer = \HtmlSanitizer\Sanitizer::create([
|
||||||
|
"extensions" => ["basic", "image", "list"],
|
||||||
|
]);
|
||||||
|
$preclean = $sanitizer->sanitize($rendered->getContent());
|
||||||
|
$cleaned = strip_tags($preclean, [
|
||||||
|
"a",
|
||||||
|
"br",
|
||||||
|
"p",
|
||||||
|
"strong",
|
||||||
|
"br",
|
||||||
|
"img",
|
||||||
|
"iframe",
|
||||||
|
"ul",
|
||||||
|
"li",
|
||||||
|
"i",
|
||||||
|
"h1",
|
||||||
|
"h2",
|
||||||
|
"h3",
|
||||||
|
]);
|
||||||
|
//$cleaned = preg_replace('/(?:\r\n|[\r\n]){2,}/', "\n\n", $cleaned);
|
||||||
|
//$cleaned = html_entity_decode($cleaned, ENT_QUOTES, "UTF-8");
|
||||||
|
|
||||||
|
if ($page["layout"] == "index") {
|
||||||
|
$template = "fipamo-default/index.twig";
|
||||||
|
$location = "../public/index.html";
|
||||||
|
$dir = null;
|
||||||
|
|
||||||
|
$pageOptions = [
|
||||||
|
"title" => $page["title"],
|
||||||
|
"background" => $page["feature"],
|
||||||
|
"content" => $cleaned,
|
||||||
|
"meta" => $meta,
|
||||||
|
"recent" => $recent,
|
||||||
|
"featured" => $featured,
|
||||||
|
"info" => $this->pageInfo,
|
||||||
|
"menu" => $this->menu,
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$template = "fipamo-default/page.twig";
|
||||||
|
$location =
|
||||||
|
"../public/" . $page["path"] . "/" . $page["slug"] . ".html";
|
||||||
|
$dir = "../public/" . $page["path"];
|
||||||
|
$pageOptions = [
|
||||||
|
"title" => $page["title"],
|
||||||
|
"background" => $page["feature"],
|
||||||
|
"content" => $cleaned,
|
||||||
|
"meta" => $meta,
|
||||||
|
"info" => $this->pageInfo,
|
||||||
|
"menu" => $this->menu,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$html = $this->twig->render($template, $pageOptions);
|
||||||
|
DocTools::writeHTML($location, $html, $dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderArchive()
|
||||||
|
{
|
||||||
|
$archive = Sorting::archive();
|
||||||
|
$template = "fipamo-default/archive.twig";
|
||||||
|
$pageOptions = [
|
||||||
|
"title" => "Archive",
|
||||||
|
"background" => $this->pageInfo["image"],
|
||||||
|
"archives" => $archive,
|
||||||
|
"info" => $this->pageInfo,
|
||||||
|
"menu" => $this->menu,
|
||||||
|
];
|
||||||
|
|
||||||
|
$html = $this->twig->render($template, $pageOptions);
|
||||||
|
$location = "../public/archives.html";
|
||||||
|
DocTools::writeHTML($location, $html);
|
||||||
|
}
|
||||||
|
|
||||||
public function renderTags()
|
public function renderTags()
|
||||||
{
|
{
|
||||||
$list = Sorting::tags();
|
$list = Sorting::tags();
|
||||||
|
|
|
@ -34,6 +34,23 @@ class DocTools
|
||||||
fclose($new);
|
fclose($new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function writeHTML($location, $html, $path = null)
|
||||||
|
{
|
||||||
|
if ($path != null) {
|
||||||
|
if (!is_dir($path)) {
|
||||||
|
//Directory does not exist, so lets create it.
|
||||||
|
mkdir($path, 0755, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!is_file($location)) {
|
||||||
|
file_put_contents($location, $html);
|
||||||
|
} else {
|
||||||
|
($new = fopen($location, "w")) or die("Unable to open file!");
|
||||||
|
fwrite($new, $html);
|
||||||
|
fclose($new);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static function objectToMD($object)
|
public static function objectToMD($object)
|
||||||
{
|
{
|
||||||
$markdown =
|
$markdown =
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
"mnapoli/front-yaml": "^1.8",
|
"mnapoli/front-yaml": "^1.8",
|
||||||
"lodash-php/lodash-php": "^0.0.7",
|
"lodash-php/lodash-php": "^0.0.7",
|
||||||
"rbdwllr/reallysimplejwt": "^4.0",
|
"rbdwllr/reallysimplejwt": "^4.0",
|
||||||
"fightbulc/moment": "^1.33"
|
"fightbulc/moment": "^1.33",
|
||||||
|
"tgalopin/html-sanitizer": "^1.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
188
composer.lock
generated
188
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "d5ef6d43f774049d093af6375d20ac11",
|
"content-hash": "f829b5451dc7ceba4625d240a185b162",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "erusev/parsedown",
|
"name": "erusev/parsedown",
|
||||||
|
@ -169,6 +169,75 @@
|
||||||
},
|
},
|
||||||
"time": "2021-03-27T13:10:08+00:00"
|
"time": "2021-03-27T13:10:08+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "league/uri-parser",
|
||||||
|
"version": "1.4.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/uri-parser.git",
|
||||||
|
"reference": "671548427e4c932352d9b9279fdfa345bf63fa00"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/671548427e4c932352d9b9279fdfa345bf63fa00",
|
||||||
|
"reference": "671548427e4c932352d9b9279fdfa345bf63fa00",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friendsofphp/php-cs-fixer": "^2.0",
|
||||||
|
"phpstan/phpstan": "^0.9.2",
|
||||||
|
"phpstan/phpstan-phpunit": "^0.9.4",
|
||||||
|
"phpstan/phpstan-strict-rules": "^0.9.0",
|
||||||
|
"phpunit/phpunit": "^6.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-intl": "Allow parsing RFC3987 compliant hosts",
|
||||||
|
"league/uri-schemes": "Allow validating and normalizing URI parsing results"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\Uri\\": "src"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/functions_include.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Ignace Nyamagana Butera",
|
||||||
|
"email": "nyamsprod@gmail.com",
|
||||||
|
"homepage": "https://nyamsprod.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "userland URI parser RFC 3986 compliant",
|
||||||
|
"homepage": "https://github.com/thephpleague/uri-parser",
|
||||||
|
"keywords": [
|
||||||
|
"parse_url",
|
||||||
|
"parser",
|
||||||
|
"rfc3986",
|
||||||
|
"rfc3987",
|
||||||
|
"uri",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/thephpleague/uri-parser/issues",
|
||||||
|
"source": "https://github.com/thephpleague/uri-parser/tree/master"
|
||||||
|
},
|
||||||
|
"time": "2018-11-22T07:55:51+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "lodash-php/lodash-php",
|
"name": "lodash-php/lodash-php",
|
||||||
"version": "0.0.7",
|
"version": "0.0.7",
|
||||||
|
@ -224,6 +293,75 @@
|
||||||
},
|
},
|
||||||
"time": "2020-09-21T11:55:26+00:00"
|
"time": "2020-09-21T11:55:26+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "masterminds/html5",
|
||||||
|
"version": "2.7.4",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/Masterminds/html5-php.git",
|
||||||
|
"reference": "9227822783c75406cfe400984b2f095cdf03d417"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/Masterminds/html5-php/zipball/9227822783c75406cfe400984b2f095cdf03d417",
|
||||||
|
"reference": "9227822783c75406cfe400984b2f095cdf03d417",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-ctype": "*",
|
||||||
|
"ext-dom": "*",
|
||||||
|
"ext-libxml": "*",
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4.8.35"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.7-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Masterminds\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Matt Butcher",
|
||||||
|
"email": "technosophos@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Matt Farina",
|
||||||
|
"email": "matt@mattfarina.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Asmir Mustafic",
|
||||||
|
"email": "goetas@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "An HTML5 parser and serializer.",
|
||||||
|
"homepage": "http://masterminds.github.io/html5-php",
|
||||||
|
"keywords": [
|
||||||
|
"HTML5",
|
||||||
|
"dom",
|
||||||
|
"html",
|
||||||
|
"parser",
|
||||||
|
"querypath",
|
||||||
|
"serializer",
|
||||||
|
"xml"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/Masterminds/html5-php/issues",
|
||||||
|
"source": "https://github.com/Masterminds/html5-php/tree/2.7.4"
|
||||||
|
},
|
||||||
|
"time": "2020-10-01T13:52:52+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mnapoli/front-yaml",
|
"name": "mnapoli/front-yaml",
|
||||||
"version": "1.8.0",
|
"version": "1.8.0",
|
||||||
|
@ -2077,6 +2215,54 @@
|
||||||
],
|
],
|
||||||
"time": "2021-03-06T07:59:01+00:00"
|
"time": "2021-03-06T07:59:01+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "tgalopin/html-sanitizer",
|
||||||
|
"version": "1.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/tgalopin/html-sanitizer.git",
|
||||||
|
"reference": "56cca6b48de4e50d16a4f549e3e677ae0d561e91"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/tgalopin/html-sanitizer/zipball/56cca6b48de4e50d16a4f549e3e677ae0d561e91",
|
||||||
|
"reference": "56cca6b48de4e50d16a4f549e3e677ae0d561e91",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-dom": "*",
|
||||||
|
"league/uri-parser": "^1.4.1",
|
||||||
|
"masterminds/html5": "^2.4",
|
||||||
|
"php": ">=7.1",
|
||||||
|
"psr/log": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^7.4",
|
||||||
|
"symfony/var-dumper": "^4.1"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"HtmlSanitizer\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Titouan Galopin",
|
||||||
|
"email": "galopintitouan@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Sanitize untrustworthy HTML user input",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/tgalopin/html-sanitizer/issues",
|
||||||
|
"source": "https://github.com/tgalopin/html-sanitizer/tree/master"
|
||||||
|
},
|
||||||
|
"time": "2020-02-03T16:51:08+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.3.0",
|
"version": "v3.3.0",
|
||||||
|
|
Loading…
Reference in a new issue