示例#1
0
 def add_member(self, user):
     from models.blip import Blip
     if MeetingMember.gql('WHERE meeting = :1 AND user =:2',
                       self, user).get():
         logging.warn("Already added user %s to meeting %s" %
                      (user, self.key()))
         return
     mm = MeetingMember(meeting=self, user=user)
     mm.put()
     Blip.deliver_legacy_to_meeting_user(self, user)
     self.put()
示例#2
0
    def get(self, blip_key=None):
        blip = Blip.get(blip_key)
        if blip is None:
            return self.error(404)
        login_user = self.get_current_user()
        if blip.meeting and not blip.meeting.has_member(login_user):
            return self.error(401)
        user = blip.user
        _, profile = Profile.get_or_create_from_user(user)

        is_self = user == login_user

        has_followed = False
        if not is_self:
            has_followed = Follow.gql('WHERE from_user = :1 AND to_user = :2',
                                      login_user, user).get() is not None            

        followers = Follow.who_subscribe_you(user)
        follower_profiles = []
        for f in followers:
            c, p = Profile.get_or_create_from_user(f.from_user)
            follower_profiles.append(p)
        followees = Follow.your_subscribers(user)
        followee_profiles = []
        for f in followees:
            c, p = Profile.get_or_create_from_user(f.to_user)
            followee_profiles.append(p)


        return self.render('blip_item.html', locals())
示例#3
0
 def post(self):
     logging.debug('delivering jokes')
     blip_key = self.request.get('key')
     if blip_key:
         blip = Blip.get(blip_key)
         blip.deliver()
     else:
         logging.error('blip key must be provided')
示例#4
0
    def get_or_create_from_user(cls, user, notify=True):
        if isinstance(user, UserAuth):
            user = user.get_user()
        profile = ProfileByEmailView(user.email()).get()
        created = False
        if not profile:
            source = getattr(user, 'source', 'local')
            nickname = user.nickname()
            at_index = nickname.find('@')
            if at_index >= 0:
                nickname = nickname[:at_index]

            adder = 1
            orig_nick = nickname
            
            for p in Profile.all():
                logging.info(p.nickname)
            logging.info("profiles above")
            
            for i in xrange(1000):
                logging.info('finding nickname %s' % nickname)
                #if not Profile.gql('WHERE nickname=:1', nickname).get():
                if not ProfileByNickView(nickname).get():
                    logging.info('not found break')
                    break
                nickname = '%s_%s' % (orig_nick, adder)
                adder += 1

            profile = Profile(user_email=user.email(), nickname=nickname,
                              source=getattr(user, 'source', None),
                              fullname=nickname)
            created = True
            profile.put()

        if created and notify:
            p = ProfileByEmailView(settings.NEWS_USER).get()
            if p:
                Blip.new(p.get_user(), '@%s joined.' % profile.nickname)
        return created, profile
示例#5
0
    def post(self, meeting_key=None):
        from models.blip import Blip
        login_user = self.get_current_user()
        m = Meeting.get(meeting_key)
        if m is None:
            return self.error(404)
        if not m.has_member(login_user):
            return self.error(401)

        content = self.request.get('text', '').strip()
        attachment = self.request.get('attachment', '').strip()
        blip = Blip.new(login_user, content,
                        attachment=attachment, meeting=m)
        return self.redirect(m.href())
示例#6
0
    def delete_member(self, user):
        from models.blip import Blip, BlipLink

        mm = MeetingMember.gql('WHERE meeting = :1 AND user =:2',
                               self, user).get()
        if mm:
            mm.delete()
            for blip in Blip.gql('WHERE meeting = :1 AND user != :2', self, user):
                #bl = BlipLink.gql('WHERE blip = :1', blip).get()
                bl_key = db.GqlQuery('select __key__ from BlipLink WHERE blip = :1', blip).get()
                logging.info('bl key %s' % bl_key)
                if bl_key:
                    #bl.delete()
                    db.delete(bl_key)
            self.put()
        else:
            logging.warn("User %s is not found in meeting %s to delete" %
                         (user, self))
示例#7
0
    def get(self, blip_key=None):
        login_user = self.get_current_user()
        blip = Blip.get(blip_key)
        if blip is None:
            return self.error(404)
        if blip.user != login_user:
            return self.error(401)

        m = blip.meeting
        if m is None:
            return self.error(404)
        
        q = BlipLink.gql('WHERE blip = :1', blip)
        for link in q:
            link.delete()

        blip.delete()
        return self.redirect_back()
示例#8
0
    def get(self, user_name=None):
        login_user = self.get_current_user()

        if user_name is None:
            return self.redirect('/signin')

        profile = Profile.gql('WHERE nickname=:1', user_name).get()
        if not profile or not profile.is_active:
            return self.error(404)
        user = profile.get_user()
        is_self = user == login_user

        has_followed = False
        if not is_self:
            has_followed = Follow.gql('WHERE from_user = :1 AND to_user = :2',
                                      login_user, user).get() is not None            

        followers = Follow.who_subscribe_you(user)
        follower_profiles = []
        for f in followers:
            c, p = Profile.get_or_create_from_user(f.from_user)
            follower_profiles.append(p)
        followees = Follow.your_subscribers(user)
        followee_profiles = []
        for f in followees:
            c, p = Profile.get_or_create_from_user(f.to_user)
            followee_profiles.append(p)

        try:
            page = int(self.request.get('page', '1'))
        except ValueError:
            page = 1

        has_followed = Follow.gql('WHERE from_user = :1 AND to_user =:2',
                                  login_user,
                                  user).get()
        pagesize = settings.BLIP_PAGE_SIZE
        paginator = SimplePaginator(Blip.qs_for_author(user),
                                    page, pagesize)

        blips = each_profiles(paginator.object_list)
        return self.render('user_page.html', locals())
示例#9
0
    def post(self):
        errors = []
        title = self.request.get('title', '').strip()
        if not title:
            errors.append('Title cannot be empty')

        content = self.request.get('content', '').strip()
        if not content:
            errors.append('Content cannot be empty')

        if errors:
            return self.render('article_add.html', locals())

        user = self.get_current_user()
        article = Article.new(user, title, content)
        full_article_url = urlparse.urljoin(self.request.uri, article.href())
        blip = Blip.new(user, u'added article %s %s' % (article.title,
                                                        full_article_url))

        return self.redirect(article.href())
示例#10
0
    def post(self, article_key=None):
        article = Article.get(article_key)
        if article is None or not article.is_active:
            return self.error(404)

        errors = []
        content = self.request.get('content', '').strip()
        if not content:
            errors.append('Content cannot be empty')

        if errors:
            return self.render('revision_add.html', locals())

        user = self.get_current_user()
        rev = ArticleRevision(user=user, article=article,
                              content=content)
        rev.put()
        if user == article.creator:
            article.current_rev_key = str(rev.key())
        article.put()
        full_rev_url = urlparse.urljoin(self.request.uri, rev.href())
        blip = Blip.new(user, u'edited article %s %s' % (article.title,
                                                         full_rev_url))
        return self.redirect(article.href())
示例#11
0
    def get(self, meeting_key=None):
        from models.blip import Blip
        login_user = self.get_current_user()
        meeting = Meeting.get(meeting_key)
        if meeting is None or not meeting.is_active:
            return self.error(404)
        if not meeting.has_member(login_user):
            return self.error(401)
        c, p = Profile.get_or_create_from_user(meeting.creator)
        
        admin_profiles = [p]

        member_profiles = []
        members = meeting.members(include_creator=False)
        for u in members:
            c, p = Profile.get_or_create_from_user(u)
            member_profiles.append(p)

        followees = Follow.your_subscribers(login_user)
        followee_profiles = []
        for f in followees:
            if f.to_user not in members:
                c, p = Profile.get_or_create_from_user(f.to_user)
                followee_profiles.append(p)
            
        try:
            page = int(self.request.get('page', '1'))
        except ValueError:
            page = 1

        pagesize = settings.ROOM_PAGE_SIZE
        paginator = SimplePaginator(Blip.qs_for_meeting(meeting),
                                     page, pagesize)
        
        blips = each_profiles(paginator.object_list)
        return self.render('meeting_item.html', locals())
示例#12
0
 def load(self):
     from models.blip import Blip
     q = Blip.qs_for_meeting(self.meeting, order='date_created')
     text = ' '.join(blip.text for blip in q.fetch(3))
     return text
示例#13
0
 def post(self):
     content = self.request.get('text', '').strip()
     attachment = self.request.get('attachment', '').strip()
     blip = Blip.new(self.get_current_user(), content, attachment)
     return self.redirect('/home')