def commentOnVision(self, visionId, text, pictureId=0): '''Returns comment if successful, else returns None''' from ..WorkerJobs import Queue_commentEmail, \ Queue_commentNotificationEmail vision = Vision.getById(visionId, self) if vision: comment = vision.addComment(self, text, pictureId) if comment: # If comment is on someone else's vision, email them if vision.userId() != self.id(): Queue_commentEmail(self.toDictionary(), vision.toDictionary(), comment.toDictionary()) # send comment notifications for others that have commented # that are not the vision user or the author user # TODO: figure out better heuristic for how far to go back commentList = vision.comments(50) userIdSet = set() for comment in commentList.comments(): if comment.authorId() != self.id() and \ comment.authorId() != vision.userId(): userIdSet.add(comment.authorId()) otherCommenters = User.getByUserIds(userIdSet) for otherCommenter in otherCommenters: Queue_commentNotificationEmail( otherCommenter.toDictionaryFull(), self.toDictionary(), vision.toDictionary(), comment.toDictionary()) return comment return None
def repostVisionList(self, visionIds): '''Convenience function that loops over self.repostVision()''' for visionId in reversed(visionIds): # TODO: Speed up later by grabbing list of visions vision = Vision.getById(visionId, self) if vision: self.repostVision(vision)
def addVision(self, imageUrl, text, isUploaded, isPublic): '''Creates new vision TODO: What does isUploaded mean? Returns (Vision/None, None or error_msg if add vision failed) ''' #TODO: Save page title and page URL? if imageUrl == "": return [None, "No image"] if len(text.strip()) <= 0: return [None, "No text"] pictureId, errorMsg = self._processAndUploadImageUrl(imageUrl, isUploaded) if pictureId == None: return [None, "Error saving picture"] privacy = VisionPrivacy.PUBLIC if not isPublic: privacy = VisionPrivacy.PRIVATE visionId = DataApi.addVision(self.model(), text, pictureId, 0, 0, privacy) if visionId == DataApi.NO_OBJECT_EXISTS_ID: return [None, "Error creating vision"] vision = Vision.getById(visionId, self) if vision: return [vision, "Saved Vision!"] else: return [None, "Error retrieving vision"]
def repostVision(self, vision): '''Repost a vision and return new vision if successful, else None''' assert vision, "Invalid vision" isPublic = self.visionDefaultIsPublic() newVisionId = DataApi.repostVision(self.model(), vision.model(), isPublic) if DataApi.NO_OBJECT_EXISTS_ID != newVisionId: newVision = Vision.getById(newVisionId, self) if newVision: # Only let original user know if this vision is posted # publicly if isPublic: from ..WorkerJobs import Queue_repostEmail Queue_repostEmail(self.toDictionary(), vision.toDictionary(), newVision.toDictionary()) return newVision return None
def vision(self, inquiringUser): from Vision import Vision return Vision.getById(self.visionId(), inquiringUser)