Index: lib/redmine/wiki_formatting/macros.rb =================================================================== --- lib/redmine/wiki_formatting/macros.rb (revision 24052) +++ lib/redmine/wiki_formatting/macros.rb (working copy) @@ -220,20 +220,23 @@ "{{recent_pages}} -- displays pages updated within the last 7 days\n" + "{{recent_pages(days=3)}} -- displays pages updated within the last 3 days\n" + "{{recent_pages(limit=5)}} -- limits the maximum number of pages to display to 5\n" + - "{{recent_pages(time=true)}} -- displays pages updated within the last 7 days with updated time" + "{{recent_pages(time=true)}} -- displays pages updated within the last 7 days with updated time\n" + + "{{recent_pages(project=identifier)}} -- displays pages updated within the last 7 days from a specific project" macro :recent_pages do |obj, args| - return '' if @project.nil? - return '' unless User.current.allowed_to?(:view_wiki_pages, @project) - - args, options = extract_macro_options(args, :days, :limit, :time) + args, options = extract_macro_options(args, :days, :limit, :time, :project) days_to_list = (options[:days].presence || 7).to_i limit = options[:limit].to_i if options[:limit].present? is_show_time = options[:time].to_s == 'true' + project = Project.find_by_identifier(options[:project].to_s) if options[:project].present? + project = @project if project.nil? + return '' if project.nil? + return '' unless User.current.allowed_to?(:view_wiki_pages, project) + pages = WikiPage. joins(:content, :wiki). - where(["#{Wiki.table_name}.project_id = ? AND #{WikiContent.table_name}.updated_on >= ?", @project.id, days_to_list.days.ago]). + where(["#{Wiki.table_name}.project_id = ? AND #{WikiContent.table_name}.updated_on >= ?", project.id, days_to_list.days.ago]). order("#{WikiContent.table_name}.updated_on desc, id"). limit(limit) @@ -241,7 +244,7 @@ pages.each do |page| concat( tag.li do - html = link_to(h(page.pretty_title), project_wiki_page_path(@project, page.title)) + html = link_to(h(page.pretty_title), project_wiki_page_path(project, page.title)) html << " (#{time_ago_in_words(page.content.updated_on)})" if is_show_time html end Index: test/unit/lib/redmine/wiki_formatting/macros_test.rb =================================================================== --- test/unit/lib/redmine/wiki_formatting/macros_test.rb (revision 24052) +++ test/unit/lib/redmine/wiki_formatting/macros_test.rb (working copy) @@ -566,4 +566,21 @@ end end end + + def test_recent_pages_macro_with_project_option + @project = Project.find(1) + freeze_time do + WikiContent.update_all(updated_on: Time.current) + @project.wiki.pages.each_with_index do |page, i| + page.content.update_attribute(:updated_on, (i + 1).days.ago) + end + + with_settings :text_formatting => 'textile' do + result = textilizable('{{recent_pages(time=true, days=3, project=' + @project.identifier + ')}}') + assert_select_in result, 'ul>li', :count => 3 + assert_select_in result, 'ul>li:first-of-type', :text => 'Another page (1 day)' + assert_select_in result, 'ul>li:last-of-type', :text => 'Child 1 1 (3 days)' + end + end + end end