Link notice posted time to local representation

Notice class got a 'getLocalUrl' function.
This commit is contained in:
Mikael Nordfeldth 2014-05-01 14:28:18 +02:00
parent e506b8f7f9
commit 4774a25040
3 changed files with 18 additions and 41 deletions

View File

@ -27,13 +27,9 @@
* @link http://status.net/ * @link http://status.net/
*/ */
if (!defined('STATUSNET') && !defined('LACONICA')) { if (!defined('GNUSOCIAL')) { exit(1); }
exit(1);
}
require_once INSTALLDIR.'/lib/personalgroupnav.php';
require_once INSTALLDIR.'/lib/noticelist.php'; require_once INSTALLDIR.'/lib/noticelist.php';
require_once INSTALLDIR.'/lib/feedlist.php';
/** /**
* Show a single notice * Show a single notice
@ -79,27 +75,24 @@ class ShownoticeAction extends Action
$this->notice = $this->getNotice(); $this->notice = $this->getNotice();
$cur = common_current_user(); if (!$this->notice->inScope($this->scoped)) {
if (!empty($cur)) {
$curProfile = $cur->getProfile();
} else {
$curProfile = null;
}
if (!$this->notice->inScope($curProfile)) {
// TRANS: Client exception thrown when trying a view a notice the user has no access to. // TRANS: Client exception thrown when trying a view a notice the user has no access to.
throw new ClientException(_('Not available.'), 403); throw new ClientException(_('Not available.'), 403);
} }
$this->profile = $this->notice->getProfile(); $this->profile = $this->notice->getProfile();
if (empty($this->profile)) { if (!$this->profile instanceof Profile) {
// TRANS: Server error displayed trying to show a notice without a connected profile. // TRANS: Server error displayed trying to show a notice without a connected profile.
$this->serverError(_('Notice has no profile.'), 500); $this->serverError(_('Notice has no profile.'), 500);
} }
$this->user = User::getKV('id', $this->profile->id); try {
$this->user = $this->profile->getUser();
} catch (NoSuchUserException $e) {
// FIXME: deprecate $this->user stuff in extended classes
$this->user = null;
}
try { try {
$this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
@ -214,19 +207,9 @@ class ShownoticeAction extends Action
{ {
parent::handle(); parent::handle();
if ($this->boolean('ajax')) { if (StatusNet::isAjax()) {
$this->showAjax(); $this->showAjax();
} else { } else {
if ($this->notice->is_local == Notice::REMOTE) {
try {
$target = $this->notice->getUrl();
if ($target != $this->selfUrl()) {
common_redirect($target, 301);
}
} catch (InvalidUrlException $e) {
common_debug('ShownoticeAction could not redirect to remote notice with id='.$this->notice->id . '. Falling back to showPage().');
}
}
$this->showPage(); $this->showPage();
} }
} }

View File

@ -210,6 +210,11 @@ class Notice extends Managed_DataObject
return $this->uri; return $this->uri;
} }
public function getLocalUrl()
{
return common_local_url('shownotice', array('notice' => $this->id), null, null, false);
}
public function getUrl() public function getUrl()
{ {
// The risk is we start having empty urls and non-http uris... // The risk is we start having empty urls and non-http uris...

View File

@ -28,11 +28,7 @@
* @link http://status.net/ * @link http://status.net/
*/ */
if (!defined('STATUSNET')) { if (!defined('GNUSOCIAL')) { exit(1); }
// This check helps protect against security problems;
// your code file can't be executed directly from the web.
exit(1);
}
/** /**
* widget for displaying a single notice * widget for displaying a single notice
@ -354,22 +350,15 @@ class NoticeListItem extends Widget
/** /**
* show the link to the main page for the notice * show the link to the main page for the notice
* *
* Displays a link to the page for a notice, with "relative" time. Tries to * Displays a local link to the rendered notice, with "relative" time.
* get remote notice URLs correct, but doesn't always succeed.
* *
* @return void * @return void
*/ */
function showNoticeLink() function showNoticeLink()
{ {
$noticeurl = $this->notice->getUrl();
// above should always return an URL
assert(!empty($noticeurl));
$this->out->elementStart('a', array('rel' => 'bookmark', $this->out->elementStart('a', array('rel' => 'bookmark',
'class' => 'timestamp', 'class' => 'timestamp',
'href' => $noticeurl)); 'href' => $this->notice->getLocalUrl()));
$this->out->element('time', array('class' => 'dt-published', $this->out->element('time', array('class' => 'dt-published',
'datetime' => common_date_iso8601($this->notice->created), 'datetime' => common_date_iso8601($this->notice->created),
// TRANS: Timestamp title (tooltip text) for NoticeListItem // TRANS: Timestamp title (tooltip text) for NoticeListItem