diff --git a/actions/shownotice.php b/actions/shownotice.php index d86e98080b..b72f39513e 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -218,17 +218,13 @@ class ShownoticeAction extends Action $this->showAjax(); } else { if ($this->notice->is_local == Notice::REMOTE) { - if (!empty($this->notice->url)) { - $target = $this->notice->url; - } else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) { - // Old OMB posts saved the remote URL only into the URI field. - $target = $this->notice->uri; - } else { - // Shouldn't happen. - $target = false; - } - if ($target && $target != $this->selfUrl()) { - common_redirect($target, 301); + 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 99d44b6cff..e46ed227a1 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -224,7 +224,7 @@ class Notice extends Managed_DataObject return $this->uri; default: common_debug('No URL available for notice: id='.$this->id); - throw new ServerException('No URL available for notice.'); + throw new InvalidUrlException($this->url); } }