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())); } }
bool VsMagnitude::setComments(Magnitude *mag, const std::string id, const T value) { for ( size_t i = 0; i < mag->commentCount(); ++i ) { CommentPtr cmnt = mag->comment(i); if ( cmnt->id() != id ) continue; cmnt->setText(Core::toString(value)); try { cmnt->creationInfo().setModificationTime(_currentTime); } catch ( ... ) { CreationInfo ci; ci.setModificationTime(_currentTime); cmnt->setCreationInfo(ci); } cmnt->update(); return true; } // Create a new one CommentPtr cmt = new Comment(); cmt->setId(id); cmt->setText(Core::toString(value)); CreationInfo ci; ci.setCreationTime(_currentTime); cmt->setCreationInfo(ci); if ( !mag->add(cmt.get()) ) { return false; } return true; }
ForumCommentWidget::ForumCommentWidget(const CommentPtr& comment) { dbo::Transaction t(tApp->session()); if (comment->type() != Comment::FORUM_COMMENT) { return; } new Header(tr("tc.forum.Comment"), this); Wt::WText* text = new Wt::WText(forum_comment_text(comment), this); text->addStyleClass("thechess-forum-comments"); UserPtr user = comment->init(); if (user) { new Wt::WBreak(this); user_anchor(user, this); } CommentPtr post_text = comment->root(); CommentPtr post = post_text->parent(); new Wt::WBreak(this); Wt::WAnchor* a = new Wt::WAnchor(this); a->setLink(tApp->path().post()->get_link(post.id())); a->setText(tr("tc.forum.post_header") .arg(post.id()).arg(post->text_or_removed(tApp->user()))); CommentPtr parent = comment->parent(); if (parent->type() == Comment::FORUM_COMMENT) { new Wt::WBreak(this); Wt::WAnchor* g = new Wt::WAnchor(this); g->setLink(tApp->path().post_comment()->get_link(parent.id())); g->setText(tr("tc.forum.Goto_parent").arg(parent.id())); } if (comment->can_edit(tApp->user())) { new Wt::WBreak(this); Wt::WAnchor* e = new Wt::WAnchor(this); e->setLink(tApp->path().forum_edit()->get_link(comment.id())); e->setText(tr("tc.forum.Edit")); } Wt::WTextEdit* edit = new Wt::WTextEdit(this); patch_text_edit(edit); new Wt::WBreak(this); if (Comment::can_create(tApp->user(), Comment::FORUM_COMMENT, comment)) { Wt::WPushButton* add = new Wt::WPushButton(tr("tc.comment.Add"), this); add->clicked().connect(boost::bind(add_comment, comment, edit, this)); } add_remover_buttons(comment, this); }
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(); } }
std::string Application::comment_path(const CommentPtr& comment) const { return str(comment_path_format_ % comment.id().fact.id() % comment.id().index); }