code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Allows users to flag content and accounts as offensive/spam/whatever
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Plugin
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2009 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Allows users to flag content and accounts as offensive/spam/whatever
 *
 * @category Plugin
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 */
class UserFlagPlugin extends Plugin
{
    const REVIEWFLAGS = 'UserFlagPlugin::reviewflags';
    const CLEARFLAGS  = 'UserFlagPlugin::clearflags';

    public $flagOnBlock = true;

    /**
     * Hook for ensuring our tables are created
     *
     * Ensures that the user_flag_profile table exists
     * and has the right columns.
     *
     * @return boolean hook return
     */
    function onCheckSchema()
    {
        $schema = Schema::get();

        // For storing user-submitted flags on profiles
        $schema->ensureTable('user_flag_profile', User_flag_profile::schemaDef());
        return true;
    }

    /**
     * Add our actions to the URL router
     *
     * @param URLMapper $m URL mapper for this hit
     *
     * @return boolean hook return
     */
    public function onRouterInitialized(URLMapper $m)
    {
        $m->connect('main/flag/profile', array('action' => 'flagprofile'));
        $m->connect('main/flag/clear', array('action' => 'clearflag'));
        $m->connect('panel/profile/flag', array('action' => 'adminprofileflag'));
        return true;
    }

    /**
     * Add a 'flag' button to profile page
     *
     * @param Action  $action The action being called
     * @param Profile $profile Profile being shown
     *
     * @return boolean hook result
     */
    function onEndProfilePageActionsElements($action, $profile)
    {
        $this->showFlagButton($action, $profile,
                              array('action' => 'showstream',
                                    'nickname' => $profile->nickname));

        return true;
    }

    /**
     * Add a 'flag' button to profiles in a list
     *
     * @param ProfileListItem $item item being shown
     *
     * @return boolean hook result
     */
    function onEndProfileListItemActionElements($item)
    {
        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');
        }
    }

    /**
     * Check whether a user has one of our defined rights
     *
     * We define extra rights; this function checks to see if a
     * user has one of them.
     *
     * @param User    $user    User being checked
     * @param string  $right   Right we're checking
     * @param boolean &$result out, result of the check
     *
     * @return boolean hook result
     */
    function onUserRightsCheck($user, $right, &$result)
    {
        switch ($right) {
        case self::REVIEWFLAGS:
        case self::CLEARFLAGS:
            $result = $user->hasRole('moderator');
            return false; // done processing!
        }

        return true; // unchanged!
    }

    /**
     * Optionally flag profile when a block happens
     *
     * We optionally add a flag when a profile has been blocked
     *
     * @param User    $user    User doing the block
     * @param Profile $profile Profile being blocked
     *
     * @return boolean hook result
     */
    function onEndBlockProfile($user, $profile)
    {
        if ($this->flagOnBlock && !User_flag_profile::exists($profile->id,
                                                             $user->id)) {

            User_flag_profile::create($user->id, $profile->id);
        }
        return true;
    }

    /**
     * Ensure that flag entries for a profile are deleted
     * along with the profile when deleting users.
     * This prevents breakage of the admin profile flag UI.
     *
     * @param Profile $profile
     * @param array &$related list of related tables; entries
     *              with matching profile_id will be deleted.
     *
     * @return boolean hook result
     */
    function onProfileDeleteRelated($profile, &$related)
    {
        $related[] = 'user_flag_profile';
        return true;
    }

    /**
     * Ensure that flag entries created by a user are deleted
     * when that user gets deleted.
     *
     * @param User $user
     * @param array &$related list of related tables; entries
     *              with matching user_id will be deleted.
     *
     * @return boolean hook result
     */
    function onUserDeleteRelated($user, &$related)
    {
        $related[] = 'user_flag_profile';
        return true;
    }

    /**
     * Provide plugin version information.
     *
     * This data is used when showing the version page.
     *
     * @param array &$versions array of version data arrays; see EVENTS.txt
     *
     * @return boolean hook value
     */
    function onPluginVersion(&$versions)
    {
        $url = 'http://status.net/wiki/Plugin:UserFlag';

        $versions[] = array('name' => 'UserFlag',
            'version' => GNUSOCIAL_VERSION,
            'author' => 'Evan Prodromou',
            'homepage' => $url,
            'rawdescription' =>
            // TRANS: Plugin description.
            _m('This plugin allows flagging of profiles for review and reviewing flagged profiles.'));

        return true;
    }
}


code:
<?php
/**
 * Show latest and greatest profile flags
 *
 * PHP version 5
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Show the latest and greatest profile flags
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class AdminprofileflagAction extends Action
{
    var $page     = null;
    var $profiles = null;

    /**
     * Take arguments for running
     *
     * @param array $args $_REQUEST args
     *
     * @return boolean success flag
     */
    function prepare($args)
    {
        parent::prepare($args);

        $user = common_current_user();

        // User must be logged in.

        if (!common_logged_in()) {
            // TRANS: Error message displayed when trying to perform an action that requires a logged in user.
            $this->clientError(_m('Not logged in.'));
        }

        $user = common_current_user();

        // ...because they're logged in

        assert(!empty($user));

        // It must be a "real" login, not saved cookie login

        if (!common_is_real_login()) {
            // Cookie theft is too easy; we require automatic
            // logins to re-authenticate before admining the site
            common_set_returnto($this->selfUrl());
            if (Event::handle('RedirectToLogin', array($this, $user))) {
                common_redirect(common_local_url('login'), 303);
            }
        }

        // User must have the right to review flags

        if (!$user->hasRight(UserFlagPlugin::REVIEWFLAGS)) {
            // TRANS: Error message displayed when trying to review profile flags while not authorised.
            $this->clientError(_m('You cannot review profile flags.'));
        }

        $this->page = $this->trimmed('page');

        if (empty($this->page)) {
            $this->page = 1;
        }

        $this->profiles = $this->getProfiles();

        return true;
    }

    /**
     * Handle request
     *
     * @param array $args $_REQUEST args; handled in prepare()
     *
     * @return void
     */
    function handle($args)
    {
        parent::handle($args);

        $this->showPage();
    }

    /**
     * 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');
    }

    /**
     * save the profile flag
     *
     * @return void
     */
    function showContent()
    {
        $pl = new FlaggedProfileList($this->profiles, $this);

        $cnt = $pl->show();

        $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
                          $this->page, 'adminprofileflag');
    }

    /**
     * Retrieve this action's profiles
     *
     * @return Profile $profile Profile query results
     */
    function getProfiles()
    {
        $ufp = new User_flag_profile();

        $ufp->selectAdd();
        $ufp->selectAdd('profile_id');
        $ufp->selectAdd('count(*) as flag_count');

        $ufp->whereAdd('cleared is NULL');

        $ufp->groupBy('profile_id');
        $ufp->orderBy('flag_count DESC, profile_id DESC');

        $offset = ($this->page-1) * PROFILES_PER_PAGE;
        $limit  = PROFILES_PER_PAGE + 1;

        $ufp->limit($offset, $limit);

        $profiles = array();

        if ($ufp->find()) {
            while ($ufp->fetch()) {
                $profile = Profile::getKV('id', $ufp->profile_id);
                if (!empty($profile)) {
                    $profiles[] = $profile;
                }
            }
        }

        $ufp->free();

        return new ArrayWrapper($profiles);
    }
}

/**
 * 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
{
    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();

        list($action, $this->r2args) = $this->out->returnToArgs();

        $this->r2args['action'] = $action;

        $this->startActions();
        if (Event::handle('StartProfileListItemActionElements', array($this))) {
            $this->out->elementStart('li', 'entity_moderation');
            // 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->showDeleteButton();
            $this->showClearButton();
            $this->out->elementEnd('ul');
            $this->out->elementEnd('li');
            Event::handle('EndProfileListItemActionElements', array($this));
        }
        $this->endActions();
    }

    /**
     * Show a button to sandbox the profile
     *
     * @return void
     */
    function showSandboxButton()
    {
        if ($this->user->hasRight(Right::SANDBOXUSER)) {
            $this->out->elementStart('li', 'entity_sandbox');
            if ($this->profile->isSandboxed()) {
                $usf = new UnSandboxForm($this->out, $this->profile, $this->r2args);
                $usf->show();
            } else {
                $sf = new SandboxForm($this->out, $this->profile, $this->r2args);
                $sf->show();
            }
            $this->out->elementEnd('li');
        }
    }

    /**
     * Show a button to silence the profile
     *
     * @return void
     */
    function showSilenceButton()
    {
        if ($this->user->hasRight(Right::SILENCEUSER)) {
            $this->out->elementStart('li', 'entity_silence');
            if ($this->profile->isSilenced()) {
                $usf = new UnSilenceForm($this->out, $this->profile, $this->r2args);
                $usf->show();
            } else {
                $sf = new SilenceForm($this->out, $this->profile, $this->r2args);
                $sf->show();
            }
            $this->out->elementEnd('li');
        }
    }

    /**
     * Show a button to delete user and profile
     *
     * @return void
     */
    function showDeleteButton()
    {

        if ($this->user->hasRight(Right::DELETEUSER)) {
            $this->out->elementStart('li', 'entity_delete');
            $df = new DeleteUserForm($this->out, $this->profile, $this->r2args);
            $df->show();
            $this->out->elementEnd('li');
        }
    }

    /**
     * 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');
        }
    }
}

license: mit


code:
<?php
/**
 * Clear all flags for a profile
 *
 * PHP version 5
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Action to clear flags for a profile
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class ClearflagAction extends ProfileFormAction
{
    /**
     * Take arguments for running
     *
     * @param array $args $_REQUEST args
     *
     * @return boolean success flag
     */
    function prepare($args)
    {
        if (!parent::prepare($args)) {
            return false;
        }

        $user = common_current_user();

        assert(!empty($user)); // checked above
        assert(!empty($this->profile)); // checked above

        return true;
    }

    /**
     * Handle request
     *
     * Overriding the base Action's handle() here to deal check
     * for Ajax and return an HXR response if necessary
     *
     * @param array $args $_REQUEST args; handled in prepare()
     *
     * @return void
     */
    function handle($args)
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $this->handlePost();
            if (!$this->boolean('ajax')) {
                $this->returnToPrevious();
            }
        }
    }

    /**
     * Handle POST
     *
     * Executes the actions; deletes all flags
     *
     * @return void
     */
    function handlePost()
    {
        $ufp = new User_flag_profile();

        $result = $ufp->query('UPDATE user_flag_profile ' .
                              'SET cleared = now() ' .
                              'WHERE cleared is null ' .
                              'AND profile_id = ' . $this->profile->id);

        if ($result == false) {
            // TRANS: Server exception given when flags could not be cleared.
            // TRANS: %s is a profile nickname.
            $msg = sprintf(_m('Could not clear flags for profile "%s".'),
                           $this->profile->nickname);
            throw new ServerException($msg);
        }

        $ufp->free();

        if ($this->boolean('ajax')) {
            $this->ajaxResults();
        }
    }

    /**
     * Return results in ajax form
     *
     * @return void
     */
    function ajaxResults()
    {
        $this->startHTML('text/xml;charset=utf-8');
        $this->elementStart('head');
        // TRANS: Title for AJAX form to indicated that flags were removed.
        $this->element('title', null, _m('Flags cleared'));
        $this->elementEnd('head');
        $this->elementStart('body');
        // TRANS: Body element for "flags cleared" form.
        $this->element('p', 'cleared', _m('Cleared'));
        $this->elementEnd('body');
        $this->endHTML();
    }
}


code:
<?php
/**
 * Add a flag to a profile
 *
 * PHP version 5
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Action to flag a profile.
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class FlagprofileAction extends ProfileFormAction
{
    /**
     * Take arguments for running
     *
     * @param array $args $_REQUEST args
     *
     * @return boolean success flag
     */
    function prepare($args)
    {
        if (!parent::prepare($args)) {
            return false;
        }

        $user = common_current_user();

        assert(!empty($user)); // checked above
        assert(!empty($this->profile)); // checked above

        return true;
    }

    /**
     * Handle request
     *
     * Overriding the base Action's handle() here to deal check
     * for Ajax and return an HXR response if necessary
     *
     * @param array $args $_REQUEST args; handled in prepare()
     *
     * @return void
     */
    function handle($args)
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $this->handlePost();
            if (!$this->boolean('ajax')) {
                $this->returnToPrevious();
            }
        }
    }

    /**
     * Handle POST
     *
     * @return void
     */
    function handlePost()
    {
        $user = common_current_user();

        assert(!empty($user));
        assert(!empty($this->profile));

        // throws an exception on error

        if (User_flag_profile::exists($this->profile->id,
                                      $user->id)) {
            // We'll return to the profile page (or return the updated AJAX form)
            // showing the current state, so no harm done.
        } else {
            User_flag_profile::create($user->id, $this->profile->id);
        }

        if ($this->boolean('ajax')) {
            $this->ajaxResults();
        }
    }

    /**
     * Return results as AJAX message
     *
     * @return void
     */
    function ajaxResults()
    {
        $this->startHTML('text/xml;charset=utf-8');
        $this->elementStart('head');
        // TRANS: AJAX form title for a flagged profile.
        $this->element('title', null, _m('Flagged for review'));
        $this->elementEnd('head');
        $this->elementStart('body');
        // TRANS: Body text for AJAX form when a profile has been flagged for review.
        $this->element('p', 'flagged', _m('Flagged'));
        $this->elementEnd('body');
        $this->endHTML();
    }
}


code:
<?php
/**
 * Data class for profile flags
 *
 * PHP version 5
 *
 * @category Data
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2009, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

require_once INSTALLDIR . '/classes/Memcached_DataObject.php';

/**
 * Data class for profile flags
 *
 * A class representing a user flagging another profile for review.
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class User_flag_profile extends Managed_DataObject
{
    ###START_AUTOCODE
    /* the code below is auto generated do not remove the above tag */

    public $__table = 'user_flag_profile';               // table name
    public $profile_id;                      // int(11)  primary_key not_null
    public $user_id;                         // int(11)  primary_key not_null
    public $cleared;                         // datetime   default_0000-00-00%2000%3A00%3A00
    public $created;                         // datetime()   not_null
    public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP

    /* the code above is auto generated do not remove the tag below */
    ###END_AUTOCODE

    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile id flagged'),
                'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user id of the actor'),
                'cleared' => array('type' => 'datetime', 'description' => 'when flag was removed'),
                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
            ),
            'primary key' => array('profile_id', 'user_id'),
            'indexes' => array(
                'user_flag_profile_cleared_idx' => array('cleared'),
                'user_flag_profile_created_idx' => array('created'),
            ),
        );
    }

    /**
     * Check if a flag exists for given profile and user
     *
     * @param integer $profile_id Profile to check for
     * @param integer $user_id    User to check for
     *
     * @return boolean true if exists, else false
     */
    static function exists($profile_id, $user_id)
    {
        $ufp = User_flag_profile::pkeyGet(array('profile_id' => $profile_id,
                                                'user_id' => $user_id));

        return !empty($ufp);
    }

    /**
     * Create a new flag
     *
     * @param integer $user_id    ID of user who's flagging
     * @param integer $profile_id ID of profile being flagged
     *
     * @return boolean success flag
     */
    static function create($user_id, $profile_id)
    {
        $ufp = new User_flag_profile();

        $ufp->profile_id = $profile_id;
        $ufp->user_id    = $user_id;
        $ufp->created    = common_sql_now();

        if (!$ufp->insert()) {
            // TRANS: Server exception.
            // TRANS: %d is a profile ID (number).
            $msg = sprintf(_m('Could not flag profile "%d" for review.'),
                           $profile_id);
            throw new ServerException($msg);
        }

        $ufp->free();

        return true;
    }
}


code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Form for clearing profile flags
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Form
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2009 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

require_once INSTALLDIR.'/lib/form.php';

/**
 * Form for clearing profile flags
 *
 * @category Form
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 */
class ClearFlagForm extends ProfileActionForm
{
    /**
     * class of the form
     * Action this form provides
     *
     * @return string class of the form
     */
    function formClass()
    {
        return 'form_user_clearflag';
    }

    /**
     * Action this form provides
     *
     * @return string Name of the action, lowercased.
     */
    function target()
    {
        return 'clearflag';
    }

    /**
     * Title of the form
     *
     * @return string Title of the form, internationalized
     */
    function title()
    {
        // TRANS: Form title for action on a profile.
        return _m('Clear');
    }

    /**
     * Description of the form
     *
     * @return string description of the form, internationalized
     */

    function description()
    {
        // TRANS: Form description for clearing flags from a profile.
        return _m('Clear all flags');
    }
}


code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Form for flagging a profile
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Form
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2009 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

require_once INSTALLDIR.'/lib/form.php';

/**
 * Form for flagging a profile
 *
 * A form for flagging a profile
 *
 * @category Form
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 */
class FlagProfileForm extends ProfileActionForm
{
    /**
     * class of the form
     * Action this form provides
     *
     * @return string class of the form
     */
    function formClass()
    {
        return 'form_entity_flag ajax';
    }

    /**
     * Action this form provides
     *
     * @return string Name of the action, lowercased.
     */
    function target()
    {
        return 'flagprofile';
    }

    /**
     * Title of the form
     *
     * @return string Title of the form, internationalized
     */
    function title()
    {
        // TRANS: Form title for flagging a profile for review.
        return _m('Flag');
    }

    /**
     * Description of the form
     *
     * @return string description of the form, internationalized
     */
    function description()
    {
        // TRANS: Form description.
        return _m('Flag profile for review.');
    }
}


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

#. TRANS: AJAX form title for a flagged profile.
#: flagprofile.php:125
msgid "Flagged for review"
msgstr ""

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr ""

#. TRANS: Plugin description.
#: UserFlagPlugin.php:279
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""

#. TRANS: Form title for flagging a profile for review.
#: flagprofileform.php:78
msgid "Flag"
msgstr ""

#. TRANS: Form description.
#: flagprofileform.php:89
msgid "Flag profile for review."
msgstr ""

#. TRANS: Form title for action on a profile.
#: clearflagform.php:76
msgid "Clear"
msgstr ""

#. TRANS: Form description for clearing flags from a profile.
#: clearflagform.php:88
msgid "Clear all flags"
msgstr ""

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
#: adminprofileflag.php:65
msgid "Not logged in."
msgstr ""

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
#: adminprofileflag.php:90
msgid "You cannot review profile flags."
msgstr ""

#. TRANS: Title for page with a list of profiles that were flagged for review.
#: adminprofileflag.php:127
msgid "Flagged profiles"
msgstr ""

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
#: adminprofileflag.php:244
msgid "Moderate"
msgstr ""

#. 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.
#: adminprofileflag.php:390
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] ""
msgstr[1] ""

#. 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.
#: adminprofileflag.php:394
#, php-format
msgid "Flagged by %s"
msgstr ""

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#: clearflag.php:105
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr ""

#. TRANS: Title for AJAX form to indicated that flags were removed.
#: clearflag.php:129
msgid "Flags cleared"
msgstr ""

#. TRANS: Body element for "flags cleared" form.
#: clearflag.php:133
msgid "Cleared"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#: User_flag_profile.php:161
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr ""


code:
# Translation of StatusNet - UserFlag to Arabic (العربية)
# Exported from translatewiki.net
#
# Author: OsamaK
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Language-Team: Arabic <https://translatewiki.net/wiki/Portal:ar>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ar\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == "
"2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= "
"99) ? 4 : 5 ) ) ) );\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "عُلّم للمراجعة"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "عُلّم"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "علّم"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr ""

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "امسح"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "امسح كل الأعلام"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "لست والجًا."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr ""

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "الملفات الشخصية المعلمة"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "راقب"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[5] ""

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr ""

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr ""

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr ""

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr ""


code:
# Translation of StatusNet - UserFlag to Breton (Brezhoneg)
# Expored from translatewiki.net
#
# Author: Y-M D
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-01-14 10:29+0000\n"
"PO-Revision-Date: 2011-01-14 10:34:16+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-01-10 18:27:23+0000\n"
"X-Generator: MediaWiki 1.18alpha (r80246); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Title for page with a list of profiles that were flagged for review.
#: adminprofileflag.php:125
msgid "Flagged profiles"
msgstr ""

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
#: adminprofileflag.php:242
msgid "Moderate"
msgstr "Merañ"

#. 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 the plural.
#: adminprofileflag.php:388
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] ""
msgstr[1] ""

#. 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.
#: adminprofileflag.php:392
#, php-format
msgid "Flagged by %s"
msgstr ""

#. TRANS: AJAX form title for a flagged profile.
#: flagprofile.php:125
msgid "Flagged for review"
msgstr ""

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr ""

#. TRANS: Plugin description.
#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""

#. TRANS: Server exception given when flags could not be cleared.
#: clearflag.php:105
#, php-format
msgid "Couldn't clear flags for profile \"%s\"."
msgstr ""

#. TRANS: Title for AJAX form to indicated that flags were removed.
#: clearflag.php:129
msgid "Flags cleared"
msgstr ""

#. TRANS: Body element for "flags cleared" form.
#: clearflag.php:133
msgid "Cleared"
msgstr "Diverket"

#. TRANS: Form title for flagging a profile for review.
#: flagprofileform.php:78
msgid "Flag"
msgstr "Merkañ"

#. TRANS: Form description.
#: flagprofileform.php:89
msgid "Flag profile for review."
msgstr ""

#. TRANS: Server exception.
#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr ""

#. TRANS: Form title for action on a profile.
#: clearflagform.php:76
msgid "Clear"
msgstr "Riñsañ"

#: clearflagform.php:88
msgid "Clear all flags"
msgstr ""


code:
# Translation of StatusNet - UserFlag to Catalan (català)
# Exported from translatewiki.net
#
# Author: Toniher
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ca\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Senyalat per revisar"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Senyalat"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Aquest connector permet senyalar perfils per revisar i revisar els perfils "
"senyalats."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Senyala"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Senyala el perfil per revisar."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Esborra"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Esborra tots els senyals"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "No s'ha iniciat una sessió."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "No podeu revisar els senyals del perfil."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Perfils senyalats"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Modera"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Senyalat per %1$s i %2$d altre"
msgstr[1] "Senyalat per %1$s i %2$d altres"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Senyalat per %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "No s'han pogut esborrar els senyals del perfil «%s»."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "S'han esborrat els senyals"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "S'ha esborrat"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "No s'ha pogut senyalar el perfil «%d» per a una revisió."


code:
# Translation of StatusNet - UserFlag to German (Deutsch)
# Exported from translatewiki.net
#
# Author: ChrisiPK
# Author: Giftpflanze
# Author: Habi
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Zum Überprüfen markiert"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Markiert"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Dieser Plugin ermöglicht, Profile zur Überprüfung zu markieren und diese "
"markierten Profile zu überprüfen."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Markieren"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Profil zur Überprüfung markieren."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Löschen"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Alle Markierungen löschen"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Nicht angemeldet."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Du  kannst die Profilflags nicht überprüfen."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Markierte Profile"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Moderieren"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Markiert durch %1$s und %2$d weitere Konten"
msgstr[1] "Markiert durch %1$s und %2$d Andere"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Durch %s markiert"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Konnte Markierungen für Profil „%s“ nicht entfernen."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Flags gelöscht"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Gelöscht"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Konnte Profil „%d“ nicht zur Überprüfung markieren."


code:
# Translation of StatusNet - UserFlag to Zazaki (Zazaki)
# Exported from translatewiki.net
#
# Author: Erdemaslancan
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr ""

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Desmale"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Desmal"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr ""

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "estern"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr ""

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr ""

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr ""

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr ""

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Modere"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] ""
msgstr[1] ""

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Desmala %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr ""

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Desmala estere ke"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr ""


code:
# Translation of StatusNet - UserFlag to Spanish (español)
# Exported from translatewiki.net
#
# Author: Armando-Martin
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Marcado para revisión"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Marcado"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Este complemento (plugin) permite marcar perfiles para revisión y revisar "
"los perfiles marcados."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Marcar"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Marcar el perfil para revisión."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Borrar"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Borrar todas las marcas"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "No ha iniciado sesión"

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "No puede revisar las marcas de perfil."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Perfiles marcados"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Moderado"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Marcado por  %1$s  y  otro"
msgstr[1] "Marcado por  %1$s  y  otros  %2$d más"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Marcado por %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "No pueden borrar las marcas del perfil \"%s\"."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Marcas borradas"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Borrado"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "No pudo marcar el perfil \"%d\" para su revisión."


code:
# Translation of StatusNet - UserFlag to Basque (euskara)
# Exported from translatewiki.net
#
# Author: Artsuaga
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Azterketarako markatua"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr ""

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr ""

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Markatu profila aztertzeko."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Garbitu"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Marka guztiak garbitu"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Saioa hasi gabe."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr ""

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Markatutako profilak"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Moderatu"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "%1$s and %2$dek markatua"
msgstr[1] "%1$s and %2$d(e)k markatua"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "%s(e)k markatua"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "\"%s\" profilarentzako ezin izan dira markak garbitu."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr ""

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, fuzzy, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "\"%s\" profila ezin izan da azterketarako markatu."


code:
# Translation of StatusNet - UserFlag to French (français)
# Exported from translatewiki.net
#
# Author: Peter17
# Author: Tititou36
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:23+0000\n"
"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Marqué pour vérification"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Marqué"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Cette extension permet de marquer des profils pour vérification et de "
"vérifier des profils marqués."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Marquer"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Marquer le profil pour vérification."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Effacer"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Effacer tous les marquages"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Non connecté."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Vous ne pouvez pas examiner les drapeaux de profil."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Profils marqués"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Modérer"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Marqué par %1$s et %2$d autre"
msgstr[1] "Marqué par %1$s et %2$d autres"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Marqué par %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Impossible de supprimer les marquages pour le profil « %s »."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Marquages supprimés"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Effacé"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Impossible de marquer le profil « %d » pour vérification."


code:
# Translation of StatusNet - UserFlag to Galician (galego)
# Exported from translatewiki.net
#
# Author: Toliño
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: gl\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Marcado para revisión"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Marcado"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Este complemento permite marcar perfís para revisión e revisar perfís "
"marcados."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Marcar"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Marcar o perfil para revisión."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Limpar"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Limpar todas as marcas"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Non iniciou sesión."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Non pode revisar marcas de perfíl."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Perfís marcados"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Moderar"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Marcado por %1$s e outro"
msgstr[1] "Marado por %1$s e %2$d máis"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Marcado por %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Non se puideron limpar as marcas do perfil \"%s\"."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Marcas limpadas"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Limpado"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Non se puido marcar o perfil \"%d\" para revisión."


code:
# Translation of StatusNet - UserFlag to Interlingua (interlingua)
# Exported from translatewiki.net
#
# Author: McDutchie
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Signalate pro inspection"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Signalate"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Iste plug-in permitte signalar profilos pro inspection e inspectar profilos "
"signalate."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Signalar"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Signalar profilo pro inspection."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Rader"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Rader tote le signalamentos"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Tu non ha aperite un session."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Tu non pote inspectar profilos signalate."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Profilos signalate"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Moderar"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Signalate per %1$s e %2$d altere"
msgstr[1] "Signalate per %1$s e %2$d alteres"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Signalate per %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Non poteva rader signalamentos pro le profilo \"%s\"."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Signalamentos radite"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Radite"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Non poteva signalar le profilo \"%d\" pro inspection."


code:
# Translation of StatusNet - UserFlag to Macedonian (македонски)
# Exported from translatewiki.net
#
# Author: Bjankuloski06
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Означено за преглед"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Означено"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Овој приклучок овозможува означување на профили за преглед и прегледување на "
"означени профили."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Означи"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Означи профил за преглед."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Исчисти"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Отстрани ги сите ознаки"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Не сте најавени."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Не можете да прегледувате профилни знаменца."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Означени профили"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Модерирај"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Означено од %1$s и уште %2$d друг"
msgstr[1] "Означено од %1$s и уште %2$d други"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Означено од %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Не можев да ги отстранам ознаките за профилот „%s“."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Ознаките се отстранети"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Отстрането"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Не можев да го означам профилот „%d“ за преглед."


code:
# Translation of StatusNet - UserFlag to Dutch (Nederlands)
# Exported from translatewiki.net
#
# Author: Siebrand
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Gemarkeerd voor controle"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Gemarkeerd"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Deze plugin maakt het markeren van profielen voor controle mogelijk en de "
"controle van gemarkeerde profielen."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Markeren"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Profiel voor controle markeren"

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Wissen"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Alle markeringen wissen"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Niet aangemeld."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "U kunt gemarkeerde profielen niet controleren."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Gemarkeerde profielen"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Modereren"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Gemarkeerd door %1$s en %2$d andere"
msgstr[1] "Gemarkeerd door %1$s en %2$d anderen"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Gemarkeerd door %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr ""
"Het was niet mogelijk de markeringen van het profiel \"%s\" te verwijderen."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Markeringen verwijderd"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Verwijderd"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Het was niet mogelijk het profiel \"%d\" voor controle te markeren."


code:
# Translation of StatusNet - UserFlag to Portuguese (português)
# Exported from translatewiki.net
#
# Author: GTNS
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Portuguese <https://translatewiki.net/wiki/Portal:pt>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: pt\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Sinalizado para análise"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Sinalizado"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Este plugin permite sinalizar perfis para análise e analisar perfis "
"sinalizados."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Sinalização"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Sinalizar perfil para análise."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Limpar"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Limpar todas as sinalizações"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr ""

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr ""

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Perfis sinalizados"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Moderar"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Sinalizado por %1$s e mais %2$d pessoa"
msgstr[1] "Sinalizado por %1$s e mais %2$d pessoas"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Sinalizado por %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, fuzzy, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Não foi possível limpar as sinalizações do perfil \"%s\"."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Sinalizações limpas"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Limpas"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, fuzzy, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Não foi possível sinalizar o perfil \"%d\" para análise."


code:
# Translation of StatusNet - UserFlag to Russian (русский)
# Exported from translatewiki.net
#
# Author: Byulent
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Russian <https://translatewiki.net/wiki/Portal:ru>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ru\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Помечен для просмотра"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Отмеченные"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Этот плагин позволяет отмечать профили для осмотра и просматривать "
"отмеченные профили."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Отметить"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Профиль помечен для просмотра"

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Очистить"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Очистить все флаги"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr ""

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr ""

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Отмеченные профили"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Модерировать"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Отмечено %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, fuzzy, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Не снимать отметки для профиля %s"

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Отметки сняты"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Снято"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, fuzzy, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Невозможно отметить профиль %d для просмотра."


code:
# Translation of StatusNet - UserFlag to Tagalog (Tagalog)
# Exported from translatewiki.net
#
# Author: AnakngAraw
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Iwinatawat para sa muling pagsusuri"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Iwinatawat"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Ang pamasak na ito nagpapahintulot ng pagwawatawat ng mga balangkas na "
"susuriing muli at pagsusuring muli ng ibinandilang mga balangkas."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Iwatawat"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Balangkas ng watawat na susuriing muli."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Hawiin"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Hawiin ang lahat ng mga watawat"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Hindi nakalagda."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Hindi ka maaaring magsuring muli ng mga watawat ng balangkas."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Iwinatawat na mga balangkas"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Katamtaman"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Iwinatawat ng %1$s at %2$d na iba pa"
msgstr[1] "Iwinatawat ng %1$s at %2$d na mga iba pa"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Iwinatawat ni %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Hindi mahawi ang mga watawat para sa balangkas ng katangian na \"%s\"."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Nahawi ang mga watawat"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Nahawi na"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr ""
"Hindi maibandila ang balangkas ng katangian na \"%d\" na susuriing muli."


code:
# Translation of StatusNet - UserFlag to Ukrainian (українська)
# Exported from translatewiki.net
#
# Author: Boogie
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:10:24+0000\n"
"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-12-03 13:51:36+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: AJAX form title for a flagged profile.
msgid "Flagged for review"
msgstr "Відмічені для розгляду"

#. TRANS: Body text for AJAX form when a profile has been flagged for review.
#. TRANS: Message added to a profile if it has been flagged for review.
msgid "Flagged"
msgstr "Відмічені"

#. TRANS: Plugin description.
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
msgstr ""
"Цей додаток дозволяє відмічати профілі користувачів для подальшого розгляду "
"та аналізу відмічених профілів."

#. TRANS: Form title for flagging a profile for review.
msgid "Flag"
msgstr "Відмітити"

#. TRANS: Form description.
msgid "Flag profile for review."
msgstr "Відмітити профіль для розгляду."

#. TRANS: Form title for action on a profile.
msgid "Clear"
msgstr "Зняти"

#. TRANS: Form description for clearing flags from a profile.
msgid "Clear all flags"
msgstr "Зняти всі позначки"

#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
msgid "Not logged in."
msgstr "Не увійшли."

#. TRANS: Error message displayed when trying to review profile flags while not authorised.
msgid "You cannot review profile flags."
msgstr "Ви не можете переглянути профілі позначених користувачів."

#. TRANS: Title for page with a list of profiles that were flagged for review.
msgid "Flagged profiles"
msgstr "Відмічені профілі"

#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...).
msgid "Moderate"
msgstr "Модерувати"

#. 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.
#, php-format
msgid "Flagged by %1$s and %2$d other"
msgid_plural "Flagged by %1$s and %2$d others"
msgstr[0] "Відмічено %1$s та ще %2$d користувачем"
msgstr[1] "Відмічено %1$s та ще %2$d користувачами"
msgstr[2] "Відмічено %1$s та ще %2$d користувачами"

#. 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.
#, php-format
msgid "Flagged by %s"
msgstr "Відмічено %s"

#. TRANS: Server exception given when flags could not be cleared.
#. TRANS: %s is a profile nickname.
#, fuzzy, php-format
msgid "Could not clear flags for profile \"%s\"."
msgstr "Не можу зняти позначки для профілю «%s»."

#. TRANS: Title for AJAX form to indicated that flags were removed.
msgid "Flags cleared"
msgstr "Позначки знято"

#. TRANS: Body element for "flags cleared" form.
msgid "Cleared"
msgstr "Знято"

#. TRANS: Server exception.
#. TRANS: %d is a profile ID (number).
#, fuzzy, php-format
msgid "Could not flag profile \"%d\" for review."
msgstr "Не вдалося відмітити профіль «%d» для розгляду."


code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Plugin to limit number of users that can register (best for cloud providers)
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Action
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2009 StatusNet Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Plugin to limit number of users that can register (best for cloud providers)
 *
 * For cloud providers whose freemium model is based on how many
 * users can register. We use it on the StatusNet Cloud.
 *
 * @category Plugin
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 *
 * @seeAlso  Location
 */
class UserLimitPlugin extends Plugin
{
    public $maxUsers = null;

    public function onStartUserRegister(Profile $profile)
    {
        $this->_checkMaxUsers();
        return true;
    }

    function onStartRegistrationTry($action)
    {
        $this->_checkMaxUsers();
        return true;
    }

    function _checkMaxUsers()
    {
        if (!is_null($this->maxUsers)) {
            $cls = new User();

            $cnt = $cls->count();

            if ($cnt >= $this->maxUsers) {
                // TRANS: Error message given if creating a new user is not possible because a limit has been reached.
                // TRANS: %d is the user limit (also available for plural).
                $msg = sprintf(_m('Cannot register because the maximum number of users (%d) for this site was reached.',
                                  'Cannot register because the maximum number of users (%d) for this site was reached.',
                                  $this->maxUsers),
                               $this->maxUsers);

                throw new ClientException($msg);
            }
        }
    }

    function onPluginVersion(&$versions)
    {
        $versions[] = array('name' => 'UserLimit',
                            'version' => GNUSOCIAL_VERSION,
                            'author' => 'Evan Prodromou',
                            'homepage' => 'http://status.net/wiki/Plugin:UserLimit',
                            'description' =>
                            // TRANS: Plugin description.
                            _m('Limit the number of users who can register.'));
        return true;
    }
}