('twitvim','TwitVim','http://vim.sourceforge.net/scripts/script.php?script_id=2204', now()),
('Updating.Me','Updating.Me','http://updating.me/', 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());
$action_name = $this->action->trimmed('action');
$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();
if(Event::handle('StartAccountSettingsProfileMenuItem', 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');
$action_name = $this->action->trimmed('action');
$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')
$menu = array();
$action_name === $menuaction);
}
- Event::handle('EndConnectSettingsNav', array(&$this->action));
+ Event::handle('EndConnectSettingsNav', array($this->action));
}
$this->action->elementEnd('ul');
$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'),
_('Login'),
$action_name === 'register');
}
- Event::handle('EndLoginGroupNav', array(&$this->action));
+ Event::handle('EndLoginGroupNav', array($this->action));
}
$this->action->elementEnd('ul');
$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()
{
$profile = $this->profile->getSubscriptions(0, PROFILES_PER_MINILIST + 1);
$this->elementStart('div', array('id' => 'entity_subscriptions',
'class' => 'section'));
if (Event::handle('StartShowSubscriptionsMiniList', array($this))) {
- $this->element('h2', null, _('Subscriptions'));
+ $this->elementStart('h2');
+ $this->statsSectionLink('subscriptions', _('Subscriptions'));
+ $this->elementEnd('h2');
$cnt = 0;
if ($cnt > PROFILES_PER_MINILIST) {
$this->elementStart('p');
- $this->element('a', array('href' => common_local_url('subscriptions',
- array('nickname' => $this->profile->nickname)),
- 'class' => 'more'),
- _('All subscriptions'));
+ $this->statsSectionLink('subscriptions', _('All subscriptions'), 'more');
$this->elementEnd('p');
}
if (Event::handle('StartShowSubscribersMiniList', array($this))) {
- $this->element('h2', null, _('Subscribers'));
+ $this->elementStart('h2');
+ $this->statsSectionLink('subscribers', _('Subscribers'));
+ $this->elementEnd('h2');
$cnt = 0;
if ($cnt > PROFILES_PER_MINILIST) {
$this->elementStart('p');
- $this->element('a', array('href' => common_local_url('subscribers',
- array('nickname' => $this->profile->nickname)),
- 'class' => 'more'),
- _('All subscribers'));
+ $this->statsSectionLink('subscribers', _('All subscribers'), 'more');
$this->elementEnd('p');
}
function showStatistics()
{
- $subs_count = $this->profile->subscriptionCount();
- $subbed_count = $this->profile->subscriberCount();
$notice_count = $this->profile->noticeCount();
- $group_count = $this->profile->getGroups()->N;
$age_days = (time() - strtotime($this->profile->created)) / 86400;
if ($age_days < 1) {
// Rather than extrapolating out to a bajillion...
$this->element('h2', null, _('Statistics'));
- // Other stats...?
- $this->elementStart('dl', 'entity_user-id');
- $this->element('dt', null, _('User ID'));
- $this->element('dd', null, $this->profile->id);
- $this->elementEnd('dl');
-
- $this->elementStart('dl', 'entity_member-since');
- $this->element('dt', null, _('Member since'));
- $this->element('dd', null, date('j M Y',
- strtotime($this->profile->created)));
- $this->elementEnd('dl');
-
- $this->elementStart('dl', 'entity_subscriptions');
- $this->elementStart('dt');
- $this->element('a', array('href' => common_local_url('subscriptions',
- array('nickname' => $this->profile->nickname))),
- _('Subscriptions'));
- $this->elementEnd('dt');
- $this->element('dd', null, $subs_count);
- $this->elementEnd('dl');
-
- $this->elementStart('dl', 'entity_subscribers');
- $this->elementStart('dt');
- $this->element('a', array('href' => common_local_url('subscribers',
- array('nickname' => $this->profile->nickname))),
- _('Subscribers'));
- $this->elementEnd('dt');
- $this->element('dd', 'subscribers', $subbed_count);
- $this->elementEnd('dl');
+ $profile = $this->profile;
+ $actionParams = array('nickname' => $profile->nickname);
+ $stats = array(
+ array(
+ 'id' => 'user-id',
+ 'label' => _('User ID'),
+ 'value' => $profile->id,
+ ),
+ array(
+ 'id' => 'member-since',
+ 'label' => _('Member since'),
+ 'value' => date('j M Y', strtotime($profile->created))
+ ),
+ array(
+ 'id' => 'subscriptions',
+ 'label' => _('Subscriptions'),
+ 'link' => common_local_url('subscriptions', $actionParams),
+ 'value' => $profile->subscriptionCount(),
+ ),
+ array(
+ 'id' => 'subscribers',
+ 'label' => _('Subscribers'),
+ 'link' => common_local_url('subscribers', $actionParams),
+ 'value' => $profile->subscriberCount(),
+ ),
+ array(
+ 'id' => 'groups',
+ 'label' => _('Groups'),
+ 'link' => common_local_url('usergroups', $actionParams),
+ 'value' => $profile->getGroups()->N,
+ ),
+ array(
+ 'id' => 'notices',
+ 'label' => _('Notices'),
+ 'value' => $notice_count,
+ ),
+ array(
+ 'id' => 'daily_notices',
+ // TRANS: Average count of posts made per day since account registration
+ 'label' => _('Daily average'),
+ 'value' => $daily_count
+ )
+ );
+
+ // 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->elementStart('dl', 'entity_groups');
+ private function showStatsRow($row)
+ {
+ $this->elementStart('dl', 'entity_' . $row['id']);
$this->elementStart('dt');
- $this->element('a', array('href' => common_local_url('usergroups',
- array('nickname' => $this->profile->nickname))),
- _('Groups'));
+ if (!empty($row['link'])) {
+ $this->element('a', array('href' => $row['link']), $row['label']);
+ } else {
+ $this->text($row['label']);
+ }
$this->elementEnd('dt');
- $this->element('dd', 'groups', $group_count);
+ $this->element('dd', null, $row['value']);
$this->elementEnd('dl');
-
- $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
- $this->element('dt', null, _('Daily average'));
- $this->element('dd', null, $daily_count);
- $this->elementEnd('dl');
-
- $this->elementEnd('div');
}
function showGroups()
$this->elementStart('div', array('id' => 'entity_groups',
'class' => 'section'));
if (Event::handle('StartShowGroupsMiniList', array($this))) {
- $this->element('h2', null, _('Groups'));
+ $this->elementStart('h2');
+ $this->statsSectionLink('usergroups', _('Groups'));
+ $this->elementEnd('h2');
if ($groups) {
$gml = new GroupMiniList($groups, $this->profile, $this);
if ($cnt > GROUPS_PER_MINILIST) {
$this->elementStart('p');
- $this->element('a', array('href' => common_local_url('usergroups',
- array('nickname' => $this->profile->nickname)),
- 'class' => 'more'),
- _('All groups'));
+ $this->statsSectionLink('usergroups', _('All groups'), 'more');
$this->elementEnd('p');
}
$this->out->elementEnd('div');
return;
}
- if (Event::handle('StartProfilePageActionsSection', array(&$this->out, $this->profile))) {
+ if (Event::handle('StartProfilePageActionsSection', array($this->out, $this->profile))) {
$cur = common_current_user();
$this->out->element('h2', null, _('User actions'));
$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 (Event::handle('StartProfileRemoteSubscribe', array(&$this->out, $this->profile))) {
+ if (Event::handle('StartProfileRemoteSubscribe', array($this->out, $this->profile))) {
$this->out->elementStart('li', 'entity_subscribe');
$this->showRemoteSubscribeLink();
$this->out->elementEnd('li');
- Event::handle('EndProfileRemoteSubscribe', array(&$this->out, $this->profile));
+ Event::handle('EndProfileRemoteSubscribe', array($this->out, $this->profile));
}
} else {
if ($cur->id == $this->profile->id) { // your own page
}
}
- Event::handle('EndProfilePageActionsElements', array(&$this->out, $this->profile));
+ Event::handle('EndProfilePageActionsElements', array($this->out, $this->profile));
}
$this->out->elementEnd('ul');
$this->out->elementEnd('div');
- Event::handle('EndProfilePageActionsSection', array(&$this->out, $this->profile));
+ Event::handle('EndProfilePageActionsSection', array($this->out, $this->profile));
}
}
return true;
}
- function onEndLoginGroupNav(&$action)
+ function onEndLoginGroupNav($action)
{
$action_name = $action->trimmed('action');
/*
* Add a login tab for Facebook Connect
*
- * @param Action &action the current action
+ * @param Action $action the current action
*
* @return void
*/
- function onEndLoginGroupNav(&$action)
+ function onEndLoginGroupNav($action)
{
if (self::hasKeys()) {
$action_name = $action->trimmed('action');
/*
* Add a tab for managing Facebook Connect settings
*
- * @param Action &action the current action
+ * @param Action $action the current action
*
* @return void
*/
- function onEndConnectSettingsNav(&$action)
+ function onEndConnectSettingsNav($action)
{
if (self::hasKeys()) {
$action_name = $action->trimmed('action');
* Add a login tab for Facebook, but only if there's a Facebook
* application defined for the plugin to use.
*
- * @param Action &action the current action
+ * @param Action $action the current action
*
* @return void
*/
- function onEndLoginGroupNav(&$action)
+ function onEndLoginGroupNav($action)
{
$action_name = $action->trimmed('action');
* Add a tab for user-level Facebook settings if the user
* has a link to Facebook
*
- * @param Action &action the current action
+ * @param Action $action the current action
*
* @return void
*/
- function onEndConnectSettingsNav(&$action)
+ function onEndConnectSettingsNav($action)
{
if ($this->hasApplication()) {
$action_name = $action->trimmed('action');
return true;
}
- function onStartAccountSettingsNav(&$action)
+ function onStartAccountSettingsNav($action)
{
$this->_settingsMenu($action);
return false;
}
- function onStartConnectSettingsNav(&$action)
+ function onStartConnectSettingsNav($action)
{
$this->_settingsMenu($action);
return false;
}
- private function _settingsMenu(&$action)
+ private function _settingsMenu($action)
{
$actionName = $action->trimmed('action');
_('Other options'),
$actionName == 'othersettings');
- Event::handle('EndAccountSettingsNav', array(&$action));
+ Event::handle('EndAccountSettingsNav', array($action));
if (common_config('xmpp', 'enabled')) {
$action->menuItem(common_local_url('imsettings'),
_('Authorized connected applications'),
$actionName == 'oauthconnectionsettings');
- Event::handle('EndConnectSettingsNav', array(&$action));
+ Event::handle('EndConnectSettingsNav', array($action));
}
function onEndShowStyles($action)
*
* 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
*/
- function onStartLoginGroupNav(&$action)
+ function onStartLoginGroupNav($action)
{
if (common_config('site', 'openidonly')) {
$this->showOpenIDLoginTab($action);
/**
* Menu item for login
*
- * @param Action &$action Action being executed
+ * @param Action $action Action being executed
*
* @return boolean hook return
*/
- function onEndLoginGroupNav(&$action)
+ function onEndLoginGroupNav($action)
{
$this->showOpenIDLoginTab($action);
/**
* Menu item for OpenID settings
*
- * @param Action &$action Action being executed
+ * @param Action $action Action being executed
*
* @return boolean hook return
*/
- function onEndAccountSettingsNav(&$action)
+ function onEndAccountSettingsNav($action)
{
$action_name = $action->trimmed('action');
}
/**
- * 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
*/
- function onEndAccountSettingsNav(&$action)
+ function onEndSubGroupNav($widget)
{
+ $action = $widget->out;
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('mirrorsettings'),
}
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;
+ }
}
function handlePost()
{
}
+
+ function showLocalNav()
+ {
+ $nav = new SubGroupNav($this, common_current_user());
+ $nav->show();
+ }
}
/*
* Add a login tab for 'Sign in with Twitter'
*
- * @param Action &action the current action
+ * @param Action $action the current action
*
* @return void
*/
- function onEndLoginGroupNav(&$action)
+ function onEndLoginGroupNav($action)
{
$action_name = $action->trimmed('action');
/**
* 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
*/
- function onEndConnectSettingsNav(&$action)
+ function onEndConnectSettingsNav($action)
{
if (self::hasKeys()) {
$action_name = $action->trimmed('action');
/**
* 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
*
* @return boolean hook result
*/
- function onEndProfilePageActionsElements(&$action, $profile)
+ function onEndProfilePageActionsElements($action, $profile)
{
$this->showFlagButton($action, $profile,
array('action' => 'showstream',