dust-cms 0.0.05

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 (294) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +3 -0
  3. data/Rakefile +5 -0
  4. data/app/assets/images/admin/blank.png +0 -0
  5. data/app/assets/images/admin/dust-letterpress.png +0 -0
  6. data/app/assets/images/admin/main-back.png +0 -0
  7. data/app/assets/images/admin/ui/delete-icon.png +0 -0
  8. data/app/assets/images/admin/ui/edit-icon.png +0 -0
  9. data/app/assets/images/admin/ui/handle.png +0 -0
  10. data/app/assets/images/admin/ui/icons.png +0 -0
  11. data/app/assets/images/admin/ui/index-icon.png +0 -0
  12. data/app/assets/images/admin/ui/new-icon.png +0 -0
  13. data/app/assets/images/entypo/entypo.eot +0 -0
  14. data/app/assets/images/entypo/entypo.svg +13 -0
  15. data/app/assets/images/entypo/entypo.ttf +0 -0
  16. data/app/assets/images/entypo/entypo.woff +0 -0
  17. data/app/assets/images/entypo-social/entypo-social.eot +0 -0
  18. data/app/assets/images/entypo-social/entypo-social.svg +13 -0
  19. data/app/assets/images/entypo-social/entypo-social.ttf +0 -0
  20. data/app/assets/images/entypo-social/entypo-social.woff +0 -0
  21. data/app/assets/images/fancybox/blank.gif +0 -0
  22. data/app/assets/images/fancybox/fancy_close.png +0 -0
  23. data/app/assets/images/fancybox/fancy_loading.png +0 -0
  24. data/app/assets/images/fancybox/fancy_nav_left.png +0 -0
  25. data/app/assets/images/fancybox/fancy_nav_right.png +0 -0
  26. data/app/assets/images/fancybox/fancy_shadow_e.png +0 -0
  27. data/app/assets/images/fancybox/fancy_shadow_n.png +0 -0
  28. data/app/assets/images/fancybox/fancy_shadow_ne.png +0 -0
  29. data/app/assets/images/fancybox/fancy_shadow_nw.png +0 -0
  30. data/app/assets/images/fancybox/fancy_shadow_s.png +0 -0
  31. data/app/assets/images/fancybox/fancy_shadow_se.png +0 -0
  32. data/app/assets/images/fancybox/fancy_shadow_sw.png +0 -0
  33. data/app/assets/images/fancybox/fancy_shadow_w.png +0 -0
  34. data/app/assets/images/fancybox/fancy_title_left.png +0 -0
  35. data/app/assets/images/fancybox/fancy_title_main.png +0 -0
  36. data/app/assets/images/fancybox/fancy_title_over.png +0 -0
  37. data/app/assets/images/fancybox/fancy_title_right.png +0 -0
  38. data/app/assets/images/fancybox/fancybox-x.png +0 -0
  39. data/app/assets/images/fancybox/fancybox-y.png +0 -0
  40. data/app/assets/images/fancybox/fancybox.png +0 -0
  41. data/app/assets/javascripts/cms/dust/defaults.js.coffee +31 -0
  42. data/app/assets/javascripts/cms/dust/gallery/photo.js.coffee +1 -0
  43. data/app/assets/javascripts/cms/dust/gallery/photo_view.js.coffee +21 -0
  44. data/app/assets/javascripts/cms/dust/gallery/photos.js.coffee +6 -0
  45. data/app/assets/javascripts/cms/dust/gallery/photos_view.js.coffee +12 -0
  46. data/app/assets/javascripts/cms/dust/gallery/router.js.coffee +14 -0
  47. data/app/assets/javascripts/cms/dust/gallery.js.coffee +31 -0
  48. data/app/assets/javascripts/cms/dust/nav.js.coffee +21 -0
  49. data/app/assets/javascripts/cms/dust/sections.js.coffee +21 -0
  50. data/app/assets/javascripts/cms/dust/sortables.js.coffee +64 -0
  51. data/app/assets/javascripts/cms/dust/window.js.coffee +11 -0
  52. data/app/assets/javascripts/cms/dust.js.coffee +19 -0
  53. data/app/assets/javascripts/cms/lib/backbone.js +42 -0
  54. data/app/assets/javascripts/cms/lib/fineuploader-3.0.js +71 -0
  55. data/app/assets/javascripts/cms/lib/handlebars.js +1920 -0
  56. data/app/assets/javascripts/cms/lib/spin.js +2 -0
  57. data/app/assets/javascripts/cms/lib/underscore.js +1 -0
  58. data/app/assets/javascripts/cms.js +14 -0
  59. data/app/assets/javascripts/core/jquery.form.js +785 -0
  60. data/app/assets/javascripts/core/jquery.html5.js +29 -0
  61. data/app/assets/javascripts/core/jquery.mousewheel-3.0.2.pack.js +13 -0
  62. data/app/assets/javascripts/core/jquery.placeholder.min.js +11 -0
  63. data/app/assets/javascripts/core/nestedsortables.js +429 -0
  64. data/app/assets/javascripts/core/serializelist.js +66 -0
  65. data/app/assets/javascripts/core/tipTip.js +21 -0
  66. data/app/assets/javascripts/core.js +4 -0
  67. data/app/assets/javascripts/front_end/application-main.js.coffee +27 -0
  68. data/app/assets/javascripts/front_end/map.js +34 -0
  69. data/app/assets/javascripts/front_end/video.js +4569 -0
  70. data/app/assets/javascripts/front_end.js +18 -0
  71. data/app/assets/stylesheets/cms/flash_messages.css.scss +17 -0
  72. data/app/assets/stylesheets/cms/footer.css.scss +12 -0
  73. data/app/assets/stylesheets/cms/forms.css.scss +67 -0
  74. data/app/assets/stylesheets/cms/gallery.css.scss +21 -0
  75. data/app/assets/stylesheets/cms/icons.css.scss +123 -0
  76. data/app/assets/stylesheets/cms/jquery-ui.custom.scss +6 -0
  77. data/app/assets/stylesheets/cms/layout.css.scss +162 -0
  78. data/app/assets/stylesheets/cms/lib/grid.css.scss +116 -0
  79. data/app/assets/stylesheets/cms/lib/mixins.css.scss +20 -0
  80. data/app/assets/stylesheets/cms/login.scss +12 -0
  81. data/app/assets/stylesheets/cms/main.old +155 -0
  82. data/app/assets/stylesheets/cms/nav.css.scss +73 -0
  83. data/app/assets/stylesheets/cms/sections.scss +17 -0
  84. data/app/assets/stylesheets/cms/sortables.scss +20 -0
  85. data/app/assets/stylesheets/cms.css.scss +30 -0
  86. data/app/assets/stylesheets/core/app/defaults.css.scss +556 -0
  87. data/app/assets/stylesheets/core/plugins/PIE.htc +96 -0
  88. data/app/assets/stylesheets/core/plugins/jquery-ui-1.8.5.custom.old +572 -0
  89. data/app/assets/stylesheets/core/plugins/jquery.fancybox-1.3.1.css +364 -0
  90. data/app/assets/stylesheets/core/plugins/skeleton.css +155 -0
  91. data/app/assets/stylesheets/core/plugins/tipTip.css +115 -0
  92. data/app/assets/stylesheets/core/plugins/uploadify.css +25 -0
  93. data/app/assets/stylesheets/core/reset/reset.css +211 -0
  94. data/app/assets/stylesheets/core/reset/text.css +86 -0
  95. data/app/assets/stylesheets/core.css.scss +14 -0
  96. data/app/assets/stylesheets/front_end/app/just-delete-me-and-start-over.css.scss +70 -0
  97. data/app/assets/stylesheets/front_end.css +14 -0
  98. data/app/controllers/authentication_controller.rb +30 -0
  99. data/app/controllers/dust/blocks_controller.rb +49 -0
  100. data/app/controllers/dust/contacts_controller.rb +89 -0
  101. data/app/controllers/dust/dashboard_controller.rb +26 -0
  102. data/app/controllers/dust/gallery/albums_controller.rb +49 -0
  103. data/app/controllers/dust/gallery/api/photos_controller.rb +28 -0
  104. data/app/controllers/dust/gallery/photos_controller.rb +47 -0
  105. data/app/controllers/dust/menu_items_controller.rb +51 -0
  106. data/app/controllers/dust/menus_controller.rb +47 -0
  107. data/app/controllers/dust/pages_controller.rb +52 -0
  108. data/app/controllers/dust/password_resets_controller.rb +48 -0
  109. data/app/controllers/dust/posts_controller.rb +47 -0
  110. data/app/controllers/dust/roles_controller.rb +47 -0
  111. data/app/controllers/dust/sessions_controller.rb +29 -0
  112. data/app/controllers/dust/site_wides_controller.rb +28 -0
  113. data/app/controllers/dust/sortable_controller.rb +17 -0
  114. data/app/controllers/dust/users_controller.rb +52 -0
  115. data/app/controllers/front_end/page_controller.rb +27 -0
  116. data/app/controllers/front_end/post_controller.rb +14 -0
  117. data/app/controllers/front_end/sitemap_controller.rb +11 -0
  118. data/app/controllers/front_end_controller.rb +18 -0
  119. data/app/helpers/error_messages_helper.rb +23 -0
  120. data/app/helpers/exceptions.rb +4 -0
  121. data/app/helpers/layout_helper.rb +28 -0
  122. data/app/helpers/misc_helper.rb +29 -0
  123. data/app/helpers/region_helper.rb +32 -0
  124. data/app/mailers/post_office.rb +39 -0
  125. data/app/models/ckeditor/asset.rb +7 -0
  126. data/app/models/ckeditor/attachment_file.rb +7 -0
  127. data/app/models/ckeditor/picture.rb +7 -0
  128. data/app/models/dust/block.rb +114 -0
  129. data/app/models/dust/builder/page.rb +84 -0
  130. data/app/models/dust/builder/site_wide.rb +50 -0
  131. data/app/models/dust/contact.rb +34 -0
  132. data/app/models/dust/gallery/album.rb +14 -0
  133. data/app/models/dust/gallery/photo.rb +23 -0
  134. data/app/models/dust/handlebar.rb +59 -0
  135. data/app/models/dust/map.rb +21 -0
  136. data/app/models/dust/menu/item_dependency.rb +66 -0
  137. data/app/models/dust/menu.rb +11 -0
  138. data/app/models/dust/menu_item.rb +64 -0
  139. data/app/models/dust/page.rb +52 -0
  140. data/app/models/dust/post.rb +39 -0
  141. data/app/models/dust/role.rb +9 -0
  142. data/app/models/dust/section.rb +11 -0
  143. data/app/models/dust/session.rb +28 -0
  144. data/app/models/dust/site_wide.rb +41 -0
  145. data/app/models/dust/sort.rb +52 -0
  146. data/app/models/dust/sortable_item.rb +21 -0
  147. data/app/models/dust/user.rb +49 -0
  148. data/app/uploaders/ckeditor_attachment_file_uploader.rb +42 -0
  149. data/app/uploaders/ckeditor_picture_uploader.rb +53 -0
  150. data/app/uploaders/gallery_photo_uploader.rb +52 -0
  151. data/app/uploaders/image_uploader.rb +51 -0
  152. data/app/uploaders/slide_image_uploader.rb +51 -0
  153. data/app/views/dust/blocks/_block.html.haml +20 -0
  154. data/app/views/dust/blocks/_form.html.haml +50 -0
  155. data/app/views/dust/blocks/_normal_block_content.html.haml +1 -0
  156. data/app/views/dust/blocks/_search.html.haml +4 -0
  157. data/app/views/dust/blocks/edit.html.haml +4 -0
  158. data/app/views/dust/blocks/index.html.haml +16 -0
  159. data/app/views/dust/blocks/new.html.haml +3 -0
  160. data/app/views/dust/contacts/_form.html.haml +37 -0
  161. data/app/views/dust/contacts/_import_csv.html.haml +8 -0
  162. data/app/views/dust/contacts/_instance.html.haml +13 -0
  163. data/app/views/dust/contacts/_search.html.haml +4 -0
  164. data/app/views/dust/contacts/edit.html.haml +2 -0
  165. data/app/views/dust/contacts/index.html.haml +17 -0
  166. data/app/views/dust/contacts/index.json.haml +6 -0
  167. data/app/views/dust/contacts/new.html.haml +3 -0
  168. data/app/views/dust/dashboard/_options.html.haml +6 -0
  169. data/app/views/dust/dashboard/show.html.haml +33 -0
  170. data/app/views/dust/dashboard/update.html.haml +6 -0
  171. data/app/views/dust/gallery/albums/_form.html.haml +52 -0
  172. data/app/views/dust/gallery/albums/_photo.html.haml +12 -0
  173. data/app/views/dust/gallery/albums/edit.html.haml +3 -0
  174. data/app/views/dust/gallery/albums/index.html.haml +18 -0
  175. data/app/views/dust/gallery/albums/new.html.haml +4 -0
  176. data/app/views/dust/gallery/albums/show.html.haml +2 -0
  177. data/app/views/dust/gallery/photos/_form.html.haml +26 -0
  178. data/app/views/dust/gallery/photos/edit.html.haml +3 -0
  179. data/app/views/dust/gallery/photos/index.html.haml +18 -0
  180. data/app/views/dust/gallery/photos/new.html.haml +4 -0
  181. data/app/views/dust/gallery/photos/show.json.jbuilder +5 -0
  182. data/app/views/dust/menu_items/_form.html.haml +24 -0
  183. data/app/views/dust/menu_items/_roots.html.haml +3 -0
  184. data/app/views/dust/menu_items/_search.html.haml +4 -0
  185. data/app/views/dust/menu_items/_tree.html.haml +11 -0
  186. data/app/views/dust/menu_items/edit.html.haml +2 -0
  187. data/app/views/dust/menu_items/index.html.haml +19 -0
  188. data/app/views/dust/menu_items/new.html.haml +2 -0
  189. data/app/views/dust/menus/_form.html.haml +39 -0
  190. data/app/views/dust/menus/edit.html.haml +3 -0
  191. data/app/views/dust/menus/index.html.haml +18 -0
  192. data/app/views/dust/menus/new.html.haml +4 -0
  193. data/app/views/dust/menus/show.html.haml +2 -0
  194. data/app/views/dust/pages/_form.html.haml +68 -0
  195. data/app/views/dust/pages/_search.html.haml +4 -0
  196. data/app/views/dust/pages/edit.html.haml +3 -0
  197. data/app/views/dust/pages/index.html.haml +16 -0
  198. data/app/views/dust/pages/new.html.haml +3 -0
  199. data/app/views/dust/password_resets/edit.html.haml +6 -0
  200. data/app/views/dust/password_resets/new.html.haml +10 -0
  201. data/app/views/dust/posts/_form.html.haml +39 -0
  202. data/app/views/dust/posts/edit.html.haml +3 -0
  203. data/app/views/dust/posts/index.html.haml +18 -0
  204. data/app/views/dust/posts/new.html.haml +4 -0
  205. data/app/views/dust/posts/show.html.haml +2 -0
  206. data/app/views/dust/roles/_form.html.haml +11 -0
  207. data/app/views/dust/roles/edit.html.haml +2 -0
  208. data/app/views/dust/roles/index.html.haml +14 -0
  209. data/app/views/dust/roles/new.html.haml +2 -0
  210. data/app/views/dust/sessions/_form.html.haml +18 -0
  211. data/app/views/dust/sessions/new.html.haml +2 -0
  212. data/app/views/dust/site_wides/new.html.haml +19 -0
  213. data/app/views/dust/slides/_form.html.haml +26 -0
  214. data/app/views/dust/slides/_search.html.haml +4 -0
  215. data/app/views/dust/slides/_slideshow.html.haml +12 -0
  216. data/app/views/dust/slides/edit.html.haml +5 -0
  217. data/app/views/dust/slides/index.html.haml +25 -0
  218. data/app/views/dust/slides/index.js.haml +2 -0
  219. data/app/views/dust/slides/new.html.haml +6 -0
  220. data/app/views/dust/slides/show.html.haml +15 -0
  221. data/app/views/dust/sortable/sort.js.coffee +10 -0
  222. data/app/views/dust/users/_form.html.haml +27 -0
  223. data/app/views/dust/users/_search.html.haml +4 -0
  224. data/app/views/dust/users/_user_bar.html.haml +10 -0
  225. data/app/views/dust/users/dashboard.html.haml +40 -0
  226. data/app/views/dust/users/edit.html.haml +2 -0
  227. data/app/views/dust/users/index.html.haml +16 -0
  228. data/app/views/dust/users/new.html.haml +2 -0
  229. data/app/views/front_end/page/_admin.html.haml +6 -0
  230. data/app/views/front_end/page/search.html.haml +9 -0
  231. data/app/views/front_end/page/show.html.haml +8 -0
  232. data/app/views/front_end/post/_admin.html.haml +7 -0
  233. data/app/views/front_end/post/show.html.haml +12 -0
  234. data/app/views/front_end/sitemap/index.html.haml +4 -0
  235. data/app/views/front_end/sitemap/index.xml.haml +9 -0
  236. data/app/views/layouts/app_partials/_analytics.html.haml +11 -0
  237. data/app/views/layouts/app_partials/_application_tree.html.haml +6 -0
  238. data/app/views/layouts/cms.html.haml +52 -0
  239. data/app/views/layouts/cms_partials/_nav.html.haml +5 -0
  240. data/app/views/layouts/front_end.html.haml +22 -0
  241. data/app/views/layouts/sessions.html.haml +19 -0
  242. data/app/views/post_office/contact_confirmation.html.haml +7 -0
  243. data/app/views/post_office/contact_request.html.haml +24 -0
  244. data/app/views/post_office/password_reset_instructions.html.haml +6 -0
  245. data/app/views/widgets/_contact_form.html.haml +20 -0
  246. data/app/views/widgets/_map.html.haml +16 -0
  247. data/app/views/widgets/_quick_contact_form.html.haml +10 -0
  248. data/app/views/widgets/_site_map.html.haml +7 -0
  249. data/app/views/widgets/_site_menu.html.haml +10 -0
  250. data/app/views/widgets/_slider.html.haml +0 -0
  251. data/app/views/widgets/_user_login.html.haml +13 -0
  252. data/app/views/widgets/galleries/_archive.html.haml +1 -0
  253. data/app/views/widgets/galleries/_show.html.haml +0 -0
  254. data/app/views/widgets/posts/_index.html.haml +1 -0
  255. data/app/views/widgets/posts/_show.html.haml +0 -0
  256. data/config/authorization_rules.rb +23 -0
  257. data/config/generators/templates/haml/scaffold/_form.html.haml +19 -0
  258. data/config/generators/templates/haml/scaffold/edit.html.haml +3 -0
  259. data/config/generators/templates/haml/scaffold/index.html.haml +18 -0
  260. data/config/generators/templates/haml/scaffold/new.html.haml +4 -0
  261. data/config/generators/templates/haml/scaffold/show.html.haml +2 -0
  262. data/config/generators/templates/rails/scaffold_controller/controller.rb +51 -0
  263. data/config/initializers/app_string_io.rb +12 -0
  264. data/config/initializers/ckeditor.rb +18 -0
  265. data/config/initializers/client_side_validations.rb +13 -0
  266. data/config/initializers/dust_config.rb +22 -0
  267. data/config/initializers/dust_core_reloader.rb +11 -0
  268. data/config/initializers/sorcery.rb +398 -0
  269. data/config/initializers/wrap_parameters.rb +14 -0
  270. data/config/routes.rb +55 -0
  271. data/db/migrate/20101206025845_create_roles.rb +11 -0
  272. data/db/migrate/20110217212357_create_ckeditor_assets.rb +31 -0
  273. data/db/migrate/20110218000640_create_pages.rb +15 -0
  274. data/db/migrate/20110218000641_create_sections.rb +15 -0
  275. data/db/migrate/20110218002220_create_contacts.rb +22 -0
  276. data/db/migrate/20110218020608_create_menu_items.rb +21 -0
  277. data/db/migrate/20110507014158_create_blocks.rb +23 -0
  278. data/db/migrate/20121106195938_sorcery_core.rb +17 -0
  279. data/db/migrate/20121106195939_sorcery_remember_me.rb +15 -0
  280. data/db/migrate/20121106195940_sorcery_reset_password.rb +17 -0
  281. data/db/migrate/20121106195941_sorcery_activity_logging.rb +17 -0
  282. data/db/migrate/20121106200754_sorcery_user_activation.rb +17 -0
  283. data/db/migrate/20130220044031_create_site_wides.rb +11 -0
  284. data/db/migrate/20130220051658_create_menus.rb +11 -0
  285. data/db/migrate/20130223030136_create_albums.rb +13 -0
  286. data/db/migrate/20130223040911_create_photos.rb +15 -0
  287. data/db/migrate/20130223044553_create_posts.rb +15 -0
  288. data/lib/dust/engine.rb +18 -0
  289. data/lib/dust/utils.rb +14 -0
  290. data/lib/dust/version.rb +3 -0
  291. data/lib/dust-cms.rb +53 -0
  292. data/lib/tasks/dust_tasks.rake +51 -0
  293. data/lib/tasks/seed.rb +46 -0
  294. metadata +613 -0
@@ -0,0 +1,51 @@
1
+ module Dust
2
+ class MenuItemsController < AuthenticationController
3
+ filter_access_to :all
4
+
5
+ layout "cms"
6
+
7
+ def new
8
+ @menu_item = Dust::MenuItem.new
9
+ end
10
+
11
+ def create
12
+ @menu_item = Dust::MenuItem.new(params[:dust_menu_item])
13
+ if params[:menu_id]
14
+ @menu = Dust::Menu.find(params[:menu_id])
15
+ @menu_item.menu = @menu
16
+ end
17
+ if @menu_item.save
18
+ flash[:notice] = "Successfully created menu item."
19
+ try_return_to_previous_page(dust_menu_items_url)
20
+ else
21
+ render :action => 'new'
22
+ end
23
+ end
24
+
25
+ def edit
26
+ @menu_item = Dust::MenuItem.find(params[:id])
27
+ end
28
+
29
+ def update
30
+ @menu_item = Dust::MenuItem.find(params[:id])
31
+ if params[:menu_id]
32
+ @menu = Dust::Menu.find(params[:menu_id])
33
+ @menu_item.menu = @menu
34
+ end
35
+ if @menu_item.update_attributes(params[:dust_menu_item])
36
+ flash[:notice] = "Successfully updated menu item."
37
+ try_return_to_previous_page(dust_menu_items_url)
38
+ else
39
+ render :action => 'edit'
40
+ end
41
+ end
42
+
43
+ def destroy
44
+ @menu_item = Dust::MenuItem.find(params[:id])
45
+ @menu_item.destroy
46
+ flash[:notice] = "Successfully destroyed menu item."
47
+ redirect_to edit_dust_menu_url(@menu_item.menu)
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,47 @@
1
+ module Dust
2
+ class MenusController < AuthenticationController
3
+
4
+ filter_access_to :all
5
+
6
+ layout 'cms'
7
+
8
+ def index
9
+ @menus = Dust::Menu.all
10
+ end
11
+
12
+ def new
13
+ @menu = Dust::Menu.new
14
+ end
15
+
16
+ def edit
17
+ @menu = Dust::Menu.find(params[:id])
18
+ end
19
+
20
+ def create
21
+ @menu = Dust::Menu.new(params[:dust_menu])
22
+
23
+ if @menu.save
24
+ redirect_to edit_dust_menu_path(@menu), notice: 'Menu was successfully created.'
25
+ else
26
+ render action: "new"
27
+ end
28
+ end
29
+
30
+ def update
31
+ @menu = Dust::Menu.find(params[:id])
32
+
33
+ if @menu.update_attributes(params[:dust_menu])
34
+ redirect_to dust_menus_path, notice: 'Menu was successfully updated.'
35
+ else
36
+ render action: "edit"
37
+ end
38
+ end
39
+
40
+ def destroy
41
+ @menu = Dust::Menu.find(params[:id])
42
+ @menu.destroy
43
+
44
+ redirect_to dust_menus_url
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,52 @@
1
+ module Dust
2
+ class PagesController < AuthenticationController
3
+
4
+ filter_access_to :all
5
+
6
+ layout 'cms'
7
+
8
+ def index
9
+ @pages = Dust::Page.page(params[:search], params[:page])
10
+ end
11
+
12
+ def new
13
+ @page = Dust::Page.new_with_menu_item
14
+ end
15
+
16
+ def create
17
+ @page = Dust::Page.new_with_menu_item(params[:dust_page])
18
+ @builder = Dust::Builder::Page.new(:page => @page, :sections => params[:sections])
19
+
20
+ if @builder.save
21
+ flash[:notice] = "Successfully created page."
22
+ redirect_to front_end_page_path(@page.filename)
23
+ else
24
+ render :action => 'new', :layout => 'cms'
25
+ end
26
+ end
27
+
28
+ def edit
29
+ @page = Dust::Page.find(params[:id])
30
+ end
31
+
32
+ def update
33
+ @page = Dust::Page.find(params[:id])
34
+ @builder = Dust::Builder::Page.new(:page => @page, :sections => params[:sections], :attrs => params[:dust_page])
35
+
36
+ if @builder.update
37
+ flash[:notice] = "Successfully updated page."
38
+ redirect_to front_end_page_path(@page.filename)
39
+ else
40
+ render :action => 'edit'
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ @page = Dust::Page.find(params[:id])
46
+ @page.destroy
47
+ flash[:notice] = "Successfully destroyed page."
48
+ redirect_to dust_pages_url
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,48 @@
1
+ module Dust
2
+ class PasswordResetsController < AuthenticationController
3
+
4
+ before_filter :load_user_using_perishable_token, :only => [ :edit, :update ]
5
+
6
+ layout 'user_sessions'
7
+
8
+ def new
9
+ end
10
+
11
+ def create
12
+ @user = Dust::User.find_by_email(params[:email])
13
+ if @user
14
+ @user.deliver_password_reset_instructions!
15
+ flash[:notice] = "Instructions to reset your password have been emailed to you"
16
+ redirect_to root_path
17
+ else
18
+ flash.now[:error] = "No user was found with email address #{params[:email]}"
19
+ render :action => :new
20
+ end
21
+ end
22
+
23
+ def edit
24
+ end
25
+
26
+ def update
27
+ @user.password = params[:password]
28
+ @user.password_confirmation = params[:password]
29
+ if @user.save
30
+ flash[:notice] = "Your password was successfully updated"
31
+ redirect_to dashboard_url
32
+ else
33
+ render :action => :edit
34
+ end
35
+ end
36
+
37
+
38
+ private
39
+
40
+ def load_user_using_perishable_token
41
+ @user = Dust::User.find_using_perishable_token(params[:id])
42
+ unless @user
43
+ flash[:error] = "We're sorry, but we could not locate your account"
44
+ redirect_to root_url
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,47 @@
1
+ module Dust
2
+ class PostsController < AuthenticationController
3
+
4
+ filter_access_to :all
5
+
6
+ layout 'cms'
7
+
8
+ def index
9
+ @posts = Post.all
10
+ end
11
+
12
+ def new
13
+ @post = Post.new_with_menu_item
14
+ end
15
+
16
+ def edit
17
+ @post = Post.find(params[:id])
18
+ end
19
+
20
+ def create
21
+ @post = Post.new_with_menu_item(params[:dust_post])
22
+
23
+ if @post.save
24
+ redirect_to front_end_post_path(@post.slug), notice: 'Post was successfully created.'
25
+ else
26
+ render action: "new"
27
+ end
28
+ end
29
+
30
+ def update
31
+ @post = Post.find(params[:id])
32
+
33
+ if @post.update_attributes(params[:dust_post])
34
+ redirect_to front_end_post_path(@post.slug), notice: 'Post was successfully updated.'
35
+ else
36
+ render action: "edit"
37
+ end
38
+ end
39
+
40
+ def destroy
41
+ @post = Post.find(params[:id])
42
+ @post.destroy
43
+
44
+ redirect_to posts_url
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ module Dust
2
+ class RolesController < AuthenticationController
3
+
4
+ filter_access_to :all
5
+
6
+ layout 'cms'
7
+
8
+ def index
9
+ @roles = Dust::Role.all
10
+ end
11
+
12
+ def new
13
+ @role = Dust::Role.new
14
+ end
15
+
16
+ def create
17
+ @role = Dust::Role.new(params[:dust_role])
18
+ if @role.save
19
+ flash[:notice] = "Successfully created role."
20
+ redirect_to dust_roles_url
21
+ else
22
+ render :action => 'new', :layout => 'cms'
23
+ end
24
+ end
25
+
26
+ def edit
27
+ @role = Dust::Role.find(params[:id])
28
+ end
29
+
30
+ def update
31
+ @role = Dust::Role.find(params[:id])
32
+ if @role.update_attributes(params[:dust_role])
33
+ flash[:notice] = "Successfully updated role."
34
+ redirect_to dust_roles_url
35
+ else
36
+ render :action => 'edit', :layout => 'cms'
37
+ end
38
+ end
39
+
40
+ def destroy
41
+ @role = Dust::Role.find(params[:id])
42
+ @role.destroy
43
+ flash[:notice] = "Successfully destroyed role."
44
+ redirect_to dust_roles_url
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,29 @@
1
+ module Dust
2
+ class SessionsController < AuthenticationController
3
+
4
+
5
+ layout "sessions"
6
+
7
+ def new
8
+ @session = Dust::Session.new
9
+ end
10
+
11
+ def create
12
+ @user = login(params[:dust_session][:username], params[:dust_session][:password], params[:dust_session][:remember_me])
13
+ #raise "hey there"
14
+ if @user
15
+ redirect_back_or_to dust_dashboard_path, :notice => "Logged In!"
16
+ else
17
+ @session = Dust::Session.new(params[:dust_session], @user)
18
+ @session.valid?
19
+ render :action => 'new'
20
+ #flash.alert = "Email or Password Invalid!"
21
+ end
22
+ end
23
+
24
+ def destroy
25
+ logout
26
+ redirect_to root_url, :notice => "Logged Out!"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ module Dust
2
+ class SiteWidesController < AuthenticationController
3
+
4
+ filter_access_to :all
5
+ layout 'cms'
6
+
7
+ def new
8
+ @site_wide = Dust::SiteWide.new
9
+ end
10
+
11
+ def create
12
+ @site_wide = Dust::SiteWide.new(params[:dust_site_wide])
13
+ if @site_wide.save
14
+ redirect_to dust_dashboard_path
15
+ else
16
+ render :action => :new
17
+ end
18
+ end
19
+
20
+ def destroy
21
+ @site_wide = Dust::SiteWide.find params[:id]
22
+ @site_wide.destroy
23
+
24
+ redirect_to dust_dashboard_path
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ module Dust
2
+ class SortableController < AuthenticationController
3
+
4
+ def sort
5
+ begin
6
+ @menu_sort = Dust::Sort.new(params[:list], params[:class_name])
7
+ rescue ActiveRecord::RecordNotFound => e
8
+ not_found = true
9
+ flash[:error] = "Sorting Failed | #{e}"
10
+ else
11
+ flash[:notice] = "Sort Successfull!"
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,52 @@
1
+ module Dust
2
+ class UsersController < AuthenticationController
3
+
4
+ filter_access_to :all
5
+
6
+ layout 'cms'
7
+
8
+ def index
9
+ @users = Dust::User.page(params[:search], params[:page])
10
+ end
11
+
12
+ def new
13
+ @user = Dust::User.new()
14
+ end
15
+
16
+ def create
17
+ @user = Dust::User.new(params[:dust_user])
18
+
19
+ if @user.save
20
+ flash[:notice] = "Successfully created user."
21
+ redirect_to dust_users_url
22
+ else
23
+ render :action => 'new', :layout => 'cms'
24
+ end
25
+ end
26
+
27
+ def edit
28
+ @user = Dust::User.find(params[:id])
29
+ end
30
+
31
+ def update
32
+ @user = Dust::User.find(params[:id])
33
+
34
+ if @user.update_attributes(params[:dust_user])
35
+ flash[:notice] = "Successfully updated user information."
36
+ redirect = current_user.is?(:moderator) ? dust_dashboard_url : dust_users_url
37
+ redirect_to redirect
38
+ else
39
+ flash.now[:error] = "There was an error in your form."
40
+ render :action => 'edit', :layout => 'cms'
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ @user = Dust::User.find(params[:id])
46
+ @user.destroy
47
+ flash[:notice] = "Successfully destroyed user."
48
+ redirect_to dust_users_url
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,27 @@
1
+ class FrontEnd::PageController < FrontEndController
2
+
3
+ before_filter :root_redirect
4
+
5
+ def show
6
+ @page = Dust::Page.find_by_filename(params[:filename])
7
+ @contact = Dust::Contact.new
8
+
9
+ if @page == nil
10
+ raise Exceptions::PageNotFound
11
+ end
12
+
13
+ rescue Exceptions::PageNotFound
14
+ render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
15
+ end
16
+
17
+ def search
18
+ @results = (params[:query].present? ? Dust::Block.search(params[:query]) : [])
19
+ end
20
+
21
+ def root_redirect
22
+ if "/#{Dust.config.root}" == request.fullpath
23
+ redirect_to root_url, :status => 301
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ class FrontEnd::PostController < FrontEndController
2
+
3
+ def show
4
+ @post = Dust::Post.find_by_filename("post/#{params[:filename]}")
5
+
6
+ if @post == nil
7
+ raise Exceptions::PageNotFound
8
+ end
9
+
10
+ rescue Exceptions::PageNotFound
11
+ render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
12
+ end
13
+
14
+ end
@@ -0,0 +1,11 @@
1
+ class FrontEnd::SitemapController < FrontEndController
2
+
3
+ def index
4
+ @latest = Dust::MenuItem.last
5
+ respond_to do |format|
6
+ format.xml { @menu_items = Dust::MenuItem.sitemap}
7
+ format.html { @menu_items = Dust::MenuItem.all }
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,18 @@
1
+ class FrontEndController < AuthenticationController
2
+
3
+ before_filter :load_sitewide_data, :meta_tags, :load_blocks
4
+
5
+ def meta_tags
6
+ @description = @site_data.site_info.default_description
7
+ end
8
+
9
+ # Loads blocks and groups them by position in the layout
10
+ def load_blocks
11
+ @blocks = Dust::Block.find_active(request.fullpath)
12
+ end
13
+
14
+ def load_sitewide_data
15
+ @site_data = Dust::SiteWide.all_to_object
16
+ end
17
+
18
+ end
@@ -0,0 +1,23 @@
1
+ module ErrorMessagesHelper
2
+ # Render error messages for the given objects. The :message and :header_message options are allowed.
3
+ def error_messages_for(*objects)
4
+ options = objects.extract_options!
5
+ options[:header_message] ||= "Invalid Fields"
6
+ options[:message] ||= "Correct the following errors and try again."
7
+ messages = objects.compact.map { |o| o.errors.full_messages }.flatten
8
+ unless messages.empty?
9
+ content_tag(:div, :class => "error_messages") do
10
+ list_items = messages.map { |msg| content_tag(:li, msg) }
11
+ content_tag(:h2, options[:header_message]) + content_tag(:p, options[:message]) + content_tag(:ul, list_items.join.html_safe)
12
+ end
13
+ end
14
+ end
15
+
16
+ module FormBuilderAdditions
17
+ def error_messages(options = {})
18
+ @template.error_messages_for(@object, options)
19
+ end
20
+ end
21
+ end
22
+
23
+ ActionView::Helpers::FormBuilder.send(:include, ErrorMessagesHelper::FormBuilderAdditions)
@@ -0,0 +1,4 @@
1
+ module Exceptions
2
+ class PageNotFound < StandardError; end
3
+ end
4
+
@@ -0,0 +1,28 @@
1
+ # These helper methods can be called in your template to set variables to be used in the layout
2
+ # This module should be included in all views globally,
3
+ module LayoutHelper
4
+ def title(page_title, show_title = true)
5
+ content_for(:title) { h(page_title.to_s) }
6
+ @show_title = show_title
7
+ end
8
+
9
+ def show_title?
10
+ @show_title
11
+ end
12
+
13
+ def heading(page_title, show_title = true)
14
+ content_for(:heading) { h(page_title.to_s) }
15
+ end
16
+
17
+ def description(page_description, show_description = true)
18
+ content_for(:description) { h(page_description.to_s) }
19
+ end
20
+
21
+ def stylesheet(*args)
22
+ content_for(:head) { stylesheet_link_tag(*args) }
23
+ end
24
+
25
+ def javascript(*args)
26
+ content_for(:head) { javascript_include_tag(*args) }
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ module MiscHelper
2
+
3
+ def create_description
4
+ truncate(strip_tags(content), :length => 50)
5
+ end
6
+
7
+ def content_classes()
8
+ classes = ""
9
+ classes << @page.classes unless @page.nil? or @page.classes.nil?
10
+ classes
11
+ end
12
+
13
+ def edit_icon(type="")
14
+ image_tag("admin/ui/edit-icon.png", :class =>"brush tip", :title => "Edit #{type}")
15
+ end
16
+
17
+ def delete_icon(type="")
18
+ image_tag("admin/ui/delete-icon.png", :class =>"brush tip", :title => "Delete #{type}")
19
+ end
20
+
21
+ def index_icon(type="")
22
+ image_tag("admin/ui/index-icon.png", :class =>"eye tip", :title => "Show All #{type}")
23
+ end
24
+
25
+ def new_icon(type="")
26
+ image_tag("admin/ui/new-icon.png", :class =>"eye tip", :title => "Create New #{type}")
27
+ end
28
+
29
+ end
@@ -0,0 +1,32 @@
1
+ module RegionHelper
2
+
3
+ def render_region(name, classes="", &block)
4
+ @block_content = (block_given? ? block : @blocks.select{ |b| b.where_to_show == name })
5
+ unless @block_content.blank?
6
+ build_regions(name, classes, (@block_content.class == Proc ? @block_content : render_block_wrappers))
7
+ end
8
+ end
9
+
10
+ def build_regions(name, classes, innards)
11
+ @regions = region_wrapper("#{name}-blocks", "container-twelve", innards)
12
+ @regions = region_wrapper("#{name}-blocks-container", "clearfix", @regions)
13
+ @regions = region_wrapper("#{name}-blocks-wrapper", "cleafix #{classes}", @regions)
14
+
15
+ @regions
16
+ end
17
+
18
+ def region_wrapper(id, html_class, innards="")
19
+ content_tag :div, :id => id, :class => html_class do
20
+ innards.class == Proc ? innards.call : raw(innards)
21
+ end
22
+ end
23
+
24
+ def render_block_wrappers
25
+ @block_content.map! do |block|
26
+ render(:partial => "dust/blocks/block", :locals => {:block => block})
27
+ end
28
+ @block_content.join("\n")
29
+ end
30
+
31
+ end
32
+
@@ -0,0 +1,39 @@
1
+ class PostOffice < ActionMailer::Base
2
+
3
+ default :from => default_recipient
4
+
5
+ def contact_confirmation(contact)
6
+ @contact = contact
7
+ mail(:to => "#{contact.name} <#{contact.email}>", :subject => "Your contact request has been sent.")
8
+ end
9
+
10
+ def contact_request(contact)
11
+ @contact = contact
12
+ mail(:to => default_recipient, :subject => "New contact request has been received.")
13
+ end
14
+
15
+ def password_reset_instructions(user)
16
+ @user = user
17
+ @edit_password_reset_url = edit_password_reset_url(user.perishable_token)
18
+ mail(:to => "#{user.username} <#{user.email}>", :subject => "Password Reset Instructions", :content_type => "text/html")
19
+ end
20
+
21
+ def activation_needed_email(user)
22
+ @user = user
23
+ mail(:to => default_recipient, :subject => "User #{@user.username} is awaiting approval.", :content_type => "text/html")
24
+ end
25
+
26
+ def activation_success_email(user)
27
+ @user = user
28
+ mail(:to => "#{user.username} <#{user.email}>", :subject => "Your Landmark Title account has been approved.", :content_type => "text/html")
29
+ end
30
+
31
+ def default_recipient
32
+ Dust.site_wides.contact_info.default_recipient || "no-reply@dust.com"
33
+ end
34
+
35
+ def self.default_recipient
36
+ self.new.default_recipient
37
+ end
38
+
39
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::Asset < ActiveRecord::Base
2
+ include Ckeditor::Orm::ActiveRecord::AssetBase
3
+
4
+ delegate :url, :current_path, :size, :content_type, :filename, :to => :data
5
+
6
+ validates_presence_of :data
7
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::AttachmentFile < Ckeditor::Asset
2
+ mount_uploader :data, CkeditorAttachmentFileUploader, :mount_on => :data_file_name
3
+
4
+ def url_thumb
5
+ @url_thumb ||= Ckeditor::Utils.filethumb(data_file_name)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::Picture < Ckeditor::Asset
2
+ mount_uploader :data, CkeditorPictureUploader, :mount_on => :data_file_name
3
+
4
+ def url_content
5
+ url(:content)
6
+ end
7
+ end