예제 #1
0
    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
예제 #2
0
 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)
예제 #3
0
    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"]
예제 #4
0
    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
예제 #5
0
 def vision(self, inquiringUser):
     from Vision import Vision
     return Vision.getById(self.visionId(), inquiringUser)