diff --git a/.gitignore b/.gitignore index d9e773be..4d898869 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ public/site_thumbnails public/sites public/site_screenshots *.swp +files/map.txt diff --git a/app.rb b/app.rb index da9770c2..1774496b 100644 --- a/app.rb +++ b/app.rb @@ -85,7 +85,7 @@ get '/site/:username.rss' do |username| site.to_rss.to_xml end -get '/site/:username' do |username| +get '/site/:username/?' do |username| site = Site[username: username] not_found if site.nil? if current_site && (site.is_blocking?(current_site) || current_site.is_blocking?(site)) @@ -531,6 +531,11 @@ post '/change_email' do current_site.email_confirmation_token = SecureRandom.hex 3 current_site.email_confirmed = false + if params[:email] == current_site.email + current_site.errors.add :email, 'You are already using this email address for this account.' + halt erb(:settings) + end + if current_site.valid? current_site.save_changes send_confirmation_email @@ -1146,6 +1151,14 @@ post '/site/:username/block' do |username| end end +post '/site/delete' do + require_login + if current_site.username != params[:username] + current_site.errors.add :username, 'Could not delete site, site name did not match.' + halt erb(:settings) + end +end + def require_admin redirect '/' unless signed_in? && current_site.is_admin end diff --git a/models/site.rb b/models/site.rb index de366a55..5a1af946 100644 --- a/models/site.rb +++ b/models/site.rb @@ -209,16 +209,45 @@ class Site < Sequel::Model File.read file_path(filename) end + def before_destroy + raise 'not finished' + DB.transaction { + remove_all_tags + profile_comments.destroy + profile_commentings.destroy + follows.destroy + followings.destroy + #tips.destroy + #tippings.destroy + #blocks.destroy + #blockings.destroy + #reports.destroy + #reportings.destroy + #stats.destroy + #events.destroy + #site_changes.destroy + # TODO FIND THE REST, ASSOCIATE THEM PROPERLY!!! + } + end + + def delete_site! + raise 'not finished' + DB.transaction { + destroy + FileUtils.mv files_path, File.join(PUBLIC_ROOT, 'deleted_sites', username) + } + end + def ban! if username.nil? || username.empty? raise 'username is missing' end DB.transaction { - FileUtils.mv files_path, File.join(PUBLIC_ROOT, 'banned_sites', username) self.is_banned = true self.updated_at = Time.now save(validate: false) + FileUtils.mv files_path, File.join(PUBLIC_ROOT, 'banned_sites', username) } site_files.file_list.collect {|f| f.filename}.each do |f| @@ -453,9 +482,7 @@ class Site < Sequel::Model # Check for existing email email_check = self.class.select(:id).filter(email: values[:email]).first - if email_check && email_check.id == self.id - errors.add :email, 'You are already using this email address for this account.' - elsif email_check && email_check.id != self.id + if email_check && email_check.id != self.id errors.add :email, 'This email address already exists on Neocities, please use your existing account instead of creating a new one.' end @@ -602,7 +629,7 @@ class Site < Sequel::Model end def latest_events(current_page=1, limit=10) - events_dataset.order(:created_at.desc).paginate(current_page, limit) + events_dataset.exclude(site_id: self.id).order(:created_at.desc).paginate(current_page, limit) end def news_feed(current_page=1, limit=10) diff --git a/views/not_found.erb b/views/not_found.erb index 8f461c4b..29ec9b89 100644 --- a/views/not_found.erb +++ b/views/not_found.erb @@ -17,7 +17,9 @@
<% if request.referer %> - Go Back +You should update your site!
+ <%== erb :'_news', layout: false, locals: {site: @site, events: @latest_events} %> <% end %> <% else %>