Exemplo n.º 1
0
    def send_notifications(self, hours, url):

        mail_sender = self._services['mail_sender']
        # Group users by board
        boards = {}
        for subscriber_bo in notifications.get_subscribers():
            # FIXME: don't use the data directly
            subscriber = subscriber_bo.data
            boards.setdefault(subscriber.board.id, {'board': subscriber.board,
                                                    'subscribers': []})['subscribers'].append(subscriber)

        for board in boards.itervalues():
            if not board['board'].archived:
                events = services.ActionLog.get_events_for_data(board['board'], hours)
                for subscriber in board['subscribers']:
                    data = notifications.filter_events(events, subscriber)
                    if not data:
                        continue
                    locale = UserManager.get_app_user(subscriber.user.username).get_locale()
                    self.set_locale(locale)
                    subject, content, content_html = notifications.generate_email(self.app_title, board['board'],
                                                                                  subscriber.user, hours, url, data)
                    mail_sender.send(subject, [subscriber.user.email], content, content_html)
        if self.activity_monitor:
            events = services.ActionLog.get_events_for_data(None, hours)
            new_users = UserManager.get_all_users(hours)

            if not (events or new_users):
                return
            h = xhtml5.Renderer()
            with h.html:
                h << h.h1('Boards')
                with h.ul:
                    for event in events:
                        notif = event.to_string()
                        if event.card:
                            # IDs are interpreted as anchors since HTML4. So don't use the ID of
                            # the card as a URL fragment, because the browser
                            # jumps to it.
                            ev_url = urlparse.urljoin(url, event.board.url)
                            id_ = '%s#id_card_%s' % (ev_url, event.card.id)
                            notif = h.a(notif, href=id_, style='text-decoration: none;')
                        h << h.li(u'%s : ' % (event.board.title), notif)
                h << h.h1('New users')
                with h.table(border=1):
                    with h.tr:
                        h << h.th('Login')
                        h << h.th('Fullname')
                        h << h.th('Email')
                        h << h.th('Registration date')
                    for usr in new_users:
                        with h.tr:
                            h << h.td(usr.username)
                            h << h.td(usr.fullname)
                            h << h.td(usr.email)
                            h << h.td(usr.registration_date.isoformat())

            mail_sender.send('Activity report for '+url, [self.activity_monitor], u'', h.root.write_htmlstring())
Exemplo n.º 2
0
    def test_rendering_security_view_board_1(self):
        """Test rendering security view board 1

        Test rendering (Board private / user not logged)
        """
        helpers.set_dummy_context()  # to be able to create board
        board = helpers.create_board()
        board.set_visibility(board_module.BOARD_PRIVATE)
        helpers.set_context()

        with self.assertRaises(Unauthorized):
            component.Component(board).render(xhtml5.Renderer())
Exemplo n.º 3
0
    def test_rendering_security_view_board_3(self):
        """Test rendering security view board 3

        Test rendering (Board public / user not logged)
        """
        helpers.set_dummy_context()  # for board creation
        board = helpers.create_board()
        helpers.set_context()  # for realistic security check
        board.set_visibility(board_module.BOARD_PUBLIC)

        with i18n.Locale('en', 'US'):
            component.Component(board).render(xhtml5.Renderer())
Exemplo n.º 4
0
    def test_rendering_security_view_board_2(self):
        """Test rendering security view board 2

        Test rendering (Board private / user member)
        """
        helpers.set_dummy_context()  # to be able to create board
        board = helpers.create_board()
        board.set_visibility(board_module.BOARD_PRIVATE)
        user = helpers.create_user('bis')
        helpers.set_context(user)

        data = board.data  # don't collect
        data.members.append(user.data)

        with i18n.Locale('en', 'US'):
            component.Component(board).render(xhtml5.Renderer())
Exemplo n.º 5
0
    def test_rendering_security_view_board_2(self):
        """Test rendering security view board 2

        Test rendering (Board private / user member)
        """
        # stackless only
        if 'Stackless' not in sys.version:
            return
        helpers.set_dummy_context()  # to be able to create board
        board = helpers.create_board()
        board.set_visibility(board_module.BOARD_PRIVATE)
        user = helpers.create_user('bis')
        helpers.set_context(user)

        board.add_member(user)

        with i18n.Locale('en', 'US'):
            component.Component(board).on_answer(lambda x: None).render(xhtml5.Renderer())