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,47 @@
|
|
1
|
+
# German strings go here for Rails i18n
|
2
|
+
de:
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
meeting:
|
6
|
+
duration: "Dauer"
|
7
|
+
location: "Ort/Raum"
|
8
|
+
participants: "Teilnehmer"
|
9
|
+
participants_attended: "Anwesend"
|
10
|
+
participants_invited: "Eingeladen"
|
11
|
+
start_time: "Anfangszeit"
|
12
|
+
|
13
|
+
description_attended: "teilgenommen"
|
14
|
+
description_invite: "eingeladen"
|
15
|
+
|
16
|
+
label_meeting: "Besprechung"
|
17
|
+
label_meeting_plural: "Besprechungen"
|
18
|
+
label_meeting_new: "Neue Besprechung"
|
19
|
+
label_meeting_agenda: "Agenda"
|
20
|
+
label_meeting_minutes: "Protokoll"
|
21
|
+
label_meeting_close: "Schließen"
|
22
|
+
label_meeting_open: "Öffnen"
|
23
|
+
label_meeting_agenda_close: "Agenda schließen um mit dem Protokoll zu beginnen"
|
24
|
+
label_meeting_date_time: "Datum/Uhrzeit"
|
25
|
+
label_notify: "Zur Einsicht verschicken"
|
26
|
+
|
27
|
+
notice_successful_notification: "Benachrichtigung erfolgreich gesendet"
|
28
|
+
notice_timezone_missing: Keine Zeitzone eingestellt und daher %{zone} angenommen. Um Ihre Zeitzone einzustellen, clicken Sie bitte hier.
|
29
|
+
|
30
|
+
permission_create_meetings: "Besprechungen erstellen"
|
31
|
+
permission_edit_meetings: "Besprechungen bearbeiten"
|
32
|
+
permission_delete_meetings: "Besprechungen löschen"
|
33
|
+
permission_view_meetings: "Besprechungen ansehen"
|
34
|
+
permission_create_meeting_agendas: "Agenden anlegen/bearbeiten"
|
35
|
+
permission_close_meeting_agendas: "Agenden schließen"
|
36
|
+
permission_send_meeting_agendas_notification: "Benachrichtigungen für Agenden verschicken"
|
37
|
+
permission_create_meeting_minutes: "Protokolle anlegen/bearbeiten"
|
38
|
+
permission_send_meeting_minutes_notification: "Benachrichtigungen für Protokolle verschicken"
|
39
|
+
|
40
|
+
project_module_meetings: "Besprechungen"
|
41
|
+
|
42
|
+
text_agenda_for_meeting: 'Agenda für die Besprechung "%{meeting}"'
|
43
|
+
text_in_hours: "in Stunden"
|
44
|
+
text_meeting_agenda_open_are_you_sure: "Nicht-gespeicherte Inhalte des Protokolls werden durch diese Aktion verworfen! Weitermachen?"
|
45
|
+
text_minutes_for_meeting: 'Protokoll für die Besprechungen "%{meeting}"'
|
46
|
+
text_review_meeting_agenda: "%{author} hat die %{link} zur Einsicht freigegeben:"
|
47
|
+
text_review_meeting_minutes: "%{author} hat das %{link} zur Einsicht freigegeben:"
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# English strings go here for Rails i18n
|
2
|
+
en:
|
3
|
+
activerecord:
|
4
|
+
attributes:
|
5
|
+
meeting:
|
6
|
+
location: "Location"
|
7
|
+
duration: "Duration"
|
8
|
+
participants: "Participants"
|
9
|
+
participants_attended: "Attendants"
|
10
|
+
participants_invited: "Invitees"
|
11
|
+
start_time: "Time"
|
12
|
+
|
13
|
+
description_attended: "attended"
|
14
|
+
description_invite: "invited"
|
15
|
+
|
16
|
+
label_meeting: "Meeting"
|
17
|
+
label_meeting_plural: "Meetings"
|
18
|
+
label_meeting_new: "New Meeting"
|
19
|
+
label_meeting_agenda: "Agenda"
|
20
|
+
label_meeting_minutes: "Minutes"
|
21
|
+
label_meeting_close: "Close"
|
22
|
+
label_meeting_open: "Open"
|
23
|
+
label_meeting_agenda_close: "Close the agenda to begin the Minutes"
|
24
|
+
label_meeting_date_time: "Date/Time"
|
25
|
+
label_notify: "Send for review"
|
26
|
+
|
27
|
+
notice_timezone_missing: No time zone is set and %{zone} is assumed. To choose your time zone, please click here.
|
28
|
+
notice_successful_notification: "Notification sent successfully"
|
29
|
+
|
30
|
+
permission_create_meetings: "Create meetings"
|
31
|
+
permission_edit_meetings: "Edit meetings"
|
32
|
+
permission_delete_meetings: "Delete meetings"
|
33
|
+
permission_view_meetings: "View meetings"
|
34
|
+
permission_create_meeting_agendas: "Manage agendas"
|
35
|
+
permission_close_meeting_agendas: "Close agendas"
|
36
|
+
permission_send_meeting_agendas_notification: "Send review notification for agendas"
|
37
|
+
permission_create_meeting_minutes: "Manage minutes"
|
38
|
+
permission_send_meeting_minutes_notification: "Send review notification for minutes"
|
39
|
+
|
40
|
+
project_module_meetings: "Meetings"
|
41
|
+
|
42
|
+
text_agenda_for_meeting: 'agenda for the meeting "%{meeting}"'
|
43
|
+
text_in_hours: "in hours"
|
44
|
+
text_meeting_agenda_open_are_you_sure: "Unsaved content in the minutes will be lost! Continue?"
|
45
|
+
text_minutes_for_meeting: 'minutes for the meeting "%{meeting}"'
|
46
|
+
text_review_meeting_agenda: "%{author} has put the %{link} up for review:"
|
47
|
+
text_review_meeting_minutes: "%{author} has put the %{link} up for review:"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,53 @@
|
|
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
|
+
OpenProject::Application.routes.draw do
|
13
|
+
|
14
|
+
scope 'projects/:project_id' do
|
15
|
+
resources :meetings, :only => [:new, :create, :index]
|
16
|
+
end
|
17
|
+
|
18
|
+
resources :meetings, :except => [:new, :create, :index] do
|
19
|
+
|
20
|
+
resource :agenda, :controller => 'meeting_agendas', :only => [:update] do
|
21
|
+
member do
|
22
|
+
get :history
|
23
|
+
get :diff
|
24
|
+
put :close
|
25
|
+
put :open
|
26
|
+
put :notify
|
27
|
+
post :preview
|
28
|
+
end
|
29
|
+
|
30
|
+
resources :versions, :only => [:show],
|
31
|
+
:controller => 'meeting_agendas'
|
32
|
+
end
|
33
|
+
|
34
|
+
resource :minutes, :controller => 'meeting_minutes', :only => [:update] do
|
35
|
+
member do
|
36
|
+
get :history
|
37
|
+
get :diff
|
38
|
+
put :notify
|
39
|
+
post :preview
|
40
|
+
end
|
41
|
+
|
42
|
+
resources :versions, :only => [:show],
|
43
|
+
:controller => 'meeting_minutes'
|
44
|
+
end
|
45
|
+
|
46
|
+
member do
|
47
|
+
get :copy
|
48
|
+
match '/:tab' => 'meetings#show', :constraints => { :tab => /(agenda|minutes)/ },
|
49
|
+
:via => :get,
|
50
|
+
:as => 'tab'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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 CreateMeetings < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
create_table :meetings do |t|
|
15
|
+
t.column :title, :string
|
16
|
+
t.column :author_id, :integer
|
17
|
+
t.column :project_id, :integer
|
18
|
+
t.column :location, :string
|
19
|
+
t.column :start_time, :datetime
|
20
|
+
t.column :duration, :float
|
21
|
+
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.down
|
27
|
+
drop_table :meetings
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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 CreateMeetingContents < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
create_table :meeting_contents do |t|
|
15
|
+
t.column :type, :string
|
16
|
+
t.column :meeting_id, :integer
|
17
|
+
t.column :author_id, :integer
|
18
|
+
t.column :text, :text
|
19
|
+
t.column :comment, :string
|
20
|
+
t.column :version, :integer
|
21
|
+
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.down
|
27
|
+
drop_table :meeting_contents
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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 CreateMeetingContentVersions < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
MeetingContent.create_versioned_table
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
MeetingContent.drop_versioned_table
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
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 CreateMeetingParticipants < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
create_table :meeting_participants do |t|
|
15
|
+
t.column :user_id, :integer
|
16
|
+
t.column :meeting_id, :integer
|
17
|
+
t.column :meeting_role_id, :integer
|
18
|
+
t.column :email, :string
|
19
|
+
t.column :name, :string
|
20
|
+
t.column :invited, :boolean
|
21
|
+
t.column :attended, :boolean
|
22
|
+
|
23
|
+
t.timestamps
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.down
|
28
|
+
drop_table :meeting_participants
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
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 AddLockToMeetingContent < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
add_column :meeting_contents, :locked, :boolean, :default => false
|
15
|
+
# Check for existence of the pre-journalized MeetingContentVersions table
|
16
|
+
add_column :meeting_content_versions, :locked, :boolean, :default => nil if table_exists? :meeting_content_versions
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.down
|
20
|
+
remove_column :meeting_contents, :locked
|
21
|
+
# Check for existence of the pre-journalized MeetingContentVersions table
|
22
|
+
remove_column :meeting_content_versions, :locked if table_exists? :meeting_content_versions
|
23
|
+
end
|
24
|
+
end
|
@@ -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
|
+
class CreateInitialMeetingJournals < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
|
15
|
+
[Meeting].each do |p|
|
16
|
+
say_with_time("Building initial journals for #{p.class_name}") do
|
17
|
+
|
18
|
+
# avoid touching the journaled object on journal creation
|
19
|
+
p.journal_class.class_exec {
|
20
|
+
def touch_journaled_after_creation
|
21
|
+
end
|
22
|
+
}
|
23
|
+
|
24
|
+
activity_type = p.activity_provider_options.keys.first
|
25
|
+
|
26
|
+
# Create initial journals
|
27
|
+
p.find(:all).each do |o|
|
28
|
+
# Using rescue and save! here because either the Journal or the
|
29
|
+
# touched record could fail. This will catch either error and continue
|
30
|
+
begin
|
31
|
+
new_journal = o.recreate_initial_journal!
|
32
|
+
rescue ActiveRecord::RecordInvalid => ex
|
33
|
+
if new_journal.errors.count == 1 && new_journal.errors.first[0] == "version"
|
34
|
+
# Skip, only error was from creating the initial journal for a record that already had one.
|
35
|
+
else
|
36
|
+
puts "ERROR: errors creating the initial journal for #{o.class.to_s}##{o.id.to_s}:"
|
37
|
+
puts " #{ex.message}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.down
|
46
|
+
# no-op
|
47
|
+
# (well, in theory we should delete the MeetingJournals…)
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,65 @@
|
|
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 MergeMeetingContentVersionsWithJournals < ActiveRecord::Migration
|
13
|
+
def self.up
|
14
|
+
# The table doesn't exist on fresh installations
|
15
|
+
if table_exists? :meeting_content_versions
|
16
|
+
# This is provided here for migrating up after the MeetingContent::Version class has been removed
|
17
|
+
unless MeetingContent.const_defined?("Version")
|
18
|
+
MeetingContent.const_set("Version", Class.new(ActiveRecord::Base))
|
19
|
+
end
|
20
|
+
|
21
|
+
# load some classes
|
22
|
+
MeetingAgenda
|
23
|
+
MeetingMinutes
|
24
|
+
|
25
|
+
# avoid touching WikiContent on journal creation
|
26
|
+
MeetingAgendaJournal.class_exec {
|
27
|
+
def touch_journaled_after_creation
|
28
|
+
end
|
29
|
+
}
|
30
|
+
MeetingMinutesJournal.class_exec {
|
31
|
+
def touch_journaled_after_creation
|
32
|
+
end
|
33
|
+
}
|
34
|
+
|
35
|
+
cache = Hash.new{|h,k| h[k] = Hash.new{|h,k| h[k] = Hash.new{|h,k| h[k] = {}}}}
|
36
|
+
|
37
|
+
MeetingContent::Version.find_by_sql('SELECT * FROM meeting_content_versions ORDER BY version ASC').each do |mcv|
|
38
|
+
options = {:journaled_id => mcv.meeting_content_id, :created_at => mcv.created_at,
|
39
|
+
:user_id => mcv.author_id, :notes => mcv.comment, :activity_type => 'meetings',
|
40
|
+
:version => mcv.version}
|
41
|
+
ft = [cache[mcv.meeting_content_id][mcv.versioned_type][mcv.version-1][:locked], mcv.locked]
|
42
|
+
options[:changes] = {'locked' => ft} unless mcv.version == 1 || ft.first == ft.last
|
43
|
+
journal = case mcv.versioned_type
|
44
|
+
when 'MeetingAgenda'
|
45
|
+
MeetingAgendaJournal.create! options
|
46
|
+
when 'MeetingMinutes'
|
47
|
+
MeetingMinutesJournal.create! options
|
48
|
+
end
|
49
|
+
journal.text = mcv.text unless mcv.text == cache[mcv.meeting_content_id][mcv.versioned_type][mcv.version-1][:text]
|
50
|
+
cache[mcv.meeting_content_id][mcv.versioned_type][mcv.version] = {:text => mcv.text, :locked => mcv.locked}
|
51
|
+
end
|
52
|
+
|
53
|
+
drop_table :meeting_content_versions
|
54
|
+
end
|
55
|
+
|
56
|
+
change_table :meeting_contents do |t|
|
57
|
+
t.rename :version, :lock_version
|
58
|
+
t.remove :comment
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.down
|
63
|
+
raise ActiveRecord::IrreversibleMigration, "Can't revert to pre-journalized versioning model"
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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 RemoveMeetingRoleIdFromMeetingParticipants < ActiveRecord::Migration
|
13
|
+
def up
|
14
|
+
remove_column :meeting_participants, :meeting_role_id
|
15
|
+
end
|
16
|
+
|
17
|
+
def down
|
18
|
+
add_column :meeting_participants, :meeting_role_id, :integer
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
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
|
+
module OpenProject
|
13
|
+
module Meeting
|
14
|
+
require "open_project/meeting/engine"
|
15
|
+
end
|
16
|
+
end
|