예제 #1
0
파일: User.cpp 프로젝트: starius/thechess
void User::send_message(UserPtr from, UserPtr to, const Wt::WString& text) {
    if (!to || from == to) {
        return;
    }
    CommentPtr base = to->comment_base();
    if (!base) {
        to.reread();
        base = to.modify()->comment_base();
        base.flush();
    }
    CommentPtr from_base;
    if (from) {
        from_base = from->comment_base();
        if (!from_base) {
            from.reread();
            from_base = from.modify()->comment_base();
            from_base.flush();
        }
    }
    CommentPtr message = to.session()->add(new Comment(true));
    message.modify()->set_text(text);
    message.modify()->set_init(from);
    message.modify()->set_parent(base);
    message.modify()->set_root(base);
    message.modify()->set_type(Comment::PRIVATE_MESSAGE);
    message.flush();
    t_emit_after(COMMENT, base.id());
    t_emit(COMMENT, from_base.id());
    if (from) {
        t_emit(new NewMessage(to.id(), from.id()));
    }
}
예제 #2
0
static void add_comment(CommentPtr comment, Wt::WTextEdit* edit,
                        ForumCommentWidget* widget) {
    dbo::Transaction t(tApp->session());
    comment.reread();
    tApp->user().reread();
    Comment::State state = Comment::state_of_new(tApp->user(),
                           Comment::FORUM_COMMENT, comment);
    if (state == Comment::DELETED) {
        return;
    }
    CommentPtr c = tApp->session().add(new Comment(true));
    c.modify()->set_parent(comment);
    c.modify()->set_type(Comment::FORUM_COMMENT);
    c.modify()->set_text(patch_text_edit_text(edit->valueText()));
    c.modify()->set_init(tApp->user());
    c.modify()->set_root(comment->root());
    c.modify()->set_state(state);
    int root_id = comment->root().id();
    CommentPtr post_text = comment->root();
    CommentPtr post = post_text->parent();
    post.reread();
    post.modify()->post_comment_added();
    c.flush();
    // private notification
    Wt::WString notification = "[auto] " + comm_a(c.id());
    User::send_message(tApp->user(), post->init(), notification);
    if (post->init() != comment->init()) {
        User::send_message(tApp->user(), comment->init(), notification);
    }
    t.commit();
    t_emit(COMMENT, root_id);
    if (state == Comment::DRAFT) {
        widget->clear();
        widget->addWidget(new Wt::WText(Wt::WString::tr(
                                            "tc.comment.draft_message")));
    } else {
        tApp->path().post()->set_integer_value(post.id());
        tApp->path().post()->open();
    }
}