// 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')) {
function replace_macros($s,$r) {
global $t;
-// $ts = microtime();
+ $stamp1 = microtime(true);
+
$a = get_app();
if($a->theme['template_engine'] === 'smarty3') {
}
else {
$r = $t->replace($s,$r);
-
+
$output = template_unescape($r);
}
-// $tt = microtime() - $ts;
-// $a = get_app();
-// $a->page['debug'] .= "$tt <br>\n";
+ $a = get_app();
+ $a->save_timestamp($stamp1, "rendering");
+
return $output;
}}
if(! function_exists('xmlify')) {
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 ) {
$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);
}}
if(! function_exists('unxmlify')) {
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;
}}
$lang = 'en';
$b = basename($s);
$d = dirname($s);
- if(file_exists("$d/$lang/$b"))
- return file_get_contents("$d/$lang/$b");
-
+ if(file_exists("$d/$lang/$b")) {
+ $stamp1 = microtime(true);
+ $content = file_get_contents("$d/$lang/$b");
+ $a->save_timestamp($stamp1, "file");
+ return $content;
+ }
+
$theme = current_theme();
- if(file_exists("$d/theme/$theme/$b"))
- return file_get_contents("$d/theme/$theme/$b");
-
- return file_get_contents($s);
+ if(file_exists("$d/theme/$theme/$b")) {
+ $stamp1 = microtime(true);
+ $content = file_get_contents("$d/theme/$theme/$b");
+ $a->save_timestamp($stamp1, "file");
+ return $content;
+ }
+
+ $stamp1 = microtime(true);
+ $content = file_get_contents($s);
+ $a->save_timestamp($stamp1, "file");
+ return $content;
}}
if(! function_exists('get_intltext_template')) {
if(! isset($lang))
$lang = 'en';
- if(file_exists("view/$lang$engine/$s"))
- return file_get_contents("view/$lang$engine/$s");
- elseif(file_exists("view/en$engine/$s"))
- return file_get_contents("view/en$engine/$s");
- else
- return file_get_contents("view$engine/$s");
+ if(file_exists("view/$lang$engine/$s")) {
+ $stamp1 = microtime(true);
+ $content = file_get_contents("view/$lang$engine/$s");
+ $a->save_timestamp($stamp1, "file");
+ return $content;
+ } elseif(file_exists("view/en$engine/$s")) {
+ $stamp1 = microtime(true);
+ $content = file_get_contents("view/en$engine/$s");
+ $a->save_timestamp($stamp1, "file");
+ return $content;
+ } else {
+ $stamp1 = microtime(true);
+ $content = file_get_contents("view$engine/$s");
+ $a->save_timestamp($stamp1, "file");
+ return $content;
+ }
}}
if(! function_exists('get_markup_template')) {
function get_markup_template($s, $root = '') {
-// $ts = microtime();
+ $stamp1 = microtime(true);
+
$a = get_app();
if($a->theme['template_engine'] === 'smarty3') {
$template = new FriendicaSmarty();
$template->filename = $template_file;
+ $a->save_timestamp($stamp1, "rendering");
-// $tt = microtime() - $ts;
-// $a->page['debug'] .= "$tt <br>\n";
return $template;
}
else {
$template_file = get_template_file($a, $s, $root);
-// $file_contents = file_get_contents($template_file);
-// $tt = microtime() - $ts;
-// $a->page['debug'] .= "$tt <br>\n";
-// return $file_contents;
-// logger($template_file);
- return file_get_contents($template_file);
- }
+ $a->save_timestamp($stamp1, "rendering");
+
+ $stamp1 = microtime(true);
+ $content = file_get_contents($template_file);
+ $a->save_timestamp($stamp1, "file");
+ return $content;
+
+ }
}}
if(! function_exists("get_template_file")) {
if($root !== '' && $root[strlen($root)-1] !== '/')
$root = $root . '/';
- if(file_exists($root . "view/theme/$theme/$filename"))
- $template_file = $root . "view/theme/$theme/$filename";
- elseif (x($a->theme_info,"extends") && file_exists($root . "view/theme/".$a->theme_info["extends"]."/$filename"))
- $template_file = $root . "view/theme/".$a->theme_info["extends"]."/$filename";
+ if(file_exists("{$root}view/theme/$theme/$filename"))
+ $template_file = "{$root}view/theme/$theme/$filename";
+ elseif (x($a->theme_info,"extends") && file_exists("{$root}view/theme/{$a->theme_info["extends"]}/$filename"))
+ $template_file = "{$root}view/theme/{$a->theme_info["extends"]}/$filename";
else
- $template_file = $root . "view/$filename";
+ $template_file = "{$root}view/$filename";
return $template_file;
}}
if((! $debugging) || (! $logfile) || ($level > $loglevel))
return;
-
+
+ $stamp1 = microtime(true);
@file_put_contents($logfile, datetime_convert() . ':' . session_id() . ' ' . $msg . "\n", FILE_APPEND);
+ $a->save_timestamp($stamp1, "file");
return;
}}
$ret = array();
// ignore anything in a code block
-
$s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s);
- // ignore anything in a bbtag
+ // Force line feeds at bbtags
+ $s = str_replace(array("[", "]"), array("\n[", "]\n"), $s);
+ // ignore anything in a bbtag
$s = preg_replace('/\[(.*?)\]/sm','',$s);
// Match full names against @tags including the space between first and last
return false;
}}
+
+// Find any non-embedded images in private items and add redir links to them
+
+if(! function_exists('redir_private_images')) {
+function redir_private_images($a, &$item) {
+
+ $matches = false;
+ $cnt = preg_match_all('|\[img\](http[^\[]*?/photo/[a-fA-F0-9]+?(-[0-9]\.[\w]+?)?)\[\/img\]|', $item['body'], $matches, PREG_SET_ORDER);
+ if($cnt) {
+ //logger("redir_private_images: matches = " . print_r($matches, true));
+ foreach($matches as $mtch) {
+ if(strpos($mtch[1], '/redir') !== false)
+ continue;
+
+ if((local_user() == $item['uid']) && ($item['private'] != 0) && ($item['contact-id'] != $a->contact['id']) && ($item['network'] == NETWORK_DFRN)) {
+ //logger("redir_private_images: redir");
+ $img_url = $a->get_baseurl() . '/redir?f=1&quiet=1&url=' . $mtch[1] . '&conurl=' . $item['author-link'];
+ $item['body'] = str_replace($mtch[0], "[img]".$img_url."[/img]", $item['body']);
+ }
+ }
+ }
+
+}}
+
+
// Given an item array, convert the body element from bbcode to html and add smilie icons.
// If attach is true, also add icons for item attachments
-
if(! function_exists('prepare_body')) {
function prepare_body($item,$attach = false) {
$a = get_app();
call_hooks('prepare_body_init', $item);
- $cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body']));
+ //$cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body']));
+ $cachefile = get_cachefile($item["guid"]."-".hash("md5", $item['body']));
if (($cachefile != '')) {
- if (file_exists($cachefile))
+ if (file_exists($cachefile)) {
+ $stamp1 = microtime(true);
$s = file_get_contents($cachefile);
- else {
+ $a->save_timestamp($stamp1, "file");
+ } else {
+ redir_private_images($a, $item);
$s = prepare_text($item['body']);
+
+ $stamp1 = microtime(true);
file_put_contents($cachefile, $s);
+ $a->save_timestamp($stamp1, "file");
+
+ logger('prepare_body: put item '.$item["id"].' into cachefile '.$cachefile);
}
- } else
+ } else {
+ redir_private_images($a, $item);
$s = prepare_text($item['body']);
+ }
$prep_arr = array('item' => $item, 'html' => $s);
return $s;
}
- $arr = explode(',',$item['attach']);
+ $arr = explode('[/attach],',$item['attach']);
if(count($arr)) {
$s .= '<div class="body-attach">';
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 = '<div class="attachtype icon s22 type-' . $filetype . ' subtype-' . $filesubtype . '"></div>';
+ /*$icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/')));
switch($icontype) {
case 'video':
case 'audio':
default:
$icon = '<div class="attachtype icon s22 type-unkn"></div>';
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))