droom 0.0.1

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.
Files changed (207) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +23 -0
  3. data/Rakefile +27 -0
  4. data/app/assets/images/droom/arrows.png +0 -0
  5. data/app/assets/images/droom/big_icons.png +0 -0
  6. data/app/assets/images/droom/blueblob.png +0 -0
  7. data/app/assets/images/droom/close.png +0 -0
  8. data/app/assets/images/droom/cross.png +0 -0
  9. data/app/assets/images/droom/download.png +0 -0
  10. data/app/assets/images/droom/greyblob.png +0 -0
  11. data/app/assets/images/droom/help/goodreader.jpg +0 -0
  12. data/app/assets/images/droom/ical.png +0 -0
  13. data/app/assets/images/droom/icons.png +0 -0
  14. data/app/assets/images/droom/medium_icons.png +0 -0
  15. data/app/assets/images/droom/medium_object_icons.png +0 -0
  16. data/app/assets/images/droom/minimonth.png +0 -0
  17. data/app/assets/images/droom/minisymbols.png +0 -0
  18. data/app/assets/images/droom/object_icons.png +0 -0
  19. data/app/assets/images/droom/pinkblob.png +0 -0
  20. data/app/assets/images/droom/place_busy.png +0 -0
  21. data/app/assets/images/droom/place_quiet.png +0 -0
  22. data/app/assets/images/droom/plus_bullet.png +0 -0
  23. data/app/assets/images/droom/search.png +0 -0
  24. data/app/assets/images/droom/setup.png +0 -0
  25. data/app/assets/images/droom/small_go.png +0 -0
  26. data/app/assets/images/droom/smallbullet.png +0 -0
  27. data/app/assets/images/droom/smallspinner.gif +0 -0
  28. data/app/assets/images/droom/spinner.gif +0 -0
  29. data/app/assets/images/droom/spr_toolbar_icons_r2.png +0 -0
  30. data/app/assets/images/droom/tablesort.png +0 -0
  31. data/app/assets/images/droom/tick.png +0 -0
  32. data/app/assets/images/droom/tinysymbols.png +0 -0
  33. data/app/assets/images/droom/twister.png +0 -0
  34. data/app/assets/images/droom/vcard.png +0 -0
  35. data/app/assets/images/droom/venue_bullet.png +0 -0
  36. data/app/assets/javascripts/droom.js.coffee +88 -0
  37. data/app/assets/javascripts/droom/calendar.js.coffee +121 -0
  38. data/app/assets/javascripts/droom/drag_sort.js.coffee +22 -0
  39. data/app/assets/javascripts/droom/forms.js.coffee +746 -0
  40. data/app/assets/javascripts/droom/lib/extensions.js.coffee +60 -0
  41. data/app/assets/javascripts/droom/lib/jquery.animate-colors.js +109 -0
  42. data/app/assets/javascripts/droom/lib/jquery.cookie.js +71 -0
  43. data/app/assets/javascripts/droom/lib/jquery.sortable.js +97 -0
  44. data/app/assets/javascripts/droom/lib/kalendae.js +1692 -0
  45. data/app/assets/javascripts/droom/lib/modernizr.js +4 -0
  46. data/app/assets/javascripts/droom/lib/parser_rules/advanced.js +553 -0
  47. data/app/assets/javascripts/droom/lib/parser_rules/simple.js +32 -0
  48. data/app/assets/javascripts/droom/lib/wysihtml5.js +9550 -0
  49. data/app/assets/javascripts/droom/map.js.coffee +123 -0
  50. data/app/assets/javascripts/droom/sort.js.coffee +126 -0
  51. data/app/assets/javascripts/droom/suggester.js.coffee +230 -0
  52. data/app/assets/stylesheets/droom.css.sass +1151 -0
  53. data/app/assets/stylesheets/lib/_kalendae.css.sass +142 -0
  54. data/app/assets/stylesheets/lib/_toolbar.css.sass +192 -0
  55. data/app/controllers/droom/dashboard_controller.rb +27 -0
  56. data/app/controllers/droom/document_attachments_controller.rb +19 -0
  57. data/app/controllers/droom/documents_controller.rb +116 -0
  58. data/app/controllers/droom/engine_controller.rb +43 -0
  59. data/app/controllers/droom/events_controller.rb +120 -0
  60. data/app/controllers/droom/group_invitations_controller.rb +47 -0
  61. data/app/controllers/droom/groups_controller.rb +67 -0
  62. data/app/controllers/droom/invitations_controller.rb +43 -0
  63. data/app/controllers/droom/memberships_controller.rb +47 -0
  64. data/app/controllers/droom/pages_controller.rb +61 -0
  65. data/app/controllers/droom/people_controller.rb +92 -0
  66. data/app/controllers/droom/suggestions_controller.rb +58 -0
  67. data/app/controllers/droom/venues_controller.rb +39 -0
  68. data/app/helpers/droom/droom_helper.rb +74 -0
  69. data/app/models/droom/agenda_category.rb +8 -0
  70. data/app/models/droom/category.rb +27 -0
  71. data/app/models/droom/document.rb +110 -0
  72. data/app/models/droom/document_attachment.rb +71 -0
  73. data/app/models/droom/document_link.rb +31 -0
  74. data/app/models/droom/event.rb +409 -0
  75. data/app/models/droom/event_set.rb +6 -0
  76. data/app/models/droom/group.rb +66 -0
  77. data/app/models/droom/group_invitation.rb +23 -0
  78. data/app/models/droom/invitation.rb +30 -0
  79. data/app/models/droom/membership.rb +27 -0
  80. data/app/models/droom/page.rb +26 -0
  81. data/app/models/droom/person.rb +302 -0
  82. data/app/models/droom/personal_document.rb +98 -0
  83. data/app/models/droom/recurrence_rule.rb +82 -0
  84. data/app/models/droom/venue.rb +125 -0
  85. data/app/views/droom/dashboard/_marginalia.html.haml +3 -0
  86. data/app/views/droom/dashboard/_my_future_events.html.haml +9 -0
  87. data/app/views/droom/dashboard/_my_group_documents.html.haml +6 -0
  88. data/app/views/droom/dashboard/_my_past_events.haml +6 -0
  89. data/app/views/droom/dashboard/index.html.haml +5 -0
  90. data/app/views/droom/documents/_created.html.haml +2 -0
  91. data/app/views/droom/documents/_document.html.haml +14 -0
  92. data/app/views/droom/documents/_document_line.html.haml +2 -0
  93. data/app/views/droom/documents/_documents_list.html.haml +31 -0
  94. data/app/views/droom/documents/_documents_table.html.haml +13 -0
  95. data/app/views/droom/documents/_event_document_form.html.haml +15 -0
  96. data/app/views/droom/documents/_form.html.haml +22 -0
  97. data/app/views/droom/documents/_listing.html.haml +8 -0
  98. data/app/views/droom/documents/_suggested.html.haml +9 -0
  99. data/app/views/droom/documents/_table_document.html.haml +31 -0
  100. data/app/views/droom/documents/edit.html.haml +1 -0
  101. data/app/views/droom/documents/index.html.haml +29 -0
  102. data/app/views/droom/documents/new.html.haml +1 -0
  103. data/app/views/droom/errors/bang.html.haml +12 -0
  104. data/app/views/droom/errors/not_allowed.html.haml +12 -0
  105. data/app/views/droom/errors/not_found.html.haml +12 -0
  106. data/app/views/droom/events/_attachment.html.haml +1 -0
  107. data/app/views/droom/events/_attachment_list.html.haml +4 -0
  108. data/app/views/droom/events/_calendar.html.haml +54 -0
  109. data/app/views/droom/events/_created.html.haml +2 -0
  110. data/app/views/droom/events/_event.html.haml +77 -0
  111. data/app/views/droom/events/_event_line.html.haml +13 -0
  112. data/app/views/droom/events/_events.html.haml +2 -0
  113. data/app/views/droom/events/_form.html.haml +35 -0
  114. data/app/views/droom/events/_invitations.html.haml +20 -0
  115. data/app/views/droom/events/_other_page_parts.html.haml +0 -0
  116. data/app/views/droom/events/_popup_event.html.haml +6 -0
  117. data/app/views/droom/events/_suggested.html.haml +12 -0
  118. data/app/views/droom/events/_views.html.haml +7 -0
  119. data/app/views/droom/events/edit.html.haml +1 -0
  120. data/app/views/droom/events/index.html.haml +12 -0
  121. data/app/views/droom/events/index.rss.builder +20 -0
  122. data/app/views/droom/events/new.html.haml +1 -0
  123. data/app/views/droom/events/show.html.haml +4 -0
  124. data/app/views/droom/group_invitations/_attending_groups.html.haml +8 -0
  125. data/app/views/droom/group_invitations/_created.html.haml +3 -0
  126. data/app/views/droom/group_invitations/_form.html.haml +4 -0
  127. data/app/views/droom/group_invitations/new.html.haml +1 -0
  128. data/app/views/droom/groups/_created.html.haml +3 -0
  129. data/app/views/droom/groups/_form.html.haml +12 -0
  130. data/app/views/droom/groups/_group.html.haml +11 -0
  131. data/app/views/droom/groups/_groups.html.haml +3 -0
  132. data/app/views/droom/groups/edit.html.haml +1 -0
  133. data/app/views/droom/groups/index.html.haml +7 -0
  134. data/app/views/droom/groups/show.html.haml +13 -0
  135. data/app/views/droom/invitations/_attending_people.html.haml +8 -0
  136. data/app/views/droom/invitations/_created.html.haml +3 -0
  137. data/app/views/droom/invitations/_form.html.haml +5 -0
  138. data/app/views/droom/invitations/new.html.haml +1 -0
  139. data/app/views/droom/memberships/_button.html.haml +11 -0
  140. data/app/views/droom/memberships/_created.html.haml +4 -0
  141. data/app/views/droom/memberships/_form.html.haml +7 -0
  142. data/app/views/droom/memberships/_member.html.haml +33 -0
  143. data/app/views/droom/memberships/_memberships.html.haml +4 -0
  144. data/app/views/droom/pages/_contents.html.haml +10 -0
  145. data/app/views/droom/pages/_form.html.haml +36 -0
  146. data/app/views/droom/pages/_full_page.html.haml +17 -0
  147. data/app/views/droom/pages/_page.html.haml +5 -0
  148. data/app/views/droom/pages/_pages.html.haml +2 -0
  149. data/app/views/droom/pages/admin.html.haml +24 -0
  150. data/app/views/droom/pages/edit.html.haml +1 -0
  151. data/app/views/droom/pages/index.html.haml +10 -0
  152. data/app/views/droom/pages/new.html.haml +4 -0
  153. data/app/views/droom/pages/show.html.haml +5 -0
  154. data/app/views/droom/people/_created.html.haml +6 -0
  155. data/app/views/droom/people/_form.html.haml +40 -0
  156. data/app/views/droom/people/_people.html.haml +29 -0
  157. data/app/views/droom/people/_person.html.haml +34 -0
  158. data/app/views/droom/people/_suggested.html.haml +9 -0
  159. data/app/views/droom/people/edit.html.haml +1 -0
  160. data/app/views/droom/people/index.html.haml +11 -0
  161. data/app/views/droom/people/new.html.haml +1 -0
  162. data/app/views/droom/people/show.html.haml +1 -0
  163. data/app/views/droom/shared/_calendar_and_search.html.haml +2 -0
  164. data/app/views/droom/shared/_calendar_holder.haml +3 -0
  165. data/app/views/droom/shared/_controls.html.haml +8 -0
  166. data/app/views/droom/shared/_navigation.html.haml +8 -0
  167. data/app/views/droom/shared/_search_form.html.haml +4 -0
  168. data/app/views/droom/shared/_suggestions.html.haml +11 -0
  169. data/app/views/droom/shared/_toolbar.html.haml +17 -0
  170. data/app/views/droom/venues/_suggested.html.haml +6 -0
  171. data/app/views/droom/venues/index.html.haml +6 -0
  172. data/app/views/droom/venues/show.html.haml +21 -0
  173. data/app/views/layouts/droom/application.html.haml +36 -0
  174. data/config/initializers/dav.rb +2 -0
  175. data/config/initializers/paperclip.rb +26 -0
  176. data/config/initializers/snail.rb +2 -0
  177. data/config/locales/en.yml +191 -0
  178. data/config/routes.rb +51 -0
  179. data/db/migrate/20120910075016_create_droom_data.rb +134 -0
  180. data/db/migrate/20120917095804_agenda_sections.rb +13 -0
  181. data/db/migrate/20120918121352_add_postal_address_to_people.rb +10 -0
  182. data/db/migrate/20121009075049_give_groups_descriptions.rb +5 -0
  183. data/db/migrate/20121009105244_more_names.rb +5 -0
  184. data/db/migrate/20121009145944_event_agenda_sections.rb +13 -0
  185. data/db/migrate/20121011091230_create_group_invitations.rb +10 -0
  186. data/db/migrate/20121012144720_give_people_positions.rb +5 -0
  187. data/db/migrate/20121012154558_help_pages.rb +13 -0
  188. data/db/migrate/20121012163201_category_slugs.rb +5 -0
  189. data/db/migrate/20121101160102_document_links.rb +14 -0
  190. data/db/migrate/20121101181247_people_visibility.rb +7 -0
  191. data/db/migrate/20121102094738_shy_people.rb +6 -0
  192. data/db/migrate/20121102095856_visibility_defaults.rb +8 -0
  193. data/lib/droom.rb +73 -0
  194. data/lib/droom/dav_resource.rb +36 -0
  195. data/lib/droom/engine.rb +8 -0
  196. data/lib/droom/helpers.rb +25 -0
  197. data/lib/droom/monkeys.rb +15 -0
  198. data/lib/droom/renderers.rb +13 -0
  199. data/lib/droom/validators.rb +5 -0
  200. data/lib/droom/version.rb +3 -0
  201. data/lib/generators/droom/dashboard/dashboard_generator.rb +16 -0
  202. data/lib/generators/droom/install/USAGE +9 -0
  203. data/lib/generators/droom/install/install_generator.rb +15 -0
  204. data/lib/generators/droom/install/templates/droom_initializer.rb +6 -0
  205. data/lib/generators/droom/views/views_generator.rb +9 -0
  206. data/lib/tasks/droom_tasks.rake +4 -0
  207. metadata +635 -0
@@ -0,0 +1,43 @@
1
+ module Droom
2
+ class EngineController < ::ApplicationController
3
+ helper Droom::DroomHelper
4
+ rescue_from "ActiveRecord::RecordNotFound", :with => :rescue_not_found
5
+ rescue_from "Droom::PermissionDenied", :with => :rescue_not_allowed
6
+ rescue_from "Droom::DroomError", :with => :rescue_bang
7
+ protected
8
+
9
+ def require_admin!
10
+ raise Droom::PermissionDenied unless current_user && current_user.admin?
11
+ end
12
+
13
+ def rescue_not_found(exception)
14
+ @exception = exception
15
+ render :template => 'droom/errors/not_found', :status => :not_found
16
+ end
17
+
18
+ def rescue_not_allowed(exception)
19
+ @exception = exception
20
+ render :template => 'droom/errors/not_allowed', :status => :permission_denied
21
+ end
22
+
23
+ def rescue_bang(exception)
24
+ @exception = exception
25
+ render :template => 'droom/errors/bang', :status => 500
26
+ end
27
+
28
+ protected
29
+
30
+ def no_layout_if_pjax
31
+ if request.headers['X-PJAX']
32
+ false
33
+ else
34
+ Droom.layout
35
+ end
36
+ end
37
+
38
+ def get_current_person
39
+ @current_person = current_user.person if current_user
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,120 @@
1
+ module Droom
2
+ class EventsController < Droom::EngineController
3
+ require "uri"
4
+ require "ri_cal"
5
+ respond_to :html, :json, :rss, :ics, :js, :zip
6
+ layout :no_layout_if_pjax
7
+
8
+ before_filter :authenticate_user!
9
+ before_filter :require_admin!, :except => [:index, :show]
10
+ before_filter :get_current_person
11
+ before_filter :numerical_parameters
12
+ before_filter :get_event, :only => [:show, :edit, :update, :destroy]
13
+ before_filter :build_event, :only => [:new, :create]
14
+ before_filter :find_events, :only => [:index, :calendar]
15
+
16
+ def index
17
+ respond_with @events do |format|
18
+ format.js {
19
+ render :partial => 'droom/events/events'
20
+ }
21
+ end
22
+ end
23
+
24
+ def calendar
25
+ respond_with @events do |format|
26
+ format.js {
27
+ render :partial => 'droom/events/calendar'
28
+ }
29
+ end
30
+ end
31
+
32
+ def feed
33
+ @events = Droom::Event.all
34
+ respond_with @events
35
+ end
36
+
37
+ def show
38
+ respond_with @event do |format|
39
+ format.js {
40
+ render :partial => 'droom/events/event'
41
+ }
42
+ format.zip {
43
+ send_file @event.documents_zipped.path, :type => 'application/zip', :disposition => 'attachment', :filename => "#{@event.slug}.zip"
44
+ }
45
+ end
46
+ end
47
+
48
+ def new
49
+ respond_with @event
50
+ end
51
+
52
+ def create
53
+ if @event.save
54
+ render :partial => "created"
55
+ else
56
+ respond_with @event
57
+ end
58
+ end
59
+
60
+ def edit
61
+
62
+ end
63
+
64
+ def update
65
+ @event.update_attributes(params[:event])
66
+ if @event.save
67
+ render :partial => "event"
68
+ else
69
+ respond_with @event
70
+ end
71
+ end
72
+
73
+ def destroy
74
+ @event.destroy
75
+ head :ok
76
+ end
77
+
78
+ protected
79
+
80
+ def build_event
81
+ params[:event] ||= {}
82
+ @event = Droom::Event.new({:start => Time.now}.merge(params[:event]))
83
+ end
84
+
85
+ def get_event
86
+ @event = Droom::Event.find(params[:id])
87
+ end
88
+
89
+ def find_events
90
+ if current_user.admin?
91
+ @events = Event.future_and_current
92
+ else
93
+ @events = Event.visible_to(@current_person).future_and_current
94
+ end
95
+ @show = params[:show] || 10
96
+ @page = params[:page] || 1
97
+ @events.page(@page).per(@show)
98
+ end
99
+
100
+
101
+ # months can be passed around either as names or numbers
102
+ # any date part can be 'now' or 'next' for ease of linking
103
+ # and everything is converted to_i to save clutter later
104
+ def month_names
105
+ ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
106
+ end
107
+
108
+ def numerical_parameters
109
+ if params[:month] && month_names.include?(params[:month].titlecase)
110
+ params[:month] = month_names.index(params[:month].titlecase)
111
+ end
112
+ [:year, :month, :mday].select{|p| params[p] }.each do |p|
113
+ params[p] = Date.today.send(p) if params[p] == 'now'
114
+ params[p] = (Date.today + 1.send(p == :mday ? :day : p)).send(p) if params[p] == 'next'
115
+ params[p] = params[p].to_i
116
+ end
117
+ end
118
+
119
+ end
120
+ end
@@ -0,0 +1,47 @@
1
+ module Droom
2
+ class GroupInvitationsController < Droom::EngineController
3
+ respond_to :js, :html
4
+ layout :no_layout_if_pjax
5
+
6
+ before_filter :get_event
7
+ before_filter :build_group_invitation, :only => [:new, :create]
8
+ before_filter :get_group_invitation, :only => :destroy
9
+
10
+ def destroy
11
+ @group_invitation.destroy
12
+ head :ok
13
+ end
14
+
15
+ def index
16
+ @event = Droom::Event.find(params[:event_id])
17
+ render :partial => 'attending_groups'
18
+ end
19
+
20
+ def new
21
+ render :partial => "form"
22
+ end
23
+
24
+ def create
25
+ if @group_invitation.save
26
+ render :partial => "created"
27
+ else
28
+ respond_with @group_invitation
29
+ end
30
+ end
31
+
32
+ protected
33
+
34
+ def build_group_invitation
35
+ @group_invitation = @event.group_invitations.new(params[:group_invitation])
36
+ end
37
+
38
+ def get_group_invitation
39
+ @group_invitation = @event.group_invitations.find(params[:id])
40
+ end
41
+
42
+ def get_event
43
+ @event = Droom::Event.find(params[:event_id])
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,67 @@
1
+ module Droom
2
+ class GroupsController < Droom::EngineController
3
+ respond_to :html, :js
4
+ layout :no_layout_if_pjax
5
+
6
+ before_filter :build_group, :only => [:new, :create]
7
+ before_filter :get_group, :only => [:show, :edit, :update, :destroy]
8
+ before_filter :get_groups, :only => :index
9
+
10
+ def index
11
+ respond_with @groups do |format|
12
+ format.js {
13
+ render :partial => 'droom/groups/groups'
14
+ }
15
+ end
16
+ end
17
+
18
+ def new
19
+ render :partial => "form"
20
+ end
21
+
22
+ def show
23
+ respond_with @group do |format|
24
+ format.js {
25
+ render :partial => 'droom/memberships/memberships'
26
+ }
27
+ end
28
+ end
29
+
30
+ def edit
31
+ respond_with @group
32
+ end
33
+
34
+ def update
35
+ @group.update_attributes(params[:group])
36
+ render :partial => 'group'
37
+ end
38
+
39
+ def create
40
+ if @group.save
41
+ render :partial => "created"
42
+ else
43
+ respond_with @group
44
+ end
45
+ end
46
+
47
+ def destroy
48
+ @group.destroy
49
+ head :ok
50
+ end
51
+
52
+ protected
53
+
54
+ def build_group
55
+ @group = Droom::Group.new(params[:group])
56
+ end
57
+
58
+ def get_group
59
+ @group = Droom::Group.find(params[:id])
60
+ end
61
+
62
+ def get_groups
63
+ @groups = Droom::Group.all
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,43 @@
1
+ module Droom
2
+ class InvitationsController < Droom::EngineController
3
+ respond_to :js, :html
4
+ layout :no_layout_if_pjax
5
+
6
+ before_filter :build_invitation, :only => [:new, :create]
7
+ before_filter :get_invitation, :only => :destroy
8
+
9
+ def destroy
10
+ @invitation.destroy
11
+ head :ok
12
+ end
13
+
14
+ def index
15
+ @event = Droom::Event.find(params[:event_id])
16
+ render :partial => 'attending_people'
17
+ end
18
+
19
+ def new
20
+ render :partial => "form"
21
+ end
22
+
23
+ def create
24
+ if @invitation.save
25
+ render :partial => "created"
26
+ else
27
+ respond_with @invitation
28
+ end
29
+ end
30
+
31
+ protected
32
+
33
+ def build_invitation
34
+ @event = Droom::Event.find(params[:event_id])
35
+ @invitation = @event.invitations.new(params[:invitation])
36
+ end
37
+
38
+ def get_invitation
39
+ @invitation = Droom::Invitation.find(params[:id])
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ module Droom
2
+ class MembershipsController < Droom::EngineController
3
+ respond_to :js, :html
4
+
5
+ before_filter :build_membership, :only => [:new, :create]
6
+ before_filter :get_membership, :only => :destroy
7
+
8
+ def destroy
9
+ @membership = Membership.find(params[:id])
10
+ @group = @membership.group
11
+ @person = @membership.person
12
+ @membership.destroy
13
+ render :partial => "button"
14
+ end
15
+
16
+ def new
17
+ if params[:person_id]
18
+ @group = Droom::Group.find(params[:group_id])
19
+ @person = Droom::Person.find(params[:person_id])
20
+ @membership = @group.memberships.create!(:person_id => @person.id, :group_id => @group.id)
21
+ render :partial => "button"
22
+ else
23
+ render :partial => "form"
24
+ end
25
+ end
26
+
27
+ def create
28
+ if @membership.save
29
+ render :partial => "created"
30
+ else
31
+ respond_with @membership
32
+ end
33
+ end
34
+
35
+ protected
36
+
37
+ def build_membership
38
+ @group = Droom::Group.find(params[:group_id])
39
+ @membership = @group.memberships.new(params[:membership])
40
+ end
41
+
42
+ def get_membership
43
+ @membership = Droom::Membership.find(params[:id])
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,61 @@
1
+ module Droom
2
+ class PagesController < Droom::EngineController
3
+ respond_to :html
4
+ before_filter :require_admin!, :except => [:index, :show]
5
+ before_filter :get_pages
6
+ before_filter :get_page, :only => [:show, :edit, :update, :destroy]
7
+ before_filter :build_page, :only => [:new, :create]
8
+ layout :no_layout_if_pjax
9
+
10
+ def index
11
+ respond_with(@pages) do |format|
12
+ format.js {
13
+ render :partial => 'droom/pages/pages'
14
+ }
15
+ end
16
+ end
17
+
18
+ def show
19
+ respond_with(@page)
20
+ end
21
+
22
+ def new
23
+ respond_with(@page)
24
+ end
25
+
26
+ def create
27
+ if @event.save
28
+ render :partial => "created"
29
+ else
30
+ respond_with @event
31
+ end
32
+ end
33
+
34
+ def edit
35
+
36
+ end
37
+
38
+ def update
39
+ @page.update_attributes(params[:page])
40
+ if @page.save
41
+ render :partial => "full_page"
42
+ else
43
+ respond_with @page
44
+ end
45
+ end
46
+
47
+ protected
48
+
49
+ def get_pages
50
+ @pages = Page.all
51
+ end
52
+
53
+ def get_page
54
+ @page = Page.find_by_slug(params[:slug]) || Page.find(params[:id])
55
+ end
56
+
57
+ def build_page
58
+ @page = Page.new(params[:page])
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,92 @@
1
+ module Droom
2
+ class PeopleController < Droom::EngineController
3
+ respond_to :json, :html, :js, :vcf
4
+ layout :no_layout_if_pjax
5
+
6
+ before_filter :authenticate_user!
7
+ before_filter :get_current_person
8
+ before_filter :find_people, :only => :index
9
+ before_filter :get_groups, :only => :index
10
+ before_filter :get_person, :only => [:show, :edit, :update, :destroy]
11
+ before_filter :build_person, :only => [:new, :create]
12
+ before_filter :confine_to_self, :except => [:index, :show]
13
+
14
+ def index
15
+ respond_with @people do |format|
16
+ format.js { render :partial => 'droom/people/people' }
17
+ format.vcf { render :vcf => @people.map(&:to_vcf) }
18
+ end
19
+ end
20
+
21
+ def show
22
+ respond_with @person
23
+ end
24
+
25
+ def create
26
+ if @person.save
27
+ render :partial => "created"
28
+ else
29
+ respond_with @person
30
+ end
31
+ end
32
+
33
+ def update
34
+ Rails.logger.warn params[:person]
35
+ @person.update_attributes(params[:person])
36
+ @person.save!
37
+ respond_with @person do |format|
38
+ format.json {
39
+ render
40
+ }
41
+ end
42
+ # if @person.save
43
+ # render :partial => "person"
44
+ # else
45
+ # respond_with @person
46
+ # end
47
+ end
48
+
49
+ def destroy
50
+ @person.destroy
51
+ head :ok
52
+ end
53
+
54
+ protected
55
+
56
+ def build_person
57
+ @person = Droom::Person.new(params[:person])
58
+ end
59
+
60
+ def get_person
61
+ @person = Person.find(params[:id])
62
+ end
63
+
64
+ def get_groups
65
+ @groups = Droom::Group.all
66
+ end
67
+
68
+ def find_people
69
+ if current_user.admin?
70
+ @people = Person.all
71
+ else
72
+ @people = Person.visible_to(@current_person)
73
+ end
74
+
75
+ if params[:group_id]
76
+ @people = @people.not_in_group(Droom::Group.find(params[:group_id]))
77
+ end
78
+
79
+ unless params[:q].blank?
80
+ @searching = true
81
+ @people = @people.name_matching(params[:q])
82
+ end
83
+
84
+ @people
85
+ end
86
+
87
+ def confine_to_self
88
+ @person = current_user.person unless current_user.admin?
89
+ end
90
+
91
+ end
92
+ end