]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
display subscriptions/subscribers as a list
authorEvan Prodromou <evan@prodromou.name>
Thu, 20 Nov 2008 11:38:39 +0000 (06:38 -0500)
committerEvan Prodromou <evan@prodromou.name>
Thu, 20 Nov 2008 11:38:39 +0000 (06:38 -0500)
darcs-hash:20081120113839-84dde-169dceadab4d365c81282e8a68a744b7c1aa6a94.gz

actions/subscribers.php
actions/subscriptions.php
lib/gallery.php

index 2cc82d4571d3b6bf54e9e304411017b6e56aebd2..2e37e031569b4bb4c53a3f492ae944c3fe8bcfb7 100644 (file)
@@ -36,9 +36,8 @@ class SubscribersAction extends GalleryAction {
                }
        }
 
-       function define_subs(&$subs, &$profile) {
-               $subs->subscribed = $profile->id;
-               $subs->whereAdd('subscriber != ' . $profile->id);
+       function fields() {
+               return array('subscriber', 'subscribed');
        }
 
        function div_class() {
index 5566acb41da0c3ecf9e73e21667c9f8acbc72e10..aebfa22e83f2abe435f1a8c72b2aaf2d597e6146 100644 (file)
@@ -36,9 +36,8 @@ class SubscriptionsAction extends GalleryAction {
                }
        }
 
-       function define_subs(&$subs, &$profile) {
-               $subs->subscriber = $profile->id;
-               $subs->whereAdd('subscribed != ' . $profile->id);
+       function fields() {
+               return array('subscribed', 'subscriber');
        }
 
        function div_class() {
@@ -48,4 +47,4 @@ class SubscriptionsAction extends GalleryAction {
        function get_other(&$subs) {
                return $subs->subscribed;
        }
-}
\ No newline at end of file
+}
index a478db25d50e7699ba34ee2b7fee12d842a6a159..4f4de51d81f78aa04dd90599bbb11e049a469560 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * Laconica - a distributed open-source microblogging tool
  * Copyright (C) 2008, Controlez-Vous, Inc.
@@ -31,8 +32,8 @@ class GalleryAction extends Action {
 
        function handle($args) {
                parent::handle($args);
+               
                $nickname = common_canonical_nickname($this->arg('nickname'));
-
                $user = User::staticGet('nickname', $nickname);
 
                if (!$user) {
@@ -48,13 +49,21 @@ class GalleryAction extends Action {
                }
 
                $page = $this->arg('page');
+               
                if (!$page) {
                        $page = 1;
                }
+
+               $display = $this->arg('display');
+               
+               if (!$display) {
+                       $display = 'list';
+               }
+               
                common_show_header($profile->nickname . ": " . $this->gallery_type(),
                                                   NULL, $profile,
                                                   array($this, 'show_top'));
-               $this->show_gallery($profile, $page);
+               $this->show_gallery($profile, $page, $display);
                common_show_footer();
        }
 
@@ -67,43 +76,57 @@ class GalleryAction extends Action {
                                           $this->get_instructions($profile));
        }
 
-       function show_gallery($profile, $page) {
-
-               $subs = new Subscription();
-
-               $this->define_subs($subs, $profile);
-
-               $subs->orderBy('created DESC');
-
-               # We ask for an extra one to know if we need to do another page
-
-               $subs->limit((($page-1)*AVATARS_PER_PAGE), AVATARS_PER_PAGE + 1);
-
-               $subs_count = $subs->find();
+       function show_gallery($profile, $page, $display='list') {
+
+               $other = new Profile();
+               
+               list($lst, $usr) = $this->fields();
+               
+               $offset = ($page-1)*AVATARS_PER_PAGE;
+               $limit = AVATARS_PER_PAGE + 1;
+               
+               if (common_config('db','type') == 'pgsql') {
+                       $lim = ' LIMIT ' . $limit . ' OFFSET ' . $offset;
+               } else {
+                       $lim = ' LIMIT ' . $offset . ', ' . $limit;
+               }
 
-               if ($subs_count == 0) {
+               # XXX: memcached results
+               
+               $cnt = $other->query('SELECT profile.* ' .
+                                                        'FROM profile JOIN subscription ' .
+                                                        'ON profile.id = subscription.' . $lst . ' ' .
+                                                        'WHERE ' . $usr . ' = ' . $profile->id . ' ' .
+                                                        'AND ' . $lst . ' != ' . $usr . ' ' .
+                                                        'ORDER BY subscription.created DESC ' . 
+                                                        $lim);
+               
+               if ($cnt == 0) {
                        common_element('p', _('Nobody to show!'));
                        return;
                }
 
-               common_element_start('ul', $this->div_class());
+               if ($display == 'list') {
+                       $profile_list = new ProfileList($other);
+                       $profile_list->show_list();
+               } else {
+                       $this->icon_list($profile, $cnt);
+               }
+               
+               common_pagination($page > 1,
+                                                 $subs_count > AVATARS_PER_PAGE,
+                                                 $page,
+                                                 $this->trimmed('action'),
+                                                 array('nickname' => $profile->nickname));
+       }
 
+       function icon_list($other, $subs_count) {
+               
+               common_element_start('ul', $this->div_class());
+               
                for ($idx = 0; $idx < min($subs_count, AVATARS_PER_PAGE); $idx++) {
 
-                       $result = $subs->fetch();
-
-                       if (!$result) {
-                               common_debug('Ran out of subscribers too early.', __FILE__);
-                               break;
-                       }
-
-                       $other_id = $this->get_other($subs);
-                       $other = Profile::staticGet($other_id);
-
-                       if (!$other) {
-                               common_log(LOG_WARNING, 'No matching profile for ' . $other_id);
-                               continue;
-                       }
+                       $other->fetch();
 
                        common_element_start('li');
 
@@ -129,16 +152,10 @@ class GalleryAction extends Action {
 
                        common_element_end('li');
                }
-
+                       
                common_element_end('ul');
-
-               common_pagination($page > 1,
-                                                 $subs_count > AVATARS_PER_PAGE,
-                                                 $page,
-                                                 $this->trimmed('action'),
-                                                 array('nickname' => $profile->nickname));
        }
-
+       
        function gallery_type() {
                return NULL;
        }
@@ -147,11 +164,7 @@ class GalleryAction extends Action {
                return NULL;
        }
 
-       function define_subs(&$subs, &$profile) {
-               return;
-       }
-
-       function get_other(&$subs) {
+       function fields() {
                return NULL;
        }