From 1e874240bf58eaa2afd0cb4f3af166fb6dd50056 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 15 Jan 2009 23:43:38 +0000 Subject: [PATCH 1/5] Add some stuff to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 0c0fde8010..8c94886e7c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ config.php .htaccess *.tmproj dataobject.ini +*~ +*.bak From e697faf23bf70ed43d074a2f437aae362580e003 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 15 Jan 2009 23:43:58 +0000 Subject: [PATCH 2/5] Add some includes to noticelist --- lib/noticelist.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/noticelist.php b/lib/noticelist.php index eb5416ee45..ccdd57feb3 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -31,6 +31,9 @@ if (!defined('LACONICA')) { exit(1); } +require_once INSTALLDIR.'/lib/favorform.php'; +require_once INSTALLDIR.'/lib/disfavorform.php'; + /** * widget for displaying a list of notices * From 16619439ab7d67331722cc00e3b24f451ee8fa6a Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 15 Jan 2009 23:44:19 +0000 Subject: [PATCH 3/5] Move some accounting stuff from publicgroupnav to action More dl's and dd's. Rather than replicate them in every sub-class, let's just put them in one place. --- lib/action.php | 5 +++++ lib/publicgroupnav.php | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/action.php b/lib/action.php index ed8b5c3525..9534073ec7 100644 --- a/lib/action.php +++ b/lib/action.php @@ -297,7 +297,12 @@ class Action extends HTMLOutputter // lawsuit function showCore() { $this->elementStart('div', array('id' => 'core')); + $this->elementStart('dl', array('id' => 'site_nav_local_views')); + $this->element('dt', null, _('Local views')); + $this->elementStart('dd'); $this->showLocalNav(); + $this->elementEnd('dd'); + $this->elementEnd('dl'); $this->showContentBlock(); $this->showAside(); $this->elementEnd('div'); diff --git a/lib/publicgroupnav.php b/lib/publicgroupnav.php index 1e5ed73596..7860783fa4 100644 --- a/lib/publicgroupnav.php +++ b/lib/publicgroupnav.php @@ -77,9 +77,6 @@ class PublicGroupNav extends Widget function show() { - $this->action->elementStart('dl', array('id' => 'site_nav_local_views')); - $this->action->element('dt', null, _('Local views')); - $this->action->elementStart('dd', null); $this->action->elementStart('ul', array('class' => 'nav')); $this->out->menuItem(common_local_url('public'), _('Public'), @@ -97,7 +94,5 @@ class PublicGroupNav extends Widget _("Popular notices"), $this->action == 'favorited', 'nav_timeline_favorited'); $this->action->elementEnd('ul'); - $this->action->elementEnd('dd'); - $this->action->elementEnd('dl'); } } From a0db0e391cdeb626436aa5941770ab1340a8156b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 15 Jan 2009 23:45:43 +0000 Subject: [PATCH 4/5] Move personal group nav menu to its own class --- lib/personal.php | 85 ------------------------ lib/personalgroupnav.php | 135 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+), 85 deletions(-) create mode 100644 lib/personalgroupnav.php diff --git a/lib/personal.php b/lib/personal.php index 4e56c95664..46f9ff6be7 100644 --- a/lib/personal.php +++ b/lib/personal.php @@ -21,95 +21,10 @@ if (!defined('LACONICA')) { exit(1); } class PersonalAction extends Action { - - function is_readonly() - { - return true; - } - function handle($args) { parent::handle($args); common_set_returnto($this->self_url()); } - function views_menu() - { - - $user = null; - $action = $this->trimmed('action'); - $nickname = $this->trimmed('nickname'); - - if ($nickname) { - $user = User::staticGet('nickname', $nickname); - $user_profile = $user->getProfile(); - } else { - $user_profile = false; - } - - common_element_start('ul', array('id' => 'nav_views')); - - common_menu_item(common_local_url('all', array('nickname' => - $nickname)), - _('Personal'), - sprintf(_('%s and friends'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), - $action == 'all'); - common_menu_item(common_local_url('replies', array('nickname' => - $nickname)), - _('Replies'), - sprintf(_('Replies to %s'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), - $action == 'replies'); - common_menu_item(common_local_url('showstream', array('nickname' => - $nickname)), - _('Profile'), - ($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname, - $action == 'showstream'); - common_menu_item(common_local_url('showfavorites', array('nickname' => - $nickname)), - _('Favorites'), - sprintf(_('%s\'s favorite notices'), ($user_profile) ? $user_profile->getBestName() : _('User')), - $action == 'showfavorites'); - - $cur = common_current_user(); - - if ($cur && $cur->id == $user->id) { - - common_menu_item(common_local_url('inbox', array('nickname' => - $nickname)), - _('Inbox'), - _('Your incoming messages'), - $action == 'inbox'); - common_menu_item(common_local_url('outbox', array('nickname' => - $nickname)), - _('Outbox'), - _('Your sent messages'), - $action == 'outbox'); - } - - common_element_end('ul'); - } - - function source_link($source) - { - $source_name = _($source); - switch ($source) { - case 'web': - case 'xmpp': - case 'mail': - case 'omb': - case 'api': - common_element('span', 'noticesource', $source_name); - break; - default: - $ns = Notice_source::staticGet($source); - if ($ns) { - common_element('a', array('href' => $ns->url), - $ns->name); - } else { - common_element('span', 'noticesource', $source_name); - } - break; - } - return; - } } diff --git a/lib/personalgroupnav.php b/lib/personalgroupnav.php new file mode 100644 index 0000000000..5d727a5051 --- /dev/null +++ b/lib/personalgroupnav.php @@ -0,0 +1,135 @@ +. + * + * @category Action + * @package Laconica + * @author Evan Prodromou + * @author Sarven Capadisli + * @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/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +require_once INSTALLDIR.'/lib/widget.php'; + +/** + * Base class for all actions + * + * This is the base class for all actions in the package. An action is + * more or less a "view" in an MVC framework. + * + * Actions are responsible for extracting and validating parameters; using + * model classes to read and write to the database; and doing ouput. + * + * @category Output + * @package Laconica + * @author Evan Prodromou + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + * + * @see HTMLOutputter + */ + +class PersonalGroupNav extends Widget +{ + var $action = null; + + /** + * Construction + * + * @param Action $action current action, used for output + */ + + function __construct($action=null) + { + parent::__construct($action); + $this->action = $action; + } + + /** + * Show the menu + * + * @return void + */ + + function show() + { + $user = null; + + // FIXME: we should probably pass this in + + $action = $this->action->trimmed('action'); + $nickname = $this->action->trimmed('nickname'); + + if ($nickname) { + $user = User::staticGet('nickname', $nickname); + $user_profile = $user->getProfile(); + } else { + $user_profile = false; + } + + $this->out->elementStart('ul', array('id' => 'nav_views')); + + $this->out->menuItem(common_local_url('all', array('nickname' => + $nickname)), + _('Personal'), + sprintf(_('%s and friends'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), + $action == 'all'); + $this->out->menuItem(common_local_url('replies', array('nickname' => + $nickname)), + _('Replies'), + sprintf(_('Replies to %s'), (($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)), + $action == 'replies'); + $this->out->menuItem(common_local_url('showstream', array('nickname' => + $nickname)), + _('Profile'), + ($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname, + $action == 'showstream'); + $this->out->menuItem(common_local_url('showfavorites', array('nickname' => + $nickname)), + _('Favorites'), + sprintf(_('%s\'s favorite notices'), ($user_profile) ? $user_profile->getBestName() : _('User')), + $action == 'showfavorites'); + + $cur = common_current_user(); + + if ($cur && $cur->id == $user->id) { + + $this->out->menuItem(common_local_url('inbox', array('nickname' => + $nickname)), + _('Inbox'), + _('Your incoming messages'), + $action == 'inbox'); + $this->out->menuItem(common_local_url('outbox', array('nickname' => + $nickname)), + _('Outbox'), + _('Your sent messages'), + $action == 'outbox'); + } + + $this->out->elementEnd('ul'); + } +} From c73ed29cb7977de759379249d0932f5fa62b179b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 15 Jan 2009 23:46:22 +0000 Subject: [PATCH 5/5] Some work to make the all action work --- actions/all.php | 118 +++++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 56 deletions(-) diff --git a/actions/all.php b/actions/all.php index 4ad7f12aee..548d7a1034 100644 --- a/actions/all.php +++ b/actions/all.php @@ -19,80 +19,86 @@ if (!defined('LACONICA')) { exit(1); } -require_once(INSTALLDIR.'/actions/showstream.php'); +require_once INSTALLDIR.'/lib/personalgroupnav.php'; +require_once INSTALLDIR.'/lib/noticelist.php'; +require_once INSTALLDIR.'/lib/feedlist.php'; -class AllAction extends StreamAction +class AllAction extends Action { - + var $user = null; + var $page = null; + + function isReadOnly() + { + return true; + } + + function prepare($args) + { + parent::prepare($args); + $nickname = common_canonical_nickname($this->arg('nickname')); + $this->user = User::staticGet('nickname', $nickname); + $this->page = $this->trimmed('page'); + if (!$this->page) { + $this->page = 1; + } + return true; + } + function handle($args) { - parent::handle($args); - - $nickname = common_canonical_nickname($this->arg('nickname')); - $user = User::staticGet('nickname', $nickname); - - if (!$user) { + + if (!$this->user) { $this->clientError(_('No such user.')); return; } - - $profile = $user->getProfile(); - - if (!$profile) { - $this->serverError(_('User has no profile.')); - return; - } - - # Looks like we're good; show the header - - common_show_header(sprintf(_("%s and friends"), $profile->nickname), - array($this, 'show_header'), $user, - array($this, 'show_top')); - - $this->show_notices($user); - - common_show_footer(); + + $this->showPage(); } - - function show_header($user) + + function title() + { + if ($this->page > 1) { + return sprintf(_("%s and friends, page %d"), $this->user->nickname, $this->page); + } else { + return sprintf(_("%s and friends"), $this->user->nickname); + } + } + + function showFeeds() { $this->element('link', array('rel' => 'alternate', 'href' => common_local_url('allrss', array('nickname' => - $user->nickname)), + $this->user->nickname)), 'type' => 'application/rss+xml', - 'title' => sprintf(_('Feed for friends of %s'), $user->nickname))); + 'title' => sprintf(_('Feed for friends of %s'), $this->user->nickname))); + } + + function showLocalNav() + { + $nav = new PersonalGroupNav($this); + $nav->show(); } - function show_top($user) + function showExportData() { - $cur = common_current_user(); - - if ($cur && $cur->id == $user->id) { - common_notice_form('all'); - } - - $this->views_menu(); - - $this->show_feeds_list(array(0=>array('href'=>common_local_url('allrss', array('nickname' => $user->nickname)), - 'type' => 'rss', - 'version' => 'RSS 1.0', - 'item' => 'allrss'))); + $fl = new FeedList($this); + $fl->show(array(0=>array('href'=>common_local_url('allrss', array('nickname' => $this->user->nickname)), + 'type' => 'rss', + 'version' => 'RSS 1.0', + 'item' => 'allrss'))); } - - function show_notices($user) + + function showContent() { + $notice = $this->user->noticesWithFriends(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); + + $nl = new NoticeList($notice, $this); - $page = $this->trimmed('page'); - if (!$page) { - $page = 1; - } - - $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); - - $cnt = $this->show_notice_list($notice); - - common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, - $page, 'all', array('nickname' => $user->nickname)); + $cnt = $nl->show(); + + $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE, + $this->page, 'all', array('nickname' => $this->user->nickname)); } }