Merge branch 'testing' into moveaccount

This commit is contained in:
Brion Vibber 2011-01-19 10:41:14 -08:00
commit 963e7576f2
16 changed files with 176 additions and 108 deletions

View File

@ -458,6 +458,9 @@ class ProfilesettingsAction extends AccountSettingsAction
$this->elementStart('div', array('id' => 'aside_primary', $this->elementStart('div', array('id' => 'aside_primary',
'class' => 'aside')); 'class' => 'aside'));
$this->elementStart('div', array('id' => 'account_actions',
'class' => 'section'));
$this->elementStart('ul'); $this->elementStart('ul');
if (Event::handle('StartProfileSettingsActions', array($this))) { if (Event::handle('StartProfileSettingsActions', array($this))) {
if ($user->hasRight(Right::BACKUPACCOUNT)) { if ($user->hasRight(Right::BACKUPACCOUNT)) {
@ -485,5 +488,6 @@ class ProfilesettingsAction extends AccountSettingsAction
} }
$this->elementEnd('ul'); $this->elementEnd('ul');
$this->elementEnd('div'); $this->elementEnd('div');
$this->elementEnd('div');
} }
} }

View File

@ -77,4 +77,5 @@ VALUES
('twitvim','TwitVim','http://vim.sourceforge.net/scripts/script.php?script_id=2204', now()), ('twitvim','TwitVim','http://vim.sourceforge.net/scripts/script.php?script_id=2204', now()),
('Updating.Me','Updating.Me','http://updating.me/', now()), ('Updating.Me','Updating.Me','http://updating.me/', now()),
('urfastr','urfastr','http://urfastr.net/', now()), ('urfastr','urfastr','http://urfastr.net/', now()),
('yatca','Yatca','http://www.yatca.com/', now()); ('yatca','Yatca','http://www.yatca.com/', now()),
('rss.me', 'rss.me', 'http://rss.me/', now());

View File

@ -96,7 +96,7 @@ class AccountSettingsNav extends Widget
$action_name = $this->action->trimmed('action'); $action_name = $this->action->trimmed('action');
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartAccountSettingsNav', array(&$this->action))) { if (Event::handle('StartAccountSettingsNav', array($this->action))) {
$user = common_current_user(); $user = common_current_user();
if(Event::handle('StartAccountSettingsProfileMenuItem', array($this, &$menu))){ if(Event::handle('StartAccountSettingsProfileMenuItem', array($this, &$menu))){
@ -142,7 +142,7 @@ class AccountSettingsNav extends Widget
Event::handle('EndAccountSettingsOtherMenuItem', array($this, &$menu)); Event::handle('EndAccountSettingsOtherMenuItem', array($this, &$menu));
} }
Event::handle('EndAccountSettingsNav', array(&$this->action)); Event::handle('EndAccountSettingsNav', array($this->action));
} }
$this->action->elementEnd('ul'); $this->action->elementEnd('ul');

View File

@ -96,7 +96,7 @@ class ConnectSettingsNav extends Widget
$action_name = $this->action->trimmed('action'); $action_name = $this->action->trimmed('action');
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartConnectSettingsNav', array(&$this->action))) { if (Event::handle('StartConnectSettingsNav', array($this->action))) {
# action => array('prompt', 'title') # action => array('prompt', 'title')
$menu = array(); $menu = array();
@ -129,7 +129,7 @@ class ConnectSettingsNav extends Widget
$action_name === $menuaction); $action_name === $menuaction);
} }
Event::handle('EndConnectSettingsNav', array(&$this->action)); Event::handle('EndConnectSettingsNav', array($this->action));
} }
$this->action->elementEnd('ul'); $this->action->elementEnd('ul');

View File

@ -73,7 +73,7 @@ class LoginGroupNav extends Widget
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartLoginGroupNav', array(&$this->action))) { if (Event::handle('StartLoginGroupNav', array($this->action))) {
$this->action->menuItem(common_local_url('login'), $this->action->menuItem(common_local_url('login'),
_('Login'), _('Login'),
@ -87,7 +87,7 @@ class LoginGroupNav extends Widget
$action_name === 'register'); $action_name === 'register');
} }
Event::handle('EndLoginGroupNav', array(&$this->action)); Event::handle('EndLoginGroupNav', array($this->action));
} }
$this->action->elementEnd('ul'); $this->action->elementEnd('ul');

View File

@ -99,6 +99,21 @@ class ProfileAction extends OwnerDesignAction
$this->showStatistics(); $this->showStatistics();
} }
/**
* Convenience function for common pattern of links to subscription/groups sections.
*
* @param string $actionClass
* @param string $title
* @param string $cssClass
*/
private function statsSectionLink($actionClass, $title, $cssClass='')
{
$this->element('a', array('href' => common_local_url($actionClass,
array('nickname' => $this->profile->nickname)),
'class' => $cssClass),
$title);
}
function showSubscriptions() function showSubscriptions()
{ {
$profile = $this->profile->getSubscriptions(0, PROFILES_PER_MINILIST + 1); $profile = $this->profile->getSubscriptions(0, PROFILES_PER_MINILIST + 1);
@ -106,7 +121,9 @@ class ProfileAction extends OwnerDesignAction
$this->elementStart('div', array('id' => 'entity_subscriptions', $this->elementStart('div', array('id' => 'entity_subscriptions',
'class' => 'section')); 'class' => 'section'));
if (Event::handle('StartShowSubscriptionsMiniList', array($this))) { if (Event::handle('StartShowSubscriptionsMiniList', array($this))) {
$this->element('h2', null, _('Subscriptions')); $this->elementStart('h2');
$this->statsSectionLink('subscriptions', _('Subscriptions'));
$this->elementEnd('h2');
$cnt = 0; $cnt = 0;
@ -120,10 +137,7 @@ class ProfileAction extends OwnerDesignAction
if ($cnt > PROFILES_PER_MINILIST) { if ($cnt > PROFILES_PER_MINILIST) {
$this->elementStart('p'); $this->elementStart('p');
$this->element('a', array('href' => common_local_url('subscriptions', $this->statsSectionLink('subscriptions', _('All subscriptions'), 'more');
array('nickname' => $this->profile->nickname)),
'class' => 'more'),
_('All subscriptions'));
$this->elementEnd('p'); $this->elementEnd('p');
} }
@ -141,7 +155,9 @@ class ProfileAction extends OwnerDesignAction
if (Event::handle('StartShowSubscribersMiniList', array($this))) { if (Event::handle('StartShowSubscribersMiniList', array($this))) {
$this->element('h2', null, _('Subscribers')); $this->elementStart('h2');
$this->statsSectionLink('subscribers', _('Subscribers'));
$this->elementEnd('h2');
$cnt = 0; $cnt = 0;
@ -155,10 +171,7 @@ class ProfileAction extends OwnerDesignAction
if ($cnt > PROFILES_PER_MINILIST) { if ($cnt > PROFILES_PER_MINILIST) {
$this->elementStart('p'); $this->elementStart('p');
$this->element('a', array('href' => common_local_url('subscribers', $this->statsSectionLink('subscribers', _('All subscribers'), 'more');
array('nickname' => $this->profile->nickname)),
'class' => 'more'),
_('All subscribers'));
$this->elementEnd('p'); $this->elementEnd('p');
} }
@ -170,10 +183,7 @@ class ProfileAction extends OwnerDesignAction
function showStatistics() function showStatistics()
{ {
$subs_count = $this->profile->subscriptionCount();
$subbed_count = $this->profile->subscriberCount();
$notice_count = $this->profile->noticeCount(); $notice_count = $this->profile->noticeCount();
$group_count = $this->profile->getGroups()->N;
$age_days = (time() - strtotime($this->profile->created)) / 86400; $age_days = (time() - strtotime($this->profile->created)) / 86400;
if ($age_days < 1) { if ($age_days < 1) {
// Rather than extrapolating out to a bajillion... // Rather than extrapolating out to a bajillion...
@ -186,59 +196,73 @@ class ProfileAction extends OwnerDesignAction
$this->element('h2', null, _('Statistics')); $this->element('h2', null, _('Statistics'));
// Other stats...? $profile = $this->profile;
$this->elementStart('dl', 'entity_user-id'); $actionParams = array('nickname' => $profile->nickname);
$this->element('dt', null, _('User ID')); $stats = array(
$this->element('dd', null, $this->profile->id); array(
$this->elementEnd('dl'); 'id' => 'user-id',
'label' => _('User ID'),
$this->elementStart('dl', 'entity_member-since'); 'value' => $profile->id,
$this->element('dt', null, _('Member since')); ),
$this->element('dd', null, date('j M Y', array(
strtotime($this->profile->created))); 'id' => 'member-since',
$this->elementEnd('dl'); 'label' => _('Member since'),
'value' => date('j M Y', strtotime($profile->created))
$this->elementStart('dl', 'entity_subscriptions'); ),
$this->elementStart('dt'); array(
$this->element('a', array('href' => common_local_url('subscriptions', 'id' => 'subscriptions',
array('nickname' => $this->profile->nickname))), 'label' => _('Subscriptions'),
_('Subscriptions')); 'link' => common_local_url('subscriptions', $actionParams),
$this->elementEnd('dt'); 'value' => $profile->subscriptionCount(),
$this->element('dd', null, $subs_count); ),
$this->elementEnd('dl'); array(
'id' => 'subscribers',
$this->elementStart('dl', 'entity_subscribers'); 'label' => _('Subscribers'),
$this->elementStart('dt'); 'link' => common_local_url('subscribers', $actionParams),
$this->element('a', array('href' => common_local_url('subscribers', 'value' => $profile->subscriberCount(),
array('nickname' => $this->profile->nickname))), ),
_('Subscribers')); array(
$this->elementEnd('dt'); 'id' => 'groups',
$this->element('dd', 'subscribers', $subbed_count); 'label' => _('Groups'),
$this->elementEnd('dl'); 'link' => common_local_url('usergroups', $actionParams),
'value' => $profile->getGroups()->N,
$this->elementStart('dl', 'entity_groups'); ),
$this->elementStart('dt'); array(
$this->element('a', array('href' => common_local_url('usergroups', 'id' => 'notices',
array('nickname' => $this->profile->nickname))), 'label' => _('Notices'),
_('Groups')); 'value' => $notice_count,
$this->elementEnd('dt'); ),
$this->element('dd', 'groups', $group_count); array(
$this->elementEnd('dl'); 'id' => 'daily_notices',
$this->elementStart('dl', 'entity_notices');
$this->element('dt', null, _('Notices'));
$this->element('dd', null, $notice_count);
$this->elementEnd('dl');
$this->elementStart('dl', 'entity_daily_notices');
// TRANS: Average count of posts made per day since account registration // TRANS: Average count of posts made per day since account registration
$this->element('dt', null, _('Daily average')); 'label' => _('Daily average'),
$this->element('dd', null, $daily_count); 'value' => $daily_count
$this->elementEnd('dl'); )
);
// Give plugins a chance to add stats entries
Event::handle('ProfileStats', array($profile, &$stats));
foreach ($stats as $row) {
$this->showStatsRow($row);
}
$this->elementEnd('div'); $this->elementEnd('div');
} }
private function showStatsRow($row)
{
$this->elementStart('dl', 'entity_' . $row['id']);
$this->elementStart('dt');
if (!empty($row['link'])) {
$this->element('a', array('href' => $row['link']), $row['label']);
} else {
$this->text($row['label']);
}
$this->elementEnd('dt');
$this->element('dd', null, $row['value']);
$this->elementEnd('dl');
}
function showGroups() function showGroups()
{ {
$groups = $this->profile->getGroups(0, GROUPS_PER_MINILIST + 1); $groups = $this->profile->getGroups(0, GROUPS_PER_MINILIST + 1);
@ -246,7 +270,9 @@ class ProfileAction extends OwnerDesignAction
$this->elementStart('div', array('id' => 'entity_groups', $this->elementStart('div', array('id' => 'entity_groups',
'class' => 'section')); 'class' => 'section'));
if (Event::handle('StartShowGroupsMiniList', array($this))) { if (Event::handle('StartShowGroupsMiniList', array($this))) {
$this->element('h2', null, _('Groups')); $this->elementStart('h2');
$this->statsSectionLink('usergroups', _('Groups'));
$this->elementEnd('h2');
if ($groups) { if ($groups) {
$gml = new GroupMiniList($groups, $this->profile, $this); $gml = new GroupMiniList($groups, $this->profile, $this);
@ -258,10 +284,7 @@ class ProfileAction extends OwnerDesignAction
if ($cnt > GROUPS_PER_MINILIST) { if ($cnt > GROUPS_PER_MINILIST) {
$this->elementStart('p'); $this->elementStart('p');
$this->element('a', array('href' => common_local_url('usergroups', $this->statsSectionLink('usergroups', _('All groups'), 'more');
array('nickname' => $this->profile->nickname)),
'class' => 'more'),
_('All groups'));
$this->elementEnd('p'); $this->elementEnd('p');
} }

View File

@ -242,7 +242,7 @@ class UserProfile extends Widget
$this->out->elementEnd('div'); $this->out->elementEnd('div');
return; return;
} }
if (Event::handle('StartProfilePageActionsSection', array(&$this->out, $this->profile))) { if (Event::handle('StartProfilePageActionsSection', array($this->out, $this->profile))) {
$cur = common_current_user(); $cur = common_current_user();
@ -250,13 +250,13 @@ class UserProfile extends Widget
$this->out->element('h2', null, _('User actions')); $this->out->element('h2', null, _('User actions'));
$this->out->elementStart('ul'); $this->out->elementStart('ul');
if (Event::handle('StartProfilePageActionsElements', array(&$this->out, $this->profile))) { if (Event::handle('StartProfilePageActionsElements', array($this->out, $this->profile))) {
if (empty($cur)) { // not logged in if (empty($cur)) { // not logged in
if (Event::handle('StartProfileRemoteSubscribe', array(&$this->out, $this->profile))) { if (Event::handle('StartProfileRemoteSubscribe', array($this->out, $this->profile))) {
$this->out->elementStart('li', 'entity_subscribe'); $this->out->elementStart('li', 'entity_subscribe');
$this->showRemoteSubscribeLink(); $this->showRemoteSubscribeLink();
$this->out->elementEnd('li'); $this->out->elementEnd('li');
Event::handle('EndProfileRemoteSubscribe', array(&$this->out, $this->profile)); Event::handle('EndProfileRemoteSubscribe', array($this->out, $this->profile));
} }
} else { } else {
if ($cur->id == $this->profile->id) { // your own page if ($cur->id == $this->profile->id) { // your own page
@ -376,13 +376,13 @@ class UserProfile extends Widget
} }
} }
Event::handle('EndProfilePageActionsElements', array(&$this->out, $this->profile)); Event::handle('EndProfilePageActionsElements', array($this->out, $this->profile));
} }
$this->out->elementEnd('ul'); $this->out->elementEnd('ul');
$this->out->elementEnd('div'); $this->out->elementEnd('div');
Event::handle('EndProfilePageActionsSection', array(&$this->out, $this->profile)); Event::handle('EndProfilePageActionsSection', array($this->out, $this->profile));
} }
} }

View File

@ -74,7 +74,7 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
return true; return true;
} }
function onEndLoginGroupNav(&$action) function onEndLoginGroupNav($action)
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');

View File

@ -446,11 +446,11 @@ class FacebookPlugin extends Plugin
/* /*
* Add a login tab for Facebook Connect * Add a login tab for Facebook Connect
* *
* @param Action &action the current action * @param Action $action the current action
* *
* @return void * @return void
*/ */
function onEndLoginGroupNav(&$action) function onEndLoginGroupNav($action)
{ {
if (self::hasKeys()) { if (self::hasKeys()) {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
@ -470,11 +470,11 @@ class FacebookPlugin extends Plugin
/* /*
* Add a tab for managing Facebook Connect settings * Add a tab for managing Facebook Connect settings
* *
* @param Action &action the current action * @param Action $action the current action
* *
* @return void * @return void
*/ */
function onEndConnectSettingsNav(&$action) function onEndConnectSettingsNav($action)
{ {
if (self::hasKeys()) { if (self::hasKeys()) {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');

View File

@ -186,11 +186,11 @@ class FacebookBridgePlugin extends Plugin
* Add a login tab for Facebook, but only if there's a Facebook * Add a login tab for Facebook, but only if there's a Facebook
* application defined for the plugin to use. * application defined for the plugin to use.
* *
* @param Action &action the current action * @param Action $action the current action
* *
* @return void * @return void
*/ */
function onEndLoginGroupNav(&$action) function onEndLoginGroupNav($action)
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
@ -252,11 +252,11 @@ class FacebookBridgePlugin extends Plugin
* Add a tab for user-level Facebook settings if the user * Add a tab for user-level Facebook settings if the user
* has a link to Facebook * has a link to Facebook
* *
* @param Action &action the current action * @param Action $action the current action
* *
* @return void * @return void
*/ */
function onEndConnectSettingsNav(&$action) function onEndConnectSettingsNav($action)
{ {
if ($this->hasApplication()) { if ($this->hasApplication()) {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');

View File

@ -279,19 +279,19 @@ class NewMenuPlugin extends Plugin
return true; return true;
} }
function onStartAccountSettingsNav(&$action) function onStartAccountSettingsNav($action)
{ {
$this->_settingsMenu($action); $this->_settingsMenu($action);
return false; return false;
} }
function onStartConnectSettingsNav(&$action) function onStartConnectSettingsNav($action)
{ {
$this->_settingsMenu($action); $this->_settingsMenu($action);
return false; return false;
} }
private function _settingsMenu(&$action) private function _settingsMenu($action)
{ {
$actionName = $action->trimmed('action'); $actionName = $action->trimmed('action');
@ -325,7 +325,7 @@ class NewMenuPlugin extends Plugin
_('Other options'), _('Other options'),
$actionName == 'othersettings'); $actionName == 'othersettings');
Event::handle('EndAccountSettingsNav', array(&$action)); Event::handle('EndAccountSettingsNav', array($action));
if (common_config('xmpp', 'enabled')) { if (common_config('xmpp', 'enabled')) {
$action->menuItem(common_local_url('imsettings'), $action->menuItem(common_local_url('imsettings'),
@ -346,7 +346,7 @@ class NewMenuPlugin extends Plugin
_('Authorized connected applications'), _('Authorized connected applications'),
$actionName == 'oauthconnectionsettings'); $actionName == 'oauthconnectionsettings');
Event::handle('EndConnectSettingsNav', array(&$action)); Event::handle('EndConnectSettingsNav', array($action));
} }
function onEndShowStyles($action) function onEndShowStyles($action)

View File

@ -248,11 +248,11 @@ class OpenIDPlugin extends Plugin
* *
* If we're in openidOnly mode, we disable the menu for all other login. * If we're in openidOnly mode, we disable the menu for all other login.
* *
* @param Action &$action Action being executed * @param Action $action Action being executed
* *
* @return boolean hook return * @return boolean hook return
*/ */
function onStartLoginGroupNav(&$action) function onStartLoginGroupNav($action)
{ {
if (common_config('site', 'openidonly')) { if (common_config('site', 'openidonly')) {
$this->showOpenIDLoginTab($action); $this->showOpenIDLoginTab($action);
@ -268,11 +268,11 @@ class OpenIDPlugin extends Plugin
/** /**
* Menu item for login * Menu item for login
* *
* @param Action &$action Action being executed * @param Action $action Action being executed
* *
* @return boolean hook return * @return boolean hook return
*/ */
function onEndLoginGroupNav(&$action) function onEndLoginGroupNav($action)
{ {
$this->showOpenIDLoginTab($action); $this->showOpenIDLoginTab($action);
@ -318,11 +318,11 @@ class OpenIDPlugin extends Plugin
/** /**
* Menu item for OpenID settings * Menu item for OpenID settings
* *
* @param Action &$action Action being executed * @param Action $action Action being executed
* *
* @return boolean hook return * @return boolean hook return
*/ */
function onEndAccountSettingsNav(&$action) function onEndAccountSettingsNav($action)
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');

View File

@ -93,15 +93,16 @@ class SubMirrorPlugin extends Plugin
} }
/** /**
* Menu item for settings * Menu item for personal subscriptions/groups area
* *
* @param Action &$action Action being executed * @param Widget $widget Widget being executed
* *
* @return boolean hook return * @return boolean hook return
*/ */
function onEndAccountSettingsNav(&$action) function onEndSubGroupNav($widget)
{ {
$action = $widget->out;
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
$action->menuItem(common_local_url('mirrorsettings'), $action->menuItem(common_local_url('mirrorsettings'),
@ -163,4 +164,37 @@ class SubMirrorPlugin extends Plugin
} }
return true; return true;
} }
/**
* Add a count of mirrored feeds into a user's profile sidebar stats.
*
* @param Profile $profile
* @param array $stats
* @return boolean hook return value
*/
function onProfileStats($profile, &$stats)
{
$cur = common_current_user();
if (!empty($cur) && $cur->id == $profile->id) {
$mirror = new SubMirror();
$mirror->subscriber = $profile->id;
$entry = array(
'id' => 'mirrors',
'label' => _m('Mirrored feeds'),
'link' => common_local_url('mirrorsettings'),
'value' => $mirror->count(),
);
$insertAt = count($stats);
foreach ($stats as $i => $row) {
if ($row['id'] == 'groups') {
// Slip us in after them.
$insertAt = $i + 1;
break;
}
}
array_splice($stats, $insertAt, 0, array($entry));
}
return true;
}
} }

View File

@ -102,4 +102,10 @@ class MirrorSettingsAction extends AccountSettingsAction
function handlePost() function handlePost()
{ {
} }
function showLocalNav()
{
$nav = new SubGroupNav($this, common_current_user());
$nav->show();
}
} }

View File

@ -137,11 +137,11 @@ class TwitterBridgePlugin extends Plugin
/* /*
* Add a login tab for 'Sign in with Twitter' * Add a login tab for 'Sign in with Twitter'
* *
* @param Action &action the current action * @param Action $action the current action
* *
* @return void * @return void
*/ */
function onEndLoginGroupNav(&$action) function onEndLoginGroupNav($action)
{ {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');
@ -160,11 +160,11 @@ class TwitterBridgePlugin extends Plugin
/** /**
* Add the Twitter Settings page to the Connect Settings menu * Add the Twitter Settings page to the Connect Settings menu
* *
* @param Action &$action The calling page * @param Action $action The calling page
* *
* @return boolean hook return * @return boolean hook return
*/ */
function onEndConnectSettingsNav(&$action) function onEndConnectSettingsNav($action)
{ {
if (self::hasKeys()) { if (self::hasKeys()) {
$action_name = $action->trimmed('action'); $action_name = $action->trimmed('action');

View File

@ -121,12 +121,12 @@ class UserFlagPlugin extends Plugin
/** /**
* Add a 'flag' button to profile page * Add a 'flag' button to profile page
* *
* @param Action &$action The action being called * @param Action $action The action being called
* @param Profile $profile Profile being shown * @param Profile $profile Profile being shown
* *
* @return boolean hook result * @return boolean hook result
*/ */
function onEndProfilePageActionsElements(&$action, $profile) function onEndProfilePageActionsElements($action, $profile)
{ {
$this->showFlagButton($action, $profile, $this->showFlagButton($action, $profile,
array('action' => 'showstream', array('action' => 'showstream',