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
@@ -1,139 +0,0 @@
1
- .kalendae
2
- position: relative
3
- display: inline-block
4
- background: white
5
- padding: 0
6
- width: 210px
7
- cursor: default
8
- &.k-floating
9
- position: absolute
10
- top: 0
11
- left: 0
12
- z-index: 100
13
- margin: 0
14
- +box-shadow
15
- .k-btn-close
16
- display: none
17
- .k-calendar
18
- display: inline-block
19
- overflow: hidden
20
- .k-title
21
- text-align: center
22
- white-space: nowrap
23
- position: relative
24
- height: 32px
25
- font-size: 18px
26
- line-height: 32px
27
- .k-btn-previous-month, .k-btn-next-month
28
- display: block
29
- position: absolute
30
- width: 32px
31
- height: 32px
32
- overflow: hidden
33
- text-indent: 50px
34
- cursor: pointer
35
- top: 0
36
- background:
37
- position: -5px 5px
38
- repeat: no-repeat
39
- image: image-url('droom/minimonth.png')
40
- .k-btn-previous-year, .k-btn-next-year
41
- display: none
42
- .k-btn-previous-month
43
- left: 0
44
- background-position: 0 -91px
45
- &:hover
46
- background-position: 0 -139px
47
- .k-btn-next-month
48
- right: 0
49
- background-position: 0 5px
50
- &:hover
51
- background-position: 0 -43px
52
- .k-btn-previous-month:after
53
- content: "\2039"
54
- .k-btn-next-month:after
55
- content: "\203A"
56
- .k-btn-previous-year:after
57
- content: "\00AB"
58
- .k-btn-next-year:after
59
- content: "\00BB"
60
- .k-btn-previous-month:hover, .k-btn-next-month:hover
61
- color: white
62
- background-color: $verypale
63
- .k-btn-previous-month:active, .k-btn-next-month:active
64
- color: white
65
- background-color: $link
66
- .k-btn-previous-year:hover, .k-btn-next-year:hover
67
- color: #6FDF81
68
- .k-title, .k-header, .k-days
69
- display: block
70
- overflow: hidden
71
- &.k-disable-next-month-btn .k-btn-next-month, &.k-disable-previous-month-btn .k-btn-previous-month, &.k-disable-next-year-btn .k-btn-next-year, &.k-disable-previous-year-btn .k-btn-previous-year
72
- display: none
73
- .k-header span, .k-days span
74
- float: left
75
- margin: 0
76
- border: 0
77
- width: 22px
78
- padding: 5px 5px 5px 3px
79
- .k-header span
80
- text-align: center
81
- color: $pale
82
- .k-days span
83
- text-align: right
84
- height: 1.1em
85
- line-height: 1em
86
- color: #999
87
- .k-today
88
- font-weight: bold
89
- .k-days span
90
- &.k-active
91
- background-color: #fff
92
- cursor: pointer
93
- color: $dark
94
- &:hover
95
- background: $verypale
96
- &.k-selected
97
- background-color: $link
98
- font-weight: bold
99
- color: white
100
- &.k-range
101
- background: none
102
- border-color: #6DD4FE
103
- &.k-active
104
- background: #C4D4F1
105
- border-color: #19AEFE
106
- color: #333
107
- &.k-active:hover
108
- border-color: #666
109
- &.k-out-of-month
110
- color: #ddd
111
-
112
- &.ie8
113
- &.k-floating
114
- border: 1px solid #ccc
115
- .k-btn-close
116
- width: 20px
117
- height: 20px
118
- border: none
119
- background: url('close.png') no-repeat top left
120
- &:after
121
- display: none
122
- .k-btn-previous-month, .k-btn-next-month, .k-btn-previous-year, .k-btn-next-year
123
- width: 16px
124
- height: 16px
125
- cursor: pointer
126
- background: #777777 url('arrows.png') no-repeat center left
127
- position: absolute
128
- top: 0
129
- .k-btn-next-month, .k-btn-next-year
130
- background-position: center right
131
- .k-btn-previous-month:hover, .k-btn-next-month:hover
132
- background-color: #7EA0E2
133
- .k-btn-previous-year, .k-btn-next-year
134
- background-color: #333
135
- .k-btn-previous-year:hover, .k-btn-next-year:hover
136
- background-color: #6FDF81
137
- .k-btn-previous-month:after, .k-btn-next-month:after, .k-btn-previous-year:after, .k-btn-next-year:after
138
- display: none
139
-
@@ -1,61 +0,0 @@
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
@@ -1,111 +0,0 @@
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 :find_people, :only => :index
8
- before_filter :get_groups
9
- before_filter :get_person, :only => [:show, :edit, :update, :destroy, :invite]
10
- before_filter :build_person, :only => [:new, :create]
11
- before_filter :confine_to_self, :except => [:index, :show]
12
-
13
- def index
14
- respond_with @people do |format|
15
- format.js { render :partial => 'droom/people/people' }
16
- format.vcf { render :vcf => @people.map(&:to_vcf) }
17
- end
18
- end
19
-
20
- def show
21
- respond_with @person do |format|
22
- format.js {
23
- @invitation = Droom::Invitation.find_by_id(params[:invitation_id])
24
- render :partial => 'droom/people/person'
25
- }
26
- end
27
- end
28
-
29
- def create
30
- if @person.update_attributes(params[:person])
31
- respond_with @person do |format|
32
- format.js { render :partial => "droom/users/user_or_person" }
33
- format.html { render :partial => "droom/people/person" }
34
- end
35
- else
36
- respond_with @person
37
- end
38
- end
39
-
40
- def update
41
- if @person.update_attributes(params[:person])
42
- respond_with @person do |format|
43
- format.js { render :partial => "droom/users/user_or_person" }
44
- format.html { render :partial => "droom/people/person" }
45
- end
46
- else
47
- respond_with @person
48
- end
49
- end
50
-
51
- def destroy
52
- @user = @person.user
53
- @person.destroy
54
- if @user
55
- respond_with @user do |format|
56
- format.js { render :partial => "droom/users/user_or_person"}
57
- format.html { head :ok }
58
- end
59
- else
60
- head :ok
61
- end
62
- end
63
-
64
- def invite
65
- @user = @person.invite!
66
- render :partial => "droom/users/user_or_person", :locals => {:user_or_person => @person}
67
- end
68
-
69
- protected
70
-
71
- def build_person
72
- @organisation = Droom::Organisation.find(params[:organisation_id]) if params[:organisation_id]
73
- @person = Droom::Person.new(params[:person])
74
- @person.organisation = @organisation if @organisation
75
- end
76
-
77
- def get_person
78
- @person = Person.find(params[:id])
79
- end
80
-
81
- def get_groups
82
- @groups = Droom::Group.all
83
- end
84
-
85
- def find_people
86
- if current_user.admin?
87
- @people = Person.scoped({})
88
- else
89
- @people = Person.visible_to(current_person)
90
- end
91
-
92
- if params[:not_group_id]
93
- @people = @people.not_in_group(Droom::Group.find(params[:not_group_id]))
94
- end
95
-
96
- unless params[:q].blank?
97
- @searching = true
98
- @people = @people.matching(params[:q])
99
- end
100
-
101
- @show = params[:show] || 10
102
- @page = params[:page] || 1
103
- @people = @people.page(@page).per(@show)
104
- end
105
-
106
- def confine_to_self
107
- @person = current_user.person unless current_user.admin?
108
- end
109
-
110
- end
111
- end
@@ -1,37 +0,0 @@
1
- module Droom
2
- class DocumentAttachment < ActiveRecord::Base
3
- attr_accessible :attachee, :document, :agenda_section, :category_id
4
-
5
- belongs_to :document
6
- belongs_to :attachee, :polymorphic => true
7
- belongs_to :category
8
- belongs_to :created_by, :class_name => "Droom::User"
9
-
10
- def slug
11
- if attachee
12
- attachee.slug
13
- else
14
- 'Unattached'
15
- end
16
- end
17
-
18
- def category_name
19
- category ? category.name : "uncategorised"
20
- end
21
-
22
- def move_document_to_folder
23
- recipient = if category
24
- # attachee will be an event
25
- attachee.find_or_create_agenda_category(category)
26
- else
27
- attachee
28
- end
29
- if document
30
- document.folder = nil
31
- recipient.receive_document(document)
32
- document.save
33
- end
34
- end
35
-
36
- end
37
- end
@@ -1,26 +0,0 @@
1
- # Pages are currently just minimal text-holders. The text is entered in markdown,
2
- # rendered on save and placed into the usual layout.
3
- #
4
- module Droom
5
- class Page < ActiveRecord::Base
6
- attr_accessible :title, :slug, :summary, :body, :video_id
7
-
8
- before_validation :ensure_slug
9
- before_save :render_body
10
- validates :slug, :uniqueness => true, :presence => true
11
- validates :title, :presence => true
12
- default_scope order('title ASC')
13
-
14
- protected
15
-
16
- def ensure_slug
17
- ensure_presence_and_uniqueness_of(:slug, title.parameterize)
18
- end
19
-
20
- def render_body
21
- Rails.logger.warn ">>> rendering body: #{self.body.inspect}"
22
- markdown = RDiscount.new(self.body)
23
- self.rendered_body = markdown.to_html
24
- end
25
- end
26
- end
@@ -1,309 +0,0 @@
1
- # This has been pulled from the yearbook and simplified. Docs need updating to match.
2
- require 'vcard'
3
-
4
- module Droom
5
- class Person < ActiveRecord::Base
6
- attr_accessible :name, :forename, :email, :phone, :description, :user, :user_id, :title, :invite_on_creation, :admin_user, :position, :post_line1, :post_line2, :post_city, :post_region, :post_code, :mobile, :dob, :organisation_id
7
- attr_accessor :invite_on_creation, :admin_user
8
- acts_as_list
9
-
10
- belongs_to :organisation
11
- belongs_to :created_by, :class_name => "Droom::User"
12
- has_many :organisations, :foreign_key => :owner_id
13
-
14
- ### Group memberships
15
- #
16
- has_many :memberships, :dependent => :destroy
17
- has_many :groups, :through => :memberships
18
- has_many :mailing_list_memberships, :through => :memberships
19
-
20
- has_many :dropbox_documents
21
-
22
- has_many :preferences, :dependent => :destroy, :foreign_key => :created_by_id
23
- accepts_nested_attributes_for :preferences
24
-
25
- # The data requirements are minimal, with the idea that the directory will be populated gradually.
26
- validates :name, :presence => true
27
-
28
- def admit_to(group)
29
- memberships.find_or_create_by_group_id(group.id) if group
30
- end
31
-
32
- def expel_from(group)
33
- memberships.of_group(group).destroy_all
34
- end
35
-
36
- def member_of?(group)
37
- group && memberships.of_group(group).any?
38
- end
39
-
40
- ### Event invitations
41
- #
42
- has_many :invitations, :dependent => :destroy
43
- has_many :events, :through => :invitations
44
-
45
- def invite_to(event)
46
- invitations.find_or_create_by_event_id(event.id) if event
47
- end
48
-
49
- def uninvite_from(event)
50
- invitations.to_event(event).destroy_all
51
- end
52
-
53
- def invited_to?(event)
54
- event && !!invitation_to(event)
55
- end
56
-
57
- def invitation_to(event)
58
- invitations.to_event(event).first
59
- end
60
-
61
- ## Folder permissions
62
- #
63
- # To simplify the business of showing and listing documents, we have adopted the convention that all
64
- # documents live in a folder. Person accounts have links to those folders through the very thin
65
- # PersonalFolder joining class, and at the view level we only ever show folder and subfolder lists.
66
- # The only place we ever need a list of all the documents visible to this person is when searching, and
67
- # for that we use the Document.visible_to scope, usually by way of the #documents method defined below.
68
- #
69
- # Personal folders are created and destroyed along with invitations and memberships..
70
- #
71
- has_many :personal_folders
72
- has_many :folders, :through => :personal_folders
73
-
74
- def add_personal_folders(folders=[])
75
- self.folders << folders if folders
76
- end
77
-
78
- def remove_personal_folders(folders=[])
79
- self.folders.delete(folders) if folders
80
- end
81
-
82
- def documents
83
- Document.visible_to(self)
84
- end
85
-
86
- ## User accounts
87
- #
88
- # The `user` is this person's administrative account for logging in and out and forgetting her password.
89
- # A person can be listed without ever having a user, and a user account can exist (for an administrator)
90
- # without having a person.
91
- belongs_to :user, :class_name => "Droom::User"
92
- before_save :update_user
93
-
94
- after_create :invite_if_instructed
95
-
96
- scope :unusered, where("user_id IS NULL")
97
- scope :usered, where("user_id IS NOT NULL")
98
-
99
- # some magic glue to allow slightly indiscriminate use of user and person objects.
100
-
101
- def person
102
- self
103
- end
104
-
105
- def admin?
106
- user && user.admin?
107
- end
108
-
109
- def has_admin_user?
110
- user && user.admin?
111
- end
112
-
113
-
114
- ### Images
115
- #
116
- has_upload :image,
117
- :geometry => "520x520#",
118
- :styles => {
119
- :icon => "32x32#",
120
- :thumb => "130x130#",
121
- :precrop => "1200x1200<"
122
- }
123
-
124
- ## Scopes
125
-
126
- default_scope order("droom_people.#{Droom.people_sort}")
127
-
128
- scope :all_private, where("private = 1")
129
- scope :not_private, where("private <> 1 OR private IS NULL")
130
- scope :all_public, where("public = 1 AND private <> 1 OR private IS NULL")
131
- scope :not_public, where("public <> 1 OR private = 1)")
132
-
133
- scope :matching, lambda { |fragment|
134
- fragment = "%#{fragment}%"
135
- where('droom_people.name LIKE :f OR droom_people.forename LIKE :f OR droom_people.email LIKE :f OR droom_people.phone LIKE :f OR CONCAT(droom_people.forename, " ", droom_people.name) LIKE :f', :f => fragment)
136
- }
137
-
138
- # warning! won't work in SQLite.
139
- scope :visible_to, lambda { |person|
140
- if person
141
- if person.admin?
142
- scoped({})
143
- else
144
- select('droom_people.*')
145
- .joins('LEFT OUTER JOIN droom_memberships as dm1 on droom_people.id = dm1.person_id')
146
- .joins('LEFT OUTER JOIN droom_memberships as dm2 on dm1.group_id = dm2.group_id')
147
- .where(['(dm2.person_id = ?) OR (droom_people.private <> 1)', person.id])
148
- .group('droom_people.id')
149
- end
150
- else
151
- all_public
152
- end
153
- }
154
-
155
- scope :personally_invited_to_event, lambda { |event|
156
- joins('LEFT OUTER JOIN droom_invitations on droom_people.id = droom_invitations.person_id').where('droom_invitations.group_invitation_id is null AND droom_invitations.event_id = ?', event.id)
157
- }
158
-
159
-
160
- def membership_of(group)
161
- memberships.find_by_group_id(group.id)
162
- end
163
-
164
-
165
-
166
-
167
-
168
-
169
-
170
- def full_name
171
- [forename, name].compact.join(' ').strip
172
- end
173
-
174
- def formal_name
175
- [title, forename, name].compact.join(' ').strip
176
- end
177
-
178
- def informal_name
179
- if Droom.use_forenames
180
- forename
181
- else
182
- name
183
- end
184
- end
185
-
186
- # *for_selection* returns a list of people in options_for_select format with which to populate a select box.
187
- #
188
- def self.for_selection
189
- self.published.map{|p| [p.name, p.id] }
190
- end
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
- # Snail is a library that abstracts away - as far as possible - the vagaries of international address formats. Here we map our data columns onto Snail's abstract representations so that they can be rendered into the correct format for their country.
204
- def address
205
- Snail.new(
206
- :line_1 => post_line1,
207
- :line_2 => post_line2,
208
- :city => post_city,
209
- :region => post_region,
210
- :postal_code => post_code,
211
- :country => post_country
212
- )
213
- end
214
-
215
- def address?
216
- post_line1? && post_city
217
- end
218
-
219
- def to_vcf
220
- @vcard ||= Vcard::Vcard::Maker.make2 do |maker|
221
- maker.add_name do |n|
222
- n.given = name || ""
223
- end
224
- maker.add_addr {|a|
225
- a.location = 'home' # until we do this properly with multiple contact sets
226
- a.country = post_country || ""
227
- a.region = post_region || ""
228
- a.locality = post_city || ""
229
- a.street = "#{post_line1}, #{post_line2}"
230
- a.postalcode = post_code || ""
231
- }
232
- maker.add_tel phone { |t| t.location = 'home' } unless phone.blank?
233
- # maker.add_tel mobile { |t| t.location = 'cell' } unless mobile.blank?
234
- maker.add_email email { |e| t.location = 'home' }
235
- end
236
- @vcard.to_s
237
- end
238
-
239
- def self.vcards_for(people=[])
240
- people.map(&:vcf).join("\n")
241
- end
242
-
243
- def as_suggestion
244
- {
245
- :type => 'person',
246
- :prompt => formal_name,
247
- :value => formal_name,
248
- :id => id
249
- }
250
- end
251
-
252
- def as_search_result
253
- {
254
- :type => 'person',
255
- :prompt => name,
256
- :value => name,
257
- :id => id
258
- }
259
- end
260
-
261
- def invitable?
262
- name? && email?
263
- end
264
-
265
- def invite!
266
- invite_user
267
- end
268
-
269
- protected
270
-
271
- def invite_if_instructed
272
- invite_user if invite_on_creation?
273
- end
274
-
275
- # ### Administration & callbacks
276
- #
277
- # At some point we may want to create a user to log in and look after this person.
278
- # This usually has the side effect of sending out a confirmation message.
279
- #
280
-
281
- def invite_on_creation?
282
- !!invite_on_creation && invite_on_creation != 0 && invite_on_creation != "0"
283
- end
284
-
285
- def invite_user
286
- if self.user
287
- self.user.send_confirmation_instructions
288
- elsif invitable?
289
- user = self.create_user(:forename => forename, :name => name, :email => email)
290
- self.save
291
- end
292
- self.user
293
- end
294
-
295
- def update_user
296
- if self.user && self.user.persisted?
297
- self.user.update_column(:email, self.email) if email_changed?
298
- self.user.update_column(:name, self.name) if name_changed?
299
- self.user.update_column(:forename, self.forename) if forename_changed?
300
- end
301
- end
302
-
303
- def update_status
304
- update_column(:privileged, memberships.privileged.any?)
305
- end
306
-
307
- end
308
- end
309
-