Example #1
0
 def do_update(db):
     SubscriptionAttribute.delete_by_sid_and_class(
         self.env, req.session.sid, req.session.authenticated, klass)
     blogs = set(map(lambda x: x.strip(),
         req.args.get('announcer_watch_bloggers').split(',')))
     SubscriptionAttribute.add(self.env, req.session.sid,
             req.session.authenticated, klass, 'blog', blogs)
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__
        if req.method == "POST":
            with self.env.db_transaction as db:
                SubscriptionAttribute.\
                    delete_by_sid_and_class(self.env, req.session.sid,
                                            req.session.authenticated,
                                            klass, db)

                def _map(value):
                    g = re.match('^component_(.*)', value)
                    if g:
                        if req.args.as_bool(value):
                            return g.groups()[0]

                components = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(self.env, req.session.sid,
                                          req.session.authenticated, klass,
                                          'ticket', components, db)

        d = {}
        attrs = filter(None, map(
            lambda x: x['target'],
            SubscriptionAttribute.find_by_sid_and_class(
                self.env, req.session.sid, req.session.authenticated, klass
            )
        ))
        for c in model.Component.select(self.env):
            if c.name in attrs:
                d[c.name] = True
            else:
                d[c.name] = None

        return 'prefs_announcer_joinable_components.html', dict(components=d)
Example #3
0
 def do_update(db):
     SubscriptionAttribute.delete_by_sid_and_class(
         self.env, sess.sid, sess.authenticated, klass, db)
     SubscriptionAttribute.add(self.env, sess.sid,
                               sess.authenticated, klass, 'wiki',
                               (req.args.get('wiki_interests'), ),
                               db)
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == "POST":
            with self.env.db_transaction as db:
                SubscriptionAttribute.\
                    delete_by_sid_and_class(self.env, req.session.sid,
                                            req.session.authenticated,
                                            klass, db)

                def _map(value):
                    g = re.match('^joinable_group_(.*)', value)
                    if g:
                        if req.args.as_bool(value):
                            return g.groups()[0]

                groups = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(self.env, req.session.sid,
                                          req.session.authenticated, klass,
                                          'ticket', groups, db)

        attrs = filter(None, map(
            lambda x: x['target'],
            SubscriptionAttribute.find_by_sid_and_class(
                self.env, req.session.sid, req.session.authenticated, klass
            )
        ))
        data = dict(joinable_groups={})
        for group in self.joinable_groups:
            data['joinable_groups'][group] = (group in attrs) and True or None
        return 'prefs_announcer_joinable_groups.html', data
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == "POST":
            with self.env.db_transaction as db:
                SubscriptionAttribute.\
                    delete_by_sid_and_class(self.env, req.session.sid,
                                            req.session.authenticated,
                                            klass, db)

                def _map(value):
                    g = re.match('^joinable_group_(.*)', value)
                    if g:
                        if req.args.as_bool(value):
                            return g.groups()[0]

                groups = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(self.env, req.session.sid,
                                          req.session.authenticated, klass,
                                          'ticket', groups, db)

        attrs = filter(
            None,
            map(
                lambda x: x['target'],
                SubscriptionAttribute.find_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated,
                    klass)))
        data = dict(joinable_groups={})
        for group in self.joinable_groups:
            data['joinable_groups'][group] = (group in attrs) and True or None
        return 'prefs_announcer_joinable_groups.html', data
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == 'POST':
            with self.env.db_transaction as db:
                sess = req.session
                SubscriptionAttribute\
                    .delete_by_sid_and_class(self.env, sess.sid,
                                             sess.authenticated,
                                             klass, db)
                users = map(lambda x: x.strip(),
                            req.args.get('announcer_watch_users').split(','))
                SubscriptionAttribute.add(self.env, sess.sid,
                                          sess.authenticated, klass, 'user',
                                          users, db)

        attrs = filter(
            None,
            map(
                lambda x: x['target'],
                SubscriptionAttribute.find_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated,
                    klass)))
        data = dict(announcer_watch_users=','.join(attrs))
        return 'prefs_announcer_watch_users.html', data
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__
        if req.method == "POST":
            with self.env.db_transaction as db:
                SubscriptionAttribute.\
                    delete_by_sid_and_class(self.env, req.session.sid,
                                            req.session.authenticated,
                                            klass, db)

                def _map(value):
                    g = re.match('^component_(.*)', value)
                    if g:
                        if req.args.as_bool(value):
                            return g.groups()[0]

                components = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(self.env, req.session.sid,
                                          req.session.authenticated, klass,
                                          'ticket', components, db)

        d = {}
        attrs = filter(
            None,
            map(
                lambda x: x['target'],
                SubscriptionAttribute.find_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated,
                    klass)))
        for c in model.Component.select(self.env):
            if c.name in attrs:
                d[c.name] = True
            else:
                d[c.name] = None

        return 'prefs_announcer_joinable_components.html', dict(components=d)
Example #8
0
 def do_update(db):
     SubscriptionAttribute.delete_by_sid_and_class(self.env,
             req.session.sid, req.session.authenticated, klass, db)
     users = map(lambda x: x.strip(),
             req.args.get("announcer_watch_users").split(','))
     SubscriptionAttribute.add(self.env, req.session.sid,
             req.session.authenticated, klass, 'user', users, db)
Example #9
0
 def set_unwatch(self, sid, authenticated, realm, target):
     klass = self.__class__.__name__
     (attr,) = SubscriptionAttribute.find_by_sid_class_realm_and_target(
         self.env, sid, authenticated, klass, realm, target
     )
     if attr:
         SubscriptionAttribute.delete(self.env, attr["id"])
Example #10
0
 def do_update(db):
     sess = req.session
     SubscriptionAttribute.delete_by_sid_and_class(
         self.env, sess.sid, sess.authenticated, klass, db)
     users = map(lambda x: x.strip(),
                 req.args.get("announcer_watch_users").split(','))
     SubscriptionAttribute.add(self.env, sess.sid,
                               sess.authenticated, klass, 'user',
                               users, db)
Example #11
0
 def do_update(db):
     SubscriptionAttribute.delete_by_sid_and_class(
         self.env, req.session.sid, req.session.authenticated,
         klass)
     blogs = set(
         map(lambda x: x.strip(),
             req.args.get('announcer_watch_bloggers').split(',')))
     SubscriptionAttribute.add(self.env, req.session.sid,
                               req.session.authenticated, klass,
                               'blog', blogs)
Example #12
0
 def do_update(db):
     SubscriptionAttribute.delete_by_sid_and_class(self.env,
             req.session.sid, req.session.authenticated, klass, db)
     def _map(value):
         g = re.match('^joinable_group_(.*)', value)
         if g:
             if istrue(req.args.get(value)):
                 return g.groups()[0]
     groups = set(filter(None, map(_map,req.args.keys())))
     SubscriptionAttribute.add(self.env, req.session.sid,
         req.session.authenticated, klass, 'ticket', groups, db)
Example #13
0
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated, klass, db
                )

                def _map(value):
                    g = re.match("^component_(.*)", value)
                    if g:
                        if istrue(req.args.get(value)):
                            return g.groups()[0]

                components = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(
                    self.env, req.session.sid, req.session.authenticated, klass, "ticket", components, db
                )
Example #14
0
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated,
                    klass, db)

                def _map(value):
                    g = re.match('^component_(.*)', value)
                    if g:
                        if istrue(req.args.get(value)):
                            return g.groups()[0]

                components = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(self.env, req.session.sid,
                                          req.session.authenticated, klass,
                                          'ticket', components, db)
Example #15
0
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == "POST":

            @self.env.with_transaction()
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated, klass, db
                )

                def _map(value):
                    g = re.match("^joinable_group_(.*)", value)
                    if g:
                        if istrue(req.args.get(value)):
                            return g.groups()[0]

                groups = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(
                    self.env, req.session.sid, req.session.authenticated, klass, "ticket", groups, db
                )

        attrs = filter(
            None,
            map(
                lambda x: x["target"],
                SubscriptionAttribute.find_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated, klass
                ),
            ),
        )
        data = dict(joinable_groups={})
        for group in self.joinable_groups:
            data["joinable_groups"][group] = (group in attrs) and True or None
        return "prefs_announcer_joinable_groups.html", data
Example #16
0
 def do_update(db):
     attrs = SubscriptionAttribute.find_by_sid_class_and_target(
         self.env, req.session.sid, req.session.authenticated,
         klass, name)
     if attrs:
         SubscriptionAttribute.delete_by_sid_class_and_target(
             self.env, req.session.sid, req.session.authenticated,
             klass, name)
         req.session['_blog_watch_message_'] = \
             _('You are no longer watching this blog post.')
     else:
         SubscriptionAttribute.add(
             self.env, req.session.sid, req.session.authenticated,
             klass, 'blog', (name,))
         req.session['_blog_watch_message_'] = \
                 _('You are now watching this blog post.')
Example #17
0
    def matches(self, event):
        if event.realm != 'wiki':
            return
        if event.category not in ('changed', 'created', 'attachment added',
                                  'deleted', 'version deleted'):
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_and_realm(
            self.env, klass, 'wiki')

        def match(pattern):
            for raw in pattern['target'].split(' '):
                if raw != '':
                    pat = urllib.unquote(raw).replace('*', '.*')
                    if re.match(pat, event.target.name):
                        return True

        sids = set(
            map(lambda x: (x['sid'], x['authenticated']), filter(match,
                                                                 attrs)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #18
0
    def post_process_request(self, req, template, data, content_type):
        if 'BLOG_VIEW' not in req.perm:
            return (template, data, content_type)

        if '_blog_watch_message_' in req.session:
            add_notice(req, req.session['_blog_watch_message_'])
            del req.session['_blog_watch_message_']

        if req.authname == "anonymous":
            return (template, data, content_type)

        # FullBlogPlugin sets the blog_path arg in pre_process_request
        name = req.args.get('blog_path')
        if not name:
            return (template, data, content_type)

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_sid_class_and_target(
            self.env, req.session.sid, req.session.authenticated, klass, name)
        if attrs:
            add_ctxtnav(
                req, tag.a(_('Unwatch This'), href=req.href.blog_watch(name)))
        else:
            add_ctxtnav(req,
                        tag.a(_('Watch This'), href=req.href.blog_watch(name)))

        return (template, data, content_type)
Example #19
0
    def post_process_request(self, req, template, data, content_type):
        if 'BLOG_VIEW' not in req.perm:
            return (template, data, content_type)

        if '_blog_watch_message_' in req.session:
            add_notice(req, req.session['_blog_watch_message_'])
            del req.session['_blog_watch_message_']

        if req.authname == "anonymous":
            return (template, data, content_type)

        # FullBlogPlugin sets the blog_path arg in pre_process_request
        name = req.args.get('blog_path')
        if not name:
            return (template, data, content_type)

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_sid_class_and_target(
            self.env, req.session.sid, req.session.authenticated, klass, name)
        if attrs:
            add_ctxtnav(req, tag.a(_('Unwatch This'),
                href=req.href.blog_watch(name)))
        else:
            add_ctxtnav(req, tag.a(_('Watch This'),
                href=req.href.blog_watch(name)))

        return (template, data, content_type)
Example #20
0
 def do_update(db):
     attrs = SubscriptionAttribute.find_by_sid_class_and_target(
         self.env, req.session.sid, req.session.authenticated, klass,
         name)
     if attrs:
         SubscriptionAttribute.delete_by_sid_class_and_target(
             self.env, req.session.sid, req.session.authenticated,
             klass, name)
         req.session['_blog_watch_message_'] = \
             _('You are no longer watching this blog post.')
     else:
         SubscriptionAttribute.add(self.env, req.session.sid,
                                   req.session.authenticated, klass,
                                   'blog', (name, ))
         req.session['_blog_watch_message_'] = \
                 _('You are now watching this blog post.')
Example #21
0
    def matches(self, event):
        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(self.env, klass, "user", event.author)
        sids = set(map(lambda x: (x["sid"], x["authenticated"]), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #22
0
 def is_watching(self, sid, authenticated, realm, target):
     klass = self.__class__.__name__
     attrs = SubscriptionAttribute.find_by_sid_class_realm_and_target(
         self.env, sid, authenticated, klass, realm, target)
     if attrs:
         return True
     else:
         return False
 def is_watching(self, sid, authenticated, realm, target):
     klass = self.__class__.__name__
     attrs = SubscriptionAttribute.find_by_sid_class_realm_and_target(
         self.env, sid, authenticated, klass, realm, target)
     if attrs:
         return True
     else:
         return False
Example #24
0
    def matches(self, event):
        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(
            self.env, klass, event.realm, get_target_id(event.target))
        sids = set(map(lambda x: (x['sid'], x['authenticated']), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #25
0
    def matches(self, event):
        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(self.env,
                klass, event.realm, self._get_target_id(event.target))
        sids = set(map(lambda x: (x['sid'],x['authenticated']), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #26
0
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == "POST":
            with self.env.db_transaction:
                SubscriptionAttribute.delete_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated,
                    klass)
                blogs = set(map(lambda x: x.strip(),
                                req.args.get(
                                    'announcer_watch_bloggers').split(',')))
                SubscriptionAttribute.add(self.env, req.session.sid,
                                          req.session.authenticated, klass,
                                          'blog', blogs)

        attrs = SubscriptionAttribute.\
            find_by_sid_and_class(self.env, req.session.sid,
                                  req.session.authenticated, klass)
        data = {'sids': ','.join(set(map(lambda x: x['target'], attrs)))}
        return 'prefs_announcer_watch_bloggers.html', dict(data=data)
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__
        sess = req.session

        if req.method == 'POST':
            with self.env.db_transaction as db:
                SubscriptionAttribute.\
                    delete_by_sid_and_class(self.env, sess.sid,
                                            sess.authenticated, klass, db)
                SubscriptionAttribute.add(self.env, sess.sid,
                                          sess.authenticated, klass, 'wiki',
                                          (req.args.get('wiki_interests'),),
                                          db)

        (interests,) = SubscriptionAttribute.find_by_sid_and_class(
            self.env, sess.sid, sess.authenticated, klass) or (
                       {'target': ''},)

        return 'prefs_announcer_wiki.html', dict(
            wiki_interests='\n'.join(
                urllib.unquote(x) for x in interests['target'].split(' ')))
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__
        sess = req.session

        if req.method == 'POST':
            with self.env.db_transaction as db:
                SubscriptionAttribute.\
                    delete_by_sid_and_class(self.env, sess.sid,
                                            sess.authenticated, klass, db)
                SubscriptionAttribute.add(self.env, sess.sid,
                                          sess.authenticated, klass, 'wiki',
                                          (req.args.get('wiki_interests'), ),
                                          db)

        (interests, ) = SubscriptionAttribute.find_by_sid_and_class(
            self.env, sess.sid, sess.authenticated, klass) or ({
                'target': ''
            }, )

        return 'prefs_announcer_wiki.html', dict(wiki_interests='\n'.join(
            urllib.unquote(x) for x in interests['target'].split(' ')))
Example #29
0
    def process_request(self, req):
        klass = self.__class__.__name__

        m = re.match(r'^/blog_watch/(.*)', req.path_info)
        (name,) = m.groups()

        with self.env.db_transaction:
            attrs = SubscriptionAttribute.find_by_sid_class_and_target(
                self.env, req.session.sid, req.session.authenticated,
                klass, name)
            if attrs:
                SubscriptionAttribute.delete_by_sid_class_and_target(
                    self.env, req.session.sid, req.session.authenticated,
                    klass, name)
                req.session['_blog_watch_message_'] = \
                    _("You are no longer watching this blog post.")
            else:
                SubscriptionAttribute.add(
                    self.env, req.session.sid, req.session.authenticated,
                    klass, 'blog', (name,))
                req.session['_blog_watch_message_'] = \
                    _("You are now watching this blog post.")

        req.redirect(req.href.blog(name))
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == 'POST':
            with self.env.db_transaction as db:
                sess = req.session
                SubscriptionAttribute\
                    .delete_by_sid_and_class(self.env, sess.sid,
                                             sess.authenticated,
                                             klass, db)
                users = map(lambda x: x.strip(),
                            req.args.get('announcer_watch_users').split(','))
                SubscriptionAttribute.add(self.env, sess.sid,
                                          sess.authenticated, klass, 'user',
                                          users, db)

        attrs = filter(None, map(
            lambda x: x['target'],
            SubscriptionAttribute.find_by_sid_and_class(
                self.env, req.session.sid, req.session.authenticated, klass
            )
        ))
        data = dict(announcer_watch_users=','.join(attrs))
        return 'prefs_announcer_watch_users.html', data
Example #31
0
    def matches(self, event):
        if event.realm != 'blog':
            return
        if event.category not in ('post created', 'post changed',
                                  'post deleted', 'comment created',
                                  'comment changed', 'comment deleted'):
            return

        klass = self.__class__.__name__

        sids = set(map(lambda x: (x['sid'], x['authenticated']),
                       SubscriptionAttribute.find_by_class_realm_and_target(
                           self.env, klass, 'blog', event.blog_post.author)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #32
0
    def matches(self, event):
        if event.realm != 'blog':
            return
        if not event.category in ('post created', 'post changed',
                                  'post deleted', 'comment created',
                                  'comment changed', 'comment deleted'):
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(
            self.env, klass, 'blog', event.blog_post.name)
        sids = set(map(lambda x: (x['sid'], x['authenticated']), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #33
0
    def matches(self, event):
        if event.realm != "ticket":
            return
        if event.category not in ("changed", "created", "attachment added"):
            return

        component = event.target["component"]
        if not component:
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(self.env, klass, "ticket", component)
        sids = set(map(lambda x: (x["sid"], x["authenticated"]), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #34
0
    def test_add_delete(self):
        attr = SubscriptionAttribute(self.env)
        attr.add(self.env, 'user', 1, 'GeneralWikiSubscriber','wiki',
                 ('TracWiki', 'TracWiki'))
        cursor = self.db.cursor()
        cursor.execute("SELECT COUNT(*) FROM subscription_attribute")
        count = cursor.fetchone()
        self.assertEqual(count[0], 2)

        attr.delete(self.env, 1)
        # Make sure, that we really deleted the 1st attribute.
        cursor.execute("SELECT target FROM subscription_attribute")
        for attribute in cursor.fetchone():
            self.assertEqual(attribute, 'TracWiki')
        cursor.execute("SELECT COUNT(*) FROM subscription_attribute")
        count = cursor.fetchone()
        self.assertEqual(count[0], 1)
        # Deleting non-existent subscriptions is handled gracefully.
        attr.delete(self.env, 1)
    def matches(self, event):
        if event.realm != 'ticket':
            return
        if event.category not in ('changed', 'created', 'attachment added'):
            return

        component = event.target['component']
        if not component:
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(
            self.env, klass, 'ticket', component)
        sids = set(map(lambda x: (x['sid'], x['authenticated']), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #36
0
    def matches(self, event):
        if event.realm != 'ticket':
            return
        if event.category not in ('changed', 'created', 'attachment added'):
            return

        component = event.target['component']
        if not component:
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_realm_and_target(
            self.env, klass, 'ticket', component)
        sids = set(map(lambda x: (x['sid'], x['authenticated']), attrs))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #37
0
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == "POST":
            @self.env.with_transaction()
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(self.env,
                        req.session.sid, req.session.authenticated, klass, db)
                SubscriptionAttribute.add(self.env, req.session.sid,
                    req.session.authenticated, klass,
                    'wiki', req.args.get('wiki_interests', db))

        (interests,) = SubscriptionAttribute.find_by_sid_and_class(
            self.env, req.session.sid, req.session.authenticated, klass
        ) or ({'target':''},)

        return "prefs_announcer_wiki.html", dict(
            wiki_interests = '\n'.join(
                urllib.unquote(x) for x in interests['target'].split(' ')
            )
        )
Example #38
0
    def matches(self, event):
        if event.realm != "wiki":
            return
        if event.category not in ("changed", "created", "attachment added", "deleted", "version deleted"):
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_and_realm(self.env, klass, "wiki")

        def match(pattern):
            for raw in pattern["target"].split(" "):
                if raw != "":
                    pat = urllib.unquote(raw).replace("*", ".*")
                    if re.match(pat, event.target.name):
                        return True

        sids = set(map(lambda x: (x["sid"], x["authenticated"]), filter(match, attrs)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #39
0
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__
        sess = req.session

        if req.method == "POST":

            @self.env.with_transaction()
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(self.env, sess.sid, sess.authenticated, klass, db)
                SubscriptionAttribute.add(
                    self.env, sess.sid, sess.authenticated, klass, "wiki", (req.args.get("wiki_interests"),), db
                )

        (interests,) = SubscriptionAttribute.find_by_sid_and_class(self.env, sess.sid, sess.authenticated, klass) or (
            {"target": ""},
        )

        return (
            "prefs_announcer_wiki.html",
            dict(wiki_interests="\n".join(urllib.unquote(x) for x in interests["target"].split(" "))),
        )
Example #40
0
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__

        if req.method == "POST":
            @self.env.with_transaction()
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(self.env,
                        req.session.sid, req.session.authenticated, klass, db)
                users = map(lambda x: x.strip(),
                        req.args.get("announcer_watch_users").split(','))
                SubscriptionAttribute.add(self.env, req.session.sid,
                        req.session.authenticated, klass, 'user', users, db)

        attrs = filter(None, map(
            lambda x: x['target'],
            SubscriptionAttribute.find_by_sid_and_class(
                self.env, req.session.sid, req.session.authenticated, klass
            )
        ))
        return "prefs_announcer_watch_users.html", dict(data=dict(
            announcer_watch_users=','.join(attrs)
        ))
Example #41
0
    def matches(self, event):
        if event.realm != "ticket":
            return
        if event.category not in ("changed", "created", "attachment added"):
            return

        klass = self.__class__.__name__
        ticket = event.target
        sids = set()

        cc = event.target["cc"] or ""
        for chunk in re.split("\s|,", cc):
            chunk = chunk.strip()
            if chunk and chunk.startswith("@"):
                member = None
                grp = chunk[1:]

                attrs = SubscriptionAttribute.find_by_class_realm_and_target(self.env, klass, "ticket", grp)
                sids.update(set(map(lambda x: (x["sid"], x["authenticated"]), attrs)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #42
0
    def render_announcement_preference_box(self, req, panel):
        klass = self.__class__.__name__
        if req.method == "POST":

            @self.env.with_transaction()
            def do_update(db):
                SubscriptionAttribute.delete_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated, klass, db
                )

                def _map(value):
                    g = re.match("^component_(.*)", value)
                    if g:
                        if istrue(req.args.get(value)):
                            return g.groups()[0]

                components = set(filter(None, map(_map, req.args.keys())))
                SubscriptionAttribute.add(
                    self.env, req.session.sid, req.session.authenticated, klass, "ticket", components, db
                )

        d = {}
        attrs = filter(
            None,
            map(
                lambda x: x["target"],
                SubscriptionAttribute.find_by_sid_and_class(
                    self.env, req.session.sid, req.session.authenticated, klass
                ),
            ),
        )
        for c in model.Component.select(self.env):
            if c.name in attrs:
                d[c.name] = True
            else:
                d[c.name] = None

        return "prefs_announcer_joinable_components.html", dict(components=d)
Example #43
0
    def matches(self, event):
        if event.realm != 'wiki':
            return
        if event.category not in ('changed', 'created', 'attachment added',
                'deleted', 'version deleted'):
            return

        klass = self.__class__.__name__

        attrs = SubscriptionAttribute.find_by_class_and_realm(
                self.env, klass, 'wiki')

        def match(pattern):
            for raw in pattern['target'].split(' '):
                if raw != '':
                    pat = urllib.unquote(raw).replace('*', '.*')
                    if re.match(pat, event.target.name):
                        return True

        sids = set(map(lambda x: (x['sid'],x['authenticated']), filter(match, attrs)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #44
0
    def matches(self, event):
        if event.realm != 'ticket':
            return
        if event.category not in ('changed', 'created', 'attachment added'):
            return

        klass = self.__class__.__name__
        ticket = event.target
        sids = set()

        cc = event.target['cc'] or ''
        for chunk in re.split('\s|,', cc):
            chunk = chunk.strip()
            if chunk and chunk.startswith('@'):
                member = None
                grp = chunk[1:]

                attrs = SubscriptionAttribute.find_by_class_realm_and_target(
                        self.env, klass, 'ticket', grp)
                sids.update(set(map(
                    lambda x: (x['sid'],x['authenticated']), attrs)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #45
0
    def matches(self, event):
        if event.realm != 'ticket':
            return
        if event.category not in ('changed', 'created', 'attachment added'):
            return

        klass = self.__class__.__name__
        ticket = event.target
        sids = set()

        cc = event.target['cc'] or ''
        for chunk in re.split('\s|,', cc):
            chunk = chunk.strip()
            if chunk and chunk.startswith('@'):
                member = None
                grp = chunk[1:]

                attrs = SubscriptionAttribute.find_by_class_realm_and_target(
                    self.env, klass, 'ticket', grp)
                sids.update(
                    set(map(lambda x: (x['sid'], x['authenticated']), attrs)))

        for i in Subscription.find_by_sids_and_class(self.env, sids, klass):
            yield i.subscription_tuple()
Example #46
0
 def wiki_page_deleted(self, page):
     klass = self.__class__.__name__
     SubscriptionAttribute.delete_by_class_realm_and_target(
         self.env, klass, 'wiki', get_target_id(page))
Example #47
0
 def ticket_deleted(self, ticket):
     klass = self.__class__.__name__
     SubscriptionAttribute.delete_by_class_realm_and_target(
         self.env, klass, 'ticket', get_target_id(ticket))
Example #48
0
 def set_unwatch(self, sid, authenticated, realm, target):
     klass = self.__class__.__name__
     (attr, ) = SubscriptionAttribute.find_by_sid_class_realm_and_target(
         self.env, sid, authenticated, klass, realm, target)
     if attr:
         SubscriptionAttribute.delete(self.env, attr['id'])
Example #49
0
 def set_watch(self, sid, authenticated, realm, target):
     klass = self.__class__.__name__
     SubscriptionAttribute.add(self.env, sid, authenticated, klass, realm,
                               (target, ))
Example #50
0
 def test_init(self):
     # Examine properties of the initialized objekt.
     fields = ('id', 'sid', 'authenticated', 'class', 'realm', 'target')
     attr = SubscriptionAttribute(self.env)
     for field in fields:
         self.assertEqual(attr[field], None)
 def ticket_deleted(self, ticket):
     klass = self.__class__.__name__
     SubscriptionAttribute.delete_by_class_realm_and_target(
         self.env, klass, 'ticket', get_target_id(ticket))