switch sites ability, some cleanup

This commit is contained in:
Kyle Drake 2014-10-07 12:48:04 -07:00
parent d0970cdf9e
commit 21b0848030
4 changed files with 70 additions and 45 deletions

27
app.rb
View file

@ -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

View file

@ -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

View file

@ -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>

View file

@ -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">