mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Merge 888cc1c09581d87f5ce333b2a3eb5c9fb858f1c4 into a1b6f5765bd99a3eaf36cfc46756b8cd89c05de9
This commit is contained in:
commit
3ec909bc43
@ -108,6 +108,8 @@ class Fenom {
|
|||||||
"iterable" => 'Fenom\Modifier::isIterable'
|
"iterable" => 'Fenom\Modifier::isIterable'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
protected $_plugins = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array of allowed PHP functions
|
* @var array of allowed PHP functions
|
||||||
*/
|
*/
|
||||||
@ -466,7 +468,14 @@ class Fenom {
|
|||||||
return $this->_modifiers[$modifier];
|
return $this->_modifiers[$modifier];
|
||||||
} elseif($this->isAllowedFunction($modifier)) {
|
} elseif($this->isAllowedFunction($modifier)) {
|
||||||
return $modifier;
|
return $modifier;
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
$path = __DIR__ . DIRECTORY_SEPARATOR . 'plugins'. DIRECTORY_SEPARATOR . 'modifier.'. $modifier . '.php';
|
||||||
|
if (is_file($path) && is_readable($path)) {
|
||||||
|
$this->_plugins['fenom_modifier_'.$modifier] = $path;
|
||||||
|
require_once $path;
|
||||||
|
return 'fenom_modifier_'. $modifier;
|
||||||
|
} else {
|
||||||
throw new \Exception("Modifier $modifier not found");
|
throw new \Exception("Modifier $modifier not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -546,6 +555,11 @@ class Fenom {
|
|||||||
return $this->_options;
|
return $this->_options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPlugins() {
|
||||||
|
return $this->_plugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param bool|string $scm
|
* @param bool|string $scm
|
||||||
* @return Fenom\ProviderInterface
|
* @return Fenom\ProviderInterface
|
||||||
|
@ -375,12 +375,34 @@ class Template extends Render {
|
|||||||
), true).");\n";
|
), true).");\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return PHP code for saving plugins include to file
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPluginsCode() {
|
||||||
|
|
||||||
|
$plugins_code = "<?php "."\n";
|
||||||
|
|
||||||
|
foreach ($this->_fenom->getPlugins() as $name=>$path){
|
||||||
|
$plugins_code .= "if (!is_callable('".$name."')) {include_once '".$path."';}"."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$plugins_code .= " ?>"."\n";
|
||||||
|
|
||||||
|
return $plugins_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return closure code
|
* Return closure code
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function _getClosureSource() {
|
private function _getClosureSource() {
|
||||||
return "function (\$tpl) {\n?>{$this->_body}<?php\n}";
|
|
||||||
|
$plugins_code = $this->getPluginsCode();
|
||||||
|
|
||||||
|
return "function (\$tpl) {\n?>{$plugins_code}\n{$this->_body}<?php\n}";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
44
src/plugins/modifier.capitalize.php
Normal file
44
src/plugins/modifier.capitalize.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fenom plugin
|
||||||
|
*
|
||||||
|
* @package Fenom
|
||||||
|
* @subpackage PluginsModifier
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fenom capitalize modifier plugin
|
||||||
|
*
|
||||||
|
* Type: modifier<br>
|
||||||
|
* Name: capitalize<br>
|
||||||
|
* Purpose: capitalize words in the string
|
||||||
|
*
|
||||||
|
* @link http://www.fenom.ru/docs/language.modifiers.tpl#language.modifier.capitalize
|
||||||
|
* @author
|
||||||
|
*
|
||||||
|
* @param string $string string to capitalize
|
||||||
|
* @param boolean $uc_digits also capitalize "x123" to "X123"
|
||||||
|
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
|
||||||
|
* @return string capitalized string
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
function fenom_modifier_capitalize($string, $uc_digits = false) {
|
||||||
|
fenom_modifier_capitalize_ucfirst(NULL, $uc_digits);
|
||||||
|
return preg_replace_callback('!\'?\b\w(\w|\')*\b!', 'fenome_modifier_capitalize_ucfirst', $string);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fenom_modifier_capitalize_ucfirst($string, $uc_digits = null) {
|
||||||
|
static $_uc_digits = FALSE;
|
||||||
|
if (isset($uc_digits)) {
|
||||||
|
$_uc_digits = $uc_digits;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (substr($string[0], 0, 1) != '\'' && !preg_match('!\d!', $string[0]) || $_uc_digits) {
|
||||||
|
return ucfirst($string[0]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $string[0];
|
||||||
|
}
|
||||||
|
}
|
40
src/plugins/modifier.count_characters.php
Normal file
40
src/plugins/modifier.count_characters.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fenom plugin
|
||||||
|
*
|
||||||
|
* @package Fenom
|
||||||
|
* @subpackage PluginsModifier
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fenom count_characters modifier plugin
|
||||||
|
*
|
||||||
|
* Type: modifier<br>
|
||||||
|
* Name: count_characters<br>
|
||||||
|
* Purpose: count the number of characters in a text
|
||||||
|
*
|
||||||
|
* @link http://www.fenom.ru/docs/language.modifiers.tpl#language.modifier.capitalize
|
||||||
|
* @author
|
||||||
|
*
|
||||||
|
* @param string $string string to count characters
|
||||||
|
* @param boolean $inckule_spaces flag count whitespaces
|
||||||
|
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
|
||||||
|
* @return integer count characters in string
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function fenom_modifier_count_characters($string, $include_spaces = FALSE) {
|
||||||
|
|
||||||
|
if ($include_spaces) {
|
||||||
|
return strlen($string);
|
||||||
|
}
|
||||||
|
|
||||||
|
return preg_match_all('~\S~', $string, $match);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
7
src/plugins/modifier.count_paragraphs.php
Normal file
7
src/plugins/modifier.count_paragraphs.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_count_paragraphs($string) {
|
||||||
|
|
||||||
|
return sizeof(preg_split('~[\r\n]+~', $string));
|
||||||
|
}
|
||||||
|
|
7
src/plugins/modifier.count_sentences.php
Normal file
7
src/plugins/modifier.count_sentences.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_count_sentences($string) {
|
||||||
|
return preg_match_all('~\S\.(?!\w)~', $string, $match);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
6
src/plugins/modifier.count_words.php
Normal file
6
src/plugins/modifier.count_words.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_count_words($string) {
|
||||||
|
return sizeof(preg_grep('~[a-zA-Z0-9\\x80-\\xff]~', preg_split('~\s+~', $string)));
|
||||||
|
}
|
||||||
|
|
21
src/plugins/modifier.date_format.php
Normal file
21
src/plugins/modifier.date_format.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__.'shared.make_timestamp';
|
||||||
|
function fenom_modifier_date_format($string, $format = "%b %e, %Y", $default_date = null) {
|
||||||
|
if (substr(PHP_OS, 0, 3) == 'WIN') {
|
||||||
|
$hours = strftime('%I', $string);
|
||||||
|
$short_hours = ($hours < 10) ? substr($hours, -1) : $hours;
|
||||||
|
$_win_from = array('%e', '%T', '%D', '%l');
|
||||||
|
$_win_to = array('%#d', '%H:%M:%S', '%m/%d/%y', $short_hours);
|
||||||
|
$format = str_replace($_win_from, $_win_to, $format);
|
||||||
|
}
|
||||||
|
if ($string != '') {
|
||||||
|
return strftime($format, fenom_make_timestamp($string));
|
||||||
|
}
|
||||||
|
elseif (isset($default_date) && $default_date != '') {
|
||||||
|
return strftime($format, fenom_make_timestamp($default_date));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
7
src/plugins/modifier.default.php
Normal file
7
src/plugins/modifier.default.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
function fenom_modifier_default($string, $default = '') {
|
||||||
|
if ($string === FALSE || $string === NULL || $string === '') {
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
return $string;
|
||||||
|
}
|
72
src/plugins/modifier.escape.php
Normal file
72
src/plugins/modifier.escape.php
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_escape($string, $esc_type = 'html', $char_set = 'UTF-8') {
|
||||||
|
if ($esc_type == 'html') {
|
||||||
|
return htmlspecialchars($string, ENT_QUOTES, $char_set);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'htmlall') {
|
||||||
|
return htmlentities($string, ENT_QUOTES, $char_set);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'url') {
|
||||||
|
return rawurlencode($string);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'urlencode') {
|
||||||
|
return urlencode($string);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'urldecode') {
|
||||||
|
return urldecode($string);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'urlpathinfo') {
|
||||||
|
return str_replace('%2F', '/', rawurlencode($string));
|
||||||
|
}
|
||||||
|
if ($esc_type == 'quotes') {
|
||||||
|
// escape unescaped single quotes
|
||||||
|
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'hex') {
|
||||||
|
// escape every character into hex
|
||||||
|
$return = '';
|
||||||
|
for ($x = 0; $x < strlen($string); $x++) {
|
||||||
|
$return .= '%' . bin2hex($string[$x]);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
if ($esc_type == 'hexentity') {
|
||||||
|
$return = '';
|
||||||
|
for ($x = 0; $x < strlen($string); $x++) {
|
||||||
|
$return .= '&#x' . bin2hex($string[$x]) . ';';
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
if ($esc_type == 'decentity') {
|
||||||
|
$return = '';
|
||||||
|
for ($x = 0; $x < strlen($string); $x++) {
|
||||||
|
$return .= '&#' . ord($string[$x]) . ';';
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
if ($esc_type == 'javascript') {
|
||||||
|
// escape quotes and backslashes, newlines, etc.
|
||||||
|
return strtr($string, array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', '</' => '<\/'));
|
||||||
|
}
|
||||||
|
if ($esc_type == 'mail') {
|
||||||
|
// safe way to display e-mail address on a web page
|
||||||
|
return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
|
||||||
|
}
|
||||||
|
if ($esc_type == 'nonstd') {
|
||||||
|
// escape non-standard chars, such as ms document quotes
|
||||||
|
$_res = '';
|
||||||
|
for ($_i = 0, $_len = strlen($string); $_i < $_len; $_i++) {
|
||||||
|
$_ord = ord(substr($string, $_i, 1));
|
||||||
|
// non-standard char, escape it
|
||||||
|
if ($_ord >= 126) {
|
||||||
|
$_res .= '&#' . $_ord . ';';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$_res .= substr($string, $_i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $_res;
|
||||||
|
}
|
||||||
|
return $string;
|
||||||
|
}
|
36
src/plugins/modifier.get_query.php
Normal file
36
src/plugins/modifier.get_query.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_get_query($params, $mode = '') {
|
||||||
|
$query = '';
|
||||||
|
$all = strpos($mode, 'a') !== FALSE;
|
||||||
|
$plain = strpos($mode, 'p') !== FALSE;
|
||||||
|
$separator = $plain ? '&' : '&';
|
||||||
|
$params_from_get = array();
|
||||||
|
$params_sended = array();
|
||||||
|
foreach ($params as $k => $v) {
|
||||||
|
if (is_int($k) and isset($_GET[$k])) {
|
||||||
|
$params_from_get[$k] = $_GET[$k];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$params_sended[$k] = $v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($all) {
|
||||||
|
foreach ($_GET as $k => $v) {
|
||||||
|
if (isset($_REQUEST[$k])) {
|
||||||
|
$params_from_get[$k] = $v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$params = array_merge($params_from_get, $params_sended);
|
||||||
|
foreach ($params as $k => $v) {
|
||||||
|
if ($v === NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$query .= ($query !== '' ? $separator : '?') . (is_array($v) ?
|
||||||
|
http_build_query(array($k => $v), '', $separator) :
|
||||||
|
$k . '=' . urlencode($v)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $query;
|
||||||
|
}
|
5
src/plugins/modifier.hexcolor.php
Normal file
5
src/plugins/modifier.hexcolor.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_hexcolor($int) {
|
||||||
|
return sprintf('%06x', $int);
|
||||||
|
}
|
7
src/plugins/modifier.indent.php
Normal file
7
src/plugins/modifier.indent.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
function fenom_modifier_indent($string, $chars = 4, $char = ' ') {
|
||||||
|
return preg_replace('~^~m', str_repeat($char, $chars), $string);
|
||||||
|
}
|
||||||
|
|
5
src/plugins/modifier.ini_get.php
Normal file
5
src/plugins/modifier.ini_get.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_ini_get($directive) {
|
||||||
|
return ini_get($directive);
|
||||||
|
}
|
5
src/plugins/modifier.int2color.php
Normal file
5
src/plugins/modifier.int2color.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_int2color($string) {
|
||||||
|
return sprintf('%06X', $string);
|
||||||
|
}
|
30
src/plugins/modifier.mb_truncate.php
Normal file
30
src/plugins/modifier.mb_truncate.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_mb_truncate($string, $length = 80, $etc = '...', $break_words = FALSE, $middle = FALSE, $encoding = 'UTF-8') {
|
||||||
|
if ($length == 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
$old = mb_internal_encoding();
|
||||||
|
if ($old != $encoding) {
|
||||||
|
mb_internal_encoding($encoding);
|
||||||
|
}
|
||||||
|
if (mb_strlen($string) > $length) {
|
||||||
|
$length -= mb_strlen($etc);
|
||||||
|
if (!$break_words && !$middle) {
|
||||||
|
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1));
|
||||||
|
}
|
||||||
|
if (!$middle) {
|
||||||
|
$r = mb_substr($string, 0, $length) . $etc;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$r = mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, -$length / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$r = $string;
|
||||||
|
}
|
||||||
|
if ($old != $encoding) {
|
||||||
|
mb_internal_encoding($old);
|
||||||
|
}
|
||||||
|
return $r;
|
||||||
|
}
|
6
src/plugins/modifier.natint.php
Normal file
6
src/plugins/modifier.natint.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_natint($string) {
|
||||||
|
$int = intval($string);
|
||||||
|
return $int > 0 ? $int : 0;
|
||||||
|
}
|
53
src/plugins/modifier.native_json_encode.php
Normal file
53
src/plugins/modifier.native_json_encode.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_native_json_encode($a = NULL) {
|
||||||
|
return native_json_encode($a);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('native_json_encode')) {
|
||||||
|
function native_json_encode($a = NULL) {
|
||||||
|
if (is_null($a)) {
|
||||||
|
return 'null';
|
||||||
|
}
|
||||||
|
if ($a === false) {
|
||||||
|
return 'false';
|
||||||
|
}
|
||||||
|
if ($a === true) {
|
||||||
|
return 'true';
|
||||||
|
}
|
||||||
|
if (is_scalar($a)) {
|
||||||
|
if (is_float($a)) {
|
||||||
|
// Always use "." for floats.
|
||||||
|
return floatval(str_replace(",", ".", strval($a)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_string($a)) {
|
||||||
|
static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
|
||||||
|
return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$isList = true;
|
||||||
|
for ($i = 0, reset($a); $i < count($a); $i++, next($a)) {
|
||||||
|
if (key($a) !== $i) {
|
||||||
|
$isList = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$result = array();
|
||||||
|
if ($isList) {
|
||||||
|
foreach ($a as $v) {
|
||||||
|
$result[] = native_json_encode($v);
|
||||||
|
}
|
||||||
|
return '[' . join(',', $result) . ']';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach ($a as $k => $v) {
|
||||||
|
$result[] = native_json_encode($k) . ':' . native_json_encode($v);
|
||||||
|
}
|
||||||
|
return '{' . join(',', $result) . '}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
5
src/plugins/modifier.nl2br.php
Normal file
5
src/plugins/modifier.nl2br.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_nl2br($string) {
|
||||||
|
return nl2br($string);
|
||||||
|
}
|
10
src/plugins/modifier.regex_replace.php
Normal file
10
src/plugins/modifier.regex_replace.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_regex_replace($string, $pattern, $replace) {
|
||||||
|
if (preg_match('~^([a-z]*)(.)(.*)\2([a-z]*)$~si', str_replace("\x00", '\x00', $pattern), $q)) {
|
||||||
|
return preg_replace($q[2] . $q[3] . $q[2] . str_replace('e', '', $q[1] . $q[4]), $replace, $string);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
6
src/plugins/modifier.replace.php
Normal file
6
src/plugins/modifier.replace.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
function fenom_modifier_replace($string, $search, $replace) {
|
||||||
|
return str_replace($search, $replace, $string);
|
||||||
|
}
|
10
src/plugins/modifier.safe_uri.php
Normal file
10
src/plugins/modifier.safe_uri.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_safe_uri($uri) {
|
||||||
|
$uri = trim($uri);
|
||||||
|
if (preg_match('~^(?:java|vb)script:~i', preg_replace('~\s+~', '', $uri))) {
|
||||||
|
return '/';
|
||||||
|
}
|
||||||
|
return $uri;
|
||||||
|
}
|
||||||
|
|
7
src/plugins/modifier.signedint.php
Normal file
7
src/plugins/modifier.signedint.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_signedint($int) {
|
||||||
|
$int = intval($int);
|
||||||
|
return ($int > 0 ? '+' : '') . $int;
|
||||||
|
}
|
||||||
|
|
6
src/plugins/modifier.spacify.php
Normal file
6
src/plugins/modifier.spacify.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_spacify($string, $spacify_char = ' ') {
|
||||||
|
return implode($spacify_char, preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY));
|
||||||
|
}
|
||||||
|
|
13
src/plugins/modifier.spellcount.php
Normal file
13
src/plugins/modifier.spellcount.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_spellcount($num, $one, $two, $many)
|
||||||
|
{
|
||||||
|
if ($num % 10 == 1 && $num % 100 != 11) {
|
||||||
|
echo $num . ' ' . $one;
|
||||||
|
} elseif ($num % 10 >= 2 && $num % 10 <= 4 && ($num % 100 < 10 || $num % 100 >= 20)) {
|
||||||
|
echo $num . ' ' . $two;
|
||||||
|
} else {
|
||||||
|
echo $num . ' ' . $many;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
6
src/plugins/modifier.string_format.php
Normal file
6
src/plugins/modifier.string_format.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_string_format($string, $format) {
|
||||||
|
return sprintf($format, $string);
|
||||||
|
}
|
||||||
|
|
6
src/plugins/modifier.strip.php
Normal file
6
src/plugins/modifier.strip.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_strip($text, $replace = ' ') {
|
||||||
|
return preg_replace('~\s+~', $replace, $text);
|
||||||
|
}
|
||||||
|
|
10
src/plugins/modifier.strip_tags.php
Normal file
10
src/plugins/modifier.strip_tags.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_strip_tags($string, $replace_with_space = TRUE) {
|
||||||
|
if ($replace_with_space) {
|
||||||
|
return preg_replace('~<[^>]*?>~', ' ', $string);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return strip_tags($string);
|
||||||
|
}
|
||||||
|
}
|
52
src/plugins/modifier.truncate.php
Normal file
52
src/plugins/modifier.truncate.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Fenom plugin
|
||||||
|
*
|
||||||
|
* @package Fenom
|
||||||
|
* @subpackage PluginsModifier
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fenom truncate modifier plugin
|
||||||
|
*
|
||||||
|
* Type: modifier<br>
|
||||||
|
* Name: truncate<br>
|
||||||
|
* Purpose: Truncate a string to a certain length if necessary,
|
||||||
|
* optionally splitting in the middle of a word, and
|
||||||
|
* appending the $etc string or inserting $etc into the middle.
|
||||||
|
|
||||||
|
* @param string $string input string
|
||||||
|
* @param integer $length length of truncated text
|
||||||
|
* @param string $etc end string
|
||||||
|
* @param boolean $by_words truncate at word boundary
|
||||||
|
* @param boolean $middle truncate in the middle of text
|
||||||
|
* @return string truncated string
|
||||||
|
*
|
||||||
|
* @link http://www.fenom.ru/docs/language.modifier.truncate.tpl truncate
|
||||||
|
* @author
|
||||||
|
*/
|
||||||
|
|
||||||
|
function fenom_modifier_truncate($string, $length = 80, $etc = '...', $by_words = false, $middle = false) {
|
||||||
|
if($middle) {
|
||||||
|
if(preg_match('#^(.{'.$length.'}).*?(.{'.$length.'})?$#usS', $string, $match)) {
|
||||||
|
if(count($match) == 3) {
|
||||||
|
if($by_words) {
|
||||||
|
return preg_replace('#\s.*$#usS', "", $match[1]).$etc.preg_replace('#^.*\s#usS', "", $match[2]);
|
||||||
|
} else {
|
||||||
|
return $match[1].$etc.$match[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(preg_match('#^(.{'.$length.'})#usS', $string, $match)) {
|
||||||
|
if($by_words) {
|
||||||
|
return preg_replace('#\s.*$#usS', "", $match[1]).$etc;
|
||||||
|
} else {
|
||||||
|
return $match[1].$etc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
18
src/plugins/modifier.view_size.php
Normal file
18
src/plugins/modifier.view_size.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_modifier_view_size($size) {
|
||||||
|
$size = intval($size);
|
||||||
|
if ($size >= 1073741824) {
|
||||||
|
$size = round($size / 1073741824 * 100) / 100 . ' GB';
|
||||||
|
}
|
||||||
|
elseif ($size >= 1048576) {
|
||||||
|
$size = round($size / 1048576 * 100) / 100 . ' MB';
|
||||||
|
}
|
||||||
|
elseif ($size >= 1024) {
|
||||||
|
$size = round($size / 1024 * 100) / 100 . ' KB';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$size = $size . ' B';
|
||||||
|
}
|
||||||
|
return $size;
|
||||||
|
}
|
68
src/plugins/modifier.wordwrap.php
Normal file
68
src/plugins/modifier.wordwrap.php
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
function fenom_modifier_wordwrap($string, $length = 80, $break = "\n", $cut = FALSE) {
|
||||||
|
return _wordwrap($string, $length, $break, $cut);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('mb_wordwrap')) {
|
||||||
|
function _wordwrap($str, $width, $break) {
|
||||||
|
$formatted = '';
|
||||||
|
$position = -1;
|
||||||
|
$prev_position = 0;
|
||||||
|
$last_line = -1;
|
||||||
|
|
||||||
|
/// looping the string stop at each space
|
||||||
|
while ($position = mb_stripos($str, " ", ++$position, 'utf-8')) {
|
||||||
|
if ($position > $last_line + $width + 1) {
|
||||||
|
$formatted .= mb_substr($str, $last_line + 1, $prev_position - $last_line - 1, 'utf-8') . $break;
|
||||||
|
$last_line = $prev_position;
|
||||||
|
}
|
||||||
|
$prev_position = $position;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// adding last line without the break
|
||||||
|
$formatted .= mb_substr($str, $last_line + 1, mb_strlen($str), 'utf-8');
|
||||||
|
return $formatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
function strwidth($s) {
|
||||||
|
$ret = mb_strwidth($s, 'UTF-8');
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function mb_wordwrap($str, $wid, $tag) {
|
||||||
|
$pos = 0;
|
||||||
|
$tok = array();
|
||||||
|
$l = mb_strlen($str, 'UTF-8');
|
||||||
|
if ($l == 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
$flag = false;
|
||||||
|
$tok[0] = mb_substr($str, 0, 1, 'UTF-8');
|
||||||
|
for ($i = 1; $i < $l; ++$i) {
|
||||||
|
$c = mb_substr($str, $i, 1, 'UTF-8');
|
||||||
|
if (!preg_match('/[a-z\'\"]/i', $c)) {
|
||||||
|
++$pos;
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
elseif ($flag) {
|
||||||
|
++$pos;
|
||||||
|
$flag = false;
|
||||||
|
}
|
||||||
|
$tok[$pos] .= $c;
|
||||||
|
}
|
||||||
|
|
||||||
|
$linewidth = 0;
|
||||||
|
$pos = 0;
|
||||||
|
$ret = array();
|
||||||
|
$l = count($tok);
|
||||||
|
for ($i = 0; $i < $l; ++$i) {
|
||||||
|
if ($linewidth + ($w = strwidth($tok[$i])) > $wid) {
|
||||||
|
++$pos;
|
||||||
|
$linewidth = 0;
|
||||||
|
}
|
||||||
|
$ret[$pos] .= $tok[$i];
|
||||||
|
$linewidth += $w;
|
||||||
|
}
|
||||||
|
return implode($tag, $ret);
|
||||||
|
}
|
||||||
|
}
|
30
src/plugins/shared.make_timestamp.php
Normal file
30
src/plugins/shared.make_timestamp.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function fenom_make_timestamp($string) {
|
||||||
|
if (empty($string)) {
|
||||||
|
// use "now":
|
||||||
|
$time = time();
|
||||||
|
|
||||||
|
}
|
||||||
|
elseif (preg_match('/^\d{14}$/', $string)) {
|
||||||
|
// it is mysql timestamp format of YYYYMMDDHHMMSS?
|
||||||
|
$time = mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2),
|
||||||
|
substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
|
||||||
|
|
||||||
|
}
|
||||||
|
elseif (is_numeric($string)) {
|
||||||
|
// it is a numeric string, we handle it as timestamp
|
||||||
|
$time = (int)$string;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// strtotime should handle it
|
||||||
|
$time = strtotime($string);
|
||||||
|
if ($time == -1 || $time === false) {
|
||||||
|
// strtotime() was not able to parse $string, use "now":
|
||||||
|
$time = time();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $time;
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user