Commit 152a6b86 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'calendar-via-ajax' into 'master'

User contribution calendar via ajax

See merge request !1451
parents c9f18d45 08582f15
class UsersController < ApplicationController class UsersController < ApplicationController
skip_before_filter :authenticate_user!, only: [:show, :activities] skip_before_filter :authenticate_user!
before_filter :set_user
layout :determine_layout layout :determine_layout
def show def show
@user = User.find_by_username!(params[:username])
unless current_user || @user.public_profile?
return authenticate_user!
end
# Projects user can view # Projects user can view
visible_projects = ProjectsFinder.new.execute(current_user) visible_projects = ProjectsFinder.new.execute(current_user)
authorized_projects_ids = visible_projects.pluck(:id) authorized_projects_ids = visible_projects.pluck(:id)
...@@ -25,6 +20,15 @@ class UsersController < ApplicationController ...@@ -25,6 +20,15 @@ class UsersController < ApplicationController
@title = @user.name @title = @user.name
respond_to do |format|
format.html
format.atom { render layout: false }
end
end
def calendar
visible_projects = ProjectsFinder.new.execute(current_user)
# Get user repositories and collect timestamps for commits # Get user repositories and collect timestamps for commits
user_repositories = visible_projects.map(&:repository) user_repositories = visible_projects.map(&:repository)
calendar = Gitlab::CommitsCalendar.new(user_repositories, @user) calendar = Gitlab::CommitsCalendar.new(user_repositories, @user)
...@@ -32,10 +36,7 @@ class UsersController < ApplicationController ...@@ -32,10 +36,7 @@ class UsersController < ApplicationController
@starting_year = (Time.now - 1.year).strftime("%Y") @starting_year = (Time.now - 1.year).strftime("%Y")
@starting_month = Date.today.strftime("%m").to_i @starting_month = Date.today.strftime("%m").to_i
respond_to do |format| render 'calendar', layout: false
format.html
format.atom { render layout: false }
end
end end
def determine_layout def determine_layout
...@@ -45,4 +46,14 @@ class UsersController < ApplicationController ...@@ -45,4 +46,14 @@ class UsersController < ApplicationController
'public_users' 'public_users'
end end
end end
private
def set_user
@user = User.find_by_username!(params[:username])
unless current_user || @user.public_profile?
return authenticate_user!
end
end
end end
%h4 Calendar:
#cal-heatmap.calendar #cal-heatmap.calendar
:javascript :javascript
new calendar( new calendar(
......
...@@ -19,8 +19,9 @@ ...@@ -19,8 +19,9 @@
= render 'groups', groups: @groups = render 'groups', groups: @groups
%hr %hr
%h4 Calendar: .user-calendar
%div= render 'calendar' %h4.center.light
%i.fa.fa-spinner.fa-spin
%hr %hr
%h4 %h4
User Activity: User Activity:
...@@ -36,3 +37,8 @@ ...@@ -36,3 +37,8 @@
= render 'profile', user: @user = render 'profile', user: @user
- if @projects.present? - if @projects.present?
= render 'projects', projects: @projects = render 'projects', projects: @projects
:coffeescript
$ ->
$(".user-calendar").load("#{user_calendar_path}")
...@@ -157,10 +157,9 @@ Gitlab::Application.routes.draw do ...@@ -157,10 +157,9 @@ Gitlab::Application.routes.draw do
end end
end end
# route for commits used by the cal-heatmap get 'u/:username/calendar' => 'users#calendar', as: :user_calendar,
get 'u/:username/activities' => 'users#activities', as: :user_activities, constraints: { username: /(?:[^.]|\.(?!atom$))+/, format: /atom/ }
constraints: { username: /(?:[^.]|\.(?!atom$))+/, format: /atom/ },
via: :get
get '/u/:username' => 'users#show', as: :user, get '/u/:username' => 'users#show', as: :user,
constraints: { username: /(?:[^.]|\.(?!atom$))+/, format: /atom/ } constraints: { username: /(?:[^.]|\.(?!atom$))+/, format: /atom/ }
......
...@@ -9,18 +9,18 @@ describe UsersController do ...@@ -9,18 +9,18 @@ describe UsersController do
describe "GET #show" do describe "GET #show" do
render_views render_views
before do
get :show, username: user.username
end
it "renders the show template" do it "renders the show template" do
get :show, username: user.username
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(response).to render_template("show") expect(response).to render_template("show")
end end
end
describe "GET #calendar" do
it "renders calendar" do it "renders calendar" do
controller.prepend_view_path 'app/views/users' get :calendar, username: user.username
expect(response).to render_template("_calendar") expect(response).to render_template("calendar")
end end
end 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