Exemple #1
0
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()));
    }
}
Exemple #2
0
 void add_handler_() {
     Wt::WValidator::State V = Wt::WValidator::Valid;
     if (username_->validate() != V) {
         error_->setText(tr("facts.comment.Incorrect_username"));
         return;
     }
     if (email_->validate() != V) {
         error_->setText(tr("facts.comment.Incorrect_email"));
         return;
     }
     int input_length = text_->text().value().size();
     if (input_length < MIN_INPUT_SIZE || input_length > MAX_TEXT_SIZE) {
         error_->setText(tr("facts.comment.Incorrect_text"));
         return;
     }
     dbo::Transaction t(fApp->session());
     if (fApp->is_banned()) {
         error_->setText(tr("facts.common.BannedIp"));
         return;
     }
     int index;
     if (comments_->fact()->comments().size()) {
         index = 1 + fApp->session()
                 .query<int>("select max(comment_index) from facts_comment where fact_id=?")
                 .bind(comments_->fact().id());
     } else {
         index = 1;
     }
     CommentPtr c = fApp->session().add(new Comment(CommentId(comments_->fact(), index)));
     c.modify()->set_username(username_->text());
     c.modify()->set_email(email_->text().toUTF8());
     c.modify()->set_text(text_->text());
     c.modify()->set_ip(fApp->environment().clientAddress());
     comments_->comment_added_handler_(); // delete this
     t.commit();
 }
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();
    }
}