getConversationUrl introduced for linking to conversations
This commit is contained in:
parent
4774a25040
commit
27ed6b7db0
@ -97,4 +97,22 @@ class Conversation extends Managed_DataObject
|
||||
|
||||
return $cnt;
|
||||
}
|
||||
|
||||
static public function getUrlFromNotice(Notice $notice, $anchor=true)
|
||||
{
|
||||
$conv = self::getKV('id', $notice->conversation);
|
||||
return $conv->getUrl($anchor ? $notice->id : null);
|
||||
}
|
||||
|
||||
public function getUri()
|
||||
{
|
||||
return $this->uri;
|
||||
}
|
||||
|
||||
public function getUrl($noticeId=null)
|
||||
{
|
||||
// FIXME: the URL router should take notice-id as an argument...
|
||||
return common_local_url('conversation', array('id' => $this->id)) .
|
||||
($noticeId===null ? '' : "#notice-{$noticeId}");
|
||||
}
|
||||
}
|
||||
|
@ -210,11 +210,27 @@ class Notice extends Managed_DataObject
|
||||
return $this->uri;
|
||||
}
|
||||
|
||||
/*
|
||||
* @param $root boolean If true, link to just the conversation root.
|
||||
*
|
||||
* @return URL to conversation
|
||||
*/
|
||||
public function getConversationUrl($anchor=true)
|
||||
{
|
||||
return Conversation::getUrlFromNotice($this, $anchor);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the local representation URL of this notice.
|
||||
*/
|
||||
public function getLocalUrl()
|
||||
{
|
||||
return common_local_url('shownotice', array('notice' => $this->id), null, null, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the original representation URL of this notice.
|
||||
*/
|
||||
public function getUrl()
|
||||
{
|
||||
// The risk is we start having empty urls and non-http uris...
|
||||
|
@ -126,7 +126,9 @@ class NoticeListItem extends Widget
|
||||
$this->showNoticeLink();
|
||||
$this->showNoticeSource();
|
||||
$this->showNoticeLocation();
|
||||
if ($this->notice->hasConversation()) {
|
||||
$this->showContext();
|
||||
}
|
||||
$this->showRepeat();
|
||||
Event::handle('EndShowNoticeInfo', array($this));
|
||||
}
|
||||
@ -520,32 +522,11 @@ class NoticeListItem extends Widget
|
||||
*/
|
||||
function showContext()
|
||||
{
|
||||
if ($this->notice->hasConversation()) {
|
||||
$conv = Conversation::getKV(
|
||||
'id',
|
||||
$this->notice->conversation
|
||||
);
|
||||
$convurl = $conv->uri;
|
||||
if (!empty($convurl)) {
|
||||
$this->out->text(' ');
|
||||
$this->out->element(
|
||||
'a',
|
||||
array(
|
||||
'href' => $convurl.'#notice-'.$this->notice->id,
|
||||
'class' => 'response'),
|
||||
$this->out->element('a',
|
||||
array('href' => $this->notice->getConversationUrl(),
|
||||
'class' => 'conversation'),
|
||||
// TRANS: Addition in notice list item if notice is part of a conversation.
|
||||
_('in context')
|
||||
);
|
||||
} else {
|
||||
$msg = sprintf(
|
||||
"Couldn't find Conversation ID %d to make 'in context'"
|
||||
. "link for Notice ID %d",
|
||||
$this->notice->conversation,
|
||||
$this->notice->id
|
||||
);
|
||||
common_log(LOG_WARNING, $msg);
|
||||
}
|
||||
}
|
||||
_('in context'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -183,17 +183,9 @@ class UserEmailSummaryHandler extends QueueHandler
|
||||
'title' => $dt),
|
||||
common_date_string($notice->created));
|
||||
$out->elementEnd('a');
|
||||
if ($notice->hasConversation()) {
|
||||
$conv = Conversation::getKV('id', $notice->conversation);
|
||||
$convurl = $conv->uri;
|
||||
if (!empty($convurl)) {
|
||||
$out->text(' ');
|
||||
$out->element('a',
|
||||
array('href' => $convurl.'#notice-'.$notice->id),
|
||||
$out->element('a', array('href' => $notice->getConversationUrl()),
|
||||
// TRANS: Link text for link to conversation view.
|
||||
_m('in context'));
|
||||
}
|
||||
}
|
||||
$out->elementEnd('div');
|
||||
$out->elementEnd('td');
|
||||
$out->elementEnd('tr');
|
||||
|
@ -321,7 +321,7 @@ class RealtimePlugin extends Plugin
|
||||
$arr['url'] = $notice->getUrl();
|
||||
$arr['html'] = htmlspecialchars($notice->rendered);
|
||||
$arr['source'] = htmlspecialchars($arr['source']);
|
||||
$arr['conversation_url'] = $this->getConversationUrl($notice);
|
||||
$arr['conversation_url'] = $notice->getConversationUrl();
|
||||
|
||||
$profile = $notice->getProfile();
|
||||
$arr['user']['profile_url'] = $profile->profileurl;
|
||||
@ -336,7 +336,7 @@ class RealtimePlugin extends Plugin
|
||||
$arr['retweeted_status']['source'] = htmlspecialchars($original->source);
|
||||
$originalProfile = $original->getProfile();
|
||||
$arr['retweeted_status']['user']['profile_url'] = $originalProfile->profileurl;
|
||||
$arr['retweeted_status']['conversation_url'] = $this->getConversationUrl($original);
|
||||
$arr['retweeted_status']['conversation_url'] = $original->getConversationUrl();
|
||||
}
|
||||
unset($original);
|
||||
}
|
||||
@ -364,33 +364,6 @@ class RealtimePlugin extends Plugin
|
||||
return $tags;
|
||||
}
|
||||
|
||||
function getConversationUrl($notice)
|
||||
{
|
||||
$convurl = null;
|
||||
|
||||
if ($notice->hasConversation()) {
|
||||
$conv = Conversation::getKV(
|
||||
'id',
|
||||
$notice->conversation
|
||||
);
|
||||
$convurl = $conv->uri;
|
||||
|
||||
if(empty($convurl)) {
|
||||
$msg = sprintf( "Could not find Conversation ID %d to make 'in context'"
|
||||
. "link for Notice ID %d.",
|
||||
$notice->conversation,
|
||||
$notice->id
|
||||
);
|
||||
|
||||
common_log(LOG_WARNING, $msg);
|
||||
} else {
|
||||
$convurl .= '#notice-' . $notice->id;
|
||||
}
|
||||
}
|
||||
|
||||
return $convurl;
|
||||
}
|
||||
|
||||
function _getScripts()
|
||||
{
|
||||
$urlpath = self::staticPath(str_replace('Plugin','',__CLASS__),
|
||||
|
@ -526,7 +526,7 @@ class ActivityGenerationTests extends PHPUnit_Framework_TestCase
|
||||
|
||||
$element = $this->_entryToElement($entry, true);
|
||||
|
||||
$this->assertEquals($conv->uri, ActivityUtils::getLink($element, 'ostatus:conversation'));
|
||||
$this->assertEquals($conv->getUri(), ActivityUtils::getLink($element, 'ostatus:conversation'));
|
||||
}
|
||||
|
||||
function __destruct()
|
||||
|
@ -457,11 +457,11 @@ h6 {font-size: 1em;}
|
||||
max-width: 440px;
|
||||
}
|
||||
|
||||
div.entry-content a.response:before {
|
||||
content: "(";
|
||||
.entry-content a.conversation:before {
|
||||
content: " (";
|
||||
}
|
||||
|
||||
div.entry-content a.response:after {
|
||||
.entry-content a.conversation:after {
|
||||
content: ")";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user