diff --git a/actions/shownotice.php b/actions/shownotice.php index 2ee8c51328..ff39080eeb 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -27,13 +27,9 @@ * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } -require_once INSTALLDIR.'/lib/personalgroupnav.php'; require_once INSTALLDIR.'/lib/noticelist.php'; -require_once INSTALLDIR.'/lib/feedlist.php'; /** * Show a single notice @@ -79,27 +75,24 @@ class ShownoticeAction extends Action $this->notice = $this->getNotice(); - $cur = common_current_user(); - - if (!empty($cur)) { - $curProfile = $cur->getProfile(); - } else { - $curProfile = null; - } - - if (!$this->notice->inScope($curProfile)) { + if (!$this->notice->inScope($this->scoped)) { // TRANS: Client exception thrown when trying a view a notice the user has no access to. throw new ClientException(_('Not available.'), 403); } $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. $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 { $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); @@ -214,19 +207,9 @@ class ShownoticeAction extends Action { parent::handle(); - if ($this->boolean('ajax')) { + if (StatusNet::isAjax()) { $this->showAjax(); } 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(); } } diff --git a/classes/Notice.php b/classes/Notice.php index 78d8b90350..d9a954e07d 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -210,6 +210,11 @@ class Notice extends Managed_DataObject return $this->uri; } + public function getLocalUrl() + { + return common_local_url('shownotice', array('notice' => $this->id), null, null, false); + } + 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 ad6f02ef11..ad33acb261 100644 --- a/lib/noticelistitem.php +++ b/lib/noticelistitem.php @@ -28,11 +28,7 @@ * @link http://status.net/ */ -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } /** * widget for displaying a single notice @@ -354,22 +350,15 @@ class NoticeListItem extends Widget /** * show the link to the main page for the notice * - * Displays a link to the page for a notice, with "relative" time. Tries to - * get remote notice URLs correct, but doesn't always succeed. + * Displays a local link to the rendered notice, with "relative" time. * * @return void */ function showNoticeLink() { - $noticeurl = $this->notice->getUrl(); - - // above should always return an URL - - assert(!empty($noticeurl)); - $this->out->elementStart('a', array('rel' => 'bookmark', 'class' => 'timestamp', - 'href' => $noticeurl)); + 'href' => $this->notice->getLocalUrl())); $this->out->element('time', array('class' => 'dt-published', 'datetime' => common_date_iso8601($this->notice->created), // TRANS: Timestamp title (tooltip text) for NoticeListItem