code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Action for adding a new group message
 *
 * PHP version 5
 *
 * 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  Cache
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Action for adding a new group message
 *
 * @category  Action
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class NewgroupmessageAction extends Action
{
    var $group;
    var $user;
    var $text;

    /**
     * For initializing members of the class.
     *
     * @param array $argarray misc. arguments
     *
     * @return boolean true
     */
    function prepare($argarray)
    {
        parent::prepare($argarray);

        $this->user = common_current_user();

        if (empty($this->user)) {
            // TRANS: Client exception thrown when trying to send a private group message while not logged in.
            throw new ClientException(_m('Must be logged in.'), 403);
        }

        if (!$this->user->hasRight(Right::NEWMESSAGE)) {
            // TRANS: Exception thrown when user %s is not allowed to send a private group message.
            throw new Exception(sprintf(_m('User %s is not allowed to send private messages.'),
                                        $this->user->nickname));
        }

        $nicknameArg = $this->trimmed('nickname');

        $nickname = common_canonical_nickname($nicknameArg);

        if ($nickname != $nicknameArg) {
            $url = common_local_url('newgroupmessage', array('nickname' => $nickname));
            common_redirect($url, 301);
        }

        $localGroup = Local_group::getKV('nickname', $nickname);

        if (empty($localGroup)) {
            // TRANS: Client exception thrown when trying to send a private group message to a non-existing group.
            throw new ClientException(_m('No such group.'), 404);
        }

        $this->group = User_group::getKV('id', $localGroup->group_id);

        if (empty($this->group)) {
            // TRANS: Client exception thrown when trying to send a private group message to a non-existing group.
            throw new ClientException(_m('No such group.'), 404);
        }

        // This throws an exception on error
        Group_privacy_settings::ensurePost($this->user, $this->group);

        // If we're posted to, check session token and get text
        if ($this->isPost()) {
            $this->checkSessionToken();
            $this->text = $this->trimmed('content');
        }

        return true;
    }

    /**
     * Handler method
     *
     * @param array $argarray is ignored since it's now passed in in prepare()
     *
     * @return void
     */
    function handle($argarray=null)
    {
        if ($this->isPost()) {
            $this->sendNewMessage();
        } else {
            $this->showPage();
        }
    }

    function showNoticeForm()
    {
        $form = new GroupMessageForm($this, $this->group);
        $form->show();
    }

    function sendNewMessage()
    {
        $gm = Group_message::send($this->user, $this->group, $this->text);

        if ($this->boolean('ajax')) {
            $this->startHTML('text/xml;charset=utf-8');
            $this->elementStart('head');
            // TRANS: Title after sending a private group message.
            $this->element('title', null, _m('Message sent'));
            $this->elementEnd('head');
            $this->elementStart('body');
            $this->element('p',
                           array('id' => 'command_result'),
                           // TRANS: Succes text after sending a direct message to group %s.
                           sprintf(_m('Direct message to %s sent.'),
                                   $this->group->nickname));
            $this->elementEnd('body');
            $this->endHTML();
        } else {
            common_redirect($gm->url, 303);
        }
    }

    function title()
    {
        // TRANS: Title of form for new private group message.
        return sprintf(_m('New message to group %s'), $this->group->nickname);
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Show a single group message
 *
 * PHP version 5
 *
 * 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  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Show a single private group message
 *
 * @category  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class ShowgroupmessageAction extends Action
{
    var $gm;
    var $group;
    var $sender;
    var $user;

    /**
     * For initializing members of the class.
     *
     * @param array $argarray misc. arguments
     *
     * @return boolean true
     */
    function prepare($argarray)
    {
        parent::prepare($argarray);

        $this->user = common_current_user();

        if (empty($this->user)) {
            // TRANS: Client exception thrown when trying to view group private messages without being logged in.
            throw new ClientException(_m('Only logged-in users can view private messages.'),
                                      403);
        }

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

        $this->gm = Group_message::getKV('id', $id);

        if (empty($this->gm)) {
            // TRANS: Client exception thrown when trying to view a non-existing group private message.
            throw new ClientException(_m('No such message.'), 404);
        }

        $this->group = User_group::getKV('id', $this->gm->to_group);

        if (empty($this->group)) {
            // TRANS: Server exception thrown when trying to view group private messages for a non-exsting group.
            throw new ServerException(_m('Group not found.'));
        }

        if (!$this->user->isMember($this->group)) {
            // TRANS: Client exception thrown when trying to view a group private message without being a group member.
            throw new ClientException(_m('Cannot read message.'), 403);
        }

        $this->sender = Profile::getKV('id', $this->gm->from_profile);

        if (empty($this->sender)) {
            // TRANS: Server exception thrown when trying to view a group private message without a sender.
            throw new ServerException(_m('No sender found.'));
        }

        return true;
    }

    /**
     * Handler method
     *
     * @param array $argarray is ignored since it's now passed in in prepare()
     *
     * @return void
     */
    function handle($argarray=null)
    {
        $this->showPage();
    }

    /**
     * Title of the page
     */
    function title()
    {
        // TRANS: Title for private group message.
        // TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a timestamp.
        return sprintf(_m('Message from %1$s to group %2$s on %3$s'),
                       $this->sender->nickname,
                       $this->group->nickname,
                       common_exact_date($this->gm->created));
    }

    /**
     * Show the content area.
     */
    function showContent()
    {
        $this->elementStart('ul', 'notices messages');
        $gmli = new GroupMessageListItem($this, $this->gm);
        $gmli->show();
        $this->elementEnd('ul');
    }

    /**
     * Return true if read only.
     *
     * MAY override
     *
     * @param array $args other arguments
     *
     * @return boolean is read only action?
     */
    function isReadOnly($args)
    {
        return true;
    }

    /**
     * Return last modified, if applicable.
     *
     * MAY override
     *
     * @return string last modified http header
     */
    function lastModified()
    {
        return max(strtotime($this->group->modified),
                   strtotime($this->sender->modified),
                   strtotime($this->gm->modified));
    }

    /**
     * Return etag, if applicable.
     *
     * MAY override
     *
     * @return string etag http header
     */
    function etag()
    {
        try {
            $avatar = $this->sender->getAvatar(AVATAR_STREAM_SIZE);
            $avtime = strtotime($avatar->modified);
        } catch (Exception $e) {
            $avtime = 0;
        }

        return 'W/"' . implode(':', array($this->arg('action'),
                                          common_user_cache_hash(),
                                          common_language(),
                                          $this->gm->id,
                                          strtotime($this->sender->modified),
                                          strtotime($this->group->modified),
                                          $avtime)) . '"';
    }
}

repo_name: piratas/tortuga

license: mit


code:
<?php
/**
 * Data class for group direct messages
 *
 * 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 group direct messages
 *
 * @category GroupPrivateMessage
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * @see      DB_DataObject
 */
class Group_message extends Managed_DataObject
{
    public $__table = 'group_message'; // table name
    public $id;                        // char(36)  primary_key not_null
    public $uri;                       // varchar(191)   not 255 because utf8mb4 takes more space
    public $from_profile;              // int
    public $to_group;                  // int
    public $content;
    public $rendered;
    public $url;                       // varchar(191)   not 255 because utf8mb4 takes more space
    public $created;                   // datetime()   not_null
    public $modified;                  // timestamp()   not_null default_CURRENT_TIMESTAMP

    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'id' => array('type' => 'char', 'not null' => true, 'length' => 36, 'description' => 'message uuid'),
                'uri' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'message uri'),
                'url' => array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'representation url'),
                'from_profile' => array('type' => 'int', 'not null' => true, 'description' => 'sending profile ID'),
                'to_group' => array('type' => 'int', 'not null' => true, 'description' => 'receiving group ID'),
                'content' => array('type' => 'text', 'not null' => true, 'description' => 'message content'),
                'rendered' => array('type' => 'text', 'not null' => true, 'description' => 'rendered message'),
                '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('id'),
            'unique keys' => array(
                'group_message_uri_key' => array('uri'),
            ),
            'foreign keys' => array(
                'group_message_from_profile_fkey' => array('profile', array('from_profile' => 'id')),
                'group_message_to_group_fkey' => array('user_group', array('to_group' => 'id')),
            ),
            'indexes' => array(
                'group_message_from_profile_idx' => array('from_profile'),
                'group_message_to_group_idx' => array('to_group'),
                'group_message_url_idx' => array('url'),
            ),
        );
    }

    static function send($user, $group, $text)
    {
        if (!$user->hasRight(Right::NEWMESSAGE)) {
            // XXX: maybe break this out into a separate right
            // TRANS: Exception thrown when trying to send group private message without having the right to do that.
            // TRANS: %s is a user nickname.
            throw new Exception(sprintf(_m('User %s is not allowed to send private messages.'),
                                        $user->nickname));
        }

        Group_privacy_settings::ensurePost($user, $group);

        $text = $user->shortenLinks($text);

        // We use the same limits as for 'regular' private messages.

        if (Message::contentTooLong($text)) {
            // TRANS: Exception thrown when trying to send group private message that is too long.
            // TRANS: %d is the maximum meggage length.
            throw new Exception(sprintf(_m('That\'s too long. Maximum message size is %d character.',
                                           'That\'s too long. Maximum message size is %d characters.',
                                           Message::maxContent()),
                                        Message::maxContent()));
        }

        // Valid! Let's do this thing!

        $gm = new Group_message();

        $gm->id           = UUID::gen();
        $gm->uri          = common_local_url('showgroupmessage', array('id' => $gm->id));
        $gm->from_profile = $user->id;
        $gm->to_group     = $group->id;
        $gm->content      = $text; // XXX: is this cool?!
        $gm->rendered     = common_render_text($text);
        $gm->url          = $gm->uri;
        $gm->created      = common_sql_now();

        // This throws a conniption if there's a problem

        $gm->insert();

        $gm->distribute();

        return $gm;
    }

    function distribute()
    {
        $group = User_group::getKV('id', $this->to_group);

        $member = $group->getMembers();

        while ($member->fetch()) {
            Group_message_profile::send($this, $member);
        }
    }

    function getGroup()
    {
        $group = User_group::getKV('id', $this->to_group);
        if (empty($group)) {
            // TRANS: Exception thrown when trying to send group private message to a non-existing group.
            throw new ServerException(_m('No group for group message.'));
        }
        return $group;
    }

    function getSender()
    {
        $sender = Profile::getKV('id', $this->from_profile);
        if (empty($sender)) {
            // TRANS: Exception thrown when trying to send group private message without having a sender.
            throw new ServerException(_m('No sender for group message.'));
        }
        return $sender;
    }

    static function forGroup($group, $offset, $limit)
    {
        // XXX: cache
        $gm = new Group_message();

        $gm->to_group = $group->id;
        $gm->orderBy('created DESC');
        $gm->limit($offset, $limit);

        $gm->find();

        return $gm;
    }
}


code:
<?php
/**
 * Who received a group message
 *
 * 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) 2011, 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 group direct messages for users
 *
 * @category GroupPrivateMessage
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * @see      DB_DataObject
 */
class Group_message_profile extends Managed_DataObject
{
    public $__table = 'group_message_profile'; // table name
    public $to_profile;                        // int
    public $group_message_id;                  // varchar(36)  primary_key not_null
    public $created;                           // datetime()   not_null
    public $modified;                          // timestamp()   not_null default_CURRENT_TIMESTAMP

    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'to_profile' => array('type' => 'int', 'not null' => true, 'description' => 'id of group direct message'),
                'group_message_id' => array('type' => 'char', 'not null' => true, 'length' => 36, 'description' => 'related group message uuid'),
                '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('to_profile', 'group_message_id'),
            'foreign keys' => array(
                'group_message_profile_to_profile_fkey' => array('profile', array('to_profile' => 'id')),
                'group_message_profile_group_message_id_fkey' => array('group_message', array('group_message_id' => 'id')),
            ),
        );
    }

    function send($gm, $profile)
    {
        $gmp = new Group_message_profile();

        $gmp->group_message_id = $gm->id;
        $gmp->to_profile       = $profile->id;
        $gmp->created          = common_sql_now();

        $gmp->insert();

        // If it's not for the author, send email notification
        if ($gm->from_profile != $profile->id) {
            $gmp->notify();
        }

        return $gmp;
    }

    function notify()
    {
        // XXX: add more here
        $this->notifyByMail();
    }

    function notifyByMail()
    {
        $to = User::getKV('id', $this->to_profile);

        if (empty($to) || is_null($to->email) || !$to->emailnotifymsg) {
            return true;
        }

        $gm = Group_message::getKV('id', $this->group_message_id);

        $from_profile = Profile::getKV('id', $gm->from_profile);

        $group = $gm->getGroup();

        common_switch_locale($to->language);

        // TRANS: Subject for direct-message notification email.
        // TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
        $subject = sprintf(_m('New private message from %1$s to group %2$s'), $from_profile->nickname, $group->nickname);

        // TRANS: Body for direct-message notification email.
        // TRANS: %1$s is the sending user's long name, %2$s is the sending user's nickname,
        // TRANS: %3$s is the message content, %4$s a URL to the message,
        // TRANS: %5$s is the StatusNet sitename.
        $body = sprintf(_m("%1\$s (%2\$s) sent a private message to group %3\$s:\n\n".
                           "------------------------------------------------------\n".
                           "%4\$s\n".
                           "------------------------------------------------------\n\n".
                           "You can reply to their message here:\n\n".
                           "%5\$s\n\n".
                           "Do not reply to this email; it will not get to them.\n\n".
                           "With kind regards,\n".
                           "%6\$s"),
                        $from_profile->getBestName(),
                        $from_profile->nickname,
                        $group->nickname,
                        $gm->content,
                        common_local_url('newmessage', array('to' => $from_profile->id)),
                        common_config('site', 'name')) . "\n";

        $headers = _mail_prepare_headers('message', $to->nickname, $from_profile->nickname);

        common_switch_locale();

        return mail_to_user($to, $subject, $body, $headers);
    }
}


code:
<?php
/**
 * Data class for group privacy settings
 *
 * 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) 2011, 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);
}

/**
 * Data class for group privacy
 *
 * Stores admin preferences about the group.
 *
 * @category Action
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * @see      DB_DataObject
 */
class Group_privacy_settings extends Managed_DataObject
{
    public $__table = 'group_privacy_settings';
    /** ID of the group. */
    public $group_id;
    /** When to allow privacy: always, sometimes, or never. */
    public $allow_privacy;
    /** Who can send private messages: everyone, member, admin */
    public $allow_sender;
    /** row creation timestamp */
    public $created;
    /** Last-modified timestamp */
    public $modified;

    /** NEVER is */

    const SOMETIMES = -1;
    const NEVER  = 0;
    const ALWAYS = 1;

    /** These are bit-mappy, as a hedge against the future. */

    const EVERYONE = 1;
    const MEMBER   = 2;
    const ADMIN    = 4;

    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'group_id' => array('type' => 'int', 'not null' => true, 'description' => 'group_privacy_settings'),
                'allow_privacy' => array('type' => 'int', 'not null' => true, 'description' => 'sometimes=-1, never=0, always=1'),
                'allow_sender' => array('type' => 'int', 'not null' => true, 'description' => 'list of bit-mappy values in source code'),
                '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('group_id'),
            'foreign keys' => array(
                'group_privacy_settings_group_id_fkey' => array('user_group', array('group_id' => 'id')),
            ),
        );
    }

    function forGroup($group)
    {
        $gps = Group_privacy_settings::getKV('group_id', $group->id);

        if (empty($gps)) {
            // make a fake one with defaults
            $gps = new Group_privacy_settings();
            $gps->allow_privacy = Group_privacy_settings::SOMETIMES;
            $gps->allow_sender  = Group_privacy_settings::MEMBER;
        }

        return $gps;
    }

    function ensurePost($user, $group)
    {
        $gps = self::forGroup($group);

        if ($gps->allow_privacy == Group_privacy_settings::NEVER) {
            // TRANS: Exception thrown when trying to set group privacy setting if group %s does not allow private messages.
            throw new Exception(sprintf(_m('Group %s does not allow private messages.'),
                                        $group->nickname));
        }

        switch ($gps->allow_sender) {
        case Group_privacy_settings::EVERYONE:
            $profile = $user->getProfile();
            if (Group_block::isBlocked($group, $profile)) {
                // TRANS: Exception thrown when trying to send group private message while blocked from that group.
                // TRANS: %1$s is a user nickname, %2$s is a group nickname.
                throw new Exception(sprintf(_m('User %1$s is blocked from group %2$s.'),
                                            $user->nickname,
                                            $group->nickname));
            }
            break;
        case Group_privacy_settings::MEMBER:
            if (!$user->isMember($group)) {
                // TRANS: Exception thrown when trying to send group private message while not a member.
                // TRANS: %1$s is a user nickname, %2$s is a group nickname.
                throw new Exception(sprintf(_m('User %1$s is not a member of group %2$s.'),
                                            $user->nickname,
                                            $group->nickname));
            }
            break;
        case Group_privacy_settings::ADMIN:
            if (!$user->isAdmin($group)) {
                // TRANS: Exception thrown when trying to send group private message while not a group administrator.
                // TRANS: %1$s is a user nickname, %2$s is a group nickname.
                throw new Exception(sprintf(_m('User %1$s is not an administrator of group %2$s.'),
                                            $user->nickname,
                                            $group->nickname));
            }
            break;
        default:
            // TRANS: Exception thrown when encountering undefined group privacy settings.
            // TRANS: %s is a group nickname.
            throw new Exception(sprintf(_m('Unknown privacy settings for group %s.'),
                                        $group->nickname));
        }

        return true;
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Form for posting a group message
 *
 * PHP version 5
 *
 * 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  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Form for posting a group message
 *
 * @category  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class GroupMessageForm extends Form
{
    var $group;
    var $content;

    /**
     * Constructor
     *
     * @param HTMLOutputter $out   Output context
     * @param User_group    $group Group to post to
     *
     * @todo add a drop-down list to post to any group
     */
    function __construct($out, $group, $content=null)
    {
        parent::__construct($out);

        $this->group   = $group;
        $this->content = $content;
    }

    /**
     * Action for the form
     */
    function action()
    {
        return common_local_url('newgroupmessage',
                                array('nickname' => $this->group->nickname));
    }

    /**
     * Legend for the form
     *
     * @param
     *
     * @return
     */
    function formLegend()
    {
        $this->out->element('legend',
                            null,
                            // TRANS: Form legend for sending private message to group %s.
                            sprintf(_m('Message to %s'), $this->group->nickname));
    }

    /**
     * id for the form
     *
     * @param
     *
     * @return
     */
    function id()
    {
        return 'form_notice-group-message';
    }

    /**
     * class for the form
     *
     * @param
     *
     * @return
     */
    function formClass()
    {
        return 'form_notice';
    }

    /**
     * Entry data
     *
     * @param
     *
     * @return
     */
    function formData()
    {
        $this->out->element('label', array('for' => 'notice_data-text',
                                           'id' => 'notice_data-text-label'),
                            // TRANS: Field label for private group message to group %s.
                            sprintf(_m('Direct message to %s'), $this->group->nickname));

        $this->out->element('textarea', array('id' => 'notice_data-text',
                                              'cols' => 35,
                                              'rows' => 4,
                                              'name' => 'content'),
                            ($this->content) ? $this->content : '');

        $contentLimit = Message::maxContent();

        if ($contentLimit > 0) {
            $this->out->elementStart('dl', 'form_note');
            // TRANS: Indicator for number of chatacters still available for notice.
            $this->out->element('dt', null, _m('Available characters'));
            $this->out->element('dd', array('class' => 'count'),
                                $contentLimit);
            $this->out->elementEnd('dl');
        }
    }

    /**
     * Legend for the form
     *
     * @param
     *
     * @return
     */
    function formActions()
    {
        $this->out->element('input', array('id' => 'notice_action-submit',
                                           'class' => 'submit',
                                           'name' => 'message_send',
                                           'type' => 'submit',
                                           // TRANS: Send button text for sending private group notice.
                                           'value' => _m('Send button for sending notice', 'Send')));
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Command object for messages to groups
 *
 * PHP version 5
 *
 * 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  Command
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Command object for messages to groups
 *
 * @category  General
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class GroupMessageCommand extends Command
{
    /** User sending the message. */
    var $user;
    /** Nickname of the group they're sending to. */
    var $nickname;
    /** Text of the message. */
    var $text;

    /**
     * Constructor
     *
     * @param User   $user     User sending the message
     * @param string $nickname Nickname of the group
     * @param string $text     Text of message
     */
    function __construct($user, $nickname, $text)
    {
        $this->user     = $user;
        $this->nickname = $nickname;
        $this->text     = $text;
    }

    function handle($channel)
    {
        // Throws a command exception if group not found
        $group = $this->getGroup($this->nickname);

        $gm = Group_message::send($this->user, $group, $this->text);

        $channel->output($this->user,
                         // TRANS: Succes message after sending private group message to group %s.
                         sprintf(_m('Direct message to group %s sent.'),
                                 $group->nickname));

        return true;
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Widget for showing list of group messages
 *
 * PHP version 5
 *
 * 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  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Widget for showing list of group messages
 *
 * @category  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class GroupMessageList extends Widget
{
    var $gm;

    /**
     * Constructor
     *
     * @param HTMLOutputter $out output context
     * @param Group_message $gm  Group message stream
     */
    function __construct($out, $gm)
    {
        parent::__construct($out);
        $this->gm = $gm;
    }

    /**
     * Show the list
     *
     * @return void
     */
    function show()
    {
        $this->out->elementStart('ul', 'notices messages group-messages');

        $cnt = 0;

        while ($this->gm->fetch() && $cnt <= MESSAGES_PER_PAGE) {

            $cnt++;

            if ($cnt > MESSAGES_PER_PAGE) {
                break;
            }

            $gmli = new GroupMessageListItem($this->out, $this->gm);
            $gmli->show();
        }

        $this->out->elementEnd('ul');

        return $cnt;
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Widget for showing an individual group message
 *
 * PHP version 5
 *
 * 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  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Widget for showing a single group message
 *
 * @category  GroupPrivateMessage
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class GroupMessageListItem extends Widget
{
    var $gm;

    /**
     * Constructor
     *
     * @param HTMLOutputter $out output context
     * @param Group_message $gm  Group message
     */
    function __construct($out, $gm)
    {
        parent::__construct($out);
        $this->gm = $gm;
    }

    /**
     * Show the item
     *
     * @return void
     */
    function show()
    {
        $group  = $this->gm->getGroup();
        $sender = $this->gm->getSender();

        $this->out->elementStart('li', array('class' => 'h-entry notice message group-message',
                                         'id' => 'message-' . $this->gm->id));

        $this->out->elementStart('div', 'entry-title');
        $this->out->elementStart('span', 'vcard author');
        $this->out->elementStart('a',
                                 array('href' => $sender->profileurl,
                                       'class' => 'url'));
        $avatarUrl = $sender->avatarUrl(AVATAR_STREAM_SIZE);
        $this->out->element('img', array('src' => $avatarUrl,
                                    'width' => AVATAR_STREAM_SIZE,
                                    'height' => AVATAR_STREAM_SIZE,
                                    'class' => 'photo avatar',
                                    'alt' => $sender->getBestName()));
        $this->out->element('span',
                            array('class' => 'nickname fn'),
                            $sender->nickname);
        $this->out->elementEnd('a');
        $this->out->elementEnd('span');

        $this->out->elementStart('p', array('class' => 'e-content message-content'));
        $this->out->raw($this->gm->rendered);
        $this->out->elementEnd('p');
        $this->out->elementEnd('div');

        $this->out->elementStart('div', 'e-content');
        $this->out->elementStart('a', array('rel' => 'bookmark',
                                            'class' => 'timestamp',
                                            'href' => $this->gm->url));
        $this->out->element('time', array('class' => 'dt-published',
                                          'datetime' => common_date_iso8601($this->gm->created),
                                          // TRANS: Timestamp title (tooltip text) for NoticeListItem
                                          'title' => common_exact_date($this->gm->created)),
                            common_date_string($this->gm->created));
        $this->out->elementEnd('a');
        $this->out->elementEnd('div');

        $this->out->elementEnd('li');
    }
}


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: 2015-02-27 16:31+0100\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"
"Language: \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: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr ""

#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr ""

#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr ""

#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox while not logged in.
#: actions/groupinbox.php:66
msgid "Only for logged-in users."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox for non-existing group.
#. TRANS: Client exception thrown when trying to send a private group message to a non-existing group.
#: actions/groupinbox.php:82 actions/groupinbox.php:89
#: actions/newgroupmessage.php:90 actions/newgroupmessage.php:97
msgid "No such group."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox while not a member.
#: actions/groupinbox.php:94
msgid "Only for members."
msgstr ""

#. TRANS: Text of group inbox if no private messages were sent to it.
#: actions/groupinbox.php:128
msgid "This group has not received any private messages."
msgstr ""

#. TRANS: Title of inbox for group %s.
#: actions/groupinbox.php:174
#, php-format
msgid "%s group inbox"
msgstr ""

#. TRANS: Page title for any but first group page.
#. TRANS: %1$s is a group name, $2$s is a page number.
#: actions/groupinbox.php:178
#, php-format
msgid "%1$s group inbox, page %2$d"
msgstr ""

#. TRANS: Instructions for user inbox page.
#: actions/groupinbox.php:209
msgid ""
"This is the group inbox, which lists all incoming private messages for this "
"group."
msgstr ""

#. TRANS: Client exception thrown when trying to send a private group message while not logged in.
#: actions/newgroupmessage.php:68
msgid "Must be logged in."
msgstr ""

#. TRANS: Exception thrown when user %s is not allowed to send a private group message.
#. TRANS: Exception thrown when trying to send group private message without having the right to do that.
#. TRANS: %s is a user nickname.
#: actions/newgroupmessage.php:73 classes/Group_message.php:96
#, php-format
msgid "User %s is not allowed to send private messages."
msgstr ""

#. TRANS: Title after sending a private group message.
#: actions/newgroupmessage.php:142
msgid "Message sent"
msgstr ""

#. TRANS: Succes text after sending a direct message to group %s.
#: actions/newgroupmessage.php:148
#, php-format
msgid "Direct message to %s sent."
msgstr ""

#. TRANS: Title of form for new private group message.
#: actions/newgroupmessage.php:160
#, php-format
msgid "New message to group %s"
msgstr ""

#. TRANS: Client exception thrown when trying to view group private messages without being logged in.
#: actions/showgroupmessage.php:69
msgid "Only logged-in users can view private messages."
msgstr ""

#. TRANS: Client exception thrown when trying to view a non-existing group private message.
#: actions/showgroupmessage.php:79
msgid "No such message."
msgstr ""

#. TRANS: Server exception thrown when trying to view group private messages for a non-exsting group.
#: actions/showgroupmessage.php:86
msgid "Group not found."
msgstr ""

#. TRANS: Client exception thrown when trying to view a group private message without being a group member.
#: actions/showgroupmessage.php:91
msgid "Cannot read message."
msgstr ""

#. TRANS: Server exception thrown when trying to view a group private message without a sender.
#: actions/showgroupmessage.php:98
msgid "No sender found."
msgstr ""

#. TRANS: Title for private group message.
#. TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a timestamp.
#: actions/showgroupmessage.php:123
#, php-format
msgid "Message from %1$s to group %2$s on %3$s"
msgstr ""

#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:114
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr ""

#. TRANS: Body for direct-message notification email.
#. TRANS: %1$s is the sending user's long name, %2$s is the sending user's nickname,
#. TRANS: %3$s is the message content, %4$s a URL to the message,
#. TRANS: %5$s is the StatusNet sitename.
#: classes/Group_message_profile.php:120
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr ""

#. TRANS: Exception thrown when trying to send group private message that is too long.
#. TRANS: %d is the maximum meggage length.
#: classes/Group_message.php:109
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] ""
msgstr[1] ""

#. TRANS: Exception thrown when trying to send group private message to a non-existing group.
#: classes/Group_message.php:153
msgid "No group for group message."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message without having a sender.
#: classes/Group_message.php:163
msgid "No sender for group message."
msgstr ""

#. TRANS: Exception thrown when trying to set group privacy setting if group %s does not allow private messages.
#: classes/Group_privacy_settings.php:110
#, php-format
msgid "Group %s does not allow private messages."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while blocked from that group.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:120
#, php-format
msgid "User %1$s is blocked from group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not a member.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:129
#, php-format
msgid "User %1$s is not a member of group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not a group administrator.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:138
#, php-format
msgid "User %1$s is not an administrator of group %2$s."
msgstr ""

#. TRANS: Exception thrown when encountering undefined group privacy settings.
#. TRANS: %s is a group nickname.
#: classes/Group_privacy_settings.php:146
#, php-format
msgid "Unknown privacy settings for group %s."
msgstr ""

#. TRANS: Succes message after sending private group message to group %s.
#: lib/groupmessagecommand.php:79
#, php-format
msgid "Direct message to group %s sent."
msgstr ""

#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:112
msgctxt "MENU"
msgid "Inbox"
msgstr ""

#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:114
msgid "Private messages for this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for if group allows private messages.
#: GroupPrivateMessagePlugin.php:160
msgid "Private messages"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Sometimes"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Always"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Never"
msgstr ""

#. TRANS: Dropdown title in group settings page for if group allows private messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Whether to allow private messages to this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for who can send private messages to the group.
#: GroupPrivateMessagePlugin.php:175
msgid "Private senders"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:177
msgid "Everyone"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Member"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Admin"
msgstr ""

#. TRANS: Dropdown title in group settings page for who can send private messages to the group.
#: GroupPrivateMessagePlugin.php:183
msgid "Who can send private messages to the group."
msgstr ""

#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:288
msgid "Send a direct message to this group."
msgstr ""

#. TRANS: Link text for action in group actions list to send a private message to a group.
#: GroupPrivateMessagePlugin.php:290
msgctxt "LINKTEXT"
msgid "Message"
msgstr ""

#. TRANS: Client exception thrown when a private group message has to be forced.
#: GroupPrivateMessagePlugin.php:368
msgid "Forced notice to private group message."
msgstr ""

#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:390
msgid "Private"
msgstr ""

#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:416
msgid "Allow posting private messages to groups."
msgstr ""


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Afrikaans (http://www.transifex.com/projects/p/gnu-social/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr ""

#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr ""

#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr ""

#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Stuur"

#. TRANS: Client exception thrown when trying to view group inbox while not
#. logged in.
#: actions/groupinbox.php:66
msgid "Only for logged-in users."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox for non-
#. existing group.
#. TRANS: Client exception thrown when trying to send a private group message
#. to a non-existing group.
#: actions/groupinbox.php:82 actions/groupinbox.php:89
#: actions/newgroupmessage.php:90 actions/newgroupmessage.php:97
msgid "No such group."
msgstr "Die groep bestaan nie."

#. TRANS: Client exception thrown when trying to view group inbox while not a
#. member.
#: actions/groupinbox.php:94
msgid "Only for members."
msgstr ""

#. TRANS: Text of group inbox if no private messages were sent to it.
#: actions/groupinbox.php:128
msgid "This group has not received any private messages."
msgstr ""

#. TRANS: Title of inbox for group %s.
#: actions/groupinbox.php:174
#, php-format
msgid "%s group inbox"
msgstr ""

#. TRANS: Page title for any but first group page.
#. TRANS: %1$s is a group name, $2$s is a page number.
#: actions/groupinbox.php:178
#, php-format
msgid "%1$s group inbox, page %2$d"
msgstr ""

#. TRANS: Instructions for user inbox page.
#: actions/groupinbox.php:209
msgid ""
"This is the group inbox, which lists all incoming private messages for this "
"group."
msgstr ""

#. TRANS: Client exception thrown when trying to send a private group message
#. while not logged in.
#: actions/newgroupmessage.php:68
msgid "Must be logged in."
msgstr ""

#. TRANS: Exception thrown when user %s is not allowed to send a private group
#. message.
#. TRANS: Exception thrown when trying to send group private message without
#. having the right to do that.
#. TRANS: %s is a user nickname.
#: actions/newgroupmessage.php:73 classes/Group_message.php:96
#, php-format
msgid "User %s is not allowed to send private messages."
msgstr ""

#. TRANS: Title after sending a private group message.
#: actions/newgroupmessage.php:142
msgid "Message sent"
msgstr ""

#. TRANS: Succes text after sending a direct message to group %s.
#: actions/newgroupmessage.php:148
#, php-format
msgid "Direct message to %s sent."
msgstr ""

#. TRANS: Title of form for new private group message.
#: actions/newgroupmessage.php:160
#, php-format
msgid "New message to group %s"
msgstr ""

#. TRANS: Client exception thrown when trying to view group private messages
#. without being logged in.
#: actions/showgroupmessage.php:69
msgid "Only logged-in users can view private messages."
msgstr ""

#. TRANS: Client exception thrown when trying to view a non-existing group
#. private message.
#: actions/showgroupmessage.php:79
msgid "No such message."
msgstr ""

#. TRANS: Server exception thrown when trying to view group private messages
#. for a non-exsting group.
#: actions/showgroupmessage.php:86
msgid "Group not found."
msgstr "Nie gevind nie."

#. TRANS: Client exception thrown when trying to view a group private message
#. without being a group member.
#: actions/showgroupmessage.php:91
msgid "Cannot read message."
msgstr ""

#. TRANS: Server exception thrown when trying to view a group private message
#. without a sender.
#: actions/showgroupmessage.php:98
msgid "No sender found."
msgstr ""

#. TRANS: Title for private group message.
#. TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a
#. timestamp.
#: actions/showgroupmessage.php:123
#, php-format
msgid "Message from %1$s to group %2$s on %3$s"
msgstr ""

#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:114
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr ""

#. TRANS: Body for direct-message notification email.
#. TRANS: %1$s is the sending user's long name, %2$s is the sending user's
#. nickname,
#. TRANS: %3$s is the message content, %4$s a URL to the message,
#. TRANS: %5$s is the StatusNet sitename.
#: classes/Group_message_profile.php:120
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr ""

#. TRANS: Exception thrown when trying to send group private message that is
#. too long.
#. TRANS: %d is the maximum meggage length.
#: classes/Group_message.php:109
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] ""
msgstr[1] ""

#. TRANS: Exception thrown when trying to send group private message to a non-
#. existing group.
#: classes/Group_message.php:153
msgid "No group for group message."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message without
#. having a sender.
#: classes/Group_message.php:163
msgid "No sender for group message."
msgstr ""

#. TRANS: Exception thrown when trying to set group privacy setting if group
#. %s does not allow private messages.
#: classes/Group_privacy_settings.php:110
#, php-format
msgid "Group %s does not allow private messages."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while
#. blocked from that group.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:120
#, php-format
msgid "User %1$s is blocked from group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not
#. a member.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:129
#, php-format
msgid "User %1$s is not a member of group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not
#. a group administrator.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:138
#, php-format
msgid "User %1$s is not an administrator of group %2$s."
msgstr ""

#. TRANS: Exception thrown when encountering undefined group privacy settings.
#. TRANS: %s is a group nickname.
#: classes/Group_privacy_settings.php:146
#, php-format
msgid "Unknown privacy settings for group %s."
msgstr ""

#. TRANS: Succes message after sending private group message to group %s.
#: lib/groupmessagecommand.php:79
#, php-format
msgid "Direct message to group %s sent."
msgstr ""

#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:112
msgctxt "MENU"
msgid "Inbox"
msgstr ""

#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:114
msgid "Private messages for this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:160
msgid "Private messages"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Sometimes"
msgstr "Soms"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Always"
msgstr "Altyd"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Never"
msgstr "Nooit"

#. TRANS: Dropdown title in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Whether to allow private messages to this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:175
msgid "Private senders"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:177
msgid "Everyone"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Member"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Admin"
msgstr "Beheer"

#. TRANS: Dropdown title in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:183
msgid "Who can send private messages to the group."
msgstr ""

#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:288
msgid "Send a direct message to this group."
msgstr ""

#. TRANS: Link text for action in group actions list to send a private message
#. to a group.
#: GroupPrivateMessagePlugin.php:290
msgctxt "LINKTEXT"
msgid "Message"
msgstr ""

#. TRANS: Client exception thrown when a private group message has to be
#. forced.
#: GroupPrivateMessagePlugin.php:368
msgid "Forced notice to private group message."
msgstr ""

#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:390
msgid "Private"
msgstr "Privaat"

#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:416
msgid "Allow posting private messages to groups."
msgstr ""


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:43+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/gnu-social/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\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: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr "رسالة إلى %s."

#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr "رسالة مباشرة ل%s"

#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr "الأحرف المتاحة"

#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "أرسل"

#. TRANS: Client exception thrown when trying to view group inbox while not
#. logged in.
#: actions/groupinbox.php:66
msgid "Only for logged-in users."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox for non-
#. existing group.
#. TRANS: Client exception thrown when trying to send a private group message
#. to a non-existing group.
#: actions/groupinbox.php:82 actions/groupinbox.php:89
#: actions/newgroupmessage.php:90 actions/newgroupmessage.php:97
msgid "No such group."
msgstr "لا توجد مجموعة بهذا الاسم."

#. TRANS: Client exception thrown when trying to view group inbox while not a
#. member.
#: actions/groupinbox.php:94
msgid "Only for members."
msgstr "فقط للأعضاء."

#. TRANS: Text of group inbox if no private messages were sent to it.
#: actions/groupinbox.php:128
msgid "This group has not received any private messages."
msgstr "لم تتلقَ هذه المجموعة أي رسائل خاصة."

#. TRANS: Title of inbox for group %s.
#: actions/groupinbox.php:174
#, php-format
msgid "%s group inbox"
msgstr "صندوق مجموعة %s الوارد"

#. TRANS: Page title for any but first group page.
#. TRANS: %1$s is a group name, $2$s is a page number.
#: actions/groupinbox.php:178
#, php-format
msgid "%1$s group inbox, page %2$d"
msgstr "صندوق مجموعة %1$s الوارد، الصفحة %2$d"

#. TRANS: Instructions for user inbox page.
#: actions/groupinbox.php:209
msgid ""
"This is the group inbox, which lists all incoming private messages for this "
"group."
msgstr ""

#. TRANS: Client exception thrown when trying to send a private group message
#. while not logged in.
#: actions/newgroupmessage.php:68
msgid "Must be logged in."
msgstr "يجب الولوج."

#. TRANS: Exception thrown when user %s is not allowed to send a private group
#. message.
#. TRANS: Exception thrown when trying to send group private message without
#. having the right to do that.
#. TRANS: %s is a user nickname.
#: actions/newgroupmessage.php:73 classes/Group_message.php:96
#, php-format
msgid "User %s is not allowed to send private messages."
msgstr "لا يسمح للمستخدم %s بإرسال رسائل خاصة."

#. TRANS: Title after sending a private group message.
#: actions/newgroupmessage.php:142
msgid "Message sent"
msgstr "أُرسلت الرسالة"

#. TRANS: Succes text after sending a direct message to group %s.
#: actions/newgroupmessage.php:148
#, php-format
msgid "Direct message to %s sent."
msgstr "أُرسلت رسالة مباشرة إلى %s."

#. TRANS: Title of form for new private group message.
#: actions/newgroupmessage.php:160
#, php-format
msgid "New message to group %s"
msgstr "رسالة جديدة لمجموعة %s"

#. TRANS: Client exception thrown when trying to view group private messages
#. without being logged in.
#: actions/showgroupmessage.php:69
msgid "Only logged-in users can view private messages."
msgstr ""

#. TRANS: Client exception thrown when trying to view a non-existing group
#. private message.
#: actions/showgroupmessage.php:79
msgid "No such message."
msgstr ""

#. TRANS: Server exception thrown when trying to view group private messages
#. for a non-exsting group.
#: actions/showgroupmessage.php:86
msgid "Group not found."
msgstr "المجموعة غير موجودة."

#. TRANS: Client exception thrown when trying to view a group private message
#. without being a group member.
#: actions/showgroupmessage.php:91
msgid "Cannot read message."
msgstr "تعذرت قراءة الرسالة."

#. TRANS: Server exception thrown when trying to view a group private message
#. without a sender.
#: actions/showgroupmessage.php:98
msgid "No sender found."
msgstr ""

#. TRANS: Title for private group message.
#. TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a
#. timestamp.
#: actions/showgroupmessage.php:123
#, php-format
msgid "Message from %1$s to group %2$s on %3$s"
msgstr "رسالة من %1$s إلى مجموعة %2$s في %3$s"

#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:114
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr "رسالة جديدة من %1$s إلى مجموعة %2$s"

#. TRANS: Body for direct-message notification email.
#. TRANS: %1$s is the sending user's long name, %2$s is the sending user's
#. nickname,
#. TRANS: %3$s is the message content, %4$s a URL to the message,
#. TRANS: %5$s is the StatusNet sitename.
#: classes/Group_message_profile.php:120
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr "أرسل %1$s (%2$s) رسالة خاصة لمجموعة %3$s:\n\n------------------------------------------------------\n%4$s\n------------------------------------------------------\n\nيمكن أن ترد على رسالته من:\n\n%5$s\n\nلا ترد على هذا البريد؛ لأنه لن يصل إلى المستخدم.\n\nمع تحياتنا العطرة،\n%6$s"

#. TRANS: Exception thrown when trying to send group private message that is
#. too long.
#. TRANS: %d is the maximum meggage length.
#: classes/Group_message.php:109
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] "هذا أطول من الحد المسموح به. لا يسمح بوضع حرف واحد في الرسالة."
msgstr[1] "هذا أطول من الحد المسموح به. لا يسمح بوضع أكثر حرف واحد في الرسالة."
msgstr[2] "هذا أطول من الحد المسموح به. لا يسمح بوضع أكثر من حرفين في الرسالة."
msgstr[3] "هذا أطول من الحد المسموح به. لا يسمح بوضع أكثر من %d أحرف في الرسالة."
msgstr[4] "هذا أطول من الحد المسموح به. لا يسمح بوضع أكثر من %d حرفًا في الرسالة."
msgstr[5] "هذا أطول من الحد المسموح به. لا يسمح بوضع أكثر من %d حرف في الرسالة."

#. TRANS: Exception thrown when trying to send group private message to a non-
#. existing group.
#: classes/Group_message.php:153
msgid "No group for group message."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message without
#. having a sender.
#: classes/Group_message.php:163
msgid "No sender for group message."
msgstr ""

#. TRANS: Exception thrown when trying to set group privacy setting if group
#. %s does not allow private messages.
#: classes/Group_privacy_settings.php:110
#, php-format
msgid "Group %s does not allow private messages."
msgstr "لا تمسح المجموعة %s بالرسائل الخاصة."

#. TRANS: Exception thrown when trying to send group private message while
#. blocked from that group.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:120
#, php-format
msgid "User %1$s is blocked from group %2$s."
msgstr "المستخدم %1$s ممنوع من القائمة %2$s."

#. TRANS: Exception thrown when trying to send group private message while not
#. a member.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:129
#, php-format
msgid "User %1$s is not a member of group %2$s."
msgstr "المستخدم %1$s ليس عضوا في المجموعة %2$s."

#. TRANS: Exception thrown when trying to send group private message while not
#. a group administrator.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:138
#, php-format
msgid "User %1$s is not an administrator of group %2$s."
msgstr "المستخدم %1$s  ليس إداريا للمجموعة %2$s."

#. TRANS: Exception thrown when encountering undefined group privacy settings.
#. TRANS: %s is a group nickname.
#: classes/Group_privacy_settings.php:146
#, php-format
msgid "Unknown privacy settings for group %s."
msgstr "إعدادات الخصوصية للمجموعة %s غير معروفة."

#. TRANS: Succes message after sending private group message to group %s.
#: lib/groupmessagecommand.php:79
#, php-format
msgid "Direct message to group %s sent."
msgstr "أرسلت رسالة مبشارة إلى مجموعة %s."

#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:112
msgctxt "MENU"
msgid "Inbox"
msgstr "صندوق الوارد"

#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:114
msgid "Private messages for this group."
msgstr "الرسائل الخاصة بهذه المجموعة."

#. TRANS: Dropdown label in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:160
msgid "Private messages"
msgstr "الرسائل الخاصة"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Sometimes"
msgstr "أحيانًا"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Always"
msgstr "دائمًا"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Never"
msgstr "مطلقا"

#. TRANS: Dropdown title in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Whether to allow private messages to this group."
msgstr "هل تود السماح بالرسائل الخاصة لهذه المجموعة؟"

#. TRANS: Dropdown label in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:175
msgid "Private senders"
msgstr "مرسلون خاصون"

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:177
msgid "Everyone"
msgstr "الجميع"

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Member"
msgstr "العضو"

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Admin"
msgstr "الإداري"

#. TRANS: Dropdown title in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:183
msgid "Who can send private messages to the group."
msgstr "من يستطيع إرسال رسائل خاصة للمجموعة."

#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:288
msgid "Send a direct message to this group."
msgstr ""

#. TRANS: Link text for action in group actions list to send a private message
#. to a group.
#: GroupPrivateMessagePlugin.php:290
msgctxt "LINKTEXT"
msgid "Message"
msgstr "راسل"

#. TRANS: Client exception thrown when a private group message has to be
#. forced.
#: GroupPrivateMessagePlugin.php:368
msgid "Forced notice to private group message."
msgstr ""

#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:390
msgid "Private"
msgstr "خاصة"

#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:416
msgid "Allow posting private messages to groups."
msgstr "هل تود السماح بإرسال رسائل خاصة للمجموعات؟"


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic (Egypt) (http://www.transifex.com/projects/p/gnu-social/language/ar_EG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar_EG\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: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr ""

#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr ""

#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr ""

#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox while not
#. logged in.
#: actions/groupinbox.php:66
msgid "Only for logged-in users."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox for non-
#. existing group.
#. TRANS: Client exception thrown when trying to send a private group message
#. to a non-existing group.
#: actions/groupinbox.php:82 actions/groupinbox.php:89
#: actions/newgroupmessage.php:90 actions/newgroupmessage.php:97
msgid "No such group."
msgstr "لا مجموعه كهذه."

#. TRANS: Client exception thrown when trying to view group inbox while not a
#. member.
#: actions/groupinbox.php:94
msgid "Only for members."
msgstr ""

#. TRANS: Text of group inbox if no private messages were sent to it.
#: actions/groupinbox.php:128
msgid "This group has not received any private messages."
msgstr ""

#. TRANS: Title of inbox for group %s.
#: actions/groupinbox.php:174
#, php-format
msgid "%s group inbox"
msgstr ""

#. TRANS: Page title for any but first group page.
#. TRANS: %1$s is a group name, $2$s is a page number.
#: actions/groupinbox.php:178
#, php-format
msgid "%1$s group inbox, page %2$d"
msgstr ""

#. TRANS: Instructions for user inbox page.
#: actions/groupinbox.php:209
msgid ""
"This is the group inbox, which lists all incoming private messages for this "
"group."
msgstr ""

#. TRANS: Client exception thrown when trying to send a private group message
#. while not logged in.
#: actions/newgroupmessage.php:68
msgid "Must be logged in."
msgstr ""

#. TRANS: Exception thrown when user %s is not allowed to send a private group
#. message.
#. TRANS: Exception thrown when trying to send group private message without
#. having the right to do that.
#. TRANS: %s is a user nickname.
#: actions/newgroupmessage.php:73 classes/Group_message.php:96
#, php-format
msgid "User %s is not allowed to send private messages."
msgstr ""

#. TRANS: Title after sending a private group message.
#: actions/newgroupmessage.php:142
msgid "Message sent"
msgstr ""

#. TRANS: Succes text after sending a direct message to group %s.
#: actions/newgroupmessage.php:148
#, php-format
msgid "Direct message to %s sent."
msgstr ""

#. TRANS: Title of form for new private group message.
#: actions/newgroupmessage.php:160
#, php-format
msgid "New message to group %s"
msgstr ""

#. TRANS: Client exception thrown when trying to view group private messages
#. without being logged in.
#: actions/showgroupmessage.php:69
msgid "Only logged-in users can view private messages."
msgstr ""

#. TRANS: Client exception thrown when trying to view a non-existing group
#. private message.
#: actions/showgroupmessage.php:79
msgid "No such message."
msgstr ""

#. TRANS: Server exception thrown when trying to view group private messages
#. for a non-exsting group.
#: actions/showgroupmessage.php:86
msgid "Group not found."
msgstr "لم يوجد."

#. TRANS: Client exception thrown when trying to view a group private message
#. without being a group member.
#: actions/showgroupmessage.php:91
msgid "Cannot read message."
msgstr ""

#. TRANS: Server exception thrown when trying to view a group private message
#. without a sender.
#: actions/showgroupmessage.php:98
msgid "No sender found."
msgstr ""

#. TRANS: Title for private group message.
#. TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a
#. timestamp.
#: actions/showgroupmessage.php:123
#, php-format
msgid "Message from %1$s to group %2$s on %3$s"
msgstr ""

#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:114
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr ""

#. TRANS: Body for direct-message notification email.
#. TRANS: %1$s is the sending user's long name, %2$s is the sending user's
#. nickname,
#. TRANS: %3$s is the message content, %4$s a URL to the message,
#. TRANS: %5$s is the StatusNet sitename.
#: classes/Group_message_profile.php:120
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr ""

#. TRANS: Exception thrown when trying to send group private message that is
#. too long.
#. TRANS: %d is the maximum meggage length.
#: classes/Group_message.php:109
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[5] ""

#. TRANS: Exception thrown when trying to send group private message to a non-
#. existing group.
#: classes/Group_message.php:153
msgid "No group for group message."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message without
#. having a sender.
#: classes/Group_message.php:163
msgid "No sender for group message."
msgstr ""

#. TRANS: Exception thrown when trying to set group privacy setting if group
#. %s does not allow private messages.
#: classes/Group_privacy_settings.php:110
#, php-format
msgid "Group %s does not allow private messages."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while
#. blocked from that group.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:120
#, php-format
msgid "User %1$s is blocked from group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not
#. a member.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:129
#, php-format
msgid "User %1$s is not a member of group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not
#. a group administrator.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:138
#, php-format
msgid "User %1$s is not an administrator of group %2$s."
msgstr ""

#. TRANS: Exception thrown when encountering undefined group privacy settings.
#. TRANS: %s is a group nickname.
#: classes/Group_privacy_settings.php:146
#, php-format
msgid "Unknown privacy settings for group %s."
msgstr ""

#. TRANS: Succes message after sending private group message to group %s.
#: lib/groupmessagecommand.php:79
#, php-format
msgid "Direct message to group %s sent."
msgstr ""

#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:112
msgctxt "MENU"
msgid "Inbox"
msgstr ""

#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:114
msgid "Private messages for this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:160
msgid "Private messages"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Sometimes"
msgstr "أحيانًا"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Always"
msgstr "دائمًا"

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Never"
msgstr "مطلقا"

#. TRANS: Dropdown title in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Whether to allow private messages to this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:175
msgid "Private senders"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:177
msgid "Everyone"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Member"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Admin"
msgstr ""

#. TRANS: Dropdown title in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:183
msgid "Who can send private messages to the group."
msgstr ""

#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:288
msgid "Send a direct message to this group."
msgstr ""

#. TRANS: Link text for action in group actions list to send a private message
#. to a group.
#: GroupPrivateMessagePlugin.php:290
msgctxt "LINKTEXT"
msgid "Message"
msgstr ""

#. TRANS: Client exception thrown when a private group message has to be
#. forced.
#: GroupPrivateMessagePlugin.php:368
msgid "Forced notice to private group message."
msgstr ""

#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:390
msgid "Private"
msgstr "خاص"

#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:416
msgid "Allow posting private messages to groups."
msgstr ""


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Asturian (http://www.transifex.com/projects/p/gnu-social/language/ast/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ast\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr ""

#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr ""

#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr ""

#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox while not
#. logged in.
#: actions/groupinbox.php:66
msgid "Only for logged-in users."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox for non-
#. existing group.
#. TRANS: Client exception thrown when trying to send a private group message
#. to a non-existing group.
#: actions/groupinbox.php:82 actions/groupinbox.php:89
#: actions/newgroupmessage.php:90 actions/newgroupmessage.php:97
msgid "No such group."
msgstr ""

#. TRANS: Client exception thrown when trying to view group inbox while not a
#. member.
#: actions/groupinbox.php:94
msgid "Only for members."
msgstr ""

#. TRANS: Text of group inbox if no private messages were sent to it.
#: actions/groupinbox.php:128
msgid "This group has not received any private messages."
msgstr ""

#. TRANS: Title of inbox for group %s.
#: actions/groupinbox.php:174
#, php-format
msgid "%s group inbox"
msgstr ""

#. TRANS: Page title for any but first group page.
#. TRANS: %1$s is a group name, $2$s is a page number.
#: actions/groupinbox.php:178
#, php-format
msgid "%1$s group inbox, page %2$d"
msgstr ""

#. TRANS: Instructions for user inbox page.
#: actions/groupinbox.php:209
msgid ""
"This is the group inbox, which lists all incoming private messages for this "
"group."
msgstr ""

#. TRANS: Client exception thrown when trying to send a private group message
#. while not logged in.
#: actions/newgroupmessage.php:68
msgid "Must be logged in."
msgstr ""

#. TRANS: Exception thrown when user %s is not allowed to send a private group
#. message.
#. TRANS: Exception thrown when trying to send group private message without
#. having the right to do that.
#. TRANS: %s is a user nickname.
#: actions/newgroupmessage.php:73 classes/Group_message.php:96
#, php-format
msgid "User %s is not allowed to send private messages."
msgstr ""

#. TRANS: Title after sending a private group message.
#: actions/newgroupmessage.php:142
msgid "Message sent"
msgstr ""

#. TRANS: Succes text after sending a direct message to group %s.
#: actions/newgroupmessage.php:148
#, php-format
msgid "Direct message to %s sent."
msgstr ""

#. TRANS: Title of form for new private group message.
#: actions/newgroupmessage.php:160
#, php-format
msgid "New message to group %s"
msgstr ""

#. TRANS: Client exception thrown when trying to view group private messages
#. without being logged in.
#: actions/showgroupmessage.php:69
msgid "Only logged-in users can view private messages."
msgstr ""

#. TRANS: Client exception thrown when trying to view a non-existing group
#. private message.
#: actions/showgroupmessage.php:79
msgid "No such message."
msgstr ""

#. TRANS: Server exception thrown when trying to view group private messages
#. for a non-exsting group.
#: actions/showgroupmessage.php:86
msgid "Group not found."
msgstr ""

#. TRANS: Client exception thrown when trying to view a group private message
#. without being a group member.
#: actions/showgroupmessage.php:91
msgid "Cannot read message."
msgstr ""

#. TRANS: Server exception thrown when trying to view a group private message
#. without a sender.
#: actions/showgroupmessage.php:98
msgid "No sender found."
msgstr ""

#. TRANS: Title for private group message.
#. TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a
#. timestamp.
#: actions/showgroupmessage.php:123
#, php-format
msgid "Message from %1$s to group %2$s on %3$s"
msgstr ""

#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:114
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr ""

#. TRANS: Body for direct-message notification email.
#. TRANS: %1$s is the sending user's long name, %2$s is the sending user's
#. nickname,
#. TRANS: %3$s is the message content, %4$s a URL to the message,
#. TRANS: %5$s is the StatusNet sitename.
#: classes/Group_message_profile.php:120
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr ""

#. TRANS: Exception thrown when trying to send group private message that is
#. too long.
#. TRANS: %d is the maximum meggage length.
#: classes/Group_message.php:109
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] ""
msgstr[1] ""

#. TRANS: Exception thrown when trying to send group private message to a non-
#. existing group.
#: classes/Group_message.php:153
msgid "No group for group message."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message without
#. having a sender.
#: classes/Group_message.php:163
msgid "No sender for group message."
msgstr ""

#. TRANS: Exception thrown when trying to set group privacy setting if group
#. %s does not allow private messages.
#: classes/Group_privacy_settings.php:110
#, php-format
msgid "Group %s does not allow private messages."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while
#. blocked from that group.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:120
#, php-format
msgid "User %1$s is blocked from group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not
#. a member.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:129
#, php-format
msgid "User %1$s is not a member of group %2$s."
msgstr ""

#. TRANS: Exception thrown when trying to send group private message while not
#. a group administrator.
#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
#: classes/Group_privacy_settings.php:138
#, php-format
msgid "User %1$s is not an administrator of group %2$s."
msgstr ""

#. TRANS: Exception thrown when encountering undefined group privacy settings.
#. TRANS: %s is a group nickname.
#: classes/Group_privacy_settings.php:146
#, php-format
msgid "Unknown privacy settings for group %s."
msgstr ""

#. TRANS: Succes message after sending private group message to group %s.
#: lib/groupmessagecommand.php:79
#, php-format
msgid "Direct message to group %s sent."
msgstr ""

#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:112
msgctxt "MENU"
msgid "Inbox"
msgstr ""

#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:114
msgid "Private messages for this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:160
msgid "Private messages"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Sometimes"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Always"
msgstr ""

#. TRANS: Dropdown option in group settings page for allowing private
#. messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Never"
msgstr ""

#. TRANS: Dropdown title in group settings page for if group allows private
#. messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Whether to allow private messages to this group."
msgstr ""

#. TRANS: Dropdown label in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:175
msgid "Private senders"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:177
msgid "Everyone"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Member"
msgstr ""

#. TRANS: Dropdown option in group settings page for who can send private
#. messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Admin"
msgstr ""

#. TRANS: Dropdown title in group settings page for who can send private
#. messages to the group.
#: GroupPrivateMessagePlugin.php:183
msgid "Who can send private messages to the group."
msgstr ""

#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:288
msgid "Send a direct message to this group."
msgstr ""

#. TRANS: Link text for action in group actions list to send a private message
#. to a group.
#: GroupPrivateMessagePlugin.php:290
msgctxt "LINKTEXT"
msgid "Message"
msgstr ""

#. TRANS: Client exception thrown when a private group message has to be
#. forced.
#: GroupPrivateMessagePlugin.php:368
msgid "Forced notice to private group message."
msgstr ""

#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:390
msgid "Private"
msgstr ""

#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:416
msgid "Allow posting private messages to groups."
msgstr ""