Methods in WikiReferences now restrict themselves (properly) to the current Web.
Fix from Jason Blevins.
This commit is contained in:
commit
8c0b3b3d2c
|
@ -22,7 +22,7 @@ class RevisionSweeper < ActionController::Caching::Sweeper
|
||||||
|
|
||||||
def expire_caches(page)
|
def expire_caches(page)
|
||||||
expire_cached_summary_pages(page.web)
|
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) }
|
pages_to_expire.each { |page_name| expire_cached_page(page.web, page_name) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -378,7 +378,7 @@ class WikiController < ApplicationController
|
||||||
@category = @params['category']
|
@category = @params['category']
|
||||||
if @category
|
if @category
|
||||||
@set_name = "category '#{@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)
|
@pages_in_category = PageSet.new(@web, pages)
|
||||||
else
|
else
|
||||||
# no category specified, return all pages of the web
|
# no category specified, return all pages of the web
|
||||||
|
|
|
@ -31,17 +31,17 @@ class PageSet < Array
|
||||||
end
|
end
|
||||||
|
|
||||||
def pages_that_reference(page_name)
|
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) }
|
self.select { |page| all_referring_pages.include?(page.name) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def pages_that_link_to(page_name)
|
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) }
|
self.select { |page| all_linking_pages.include?(page.name) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def pages_that_include(page_name)
|
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) }
|
self.select { |page| all_including_pages.include?(page.name) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -11,38 +11,44 @@ class WikiReference < ActiveRecord::Base
|
||||||
belongs_to :page
|
belongs_to :page
|
||||||
validates_inclusion_of :link_type, :in => [LINKED_PAGE, WANTED_PAGE, INCLUDED_PAGE, CATEGORY, AUTHOR, FILE, WANTED_FILE]
|
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)
|
def self.link_type(web, page_name)
|
||||||
web.has_page?(page_name) ? LINKED_PAGE : WANTED_PAGE
|
web.has_page?(page_name) ? LINKED_PAGE : WANTED_PAGE
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.pages_that_reference(page_name)
|
def self.pages_that_reference(web, page_name)
|
||||||
query = 'SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id ' +
|
query = 'SELECT name FROM pages JOIN wiki_references ' +
|
||||||
|
'ON pages.id = wiki_references.page_id ' +
|
||||||
'WHERE wiki_references.referenced_name = ? ' +
|
'WHERE wiki_references.referenced_name = ? ' +
|
||||||
"AND wiki_references.link_type in ('#{LINKED_PAGE}', '#{WANTED_PAGE}', '#{INCLUDED_PAGE}')"
|
"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'] }
|
names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.pages_that_link_to(page_name)
|
def self.pages_that_link_to(web, page_name)
|
||||||
query = 'SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id ' +
|
query = 'SELECT name FROM pages JOIN wiki_references ' +
|
||||||
|
'ON pages.id = wiki_references.page_id ' +
|
||||||
'WHERE wiki_references.referenced_name = ? ' +
|
'WHERE wiki_references.referenced_name = ? ' +
|
||||||
"AND wiki_references.link_type in ('#{LINKED_PAGE}', '#{WANTED_PAGE}')"
|
"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'] }
|
names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.pages_that_include(page_name)
|
def self.pages_that_include(web, page_name)
|
||||||
query = 'SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id ' +
|
query = 'SELECT name FROM pages JOIN wiki_references ' +
|
||||||
|
'ON pages.id = wiki_references.page_id ' +
|
||||||
'WHERE wiki_references.referenced_name = ? ' +
|
'WHERE wiki_references.referenced_name = ? ' +
|
||||||
"AND wiki_references.link_type = '#{INCLUDED_PAGE}'"
|
"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'] }
|
names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.pages_in_category(category)
|
def self.pages_in_category(web, category)
|
||||||
query =
|
query =
|
||||||
"SELECT name FROM pages JOIN wiki_references ON pages.id = wiki_references.page_id " +
|
"SELECT name FROM pages JOIN wiki_references " +
|
||||||
|
"ON pages.id = wiki_references.page_id " +
|
||||||
"WHERE wiki_references.referenced_name = ? " +
|
"WHERE wiki_references.referenced_name = ? " +
|
||||||
"AND wiki_references.link_type = '#{CATEGORY}'"
|
"AND wiki_references.link_type = '#{CATEGORY}' " +
|
||||||
|
"AND pages.web_id = '#{web.id}'"
|
||||||
names = connection.select_all(sanitize_sql([query, category])).map { |row| row['name'] }
|
names = connection.select_all(sanitize_sql([query, category])).map { |row| row['name'] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<%= link_to 'PDF', {:web => @web.address, :action => 'pdf', :id => @page.name},
|
<%= link_to 'PDF', {:web => @web.address, :action => 'pdf', :id => @page.name},
|
||||||
{:id => 'view_pdf'} %>
|
{:id => 'view_pdf'} %>
|
||||||
<% end %>
|
<% 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},
|
<%= link_to 'S5', {:web => @web.address, :action => 's5', :id => @page.name},
|
||||||
{:id => 'view_S5'} %>
|
{:id => 'view_S5'} %>
|
||||||
|
|
Loading…
Reference in a new issue