def addNewComment(self,uid,comment_title,comment_body,reply_commentid=''): """Adds a comment on the provided UID with given title, text and commenter user. If reply_commentid is supplied and is a valid id in the object at uid, it is set to be a nested reply to that comment. Returns UID of the freshly added comment.""" pdt = getToolByName(self.context, 'portal_discussion', None) cat = getToolByName(self.context, 'uid_catalog') query = {'UID':uid} resbrains = cat.searchResults(query) if len(resbrains) == 1: contobj = resbrains[0].getObject() if contobj.isDiscussable() and self.can_reply(contobj) > 0: ditem = None dobj = pdt.getDiscussionFor(contobj) if reply_commentid != '': #This is a nested comment. try: ditem = dobj.getReply(reply_commentid) except AttributeError: raise ValueError, "The given comment ID does not exist. Please check the comment id of the comment that you are wanting to add this new comment to." id = dobj.createReply(title=comment_title, text=comment_body, Creator=self.current_user()) reply = dobj.getReply(id) reply.cooked_text = convertWebIntelligentPlainTextToHtml(reply.text) if reply <> None: from ubify.cyninv2theme import triggerAddOnDiscussionItem triggerAddOnDiscussionItem(reply) if ditem is not None: #This is supposed to be a nested comment to ditem reply.setReplyTo(ditem) return id else: raise ValueError, 'The object at given UID either does not allow comments OR you do not have permission to comment on this object.' else: #import pdb; pdb.set_trace() raise ValueError, 'More than 1 item found with the given UID. Since this should not happen normally, do check what the heck is going on?'
def addnewcomment(self): uid = '' itemindex = '' viewtype = '' lasttimestamp = '' lastcommentid = '' commentscount = '' inreplyto = '' if self.request.has_key('comcynapsecynincontextUID'): uid = self.request['comcynapsecynincontextUID'] if self.request.has_key('comcynapsecyninitemindex'): itemindex = self.request['comcynapsecyninitemindex'] if self.request.has_key('comcynapseviewtype'): viewtype = self.request['comcynapseviewtype'] if self.request.has_key('comcynapselasttimestamp'): lasttimestamp = self.request['comcynapselasttimestamp'] if self.request.has_key('comcynapselastcommentid'): lastcommentid = self.request['comcynapselastcommentid'] if self.request.has_key('comcynapsecommentcount'): commentscount = self.request['comcynapsecommentcount'] if self.request.has_key('inreplyto'): inreplyto = self.request['inreplyto'] query = {'UID':uid} pdt = getToolByName(self.context, 'portal_discussion', None) cat = getToolByName(self.context, 'uid_catalog') resbrains = cat.searchResults(query) if len(resbrains) == 1: contobj = resbrains[0].getObject() if contobj.isDiscussable() and canreply(contobj): mtool = getToolByName(self.context, 'portal_membership') username = mtool.getAuthenticatedMember().getId() dobj = pdt.getDiscussionFor(contobj) if len(self.request['comcynapsecyninNewCommentBody'].strip(' ')) == 0 or self.request['comcynapsecyninNewCommentBody'].lower() == self.request['comcynapsenewcommenttitle'].lower(): raise EmptycommentError, 'No comment text provided.' else: id = dobj.createReply(title="",text=self.request['comcynapsecyninNewCommentBody'], Creator=username) reply = dobj.getReply(id) reply.cooked_text = convertWebIntelligentPlainTextToHtml(reply.text) if inreplyto != '': replyto = dobj.getReply(inreplyto) reply.setReplyTo(replyto) if reply <> None: from ubify.cyninv2theme import triggerAddOnDiscussionItem triggerAddOnDiscussionItem(reply) return self.fetchcomments(uid,itemindex,lasttimestamp,commentscount,lastcommentid,viewtype)
def addNewComment(self, uid, comment_title, comment_body, reply_commentid=''): """Adds a comment on the provided UID with given title, text and commenter user. If reply_commentid is supplied and is a valid id in the object at uid, it is set to be a nested reply to that comment. Returns UID of the freshly added comment.""" pdt = getToolByName(self.context, 'portal_discussion', None) cat = getToolByName(self.context, 'uid_catalog') query = {'UID': uid} resbrains = cat.searchResults(query) if len(resbrains) == 1: contobj = resbrains[0].getObject() if contobj.isDiscussable() and self.can_reply(contobj) > 0: ditem = None dobj = pdt.getDiscussionFor(contobj) if reply_commentid != '': #This is a nested comment. try: ditem = dobj.getReply(reply_commentid) except AttributeError: raise ValueError, "The given comment ID does not exist. Please check the comment id of the comment that you are wanting to add this new comment to." id = dobj.createReply(title=comment_title, text=comment_body, Creator=self.current_user()) reply = dobj.getReply(id) reply.cooked_text = convertWebIntelligentPlainTextToHtml( reply.text) if reply <> None: from ubify.cyninv2theme import triggerAddOnDiscussionItem triggerAddOnDiscussionItem(reply) if ditem is not None: #This is supposed to be a nested comment to ditem reply.setReplyTo(ditem) return id else: raise ValueError, 'The object at given UID either does not allow comments OR you do not have permission to comment on this object.' else: #import pdb; pdb.set_trace() raise ValueError, 'More than 1 item found with the given UID. Since this should not happen normally, do check what the heck is going on?'
def update(self): BaseClass.update(self) self.lastcommentid = '0' self.lasttimestamp = self.getlastchangedate() if self.request.has_key('comcynapsecyninnewcommentsubmit'): #A new comment was submitted if self.request.has_key('comcynapsecyninNewCommentSubject') and self.request.has_key('comcynapsecyninNewCommentBody') and self.request.has_key('comcynapsecynincontextUID'): cont_uid = self.request['comcynapsecynincontextUID']; query = {'UID':cont_uid} pdt = self.portal_discussion cat = getToolByName(self.context, 'uid_catalog') resbrains = cat.searchResults(query) if len(resbrains) == 1: contobj = resbrains[0].getObject() if contobj.isDiscussable() and self.canreply(contobj) > 0: dobj = pdt.getDiscussionFor(contobj) id = dobj.createReply(title="", text=self.request['comcynapsecyninNewCommentBody'], Creator=self.current_user()) reply = dobj.getReply(id) if reply <> None: from ubify.cyninv2theme import triggerAddOnDiscussionItem triggerAddOnDiscussionItem(reply) else: return
def replyToComment(self, viewtype, lasttimestamp, commentcount, lastcommentid): query = {'UID': self.request['cont_uid']} pdt = getToolByName(self.context, 'portal_discussion', None) cat = getToolByName(self.context, 'uid_catalog') resbrains = cat.searchResults(query) ksscore = self.getCommandSet('core') zopecore = self.getCommandSet('zope') jq = self.getCommandSet('jquery') if len(resbrains) == 1: contobj = resbrains[0].getObject() if contobj.isDiscussable() and self.canreply(contobj): mtool = getToolByName(self.context, 'portal_membership') username = mtool.getAuthenticatedMember().getId() dobj = pdt.getDiscussionFor(contobj) if len(self.request['commentbody'].strip( ' ')) == 0 or self.request['commentbody'].lower( ) == self.request['comcynapsenewcommenttitle'].lower(): comcynapsecommenterrorlabel = ksscore.getHtmlIdSelector( 'comcynapsecommenterror' + self.request['inreplyto']) ksscore.setStyle(comcynapsecommenterrorlabel, 'display', 'block') else: id = dobj.createReply(title="", text=self.request['commentbody'], Creator=username) reply = dobj.getReply(id) reply.cooked_text = convertWebIntelligentPlainTextToHtml( reply.text) replyto = dobj.getReply(self.request['inreplyto']) reply.setReplyTo(replyto) if reply <> None: from ubify.cyninv2theme import triggerAddOnDiscussionItem triggerAddOnDiscussionItem(reply) #################Determine full reply to discussion to get placement peer of current comment view_type = self.request['cviewtype'] replies = [] def getRs(obj, replies, counter): rs = pdt.getDiscussionFor(obj).getReplies() if len(rs) > 0: rs.sort(lambda x, y: cmp( x.modified(), y.modified())) for r in rs: replies.append({ 'depth': counter, 'object': r }) getRs(r, replies, counter=counter + 1) getRs(replyto, replies, 0) if len( replies ) > 1: ##There are more than 1 comments already children of the comment we just replied to, so the current comment can't have been the first reply prevrep = replies[0]['object'] else: prevrep = replyto for rep in replies: if rep['object'].id == reply.id: belowreply = prevrep else: prevrep = rep['object'] mi = mtool.getMemberInfo() commenttemplate = ViewPageTemplateFile( 'ksstemplates/commentrow.pt') commenttemplate = commenttemplate.__of__(self.context) depthvalue = 0 if view_type == 'threadedview': depthvalue = int(self.request['depth']) + 1 replydict = [ { 'depth': depthvalue, 'object': reply, 'view_type': view_type }, ] output = commenttemplate.render( indent=int(self.request['depth']) + 2, fullname=mi['fullname'], avatarurl=self.context.portal_membership. getPersonalPortrait(username).absolute_url(), creator=username, showreply=self.canreply(self.context), showdelete=getSecurityManager().checkPermission( 'Manage portal', aq_inner(self.context)), commenttime=self.context.toLocalizedTime( reply.created, True), replyid=reply.id, replytitle=reply.Title(), replybody=reply.CookedBody(), replyurl=reply.absolute_url(), reply_dict=replydict) if view_type == 'threadedview': commentscontainer = ksscore.getHtmlIdSelector( 'commenttable' + prevrep.id) ksscore.insertHTMLAfter(commentscontainer, output) else: commentsoutercontainer = ksscore.getHtmlIdSelector( 'comcynapsecyninitemcommentscontainer') ksscore.insertHTMLAsLastChild( commentsoutercontainer, output) taAddNewComment = ksscore.getCssSelector( 'textarea.commentbodyta') ksscore.setAttribute(taAddNewComment, "value", "") itemcountcommentcount = ksscore.getHtmlIdSelector( 'itemcountcommentcount') countofcomments = dobj.replyCount(self.context) discussionlabel = ksscore.getHtmlIdSelector( 'discussionlabel') ksscore.replaceInnerHTML(discussionlabel, str(countofcomments)) ksscore.replaceInnerHTML(itemcountcommentcount, str(countofcomments)) newcomment = ksscore.getHtmlIdSelector('commenttable' + reply.id) frmreply = ksscore.getHtmlIdSelector( 'replyform' + self.request['inreplyto']) ksscore.setStyle(frmreply, 'display', 'none') comcynapsecommenterrorlabel = ksscore.getHtmlIdSelector( 'comcynapsecommenterror' + self.request['inreplyto']) ksscore.setStyle(comcynapsecommenterrorlabel, 'display', 'none') self.fetchnewcomments(lasttimestamp, commentcount, lastcommentid, viewtype)
def replyToComment(self,viewtype,lasttimestamp,commentcount,lastcommentid): query = {'UID':self.request['cont_uid']} pdt = getToolByName(self.context, 'portal_discussion', None) cat = getToolByName(self.context, 'uid_catalog') resbrains = cat.searchResults(query) ksscore = self.getCommandSet('core') zopecore = self.getCommandSet('zope') jq = self.getCommandSet('jquery') if len(resbrains) == 1: contobj = resbrains[0].getObject() if contobj.isDiscussable() and self.canreply(contobj): mtool = getToolByName(self.context, 'portal_membership') username = mtool.getAuthenticatedMember().getId() dobj = pdt.getDiscussionFor(contobj) if len(self.request['commentbody'].strip(' ')) == 0 or self.request['commentbody'].lower() == self.request['comcynapsenewcommenttitle'].lower(): comcynapsecommenterrorlabel = ksscore.getHtmlIdSelector('comcynapsecommenterror'+ self.request['inreplyto']) ksscore.setStyle(comcynapsecommenterrorlabel,'display','block') else: id = dobj.createReply(title="", text=self.request['commentbody'], Creator=username) reply = dobj.getReply(id) reply.cooked_text = convertWebIntelligentPlainTextToHtml(reply.text) replyto = dobj.getReply(self.request['inreplyto']) reply.setReplyTo(replyto) if reply <> None: from ubify.cyninv2theme import triggerAddOnDiscussionItem triggerAddOnDiscussionItem(reply) #################Determine full reply to discussion to get placement peer of current comment view_type = self.request['cviewtype'] replies = [] def getRs(obj, replies, counter): rs = pdt.getDiscussionFor(obj).getReplies() if len(rs) > 0: rs.sort(lambda x, y: cmp(x.modified(), y.modified())) for r in rs: replies.append({'depth':counter, 'object':r}) getRs(r, replies, counter=counter + 1) getRs(replyto, replies, 0) if len(replies) > 1: ##There are more than 1 comments already children of the comment we just replied to, so the current comment can't have been the first reply prevrep = replies[0]['object'] else: prevrep = replyto for rep in replies: if rep['object'].id == reply.id: belowreply = prevrep else: prevrep = rep['object'] mi = mtool.getMemberInfo(); commenttemplate = ViewPageTemplateFile('ksstemplates/commentrow.pt') commenttemplate = commenttemplate.__of__(self.context) depthvalue = 0 if view_type == 'threadedview': depthvalue = int(self.request['depth']) + 1 replydict = [{'depth': depthvalue, 'object': reply,'view_type':view_type},] output = commenttemplate.render(indent=int(self.request['depth'])+2,fullname = mi['fullname'], avatarurl=self.context.portal_membership.getPersonalPortrait(username).absolute_url(),creator=username,showreply=self.canreply(self.context),showdelete=getSecurityManager().checkPermission('Manage portal',aq_inner(self.context)),commenttime=self.context.toLocalizedTime(reply.created,True),replyid=reply.id,replytitle=reply.Title(),replybody=reply.CookedBody(),replyurl=reply.absolute_url(),reply_dict=replydict) if view_type == 'threadedview': commentscontainer = ksscore.getHtmlIdSelector('commenttable' + prevrep.id) ksscore.insertHTMLAfter(commentscontainer,output) else: commentsoutercontainer = ksscore.getHtmlIdSelector('comcynapsecyninitemcommentscontainer') ksscore.insertHTMLAsLastChild(commentsoutercontainer,output) taAddNewComment = ksscore.getCssSelector('textarea.commentbodyta') ksscore.setAttribute(taAddNewComment,"value","") itemcountcommentcount = ksscore.getHtmlIdSelector('itemcountcommentcount') countofcomments = dobj.replyCount(self.context) discussionlabel = ksscore.getHtmlIdSelector('discussionlabel') ksscore.replaceInnerHTML(discussionlabel,str(countofcomments)) ksscore.replaceInnerHTML(itemcountcommentcount,str(countofcomments)) newcomment = ksscore.getHtmlIdSelector('commenttable' + reply.id) frmreply = ksscore.getHtmlIdSelector('replyform' + self.request['inreplyto']) ksscore.setStyle(frmreply,'display','none') comcynapsecommenterrorlabel = ksscore.getHtmlIdSelector('comcynapsecommenterror'+ self.request['inreplyto']) ksscore.setStyle(comcynapsecommenterrorlabel,'display','none') self.fetchnewcomments(lasttimestamp,commentcount,lastcommentid,viewtype)