]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/noticelist.php
Merge branch '0.8.x' into stats
[quix0rs-gnu-social.git] / lib / noticelist.php
index 1283e43e4a0ace99c9659e77598b6025bf28a0b0..a521321719b1bc6a9287838419d31d8cbd7af724 100644 (file)
@@ -22,6 +22,7 @@
  * @category  UI
  * @package   Laconica
  * @author    Evan Prodromou <evan@controlyourself.ca>
+ * @author    Sarven Capadisli <csarven@controlyourself.ca>
  * @copyright 2008 Control Yourself, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link      http://laconi.ca/
@@ -67,7 +68,7 @@ class NoticeList extends Widget
 
     function __construct($notice, $out=null)
     {
-       parent::__construct($out);
+        parent::__construct($out);
         $this->notice = $notice;
     }
 
@@ -160,7 +161,7 @@ class NoticeListItem extends Widget
 
     function __construct($notice, $out=null)
     {
-       parent::__construct($out);
+        parent::__construct($out);
         $this->notice  = $notice;
         $this->profile = $notice->getProfile();
     }
@@ -178,6 +179,7 @@ class NoticeListItem extends Widget
     {
         $this->showStart();
         $this->showNotice();
+        $this->showNoticeAttachments();
         $this->showNoticeInfo();
         $this->showNoticeOptions();
         $this->showEnd();
@@ -191,25 +193,69 @@ class NoticeListItem extends Widget
         $this->out->elementEnd('div');
     }
 
+    function showNoticeAttachments()
+    {
+        $f2p = new File_to_post;
+        $f2p->post_id = $this->notice->id;
+        $file = new File;
+        $file->joinAdd($f2p);
+        $file->selectAdd();
+        $file->selectAdd('file.id as id');
+        $count = $file->find(true);
+        if (!$count) return;
+        if (1 === $count) {
+            $href = common_local_url('attachment', array('attachment' => $file->id));
+            $att_class = 'attachment';
+        } else {
+            $href = common_local_url('attachments', array('notice' => $this->notice->id));
+            $att_class = 'attachments';
+        }
+
+        $clip = theme_path('images/icons/clip', 'base');
+        if ('shownotice' === $this->out->args['action']) {
+            $height = '96px';
+            $width = '83%';
+            $width_att = '15%';
+            $clip .= '-big.png';
+            $top = '70px';
+        } else {
+            $height = '48px';
+            $width = '90%';
+            $width_att = '8%';
+            $clip .= '.png';
+            $top = '20px';
+        }
+if(0)
+        $this->out->elementStart('div', 'entry-attachments');
+else
+        $this->out->elementStart('p', array('class' => 'entry-attachments', 'style' => "float: right; width: $width_att; background: url($clip) no-repeat; text-align: right; height: $height;"));
+        $this->out->element('a', array('class' => $att_class, 'style' => "text-decoration: none; padding-top: $top; display: block; height: $height;", 'href' => $href, 'title' => "# of attachments: $count"), $count === 1 ? '' : $count);
+
+
+        $this->out->elementEnd('p');
+    }
+
     function showNoticeInfo()
     {
         $this->out->elementStart('div', 'entry-content');
         $this->showNoticeLink();
         $this->showNoticeSource();
-        $this->showReplyTo();
+        $this->showContext();
         $this->out->elementEnd('div');
     }
 
     function showNoticeOptions()
     {
-        $this->out->elementStart('div', 'notice-options');
-        $this->showFaveForm();
-        $this->showReplyLink();
-        $this->showDeleteLink();
-        $this->out->elementEnd('div');
+        $user = common_current_user();
+        if ($user) {
+            $this->out->elementStart('div', 'notice-options');
+            $this->showFaveForm();
+            $this->showReplyLink();
+            $this->showDeleteLink();
+            $this->out->elementEnd('div');
+        }
     }
 
-
     /**
      * start a single notice.
      *
@@ -221,7 +267,7 @@ class NoticeListItem extends Widget
         // XXX: RDFa
         // TODO: add notice_type class e.g., notice_video, notice_image
         $this->out->elementStart('li', array('class' => 'hentry notice',
-                                         'id' => 'notice-' . $this->notice->id));
+                                             'id' => 'notice-' . $this->notice->id));
     }
 
     /**
@@ -235,11 +281,11 @@ class NoticeListItem extends Widget
         $user = common_current_user();
         if ($user) {
             if ($user->hasFave($this->notice)) {
-               $disfavor = new DisfavorForm($this->out, $this->notice);
-               $disfavor->show();
+                $disfavor = new DisfavorForm($this->out, $this->notice);
+                $disfavor->show();
             } else {
-               $favor = new FavorForm($this->out, $this->notice);
-               $favor->show();
+                $favor = new FavorForm($this->out, $this->notice);
+                $favor->show();
             }
         }
     }
@@ -255,8 +301,12 @@ class NoticeListItem extends Widget
     function showAuthor()
     {
         $this->out->elementStart('span', 'vcard author');
-        $this->out->elementStart('a', array('href' => $this->profile->profileurl,
-                                        'class' => 'url'));
+        $attrs = array('href' => $this->profile->profileurl,
+                       'class' => 'url');
+        if (!empty($this->profile->fullname)) {
+            $attrs['title'] = $this->profile->fullname . ' (' . $this->profile->nickname . ') ';
+        }
+        $this->out->elementStart('a', $attrs);
         $this->showAvatar();
         $this->showNickname();
         $this->out->elementEnd('a');
@@ -274,18 +324,23 @@ class NoticeListItem extends Widget
 
     function showAvatar()
     {
-        $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
+        if ('shownotice' === $this->out->trimmed('action')) {
+            $avatar_size = AVATAR_PROFILE_SIZE;
+        } else {
+            $avatar_size = AVATAR_STREAM_SIZE;
+        }
+        $avatar = $this->profile->getAvatar($avatar_size);
 
         $this->out->element('img', array('src' => ($avatar) ?
-                                    common_avatar_display_url($avatar) :
-                                    common_default_avatar(AVATAR_STREAM_SIZE),
-                                    'class' => 'avatar photo',
-                                    'width' => AVATAR_STREAM_SIZE,
-                                    'height' => AVATAR_STREAM_SIZE,
-                                    'alt' =>
-                                    ($this->profile->fullname) ?
-                                    $this->profile->fullname :
-                                    $this->profile->nickname));
+                                         $avatar->displayUrl() :
+                                         Avatar::defaultImage($avatar_size),
+                                         'class' => 'avatar photo',
+                                         'width' => $avatar_size,
+                                         'height' => $avatar_size,
+                                         'alt' =>
+                                         ($this->profile->fullname) ?
+                                         $this->profile->fullname :
+                                         $this->profile->nickname));
     }
 
     /**
@@ -299,7 +354,7 @@ class NoticeListItem extends Widget
     function showNickname()
     {
         $this->out->element('span', array('class' => 'nickname fn'),
-                       $this->profile->nickname);
+                            $this->profile->nickname);
     }
 
     /**
@@ -346,14 +401,14 @@ class NoticeListItem extends Widget
             $noticeurl = $this->notice->uri;
         }
         $this->out->elementStart('dl', 'timestamp');
-        $this->out->element('dt', null, _('Published')); 
+        $this->out->element('dt', null, _('Published'));
         $this->out->elementStart('dd', null);
         $this->out->elementStart('a', array('rel' => 'bookmark',
-                                        'href' => $noticeurl));
+                                            'href' => $noticeurl));
         $dt = common_date_iso8601($this->notice->created);
         $this->out->element('abbr', array('class' => 'published',
-                                     'title' => $dt),
-                       common_date_string($this->notice->created));
+                                          'title' => $dt),
+                            common_date_string($this->notice->created));
         $this->out->elementEnd('a');
         $this->out->elementEnd('dd');
         $this->out->elementEnd('dl');
@@ -375,23 +430,24 @@ class NoticeListItem extends Widget
             $this->out->element('dt', null, _('From'));
             $source_name = _($this->notice->source);
             switch ($this->notice->source) {
-            case 'web':
-            case 'xmpp':
-            case 'mail':
-            case 'omb':
-            case 'api':
-                $this->out->element('dd', 'noticesource', $source_name);
+             case 'web':
+             case 'xmpp':
+             case 'mail':
+             case 'omb':
+             case 'system':
+             case 'api':
+                $this->out->element('dd', null, $source_name);
                 break;
-            default:
+             default:
                 $ns = Notice_source::staticGet($this->notice->source);
                 if ($ns) {
                     $this->out->elementStart('dd', null);
                     $this->out->element('a', array('href' => $ns->url,
-                                              'rel' => 'external'),
-                                   $ns->name);
+                                                   'rel' => 'external'),
+                                        $ns->name);
                     $this->out->elementEnd('dd');
                 } else {
-                    $this->out->element('dd', 'noticesource', $source_name);
+                    $this->out->element('dd', null, $source_name);
                 }
                 break;
             }
@@ -408,17 +464,18 @@ class NoticeListItem extends Widget
      * @return void
      */
 
-    function showReplyTo()
+    function showContext()
     {
-        if ($this->notice->reply_to) {
-            $replyurl = common_local_url('shownotice',
-                                         array('notice' => $this->notice->reply_to));
+        // XXX: also show context if there are replies to this notice
+        if (!empty($this->notice->conversation)
+            && $this->notice->conversation != $this->notice->id) {
+            $convurl = common_local_url('conversation',
+                                         array('id' => $this->notice->conversation));
             $this->out->elementStart('dl', 'response');
             $this->out->element('dt', null, _('To'));
             $this->out->elementStart('dd');
-            $this->out->element('a', array('href' => $replyurl,
-                                      'rel' => 'in-reply-to'),
-                           _('in reply to'));
+            $this->out->element('a', array('href' => $convurl),
+                                _('in context'));
             $this->out->elementEnd('dd');
             $this->out->elementEnd('dl');
         }
@@ -435,16 +492,21 @@ class NoticeListItem extends Widget
 
     function showReplyLink()
     {
-        $reply_url = common_local_url('newnotice',
-                                      array('replyto' => $this->profile->nickname));
-
-        $this->out->elementStart('dl', 'notice_reply');
-        $this->out->element('dt', null, _('Reply to this notice'));
-        $this->out->elementStart('dd');
-        $this->out->element('a', array('href' => $reply_url,
-                                       'title' => _('reply')), _('Reply'));
-        $this->out->elementEnd('dd');
-        $this->out->elementEnd('dl');
+        if (common_logged_in()) {
+            $reply_url = common_local_url('newnotice',
+                                          array('replyto' => $this->profile->nickname));
+
+            $this->out->elementStart('dl', 'notice_reply');
+            $this->out->element('dt', null, _('Reply to this notice'));
+            $this->out->elementStart('dd');
+            $this->out->elementStart('a', array('href' => $reply_url,
+                                                'title' => _('Reply to this notice')));
+            $this->out->text(_('Reply'));
+            $this->out->element('span', 'notice_id', $this->notice->id);
+            $this->out->elementEnd('a');
+            $this->out->elementEnd('dd');
+            $this->out->elementEnd('dl');
+        }
     }
 
     /**
@@ -463,7 +525,7 @@ class NoticeListItem extends Widget
             $this->out->element('dt', null, _('Delete this notice'));
             $this->out->elementStart('dd');
             $this->out->element('a', array('href' => $deleteurl,
-                                           'title' => _('delete')), _('Delete'));
+                                           'title' => _('Delete this notice')), _('Delete'));
             $this->out->elementEnd('dd');
             $this->out->elementEnd('dl');
         }