Exemple #1
0
    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)
Exemple #3
0
    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)