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,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
|