Ejemplo n.º 1
0
    def post_process_request(self, req, template, content_type):
        if req.path_info.startswith('/ticket'):
            tkt_id = req.path_info[8:]

            # jQuery!
            add_script(req, 'mastertickets/jquery.js')

            # Add in the 'Blocked by' field
            blocking_ids = blocked_by(self.env, tkt_id)
            if blocking_ids:
                req.hdf['ticket.blockedby'] = ', '.join(
                    [str(x) for x in blocking_ids])
                req.hdf['ticket.fields.blockedby'] = {
                    'value': '',
                    'custom': 1,
                    'type': 'text',
                    'label': 'Blocked By',
                    'order':
                    10,  # Force this to be at the end, since I am going to disappear it.
                }
                add_stylesheet(req, 'mastertickets/ticket.css')
                add_script(req, 'mastertickets/linkify_blockedby.js')

                # If any blockers are not closed, disable the resovle option
                img_src, img_alt = 'checkmark.gif', 'Blockers closed'
                for i in blocking_ids:
                    if Ticket(self.env, i)['status'] != 'closed':
                        if Ticket(self.env, tkt_id)['status'] != 'closed':
                            add_script(req, 'mastertickets/disable_resolve.js')
                            img_src, img_alt = 'x.png', 'Blockers open'
                        else:
                            img_src, img_alt = 'caution.png', 'Blockers open, but current ticket closed'

                # Magic stuff in the footer
                req.hdf['project.footer'] = Markup(
                    req.hdf['project.footer'] + Markup(
                        html.DIV(html.IMG(class_='blockedby_icon',
                                          src=req.href.chrome(
                                              'mastertickets', img_src),
                                          alt=img_alt,
                                          title=img_alt),
                                 ' ',
                                 linkify_ids(self.env, req, blocking_ids),
                                 id='linkified_blockedby',
                                 style='display:none')))

            # Linkify the 'Blocks' field
            blocks_ids = req.hdf.get('ticket.blocking') or ''
            blocks_ids = blocks_ids.replace('#', '')
            if blocks_ids:
                blocks_ids = [x.strip() for x in blocks_ids.split(',')]
                req.hdf['project.footer'] = Markup(
                    req.hdf['project.footer'] + Markup(
                        html.DIV(linkify_ids(self.env, req, blocks_ids),
                                 id='linkified_blocking',
                                 style='display:none')))
                add_script(req, 'mastertickets/linkify_blocking.js')

        return template, content_type
Ejemplo n.º 2
0
    def expand_macro(self, formatter, name, content):
        req = formatter.req
        # Analyze the arguments list, that should be in content
        args = content.split(',')
        if len(args) == 0:
            raise TracError("No argument provided for %s." %
                            self.__class__.__name__)

        # The first must be the type of the chart
        chart_type = self._get_chart_type(args[0])
        # The second the Sprint
        sprint_name = self._get_sprint(args[1])
        width, height = self._get_dimensions(args[2:])
        filter_by = None
        if len(args) >= 4:
            filter_by = args[3]

        chart_params = dict(sprint_name=sprint_name,
                            width=width,
                            height=height,
                            filter_by=filter_by)
        debug(self.env, "Params: %s" % chart_params)
        chart = ChartGenerator(self.env).get_chartwidget(
            chart_type, **chart_params)
        chart.prepare_rendering(req)
        return html.DIV(chart.display())
Ejemplo n.º 3
0
    def render_macro(self, req, name, content):
        search = prefix = limit = skips = None
        if not content:
            return html.H2('Need to specify a search')

        if content:
            argv = [arg.strip() for arg in content.split(',')]
            if len(argv) < 1:
                return html.H2('Need to specify a search')
            search = argv[0]
            if len(argv) > 1:
                prefix = argv[1]
                if len(argv) > 2:
                    limit = argv[2]
                    if len(argv) > 3:
                        skips = argv[3]

        db = self.env.get_db_cnx()
        cursor = db.cursor()

        sql = 'SELECT name, max_version FROM (' \
              'SELECT name as name, text as text, ' \
              '  max(version) AS max_version, ' \
              '  max(time) AS max_time ' \
              'FROM wiki '
        args = []
        if prefix:
            sql += 'WHERE name LIKE %s'
            args.append(prefix + '%')
        if skips:
            if prefix:
                sql += ' AND '
            sql += 'name != %s'
            args.append(skips)
        sql += ' GROUP BY name ORDER BY max_time ASC'
        if limit:
            sql += ' LIMIT %s'
            args.append(limit)
        sql += ') AS temptable WHERE text LIKE %s'
        args.append('%' + search + '%')
        cursor.execute(sql, args)

        wiki = WikiSystem(self.env)
        return html.DIV(
            html.UL([
                html.LI(
                    html.A(wiki.format_page_name(name),
                           href=req.href.wiki(name)))
                for name, version in cursor
            ]))
Ejemplo n.º 4
0
    def get_timeline_events(self, req, start, stop, filters):
        if 'changeset' in filters:
            format = req.args.get('format')
            wiki_format = self.wiki_format_messages
            show_files = self.timeline_show_files
            db = self.env.get_db_cnx()
            repos = self.env.get_repository(req.authname)
            for chgset in repos.get_changesets(start, stop):
                message = chgset.message or '--'
                if wiki_format:
                    shortlog = wiki_to_oneliner(message, self.env, db,
                                                shorten=True)
                else:
                    shortlog = shorten_line(message)

                if format == 'rss':
                    title = Markup('Changeset [%s]: %s', chgset.rev, shortlog)
                    href = req.abs_href.changeset(chgset.rev)
                    if wiki_format:
                        message = wiki_to_html(message, self.env, req, db,
                                               absurls=True)
                    else:
                        message = html.PRE(message)
                else:
                    title = Markup('Changeset <em>[%s]</em> by %s', chgset.rev,
                                   chgset.author)
                    href = req.href.changeset(chgset.rev)

                    if wiki_format:
                        if self.timeline_long_messages:
                            message = wiki_to_html(message, self.env, req, db,
                                                   absurls=True)
                        else:
                            message = wiki_to_oneliner(message, self.env, db,
                                                       shorten=True)
                    else:
                        message = shortlog

                if show_files and req.perm.has_permission('BROWSER_VIEW'):
                    files = []
                    for chg in chgset.get_changes():
                        if show_files > 0 and len(files) >= show_files:
                            files.append(html.LI(Markup('&hellip;')))
                            break
                        files.append(html.LI(html.DIV(class_=chg[2]),
                                             chg[0] or '/'))
                    message = html.UL(files, class_="changes") + message

                yield 'changeset', href, title, chgset.date, chgset.author,\
                      message
Ejemplo n.º 5
0
    def render_macro(self, req, name, content):
        prefix = limit = None
        if content:
            argv = [arg.strip() for arg in content.split(',')]
            if len(argv) > 0:
                prefix = argv[0]
                if len(argv) > 1:
                    limit = int(argv[1])

        db = self.env.get_db_cnx()
        cursor = db.cursor()

        sql = 'SELECT name, ' \
              '  max(version) AS max_version, ' \
              '  max(time) AS max_time ' \
              'FROM wiki'
        args = []
        if prefix:
            sql += ' WHERE name LIKE %s'
            args.append(prefix + '%')
        sql += ' GROUP BY name ORDER BY max_time DESC'
        if limit:
            sql += ' LIMIT %s'
            args.append(limit)
        cursor.execute(sql, args)

        entries_per_date = []
        prevdate = None
        for name, version, time in cursor:
            date = format_date(time)
            if date != prevdate:
                prevdate = date
                entries_per_date.append((date, []))
            entries_per_date[-1][1].append((name, int(version)))

        wiki = WikiSystem(self.env)
        return html.DIV(
            [html.H3(date) +
             html.UL([html.LI(
            html.A(wiki.format_page_name(name), href=req.href.wiki(name)),
            ' ',
            version > 1 and
            html.SMALL('(', html.A('diff',
                                   href=req.href.wiki(name, action='diff',
                                                      version=version)), ')') \
            or None)
                      for name, version in entries])
             for date, entries in entries_per_date])
Ejemplo n.º 6
0
    def render_macro(self, req, name, filter):
        from trac.config import Option
        from trac.wiki.formatter import wiki_to_html, wiki_to_oneliner
        filter = filter or ''

        sections = set([section for section, option in Option.registry.keys()
                        if section.startswith(filter)])

        return html.DIV(class_='tracini')(
            [(html.H2('[%s]' % section, id='%s-section' % section),
              html.TABLE(class_='wiki')(
                  html.TBODY([html.TR(html.TD(html.TT(option.name)),
                                      html.TD(wiki_to_oneliner(option.__doc__,
                                                               self.env)))
                              for option in Option.registry.values()
                              if option.section == section])))
             for section in sorted(sections)])
Ejemplo n.º 7
0
 def expand_macro(self, formatter, name, content):
     return html.DIV('Hello World, args = ', content, class_="code")
Ejemplo n.º 8
0
def error(msg, *args):
    return html.DIV(html.P(msg % args), class_='system-message')
Ejemplo n.º 9
0
 def render_macro(self, req, name, content):
     return html.DIV('Hello World, args = ', content, class_="code")
Ejemplo n.º 10
0
 def render(self, req, mimetype, content, filename=None, url=None):
     if url:
         return html.DIV(html.IMG(src=url, alt=filename),
                         class_="image-file")