droom 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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