openproject-meeting 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/CHANGELOG.md +46 -0
- data/README.md +82 -0
- data/app/assets/images/meeting/agenda.png +0 -0
- data/app/assets/images/meeting/meeting.png +0 -0
- data/app/assets/images/meeting/minutes.png +0 -0
- data/app/assets/stylesheets/meeting/meeting.css.erb +39 -0
- data/app/controllers/meeting_agendas_controller.rb +33 -0
- data/app/controllers/meeting_contents_controller.rb +95 -0
- data/app/controllers/meeting_minutes_controller.rb +22 -0
- data/app/controllers/meetings_controller.rb +150 -0
- data/app/helpers/meeting_contents_helper.rb +68 -0
- data/app/helpers/meetings_helper.rb +16 -0
- data/app/mailers/meeting_mailer.rb +28 -0
- data/app/models/meeting.rb +163 -0
- data/app/models/meeting_agenda.rb +95 -0
- data/app/models/meeting_content.rb +67 -0
- data/app/models/meeting_minutes.rb +81 -0
- data/app/models/meeting_participant.rb +45 -0
- data/app/views/hooks/_activity_index_head.html.erb +13 -0
- data/app/views/meeting_contents/_form.html.erb +33 -0
- data/app/views/meeting_contents/_show.html.erb +40 -0
- data/app/views/meeting_contents/diff.html.erb +33 -0
- data/app/views/meeting_contents/history.html.erb +49 -0
- data/app/views/meeting_contents/show.html.erb +13 -0
- data/app/views/meeting_mailer/content_for_review.html.erb +23 -0
- data/app/views/meeting_mailer/content_for_review.text.erb +9 -0
- data/app/views/meetings/_form.html.erb +61 -0
- data/app/views/meetings/edit.html.erb +17 -0
- data/app/views/meetings/index.html.erb +51 -0
- data/app/views/meetings/new.html.erb +17 -0
- data/app/views/meetings/show.html.erb +48 -0
- data/app/views/shared/_meeting_header.html.erb +3 -0
- data/config/locales/de.yml +47 -0
- data/config/locales/en.yml +47 -0
- data/config/routes.rb +53 -0
- data/db/migrate/20110106210555_create_meetings.rb +29 -0
- data/db/migrate/20110106221214_create_meeting_contents.rb +29 -0
- data/db/migrate/20110106221946_create_meeting_content_versions.rb +20 -0
- data/db/migrate/20110108230721_create_meeting_participants.rb +30 -0
- data/db/migrate/20110224180804_add_lock_to_meeting_content.rb +24 -0
- data/db/migrate/20110819162852_create_initial_meeting_journals.rb +49 -0
- data/db/migrate/20111605171815_merge_meeting_content_versions_with_journals.rb +65 -0
- data/db/migrate/20130731151542_remove_meeting_role_id_from_meeting_participants.rb +20 -0
- data/lib/open_project/meeting.rb +16 -0
- data/lib/open_project/meeting/engine.rb +101 -0
- data/lib/open_project/meeting/hooks.rb +17 -0
- data/lib/open_project/meeting/patches/project_patch.rb +24 -0
- data/lib/open_project/meeting/version.rb +16 -0
- data/lib/openproject-meeting.rb +12 -0
- data/spec/controllers/meetings_controller_spec.rb +90 -0
- data/spec/factories/meeting_agenda_factory.rb +16 -0
- data/spec/factories/meeting_agenda_journal_factory.rb +18 -0
- data/spec/factories/meeting_factory.rb +18 -0
- data/spec/factories/meeting_minutes_factory.rb +16 -0
- data/spec/factories/meeting_minutes_journal_factory.rb +18 -0
- data/spec/factories/meeting_participant_factory.rb +17 -0
- data/spec/mailers/meeting_mailer_spec.rb +101 -0
- data/spec/models/meeting_agenda_journal_spec.rb +21 -0
- data/spec/models/meeting_agenda_spec.rb +52 -0
- data/spec/models/meeting_minutes_journal_spec.rb +21 -0
- data/spec/models/meeting_minutes_spec.rb +44 -0
- data/spec/models/meeting_spec.rb +168 -0
- data/spec/models/user_deletion_spec.rb +186 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/plugin_spec_helper.rb +47 -0
- metadata +158 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
class MeetingParticipant < ActiveRecord::Base
|
13
|
+
|
14
|
+
belongs_to :meeting
|
15
|
+
belongs_to :user
|
16
|
+
|
17
|
+
scope :invited, :conditions => {:invited => true}
|
18
|
+
scope :attended, :conditions => {:attended => true}
|
19
|
+
|
20
|
+
attr_accessible :email, :name, :invited, :attended, :user, :user_id, :meeting
|
21
|
+
|
22
|
+
User.before_destroy do |user|
|
23
|
+
MeetingParticipant.update_all ['user_id = ?', DeletedUser.first], ['user_id = ?', user.id]
|
24
|
+
end
|
25
|
+
|
26
|
+
def name
|
27
|
+
user.present? ? user.name : self.name
|
28
|
+
end
|
29
|
+
|
30
|
+
def mail
|
31
|
+
user.present? ? user.mail : self.mail
|
32
|
+
end
|
33
|
+
|
34
|
+
def <=>(participant)
|
35
|
+
self.to_s.downcase <=> participant.to_s.downcase
|
36
|
+
end
|
37
|
+
|
38
|
+
alias :to_s :name
|
39
|
+
|
40
|
+
def copy_attributes
|
41
|
+
#create a clean attribute set allowing to attach participants to different meetings
|
42
|
+
self.attributes.reject { |k,v| ['id','meeting_id','attended','created_at', 'updated_at'].include?(k)}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<%= stylesheet_link_tag 'meeting/meeting.css' %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<%= form_for content, :url => {:controller => '/' + content_type.pluralize, :action => 'update', :meeting_id => content.meeting}, :html => {:id => "#{content_type}_form", :method => :put} do |f| %>
|
14
|
+
<%= error_messages_for content_type %>
|
15
|
+
|
16
|
+
<p><%= f.text_area :text, :cols => 100, :rows => 25, :class => 'wiki-edit', :accesskey => accesskey(:edit) %></p>
|
17
|
+
<%= f.hidden_field :lock_version %>
|
18
|
+
<p><label for="<%= content_type %>_comment"><%= Meeting.human_attribute_name(:comments) %></label><br /><%= f.text_field :comment, :size => 120 %></p>
|
19
|
+
<p><%= submit_tag l(:button_save) %>
|
20
|
+
<%= link_to_remote l(:label_preview),
|
21
|
+
{:url => {:controller => '/' + content_type.pluralize, :action => 'preview', :meeting_id => content.meeting},
|
22
|
+
:method => :post,
|
23
|
+
:update => "#{content_type}_preview",
|
24
|
+
:with => "'text=' + encodeURIComponent($('#{content_type}_text').value)",
|
25
|
+
:complete => "Element.scrollTo('#{content_type}_preview')"
|
26
|
+
}, :accesskey => accesskey(:preview) %> |
|
27
|
+
<%= link_to l(:button_cancel), "#", :onclick => "$$('.show-#{content_type}').invoke('show'); $$('.edit-#{content_type}').invoke('hide'); return false;" %></p>
|
28
|
+
<%= wikitoolbar_for "#{content_type}_text" %>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<div id="<%= content_type %>_preview" class="wiki"></div>
|
32
|
+
|
33
|
+
<%= render :partial => 'shared/meeting_header' %>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<%
|
14
|
+
tab ||= locals[:tab_contents] if defined? locals
|
15
|
+
content, content_type = tab[:content], tab[:content_type] if tab && tab.present?
|
16
|
+
-%>
|
17
|
+
<div class="meeting_content <%= content_type %>">
|
18
|
+
<div class="contextual">
|
19
|
+
<%=raw meeting_content_context_menu content, content_type %>
|
20
|
+
</div>
|
21
|
+
<h2><%=l :"label_#{content_type}" %></h2>
|
22
|
+
|
23
|
+
<% if can_edit_meeting_content?(content, content_type) -%>
|
24
|
+
<div id="edit-<%= content_type %>" class="edit-<%= content_type %>"<%= " style=\"display: none;\"" unless show_meeting_content_editor?(content, content_type)%>>
|
25
|
+
<%= render(:partial => "meeting_contents/form", :locals => {:content => content, :content_type => content_type}) %>
|
26
|
+
</div>
|
27
|
+
<% end -%>
|
28
|
+
|
29
|
+
<% if saved_meeting_content_text_present?(content) -%>
|
30
|
+
<div id="<%= content_type %>-text" class="wiki show-<%= content_type %>">
|
31
|
+
<%= textilizable(content.text) %>
|
32
|
+
</div>
|
33
|
+
<% else -%>
|
34
|
+
<p id="<%= content_type %>-text" class="nodata show-<%= content_type %>"><%= l(:label_no_data) %></p>
|
35
|
+
<% end -%>
|
36
|
+
|
37
|
+
<%= javascript_tag(show_meeting_content_editor?(content, content_type) ? "$$('.show-#{content_type}').invoke('hide');" : "$$('.edit-#{content_type}').invoke('hide');") %>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<%= render :partial => 'shared/meeting_header' %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<div class="contextual">
|
14
|
+
<%= link_to_if_authorized(l(:label_history), {:controller => '/' + @content_type.pluralize, :action => 'history', :meeting_id => @meeting}, :class => 'icon icon-history') %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<h2><%= l(:"label_#{@content_type}") %>: <%= link_to @meeting, @meeting %></h2>
|
18
|
+
|
19
|
+
<p>
|
20
|
+
<%= l(:label_version) %> <%= link_to @diff.content_from.version, send(:"#{@content_type}_version_path", @meeting, @diff.content_from.version) %>
|
21
|
+
<em>(<%= link_to_user(@diff.content_from.author) %>, <%= format_time(@diff.content_from.updated_at) %>)</em>
|
22
|
+
→
|
23
|
+
<%= l(:label_version) %> <%= link_to @diff.content_to.version, send(:"#{@content_type}_version_path", @meeting, @diff.content_to.version) %>/<%= @content.version %>
|
24
|
+
<em>(<%= link_to_user(@diff.content_to.author) %>, <%= format_time(@diff.content_to.updated_at) %>)</em>
|
25
|
+
</p>
|
26
|
+
|
27
|
+
<hr />
|
28
|
+
|
29
|
+
<div class="text-diff">
|
30
|
+
<%= simple_format_without_paragraph @diff.to_html %>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<%= render :partial => 'shared/meeting_header' %>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<h2><%= l(:"label_#{@content_type}") %>: <%= link_to @meeting, @meeting %></h2>
|
14
|
+
|
15
|
+
<h3><%= l(:label_history) %></h3>
|
16
|
+
|
17
|
+
<%= form_tag({:action => "diff"}, :method => :get) do %>
|
18
|
+
<table class="list">
|
19
|
+
<thead><tr>
|
20
|
+
<th>#</th>
|
21
|
+
<th></th>
|
22
|
+
<th></th>
|
23
|
+
<th><%= Meeting.human_attribute_name(:updated_on) %></th>
|
24
|
+
<th><%= Meeting.human_attribute_name(:author) %></th>
|
25
|
+
<th><%= Meeting.human_attribute_name(:comments) %></th>
|
26
|
+
</tr></thead>
|
27
|
+
<tbody>
|
28
|
+
<% show_diff = @content_versions.size > 1 %>
|
29
|
+
<% @content_versions.each_with_index do |content_version,index| %>
|
30
|
+
<tr class="<%= cycle("odd", "even") %>">
|
31
|
+
<td class="id">
|
32
|
+
<%= content_version.version == @content.version ?
|
33
|
+
link_to(content_version.version, tab_meeting_path(@meeting, :tab => @content_type.sub(/^meeting_/, ''))) :
|
34
|
+
link_to(content_version.version, send(:"#{@content_type}_version_path", @meeting, content_version.version)) %>
|
35
|
+
</td>
|
36
|
+
<td class="checkbox"><%= radio_button_tag('version_to', content_version.version, (index==0), :id => "checkbox-from-#{index}", :onclick => "$('checkbox-to-#{index+1}').checked=true;") if show_diff && (index < @content_versions.size-1) %></td>
|
37
|
+
<td class="checkbox"><%= radio_button_tag('version_from', content_version.version, (index==1), :id => "checkbox-to-#{index}") if show_diff && (index > 0) %></td>
|
38
|
+
<td align="center"><%= format_time(content_version.created_at) %></td>
|
39
|
+
<td><em><%= User.find content_version.user_id %></em></td>
|
40
|
+
<td><%=h content_version.notes %></td>
|
41
|
+
</tr>
|
42
|
+
<% end %>
|
43
|
+
</tbody>
|
44
|
+
</table>
|
45
|
+
<%= submit_tag l(:label_view_diff), :class => 'small' if show_diff %>
|
46
|
+
<%= pagination_links_full @content_versions %>
|
47
|
+
<% end %>
|
48
|
+
|
49
|
+
<%= render :partial => 'shared/meeting_header' %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<%= render(:partial => "meeting_contents/show", :locals => {:content => @content, :content_type => @content_type, :title => "#{l(:"label_#{@content_type}")}: #{link_to @meeting, @meeting}"}) %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<h1><%= link_to(@meeting.project.name, @project_url) %>: <%= link_to(@meeting.title, @meeting_url) %></h1>
|
14
|
+
<em><%= @meeting.author %></em>
|
15
|
+
|
16
|
+
<ul>
|
17
|
+
<li><%=t :label_meeting_date_time %>: <%= format_date @meeting.start_date %> <%= format_time @meeting.start_time, false %>-<%= format_time @meeting.end_time, false %> <%= Time.zone %></li>
|
18
|
+
<li><%=Meeting.human_attribute_name(:location) %>: <%= @meeting.location %></li>
|
19
|
+
<li><%=Meeting.human_attribute_name(:participants_invited) %>: <%= @meeting.participants.invited.sort.join("; ") %></li>
|
20
|
+
<li><%=Meeting.human_attribute_name(:participants_attended) %>: <%= @meeting.participants.attended.sort.join("; ") %></li>
|
21
|
+
</ul>
|
22
|
+
|
23
|
+
<p><%=raw t(:"text_review_#{@content_type}", :author => h(User.current), :link => link_to(@meeting.title, @meeting_url)) %></p>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= @meeting.project.name %>: <%= @meeting.title %> (<%= @meeting_url %>)
|
2
|
+
<%= @meeting.author %>
|
3
|
+
|
4
|
+
<%=t :label_meeting_date_time %>: <%= format_date @meeting.start_date %> <%= format_time @meeting.start_time, false %>-<%= format_time @meeting.end_time, false %> <%= Time.zone %>
|
5
|
+
<%= Meeting.human_attribute_name(:location) %>: <%= @meeting.location %>
|
6
|
+
<%= Meeting.human_attribute_name(:participants_invited) %>: <%= @meeting.participants.invited.sort.join("; ") %>
|
7
|
+
<%= Meeting.human_attribute_name(:participants_attended) %>: <%= @meeting.participants.attended.sort.join("; ") %>
|
8
|
+
|
9
|
+
<%=t(:"text_review_#{@content_type}", :author => User.current, :link => t(:"text_#{@content_type}_for_meeting", :meeting => @meeting.title) + " (#{@meeting_url})") %>
|
@@ -0,0 +1,61 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<%= error_messages_for 'meeting' %>
|
14
|
+
|
15
|
+
<div class="box tabular">
|
16
|
+
<p><%= f.text_field :title, :required => true, :size => 60, :class => "autofocus" %></p>
|
17
|
+
<p><%= f.text_field :location, :size => 60 %></p>
|
18
|
+
<p><%= f.text_field :start_date, :required => true, :size => 10 %><%= calendar_for('meeting_start_date') %> <%= time_select "meeting", "start_time", :ignore_date => true, :minute_step => 5 %> <%= Time.zone %></p>
|
19
|
+
<p><%= f.text_field :duration, :required => true, :size => 5 %><em>(<%=l :text_in_hours %>)</em>
|
20
|
+
<div><label><%=Meeting.human_attribute_name(:participants) %></label>
|
21
|
+
<table class="list">
|
22
|
+
<thead><tr>
|
23
|
+
<th><%=Meeting.human_attribute_name(:name) %></th>
|
24
|
+
<th><%=Meeting.human_attribute_name(:participants_invited) %></th>
|
25
|
+
<th><%=Meeting.human_attribute_name(:participants_attended) %></th>
|
26
|
+
</tr></thead>
|
27
|
+
<tbody>
|
28
|
+
<% @meeting.all_possible_participants.sort.each do |user| -%>
|
29
|
+
<%= hidden_field_tag "meeting[participants_attributes][][user_id]", user.id %>
|
30
|
+
<tr class="<%= cycle("odd", "even")%>">
|
31
|
+
<td><%=h user %></td>
|
32
|
+
<% if @meeting.participants.present? && participant = @meeting.participants.detect{|p| p.user_id == user.id} -%>
|
33
|
+
<%= hidden_field_tag "meeting[participants_attributes][][id]", participant.id %>
|
34
|
+
<td class="checkox" align="center">
|
35
|
+
<%= label_tag "checkbox_invited_#{user.id}", user.name + " " + l(:description_invite), :class => "hidden-for-sighted" %>
|
36
|
+
<%= check_box_tag "meeting[participants_attributes][][invited]", 1, participant.invited?, :id => "checkbox_invited_#{user.id}" %>
|
37
|
+
</td>
|
38
|
+
<td class="checkox" align="center">
|
39
|
+
<%= label_tag "checkbox_attended_#{user.id}", user.name + " " + l(:description_attended), :class => "hidden-for-sighted" %>
|
40
|
+
<%= check_box_tag "meeting[participants_attributes][][attended]", 1, participant.attended?, :id => "checkbox_attended_#{user.id}" %>
|
41
|
+
</td>
|
42
|
+
<% else -%>
|
43
|
+
<td class="checkox" align="center">
|
44
|
+
<%= label_tag "checkbox_invited_#{user.id}", user.name + " " + l(:description_invite), :class => "hidden-for-sighted" %>
|
45
|
+
<%= check_box_tag "meeting[participants_attributes][][invited]", value = "1", checked = false, :id => "checkbox_invited_#{user.id}" %>
|
46
|
+
</td>
|
47
|
+
<td class="checkox" align="center">
|
48
|
+
<%= label_tag "checkbox_attended_#{user.id}", user.name + " " + l(:description_attended), :class => "hidden-for-sighted" %>
|
49
|
+
<%= check_box_tag "meeting[participants_attributes][][attended]", value = "1", checked = false, :id => "checkbox_attended_#{user.id}" %>
|
50
|
+
</td>
|
51
|
+
<% end -%>
|
52
|
+
</tr>
|
53
|
+
<% end -%>
|
54
|
+
</tbody>
|
55
|
+
</table>
|
56
|
+
</div>
|
57
|
+
<%= hidden_field_tag "copied_from_meeting_id", params[:copied_from_meeting_id] if params[:copied_from_meeting_id].present? %>
|
58
|
+
<%= hidden_field_tag "copied_meeting_agenda_text", params[:copied_meeting_agenda_text] if params[:copied_meeting_agenda_text].present? %>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<%= render :partial => 'shared/meeting_header' %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<h2><%= l(:label_meeting) %> #<%= @meeting.id %></h2>
|
14
|
+
<%= labelled_tabular_form_for @meeting, :url => {:controller => '/meetings', :action => 'update'}, :html => {:id => 'meeting-form', :method => :put} do |f| -%>
|
15
|
+
<%= render :partial => 'form', :locals => {:f => f} %>
|
16
|
+
<%= submit_tag l(:button_save) %> <%= link_to l(:button_cancel), :action => 'show', :id => @meeting %>
|
17
|
+
<% end if @project %>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<h2><%= l(:label_meeting_plural)%></h2>
|
14
|
+
|
15
|
+
<% if @meetings_by_start_year_month_date.empty? -%>
|
16
|
+
<p class="nodata"><%= l(:label_no_data) %></p>
|
17
|
+
<% else -%>
|
18
|
+
<div class="meetings meetings_by_month_year" id="activity">
|
19
|
+
<% @meetings_by_start_year_month_date.each do |year,meetings_by_start_month_date| -%>
|
20
|
+
<% meetings_by_start_month_date.each do |month,meetings_by_start_date| -%>
|
21
|
+
<h3 class="month_year"><%= "#{month_name(month)} #{year}" %></h3>
|
22
|
+
<div class="meetings_by_date">
|
23
|
+
<% meetings_by_start_date.each do |date,meetings| -%>
|
24
|
+
<h3 id="<%= date.strftime("%m-%d-%Y") %>" class="date"><%= format_activity_day(date) %></h3>
|
25
|
+
<dl class="meetings">
|
26
|
+
<% meetings.each do |meeting| -%>
|
27
|
+
<dt class="meeting" id="meeting-<%= meeting.id %>">
|
28
|
+
<%= avatar meeting.author, :size => "24" %>
|
29
|
+
<span class="time"><%= format_time meeting.start_time, false %>-<%= format_time meeting.end_time, false %></span>
|
30
|
+
<%= link_to h(meeting.title), :controller => '/meetings', :action => 'show', :id => meeting %>
|
31
|
+
</dt>
|
32
|
+
<dd class="meeting" id="meeting-<%= meeting.id %>">
|
33
|
+
<p><strong><%= Meeting.human_attribute_name(:location) %></strong>: <%=h meeting.location %></p>
|
34
|
+
<p><strong><%= Meeting.human_attribute_name(:participants_invited) %></strong> (<%= meeting.participants.select(&:invited).count %>): <%= format_participant_list meeting.participants.select(&:invited) %></p>
|
35
|
+
<p><strong><%= Meeting.human_attribute_name(:participants_attended) %></strong> (<%= meeting.participants.select(&:attended).count %>): <%= format_participant_list meeting.participants.select(&:attended) %></p>
|
36
|
+
</dd>
|
37
|
+
<% end -%>
|
38
|
+
</dl>
|
39
|
+
<% end -%>
|
40
|
+
</div>
|
41
|
+
<% end -%>
|
42
|
+
<% end -%>
|
43
|
+
</div>
|
44
|
+
<% end -%>
|
45
|
+
|
46
|
+
<p class="pagination">
|
47
|
+
<%= link_to_content_update(l(:label_today), params.merge(:page => @page_of_today, :anchor => Date.today.strftime("%m-%d-%Y"))) %>
|
48
|
+
<%= pagination_links_full @meetings, :container => false %>
|
49
|
+
</p>
|
50
|
+
|
51
|
+
<%= render :partial => 'shared/meeting_header' %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<h2><%= l(:label_meeting_new) %></h2>
|
14
|
+
<%= labelled_tabular_form_for @meeting, :url => {:controller => '/meetings', :action => 'create', :project_id => @project}, :html => {:id => 'meeting-form'} do |f| -%>
|
15
|
+
<%= render :partial => 'form', :locals => {:f => f} %>
|
16
|
+
<%= submit_tag l(:button_create) %> <%= link_to l(:button_cancel), :action => 'index', :project_id => @project %>
|
17
|
+
<% end if @project %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<%#-- copyright
|
2
|
+
OpenProject is a project management system.
|
3
|
+
|
4
|
+
Copyright (C) 2012-2013 the OpenProject Team
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU General Public License version 3.
|
8
|
+
|
9
|
+
See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
|
11
|
+
++#%>
|
12
|
+
|
13
|
+
<div class="contextual">
|
14
|
+
<%= watcher_link @meeting, User.current %>
|
15
|
+
<%= link_to_if_authorized(l(:button_edit), {:controller => '/meetings', :action => 'edit', :id => @meeting}, :class => 'icon icon-edit')%>
|
16
|
+
<%= link_to_if_authorized(l(:button_copy), {:controller => '/meetings', :action => 'copy', :id => @meeting}, :class => 'icon icon-copy')%>
|
17
|
+
<%= link_to_if_authorized(l(:button_delete), {:controller => '/meetings', :action => 'destroy', :id => @meeting}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del')%>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
<h2><%= l(:label_meeting) %>: <%= link_to @meeting %></h2>
|
21
|
+
|
22
|
+
<div class="meeting details box">
|
23
|
+
<%= avatar(@meeting.author, :size => "64") %>
|
24
|
+
<p class="author"><%= authoring @meeting.created_at, @meeting.author %></p>
|
25
|
+
<div class="splitcontentleft">
|
26
|
+
<p><strong><%= Meeting.human_attribute_name(:start_time) %></strong>: <%= format_date @meeting.start_date %> <%= format_time @meeting.start_time, false %> - <%= format_time @meeting.end_time, false %> <%= Time.zone %></p>
|
27
|
+
</div>
|
28
|
+
<div class="splitcontentright">
|
29
|
+
<p><strong><%= Meeting.human_attribute_name(:location) %></strong>: <%=h @meeting.location %></p>
|
30
|
+
</div>
|
31
|
+
<div style="clear:both;"> </div>
|
32
|
+
<p><strong><%= Meeting.human_attribute_name(:participants_invited) %></strong>: <%= format_participant_list @meeting.participants.invited %></p>
|
33
|
+
<p><strong><%= Meeting.human_attribute_name(:participants_attended) %></strong>: <%= format_participant_list @meeting.participants.attended %></p>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<%= render_tabs [{:name => 'agenda', :action => :create_meeting_agendas, :partial => 'meeting_contents/show', :label => :label_meeting_agenda, :content => @meeting.agenda || @meeting.build_agenda, :content_type => "meeting_agenda"},
|
37
|
+
{:name => 'minutes', :action => :create_meeting_minutes, :partial => 'meeting_contents/show', :label => :label_meeting_minutes, :content => @meeting.minutes || @meeting.build_minutes, :content_type => "meeting_minutes"}] %>
|
38
|
+
|
39
|
+
<% if @meeting.journals.changing.present? %>
|
40
|
+
<div id="history">
|
41
|
+
<h3><%=l(:label_history)%></h3>
|
42
|
+
<% @meeting.journals.each do |journal| %>
|
43
|
+
<%= render_journal @meeting, journal %>
|
44
|
+
<% end %>
|
45
|
+
</div>
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
<%= render :partial => 'shared/meeting_header' %>
|