From 27ed6b7db05bd2879841d6d95d9d8e273d7454b5 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Thu, 1 May 2014 15:25:19 +0200 Subject: [PATCH] getConversationUrl introduced for linking to conversations --- classes/Conversation.php | 18 ++++++++++ classes/Notice.php | 16 +++++++++ lib/noticelistitem.php | 35 +++++-------------- .../lib/useremailsummaryhandler.php | 14 ++------ plugins/Realtime/RealtimePlugin.php | 31 ++-------------- tests/ActivityGenerationTests.php | 2 +- theme/neo/css/display.css | 6 ++-- 7 files changed, 51 insertions(+), 71 deletions(-) diff --git a/classes/Conversation.php b/classes/Conversation.php index c76b0169ff..033b99384b 100755 --- a/classes/Conversation.php +++ b/classes/Conversation.php @@ -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}"); + } } diff --git a/classes/Notice.php b/classes/Notice.php index d9a954e07d..7311a257a6 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -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... diff --git a/lib/noticelistitem.php b/lib/noticelistitem.php index ad33acb261..b8ebe3bede 100644 --- a/lib/noticelistitem.php +++ b/lib/noticelistitem.php @@ -126,7 +126,9 @@ class NoticeListItem extends Widget $this->showNoticeLink(); $this->showNoticeSource(); $this->showNoticeLocation(); - $this->showContext(); + 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'), - // 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); - } - } + $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')); } /** diff --git a/plugins/EmailSummary/lib/useremailsummaryhandler.php b/plugins/EmailSummary/lib/useremailsummaryhandler.php index 15c1c85e80..fe814a3fb5 100644 --- a/plugins/EmailSummary/lib/useremailsummaryhandler.php +++ b/plugins/EmailSummary/lib/useremailsummaryhandler.php @@ -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), - // TRANS: Link text for link to conversation view. - _m('in context')); - } - } + $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'); diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index 8087edd9df..dfd3a9298f 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -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__), diff --git a/tests/ActivityGenerationTests.php b/tests/ActivityGenerationTests.php index 8e89024ac0..bf0dcb2377 100644 --- a/tests/ActivityGenerationTests.php +++ b/tests/ActivityGenerationTests.php @@ -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() diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index 7c883922bb..c5da9e7d8c 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -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: ")"; }