forked from GNUsocial/gnu-social
Merge branch 'testing' into 0.9.x
This commit is contained in:
73
lib/util.php
73
lib/util.php
@@ -426,14 +426,14 @@ function common_render_content($text, $notice)
|
||||
{
|
||||
$r = common_render_text($text);
|
||||
$id = $notice->profile_id;
|
||||
$r = common_linkify_mentions($id, $r);
|
||||
$r = common_linkify_mentions($r, $notice);
|
||||
$r = preg_replace('/(^|[\s\.\,\:\;]+)!([A-Za-z0-9]{1,64})/e', "'\\1!'.common_group_link($id, '\\2')", $r);
|
||||
return $r;
|
||||
}
|
||||
|
||||
function common_linkify_mentions($profile_id, $text)
|
||||
function common_linkify_mentions($text, $notice)
|
||||
{
|
||||
$mentions = common_find_mentions($profile_id, $text);
|
||||
$mentions = common_find_mentions($text, $notice);
|
||||
|
||||
// We need to go through in reverse order by position,
|
||||
// so our positions stay valid despite our fudging with the
|
||||
@@ -487,11 +487,11 @@ function common_linkify_mention($mention)
|
||||
return $output;
|
||||
}
|
||||
|
||||
function common_find_mentions($profile_id, $text)
|
||||
function common_find_mentions($text, $notice)
|
||||
{
|
||||
$mentions = array();
|
||||
|
||||
$sender = Profile::staticGet('id', $profile_id);
|
||||
$sender = Profile::staticGet('id', $notice->profile_id);
|
||||
|
||||
if (empty($sender)) {
|
||||
return $mentions;
|
||||
@@ -499,6 +499,30 @@ function common_find_mentions($profile_id, $text)
|
||||
|
||||
if (Event::handle('StartFindMentions', array($sender, $text, &$mentions))) {
|
||||
|
||||
// Get the context of the original notice, if any
|
||||
|
||||
$originalAuthor = null;
|
||||
$originalNotice = null;
|
||||
$originalMentions = array();
|
||||
|
||||
// Is it a reply?
|
||||
|
||||
if (!empty($notice) && !empty($notice->reply_to)) {
|
||||
$originalNotice = Notice::staticGet('id', $notice->reply_to);
|
||||
if (!empty($originalNotice)) {
|
||||
$originalAuthor = Profile::staticGet('id', $originalNotice->profile_id);
|
||||
|
||||
$ids = $originalNotice->getReplies();
|
||||
|
||||
foreach ($ids as $id) {
|
||||
$repliedTo = Profile::staticGet('id', $id);
|
||||
if (!empty($repliedTo)) {
|
||||
$originalMentions[$repliedTo->nickname] = $repliedTo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
preg_match_all('/^T ([A-Z0-9]{1,64}) /',
|
||||
$text,
|
||||
$tmatches,
|
||||
@@ -514,7 +538,22 @@ function common_find_mentions($profile_id, $text)
|
||||
foreach ($matches as $match) {
|
||||
|
||||
$nickname = common_canonical_nickname($match[0]);
|
||||
$mentioned = common_relative_profile($sender, $nickname);
|
||||
|
||||
// Try to get a profile for this nickname.
|
||||
// Start with conversation context, then go to
|
||||
// sender context.
|
||||
|
||||
if (!empty($originalAuthor) && $originalAuthor->nickname == $nickname) {
|
||||
|
||||
$mentioned = $originalAuthor;
|
||||
|
||||
} else if (!empty($originalMentions) &&
|
||||
array_key_exists($nickname, $originalMentions)) {
|
||||
|
||||
$mention = $originalMentions[$nickname];
|
||||
} else {
|
||||
$mentioned = common_relative_profile($sender, $nickname);
|
||||
}
|
||||
|
||||
if (!empty($mentioned)) {
|
||||
|
||||
@@ -849,7 +888,7 @@ function common_relative_profile($sender, $nickname, $dt=null)
|
||||
return null;
|
||||
}
|
||||
|
||||
function common_local_url($action, $args=null, $params=null, $fragment=null)
|
||||
function common_local_url($action, $args=null, $params=null, $fragment=null, $addSession=true)
|
||||
{
|
||||
$r = Router::get();
|
||||
$path = $r->build($action, $args, $params, $fragment);
|
||||
@@ -857,12 +896,12 @@ function common_local_url($action, $args=null, $params=null, $fragment=null)
|
||||
$ssl = common_is_sensitive($action);
|
||||
|
||||
if (common_config('site','fancy')) {
|
||||
$url = common_path(mb_substr($path, 1), $ssl);
|
||||
$url = common_path(mb_substr($path, 1), $ssl, $addSession);
|
||||
} else {
|
||||
if (mb_strpos($path, '/index.php') === 0) {
|
||||
$url = common_path(mb_substr($path, 1), $ssl);
|
||||
$url = common_path(mb_substr($path, 1), $ssl, $addSession);
|
||||
} else {
|
||||
$url = common_path('index.php'.$path, $ssl);
|
||||
$url = common_path('index.php'.$path, $ssl, $addSession);
|
||||
}
|
||||
}
|
||||
return $url;
|
||||
@@ -881,7 +920,7 @@ function common_is_sensitive($action)
|
||||
return $ssl;
|
||||
}
|
||||
|
||||
function common_path($relative, $ssl=false)
|
||||
function common_path($relative, $ssl=false, $addSession=true)
|
||||
{
|
||||
$pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
|
||||
|
||||
@@ -905,7 +944,9 @@ function common_path($relative, $ssl=false)
|
||||
}
|
||||
}
|
||||
|
||||
$relative = common_inject_session($relative, $serverpart);
|
||||
if ($addSession) {
|
||||
$relative = common_inject_session($relative, $serverpart);
|
||||
}
|
||||
|
||||
return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
|
||||
}
|
||||
@@ -1127,14 +1168,15 @@ function common_broadcast_profile(Profile $profile)
|
||||
|
||||
function common_profile_url($nickname)
|
||||
{
|
||||
return common_local_url('showstream', array('nickname' => $nickname));
|
||||
return common_local_url('showstream', array('nickname' => $nickname),
|
||||
null, null, false);
|
||||
}
|
||||
|
||||
// Should make up a reasonable root URL
|
||||
|
||||
function common_root_url($ssl=false)
|
||||
{
|
||||
$url = common_path('', $ssl);
|
||||
$url = common_path('', $ssl, false);
|
||||
$i = strpos($url, '?');
|
||||
if ($i !== false) {
|
||||
$url = substr($url, 0, $i);
|
||||
@@ -1419,7 +1461,8 @@ function common_remove_magic_from_request()
|
||||
|
||||
function common_user_uri(&$user)
|
||||
{
|
||||
return common_local_url('userbyid', array('id' => $user->id));
|
||||
return common_local_url('userbyid', array('id' => $user->id),
|
||||
null, null, false);
|
||||
}
|
||||
|
||||
function common_notice_uri(&$notice)
|
||||
|
Reference in New Issue
Block a user