mirror of
https://github.com/friendica/friendica
synced 2025-04-27 00:30:10 +00:00
Merge commit 'upstream/master'
This commit is contained in:
commit
11c29e0cba
255 changed files with 20796 additions and 3539 deletions
|
@ -255,6 +255,11 @@ function scrape_feed($url) {
|
|||
}
|
||||
}
|
||||
}
|
||||
// perhaps an RSS version 1 feed with a generic or incorrect content-type?
|
||||
if(stristr($s,'</item>')) {
|
||||
$ret['feed_rss'] = $url;
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @package acl_selectors
|
||||
*/
|
||||
function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
||||
|
||||
$a = get_app();
|
||||
|
|
|
@ -6,11 +6,6 @@
|
|||
function localize_item(&$item){
|
||||
|
||||
$Text = $item['body'];
|
||||
|
||||
|
||||
// find private image (w/data url) if present and convert image
|
||||
// link to a magic-auth redirect.
|
||||
|
||||
$saved_image = '';
|
||||
$img_start = strpos($Text,'[img]data:');
|
||||
$img_end = strpos($Text,'[/img]');
|
||||
|
@ -184,8 +179,11 @@ function localize_item(&$item){
|
|||
* that are based on unique features of the calling module.
|
||||
*
|
||||
*/
|
||||
|
||||
if(!function_exists('conversation')) {
|
||||
function conversation(&$a, $items, $mode, $update, $preview = false) {
|
||||
|
||||
|
||||
require_once('bbcode.php');
|
||||
|
||||
$profile_owner = 0;
|
||||
|
@ -221,7 +219,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
if($update)
|
||||
$return_url = $_SESSION['return_url'];
|
||||
else
|
||||
$return_url = $_SESSION['return_url'] = $a->cmd;
|
||||
$return_url = $_SESSION['return_url'] = $a->query_string;
|
||||
|
||||
load_contact_links(local_user());
|
||||
|
||||
|
@ -231,13 +229,13 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
$items = $cb['items'];
|
||||
|
||||
$cmnt_tpl = get_markup_template('comment_item.tpl');
|
||||
$tpl = get_markup_template('wall_item.tpl');
|
||||
$wallwall = get_markup_template('wallwall_item.tpl');
|
||||
$tpl = 'wall_item.tpl';
|
||||
$wallwall = 'wallwall_item.tpl';
|
||||
$hide_comments_tpl = get_markup_template('hide_comments.tpl');
|
||||
|
||||
$alike = array();
|
||||
$dlike = array();
|
||||
$o = "";
|
||||
|
||||
|
||||
// array with html for each thread (parent+comments)
|
||||
$threads = array();
|
||||
|
@ -250,7 +248,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
// "New Item View" on network page or search page results
|
||||
// - just loop through the items and format them minimally for display
|
||||
|
||||
$tpl = get_markup_template('search_item.tpl');
|
||||
//$tpl = get_markup_template('search_item.tpl');
|
||||
$tpl = 'search_item.tpl';
|
||||
|
||||
foreach($items as $item) {
|
||||
$threadsid++;
|
||||
|
@ -316,43 +315,46 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
|
||||
$body = prepare_body($item,true);
|
||||
|
||||
$tmp_item = replace_macros($tpl,array(
|
||||
'$id' => (($preview) ? 'P0' : $item['item_id']),
|
||||
'$linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
|
||||
'$profile_url' => $profile_link,
|
||||
'$item_photo_menu' => item_photo_menu($item),
|
||||
'$name' => template_escape($profile_name),
|
||||
'$sparkle' => $sparkle,
|
||||
'$lock' => $lock,
|
||||
'$thumb' => $profile_avatar,
|
||||
'$title' => template_escape($item['title']),
|
||||
'$body' => template_escape($body),
|
||||
'$ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
|
||||
'$lock' => $lock,
|
||||
'$location' => template_escape($location),
|
||||
'$indent' => '',
|
||||
'$owner_name' => template_escape($owner_name),
|
||||
'$owner_url' => $owner_url,
|
||||
'$owner_photo' => $owner_photo,
|
||||
'$plink' => get_plink($item),
|
||||
'$edpost' => false,
|
||||
'$isstarred' => $isstarred,
|
||||
'$star' => $star,
|
||||
'$drop' => $drop,
|
||||
'$vote' => $likebuttons,
|
||||
'$like' => '',
|
||||
'$dislike' => '',
|
||||
'$comment' => '',
|
||||
'$conv' => (($preview) ? '' : array('href'=> $a->get_baseurl() . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
|
||||
'$previewing' => $previewing,
|
||||
'$wait' => t('Please wait'),
|
||||
));
|
||||
//$tmp_item = replace_macros($tpl,array(
|
||||
$tmp_item = array(
|
||||
'template' => $tpl,
|
||||
'id' => (($preview) ? 'P0' : $item['item_id']),
|
||||
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
|
||||
'profile_url' => $profile_link,
|
||||
'item_photo_menu' => item_photo_menu($item),
|
||||
'name' => template_escape($profile_name),
|
||||
'sparkle' => $sparkle,
|
||||
'lock' => $lock,
|
||||
'thumb' => $profile_avatar,
|
||||
'title' => template_escape($item['title']),
|
||||
'body' => template_escape($body),
|
||||
'text' => strip_tags(template_escape($body)),
|
||||
'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
|
||||
'lock' => $lock,
|
||||
'location' => template_escape($location),
|
||||
'indent' => '',
|
||||
'owner_name' => template_escape($owner_name),
|
||||
'owner_url' => $owner_url,
|
||||
'owner_photo' => $owner_photo,
|
||||
'plink' => get_plink($item),
|
||||
'edpost' => false,
|
||||
'isstarred' => $isstarred,
|
||||
'star' => $star,
|
||||
'drop' => $drop,
|
||||
'vote' => $likebuttons,
|
||||
'like' => '',
|
||||
'dislike' => '',
|
||||
'comment' => '',
|
||||
'conv' => (($preview) ? '' : array('href'=> $a->get_baseurl() . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
|
||||
'previewing' => $previewing,
|
||||
'wait' => t('Please wait'),
|
||||
);
|
||||
|
||||
$arr = array('item' => $item, 'output' => $tmp_item);
|
||||
call_hooks('display_item', $arr);
|
||||
|
||||
$threads[$threadsid]['id'] = $item['item_id'];
|
||||
$threads[$threadsid]['html'] .= $arr['output'];
|
||||
$threads[$threadsid]['items'] = array($arr['output']);
|
||||
|
||||
}
|
||||
|
||||
|
@ -385,6 +387,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
}
|
||||
|
||||
$comments_collapsed = false;
|
||||
$comment_lastcollapsed = false;
|
||||
$comment_firstcollapsed = false;
|
||||
$blowhard = 0;
|
||||
$blowhard_count = 0;
|
||||
|
||||
|
@ -416,39 +420,26 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
$toplevelprivate = (($toplevelpost && $item['private']) ? true : false);
|
||||
$item_writeable = (($item['writable'] || $item['self']) ? true : false);
|
||||
|
||||
// DISABLED
|
||||
/*
|
||||
if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) {
|
||||
$blowhard_count ++;
|
||||
if($blowhard_count == 3) {
|
||||
$o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item['parent']
|
||||
. '" onclick="openClose(' . '\'icollapse-' . $item['parent'] . '\'); $(\'#icollapse-wrapper-' . $item['parent'] . '\').hide();" >'
|
||||
. t('See more posts like this') . '</div>' . '<div class="icollapse" id="icollapse-'
|
||||
. $item['parent'] . '" style="display: none;" >';
|
||||
}
|
||||
}
|
||||
else {
|
||||
$blowhard = $item['cid'];
|
||||
if($blowhard_count >= 3)
|
||||
$o .= '</div>';
|
||||
$blowhard_count = 0;
|
||||
}
|
||||
// END DISABLED
|
||||
*/
|
||||
|
||||
$comments_seen = 0;
|
||||
$comments_collapsed = false;
|
||||
$comment_lastcollapsed = false;
|
||||
$comment_firstcollapsed = false;
|
||||
|
||||
$threadsid++;
|
||||
$threads[$threadsid]['id'] = $item['item_id'];
|
||||
$threads[$threadsid]['html'] = "";
|
||||
$threads[$threadsid]['private'] = $item['private'];
|
||||
$threads[$threadsid]['items'] = array();
|
||||
|
||||
}
|
||||
else {
|
||||
// prevent private email from leaking into public conversation
|
||||
if((! $toplevelpost) && (! $toplevelprivate) && ($item['private']) && ($profile_owner != local_user()))
|
||||
|
||||
// prevent private email reply to public conversation from leaking.
|
||||
if($item['private'] && ! $threads[$threadsid]['private'])
|
||||
continue;
|
||||
|
||||
$comments_seen ++;
|
||||
$comment_lastcollapsed = false;
|
||||
$comment_firstcollapsed = false;
|
||||
}
|
||||
|
||||
$override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
|
||||
|
@ -456,23 +447,17 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
|
||||
|
||||
if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
|
||||
if(! $comments_collapsed) {
|
||||
|
||||
// IMPORTANT: the closing </div> in the hide_comments template
|
||||
// is supplied below in code.
|
||||
|
||||
$threads[$threadsid]['html'] .= replace_macros($hide_comments_tpl,array(
|
||||
'$id' => $item['parent'],
|
||||
'$num_comments' => sprintf( tt('%d comment','%d comments',$comments[$item['parent']]),
|
||||
$comments[$item['parent']]),
|
||||
'$display' => 'none',
|
||||
'$hide_text' => t('show more')
|
||||
));
|
||||
if (!$comments_collapsed){
|
||||
$threads[$threadsid]['num_comments'] = sprintf( tt('%d comment','%d comments',$comments[$item['parent']]),$comments[$item['parent']] );
|
||||
$threads[$threadsid]['hide_text'] = t('show more');
|
||||
$comments_collapsed = true;
|
||||
$comment_firstcollapsed = true;
|
||||
}
|
||||
}
|
||||
if(($comments[$item['parent']] > 2) && ($comments_seen == ($comments[$item['parent']] - 1))) {
|
||||
$threads[$threadsid]['html'] .= '</div>';
|
||||
|
||||
$comment_lastcollapsed = true;
|
||||
}
|
||||
|
||||
$redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
|
||||
|
@ -502,7 +487,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
$template = $wallwall;
|
||||
$commentww = 'ww';
|
||||
}
|
||||
if((! $item['wall']) && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) {
|
||||
if((! $item['wall']) && (strlen($item['owner-link'])) && (! link_compare($item['owner-link'],$item['author-link']))) {
|
||||
|
||||
// Could be anybody.
|
||||
|
||||
|
@ -649,63 +634,72 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
|
|||
// Build the HTML
|
||||
|
||||
$body = prepare_body($item,true);
|
||||
//$tmp_item = replace_macros($template,
|
||||
$tmp_item = array(
|
||||
// collapse comments in template. I don't like this much...
|
||||
'comment_firstcollapsed' => $comment_firstcollapsed,
|
||||
'comment_lastcollapsed' => $comment_lastcollapsed,
|
||||
// template to use to render item (wall, walltowall, search)
|
||||
'template' => $template,
|
||||
|
||||
'type' => implode("",array_slice(split("/",$item['verb']),-1)),
|
||||
'tags' => $tags,
|
||||
'body' => template_escape($body),
|
||||
'text' => strip_tags(template_escape($body)),
|
||||
'id' => $item['item_id'],
|
||||
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
|
||||
'olinktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])),
|
||||
'to' => t('to'),
|
||||
'wall' => t('Wall-to-Wall'),
|
||||
'vwall' => t('via Wall-To-Wall:'),
|
||||
'profile_url' => $profile_link,
|
||||
'item_photo_menu' => item_photo_menu($item),
|
||||
'name' => template_escape($profile_name),
|
||||
'thumb' => $profile_avatar,
|
||||
'osparkle' => $osparkle,
|
||||
'sparkle' => $sparkle,
|
||||
'title' => template_escape($item['title']),
|
||||
'ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
|
||||
'lock' => $lock,
|
||||
'location' => template_escape($location),
|
||||
'indent' => $indent,
|
||||
'owner_url' => $owner_url,
|
||||
'owner_photo' => $owner_photo,
|
||||
'owner_name' => template_escape($owner_name),
|
||||
'plink' => get_plink($item),
|
||||
'edpost' => $edpost,
|
||||
'isstarred' => $isstarred,
|
||||
'star' => $star,
|
||||
'drop' => $drop,
|
||||
'vote' => $likebuttons,
|
||||
'like' => $like,
|
||||
'dislike' => $dislike,
|
||||
'comment' => $comment,
|
||||
'previewing' => $previewing,
|
||||
'wait' => t('Please wait'),
|
||||
|
||||
$tmp_item = replace_macros($template,array(
|
||||
'$type' => implode("",array_slice(explode("/",$item['verb']),-1)),
|
||||
'$tags' => $tags,
|
||||
'$body' => template_escape($body),
|
||||
'$id' => $item['item_id'],
|
||||
'$linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
|
||||
'$olinktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])),
|
||||
'$to' => t('to'),
|
||||
'$wall' => t('Wall-to-Wall'),
|
||||
'$vwall' => t('via Wall-To-Wall:'),
|
||||
'$profile_url' => $profile_link,
|
||||
'$item_photo_menu' => item_photo_menu($item),
|
||||
'$name' => template_escape($profile_name),
|
||||
'$thumb' => $profile_avatar,
|
||||
'$osparkle' => $osparkle,
|
||||
'$sparkle' => $sparkle,
|
||||
'$title' => template_escape($item['title']),
|
||||
'$ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])),
|
||||
'$lock' => $lock,
|
||||
'$location' => template_escape($location),
|
||||
'$indent' => $indent,
|
||||
'$owner_url' => $owner_url,
|
||||
'$owner_photo' => $owner_photo,
|
||||
'$owner_name' => template_escape($owner_name),
|
||||
'$plink' => get_plink($item),
|
||||
'$edpost' => $edpost,
|
||||
'$isstarred' => $isstarred,
|
||||
'$star' => $star,
|
||||
'$drop' => $drop,
|
||||
'$vote' => $likebuttons,
|
||||
'$like' => $like,
|
||||
'$dislike' => $dislike,
|
||||
'$comment' => $comment,
|
||||
'$previewing' => $previewing,
|
||||
'$wait' => t('Please wait'),
|
||||
|
||||
));
|
||||
);
|
||||
|
||||
|
||||
$arr = array('item' => $item, 'output' => $tmp_item);
|
||||
call_hooks('display_item', $arr);
|
||||
|
||||
$threads[$threadsid]['html'] .= $arr['output'];
|
||||
$threads[$threadsid]['items'][] = $arr['output'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$page_template = get_markup_template("conversation.tpl");
|
||||
$o .= replace_macros($page_template, array(
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$mode' => $mode,
|
||||
'$user' => $a->user,
|
||||
'$threads' => $threads,
|
||||
'$dropping' => ($dropping?t('Delete Selected Items'):False),
|
||||
));
|
||||
|
||||
return $o;
|
||||
}
|
||||
}}
|
||||
|
||||
function best_link_url($item,&$sparkle) {
|
||||
|
||||
|
|
|
@ -25,9 +25,12 @@ function notification($params) {
|
|||
$title = $body = '';
|
||||
}
|
||||
|
||||
// e.g. "your post", "David's photo", etc.
|
||||
$possess_desc = t('%s <!item_type!>');
|
||||
|
||||
if($params['type'] == NOTIFY_MAIL) {
|
||||
|
||||
$subject = sprintf( t('New mail received at %s'),$sitename);
|
||||
$subject = sprintf( t('[Friendica:Notify] New mail received at %s'),$sitename);
|
||||
|
||||
$preamble = sprintf( t('%s sent you a new private message at %s.'),$params['source_name'],$sitename);
|
||||
$epreamble = sprintf( t('%s sent you %s.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]');
|
||||
|
@ -38,17 +41,43 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_COMMENT) {
|
||||
logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
|
||||
// logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
|
||||
|
||||
$parent_id = $params['parent'];
|
||||
|
||||
|
||||
// if it's a post figure out who's post it is.
|
||||
|
||||
$p = null;
|
||||
|
||||
if($params['otype'] === 'item' && $parent_id) {
|
||||
$p = q("select * from item where id = %d and uid = %d limit 1",
|
||||
intval($parent_id),
|
||||
intval($params['uid'])
|
||||
);
|
||||
}
|
||||
|
||||
$possess_desc = str_replace('<!item_type!>',item_post_type($p[0]),$possess_desc);
|
||||
|
||||
// "a post"
|
||||
$dest_str = sprintf($possess_desc,'a');
|
||||
|
||||
// "George Bull's post"
|
||||
if($p)
|
||||
$dest_str = sprintf($possess_desc,sprintf( t("%s's"),$p[0]['author-name']));
|
||||
|
||||
// "your post"
|
||||
if($p[0]['owner-name'] == $p[0]['author-name'] && $p[0]['wall'])
|
||||
$dest_str = sprintf($possess_desc, t('your') );
|
||||
|
||||
// Some mail softwares relies on subject field for threading.
|
||||
// So, we cannot have different subjects for notifications of the same thread.
|
||||
// Before this we have the name of the replier on the subject rendering
|
||||
// differents subjects for messages on the same thread.
|
||||
$subject = sprintf( t('Someone commented on item #%d at %s'), $parent_id, $sitename);
|
||||
|
||||
$subject = sprintf( t('[Friendica:Notify] Comment to conversation #%d by %s'), $parent_id, $params['source_name']);
|
||||
$preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']);
|
||||
$epreamble = sprintf( t('%s commented in %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a watched conversation') . '[/url]');
|
||||
$epreamble = sprintf( t('%s commented on %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . $dest_str . '[/url]');
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl );
|
||||
|
@ -57,7 +86,10 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_WALL) {
|
||||
$preamble = $subject = sprintf( t('%s posted to your profile wall at %s') , $params['source_name'], $sitename);
|
||||
$subject = sprintf( t('[Friendica:Notify] %s posted to your profile wall') , $params['source_name']);
|
||||
|
||||
$preamble = sprintf( t('%s posted to your profile wall at %s') , $params['source_name'], $sitename);
|
||||
|
||||
$epreamble = sprintf( t('%s posted to %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your profile wall.') . '[/url]');
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
|
@ -67,7 +99,8 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_TAGSELF) {
|
||||
$preamble = $subject = sprintf( t('%s tagged you at %s') , $params['source_name'], $sitename);
|
||||
$subject = sprintf( t('[Friendica:Notify] %s tagged you') , $params['source_name']);
|
||||
$preamble = sprintf( t('%s tagged you at %s') , $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('%s %s.') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['link'] . ']' . t('tagged you') . '[/url]');
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
|
@ -77,7 +110,8 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_TAGSHARE) {
|
||||
$preamble = $subject = sprintf( t('%s tagged your post at %s') , $params['source_name'], $sitename);
|
||||
$subject = sprintf( t('[Friendica:Notify] %s tagged your post') , $params['source_name']);
|
||||
$preamble = sprintf( t('%s tagged your post at %s') , $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('%s tagged %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your post') . '[/url]' );
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
|
@ -87,7 +121,7 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_INTRO) {
|
||||
$subject = sprintf( t('Introduction received at %s'), $sitename);
|
||||
$subject = sprintf( t('[Friendica:Notify] Introduction received'));
|
||||
$preamble = sprintf( t('You\'ve received an introduction from \'%s\' at %s'), $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('You\'ve received %s from %s.'), '[url=$itemlink]' . t('an introduction') . '[/url]' , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
|
||||
$body = sprintf( t('You may visit their profile at %s'),$params['source_link']);
|
||||
|
@ -99,7 +133,7 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_SUGGEST) {
|
||||
$subject = sprintf( t('Friend suggestion received at %s'), $sitename);
|
||||
$subject = sprintf( t('[Friendica:Notify] Friend suggestion received'));
|
||||
$preamble = sprintf( t('You\'ve received a friend suggestion from \'%s\' at %s'), $params['source_name'], $sitename);
|
||||
$epreamble = sprintf( t('You\'ve received %s for %s from %s.'),
|
||||
'[url=$itemlink]' . t('a friend suggestion') . '[/url]',
|
||||
|
@ -143,6 +177,7 @@ function notification($params) {
|
|||
$datarray['date'] = datetime_convert();
|
||||
$datarray['uid'] = $params['uid'];
|
||||
$datarray['link'] = $itemlink;
|
||||
$datarray['parent'] = $parent_id;
|
||||
$datarray['type'] = $params['type'];
|
||||
$datarray['verb'] = $params['verb'];
|
||||
$datarray['otype'] = $params['otype'];
|
||||
|
@ -151,8 +186,8 @@ function notification($params) {
|
|||
|
||||
// create notification entry in DB
|
||||
|
||||
$r = q("insert into notify (hash,name,url,photo,date,uid,link,type,verb,otype)
|
||||
values('%s','%s','%s','%s','%s',%d,'%s',%d,'%s','%s')",
|
||||
$r = q("insert into notify (hash,name,url,photo,date,uid,link,parent,type,verb,otype)
|
||||
values('%s','%s','%s','%s','%s',%d,'%s',%d,%d,'%s','%s')",
|
||||
dbesc($datarray['hash']),
|
||||
dbesc($datarray['name']),
|
||||
dbesc($datarray['url']),
|
||||
|
@ -160,6 +195,7 @@ function notification($params) {
|
|||
dbesc($datarray['date']),
|
||||
intval($datarray['uid']),
|
||||
dbesc($datarray['link']),
|
||||
intval($datarray['parent']),
|
||||
intval($datarray['type']),
|
||||
dbesc($datarray['verb']),
|
||||
dbesc($datarray['otype'])
|
||||
|
@ -237,9 +273,12 @@ intval($params['uid']), LOGGER_DEBUG);
|
|||
$datarray['preamble'] = $preamble;
|
||||
$datarray['sitename'] = $sitename;
|
||||
$datarray['siteurl'] = $siteurl;
|
||||
$datarray['type'] = $params['type'];
|
||||
$datarray['parent'] = $params['parent'];
|
||||
$datarray['source_name'] = $params['source_name'];
|
||||
$datarray['source_link'] = $params['source_link'];
|
||||
$datarray['source_photo'] = $params['source_photo'];
|
||||
$datarray['uid'] = $params['uid'];
|
||||
$datarray['username'] = $params['to_name'];
|
||||
$datarray['hsitelink'] = $hsitelink;
|
||||
$datarray['tsitelink'] = $tsitelink;
|
||||
|
|
|
@ -216,7 +216,7 @@ function html2bbcode($message)
|
|||
node2bbcode($doc, 'audio', array('src'=>'/(.+)/'), '[audio]$1', '[/audio]');
|
||||
node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), '[iframe]$1', '[/iframe]');
|
||||
|
||||
node2bbcode($doc, 'code', array(), '[code]$1', '[/code]');
|
||||
node2bbcode($doc, 'code', array(), '[code]', '[/code]');
|
||||
|
||||
$message = $doc->saveHTML();
|
||||
|
||||
|
|
|
@ -1595,6 +1595,14 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
if((activity_match($datarray['verb'],ACTIVITY_LIKE)) || (activity_match($datarray['verb'],ACTIVITY_DISLIKE))) {
|
||||
$datarray['type'] = 'activity';
|
||||
$datarray['gravity'] = GRAVITY_LIKE;
|
||||
// only one like or dislike per person
|
||||
$r = q("select id from item where uid = %d and `contact-id` = %d and verb ='%s' and deleted = 0 limit 1",
|
||||
intval($datarray['uid']),
|
||||
intval($datarray['contact-id']),
|
||||
dbesc($datarray['verb'])
|
||||
);
|
||||
if($r && count($r))
|
||||
continue;
|
||||
}
|
||||
|
||||
if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) {
|
||||
|
@ -1747,6 +1755,18 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
$datarray['parent-uri'] = $item_id;
|
||||
$datarray['uid'] = $importer['uid'];
|
||||
$datarray['contact-id'] = $contact['id'];
|
||||
|
||||
if(! link_compare($datarray['owner-link'],$contact['url'])) {
|
||||
// The item owner info is not our contact. It's OK and is to be expected if this is a tgroup delivery,
|
||||
// but otherwise there's a possible data mixup on the sender's system.
|
||||
// the tgroup delivery code called from item_store will correct it if it's a forum,
|
||||
// but we're going to unconditionally correct it here so that the post will always be owned by our contact.
|
||||
logger('local_delivery: Correcting item owner.', LOGGER_DEBUG);
|
||||
$datarray['owner-name'] = $contact['name'];
|
||||
$datarray['owner-link'] = $contact['url'];
|
||||
$datarray['owner-avatar'] = $contact['thumb'];
|
||||
}
|
||||
|
||||
$r = item_store($datarray);
|
||||
continue;
|
||||
|
||||
|
@ -2136,6 +2156,14 @@ function local_delivery($importer,$data) {
|
|||
$datarray['type'] = 'activity';
|
||||
$datarray['gravity'] = GRAVITY_LIKE;
|
||||
$datarray['last-child'] = 0;
|
||||
// only one like or dislike per person
|
||||
$r = q("select id from item where uid = %d and `contact-id` = %d and verb ='%s' and deleted = 0 limit 1",
|
||||
intval($datarray['uid']),
|
||||
intval($datarray['contact-id']),
|
||||
dbesc($datarray['verb'])
|
||||
);
|
||||
if($r && count($r))
|
||||
continue;
|
||||
}
|
||||
|
||||
if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) {
|
||||
|
@ -2285,6 +2313,15 @@ function local_delivery($importer,$data) {
|
|||
if(($datarray['verb'] == ACTIVITY_LIKE) || ($datarray['verb'] == ACTIVITY_DISLIKE)) {
|
||||
$datarray['type'] = 'activity';
|
||||
$datarray['gravity'] = GRAVITY_LIKE;
|
||||
// only one like or dislike per person
|
||||
$r = q("select id from item where uid = %d and `contact-id` = %d and verb ='%s' and deleted = 0 limit 1",
|
||||
intval($datarray['uid']),
|
||||
intval($datarray['contact-id']),
|
||||
dbesc($datarray['verb'])
|
||||
);
|
||||
if($r && count($r))
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) {
|
||||
|
@ -2325,35 +2362,44 @@ function local_delivery($importer,$data) {
|
|||
|
||||
if(count($myconv)) {
|
||||
$importer_url = $a->get_baseurl() . '/profile/' . $importer['nickname'];
|
||||
foreach($myconv as $conv) {
|
||||
|
||||
if(! link_compare($conv['author-link'],$importer_url))
|
||||
continue;
|
||||
// first make sure this isn't our own post coming back to us from a wall-to-wall event
|
||||
if(! link_compare($datarray['author-link'],$importer_url)) {
|
||||
|
||||
require_once('include/enotify.php');
|
||||
|
||||
$conv_parent = $conv['parent'];
|
||||
foreach($myconv as $conv) {
|
||||
|
||||
notification(array(
|
||||
'type' => NOTIFY_COMMENT,
|
||||
'notify_flags' => $importer['notify-flags'],
|
||||
'language' => $importer['language'],
|
||||
'to_name' => $importer['username'],
|
||||
'to_email' => $importer['email'],
|
||||
'uid' => $importer['importer_uid'],
|
||||
'item' => $datarray,
|
||||
'link' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
|
||||
'source_name' => stripslashes($datarray['author-name']),
|
||||
'source_link' => $datarray['author-link'],
|
||||
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
|
||||
? $importer['thumb'] : $datarray['author-avatar']),
|
||||
'verb' => ACTIVITY_POST,
|
||||
'otype' => 'item',
|
||||
'parent' => $conv_parent,
|
||||
// now if we find a match, it means we're in this conversation
|
||||
|
||||
if(! link_compare($conv['author-link'],$importer_url))
|
||||
continue;
|
||||
|
||||
));
|
||||
require_once('include/enotify.php');
|
||||
|
||||
$conv_parent = $conv['parent'];
|
||||
|
||||
break;
|
||||
notification(array(
|
||||
'type' => NOTIFY_COMMENT,
|
||||
'notify_flags' => $importer['notify-flags'],
|
||||
'language' => $importer['language'],
|
||||
'to_name' => $importer['username'],
|
||||
'to_email' => $importer['email'],
|
||||
'uid' => $importer['importer_uid'],
|
||||
'item' => $datarray,
|
||||
'link' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
|
||||
'source_name' => stripslashes($datarray['author-name']),
|
||||
'source_link' => $datarray['author-link'],
|
||||
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
|
||||
? $importer['thumb'] : $datarray['author-avatar']),
|
||||
'verb' => ACTIVITY_POST,
|
||||
'otype' => 'item',
|
||||
'parent' => $conv_parent,
|
||||
|
||||
));
|
||||
|
||||
// only send one notification
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2424,12 +2470,24 @@ function local_delivery($importer,$data) {
|
|||
// This is my contact on another system, but it's really me.
|
||||
// Turn this into a wall post.
|
||||
|
||||
if($contact['remote_self'])
|
||||
if($importer['remote_self'])
|
||||
$datarray['wall'] = 1;
|
||||
|
||||
$datarray['parent-uri'] = $item_id;
|
||||
$datarray['uid'] = $importer['importer_uid'];
|
||||
$datarray['contact-id'] = $importer['id'];
|
||||
|
||||
if(! link_compare($datarray['owner-link'],$contact['url'])) {
|
||||
// The item owner info is not our contact. It's OK and is to be expected if this is a tgroup delivery,
|
||||
// but otherwise there's a possible data mixup on the sender's system.
|
||||
// the tgroup delivery code called from item_store will correct it if it's a forum,
|
||||
// but we're going to unconditionally correct it here so that the post will always be owned by our contact.
|
||||
logger('local_delivery: Correcting item owner.', LOGGER_DEBUG);
|
||||
$datarray['owner-name'] = $importer['senderName'];
|
||||
$datarray['owner-link'] = $importer['url'];
|
||||
$datarray['owner-avatar'] = $importer['thumb'];
|
||||
}
|
||||
|
||||
$r = item_store($datarray);
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -122,6 +122,9 @@ function nav(&$a) {
|
|||
}
|
||||
|
||||
$nav['messages'] = array('message', t('Messages'), "", t('Private mail'));
|
||||
$nav['messages']['inbox'] = array('message', t('Inbox'), "", t('Inbox'));
|
||||
$nav['messages']['outbox']= array('message/sent', t('Outbox'), "", t('Outbox'));
|
||||
$nav['messages']['new'] = array('message/new', t('New Message'), "", t('New Message'));
|
||||
|
||||
if(is_array($a->identities) && count($a->identities) > 1) {
|
||||
$nav['manage'] = array('manage', t('Manage'), "", t('Manage other pages'));
|
||||
|
|
|
@ -201,7 +201,7 @@ function notifier_run($argv, $argc){
|
|||
// by stringing togther an array of retractions and sending them onward.
|
||||
|
||||
|
||||
$localhost = $a->get_hostname();
|
||||
$localhost = str_replace('www.','',$a->get_hostname());
|
||||
if(strpos($localhost,':'))
|
||||
$localhost = substr($localhost,0,strpos($localhost,':'));
|
||||
|
||||
|
|
|
@ -108,14 +108,18 @@ function can_write_wall(&$a,$owner) {
|
|||
|
||||
if(remote_user()) {
|
||||
|
||||
// user remembered decision and avoid a DB lookup for each and every display item
|
||||
// use remembered decision and avoid a DB lookup for each and every display item
|
||||
// DO NOT use this function if there are going to be multiple owners
|
||||
|
||||
// We have a contact-id for an authenticated remote user, this block determines if the contact
|
||||
// belongs to this page owner, and has the necessary permissions to post content
|
||||
|
||||
if($verified === 2)
|
||||
return true;
|
||||
elseif($verified === 1)
|
||||
return false;
|
||||
else {
|
||||
|
||||
$r = q("SELECT `contact`.*, `user`.`page-flags` FROM `contact` LEFT JOIN `user` on `user`.`uid` = `contact`.`uid`
|
||||
WHERE `contact`.`uid` = %d AND `contact`.`id` = %d AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
|
||||
AND `user`.`blockwall` = 0 AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1",
|
||||
|
@ -125,6 +129,7 @@ function can_write_wall(&$a,$owner) {
|
|||
intval(CONTACT_IS_FRIEND),
|
||||
intval(PAGE_COMMUNITY)
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
$verified = 2;
|
||||
return true;
|
||||
|
@ -197,7 +202,7 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
|
|||
" AND ( allow_cid = '' OR allow_cid REGEXP '<%d>' )
|
||||
AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' )
|
||||
AND ( allow_gid = '' OR allow_gid REGEXP '%s' )
|
||||
AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s')
|
||||
AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s')
|
||||
",
|
||||
intval($remote_user),
|
||||
intval($remote_user),
|
||||
|
@ -207,4 +212,79 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
|
|||
}
|
||||
}
|
||||
return $sql;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function item_permissions_sql($owner_id,$remote_verified = false,$groups = null) {
|
||||
|
||||
$local_user = local_user();
|
||||
$remote_user = remote_user();
|
||||
|
||||
/**
|
||||
* Construct permissions
|
||||
*
|
||||
* default permissions - anonymous user
|
||||
*/
|
||||
|
||||
$sql = " AND allow_cid = ''
|
||||
AND allow_gid = ''
|
||||
AND deny_cid = ''
|
||||
AND deny_gid = ''
|
||||
AND private = 0
|
||||
";
|
||||
|
||||
/**
|
||||
* Profile owner - everything is visible
|
||||
*/
|
||||
|
||||
if(($local_user) && ($local_user == $owner_id)) {
|
||||
$sql = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Authenticated visitor. Unless pre-verified,
|
||||
* check that the contact belongs to this $owner_id
|
||||
* and load the groups the visitor belongs to.
|
||||
* If pre-verified, the caller is expected to have already
|
||||
* done this and passed the groups into this function.
|
||||
*/
|
||||
|
||||
elseif($remote_user) {
|
||||
|
||||
if(! $remote_verified) {
|
||||
$r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1",
|
||||
intval($remote_user),
|
||||
intval($owner_id)
|
||||
);
|
||||
if(count($r)) {
|
||||
$remote_verified = true;
|
||||
$groups = init_groups_visitor($remote_user);
|
||||
}
|
||||
}
|
||||
if($remote_verified) {
|
||||
|
||||
$gs = '<<>>'; // should be impossible to match
|
||||
|
||||
if(is_array($groups) && count($groups)) {
|
||||
foreach($groups as $g)
|
||||
$gs .= '|<' . intval($g) . '>';
|
||||
}
|
||||
|
||||
$sql = sprintf(
|
||||
" AND ( private = 0 OR ( private = 1 AND wall = 1 AND ( allow_cid = '' OR allow_cid REGEXP '<%d>' )
|
||||
AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' )
|
||||
AND ( allow_gid = '' OR allow_gid REGEXP '%s' )
|
||||
AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s')))
|
||||
",
|
||||
intval($remote_user),
|
||||
intval($remote_user),
|
||||
dbesc($gs),
|
||||
dbesc($gs)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
|
||||
define ("KEY_NOT_EXISTS", '^R_key_not_Exists^');
|
||||
|
||||
class Template {
|
||||
var $r;
|
||||
|
@ -28,30 +28,18 @@
|
|||
die();
|
||||
}
|
||||
|
||||
private function _build_replace($r, $prefix){
|
||||
|
||||
if(is_array($r) && count($r)) {
|
||||
foreach ($r as $k => $v ) {
|
||||
if (is_array($v)) {
|
||||
$this->_build_replace($v, "$prefix$k.");
|
||||
} else {
|
||||
$this->search[] = $prefix . $k;
|
||||
$this->replace[] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function _push_stack(){
|
||||
$this->stack[] = array($this->r, $this->search, $this->replace, $this->nodes);
|
||||
$this->stack[] = array($this->r, $this->nodes);
|
||||
}
|
||||
private function _pop_stack(){
|
||||
list($this->r, $this->search, $this->replace, $this->nodes) = array_pop($this->stack);
|
||||
list($this->r, $this->nodes) = array_pop($this->stack);
|
||||
|
||||
}
|
||||
|
||||
private function _get_var($name){
|
||||
$keys = array_map('trim',explode(".",$name));
|
||||
private function _get_var($name, $retNoKey=false){
|
||||
$keys = array_map('trim',explode(".",$name));
|
||||
if ($retNoKey && !array_key_exists($keys[0], $this->r)) return KEY_NOT_EXISTS;
|
||||
$val = $this->r;
|
||||
foreach($keys as $k) {
|
||||
$val = (isset($val[$k]) ? $val[$k] : null);
|
||||
|
@ -116,7 +104,15 @@
|
|||
* {{ inc <templatefile> [with $var1=$var2] }}{{ endinc }}
|
||||
*/
|
||||
private function _replcb_inc($args){
|
||||
list($tplfile, $newctx) = array_map('trim', explode("with",$args[2]));
|
||||
if (strpos($args[2],"with")) {
|
||||
list($tplfile, $newctx) = array_map('trim', explode("with",$args[2]));
|
||||
} else {
|
||||
$tplfile = trim($args[2]);
|
||||
$newctx = null;
|
||||
}
|
||||
|
||||
if ($tplfile[0]=="$") $tplfile = $this->_get_var($tplfile);
|
||||
|
||||
$this->_push_stack();
|
||||
$r = $this->r;
|
||||
if (!is_null($newctx)) {
|
||||
|
@ -161,40 +157,33 @@
|
|||
return $s;
|
||||
}
|
||||
|
||||
/*
|
||||
private function _str_replace($str){
|
||||
#$this->search,$this->replace,
|
||||
$searchs = $this->search;
|
||||
foreach($searchs as $search){
|
||||
$search = "|".preg_quote($search)."(\|[a-zA-Z0-9_]*)*|";
|
||||
$m = array();
|
||||
if (preg_match_all($search, $str,$m)){
|
||||
foreach ($m[0] as $match){
|
||||
$toks = explode("|",$match);
|
||||
$val = $this->_get_var($toks[0]);
|
||||
for($k=1; $k<count($toks); $k++){
|
||||
$func = $toks[$k];
|
||||
if (function_exists($func)) $val = $func($val);
|
||||
}
|
||||
if (count($toks)>1){
|
||||
$str = str_replace( $match, $val, $str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return str_replace($this->search,$this->replace, $str);
|
||||
}*/
|
||||
|
||||
private function var_replace($s){
|
||||
$m = array();
|
||||
/** regexp:
|
||||
* \$ literal $
|
||||
* (\[)? optional open square bracket
|
||||
* ([a-zA-Z0-9-_]+\.?)+ var name, followed by optional
|
||||
* dot, repeated at least 1 time
|
||||
* (?(1)\]) if there was opened square bracket
|
||||
* (subgrup 1), match close bracket
|
||||
*/
|
||||
if (preg_match_all('/\$(\[)?([a-zA-Z0-9-_]+\.?)+(?(1)\])/', $s,$m)){
|
||||
|
||||
foreach($m[0] as $var){
|
||||
$varn = str_replace(array("[","]"), array("",""), $var);
|
||||
$val = $this->_get_var($varn, true);
|
||||
if ($val!=KEY_NOT_EXISTS)
|
||||
$s = str_replace($var, $val, $s);
|
||||
}
|
||||
}
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
public function replace($s, $r) {
|
||||
$this->r = $r;
|
||||
$this->search = array();
|
||||
$this->replace = array();
|
||||
|
||||
$this->_build_replace($r, "");
|
||||
|
||||
#$s = str_replace(array("\n","\r"),array("§n§","§r§"),$s);
|
||||
$s = $this->_build_nodes($s);
|
||||
|
||||
$s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s);
|
||||
|
@ -202,12 +191,12 @@
|
|||
|
||||
// remove comments block
|
||||
$s = preg_replace('/{#[^#]*#}/', "" , $s);
|
||||
|
||||
// replace strings recursively (limit to 10 loops)
|
||||
$os = ""; $count=0;
|
||||
while($os!=$s && $count<10){
|
||||
$os=$s; $count++;
|
||||
//$s = $this->_str_replace($s);
|
||||
$s = str_replace($this->search, $this->replace, $s);
|
||||
$s = $this->var_replace($s);
|
||||
}
|
||||
return template_unescape($s);
|
||||
}
|
||||
|
|
43
include/text.php
Executable file → Normal file
43
include/text.php
Executable file → Normal file
|
@ -14,7 +14,13 @@ if(! function_exists('replace_macros')) {
|
|||
function replace_macros($s,$r) {
|
||||
global $t;
|
||||
|
||||
return $t->replace($s,$r);
|
||||
//$ts = microtime();
|
||||
$r = $t->replace($s,$r);
|
||||
//$tt = microtime() - $ts;
|
||||
|
||||
//$a = get_app();
|
||||
//$a->page['debug'] .= "$tt <br>\n";
|
||||
return $r;
|
||||
|
||||
}}
|
||||
|
||||
|
@ -731,7 +737,10 @@ function smilies($s, $sample = false) {
|
|||
':headdesk',
|
||||
'~friendika',
|
||||
'~friendica',
|
||||
'Diaspora*'
|
||||
// 'Diaspora*'
|
||||
':beard',
|
||||
':whitebeard'
|
||||
|
||||
);
|
||||
|
||||
$icons = array(
|
||||
|
@ -772,8 +781,9 @@ function smilies($s, $sample = false) {
|
|||
'<img src="' . $a->get_baseurl() . '/images/smiley-bangheaddesk.gif" alt=":headdesk" />',
|
||||
'<a href="http://project.friendika.com">~friendika <img src="' . $a->get_baseurl() . '/images/friendika-16.png" alt="~friendika" /></a>',
|
||||
'<a href="http://friendica.com">~friendica <img src="' . $a->get_baseurl() . '/images/friendica-16.png" alt="~friendica" /></a>',
|
||||
'<a href="http://diasporafoundation.org">Diaspora<img src="' . $a->get_baseurl() . '/images/diaspora.png" alt="Diaspora*" /></a>',
|
||||
|
||||
// '<a href="http://diasporafoundation.org">Diaspora<img src="' . $a->get_baseurl() . '/images/diaspora.png" alt="Diaspora*" /></a>',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-beard.png" alt=":beard" />',
|
||||
'<img src="' . $a->get_baseurl() . '/images/smiley-whitebeard.png" alt=":whitebeard" />'
|
||||
);
|
||||
|
||||
$params = array('texts' => $texts, 'icons' => $icons, 'string' => $s);
|
||||
|
@ -786,6 +796,7 @@ function smilies($s, $sample = false) {
|
|||
}
|
||||
}
|
||||
else {
|
||||
$params['string'] = preg_replace_callback('/<(3+)/','preg_heart',$params['string']);
|
||||
$s = str_replace($params['texts'],$params['icons'],$params['string']);
|
||||
}
|
||||
|
||||
|
@ -804,7 +815,18 @@ function smile_decode($m) {
|
|||
return(str_replace($m[1],base64url_decode($m[1]),$m[0]));
|
||||
}
|
||||
|
||||
// expand <3333 to the correct number of hearts
|
||||
|
||||
function preg_heart($x) {
|
||||
$a = get_app();
|
||||
if(strlen($x[1]) == 1)
|
||||
return $x[0];
|
||||
$t = '';
|
||||
for($cnt = 0; $cnt < strlen($x[1]); $cnt ++)
|
||||
$t .= '<img src="' . $a->get_baseurl() . '/images/smiley-heart.gif" alt="<3" />';
|
||||
$r = str_replace($x[0],$t,$x[0]);
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
if(! function_exists('day_translate')) {
|
||||
|
@ -1201,3 +1223,16 @@ function reltoabs($text, $base)
|
|||
return $text;
|
||||
}
|
||||
|
||||
function item_post_type($item) {
|
||||
if(intval($item['event-id']))
|
||||
return t('event');
|
||||
if(strlen($item['resource-id']))
|
||||
return t('photo');
|
||||
if(strlen($item['verb']) && $item['verb'] !== ACTIVITY_POST)
|
||||
return t('activity');
|
||||
if($item['id'] != $item['parent'])
|
||||
return t('comment');
|
||||
return t('post');
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue