mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
switch sites ability, some cleanup
This commit is contained in:
parent
d0970cdf9e
commit
21b0848030
4 changed files with 70 additions and 45 deletions
27
app.rb
27
app.rb
|
@ -548,11 +548,6 @@ get '/dashboard' do
|
||||||
erb :'dashboard'
|
erb :'dashboard'
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/signin' do
|
|
||||||
dashboard_if_signed_in
|
|
||||||
erb :'signin'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/settings/?' do
|
get '/settings/?' do
|
||||||
require_login
|
require_login
|
||||||
@site = parent_site
|
@site = parent_site
|
||||||
|
@ -779,7 +774,7 @@ end
|
||||||
post '/settings/change_email' do
|
post '/settings/change_email' do
|
||||||
require_login
|
require_login
|
||||||
|
|
||||||
if params[:email] == current_site.email
|
if params[:email] == parent_site.email
|
||||||
flash[:error] = 'You are already using this email address for this account.'
|
flash[:error] = 'You are already using this email address for this account.'
|
||||||
redirect '/settings#email'
|
redirect '/settings#email'
|
||||||
end
|
end
|
||||||
|
@ -870,6 +865,11 @@ get '/password_reset_confirm' do
|
||||||
redirect '/'
|
redirect '/'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get '/signin/?' do
|
||||||
|
dashboard_if_signed_in
|
||||||
|
erb :'signin'
|
||||||
|
end
|
||||||
|
|
||||||
post '/signin' do
|
post '/signin' do
|
||||||
dashboard_if_signed_in
|
dashboard_if_signed_in
|
||||||
|
|
||||||
|
@ -897,6 +897,21 @@ get '/signout' do
|
||||||
redirect '/'
|
redirect '/'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get '/signin/:username' do
|
||||||
|
require_login
|
||||||
|
@site = Site[username: params[:username]]
|
||||||
|
|
||||||
|
not_found if @site.nil?
|
||||||
|
|
||||||
|
if @site.owned_by? current_site
|
||||||
|
session[:id] = @site.id
|
||||||
|
redirect request.referrer
|
||||||
|
end
|
||||||
|
|
||||||
|
flash[:error] = 'You do not have permission to switch to this site.'
|
||||||
|
redirect request.referrer
|
||||||
|
end
|
||||||
|
|
||||||
get '/about' do
|
get '/about' do
|
||||||
erb :'about'
|
erb :'about'
|
||||||
end
|
end
|
||||||
|
|
|
@ -148,24 +148,33 @@ class Site < Sequel::Model
|
||||||
many_to_one :parent, :key => :parent_site_id, :class => self
|
many_to_one :parent, :key => :parent_site_id, :class => self
|
||||||
one_to_many :children, :key => :parent_site_id, :class => self
|
one_to_many :children, :key => :parent_site_id, :class => self
|
||||||
|
|
||||||
def account_sites
|
def account_sites_dataset
|
||||||
if parent?
|
Site.where(Sequel.|({id: owner.id}, {parent_site_id: owner.id}))
|
||||||
sites = [self] + children
|
end
|
||||||
else
|
|
||||||
sites = [parent] + parent.children
|
|
||||||
end
|
|
||||||
|
|
||||||
sites.compact
|
def account_sites
|
||||||
|
account_sites_dataset.all
|
||||||
|
end
|
||||||
|
|
||||||
|
def other_sites_dataset
|
||||||
|
account_sites_dataset.exclude(id: self.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def other_sites
|
def other_sites
|
||||||
if parent?
|
account_sites_dataset.exclude(id: self.id).all
|
||||||
return children
|
end
|
||||||
else
|
|
||||||
sites = ([parent] + children)
|
def account_sites_events_dataset
|
||||||
sites.delete self
|
ids = account_sites_dataset.select(:id).all.collect {|s| s.id}
|
||||||
sites
|
Event.where(id: ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def owner
|
||||||
|
parent? ? self : parent
|
||||||
|
end
|
||||||
|
|
||||||
|
def owned_by?(site)
|
||||||
|
!account_sites_dataset.select(:id).where(id: site.id).first.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
@ -204,14 +213,6 @@ class Site < Sequel::Model
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def owner
|
|
||||||
parent? ? self : parent
|
|
||||||
end
|
|
||||||
|
|
||||||
def owned_by?(site)
|
|
||||||
account_sites.include? site
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_following?(site)
|
def is_following?(site)
|
||||||
followings_dataset.select(:id).filter(site_id: site.id).first ? true : false
|
followings_dataset.select(:id).filter(site_id: site.id).first ? true : false
|
||||||
end
|
end
|
||||||
|
@ -242,7 +243,14 @@ class Site < Sequel::Model
|
||||||
end
|
end
|
||||||
|
|
||||||
def valid_password?(plaintext)
|
def valid_password?(plaintext)
|
||||||
BCrypt::Password.new(values[:password]) == plaintext
|
valid = BCrypt::Password.new(owner.values[:password]) == plaintext
|
||||||
|
|
||||||
|
if !valid?
|
||||||
|
return false if values[:password].nil?
|
||||||
|
valid = BCrypt::Password.new(values[:password]) == plaintext
|
||||||
|
end
|
||||||
|
|
||||||
|
valid
|
||||||
end
|
end
|
||||||
|
|
||||||
def password=(plaintext)
|
def password=(plaintext)
|
||||||
|
@ -353,18 +361,18 @@ class Site < Sequel::Model
|
||||||
=end
|
=end
|
||||||
|
|
||||||
def commenting_allowed?
|
def commenting_allowed?
|
||||||
return true if commenting_allowed
|
return true if owner.commenting_allowed
|
||||||
|
|
||||||
if supporter?
|
if owner.supporter?
|
||||||
set commenting_allowed: true
|
set commenting_allowed: true
|
||||||
save_changes validate: false
|
save_changes validate: false
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
if events_dataset.exclude(site_change_id: nil).count >= COMMENTING_ALLOWED_UPDATED_COUNT &&
|
if account_sites_events_dataset.exclude(site_change_id: nil).count >= COMMENTING_ALLOWED_UPDATED_COUNT &&
|
||||||
created_at < Time.now - 604800
|
created_at < Time.now - 604800
|
||||||
set commenting_allowed: true
|
owner.set commenting_allowed: true
|
||||||
save_changes validate: false
|
owner.save_changes validate: false
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -39,16 +39,18 @@
|
||||||
<%= current_site.username %> <b class="caret"></b>
|
<%= current_site.username %> <b class="caret"></b>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu pull-left">
|
<ul class="dropdown-menu pull-left">
|
||||||
<li class="dropdown-submenu pull-left">
|
<% if current_site.other_sites_dataset.count > 0 %>
|
||||||
<a tabindex="-1" href="#">Change Site</a>
|
<li class="dropdown-submenu pull-left">
|
||||||
<ul class="dropdown-menu">
|
<a tabindex="-1" href="#">Switch Site</a>
|
||||||
<% current_site.other_sites.each do |site| %>
|
<ul class="dropdown-menu">
|
||||||
<li>
|
<% current_site.other_sites_dataset.select(:username).all.each do |site| %>
|
||||||
<a href="#"><%= site.username %></a><br>
|
<li>
|
||||||
</li>
|
<a href="/signin/<%= site.username %>"><%= site.username %></a><br>
|
||||||
<% end %>
|
</li>
|
||||||
</ul>
|
<% end %>
|
||||||
</li>
|
</ul>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
<li>
|
<li>
|
||||||
<a href="/dashboard" class="sign-In">Edit Site</a>
|
<a href="/dashboard" class="sign-In">Edit Site</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<form method="POST" action="/settings/change_email">
|
<form method="POST" action="/settings/change_email">
|
||||||
<%== csrf_token_input_html %>
|
<%== csrf_token_input_html %>
|
||||||
|
|
||||||
<p>Current Email: <strong><%= current_site.email %></strong></p>
|
<p>Current Email: <strong><%= parent_site.email %></strong></p>
|
||||||
<p>New Email:</p>
|
<p>New Email:</p>
|
||||||
<input class="input-Area" name="email" type="text">
|
<input class="input-Area" name="email" type="text">
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue