ReportPluginPatch: trac-0.10.4-report-plugin.patch

File trac-0.10.4-report-plugin.patch, 2.7 kB (added by anonymous, 1 year ago)

this patch works for 0.10.4

  • trac/ticket/report.py

    old new  
    3232from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    3333from trac.wiki import wiki_to_html, IWikiSyntaxProvider, Formatter 
    3434 
     35class ITicketReportRenderer(Interface):   
     36    """Extension point interface for components that implement new report    
     37    writing formats."""   
     38   
     39    def get_report_format():   
     40        """Called to get the id for a report format, for example: .xls"""   
     41           
     42        def get_report_mimetype():   
     43                """Called to get the mimetype string for a report format"""   
     44           
     45        def get_report_linkname():   
     46                """Called to get the report link name that will appear on the UI"""   
     47                     
     48        def get_report_linkclass():   
     49                """Called to get the class of the link that will appear on the UI"""   
     50   
     51        def render(req, cols, rows):   
     52                """Render the report, takes the request, columns and rows"""      
     53 
     54 
    3555class ReportModule(Component): 
    3656 
    3757    implements(INavigationContributor, IPermissionRequestor, IRequestHandler, 
     
    111131        add_stylesheet(req, 'common/css/report.css') 
    112132        return 'report.cs', None 
    113133 
     134    renderers = ExtensionPoint(ITicketReportRenderer) 
     135 
    114136    # Internal methods 
    115137 
    116138    def _do_create(self, req, db): 
     
    369391                             mimetype='text/tab-separated-values', 
    370392                             filename=filename) 
    371393            return None 
     394        else:   
     395            for renderer in self.renderers:   
     396                if renderer.get_report_format()==format:   
     397                    renderer.render(req,cols,rows)   
     398                    return None   
    372399 
    373400        return 'report.cs', None 
    374401 
     
    390417        if req.perm.has_permission('REPORT_SQL_VIEW'): 
    391418            add_link(req, 'alternate', '?format=sql', 'SQL Query', 
    392419                     'text/plain') 
     420        # add link for every loaded component    
     421        # that implements ITicketReportRenderer                
     422           
     423        for renderer in self.renderers:   
     424            format = renderer.get_report_format()   
     425            mimetype = renderer.get_report_mimetype()   
     426            linkname = renderer.get_report_linkname()   
     427            linkclass = renderer.get_report_linkclass()   
     428                           
     429            add_link(req,'alternate','?format='+format+href,   
     430                linkname,mimetype,linkclass)   
    393431 
    394432    def execute_report(self, req, db, id, sql, args): 
    395433        sql, args = self.sql_sub_vars(req, sql, args, db)