user tree

This commit is contained in:
joshua stein 2012-07-07 19:47:13 -05:00
parent 9f4e7db9a8
commit 543f5c12bc
4 changed files with 67 additions and 0 deletions

View file

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

View file

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

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

View file

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