REFACTORING: framework cleanup, preparing for php7.4 and loading dependencies from composer

This commit is contained in:
Stephan Kasdorf
2019-11-03 22:06:50 +01:00
parent 236f94bb70
commit 70dccc3f15
615 changed files with 219 additions and 76798 deletions

View File

@@ -1,6 +1,5 @@
<?php
namespace Nibiru;
/**
* User - stephan
* Date - 24.01.17
@@ -9,8 +8,9 @@ namespace Nibiru;
* @category - [PLEASE SPECIFIY]
* @license - BSD License
*/
use Nibiru\Adapter\Controller;
class indexController extends View implements IController
class indexController extends Controller
{
public function __construct()
{

View File

@@ -1,13 +1,10 @@
[ENGINE]
;;name = "Dwoo"
name = "Smarty"
;;name = "Twig"
cache = "/../../application/view/cache/"
templates = "/../../application/view/templates/"
templates_c = "/../../application/view/templates_c/"
config_dir = "/../../application/view/configs/"
class_file = "core/l/Smarty/Smarty.class.php"
debugbar = false
debug_template = "/../../application/view/templates/shared/debug.tpl"
debugbar = true
[AUTOLOADER]
class.pos[] = "users"

View File

@@ -1,31 +1,4 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<title>
{$title}
</title>
{foreach item=style from=$css}
<link href="{$style}" rel="stylesheet">
{/foreach}
<style>
/* note: this is a hack for ios iframe for bootstrap themes shopify page */
/* this chunk of css is not part of the toolkit :) */
body {
width: 1px;
min-width: 100%;
*width: 100%;
}
</style>
</head>
{include 'shared/header.tpl'}
<body>
<div class="container">
<div class="with-iconav">
@@ -34,10 +7,9 @@
<div class="col-sm-12 content">
<div class="dashhead">
<div class="dashhead-titles">
<h6 class="dashhead-subtitle">Dashboards</h6>
<h2 class="dashhead-title">Order history</h2>
<h6 class="dashhead-subtitle">Rapid Prototyping Framework</h6>
<h2 class="dashhead-title">Nibiru</h2>
</div>
<div class="btn-toolbar dashhead-toolbar">
<div class="btn-toolbar-item input-with-icon">
<input type="text" value="01/01/15 - 01/08/15" class="form-control" data-provide="datepicker">
@@ -45,223 +17,6 @@
</div>
</div>
</div>
<div class="flextable table-actions">
<div class="flextable-item flextable-primary">
<div class="btn-toolbar-item input-with-icon">
<input type="text" class="form-control input-block" placeholder="Search orders">
<span class="icon icon-magnifying-glass"></span>
</div>
</div>
<div class="flextable-item">
<div class="btn-group">
<button type="button" class="btn btn-primary-outline">
<span class="icon icon-pencil"></span>
</button>
<button type="button" class="btn btn-primary-outline">
<span class="icon icon-erase"></span>
</button>
</div>
</div>
</div>
<div class="table-full">
<div class="table-responsive">
<table class="table" data-sort="table">
<thead>
<tr>
<th><input type="checkbox" class="select-all" id="selectAll"></th>
<th>Order</th>
<th>Customer name</th>
<th>Description</th>
<th>Date</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10001</a></td>
<td>First Last</td>
<td>Admin theme, marketing theme</td>
<td>01/01/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10002</a></td>
<td>Firstname Lastname</td>
<td>Admin theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10003</a></td>
<td>Name Another</td>
<td>Personal blog theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10004</a></td>
<td>One More</td>
<td>Marketing theme, personal blog theme, admin theme</td>
<td>01/01/2015</td>
<td>$300.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10005</a></td>
<td>Name Right Here</td>
<td>Personal blog theme, admin theme</td>
<td>01/02/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10006</a></td>
<td>First Last</td>
<td>Admin theme, marketing theme</td>
<td>01/01/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10007</a></td>
<td>Firstname Lastname</td>
<td>Admin theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10008</a></td>
<td>Name Another</td>
<td>Personal blog theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10009</a></td>
<td>One More</td>
<td>Marketing theme, personal blog theme, admin theme</td>
<td>01/01/2015</td>
<td>$300.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10010</a></td>
<td>Name Right Here</td>
<td>Personal blog theme, admin theme</td>
<td>01/02/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10011</a></td>
<td>First Last</td>
<td>Admin theme, marketing theme</td>
<td>01/01/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10012</a></td>
<td>Firstname Lastname</td>
<td>Admin theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10013</a></td>
<td>Name Another</td>
<td>Personal blog theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10014</a></td>
<td>One More</td>
<td>Marketing theme, personal blog theme, admin theme</td>
<td>01/01/2015</td>
<td>$300.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10015</a></td>
<td>Name Right Here</td>
<td>Personal blog theme, admin theme</td>
<td>01/02/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10016</a></td>
<td>First Last</td>
<td>Admin theme, marketing theme</td>
<td>01/01/2015</td>
<td>$200.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10017</a></td>
<td>Firstname Lastname</td>
<td>Admin theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10018</a></td>
<td>Name Another</td>
<td>Personal blog theme</td>
<td>01/01/2015</td>
<td>$100.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10019</a></td>
<td>One More</td>
<td>Marketing theme, personal blog theme, admin theme</td>
<td>01/01/2015</td>
<td>$300.00</td>
</tr>
<tr>
<td><input type="checkbox" class="select-row"></td>
<td><a href="#">#10020</a></td>
<td>Name Right Here</td>
<td>Personal blog theme, admin theme</td>
<td>01/02/2015</td>
<td>$200.00</td>
</tbody>
</table>
</div>
</div>
<div class="text-center">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<li class="active"><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</div>
</div>
</div>
@@ -282,19 +37,9 @@
</div>
</div>
</div>
{foreach item=script from=$js}
<script src="{$script}"></script>
{/foreach}
<script>
// execute/clear BS loaders for docs
$(function(){
while( window.BS&&window.BS.loader&&window.BS.loader.length )
{
(window.BS.loader.pop())()
}
})
</script>
{include file="debugbar.tpl"}
{include 'shared/footer.tpl'}
</body>
</html>

View File

@@ -46,7 +46,6 @@
<script type="text/javascript">
{$id = '__Smarty__'}
{if $display_mode}{$id = "$offset$template_name"|md5}{/if}
document.write('{$debug_output|escape:'javascript' nofilter}');
//_smarty_console = window.open("", "console{$id}", "width=1024,height=600,left={$offset},top={$offset},resizable,scrollbars=yes");
//_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");

View File

@@ -0,0 +1,13 @@
{foreach item=script from=$js}
<script src="{$script}"></script>
{/foreach}
<script>
// execute/clear BS loaders for docs
$(function(){
while( window.BS&&window.BS.loader&&window.BS.loader.length )
{
(window.BS.loader.pop())()
}
})
</script>
{include file="./debugbar.tpl"}

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<title>
{$title}
</title>
{foreach item=style from=$css}
<link href="{$style}" rel="stylesheet">
{/foreach}
<style>
/* note: this is a hack for ios iframe for bootstrap themes shopify page */
/* this chunk of css is not part of the toolkit :) */
body {
width: 1px;
min-width: 100%;
*width: 100%;
}
</style>
</head>

View File

@@ -8,12 +8,18 @@
"authors": [
{
"name": "Stephan Kasdorf",
"email": "skasdorf@alllinux.de",
"homepage": "http://www.alllinux.de",
"email": "stephan.kasdorf@bittomine.com",
"homepage": "https://www.nibiru-framework.com",
"role": "Developer"
}
],
"config": {
"vendor-dir": "core/l"
},
"require": {
"php": ">=7.1.0"
"php": ">=7.1.0",
"smarty/smarty": "^3.1",
"phpmailer/phpmailer": "^6.1",
"carbondate/carbon": "^2.0@beta"
}
}

29
core/a/controller.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
namespace Nibiru\Adapter;
/**
* User - stephan
* Date - 03.11.19
* Time - 18:50
* @author - Stephan Kasdorf
* @category - [PLEASE SPECIFIY]
* @license - BSD License
*/
use Nibiru\IController;
use Nibiru;
abstract class Controller extends Nibiru\Controller implements IController
{
/**
* This should be part of any extended controller
* class in order to implement a page structure
* @return array
*/
abstract public function pageAction();
/**
* This is the part where you can add titles to
* your page navigation.
*/
abstract public function navigationAction();
}

View File

@@ -16,6 +16,9 @@ abstract class Db implements IDb
{
private static $table = array();
/**
* @param array $table
*/
protected static function initTable( $table = array() )
{
self::setTable( $table );
@@ -40,28 +43,49 @@ abstract class Db implements IDb
}
}
/**
* @param bool $user_name
* @return mixed
*/
public function loadPasswordByUsername( $user_name = false )
{
$result = Pdo::query("SELECT DES_DECRYPT(".self::TABLE['field']['user_pass'].", '" . Config::getInstance()->getConfig()[View::NIBIRU_SECURITY]["password_hash"] . "') AS ".self::TABLE['field']['user_pass']." FROM user WHERE " . self::TABLE['field']['user_name']. " = '" . $user_name . "';");
return array_shift($result);
}
/**
* @return mixed
*/
public function loadTableAsArray()
{
$result = Pdo::fetchTableAsArray( self::getTable()['table'] );
return $result;
}
/**
* @param bool $id
* @return mixed|void
*/
public function selectRowsetById($id = false)
{
// TODO: Implement selectRowsetById() method.
}
/**
* @param array $rowset
* @param bool $id
* @return mixed|void
*/
public function insertRowsetById($rowset = array(), $id = false)
{
// TODO: Implement insertRowsetById() method.
}
/**
* @param bool $min
* @param bool $max
* @return mixed|void
*/
public function selectDatasetByMinMax($min = false, $max = false)
{
// TODO: Implement selectDatasetByMinMax() method.

View File

@@ -12,8 +12,10 @@ use Nibiru\Config;
use Nibiru\Controller;
use Nibiru\Router;
use Nibiru\View;
use Nibiru\IPageination;
use Nibiru\Adapter\IDb;
abstract class Pageination implements \Nibiru\IPageination
abstract class Pageination implements IPageination
{
use Attributes\Pageination;
@@ -33,7 +35,10 @@ abstract class Pageination implements \Nibiru\IPageination
self::$_uri_pagination_path = '/' . Router::getInstance()->currentPage() . '/' . Controller::getInstance()->getRequest()['_action'] . '/';
}
private static function getUriPaginationPath()
/**
* @return string
*/
private static function getUriPaginationPath(): string
{
return self::$_uri_pagination_path;
}
@@ -56,7 +61,7 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return int
*/
private static function getMaxPageEntries()
private static function getMaxPageEntries(): int
{
return self::$_max_page_entries;
}
@@ -64,12 +69,15 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @param int $max_page_entries
*/
private static function setMaxPageEntries( $max_page_entries )
private static function setMaxPageEntries( int $max_page_entries )
{
self::$_max_page_entries = $max_page_entries;
}
private static function currentPageEntryLimit( )
/**
* @return mixed
*/
private static function currentPageEntryLimit( ): ?array
{
return self::getPageEntryIndex()[self::getCurrentNumber()];
}
@@ -83,7 +91,7 @@ abstract class Pageination implements \Nibiru\IPageination
}
/**
* @param array $page_entry_index
* will set the current page entry index
*/
private static function setPageEntryIndex( )
{
@@ -128,13 +136,13 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return int
*/
private static function getEntriesPerPage()
private static function getEntriesPerPage(): int
{
return self::$_entries_per_page;
}
/**
* @param int $entries_per_page
* will set the entries per page
*/
private static function setEntriesPerPage( )
{
@@ -144,7 +152,7 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return int
*/
public static function getMaxPages( )
public static function getMaxPages( ): int
{
return self::$_max_pages;
}
@@ -153,7 +161,7 @@ abstract class Pageination implements \Nibiru\IPageination
* @desc if you have deactivated pages you can set a filter here
* @param string $where
*/
private static function setMaxPages( $where = '' )
private static function setMaxPages( string $where = '' )
{
$tableinfo = self::getTable()->loadAllTableFieldNames();
self::setMaxPageEntries( self::getTable()->loadTableRowCount( $tableinfo[0], $where ));
@@ -163,15 +171,16 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return boolean
*/
private static function getTable( )
private static function getTable( ): IDb
{
return self::$_table;
}
/**
* @param boolean $table
* @param IDb $table
* @param string $where
*/
public static function setTable( Adapter\IDb $table, $where = '' )
public static function setTable( IDb $table, string $where = '' )
{
if(is_object( $table ))
{
@@ -185,13 +194,13 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return array
*/
protected static function pageContent()
protected static function pageContent(): array
{
return self::$_current_page_content;
}
/**
* @param array $current_page_content
* will set the current page content
*/
protected static function setCurrentPageContent( )
{
@@ -211,7 +220,7 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return int
*/
protected static function getCurrentNumber()
protected static function getCurrentNumber(): int
{
return self::$_current_number;
}
@@ -221,7 +230,6 @@ abstract class Pageination implements \Nibiru\IPageination
* is also used without the pagination, so in order to avoid the
* settings not to work, it is possible to skip the currentNumber
* setup.
* @param int $current_number
*/
protected static function setCurrentNumber( )
{
@@ -270,13 +278,13 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return int
*/
protected static function getNextPageNumber()
protected static function getNextPageNumber(): int
{
return self::$_next_page_number;
}
/**
* @param int $next_page_number
* Will set the next page number up
*/
protected static function setNextPageNumber( )
{
@@ -295,13 +303,13 @@ abstract class Pageination implements \Nibiru\IPageination
/**
* @return int
*/
public static function getPreviousPageNumber()
public static function getPreviousPageNumber(): int
{
return self::$_previous_page_number;
}
/**
* @param int $previous_page_number
* will set the previous page number before
*/
public static function setPreviousPageNumber( )
{

View File

@@ -34,7 +34,7 @@ abstract class Db implements IDb
* @desc getter for the table constant array
* @return array
*/
private static function getTable()
private static function getTable(): array
{
return self::$table;
}

View File

@@ -104,4 +104,22 @@ class Auth extends Controller implements IAuth
$this->_password = $password;
}
/**
* This should be part of any extended controller
* class in order to implement a page structure
* @return array
*/
public function pageAction()
{
// TODO: Implement pageAction() method.
}
/**
* This is the part where you can add titles to
* your page navigation.
*/
public function navigationAction()
{
// TODO: Implement navigationAction() method.
}
}

View File

@@ -157,6 +157,15 @@ class Autoloader
return self::$_modules;
}
/**
* @param string $folderPath
* @return \RecursiveIteratorIterator
*/
private static function folderContent( string $folderPath ): \RecursiveIteratorIterator
{
return new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator( $folderPath ));
}
/**
* @param array $filesInFoler
*/
@@ -172,7 +181,7 @@ class Autoloader
{
foreach ( Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::DB_MODEL_FOLDER] as $modelfolder )
{
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator( __DIR__ . $modelfolder ));
$iterator = self::folderContent( __DIR__ . $modelfolder );
foreach ( $iterator as $item )
{
if($item->getFileName()!= self::MY_FILE_NAME && $item->getFileName()!="." && $item->getFileName()!="..")
@@ -184,7 +193,7 @@ class Autoloader
}
else
{
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::DB_MODEL_FOLDER] ));
$iterator = self::folderContent(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::DB_MODEL_FOLDER] );
foreach ( $iterator as $item )
{
if($item->getFileName()!= self::MY_FILE_NAME && $item->getFileName()!="." && $item->getFileName()!="..")
@@ -196,7 +205,7 @@ class Autoloader
/**
* @desc run check on modules that should provide an interface as well as a trait
*/
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::INTERFACE_FOLDER] ));
$iterator = self::folderContent(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::INTERFACE_FOLDER] );
foreach ( $iterator as $item )
{
if($item->getFileName()!= self::MY_FILE_NAME && $item->getFileName()!="." && $item->getFileName()!="..")
@@ -214,7 +223,7 @@ class Autoloader
self::$_filesInFoler[] = $interface['filepathname'];
}
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::TRAIT_FOLDER] ));
$iterator = self::folderContent(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::TRAIT_FOLDER] );
foreach ( $iterator as $item )
{
if($item->getFileName()!= self::MY_FILE_NAME && $item->getFileName()!="." && $item->getFileName()!="..")
@@ -232,7 +241,7 @@ class Autoloader
self::$_filesInFoler[] = $trait['filepathname'];
}
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::MODULE_FOLDER] ));
$iterator = self::folderContent(__DIR__ . Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS][self::MODULE_FOLDER] );
foreach ( $iterator as $item )
{
if($item->getFileName()!= self::MY_FILE_NAME && $item->getFileName()!="." && $item->getFileName()!="..")

View File

@@ -1,6 +1,5 @@
<?php
namespace Nibiru;
/**
* User - stephan
* Date - 24.01.17
@@ -9,7 +8,8 @@ namespace Nibiru;
* @category - [PLEASE SPECIFIY]
* @license - BSD License
*/
class Controller
class Controller extends View
{
private static $_instance;
private $_config = array();

View File

@@ -10,12 +10,10 @@ class Engine implements IEngine
{
private static $_instance;
private $_config = array();
private $_template_engine;
protected function __construct()
{
$this->_setConfig(Config::getInstance()->getConfig());
$this->_setTemplateEngine();
}
public static function getInstance()
@@ -42,59 +40,6 @@ class Engine implements IEngine
{
$this->_config = $config;
}
/**
* @return mixed
*/
public function getTemplateEngine()
{
return self::$_template_engine;
}
/**
* @desc set the template engine implementation and make it
* known class wide
* @param mixed $template_engine
*/
protected function _setTemplateEngine( )
{
switch(self::getConfig()[self::T_ENGINE][self::T_ENGINE_NAME])
{
case self::T_ENGINE_DWOO:
$this->_template_engine = self::T_ENGINE_DWOO;
require_once __DIR__ . '/../l/Dwoo/IDataProvider.php';
require_once __DIR__ . '/../l/Dwoo/Data.php';
require_once __DIR__ . '/../l/Dwoo/ICompiler.php';
require_once __DIR__ . '/../l/Dwoo/Compiler.php';
require_once __DIR__ . '/../l/Dwoo/ITemplate.php';
require_once __DIR__ . '/../l/Dwoo/Template/Str.php';
require_once __DIR__ . '/../l/Dwoo/Template/File.php';
require_once __DIR__ . '/../l/Dwoo/Exception.php';
require_once __DIR__ . '/../l/Dwoo/Plugin.php';
require_once __DIR__ . '/../l/Dwoo/ICompilable.php';
require_once __DIR__ . '/../l/Dwoo/ICompilable/Block.php';
require_once __DIR__ . '/../l/Dwoo/IElseable.php';
require_once __DIR__ . '/../l/Dwoo/Plugins/';
require_once __DIR__ . '/../l/Dwoo/Block/Plugin.php';
require_once __DIR__ . '/../l/Dwoo/Plugins/Blocks/PluginTopLevelBlock.php';
require_once __DIR__ . '/../l/Dwoo/Exception.php';
require_once __DIR__ . '/../l/Dwoo/ILoader.php';
require_once __DIR__ . '/../l/Dwoo/Loader.php';
require_once __DIR__ . '/../l/Dwoo/Core.php';
require_once __DIR__ . '/../l/Dwoo/Smarty/Adapter.php';
break;
case self::T_ENGINE_TWIG:
$this->_template_engine = self::T_ENGINE_TWIG;
require_once __DIR__ . '/../l/Twig/Autoloader.php';
break;
case self::T_ENGINE_SMARTY:
default:
$this->_template_engine = self::T_ENGINE_SMARTY;
require_once __DIR__ . '/../l/Smarty/Smarty.class.php';
break;
}
}
}
Engine::getInstance();

View File

@@ -8,7 +8,7 @@ namespace Nibiru;
* @category - [PLEASE SPECIFIY]
* @license - BSD License
*/
class View extends Controller implements IView
class View implements IView
{
private static $_instance;
@@ -49,44 +49,28 @@ class View extends Controller implements IView
/**
* @return array
*/
public function getEngine()
public function getEngine(): \Smarty
{
return self::$engine;
}
/**
* @param array $engine
* Will setup the template engine
*/
public static function _setEngine( )
{
switch(Config::getInstance()->getConfig()[Engine::T_ENGINE][Engine::T_ENGINE_NAME])
{
case Engine::T_ENGINE_SMARTY:
self::$engine = new \Smarty();
self::$engine->setTemplateDir(__DIR__ . Config::getInstance()->getConfig()[Engine::T_ENGINE]["templates"]);
self::$engine->setCompileDir(__DIR__ . Config::getInstance()->getConfig()[Engine::T_ENGINE]["templates_c"]);
self::$engine->setCacheDir(__DIR__ . Config::getInstance()->getConfig()[Engine::T_ENGINE]["cache"]);
self::$engine->setConfigDir(__DIR__ . Config::getInstance()->getConfig()[Engine::T_ENGINE]["config_dir"]);
self::$engine->setDebugTemplate(__DIR__ . Config::getInstance()->getConfig()[Engine::T_ENGINE]["debug_template"] );
self::$engine->assign('debuging', Config::getInstance()->getConfig()[Engine::T_ENGINE]["debugbar"]);
break;
case Engine::T_ENGINE_TWIG:
$twig = new \Twig_Autoloader();
$twig::register();
self::$engine = new \Twig_Environment(new \Twig_Loader_Filesystem(Config::getInstance()->getConfig()[Engine::T_ENGINE]["templates"]), array(
'cache' => Config::getInstance()->getConfig()[Engine::T_ENGINE]["cache"],
));
break;
case Engine::T_ENGINE_DWOO:
// Implement Dwoo Template Engine
self::$engine = new \Dwoo\Core();
self::$engine->setCacheDir(Config::getInstance()->getConfig()[Engine::T_ENGINE]["cache"]);
self::$engine->setCompileDir(Config::getInstance()->getConfig()[Engine::T_ENGINE]["templates_c"]);
self::$engine->setTemplateDir(Config::getInstance()->getConfig()[Engine::T_ENGINE]["templates"]);
self::$engine->get('debugbar.tpl', array('debuging' => Config::getInstance()->getConfig()[Engine::T_ENGINE]["debugbar"]));
break;
}
}
/**
* @param array $varname
*/
public function assign( $varname = array() )
{
if(is_array($varname))
@@ -95,12 +79,18 @@ class View extends Controller implements IView
}
}
/**
* @param $page
*/
public static function forwardTo( $page )
{
header('Location: ' . $page);
exit();
}
/**
* @param $page
*/
public function display( $page )
{
preg_match_all("/".self::NIBIRU_FILE_END."/", $page, $matches);
@@ -127,6 +117,11 @@ class View extends Controller implements IView
return $this->xmlPos;
}
/**
* @param $stuff
* @param bool $die
* @return string
*/
protected static function printStuffToScreen( $stuff, $die = false )
{
$output = "<pre>" . print_r( $stuff, true ) . "</pre>";

View File

@@ -21,6 +21,7 @@ require_once __DIR__ . '/c/config.php';
require_once __DIR__ . '/c/router.php';
require_once __DIR__ . '/i/engine.php';
require_once __DIR__ . '/c/engine.php';
require_once __DIR__ . '/l/autoload.php';
/**
* @desc Database connectivity
*/
@@ -79,10 +80,11 @@ require_once __DIR__ . '/c/typeselect.php';
require_once __DIR__ . '/c/typerange.php';
require_once __DIR__ . '/c/typeurl.php';
require_once __DIR__ . '/c/typelabel.php';
require_once __DIR__ . '/i/controller.php';
require_once __DIR__ . '/c/controller.php';
require_once __DIR__ . '/i/view.php';
require_once __DIR__ . '/c/view.php';
require_once __DIR__ . '/i/controller.php';
require_once __DIR__ . '/c/controller.php';
require_once __DIR__ . '/a/controller.php';
require_once __DIR__ . '/c/jsonnavigation.php';
/**
* @desc currently unfinished

View File

@@ -10,8 +10,5 @@ namespace Nibiru;
*/
interface IAuth
{
const NIBIRU_SECURITY = "SECURITY";
public function auth( $username, $password );
}

View File

@@ -9,8 +9,4 @@ namespace Nibiru;
interface IEngine
{
const T_ENGINE = "ENGINE";
const T_ENGINE_NAME = "name";
const T_ENGINE_TWIG = "Twig";
const T_ENGINE_SMARTY = "Smarty";
const T_ENGINE_DWOO = "Dwoo";
}

0
core/l/.gitkeep Normal file
View File

View File

@@ -1,119 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Block
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-23
* @link http://dwoo.org/
*/
namespace Dwoo\Block;
use Dwoo\Plugin as DwooPlugin;
use Dwoo\Compiler as DwooCompiler;
/**
* Base class for block plugins.
* you have to implement the <em>init()</em> method, it will receive the parameters that
* are in the template code and is called when the block starts
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
abstract class Plugin extends DwooPlugin
{
/**
* Stores the contents of the block while it runs.
*
* @var string
*/
protected $buffer = '';
/**
* Buffers input, override only if necessary.
*
* @var string the content that must be buffered
*/
public function buffer($input)
{
$this->buffer .= $input;
}
// initialization code, receives the parameters from {block param1 param2}
// public function init($arg, $arg, ...);
/**
* Called when the block ends, this is most of the time followed right away by a call
* of <em>process()</em> but not always, so this should be used to do any shutdown operations on the
* block object, if required.
*/
public function end()
{
}
/**
* Called when the block output is required by a parent block.
* this must read $this->buffer and return it processed
*
* @return string
*/
public function process()
{
return $this->buffer;
}
/**
* Called at compile time to define what the block should output in the compiled template code, happens when the
* block is declared basically this will replace the {block arg arg arg} tag in the template.
*
* @param DwooCompiler $compiler the compiler instance that calls this function
* @param array $params an array containing original and compiled parameters
* @param string $prepend that is just meant to allow a child class to call
* parent::postProcessing($compiler, $params, "foo();") to add a command before the
* default commands are executed parent::postProcessing($compiler, $params, "foo();")
* to add a command before the default commands are executed
* @param string $append that is just meant to allow a child class to call
* parent::postProcessing($compiler, $params, null, "foo();") to add a command after
* the default commands are executed parent::postProcessing($compiler, $params, null,
* "foo();") to add a command after the default commands are executed
* @param string $type the type is the plugin class name used
*
* @return string
*/
public static function preProcessing(DwooCompiler $compiler, array $params, $prepend, $append, $type)
{
return DwooCompiler::PHP_OPEN . $prepend . '$this->addStack("' . $type . '", array(' . DwooCompiler::implode_r($compiler->getCompiledParams($params)) . '));' . $append . DwooCompiler::PHP_CLOSE;
}
/**
* Called at compile time to define what the block should output in the compiled template code, happens when the
* block is ended basically this will replace the {/block} tag in the template.
*
* @see preProcessing
*
* @param DwooCompiler $compiler the compiler instance that calls this function
* @param array $params an array containing original and compiled parameters, see preProcessing() for more
* details more details
* @param string $prepend that is just meant to allow a child class to call
* parent::postProcessing($compiler, $params, "foo();") to add a command before the
* default commands are executed parent::postProcessing($compiler, $params, "foo();")
* to add a command before the default commands are executed
* @param string $append that is just meant to allow a child class to call
* parent::postProcessing($compiler, $params, null, "foo();") to add a command after
* the default commands are executed parent::postProcessing($compiler, $params, null,
* "foo();") to add a command after the default commands are executed
* @param string $content the entire content of the block being closed
*
* @return string
*/
public static function postProcessing(DwooCompiler $compiler, array $params, $prepend, $append, $content)
{
return $content . DwooCompiler::PHP_OPEN . $prepend . '$this->delStack();' . $append . DwooCompiler::PHP_CLOSE;
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Compilation
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo\Compilation;
use Dwoo\Exception as DwooException;
use Dwoo\Compiler as DwooCompiler;
/**
* Dwoo compilation exception class.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class Exception extends DwooException
{
protected $compiler;
protected $template;
/**
* Exception constructor.
*
* @param DwooCompiler $compiler
* @param int $message
*/
public function __construct(DwooCompiler $compiler, $message)
{
$this->compiler = $compiler;
$this->template = $compiler->getCore()->getTemplate();
parent::__construct('Compilation error at line ' . $compiler->getLine() . ' in "' . $this->template->getResourceName() . ':' . $this->template->getResourceIdentifier() . '" : ' . $message);
}
/**
* @return DwooCompiler
*/
public function getCompiler()
{
return $this->compiler;
}
/**
* @return \Dwoo\ITemplate|null
*/
public function getTemplate()
{
return $this->template;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,264 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.4
* @date 2017-03-01
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Dwoo data object, use it for complex data assignments or if you want to easily pass it
* around multiple functions to avoid passing an array by reference.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class Data implements IDataProvider
{
/**
* Data array.
*
* @var array
*/
protected $data = array();
/**
* Returns the data array.
*
* @return array
*/
public function getData()
{
return $this->data;
}
/**
* Clears a the entire data or only the given key.
*
* @param array|string $name clears only one value if you give a name, multiple values if
* you give an array of names, or the entire data if left null
*/
public function clear($name = null)
{
if ($name === null) {
$this->data = array();
} elseif (is_array($name)) {
foreach ($name as $index) {
unset($this->data[$index]);
}
} else {
unset($this->data[$name]);
}
}
/**
* Overwrites the entire data with the given array.
*
* @param array $data the new data array to use
*/
public function setData(array $data)
{
$this->data = $data;
}
/**
* merges the given array(s) with the current data with array_merge.
*
* @param array $data the array to merge
*/
public function mergeData(array $data)
{
$args = func_get_args();
foreach ($args as $key => $v) {
if (is_array($v)) {
$this->data = array_merge($this->data, $v);
}
}
}
/**
* Assigns a value or an array of values to the data object.
*
* @param array|string $name an associative array of multiple (index=>value) or a string
* that is the index to use, i.e. a value assigned to "foo" will be
* accessible in the template through {$foo}
* @param mixed $val the value to assign, or null if $name was an array
*/
public function assign($name, $val = null)
{
if (is_array($name)) {
reset($name);
foreach ($name as $k => $v){
$this->data[$k] = $v;
}
} else {
$this->data[$name] = $val;
}
}
/**
* Allows to assign variables using the object syntax.
*
* @param string $name the variable name
* @param string $value the value to assign to it
*/
public function __set($name, $value)
{
$this->assign($name, $value);
}
/**
* Assigns a value by reference to the data object.
*
* @param string $name the index to use, i.e. a value assigned to "foo" will be
* accessible in the template through {$foo}
* @param mixed $val the value to assign by reference
*/
public function assignByRef($name, &$val)
{
$this->data[$name] = &$val;
}
/**
* Appends values or an array of values to the data object.
*
* @param array|string $name an associative array of multiple (index=>value) or a string
* that is the index to use, i.e. a value assigned to "foo" will be
* accessible in the template through {$foo}
* @param mixed $val the value to assign, or null if $name was an array
* @param bool $merge true to merge data or false to append, defaults to false
*/
public function append($name, $val = null, $merge = false)
{
if (is_array($name)) {
foreach ($name as $key => $val) {
if (isset($this->data[$key]) && !is_array($this->data[$key])) {
settype($this->data[$key], 'array');
}
if ($merge === true && is_array($val)) {
$this->data[$key] = $val + $this->data[$key];
} else {
$this->data[$key][] = $val;
}
}
} elseif ($val !== null) {
if (isset($this->data[$name]) && !is_array($this->data[$name])) {
settype($this->data[$name], 'array');
} elseif (!isset($this->data[$name])) {
$this->data[$name] = array();
}
if ($merge === true && is_array($val)) {
$this->data[$name] = $val + $this->data[$name];
} else {
$this->data[$name][] = $val;
}
}
}
/**
* Appends a value by reference to the data object.
*
* @param string $name the index to use, i.e. a value assigned to "foo" will be
* accessible in the template through {$foo}
* @param mixed $val the value to append by reference
* @param bool $merge true to merge data or false to append, defaults to false
*/
public function appendByRef($name, &$val, $merge = false)
{
if (isset($this->data[$name]) && !is_array($this->data[$name])) {
settype($this->data[$name], 'array');
}
if ($merge === true && is_array($val)) {
foreach ($val as $key => &$value) {
$this->data[$name][$key] = &$value;
}
} else {
$this->data[$name][] = &$val;
}
}
/**
* Returns true if the variable has been assigned already, false otherwise.
*
* @param string $name the variable name
*
* @return bool
*/
public function isAssigned($name)
{
return isset($this->data[$name]);
}
/**
* Supports calls to isset($dwoo->var).
*
* @param string $name the variable name
*
* @return bool
*/
public function __isset($name)
{
return isset($this->data[$name]);
}
/**
* Unassigns/removes a variable.
*
* @param string $name the variable name
*/
public function unassign($name)
{
unset($this->data[$name]);
}
/**
* Supports unsetting variables using the object syntax.
*
* @param string $name the variable name
*/
public function __unset($name)
{
unset($this->data[$name]);
}
/**
* Returns a variable if it was assigned.
*
* @param string $name the variable name
*
* @return mixed
*/
public function get($name)
{
return $this->__get($name);
}
/**
* Allows to read variables using the object syntax.
*
* @param string $name the variable name
*
* @return mixed
* @throws Exception
*/
public function __get($name)
{
if (isset($this->data[$name])) {
return $this->data[$name];
} else {
throw new Exception('Tried to read a value that was not assigned yet : "' . $name . '"');
}
}
}

View File

@@ -1,26 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Main dwoo exception class.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class Exception extends \Exception
{
}

View File

@@ -1,52 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Base class for filters.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
abstract class Filter
{
/**
* The dwoo instance that runs this filter.
*
* @var Core
*/
protected $dwoo;
/**
* Constructor, if you override it, call parent::__construct($dwoo); or assign
* the dwoo instance yourself if you need it.
*
* @param Core $dwoo the dwoo instance that runs this plugin
*/
public function __construct(Core $dwoo)
{
$this->dwoo = $dwoo;
}
/**
* Processes the input and returns it filtered.
*
* @param string $input the template to process
*
* @return string
*/
abstract public function process($input);
}

View File

@@ -1,31 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-23
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Interface that represents a compilable plugin.
* implement this to notify the compiler that this plugin does not need to be loaded at runtime.
* to implement it right, you must implement <em>public static function compile(Compiler $compiler, $arg, $arg,
* ...)</em>, which replaces the <em>process()</em> method (that means <em>compile()</em> should have all arguments it
* requires). This software is provided 'as-is', without any express or implied warranty. In no event will the authors
* be held liable for any damages arising from the use of this software.
*/
interface ICompilable
{
// this replaces the process function
//public static function compile(Compiler $compiler, $arg, $arg, ...);
}

View File

@@ -1,27 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\ICompilable
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\ICompilable;
/**
* Interface that represents a compilable block plugin.
* implement this to notify the compiler that this plugin does not need to be loaded at runtime.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface Block
{
}

View File

@@ -1,59 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo;
use Dwoo\Security\Policy as SecurityPolicy;
/**
* Interface that represents a dwoo compiler.
* while implementing this is enough to interact with Dwoo/Templates, it is not
* sufficient to interact with Dwoo/Plugins, however the main purpose of creating a
* new compiler would be to interact with other/different plugins, that is why this
* interface has been left with the minimum requirements.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface ICompiler
{
/**
* Compiles the provided string down to php code.
*
* @param Core $core
* @param ITemplate $template the template to compile
*
* @return string a compiled php code string
*/
public function compile(Core $core, ITemplate $template);
/**
* Adds the custom plugins loaded into Dwoo to the compiler so it can load them.
*
* @see Core::addPlugin
*
* @param array $customPlugins an array of custom plugins
*/
public function setCustomPlugins(array $customPlugins);
/**
* Sets the security policy object to enforce some php security settings.
* use this if untrusted persons can modify templates,
* set it on the Dwoo object as it will be passed onto the compiler automatically
*
* @param SecurityPolicy $policy the security policy object
*/
public function setSecurityPolicy(SecurityPolicy $policy = null);
}

View File

@@ -1,32 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-23
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Interface that represents a dwoo data object.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface IDataProvider
{
/**
* Returns the data as an associative array that will be used in the template.
*
* @return array
*/
public function getData();
}

View File

@@ -1,30 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Interface that represents a block plugin that supports the else functionality.
* the else block will enter an "hasElse" parameter inside the parameters array
* of the closest parent implementing this interface, the hasElse parameter contains
* the else output that should be appended to the block's content (see foreach or other
* block for examples)
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface IElseable
{
}

View File

@@ -1,37 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-23
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Interface for dwoo plugin loaders.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface ILoader
{
/**
* Loads a plugin file.
* the second parameter is used to avoid permanent rehashing when using php functions,
* however this means that if you have add a plugin that overrides a php function you have
* to delete the classpath.cache file(s) by hand to force a rehash of the plugins
*
* @param string $class the plugin name, without the `Plugin` prefix
* @param bool $forceRehash if true, the class path caches will be rebuilt if the plugin is not found, in case it
* has just been added, defaults to true
*/
public function loadPlugin($class, $forceRehash = true);
}

View File

@@ -1,74 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-23
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Interface that represents a dwoo plugin proxy.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface IPluginProxy
{
/**
* Returns true or false to say whether the given plugin is handled by this proxy or not.
*
* @param string $name the plugin name
*
* @return bool true if the plugin is known and usable, otherwise false
*/
public function handles($name);
/**
* Returns the code (as a string) to call the plugin
* (this will be executed at runtime inside the Dwoo class).
*
* @param string $name the plugin name
* @param array $params a parameter array, array key "*" is the rest array
*
* @return string
*/
public function getCode($name, $params);
/**
* Returns a callback to the plugin, this is used with the reflection API to
* find out about the plugin's parameter names etc.
* should you need a rest array without the possibility to edit the
* plugin's code, you can provide a callback to some
* other function with the correct parameter signature, i.e. :
* <code>
* return array($this, "callbackHelper");
* // and callbackHelper would be as such:
* public function callbackHelper(array $rest=array()){}
* </code>
*
* @param string $name the plugin name
*
* @return callback
*/
public function getCallback($name);
/**
* Returns some code that will check if the plugin is loaded and if not load it
* this is optional, if your plugins are autoloaded or whatever, just return an
* empty string.
*
* @param string $name the plugin name
*
* @return string
*/
public function getLoader($name);
}

View File

@@ -1,161 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.4
* @date 2017-03-07
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Interface that represents a dwoo template.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
interface ITemplate
{
/**
* Returns the cache duration for this template.
* defaults to null if it was not provided
*
* @return int|null
*/
public function getCacheTime();
/**
* Sets the cache duration for this template.
* can be used to set it after the object is created if you did not provide
* it in the constructor
*
* @param int $seconds duration of the cache validity for this template, if
* null it defaults to the Dwoo instance's cache time. 0 = disable and
* -1 = infinite cache
*/
public function setCacheTime($seconds = null);
/**
* Returns the cached template output file name, true if it's cache-able but not cached
* or false if it's not cached.
*
* @param Core $core the dwoo instance that requests it
*
* @return string|bool
*/
public function getCachedTemplate(Core $core);
/**
* Caches the provided output into the cache file.
*
* @param Core $core the dwoo instance that requests it
* @param string $output the template output
*
* @return mixed full path of the cached file or false upon failure
*/
public function cache(Core $core, $output);
/**
* Clears the cached template if it's older than the given time.
*
* @param Core $core the dwoo instance that was used to cache that template
* @param int $olderThan minimum time (in seconds) required for the cache to be cleared
*
* @return bool true if the cache was not present or if it was deleted, false if it remains there
*/
public function clearCache(Core $core, $olderThan = - 1);
/**
* Returns the compiled template file name.
*
* @param Core $core the dwoo instance that requests it
* @param ICompiler $compiler the compiler that must be used
*
* @return string
*/
public function getCompiledTemplate(Core $core, ICompiler $compiler = null);
/**
* Returns the template name.
*
* @return string
*/
public function getName();
/**
* Returns the resource name for this template class.
*
* @return string
*/
public function getResourceName();
/**
* Returns the resource identifier for this template or false if it has no identifier.
*
* @return string|false
*/
public function getResourceIdentifier();
/**
* Returns the template source of this template.
*
* @return string
*/
public function getSource();
/**
* Returns an unique string identifying the current version of this template,
* for example a timestamp of the last modified date or a hash of the template source.
*
* @return string
*/
public function getUid();
/**
* Returns the compiler used by this template, if it was just compiled, or null.
*
* @return ICompiler
*/
public function getCompiler();
/**
* Returns some php code that will check if this template has been modified or not.
* if the function returns null, the template will be instanciated and then the Uid checked
*
* @return string
*/
public function getIsModifiedCode();
/**
* Returns a new template object from the given resource identifier, null if no include is
* possible (resource not found), or false if include is not permitted by this resource type.
* this method should also check if $dwoo->getSecurityPolicy() is null or not and do the
* necessary permission checks if required, if the security policy prevents the template
* generation it should throw a new Security\Exception with a relevant message
*
* @param Core $core
* @param mixed $resourceId the resource identifier
* @param int $cacheTime duration of the cache validity for this template, if null it defaults to the
* Dwoo instance that will render this template if null it defaults to the Dwoo
* instance that will render this template
* @param string $cacheId the unique cache identifier of this page or anything else that makes this
* template's content unique, if null it defaults to the current url makes this
* template's content unique, if null it defaults to the current url
* @param string $compileId the unique compiled identifier, which is used to distinguish this template from
* others, if null it defaults to the filename+bits of the path template from
* others, if null it defaults to the filename+bits of the path
* @param ITemplate $parentTemplate the template that is requesting a new template object (through an include,
* extends or any other plugin) an include, extends or any other plugin)
*
* @return ITemplate|false|null
*/
public static function templateFactory(Core $core, $resourceId, $cacheTime = null, $cacheId = null,
$compileId = null, ITemplate $parentTemplate = null);
}

View File

@@ -1,181 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.4.0
* @date 2017-03-16
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Handles plugin loading and caching of plugins names/paths relationships.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class Loader implements ILoader
{
/**
* Stores the plugin directories.
*
* @see addDirectory
* @var array
*/
protected $paths = array();
/**
* Stores the plugins names/paths relationships
* don't edit this on your own, use addDirectory.
*
* @see addDirectory
* @var array
*/
protected $classPath = array();
/**
* Path where class paths cache files are written.
*
* @var string
*/
protected $cacheDir;
/**
* Path where builtin plugins are stored.
*
* @var string
*/
protected $corePluginDir;
/**
* Loader constructor.
*
* @param $cacheDir
*/
public function __construct($cacheDir)
{
$this->corePluginDir = __DIR__ . DIRECTORY_SEPARATOR;
$this->cacheDir = rtrim($cacheDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
// include class paths or rebuild paths if the cache file isn't there
$cacheFile = $this->cacheDir . 'classpath.cache.d' . Core::RELEASE_TAG . '.php';
if (file_exists($cacheFile)) {
$classpath = file_get_contents($cacheFile);
$this->classPath = unserialize($classpath) + $this->classPath;
} else {
$this->rebuildClassPathCache($this->corePluginDir, $cacheFile);
}
}
/**
* Rebuilds class paths, scans the given directory recursively and saves all paths in the given file.
*
* @param string $path the plugin path to scan
* @param string|boolean $cacheFile the file where to store the plugin paths cache, it will be overwritten
*
* @throws Exception
*/
protected function rebuildClassPathCache($path, $cacheFile)
{
$tmp = array();
if ($cacheFile !== false) {
$tmp = $this->classPath;
$this->classPath = array();
}
// iterates over all files/folders
foreach (new \DirectoryIterator($path) as $fileInfo) {
if (!$fileInfo->isDot()) {
if ($fileInfo->isDir()) {
$this->rebuildClassPathCache($fileInfo->getPathname(), false);
} else {
$this->classPath[$fileInfo->getBasename('.php')] = $fileInfo->getPathname();
}
}
}
// save in file if it's the first call (not recursed)
if ($cacheFile !== false) {
if (!file_put_contents($cacheFile, serialize($this->classPath))) {
throw new Exception('Could not write into ' . $cacheFile . ', either because the folder is not there (create it) or because of the chmod configuration (please ensure this directory is writable by php), alternatively you can change the directory used with $dwoo->setCompileDir() or provide a custom loader object with $dwoo->setLoader()');
}
$this->classPath += $tmp;
}
}
/**
* Loads a plugin file.
*
* @param string $class the plugin name, without the `Plugin` prefix
* @param bool $forceRehash if true, the class path caches will be rebuilt if the plugin is not found, in case it
* has just been added, defaults to true
*
* @throws Exception
*/
public function loadPlugin($class, $forceRehash = true)
{
/**
* An unknown class was requested (maybe newly added) or the
* include failed so we rebuild the cache. include() will fail
* with an uncatchable error if the file doesn't exist, which
* usually means that the cache is stale and must be rebuilt,
* so we check for that before trying to include() the plugin.
*/
if ((!isset($this->classPath[$class]) || !is_readable($this->classPath[$class])) || (!isset
($this->classPath[$class . 'Compile']) || !is_readable($this->classPath[$class . 'Compile']))) {
if ($forceRehash) {
$this->rebuildClassPathCache($this->corePluginDir, $this->cacheDir . 'classpath.cache.d' .
Core::RELEASE_TAG . '.php');
foreach ($this->paths as $path => $file) {
$this->rebuildClassPathCache($path, $file);
}
if (isset($this->classPath[$class])) {
include_once $this->classPath[$class];
} elseif (isset($this->classPath[$class . 'Compile'])) {
include_once $this->classPath[$class . 'Compile'];
} else {
throw new Exception('Plugin "' . $class . '" can not be found, maybe you forgot to bind it if it\'s a custom plugin ?', E_USER_NOTICE);
}
} else {
throw new Exception('Plugin "' . $class . '" can not be found, maybe you forgot to bind it if it\'s a custom plugin ?', E_USER_NOTICE);
}
}
}
/**
* Adds a plugin directory, the plugins found in the new plugin directory
* will take precedence over the other directories (including the default
* dwoo plugin directory), you can use this for example to override plugins
* in a specific directory for a specific application while keeping all your
* usual plugins in the same place for all applications.
* TOCOM don't forget that php functions overrides are not rehashed so you
* need to clear the classpath caches by hand when adding those.
*
* @param string $pluginDirectory the plugin path to scan
*
* @throws Exception
*/
public function addDirectory($pluginDirectory)
{
$pluginDir = realpath($pluginDirectory);
if (!$pluginDir) {
throw new Exception('Plugin directory does not exist or can not be read : ' . $pluginDirectory);
}
$cacheFile = $this->cacheDir . 'classpath-' . substr(strtr($pluginDir, '/\\:' . PATH_SEPARATOR, '----'),
strlen($pluginDir) > 80 ? - 80 : 0) . '.d' . Core::RELEASE_TAG . '.php';
$this->paths[$pluginDir] = $cacheFile;
if (file_exists($cacheFile)) {
$classpath = file_get_contents($cacheFile);
$this->classPath = unserialize($classpath) + $this->classPath;
} else {
$this->rebuildClassPathCache($pluginDir, $cacheFile);
}
}
}

View File

@@ -1,105 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-23
* @link http://dwoo.org/
*/
namespace Dwoo;
/**
* Base plugin class.
* you have to implement the <em>process()</em> method, it will receive the parameters that
* are in the template code
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
abstract class Plugin
{
/**
* The dwoo instance that runs this plugin.
*
* @var Core
*/
protected $core;
/**
* Constructor, if you override it, call parent::__construct($core); or assign
* the dwoo instance yourself if you need it.
*
* @param Core $core the dwoo instance that runs this plugin
*/
public function __construct(Core $core)
{
$this->core = $core;
}
// plugins should always implement :
// public function process($arg, $arg, ...)
// or for block plugins :
// public function init($arg, $arg, ...)
// this could be enforced with :
// abstract public function process(...);
// if my feature request gets enough interest one day
// see => http://bugs.php.net/bug.php?id=44043
/**
* Utility function that converts an array of compiled parameters (or rest array) to a string of xml/html tag
* attributes. this is to be used in preProcessing or postProcessing functions, example :
* $p = $compiler->getCompiledParams($params);
* // get only the rest array as attributes
* $attributes = Plugin::paramsToAttributes($p['*']);
* // get all the parameters as attributes (if there is a rest array, it will be included)
* $attributes = Plugin::paramsToAttributes($p);
*
* @param array $params an array of attributeName=>value items that will be compiled to be ready for inclusion in a php string
* inclusion in a php string
* @param string $delim the string delimiter you want to use (defaults to ')
* @param Compiler $compiler the compiler instance (optional for BC, but recommended to pass it for proper escaping behavior)
* escaping behavior)
*
* @return string
*/
public static function paramsToAttributes(array $params, $delim = '\'', Compiler $compiler = null)
{
if (isset($params['*'])) {
$params = array_merge($params, $params['*']);
unset($params['*']);
}
$out = '';
foreach ($params as $attr => $val) {
$out .= ' ' . $attr . '=';
if (trim($val, '"\'') == '' || $val == 'null') {
$out .= str_replace($delim, '\\' . $delim, '""');
} elseif (substr($val, 0, 1) === $delim && substr($val, - 1) === $delim) {
$out .= str_replace($delim, '\\' . $delim, '"' . substr($val, 1, - 1) . '"');
} else {
if (!$compiler) {
// disable double encoding since it can not be determined if it was encoded
$escapedVal = '.(is_string($tmp2=' . $val . ') ? htmlspecialchars($tmp2, ENT_QUOTES, $this->charset, false) : $tmp2).';
} elseif (!$compiler->getAutoEscape() || false === strpos($val, 'isset($this->scope')) {
// escape if auto escaping is disabled, or there was no variable in the string
$escapedVal = '.(is_string($tmp2=' . $val . ') ? htmlspecialchars($tmp2, ENT_QUOTES, $this->charset) : $tmp2).';
} else {
// print as is
$escapedVal = '.' . $val . '.';
}
$out .= str_replace($delim, '\\' . $delim, '"') . $delim . $escapedVal . $delim . str_replace($delim, '\\' . $delim, '"');
}
}
return ltrim($out);
}
}

View File

@@ -1,95 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Outputs a html &lt;a&gt; tag
* <pre>
* * href : the target URI where the link must point
* * rest : any other attributes you want to add to the tag can be added as named parameters
* </pre>.
* Example :
* <code>
* {* Create a simple link out of an url variable and add a special class attribute: *}
* {a $url class="external" /}
* {* Mark a link as active depending on some other variable : *}
* {a $link.url class=tif($link.active "active"); $link.title /}
* {* This is similar to: <a href="{$link.url}" class="{if $link.active}active{/if}">{$link.title}</a> *}
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginA extends BlockPlugin implements ICompilableBlock
{
/**
* @param $href
* @param array $rest
*/
public function init($href, array $rest = array())
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$p = $compiler->getCompiledParams($params);
$out = Compiler::PHP_OPEN . 'echo \'<a ' . self::paramsToAttributes($p, "'", $compiler);
return $out . '>\';' . Compiler::PHP_CLOSE;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$p = $compiler->getCompiledParams($params);
// no content was provided so use the url as display text
if ($content == '') {
// merge </a> into the href if href is a string
if (substr($p['href'], - 1) === '"' || substr($p['href'], - 1) === '\'') {
return Compiler::PHP_OPEN . 'echo ' . substr($p['href'], 0, - 1) . '</a>' . substr($p['href'], - 1) . ';' . Compiler::PHP_CLOSE;
}
// otherwise append
return Compiler::PHP_OPEN . 'echo ' . $p['href'] . '.\'</a>\';' . Compiler::PHP_CLOSE;
}
// return content
return $content . '</a>';
}
}

View File

@@ -1,98 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Overrides the compiler auto-escape setting within the block
* <pre>
* * enabled : if set to "on", "enable", true or 1 then the compiler autoescaping is enabled inside this block. set to
* "off", "disable", false or 0 to disable it
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginAutoEscape extends BlockPlugin implements ICompilableBlock
{
protected static $stack = array();
/**
* @param $enabled
*/
public function init($enabled)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
* @throws CompilationException
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$params = $compiler->getCompiledParams($params);
switch (strtolower(trim((string)$params['enabled'], '"\''))) {
case 'on':
case 'true':
case 'enabled':
case 'enable':
case '1':
$enable = true;
break;
case 'off':
case 'false':
case 'disabled':
case 'disable':
case '0':
$enable = false;
break;
default:
throw new CompilationException($compiler, 'Auto_Escape : Invalid parameter (' . $params['enabled'] . '), valid parameters are "enable"/true or "disable"/false');
}
self::$stack[] = $compiler->getAutoEscape();
$compiler->setAutoEscape($enable);
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$compiler->setAutoEscape(array_pop(self::$stack));
return $content;
}
}

View File

@@ -1,66 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* This is used only when rendering a template that has blocks but is not extending anything,
* it doesn't do anything by itself and should not be used outside of template inheritance context,
* see {@link http://wiki.dwoo.org/index.php/TemplateInheritance} to read more about it.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginBlock extends BlockPlugin implements ICompilableBlock
{
/**
* @param string $name
*/
public function init($name = '')
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
return $content;
}
}

View File

@@ -1,95 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Captures all the output within this block and saves it into {$.capture.default} by default,
* or {$.capture.name} if you provide another name.
* <pre>
* * name : capture name, used to read the value afterwards
* * assign : if set, the value is also saved in the given variable
* * cat : if true, the value is appended to the previous one (if any) instead of overwriting it
* </pre>
* If the cat parameter is true, the content
* will be appended to the existing content.
* Example :
* <code>
* {capture "foo"}
* Anything in here won't show, it will be saved for later use..
* {/capture}
* Output was : {$.capture.foo}
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCapture extends BlockPlugin implements ICompilableBlock
{
/**
* @param string $name
* @param null $assign
* @param bool $cat
* @param bool $trim
*/
public function init($name = 'default', $assign = null, $cat = false, $trim = false)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return Compiler::PHP_OPEN . $prepend . 'ob_start();' . $append . Compiler::PHP_CLOSE;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$params = $compiler->getCompiledParams($params);
$out = $content . Compiler::PHP_OPEN . $prepend . "\n" . '$tmp = ob_get_clean();';
if ($params['trim'] !== 'false' && $params['trim'] !== 0) {
$out .= "\n" . '$tmp = trim($tmp);';
}
if ($params['cat'] === 'true' || $params['cat'] === 1) {
$out .= "\n" . '$tmp = $this->readVar(\'dwoo.capture.\'.' . $params['name'] . ') . $tmp;';
}
if ($params['assign'] !== 'null') {
$out .= "\n" . '$this->scope[' . $params['assign'] . '] = $tmp;';
}
return $out . "\n" . '$this->globals[\'capture\'][' . $params['name'] . '] = $tmp;' . $append . Compiler::PHP_CLOSE;
}
}

View File

@@ -1,116 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Marks the contents of the block as dynamic. Which means that it will not be cached.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginDynamic extends BlockPlugin implements ICompilableBlock
{
/**
*
*/
public function init()
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
try {
$compiler->findBlock('dynamic');
return $content;
}
catch (CompilationException $e) {
}
$output = Compiler::PHP_OPEN . 'if($doCache) {' . "\n\t" . 'echo \'<dwoo:dynamic_\'.$dynamicId.\'>' . str_replace('\'', '\\\'', $content) . '</dwoo:dynamic_\'.$dynamicId.\'>\';' . "\n} else {\n\t";
if (substr($content, 0, strlen(Compiler::PHP_OPEN)) == Compiler::PHP_OPEN) {
$output .= substr($content, strlen(Compiler::PHP_OPEN));
} else {
$output .= Compiler::PHP_CLOSE . $content;
}
if (substr($output, - strlen(Compiler::PHP_CLOSE)) == Compiler::PHP_CLOSE) {
$output = substr($output, 0, - strlen(Compiler::PHP_CLOSE));
} else {
$output .= Compiler::PHP_OPEN;
}
$output .= "\n}" . Compiler::PHP_CLOSE;
return $output;
}
/**
* @param $output
* @param $dynamicId
* @param $compiledFile
*
* @return mixed|string
*/
public static function unescape($output, $dynamicId, $compiledFile)
{
$output = preg_replace_callback('/<dwoo:dynamic_(' . $dynamicId . ')>(.+?)<\/dwoo:dynamic_' . $dynamicId . '>/s', array(
'self',
'unescapePhp'
), $output, - 1, $count);
// re-add the includes on top of the file
if ($count && preg_match('#/\* template head \*/(.+?)/\* end template head \*/#s', file_get_contents($compiledFile), $m)) {
$output = '<?php ' . $m[1] . ' ?>' . $output;
}
return $output;
}
/**
* @param $match
*
* @return mixed
*/
public static function unescapePhp($match)
{
return preg_replace('{<\?php /\*' . $match[1] . '\*/ echo \'(.+?)\'; \?>}s', '$1', $match[2]);
}
}

View File

@@ -1,96 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Generic else block, it supports all builtin optional-display blocks which are if/for/foreach/loop/with.
* If any of those block contains an else statement, the content between {else} and {/block} (you do not
* need to close the else block) will be shown if the block's condition has no been met
* Example :
* <code>
* {foreach $array val}
* $array is not empty so we display it's values : {$val}
* {else}
* if this shows, it means that $array is empty or doesn't exist.
* {/foreach}
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginElse extends BlockPlugin implements ICompilableBlock
{
public function init()
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
* @throws CompilationException
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$preContent = '';
while (true) {
$preContent .= $compiler->removeTopBlock();
$block = &$compiler->getCurrentBlock();
if (!$block) {
throw new CompilationException($compiler, 'An else block was found but it was not preceded by an if or other else-able construct');
}
$interfaces = class_implements($block['class']);
if (in_array('Dwoo\IElseable', $interfaces) !== false) {
break;
}
}
$params['initialized'] = true;
$compiler->injectBlock($type, $params);
return $preContent;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
if (!isset($params['initialized'])) {
return '';
}
$block = &$compiler->getCurrentBlock();
$block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
return '';
}
}

View File

@@ -1,95 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\IElseable;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Acts as a php elseif block, allowing you to add one more condition
* if the previous one(s) didn't match. See the {if} plugin for syntax details.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginElseif extends PluginIf implements ICompilableBlock, IElseable
{
/**
* @param array $rest
*/
public function init(array $rest)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$preContent = '';
while (true) {
$preContent .= $compiler->removeTopBlock();
$block = &$compiler->getCurrentBlock();
$interfaces = class_implements($block['class']);
if (in_array('Dwoo\IElseable', $interfaces) !== false) {
break;
}
}
$params['initialized'] = true;
$compiler->injectBlock($type, $params);
return $preContent;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
if (!isset($params['initialized'])) {
return '';
}
$tokens = $compiler->getParamTokens($params);
$params = $compiler->getCompiledParams($params);
$pre = Compiler::PHP_OPEN . 'elseif (' . implode(' ', self::replaceKeywords($params['*'], $tokens['*'], $compiler)) . ") {\n" . Compiler::PHP_CLOSE;
$post = Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$post .= $params['hasElse'];
}
$block = &$compiler->getCurrentBlock();
$block['params']['hasElse'] = $pre . $content . $post;
return '';
}
}

View File

@@ -1,192 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\IElseable;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Similar to the php for block
* <pre>
* * name : for name to access it's iterator variables through {$.for.name.var} see {@link
* http://wiki.dwoo.org/index.php/IteratorVariables} for details
* * from : array to iterate from (which equals 0) or a number as a start value
* * to : value to stop iterating at (equals count($array) by default if you set an array in from)
* * step : defines the incrementation of the pointer at each iteration
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginFor extends BlockPlugin implements ICompilableBlock, IElseable
{
public static $cnt = 0;
/**
* @param $name
* @param $from
* @param null $to
* @param int $step
* @param int $skip
*/
public function init($name, $from, $to = null, $step = 1, $skip = 0)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
// get block params and save the current template pointer to use it in the postProcessing method
$currentBlock = &$compiler->getCurrentBlock();
$currentBlock['params']['tplPointer'] = $compiler->getPointer();
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$params = $compiler->getCompiledParams($params);
$tpl = $compiler->getTemplateSource($params['tplPointer']);
// assigns params
$from = $params['from'];
$name = $params['name'];
$step = $params['step'];
$to = $params['to'];
// evaluates which global variables have to be computed
$varName = '$dwoo.for.' . trim($name, '"\'') . '.';
$shortVarName = '$.for.' . trim($name, '"\'') . '.';
$usesAny = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
$usesFirst = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
$usesLast = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
$usesIndex = strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
$usesIteration = $usesFirst || $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
$usesShow = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
$usesTotal = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
if (strpos($name, '$this->scope[') !== false) {
$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
}
// gets foreach id
$cnt = self::$cnt ++;
// builds pre processing output for
$out = Compiler::PHP_OPEN . "\n" . '$_for' . $cnt . '_from = ' . $from . ';' . "\n" . '$_for' . $cnt . '_to = ' . $to . ';' . "\n" . '$_for' . $cnt . '_step = abs(' . $step . ');' . "\n" . 'if (is_numeric($_for' . $cnt . '_from) && !is_numeric($_for' . $cnt . '_to)) { $this->triggerError(\'For requires the <em>to</em> parameter when using a numerical <em>from</em>\'); }' . "\n" . '$tmp_shows = $this->isArray($_for' . $cnt . '_from, true) || (is_numeric($_for' . $cnt . '_from) && (abs(($_for' . $cnt . '_from - $_for' . $cnt . '_to)/$_for' . $cnt . '_step) !== 0 || $_for' . $cnt . '_from == $_for' . $cnt . '_to));';
// adds for properties
if ($usesAny) {
$out .= "\n" . '$this->globals["for"][' . $name . '] = array' . "\n(";
if ($usesIndex) {
$out .= "\n\t" . '"index" => 0,';
}
if ($usesIteration) {
$out .= "\n\t" . '"iteration" => 1,';
}
if ($usesFirst) {
$out .= "\n\t" . '"first" => null,';
}
if ($usesLast) {
$out .= "\n\t" . '"last" => null,';
}
if ($usesShow) {
$out .= "\n\t" . '"show" => $tmp_shows,';
}
if ($usesTotal) {
$out .= "\n\t" . '"total" => $this->isArray($_for' . $cnt . '_from) ? floor($this->count($_for' . $cnt . '_from) / $_for' . $cnt . '_step) : (is_numeric($_for' . $cnt . '_from) ? abs(($_for' . $cnt . '_to + 1 - $_for' . $cnt . '_from)/$_for' . $cnt . '_step) : 0),';
}
$out .= "\n);\n" . '$_for' . $cnt . '_glob =& $this->globals["for"][' . $name . '];';
}
// checks if for must be looped
$out .= "\n" . 'if ($tmp_shows)' . "\n{";
// set from/to to correct values if an array was given
$out .= "\n\t" . 'if ($this->isArray($_for' . $cnt . '_from' . (isset($params['hasElse']) ? ', true' : '') . ') == true) {
$_for' . $cnt . '_to = is_numeric($_for' . $cnt . '_to) ? $_for' . $cnt . '_to - $_for' . $cnt . '_step : $this->count($_for' . $cnt . '_from) - 1;
$_for' . $cnt . '_from = 0;
}';
// if input are pure numbers it shouldn't reorder them, if it's variables it gets too messy though so in that case a counter should be used
$reverse = false;
$condition = '<=';
$incrementer = '+';
if (preg_match('{^(["\']?)([0-9]+)\1$}', $from, $mN1) && preg_match('{^(["\']?)([0-9]+)\1$}', $to, $mN2)) {
$from = (int)$mN1[2];
$to = (int)$mN2[2];
if ($from > $to) {
$reverse = true;
$condition = '>=';
$incrementer = '-';
}
}
// reverse from and to if needed
if (!$reverse) {
$out .= "\n\t" . 'if ($_for' . $cnt . '_from > $_for' . $cnt . '_to) {
$tmp = $_for' . $cnt . '_from;
$_for' . $cnt . '_from = $_for' . $cnt . '_to;
$_for' . $cnt . '_to = $tmp;
}';
}
$out .= "\n\t" . 'for ($this->scope[' . $name . '] = $_for' . $cnt . '_from; $this->scope[' . $name . '] ' . $condition . ' $_for' . $cnt . '_to; $this->scope[' . $name . '] ' . $incrementer . '= $_for' . $cnt . '_step)' . "\n\t{";
// updates properties
if ($usesIndex) {
$out .= "\n\t\t" . '$_for' . $cnt . '_glob["index"] = $this->scope[' . $name . '];';
}
if ($usesFirst) {
$out .= "\n\t\t" . '$_for' . $cnt . '_glob["first"] = (string) ($_for' . $cnt . '_glob["iteration"] === 1);';
}
if ($usesLast) {
$out .= "\n\t\t" . '$_for' . $cnt . '_glob["last"] = (string) ($_for' . $cnt . '_glob["iteration"] === $_for' . $cnt . '_glob["total"]);';
}
$out .= "\n/* -- for start output */\n" . Compiler::PHP_CLOSE;
// build post processing output and cache it
$postOut = Compiler::PHP_OPEN . '/* -- for end output */';
// update properties
if ($usesIteration) {
$postOut .= "\n\t\t" . '$_for' . $cnt . '_glob["iteration"]+=1;';
}
// end loop
$postOut .= "\n\t}\n}\n" . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$postOut .= $params['hasElse'];
}
return $out . $content . $postOut;
}
}

View File

@@ -1,201 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\IElseable;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Similar to the php foreach block, loops over an array.
* Note that if you don't provide the item parameter, the key will act as item
* <pre>
* * from : the array that you want to iterate over
* * key : variable name for the key (or for the item if item is not defined)
* * item : variable name for each item
* * name : foreach name to access it's iterator variables through {$.foreach.name.var} see {@link
* http://wiki.dwoo.org/index.php/IteratorVariables} for details
* </pre>
* Example :
* <code>
* {foreach $array val}
* {$val.something}
* {/foreach}
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginForeach extends BlockPlugin implements ICompilableBlock, IElseable
{
public static $cnt = 0;
/**
* @param $from
* @param null $key
* @param null $item
* @param string $name
* @param null $implode
*/
public function init($from, $key = null, $item = null, $name = 'default', $implode = null)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
// get block params and save the current template pointer to use it in the postProcessing method
$currentBlock = &$compiler->getCurrentBlock();
$currentBlock['params']['tplPointer'] = $compiler->getPointer();
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
* @throws CompilationException
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$params = $compiler->getCompiledParams($params);
$tpl = $compiler->getTemplateSource($params['tplPointer']);
// assigns params
$src = $params['from'];
if ($params['item'] !== 'null') {
if ($params['key'] !== 'null') {
$key = $params['key'];
}
$val = $params['item'];
} elseif ($params['key'] !== 'null') {
$val = $params['key'];
} else {
throw new CompilationException($compiler, 'Foreach <em>item</em> parameter missing');
}
$name = $params['name'];
if (substr($val, 0, 1) !== '"' && substr($val, 0, 1) !== '\'') {
throw new CompilationException($compiler, 'Foreach <em>item</em> parameter must be of type string');
}
if (isset($key) && substr($val, 0, 1) !== '"' && substr($val, 0, 1) !== '\'') {
throw new CompilationException($compiler, 'Foreach <em>key</em> parameter must be of type string');
}
// evaluates which global variables have to be computed
$varName = '$dwoo.foreach.' . trim($name, '"\'') . '.';
$shortVarName = '$.foreach.' . trim($name, '"\'') . '.';
$usesAny = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
$usesFirst = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
$usesLast = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
$usesIndex = $usesFirst || strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
$usesIteration = $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
$usesShow = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
$usesTotal = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
if (strpos($name, '$this->scope[') !== false) {
$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
}
// override globals vars if implode is used
if ($params['implode'] !== 'null') {
$implode = $params['implode'];
$usesAny = true;
$usesLast = true;
$usesIteration = true;
$usesTotal = true;
}
// gets foreach id
$cnt = self::$cnt ++;
// build pre content output
$pre = Compiler::PHP_OPEN . "\n" . '$_fh' . $cnt . '_data = ' . $src . ';';
// adds foreach properties
if ($usesAny) {
$pre .= "\n" . '$this->globals["foreach"][' . $name . '] = array' . "\n(";
if ($usesIndex) {
$pre .= "\n\t" . '"index" => 0,';
}
if ($usesIteration) {
$pre .= "\n\t" . '"iteration" => 1,';
}
if ($usesFirst) {
$pre .= "\n\t" . '"first" => null,';
}
if ($usesLast) {
$pre .= "\n\t" . '"last" => null,';
}
if ($usesShow) {
$pre .= "\n\t" . '"show" => $this->isArray($_fh' . $cnt . '_data, true),';
}
if ($usesTotal) {
$pre .= "\n\t" . '"total" => $this->count($_fh' . $cnt . '_data),';
}
$pre .= "\n);\n" . '$_fh' . $cnt . '_glob =& $this->globals["foreach"][' . $name . '];';
}
// checks if foreach must be looped
$pre .= "\n" . 'if ($this->isTraversable($_fh' . $cnt . '_data' . (isset($params['hasElse']) ? ', true' : '') . ') == true)' . "\n{";
// iterates over keys
$pre .= "\n\t" . 'foreach ($_fh' . $cnt . '_data as ' . (isset($key) ? '$this->scope[' . $key . ']=>' : '') . '$this->scope[' . $val . '])' . "\n\t{";
// updates properties
if ($usesFirst) {
$pre .= "\n\t\t" . '$_fh' . $cnt . '_glob["first"] = (string) ($_fh' . $cnt . '_glob["index"] === 0);';
}
if ($usesLast) {
$pre .= "\n\t\t" . '$_fh' . $cnt . '_glob["last"] = (string) ($_fh' . $cnt . '_glob["iteration"] === $_fh' . $cnt . '_glob["total"]);';
}
$pre .= "\n/* -- foreach start output */\n" . Compiler::PHP_CLOSE;
// build post content output
$post = Compiler::PHP_OPEN . "\n";
if (isset($implode)) {
$post .= '/* -- implode */' . "\n" . 'if (!$_fh' . $cnt . '_glob["last"]) {' . "\n\t" . 'echo ' . $implode . ";\n}\n";
}
$post .= '/* -- foreach end output */';
// update properties
if ($usesIndex) {
$post .= "\n\t\t" . '$_fh' . $cnt . '_glob["index"]+=1;';
}
if ($usesIteration) {
$post .= "\n\t\t" . '$_fh' . $cnt . '_glob["iteration"]+=1;';
}
// end loop
$post .= "\n\t}\n}" . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$post .= $params['hasElse'];
}
return $pre . $content . $post;
}
}

View File

@@ -1,73 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* This plugin serves as a {else} block specifically for the {foreach} plugin.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginForeachelse extends BlockPlugin implements ICompilableBlock
{
public function init()
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$with = &$compiler->findBlock('foreach', true);
$params['initialized'] = true;
$compiler->injectBlock($type, $params);
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
if (!isset($params['initialized'])) {
return '';
}
$block = &$compiler->getCurrentBlock();
$block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
return '';
}
}

View File

@@ -1,73 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* This plugin serves as a {else} block specifically for the {for} plugin.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginForelse extends BlockPlugin implements ICompilableBlock
{
public function init()
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$with = &$compiler->findBlock('for', true);
$params['initialized'] = true;
$compiler->injectBlock($type, $params);
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
if (!isset($params['initialized'])) {
return '';
}
$block = &$compiler->getCurrentBlock();
$block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
return '';
}
}

View File

@@ -1,274 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\IElseable;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Conditional block, the syntax is very similar to the php one, allowing () || && and
* other php operators. Additional operators and their equivalent php syntax are as follow :.
* eq -> ==
* neq or ne -> !=
* gte or ge -> >=
* lte or le -> <=
* gt -> >
* lt -> <
* mod -> %
* not -> !
* X is [not] div by Y -> (X % Y) == 0
* X is [not] even [by Y] -> (X % 2) == 0 or ((X/Y) % 2) == 0
* X is [not] odd [by Y] -> (X % 2) != 0 or ((X/Y) % 2) != 0
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginIf extends BlockPlugin implements ICompilableBlock, IElseable
{
/**
* @param array $rest
*/
public function init(array $rest)
{
}
/**
* @param array $params
* @param array $tokens
* @param Compiler $compiler
*
* @return array
* @throws CompilationException
*/
public static function replaceKeywords(array $params, array $tokens, Compiler $compiler)
{
$p = array();
reset($params);
while (list($k, $v) = each($params)) {
$v = (string)$v;
if (substr($v, 0, 1) === '"' || substr($v, 0, 1) === '\'') {
$vmod = strtolower(substr($v, 1, - 1));
} else {
$vmod = strtolower($v);
}
switch ($vmod) {
case 'and':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '&&';
} else {
$p[] = $v;
}
break;
case 'or':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '||';
} else {
$p[] = $v;
}
break;
case 'xor':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '^';
} else {
$p[] = $v;
}
break;
case 'eq':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '==';
} else {
$p[] = $v;
}
break;
case 'ne':
case 'neq':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '!=';
} else {
$p[] = $v;
}
break;
case 'gte':
case 'ge':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '>=';
} else {
$p[] = $v;
}
break;
case 'lte':
case 'le':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '<=';
} else {
$p[] = $v;
}
break;
case 'gt':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '>';
} else {
$p[] = $v;
}
break;
case 'lt':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '<';
} else {
$p[] = $v;
}
break;
case 'mod':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '%';
} else {
$p[] = $v;
}
break;
case 'not':
if ($tokens[$k] === Compiler::T_UNQUOTED_STRING) {
$p[] = '!';
} else {
$p[] = $v;
}
break;
case '<>':
$p[] = '!=';
break;
case '==':
case '!=':
case '>=':
case '<=':
case '>':
case '<':
case '===':
case '!==':
case '%':
case '!':
case '^':
$p[] = $vmod;
break;
case 'is':
if ($tokens[$k] !== Compiler::T_UNQUOTED_STRING) {
$p[] = $v;
break;
}
if (isset($params[$k + 1]) && strtolower(trim($params[$k + 1], '"\'')) === 'not' && $tokens[$k + 1] === Compiler::T_UNQUOTED_STRING) {
$negate = true;
next($params);
} else {
$negate = false;
}
$ptr = 1 + (int)$negate;
if ($tokens[$k + $ptr] !== Compiler::T_UNQUOTED_STRING) {
break;
}
if (!isset($params[$k + $ptr])) {
$params[$k + $ptr] = '';
} else {
$params[$k + $ptr] = trim($params[$k + $ptr], '"\'');
}
switch ($params[$k + $ptr]) {
case 'div':
if (isset($params[$k + $ptr + 1]) && strtolower(trim($params[$k + $ptr + 1], '"\'')) === 'by') {
$p[] = ' % ' . $params[$k + $ptr + 2] . ' ' . ($negate ? '!' : '=') . '== 0';
next($params);
next($params);
next($params);
} else {
throw new CompilationException($compiler, 'If : Syntax error : syntax should be "if $a is [not] div by $b", found ' . $params[$k - 1] . ' is ' . ($negate ? 'not ' : '') . 'div ' . $params[$k + $ptr + 1] . ' ' . $params[$k + $ptr + 2]);
}
break;
case 'even':
$a = array_pop($p);
if (isset($params[$k + $ptr + 1]) && strtolower(trim($params[$k + $ptr + 1], '"\'')) === 'by') {
$b = $params[$k + $ptr + 2];
$p[] = '(' . $a . ' / ' . $b . ') % 2 ' . ($negate ? '!' : '=') . '== 0';
next($params);
next($params);
} else {
$p[] = $a . ' % 2 ' . ($negate ? '!' : '=') . '== 0';
}
next($params);
break;
case 'odd':
$a = array_pop($p);
if (isset($params[$k + $ptr + 1]) && strtolower(trim($params[$k + $ptr + 1], '"\'')) === 'by') {
$b = $params[$k + $ptr + 2];
$p[] = '(' . $a . ' / ' . $b . ') % 2 ' . ($negate ? '=' : '!') . '== 0';
next($params);
next($params);
} else {
$p[] = $a . ' % 2 ' . ($negate ? '=' : '!') . '== 0';
}
next($params);
break;
default:
throw new CompilationException($compiler, 'If : Syntax error : syntax should be "if $a is [not] (div|even|odd) [by $b]", found ' . $params[$k - 1] . ' is ' . $params[$k + $ptr + 1]);
}
break;
default:
$p[] = $v;
}
}
return $p;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$tokens = $compiler->getParamTokens($params);
$params = $compiler->getCompiledParams($params);
$pre = Compiler::PHP_OPEN . 'if (' . implode(' ', self::replaceKeywords($params['*'], $tokens['*'], $compiler)) . ") {\n" . Compiler::PHP_CLOSE;
$post = Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$post .= $params['hasElse'];
}
return $pre . $content . $post;
}
}

View File

@@ -1,170 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\IElseable;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Loops over an array and moves the scope into each value, allowing for shorter loop constructs.
* Note that to access the array key within a loop block, you have to use the {$_key} variable,
* you can not specify it yourself.
* <pre>
* * from : the array that you want to iterate over
* * name : loop name to access it's iterator variables through {$.loop.name.var} see {@link
* http://wiki.dwoo.org/index.php/IteratorVariables} for details
* </pre>
* Example :
* instead of a foreach block such as :
* <code>
* {foreach $variable value}
* {$value.foo} {$value.bar}
* {/foreach}
* </code>
* you can do :
* <code>
* {loop $variable}
* {$foo} {$bar}
* {/loop}
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginLoop extends BlockPlugin implements ICompilableBlock, IElseable
{
public static $cnt = 0;
/**
* @param $from
* @param string $name
*/
public function init($from, $name = 'default')
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
// get block params and save the current template pointer to use it in the postProcessing method
$currentBlock = &$compiler->getCurrentBlock();
$currentBlock['params']['tplPointer'] = $compiler->getPointer();
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$params = $compiler->getCompiledParams($params);
$tpl = $compiler->getTemplateSource($params['tplPointer']);
// assigns params
$src = $params['from'];
$name = $params['name'];
// evaluates which global variables have to be computed
$varName = '$dwoo.loop.' . trim($name, '"\'') . '.';
$shortVarName = '$.loop.' . trim($name, '"\'') . '.';
$usesAny = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
$usesFirst = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
$usesLast = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
$usesIndex = $usesFirst || strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
$usesIteration = $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
$usesShow = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
$usesTotal = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
if (strpos($name, '$this->scope[') !== false) {
$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
}
// gets foreach id
$cnt = self::$cnt ++;
// builds pre processing output
$pre = Compiler::PHP_OPEN . "\n" . '$_loop' . $cnt . '_data = ' . $src . ';';
// adds foreach properties
if ($usesAny) {
$pre .= "\n" . '$this->globals["loop"][' . $name . '] = array' . "\n(";
if ($usesIndex) {
$pre .= "\n\t" . '"index" => 0,';
}
if ($usesIteration) {
$pre .= "\n\t" . '"iteration" => 1,';
}
if ($usesFirst) {
$pre .= "\n\t" . '"first" => null,';
}
if ($usesLast) {
$pre .= "\n\t" . '"last" => null,';
}
if ($usesShow) {
$pre .= "\n\t" . '"show" => $this->isTraversable($_loop' . $cnt . '_data, true),';
}
if ($usesTotal) {
$pre .= "\n\t" . '"total" => $this->count($_loop' . $cnt . '_data),';
}
$pre .= "\n);\n" . '$_loop' . $cnt . '_glob =& $this->globals["loop"][' . $name . '];';
}
// checks if the loop must be looped
$pre .= "\n" . 'if ($this->isTraversable($_loop' . $cnt . '_data' . (isset($params['hasElse']) ? ', true' : '') . ') == true)' . "\n{";
// iterates over keys
$pre .= "\n\t" . 'foreach ($_loop' . $cnt . '_data as $tmp_key => $this->scope["-loop-"])' . "\n\t{";
// updates properties
if ($usesFirst) {
$pre .= "\n\t\t" . '$_loop' . $cnt . '_glob["first"] = (string) ($_loop' . $cnt . '_glob["index"] === 0);';
}
if ($usesLast) {
$pre .= "\n\t\t" . '$_loop' . $cnt . '_glob["last"] = (string) ($_loop' . $cnt . '_glob["iteration"] === $_loop' . $cnt . '_glob["total"]);';
}
$pre .= "\n\t\t" . '$_loop' . $cnt . '_scope = $this->setScope(array("-loop-"));' . "\n/* -- loop start output */\n" . Compiler::PHP_CLOSE;
// build post processing output and cache it
$post = Compiler::PHP_OPEN . "\n" . '/* -- loop end output */' . "\n\t\t" . '$this->setScope($_loop' . $cnt . '_scope, true);';
// update properties
if ($usesIndex) {
$post .= "\n\t\t" . '$_loop' . $cnt . '_glob["index"]+=1;';
}
if ($usesIteration) {
$post .= "\n\t\t" . '$_loop' . $cnt . '_glob["iteration"]+=1;';
}
// end loop
$post .= "\n\t}\n}\n" . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$post .= $params['hasElse'];
}
return $pre . $content . $post;
}
}

View File

@@ -1,159 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\IElseable;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Compatibility plugin for smarty templates, do not use otherwise, this is deprecated.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginSection extends BlockPlugin implements ICompilableBlock, IElseable
{
public static $cnt = 0;
/**
* @param $name
* @param $loop
* @param null $start
* @param null $step
* @param null $max
* @param bool $show
*/
public function init($name, $loop, $start = null, $step = null, $max = null, $show = true)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$output = Compiler::PHP_OPEN;
$params = $compiler->getCompiledParams($params);
// assigns params
$loop = $params['loop'];
$start = $params['start'];
$max = $params['max'];
$name = $params['name'];
$step = $params['step'];
$show = $params['show'];
// gets unique id
$cnt = self::$cnt ++;
$output .= '$this->globals[\'section\'][' . $name . '] = array();' . "\n" . '$_section' . $cnt . ' =& $this->globals[\'section\'][' . $name . '];' . "\n";
if ($loop !== 'null') {
$output .= '$_section' . $cnt . '[\'loop\'] = is_array($tmp = ' . $loop . ') ? count($tmp) : max(0, (int) $tmp);' . "\n";
} else {
$output .= '$_section' . $cnt . '[\'loop\'] = 1;' . "\n";
}
if ($show !== 'null') {
$output .= '$_section' . $cnt . '[\'show\'] = ' . $show . ";\n";
} else {
$output .= '$_section' . $cnt . '[\'show\'] = true;' . "\n";
}
if ($name !== 'null') {
$output .= '$_section' . $cnt . '[\'name\'] = ' . $name . ";\n";
} else {
$output .= '$_section' . $cnt . '[\'name\'] = true;' . "\n";
}
if ($max !== 'null') {
$output .= '$_section' . $cnt . '[\'max\'] = (int)' . $max . ";\n" . 'if($_section' . $cnt . '[\'max\'] < 0) { $_section' . $cnt . '[\'max\'] = $_section' . $cnt . '[\'loop\']; }' . "\n";
} else {
$output .= '$_section' . $cnt . '[\'max\'] = $_section' . $cnt . '[\'loop\'];' . "\n";
}
if ($step !== 'null') {
$output .= '$_section' . $cnt . '[\'step\'] = (int)' . $step . ' == 0 ? 1 : (int) ' . $step . ";\n";
} else {
$output .= '$_section' . $cnt . '[\'step\'] = 1;' . "\n";
}
if ($start !== 'null') {
$output .= '$_section' . $cnt . '[\'start\'] = (int)' . $start . ";\n";
} else {
$output .= '$_section' . $cnt . '[\'start\'] = $_section' . $cnt . '[\'step\'] > 0 ? 0 : $_section' . $cnt . '[\'loop\'] - 1;' . "\n" . 'if ($_section' . $cnt . '[\'start\'] < 0) { $_section' . $cnt . '[\'start\'] = max($_section' . $cnt . '[\'step\'] > 0 ? 0 : -1, $_section' . $cnt . '[\'loop\'] + $_section' . $cnt . '[\'start\']); } ' . "\n" . 'else { $_section' . $cnt . '[\'start\'] = min($_section' . $cnt . '[\'start\'], $_section' . $cnt . '[\'step\'] > 0 ? $_section' . $cnt . '[\'loop\'] : $_section' . $cnt . '[\'loop\'] -1); }' . "\n";
}
/* if ($usesAny) {
$output .= "\n".'$this->globals["section"]['.$name.'] = array'."\n(";
if ($usesIndex) $output .="\n\t".'"index" => 0,';
if ($usesIteration) $output .="\n\t".'"iteration" => 1,';
if ($usesFirst) $output .="\n\t".'"first" => null,';
if ($usesLast) $output .="\n\t".'"last" => null,';
if ($usesShow) $output .="\n\t".'"show" => ($this->isArray($_for'.$cnt.'_from, true)) || (is_numeric($_for'.$cnt.'_from) && $_for'.$cnt.'_from != $_for'.$cnt.'_to),';
if ($usesTotal) $output .="\n\t".'"total" => $this->isArray($_for'.$cnt.'_from) ? $this->count($_for'.$cnt.'_from) - $_for'.$cnt.'_skip : (is_numeric($_for'.$cnt.'_from) ? abs(($_for'.$cnt.'_to + 1 - $_for'.$cnt.'_from)/$_for'.$cnt.'_step) : 0),';
$out.="\n);\n".'$_section'.$cnt.'[\'glob\'] =& $this->globals["section"]['.$name.'];'."\n\n";
}
*/
$output .= 'if ($_section' . $cnt . '[\'show\']) {' . "\n";
if ($start === 'null' && $step === 'null' && $max === 'null') {
$output .= ' $_section' . $cnt . '[\'total\'] = $_section' . $cnt . '[\'loop\'];' . "\n";
} else {
$output .= ' $_section' . $cnt . '[\'total\'] = min(ceil(($_section' . $cnt . '[\'step\'] > 0 ? $_section' . $cnt . '[\'loop\'] - $_section' . $cnt . '[\'start\'] : $_section' . $cnt . '[\'start\'] + 1) / abs($_section' . $cnt . '[\'step\'])), $_section' . $cnt . '[\'max\']);' . "\n";
}
$output .= ' if ($_section' . $cnt . '[\'total\'] == 0) {' . "\n" . ' $_section' . $cnt . '[\'show\'] = false;' . "\n" . ' }' . "\n" . '} else {' . "\n" . ' $_section' . $cnt . '[\'total\'] = 0;' . "\n}\n";
$output .= 'if ($_section' . $cnt . '[\'show\']) {' . "\n";
$output .= "\t" . 'for ($this->scope[' . $name . '] = $_section' . $cnt . '[\'start\'], $_section' . $cnt . '[\'iteration\'] = 1; ' . '$_section' . $cnt . '[\'iteration\'] <= $_section' . $cnt . '[\'total\']; ' . '$this->scope[' . $name . '] += $_section' . $cnt . '[\'step\'], $_section' . $cnt . '[\'iteration\']++) {' . "\n";
$output .= "\t\t" . '$_section' . $cnt . '[\'rownum\'] = $_section' . $cnt . '[\'iteration\'];' . "\n";
$output .= "\t\t" . '$_section' . $cnt . '[\'index_prev\'] = $this->scope[' . $name . '] - $_section' . $cnt . '[\'step\'];' . "\n";
$output .= "\t\t" . '$_section' . $cnt . '[\'index_next\'] = $this->scope[' . $name . '] + $_section' . $cnt . '[\'step\'];' . "\n";
$output .= "\t\t" . '$_section' . $cnt . '[\'first\'] = ($_section' . $cnt . '[\'iteration\'] == 1);' . "\n";
$output .= "\t\t" . '$_section' . $cnt . '[\'last\'] = ($_section' . $cnt . '[\'iteration\'] == $_section' . $cnt . '[\'total\']);' . "\n";
$output .= Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN;
$output .= "\n\t}\n} " . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$output .= $params['hasElse'];
}
return $output;
}
}

View File

@@ -1,96 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Core;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Smarty compatibility layer for block plugins, this is used internally and you should not call it.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginSmartyinterface extends BlockPlugin implements ICompilableBlock
{
/**
* @param $__funcname
* @param $__functype
* @param array $rest
*/
public function init($__funcname, $__functype, array $rest = array())
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$params = $compiler->getCompiledParams($params);
$func = $params['__funcname'];
$pluginType = $params['__functype'];
$params = $params['*'];
if ($pluginType & Core::CUSTOM_PLUGIN) {
$customPlugins = $compiler->getCore()->getCustomPlugins();
$callback = $customPlugins[$func]['callback'];
if (is_array($callback)) {
if (is_object($callback[0])) {
$callback = '$this->customPlugins[\'' . $func . '\'][0]->' . $callback[1] . '(';
} else {
$callback = '' . $callback[0] . '::' . $callback[1] . '(';
}
} else {
$callback = $callback . '(';
}
} else {
$callback = 'smarty_block_' . $func . '(';
}
$paramsOut = '';
foreach ($params as $i => $p) {
$paramsOut .= var_export($i, true) . ' => ' . $p . ',';
}
$curBlock = &$compiler->getCurrentBlock();
$curBlock['params']['postOut'] = Compiler::PHP_OPEN . ' $_block_content = ob_get_clean(); $_block_repeat=false; echo ' . $callback . '$_tag_stack[count($_tag_stack)-1], $_block_content, $this, $_block_repeat); } array_pop($_tag_stack);' . Compiler::PHP_CLOSE;
return Compiler::PHP_OPEN . $prepend . ' if (!isset($_tag_stack)){ $_tag_stack = array(); } $_tag_stack[] = array(' . $paramsOut . '); $_block_repeat=true; ' . $callback . '$_tag_stack[count($_tag_stack)-1], null, $this, $_block_repeat); while ($_block_repeat) { ob_start();' . Compiler::PHP_CLOSE;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
return $content . $params['postOut'];
}
}

View File

@@ -1,89 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Strips the spaces at the beginning and end of each line and also the line breaks
* <pre>
* * mode : sets the content being stripped, available mode are 'default' or 'js'
* for javascript, which strips the comments to prevent syntax errors
* </pre>.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginStrip extends BlockPlugin implements ICompilableBlock
{
/**
* @param string $mode
*/
public function init($mode = 'default')
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return mixed|string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$params = $compiler->getCompiledParams($params);
$mode = trim($params['mode'], '"\'');
switch ($mode) {
case 'js':
case 'javascript':
$content = preg_replace('#(?<!:)//\s[^\r\n]*|/\*.*?\*/#s', '', $content);
case 'default':
default:
}
$content = preg_replace(array(
"/\n/",
"/\r/",
'/(<\?(?:php)?|<%)\s*/'
), array(
'',
'',
'$1 '
), preg_replace('#^\s*(.+?)\s*$#m', '$1', $content));
return $content;
}
}

View File

@@ -1,115 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-20
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Core;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Defines a sub-template that can then be called (even recursively) with the defined arguments
* <pre>
* * name : template name
* * rest : list of arguments and optional default values
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginTemplate extends BlockPlugin implements ICompilableBlock
{
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
* @throws CompilationException
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$params = $compiler->getCompiledParams($params);
$parsedParams = array();
if (!isset($params['*'])) {
$params['*'] = array();
}
foreach ($params['*'] as $param => $defValue) {
if (is_numeric($param)) {
$param = $defValue;
$defValue = null;
}
$param = trim($param, '\'"');
if (!preg_match('#^[a-z0-9_]+$#i', $param)) {
throw new CompilationException($compiler, 'Function : parameter names must contain only A-Z, 0-9 or _');
}
$parsedParams[$param] = $defValue;
}
$params['name'] = substr($params['name'], 1, - 1);
$params['*'] = $parsedParams;
$params['uuid'] = uniqid();
$compiler->addTemplatePlugin($params['name'], $parsedParams, $params['uuid']);
$currentBlock = &$compiler->getCurrentBlock();
$currentBlock['params'] = $params;
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string|void
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$paramstr = 'Dwoo\Core $dwoo';
$init = 'static $_callCnt = 0;' . "\n" . '$dwoo->scope[\' ' . $params['uuid'] . '\'.$_callCnt] = array();' . "\n" . '$_scope = $dwoo->setScope(array(\' ' . $params['uuid'] . '\'.($_callCnt++)));' . "\n";
$cleanup = '/* -- template end output */ $dwoo->setScope($_scope, true);';
foreach ($params['*'] as $param => $defValue) {
if ($defValue === null) {
$paramstr .= ', $' . $param;
} else {
$paramstr .= ', $' . $param . ' = ' . $defValue;
}
$init .= '$dwoo->scope[\'' . $param . '\'] = $' . $param . ";\n";
}
$init .= '/* -- template start output */';
$funcName = 'Plugin' . Core::toCamelCase($params['name']) . Core::toCamelCase($params['uuid']);
$search = array('$this->charset', '$this->', '$this,',);
$replacement = array('$dwoo->getCharset()', '$dwoo->', '$dwoo,',);
$content = str_replace($search, $replacement, $content);
$body = 'if (!function_exists(\'' . $funcName . "')) {\nfunction " . $funcName . '(' . $paramstr . ') {' . "\n$init" . Compiler::PHP_CLOSE . $prepend . $content . $append . Compiler::PHP_OPEN . $cleanup . "\n}\n}";
$compiler->addTemplatePlugin($params['name'], $params['*'], $params['uuid'], $body);
}
/**
* @param $name
* @param array $rest
*/
public function init($name, array $rest = array())
{
}
}

View File

@@ -1,119 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Block\Plugin as BlockPlugin;
/**
* Formats a string to the given format, you can wrap lines at a certain
* length and indent them
* <pre>
* * wrap : maximum line length
* * wrap_char : the character(s) to use to break the line
* * wrap_cut : if true, the words that are longer than $wrap are cut instead of overflowing
* * indent : amount of $indent_char to insert before every line
* * indent_char : character(s) to insert before every line
* * indent_first : amount of additional $indent_char to insert before the first line of each paragraphs
* * style : some predefined formatting styles that set up every required variables, can be "email" or "html"
* * assign : if set, the formatted text is assigned to that variable instead of being output
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginTextformat extends BlockPlugin
{
protected $wrap;
protected $wrapChar;
protected $wrapCut;
protected $indent;
protected $indChar;
protected $indFirst;
protected $assign;
/**
* @param int $wrap
* @param string $wrap_char
* @param bool $wrap_cut
* @param int $indent
* @param string $indent_char
* @param int $indent_first
* @param string $style
* @param string $assign
*/
public function init($wrap = 80, $wrap_char = "\r\n", $wrap_cut = false, $indent = 0, $indent_char = ' ', $indent_first = 0, $style = '', $assign = '')
{
if ($indent_char === 'tab') {
$indent_char = "\t";
}
switch ($style) {
case 'email':
$wrap = 72;
$indent_first = 0;
break;
case 'html':
$wrap_char = '<br />';
$indent_char = $indent_char == "\t" ? '&nbsp;&nbsp;&nbsp;&nbsp;' : '&nbsp;';
break;
}
$this->wrap = (int)$wrap;
$this->wrapChar = (string)$wrap_char;
$this->wrapCut = (bool)$wrap_cut;
$this->indent = (int)$indent;
$this->indChar = (string)$indent_char;
$this->indFirst = (int)$indent_first + $this->indent;
$this->assign = (string)$assign;
}
/**
* @return string
*/
public function process()
{
// gets paragraphs
$pgs = explode("\n", str_replace(array(
"\r\n",
"\r"
), "\n", $this->buffer));
while (list($i) = each($pgs)) {
if (empty($pgs[$i])) {
continue;
}
// removes line breaks and extensive white space
$pgs[$i] = preg_replace(array(
'#\s+#',
'#^\s*(.+?)\s*$#m'
), array(
' ',
'$1'
), str_replace("\n", '', $pgs[$i]));
// wordwraps + indents lines
$pgs[$i] = str_repeat($this->indChar, $this->indFirst) . wordwrap($pgs[$i], max($this->wrap - $this->indent, 1), $this->wrapChar . str_repeat($this->indChar, $this->indent), $this->wrapCut);
}
if ($this->assign !== '') {
$this->core->assignInScope(implode($this->wrapChar . $this->wrapChar, $pgs), $this->assign);
} else {
return implode($this->wrapChar . $this->wrapChar, $pgs);
}
}
}

View File

@@ -1,60 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Internal plugin used to wrap the template output, do not use in your templates as it will break them.
* This software is provided 'as-is', without any express or implied warranty.
*/
final class PluginTopLevelBlock extends BlockPlugin implements ICompilableBlock
{
public function init()
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '/* end template head */ ob_start(); /* template body */ ' . Compiler::PHP_CLOSE;
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
return $content . Compiler::PHP_OPEN . ' /* end template body */' . "\n" . 'return $this->buffer . ob_get_clean();';
}
}

View File

@@ -1,99 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\IElseable;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* Moves the scope down into the provided variable, allowing you to use shorter
* variable names if you repeatedly access values into a single array.
* The with block won't display anything at all if the provided scope is empty,
* so in effect it acts as {if $var}*content*{/if}
* <pre>
* * var : the variable name to move into
* </pre>
* Example :
* instead of the following :
* <code>
* {if $long.boring.prefix}
* {$long.boring.prefix.val} - {$long.boring.prefix.secondVal} - {$long.boring.prefix.thirdVal}
* {/if}
* </code>
* you can use :
* <code>
* {with $long.boring.prefix}
* {$val} - {$secondVal} - {$thirdVal}
* {/with}
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginWith extends BlockPlugin implements ICompilableBlock, IElseable
{
protected static $cnt = 0;
/**
* @param $var
*/
public function init($var)
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
$rparams = $compiler->getRealParams($params);
$cparams = $compiler->getCompiledParams($params);
$compiler->setScope($rparams['var']);
$pre = Compiler::PHP_OPEN . 'if (' . $cparams['var'] . ')' . "\n{\n" . '$_with' . (self::$cnt) . ' = $this->setScope("' . $rparams['var'] . '");' . "\n/* -- start with output */\n" . Compiler::PHP_CLOSE;
$post = Compiler::PHP_OPEN . "\n/* -- end with output */\n" . '$this->setScope($_with' . (self::$cnt ++) . ', true);' . "\n}\n" . Compiler::PHP_CLOSE;
if (isset($params['hasElse'])) {
$post .= $params['hasElse'];
}
return $pre . $content . $post;
}
}

View File

@@ -1,73 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Blocks
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Blocks;
use Dwoo\Compiler;
use Dwoo\Block\Plugin as BlockPlugin;
use Dwoo\ICompilable\Block as ICompilableBlock;
/**
* This plugin serves as a {else} block specifically for the {with} plugin.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginWithelse extends BlockPlugin implements ICompilableBlock
{
public function init()
{
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $type
*
* @return string
*/
public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
{
$with = &$compiler->findBlock('with', true);
$params['initialized'] = true;
$compiler->injectBlock($type, $params);
return '';
}
/**
* @param Compiler $compiler
* @param array $params
* @param string $prepend
* @param string $append
* @param string $content
*
* @return string
*/
public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
{
if (!isset($params['initialized'])) {
return '';
}
$block = &$compiler->getCurrentBlock();
$block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
return '';
}
}

View File

@@ -1,190 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Filters
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-18
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Filters;
use Dwoo\Filter;
/**
* Formats any html output (must be valid xml where every tag opened is closed)
* using a single tab for indenting. 'pre' and other whitespace sensitive
* tags should not be affected.
* It is not recommended to use this on every template if you render multiple
* templates per page, you should only use it once on the main page template so that
* everything is formatted in one pass.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginHtmlFormat extends Filter
{
/**
* tab count to auto-indent the source.
*
* @var int
*/
protected static $tabCount = - 1;
/**
* stores the additional data (following a tag) of the last call to open/close/singleTag.
*
* @var string
*/
protected static $lastCallAdd = '';
/**
* formats the input using the singleTag/closeTag/openTag functions.
* It is auto indenting the whole code, excluding <textarea>, <code> and <pre> tags that must be kept intact.
* Those tags must however contain only htmlentities-escaped text for everything to work properly.
* Inline tags are presented on a single line with their content
*
* @param string $input the xhtml to format
*
* @return string formatted xhtml
*/
public function process($input)
{
self::$tabCount = - 1;
// auto indent all but textareas & pre (or we have weird tabs inside)
$input = preg_replace_callback("#(<[^>]+>)(\s*)([^<]*)#", array(
'self',
'tagDispatcher'
), $input);
return $input;
}
/**
* helper function for format()'s preg_replace call.
*
* @param array $input array of matches (1=>tag, 2=>whitespace(optional), 3=>additional non-html content)
*
* @return string the indented tag
*/
protected static function tagDispatcher($input)
{
// textarea, pre, code tags and comments are to be left alone to avoid any non-wanted whitespace inside them so it just outputs them as they were
if (substr($input[1], 0, 9) == '<textarea' || substr($input[1], 0, 4) == '<pre' || substr($input[1], 0, 5) == '<code' || substr($input[1], 0, 4) == '<!--' || substr($input[1], 0, 9) == '<![CDATA[') {
return $input[1] . $input[3];
}
// closing textarea, code and pre tags and self-closed tags (i.e. <br />) are printed as singleTags because we didn't use openTag for the formers and the latter is a single tag
if (substr($input[1], 0, 10) == '</textarea' || substr($input[1], 0, 5) == '</pre' || substr($input[1], 0, 6) == '</code' || substr($input[1], - 2) == '/>') {
return self::singleTag($input[1], $input[3], $input[2]);
}
// it's the closing tag
if ($input[0][1] == '/') {
return self::closeTag($input[1], $input[3], $input[2]);
}
// opening tag
return self::openTag($input[1], $input[3], $input[2]);
}
/**
* returns an open tag and adds a tab into the auto indenting.
*
* @param string $tag content of the tag
* @param string $add additional data (anything before the following tag)
* @param string $whitespace white space between the tag and the additional data
*
* @return string
*/
protected static function openTag($tag, $add, $whitespace)
{
$tabs = str_pad('', self::$tabCount ++, "\t");
if (preg_match('#^<(a|label|option|textarea|h1|h2|h3|h4|h5|h6|strong|b|em|i|abbr|acronym|cite|span|sub|sup|u|s|title)(?: [^>]*|)>#', $tag)) {
// if it's one of those tag it's inline so it does not require a leading line break
$result = $tag . $whitespace . str_replace("\n", "\n" . $tabs, $add);
} elseif (substr($tag, 0, 9) == '<!DOCTYPE') {
// it's the doctype declaration so no line break here either
$result = $tabs . $tag;
} else {
// normal block tag
$result = "\n" . $tabs . $tag;
if (!empty($add)) {
$result .= "\n" . $tabs . "\t" . str_replace("\n", "\n\t" . $tabs, $add);
}
}
self::$lastCallAdd = $add;
return $result;
}
/**
* returns a closing tag and removes a tab from the auto indenting.
*
* @param string $tag content of the tag
* @param string $add additional data (anything before the following tag)
* @param string $whitespace white space between the tag and the additional data
*
* @return string
*/
protected static function closeTag($tag, $add, $whitespace)
{
$tabs = str_pad('', -- self::$tabCount, "\t");
// if it's one of those tag it's inline so it does not require a leading line break
if (preg_match('#^</(a|label|option|textarea|h1|h2|h3|h4|h5|h6|strong|b|em|i|abbr|acronym|cite|span|sub|sup|u|s|title)>#', $tag)) {
$result = $tag . $whitespace . str_replace("\n", "\n" . $tabs, $add);
} else {
$result = "\n" . $tabs . $tag;
if (!empty($add)) {
$result .= "\n" . $tabs . "\t" . str_replace("\n", "\n\t" . $tabs, $add);
}
}
self::$lastCallAdd = $add;
return $result;
}
/**
* returns a single tag with auto indenting.
*
* @param string $tag content of the tag
* @param string $add additional data (anything before the following tag)
*
* @return string
*/
protected static function singleTag($tag, $add, $whitespace)
{
$tabs = str_pad('', self::$tabCount, "\t");
// if it's img, br it's inline so it does not require a leading line break
// if it's a closing textarea, code or pre tag, it does not require a leading line break either or it creates whitespace at the end of those blocks
if (preg_match('#^<(img|br|/textarea|/pre|/code)(?: [^>]*|)>#', $tag)) {
$result = $tag . $whitespace;
if (!empty($add)) {
$result .= str_replace("\n", "\n" . $tabs, $add);
}
} else {
$result = "\n" . $tabs . $tag;
if (!empty($add)) {
$result .= "\n" . $tabs . str_replace("\n", "\n" . $tabs, $add);
}
}
self::$lastCallAdd = $add;
return $result;
}
}

View File

@@ -1,46 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Assigns a value to a variable
* <pre>
* * value : the value that you want to save
* * var : the variable name (without the leading $)
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginAssign extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param mixed $value
* @param mixed $var
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $var)
{
return '$this->assignInScope(' . $value . ', ' . $var . ')';
}
}

View File

@@ -1,56 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.4
* @date 2017-03-01
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Capitalizes the first letter of each word
* <pre>
* * value : the string to capitalize
* * numwords : if true, the words containing numbers are capitalized as well
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCapitalize extends Plugin
{
/**
* @param string $value
* @param bool $numwords
*
* @return string
*/
public function process($value, $numwords = false)
{
if ($numwords || preg_match('#^[^0-9]+$#', $value)) {
return mb_convert_case((string)$value, MB_CASE_TITLE, $this->core->getCharset());
} else {
$bits = explode(' ', (string)$value);
$out = '';
foreach ($bits as $k => $v){
if (preg_match('#^[^0-9]+$#', $v)) {
$out .= ' ' . mb_convert_case($v, MB_CASE_TITLE, $this->core->getCharset());
} else {
$out .= ' ' . $v;
}
}
return substr($out, 1);
}
}
}

View File

@@ -1,44 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Concatenates any number of variables or strings fed into it
* <pre>
* * rest : two or more strings that will be merged into one
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCat extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param array $rest
*
* @return string
*/
public static function compile(Compiler $compiler, $value, array $rest)
{
return '(' . $value . ').(' . implode(').(', $rest) . ')';
}
}

View File

@@ -1,49 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Counts the characters in a string
* <pre>
* * value : the string to process
* * count_spaces : if true, the white-space characters are counted as well
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCountCharacters extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param bool $count_spaces
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $count_spaces = false)
{
if ($count_spaces === 'false') {
return 'preg_match_all(\'#[^\s\pZ]#u\', ' . $value . ', $tmp)';
}
return 'mb_strlen(' . $value . ', $this->charset)';
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Counts the paragraphs in a string
* <pre>
* * value : the string to process
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCountParagraphs extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
*
* @return string
*/
public static function compile(Compiler $compiler, $value)
{
return '(preg_match_all(\'#[\r\n]+#\', ' . $value . ', $tmp)+1)';
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Counts the sentences in a string
* <pre>
* * value : the string to process
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCountSentences extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
*
* @return string
*/
public static function compile(Compiler $compiler, $value)
{
return "preg_match_all('#[\\w\\pL]\\.(?![\\w\\pL])#u', $value, \$tmp)";
}
}

View File

@@ -1,37 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Counts the words in a string
* <pre>
* * value : the string to process
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCountWords extends Plugin implements ICompilable
{
public static function compile(Compiler $compiler, $value)
{
return 'preg_match_all(strcasecmp($this->charset, \'utf-8\')===0 ? \'#[\w\pL]+#u\' : \'#\w+#\', ' . $value . ', $tmp)';
}
}

View File

@@ -1,94 +0,0 @@
<?php
/**
* Copyright (c) 2013-2016
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2016 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.0
* @date 2016-09-19
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Initiates a counter that is incremented every time you call it
* <pre>
* * name : the counter name, define it if you want to have multiple concurrent counters
* * start : the start value, if it's set, it will reset the counter to this value, defaults to 1
* * skip : the value to add to the counter at each call, defaults to 1
* * direction : "up" (default) or "down" to define whether the counter increments or decrements
* * print : if false, the counter will not output the current count, defaults to true
* * assign : if set, the counter is saved into the given variable and does not output anything, overriding the print
* parameter
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCounter extends Plugin
{
protected $counters = array();
/**
* @param string $name
* @param null $start
* @param null $skip
* @param null $direction
* @param null $print
* @param null $assign
*
* @return mixed
*/
public function process($name = 'default', $start = null, $skip = null, $direction = null, $print = null, $assign = null)
{
// init counter
if (!isset($this->counters[$name])) {
$this->counters[$name] = array(
'count' => $start === null ? 1 : (int)$start,
'skip' => $skip === null ? 1 : (int)$skip,
'print' => $print === null ? true : (bool)$print,
'assign' => $assign === null ? null : (string)$assign,
'direction' => strtolower($direction) === 'down' ? - 1 : 1,
);
} // increment
else {
// override setting if present
if ($skip !== null) {
$this->counters[$name]['skip'] = (int)$skip;
}
if ($direction !== null) {
$this->counters[$name]['direction'] = strtolower($direction) === 'down' ? - 1 : 1;
}
if ($print !== null) {
$this->counters[$name]['print'] = (bool)$print;
}
if ($assign !== null) {
$this->counters[$name]['assign'] = (string)$assign;
}
if ($start !== null) {
$this->counters[$name]['count'] = (int)$start;
} else {
$this->counters[$name]['count'] += ($this->counters[$name]['skip'] * $this->counters[$name]['direction']);
}
}
$out = $this->counters[$name]['count'];
if ($this->counters[$name]['assign'] !== null) {
$this->core->assignInScope($out, $this->counters[$name]['assign']);
} elseif ($this->counters[$name]['print'] === true) {
return $out;
}
}
}

View File

@@ -1,91 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Cycles between several values and returns one of them on each call
* <pre>
* * name : the cycler name, specify if you need to have multiple concurrent cycles running
* * values : an array of values or a string of values delimited by $delimiter
* * print : if false, the pointer will go to the next one but not print anything
* * advance : if false, the pointer will not advance to the next value
* * delimiter : the delimiter used to split values if they are provided as a string
* * assign : if set, the value is saved in that variable instead of being output
* * reset : if true, the pointer is reset to the first value
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginCycle extends Plugin
{
protected $cycles = array();
/**
* @param string $name
* @param null $values
* @param bool $print
* @param bool $advance
* @param string $delimiter
* @param null $assign
* @param bool $reset
*
* @return string|null
*/
public function process($name = 'default', $values = null, $print = true, $advance = true, $delimiter = ',', $assign = null, $reset = false)
{
if ($values !== null) {
if (is_string($values)) {
$values = explode($delimiter, $values);
}
if (!isset($this->cycles[$name]) || $this->cycles[$name]['values'] !== $values) {
$this->cycles[$name]['index'] = 0;
}
$this->cycles[$name]['values'] = array_values($values);
} elseif (isset($this->cycles[$name])) {
$values = $this->cycles[$name]['values'];
}
if ($reset) {
$this->cycles[$name]['index'] = 0;
}
if ($print) {
$out = $values[$this->cycles[$name]['index']];
} else {
$out = null;
}
if ($advance) {
if ($this->cycles[$name]['index'] >= count($values) - 1) {
$this->cycles[$name]['index'] = 0;
} else {
++ $this->cycles[$name]['index'];
}
}
if ($assign === null) {
return $out;
}
$this->core->assignInScope($out, $assign);
return null;
}
}

View File

@@ -1,92 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Core;
use Dwoo\Plugin;
/**
* Formats a date
* <pre>
* * value : the date, as a unix timestamp, mysql datetime or whatever strtotime() can parse
* * format : output format, see {@link http://php.net/strftime} for details
* * default : a default timestamp value, if the first one is empty
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginDateFormat extends Plugin
{
/**
* @param mixed $value
* @param string $format
* @param null $default
*
* @return string
*/
public function process($value, $format = '%b %e, %Y', $default = null)
{
if (!empty($value)) {
// convert if it's not a valid unix timestamp
if (preg_match('#^-?\d{1,10}$#', $value) === 0) {
$value = strtotime($value);
}
} elseif (!empty($default)) {
// convert if it's not a valid unix timestamp
if (preg_match('#^-?\d{1,10}$#', $default) === 0) {
$value = strtotime($default);
} else {
$value = $default;
}
} else {
return '';
}
// Credits for that windows compat block to Monte Ohrt who made smarty's date_format plugin
if (DIRECTORY_SEPARATOR == '\\') {
$_win_from = array(
'%D',
'%h',
'%n',
'%r',
'%R',
'%t',
'%T'
);
$_win_to = array(
'%m/%d/%y',
'%b',
"\n",
'%I:%M:%S %p',
'%H:%M',
"\t",
'%H:%M:%S'
);
if (strpos($format, '%e') !== false) {
$_win_from[] = '%e';
$_win_to[] = sprintf('%\' 2d', date('j', $value));
}
if (strpos($format, '%l') !== false) {
$_win_from[] = '%l';
$_win_to[] = sprintf('%\' 2d', date('h', $value));
}
$format = str_replace($_win_from, $_win_to, $format);
}
return strftime($format, $value);
}
}

View File

@@ -1,45 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Returns a variable or a default value if it's empty
* <pre>
* * value : the variable to check
* * default : fallback value if the first one is empty
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginDefault extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param mixed $value
* @param string $default
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $default = '')
{
return '(($tmp = ' . $value . ')===null||$tmp===\'\' ? ' . $default . ' : $tmp)';
}
}

View File

@@ -1,210 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
use Iterator;
use ReflectionObject;
/**
* Dumps values of the given variable, or the entire data if nothing provided
* <pre>
* * var : the variable to display
* * show_methods : if set to true, the public methods of any object encountered are also displayed
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginDump extends Plugin
{
protected $outputObjects;
protected $outputMethods;
/**
* @param string $var
* @param bool $show_methods
*
* @return string
*/
public function process($var = '$', $show_methods = false)
{
$this->outputMethods = $show_methods;
if ($var === '$') {
$var = $this->core->getData();
$out = '<div style="background:#aaa; padding:5px; margin:5px; color:#000;">data';
} else {
$out = '<div style="background:#aaa; padding:5px; margin:5px; color:#000;">dump';
}
$this->outputObjects = array();
if (!is_array($var)) {
if (is_object($var)) {
return $this->exportObj('', $var);
} else {
return $this->exportVar('', $var);
}
}
$scope = $this->core->getScope();
if ($var === $scope) {
$out .= ' (current scope): <div style="background:#ccc;">';
} else {
$out .= ':<div style="padding-left:20px;">';
}
$out .= $this->export($var, $scope);
return $out . '</div></div>';
}
/**
* @param $var
* @param $scope
*
* @return string
*/
protected function export($var, $scope)
{
$out = '';
foreach ($var as $i => $v) {
if (is_array($v) || (is_object($v) && $v instanceof Iterator)) {
$out .= $i . ' (' . (is_array($v) ? 'array' : 'object: ' . get_class($v)) . ')';
if ($v === $scope) {
$out .= ' (current scope):<div style="background:#ccc;padding-left:20px;">' . $this->export($v, $scope) . '</div>';
} else {
$out .= ':<div style="padding-left:20px;">' . $this->export($v, $scope) . '</div>';
}
} elseif (is_object($v)) {
$out .= $this->exportObj($i . ' (object: ' . get_class($v) . '):', $v);
} else {
$out .= $this->exportVar($i . ' = ', $v);
}
}
return $out;
}
/**
* @param $i
* @param $v
*
* @return string
*/
protected function exportVar($i, $v)
{
if (is_string($v) || is_bool($v) || is_numeric($v)) {
return $i . htmlentities(var_export($v, true)) . '<br />';
} elseif (is_null($v)) {
return $i . 'null<br />';
} elseif (is_resource($v)) {
return $i . 'resource(' . get_resource_type($v) . ')<br />';
} else {
return $i . htmlentities(var_export($v, true)) . '<br />';
}
}
/**
* @param $i
* @param $obj
*
* @return string
*/
protected function exportObj($i, $obj)
{
if (array_search($obj, $this->outputObjects, true) !== false) {
return $i . ' [recursion, skipped]<br />';
}
$this->outputObjects[] = $obj;
$list = (array)$obj;
$protectedLength = strlen(get_class($obj)) + 2;
$out = array();
if ($this->outputMethods) {
$ref = new ReflectionObject($obj);
foreach ($ref->getMethods() as $method) {
if (!$method->isPublic()) {
continue;
}
if (empty($out['method'])) {
$out['method'] = '';
}
$params = array();
foreach ($method->getParameters() as $param) {
$params[] = ($param->isPassedByReference() ? '&' : '') . '$' . $param->getName() . ($param->isOptional() ? ' = ' . var_export($param->getDefaultValue(), true) : '');
}
$out['method'] .= '(method) ' . $method->getName() . '(' . implode(', ', $params) . ')<br />';
}
}
foreach ($list as $attributeName => $attributeValue) {
if (property_exists($obj, $attributeName)) {
$key = 'public';
} elseif (substr($attributeName, 0, 3) === "\0*\0") {
$key = 'protected';
$attributeName = substr($attributeName, 3);
} else {
$key = 'private';
$attributeName = substr($attributeName, $protectedLength);
}
if (empty($out[$key])) {
$out[$key] = '';
}
$out[$key] .= '(' . $key . ') ';
if (is_array($attributeValue)) {
$out[$key] .= $attributeName . ' (array):<br />
<div style="padding-left:20px;">' . $this->export($attributeValue, false) . '</div>';
} elseif (is_object($attributeValue)) {
$out[$key] .= $this->exportObj($attributeName . ' (object: ' . get_class($attributeValue) . '):', $attributeValue);
} else {
$out[$key] .= $this->exportVar($attributeName . ' = ', $attributeValue);
}
}
$return = $i . '<br /><div style="padding-left:20px;">';
if (!empty($out['method'])) {
$return .= $out['method'];
}
if (!empty($out['public'])) {
$return .= $out['public'];
}
if (!empty($out['protected'])) {
$return .= $out['protected'];
}
if (!empty($out['private'])) {
$return .= $out['private'];
}
return $return . '</div>';
}
}

View File

@@ -1,39 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Returns the correct end of line character(s) for the current operating system.
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginEol extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
*
* @return string
*/
public static function compile(Compiler $compiler)
{
return 'PHP_EOL';
}
}

View File

@@ -1,103 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Applies various escaping schemes on the given string
* <pre>
* * value : the string to process
* * format : escaping format to use, valid formats are : html, htmlall, url, urlpathinfo, quotes, hex, hexentity,
* javascript and mail
* * charset : character set to use for the conversion (applies to some formats only), defaults to the current Dwoo
* charset
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*
* @return mixed|string
*/
class PluginEscape extends Plugin
{
/**
* @param string $value
* @param string $format
* @param null $charset
*
* @return mixed|string
*/
public function process($value = '', $format = 'html', $charset = null)
{
if ($charset === null) {
$charset = $this->core->getCharset();
}
switch ($format) {
case 'html':
return htmlspecialchars((string)$value, ENT_QUOTES, $charset);
case 'htmlall':
return htmlentities((string)$value, ENT_QUOTES, $charset);
case 'url':
return rawurlencode((string)$value);
case 'urlpathinfo':
return str_replace('%2F', '/', rawurlencode((string)$value));
case 'quotes':
return preg_replace("#(?<!\\\\)'#", "\\'", (string)$value);
case 'hex':
$out = '';
$cnt = strlen((string)$value);
for ($i = 0; $i < $cnt; ++ $i) {
$out .= '%' . bin2hex((string)$value[$i]);
}
return $out;
case 'hexentity':
$out = '';
$cnt = strlen((string)$value);
for ($i = 0; $i < $cnt; ++ $i) {
$out .= '&#x' . bin2hex((string)$value[$i]) . ';';
}
return $out;
case 'javascript':
case 'js':
return strtr((string)$value,
array(
'\\' => '\\\\',
"'" => "\\'",
'"' => '\\"',
"\r" => '\\r',
"\n" => '\\n',
'</' => '<\/'
));
case 'mail':
return str_replace(array(
'@',
'.'
),
array(
'&nbsp;(AT)&nbsp;',
'&nbsp;(DOT)&nbsp;'
),
(string)$value);
default:
$this->core->triggerError('Escape\'s format argument must be one of : html, htmlall, url, urlpathinfo, hex, hexentity, javascript, js or mail, "' . $format . '" given.',
E_USER_WARNING);
}
}
}

View File

@@ -1,62 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Core;
use Dwoo\Plugin;
use Dwoo\Template\Str as TemplateString;
/**
* Evaluates the given string as if it was a template.
* Although this plugin is kind of optimized and will
* not recompile your string each time, it is still not
* a good practice to use it. If you want to have templates
* stored in a database or something you should probably use
* the Dwoo\Template\Str class or make another class that
* extends it
* <pre>
* * var : the string to use as a template
* * assign : if set, the output of the template will be saved in this variable instead of being output
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginEval extends Plugin
{
/**
* @param string $var
* @param null $assign
*
* @return string
*/
public function process($var, $assign = null)
{
if ($var == '') {
return '';
}
$tpl = new TemplateString($var);
$clone = clone $this->core;
$out = $clone->get($tpl, $this->core->readVar('_parent'));
if ($assign !== null) {
$this->core->assignInScope($out, $assign);
} else {
return $out;
}
}
}

View File

@@ -1,206 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
use Dwoo\Exception as Exception;
use Dwoo\Security\Exception as SecurityException;
use Dwoo\Compilation\Exception as CompilationException;
/**
* Extends another template, read more about template inheritance at {@link
* http://wiki.dwoo.org/index.php/TemplateInheritance}
* <pre>
* * file : the template to extend
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginExtends extends Plugin implements ICompilable
{
protected static $childSource;
protected static $regex;
protected static $l;
protected static $r;
protected static $lastReplacement;
public function process()
{
}
/**
* @param Compiler $compiler
* @param $file
*
* @throws CompilationException
*/
public static function compile(Compiler $compiler, $file)
{
list($l, $r) = $compiler->getDelimiters();
self::$l = preg_quote($l, '/');
self::$r = preg_quote($r, '/');
self::$regex = '/
' . self::$l . 'block\s(["\']?)(.+?)\1' . self::$r . '(?:\r?\n?)
((?:
(?R)
|
[^' . self::$l . ']*
(?:
(?! ' . self::$l . '\/?block\b )
' . self::$l . '
[^' . self::$l . ']*+
)*
)*)
' . self::$l . '\/block' . self::$r . '
/six';
if ($compiler->getLooseOpeningHandling()) {
self::$l .= '\s*';
self::$r = '\s*' . self::$r;
}
$inheritanceTree = array(array('source' => $compiler->getTemplateSource()));
$curPath = dirname($compiler->getCore()->getTemplate()->getResourceIdentifier()) . DIRECTORY_SEPARATOR;
$curTpl = $compiler->getCore()->getTemplate();
while (!empty($file)) {
if ($file === '""' || $file === "''" || (substr($file, 0, 1) !== '"' && substr($file, 0, 1) !== '\'')) {
throw new CompilationException($compiler, 'Extends : The file name must be a non-empty string');
}
if (preg_match('#^["\']([a-z]{2,}):(.*?)["\']$#i', $file, $m)) {
// resource:identifier given, extract them
$resource = $m[1];
$identifier = $m[2];
} else {
// get the current template's resource
$resource = $curTpl->getResourceName();
$identifier = substr($file, 1, - 1);
}
try {
$parent = $compiler->getCore()->templateFactory($resource, $identifier, null, null, null, $curTpl);
}
catch (SecurityException $e) {
throw new CompilationException($compiler, 'Extends : Security restriction : ' . $e->getMessage());
}
catch (Exception $e) {
throw new CompilationException($compiler, 'Extends : ' . $e->getMessage());
}
if ($parent === null) {
throw new CompilationException($compiler, 'Extends : Resource "' . $resource . ':' . $identifier . '" not found.');
} elseif ($parent === false) {
throw new CompilationException($compiler, 'Extends : Resource "' . $resource . '" does not support extends.');
}
$curTpl = $parent;
$newParent = array(
'source' => $parent->getSource(),
'resource' => $resource,
'identifier' => $parent->getResourceIdentifier(),
'uid' => $parent->getUid()
);
if (array_search($newParent, $inheritanceTree, true) !== false) {
throw new CompilationException($compiler, 'Extends : Recursive template inheritance detected');
}
$inheritanceTree[] = $newParent;
if (preg_match('/^' . self::$l . 'extends(?:\(?\s*|\s+)(?:file=)?\s*((["\']).+?\2|\S+?)\s*\)?\s*?' . self::$r . '/i', $parent->getSource(), $match)) {
$curPath = dirname($identifier) . DIRECTORY_SEPARATOR;
if (isset($match[2]) && $match[2] == '"') {
$file = '"' . str_replace('"', '\\"', substr($match[1], 1, - 1)) . '"';
} elseif (isset($match[2]) && $match[2] == "'") {
$file = '"' . substr($match[1], 1, - 1) . '"';
} else {
$file = '"' . $match[1] . '"';
}
} else {
$file = false;
}
}
while (true) {
$parent = array_pop($inheritanceTree);
$child = end($inheritanceTree);
self::$childSource = $child['source'];
self::$lastReplacement = count($inheritanceTree) === 1;
if (!isset($newSource)) {
$newSource = $parent['source'];
}
$newSource = preg_replace_callback(self::$regex, array(
'Dwoo\Plugins\Functions\PluginExtends',
'replaceBlock'
), $newSource);
$newSource = $l . 'do extendsCheck(' . var_export($parent['resource'] . ':' . $parent['identifier'], true) . ')' . $r . $newSource;
if (self::$lastReplacement) {
break;
}
}
$compiler->setTemplateSource($newSource);
$compiler->recompile();
}
/**
* @param array $matches
*
* @return mixed|string
*/
protected static function replaceBlock(array $matches)
{
$matches[3] = self::removeTrailingNewline($matches[3]);
if (preg_match_all(self::$regex, self::$childSource, $override) && in_array($matches[2], $override[2])) {
$key = array_search($matches[2], $override[2]);
$override = self::removeTrailingNewline($override[3][$key]);
$l = stripslashes(self::$l);
$r = stripslashes(self::$r);
if (self::$lastReplacement) {
return preg_replace('/' . self::$l . '\$dwoo\.parent' . self::$r . '/is', $matches[3], $override);
}
return $l . 'block ' . $matches[1] . $matches[2] . $matches[1] . $r . preg_replace('/' . self::$l . '\$dwoo\.parent' . self::$r . '/is', $matches[3], $override) . $l . '/block' . $r;
}
if (preg_match(self::$regex, $matches[3])) {
return preg_replace_callback(self::$regex, array(
'Dwoo\Plugins\Functions\PluginExtends',
'replaceBlock'
), $matches[3]);
}
if (self::$lastReplacement) {
return $matches[3];
}
return $matches[0];
}
/**
* @param $text
*
* @return string
*/
protected static function removeTrailingNewline($text)
{
return substr($text, - 1) === "\n" ? substr($text, - 2, 1) === "\r" ? substr($text, 0, - 2) : substr($text, 0, - 1) : $text;
}
}

View File

@@ -1,75 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\Compilation\Exception as CompilationException;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Checks whether an extended file has been modified, and if so recompiles the current template. This is for internal
* use only, do not use. This software is provided 'as-is', without any express or implied warranty. In no event will
* the authors be held liable for any damages arising from the use of this software.
*/
class PluginExtendsCheck extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param $file
*
* @return string
* @throws CompilationException
*/
public static function compile(Compiler $compiler, $file)
{
preg_match('#^["\']([a-z]{2,}):(.*?)["\']$#i', $file, $m);
$resource = $m[1];
$identifier = $m[2];
$tpl = $compiler->getCore()->templateFactory($resource, $identifier);
if ($tpl === null) {
throw new CompilationException($compiler,
'Load Templates : Resource "' . $resource . ':' . $identifier . '" not found.');
} elseif ($tpl === false) {
throw new CompilationException($compiler,
'Load Templates : Resource "' . $resource . '" does not support includes.');
}
$out = '\'\';// checking for modification in ' . $resource . ':' . $identifier . "\r\n";
$modCheck = $tpl->getIsModifiedCode();
if ($modCheck) {
$out .= 'if (!(' . $modCheck . ')) { ob_end_clean(); return false; }';
} else {
$out .= 'try {
$tpl = $this->templateFactory("' . $resource . '", "' . $identifier . '");
} catch (Dwoo\Exception $e) {
$this->triggerError(\'Load Templates : Resource <em>' . $resource . '</em> was not added to Dwoo, can not extend <em>' . $identifier . '</em>\', E_USER_WARNING);
}
if ($tpl === null)
$this->triggerError(\'Load Templates : Resource "' . $resource . ':' . $identifier . '" was not found.\', E_USER_WARNING);
elseif ($tpl === false)
$this->triggerError(\'Load Templates : Resource "' . $resource . '" does not support extends.\', E_USER_WARNING);
if ($tpl->getUid() != "' . $tpl->getUid() . '") { ob_end_clean(); return false; }';
}
return $out;
}
}

View File

@@ -1,82 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Reads a file
* <pre>
* * file : path or URI of the file to read (however reading from another website is not recommended for performance
* reasons)
* * assign : if set, the file will be saved in this variable instead of being output
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginFetch extends Plugin
{
/**
* @param string $file
* @param null $assign
*
* @return string
*/
public function process($file, $assign = null)
{
if ($file === '') {
return '';
}
if ($policy = $this->core->getSecurityPolicy()) {
while (true) {
if (preg_match('{^([a-z]+?)://}i', $file)) {
$this->core->triggerError('The security policy prevents you to read files from external sources.',
E_USER_WARNING);
}
$file = realpath($file);
$dirs = $policy->getAllowedDirectories();
foreach ($dirs as $dir => $dummy) {
if (strpos($file, $dir) === 0) {
break 2;
}
}
$this->core->triggerError('The security policy prevents you to read <em>' . $file . '</em>',
E_USER_WARNING);
}
}
$file = str_replace(array(
"\t",
"\n",
"\r"
),
array(
'\\t',
'\\n',
'\\r'
),
$file);
$out = file_get_contents($file);
if ($assign === null) {
return $out;
}
$this->core->assignInScope($out, $assign);
}
}

View File

@@ -1,110 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Exception as Exception;
use Dwoo\Plugin;
use Dwoo\Security\Exception as SecurityException;
/**
* Inserts another template into the current one
* <pre>
* * file : the resource name of the template
* * cache_time : cache length in seconds
* * cache_id : cache identifier for the included template
* * compile_id : compilation identifier for the included template
* * data : data to feed into the included template, it can be any array and will default to $_root (the current data)
* * assign : if set, the output of the included template will be saved in this variable instead of being output
* * rest : any additional parameter/value provided will be added to the data array
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginInclude extends Plugin
{
/**
* @param $file
* @param null $cache_time
* @param null $cache_id
* @param null $compile_id
* @param string $data
* @param null $assign
* @param array $rest
*
* @return string
*/
public function process($file, $cache_time = null, $cache_id = null, $compile_id = null, $data = '_root', $assign = null, array $rest = array())
{
$include = null;
if ($file === '') {
return '';
}
if (preg_match('#^([a-z]{2,}):(.*)$#i', $file, $m)) {
// resource:identifier given, extract them
$resource = $m[1];
$identifier = $m[2];
} else {
// get the current template's resource
$resource = $this->core->getTemplate()->getResourceName();
$identifier = $file;
}
try {
$include = $this->core->templateFactory($resource, $identifier, $cache_time, $cache_id, $compile_id);
}
catch (SecurityException $e) {
$this->core->triggerError('Include : Security restriction : ' . $e->getMessage(), E_USER_WARNING);
}
catch (Exception $e) {
$this->core->triggerError('Include : ' . $e->getMessage(), E_USER_WARNING);
}
if ($include === null) {
$this->core->triggerError('Include : Resource "' . $resource . ':' . $identifier . '" not found.',
E_USER_WARNING);
} elseif ($include === false) {
$this->core->triggerError('Include : Resource "' . $resource . '" does not support includes.',
E_USER_WARNING);
}
if (is_string($data)) {
$vars = $this->core->readVar($data);
} else {
$vars = $data;
}
if (count($rest)) {
$vars = $rest + $vars;
}
$clone = clone $this->core;
$out = $clone->get($include, $vars);
if ($assign !== null) {
$this->core->assignInScope($out, $assign);
}
foreach ($clone->getReturnValues() as $name => $value) {
$this->core->assignInScope($value, $name);
}
if ($assign === null) {
return $out;
}
}
}

View File

@@ -1,47 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Indents every line of a text by the given amount of characters
* <pre>
* * value : the string to indent
* * by : how many characters should be inserted before each line
* * char : the character(s) to insert
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginIndent extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param int $by
* @param string $char
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $by = 4, $char = ' ')
{
return "preg_replace('#^#m', '" . str_repeat(substr($char, 1, - 1), trim($by, '"\'')) . "', $value)";
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Checks whether a variable is not null
* <pre>
* * var : variable to check
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginIsset extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param mixed $var
*
* @return string
*/
public static function compile(Compiler $compiler, $var)
{
return '(' . $var . ' !== null)';
}
}

View File

@@ -1,99 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\Compilation\Exception as CompilationException;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Loads sub-templates contained in an external file
* <pre>
* * file : the resource name of the file to load
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginLoadTemplates extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $file
*
* @return string
* @throws CompilationException
*/
public static function compile(Compiler $compiler, $file)
{
$file = substr($file, 1, - 1);
if ($file === '') {
return '';
}
if (preg_match('#^([a-z]{2,}):(.*)$#i', $file, $m)) {
// resource:identifier given, extract them
$resource = $m[1];
$identifier = $m[2];
} else {
// get the current template's resource
$resource = $compiler->getCore()->getTemplate()->getResourceName();
$identifier = $file;
}
$tpl = $compiler->getCore()->templateFactory($resource, $identifier);
if ($tpl === null) {
throw new CompilationException($compiler,
'Load Templates : Resource "' . $resource . ':' . $identifier . '" not found.');
} elseif ($tpl === false) {
throw new CompilationException($compiler,
'Load Templates : Resource "' . $resource . '" does not support includes.');
}
$cmp = clone $compiler;
$cmp->compile($compiler->getCore(), $tpl);
foreach ($cmp->getTemplatePlugins() as $template => $args) {
$compiler->addTemplatePlugin($template, $args['params'], $args['uuid'], $args['body']);
}
foreach ($cmp->getUsedPlugins() as $plugin => $type) {
$compiler->addUsedPlugin($plugin, $type);
}
$out = '\'\';// checking for modification in ' . $resource . ':' . $identifier . "\r\n";
$modCheck = $tpl->getIsModifiedCode();
if ($modCheck) {
$out .= 'if (!(' . $modCheck . ')) { ob_end_clean(); return false; }';
} else {
$out .= 'try {
$tpl = $this->templateFactory("' . $resource . '", "' . $identifier . '");
} catch (Dwoo\Exception $e) {
$this->triggerError(\'Load Templates : Resource <em>' . $resource . '</em> was not added to Dwoo, can not extend <em>' . $identifier . '</em>\', E_USER_WARNING);
}
if ($tpl === null)
$this->triggerError(\'Load Templates : Resource "' . $resource . ':' . $identifier . '" was not found.\', E_USER_WARNING);
elseif ($tpl === false)
$this->triggerError(\'Load Templates : Resource "' . $resource . '" does not support extends.\', E_USER_WARNING);
if ($tpl->getUid() != "' . $tpl->getUid() . '") { ob_end_clean(); return false; }';
}
return $out;
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Makes the input string lower cased
* <pre>
* * value : the string to process
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginLower extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
*
* @return string
*/
public static function compile(Compiler $compiler, $value)
{
return 'mb_strtolower((string) ' . $value . ', $this->charset)';
}
}

View File

@@ -1,144 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Outputs a mailto link with optional spam-proof (okay probably not) encoding
* <pre>
* * address : target email address
* * text : display text to show for the link, defaults to the address if not provided
* * subject : the email subject
* * encode : one of the available encoding (none, js, jscharcode or hex)
* * cc : address(es) to carbon copy, comma separated
* * bcc : address(es) to blind carbon copy, comma separated
* * newsgroups : newsgroup(s) to post to, comma separated
* * followupto : address(es) to follow up, comma separated
* * extra : additional attributes to add to the &lt;a&gt; tag
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginMailto extends Plugin
{
/**
* @param $address
* @param null $text
* @param null $subject
* @param null $encode
* @param null $cc
* @param null $bcc
* @param null $newsgroups
* @param null $followupto
* @param null $extra
*
* @return string
*/
public function process($address, $text = null, $subject = null, $encode = null, $cc = null, $bcc = null, $newsgroups = null, $followupto = null, $extra = null)
{
if (empty($address)) {
return '';
}
if (empty($text)) {
$text = $address;
}
// build address string
$address .= '?';
if (!empty($subject)) {
$address .= 'subject=' . rawurlencode($subject) . '&';
}
if (!empty($cc)) {
$address .= 'cc=' . rawurlencode($cc) . '&';
}
if (!empty($bcc)) {
$address .= 'bcc=' . rawurlencode($bcc) . '&';
}
if (!empty($newsgroups)) {
$address .= 'newsgroups=' . rawurlencode($newsgroups) . '&';
}
if (!empty($followupto)) {
$address .= 'followupto=' . rawurlencode($followupto) . '&';
}
$address = rtrim($address, '?&');
// output
switch ($encode) {
case 'none':
case null:
return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
case 'js':
case 'javascript':
$str = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
$len = strlen($str);
$out = '';
for ($i = 0; $i < $len; ++ $i) {
$out .= '%' . bin2hex($str[$i]);
}
return '<script type="text/javascript">eval(unescape(\'' . $out . '\'));</script>';
break;
case 'javascript_charcode':
case 'js_charcode':
case 'jscharcode':
case 'jschar':
$str = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
$len = strlen($str);
$out = '<script type="text/javascript">' . "\n<!--\ndocument.write(Str.fromCharCode(";
for ($i = 0; $i < $len; ++ $i) {
$out .= ord($str[$i]) . ',';
}
return rtrim($out, ',') . "));\n-->\n</script>\n";
break;
case 'hex':
if (strpos($address, '?') !== false) {
$this->core->triggerError('Mailto: Hex encoding is not possible with extra attributes, use one of : <em>js, jscharcode or none</em>.', E_USER_WARNING);
}
$out = '<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;';
$len = strlen($address);
for ($i = 0; $i < $len; ++ $i) {
if (preg_match('#\w#', $address[$i])) {
$out .= '%' . bin2hex($address[$i]);
} else {
$out .= $address[$i];
}
}
$out .= '" ' . $extra . '>';
$len = strlen($text);
for ($i = 0; $i < $len; ++ $i) {
$out .= '&#x' . bin2hex($text[$i]);
}
return $out . '</a>';
default:
$this->core->triggerError('Mailto: <em>encode</em> argument is invalid, it must be one of : <em>none (= no value), js, js_charcode or hex</em>', E_USER_WARNING);
}
}
}

View File

@@ -1,199 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\Compilation\Exception as CompilationException;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Computes a mathematical equation
* <pre>
* * equation : the equation to compute, it can include normal variables with $foo or special math variables without
* the dollar sign
* * format : output format, see {@link http://php.net/sprintf} for details
* * assign : if set, the output is assigned into the given variable name instead of being output
* * rest : all math specific variables that you use must be defined, see the example
* </pre>
* Example :.
* <code>
* {$c=2}
* {math "(a+b)*$c/4" a=3 b=5}
* output is : 4 ( = (3+5)*2/4)
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginMath extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $equation
* @param string $format
* @param string $assign
* @param array $rest
*
* @return string
* @throws CompilationException
*/
public static function compile(Compiler $compiler, $equation, $format = '', $assign = '', array $rest = array())
{
/*
* Holds the allowed function, characters, operators and constants
*/
$allowed = array(
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'-',
'/',
'*',
'.',
' ',
'<<',
'>>',
'%',
'&',
'^',
'|',
'~',
'abs(',
'ceil(',
'floor(',
'exp(',
'log10(',
'cos(',
'sin(',
'sqrt(',
'tan(',
'M_PI',
'INF',
'M_E',
);
/*
* Holds the functions that can accept multiple arguments
*/
$funcs = array(
'round(',
'log(',
'pow(',
'max(',
'min(',
'rand(',
);
$equation = $equationSrc = str_ireplace(array(
'pi',
'M_PI()',
'inf',
' e '
),
array(
'M_PI',
'M_PI',
'INF',
' M_E '
),
$equation);
$delim = $equation[0];
$open = $delim . '.';
$close = '.' . $delim;
$equation = substr($equation, 1, - 1);
$out = '';
$ptr = 1;
$allowcomma = 0;
while (strlen($equation) > 0) {
$substr = substr($equation, 0, $ptr);
if (array_search($substr, $allowed) !== false) {
// allowed string
$out .= $substr;
$equation = substr($equation, $ptr);
$ptr = 0;
} elseif (array_search($substr, $funcs) !== false) {
// allowed func
$out .= $substr;
$equation = substr($equation, $ptr);
$ptr = 0;
++ $allowcomma;
if ($allowcomma === 1) {
$allowed[] = ',';
}
} elseif (isset($rest[$substr])) {
// variable
$out .= $rest[$substr];
$equation = substr($equation, $ptr);
$ptr = 0;
} elseif ($substr === $open) {
// pre-replaced variable
preg_match('#.*\((?:[^()]*?|(?R))\)' . str_replace('.', '\\.', $close) . '#', substr($equation, 2), $m);
if (empty($m)) {
preg_match('#.*?' . str_replace('.', '\\.', $close) . '#', substr($equation, 2), $m);
}
$out .= substr($m[0], 0, - 2);
$equation = substr($equation, strlen($m[0]) + 2);
$ptr = 0;
} elseif ($substr === '(') {
// opening parenthesis
if ($allowcomma > 0) {
++ $allowcomma;
}
$out .= $substr;
$equation = substr($equation, $ptr);
$ptr = 0;
} elseif ($substr === ')') {
// closing parenthesis
if ($allowcomma > 0) {
-- $allowcomma;
if ($allowcomma === 0) {
array_pop($allowed);
}
}
$out .= $substr;
$equation = substr($equation, $ptr);
$ptr = 0;
} elseif ($ptr >= strlen($equation)) {
// parse error if we've consumed the entire equation without finding anything valid
throw new CompilationException($compiler,
'Math : Syntax error or variable undefined in equation ' . $equationSrc . ' at ' . $substr);
} else {
// nothing special, advance
++ $ptr;
}
}
if ($format !== '\'\'') {
$out = 'sprintf(' . $format . ', ' . $out . ')';
}
if ($assign !== '\'\'') {
return '($this->assignInScope(' . $out . ', ' . $assign . '))';
}
return '(' . $out . ')';
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Converts line breaks into <br /> tags
* <pre>
* * value : the string to process
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginNl2br extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
*
* @return string
*/
public static function compile(Compiler $compiler, $value)
{
return 'nl2br((string) ' . $value . ')';
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Prints out a variable without any notice if it doesn't exist.
* <pre>
* * value : the variable to print
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginOptional extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
*
* @return mixed
*/
public static function compile(Compiler $compiler, $value)
{
return $value;
}
}

View File

@@ -1,63 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Replaces the search string by the replace string using regular expressions
* <pre>
* * value : the string to search into
* * search : the string to search for, must be a complete regular expression including delimiters
* * replace : the string to use as a replacement, must be a complete regular expression including delimiters
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginRegexReplace extends Plugin
{
/**
* @param string $value
* @param string $search
* @param string $replace
*
* @return mixed
*/
public function process($value, $search, $replace)
{
$search = (array)$search;
$cnt = count($search);
for ($i = 0; $i < $cnt; ++ $i) {
// Credits for this to Monte Ohrt who made smarty's regex_replace modifier
if (($pos = strpos($search[$i], "\0")) !== false) {
$search[$i] = substr($search[$i], 0, $pos);
}
if (preg_match('#[a-z\s]+$#is', $search[$i], $m) && (strpos($m[0], 'e') !== false)) {
$search[$i] = substr($search[$i], 0, - strlen($m[0])) . str_replace(array(
'e',
' '
),
'',
$m[0]);
}
}
return preg_replace($search, $replace, $value);
}
}

View File

@@ -1,52 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Replaces the search string by the replace string
* <pre>
* * value : the string to search into
* * search : the string to search for
* * replace : the string to use as a replacement
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginReplace extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param string $search
* @param string $replace
* @param bool $case_sensitive
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $search, $replace, $case_sensitive = true)
{
if ($case_sensitive == 'false' || (bool)$case_sensitive === false) {
return 'str_ireplace(' . $search . ', ' . $replace . ', ' . $value . ')';
} else {
return 'str_replace(' . $search . ', ' . $replace . ', ' . $value . ')';
}
}
}

View File

@@ -1,54 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Inserts another template into the current one
* <pre>
* * file : the resource name of the template
* * cache_time : cache length in seconds
* * cache_id : cache identifier for the included template
* * compile_id : compilation identifier for the included template
* * data : data to feed into the included template, it can be any array and will default to $_root (the current data)
* * assign : if set, the output of the included template will be saved in this variable instead of being output
* * rest : any additional parameter/value provided will be added to the data array
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginReturn extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param array $rest
*
* @return string
*/
public static function compile(Compiler $compiler, array $rest = array())
{
$out = array();
foreach ($rest as $var => $val) {
$out[] = '$this->setReturnValue(' . var_export($var, true) . ', ' . $val . ')';
}
return '(' . implode('.', $out) . ')';
}
}

View File

@@ -1,54 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Reverses a string or an array
* <pre>
* * value : the string or array to reverse
* * preserve_keys : if value is an array and this is true, then the array keys are left intact
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginReverse extends Plugin
{
/**
* @param string $value
* @param bool $preserve_keys
*
* @return array|string
*/
public function process($value, $preserve_keys = false)
{
if (is_array($value)) {
return array_reverse($value, $preserve_keys);
} elseif (($charset = $this->core->getCharset()) === 'iso-8859-1') {
return strrev((string)$value);
}
$strlen = mb_strlen($value);
$out = '';
while ($strlen --) {
$out .= mb_substr($value, $strlen, 1, $charset);
}
return $out;
}
}

View File

@@ -1,46 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Marks the variable as safe and removes the auto-escape function, only useful if you turned auto-escaping on
* <pre>
* * var : the variable to pass through untouched
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginSafe extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param mixed $var
*
* @return mixed
*/
public static function compile(Compiler $compiler, $var)
{
return preg_replace('#\(is_string\(\$tmp=(.+)\) \? htmlspecialchars\(\$tmp, ENT_QUOTES, \$this->charset\) : \$tmp\)#',
'$1',
$var);
}
}

View File

@@ -1,45 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Adds spaces (or the given character(s)) between every character of a string
* <pre>
* * value : the string to process
* * space_char : the character(s) to insert between each character
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginSpacify extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param string $space_char
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $space_char = ' ')
{
return 'implode(' . $space_char . ', str_split(' . $value . ', 1))';
}
}

View File

@@ -1,45 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Formats a string using the sprintf function
* <pre>
* * value : the string to format
* * format : the format to use, see {@link http://php.net/sprintf} for details
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginStringFormat extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param string $format
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $format)
{
return 'sprintf(' . $format . ',' . $value . ')';
}
}

View File

@@ -1,55 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.3
* @date 2017-01-07
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Removes all html tags
* <pre>
* * value: the string to process
* * addspace: if true, a space is added in place of every removed tag
* * allowable_tags: specify tags which should not be stripped
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginStripTags extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param bool $addspace
* @param null|string $allowable_tags
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $addspace = true, $allowable_tags = null)
{
if ($addspace === 'true') {
if ("null" == $allowable_tags) {
return "preg_replace('#<[^>]*>#', ' ', $value)";
}
return "preg_replace('#<\\s*\\/?(" . $allowable_tags . ")\\s*[^>]*?>#im', ' ', $value)";
}
return "strip_tags($value, $allowable_tags)";
}
}

View File

@@ -1,105 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE LGPLv3
* @version 1.3.6
* @date 2017-03-21
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\Core;
use Dwoo\Exception;
use Dwoo\Compilation\Exception as CompilationException;
use Dwoo\ICompilable;
use Dwoo\Plugin;
use Dwoo\Plugins\Blocks\PluginIf;
/**
* Ternary if operation.
* It evaluates the first argument and returns the second if it's true, or the third if it's false
* <pre>
* * rest : you can not use named parameters to call this, use it either with three arguments in the correct order
* (expression, true result, false result) or write it as in php (expression ? true result : false result)
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginTif extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param array $rest
* @param array $tokens
*
* @return mixed|string
* @throws CompilationException
*/
public static function compile(Compiler $compiler, array $rest, array $tokens)
{
// load if plugin
if (!class_exists(Core::NAMESPACE_PLUGINS_BLOCKS . 'PluginIf')) {
try {
$compiler->getCore()->getLoader()->loadPlugin('if');
}
catch (Exception $e) {
throw new CompilationException($compiler, 'Tif: the if plugin is required to use Tif');
}
}
if (count($rest) == 1) {
return $rest[0];
}
// fetch false result and remove the ":" if it was present
$falseResult = array_pop($rest);
if (trim(end($rest), '"\'') === ':') {
// remove the ':' if present
array_pop($rest);
} elseif (trim(end($rest), '"\'') === '?' || count($rest) === 1) {
if ($falseResult === '?' || $falseResult === ':') {
throw new CompilationException($compiler,
'Tif: incomplete tif statement, value missing after ' . $falseResult);
}
// there was in fact no false result provided, so we move it to be the true result instead
$trueResult = $falseResult;
$falseResult = "''";
}
// fetch true result if needed
if (!isset($trueResult)) {
$trueResult = array_pop($rest);
// no true result provided so we use the expression arg
if ($trueResult === '?') {
$trueResult = true;
}
}
// remove the '?' if present
if (trim(end($rest), '"\'') === '?') {
array_pop($rest);
}
// check params were correctly provided
if (empty($rest) || $trueResult === null || $falseResult === null) {
throw new CompilationException($compiler,
'Tif: you must provide three parameters serving as <expression> ? <true value> : <false value>');
}
// parse condition
$condition = PluginIf::replaceKeywords($rest, $tokens, $compiler);
return '((' . implode(' ', $condition) . ') ? ' . ($trueResult === true ? implode(' ',
$condition) : $trueResult) . ' : ' . $falseResult . ')';
}
}

View File

@@ -1,69 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Plugin;
/**
* Truncates a string at the given length
* <pre>
* * value : text to truncate
* * length : the maximum length for the string
* * etc : the characters that are added to show that the string was cut off
* * break : if true, the string will be cut off at the exact length, instead of cutting at the nearest space
* * middle : if true, the string will contain the beginning and the end, and the extra characters will be removed
* from the middle
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginTruncate extends Plugin
{
/**
* @param string $value
* @param int $length
* @param string $etc
* @param bool $break
* @param bool $middle
*
* @return mixed|string
*/
public function process($value, $length = 80, $etc = '...', $break = false, $middle = false)
{
if ($length == 0) {
return '';
}
$value = (string)$value;
$etc = (string)$etc;
$length = (int)$length;
if (strlen($value) < $length) {
return $value;
}
$length = max($length - strlen($etc), 0);
if ($break === false && $middle === false) {
$value = preg_replace('#\s+(\S*)?$#', '', substr($value, 0, $length + 1));
}
if ($middle === false) {
return substr($value, 0, $length) . $etc;
}
return substr($value, 0, ceil($length / 2)) . $etc . substr($value, - floor($length / 2));
}
}

View File

@@ -1,43 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Makes a string uppercased
* <pre>
* * value : the text to uppercase
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginUpper extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
*
* @return string
*/
public static function compile(Compiler $compiler, $value)
{
return 'mb_strtoupper((string) ' . $value . ', $this->charset)';
}
}

View File

@@ -1,53 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Block\Plugin;
use Dwoo\Compiler;
use Dwoo\ICompilable;
/**
* Replaces all white-space characters with the given string
* <pre>
* * value : the text to process
* * with : the replacement string, note that any number of consecutive white-space characters will be replaced by a
* single replacement string
* </pre>
* Example :.
* <code>
* {"a b c d
*
* e"|whitespace}
* results in : a b c d e
* </code>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginWhitespace extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param string $with
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $with = ' ')
{
return "preg_replace('#\s+#'.(strcasecmp(\$this->charset, 'utf-8')===0?'u':''), $with, $value)";
}
}

View File

@@ -1,49 +0,0 @@
<?php
/**
* Copyright (c) 2013-2017
*
* @category Library
* @package Dwoo\Plugins\Functions
* @author Jordi Boggiano <j.boggiano@seld.be>
* @author David Sanchez <david38sanchez@gmail.com>
* @copyright 2008-2013 Jordi Boggiano
* @copyright 2013-2017 David Sanchez
* @license http://dwoo.org/LICENSE Modified BSD License
* @version 1.3.2
* @date 2017-01-06
* @link http://dwoo.org/
*/
namespace Dwoo\Plugins\Functions;
use Dwoo\Compiler;
use Dwoo\ICompilable;
use Dwoo\Plugin;
/**
* Wraps a text at the given line length
* <pre>
* * value : the text to wrap
* * length : maximum line length
* * break : the character(s) to use to break the line
* * cut : if true, the line is cut at the exact length instead of breaking at the nearest space
* </pre>
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from the use of this software.
*/
class PluginWordwrap extends Plugin implements ICompilable
{
/**
* @param Compiler $compiler
* @param string $value
* @param int $length
* @param string $break
* @param bool $cut
*
* @return string
*/
public static function compile(Compiler $compiler, $value, $length = 80, $break = "\n", $cut = false)
{
return 'wordwrap(' . $value . ',' . $length . ',' . $break . ',' . $cut . ')';
}
}

Some files were not shown because too many files have changed in this diff Show More