Edgewall Software

Ticket #2042: 2042-fix.patch

File 2042-fix.patch, 3.6 KB (added by cboos, 3 years ago)

Fixes query: and search: links. Takes into account #1927.

  • trac/ticket/query.py

     
    2121from trac.core import * 
    2222from trac.perm import IPermissionRequestor 
    2323from trac.ticket import Ticket, TicketSystem 
    24 from trac.util import escape, shorten_line, sql_escape, CRLF, TRUE 
     24from trac.util import escape, unescape, shorten_line, sql_escape, CRLF, TRUE 
    2525from trac.web import IRequestHandler 
    2626from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    2727from trac.wiki import wiki_to_html, wiki_to_oneliner, IWikiMacroProvider, \ 
     
    593593    def _format_link(self, formatter, ns, query, label): 
    594594        if query[0] == '?': 
    595595            return '<a class="query" href="%s">%s</a>' \ 
    596                    % (formatter.href.query() + escape(query), escape(label)) 
     596                   % (escape(formatter.href.query()) + query.replace(' ', '+'), 
     597                      label) 
    597598        else: 
    598599            from trac.ticket.query import Query, QuerySyntaxError 
    599600            try: 
    600                 query = Query.from_string(formatter.env, query) 
     601                query = Query.from_string(formatter.env, unescape(query)) 
    601602                return '<a class="query" href="%s">%s</a>' \ 
    602                        % (escape(query.get_href()), escape(label)) 
     603                       % (escape(query.get_href()), label) 
    603604            except QuerySyntaxError, e: 
    604605                return '<em class="error">[Error: %s]</em>' % escape(e) 
    605606 
  • trac/Search.py

     
    241241                   query.replace('&amp;', '&').replace(' ', '+') 
    242242        else: 
    243243            href = formatter.href.search(q=query) 
    244         return '<a class="search" href="%s">%s</a>' % (href, label) 
     244        return '<a class="search" href="%s">%s</a>' % (escape(href), label) 
    245245 
  • trac/wiki/tests/wiki-tests.txt

     
    242242============================== 
    243243query:?order=priority 
    244244 
     245query:?order=priority&owner=me 
     246 
    245247query:status=new|reopened 
    246248 
    247249query:milestone!= 
     250 
     251query:milestone=1.0|2.0&owner=me 
    248252------------------------------ 
    249253<p> 
    250254<a class="query" href="/query?order=priority">query:?order=priority</a> 
    251255</p> 
    252256<p> 
     257<a class="query" href="/query?order=priority&amp;owner=me">query:?order=priority&amp;owner=me</a> 
     258</p> 
     259<p> 
    253260<a class="query" href="/query?status=new&amp;status=reopened&amp;order=priority">query:status=new|reopened</a> 
    254261</p> 
    255262<p> 
    256263<a class="query" href="/query?milestone=%21&amp;order=priority">query:milestone!=</a> 
    257264</p> 
     265<p> 
     266<a class="query" href="/query?milestone=1.0&amp;milestone=2.0&amp;owner=me&amp;order=priority">query:milestone=1.0|2.0&amp;owner=me</a> 
     267</p> 
    258268============================== 
    259269{{{ 
    260270Preformatted text. 
     
    468478[search:?q=bar&ticket=on Bar in Tickets] 
    469479------------------------------ 
    470480<p> 
    471 <a class="search" href="/search?q=foo&wiki=on">search:?q=foo&amp;wiki=on</a> 
    472 <a class="search" href="/search?q=foo+bar&wiki=on">search:"?q=foo bar&amp;wiki=on"</a> 
    473 <a class="search" href="/search?q=bar&ticket=on">Bar in Tickets</a> 
     481<a class="search" href="/search?q=foo&amp;wiki=on">search:?q=foo&amp;wiki=on</a> 
     482<a class="search" href="/search?q=foo+bar&amp;wiki=on">search:"?q=foo bar&amp;wiki=on"</a> 
     483<a class="search" href="/search?q=bar&amp;ticket=on">Bar in Tickets</a> 
    474484</p> 
    475485============================== 
    476486'''Note:'''