droom 0.4.3 → 0.5.3

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 (396) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/images/droom/admin_menu.png +0 -0
  3. data/app/assets/images/droom/applications_menu.png +0 -0
  4. data/app/assets/images/droom/arrows_small.png +0 -0
  5. data/app/assets/images/droom/config_menu.png +0 -0
  6. data/app/assets/images/droom/dropdown.png +0 -0
  7. data/app/assets/images/droom/menu/asterisk.png +0 -0
  8. data/app/assets/images/droom/{smalladd.png → menu/smalladd.png} +0 -0
  9. data/app/assets/images/droom/{small_asterisk.png → menu/smallasterisk.png} +0 -0
  10. data/app/assets/images/droom/{smalldelete.png → menu/smalldelete.png} +0 -0
  11. data/app/assets/images/droom/{smalldownload.png → menu/smalldownload.png} +0 -0
  12. data/app/assets/images/droom/{smalledit.png → menu/smalledit.png} +0 -0
  13. data/app/assets/images/droom/message.png +0 -0
  14. data/app/assets/images/droom/missing/scrap.jpg +0 -0
  15. data/app/assets/images/droom/missing/scrap.png +0 -0
  16. data/app/assets/images/droom/missing/thumb.png +0 -0
  17. data/app/assets/images/droom/missing/user.png +0 -0
  18. data/app/assets/images/droom/object_icons.png +0 -0
  19. data/app/assets/images/droom/panel/add.png +0 -0
  20. data/app/assets/images/droom/panel/edit.png +0 -0
  21. data/app/assets/images/droom/panel/manage.png +0 -0
  22. data/app/assets/images/droom/pointer_upwards.png +0 -0
  23. data/app/assets/images/droom/search_menu.png +0 -0
  24. data/app/assets/images/droom/setter.png +0 -0
  25. data/app/assets/images/droom/small_icons.png +0 -0
  26. data/app/assets/images/droom/stream/closer.png +0 -0
  27. data/app/assets/images/droom/stream/next.png +0 -0
  28. data/app/assets/images/droom/stream/prev.png +0 -0
  29. data/app/assets/images/droom/stream/previous.png +0 -0
  30. data/app/assets/images/droom/subscribe.png +0 -0
  31. data/app/assets/javascripts/droom.js.coffee +23 -13
  32. data/app/assets/javascripts/droom/actions.js.coffee +104 -10
  33. data/app/assets/javascripts/droom/ajax.js.coffee +36 -24
  34. data/app/assets/javascripts/droom/extensions.js.coffee +13 -0
  35. data/app/assets/javascripts/droom/lib/jquery.datepicker.js +1026 -0
  36. data/app/assets/javascripts/droom/lib/jquery.deserialize.js +142 -0
  37. data/app/assets/javascripts/droom/lib/jquery_ujs.js +416 -0
  38. data/app/assets/javascripts/droom/lib/swipe.js +568 -0
  39. data/app/assets/javascripts/droom/lib/underscore.js +1276 -0
  40. data/app/assets/javascripts/droom/popups.js.coffee +98 -37
  41. data/app/assets/javascripts/droom/stream.js.coffee +119 -77
  42. data/app/assets/javascripts/droom/utilities.js.coffee +25 -3
  43. data/app/assets/javascripts/droom/widgets.js.coffee +318 -253
  44. data/app/assets/stylesheets/droom.css.sass +482 -955
  45. data/app/assets/stylesheets/droom/_mixins.css.sass +12 -42
  46. data/app/assets/stylesheets/droom/_popups.css.sass +28 -11
  47. data/app/assets/stylesheets/droom/_stream.css.sass +375 -0
  48. data/app/assets/stylesheets/droom/_toolbar.css.sass +0 -6
  49. data/app/assets/stylesheets/droom/_variables.css.sass +4 -2
  50. data/app/controllers/droom/agenda_categories_controller.rb +6 -14
  51. data/app/controllers/droom/api/api_controller.rb +56 -0
  52. data/app/controllers/droom/api/events_controller.rb +74 -0
  53. data/app/controllers/droom/api/users_controller.rb +92 -0
  54. data/app/controllers/droom/api/venues_controller.rb +71 -0
  55. data/app/controllers/droom/calendars_controller.rb +4 -10
  56. data/app/controllers/droom/{user_confirmations_controller.rb → confirmations_controller.rb} +8 -7
  57. data/app/controllers/droom/dashboard_controller.rb +2 -19
  58. data/app/controllers/droom/documents_controller.rb +12 -60
  59. data/app/controllers/droom/dropbox_tokens_controller.rb +3 -4
  60. data/app/controllers/droom/engine_controller.rb +39 -11
  61. data/app/controllers/droom/events_controller.rb +62 -84
  62. data/app/controllers/droom/folders_controller.rb +30 -40
  63. data/app/controllers/droom/group_invitations_controller.rb +6 -23
  64. data/app/controllers/droom/group_permissions_controller.rb +26 -0
  65. data/app/controllers/droom/groups_controller.rb +10 -14
  66. data/app/controllers/droom/invitations_controller.rb +7 -25
  67. data/app/controllers/droom/memberships_controller.rb +13 -18
  68. data/app/controllers/droom/organisations_controller.rb +6 -25
  69. data/app/controllers/droom/permissions_controller.rb +50 -0
  70. data/app/controllers/droom/preferences_controller.rb +9 -10
  71. data/app/controllers/droom/scraps_controller.rb +23 -26
  72. data/app/controllers/droom/services_controller.rb +50 -0
  73. data/app/controllers/droom/suggestions_controller.rb +6 -4
  74. data/app/controllers/droom/users/confirmations_controller.rb +24 -0
  75. data/app/controllers/droom/users/passwords_controller.rb +39 -0
  76. data/app/controllers/droom/users/sessions_controller.rb +7 -0
  77. data/app/controllers/droom/users_controller.rb +60 -38
  78. data/app/controllers/droom/venues_controller.rb +8 -15
  79. data/app/controllers/droom/youtube_controller.rb +1 -1
  80. data/app/helpers/droom/droom_helper.rb +22 -17
  81. data/app/models/droom/ability.rb +81 -0
  82. data/app/models/droom/agenda_category.rb +0 -1
  83. data/app/models/droom/calendar.rb +12 -7
  84. data/app/models/droom/category.rb +4 -10
  85. data/app/models/droom/concerns/slugged.rb +21 -0
  86. data/app/models/droom/document.rb +15 -17
  87. data/app/models/droom/dropbox_document.rb +3 -6
  88. data/app/models/droom/dropbox_token.rb +2 -3
  89. data/app/models/droom/event.rb +117 -163
  90. data/app/models/droom/event_type.rb +25 -0
  91. data/app/models/droom/folder.rb +36 -48
  92. data/app/models/droom/group.rb +35 -27
  93. data/app/models/droom/group_invitation.rb +7 -10
  94. data/app/models/droom/group_permission.rb +29 -0
  95. data/app/models/droom/invitation.rb +14 -23
  96. data/app/models/droom/mailing_list_membership.rb +0 -1
  97. data/app/models/droom/membership.rb +32 -31
  98. data/app/models/droom/organisation.rb +6 -3
  99. data/app/models/droom/permission.rb +19 -0
  100. data/app/models/droom/personal_folder.rb +9 -21
  101. data/app/models/droom/preference.rb +1 -2
  102. data/app/models/droom/scrap.rb +31 -26
  103. data/app/models/droom/service.rb +31 -0
  104. data/app/models/droom/tag.rb +10 -9
  105. data/app/models/droom/tagging.rb +1 -1
  106. data/app/models/droom/user.rb +453 -130
  107. data/app/models/droom/user_permission.rb +8 -0
  108. data/app/models/droom/venue.rb +21 -32
  109. data/app/serializers/droom/user_serializer.rb +45 -0
  110. data/app/serializers/droom/venue_serializer.rb +5 -0
  111. data/app/views/droom/dashboard/_documents.html.haml +1 -1
  112. data/app/views/droom/dashboard/_folders.html.haml +1 -1
  113. data/app/views/droom/dashboard/_future_events.html.haml +10 -8
  114. data/app/views/droom/dashboard/_groups.html.haml +1 -1
  115. data/app/views/droom/dashboard/_past_events.haml +19 -12
  116. data/app/views/droom/dashboard/_stream.html.haml +2 -2
  117. data/app/views/droom/{users/_extra_columns.html.haml → dashboard/_welcome.html.haml} +0 -0
  118. data/app/views/droom/dashboard/index.html.haml +3 -0
  119. data/app/views/droom/documents/_document.html.haml +0 -2
  120. data/app/views/droom/documents/_documents.html.haml +1 -1
  121. data/app/views/droom/documents/_documents_list.html.haml +1 -1
  122. data/app/views/droom/documents/_documents_table.html.haml +1 -1
  123. data/app/views/droom/documents/_form.html.haml +8 -5
  124. data/app/views/droom/documents/_listing.html.haml +4 -2
  125. data/app/views/droom/documents/index.html.haml +13 -7
  126. data/app/views/droom/documents/new.html.haml +1 -4
  127. data/app/views/droom/events/_action_menu.html.haml +2 -2
  128. data/app/views/droom/events/_attachments.html.haml +8 -0
  129. data/app/views/droom/events/_calendar.html.haml +4 -8
  130. data/app/views/droom/events/_event.html.haml +44 -63
  131. data/app/views/droom/events/_event_line.html.haml +1 -1
  132. data/app/views/droom/events/_events.html.haml +18 -2
  133. data/app/views/droom/events/_form.html.haml +26 -19
  134. data/app/views/droom/events/_invitations.html.haml +7 -3
  135. data/app/views/droom/events/_scrap_events.html.haml +8 -0
  136. data/app/views/droom/events/_suggested.html.haml +4 -1
  137. data/app/views/droom/events/calendar.html.haml +8 -0
  138. data/app/views/droom/events/index.html.haml +24 -26
  139. data/app/views/droom/events/show.html.haml +6 -6
  140. data/app/views/droom/folders/_contents.html.haml +34 -4
  141. data/app/views/droom/folders/_folder.html.haml +7 -2
  142. data/app/views/droom/folders/_form.html.haml +11 -8
  143. data/app/views/droom/folders/index.html.haml +19 -22
  144. data/app/views/droom/group_invitations/_attending_groups.html.haml +1 -1
  145. data/app/views/droom/group_permissions/_toggle.html.haml +18 -0
  146. data/app/views/droom/groups/_action_menu.haml +0 -2
  147. data/app/views/droom/groups/_created.html.haml +0 -1
  148. data/app/views/droom/groups/_form.html.haml +3 -0
  149. data/app/views/droom/groups/_group.html.haml +10 -8
  150. data/app/views/droom/groups/_groups.html.haml +1 -1
  151. data/app/views/droom/groups/_search_result.html.haml +1 -1
  152. data/app/views/droom/groups/_suggested.html.haml +1 -1
  153. data/app/views/droom/groups/index.html.haml +15 -16
  154. data/app/views/droom/invitations/_form.html.haml +1 -1
  155. data/app/views/droom/invitations/_invitation.html.haml +1 -1
  156. data/app/views/droom/invitations/_invitations.html.haml +4 -4
  157. data/app/views/droom/memberships/_button.html.haml +5 -5
  158. data/app/views/droom/memberships/_form.html.haml +26 -7
  159. data/app/views/droom/memberships/_member.html.haml +1 -1
  160. data/app/views/droom/memberships/{_membership_toggle.html.haml → _toggle.html.haml} +4 -4
  161. data/app/views/droom/memberships/index.html.haml +9 -0
  162. data/app/views/droom/organisations/_action_menu.html.haml +1 -1
  163. data/app/views/droom/organisations/_organisation.html.haml +2 -2
  164. data/app/views/droom/organisations/_suggested.html.haml +1 -1
  165. data/app/views/droom/organisations/index.html.haml +11 -11
  166. data/app/views/droom/panels/_admin.html.haml +2 -2
  167. data/app/views/droom/panels/_configuration.html.haml +28 -0
  168. data/app/views/droom/panels/_devices.html.haml +2 -4
  169. data/app/views/droom/panels/_search.html.haml +9 -0
  170. data/app/views/droom/permissions/_action_menu.html.haml +10 -0
  171. data/app/views/droom/permissions/_created.html.haml +3 -0
  172. data/app/views/droom/permissions/_form.html.haml +17 -0
  173. data/app/views/droom/permissions/edit.html.haml +7 -0
  174. data/app/views/droom/permissions/new.html.haml +8 -0
  175. data/app/views/droom/permissions/show.html.haml +4 -0
  176. data/app/views/droom/preferences/_checkbox.html.haml +4 -2
  177. data/app/views/droom/scraps/_caption.html.haml +0 -2
  178. data/app/views/droom/scraps/_credit.html.haml +1 -1
  179. data/app/views/droom/scraps/_form.html.haml +68 -69
  180. data/app/views/droom/scraps/_preload.html.haml +4 -0
  181. data/app/views/droom/scraps/_stream.html.haml +11 -3
  182. data/app/views/droom/scraps/_thumb.html.haml +33 -1
  183. data/app/views/droom/scraps/edit.html.haml +6 -1
  184. data/app/views/droom/scraps/full/_document.html.haml +4 -3
  185. data/app/views/droom/scraps/full/_event.html.haml +17 -16
  186. data/app/views/droom/scraps/full/_image.html.haml +1 -2
  187. data/app/views/droom/scraps/full/_link.html.haml +4 -3
  188. data/app/views/droom/scraps/full/_quote.html.haml +4 -7
  189. data/app/views/droom/scraps/full/_text.html.haml +3 -2
  190. data/app/views/droom/scraps/full/_video.html.haml +2 -2
  191. data/app/views/droom/scraps/new.html.haml +6 -1
  192. data/app/views/droom/scraps/show.html.haml +4 -3
  193. data/app/views/droom/services/_action_menu.html.haml +12 -0
  194. data/app/views/droom/services/_created.html.haml +3 -0
  195. data/app/views/droom/services/_form.html.haml +18 -0
  196. data/app/views/droom/services/_services.html.haml +44 -0
  197. data/app/views/droom/services/edit.html.haml +7 -0
  198. data/app/views/droom/services/index.html.haml +5 -0
  199. data/app/views/droom/{people → services}/new.html.haml +4 -3
  200. data/app/views/droom/services/show.html.haml +4 -0
  201. data/app/views/droom/shared/_controls.html.haml +2 -2
  202. data/app/views/droom/shared/_navigation.html.haml +2 -2
  203. data/app/views/droom/shared/_toolbar.html.haml +1 -1
  204. data/app/views/droom/suggestions/index.html.haml +1 -0
  205. data/app/views/droom/users/_action_menu.html.haml +21 -0
  206. data/app/views/droom/users/_suggested.html.haml +14 -0
  207. data/app/views/droom/users/_user.html.haml +2 -2
  208. data/app/views/droom/users/_users.html.haml +7 -0
  209. data/app/views/droom/users/_users_table.html.haml +21 -22
  210. data/app/views/droom/users/admin.html.haml +10 -0
  211. data/app/views/droom/users/confirmations/_after_confirmation.html.haml +2 -0
  212. data/app/views/droom/users/confirmations/_password_required.html.haml +30 -0
  213. data/app/views/droom/users/confirmations/failure.en.html.haml +22 -0
  214. data/app/views/droom/users/confirmations/show.html.haml +13 -0
  215. data/app/views/droom/users/edit.html.haml +2 -10
  216. data/app/views/droom/users/edit/_details.html.haml +13 -0
  217. data/app/views/droom/users/edit/_memberships.html.haml +13 -0
  218. data/app/views/droom/users/edit/_password_fields.html.haml +16 -0
  219. data/app/views/droom/users/edit/_preferences.html.haml +37 -0
  220. data/app/views/droom/users/edit/_profile.html.haml +26 -0
  221. data/app/views/droom/users/edit/_user_fields.html.haml +66 -0
  222. data/app/views/droom/users/index.html.haml +6 -32
  223. data/app/views/droom/users/new.html.haml +3 -0
  224. data/app/views/droom/users/passwords/completed.html.haml +13 -0
  225. data/app/views/{devise → droom/users}/passwords/edit.html.haml +10 -4
  226. data/app/views/{devise → droom/users}/passwords/new.html.haml +4 -3
  227. data/app/views/droom/users/passwords/show.html.haml +6 -0
  228. data/app/views/droom/users/show.html.haml +2 -0
  229. data/app/views/droom/users/show/_listed.html.haml +46 -0
  230. data/app/views/droom/users/show/_profile.html.haml +33 -0
  231. data/app/views/droom/users/show/_tabled.html.haml +28 -0
  232. data/config/initializers/chronic.rb +2 -0
  233. data/config/initializers/devise.rb +35 -2
  234. data/config/initializers/paperclip.rb +11 -6
  235. data/config/locales/devise.en.yml +1 -1
  236. data/config/locales/en.yml +198 -103
  237. data/config/routes.rb +37 -45
  238. data/db/migrate/20130207123614_stream.rb +5 -1
  239. data/db/migrate/20130225095328_create_droom_calendars.rb +0 -1
  240. data/db/migrate/20130627065459_permissions.rb +34 -0
  241. data/db/migrate/20130627071938_users_take_over.rb +38 -0
  242. data/db/migrate/20130627073759_user_properties.rb +34 -0
  243. data/db/migrate/20130627080021_no_more_people.rb +11 -0
  244. data/db/migrate/20130701122935_directory_groups.rb +8 -0
  245. data/db/migrate/20130701123152_remove_old_access_control.rb +16 -0
  246. data/db/migrate/20130729102857_more_scrap_data.rb +12 -0
  247. data/db/migrate/20130904080340_international_names.rb +17 -0
  248. data/db/migrate/20130904080341_honours.rb +5 -0
  249. data/db/migrate/20131124082222_simple_addresses.rb +25 -0
  250. data/db/migrate/20131201093351_event_time_zone.rb +5 -0
  251. data/db/migrate/20131217060311_session_revocable.rb +5 -0
  252. data/db/migrate/20131219180311_event_types.rb +15 -0
  253. data/lib/devise/strategies/cookie_authenticatable.rb +46 -0
  254. data/lib/droom.rb +48 -33
  255. data/lib/droom/auth_cookie.rb +82 -0
  256. data/lib/droom/cropper.rb +24 -0
  257. data/lib/droom/engine.rb +20 -2
  258. data/lib/droom/folders.rb +6 -6
  259. data/lib/droom/lazy_hash.rb +11 -1
  260. data/lib/droom/monkeys.rb +6 -6
  261. data/lib/droom/taggability.rb +1 -1
  262. data/lib/droom/validators.rb +1 -1
  263. data/lib/droom/version.rb +1 -1
  264. data/lib/generators/droom/install/templates/droom_initializer.rb +10 -2
  265. data/lib/paperclip/geometry_transformation.rb +80 -0
  266. data/lib/paperclip/validators/attachment_height_validator.rb +89 -0
  267. data/lib/paperclip/validators/attachment_width_validator.rb +89 -0
  268. data/lib/paperclip_processors/offset_thumbnail.rb +85 -0
  269. data/spec/dummy/config/application.rb +0 -7
  270. data/spec/dummy/config/environments/development.rb +1 -10
  271. data/spec/dummy/config/environments/production.rb +1 -0
  272. data/spec/dummy/config/environments/test.rb +2 -7
  273. data/spec/dummy/db/migrate/20130130120631_folder_ancestry_to_parents.droom.rb +1 -1
  274. data/spec/dummy/db/migrate/20130724124758_dropbox_tokens.droom.rb +10 -0
  275. data/spec/dummy/db/migrate/20130724124759_preference_uuids.droom.rb +6 -0
  276. data/spec/dummy/db/migrate/20130724124760_stream.droom.rb +14 -0
  277. data/spec/dummy/db/migrate/20130724124761_access_token_secret.droom.rb +6 -0
  278. data/spec/dummy/db/migrate/20130724124762_person_image.droom.rb +10 -0
  279. data/spec/dummy/db/migrate/20130724124763_devise_confirmable.droom.rb +14 -0
  280. data/spec/dummy/db/migrate/20130724124764_create_droom_calendars.droom.rb +20 -0
  281. data/spec/dummy/db/migrate/20130724124765_give_scraps_document.droom.rb +6 -0
  282. data/spec/dummy/db/migrate/20130724124766_privateness.droom.rb +10 -0
  283. data/spec/dummy/db/migrate/20130724124767_store_metadata.droom.rb +6 -0
  284. data/spec/dummy/db/migrate/20130724124768_folders_nicely.droom.rb +7 -0
  285. data/spec/dummy/db/migrate/20130724124769_niceties.droom.rb +8 -0
  286. data/spec/dummy/db/migrate/20130724124770_create_droom_dropbox_documents.droom.rb +12 -0
  287. data/spec/dummy/db/migrate/20130724124771_dropbox_documents_changed.droom.rb +6 -0
  288. data/spec/dummy/db/migrate/20130724124772_user_titles.droom.rb +6 -0
  289. data/spec/dummy/db/migrate/20130724124773_permissions.droom.rb +35 -0
  290. data/spec/dummy/db/migrate/20130724124774_users_take_over.droom.rb +39 -0
  291. data/spec/dummy/db/migrate/20130724124775_user_properties.droom.rb +35 -0
  292. data/spec/dummy/db/migrate/20130724124776_no_more_people.droom.rb +12 -0
  293. data/spec/dummy/db/migrate/20130724124777_directory_groups.droom.rb +9 -0
  294. data/spec/dummy/db/migrate/20130724124778_remove_old_access_control.droom.rb +17 -0
  295. data/spec/dummy/db/schema.rb +217 -140
  296. data/spec/factories/documents.rb +0 -5
  297. data/spec/factories/events.rb +0 -9
  298. data/spec/factories/user.rb +4 -2
  299. data/spec/lib/droom/folders_spec.rb +8 -8
  300. data/spec/models/droom/document_spec.rb +6 -43
  301. data/spec/models/droom/event_spec.rb +0 -34
  302. data/spec/models/droom/mailing_list_membership_spec.rb +4 -4
  303. data/spec/models/droom/membership_spec.rb +2 -2
  304. data/spec/spec_helper.rb +1 -10
  305. metadata +322 -282
  306. data/app/assets/images/droom/Untitled-1.png +0 -0
  307. data/app/assets/images/droom/asterisk.png +0 -0
  308. data/app/assets/images/droom/smallmanage.png +0 -0
  309. data/app/assets/javascripts/droom/lib/kalendae.js +0 -1692
  310. data/app/assets/stylesheets/lib/_kalendae.css.sass +0 -139
  311. data/app/controllers/droom/pages_controller.rb +0 -61
  312. data/app/controllers/droom/people_controller.rb +0 -111
  313. data/app/models/droom/document_attachment.rb +0 -37
  314. data/app/models/droom/page.rb +0 -26
  315. data/app/models/droom/person.rb +0 -309
  316. data/app/models/droom/recurrence_rule.rb +0 -82
  317. data/app/models/droom/user_action_observer.rb +0 -12
  318. data/app/views/devise/confirmations/failure.en.html.haml +0 -20
  319. data/app/views/devise/confirmations/show.html.haml +0 -19
  320. data/app/views/droom/confirmations/show.html.haml +0 -40
  321. data/app/views/droom/documents/_document_line.html.haml +0 -2
  322. data/app/views/droom/events/_created.html.haml +0 -2
  323. data/app/views/droom/folders/_attachments.html.haml +0 -3
  324. data/app/views/droom/pages/_contents.html.haml +0 -10
  325. data/app/views/droom/pages/_form.html.haml +0 -36
  326. data/app/views/droom/pages/_full_page.html.haml +0 -17
  327. data/app/views/droom/pages/_page.html.haml +0 -5
  328. data/app/views/droom/pages/_pages.html.haml +0 -2
  329. data/app/views/droom/pages/admin.html.haml +0 -24
  330. data/app/views/droom/pages/edit.html.haml +0 -1
  331. data/app/views/droom/pages/index.html.haml +0 -10
  332. data/app/views/droom/pages/new.html.haml +0 -4
  333. data/app/views/droom/pages/show.html.haml +0 -5
  334. data/app/views/droom/panels/_account.html.haml +0 -16
  335. data/app/views/droom/panels/_readers.html.haml +0 -18
  336. data/app/views/droom/panels/_suggestions.html.haml +0 -15
  337. data/app/views/droom/people/_action_menu.html.haml +0 -22
  338. data/app/views/droom/people/_created.html.haml +0 -6
  339. data/app/views/droom/people/_form.html.haml +0 -66
  340. data/app/views/droom/people/_listing.html.haml +0 -19
  341. data/app/views/droom/people/_memberships.html.haml +0 -24
  342. data/app/views/droom/people/_people.html.haml +0 -5
  343. data/app/views/droom/people/_person.html.haml +0 -32
  344. data/app/views/droom/people/_search_result.html.haml +0 -14
  345. data/app/views/droom/people/_suggested.html.haml +0 -14
  346. data/app/views/droom/people/edit.html.haml +0 -9
  347. data/app/views/droom/people/index.html.haml +0 -8
  348. data/app/views/droom/people/show.html.haml +0 -31
  349. data/app/views/droom/scraps/_heading.html.haml +0 -16
  350. data/app/views/droom/scraps/thumbs/_document.html.haml +0 -9
  351. data/app/views/droom/scraps/thumbs/_event.html.haml +0 -17
  352. data/app/views/droom/scraps/thumbs/_image.html.haml +0 -6
  353. data/app/views/droom/scraps/thumbs/_link.html.haml +0 -10
  354. data/app/views/droom/scraps/thumbs/_quote.html.haml +0 -8
  355. data/app/views/droom/scraps/thumbs/_text.html.haml +0 -8
  356. data/app/views/droom/scraps/thumbs/_video.html.haml +0 -6
  357. data/app/views/droom/users/_extra_columns_header.html.haml +0 -0
  358. data/app/views/droom/users/_extra_columns_note.html.haml +0 -0
  359. data/app/views/droom/users/_form.html.haml +0 -14
  360. data/app/views/droom/users/_password_fields.html.haml +0 -15
  361. data/app/views/droom/users/_user_or_person.html.haml +0 -72
  362. data/app/views/kaminari/_paginator.html.haml +0 -16
  363. data/lib/droom/dav_resource.rb +0 -36
  364. data/lib/droom/model_helpers.rb +0 -25
  365. data/lib/droom/routing.rb +0 -13
  366. data/spec/datasets/calendar_events_dataset.rb +0 -44
  367. data/spec/datasets/calendar_pages_dataset.rb +0 -8
  368. data/spec/datasets/calendar_sites_dataset.rb +0 -6
  369. data/spec/datasets/calendars_dataset.rb +0 -34
  370. data/spec/datasets/documents_dataset.rb +0 -28
  371. data/spec/datasets/recurrence_dataset.rb +0 -7
  372. data/spec/dummy/config/sunspot.yml +0 -17
  373. data/spec/dummy/log/dav.log +0 -1
  374. data/spec/dummy/log/development.log +0 -2
  375. data/spec/dummy/log/test.log +0 -1
  376. data/spec/dummy/solr/conf/admin-extra.html +0 -31
  377. data/spec/dummy/solr/conf/elevate.xml +0 -36
  378. data/spec/dummy/solr/conf/mapping-ISOLatin1Accent.txt +0 -246
  379. data/spec/dummy/solr/conf/protwords.txt +0 -21
  380. data/spec/dummy/solr/conf/schema.xml +0 -238
  381. data/spec/dummy/solr/conf/scripts.conf +0 -24
  382. data/spec/dummy/solr/conf/solrconfig.xml +0 -934
  383. data/spec/dummy/solr/conf/spellings.txt +0 -2
  384. data/spec/dummy/solr/conf/stopwords.txt +0 -58
  385. data/spec/dummy/solr/conf/synonyms.txt +0 -31
  386. data/spec/dummy/solr/data/development/index/segments.gen +0 -0
  387. data/spec/dummy/solr/data/development/index/segments_1 +0 -0
  388. data/spec/dummy/solr/data/development/spellchecker/segments.gen +0 -0
  389. data/spec/dummy/solr/data/development/spellchecker/segments_1 +0 -0
  390. data/spec/dummy/solr/data/test/index/segments.gen +0 -0
  391. data/spec/dummy/solr/data/test/index/segments_3nu +0 -0
  392. data/spec/dummy/solr/data/test/spellchecker/segments.gen +0 -0
  393. data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
  394. data/spec/factories/recurrence_rules.rb +0 -25
  395. data/spec/models/droom/person_spec.rb +0 -72
  396. data/spec/models/droom/recurrence_rule_spec.rb +0 -81
@@ -0,0 +1,50 @@
1
+ module Droom
2
+ class ServicesController < Droom::EngineController
3
+ respond_to :js, :html
4
+ layout :no_layout_if_pjax
5
+
6
+ load_and_authorize_resource
7
+
8
+ def index
9
+ @groups = Droom::Group.all
10
+ @group_permissions = Droom::GroupPermission.by_group_id
11
+ respond_with(@services) do |format|
12
+ format.js { render :partial => 'droom/services/services' }
13
+ end
14
+ end
15
+
16
+ def show
17
+ respond_with @service
18
+ end
19
+
20
+ def new
21
+ respond_with @service
22
+ end
23
+
24
+ def create
25
+ @service.update_attributes(service_params)
26
+ respond_with @service
27
+ end
28
+
29
+ def edit
30
+ respond_with @service
31
+ end
32
+
33
+ def update
34
+ @service.update_attributes(service_params)
35
+ respond_with @service
36
+ end
37
+
38
+ def destroy
39
+ @service.destroy
40
+ head :ok
41
+ end
42
+
43
+ protected
44
+
45
+ def service_params
46
+ params.require(:service).permit(:name, :slug, :description)
47
+ end
48
+
49
+ end
50
+ end
@@ -1,7 +1,9 @@
1
1
  module Droom
2
2
  class SuggestionsController < Droom::EngineController
3
- respond_to :json, :js
4
- before_filter :authenticate_user!
3
+ respond_to :html, :json, :js
4
+ layout false
5
+
6
+ skip_authorization_check
5
7
  before_filter :get_classes
6
8
 
7
9
  def index
@@ -12,11 +14,11 @@ module Droom
12
14
  @suggestions = []
13
15
  else
14
16
  if @types.include?('event') && fragment.length > 6 && span = Chronic.parse(fragment, :guess => false)
15
- @suggestions = Droom::Event.falling_within(span).visible_to(current_user.person)
17
+ @suggestions = Droom::Event.falling_within(span).accessible_by(current_ability)
16
18
  @title = span.width > 86400 ? "Events in #{fragment}" : "Events on #{fragment}"
17
19
  else
18
20
  @suggestions = @klasses.collect {|klass|
19
- klass.constantize.visible_to(current_user.person).matching(fragment).limit(max.to_i)
21
+ klass.camelize.constantize.accessible_by(current_ability).matching(fragment).limit(max.to_i)
20
22
  }.flatten.sort_by(&:name).slice(0, max.to_i)
21
23
  end
22
24
  end
@@ -0,0 +1,24 @@
1
+ module Droom::Users
2
+ class ConfirmationsController < Devise::ConfirmationsController
3
+
4
+ # We used to intervene here in several steps but by encrypting the stored token
5
+ # devise has made confirmation a bit of a black box. These days we just render a
6
+ # password-setting form if no password has been set. The form puts to users#update
7
+ # in the usual way.
8
+ #
9
+ # The usual behaviour is to redirect on confirmation. We intervene here only to
10
+ # render instead.
11
+ #
12
+ def show
13
+ @resource = self.resource = resource_class.confirm_by_token(params[:confirmation_token])
14
+ if @resource && @resource.confirmed?
15
+ # the confirmation call worked, ie the token was correct
16
+ sign_in(resource_name, @resource)
17
+ render
18
+ else
19
+ render :template => "droom/users/confirmations/failure"
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ module Droom::Users
2
+ class PasswordsController < Devise::PasswordsController
3
+ respond_to :html, :json
4
+ before_filter :set_access_control_headers
5
+ skip_before_filter :require_no_authentication, only: [:completed]
6
+ before_filter :remember_original_destination, only: [:new]
7
+
8
+ def show
9
+ render
10
+ end
11
+
12
+ def completed
13
+ render
14
+ end
15
+
16
+ def after_resetting_password_path_for(resource)
17
+ droom.complete_confirmation_url
18
+ end
19
+
20
+ def after_sending_reset_password_instructions_path_for(resource_name)
21
+ droom.show_confirmation_url
22
+ end
23
+
24
+ def remember_original_destination
25
+ store_full_location_for(:user, params[:backto])
26
+ end
27
+
28
+
29
+ # Bypass the usual store_location_for because we need to keep the full URI.
30
+ #
31
+ def store_full_location_for(resource_or_scope, location)
32
+ session_key = stored_location_key_for(resource_or_scope)
33
+ if location
34
+ session[session_key] = location
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,7 @@
1
+ module Droom::Users
2
+ class SessionsController < Devise::SessionsController
3
+ respond_to :html, :json
4
+ before_filter :set_access_control_headers
5
+ skip_before_action :verify_authenticity_token
6
+ end
7
+ end
@@ -3,16 +3,50 @@ module Droom
3
3
  helper Droom::DroomHelper
4
4
  respond_to :html, :js
5
5
  layout :no_layout_if_pjax
6
- before_filter :authenticate_user!
7
- before_filter :require_admin!, :only => [:index, :new, :create, :destroy]
8
- before_filter :get_user, :only => [:show, :edit, :update, :destroy, :welcome]
9
- before_filter :require_self_or_admin!, :only => [:edit, :update]
10
- before_filter :remember_token_auth
6
+ before_filter :set_view, only: [:show, :edit, :update]
7
+ load_and_authorize_resource
11
8
 
12
9
  def index
13
- @everyone = Droom::Person.all + Droom::User.unpersoned
10
+ @users = @users.in_name_order
11
+ @users = @users.matching(params[:q]) unless params[:q].blank?
12
+ @users = paginated(@users, 50)
13
+ respond_with @users do |format|
14
+ format.js { render :partial => 'droom/users/users' }
15
+ format.vcf { render :vcf => @users.map(&:to_vcf) }
16
+ end
17
+ end
18
+
19
+ def admin
20
+ @users = @users.in_name_order
21
+ if params[:q].blank?
22
+ @users = @users.in_any_directory_group
23
+ else
24
+ @users = @users.matching(params[:q])
25
+ end
26
+ @users = paginated(@users, 100)
27
+ respond_with @users
28
+ end
29
+
30
+ def show
31
+ @invitation = Droom::Invitation.find(params[:invitation_id]) if params[:invitation_id].present?
32
+ respond_with @user
14
33
  end
15
34
 
35
+ def new
36
+ if params[:group_id].present?
37
+ @user.groups << Droom::Group.find(params[:group_id])
38
+ end
39
+ if params[:organisation_id].present? && Droom.use_organisations?
40
+ @user.organisation = Droom::Organisation.find(params[:organisation_id])
41
+ end
42
+ respond_with @user
43
+ end
44
+
45
+ def create
46
+ @user.update_attributes(user_params)
47
+ respond_with @user
48
+ end
49
+
16
50
  def edit
17
51
  respond_with @user
18
52
  end
@@ -20,49 +54,37 @@ module Droom
20
54
  # This has to handle small preference updates over js and large account-management forms over html.
21
55
  #
22
56
  def update
23
- if @user.update_attributes(params[:user])
24
- sign_in(@user, :bypass => true) if @user == current_user # changing the password invalidates the session unless we refresh it with the new one
25
- respond_to do |format|
26
- format.js {
27
- partial = params[:response_partial] || "confirmation"
28
- render :partial => "droom/users/#{partial}"
29
- }
30
- format.html {
31
- if current_user.admin? && @user != current_user
32
- flash[:notice] = t(:user_updated, :name => @user.name)
33
- else
34
- flash[:notice] = t(:your_preferences_saved)
35
- end
57
+ if @user.update_attributes(user_params)
58
+ sign_in(@user, :bypass => true) if @user == current_user # changing the password invalidates the session
59
+ respond_with @user do |f|
60
+ f.html {
61
+ flash[:notice] = "Thank you. Your account has been updated."
36
62
  redirect_to droom.dashboard_url
37
63
  }
64
+ f.js {
65
+ render partial: "droom/users/show/profile"
66
+ }
38
67
  end
39
68
  else
40
- render :edit
69
+ Rails.logger.warn "update failed: #{@user.errors.to_a.inspect}"
70
+ respond_with @user
41
71
  end
42
72
  end
43
73
 
44
- protected
45
-
46
- def get_user
47
- if current_user.admin? && params[:id]
48
- @user = User.find(params[:id])
49
- else
50
- @user = current_user
51
- end
74
+ def destroy
75
+ @user.destroy
76
+ head :ok
52
77
  end
53
-
54
- private
55
78
 
56
- def require_self_or_admin!
57
- raise Droom::PermissionDenied unless current_user && (current_user.admin? || @user == current_user)
58
- end
79
+ protected
59
80
 
60
- def remember_token_auth
61
- if params[:auth_token] && user_signed_in?
62
- current_user.remember_me = true
63
- sign_in current_user
64
- end
81
+ def user_params
82
+ params.require(:user).permit(:title, :family_name, :given_name, :chinese_name, :honours, :email, :password, :password_confirmation, :phone, :description, :admin, :gender, :preferences_attributes, :confirm, :old_id, :send_confirmation, :defer_confirmation, :address, :post_code, :country_code, :mobile, :organisation_id, :female, :image, group_ids: [], preferences_attributes: [:id, :_destroy, :uuid, :key, :value])
65
83
  end
66
84
 
85
+ def set_view
86
+ @view = params[:view] if %w{listed tabled profile preferences}.include?(params[:view])
87
+ @view ||= 'profile'
88
+ end
67
89
  end
68
90
  end
@@ -1,37 +1,30 @@
1
1
  module Droom
2
2
  class VenuesController < Droom::EngineController
3
3
  respond_to :json, :html
4
-
5
- before_filter :authenticate_user!
6
- before_filter :get_venues, :only => ["index"]
7
- before_filter :get_venue, :only => [:show, :update]
4
+
5
+ load_and_authorize_resource
8
6
 
9
7
  def index
10
8
  respond_with @venues do |format|
11
9
  format.json {
12
- render :json => @venues.to_json(:person => @person)
10
+ render :json => @venues.to_json(:user => @user)
13
11
  }
14
12
  end
15
13
  end
16
-
14
+
17
15
  def show
18
16
  respond_with @venue
19
17
  end
20
-
18
+
21
19
  def update
22
20
  @venue.update_attributes(params[:venue])
23
21
  respond_with @venue
24
22
  end
25
-
23
+
26
24
  protected
27
25
 
28
- def get_venues
29
- @venues = Venue.all
30
- end
31
-
32
- def get_venue
33
- @venue = Venue.find(params[:id])
34
- @events = @venue.events.visible_to(current_person).future_and_current
26
+ def venue_params
27
+ params.require(:venue).permit(:name, :lat, :lng, :address, :post_code, :country_code)
35
28
  end
36
29
 
37
30
  end
@@ -1,8 +1,8 @@
1
1
  module Droom
2
2
  class YoutubeController < Droom::EngineController
3
3
  respond_to :js, :json
4
- before_filter :authenticate_user!
5
4
  layout nil
5
+ skip_authorization_check
6
6
 
7
7
  def show
8
8
  @video = Droom.yt_client.video_by(params[:yt_id])
@@ -3,18 +3,24 @@ require 'dropbox_sdk'
3
3
  module Droom
4
4
  module DroomHelper
5
5
 
6
+ def allowed?(permission_code)
7
+ current_user.admin? || current_user.permitted?(permission_code)
8
+ end
9
+
6
10
  def action_menulink(thing, html_options={})
7
- classname = thing.class.to_s.downcase.underscore.split('/').last
8
- html_options.reverse_merge!({
9
- :class => "",
10
- :data => {:menu => "#{classname}_#{thing.id}"}
11
- })
12
- html_options[:class] << " menu"
13
- link_to t(:edit), "#", html_options if editable?(thing)
11
+ if can?(:edit, thing)
12
+ classname = thing.class.to_s.downcase.underscore.split('/').last
13
+ html_options.reverse_merge!({
14
+ :class => "",
15
+ :data => {:menu => "#{classname}_#{thing.id}"}
16
+ })
17
+ html_options[:class] << " menu"
18
+ link_to t(:edit), "#", html_options if editable?(thing)
19
+ end
14
20
  end
15
21
 
16
22
  def action_menu(thing, locals={})
17
- if editable?(thing)
23
+ if can?(:edit, thing)
18
24
  type = thing.class.to_s.downcase.underscore
19
25
  classname = type.split('/').last
20
26
  locals[classname.to_sym] = thing
@@ -34,10 +40,6 @@ module Droom
34
40
  DropboxSession.new(Droom.dropbox_app_key, Droom.dropbox_app_secret)
35
41
  end
36
42
 
37
- def current_person
38
- current_user.person if user_signed_in?
39
- end
40
-
41
43
  def admin?
42
44
  current_user && current_user.admin?
43
45
  end
@@ -46,17 +48,20 @@ module Droom
46
48
  controller.controller_name
47
49
  end
48
50
 
49
- def preference_checkbox(key)
50
- render :partial => "droom/preferences/checkbox", :locals => {:key => key}
51
+ def preference_checkbox(key, options={})
52
+ render :partial => "droom/preferences/checkbox", :locals => options.merge({:key => key})
51
53
  end
52
54
 
53
55
  def preference_radio_set(key, *values)
54
56
  render :partial => "droom/preferences/radio_set", :locals => {:key => key, :values => values}
55
57
  end
56
58
 
57
- def shorten(text, length=64)
59
+ def shorten(text, length=64, separator=" ")
60
+ text = strip_tags(text)
58
61
  length = length[:length] if length.is_a?(Hash)
59
- truncate(strip_tags(text), {:length => length, :separator => " "})
62
+ content_tag :span, class: 'shortened', title: text do
63
+ truncate(text, {:length => length, :separator => separator})
64
+ end
60
65
  end
61
66
 
62
67
  def dropbox?
@@ -91,7 +96,7 @@ module Droom
91
96
 
92
97
  def nav_link_to(name, url, options={})
93
98
  options[:class] ||= ""
94
- options[:class] << "here" if (request.path == url) || (request.path =~ /^#{url}/)
99
+ options[:class] << "here" if (request.path == url) || (url != "/" && request.path =~ /^#{url}/)
95
100
  link_to name, url, options
96
101
  end
97
102
 
@@ -0,0 +1,81 @@
1
+ module Droom
2
+ class Ability
3
+ include CanCan::Ability
4
+
5
+ def initialize(user)
6
+ # invitation only:
7
+ # no unauthenticated access allowed.
8
+
9
+ if user
10
+ if user.admin?
11
+ # An admin flag on the user table overrides this whole mechanism to make all things possible.
12
+ #
13
+ can :manage, :all
14
+
15
+ else
16
+ # Otherwise, most items are visible to all.
17
+ #
18
+ can :read, Droom::Event
19
+ can :read, Droom::Folder
20
+ can :read, Droom::Document
21
+ can :read, Droom::Scrap
22
+ can :read, Droom::Venue
23
+ can :read, Droom::User
24
+ can :read, Droom::Group
25
+ can :read, Droom::Organisation
26
+
27
+ # And they can edit themselves
28
+ #
29
+ can :update, Droom::User, :id => user.id
30
+ cannot :edit, Droom::User
31
+
32
+ # If someone has been allowed to create something, they are generally allowed to edit or remove it.
33
+ # This rule must sit after the user rules because users have no created_by_id column.
34
+ #
35
+ # can :manage, :all, :created_by_id => user.id
36
+
37
+ # Then other abilities are determined by permissions. Permissions here are relatively abstract and
38
+ # not closely coupled to Cancan abilities. Here we map them onto more concrete operations.
39
+ #
40
+ if user.permitted?('droom.calendar')
41
+ can :create, Droom::Event
42
+ can :create, Droom::EventSet
43
+ can :create, Droom::Venue
44
+ can :create, Droom::Invitation
45
+ can :create, Droom::GroupInvitation
46
+ if user.permitted?('droom.attach')
47
+ can :create, Droom::AgendaCategory
48
+ can :create, Droom::Document
49
+ end
50
+ end
51
+
52
+ if user.permitted?('droom.directory')
53
+ can :create, Droom::Group
54
+ can :create, Droom::Organisation
55
+ can :create, Droom::User
56
+ end
57
+
58
+ if user.permitted?('droom.library')
59
+ can :create, Droom::Folder
60
+ can :create, Droom::Document
61
+ end
62
+
63
+ if user.permitted?('droom.stream')
64
+ can :create, Droom::Scrap
65
+ end
66
+
67
+ if user.permitted?('droom.pages')
68
+ can :create, Droom::Page
69
+ end
70
+
71
+ # Some models are purely administrative.
72
+ #
73
+ can :create, Droom::DropboxToken
74
+ can :create, Droom::DropboxDocument
75
+ can :create, Droom::MailingListMembership
76
+
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end