Changeset 1207

Show
Ignore:
Timestamp:
2008-10-02 14:15:18 (3 months ago)
Author:
gaspard
Message:

commit 2386d2d0768a076d7bffba7ef1ac0144afc7a07a
Author: Gaspard Bucher <gaspard@teti.ch>

Redirects should include url parameters like "?page=2".

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/app/controllers/application.rb

    r1206 r1207  
    583583    # 8. 'test.host/fr' the redirect for this rule is called once we are sure the request is not for document data (lang in this case can be different from what the visitor is visiting due to caching optimization) 
    584584    def set_lang 
    585       # TODO: how to include zena rules in file reload (in a better way then this hack) ? 
    586       # load "#{RAILS_ROOT}/lib/parser/lib/rules/zena.rb" if RAILS_ENV == 'development' 
    587585      if params[:prefix] =~ /^\d+$/ 
    588586        # this has nothing to do with set_lang... 
  • trunk/app/controllers/nodes_controller.rb

    r1195 r1207  
    3535  # Render badly formed urls 
    3636  def catch_all 
    37     redirect_to "/" + ([prefix]+params[:path]).flatten.join('/') 
     37    url_params_list = [] 
     38    url_params.each do |k,v| 
     39      url_params_list << "#{k}=#{CGI.escape(v)}" 
     40    end 
     41    redirect_to "/" + ([prefix]+params[:path]).flatten.join('/') + (url_params_list == [] ? '' : "?#{url_params_list.join('&')}") 
    3842  end 
    3943   
     
    384388      when 'show' 
    385389        # show must have a 'path' parameter 
     390         
    386391        if params[:prefix] != prefix && !avoid_prefix_redirect 
    387392          # lang changed 
    388393          set_visitor_lang(params[:prefix]) 
    389           redirect_url = zen_path(@node, :mode => params[:mode]
     394          redirect_url = zen_path(@node, path_params
    390395        elsif params[:path] != zen_path(@node, :format=>params[:format], :mode=>params[:mode], :asset=>params[:asset]).split('/')[2..-1] 
    391396          # badly formed url 
    392           redirect_url = zen_path(@node, :mode => params[:mode]
     397          redirect_url = zen_path(@node, path_params
    393398        elsif params[:mode] == 'edit' && !@node.can_write? 
    394399          # special 'edit' mode 
     
    427432      @node.kind_of?(Document) && params[:format] == @node.c_ext 
    428433    end 
     434     
     435    # Url parameters (without format/mode/prefix...) 
     436    def url_params 
     437      res = {} 
     438      path_params.each do |k,v| 
     439        next if [:mode, :format, :asset].include?(k.to_sym) 
     440        res[k.to_sym] = v 
     441      end 
     442      res 
     443    end 
     444     
     445    # Url parameters (without action,controller,path,prefix) 
     446    def path_params 
     447      res = {} 
     448      params.each do |k,v| 
     449        next if [:action, :controller, :path, :prefix, :id].include?(k.to_sym) 
     450        res[k.to_sym] = v 
     451      end 
     452      res 
     453    end 
    429454end 
    430455 
  • trunk/lib/parser/lib/rules/zena.rb

    r1206 r1207  
    26702670          end 
    26712671        when :test 
    2672           if value =~ /("[^"]*"|'[^']*'|[\w:\.\-]+)\s*(>=|<=|<>|<|=|>|lt|le|eq|ne|ge|gt)\s*("[^"]*"|'[^']*'|[\w\.\-]+)/ 
     2672          if value =~ /("[^"]*"|'[^']*'|[\w:\.\-]+)\s*(>=|<=|<>|<|=|>|lt|le|eq|ne|ge|gt)\s*("[^"]*"|'[^']*'|[\w:\.\-]+)/ 
    26732673            parts = [$1,$3] 
    26742674            op = {'lt' => '<','le' => '<=','eq' => '==', '=' => '==','ne' => '!=','ge' => '>=','gt' => '>'}[$2] || $2 
  • trunk/test/helpers/zena_parser/basic.yml

    r1206 r1207  
    539539  tem: "<% if params[:f].to_i == 3 -%>three<% end -%> / <% if !params[:f].blank? -%>exist<% end -%>" 
    540540 
     541if_test_param_var: 
     542  src: "<r:set var='year'>3000</r:set><r:if test='year eq param:f'>funky!</r:if>" 
     543  tem: "<% set_year = capture do %>3000<% end -%><% if set_year.to_s == params[:f].to_s -%>funky!<% end -%>" 
     544   
    541545if_in_if: 
    542546  src: "<r:if test='id eq 22'><r:if test='1 eq 2'>strange...<r:else>wrong!</r:else></r:if><r:else>other node</r:else></r:if>" 
  • trunk/test/integration/navigation_test.rb

    r1184 r1207  
    144144    get 'http://test.host/project29.html' 
    145145    assert_redirected_to 'http://test.host/en/project29.html' 
     146    follow_redirect! 
     147    assert_response :success 
     148  end 
     149   
     150  def test_url_without_lang_redirect_keeps_url_params 
     151    get 'http://test.host/project29.html?page=2' 
     152    assert_redirected_to 'http://test.host/en/project29.html?page=2' 
     153    follow_redirect! 
     154    assert_response :success 
     155  end 
     156   
     157  def test_url_bad_class_redirect_keeps_url_params 
     158    get 'http://test.host/en/page29.html?page=2' 
     159    assert_redirected_to 'http://test.host/en/project29.html?page=2' 
    146160    follow_redirect! 
    147161    assert_response :success