| 
<?phpnamespace 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;
 }
 }
 
 |