def deleteTag(request,commentID,tagName): if request.method == 'POST': comment = CommentPost.objects.get(id=commentID) user = request.user if user == comment.author or user.is_superuser: tag = getTagFromComment(comment,tagName) comment.update(pull__attachedTags=tag) renderCommentTexts(comment.slide.id,comment.page) #rerender comments return HttpResponse('OK') else: return PermissionDenied('Illegal operation') else: raise Http404
def deleteComment(request,commentID): if request.method == 'POST': comment = CommentPost.objects.get(id=commentID) user = request.user if user == comment.author or user.is_superuser: comment.isDeleted = True comment.rawText = "[deleted]" comment.renderedText = "[deleted]" comment.author = None if comment.attachedTags: renderCommentTexts(comment.slide.id,comment.page) #rerender comments comment.attachedTags = [] comment.save() #comment.delete() return HttpResponse('OK') else: return PermissionDenied('Illegal operation') else: raise Http404
def postComment(request): if request.method == 'POST': text = request.POST.get('commentText','') if isNoneOrEmptyOrBlankString(text): return HttpResponseBadRequest('text field is empty') text = escape(text) #escaping for sanitizing html code in text #text = markdown2.markdown(text) #render markdown syntax to html! if (commentSpamDetection(text)): return HttpResponseBadRequest("spam detected.") hadTags = False slideId = request.POST.get('slideId','') pageNumber = request.POST.get('pageNumber',"1") slide = Slide.objects.get(id=slideId) isAnonymous = False user = request.user tagData = request.POST.get('TagData','') tagList = None if tagData is not '': hadTags = True tagList = [] tagNameList = [] tagDataDecoded = json.loads(tagData) for tag in tagDataDecoded['items']: tagName = tag['tagName'] #validate inputs if( float(tag["relCoordLeft"]) > (1-float(tag["relWidth"])) or float(tag["relCoordLeft"]) < 0 or float(tag["relCoordTop"]) > (1-float(tag["relHeight"])) or float(tag["relCoordTop"]) < 0 or float(tag["relHeight"]) > 0.6 or float(tag["relHeight"]) < 0.03 or float(tag['relWidth']) > 0.8 or float(tag['relWidth']) < 0.03 or len(tagName) > 11 or len(tagName) < 3 or isDuplicateTag(slideId,pageNumber,tagName)): return HttpResponseBadRequest("illegal values") if (tagName in tagNameList): return HttpResponseBadRequest("duplicate Tag Name") tagNameList.append(tagName) relCoords = Coordinate(left=tag["relCoordLeft"],top=tag["relCoordTop"]) relDimensions = Dimensions(height=tag["relHeight"],width=tag['relWidth']) newTag = SlideTag(tagName=tag['tagName'],color=tag['color'],relCoords=relCoords,relDimensions=relDimensions) tagList.append(newTag) if 'anonymous' in request.POST: #user = None isAnonymous = True comment = CommentPost(rawText=text,renderedText=text,author=user,authorExtension=getUserExtension(user), date=datetime.datetime.now(),authorUserSymbol=getCurrentUserSymbol(request), rootID=request.POST.get('rootID','None'), isAnonymous=isAnonymous,attachedTags=tagList, slide=slide, page=pageNumber).save() comment.strID = str(comment.id) #this is because cancer django can't convert Objects to strings in templates #handling of (optinal) slide tag comment.save() upvoteComment(user,comment) #upvote own comment to make user not able to upvote it afterwards #render comments if hadTags: renderCommentTexts(slideId,pageNumber) #render all comments else: renderOneCommentText(slideId,pageNumber,comment) #remove one Karma, so that posting comments does not increase it userExtension = getUserExtension(user) userExtension.karma = userExtension.karma - 1 userExtension.save() return redirect(request.POST.get('redirectURL','website:index')) else: return render(request,'comments.html', generateContext(request, currentPage=breadcrumbsStringGenerator([('website:catalogue','Catalogue')],'Comment Test'), additional={'commentList':CommentPost.objects.order_by('-votes','-date')}))