haru/redmine_wiki_extensions

View on GitHub
lib/wiki_extensions_recent_macro.rb

Summary

Maintainability
A
0 mins
Test Coverage
# Wiki Extensions plugin for Redmine
# Copyright (C) 2009-2012  Haruyuki Iida
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

module WikiExtensionsRecentMacro
  Redmine::WikiFormatting::Macros.register do
    desc "Displays a list of pages that were changed recently. " + "'\n\n" +
      " !{{recent}}" + "'\n" +
      " !{{recent(number_of_days)}}"
    macro :recent do |obj, args|
      page = obj.page
      return nil unless page
      project = page.project
      return nil unless project
      days = 5
      days = args[0].strip.to_i if args.length > 0

      return nil if days < 1      

      pages = WikiPage.includes(:content).where([" #{WikiPage.table_name}.wiki_id = ? and #{WikiContent.table_name}.updated_on > ?", page.wiki_id, Date.today - days])
                                  .order("#{WikiContent.table_name}.updated_on desc")
      o = '<div class="wiki_extensions_recent">'
      date = nil
      pages.each {|page|
        content = page.content
        updated_on = Date.new(content.updated_on.year, content.updated_on.month, content.updated_on.day)
        if date != updated_on
          date = updated_on
          o << "<b>" + format_date(date) + "</b><br/>"
        end
        o << link_to(content.page.pretty_title, :controller => 'wiki', :action => 'show', :project_id => content.page.project, :id => content.page.title)
        o << '<br/>'
      }
      o << '</div>'
      return o.html_safe
    end
  end
end