houston-core 0.7.0 → 0.8.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +45 -45
- data/app/assets/javascripts/houston/app/models/ticket.coffee +7 -5
- data/app/assets/javascripts/houston/app/views/new_ticket_view.coffee +1 -21
- data/app/assets/javascripts/houston/core/handlebars_helpers.coffee +0 -6
- data/app/assets/stylesheets/houston/application/commit.scss +16 -0
- data/app/assets/stylesheets/houston/application/navigation.scss +1 -0
- data/app/assets/stylesheets/houston/application/new_ticket_view.scss +0 -4
- data/app/assets/stylesheets/houston/application/projects.css.scss +0 -14
- data/app/assets/stylesheets/houston/application/release_form.scss +1 -1
- data/app/assets/stylesheets/houston/application/teams.scss +68 -0
- data/app/assets/templates/tickets/index.hbs +0 -1
- data/app/controllers/github/pulls_controller.rb +1 -0
- data/app/controllers/project_tickets_controller.rb +1 -5
- data/app/controllers/projects_controller.rb +10 -12
- data/app/controllers/teams_controller.rb +60 -0
- data/app/controllers/users_controller.rb +12 -12
- data/app/helpers/commit_helper.rb +3 -5
- data/app/helpers/exposure_helper.rb +1 -1
- data/app/helpers/ticket_helper.rb +0 -13
- data/app/interactors/ticket_report.rb +0 -7
- data/app/mailers/project_notification.rb +2 -23
- data/app/mailers/view_mailer.rb +0 -1
- data/app/models/ability.rb +28 -19
- data/app/models/commit.rb +0 -4
- data/app/models/project.rb +14 -29
- data/app/models/release.rb +0 -18
- data/app/models/role.rb +0 -22
- data/app/models/team.rb +43 -0
- data/app/models/team_user.rb +68 -0
- data/app/models/ticket.rb +2 -22
- data/app/models/user.rb +21 -30
- data/app/views/devise/sessions/new.html.erb +9 -7
- data/app/views/layouts/_mobile_navigation.html.erb +5 -3
- data/app/views/layouts/_navigation.html.erb +11 -10
- data/app/views/layouts/_tester_bar.html.erb +1 -1
- data/app/views/layouts/application.html.erb +1 -2
- data/app/views/project_tickets/_tickets.html.erb +0 -1
- data/app/views/project_tickets/index.xls.erb +0 -35
- data/app/views/project_tickets/new.html.erb +1 -2
- data/app/views/projects/_form.html.erb +7 -12
- data/app/views/projects/index.html.erb +10 -17
- data/app/views/releases/_changelog.html.erb +11 -14
- data/app/views/teams/_form.html.erb +45 -0
- data/app/views/teams/edit.html.erb +8 -0
- data/app/views/teams/index.html.erb +62 -0
- data/app/views/teams/new.html.erb +7 -0
- data/app/views/users/_form.html.erb +2 -11
- data/app/views/users/index.html.erb +8 -20
- data/app/views/users/new.html.erb +1 -1
- data/config/initializers/inflections.rb +7 -6
- data/config/routes.rb +19 -17
- data/db/migrate/20160812233255_repurpose_users_role.rb +16 -0
- data/db/migrate/20160813001242_create_teams.rb +42 -0
- data/db/structure.sql +110 -116
- data/lib/houston/boot.rb +0 -1
- data/lib/houston/boot/configuration.rb +26 -11
- data/lib/houston/boot/events.rb +0 -4
- data/lib/houston/version.rb +1 -1
- data/templates/new-instance/config/abilities.rb +68 -51
- data/templates/new-instance/config/conversations/mentions/unfurl_tasks.rb +1 -1
- data/templates/new-instance/config/events/deploy/notify_deployer_when_finished.rb +24 -16
- data/templates/new-instance/config/events/tests/email_when_completed.rb +11 -0
- data/templates/new-instance/config/integrations/ldap.rb +4 -0
- data/templates/new-instance/config/main.rb +10 -17
- data/templates/new-module/test/fixtures/users.yml +1 -2
- data/test/acceptance/creating_a_release_test.rb +1 -1
- data/test/factories/project_factory.rb +1 -0
- data/test/factories/user_factory.rb +3 -1
- data/test/fixtures/teams.yml +2 -0
- data/test/fixtures/teams_users.yml +5 -0
- data/test/fixtures/users.yml +1 -2
- data/test/integration/ci_integration_test.rb +2 -2
- data/test/support/config.rb +3 -5
- data/test/unit/controllers/deploys_controller_test.rb +11 -5
- data/test/unit/controllers/users_controller_test.rb +46 -0
- data/test/unit/models/release_test.rb +0 -9
- data/test/unit/models/serializer_test.rb +0 -8
- data/test/unit/models/ticket_test.rb +0 -32
- metadata +21 -24
- data/app/assets/javascripts/houston/app/table_row_expander.coffee +0 -52
- data/app/assets/javascripts/houston/app/views/problems_view.coffee +0 -114
- data/app/assets/stylesheets/houston/application/follow_up.scss +0 -44
- data/app/controllers/project_exceptions_controller.rb +0 -36
- data/app/controllers/project_pretickets_controller.rb +0 -27
- data/app/mailers/deploy_notification.rb +0 -33
- data/app/models/antecedent.rb +0 -15
- data/app/models/ticket_antecedent.rb +0 -39
- data/app/models/value_statement.rb +0 -9
- data/app/presenters/problem_presenter.rb +0 -49
- data/app/presenters/tester_presenter.rb +0 -15
- data/app/views/project_notification/follow_up.html.erb +0 -26
- data/app/views/project_pretickets/show.html.erb +0 -49
- data/app/views/releases/_antecedents.html.erb +0 -12
- data/config/initializers/hard_coded_knowledge.rb +0 -141
- data/db/migrate/20130427223925_create_project_quotas.rb +0 -14
- data/db/migrate/20140506035755_create_value_statements.rb +0 -9
- data/lib/houston/boot/ticket_antecedent_serializer.rb +0 -21
- data/test/unit/models/ticket_antecedents_test.rb +0 -38
@@ -7,26 +7,28 @@
|
|
7
7
|
|
8
8
|
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:class => "form-horizontal"}) do |f| %>
|
9
9
|
<fieldset>
|
10
|
-
|
11
|
-
<div class="
|
12
|
-
<
|
10
|
+
<% if Houston.config.authentication_strategy_configuration[:instructions] %>
|
11
|
+
<div class="control-group">
|
12
|
+
<div class="controls">
|
13
|
+
<em><%= Houston.config.authentication_strategy_configuration[:instructions] %></em>
|
14
|
+
</div>
|
13
15
|
</div>
|
14
|
-
|
15
|
-
|
16
|
+
<% end %>
|
17
|
+
|
16
18
|
<div class="control-group">
|
17
19
|
<%= f.label :email, "Username or Email", :class => 'control-label' %>
|
18
20
|
<div class="controls">
|
19
21
|
<%= f.text_field :email, :class => 'text_field' %>
|
20
22
|
</div>
|
21
23
|
</div>
|
22
|
-
|
24
|
+
|
23
25
|
<div class="control-group">
|
24
26
|
<%= f.label :password, :class => 'control-label' %>
|
25
27
|
<div class="controls">
|
26
28
|
<%= f.password_field :password, :class => 'text_field' %>
|
27
29
|
</div>
|
28
30
|
</div>
|
29
|
-
|
31
|
+
|
30
32
|
<% if devise_mapping.rememberable? -%>
|
31
33
|
<div class="control-group">
|
32
34
|
<div class="controls remember-me">
|
@@ -25,9 +25,11 @@
|
|
25
25
|
|
26
26
|
<li class="divider-horizontal"></li>
|
27
27
|
|
28
|
-
<% if can?(:
|
29
|
-
|
30
|
-
<% end
|
28
|
+
<% if can?(:manage, Team) %>
|
29
|
+
<li><%= link_to "Teams", main_app.teams_path %></li>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
<li class="divider-horizontal"></li>
|
31
33
|
|
32
34
|
</ul>
|
33
35
|
</div>
|
@@ -5,14 +5,23 @@
|
|
5
5
|
<ul class="nav pull-right">
|
6
6
|
<% if current_user -%>
|
7
7
|
|
8
|
-
<% if can?(:
|
8
|
+
<% if can?(:read, User) || can?(:read, Team) || can?(:read, Project) || can?(:read, Action) %>
|
9
9
|
<li class="dropdown">
|
10
10
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> <b class="caret"></b></a>
|
11
11
|
<ul class="dropdown-menu">
|
12
|
-
<% if can?(:
|
12
|
+
<% if can?(:read, Team) %>
|
13
|
+
<li><%= link_to "Teams", main_app.teams_path %></li>
|
14
|
+
<% end %>
|
15
|
+
<% if can?(:read, Project) %>
|
16
|
+
<li><%= link_to "Projects", main_app.projects_path %></li>
|
17
|
+
<% end %>
|
18
|
+
<% if can?(:read, User) %>
|
13
19
|
<li><%= link_to "Users", main_app.users_path %></li>
|
14
20
|
<% end %>
|
15
21
|
<% if can?(:read, Action) %>
|
22
|
+
<% if can?(:read, User) || can?(:read, Team) || can?(:read, Project) %>
|
23
|
+
<li class="divider"></li>
|
24
|
+
<% end %>
|
16
25
|
<li><%= link_to "Actions", main_app.actions_path %></li>
|
17
26
|
<li><%= link_to "Running Actions", main_app.running_actions_path %></li>
|
18
27
|
<li><%= link_to "Triggers", main_app.triggers_path %></li>
|
@@ -35,15 +44,7 @@
|
|
35
44
|
<% end -%>
|
36
45
|
</ul>
|
37
46
|
<ul class="nav">
|
38
|
-
|
39
47
|
<% Houston.config.navigation.each do |navigation| %><%= render_navigation navigation %><% end %>
|
40
|
-
|
41
|
-
<li class="divider-vertical"></li>
|
42
|
-
|
43
|
-
<% if can?(:read, Project) -%>
|
44
|
-
<%= render_nav_link "Projects", main_app.projects_path, icon: "fa-archive" %>
|
45
|
-
<% end -%>
|
46
|
-
|
47
48
|
</ul>
|
48
49
|
</div>
|
49
50
|
</div>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div style="position: fixed; left: 0; right: 0; bottom: 0; height: 42px; line-height: 36px; background: black; padding-left: 4px; z-index: 100;">
|
2
2
|
<form action="/tester_bar/login_as">
|
3
|
-
<%= select_tag "email", options_for_select(User.unretired.map { |u| ["#{u.name} (#{u.role}
|
3
|
+
<%= select_tag "email", options_for_select(User.unretired.map { |u| [u.role == "Member" ? u.name : "#{u.name} (#{u.role})", u.email] }, current_user.try(:email)), :style => "margin-bottom: 0" %>
|
4
4
|
<button class="btn btn-primary" type="submit" title="Log in as any user">Login</button>
|
5
5
|
</form>
|
6
6
|
</div>
|
@@ -10,7 +10,6 @@
|
|
10
10
|
<td class="ticket-reporter"></td>
|
11
11
|
<th class="ticket-summary" data-attribute="summary">Summary</th>
|
12
12
|
<th class="ticket-milestone" data-attribute="milestone">Milestone</th>
|
13
|
-
<th class="ticket-antecedents" data-attribute="antecedents">Antecedents</th>
|
14
13
|
<th class="ticket-opened date sort-asc" data-attribute="openedAt">Opened</th>
|
15
14
|
<th class="ticket-closed date" data-attribute="closedAt">Closed</th>
|
16
15
|
<td class="table-margin"></td>
|
@@ -85,39 +85,4 @@
|
|
85
85
|
<ProtectScenarios>False</ProtectScenarios>
|
86
86
|
</WorksheetOptions>
|
87
87
|
</Worksheet>
|
88
|
-
<Worksheet ss:Name="Antecedents">
|
89
|
-
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="<%= 1 + @tickets.sum { |ticket| ticket.antecedents.length } %>" x:FullColumns="1"
|
90
|
-
x:FullRows="1" ss:DefaultColumnWidth="65" ss:DefaultRowHeight="15">
|
91
|
-
<Column ss:AutoFitWidth="0" ss:Width="100"/>
|
92
|
-
<Column ss:AutoFitWidth="0" ss:Width="75"/>
|
93
|
-
<Column ss:AutoFitWidth="0" ss:Width="75"/>
|
94
|
-
<Row ss:StyleID="s65">
|
95
|
-
<Cell><Data ss:Type="String">Ticket Number</Data></Cell>
|
96
|
-
<Cell><Data ss:Type="String">ID</Data></Cell>
|
97
|
-
<Cell><Data ss:Type="String">Kind</Data></Cell>
|
98
|
-
</Row>
|
99
|
-
<% @tickets.each do |ticket| %>
|
100
|
-
<% ticket.antecedents.each do |antecedent| %>
|
101
|
-
<Row>
|
102
|
-
<Cell><Data ss:Type="Number"><%= ticket.number %></Data></Cell>
|
103
|
-
<Cell><Data ss:Type="String"><%= antecedent.id %></Data></Cell>
|
104
|
-
<Cell><Data ss:Type="String"><%= antecedent.kind %></Data></Cell>
|
105
|
-
</Row>
|
106
|
-
<% end %>
|
107
|
-
<% end %>
|
108
|
-
</Table>
|
109
|
-
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
110
|
-
<PageLayoutZoom>0</PageLayoutZoom>
|
111
|
-
<Selected/>
|
112
|
-
<Panes>
|
113
|
-
<Pane>
|
114
|
-
<Number>3</Number>
|
115
|
-
<ActiveRow>1</ActiveRow>
|
116
|
-
<ActiveCol>2</ActiveCol>
|
117
|
-
</Pane>
|
118
|
-
</Panes>
|
119
|
-
<ProtectObjects>False</ProtectObjects>
|
120
|
-
<ProtectScenarios>False</ProtectScenarios>
|
121
|
-
</WorksheetOptions>
|
122
|
-
</Worksheet>
|
123
88
|
</Workbook>
|
@@ -14,6 +14,13 @@
|
|
14
14
|
</div>
|
15
15
|
</div>
|
16
16
|
|
17
|
+
<div class="control-group">
|
18
|
+
<%= f.label :team_id, :class => "control-label" %>
|
19
|
+
<div class="controls">
|
20
|
+
<%= f.select :team_id, [["", nil]] + Team.all.pluck(:name, :id), :class => "select_field" %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
|
17
24
|
<div class="control-group">
|
18
25
|
<%= f.label :color, :class => "control-label" %>
|
19
26
|
<div class="controls">
|
@@ -104,18 +111,6 @@
|
|
104
111
|
<% end %>
|
105
112
|
<% end %>
|
106
113
|
|
107
|
-
<hr />
|
108
|
-
|
109
|
-
<div class="control-group">
|
110
|
-
<%= f.label :roles, "Teammates", :class => "control-label" %>
|
111
|
-
<div class="controls changes-nested-editor">
|
112
|
-
<%= f.nested_editor_for :roles do |f| -%>
|
113
|
-
<%= f.select :user_id, [nil] + User.all.map { |user| [user.name, user.id] } %>
|
114
|
-
<%= f.select :name, [nil] + Houston.config.project_roles %>
|
115
|
-
<% end -%>
|
116
|
-
</div>
|
117
|
-
</div>
|
118
|
-
|
119
114
|
<div class="form-actions">
|
120
115
|
<%= f.submit nil, :class => "btn btn-primary" %>
|
121
116
|
<%= link_to "Cancel", projects_path, :class => "btn" %>
|
@@ -1,8 +1,6 @@
|
|
1
1
|
<% content_for :title do %>
|
2
2
|
<h1 class="project-banner space-below">
|
3
3
|
Projects
|
4
|
-
<%= link_to "New Project", new_project_path, :class => "btn btn-primary" if can?(:create, Project) %>
|
5
|
-
<%= link_to "Add Projects from GitHub", add_github_projects_path, :class => "btn btn-primary" if can?(:create, Project) %>
|
6
4
|
|
7
5
|
<%= render partial: "projects/keyboard_shortcuts" %>
|
8
6
|
</h1>
|
@@ -16,8 +14,7 @@
|
|
16
14
|
<td class="table-margin"></td>
|
17
15
|
<td class="project-feature-error"></td>
|
18
16
|
<th class="project-title sort-desc">Title</th>
|
19
|
-
<th class="project-
|
20
|
-
<th class="project-owners">Owners</th>
|
17
|
+
<th class="project-team">Team</th>
|
21
18
|
<% if current_user.developer? %>
|
22
19
|
<th class="project-last-commit">Last Commit</th>
|
23
20
|
<% KeyDependency.all.each do |dependency| %>
|
@@ -54,15 +51,10 @@
|
|
54
51
|
<%= link_to_if can?(:update, project), project.name, edit_project_path(project) %>
|
55
52
|
</td>
|
56
53
|
|
57
|
-
<td class="project-
|
58
|
-
|
54
|
+
<td class="project-team">
|
55
|
+
<%= project.team && project.team.name %>
|
59
56
|
</td>
|
60
57
|
|
61
|
-
<td class="project-owners project-participants">
|
62
|
-
<% project.owners.each do |owner| %><%= link_to avatar_for(owner), user_path(owner), :class => "project-owner project-participant", :rel => "tooltip", :title => owner.name, "data-placement" => "right" %><span class="hidden-text"><%= owner.first_name %></span><!-- so sort works --><% end %>
|
63
|
-
</td>
|
64
|
-
|
65
|
-
|
66
58
|
|
67
59
|
<% if current_user.developer? %>
|
68
60
|
|
@@ -127,13 +119,14 @@
|
|
127
119
|
|
128
120
|
<td class="project-following">
|
129
121
|
<% if current_user %>
|
130
|
-
<%
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
<%= button_to "Unfollow", project_unfollow_path(project), method: :delete, class: "btn" %>
|
122
|
+
<% if current_user.follows?(project) %>
|
123
|
+
<%= button_to project_unfollow_path(project), method: :delete, class: "btn-link" do %>
|
124
|
+
<i class="fa fa-star"/></i>
|
125
|
+
<% end %>
|
135
126
|
<% else %>
|
136
|
-
<%=
|
127
|
+
<%= button_to project_follow_path(project), method: :post, class: "btn-link" do %>
|
128
|
+
<i class="fa fa-star-o"/></i>
|
129
|
+
<% end %>
|
137
130
|
<% end %>
|
138
131
|
<% end %>
|
139
132
|
</td>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div id="<%= @release.project.slug %>_changelog" class="-houston-changelog">
|
2
|
-
|
2
|
+
|
3
3
|
<div class="-houston-changelog-day">
|
4
4
|
<h4>
|
5
5
|
<% if (defined?(draft) && draft) %>
|
@@ -11,38 +11,35 @@
|
|
11
11
|
<%= link_to "Edit", edit_release_path(@release) if can?(:update, @release) and !(defined?(draft) && draft) %>
|
12
12
|
</h4>
|
13
13
|
</div>
|
14
|
-
|
14
|
+
|
15
15
|
<%= div_for @release do %>
|
16
|
-
|
16
|
+
|
17
17
|
<% unless @release.message.blank? %>
|
18
18
|
<div class="release-message">
|
19
19
|
<%= mdown(@release.message) %>
|
20
20
|
</div>
|
21
21
|
<% end %>
|
22
|
-
|
22
|
+
|
23
23
|
<% if @release.release_changes.any? %>
|
24
24
|
<div class="release-changes">
|
25
25
|
<% ordered_by_tag(@release.release_changes).each do |change| %>
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
</div>
|
31
|
-
<% end %>
|
26
|
+
<div class="change">
|
27
|
+
<%= format_change_tag change.tag %>
|
28
|
+
<div class="change-summary"><%= format_change(change) %></div>
|
29
|
+
</div>
|
32
30
|
<% end %>
|
33
31
|
</div>
|
34
32
|
<% else %>
|
35
33
|
<div class="release-no-changes">No changes</div>
|
36
34
|
<% end %>
|
37
|
-
|
35
|
+
|
38
36
|
<% unless (defined?(draft) && draft) %>
|
39
37
|
<div class="release-detail">
|
40
38
|
<%= render partial: "releases/tickets", locals: {tickets: @release.tickets} if can?(:read, Ticket) %>
|
41
|
-
<%= render partial: "releases/antecedents", locals: {antecedents: @release.antecedents} if can?(:read, Ticket) %>
|
42
39
|
<%= render partial: "releases/commits", locals: {commits: @release.commits} if can?(:read, Commit) && !for_email? %>
|
43
40
|
</div>
|
44
41
|
<% end %>
|
45
|
-
|
42
|
+
|
46
43
|
<% end %>
|
47
|
-
|
44
|
+
|
48
45
|
</div>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<%= form_for @team, :html => { :class => "form-horizontal" } do |f| %>
|
2
|
+
<fieldset>
|
3
|
+
<div class="control-group">
|
4
|
+
<%= f.label :name, :class => "control-label" %>
|
5
|
+
<div class="controls">
|
6
|
+
<%= f.text_field :name, :class => "text_field" %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<hr />
|
11
|
+
|
12
|
+
<div class="control-group">
|
13
|
+
<%= f.label :roles, "Teammates", :class => "control-label" %>
|
14
|
+
<div class="controls changes-nested-editor">
|
15
|
+
<%= f.nested_editor_for :roles do |f| -%>
|
16
|
+
<%= f.select :user_id, [nil] + User.unretired.pluck("CONCAT(first_name, ' ', last_name)", :id) %>
|
17
|
+
<% Houston.config.roles.each do |role| %>
|
18
|
+
<% role_slug = role.downcase.gsub(" ", "_").pluralize %>
|
19
|
+
<label style="display: inline-block">
|
20
|
+
<input type="checkbox" name="team[roles_attributes][0][roles][]" value="<%= role %>" <%= "checked" if f.object.roles.member?(role) %> />
|
21
|
+
<%= role %>
|
22
|
+
</label>
|
23
|
+
<% end %>
|
24
|
+
<% end -%>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="form-actions">
|
29
|
+
<%= f.submit nil, :class => "btn btn-primary" %>
|
30
|
+
<%= link_to "Cancel", teams_path, :class => "btn" %>
|
31
|
+
</div>
|
32
|
+
</fieldset>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% content_for :javascripts do %>
|
36
|
+
<script type="text/javascript">
|
37
|
+
$(function() {
|
38
|
+
NestedEditorFor.init();
|
39
|
+
|
40
|
+
$(document.body).on('nested-editor.reset', function(e) {
|
41
|
+
$(e.target).find(':checkbox').prop('checked', false);
|
42
|
+
});
|
43
|
+
});
|
44
|
+
</script>
|
45
|
+
<% end %>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<% content_for :title do %>
|
2
|
+
<h1 class="project-banner space-below">
|
3
|
+
Teams
|
4
|
+
<%= link_to "New Team", new_team_path, :class => "btn btn-primary" if can?(:create, Team) %>
|
5
|
+
|
6
|
+
<%= render partial: "projects/keyboard_shortcuts" %>
|
7
|
+
</h1>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<div class="teams">
|
11
|
+
<% @teams.each do |team| %>
|
12
|
+
<div class="team-wrapper">
|
13
|
+
<div class="team">
|
14
|
+
<h3 class="team-name">
|
15
|
+
<%= link_to_if can?(:update, team), team.name, edit_team_path(team) %>
|
16
|
+
</h3>
|
17
|
+
<h6>Teammates</h6>
|
18
|
+
<ol class="team-members">
|
19
|
+
<% team.roles.sort_by { |role| Houston.config.roles.find_index { |r| role.roles.member?(r) } || 999 }.each do |role| %>
|
20
|
+
<li class="team-member">
|
21
|
+
<span class="user-avatar"><%= avatar_for(role.user, size: 32) %></span>
|
22
|
+
<span class="user-name">
|
23
|
+
<%= link_to user_path(role.user) do %>
|
24
|
+
<span class="first-name"><%= role.user.first_name %></span>
|
25
|
+
<span class="last-name"><%= role.user.last_name[0] %></span>
|
26
|
+
<% end %>
|
27
|
+
</span>
|
28
|
+
<span class="user-roles">
|
29
|
+
<%= role.roles.any? ? role.roles.join(", ") : "" %>
|
30
|
+
</span>
|
31
|
+
</li>
|
32
|
+
<% end %>
|
33
|
+
</ol>
|
34
|
+
<h6>Projects</h6>
|
35
|
+
|
36
|
+
<% if team.projects.any? %>
|
37
|
+
<ol class="team-projects">
|
38
|
+
<% team.projects.each do |project| %>
|
39
|
+
<li class="team-project">
|
40
|
+
<% if project.color %>
|
41
|
+
<b class="bubble <%= project.color %>" rel="tooltip" title="<%= project.color.titleize %>" data-tooltip-placement="right"></b>
|
42
|
+
<% else %>
|
43
|
+
<b class="bubble"></b>
|
44
|
+
<% end %>
|
45
|
+
<%= link_to project.name, teams_path(project: project.slug) %>
|
46
|
+
</li>
|
47
|
+
<% end %>
|
48
|
+
</ol>
|
49
|
+
<% else %>
|
50
|
+
<div class="team-projects-empty">No projects</div>
|
51
|
+
<% end %>
|
52
|
+
|
53
|
+
<% if can?(:create, team.projects.build) %>
|
54
|
+
<div class="team-projects-add">
|
55
|
+
<%= link_to "New Project", new_project_path(team), :class => "btn btn-mini btn-default" %>
|
56
|
+
<%= link_to "Add Projects from GitHub", add_github_projects_path(team), :class => "btn btn-mini btn-default" %>
|
57
|
+
</div>
|
58
|
+
<% end %>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
<% end %>
|
62
|
+
</div>
|