jontynewman / oku-io
Functionality for generating output from set input per path.
v1.0
2018-10-09 22:25 UTC
Requires
- jontynewman/oku-directory: ^1.0
- jontynewman/oku-file: ^1.0
Requires (Dev)
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^7.3
This package is not auto-updated.
Last update: 2024-12-08 11:01:34 UTC
README
Functionality for generating output from set input per path.
For example, a given path could take set reStructuredText as input and produce cached HTML as output.
Installation
composer require 'jontynewman/oku-io ^1.0'
Example Usage
The following example assumes that
rst2html5
is available, and that the following packages are installed.
The editor will allow users to either input or upload reStructuredText in order to create static web pages.
<?php
use GuzzleHttp\Psr7\Response;
use JontyNewman\HtmlFilter;
use JontyNewman\Oku\ContextInterface;
use JontyNewman\Oku\IO\Cache;
use JontyNewman\Oku\IO\Repository;
use JontyNewman\Oku\Process;
use JontyNewman\Oku\RequestHandler;
use JontyNewman\Oku\ResponseBuilderInterface;
require 'vendor/autoload.php';
$dir = '/path/to/io/directory';
// Convert reStructuredText input files to HTML output files.
$process = new Process('rst2html5');
// Cache HTML output in the specified directory.
$cache = new Cache($process, "{$dir}/html/", 'html');
// Persist reStructuredText input in the specified directory (for future edits).
$repository = new Repository($cache, "{$dir}/rst/", 'rst');
// Allow users to edit and upload reStructuredText.
$editor = function (
ResponseBuilderInterface $builder,
ContextInterface $context
) use ($repository): void {
$path = $context->request()->getUri()->getPath();
$in = $repository->directory()->offsetGet($path);
$render = function () use ($in) {
if (file_exists($in)) {
HtmlFilter::passthru($in, 'rb');
}
};
$builder->content(function () use ($render, $context) {
require 'editor.php';
});
};
// Use a simple 404 page as the default response.
$default = new Response(404, ['Content-Type' => 'text/plain'], 'Not Found');
// Set up the request handler.
$handler = new RequestHandler($repository, $default, $editor);
// Run the application.
$handler->run();
An example template of the editor (i.e. editor.php
) follows.
<?php
use JontyNewman\Oku\IO\Repository;
use JontyNewman\Oku\Helpers\Html;
/* @var $render callable */
/* @var $context \JontyNewman\Oku\ContextInterface */
?>
<!DOCTYPE html>
<html>
<head>
<title>JontyNewman\Oku\IO</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<p>
<label>
File
<input type="file" name="<?= Html::escape(Repository::FILE); ?>">
</label>
</p>
<p>
<label>
Text
<textarea name="<?= Html::escape(Repository::TEXT); ?>"><?php ($render)(); ?></textarea>
</label>
</p>
<p>
<?= $context->token(); ?>
<?= $context->put(); ?>
<input type="submit" value="Save">
</p>
</form>
<form action="" method="post">
<p>
<?= $context->token(); ?>
<?= $context->delete(); ?>
<input type="submit" value="Delete">
</p>
</form>
<?= $context->inset(); ?>
</body>
</html>