factor out similarities in subscriptions and subscribers
darcs-hash:20080618171313-84dde-3389db1f5110d3f47cd5a4ef17f6a7fc0fcf3b44.gz
This commit is contained in:
		
							
								
								
									
										46
									
								
								actions/subscribers.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								actions/subscribers.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | <?php | ||||||
|  | /* | ||||||
|  |  * Laconica - a distributed open-source microblogging tool | ||||||
|  |  * Copyright (C) 2008, Controlez-Vous, Inc. | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU Affero General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU Affero General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU Affero General Public License | ||||||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | if (!defined('LACONICA')) { exit(1); } | ||||||
|  |  | ||||||
|  | require_once(INSTALLDIR.'/lib/gallery.php'); | ||||||
|  |  | ||||||
|  | class SubscribersAction extends GalleryAction { | ||||||
|  |  | ||||||
|  | 	function gallery_type() { | ||||||
|  | 		return _t('Subscribers'); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	function get_instructions(&$profile) { | ||||||
|  | 		$user =& common_current_user(); | ||||||
|  | 		if ($user && ($user->id == $profile->id)) { | ||||||
|  | 			return _t('These are the people who listen to your notices.'); | ||||||
|  | 		} else { | ||||||
|  | 			return _t('These are the people who listen to ') . $profile->nickname . _t('\'s notices.'); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	function define_subs(&$subs, &$profile) { | ||||||
|  | 		$subs->subscribed = $profile->id; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	function div_class() { | ||||||
|  | 		return 'subscribers'; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -19,90 +19,28 @@ | |||||||
|  |  | ||||||
| if (!defined('LACONICA')) { exit(1); } | if (!defined('LACONICA')) { exit(1); } | ||||||
|  |  | ||||||
| # XXX: make distinct from similar definitions in showstream.php | require_once(INSTALLDIR.'/lib/gallery.php'); | ||||||
|  |  | ||||||
| define('SUBSCRIPTIONS_PER_ROW', 8); | class SubscriptionsAction extends GalleryAction { | ||||||
| define('SUBSCRIPTIONS_PER_PAGE', 80); |  | ||||||
|  |  | ||||||
| class SubscriptionsAction extends Action { | 	function gallery_type() { | ||||||
|  | 		return _t('Subscriptions'); | ||||||
| 	function handle($args) { |  | ||||||
| 		parent::handle($args); |  | ||||||
| 		$nickname = $this->arg('nickname'); |  | ||||||
| 		$profile = Profile::staticGet('nickname', $nickname); |  | ||||||
| 		if (!$profile) { |  | ||||||
| 			$this->no_such_user(); |  | ||||||
| 		} |  | ||||||
| 		$user = User::staticGet($profile->id); |  | ||||||
| 		if (!$user) { |  | ||||||
| 			$this->no_such_user(); |  | ||||||
| 		} |  | ||||||
| 		$page = $this->arg('page') || 1; |  | ||||||
| 		common_show_header($profile->nickname . ": " . _t('Subscriptions'), |  | ||||||
| 						   NULL, $profile, |  | ||||||
| 						   array($this, 'show_top')); |  | ||||||
| 		$this->show_subscriptions($profile, $page); |  | ||||||
| 		common_show_footer(); |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	function show_top($profile) { | 	function get_instructions(&$profile) { | ||||||
| 		$user = common_current_user(); | 		$user =& common_current_user(); | ||||||
| 		common_element('p', 'instructions', | 		if ($user && ($user->id == $profile->id)) { | ||||||
| 					   _t('These are the people whose notices ') . | 			return _t('These are the people whose notices you listen to.'); | ||||||
| 					   (($user && ($user->id == $profile->id)) ? _t('you listen to.') : ($profile->nickname . _t(' listens to.')))); | 		} else { | ||||||
|  | 			return _t('These are the people whose notices ') . $profile->nickname . _t(' listens to.'); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	function show_subscriptions($profile, $page) { | 	function define_subs(&$subs, &$profile) { | ||||||
|  |  | ||||||
| 		$subs = DB_DataObject::factory('subscription'); |  | ||||||
| 		$subs->subscriber = $profile->id; | 		$subs->subscriber = $profile->id; | ||||||
|  | 	} | ||||||
| 	 | 	 | ||||||
| 		$subs->orderBy('created DESC'); | 	function div_class() { | ||||||
|  | 		return 'subscriptions'; | ||||||
| 		# We ask for an extra one to know if we need to do another page |  | ||||||
|  |  | ||||||
| 		$subs->limit((($page-1)*SUBSCRIPTIONS_PER_PAGE), SUBSCRIPTIONS_PER_PAGE + 1); |  | ||||||
|  |  | ||||||
| 		$subs_count = $subs->find(); |  | ||||||
|  |  | ||||||
| 		common_element_start('div', 'subscriptions'); |  | ||||||
|  |  | ||||||
| 		$idx = 0; |  | ||||||
|  |  | ||||||
| 		while ($subs->fetch()) { |  | ||||||
| 			 |  | ||||||
| 			$idx++; |  | ||||||
|  |  | ||||||
| 			$other = Profile::staticGet($subs->subscribed); |  | ||||||
| 			 |  | ||||||
| 			common_element_start('a', array('title' => ($other->fullname) ? |  | ||||||
| 											$other->fullname : |  | ||||||
| 											$other->nickname, |  | ||||||
| 											'href' => $other->profileurl, |  | ||||||
| 											'class' => 'subscription')); |  | ||||||
| 			$avatar = $other->getAvatar(AVATAR_STREAM_SIZE); |  | ||||||
| 			common_element('img',  |  | ||||||
| 						   array('src' =>  |  | ||||||
| 								 (($avatar) ? $avatar->url :  |  | ||||||
| 								  common_default_avatar(AVATAR_STREAM_SIZE)), |  | ||||||
| 								 'width' => AVATAR_STREAM_SIZE, |  | ||||||
| 								 'height' => AVATAR_STREAM_SIZE, |  | ||||||
| 								 'class' => 'avatar stream', |  | ||||||
| 								 'alt' => ($other->fullname) ? |  | ||||||
| 								 $other->fullname : |  | ||||||
| 								 $other->nickname)); |  | ||||||
| 			common_element_end('a'); |  | ||||||
|  |  | ||||||
| 			# XXX: subscribe form here |  | ||||||
|  |  | ||||||
| 			if ($idx == SUBSCRIPTIONS_PER_PAGE) { |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		common_element_end('div'); |  | ||||||
| 		 |  | ||||||
| 		common_pagination($page > 1, $subs_count > SUBSCRIPTIONS_PER_PAGE, |  | ||||||
| 						  $page, 'subscriptions', array('nickname' => $profile->nickname)); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -19,14 +19,10 @@ | |||||||
| 
 | 
 | ||||||
| if (!defined('LACONICA')) { exit(1); } | if (!defined('LACONICA')) { exit(1); } | ||||||
| 
 | 
 | ||||||
| # XXX: make distinct from similar definitions in showstream.php
 | define('AVATARS_PER_ROW', 8); | ||||||
|  | define('AVATARS_PER_PAGE', 80); | ||||||
| 
 | 
 | ||||||
| define('SUBSCRIPTIONS_PER_ROW', 8); | class GalleryAction extends Action { | ||||||
| define('SUBSCRIPTIONS_PER_PAGE', 80); |  | ||||||
| 
 |  | ||||||
| class SubscribedAction extends Action { |  | ||||||
| 
 |  | ||||||
| 	# Who is subscribed to a given user?
 |  | ||||||
| 
 | 
 | ||||||
| 	function handle($args) { | 	function handle($args) { | ||||||
| 		parent::handle($args); | 		parent::handle($args); | ||||||
| @@ -34,49 +30,53 @@ class SubscribedAction extends Action { | |||||||
| 		$profile = Profile::staticGet('nickname', $nickname); | 		$profile = Profile::staticGet('nickname', $nickname); | ||||||
| 		if (!$profile) { | 		if (!$profile) { | ||||||
| 			$this->no_such_user(); | 			$this->no_such_user(); | ||||||
|  | 			return; | ||||||
| 		} | 		} | ||||||
| 		$user = User::staticGet($profile->id); | 		$user = User::staticGet($profile->id); | ||||||
| 		if (!$user) { | 		if (!$user) { | ||||||
| 			$this->no_such_user(); | 			$this->no_such_user(); | ||||||
|  | 			return; | ||||||
| 		} | 		} | ||||||
| 
 |  | ||||||
| 		$page = $this->arg('page') || 1; | 		$page = $this->arg('page') || 1; | ||||||
| 		common_show_header($profile->nickname . ": " . _t('Subscribers'), | 		common_show_header($profile->nickname . ": " . $this->gallery_type(), | ||||||
| 						   NULL, $profile, | 						   NULL, $profile, | ||||||
| 						   array($this, 'show_top')); | 						   array($this, 'show_top')); | ||||||
| 		$this->show_subscribed($profile, $page); | 		$this->show_gallery($profile, $page); | ||||||
| 		common_show_footer(); | 		common_show_footer(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	function show_top($profile) { | 	function no_such_user() { | ||||||
| 		$user = common_current_user(); | 		$this->client_error(_t('No such user.')); | ||||||
| 		common_element('p', 'instructions', |  | ||||||
| 					   _t('These are the people who listen to ') . |  | ||||||
| 					   (($user && ($user->id == $profile->id)) ? _t('your notices.') : ($profile->nickname . _t('\'s notices.')))); |  | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	function show_subscribed($profile, $page) { | 	function show_top($profile) { | ||||||
| 		global $config; | 		common_element('p', 'instructions', | ||||||
|  | 					   $this->get_instructions($profile)); | ||||||
|  | 	} | ||||||
| 	 | 	 | ||||||
| 		$subs = DB_DataObject::factory('subscription'); | 	function show_gallery($profile, $page) { | ||||||
| 		$subs->subscribed = $profile->id; | 
 | ||||||
|  | 		$subs = new Subscription(); | ||||||
|  | 		 | ||||||
|  | 		$this->define_subs($subs, $profile); | ||||||
| 		 | 		 | ||||||
| 		$subs->orderBy('created DESC'); | 		$subs->orderBy('created DESC'); | ||||||
| 
 | 
 | ||||||
| 		# We ask for an extra one to know if we need to do another page
 | 		# We ask for an extra one to know if we need to do another page
 | ||||||
| 
 | 
 | ||||||
| 		$subs->limit((($page-1)*SUBSCRIPTIONS_PER_PAGE), SUBSCRIPTIONS_PER_PAGE + 1); | 		$subs->limit((($page-1)*AVATARS_PER_PAGE), AVATARS_PER_PAGE + 1); | ||||||
| 
 | 
 | ||||||
| 		$subs_count = $subs->find(); | 		$subs_count = $subs->find(); | ||||||
| 
 | 
 | ||||||
| 		common_element_start('div', 'subscriptions'); | 		common_element_start('div', $this->div_class()); | ||||||
| 
 | 
 | ||||||
| 		$idx = 0; | 		$idx = 0; | ||||||
| 
 | 
 | ||||||
| 		while ($subs->fetch()) { | 		while ($subs->fetch()) { | ||||||
|  | 			 | ||||||
| 			$idx++; | 			$idx++; | ||||||
| 
 | 
 | ||||||
| 			$other = Profile::staticGet($subs->subscriber); | 			$other = Profile::staticGet($subs->subscribed); | ||||||
| 			 | 			 | ||||||
| 			common_element_start('a', array('title' => ($other->fullname) ? | 			common_element_start('a', array('title' => ($other->fullname) ? | ||||||
| 											$other->fullname : | 											$other->fullname : | ||||||
| @@ -84,25 +84,47 @@ class SubscribedAction extends Action { | |||||||
| 											'href' => $other->profileurl, | 											'href' => $other->profileurl, | ||||||
| 											'class' => 'subscription')); | 											'class' => 'subscription')); | ||||||
| 			$avatar = $other->getAvatar(AVATAR_STREAM_SIZE); | 			$avatar = $other->getAvatar(AVATAR_STREAM_SIZE); | ||||||
| 			common_element('img', array('src' => (($avatar) ? $avatar->url : common_default_avatar(AVATAR_STREAM_SIZE)), | 			common_element('img',  | ||||||
| 										'width' => AVATAR_STREAM_SIZE, | 						   array('src' =>  | ||||||
| 										'height' => AVATAR_STREAM_SIZE, | 								 (($avatar) ? $avatar->url :  | ||||||
| 										'class' => 'avatar stream', | 								  common_default_avatar(AVATAR_STREAM_SIZE)), | ||||||
| 										'alt' => ($other->fullname) ? | 								 'width' => AVATAR_STREAM_SIZE, | ||||||
| 											$other->fullname : | 								 'height' => AVATAR_STREAM_SIZE, | ||||||
| 											$other->nickname)); | 								 'class' => 'avatar stream', | ||||||
|  | 								 'alt' => ($other->fullname) ? | ||||||
|  | 								 $other->fullname : | ||||||
|  | 								 $other->nickname)); | ||||||
| 			common_element_end('a'); | 			common_element_end('a'); | ||||||
| 
 | 
 | ||||||
| 			# XXX: subscribe form here
 | 			# XXX: subscribe form here
 | ||||||
| 
 | 
 | ||||||
| 			if ($idx == SUBSCRIPTIONS_PER_PAGE) { | 			if ($idx == AVATARS_PER_PAGE) { | ||||||
| 				break; | 				break; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		common_element_end('div'); | 		common_element_end('div'); | ||||||
| 		 | 		 | ||||||
| 		common_pagination($page > 1, $subs_count > SUBSCRIPTIONS_PER_PAGE, | 		common_pagination($page > 1,  | ||||||
| 						  $page, 'subscribed', array('nickname' => $profile->nickname)); | 						  $subs_count > AVATARS_PER_PAGE, | ||||||
|  | 						  $page,  | ||||||
|  | 						  $this->trimmed('action'),  | ||||||
|  | 						  array('nickname' => $profile->nickname)); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	function gallery_type() { | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	function get_instructions(&$profile) { | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	function define_subs(&$subs, &$profile) { | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	function div_class() { | ||||||
|  | 		return ''; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user