diff --git a/app/controllers/file_controller.rb b/app/controllers/file_controller.rb index 9e76935a..edad959e 100644 --- a/app/controllers/file_controller.rb +++ b/app/controllers/file_controller.rb @@ -18,6 +18,9 @@ class FileController < ApplicationController new_file = @web.wiki_files.create(params['file']) if new_file.valid? flash[:info] = "File '#{@file_name}' successfully uploaded" + WikiReference.pages_that_want_file(@web, @file_name).each do |page| + RevisionSweeper.expire_page(page) + end redirect_to(params['referring_page']) else # pass the file with errors back into the form diff --git a/app/controllers/revision_sweeper.rb b/app/controllers/revision_sweeper.rb index d5dac253..e603ed6d 100644 --- a/app/controllers/revision_sweeper.rb +++ b/app/controllers/revision_sweeper.rb @@ -25,6 +25,10 @@ class RevisionSweeper < ActionController::Caching::Sweeper end end + def self.expire_page(page) + new.expire_caches(page) + end + private def expire_caches(page) diff --git a/app/models/wiki_reference.rb b/app/models/wiki_reference.rb index d4d624aa..55d9d4f5 100644 --- a/app/models/wiki_reference.rb +++ b/app/models/wiki_reference.rb @@ -51,6 +51,15 @@ class WikiReference < ActiveRecord::Base names = connection.select_all(sanitize_sql([query, file_name])).map { |row| row['name'] } end + def self.pages_that_want_file(web, file_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 ('#{WANTED_FILE}') " + + "AND pages.web_id = '#{web.id}'" + names = connection.select_all(sanitize_sql([query, file_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 ' +