/** * For initializing members of the class. * * @param array $argarray misc. arguments * * @return boolean true */ function prepare($argarray) { parent::prepare($argarray); $cur = common_current_user(); if (empty($cur)) { throw new ClientException(_('Only for logged-in users'), 403); } $nicknameArg = $this->trimmed('nickname'); $nickname = common_canonical_nickname($nicknameArg); if ($nickname != $nicknameArg) { $url = common_local_url('groupinbox', array('nickname' => $nickname)); common_redirect($url); return false; } $localGroup = Local_group::staticGet('nickname', $nickname); if (empty($localGroup)) { throw new ClientException(_('No such group'), 404); } $this->group = User_group::staticGet('id', $localGroup->group_id); if (empty($this->group)) { throw new ClientException(_('No such group'), 404); } if (!$cur->isMember($this->group)) { throw new ClientException(_('Only for members'), 403); } $this->page = $this->trimmed('page'); if (!$this->page) { $this->page = 1; } $this->gm = Group_message::forGroup($this->group, ($this->page - 1) * MESSAGES_PER_PAGE, MESSAGES_PER_PAGE + 1); return true; }
/** * 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; }
/** * 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)) { throw new ClientException(_('Only logged-in users can view private messages.'), 403); } $id = $this->trimmed('id'); $this->gm = Group_message::staticGet('id', $id); if (empty($this->gm)) { throw new ClientException(_('No such message'), 404); } $this->group = User_group::staticGet('id', $this->gm->to_group); if (empty($this->group)) { throw new ServerException(_('Group not found.')); } if (!$this->user->isMember($this->group)) { throw new ClientException(_('Cannot read message.'), 403); } $this->sender = Profile::staticGet('id', $this->gm->from_profile); if (empty($this->sender)) { throw new ServerException(_('No sender found.')); } return true; }
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, sprintf(_m('Direct message to group %s sent.'), $group->nickname)); return true; }
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); }
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'), sprintf(_m('Direct message to %s sent.'), $this->group->nickname)); $this->elementEnd('body'); $this->elementEnd('html'); } else { common_redirect($gm->url, 303); } }
/** * For initializing members of the class. * * @param array $argarray misc. arguments * * @return boolean true */ function prepare($argarray) { parent::prepare($argarray); $cur = common_current_user(); if (empty($cur)) { // TRANS: Client exception thrown when trying to view group inbox while not logged in. throw new ClientException(_m('Only for logged-in users.'), 403); } $nicknameArg = $this->trimmed('nickname'); $nickname = common_canonical_nickname($nicknameArg); if ($nickname != $nicknameArg) { $url = common_local_url('groupinbox', array('nickname' => $nickname)); common_redirect($url); } $localGroup = Local_group::getKV('nickname', $nickname); if (empty($localGroup)) { // TRANS: Client exception thrown when trying to view group inbox for 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 view group inbox for non-existing group. throw new ClientException(_m('No such group.'), 404); } if (!$cur->isMember($this->group)) { // TRANS: Client exception thrown when trying to view group inbox while not a member. throw new ClientException(_m('Only for members.'), 403); } $this->page = $this->trimmed('page'); if (!$this->page) { $this->page = 1; } $this->gm = Group_message::forGroup($this->group, ($this->page - 1) * MESSAGES_PER_PAGE, MESSAGES_PER_PAGE + 1); return true; }
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; }
/** * When saving a notice, check its groups. If any of them has * privacy == always, force a group private message to all mentioned groups. * If any of the groups disallows private messages, skip it. * * @param * */ function onStartNoticeSave(&$notice) { // Look for group tags // FIXME: won't work for remote groups // @fixme if Notice::saveNew is refactored so we can just pull its list // of groups between processing and saving, make use of it $count = preg_match_all('/(?:^|\\s)!(' . Nickname::DISPLAY_FMT . ')/', strtolower($notice->content), $match); $groups = array(); $ignored = array(); $forcePrivate = false; if ($count > 0) { /* Add them to the database */ foreach (array_unique($match[1]) as $nickname) { $group = User_group::getForNickname($nickname, $profile); if (empty($group)) { continue; } $gps = Group_privacy_settings::forGroup($group); switch ($gps->allow_privacy) { case Group_privacy_settings::ALWAYS: $forcePrivate = true; // fall through // fall through case Group_privacy_settings::SOMETIMES: $groups[] = $group; break; case Group_privacy_settings::NEVER: $ignored[] = $group; break; } } if ($forcePrivate) { foreach ($ignored as $group) { common_log(LOG_NOTICE, "Notice forced to group direct message " . "but group " . $group->nickname . " does not allow them."); } $user = User::staticGet('id', $notice->profile_id); if (empty($user)) { common_log(LOG_WARNING, "Notice forced to group direct message " . "but profile " . $notice->profile_id . " is not a local user."); } else { foreach ($groups as $group) { Group_message::send($user, $group, $notice->content); } } // Don't save the notice! // FIXME: this is probably cheating. throw new ClientException(sprintf(_('Forced notice to private group message.')), 200); } } return true; }