public
Description: Manage conferences with speakers, sessions and sponsors with Radiant CMS
Homepage: http://www.apachecon.com
Clone URL: git://github.com/farra/radiant-conferences-extensions.git
radiant-conferences-extensions / conferences_extension.rb
100644 93 lines (76 sloc) 3.963 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Uncomment this if you reference any of your controllers in activate
# require_dependency 'application'
 
require File.dirname(__FILE__) + "/lib/acts_as_cache_clearing"
 
class ConferencesExtension < Radiant::Extension
  version "1.0"
  description "Manage conference events, speakers, presentations and tracks."
  url "http://cubiclemuses.com/cm"
 
  define_routes do |map|
    map.connect 'admin/con/activities/:action', :controller => 'admin/con/activities'
    map.connect 'admin/con/conferences/:action', :controller => 'admin/con/conferences'
    map.connect 'admin/con/conference_roles/:action', :controller => 'admin/con/conference_roles'
    map.connect 'admin/con/conference_roles/:action.:format', :controller => 'admin/con/conference_roles'
    map.connect 'admin/con/dashboard/:action/:id', :controller => 'admin/con/dashboard'
    map.connect 'admin/con/locations/:action', :controller => 'admin/con/locations'
    map.connect 'admin/con/organizations/:action', :controller => 'admin/con/organizations'
    map.connect 'admin/con/users/:action', :controller => 'admin/con/users'
    map.connect 'admin/con/presentations/:action', :controller => 'admin/con/presentations'
    map.connect 'admin/con/presentation_types/:action', :controller => 'admin/con/presentation_types'
    map.connect 'admin/con/panel_members/:action', :controller => 'admin/con/panel_members'
    map.connect 'admin/con/schedule/:action', :controller => 'admin/con/schedule'
    map.connect 'admin/con/scheduled_sessions/:action', :controller => 'admin/con/scheduled_sessions'
    map.connect 'admin/con/session_types/:action', :controller => 'admin/con/session_types'
    map.connect 'admin/con/speakers/:action', :controller => 'admin/con/speakers'
    map.connect 'admin/con/sponsors/:action', :controller => 'admin/con/sponsors'
    map.connect 'admin/con/sponsor_types/:action', :controller => 'admin/con/sponsor_types'
    map.connect 'admin/con/sponsor_levels/:action', :controller => 'admin/con/sponsor_levels'
    map.connect 'admin/con/submissions/:action', :controller => 'admin/con/submissions'
    map.connect 'admin/con/submissions/:action.:format', :controller => 'admin/con/submissions'
    map.connect 'admin/con/tracks/:action', :controller => 'admin/con/tracks'
    map.connect 'admin/con/venues/:action', :controller => 'admin/con/venues'
    map.connect 'admin/con/cfp/:action', :controller => 'admin/con/cfp'
  end
 
  def activate
    
    admin.tabs.add "Conferences", "/admin/con/dashboard", :before => "Pages", :visibility => [:developer, :admin]
    admin.tabs.add "Submissions", "/admin/con/cfp", :before => "Conferences", :visibility => [:all]
 
    ActiveRecord::Base.send(:include, Con::CacheClearing)
    Page.send :include, ConferenceTags
    
    User.class_eval {
 
      acts_as_cache_clearing
      
      has_many :conference_roles, :foreign_key => 'presenter_id'
      has_many :conferences, :through => :conferences_roles, :foreign_key => 'presenter_id'
      has_many :presentations, :foreign_key => 'presenter_id'
      has_many :panel_members
      has_many :submissions, :through => :presentations
      has_many :activities
 
      def scheduled_sessions(conference=nil, include_panels=true)
        sessions = [ ]
        conference_roles.each do |role|
          inc = true
          if conference
            inc = role.conference == conference
          end
          
          case role.session
            when ScheduledSession then sessions << role.session if inc
            when PanelMember
              if include_panels and inc
                sessions << role.session.submission.scheduled_session
              end
           end
         end
        return sessions
      end
      
    }
 
 
    SpeakersPage
    SpeakerPage
    SponsorsPage
    SponsorTypePage
    SchedulePage
    ScheduleDayPage
    SessionsPage
    SessionPage
  end
 
  def deactivate
     admin.tabs.remove "Conferences"
  end
 
end