Commit 485c5199 authored by gitlabhq's avatar gitlabhq

user dashboard

parent 267bd606
class DashboardController < ApplicationController class DashboardController < ApplicationController
def index def index
@projects = current_user.projects.all @projects = current_user.projects.all
@active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse
end end
end end
module DashboardHelper module DashboardHelper
def path_to_object(project, object)
case object.class.name.to_s
when "Issue" then project_issues_path(project, project.issues.find(object.id))
when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first)
else "#"
end
end
end end
...@@ -119,6 +119,26 @@ class Project < ActiveRecord::Base ...@@ -119,6 +119,26 @@ class Project < ActiveRecord::Base
repo rescue false repo rescue false
end end
def last_activity
updates(1).first
rescue
nil
end
def last_activity_date
last_activity.try(:created_at)
end
def updates(n = 3)
[
fresh_commits(n),
issues.last(n),
notes.fresh.limit(n)
].compact.flatten.sort do |x, y|
y.created_at <=> x.created_at
end[0..n]
end
def commit(commit_id = nil) def commit(commit_id = nil)
if commit_id if commit_id
repo.commits(commit_id).first repo.commits(commit_id).first
...@@ -131,16 +151,16 @@ class Project < ActiveRecord::Base ...@@ -131,16 +151,16 @@ class Project < ActiveRecord::Base
@heads ||= repo.heads @heads ||= repo.heads
end end
def fresh_commits def fresh_commits(n = 10)
commits = heads.map do |h| commits = heads.map do |h|
repo.commits(h.name, 10) repo.commits(h.name, n)
end.flatten.uniq { |c| c.id } end.flatten.uniq { |c| c.id }
commits.sort! do |x, y| commits.sort! do |x, y|
y.committed_date <=> x.committed_date y.committed_date <=> x.committed_date
end end
commits[0..10] commits[0..n]
end end
def commits_since(date) def commits_since(date)
......
timeline #dashboard-content.dashboard-content.content
%aside
%h4
%a.button-small.button-green{:href => ""} New Repository
Your Repositories
%ol.project-list
- @projects.each do |project|
%li
%a{:href => "#"}
%span.arrow
%span.project-name= project.name
%span.time
%strong Last activity:
= project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
#news-feed.news-feed
%h2.icon
%span>
Dashboard
- @active_projects.each do |project|
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
%h3= project.name
.data
- project.updates.each do |update|
%a.project-update{:href => path_to_object(project, update)}
%img{:src => "http://placehold.it/40x40"}
%span.update-title [#{update.class.name}] added a matcher that helps debugging matching problems
%span.update-author
%strong= update.author.name
authored
= time_ago_in_words(update.created_at)
ago
%br
/ .project-update
/ .project-updates
/ #news-feed
/ #dashboard-content
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
</div> </div>
<div class="right"> <div class="right">
<%= link_to truncate(@project.name, :length => 20), project_path(@project), :class => "current button" if @project && !@project.new_record? %> <%= link_to truncate(@project.name, :length => 20), project_path(@project), :class => "current button" if @project && !@project.new_record? %>
<%= link_to 'Dashboard', dashboard_path, :class => current_page?(dashboard_path) ? "current button" : "button" %>
<%= link_to 'Projects', projects_path, :class => current_page?(projects_path) ? "current button" : "button" %> <%= link_to 'Projects', projects_path, :class => current_page?(projects_path) ? "current button" : "button" %>
<%= link_to('Admin', admin_root_path, :class => admin_namespace? ? "current button" : "button" ) if current_user.is_admin? %> <%= link_to('Admin', admin_root_path, :class => admin_namespace? ? "current button" : "button" ) if current_user.is_admin? %>
<%= link_to profile_path, :class => ((controller.controller_name == "keys" || controller.controller_name == "profile") ? "current button" : "button") do %> <%= link_to profile_path, :class => ((controller.controller_name == "keys" || controller.controller_name == "profile") ? "current button" : "button") do %>
......
...@@ -15,6 +15,7 @@ Gitlab::Application.routes.draw do ...@@ -15,6 +15,7 @@ Gitlab::Application.routes.draw do
put "profile/password", :to => "profile#password_update" put "profile/password", :to => "profile#password_update"
put "profile/edit", :to => "profile#social_update" put "profile/edit", :to => "profile#social_update"
get "profile", :to => "profile#show" get "profile", :to => "profile#show"
get "dashboard", :to => "dashboard#index"
#get "profile/:id", :to => "profile#show" #get "profile/:id", :to => "profile#show"
resources :projects, :only => [:new, :create, :index] resources :projects, :only => [:new, :create, :index]
......
...@@ -8,4 +8,8 @@ module CommitExt ...@@ -8,4 +8,8 @@ module CommitExt
rescue rescue
"-- invalid encoding for commit message" "-- invalid encoding for commit message"
end end
def created_at
committed_date
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment