X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Ftext.php;h=628b4fc2daaa4be33ba7997863275b888d1ad6d1;hb=ddf1caf0fd9ea4fc97147ba7b45587bcf7a6fab4;hp=044a1f8926984fc96950d8073fe71540b9f991a6;hpb=5a2c01d572301c520e6035c9f06665f159867363;p=friendica.git
diff --git a/include/text.php b/include/text.php
index 044a1f8926..628b4fc2da 100644
--- a/include/text.php
+++ b/include/text.php
@@ -6,22 +6,32 @@
// returns substituted string.
// WARNING: this is pretty basic, and doesn't properly handle search strings that are substrings of each other.
// For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing,
-// depending on the order in which they were declared in the array.
+// depending on the order in which they were declared in the array.
require_once("include/template_processor.php");
+require_once("include/friendica_smarty.php");
-if(! function_exists('replace_macros')) {
+if(! function_exists('replace_macros')) {
+/**
+ * This is our template processor
+ *
+ * @param string|FriendicaSmarty $s the string requiring macro substitution,
+ * or an instance of FriendicaSmarty
+ * @param array $r key value pairs (search => replace)
+ * @return string substituted string
+ */
function replace_macros($s,$r) {
- global $t;
-
- //$ts = microtime();
- $r = $t->replace($s,$r);
- //$tt = microtime() - $ts;
- //$a = get_app();
- //$a->page['debug'] .= "$tt
\n";
- return template_unescape($r);
+ $stamp1 = microtime(true);
+
+ $a = get_app();
+
+ $t = $a->template_engine();
+ $output = $t->replace_macros($s,$r);
+
+ $a->save_timestamp($stamp1, "rendering");
+ return $output;
}}
@@ -39,6 +49,7 @@ function random_string($size = 64,$type = RANDOM_STRING_HEX) {
return(substr($s,0,$size));
}}
+if(! function_exists('notags')) {
/**
* This is our primary input filter.
*
@@ -53,9 +64,9 @@ function random_string($size = 64,$type = RANDOM_STRING_HEX) {
* They will be replaced with safer brackets. This may be filtered further
* if these are not allowed either.
*
+ * @param string $string Input string
+ * @return string Filtered string
*/
-
-if(! function_exists('notags')) {
function notags($string) {
return(str_replace(array("<",">"), array('[',']'), $string));
@@ -64,10 +75,15 @@ function notags($string) {
// return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string));
}}
-// use this on "body" or "content" input where angle chars shouldn't be removed,
-// and allow them to be safely displayed.
+
if(! function_exists('escape_tags')) {
+/**
+ * use this on "body" or "content" input where angle chars shouldn't be removed,
+ * and allow them to be safely displayed.
+ * @param string $string
+ * @return string
+ */
function escape_tags($string) {
return(htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false));
@@ -78,6 +94,12 @@ function escape_tags($string) {
// used to generate initial passwords
if(! function_exists('autoname')) {
+/**
+ * generate a string that's random, but usually pronounceable.
+ * used to generate initial passwords
+ * @param int $len
+ * @return string
+ */
function autoname($len) {
if($len <= 0)
@@ -153,11 +175,17 @@ function autoname($len) {
// returns escaped text.
if(! function_exists('xmlify')) {
+/**
+ * escape text ($str) for XML transport
+ * @param string $str
+ * @return string Escaped text.
+ */
function xmlify($str) {
- $buffer = '';
+/* $buffer = '';
- for($x = 0; $x < mb_strlen($str); $x ++) {
- $char = $str[$x];
+ $len = mb_strlen($str);
+ for($x = 0; $x < $len; $x ++) {
+ $char = mb_substr($str,$x,1);
switch( $char ) {
@@ -185,24 +213,41 @@ function xmlify($str) {
$buffer .= $char;
break;
}
- }
+ }*/
+
+ $buffer = mb_ereg_replace("&", "&", $str);
+ $buffer = mb_ereg_replace("'", "'", $buffer);
+ $buffer = mb_ereg_replace("\"", """, $buffer);
+ $buffer = mb_ereg_replace("<", "<", $buffer);
+ $buffer = mb_ereg_replace(">", ">", $buffer);
+
$buffer = trim($buffer);
return($buffer);
}}
-// undo an xmlify
-// pass xml escaped text ($s), returns unescaped text
-
if(! function_exists('unxmlify')) {
+/**
+ * undo an xmlify
+ * @param string $s xml escaped text
+ * @return string unescaped text
+ */
function unxmlify($s) {
- $ret = str_replace('&','&', $s);
- $ret = str_replace(array('<','>','"','''),array('<','>','"',"'"),$ret);
+// $ret = str_replace('&','&', $s);
+// $ret = str_replace(array('<','>','"','''),array('<','>','"',"'"),$ret);
+ $ret = mb_ereg_replace('&', '&', $s);
+ $ret = mb_ereg_replace(''', "'", $ret);
+ $ret = mb_ereg_replace('"', '"', $ret);
+ $ret = mb_ereg_replace('<', "<", $ret);
+ $ret = mb_ereg_replace('>', ">", $ret);
return $ret;
}}
-// convenience wrapper, reverse the operation "bin2hex"
-
if(! function_exists('hex2bin')) {
+/**
+ * convenience wrapper, reverse the operation "bin2hex"
+ * @param string $s
+ * @return number
+ */
function hex2bin($s) {
if(! (is_string($s) && strlen($s)))
return '';
@@ -214,17 +259,23 @@ function hex2bin($s) {
return(pack("H*",$s));
}}
-// Automatic pagination.
-// To use, get the count of total items.
-// Then call $a->set_pager_total($number_items);
-// Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page
-// Then call paginate($a) after the end of the display loop to insert the pager block on the page
-// (assuming there are enough items to paginate).
-// When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage']
-// will limit the results to the correct items for the current page.
-// The actual page handling is then accomplished at the application layer.
if(! function_exists('paginate')) {
+/**
+ * Automatic pagination.
+ *
+ * To use, get the count of total items.
+ * Then call $a->set_pager_total($number_items);
+ * Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page
+ * Then call paginate($a) after the end of the display loop to insert the pager block on the page
+ * (assuming there are enough items to paginate).
+ * When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage']
+ * will limit the results to the correct items for the current page.
+ * The actual page handling is then accomplished at the application layer.
+ *
+ * @param App $a App instance
+ * @return string html for pagination #FIXME remove html
+ */
function paginate(&$a) {
$o = '';
$stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string);
@@ -281,6 +332,12 @@ function paginate(&$a) {
}}
if(! function_exists('alt_pager')) {
+/**
+ * Alternative pager
+ * @param App $a App instance
+ * @param int $i
+ * @return string html for pagination #FIXME remove html
+ */
function alt_pager(&$a, $i) {
$o = '';
$stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string);
@@ -292,11 +349,11 @@ function alt_pager(&$a, $i) {
$o .= '
'; + $s = str_replace(array('', '', ''), array($mailquote, $mailquote, $mailquote), $s); return $s; } - $arr = explode(',',$item['attach']); + $arr = explode('[/attach],',$item['attach']); if(count($arr)) { $s .= ''; foreach($arr as $r) { $matches = false; $icon = ''; - $cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches, PREG_SET_ORDER); + $cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches, PREG_SET_ORDER); if($cnt) { foreach($matches as $mtch) { - $icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/'))); + $filetype = strtolower(substr( $mtch[3], 0, strpos($mtch[3],'/') )); + if($filetype) { + $filesubtype = strtolower(substr( $mtch[3], strpos($mtch[3],'/') + 1 )); + $filesubtype = str_replace('.', '-', $filesubtype); + } + else { + $filetype = 'unkn'; + $filesubtype = 'unkn'; + } + + $icon = ''; + /*$icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/'))); switch($icontype) { case 'video': case 'audio': @@ -1007,7 +1336,8 @@ function prepare_body($item,$attach = false) { default: $icon = ''; break; - } + }*/ + $title = ((strlen(trim($mtch[4]))) ? escape_tags(trim($mtch[4])) : escape_tags($mtch[1])); $title .= ' ' . $mtch[2] . ' ' . t('bytes'); if((local_user() == $item['uid']) && ($item['contact-id'] != $a->contact['id']) && ($item['network'] == NETWORK_DFRN)) @@ -1060,9 +1390,13 @@ function prepare_body($item,$attach = false) { }} -// Given a text string, convert from bbcode to html and add smilie icons. - if(! function_exists('prepare_text')) { +/** + * Given a text string, convert from bbcode to html and add smilie icons. + * + * @param string $text + * @return string + */ function prepare_text($text) { require_once('include/bbcode.php'); @@ -1076,19 +1410,25 @@ function prepare_text($text) { }} + /** - * returns - * [ - * //categories [ + * return array with details for categories and folders for an item + * + * @param array $item + * @return array + * + * [ + * [ // categories array * { * 'name': 'category name', - * 'removeurl': 'url to remove this category', - * 'first': 'is the first in this array? true/false', + * 'removeurl': 'url to remove this category', + * 'first': 'is the first in this array? true/false', * 'last': 'is the last in this array? true/false', * } , * .... * ], - * // folders [ + * [ //folders array + * { * 'name': 'folder name', * 'removeurl': 'url to remove this folder', * 'first': 'is the first in this array? true/false', @@ -1096,9 +1436,10 @@ function prepare_text($text) { * } , * .... * ] - * ] + * ] */ function get_cats_and_terms($item) { + $a = get_app(); $categories = array(); $folders = array(); @@ -1143,11 +1484,12 @@ function get_cats_and_terms($item) { } + +if(! function_exists('feed_hublinks')) { /** * return atom link elements for all of our hubs + * @return string hub link xml elements */ - -if(! function_exists('feed_hublinks')) { function feed_hublinks() { $hub = get_config('system','huburl'); @@ -1167,9 +1509,13 @@ function feed_hublinks() { return $hubxml; }} -/* return atom link elements for salmon endpoints */ if(! function_exists('feed_salmonlinks')) { +/** + * return atom link elements for salmon endpoints + * @param string $nick user nickname + * @return string salmon link xml elements + */ function feed_salmonlinks($nick) { $a = get_app(); @@ -1184,6 +1530,11 @@ function feed_salmonlinks($nick) { }} if(! function_exists('get_plink')) { +/** + * get private link for item + * @param array $item + * @return boolean|array False if item has not plink, otherwise array('href'=>plink url, 'title'=>translated title) + */ function get_plink($item) { $a = get_app(); if (x($item,'plink') && ($item['private'] != 1)) { @@ -1198,6 +1549,11 @@ function get_plink($item) { }} if(! function_exists('unamp')) { +/** + * replace html amp entity with amp char + * @param string $s + * @return string + */ function unamp($s) { return str_replace('&', '&', $s); }} @@ -1206,6 +1562,12 @@ function unamp($s) { if(! function_exists('lang_selector')) { +/** + * get html for language selector + * @global string $lang + * @return string + * @template lang_selector.tpl + */ function lang_selector() { global $lang; @@ -1242,6 +1604,11 @@ function lang_selector() { if(! function_exists('return_bytes')) { +/** + * return number of bytes in size (K, M, G) + * @param string $size_str + * @return number + */ function return_bytes ($size_str) { switch (substr ($size_str, -1)) { @@ -1252,6 +1619,9 @@ function return_bytes ($size_str) { } }} +/** + * @return string + */ function generate_user_guid() { $found = true; do { @@ -1266,7 +1636,11 @@ function generate_user_guid() { } - +/** + * @param string $s + * @param boolean $strip_padding + * @return string + */ function base64url_encode($s, $strip_padding = false) { $s = strtr(base64_encode($s),'+/','-_'); @@ -1277,6 +1651,10 @@ function base64url_encode($s, $strip_padding = false) { return $s; } +/** + * @param string $s + * @return string + */ function base64url_decode($s) { if(is_array($s)) { @@ -1305,6 +1683,16 @@ function base64url_decode($s) { if (!function_exists('str_getcsv')) { + /** + * Parse csv string + * + * @param string $input + * @param string $delimiter + * @param string $enclosure + * @param string $escape + * @param string $eol + * @return boolean|array False on error, otherwise array[row][column] + */ function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\', $eol = '\n') { if (is_string($input) && !empty($input)) { $output = array(); @@ -1361,6 +1749,11 @@ if (!function_exists('str_getcsv')) { } } +/** + * return div element with class 'clear' + * @return string + * @deprecated + */ function cleardiv() { return ''; } @@ -1397,6 +1790,8 @@ function html2bb_video($s) { /** * apply xmlify() to all values of array $val, recursively + * @param array $val + * @return array */ function array_xmlify($val){ if (is_bool($val)) return $val?"true":"false"; @@ -1405,6 +1800,13 @@ function array_xmlify($val){ } +/** + * transorm link href and img src from relative to absolute + * + * @param string $text + * @param string $base base url + * @return string + */ function reltoabs($text, $base) { if (empty($base)) @@ -1437,6 +1839,12 @@ function reltoabs($text, $base) return $text; } +/** + * get translated item type + * + * @param array $itme + * @return string + */ function item_post_type($item) { if(intval($item['event-id'])) return t('event');