From a3928e5583aa0e2f4a429a6322bfc094ca907fd2 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 3 Nov 2010 14:04:08 -0700 Subject: [PATCH] UserFlagPlugin fix for ticket #2118 and ticket #2847: flagged state wasn't reflected in profile lists such as group members page and profile search . Pulled common code for the profile page and profile list cases to give them the same logic on checking. Also fixes the problem that you'd get a flag button for yourself in profile lists, while we explicitly exclude that from the profile page -- it's now skipped in both places. --- plugins/UserFlag/UserFlagPlugin.php | 68 +++++++++++++++-------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/plugins/UserFlag/UserFlagPlugin.php b/plugins/UserFlag/UserFlagPlugin.php index e6ad3e37d3..fc7698841e 100644 --- a/plugins/UserFlag/UserFlagPlugin.php +++ b/plugins/UserFlag/UserFlagPlugin.php @@ -128,25 +128,9 @@ class UserFlagPlugin extends Plugin */ function onEndProfilePageActionsElements(&$action, $profile) { - $user = common_current_user(); - - if (!empty($user) && ($user->id != $profile->id)) { - - $action->elementStart('li', 'entity_flag'); - - if (User_flag_profile::exists($profile->id, $user->id)) { - // @todo FIXME: Add a title explaining what 'flagged' means? - // TRANS: Message added to a profile if it has been flagged for review. - $action->element('p', 'flagged', _('Flagged')); - } else { - $form = new FlagProfileForm($action, $profile, - array('action' => 'showstream', - 'nickname' => $profile->nickname)); - $form->show(); - } - - $action->elementEnd('li'); - } + $this->showFlagButton($action, $profile, + array('action' => 'showstream', + 'nickname' => $profile->nickname)); return true; } @@ -160,24 +144,42 @@ class UserFlagPlugin extends Plugin */ function onEndProfileListItemActionElements($item) { - $user = common_current_user(); - - if (!empty($user)) { - - list($action, $args) = $item->action->returnToArgs(); - - $args['action'] = $action; - - $form = new FlagProfileForm($item->action, $item->profile, $args); - - $item->action->elementStart('li', 'entity_flag'); - $form->show(); - $item->action->elementEnd('li'); - } + list($action, $args) = $item->action->returnToArgs(); + $args['action'] = $action; + $this->showFlagButton($item->action, $item->profile, $args); return true; } + /** + * Actually output a flag button. If the target profile has already been + * flagged by the current user, a null-action faux button is shown. + * + * @param Action $action + * @param Profile $profile + * @param array $returnToArgs + */ + protected function showFlagButton($action, $profile, $returnToArgs) + { + $user = common_current_user(); + + if (!empty($user) && ($user->id != $profile->id)) { + + $action->elementStart('li', 'entity_flag'); + + if (User_flag_profile::exists($profile->id, $user->id)) { + // @todo FIXME: Add a title explaining what 'flagged' means? + // TRANS: Message added to a profile if it has been flagged for review. + $action->element('p', 'flagged', _m('Flagged')); + } else { + $form = new FlagProfileForm($action, $profile, $returnToArgs); + $form->show(); + } + + $action->elementEnd('li'); + } + } + /** * Initialize any flagging buttons on the page *