* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
-
class AdminprofileflagAction extends Action
{
var $page = null;
*
* @return boolean success flag
*/
-
function prepare($args)
{
parent::prepare($args);
// User must be logged in.
if (!common_logged_in()) {
- $this->clientError(_('Not logged in.'));
+ // TRANS: Error message displayed when trying to perform an action that requires a logged in user.
+ $this->clientError(_m('Not logged in.'));
return;
}
// User must have the right to review flags
if (!$user->hasRight(UserFlagPlugin::REVIEWFLAGS)) {
- $this->clientError(_('You cannot review profile flags.'));
+ // TRANS: Error message displayed when trying to review profile flags while not authorised.
+ $this->clientError(_m('You cannot review profile flags.'));
return false;
}
*
* @return void
*/
-
function handle($args)
{
parent::handle($args);
$this->showPage();
}
- function title() {
- return _('Flagged profiles');
+ /**
+ * Title of this page
+ *
+ * @return string Title of the page
+ */
+ function title()
+ {
+ // TRANS: Title for page with a list of profiles that were flagged for review.
+ return _m('Flagged profiles');
}
/**
*
* @return void
*/
-
function showContent()
{
$pl = new FlaggedProfileList($this->profiles, $this);
$this->page, 'adminprofileflag');
}
+ /**
+ * Retrieve this action's profiles
+ *
+ * @return Profile $profile Profile query results
+ */
function getProfiles()
{
$ufp = new User_flag_profile();
$ufp->orderBy('flag_count DESC, profile_id DESC');
$offset = ($this->page-1) * PROFILES_PER_PAGE;
- $limit = PROFILES_PER_PAGE + 1;
+ $limit = PROFILES_PER_PAGE + 1;
$ufp->limit($offset, $limit);
if ($ufp->find()) {
while ($ufp->fetch()) {
- $profile = Profile::staticGet('id', $ufp->profile_id);
+ $profile = Profile::getKV('id', $ufp->profile_id);
if (!empty($profile)) {
$profiles[] = $profile;
}
}
}
-class FlaggedProfileList extends ProfileList {
-
+/**
+ * Specialization of ProfileList to show flagging information
+ *
+ * Most of the hard part is done in FlaggedProfileListItem.
+ *
+ * @category Widget
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+class FlaggedProfileList extends ProfileList
+{
+ /**
+ * Factory method for creating new list items
+ *
+ * @param Profile $profile Profile to create an item for
+ *
+ * @return ProfileListItem newly-created item
+ */
function newListItem($profile)
{
return new FlaggedProfileListItem($this->profile, $this->action);
}
}
+/**
+ * Specialization of ProfileListItem to show flagging information
+ *
+ * @category Widget
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
class FlaggedProfileListItem extends ProfileListItem
{
- var $user = null;
+ const MAX_FLAGGERS = 5;
+
+ var $user = null;
var $r2args = null;
+ /**
+ * Overload parent's action list with our own moderation-oriented buttons
+ *
+ * @return void
+ */
function showActions()
{
$this->user = common_current_user();
$this->startActions();
if (Event::handle('StartProfileListItemActionElements', array($this))) {
$this->out->elementStart('li', 'entity_moderation');
- $this->out->element('p', null, _('Moderate'));
+ // TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
+ $this->out->element('p', null, _m('Moderate'));
$this->out->elementStart('ul');
$this->showSandboxButton();
$this->showSilenceButton();
$this->endActions();
}
+ /**
+ * Show a button to sandbox the profile
+ *
+ * @return void
+ */
function showSandboxButton()
{
if ($this->user->hasRight(Right::SANDBOXUSER)) {
}
}
+ /**
+ * Show a button to silence the profile
+ *
+ * @return void
+ */
function showSilenceButton()
{
if ($this->user->hasRight(Right::SILENCEUSER)) {
}
}
+ /**
+ * Show a button to delete user and profile
+ *
+ * @return void
+ */
function showDeleteButton()
{
}
}
+ /**
+ * Show a button to clear flags
+ *
+ * @return void
+ */
function showClearButton()
{
+ if ($this->user->hasRight(UserFlagPlugin::CLEARFLAGS)) {
+ $this->out->elementStart('li', 'entity_clear');
+ $cf = new ClearFlagForm($this->out, $this->profile, $this->r2args);
+ $cf->show();
+ $this->out->elementEnd('li');
+ }
+ }
+
+ /**
+ * Overload parent function to add flaggers list
+ *
+ * @return void
+ */
+ function endProfile()
+ {
+ $this->showFlaggersList();
+ parent::endProfile();
+ }
+
+ /**
+ * Show a list of people who've flagged this profile
+ *
+ * @return void
+ */
+ function showFlaggersList()
+ {
+ $flaggers = array();
+
+ $ufp = new User_flag_profile();
+
+ $ufp->selectAdd();
+ $ufp->selectAdd('user_id');
+ $ufp->profile_id = $this->profile->id;
+ $ufp->orderBy('created');
+
+ if ($ufp->find()) { // XXX: this should always happen
+ while ($ufp->fetch()) {
+ $user = User::getKV('id', $ufp->user_id);
+ if (!empty($user)) { // XXX: this would also be unusual
+ $flaggers[] = clone($user);
+ }
+ }
+ }
+
+ $cnt = count($flaggers);
+ $others = 0;
+
+ if ($cnt > self::MAX_FLAGGERS) {
+ $flaggers = array_slice($flaggers, 0, self::MAX_FLAGGERS);
+ $others = $cnt - self::MAX_FLAGGERS;
+ }
+
+ $lnks = array();
+
+ foreach ($flaggers as $flagger) {
+
+ $url = common_local_url('showstream',
+ array('nickname' => $flagger->nickname));
+
+ $lnks[] = XMLStringer::estring('a', array('href' => $url,
+ 'class' => 'flagger'),
+ $flagger->nickname);
+ }
+
+ if ($cnt > 0) {
+ if ($others > 0) {
+ $flagging_users = implode(', ', $lnks);
+ // TRANS: Message displayed on a profile if it has been flagged.
+ // TRANS: %1$s is a comma separated list of at most 5 user nicknames that flagged.
+ // TRANS: %2$d is a positive integer of additional flagging users. Also used for plural.
+ $text .= sprintf(_m('Flagged by %1$s and %2$d other', 'Flagged by %1$s and %2$d others', $others), $flagging_users, $others);
+ } else {
+ // TRANS: Message displayed on a profile if it has been flagged.
+ // TRANS: %s is a comma separated list of at most 5 user nicknames that flagged.
+ $text .= sprintf(_m('Flagged by %s'), $flagging_users);
+ }
+
+ $this->out->elementStart('p', array('class' => 'flaggers'));
+ $this->out->raw($text);
+ $this->out->elementEnd('p');
+ }
}
}