community_engine 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (737) hide show
  1. data/.gitignore +15 -0
  2. data/.gitmodules +0 -0
  3. data/.travis.yml +9 -0
  4. data/CHANGELOG +118 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +30 -0
  7. data/README.markdown +188 -0
  8. data/Rakefile +54 -0
  9. data/UPGRADING.markdown +93 -0
  10. data/about.yml +7 -0
  11. data/app/assets/images/auth/facebook_32.png +0 -0
  12. data/app/assets/images/auth/facebook_64.png +0 -0
  13. data/app/assets/images/auth/google_32.png +0 -0
  14. data/app/assets/images/auth/google_64.png +0 -0
  15. data/app/assets/images/auth/linked_in_32.png +0 -0
  16. data/app/assets/images/auth/linked_in_64.png +0 -0
  17. data/app/assets/images/auth/open_id_32.png +0 -0
  18. data/app/assets/images/auth/remove.png +0 -0
  19. data/app/assets/images/auth/twitter_32.png +0 -0
  20. data/app/assets/images/auth/twitter_64.png +0 -0
  21. data/app/assets/images/bg_h6btn.gif +0 -0
  22. data/app/assets/images/bg_navbar.gif +0 -0
  23. data/app/assets/images/clearbits/bg_rounded.gif +0 -0
  24. data/app/assets/images/clearbits/comment.gif +0 -0
  25. data/app/assets/images/clearbits/lock.gif +0 -0
  26. data/app/assets/images/clearbits/smile.gif +0 -0
  27. data/app/assets/images/close.gif +0 -0
  28. data/app/assets/images/cropper/marqueeHoriz.gif +0 -0
  29. data/app/assets/images/cropper/marqueeVert.gif +0 -0
  30. data/app/assets/images/feed.png +0 -0
  31. data/app/assets/images/icon_missing_medium.gif +0 -0
  32. data/app/assets/images/icon_missing_thumb.gif +0 -0
  33. data/app/assets/images/icons/31.png +0 -0
  34. data/app/assets/images/icons/52.png +0 -0
  35. data/app/assets/images/icons/accept.png +0 -0
  36. data/app/assets/images/icons/activity_default.png +0 -0
  37. data/app/assets/images/icons/add.png +0 -0
  38. data/app/assets/images/icons/book.png +0 -0
  39. data/app/assets/images/icons/bullet_arrow_down.png +0 -0
  40. data/app/assets/images/icons/bullet_arrow_down_50.png +0 -0
  41. data/app/assets/images/icons/clipping.png +0 -0
  42. data/app/assets/images/icons/comment.png +0 -0
  43. data/app/assets/images/icons/comments.png +0 -0
  44. data/app/assets/images/icons/date.png +0 -0
  45. data/app/assets/images/icons/delete.png +0 -0
  46. data/app/assets/images/icons/email.png +0 -0
  47. data/app/assets/images/icons/email_edit.png +0 -0
  48. data/app/assets/images/icons/email_go.png +0 -0
  49. data/app/assets/images/icons/email_open.png +0 -0
  50. data/app/assets/images/icons/group_go.png +0 -0
  51. data/app/assets/images/icons/heart.png +0 -0
  52. data/app/assets/images/icons/heart_add.png +0 -0
  53. data/app/assets/images/icons/heart_off.png +0 -0
  54. data/app/assets/images/icons/ical.gif +0 -0
  55. data/app/assets/images/icons/page_white.png +0 -0
  56. data/app/assets/images/icons/page_white_magnify.png +0 -0
  57. data/app/assets/images/icons/picture.png +0 -0
  58. data/app/assets/images/icons/poll.png +0 -0
  59. data/app/assets/images/icons/post.png +0 -0
  60. data/app/assets/images/icons/printer.png +0 -0
  61. data/app/assets/images/icons/rss.png +0 -0
  62. data/app/assets/images/icons/slides.png +0 -0
  63. data/app/assets/images/icons/tag_blue.png +0 -0
  64. data/app/assets/images/icons/user.png +0 -0
  65. data/app/assets/images/icons/user_add.png +0 -0
  66. data/app/assets/images/icons/user_edit.png +0 -0
  67. data/app/assets/images/icons/user_go.png +0 -0
  68. data/app/assets/images/icons/vote.png +0 -0
  69. data/app/assets/images/icons/world.png +0 -0
  70. data/app/assets/images/icons/wrench.png +0 -0
  71. data/app/assets/images/logo.gif +0 -0
  72. data/app/assets/images/reply_background.png +0 -0
  73. data/app/assets/images/search.gif +0 -0
  74. data/app/assets/images/spinner.gif +0 -0
  75. data/app/assets/images/spinner_black.gif +0 -0
  76. data/app/assets/images/spinner_bounce.gif +0 -0
  77. data/app/assets/images/swf/choose.png +0 -0
  78. data/app/assets/images/swf/line_grapher.swf +0 -0
  79. data/app/assets/images/swf/swfupload.swf +0 -0
  80. data/app/assets/images/thumb.gif +0 -0
  81. data/app/assets/javascripts/builder.js +136 -0
  82. data/app/assets/javascripts/calendarview.js +839 -0
  83. data/app/assets/javascripts/community_engine.js +20 -0
  84. data/app/assets/javascripts/cropper.css +182 -0
  85. data/app/assets/javascripts/cropper.js +566 -0
  86. data/app/assets/javascripts/forum.js +73 -0
  87. data/app/assets/javascripts/lightbox.js +151 -0
  88. data/app/assets/javascripts/prototip-min.js +27 -0
  89. data/app/assets/javascripts/rails.js +202 -0
  90. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/css/advimage.css +84 -0
  91. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/editor_plugin.js +52 -0
  92. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/editor_plugin_src.js +45 -0
  93. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/image.htm +180 -0
  94. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/img/sample.gif +0 -0
  95. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/js/functions.js +508 -0
  96. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/langs/en.js +3 -0
  97. data/app/assets/javascripts/tinymce/plugins/curblyadvimage/langs/en_dlg.js +43 -0
  98. data/app/assets/stylesheets/community_engine.css +6 -0
  99. data/app/assets/stylesheets/forum.css +605 -0
  100. data/app/assets/stylesheets/lightbox.css +38 -0
  101. data/app/assets/stylesheets/prototip.css +73 -0
  102. data/app/assets/stylesheets/reset-fonts-grids.css +8 -0
  103. data/app/assets/stylesheets/screen.css +977 -0
  104. data/app/controllers/activities_controller.rb +38 -0
  105. data/app/controllers/admin_controller.rb +80 -0
  106. data/app/controllers/ads_controller.rb +85 -0
  107. data/app/controllers/albums_controller.rb +106 -0
  108. data/app/controllers/authorizations_controller.rb +41 -0
  109. data/app/controllers/base_controller.rb +151 -0
  110. data/app/controllers/categories_controller.rb +118 -0
  111. data/app/controllers/clippings_controller.rb +192 -0
  112. data/app/controllers/comment_sweeper.rb +35 -0
  113. data/app/controllers/comments_controller.rb +179 -0
  114. data/app/controllers/event_sweeper.rb +24 -0
  115. data/app/controllers/events_controller.rb +173 -0
  116. data/app/controllers/favorite_sweeper.rb +29 -0
  117. data/app/controllers/favorites_controller.rb +36 -0
  118. data/app/controllers/forums_controller.rb +71 -0
  119. data/app/controllers/friendships_controller.rb +126 -0
  120. data/app/controllers/homepage_features_controller.rb +68 -0
  121. data/app/controllers/invitations_controller.rb +46 -0
  122. data/app/controllers/messages_controller.rb +95 -0
  123. data/app/controllers/metro_areas_controller.rb +68 -0
  124. data/app/controllers/moderators_controller.rb +26 -0
  125. data/app/controllers/monitorships_controller.rb +20 -0
  126. data/app/controllers/page_sweeper.rb +33 -0
  127. data/app/controllers/pages_controller.rb +70 -0
  128. data/app/controllers/password_resets_controller.rb +52 -0
  129. data/app/controllers/photo_manager_controller.rb +11 -0
  130. data/app/controllers/photos_controller.rb +189 -0
  131. data/app/controllers/post_sweeper.rb +36 -0
  132. data/app/controllers/posts_controller.rb +252 -0
  133. data/app/controllers/rsvps_controller.rb +77 -0
  134. data/app/controllers/sb_posts_controller.rb +149 -0
  135. data/app/controllers/sessions_controller.rb +34 -0
  136. data/app/controllers/sitemap_controller.rb +21 -0
  137. data/app/controllers/statistics_controller.rb +34 -0
  138. data/app/controllers/taggable_sweeper.rb +38 -0
  139. data/app/controllers/tags_controller.rb +104 -0
  140. data/app/controllers/theme_controller.rb +60 -0
  141. data/app/controllers/topics_controller.rb +122 -0
  142. data/app/controllers/users_controller.rb +426 -0
  143. data/app/controllers/vote_sweeper.rb +16 -0
  144. data/app/controllers/votes_controller.rb +24 -0
  145. data/app/helpers/base_helper.rb +290 -0
  146. data/app/helpers/forums_helper.rb +31 -0
  147. data/app/helpers/friendships_helper.rb +16 -0
  148. data/app/helpers/monitorships_helper.rb +2 -0
  149. data/app/helpers/posts_helper.rb +17 -0
  150. data/app/helpers/sitemap_helper.rb +7 -0
  151. data/app/helpers/users_helper.rb +6 -0
  152. data/app/models/ad.rb +43 -0
  153. data/app/models/album.rb +12 -0
  154. data/app/models/asset.rb +3 -0
  155. data/app/models/authorization.rb +60 -0
  156. data/app/models/category.rb +20 -0
  157. data/app/models/choice.rb +13 -0
  158. data/app/models/clipping.rb +78 -0
  159. data/app/models/clipping_image.rb +9 -0
  160. data/app/models/comment.rb +122 -0
  161. data/app/models/country.rb +24 -0
  162. data/app/models/event.rb +61 -0
  163. data/app/models/facebook_profile.rb +32 -0
  164. data/app/models/facebook_publisher.rb +45 -0
  165. data/app/models/favorite.rb +47 -0
  166. data/app/models/forum.rb +22 -0
  167. data/app/models/friendship.rb +64 -0
  168. data/app/models/friendship_status.rb +3 -0
  169. data/app/models/homepage_feature.rb +15 -0
  170. data/app/models/invitation.rb +36 -0
  171. data/app/models/message.rb +84 -0
  172. data/app/models/message_thread.rb +33 -0
  173. data/app/models/metro_area.rb +16 -0
  174. data/app/models/moderatorship.rb +8 -0
  175. data/app/models/monitorship.rb +6 -0
  176. data/app/models/page.rb +8 -0
  177. data/app/models/photo.rb +83 -0
  178. data/app/models/poll.rb +39 -0
  179. data/app/models/post.rb +201 -0
  180. data/app/models/role.rb +5 -0
  181. data/app/models/rsvp.rb +24 -0
  182. data/app/models/sb_post.rb +67 -0
  183. data/app/models/state.rb +4 -0
  184. data/app/models/topic.rb +72 -0
  185. data/app/models/twitter_profile.rb +20 -0
  186. data/app/models/user.rb +483 -0
  187. data/app/models/user_notifier.rb +140 -0
  188. data/app/models/user_session.rb +14 -0
  189. data/app/models/vote.rb +19 -0
  190. data/app/views/activities/_activity.html.haml +56 -0
  191. data/app/views/activities/_icon.html.haml +14 -0
  192. data/app/views/activities/_unhandled_item.html.haml +1 -0
  193. data/app/views/activities/destroy.js.rjs +1 -0
  194. data/app/views/activities/index.html.haml +16 -0
  195. data/app/views/activities/network.html.haml +14 -0
  196. data/app/views/admin/comments.html.haml +71 -0
  197. data/app/views/admin/events.html.haml +33 -0
  198. data/app/views/admin/messages.html.haml +4 -0
  199. data/app/views/admin/users.html.haml +69 -0
  200. data/app/views/ads/edit.html.haml +46 -0
  201. data/app/views/ads/index.html.haml +43 -0
  202. data/app/views/ads/new.html.haml +44 -0
  203. data/app/views/ads/show.html.haml +36 -0
  204. data/app/views/albums/_form.html.haml +14 -0
  205. data/app/views/albums/edit.html.haml +16 -0
  206. data/app/views/albums/new.html.haml +15 -0
  207. data/app/views/albums/show.html.haml +32 -0
  208. data/app/views/base/_homepage_banner_message.html.haml +19 -0
  209. data/app/views/base/advertise.html.haml +8 -0
  210. data/app/views/base/plaxo.html.haml +5 -0
  211. data/app/views/base/site_index.html.haml +35 -0
  212. data/app/views/categories/_tips.html.haml +11 -0
  213. data/app/views/categories/edit.html.haml +34 -0
  214. data/app/views/categories/index.html.haml +30 -0
  215. data/app/views/categories/new.html.haml +9 -0
  216. data/app/views/categories/show.html.haml +45 -0
  217. data/app/views/clippings/_clipping.html.haml +18 -0
  218. data/app/views/clippings/_images.html.haml +3 -0
  219. data/app/views/clippings/_meta.html.haml +26 -0
  220. data/app/views/clippings/edit.html.haml +26 -0
  221. data/app/views/clippings/index.html.haml +35 -0
  222. data/app/views/clippings/load_images_from_uri.js.rjs +1 -0
  223. data/app/views/clippings/new.html.haml +29 -0
  224. data/app/views/clippings/new_clipping.html.haml +91 -0
  225. data/app/views/clippings/show.html.haml +56 -0
  226. data/app/views/clippings/site_index.html.haml +34 -0
  227. data/app/views/comments/_comment.html.haml +42 -0
  228. data/app/views/comments/_comment_form.html.haml +50 -0
  229. data/app/views/comments/_edit_form.html.haml +29 -0
  230. data/app/views/comments/create.js.rjs +20 -0
  231. data/app/views/comments/edit.js.rjs +7 -0
  232. data/app/views/comments/index.html.haml +23 -0
  233. data/app/views/comments/update.js.rjs +9 -0
  234. data/app/views/events/_event.html.haml +32 -0
  235. data/app/views/events/_subscribe.html.haml +7 -0
  236. data/app/views/events/edit.html.haml +34 -0
  237. data/app/views/events/index.html.haml +22 -0
  238. data/app/views/events/new.html.haml +32 -0
  239. data/app/views/events/show.html.haml +29 -0
  240. data/app/views/facebook/_fb_require.html.haml +11 -0
  241. data/app/views/favorites/_favorite.html.haml +5 -0
  242. data/app/views/favorites/create.js.rjs +17 -0
  243. data/app/views/favorites/destroy.js.rjs +14 -0
  244. data/app/views/favorites/index.html.haml +10 -0
  245. data/app/views/favorites/show.html.haml +13 -0
  246. data/app/views/forums/_form.html.haml +21 -0
  247. data/app/views/forums/edit.html.haml +11 -0
  248. data/app/views/forums/index.html.haml +70 -0
  249. data/app/views/forums/new.html.haml +9 -0
  250. data/app/views/forums/show.html.haml +85 -0
  251. data/app/views/friendships/_friendship.html.haml +16 -0
  252. data/app/views/friendships/_friendships.html.erb +14 -0
  253. data/app/views/friendships/accepted.html.haml +13 -0
  254. data/app/views/friendships/denied.html.haml +8 -0
  255. data/app/views/friendships/index.html.erb +3 -0
  256. data/app/views/friendships/index.xml.builder +29 -0
  257. data/app/views/friendships/pending.html.haml +7 -0
  258. data/app/views/friendships/show.html.haml +12 -0
  259. data/app/views/homepage_features/edit.html.haml +31 -0
  260. data/app/views/homepage_features/index.html.haml +30 -0
  261. data/app/views/homepage_features/new.html.haml +30 -0
  262. data/app/views/homepage_features/show.html.haml +29 -0
  263. data/app/views/invitations/index.html.erb +16 -0
  264. data/app/views/invitations/new.html.haml +33 -0
  265. data/app/views/layouts/application.html.haml +59 -0
  266. data/app/views/messages/_form.html.haml +24 -0
  267. data/app/views/messages/_inbox.html.haml +41 -0
  268. data/app/views/messages/_sent.html.haml +34 -0
  269. data/app/views/messages/_sidebar_nav.html.haml +9 -0
  270. data/app/views/messages/index.html.haml +8 -0
  271. data/app/views/messages/new.html.haml +10 -0
  272. data/app/views/messages/show.html.haml +40 -0
  273. data/app/views/metro_areas/edit.html.haml +16 -0
  274. data/app/views/metro_areas/index.html.haml +28 -0
  275. data/app/views/metro_areas/new.html.haml +16 -0
  276. data/app/views/metro_areas/show.html.haml +22 -0
  277. data/app/views/moderators/_toggle.html.erb +14 -0
  278. data/app/views/moderators/create.js.rjs +5 -0
  279. data/app/views/moderators/destroy.js.rjs +1 -0
  280. data/app/views/monitorships/create.js.rjs +4 -0
  281. data/app/views/monitorships/destroy.js.rjs +4 -0
  282. data/app/views/pages/_form.html.haml +25 -0
  283. data/app/views/pages/edit.html.haml +16 -0
  284. data/app/views/pages/edit.html.haml~ +16 -0
  285. data/app/views/pages/index.html.haml +34 -0
  286. data/app/views/pages/index.html.haml~ +28 -0
  287. data/app/views/pages/new.html.haml +14 -0
  288. data/app/views/pages/show.html.haml +8 -0
  289. data/app/views/pages/show.html.haml~ +6 -0
  290. data/app/views/password_resets/edit.html.haml +16 -0
  291. data/app/views/password_resets/new.html.haml +13 -0
  292. data/app/views/photo_manager/index.html.haml +49 -0
  293. data/app/views/photos/_manage_photos.html.haml +14 -0
  294. data/app/views/photos/_show_image_list.html.haml +24 -0
  295. data/app/views/photos/edit.html.haml +39 -0
  296. data/app/views/photos/index.html.haml +28 -0
  297. data/app/views/photos/index.xml.builder +9 -0
  298. data/app/views/photos/manage_photos.js.rjs +5 -0
  299. data/app/views/photos/new.html.haml +51 -0
  300. data/app/views/photos/recent.html.haml +8 -0
  301. data/app/views/photos/show.html.haml +53 -0
  302. data/app/views/polls/_edit.html.haml +15 -0
  303. data/app/views/polls/_excerpt.html.haml +4 -0
  304. data/app/views/polls/_new.html.haml +10 -0
  305. data/app/views/polls/_poll_ui.html.haml +37 -0
  306. data/app/views/polls/_polls_sidebar.html.haml +8 -0
  307. data/app/views/posts/_author_profile.html.haml +21 -0
  308. data/app/views/posts/_favorited_post.html.haml +10 -0
  309. data/app/views/posts/_post.html.haml +29 -0
  310. data/app/views/posts/_send_to_friend.html.erb +29 -0
  311. data/app/views/posts/_sidebar_post.html.haml +1 -0
  312. data/app/views/posts/edit.html.haml +48 -0
  313. data/app/views/posts/featured.html.haml +19 -0
  314. data/app/views/posts/index.html.haml +23 -0
  315. data/app/views/posts/manage.html.haml +66 -0
  316. data/app/views/posts/new.html.haml +67 -0
  317. data/app/views/posts/popular.html.haml +35 -0
  318. data/app/views/posts/preview.html.haml +27 -0
  319. data/app/views/posts/recent.html.haml +29 -0
  320. data/app/views/posts/show.html.haml +85 -0
  321. data/app/views/rsvps/edit.html.haml +9 -0
  322. data/app/views/rsvps/new.html.haml +9 -0
  323. data/app/views/sb_posts/_dummy_forum_post.html.erb +13 -0
  324. data/app/views/sb_posts/_edit.html.erb +31 -0
  325. data/app/views/sb_posts/_post.xml.builder +10 -0
  326. data/app/views/sb_posts/_reply_form.html.haml +37 -0
  327. data/app/views/sb_posts/_sb_post.html.haml +34 -0
  328. data/app/views/sb_posts/create.js.rjs +16 -0
  329. data/app/views/sb_posts/edit.html.erb +13 -0
  330. data/app/views/sb_posts/edit.js.rjs +6 -0
  331. data/app/views/sb_posts/index.html.haml +55 -0
  332. data/app/views/sb_posts/index.xml.builder +20 -0
  333. data/app/views/sb_posts/monitored.html.erb +55 -0
  334. data/app/views/sb_posts/monitored.xml.builder +15 -0
  335. data/app/views/sb_posts/update.js.rjs +5 -0
  336. data/app/views/sessions/new.html.haml +27 -0
  337. data/app/views/shared/_admin_nav.html.haml +19 -0
  338. data/app/views/shared/_bio_help.html.haml +4 -0
  339. data/app/views/shared/_box.html.haml +3 -0
  340. data/app/views/shared/_contact.html.haml +5 -0
  341. data/app/views/shared/_explore.html.haml +9 -0
  342. data/app/views/shared/_footer_content.html.haml +13 -0
  343. data/app/views/shared/_header.html.haml +42 -0
  344. data/app/views/shared/_location_chooser.html.haml +21 -0
  345. data/app/views/shared/_login_sidebar.html.haml +14 -0
  346. data/app/views/shared/_messages.html.haml +8 -0
  347. data/app/views/shared/_scripts_and_styles.html.haml +12 -0
  348. data/app/views/shared/_user_menu.html.haml +21 -0
  349. data/app/views/sitemap/index.html.haml +21 -0
  350. data/app/views/sitemap/index.xml.builder +28 -0
  351. data/app/views/statistics/activities.xml.builder +33 -0
  352. data/app/views/statistics/index.html.haml +56 -0
  353. data/app/views/tags/edit.html.haml +19 -0
  354. data/app/views/tags/index.html.haml +25 -0
  355. data/app/views/tags/manage.html.haml +37 -0
  356. data/app/views/tags/show.html.haml +65 -0
  357. data/app/views/topics/_form.html.haml +28 -0
  358. data/app/views/topics/_recent_topics_sidebar.haml +22 -0
  359. data/app/views/topics/edit.html.haml +10 -0
  360. data/app/views/topics/new.html.haml +21 -0
  361. data/app/views/topics/show.html.haml +107 -0
  362. data/app/views/topics/show.xml.builder +15 -0
  363. data/app/views/user_notifier/activation.text.erb +11 -0
  364. data/app/views/user_notifier/comment_notice.text.erb +8 -0
  365. data/app/views/user_notifier/follow_up_comment_notice.text.erb +15 -0
  366. data/app/views/user_notifier/follow_up_comment_notice_anonymous.text.erb +18 -0
  367. data/app/views/user_notifier/forgot_username.text.erb +8 -0
  368. data/app/views/user_notifier/friendship_accepted.text.erb +8 -0
  369. data/app/views/user_notifier/friendship_request.text.erb +8 -0
  370. data/app/views/user_notifier/message_notification.text.erb +14 -0
  371. data/app/views/user_notifier/new_forum_post_notice.text.erb +14 -0
  372. data/app/views/user_notifier/password_reset_instructions.text.erb +10 -0
  373. data/app/views/user_notifier/post_recommendation.text.erb +32 -0
  374. data/app/views/user_notifier/signup_invitation.text.erb +14 -0
  375. data/app/views/user_notifier/signup_notification.text.erb +16 -0
  376. data/app/views/users/_dashboard_nav.html.haml +40 -0
  377. data/app/views/users/_omniauth_connect.html.haml +21 -0
  378. data/app/views/users/_profile_completeness.html.haml +21 -0
  379. data/app/views/users/_profile_user_info_sidebar.html.haml +50 -0
  380. data/app/views/users/_search_options.html.haml +10 -0
  381. data/app/views/users/_sidebar_user.html.haml +8 -0
  382. data/app/views/users/_user.html.haml +31 -0
  383. data/app/views/users/crop_profile_photo.html.haml +40 -0
  384. data/app/views/users/dashboard.html.haml +44 -0
  385. data/app/views/users/edit.html.haml +75 -0
  386. data/app/views/users/edit_account.html.haml +64 -0
  387. data/app/views/users/forgot_username.html.haml +13 -0
  388. data/app/views/users/index.html.haml +18 -0
  389. data/app/views/users/invite.html.haml +31 -0
  390. data/app/views/users/new.html.haml +54 -0
  391. data/app/views/users/resend_activation.html.haml +13 -0
  392. data/app/views/users/show.html.haml +103 -0
  393. data/app/views/users/signup_completed.html.haml +8 -0
  394. data/app/views/users/statistics.html.haml +28 -0
  395. data/app/views/users/upload_profile_photo.html.haml +15 -0
  396. data/app/views/users/welcome_about.html.haml +66 -0
  397. data/app/views/users/welcome_invite.html.haml +33 -0
  398. data/app/views/users/welcome_photo.html.haml +29 -0
  399. data/app/views/votes/create.js.rjs +6 -0
  400. data/community_engine.gemspec +55 -0
  401. data/config/application_config.rb +162 -0
  402. data/config/initializers/cropper.rb +19 -0
  403. data/config/initializers/mce_options.rb +40 -0
  404. data/config/initializers/recaptcha_constants.rb +6 -0
  405. data/config/initializers/white_list.rb +7 -0
  406. data/config/locales/de-DE.yml +1271 -0
  407. data/config/locales/en.yml +1658 -0
  408. data/config/locales/es-AR.yml +758 -0
  409. data/config/locales/es-ES.yml +340 -0
  410. data/config/locales/es-MX.yml +672 -0
  411. data/config/locales/fr-FR.yml +1509 -0
  412. data/config/locales/ja-JP.yml +1321 -0
  413. data/config/locales/ru-RU.yml +97 -0
  414. data/config/locales/sr-CP.yml +89 -0
  415. data/config/locales/sv-SE.yml +1320 -0
  416. data/config/routes.rb +242 -0
  417. data/db/migrate/001_create_users.rb +26 -0
  418. data/db/migrate/002_add_activation_code_to_user.rb +11 -0
  419. data/db/migrate/003_create_photos.rb +22 -0
  420. data/db/migrate/004_add_tag_support.rb +21 -0
  421. data/db/migrate/005_create_friendships.rb +14 -0
  422. data/db/migrate/006_add_comments_tables.rb +18 -0
  423. data/db/migrate/007_create_friendship_statuses.rb +13 -0
  424. data/db/migrate/008_add_friendship_statuses.rb +14 -0
  425. data/db/migrate/009_create_clippings.rb +16 -0
  426. data/db/migrate/010_create_invitations.rb +14 -0
  427. data/db/migrate/011_create_homepage_features.rb +22 -0
  428. data/db/migrate/012_create_posts.rb +19 -0
  429. data/db/migrate/013_create_states.rb +13 -0
  430. data/db/migrate/014_add_states.rb +11 -0
  431. data/db/migrate/015_create_metro_areas.rb +15 -0
  432. data/db/migrate/016_add_metro_areas.rb +295 -0
  433. data/db/migrate/017_add_sessions_table.rb +20 -0
  434. data/db/migrate/018_create_categories.rb +11 -0
  435. data/db/migrate/019_change_comment_to_text_field.rb +10 -0
  436. data/db/migrate/020_create_login_slug.rb +9 -0
  437. data/db/migrate/021_add_category_names.rb +8 -0
  438. data/db/migrate/023_add_denied_friendship_status.rb +13 -0
  439. data/db/migrate/024_add_notification_preferences.rb +13 -0
  440. data/db/migrate/025_create_countries.rb +11 -0
  441. data/db/migrate/026_add_countries.rb +230 -0
  442. data/db/migrate/027_add_us_to_existing_metro_areas.rb +9 -0
  443. data/db/migrate/028_add_country_id_to_users.rb +9 -0
  444. data/db/migrate/029_add_us_to_users_with_states.rb +14 -0
  445. data/db/migrate/030_add_users_counter_cache.rb +9 -0
  446. data/db/migrate/031_news_to_talk.rb +10 -0
  447. data/db/migrate/033_featured_users.rb +9 -0
  448. data/db/migrate/034_add_last_login.rb +9 -0
  449. data/db/migrate/035_track_emailed.rb +9 -0
  450. data/db/migrate/036_create_skills.rb +11 -0
  451. data/db/migrate/037_create_offerings.rb +12 -0
  452. data/db/migrate/038_add_zag_to_users.rb +13 -0
  453. data/db/migrate/039_create_activities_table.rb +17 -0
  454. data/db/migrate/040_add_category_tips.rb +9 -0
  455. data/db/migrate/041_create_events_table.rb +19 -0
  456. data/db/migrate/042_add_privacy_to_users.rb +10 -0
  457. data/db/migrate/043_sql_session_store_setup.rb +39 -0
  458. data/db/migrate/044_category_improvements.rb +11 -0
  459. data/db/migrate/045_adding_indexes.rb +39 -0
  460. data/db/migrate/046_adding_ads.rb +20 -0
  461. data/db/migrate/047_add_polls.rb +30 -0
  462. data/db/migrate/049_add_activities_count.rb +9 -0
  463. data/db/migrate/050_create_initial_schema.rb +73 -0
  464. data/db/migrate/051_add_audience_limitation_to_ads.rb +9 -0
  465. data/db/migrate/052_create_assets.rb +21 -0
  466. data/db/migrate/053_create_favoritables.rb +23 -0
  467. data/db/migrate/054_add_published_as_to_posts.rb +13 -0
  468. data/db/migrate/055_add_published_at_to_posts.rb +15 -0
  469. data/db/migrate/056_create_roles.rb +28 -0
  470. data/db/migrate/057_add_more_indexes.rb +19 -0
  471. data/db/migrate/058_add_anonymous_commenting_fields.rb +15 -0
  472. data/db/migrate/059_create_messages.rb +16 -0
  473. data/db/migrate/060_still_more_indexes.rb +19 -0
  474. data/db/migrate/061_postgres_compatibility_changes.rb +9 -0
  475. data/db/migrate/062_add_notify_to_comments.rb +11 -0
  476. data/db/migrate/063_create_albums.rb +15 -0
  477. data/db/migrate/064_add_album_id_to_photos.rb +9 -0
  478. data/db/migrate/065_add_view_count_to_albums.rb +9 -0
  479. data/db/migrate/066_add_view_count_to_photos.rb +9 -0
  480. data/db/migrate/067_create_static_pages.rb +22 -0
  481. data/db/migrate/068_create_rsvps.rb +13 -0
  482. data/db/migrate/069_create_pages.rb +29 -0
  483. data/db/migrate/070_add_pages.rb +11 -0
  484. data/db/migrate/071_authlogic_compatibility_changes.rb +43 -0
  485. data/db/migrate/072_add_allow_rsvp_to_events.rb +9 -0
  486. data/db/migrate/073_add_taggings_count_to_tags.rb +9 -0
  487. data/db/migrate/074_add_threading_to_messages.rb +19 -0
  488. data/db/migrate/075_add_anonymous_forum_posting.rb +16 -0
  489. data/db/migrate/076_add_comment_notification_toggle.rb +9 -0
  490. data/db/migrate/077_paperclip_changes.rb +36 -0
  491. data/db/migrate/078_create_authorizations.rb +20 -0
  492. data/db/migrate/079_create_slugs.rb +18 -0
  493. data/db/sample/users.rb +55 -0
  494. data/generators/ce_plugin/USAGE +7 -0
  495. data/generators/ce_plugin/ce_plugin_generator.rb +25 -0
  496. data/generators/ce_plugin/templates/README +13 -0
  497. data/generators/ce_plugin/templates/desert_routes.rb +3 -0
  498. data/generators/ce_plugin/templates/init.rb +8 -0
  499. data/generators/ce_plugin/templates/plugin.rb +1 -0
  500. data/generators/plugin_migration/plugin_migration_generator.rb +101 -0
  501. data/generators/plugin_migration/templates/plugin_migration.erb +13 -0
  502. data/lang/TRANSLATION.markdown +32 -0
  503. data/lib/community_engine/authenticated_system.rb +167 -0
  504. data/lib/community_engine/authenticated_test_helper.rb +113 -0
  505. data/lib/community_engine/community_engine_sha1_crypto_method.rb +12 -0
  506. data/lib/community_engine/engine.rb +39 -0
  507. data/lib/community_engine/engines_extensions.rb +7 -0
  508. data/lib/community_engine/i18n_extensions.rb +31 -0
  509. data/lib/community_engine/localized_application.rb +83 -0
  510. data/lib/community_engine/rails_asset_extensions.rb +131 -0
  511. data/lib/community_engine/url_upload.rb +15 -0
  512. data/lib/community_engine/version.rb +10 -0
  513. data/lib/community_engine/viewable.rb +12 -0
  514. data/lib/community_engine.rb +34 -0
  515. data/lib/tag_hacks.rb +24 -0
  516. data/lib/tasks/community_engine_tasks.rake +87 -0
  517. data/public/favicon.ico +0 -0
  518. data/sample_files/s3.yml +17 -0
  519. data/test/fixtures/ads.yml +13 -0
  520. data/test/fixtures/albums.yml +16 -0
  521. data/test/fixtures/categories.yml +16 -0
  522. data/test/fixtures/clippings.yml +15 -0
  523. data/test/fixtures/comments.yml +55 -0
  524. data/test/fixtures/countries.yml +13 -0
  525. data/test/fixtures/events.yml +61 -0
  526. data/test/fixtures/files/Granite.bmp +0 -0
  527. data/test/fixtures/files/library.jpg +0 -0
  528. data/test/fixtures/forums.yml +10 -0
  529. data/test/fixtures/friendship_statuses.yml +10 -0
  530. data/test/fixtures/friendships.yml +15 -0
  531. data/test/fixtures/homepage_features.yml +13 -0
  532. data/test/fixtures/invitations.yml +5 -0
  533. data/test/fixtures/messages.yml +24 -0
  534. data/test/fixtures/metro_areas.yml +24 -0
  535. data/test/fixtures/moderatorships.yml +4 -0
  536. data/test/fixtures/monitorships.yml +10 -0
  537. data/test/fixtures/pages.yml +26 -0
  538. data/test/fixtures/photos.yml +29 -0
  539. data/test/fixtures/posts.yml +49 -0
  540. data/test/fixtures/roles.yml +9 -0
  541. data/test/fixtures/rsvps.yml +7 -0
  542. data/test/fixtures/sb_posts.yml +90 -0
  543. data/test/fixtures/states.yml +7 -0
  544. data/test/fixtures/taggings.yml +15 -0
  545. data/test/fixtures/tags.yml +11 -0
  546. data/test/fixtures/topics.yml +63 -0
  547. data/test/fixtures/users.yml +222 -0
  548. data/test/functional/activities_controller_test.rb +62 -0
  549. data/test/functional/admin_controller_test.rb +60 -0
  550. data/test/functional/ads_controller_test.rb +51 -0
  551. data/test/functional/albums_controller_test.rb +120 -0
  552. data/test/functional/base_controller_test.rb +27 -0
  553. data/test/functional/categories_controller_test.rb +51 -0
  554. data/test/functional/clippings_controller_test.rb +123 -0
  555. data/test/functional/comments_controller_test.rb +215 -0
  556. data/test/functional/events_controller_test.rb +104 -0
  557. data/test/functional/favorites_controller_test.rb +53 -0
  558. data/test/functional/forums_controller_test.rb +95 -0
  559. data/test/functional/friendships_controller_test.rb +98 -0
  560. data/test/functional/homepage_features_controller_test.rb +69 -0
  561. data/test/functional/invitations_controller_test.rb +45 -0
  562. data/test/functional/messages_controller_test.rb +154 -0
  563. data/test/functional/metro_areas_controller_test.rb +63 -0
  564. data/test/functional/moderators_controller_test.rb +22 -0
  565. data/test/functional/monitorships_controller_test.rb +72 -0
  566. data/test/functional/pages_controller_test.rb +95 -0
  567. data/test/functional/password_reset_controller_test.rb +34 -0
  568. data/test/functional/photo_manager_controller_test.rb +21 -0
  569. data/test/functional/photos_controller_test.rb +203 -0
  570. data/test/functional/posts_controller_test.rb +224 -0
  571. data/test/functional/rsvps_controller_test.rb +92 -0
  572. data/test/functional/sb_posts_controller_test.rb +193 -0
  573. data/test/functional/sessions_controller_test.rb +55 -0
  574. data/test/functional/sitemap_controller_test.rb +9 -0
  575. data/test/functional/statistics_controller_test.rb +18 -0
  576. data/test/functional/tags_controller_test.rb +52 -0
  577. data/test/functional/theme_controller_test.rb +11 -0
  578. data/test/functional/topics_controller_test.rb +201 -0
  579. data/test/functional/users_controller_test.rb +460 -0
  580. data/test/functional/votes_controller_test.rb +27 -0
  581. data/test/test_helper.rb +103 -0
  582. data/test/testapp/.gitignore +4 -0
  583. data/test/testapp/README +256 -0
  584. data/test/testapp/Rakefile +7 -0
  585. data/test/testapp/app/controllers/application_controller.rb +3 -0
  586. data/test/testapp/app/helpers/application_helper.rb +2 -0
  587. data/test/testapp/config/application.rb +45 -0
  588. data/test/testapp/config/application_config.rb +1 -0
  589. data/test/testapp/config/boot.rb +10 -0
  590. data/test/testapp/config/database.yml +22 -0
  591. data/test/testapp/config/environment.rb +6 -0
  592. data/test/testapp/config/environments/development.rb +25 -0
  593. data/test/testapp/config/environments/production.rb +49 -0
  594. data/test/testapp/config/environments/test.rb +35 -0
  595. data/test/testapp/config/initializers/backtrace_silencers.rb +7 -0
  596. data/test/testapp/config/initializers/inflections.rb +10 -0
  597. data/test/testapp/config/initializers/mime_types.rb +5 -0
  598. data/test/testapp/config/initializers/secret_token.rb +7 -0
  599. data/test/testapp/config/initializers/session_store.rb +8 -0
  600. data/test/testapp/config/locales/en.yml +5 -0
  601. data/test/testapp/config/routes.rb +3 -0
  602. data/test/testapp/config.ru +4 -0
  603. data/test/testapp/db/schema.rb +456 -0
  604. data/test/testapp/db/seeds.rb +7 -0
  605. data/test/testapp/doc/README_FOR_APP +2 -0
  606. data/test/testapp/lib/tasks/.gitkeep +0 -0
  607. data/test/testapp/public/404.html +26 -0
  608. data/test/testapp/public/422.html +26 -0
  609. data/test/testapp/public/500.html +26 -0
  610. data/test/testapp/public/favicon.ico +0 -0
  611. data/test/testapp/public/images/rails.png +0 -0
  612. data/test/testapp/public/robots.txt +5 -0
  613. data/test/testapp/script/rails +6 -0
  614. data/test/testapp/test/performance/browsing_test.rb +9 -0
  615. data/test/testapp/test/test_helper.rb +13 -0
  616. data/test/testapp/vendor/plugins/.gitkeep +0 -0
  617. data/test/unit/ad_test.rb +34 -0
  618. data/test/unit/asset_test.rb +15 -0
  619. data/test/unit/authorization_test.rb +55 -0
  620. data/test/unit/category_test.rb +22 -0
  621. data/test/unit/choice_test.rb +9 -0
  622. data/test/unit/clipping_image_test.rb +17 -0
  623. data/test/unit/clipping_test.rb +52 -0
  624. data/test/unit/comment_test.rb +107 -0
  625. data/test/unit/country_test.rb +15 -0
  626. data/test/unit/event_test.rb +75 -0
  627. data/test/unit/favorite_test.rb +71 -0
  628. data/test/unit/forum_test.rb +23 -0
  629. data/test/unit/friendship_status_test.rb +10 -0
  630. data/test/unit/friendship_test.rb +38 -0
  631. data/test/unit/homepage_feature_test.rb +10 -0
  632. data/test/unit/invitation_test.rb +27 -0
  633. data/test/unit/message_test.rb +49 -0
  634. data/test/unit/message_thread_test.rb +80 -0
  635. data/test/unit/metro_area_test.rb +10 -0
  636. data/test/unit/moderatorship_test.rb +30 -0
  637. data/test/unit/monitorships_test.rb +38 -0
  638. data/test/unit/page_test.rb +25 -0
  639. data/test/unit/photo_test.rb +42 -0
  640. data/test/unit/poll_test.rb +25 -0
  641. data/test/unit/post_test.rb +212 -0
  642. data/test/unit/rsvp_test.rb +33 -0
  643. data/test/unit/sb_post_test.rb +152 -0
  644. data/test/unit/state_test.rb +10 -0
  645. data/test/unit/tag_test.rb +22 -0
  646. data/test/unit/topic_test.rb +111 -0
  647. data/test/unit/user_notifier_test.rb +108 -0
  648. data/test/unit/user_test.rb +259 -0
  649. data/test/unit/vote_test.rb +9 -0
  650. data/vendor/plugins/activity_tracker/README +4 -0
  651. data/vendor/plugins/activity_tracker/Rakefile +22 -0
  652. data/vendor/plugins/activity_tracker/generators/activity_migration/USAGE +13 -0
  653. data/vendor/plugins/activity_tracker/generators/activity_migration/activity_migration_generator.rb +11 -0
  654. data/vendor/plugins/activity_tracker/generators/activity_migration/templates/migration.rb +17 -0
  655. data/vendor/plugins/activity_tracker/init.rb +1 -0
  656. data/vendor/plugins/activity_tracker/install.rb +1 -0
  657. data/vendor/plugins/activity_tracker/lib/activity.rb +40 -0
  658. data/vendor/plugins/activity_tracker/lib/activity_tracker.rb +80 -0
  659. data/vendor/plugins/activity_tracker/tasks/activity_tracker_tasks.rake +4 -0
  660. data/vendor/plugins/activity_tracker/test/abstract_unit.rb +47 -0
  661. data/vendor/plugins/activity_tracker/test/activity_tracker_test.rb +48 -0
  662. data/vendor/plugins/activity_tracker/test/database.yml +18 -0
  663. data/vendor/plugins/activity_tracker/test/debug.log +3329 -0
  664. data/vendor/plugins/activity_tracker/test/fixtures/test_post.rb +5 -0
  665. data/vendor/plugins/activity_tracker/test/fixtures/test_posts.yml +3 -0
  666. data/vendor/plugins/activity_tracker/test/fixtures/test_user.rb +4 -0
  667. data/vendor/plugins/activity_tracker/test/fixtures/test_users.yml +6 -0
  668. data/vendor/plugins/activity_tracker/test/schema.rb +21 -0
  669. data/vendor/plugins/activity_tracker/uninstall.rb +1 -0
  670. data/vendor/plugins/acts_as_list/README +23 -0
  671. data/vendor/plugins/acts_as_list/init.rb +3 -0
  672. data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
  673. data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
  674. data/vendor/plugins/acts_as_publishable/README +3 -0
  675. data/vendor/plugins/acts_as_publishable/Rakefile +22 -0
  676. data/vendor/plugins/acts_as_publishable/generators/publishing/publishing_generator.rb +34 -0
  677. data/vendor/plugins/acts_as_publishable/generators/publishing/templates/migration.rb +13 -0
  678. data/vendor/plugins/acts_as_publishable/init.rb +3 -0
  679. data/vendor/plugins/acts_as_publishable/install.rb +3 -0
  680. data/vendor/plugins/acts_as_publishable/lib/acts_as_publishable.rb +81 -0
  681. data/vendor/plugins/acts_as_publishable/test/acts_as_publishable_test.rb +8 -0
  682. data/vendor/plugins/acts_as_publishable/uninstall.rb +1 -0
  683. data/vendor/plugins/auto_complete/README +23 -0
  684. data/vendor/plugins/auto_complete/Rakefile +22 -0
  685. data/vendor/plugins/auto_complete/init.rb +2 -0
  686. data/vendor/plugins/auto_complete/lib/auto_complete.rb +47 -0
  687. data/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb +143 -0
  688. data/vendor/plugins/auto_complete/test/auto_complete_test.rb +67 -0
  689. data/vendor/plugins/enumerations_mixin/LICENSE +20 -0
  690. data/vendor/plugins/enumerations_mixin/README_ENUMERATIONS +163 -0
  691. data/vendor/plugins/enumerations_mixin/init.rb +21 -0
  692. data/vendor/plugins/enumerations_mixin/lib/active_record/acts/enumerated.rb +177 -0
  693. data/vendor/plugins/enumerations_mixin/lib/active_record/aggregations/has_enumerated.rb +60 -0
  694. data/vendor/plugins/enumerations_mixin/lib/active_record/virtual_enumerations.rb +68 -0
  695. data/vendor/plugins/enumerations_mixin/virtual_enumerations_sample.rb +76 -0
  696. data/vendor/plugins/prototype_legacy_helper/README.markdown +13 -0
  697. data/vendor/plugins/prototype_legacy_helper/init.rb +1 -0
  698. data/vendor/plugins/prototype_legacy_helper/lib/prototype_legacy_helper.rb +432 -0
  699. data/vendor/plugins/prototype_legacy_helper/test/test_prototype_helper.rb +297 -0
  700. data/vendor/plugins/resource_feeder/README +4 -0
  701. data/vendor/plugins/resource_feeder/Rakefile +22 -0
  702. data/vendor/plugins/resource_feeder/init.rb +2 -0
  703. data/vendor/plugins/resource_feeder/lib/resource_feeder/atom.rb +71 -0
  704. data/vendor/plugins/resource_feeder/lib/resource_feeder/rss.rb +71 -0
  705. data/vendor/plugins/resource_feeder/lib/resource_feeder.rb +2 -0
  706. data/vendor/plugins/resource_feeder/test/atom_feed_test.rb +85 -0
  707. data/vendor/plugins/resource_feeder/test/rss_feed_test.rb +61 -0
  708. data/vendor/plugins/resource_feeder/test/test_helper.rb +60 -0
  709. data/vendor/plugins/respond_to_parent/MIT-LICENSE +20 -0
  710. data/vendor/plugins/respond_to_parent/README +47 -0
  711. data/vendor/plugins/respond_to_parent/Rakefile +22 -0
  712. data/vendor/plugins/respond_to_parent/init.rb +1 -0
  713. data/vendor/plugins/respond_to_parent/install.rb +1 -0
  714. data/vendor/plugins/respond_to_parent/lib/responds_to_parent.rb +70 -0
  715. data/vendor/plugins/respond_to_parent/test/responds_to_parent_test.rb +10 -0
  716. data/vendor/plugins/respond_to_parent/test/test_helper.rb +6 -0
  717. data/vendor/plugins/respond_to_parent/uninstall.rb +1 -0
  718. data/vendor/plugins/tiny_mce/CHANGELOG_PLUGIN.rdoc +91 -0
  719. data/vendor/plugins/tiny_mce/CHANGELOG_TINYMCE +1226 -0
  720. data/vendor/plugins/tiny_mce/DEV_UPGRADE_NOTES.rdoc +12 -0
  721. data/vendor/plugins/tiny_mce/init.rb +2 -0
  722. data/vendor/plugins/tiny_mce/install.rb +18 -0
  723. data/vendor/plugins/tiny_mce/lib/tiny_mce/base.rb +33 -0
  724. data/vendor/plugins/tiny_mce/lib/tiny_mce/configuration.rb +114 -0
  725. data/vendor/plugins/tiny_mce/lib/tiny_mce/exceptions.rb +14 -0
  726. data/vendor/plugins/tiny_mce/lib/tiny_mce/helpers.rb +43 -0
  727. data/vendor/plugins/tiny_mce/lib/tiny_mce/railtie.rb +13 -0
  728. data/vendor/plugins/tiny_mce/lib/tiny_mce/spell_checker.rb +67 -0
  729. data/vendor/plugins/tiny_mce/lib/tiny_mce/valid_tinymce_langs.yml +25 -0
  730. data/vendor/plugins/tiny_mce/lib/tiny_mce/valid_tinymce_options.yml +167 -0
  731. data/vendor/plugins/tiny_mce/lib/tiny_mce.rb +24 -0
  732. data/vendor/plugins/white_list/README +35 -0
  733. data/vendor/plugins/white_list/Rakefile +22 -0
  734. data/vendor/plugins/white_list/init.rb +35 -0
  735. data/vendor/plugins/white_list/lib/white_list_helper.rb +61 -0
  736. data/vendor/plugins/white_list/test/white_list_test.rb +120 -0
  737. metadata +1073 -0
@@ -0,0 +1,29 @@
1
+ #hack to get around the fact that the StaticPage model no longer exists
2
+ class StaticPage < ActiveRecord::Base
3
+ end
4
+
5
+
6
+ class CreatePages < ActiveRecord::Migration
7
+ def self.up
8
+ create_table :pages do |t|
9
+ t.string :title
10
+ t.text :body
11
+ t.string :published_as, :limit => 16, :default => 'draft'
12
+ t.boolean :page_public, :default => true
13
+ t.timestamps
14
+ end
15
+
16
+ #remove static pages table id needed and migrate StaticPages to Pages
17
+ if ActiveRecord::Base.connection.tables.include?('static_pages')
18
+ StaticPage.all.each do |page|
19
+ Page.create(:title => page.title, :body => page.content, :published_as=>"live", :page_public => true)
20
+ end
21
+
22
+ drop_table :static_pages
23
+ end
24
+ end
25
+
26
+ def self.down
27
+ drop_table :pages
28
+ end
29
+ end
@@ -0,0 +1,11 @@
1
+ class AddPages < ActiveRecord::Migration
2
+ def self.up
3
+ # Don't add this stuff in a migration.
4
+ # Page.create(:title=>:about.l, :body=>"<p>#{:your_about_text_goes_here.l}</p>", :published_as=>"live", :page_public=>true)
5
+ # Page.create(:title=>:faq.l, :body=>"<p>#{:your_faq_text_goes_here.l}</p>", :published_as=>"live", :page_public=>true)
6
+ end
7
+
8
+ def self.down
9
+ Page.destroy_all
10
+ end
11
+ end
@@ -0,0 +1,43 @@
1
+ class AuthlogicCompatibilityChanges < ActiveRecord::Migration
2
+ def self.up
3
+ change_column :users, :crypted_password, :string, :limit => 255
4
+ change_column :users, :salt, :string, :limit => 255
5
+
6
+ rename_column :users, :salt, :password_salt
7
+ rename_column :users, :remember_token, :persistence_token
8
+
9
+ remove_column :users, :remember_token_expires_at
10
+
11
+ change_table :users do |t|
12
+ t.column :single_access_token, :string
13
+ t.column :perishable_token, :string
14
+ t.column :login_count, :integer, :default => 0
15
+ t.column :failed_login_count, :integer, :default => 0
16
+ t.column :last_request_at, :datetime
17
+ t.column :current_login_at, :datetime
18
+ t.column :current_login_ip, :string
19
+ t.column :last_login_ip, :string
20
+ end
21
+
22
+ add_index :users, :login
23
+ add_index :users, :persistence_token
24
+ add_index :users, :last_request_at
25
+ end
26
+
27
+ def self.down
28
+ remove_index :users, :login
29
+ remove_index :users, :persistence_token
30
+ remove_index :users, :last_request_at
31
+
32
+ change_table :users do |t|
33
+ t.remove :single_access_token, :perishable_token, :login_count, :failed_login_count,
34
+ :last_request_at, :current_login_at, :current_login_ip, :last_login_ip
35
+ end
36
+
37
+ rename_column :users, :persistence_token, :remember_token
38
+
39
+ add_column :users, :remember_token_expires_at, :datetime, :default => nil
40
+ rename_column :users, :password_salt, :salt
41
+ end
42
+
43
+ end
@@ -0,0 +1,9 @@
1
+ class AddAllowRsvpToEvents < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :events, :allow_rsvp, :boolean, :default => true
4
+ end
5
+
6
+ def self.down
7
+ remove_column :events, :allow_rsvp
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class AddTaggingsCountToTags < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :tags, :taggings_count, :integer, :default => 0
4
+ end
5
+
6
+ def self.down
7
+ remove_column :tags, :taggings_count
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ class AddThreadingToMessages < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :messages, :parent_id, :integer
4
+
5
+ create_table :message_threads do |t|
6
+ t.integer :sender_id
7
+ t.integer :recipient_id
8
+ t.integer :message_id
9
+ t.integer :parent_message_id
10
+ t.timestamps
11
+ end
12
+
13
+ end
14
+
15
+ def self.down
16
+ remove_column :messages, :parent_id
17
+ drop_table :message_threads
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ class AddAnonymousForumPosting < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :sb_posts, :author_name, :string
4
+ add_column :sb_posts, :author_email, :string
5
+ add_column :sb_posts, :author_url, :string
6
+ add_column :sb_posts, :author_ip, :string
7
+
8
+ end
9
+
10
+ def self.down
11
+ remove_column :sb_posts, :author_name
12
+ remove_column :sb_posts, :author_email
13
+ remove_column :sb_posts, :author_url
14
+ remove_column :sb_posts, :author_ip
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ class AddCommentNotificationToggle < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :posts, :send_comment_notifications, :boolean, :default => true
4
+ end
5
+
6
+ def self.down
7
+ remove_column :posts, :send_comment_notifications
8
+ end
9
+ end
@@ -0,0 +1,36 @@
1
+ class PaperclipChanges < ActiveRecord::Migration
2
+ def up
3
+ rename_column :photos, :filename, :photo_file_name
4
+ rename_column :photos, :content_type, :photo_content_type
5
+ rename_column :photos, :size, :photo_file_size
6
+ add_column :photos, :photo_updated_at, :datetime
7
+
8
+ rename_column :assets, :filename, :asset_file_name
9
+ rename_column :assets, :content_type, :asset_content_type
10
+ rename_column :assets, :size, :asset_file_size
11
+ add_column :assets, :asset_updated_at, :datetime
12
+
13
+ rename_column :homepage_features, :filename, :image_file_name
14
+ rename_column :homepage_features, :content_type, :image_content_type
15
+ rename_column :homepage_features, :size, :image_file_size
16
+ add_column :homepage_features, :image_updated_at, :datetime
17
+ end
18
+
19
+ def down
20
+ rename_column :photos, :photo_file_name, :filename
21
+ rename_column :photos, :photo_content_type, :content_type
22
+ rename_column :photos, :photo_file_size, :size
23
+ remove_column :photos, :photo_updated_at
24
+
25
+ rename_column :assets, :asset_file_name, :filename
26
+ rename_column :assets, :asset_content_type, :content_type
27
+ rename_column :assets, :asset_file_size, :size
28
+ remove_column :assets, :asset_updated_at
29
+
30
+ rename_column :homepage_feature, :image_file_name, :filename
31
+ rename_column :homepage_feature, :image_content_type, :content_type
32
+ rename_column :homepage_feature, :image_file_size, :size
33
+ remove_column :homepage_feature, :image_updated_at
34
+
35
+ end
36
+ end
@@ -0,0 +1,20 @@
1
+ class CreateAuthorizations < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :authorizations do |t|
4
+ t.integer :user_id
5
+ t.string :provider
6
+ t.string :uid
7
+ t.string :name
8
+ t.string :nickname
9
+ t.string :email
10
+ t.string :picture_url
11
+ t.string :access_token
12
+ t.string :access_token_secret
13
+ t.timestamps
14
+ end
15
+ end
16
+
17
+ def self.down
18
+ drop_table :authorizations
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ class CreateSlugs < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :slugs do |t|
4
+ t.string :name
5
+ t.integer :sluggable_id
6
+ t.integer :sequence, :null => false, :default => 1
7
+ t.string :sluggable_type, :limit => 40
8
+ t.string :scope
9
+ t.datetime :created_at
10
+ end
11
+ add_index :slugs, :sluggable_id
12
+ add_index :slugs, [:name, :sluggable_type, :sequence, :scope], :name => "index_slugs_on_n_s_s_and_s", :unique => true
13
+ end
14
+
15
+ def self.down
16
+ drop_table :slugs
17
+ end
18
+ end
@@ -0,0 +1,55 @@
1
+ # see last line where we create an admin if there is none, asking for email and password
2
+
3
+ def prompt_for_admin_password
4
+ password = ask('Password [communityengine]: ', String) do |q|
5
+ q.echo = false
6
+ q.validate = /^(|.{5,40})$/
7
+ q.responses[:not_valid] = "Invalid password. Must be at least 5 characters long."
8
+ q.whitespace = :strip
9
+ end
10
+ password = "communityengine" if password.blank?
11
+ password
12
+ end
13
+
14
+ def prompt_for_admin_login
15
+ login = ask('Login [admin]: ', String) do |q|
16
+ q.echo = true
17
+ q.whitespace = :strip
18
+ end
19
+ login = "admin" if login.blank?
20
+ login
21
+ end
22
+
23
+ def create_admin_user
24
+ if ENV['AUTO_ACCEPT']
25
+ password = "communityengine"
26
+ login = "admin"
27
+ else
28
+ require 'highline/import'
29
+ puts "Create the admin user (press enter for defaults)."
30
+ login = prompt_for_admin_login
31
+ password = prompt_for_admin_password
32
+ end
33
+ attributes = {
34
+ :password => password,
35
+ :password_confirmation => password,
36
+ :email => 'admin@example.com',
37
+ :login => login,
38
+ :birthday => 30.years.ago
39
+ }
40
+
41
+
42
+ if User.find_by_login(login)
43
+ puts "\nWARNING: There is already a user with the login: #{login}, so no account changes were made. If you wish to create an additional admin user, please run 'rake community_engine:create_admin' again with a different login.\n\n"
44
+ else
45
+ admin = User.create(attributes)
46
+ # create an admin role and and assign the admin user to that role
47
+ admin.role = Role[:admin]
48
+ admin.activate
49
+ puts "\nINFO: User with admin priviliges was created.\n" if admin.save!
50
+ end
51
+ end
52
+
53
+ load File.join(Rails.root, 'vendor', 'plugins', 'community_engine', 'app', 'models', 'user.rb')
54
+
55
+ create_admin_user
@@ -0,0 +1,7 @@
1
+ Description:
2
+ The ce_plugin generator creates the basic structure for creating a CommunityEngine plugin.
3
+
4
+ The generator takes one argument which will be the name of the plugin.
5
+
6
+ Examples:
7
+ ./script/generate ce_plugin plugin_name
@@ -0,0 +1,25 @@
1
+ class CePluginGenerator < PluginGenerator
2
+
3
+ def initialize(runtime_args, runtime_options = {})
4
+ super
5
+ @plugin_path = "vendor/plugins/community_engine_#{file_name}"
6
+ end
7
+
8
+ def manifest
9
+ record do |m|
10
+ m.directory "#{plugin_path}/app"
11
+ m.directory "#{plugin_path}/config"
12
+ m.directory "#{plugin_path}/db"
13
+ m.directory "#{plugin_path}/lib"
14
+ m.directory "#{plugin_path}/public"
15
+ m.directory "#{plugin_path}/tasks"
16
+ m.directory "#{plugin_path}/test"
17
+
18
+ m.template 'README', "#{plugin_path}/README"
19
+ m.template 'init.rb', "#{plugin_path}/init.rb"
20
+ m.template 'plugin.rb', "#{plugin_path}/lib/#{file_name}.rb"
21
+ m.template 'desert_routes.rb', "#{plugin_path}/config/desert_routes.rb"
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,13 @@
1
+ <%= class_name %>
2
+ <%= "=" * class_name.size %>
3
+
4
+ This is a CommunityEngine plugin. It's designed to work with the CommunityEngine social networking platform, and won't work unless CE is properly installed.
5
+
6
+
7
+ How To Build Your CE Plugin
8
+ ===========================
9
+
10
+ Start building the functionality of your plugin by adding models and controllers in the plugin's app directory. This plugin will be loaded after the rest of CE, so you can override CE models and controllers here.
11
+
12
+
13
+ Copyright (c) <%= Date.today.year %> [name of plugin creator], released under the MIT license
@@ -0,0 +1,3 @@
1
+ # Plugin routes go here
2
+ # app this to your app's routes file to make these routes active:
3
+ # map.from_plugin :community_engine_<%= file_name %>
@@ -0,0 +1,8 @@
1
+ config.after_initialize do
2
+ if Rails.env == 'development'
3
+ ActiveSupport::Dependencies.load_once_paths = ActiveSupport::Dependencies.load_once_paths.select {|path| (path =~ /(community_engine_<%= file_name %>)/).nil? }
4
+ end
5
+ end
6
+
7
+ require_plugin 'community_engine'
8
+ config.plugin_paths += ["#{Rails.root}/vendor/plugins/community_engine_<%= file_name %>/plugins"]
@@ -0,0 +1 @@
1
+ # <%= class_name %>
@@ -0,0 +1,101 @@
1
+ # Generates a migration which migrates all plugins to their latest versions
2
+ # within the database.
3
+ class PluginMigrationGenerator < Rails::Generator::Base
4
+
5
+ # 255 characters max for Windows NTFS (http://en.wikipedia.org/wiki/Filename)
6
+ # minus 14 for timestamp, minus some extra chars for dot, underscore, file
7
+ # extension. So let's have 230.
8
+ MAX_FILENAME_LENGTH = 230
9
+
10
+ def initialize(runtime_args, runtime_options={})
11
+ super
12
+ @options = {:assigns => {}}
13
+ ensure_schema_table_exists
14
+ get_plugins_to_migrate(runtime_args)
15
+
16
+ if @plugins_to_migrate.empty?
17
+ puts "All plugins are migrated to their latest versions"
18
+ exit(0)
19
+ end
20
+
21
+ @options[:migration_file_name] = build_migration_name
22
+ @options[:assigns][:class_name] = build_migration_name.classify
23
+ end
24
+
25
+ def manifest
26
+ record do |m|
27
+ m.migration_template 'plugin_migration.erb', 'db/migrate', @options
28
+ end
29
+ end
30
+
31
+ protected
32
+
33
+ # Create the schema table if it doesn't already exist.
34
+ def ensure_schema_table_exists
35
+ ActiveRecord::Base.connection.initialize_schema_migrations_table
36
+ end
37
+
38
+ # Determine all the plugins which have migrations that aren't present
39
+ # according to the plugin schema information from the database.
40
+ def get_plugins_to_migrate(plugin_names)
41
+
42
+ # First, grab all the plugins which exist and have migrations
43
+ @plugins_to_migrate = if plugin_names.empty?
44
+ Desert::Manager.plugins
45
+ else
46
+ plugin_names.map do |name|
47
+ Desert::Manager.find_plugin(name) ? Desert::Manager.find_plugin(name) : raise("Cannot find the plugin '#{name}'")
48
+ end
49
+ end
50
+
51
+ @plugins_to_migrate.reject! { |p| p.latest_migration.nil? }
52
+
53
+ # Then find the current versions from the database
54
+ @current_versions = {}
55
+ @plugins_to_migrate.each do |plugin|
56
+ plugin.with_current_plugin do
57
+ @current_versions[plugin.name] = Desert::PluginMigrations::Migrator.current_version
58
+ end
59
+ end
60
+
61
+ # Then find the latest versions from their migration directories
62
+ @new_versions = {}
63
+ @plugins_to_migrate.each do |plugin|
64
+ @new_versions[plugin.name] = plugin.latest_migration
65
+ end
66
+
67
+ # Remove any plugins that don't need migration
68
+ @plugins_to_migrate.map { |p| p.name }.each do |name|
69
+ @plugins_to_migrate.delete(Desert::Manager.find_plugin(name)) if @current_versions[name] == @new_versions[name]
70
+ end
71
+
72
+
73
+ @options[:assigns][:plugins] = @plugins_to_migrate
74
+ @options[:assigns][:new_versions] = @new_versions
75
+ @options[:assigns][:current_versions] = @current_versions
76
+ end
77
+
78
+ # Returns a migration name. If the descriptive migration name based on the
79
+ # plugin names involved is shorter than 230 characters that one will be
80
+ # used. Otherwise a shorter name will be returned.
81
+ def build_migration_name
82
+ descriptive_migration_name.tap do |name|
83
+ name.replace short_migration_name if name.length > MAX_FILENAME_LENGTH
84
+ end
85
+ end
86
+
87
+ # Construct a unique migration name based on the plugins involved and the
88
+ # versions they should reach after this migration is run. The name constructed
89
+ # needs to be lowercase
90
+ def descriptive_migration_name
91
+ @plugins_to_migrate.map do |plugin|
92
+ "#{plugin.name}_to_version_#{@new_versions[plugin.name]}"
93
+ end.join("_and_").downcase
94
+ end
95
+
96
+ # Short migration name that will be used if the descriptive_migration_name
97
+ # exceeds 230 characters
98
+ def short_migration_name
99
+ 'plugin_migrations'
100
+ end
101
+ end
@@ -0,0 +1,13 @@
1
+ class <%= class_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ <%- plugins.each do |plugin| -%>
4
+ migrate_plugin(:<%= plugin.name %>, <%= new_versions[plugin.name] %>)
5
+ <%- end -%>
6
+ end
7
+
8
+ def self.down
9
+ <%- plugins.each do |plugin| -%>
10
+ migrate_plugin(:<%= plugin.name %>, <%= current_versions[plugin.name] %>)
11
+ <%- end -%>
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ How translation works
2
+ =====================
3
+
4
+ Text which is visible to the user in CE is represented by translation tokens. Any text visible to users in your application should be represented by a translation token followed by a `.l` (e.g. `:this_phrase_needs_translation.l`).
5
+
6
+ This tells the system to look for a translation of this phrase in the appropriate locale file. It will look for that in either `Rails.root/lang/ui` or `Rails.root/vendor/plugin/community_engine/lang/ui`, picking up a YAML-file which begins with the locale you've set in `application.yml` (e.g. `de-DE.yml`).
7
+
8
+ Why load locales from both directories? The latter holds the standard translations that come with CE. The former is for your customized translation (use `Rails.root/vendor/plugin/community_engine/lang/en.yml` as a reference of all tokens used in CE).
9
+
10
+ If you see a token like `_translation_missing_` save the URL and the context of it and post a request at Lighthouse or the Google group to get it fixed.
11
+
12
+ For Developers
13
+ ==============
14
+ If you rework standard CE and you add a visible item to a view (a UI element, a flash notice or something similar), please use the translation tokens to add text. Place these tokens in `en.yml` for other translators to give them a chance to complete their translation files.
15
+ NOTE: If you have special characters or a colon in your translation phrase you have to surround them with double quotes.
16
+
17
+ For Translators
18
+ ===============
19
+ Try using the translate plugin: [http://github.com/bborn/translate](http://github.com/bborn/translate) when creating or updating translations in new locales
20
+
21
+ It provides you with some useful rake tasks, including:
22
+
23
+ rake translate:diff_keys FROM_LOCAL=en TO_LOCALE=es
24
+ #Shows you which keys exist in FROM_LOCALE.yml but not in TO_LOCALE.yml
25
+
26
+ rake translate:obsolete LOCALE=es
27
+ #Shows you which keys exists in LOCALE.yml but not in the application source
28
+
29
+ rake translate:orphans LOCALE=es
30
+ #Show you which keys are in your template code but aren't in LOCALE.yml
31
+
32
+
@@ -0,0 +1,167 @@
1
+ module AuthenticatedSystem
2
+ def update_last_seen_at
3
+ return unless logged_in?
4
+ User.update_all ['sb_last_seen_at = ?', Time.now.utc], ['id = ?', current_user.id]
5
+ current_user.sb_last_seen_at = Time.now.utc
6
+ end
7
+
8
+ def login_by_token
9
+ end
10
+
11
+ protected
12
+ # Returns true or false if the user is logged in.
13
+ def logged_in?
14
+ current_user ? true : false
15
+ end
16
+
17
+ # Accesses the current user from the session.
18
+ def current_user
19
+ return @current_user if defined?(@current_user)
20
+ @current_user = current_user_session && current_user_session.record
21
+ end
22
+
23
+ # Create a user session without credentials.
24
+ def current_user=(user)
25
+ return if current_user # Use act_as_user= to switch to another user account
26
+ @current_user_session = UserSession.create(user, true)
27
+ @current_user = @current_user_session.record
28
+ end
29
+
30
+ # Set session to another user. Only available to admins
31
+ def assume_user(new_user)
32
+ return unless current_user && current_user.admin? && !new_user.admin?
33
+ session[:admin_id] = current_user.id
34
+ UserSession.create(new_user, true)
35
+ end
36
+
37
+ def return_to_admin
38
+ unless current_user && !session[:admin_id].nil? && !current_user.admin?
39
+ redirect_to login_path
40
+ return
41
+ end
42
+
43
+ admin = User.find(session[:admin_id])
44
+ if admin && admin.admin?
45
+ session[:admin_id] = nil
46
+ UserSession.create(admin, true)
47
+ redirect_to user_path(admin)
48
+ else
49
+ current_user_session.destroy
50
+ redirect_to login_path
51
+ end
52
+ end
53
+
54
+ # Accesses the current session.
55
+ def current_user_session
56
+ return @current_user_session if defined?(@current_user_session)
57
+ @current_user_session = UserSession.find
58
+ end
59
+
60
+ # Check if the user is authorized.
61
+ #
62
+ # Override this method in your controllers if you want to restrict access
63
+ # to only a few actions or if you want to check if the user
64
+ # has the correct rights.
65
+ #
66
+ # Example:
67
+ #
68
+ # # only allow nonbobs
69
+ # def authorize?
70
+ # current_user.login != "bob"
71
+ # end
72
+ def authorized?
73
+ true
74
+ end
75
+ def admin?
76
+ logged_in? && current_user.admin?
77
+ end
78
+ def moderator?
79
+ logged_in? && current_user.moderator?
80
+ end
81
+
82
+ # Redirect as appropriate when an access request fails.
83
+ #
84
+ # The default action is to redirect to the login screen.
85
+ #
86
+ # Override this method in your controllers if you want to have special
87
+ # behavior in case the user is not authorized
88
+ # to access the requested action. For example, a popup window might
89
+ # simply close itself.
90
+ def access_denied
91
+ respond_to do |accepts|
92
+ accepts.html do
93
+ store_location
94
+ redirect_to login_path and return false
95
+ end
96
+ accepts.xml do
97
+ headers["Status"] = "Unauthorized"
98
+ headers["WWW-Authenticate"] = %(Basic realm="Web Password")
99
+ render :text => "Couldn't authenticate you", :status => '401 Unauthorized'
100
+ end
101
+ accepts.js do
102
+ store_location
103
+ render :update do |page|
104
+ page.redirect_to login_path
105
+ end and return false
106
+ end
107
+ end
108
+ false
109
+ end
110
+
111
+ # Inclusion hook to make #current_user and #logged_in?
112
+ # available as ActionView helper methods.
113
+ def self.included(base)
114
+ base.send :helper_method, :current_user, :current_user_session, :logged_in?, :admin?, :moderator?
115
+ end
116
+
117
+ private
118
+
119
+ # Filter method to enforce a login requirement.
120
+ #
121
+ # To require logins for all actions, use this in your controllers:
122
+ #
123
+ # before_filter :login_required
124
+ #
125
+ # To require logins for specific actions, use this in your controllers:
126
+ #
127
+ # before_filter :login_required, :only => [ :edit, :update ]
128
+ #
129
+ # To skip this in a subclassed controller:
130
+ #
131
+ # skip_before_filter :login_required
132
+ #
133
+ def login_required
134
+ store_location
135
+ logged_in? && authorized? ? true : access_denied
136
+ end
137
+
138
+ def require_user
139
+ unless current_user
140
+ store_location
141
+ access_denied
142
+ end
143
+ end
144
+
145
+ def require_no_user
146
+ if current_user
147
+ store_location
148
+ access_denied
149
+ return false
150
+ end
151
+ end
152
+
153
+ # Store the URI of the current request in the session.
154
+ #
155
+ # We can return to this location by calling #redirect_back_or_default.
156
+ def store_location
157
+ session[:return_to] = request.url
158
+ end
159
+
160
+ # Redirect to the URI stored by the most recent store_location call or
161
+ # to the passed default.
162
+ def redirect_back_or_default(default)
163
+ redirect_to(session[:return_to] || default)
164
+ session[:return_to] = nil
165
+ end
166
+
167
+ end