Beispiel #1
0
 /**
  * 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);
 }
Beispiel #6
0
 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);
     }
 }
Beispiel #7
0
 /**
  * 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;
 }