Move Files When Renaming Web
Renaming a web should move the corresponding subdirectory of webs/ . Otherwise, links to uploaded files break.
This commit is contained in:
parent
a705709f9a
commit
601331b508
|
@ -27,6 +27,7 @@ class Wiki
|
||||||
if not (web = Web.find_by_address(old_address))
|
if not (web = Web.find_by_address(old_address))
|
||||||
raise Instiki::ValidationError.new("Web with address '#{old_address}' does not exist")
|
raise Instiki::ValidationError.new("Web with address '#{old_address}' does not exist")
|
||||||
end
|
end
|
||||||
|
old_files_path = web.files_path
|
||||||
|
|
||||||
web.update_attributes(:address => new_address, :name => name, :markup => markup, :color => color,
|
web.update_attributes(:address => new_address, :name => name, :markup => markup, :color => color,
|
||||||
:additional_style => additional_style, :safe_mode => safe_mode, :password => password, :published => published,
|
:additional_style => additional_style, :safe_mode => safe_mode, :password => password, :published => published,
|
||||||
|
@ -34,6 +35,19 @@ class Wiki
|
||||||
@webs = nil
|
@webs = nil
|
||||||
raise Instiki::ValidationError.new("There is already a web with address '#{new_address}'") unless web.errors.on(:address).nil?
|
raise Instiki::ValidationError.new("There is already a web with address '#{new_address}'") unless web.errors.on(:address).nil?
|
||||||
web
|
web
|
||||||
|
move_files(old_files_path, web.files_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def move_files(old_path, new_path)
|
||||||
|
return if new_path == old_path
|
||||||
|
default_path = Rails.root.join("webs", "files")
|
||||||
|
FileUtils.rmdir(new_path)
|
||||||
|
if [old_path, new_path].include? default_path
|
||||||
|
File.rename(old_path, new_path)
|
||||||
|
FileUtils.rmdir(old_path.parent) unless old_path == default_path
|
||||||
|
else
|
||||||
|
File.rename(old_path.parent, new_path.parent)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def read_page(web_address, page_name)
|
def read_page(web_address, page_name)
|
||||||
|
|
|
@ -71,7 +71,8 @@
|
||||||
Stylesheet tweaks >></a>
|
Stylesheet tweaks >></a>
|
||||||
<em>
|
<em>
|
||||||
- add or change styles used by this web; styles defined here take precedence over
|
- add or change styles used by this web; styles defined here take precedence over
|
||||||
instiki.css. Hint: View HTML source of a page you want to style to find ID names on individual
|
instiki.css.<br/>
|
||||||
|
Hint: View HTML source of a page you want to style to find ID names on individual
|
||||||
tags.</em>
|
tags.</em>
|
||||||
<br/>
|
<br/>
|
||||||
<textarea id="additionalStyle" class="disableAutoComplete" cols="50" rows="20"
|
<textarea id="additionalStyle" class="disableAutoComplete" cols="50" rows="20"
|
||||||
|
@ -96,7 +97,7 @@
|
||||||
<div class="help">
|
<div class="help">
|
||||||
You can turn on a read-only version of this web that's accessible even when the regular web
|
You can turn on a read-only version of this web that's accessible even when the regular web
|
||||||
is password protected.
|
is password protected.
|
||||||
The published version is accessible through URLs like /wiki/published/HomePage.
|
The published version is accessible through URLs like /<%= @web.address %>/published/HomePage.
|
||||||
</div>
|
</div>
|
||||||
<div class="inputBox">
|
<div class="inputBox">
|
||||||
<input type="checkbox" id="published" name="published" class="disableAutoComplete" <%= 'checked="checked"' if @web.published? %> />
|
<input type="checkbox" id="published" name="published" class="disableAutoComplete" <%= 'checked="checked"' if @web.published? %> />
|
||||||
|
|
|
@ -25,6 +25,7 @@ class AdminControllerTest < ActionController::TestCase
|
||||||
@elephant = pages(:elephant)
|
@elephant = pages(:elephant)
|
||||||
@web = webs(:test_wiki)
|
@web = webs(:test_wiki)
|
||||||
@home = @page = pages(:home_page)
|
@home = @page = pages(:home_page)
|
||||||
|
FileUtils.rm_rf("#{RAILS_ROOT}/webs/renamed_wiki1")
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_create_system_form_displayed
|
def test_create_system_form_displayed
|
||||||
|
@ -116,6 +117,7 @@ class AdminControllerTest < ActionController::TestCase
|
||||||
|
|
||||||
def test_edit_web_form_submitted
|
def test_edit_web_form_submitted
|
||||||
@wiki.system.update_attribute(:password, 'pswd')
|
@wiki.system.update_attribute(:password, 'pswd')
|
||||||
|
@web.save
|
||||||
|
|
||||||
process('edit_web', 'system_password' => 'pswd',
|
process('edit_web', 'system_password' => 'pswd',
|
||||||
'web' => 'wiki1', 'address' => 'renamed_wiki1', 'name' => 'Renamed Wiki1',
|
'web' => 'wiki1', 'address' => 'renamed_wiki1', 'name' => 'Renamed Wiki1',
|
||||||
|
@ -137,10 +139,13 @@ class AdminControllerTest < ActionController::TestCase
|
||||||
assert @web.count_pages?
|
assert @web.count_pages?
|
||||||
assert @web.allow_uploads?
|
assert @web.allow_uploads?
|
||||||
assert_equal 300, @web.max_upload_size
|
assert_equal 300, @web.max_upload_size
|
||||||
|
assert File.directory? Rails.root.join("webs", "renamed_wiki1", "files")
|
||||||
|
assert !File.exist?(Rails.root.join("webs", "wiki1"))
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_edit_web_web_password_mismatch
|
def test_edit_web_web_password_mismatch
|
||||||
@wiki.system.update_attribute(:password, 'pswd')
|
@wiki.system.update_attribute(:password, 'pswd')
|
||||||
|
@web.save
|
||||||
|
|
||||||
process('edit_web', 'system_password' => 'pswd',
|
process('edit_web', 'system_password' => 'pswd',
|
||||||
'web' => 'wiki1', 'address' => 'renamed_wiki1', 'name' => 'Renamed Wiki1',
|
'web' => 'wiki1', 'address' => 'renamed_wiki1', 'name' => 'Renamed Wiki1',
|
||||||
|
@ -151,10 +156,13 @@ class AdminControllerTest < ActionController::TestCase
|
||||||
|
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert @response.has_template_object?('error')
|
assert @response.has_template_object?('error')
|
||||||
|
assert File.directory? Rails.root.join("webs", "wiki1", "files")
|
||||||
|
assert !File.exist?(Rails.root.join("webs", "renamed_wiki1"))
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_edit_web_opposite_values
|
def test_edit_web_opposite_values
|
||||||
@wiki.system.update_attribute(:password, 'pswd')
|
@wiki.system.update_attribute(:password, 'pswd')
|
||||||
|
@web.save
|
||||||
|
|
||||||
process('edit_web', 'system_password' => 'pswd',
|
process('edit_web', 'system_password' => 'pswd',
|
||||||
'web' => 'wiki1', 'address' => 'renamed_wiki1', 'name' => 'Renamed Wiki1',
|
'web' => 'wiki1', 'address' => 'renamed_wiki1', 'name' => 'Renamed Wiki1',
|
||||||
|
@ -170,6 +178,8 @@ class AdminControllerTest < ActionController::TestCase
|
||||||
assert !@web.brackets_only?
|
assert !@web.brackets_only?
|
||||||
assert !@web.count_pages?
|
assert !@web.count_pages?
|
||||||
assert !@web.allow_uploads?
|
assert !@web.allow_uploads?
|
||||||
|
assert File.directory? Rails.root.join("webs", "renamed_wiki1", "files")
|
||||||
|
assert !File.exist?(Rails.root.join("webs", "wiki1"))
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_edit_web_wrong_password
|
def test_edit_web_wrong_password
|
||||||
|
|
|
@ -24,7 +24,7 @@ class FileControllerTest < ActionController::TestCase
|
||||||
@wiki = Wiki.new
|
@wiki = Wiki.new
|
||||||
WikiFile.delete_all
|
WikiFile.delete_all
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
FileUtils.rm_rf("#{RAILS_ROOT}/webs/wiki1/files")
|
FileUtils.rm_rf("#{RAILS_ROOT}/webs/wiki1")
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_file_upload_form
|
def test_file_upload_form
|
||||||
|
|
Loading…
Reference in a new issue