Commit 1c6df8e0 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Improved profile & team member show

parent fea64946
...@@ -358,12 +358,15 @@ img.lil_av { ...@@ -358,12 +358,15 @@ img.lil_av {
top: 3px; top: 3px;
} }
.media-grid { .profile_avatar_holder {
h3, h2 , h4 {
&.media_h {
padding-left:10px;
float:left; float:left;
} width:90px;
height:90px;
margin-right:20px;
img {
width:90px;
height:90px;
background:#eee;
} }
} }
......
...@@ -5,13 +5,19 @@ class User < ActiveRecord::Base ...@@ -5,13 +5,19 @@ class User < ActiveRecord::Base
:recoverable, :rememberable, :trackable, :validatable, :omniauthable :recoverable, :rememberable, :trackable, :validatable, :omniauthable
# Setup accessible (or protected) attributes for your model # Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, attr_accessible :email, :password, :password_confirmation, :remember_me, :bio,
:name, :projects_limit, :skype, :linkedin, :twitter, :dark_scheme, :theme_id :name, :projects_limit, :skype, :linkedin, :twitter, :dark_scheme, :theme_id
has_many :users_projects, :dependent => :destroy has_many :users_projects, :dependent => :destroy
has_many :projects, :through => :users_projects has_many :projects, :through => :users_projects
has_many :my_own_projects, :class_name => "Project", :foreign_key => :owner_id has_many :my_own_projects, :class_name => "Project", :foreign_key => :owner_id
has_many :keys, :dependent => :destroy has_many :keys, :dependent => :destroy
has_many :recent_events,
:class_name => "Event",
:foreign_key => :author_id,
:order => "id DESC"
has_many :issues, has_many :issues,
:foreign_key => :author_id, :foreign_key => :author_id,
:dependent => :destroy :dependent => :destroy
...@@ -38,6 +44,7 @@ class User < ActiveRecord::Base ...@@ -38,6 +44,7 @@ class User < ActiveRecord::Base
:presence => true, :presence => true,
:numericality => {:greater_than_or_equal_to => 0} :numericality => {:greater_than_or_equal_to => 0}
validates :bio, :length => { :within => 0..255 }
before_create :ensure_authentication_token before_create :ensure_authentication_token
alias_attribute :private_token, :authentication_token alias_attribute :private_token, :authentication_token
......
...@@ -34,6 +34,15 @@ ...@@ -34,6 +34,15 @@
%br %br
= link_to new_project_path, :class => "btn" do = link_to new_project_path, :class => "btn" do
New Project » New Project »
- else
%hr
%div
You've reached project limit for your account.
You cannot create new projects.
.link_holder
%br
= link_to profile_path, :class => "btn" do
Your Profile »
.span10.left= render "dashboard/projects_feed", :projects => @active_projects .span10.left= render "dashboard/projects_feed", :projects => @active_projects
- if @last_push - if @last_push
.padded.prepend-top-20 .padded.prepend-top-20
......
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
<br/> <br/>
<%= f.submit "Sign in", :class => "primary btn" %> <%= f.submit "Sign in", :class => "primary btn" %>
<div class="right"> <%= render :partial => "devise/shared/links" %></div> <div class="right"> <%= render :partial => "devise/shared/links" %></div>
<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<hr/>
<%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" %><br />
<% end -%>
<% end -%>
<% if ldap_enable? -%> <% if ldap_enable? -%>
<p><%= link_to "via LDAP", user_omniauth_authorize_path(:ldap)%></p> <p><%= link_to "via LDAP", user_omniauth_authorize_path(:ldap)%></p>
<% end -%> <% end -%>
......
...@@ -17,9 +17,3 @@ ...@@ -17,9 +17,3 @@
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br /> <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
<% end -%> <% end -%>
<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
<% end -%>
<% end -%>
.media-grid .row
= link_to "#" do .span10
= image_tag gravatar_icon(@user.email, 90), :class => "thumbnail" .profile_avatar_holder
%h3.media_h = image_tag gravatar_icon(@user.email, 90), :class => "styled_image"
%h3
= @user.name = @user.name
%br %br
%small %small
= @user.email = @user.email
.right .span6.right
%p.alert-message.block-message You can change your avatar at gravatar.com %div
%div
%h5.cgray
Personal projects:
%span.right
%span= current_user.my_own_projects.count
of
%span= current_user.projects_limit
%h5.cgray
SSH public keys:
%span.right
%span= current_user.keys.count
%hr %hr
= form_for @user, :url => profile_update_path, :method => :put do |f| = form_for @user, :url => profile_update_path, :method => :put do |f|
...@@ -18,23 +29,39 @@ ...@@ -18,23 +29,39 @@
%ul %ul
- @user.errors.full_messages.each do |msg| - @user.errors.full_messages.each do |msg|
%li= msg %li= msg
.row
.span9
.clearfix .clearfix
= f.label :name = f.label :name
.input= f.text_field :name .input
= f.text_field :name, :class => "xlarge"
%span.help-block Enter youre name, so people you know can recognize you.
.clearfix .clearfix
= f.label :email = f.label :email
.input= f.text_field :email .input
= f.text_field :email, :class => "xlarge"
%span.help-block We also use email for avatar detection
.clearfix .clearfix
= f.label :skype = f.label :skype
.input= f.text_field :skype .input= f.text_field :skype, :class => "xlarge"
.clearfix .clearfix
= f.label :linkedin = f.label :linkedin
.input= f.text_field :linkedin .input= f.text_field :linkedin, :class => "xlarge"
.clearfix .clearfix
= f.label :twitter = f.label :twitter
.input= f.text_field :twitter .input= f.text_field :twitter, :class => "xlarge"
.clearfix
= f.label :bio
.input
= f.text_area :bio, :rows => 6, :class => "xlarge", :maxlength => 250
%span.help-block About yourself in fewer than 250 characters.
.span7.right
%p.alert-message.block-message
%strong Tip:
You can change your avatar at gravatar.com
.actions .actions
= f.submit 'Save', :class => "primary btn" = f.submit 'Save', :class => "primary btn"
-#= link_to "New project", new_project_path, :class => "btn small padded"
-#= link_to "New public key", new_key_path, :class => "btn small"
- allow_admin = can? current_user, :admin_project, @project - allow_admin = can? current_user, :admin_project, @project
- user = @team_member.user - user = @team_member.user
.media-grid
= link_to "#" do .row
= image_tag gravatar_icon(user.email, 60), :class => "thumbnail", :width => 60 .span8
%h3.media_h .profile_avatar_holder
= image_tag gravatar_icon(user.email, 90), :class => "styled_image"
%h3
= user.name = user.name
%br %br
%small= user.email %small
= user.email
.back_link %br
.back_link
%br
= link_to team_project_path(@project), :class => "" do = link_to team_project_path(@project), :class => "" do
&larr; To team list &larr; To team list
%br .span8.right
%table.zebra-striped.borders %div
%tr %div
%td Name %h5.cgray
%td= user.name Member since:
%span.right
%tr = @team_member.created_at.stamp("Aug 21, 2011")
%td Email %h5.cgray
%td= user.email Project Access:
%small (#{link_to "read more", help_permissions_path, :class => "vlink"})
%tr %span.right
%td Member since
%td= @team_member.created_at.stamp("Aug 21, 2011")
%tr
%td
Project Access
(#{link_to "read more", help_permissions_path, :class => "vlink"})
%td
= form_for(@team_member, :as => :team_member, :url => project_team_member_path(@project, @team_member)) do |f| = form_for(@team_member, :as => :team_member, :url => project_team_member_path(@project, @team_member)) do |f|
= f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, :class => "project-access-select", :disabled => !allow_admin = f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, :class => "project-access-select", :disabled => !allow_admin
%div.prepend-top-20
- unless user.skype.empty? - unless user.skype.empty?
%tr %p
%td Skype: %b Skype:
%td= user.skype = user.skype
- unless user.linkedin.empty? - unless user.linkedin.empty?
%tr %p
%td LinkedIn: %b LinkedIn:
%td= user.linkedin = user.linkedin
- unless user.twitter.empty? - unless user.twitter.empty?
%tr %p
%td Twitter: %b Twitter:
%td= user.twitter = user.twitter
- unless user.bio.empty?
%p
%b Bio:
= user.bio
= render user.recent_events.limit(3)
- if can? current_user, :admin_project, @project - if can? current_user, :admin_project, @project
.actions .actions
......
class AddBioFieldToUser < ActiveRecord::Migration
def change
add_column :users, :bio, :string, :null => true
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20120315132931) do ActiveRecord::Schema.define(:version => 20120323221339) do
create_table "events", :force => true do |t| create_table "events", :force => true do |t|
t.string "target_type" t.string "target_type"
...@@ -155,6 +155,7 @@ ActiveRecord::Schema.define(:version => 20120315132931) do ...@@ -155,6 +155,7 @@ ActiveRecord::Schema.define(:version => 20120315132931) do
t.string "authentication_token" t.string "authentication_token"
t.boolean "dark_scheme", :default => false, :null => false t.boolean "dark_scheme", :default => false, :null => false
t.integer "theme_id", :default => 1, :null => false t.integer "theme_id", :default => 1, :null => false
t.string "bio"
end end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true add_index "users", ["email"], :name => "index_users_on_email", :unique => true
......
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