diff --git a/app/controllers/revision_sweeper.rb b/app/controllers/revision_sweeper.rb index 1db2d2c6..ba3d6faa 100644 --- a/app/controllers/revision_sweeper.rb +++ b/app/controllers/revision_sweeper.rb @@ -22,7 +22,7 @@ class RevisionSweeper < ActionController::Caching::Sweeper def expire_caches(page) expire_cached_summary_pages(page.web) - pages_to_expire = ([page.name] + WikiReference.pages_that_reference(page.name)).uniq + pages_to_expire = ([page.name] + WikiReference.pages_that_reference(page.web, page.name)).uniq pages_to_expire.each { |page_name| expire_cached_page(page.web, page_name) } end diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 3832986f..adb10ff1 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -378,7 +378,7 @@ class WikiController < ApplicationController @category = @params['category'] if @category @set_name = "category '#{@category}'" - pages = WikiReference.pages_in_category(@category).sort.map { |page_name| @web.page(page_name) } + pages = WikiReference.pages_in_category(@web, @category).sort.map { |page_name| @web.page(page_name) } @pages_in_category = PageSet.new(@web, pages) else # no category specified, return all pages of the web diff --git a/app/models/page_set.rb b/app/models/page_set.rb index 318bca30..ac2c7caf 100644 --- a/app/models/page_set.rb +++ b/app/models/page_set.rb @@ -31,17 +31,17 @@ class PageSet < Array end def pages_that_reference(page_name) - all_referring_pages = WikiReference.pages_that_reference(page_name) + all_referring_pages = WikiReference.pages_that_reference(@web, page_name) self.select { |page| all_referring_pages.include?(page.name) } end def pages_that_link_to(page_name) - all_linking_pages = WikiReference.pages_that_link_to(page_name) + all_linking_pages = WikiReference.pages_that_link_to(@web, page_name) self.select { |page| all_linking_pages.include?(page.name) } end def pages_that_include(page_name) - all_including_pages = WikiReference.pages_that_include(page_name) + all_including_pages = WikiReference.pages_that_include(@web, page_name) self.select { |page| all_including_pages.include?(page.name) } end diff --git a/app/models/wiki_reference.rb b/app/models/wiki_reference.rb index 9f125532..9bcb7557 100644 --- a/app/models/wiki_reference.rb +++ b/app/models/wiki_reference.rb @@ -11,38 +11,44 @@ class WikiReference < ActiveRecord::Base belongs_to :page validates_inclusion_of :link_type, :in => [LINKED_PAGE, WANTED_PAGE, INCLUDED_PAGE, CATEGORY, AUTHOR, FILE, WANTED_FILE] - # FIXME all finders below MUST restrict their results to pages belonging to a particular web - def self.link_type(web, page_name) web.has_page?(page_name) ? LINKED_PAGE : WANTED_PAGE end - def self.pages_that_reference(page_name) - query = 'SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id ' + - 'WHERE wiki_references.referenced_name = ? ' + - "AND wiki_references.link_type in ('#{LINKED_PAGE}', '#{WANTED_PAGE}', '#{INCLUDED_PAGE}')" + def self.pages_that_reference(web, page_name) + query = 'SELECT name FROM pages JOIN wiki_references ' + + 'ON pages.id = wiki_references.page_id ' + + 'WHERE wiki_references.referenced_name = ? ' + + "AND wiki_references.link_type in ('#{LINKED_PAGE}', '#{WANTED_PAGE}', '#{INCLUDED_PAGE}') " + + "AND pages.web_id = '#{web.id}'" names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } end - def self.pages_that_link_to(page_name) - query = 'SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id ' + - 'WHERE wiki_references.referenced_name = ? ' + - "AND wiki_references.link_type in ('#{LINKED_PAGE}', '#{WANTED_PAGE}')" + def self.pages_that_link_to(web, page_name) + query = 'SELECT name FROM pages JOIN wiki_references ' + + 'ON pages.id = wiki_references.page_id ' + + 'WHERE wiki_references.referenced_name = ? ' + + "AND wiki_references.link_type in ('#{LINKED_PAGE}','#{WANTED_PAGE}') " + + "AND pages.web_id = '#{web.id}'" + names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } + end + + def self.pages_that_include(web, page_name) + query = 'SELECT name FROM pages JOIN wiki_references ' + + 'ON pages.id = wiki_references.page_id ' + + 'WHERE wiki_references.referenced_name = ? ' + + "AND wiki_references.link_type = '#{INCLUDED_PAGE}' " + + "AND pages.web_id = '#{web.id}'" names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } end - def self.pages_that_include(page_name) - query = 'SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id ' + - 'WHERE wiki_references.referenced_name = ? ' + - "AND wiki_references.link_type = '#{INCLUDED_PAGE}'" - names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } - end - - def self.pages_in_category(category) + def self.pages_in_category(web, category) query = - "SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id " + - "WHERE wiki_references.referenced_name = ? " + - "AND wiki_references.link_type = '#{CATEGORY}'" + "SELECT name FROM pages JOIN wiki_references " + + "ON pages.id = wiki_references.page_id " + + "WHERE wiki_references.referenced_name = ? " + + "AND wiki_references.link_type = '#{CATEGORY}' " + + "AND pages.web_id = '#{web.id}'" names = connection.select_all(sanitize_sql([query, category])).map { |row| row['name'] } end diff --git a/app/views/wiki/page.rhtml b/app/views/wiki/page.rhtml index 60805768..9a488a4e 100644 --- a/app/views/wiki/page.rhtml +++ b/app/views/wiki/page.rhtml @@ -44,7 +44,7 @@ <%= link_to 'PDF', {:web => @web.address, :action => 'pdf', :id => @page.name}, {:id => 'view_pdf'} %> <% end %> - <% if WikiReference.pages_in_category('S5-slideshow').map.include?(@page.name) %> + <% if WikiReference.pages_in_category(@web, 'S5-slideshow').map.include?(@page.name) %> | <%= link_to 'S5', {:web => @web.address, :action => 's5', :id => @page.name}, {:id => 'view_S5'} %>