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;
|
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 */
|
/* data tables */
|
||||||
|
|
||||||
table.data caption {
|
table.data caption {
|
||||||
|
|
|
@ -3,4 +3,32 @@ class UsersController < ApplicationController
|
||||||
@showing_user = User.find_by_username!(params[:id])
|
@showing_user = User.find_by_username!(params[:id])
|
||||||
@page_title = "User: #{@showing_user.username}"
|
@page_title = "User: #{@showing_user.username}"
|
||||||
end
|
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
|
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/comments/:comment_short_id" => "stories#show_comment"
|
||||||
get "/s/:id/(:title)" => "stories#show"
|
get "/s/:id/(:title)" => "stories#show"
|
||||||
|
|
||||||
|
get "/u" => "users#tree"
|
||||||
get "/u/:id" => "users#show"
|
get "/u/:id" => "users#show"
|
||||||
|
|
||||||
get "/rss" => "home#index", :format => "rss"
|
get "/rss" => "home#index", :format => "rss"
|
||||||
|
|
Loading…
Reference in a new issue