]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Link notice posted time to local representation
authorMikael Nordfeldth <mmn@hethane.se>
Thu, 1 May 2014 12:28:18 +0000 (14:28 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Thu, 1 May 2014 12:28:53 +0000 (14:28 +0200)
Notice class got a 'getLocalUrl' function.

actions/shownotice.php
classes/Notice.php
lib/noticelistitem.php

index 2ee8c5132881a4a1cc942513ed2762c4cf27565f..ff39080eeb0cacd4c2cd1185e94cf9c83b27ac17 100644 (file)
  * @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();
         }
     }
index 78d8b9035046c526581e463b572671f3e75bdca0..d9a954e07dbcc0cdf74e65e39023c14f43e482aa 100644 (file)
@@ -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...
index ad6f02ef115221eb026ef55f5cea407d1ee5fe2d..ad33acb26144939f83bdf60644a647e22c6ab08a 100644 (file)
  * @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