user tree
This commit is contained in:
parent
9f4e7db9a8
commit
543f5c12bc
|
@ -584,6 +584,21 @@ div.comment_form_container, div.comment_reply {
|
|||
max-width: 700px;
|
||||
}
|
||||
|
||||
ul.user_tree {
|
||||
color: #aaa;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
ul.user_tree li {
|
||||
margin-left: 0.5em;
|
||||
padding-left: 1em;
|
||||
}
|
||||
ul.user_tree ul.user_tree li {
|
||||
border-left: 1px solid #aaa;
|
||||
}
|
||||
|
||||
/* data tables */
|
||||
|
||||
table.data caption {
|
||||
|
|
|
@ -3,4 +3,32 @@ class UsersController < ApplicationController
|
|||
@showing_user = User.find_by_username!(params[:id])
|
||||
@page_title = "User: #{@showing_user.username}"
|
||||
end
|
||||
|
||||
def tree
|
||||
parents = {}
|
||||
karmas = {}
|
||||
User.all.each do |u|
|
||||
(parents[u.invited_by_user_id.to_i] ||= []).push u
|
||||
end
|
||||
|
||||
Keystore.find(:all, :conditions => "`key` like 'user:%:karma'").each do |k|
|
||||
karmas[k.key[/\d+/].to_i] = k.value
|
||||
end
|
||||
|
||||
@tree = []
|
||||
recursor = lambda{|user,level|
|
||||
if user
|
||||
@tree.push({ :level => level, :user_id => user.id,
|
||||
:username => user.username, :karma => karmas[user.id].to_i })
|
||||
end
|
||||
|
||||
# for each user that was invited by this one, recurse with it
|
||||
(parents[user ? user.id : 0] || []).each do |child|
|
||||
recursor.call(child, level + 1)
|
||||
end
|
||||
}
|
||||
recursor.call(nil, 0)
|
||||
|
||||
@tree
|
||||
end
|
||||
end
|
||||
|
|
22
app/views/users/tree.html.erb
Normal file
22
app/views/users/tree.html.erb
Normal file
|
@ -0,0 +1,22 @@
|
|||
<div class="box wide">
|
||||
<strong>User Tree</strong>
|
||||
<p>
|
||||
<% prev_level = 0 %>
|
||||
<% @tree.each do |u| %>
|
||||
<% if u[:level] > prev_level %>
|
||||
<ul class="user_tree">
|
||||
<% elsif u[:level] < prev_level %>
|
||||
<% (prev_level - u[:level]).times do %>
|
||||
</ul>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<li><a href="/u/<%= u[:username] %>"><%= u[:username] %></a>
|
||||
(<%= u[:karma] %>)
|
||||
|
||||
<% prev_level = u[:level] %>
|
||||
<% end %>
|
||||
<% prev_level.times do %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
|
@ -52,6 +52,8 @@ Lobsters::Application.routes.draw do
|
|||
|
||||
get "/s/:id/:title/comments/:comment_short_id" => "stories#show_comment"
|
||||
get "/s/:id/(:title)" => "stories#show"
|
||||
|
||||
get "/u" => "users#tree"
|
||||
get "/u/:id" => "users#show"
|
||||
|
||||
get "/rss" => "home#index", :format => "rss"
|
||||
|
|
Loading…
Reference in a new issue