openproject-meeting 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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' %>
|