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 @@
1
+ = render :partial => 'form'
@@ -0,0 +1 @@
1
+ = @person
@@ -0,0 +1,2 @@
1
+ = render :partial => 'droom/shared/calendar_holder'
2
+ = render :partial => 'droom/shared/search_form'
@@ -0,0 +1,3 @@
1
+ #minicalendar
2
+ .scroller
3
+ = render :partial => 'droom/events/calendar'
@@ -0,0 +1,8 @@
1
+ - if current_user && current_user.activated?
2
+ %p.controls
3
+ = t(:signed_in_as, :name => current_user.full_name).html_safe
4
+ = link_to t(:preferences), "/users/#{current_user.id}/edit"
5
+ = link_to t(:help_pages), "/help"
6
+ = link_to t(:sign_out), Droom.sign_out_path, :method => :delete
7
+ - if admin?
8
+ = link_to t(:hide_admin), '#', :data => {:action => 'toggle', :affected => '.admin'}
@@ -0,0 +1,8 @@
1
+ - if current_user && current_user.activated?
2
+ %nav<
3
+ = nav_link_to t(:your_page), droom.dashboard_path
4
+ = nav_link_to t(:calendar), droom.calendar_path
5
+ = nav_link_to t(:library), droom.library_path
6
+ = nav_link_to t(:directory), droom.directory_path
7
+ - if Droom.show_venue_map
8
+ = nav_link_to t(:map), droom.map_path
@@ -0,0 +1,4 @@
1
+ #search
2
+ %form#searchform{:action => suggestions_url}<
3
+ = text_field_tag :term, params[:term], :placeholder => t(:quick_search), :autocomplete => "off"
4
+ = submit_tag "go"
@@ -0,0 +1,11 @@
1
+ %ul.search_results
2
+ - if @suggestions.any?
3
+ - @suggestions.each do |sugg|
4
+ = render :partial => "droom/#{sugg.identifier.pluralize}/suggested", :object => sugg
5
+
6
+ - else
7
+ %li.error
8
+ = t :no_results
9
+
10
+ %li.cancel
11
+ = link_to t(:clear_search), '#', :class => "cancel"
@@ -0,0 +1,17 @@
1
+ %header
2
+ %ul.commands
3
+ %li.command{:"data-wysihtml5-command" => "bold"}
4
+ %li.command{:"data-wysihtml5-command" => "italic"}
5
+ %li.command{:"data-wysihtml5-command" => "insertUnorderedList"}
6
+ %li.command{:"data-wysihtml5-command" => "insertOrderedList"}
7
+ %li.command{:"data-wysihtml5-command" => "createLink"}
8
+ %li.command{:"data-wysihtml5-command" => "formatBlock", :"data-wysihtml5-command-value" => "h2"}
9
+ %li.command{:"data-wysihtml5-command" => "formatBlock", :"data-wysihtml5-command-value" => "h3"}
10
+ %li.command{:"data-wysihtml5-action" => "change_view"}
11
+
12
+ %div{:"data-wysihtml5-dialog" => "createLink", :style => "display: none"}
13
+ %label
14
+ Link:
15
+ %input{:type => "text", :"data-wysihtml5-dialog-field" => "href", :value => "http://"}
16
+ %a{:"data-wysihtml5-dialog-action" => "save"} OK
17
+ %a{:"data-wysihtml5-dialog-action" => "cancel"} cancel
@@ -0,0 +1,6 @@
1
+ - venue ||= suggested
2
+
3
+ %li.venue
4
+ = link_to venue.name, venue_url(venue)
5
+ %span.note
6
+ = t :future_event_count, :count => venue.events.count
@@ -0,0 +1,6 @@
1
+ = content_for :head do
2
+ = javascript_include_tag "https://maps.google.com/maps/api/js?sensor=false"
3
+
4
+ - cssclass = current_user.admin? ? "editable" : ""
5
+
6
+ #map{:"data-url" => venues_url, :class => cssclass}
@@ -0,0 +1,21 @@
1
+ = content_for :head do
2
+ = javascript_include_tag "http://maps.google.com/maps/api/js?sensor=false"
3
+ #venues
4
+ %h1
5
+ = @venue.name
6
+
7
+ %p
8
+ = @venue.address.to_html
9
+
10
+ #events
11
+ %h2.quiet
12
+ = t(:future_events)
13
+
14
+ = render :partial => "droom/events/events"
15
+
16
+ #marginalia
17
+ - cssclass = admin? ? "small editable" : "small"
18
+ #map{:"data-url" => venue_url(@venue), :class => cssclass}
19
+ %p
20
+ = @venue.address
21
+
@@ -0,0 +1,36 @@
1
+ !!!
2
+ %html{:lang => 'en'}
3
+ %head
4
+ %title
5
+ - if content_for?(:pagetitle)
6
+ = yield :pagetitle
7
+ \|
8
+ = t(:data_room)
9
+
10
+ = stylesheet_link_tag "droom"
11
+ = javascript_include_tag "droom"
12
+ = content_for :head
13
+ = csrf_meta_tags
14
+
15
+ %body
16
+ #header
17
+ #pagehead
18
+ #nav
19
+ %h2
20
+ = t(:data_room)
21
+
22
+ = render :partial => "droom/shared/navigation"
23
+
24
+ - if user_signed_in?
25
+ #controls
26
+ = render :partial => "droom/shared/controls"
27
+
28
+ #page
29
+ #content
30
+ = yield
31
+
32
+ #flashes
33
+ %p.notice= notice
34
+ %p.alert= alert
35
+
36
+ #mask
@@ -0,0 +1,2 @@
1
+ require 'dav4rack'
2
+ require 'dav4rack/file_resource'
@@ -0,0 +1,26 @@
1
+ require 'paperclip'
2
+
3
+ Paperclip.interpolates :dav_root do |attachment, style|
4
+ Droom.dav_root
5
+ end
6
+
7
+ Paperclip.interpolates :person do |attachment, style|
8
+ attachment.instance.person_id
9
+ end
10
+
11
+ # Slug in this context will be the identifying string for either the group or the event
12
+ # to which our document_attachment is attached. If none is present, we use 'unattached'.
13
+ #
14
+ Paperclip.interpolates :slug do |attachment, style|
15
+ attachment.instance.slug
16
+ end
17
+
18
+ Paperclip.interpolates :category do |attachment, style|
19
+ attachment.instance.category
20
+ end
21
+
22
+ Paperclip.interpolates :category_and_slug do |attachment, style|
23
+ fragment = attachment.instance.slug
24
+ fragment = "#{fragment}/#{attachment.instance.category.slug}" if attachment.instance.category
25
+ fragment
26
+ end
@@ -0,0 +1,2 @@
1
+ require 'snail'
2
+ Snail.home_country = Droom.home_country
@@ -0,0 +1,191 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ activerecord:
6
+ attributes:
7
+ droom:
8
+ event:
9
+ name: "Event name"
10
+ venue_name: "Choose or add a location"
11
+ start_time: "Time"
12
+ start_date: "Date"
13
+ person:
14
+ invite_on_creation: "Invite on creation"
15
+ admin_user: "as admin user"
16
+ admin: "Admin"
17
+ attachments: "Attachments"
18
+ attending: "Attending"
19
+ cancel: "cancel"
20
+ mon: "MON"
21
+ dom: "00"
22
+ year: "YEAR"
23
+ add_event: "Add an event"
24
+ add_document: "Add a document"
25
+ add_page: "Add a page"
26
+ add_person: "Add a person"
27
+ add_group: "Add a group"
28
+ added_to: "has been added to '%{group}'."
29
+ continue: "Continue"
30
+ dashboard: "Dashboard"
31
+ hello: "Hello world"
32
+ sign_in: "Sign in"
33
+ can_still_log_in: 'Your password has not changed until you complete this process, <br />so if you remember the old one you can still <a href="%{url}">log in</a>'
34
+ choose_new_password: "Choose a new password"
35
+ clear_search: "Clear search"
36
+ click_to_choose_file: "Click to choose a file"
37
+ confirm_delete_document: "Are you sure you want to delete the document '%{name}'? This cannot be undone."
38
+ confirm_delete_event: "Are you sure you want to delete the event '%{name}'? This cannot be undone."
39
+ confirm_delete_group: "Are you sure you want to delete the group '%{name}'? This cannot be undone."
40
+ confirm_delete_page: "Are you sure you want to delete the page '%{title}'? This cannot be undone."
41
+ confirm_delete_person: "Are you sure you want to delete the person '%{name}'? This cannot be undone."
42
+ confirm_remove_document: "Are you sure you want to remove the document '%{name}' from the event '%{event_name}? If it has no other attachments, the document will also be deleted."
43
+ confirm_remove_member: "Are you sure you want to remove '%{name}' from '%{group}'?"
44
+ confirm_uninvite_group: "Are you sure you want to remove '%{name}' from '%{event_name}'?"
45
+ confirm_uninvite_person: "Are you sure you want to remove '%{name}' from '%{event_name}'?"
46
+ document_category: "Category"
47
+ document_name: "Name"
48
+ document_filename: "Filename"
49
+ document_filesize: "Size"
50
+ document_created: "Document '%{name}' created"
51
+ document_created_at: "Created"
52
+ document_attached_to: "Attached to"
53
+ document_name: "Document name"
54
+ document_description: "Document description"
55
+ download_ical: "Download event"
56
+ downloads: "Downloads"
57
+ download_attachments_as_zipfile: "Download all attachments as a zipfile"
58
+ edit: "Edit"
59
+ edit_event: "Edit event"
60
+ events: "Events"
61
+ events_between: "Events between %{start} and %{finish}"
62
+ events_in: "Events in %{period}"
63
+ events_on: "Events on %{day}"
64
+ event_created: "Event '%{name}' created"
65
+ group_created: "Group '%{name}' created"
66
+ calendar: "Calendar"
67
+ library: "Library"
68
+ preferences: "Preferences"
69
+ set_preferences: "Account preferences"
70
+ user_preferences: "User preferences"
71
+ user_updated: "Preferences for %{name} have been updated."
72
+ your_preferences_saved: "Thank you. Your preferences have been updated"
73
+
74
+ directory: "Directory"
75
+
76
+ group_name: "Name"
77
+ group_description: "Description"
78
+
79
+ help: "Help"
80
+ help_pages: "Help pages"
81
+
82
+ page_title: "Page title"
83
+ page_slug: "Slug"
84
+ page_video_id: "Youtube video id"
85
+ page_summary: "Page summary"
86
+ page_body: "Page body (in markdown format, please)"
87
+ page_slug_explanation: "The 'slug' is a unique identifier that we use to build an address for this page. Users will find the page at /help/slug. If you leave this field blank we will derive a slug automatically from the page title."
88
+ page_summary_explanation: "The page summary is a two- or three-line description that we use whenever this page appears in a list. You would normally see it on the help index page."
89
+ page_youtube_explanation: "Soon there will be a little video-finding gadget here, but to start with please paste in a video id. The embedding will be handled automatically. Omit if not relevant."
90
+
91
+ person_title: "Title"
92
+ person_forename: "Forename"
93
+ person_name: "Name"
94
+ person_surname: "Surname"
95
+ person_email: "Email"
96
+ person_phone: "Phone"
97
+ person_post_line1: "Address"
98
+ person_post_line2: ""
99
+ person_post_city: "City"
100
+ person_post_region: "Region"
101
+ person_post_country: "Country"
102
+ person_post_code: "Post code"
103
+ has_been_created: "has been added to the system"
104
+ and_invited: "and invited to log in."
105
+
106
+ new_membership_instructions: "Start typing a name here and a list of possible matches will appear. Click on someone to add them to the %{name} group."
107
+
108
+ preferences: "Preferences"
109
+ profile: "Profile"
110
+ search: "Search"
111
+ "on": "on"
112
+ at: "at"
113
+ or: "or"
114
+ event_time: "Time"
115
+ your_future_events:
116
+ zero: "You have no invitations at the moment."
117
+ one: "You have one invitation:"
118
+ other: "You have been invited to %{count} events:"
119
+ your_past_events: "Your past events"
120
+ other_future_events: "Here is a general list of events coming up."
121
+ click_to_download_zipfile: "Click to download all attached documents as a zipfile"
122
+ click_to_download: "Click to download %{name}"
123
+ forgot_password: "Forgotten your password?"
124
+ your_personal_documents: "Your personal documents"
125
+ other_documents: "Other available documents"
126
+ personal_calendar_feed: "Personal calendar subscription"
127
+ general_calendar_feed: "General calendar subscription"
128
+ password_confirmation_instructions: "Please confirm your password."
129
+ password_instructions: "Please choose a password of at least six letters."
130
+ password_leave_same: "Leave this field blank to keep your existing password."
131
+ password_confirmation_requirements: "We will not be able to remind you of your password but you can always set a new one if you forget it."
132
+ password_requirements: "Ideally your password should include numbers and punctuation, and should not resemble a dictionary word."
133
+ remove: "remove"
134
+ search: Search
135
+ save: "Save"
136
+ save_event: "Save event"
137
+ save_document: "Save document"
138
+ save_person: "Save person"
139
+ manage_groups: "Manage groups"
140
+ map: "Map"
141
+ my_future_events: "Your invitations"
142
+ my_past_events: "Your past events"
143
+ my_group_documents: "Your documents"
144
+ quick_search: "Quick search"
145
+ future_events: "Events coming up"
146
+ event_name: "Event name"
147
+ venue_name: "Venue name"
148
+ no_documents: "Sorry: there are no documents accessible by your account."
149
+ no_people: "Sorry: there are no directory entries accessible by your account."
150
+ future_event_count:
151
+ zero: "No events coming up"
152
+ one: "One event coming up"
153
+ other: "%{count} events coming up"
154
+ group_members:
155
+ zero: "No members"
156
+ one: "One member"
157
+ other: "%{count} members"
158
+ more_documents_count:
159
+ zero: "No more documents"
160
+ one: "and one more document..."
161
+ other: "and %{count} more documents..."
162
+ time:
163
+ formats:
164
+ natural: "%l:%M%P"
165
+ natural_with_date: "%l:%M%P, %d %B %Y"
166
+ precise: "%H:%M"
167
+ date:
168
+ formats:
169
+ dashed_short_date_format: "%d-%m-%Y"
170
+ month_header: "%B %Y"
171
+ natural: "%d %B"
172
+ natural_full: "%l:%M%P, %d %B %Y"
173
+ natural_with_year: "%d %B %Y"
174
+ minimal_with_year: "%d %b %Y"
175
+ minicalendar_title: "%B %Y"
176
+ minicalendar_month: "%B"
177
+ year: "%Y"
178
+ month: "%B %Y"
179
+
180
+ errors:
181
+ attributes:
182
+ name:
183
+ blank: "Please enter your full name"
184
+ email:
185
+ blank: "Please give an email address on which we can contact you"
186
+ invalid: "This does not appear to be a valid email address"
187
+ uniqueness: "This email address is already in use here"
188
+ password:
189
+ confirmation: "The password and its confirmation do not match"
190
+ too_short: "Your password must have at least 6 letters"
191
+
data/config/routes.rb ADDED
@@ -0,0 +1,51 @@
1
+ Droom::Engine.routes.draw do
2
+
3
+ match '/' => DAV4Rack::Handler.new(
4
+ :root => Rails.root.to_s,
5
+ :root_uri_path => '/',
6
+ :resource_class => Droom::DavResource,
7
+ :log_to => [(Rails.root + 'log/dav.log').to_s, Logger::DEBUG]
8
+ ), :anchor => false, :constraints => { :subdomain => Droom.dav_subdomain }
9
+
10
+ resources :events do
11
+ resources :invitations
12
+ resources :group_invitations
13
+ get "calendar", :on => :collection
14
+ resources :documents
15
+ collection do
16
+ match "feed/:auth_token.:format" => "events#feed", :as => :feed
17
+ end
18
+ end
19
+
20
+ resources :people do
21
+ resources :events do
22
+ collection do
23
+ match "feed/:auth_token.:format" => "events#feed", :as => :feed
24
+ end
25
+ end
26
+ end
27
+
28
+ resources :documents do
29
+ resources :document_attachments
30
+ end
31
+
32
+ resources :groups do
33
+ resources :memberships
34
+ end
35
+
36
+ resources :venues
37
+ resources :pages
38
+
39
+
40
+ match "/library" => 'documents#index', :as => :library
41
+ match "/directory" => 'people#index', :as => :directory
42
+ match "/calendar" => 'events#index', :as => :calendar
43
+ match "/map" => 'venues#index', :as => :map
44
+ match "/me" => 'dashboard#index', :as => :dashboard
45
+ match '/help/:slug', :to => 'pages#show', :as => 'help_page'
46
+ match '/help', :to => 'pages#index', :as => 'help'
47
+
48
+ match '/suggestions', :to => 'suggestions#index', :as => "suggestions"
49
+ match '/suggestions/:type', :to => 'suggestions#index'
50
+
51
+ end
@@ -0,0 +1,134 @@
1
+ class CreateDroomData < ActiveRecord::Migration
2
+ def change
3
+ create_table :droom_events do |t|
4
+ t.datetime :start
5
+ t.datetime :finish
6
+ t.string :name
7
+ t.string :slug
8
+ t.text :description
9
+ t.string :url
10
+ t.integer :venue_id
11
+ t.integer :event_set_id
12
+ t.integer :created_by_id
13
+ t.string :uuid
14
+ t.boolean :all_day
15
+ t.integer :master_id
16
+ t.boolean :private
17
+ t.boolean :public
18
+ t.timestamps
19
+ end
20
+ add_index :droom_events, :event_set_id
21
+ add_index :droom_events, :master_id
22
+ add_index :droom_events, :public
23
+
24
+ create_table :droom_documents do |t|
25
+ t.string :name
26
+ t.text :description
27
+ t.integer :version
28
+ t.attachment :file
29
+ t.string :file_fingerprint
30
+ t.integer :created_by_id
31
+ t.boolean :public
32
+ t.boolean :private
33
+ t.timestamps
34
+ end
35
+
36
+ create_table :droom_personal_documents do |t|
37
+ t.integer :document_attachment_id
38
+ t.integer :person_id
39
+ t.integer :version
40
+ t.attachment :file
41
+ t.string :file_fingerprint
42
+ t.timestamps
43
+ end
44
+ add_index :droom_personal_documents, :document_attachment_id
45
+ add_index :droom_personal_documents, :person_id
46
+
47
+ create_table :droom_people do |t|
48
+ t.string :name
49
+ t.string :title
50
+ t.string :email
51
+ t.string :phone
52
+ t.text :description
53
+ t.attachment :image
54
+ t.integer :user_id
55
+ t.integer :created_by_id
56
+ t.timestamps
57
+ end
58
+ add_index :droom_people, :email
59
+ add_index :droom_people, :user_id
60
+
61
+ create_table :droom_groups do |t|
62
+ t.string :name
63
+ t.string :slug
64
+ t.integer :leader_id
65
+ t.integer :created_by_id
66
+ t.timestamps
67
+ end
68
+
69
+ create_table :droom_event_sets do |t|
70
+ t.string :name
71
+ t.integer :created_by_id
72
+ t.timestamps
73
+ end
74
+
75
+ create_table :droom_memberships do |t|
76
+ t.integer :person_id
77
+ t.integer :group_id
78
+ t.integer :created_by_id
79
+ t.timestamps
80
+ end
81
+ add_index :droom_memberships, :person_id
82
+ add_index :droom_memberships, :group_id
83
+
84
+ create_table :droom_invitations do |t|
85
+ t.integer :person_id
86
+ t.integer :event_id
87
+ t.integer :created_by_id
88
+ t.timestamps
89
+ end
90
+ add_index :droom_invitations, :event_id
91
+ add_index :droom_invitations, :person_id
92
+
93
+ create_table :droom_document_attachments do |t|
94
+ t.integer :document_id
95
+ t.string :attachee_type
96
+ t.integer :attachee_id
97
+ t.integer :created_by_id
98
+ t.timestamps
99
+ end
100
+ add_index :droom_document_attachments, [:attachee_type, :attachee_id], :name => :attachee
101
+
102
+ create_table :droom_recurrence_rules do |t|
103
+ t.integer :event_id
104
+ t.boolean :active, :default => false
105
+ t.string :period
106
+ t.string :basis
107
+ t.integer :interval, :default => 1
108
+ t.datetime :limiting_date
109
+ t.integer :limiting_count
110
+ t.integer :created_by_id
111
+ t.timestamps
112
+ end
113
+ add_index :droom_recurrence_rules, :event_id
114
+
115
+ create_table :droom_venues do |t|
116
+ t.string :name
117
+ t.text :description
118
+ t.string :post_line1
119
+ t.string :post_line2
120
+ t.string :post_city
121
+ t.string :post_region
122
+ t.string :post_country
123
+ t.string :post_code
124
+ t.string :url
125
+ t.decimal :lat, :precision => 15, :scale => 10
126
+ t.decimal :lng, :precision => 15, :scale => 10
127
+ t.boolean :prepend_article
128
+ t.timestamps
129
+ end
130
+ add_index :droom_venues, [:lat, :lng]
131
+
132
+ end
133
+
134
+ end