Edgewall Software

Ticket #7562: t7562-autoquery_tweaks_r7548.diff

File t7562-autoquery_tweaks_r7548.diff, 6.0 KB (added by osimons, 3 years ago)

Cumulated tweaks + word linking.

  • trac/ticket/query.py

    diff --git a/trac/ticket/query.py b/trac/ticket/query.py
    a b  
    693693                            doc='The default query for authenticated users.')  
    694694     
    695695    default_anonymous_query = Option('query', 'default_anonymous_query',   
    696                                default='status!=closed&cc~=$USER',  
     696                               default='status=!closed',  
    697697                               doc='The default query for anonymous users.')  
    698698 
    699699    items_per_page = IntOption('query', 'items_per_page', 100, 
  • trac/ticket/templates/ticket.html

    diff --git a/trac/ticket/templates/ticket.html b/trac/ticket/templates/ticket.html
    a b  
    137137                                    not in ('type', 'owner')]"> 
    138138            <tr> 
    139139              <th id="h_reporter">Reported by:</th> 
    140               <td headers="h_reporter" class="searchable">${reporter_link}</td> 
     140              <td headers="h_reporter" class="searchable"> 
     141                ${defined('reporter_link') and reporter_link or authorinfo(ticket.reporter)} 
     142              </td> 
    141143              <th id="h_owner">Owned by:</th> 
    142               <td headers="h_owner">${owner_link} 
     144              <td headers="h_owner"> 
     145                ${defined('owner_link') and owner_link or authorinfo(ticket.owner)} 
    143146              </td> 
    144147            </tr> 
    145148            <tr py:for="row in group(fields, 2, lambda f: f.type != 'textarea')" 
  • trac/ticket/web_ui.py

    diff --git a/trac/ticket/web_ui.py b/trac/ticket/web_ui.py
    a b  
    124124        If set to 'default', this is equivalent to 'yes' for new environments 
    125125        but keeps the old behavior for upgraded environments (i.e. 'no'). 
    126126        (''since 0.11'').""") 
    127      
    128     unlinked_fields = ListOption('ticket', 'unlinked_fields',  
    129                                  default=['estimatedhours', 'hours', 'totalhours'], 
    130                                  doc="fields to exclude from AutoQuery markup") 
    131127 
    132128    # IContentConverter methods 
    133129 
     
    10641060        for key in field_changes: 
    10651061            ticket[key] = field_changes[key]['new'] 
    10661062 
    1067     def _query_link(self, req, name, value): 
    1068         """return a link to /query with the appropriate name and value""" 
     1063    def _query_link(self, req, name, value, text=None): 
     1064        """Return a link to /query with the appropriate name and value""" 
    10691065        query = req.href('query', **{name:value}) 
    10701066        args = self.env.config.get('query', 'default_anonymous_query') 
    10711067        if args: 
    10721068            query = '%s&%s' % (query, args) 
    1073         return tag.a(value, href=query) 
     1069        return tag.a(text or value, href=query) 
     1070 
     1071    def _query_link_words(self, req, name, value): 
     1072        """Splits a list of words and makes a query link to each separately""" 
     1073        default = self.env.config.get('query', 'default_anonymous_query', '') 
     1074        items = [] 
     1075        for word in value.split(): 
     1076            word = word.strip(",.;") 
     1077            if not word: 
     1078                continue 
     1079            link = req.href('query', **{name: '~' + word}) \ 
     1080                    + (default and '&' + default or '')  
     1081            items.append((tag.a(word, href=link), ' ')) 
     1082        return tag(items) 
    10741083 
    10751084    def _prepare_fields(self, req, ticket): 
    10761085        context = Context.from_request(req, ticket.resource) 
     
    10791088            name = field['name'] 
    10801089            type_ = field['type'] 
    10811090  
    1082             # enable a link to custom query for the field 
    1083             if name not in self.unlinked_fields: 
     1091            # enable a link to custom query for all choice fields 
     1092            if type_ not in ['text', 'textarea']: 
    10841093                field['rendered'] = self._query_link(req, name, ticket[name]) 
    10851094 
    10861095            # per field settings 
     
    11171126                milestone = Resource('milestone', ticket[name]) 
    11181127                field['rendered'] = render_resource_link(self.env, context, 
    11191128                                                         milestone, 'compact') 
     1129            elif name == 'keywords': 
     1130                field['rendered'] = self._query_link_words( 
     1131                                                req, name, ticket[name]) 
    11201132            elif name == 'cc': 
    11211133                emails = Chrome(self.env).format_emails(context, ticket[name]) 
    1122                 field['rendered'] = emails 
     1134                field['rendered'] = emails == ticket[name] and \ 
     1135                        self._query_link_words(req, name, emails) or emails 
    11231136                if ticket.exists and \ 
    11241137                        'TICKET_EDIT_CC' not in req.perm(ticket.resource): 
    11251138                    cc = ticket._old.get('cc', ticket['cc']) 
     
    11491162                value = ticket.values.get(name) 
    11501163                if value in ('1', '0'): 
    11511164                    field['rendered'] = value == '1' and _('yes') or _('no') 
     1165                    if name not in self.unlinked_fields: 
     1166                        field['rendered'] = self._query_link(req, name, value, field['rendered']) 
    11521167                   
    11531168            # ensure sane defaults 
    11541169            field.setdefault('optional', False) 
     
    12701285            ticket.values.update(values) 
    12711286 
    12721287        context = Context.from_request(req, ticket.resource) 
     1288 
     1289        # Display the owner and reporter links when not obfuscated 
     1290        chrome = Chrome(self.env) 
     1291        for user in 'reporter', 'owner': 
     1292            if chrome.format_author(req, ticket[user]) == ticket[user]: 
     1293                data['%s_link' % user] = self._query_link(req, user, 
     1294                                                            ticket[user]) 
     1295 
    12731296        data.update({ 
    12741297            'context': context, 
    12751298            'fields': fields, 'changes': changes, 
     
    12781301            'action_controls': action_controls, 
    12791302            'action': selected_action, 
    12801303            'change_preview': change_preview, 
    1281             'reporter_link': self._query_link(req, 'reporter', ticket['reporter']), 
    1282             'owner_link': self._query_link(req, 'owner', ticket['owner']) 
    12831304        }) 
    12841305 
    12851306    def rendered_changelog_entries(self, req, ticket, when=None):