/** * Set message recipients * * @param array $recipients * @return count New recipient count */ public function set_recipients(array $recipients) { // Removed recipients $old_recipients = array_diff_key($this->find_recipient_names(), $recipients); if ($old_recipients) { DB::delete('forum_private_recipients')->where('forum_topic_id', '=', $this->id)->and_where('user_id', 'IN', array_keys($old_recipients))->execute(); } // New recipients $new_recipients = array_diff_key($recipients, $this->find_recipient_names()); if ($new_recipients) { foreach ($new_recipients as $recipient_id => $recipient_name) { $recipient = Model_Forum_Private_Recipient::factory(); $recipient->set_fields(array('forum_topic_id' => $this->id, 'forum_area_id' => $this->forum_area_id, 'user_id' => $recipient_id, 'unread' => $this->post_count ? $this->post_count : 1)); $recipient->save(); } } $this->recipient_count = count($recipients); $this->save(); }
/** * Find new private messages * * @static * @param Model_User $user * @return Model_Forum_Private_Recipient[] */ public static function find_new_private_messages(Model_User $user) { $recipient = Model_Forum_Private_Recipient::factory(); return $recipient->load(DB::select_array($recipient->fields())->where('user_id', '=', $user->id)->where('unread', '>', 0), null); }