mirror of
https://github.com/neocities/neocities.git
synced 2025-07-21 10:06:00 +02:00
better file create
This commit is contained in:
parent
85fc6d6e39
commit
93b5b94f14
6 changed files with 97 additions and 22 deletions
|
@ -9,32 +9,67 @@ get '/site_files/new' do
|
|||
redirect '/site_files/new_page'
|
||||
end
|
||||
|
||||
post '/site_files/create_page' do
|
||||
post '/site_files/create' do
|
||||
require_login
|
||||
@errors = []
|
||||
|
||||
params[:pagefilename].gsub!(/[^a-zA-Z0-9_\-.]/, '')
|
||||
params[:pagefilename].gsub!(/\.html$/i, '')
|
||||
filename = params[:pagefilename] || params[:filename]
|
||||
|
||||
if params[:pagefilename].nil? || params[:pagefilename].strip.empty?
|
||||
@errors << 'You must provide a file name.'
|
||||
halt erb(:'site_files/new_page')
|
||||
filename.gsub!(/[^a-zA-Z0-9_\-.]/, '')
|
||||
|
||||
redirect_uri = '/dashboard'
|
||||
redirect_uri += "?dir=#{Rack::Utils.escape params[:dir]}" if params[:dir]
|
||||
|
||||
if filename.nil? || filename.strip.empty?
|
||||
flash[:error] = 'You must provide a file name.'
|
||||
redirect redirect_uri
|
||||
end
|
||||
|
||||
name = "#{params[:pagefilename]}.html"
|
||||
name = "#{filename}"
|
||||
|
||||
name = "#{params[:dir]}/#{name}" if params[:dir]
|
||||
|
||||
name = current_site.scrubbed_path name
|
||||
|
||||
if current_site.file_exists?(name)
|
||||
@errors << %{Web page "#{name}" already exists! Choose another name.}
|
||||
halt erb(:'site_files/new_page')
|
||||
flash[:error] = %{Web page "#{name}" already exists! Choose another name.}
|
||||
redirect redirect_uri
|
||||
end
|
||||
|
||||
current_site.install_new_html_file name
|
||||
extname = File.extname name
|
||||
|
||||
unless extname.match /^\.#{Site::EDITABLE_FILE_EXT}/i
|
||||
flash[:error] = "Must be an text editable file type (#{Site::VALID_EDITABLE_EXTENSIONS.join(', ')})."
|
||||
redirect redirect_uri
|
||||
end
|
||||
|
||||
site_file = current_site.site_files_dataset.where(path: name).first
|
||||
|
||||
if site_file
|
||||
flash[:error] = 'File already exists, cannot create.'
|
||||
redirect redirect_uri
|
||||
end
|
||||
|
||||
if extname.match(/^\.html|^\.htm/i)
|
||||
current_site.install_new_html_file name
|
||||
else
|
||||
file_path = current_site.files_path(name)
|
||||
FileUtils.touch file_path
|
||||
File.chmod 0640, file_path
|
||||
|
||||
site_file ||= SiteFile.new site_id: current_site.id, path: name
|
||||
|
||||
site_file.set_all(
|
||||
size: 0,
|
||||
sha1_hash: Digest::SHA1.hexdigest(''),
|
||||
updated_at: Time.now
|
||||
)
|
||||
site_file.save
|
||||
end
|
||||
|
||||
flash[:success] = %{#{name} was created! <a style="color: #FFFFFF; text-decoration: underline" href="/site_files/text_editor/#{name}">Click here to edit it</a>.}
|
||||
|
||||
redirect params[:dir] ? "/dashboard?dir=#{Rack::Utils.escape params[:dir]}" : '/dashboard'
|
||||
redirect redirect_uri
|
||||
end
|
||||
|
||||
def file_upload_response(error=nil)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue