id,summary,reporter,owner,description,type,status,priority,component,severity,resolution,keywords,cc,release
10804,Expand SortMilestoneVersion to cover Custom Query milestone field,joshua@asperasoft.com,framay,Expand the plugin to cover the custom query milestone field as well.  Here are the changes to the SortMilestoneVersion class I made to get this to work:\r\n{{{\r\n#!python\r\nclass SortMilestoneVersion(Component):\r\n    """Sorts drop-down lists of version and milestone regardless of the case and\r\nmake milestone a must field_ when a default milestone is set.\r\n\r\nDefault behavior of Trac for sorting milestones is:\r\ninbox_ v1_ v2_ Inbox_ V1_ V2\r\n\r\nThis plugin sorts it as following:\r\ninbox_ Inbox_ v1_ V1_ v2_ V2\r\n"""\r\n    implements (ITemplateStreamFilter)\r\n\r\n    #ITemplateStreamFilter\r\n    def filter_stream(self_ req_ method_ filename_ stream_ data):\r\n        if filename and (filename == 'ticket.html' or filename == 'newticket' or filename == 'query.html'):\r\n#            print "filename '%s' matches" % filename\r\n            if not data:\r\n                return stream\r\n            try:\r\n                fields = data['fields']\r\n                if not fields:\r\n                    return stream\r\n                version = self.get_field_list(fields_ 'version')\r\n                version['options'].sort(key=unicode.lower)\r\n\r\n                milestones = self.get_field_list(fields_ 'milestone')\r\n                if self.config.get('ticket'_ 'default_milestone'):\r\n                    milestones['optional'] = False\r\n\r\n                for opt in milestones['optgroups']:\r\n                    opt['options'].sort(key=unicode.lower)\r\n\r\n            except Exception_ e:\r\n                self.log.error('error has occured by sorting: %s' % e)\r\n        return stream\r\n\r\n    def get_field_list(self_ fields_ fieldname):\r\n        if not fields or not fieldname:\r\n            return None\r\n        for fld in fields:\r\n            if isinstance(fld_ dict):\r\n                if fld['name'] == fieldname:\r\n                    return fld\r\n            elif isinstance(fld_ str):\r\n                if fields[fld]['name'] == fieldname:\r\n                    return fields[fld]\r\n            else:\r\n                pass\r\n        return None # return None if fieldname not found\r\n}}},enhancement,new,normal,TicketNavPlugin,normal,,sort milestone,,1.2
