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