<?php
namespace Jackbooted\Html;
use \Jackbooted\Util\Log4PHP;
/** template.php - Templating Engine functions
*
* @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved.
*
* Written by Brett Dutton of Jackbooted Software
* brett at brettdutton dot com
*
* This software is written and distributed under the GNU General Public
* License which means that its source code is freely-distributed and
* available to the general public.
*
*/
/**
* preg_match ( "/(.*)<body[^>]*>/siU", $this->outputText, $results );
* preg_match ( "/<\/body>(.*)$$/siU", $this->outputText, $results );
*
*/
class Template extends \Jackbooted\Util\JB {
const FILE = 'f';
const STRING = 's';
private $dataSource;
private $type;
private $tokenList = [];
private $outputText;
private $log;
public function __construct ( &$dataSource, $type=self::STRING ) {
parent::__construct();
$this->dataSource = $dataSource;
$this->type = $type;
$this->log = Log4PHP::logFactory ( __CLASS__ );
}
public function replace ( $token, $value=null ) {
if ( is_array ( $token ) ) {
foreach ( $token as $key => $val ) $this->tokenList['{' . $key . '}'] = $val;
}
else {
if ( $value !== null ) $this->tokenList['{' . $token . '}'] = $value;
}
}
private function loadDataSource () {
switch ( $this->type ) {
case self::FILE:
$this->outputText = file_get_contents ( $this->dataSource );
$this->log->debug ( 'File data source' );
break;
case self::STRING:
default:
$this->outputText = $this->dataSource;
$this->log->debug ( 'Text data source' );
break;
}
}
private function trimBodyTags () {
if ( preg_match ( "/<body[^>]*>(.*)<\/body>/siU", $this->outputText, $results ) ) {
$this->outputText = $results[1];
$this->log->debug ( 'trimmed off body tags' );
}
else {
$this->log->debug ( 'No body tags to trim' );
}
}
private function doStraightReplacements () {
$this->outputText = str_replace ( array_keys ( $this->tokenList ), array_values ( $this->tokenList ), $this->outputText, $count );
$this->log->debug ( "replaced {$count} tokens" );
}
public function __toString () {
$this->loadDataSource ();
$this->trimBodyTags ();
$this->doStraightReplacements ();
return $this->outputText;
}
}
|