Files
cm-web/application/third_party/Sioen/Converter.php
2020-06-10 06:21:34 +09:00

68 lines
1.8 KiB
PHP
Executable File

<?php
/**
* Class Converter
*
* A Sir Trevor to HTML conversion helper for PHP
*
* @version 1.1.0
* @author Wouter Sioen <wouter@woutersioen.be>
* @license http://www.opensource.org/licenses/mit-license.php MIT
*/
class Converter
{
/**
* Converts the outputted json from Sir Trevor to html
*
* @param string $json
* @return string
*/
public function toHtml($json)
{
// convert the json to an associative array
$input = json_decode($json, true);
$html = '';
// loop trough the data blocks
foreach ($input['data'] as $block) {
$toHtmlContext = new ToHtmlContext($block['type']);
$html .= $toHtmlContext->getHtml($block['data']);
}
return $html;
}
/**
* Converts html to the json Sir Trevor requires
*
* @param string $html
* @return string The json string
*/
public function toJson($html)
{
// Strip white space between tags to prevent creation of empty #text nodes
$html = preg_replace('~>\s+<~', '><', $html);
$document = new \DOMDocument();
// Load UTF-8 HTML hack (from http://bit.ly/pVDyCt)
$document->loadHTML('<?xml encoding="UTF-8">' . $html);
$document->encoding = 'UTF-8';
// fetch the body of the document. All html is stored in there
$body = $document->getElementsByTagName("body")->item(0);
$data = array();
// loop trough the child nodes and convert them
if ($body) {
foreach ($body->childNodes as $node) {
$toJsonContext = new ToJsonContext($node->nodeName);
$data[] = $toJsonContext->getData($node);
}
}
return json_encode(array('data' => $data));
}
}