imagine_cms 3.0.0.beta6 → 3.0.0.beta7

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 (278) hide show
  1. data/README.rdoc +1 -1
  2. data/app/assets/images/codepress/line-numbers.png +0 -0
  3. data/app/assets/images/cropper/marqueeHoriz.gif +0 -0
  4. data/app/assets/images/cropper/marqueeVert.gif +0 -0
  5. data/app/assets/images/management/btn_add.gif +0 -0
  6. data/app/assets/images/management/btn_archive.gif +0 -0
  7. data/app/assets/images/management/btn_delete.gif +0 -0
  8. data/app/assets/images/management/btn_duplicate.gif +0 -0
  9. data/app/assets/images/management/btn_edit.gif +0 -0
  10. data/app/assets/images/management/btn_help.gif +0 -0
  11. data/app/assets/images/management/btn_new_page.gif +0 -0
  12. data/app/assets/images/management/btn_preview.gif +0 -0
  13. data/app/assets/images/management/btn_properties.gif +0 -0
  14. data/app/assets/images/management/btn_restore.gif +0 -0
  15. data/app/assets/images/management/btn_top_delete.gif +0 -0
  16. data/app/assets/images/management/btn_top_duplicate.gif +0 -0
  17. data/app/assets/images/management/btn_top_edit.gif +0 -0
  18. data/app/assets/images/management/btn_top_new.gif +0 -0
  19. data/app/assets/images/management/btn_top_preview.gif +0 -0
  20. data/app/assets/images/management/btn_top_properties.gif +0 -0
  21. data/app/assets/{manage → images/management}/bullet.gif +0 -0
  22. data/app/assets/images/management/cvv2_graphic.gif +0 -0
  23. data/app/assets/images/management/error.gif +0 -0
  24. data/app/assets/images/management/gallery_index.gif +0 -0
  25. data/app/assets/images/management/gallery_preview_overlay.png +0 -0
  26. data/app/assets/images/management/gallery_small_drag_overlay.png +0 -0
  27. data/app/assets/images/management/gallery_small_overlay.png +0 -0
  28. data/app/assets/images/management/gallery_sort.gif +0 -0
  29. data/app/assets/images/management/icon_download.gif +0 -0
  30. data/app/assets/images/management/icon_locked.png +0 -0
  31. data/app/assets/images/management/icon_page.gif +0 -0
  32. data/app/assets/images/management/icon_time.gif +0 -0
  33. data/app/assets/images/management/icon_unlocked.png +0 -0
  34. data/app/assets/images/management/page_loading.gif +0 -0
  35. data/app/assets/{manage → images/management}/start.gif +0 -0
  36. data/app/assets/images/management/vcard.gif +0 -0
  37. data/app/assets/javascripts/builder.js +101 -0
  38. data/app/assets/javascripts/codepress/codepress.html +36 -0
  39. data/app/assets/javascripts/codepress/codepress.js +130 -0
  40. data/app/assets/javascripts/codepress/engines/gecko.js +240 -0
  41. data/{vendor/gems/acts_as_tree/test/abstract_unit.rb → app/assets/javascripts/codepress/engines/khtml.js} +0 -0
  42. data/app/assets/javascripts/codepress/engines/msie.js +263 -0
  43. data/{vendor/gems/acts_as_tree/test/database.yml → app/assets/javascripts/codepress/engines/older.js} +0 -0
  44. data/app/assets/javascripts/codepress/engines/opera.js +259 -0
  45. data/app/assets/javascripts/codepress/languages/css.js +23 -0
  46. data/app/assets/javascripts/codepress/languages/generic.js +25 -0
  47. data/app/assets/javascripts/codepress/languages/html.js +63 -0
  48. data/app/assets/javascripts/codepress/languages/java.js +24 -0
  49. data/app/assets/javascripts/codepress/languages/javascript.js +30 -0
  50. data/app/assets/javascripts/codepress/languages/perl.js +27 -0
  51. data/app/assets/javascripts/codepress/languages/php.js +60 -0
  52. data/app/assets/javascripts/codepress/languages/ruby.js +26 -0
  53. data/app/assets/javascripts/codepress/languages/sql.js +30 -0
  54. data/app/assets/javascripts/codepress/languages/text.js +9 -0
  55. data/app/assets/javascripts/cropper.js +568 -0
  56. data/app/assets/javascripts/dojo/dojo.js +14155 -0
  57. data/app/assets/javascripts/dojo/src/html/images/shadowB.png +0 -0
  58. data/app/assets/javascripts/dojo/src/html/images/shadowBL.png +0 -0
  59. data/app/assets/javascripts/dojo/src/html/images/shadowBR.png +0 -0
  60. data/app/assets/javascripts/dojo/src/html/images/shadowL.png +0 -0
  61. data/app/assets/javascripts/dojo/src/html/images/shadowR.png +0 -0
  62. data/app/assets/javascripts/dojo/src/html/images/shadowT.png +0 -0
  63. data/app/assets/javascripts/dojo/src/html/images/shadowTL.png +0 -0
  64. data/app/assets/javascripts/dojo/src/html/images/shadowTR.png +0 -0
  65. data/app/assets/javascripts/dojo/src/widget/templates/Editor2/showtableborder_gecko.css +19 -0
  66. data/app/assets/javascripts/dojo/src/widget/templates/HslColorPicker.svg +30 -0
  67. data/app/assets/javascripts/dojo/src/widget/templates/buttons/aggregate.gif +0 -0
  68. data/app/assets/javascripts/dojo/src/widget/templates/buttons/aggregate.psd +0 -0
  69. data/app/assets/javascripts/dojo/src/widget/templates/buttons/backcolor.gif +0 -0
  70. data/app/assets/javascripts/dojo/src/widget/templates/buttons/bg-fade.png +0 -0
  71. data/app/assets/javascripts/dojo/src/widget/templates/buttons/bold.gif +0 -0
  72. data/app/assets/javascripts/dojo/src/widget/templates/buttons/cancel.gif +0 -0
  73. data/app/assets/javascripts/dojo/src/widget/templates/buttons/copy.gif +0 -0
  74. data/app/assets/javascripts/dojo/src/widget/templates/buttons/createlink.gif +0 -0
  75. data/app/assets/javascripts/dojo/src/widget/templates/buttons/cut.gif +0 -0
  76. data/app/assets/javascripts/dojo/src/widget/templates/buttons/delete.gif +0 -0
  77. data/app/assets/javascripts/dojo/src/widget/templates/buttons/forecolor.gif +0 -0
  78. data/app/assets/javascripts/dojo/src/widget/templates/buttons/hilitecolor.gif +0 -0
  79. data/app/assets/javascripts/dojo/src/widget/templates/buttons/indent.gif +0 -0
  80. data/app/assets/javascripts/dojo/src/widget/templates/buttons/inserthorizontalrule.gif +0 -0
  81. data/app/assets/javascripts/dojo/src/widget/templates/buttons/insertimage.gif +0 -0
  82. data/app/assets/javascripts/dojo/src/widget/templates/buttons/insertorderedlist.gif +0 -0
  83. data/app/assets/javascripts/dojo/src/widget/templates/buttons/inserttable.gif +0 -0
  84. data/app/assets/javascripts/dojo/src/widget/templates/buttons/insertunorderedlist.gif +0 -0
  85. data/app/assets/javascripts/dojo/src/widget/templates/buttons/italic.gif +0 -0
  86. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifycenter.gif +0 -0
  87. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifyfull.gif +0 -0
  88. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifyleft.gif +0 -0
  89. data/app/assets/javascripts/dojo/src/widget/templates/buttons/justifyright.gif +0 -0
  90. data/app/assets/javascripts/dojo/src/widget/templates/buttons/left_to_right.gif +0 -0
  91. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_bullet_indent.gif +0 -0
  92. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_bullet_outdent.gif +0 -0
  93. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_num_indent.gif +0 -0
  94. data/app/assets/javascripts/dojo/src/widget/templates/buttons/list_num_outdent.gif +0 -0
  95. data/app/assets/javascripts/dojo/src/widget/templates/buttons/outdent.gif +0 -0
  96. data/app/assets/javascripts/dojo/src/widget/templates/buttons/paste.gif +0 -0
  97. data/app/assets/javascripts/dojo/src/widget/templates/buttons/redo.gif +0 -0
  98. data/app/assets/javascripts/dojo/src/widget/templates/buttons/removeformat.gif +0 -0
  99. data/app/assets/javascripts/dojo/src/widget/templates/buttons/right_to_left.gif +0 -0
  100. data/app/assets/javascripts/dojo/src/widget/templates/buttons/save.gif +0 -0
  101. data/app/assets/javascripts/dojo/src/widget/templates/buttons/sep.gif +0 -0
  102. data/app/assets/javascripts/dojo/src/widget/templates/buttons/space.gif +0 -0
  103. data/app/assets/javascripts/dojo/src/widget/templates/buttons/strikethrough.gif +0 -0
  104. data/app/assets/javascripts/dojo/src/widget/templates/buttons/subscript.gif +0 -0
  105. data/app/assets/javascripts/dojo/src/widget/templates/buttons/superscript.gif +0 -0
  106. data/app/assets/javascripts/dojo/src/widget/templates/buttons/underline.gif +0 -0
  107. data/app/assets/javascripts/dojo/src/widget/templates/buttons/undo.gif +0 -0
  108. data/app/assets/javascripts/dojo/src/widget/templates/buttons/wikiword.gif +0 -0
  109. data/app/assets/javascripts/dojo/src/widget/templates/check.gif +0 -0
  110. data/app/assets/javascripts/dojo/src/widget/templates/decrementMonth.gif +0 -0
  111. data/app/assets/javascripts/dojo/src/widget/templates/decrementWeek.gif +0 -0
  112. data/app/assets/javascripts/dojo/src/widget/templates/grabCorner.gif +0 -0
  113. data/app/assets/javascripts/dojo/src/widget/templates/images/floatingPaneClose.gif +0 -0
  114. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaAccordionOff.gif +0 -0
  115. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaAccordionSelected.gif +0 -0
  116. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaActive-c.gif +0 -0
  117. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaActive-l.gif +0 -0
  118. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaActive-r.gif +0 -0
  119. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaBarBg.gif +0 -0
  120. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaButton-c.gif +0 -0
  121. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaButton-l.gif +0 -0
  122. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaButton-r.gif +0 -0
  123. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaDisabled-c.gif +0 -0
  124. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaDisabled-l.gif +0 -0
  125. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaDisabled-r.gif +0 -0
  126. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaMenuBg.gif +0 -0
  127. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaPressed-c.gif +0 -0
  128. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaPressed-l.gif +0 -0
  129. data/app/assets/javascripts/dojo/src/widget/templates/images/soriaPressed-r.gif +0 -0
  130. data/app/assets/javascripts/dojo/src/widget/templates/images/tab_close.gif +0 -0
  131. data/app/assets/javascripts/dojo/src/widget/templates/images/toolbar-bg.gif +0 -0
  132. data/app/assets/javascripts/dojo/src/widget/templates/incrementMonth.gif +0 -0
  133. data/app/assets/javascripts/dojo/src/widget/templates/incrementWeek.gif +0 -0
  134. data/app/assets/javascripts/dojo/src/widget/templates/richtextframe.html +24 -0
  135. data/app/assets/javascripts/imagine.js +1385 -0
  136. data/app/assets/javascripts/jquery_no_conflict.js +9405 -0
  137. data/app/assets/stylesheets/codepress/codepress.css +7 -0
  138. data/app/assets/stylesheets/codepress/languages/css.css +10 -0
  139. data/app/assets/stylesheets/codepress/languages/generic.css +9 -0
  140. data/app/assets/stylesheets/codepress/languages/html.css +18 -0
  141. data/app/assets/stylesheets/codepress/languages/java.css +7 -0
  142. data/app/assets/stylesheets/codepress/languages/javascript.css +8 -0
  143. data/app/assets/stylesheets/codepress/languages/perl.css +11 -0
  144. data/app/assets/stylesheets/codepress/languages/php.css +12 -0
  145. data/app/assets/stylesheets/codepress/languages/ruby.css +10 -0
  146. data/app/assets/stylesheets/codepress/languages/sql.css +10 -0
  147. data/app/assets/stylesheets/codepress/languages/text.css +5 -0
  148. data/app/assets/stylesheets/cropper.css +182 -0
  149. data/app/assets/stylesheets/management.css +96 -0
  150. data/app/assets/stylesheets/reset.css +58 -0
  151. data/app/controllers/cms/content_controller.rb +318 -2
  152. data/app/controllers/management/cms_controller.rb +1669 -0
  153. data/app/controllers/management/user_controller.rb +4 -4
  154. data/app/controllers/management/users_controller.rb +18 -4
  155. data/app/controllers/util_controller.rb +45 -0
  156. data/app/helpers/cms_application_helper.rb +662 -15
  157. data/app/models/cms_content_sweeper.rb +21 -0
  158. data/app/models/cms_page.rb +126 -0
  159. data/app/models/cms_page_object.rb +23 -0
  160. data/app/models/cms_page_tag.rb +5 -0
  161. data/app/models/cms_page_version.rb +3 -0
  162. data/app/models/cms_snippet.rb +16 -0
  163. data/app/models/cms_template.rb +29 -0
  164. data/app/models/user.rb +6 -3
  165. data/app/views/management/cms/_complete_gallery.html.erb +5 -0
  166. data/app/views/management/cms/_create_file_link.html.erb +21 -0
  167. data/app/views/management/cms/_crop_feature_image.html.erb +188 -0
  168. data/app/views/management/cms/_crop_image.html.erb +188 -0
  169. data/app/views/management/cms/_crop_results.html.erb +1 -0
  170. data/app/views/management/cms/_crop_results_feature_image.html.erb +1 -0
  171. data/app/views/management/cms/_crop_results_thumb.html.erb +1 -0
  172. data/app/views/management/cms/_crop_thumb.html.erb +188 -0
  173. data/app/views/management/cms/_dialogs.html.erb +39 -0
  174. data/app/views/management/cms/_edit_page.html.erb +176 -0
  175. data/app/views/management/cms/_gallery_index.html.erb +10 -0
  176. data/app/views/management/cms/_gallery_setup.html.erb +22 -0
  177. data/app/views/management/cms/_image.html.erb +3 -0
  178. data/app/views/management/cms/_image_details.html.erb +26 -0
  179. data/app/views/management/cms/_image_draggable.html.erb +4 -0
  180. data/app/views/management/cms/_list_page.html.erb +8 -0
  181. data/app/views/management/cms/_list_page_select.html.erb +8 -0
  182. data/app/views/management/cms/_list_pages.html.erb +1 -0
  183. data/app/views/management/cms/_list_pages_select.html.erb +1 -0
  184. data/app/views/management/cms/_page_attribute.html.erb +6 -0
  185. data/app/views/management/cms/_page_list.html.erb +171 -0
  186. data/app/views/management/cms/_page_list_source_folder.html.erb +20 -0
  187. data/app/views/management/cms/_page_list_source_tag.html.erb +18 -0
  188. data/app/views/management/cms/_select_gallery.html.erb +117 -0
  189. data/app/views/management/cms/_snippet.html.erb +3 -0
  190. data/app/views/management/cms/_sort_images.html.erb +15 -0
  191. data/app/views/management/cms/_temp.html.erb +3 -0
  192. data/app/views/management/cms/_template_options.html.erb +21 -0
  193. data/app/views/management/cms/_template_reference.html.erb +42 -0
  194. data/app/views/management/cms/_upload_feature_image.html.erb +35 -0
  195. data/app/views/management/cms/_upload_file.html.erb +31 -0
  196. data/app/views/management/cms/_upload_image.html.erb +74 -0
  197. data/app/views/management/cms/_upload_thumb.html.erb +35 -0
  198. data/app/views/management/cms/edit_master.html.erb +48 -0
  199. data/app/views/management/cms/edit_page_content.html.erb +4 -0
  200. data/app/views/management/cms/edit_snippet.html.erb +47 -0
  201. data/app/views/management/cms/edit_template.html.erb +48 -0
  202. data/app/views/management/cms/gallery_management.html.erb +108 -0
  203. data/app/views/management/cms/index.html.erb +20 -0
  204. data/app/views/management/cms/page_tags_for_lookup.html.erb +5 -0
  205. data/app/views/management/cms/pages.html.erb +99 -0
  206. data/app/views/management/cms/permission_denied.html.erb +1 -0
  207. data/app/views/management/cms/select_page.html.erb +57 -0
  208. data/app/views/management/cms/snippets.html.erb +14 -0
  209. data/app/views/management/cms/templates.html.erb +14 -0
  210. data/app/views/management/cms/toolbar_edit.html.erb +269 -0
  211. data/app/views/management/cms/toolbar_preview.html.erb +109 -0
  212. data/app/views/util/_calendar_days.html.erb +72 -0
  213. data/app/views/util/_calendar_month_year.html.erb +1 -0
  214. data/app/views/util/_date_picker.html.erb +56 -0
  215. data/app/views/util/_message.html.erb +1 -0
  216. data/app/views/util/_show_message.js.erb +6 -0
  217. data/app/views/util/_tab.html.erb +4 -0
  218. data/config/routes.rb +4 -1
  219. data/imagine_cms.gemspec +4 -0
  220. data/{vendor/gems → lib}/acts_as_versioned/.document +0 -0
  221. data/{vendor/gems → lib}/acts_as_versioned/.gitignore +2 -0
  222. data/{vendor/gems → lib}/acts_as_versioned/CHANGELOG +0 -0
  223. data/lib/acts_as_versioned/Gemfile +7 -0
  224. data/{vendor/gems → lib}/acts_as_versioned/MIT-LICENSE +0 -0
  225. data/{vendor/gems → lib}/acts_as_versioned/README +0 -0
  226. data/{vendor/gems → lib}/acts_as_versioned/RUNNING_UNIT_TESTS +0 -0
  227. data/{vendor/gems → lib}/acts_as_versioned/Rakefile +1 -1
  228. data/{vendor/gems → lib}/acts_as_versioned/acts_as_versioned.gemspec +4 -4
  229. data/{vendor/gems → lib}/acts_as_versioned/init.rb +0 -0
  230. data/{vendor/gems → lib}/acts_as_versioned/lib/acts_as_versioned.rb +109 -107
  231. data/{vendor/gems → lib}/acts_as_versioned/test/abstract_unit.rb +0 -0
  232. data/{vendor/gems → lib}/acts_as_versioned/test/database.yml +0 -0
  233. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/authors.yml +0 -0
  234. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/landmark.rb +0 -0
  235. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/landmark_versions.yml +0 -0
  236. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/landmarks.yml +0 -0
  237. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/locked_pages.yml +0 -0
  238. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/locked_pages_revisions.yml +0 -0
  239. data/{vendor/gems/acts_as_versioned/test/fixtures/migrations/1_add_versioned_tables.rb → lib/acts_as_versioned/test/fixtures/migrations/2_add_versioned_tables.rb} +0 -0
  240. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/page.rb +0 -0
  241. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/page_versions.yml +0 -0
  242. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/pages.yml +0 -0
  243. data/{vendor/gems → lib}/acts_as_versioned/test/fixtures/widget.rb +0 -0
  244. data/{vendor/gems → lib}/acts_as_versioned/test/migration_test.rb +0 -1
  245. data/{vendor/gems → lib}/acts_as_versioned/test/schema.rb +0 -0
  246. data/{vendor/gems → lib}/acts_as_versioned/test/versioned_test.rb +0 -0
  247. data/lib/extensions/action_controller.rb +154 -143
  248. data/lib/imagine_cms/engine.rb +33 -12
  249. data/lib/imagine_cms/version.rb +1 -1
  250. data/lib/imagine_cms.rb +30 -6
  251. data/lib/prototype_legacy_helper/README.markdown +13 -0
  252. data/lib/prototype_legacy_helper/init.rb +1 -0
  253. data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +430 -0
  254. data/lib/prototype_legacy_helper/test/test_prototype_helper.rb +297 -0
  255. data/lib/upload_progress/CHANGELOG +5 -0
  256. data/lib/upload_progress/MIT-LICENSE +20 -0
  257. data/lib/upload_progress/README +45 -0
  258. data/{vendor/gems/acts_as_tree → lib/upload_progress}/Rakefile +6 -5
  259. data/lib/upload_progress/init.rb +7 -0
  260. data/lib/upload_progress/lib/multipart_progress.rb +176 -0
  261. data/lib/upload_progress/lib/progress.rb +145 -0
  262. data/lib/upload_progress/lib/upload_progress.rb +303 -0
  263. data/lib/upload_progress/lib/upload_progress_helper.rb +425 -0
  264. data/lib/upload_progress/public/stylesheets/upload_progress.css +21 -0
  265. data/lib/upload_progress/test/multipart_progress_testx.rb +364 -0
  266. data/lib/upload_progress/test/upload_progress_helper_testx.rb +134 -0
  267. data/lib/upload_progress/test/upload_progress_testx.rb +88 -0
  268. metadata +305 -43
  269. data/app/assets/manage/btn_delete.gif +0 -0
  270. data/vendor/gems/.DS_Store +0 -0
  271. data/vendor/gems/acts_as_tree/README +0 -26
  272. data/vendor/gems/acts_as_tree/init.rb +0 -1
  273. data/vendor/gems/acts_as_tree/lib/active_record/acts/tree.rb +0 -96
  274. data/vendor/gems/acts_as_tree/test/acts_as_tree_test.rb +0 -219
  275. data/vendor/gems/acts_as_tree/test/fixtures/mixin.rb +0 -0
  276. data/vendor/gems/acts_as_tree/test/fixtures/mixins.yml +0 -0
  277. data/vendor/gems/acts_as_tree/test/schema.rb +0 -0
  278. data/vendor/gems/acts_as_versioned/Gemfile +0 -7
@@ -49,13 +49,329 @@ module Cms # :nodoc:
49
49
 
50
50
  # Renders app/views/errors/404.rhtml with http status 404 Not Found.
51
51
  def not_found
52
- logger.error "404 from #{request.referer}"
53
- render :template => 'errors/404', :status => 404
52
+ # logger.error "404 from #{request.referer}"
53
+ # render :template => 'errors/404', :status => 404
54
+
55
+ # let Rails handle 404s natively (override if you want to handle manually)
56
+ raise ActionController::RoutingError.new('404 Not Found')
54
57
  end
55
58
 
56
59
  def show_from_db
60
+ logger.debug 'Rendering content from database'
61
+
62
+ # begin
63
+ @content_levels = params[:content_path]
64
+ db_path = params[:content_path]
65
+ edit_mode = false
66
+ @allow_caching = true
67
+
68
+ # check for /login
69
+ if db_path.last == 'login'
70
+ db_path.pop
71
+ if @pg = CmsPage.find_by_path(db_path.join('/'))
72
+ db_path << 'version'
73
+ db_path << (@pg.published_version <= 0 ? @pg.version : @pg.published_version).to_s
74
+ @allow_caching = false
75
+
76
+ if is_logged_in_user?
77
+ redirect_to '/' + db_path.join('/') and return true
78
+ else
79
+ flash[:notice] = "Please log in now in order to switch to Preview Mode on the page you were just viewing."
80
+ session[:saved_user_uri] = '/' + db_path.join('/')
81
+ redirect_to :controller => '/management/user', :action => 'login' and return true
82
+ end
83
+ end
84
+ end
85
+
86
+ # check for /edit
87
+ if db_path.last == 'edit'
88
+ db_path.pop
89
+ edit_mode = true
90
+ @allow_caching = false
91
+ end
92
+
93
+ # check for 2-part suffixes (/version/[#], /form/[action])
94
+ test = db_path.last(2)
95
+
96
+ if test.size == 2
97
+ if test.first == 'version' && test.last.to_i > 0
98
+ params[:version] = db_path.pop
99
+ db_path.pop
100
+ @allow_caching = false
101
+ elsif test.first == 'form'
102
+ @form_action = db_path.pop
103
+ db_path.pop
104
+ @allow_caching = false
105
+
106
+ # restore saved instance variables
107
+ if session[:saved_instance_variables].is_a? Hash
108
+ session[:saved_instance_variables].each do |k, v|
109
+ instance_variable_set "@#{k}", v
110
+ end
111
+ session[:saved_instance_variables] = nil
112
+ end
113
+ end
114
+ end
115
+
116
+ # check for 3-part suffixes (/segment/[offset]/[plname])
117
+ test = db_path.last(3)
118
+
119
+ if test.size == 3
120
+ if test[0] == 'segment' && !test[1].empty? && !test[2].empty?
121
+ @page_list_segment = true
122
+ params[:page_list_name] = db_path.pop
123
+ params[:offset] = db_path.pop
124
+ db_path.pop
125
+ @allow_caching = false
126
+ end
127
+ end
128
+
129
+ if db_path.last == 'index'
130
+ db_path.pop
131
+ params[:page] = 'index'
132
+ end
133
+
134
+ if @pg = CmsPage.find_by_path(db_path.join('/'), :include => [ :template ])
135
+ if edit_mode
136
+ redirect_to :controller => '/management/cms', :action => 'edit_page_content', :id => @pg and return true
137
+ else
138
+ # return if page is offline and viewer is not an admin
139
+ if @pg.published_version < 0
140
+ if !is_logged_in_user?
141
+ return false
142
+ else
143
+ # display, but don't cache
144
+ @allow_caching = false
145
+ end
146
+ end
147
+
148
+ # load appropriate page version and associated objects
149
+ # if we had to authenticate, load_page_objects = false, but return true so we don't call not_found
150
+ load_page_objects or return true
151
+
152
+ # set "legacy" vars
153
+ params[:section] = @content_levels.size < 1 ? '' : @content_levels.first
154
+ params[:subsection] = @content_levels[1] unless @content_levels.size < 3
155
+ if @content_levels.size == 1
156
+ params[:page] = 'index'
157
+ elsif @content_levels.size > 1
158
+ params[:page] = @content_levels.last
159
+ end
160
+
161
+ @page_title = @pg.title
162
+
163
+ template_content = render_cms_page_to_string(@pg)
164
+
165
+ # logger.debug @page_objects.map { |k,v| "#{k}: #{v}\n" }
166
+
167
+ # this is kind of ugly, having this in the middle of my rendering code
168
+ if @page_list_segment
169
+ name = params[:page_list_name]
170
+ key = "obj-page_list-#{name.gsub(/[^\w]/, '_')}"
171
+ pages = page_list_items(@pg, key).compact.uniq
172
+ render :inline => render_page_list_segment(name, pages) and return true
173
+ end
174
+ # end of page list segment code
175
+
176
+ render :inline => template_content
177
+
178
+ if perform_caching && UseCmsPageCaching && @allow_caching
179
+ cache_page
180
+ end
181
+
182
+ return true
183
+ end
184
+ end
185
+ # rescue Exception => e
186
+ # logger.debug "Error rendering from db: #{e.inspect.gsub(/</, '&lt;')} #{e.backtrace}"
187
+ # log_error(e)
188
+ # end
189
+
190
+ # if we haven't rendered something from the db by now, return false
57
191
  false
58
192
  end
59
193
 
194
+
195
+ def disable_caching
196
+ @allow_caching = false
197
+ end
198
+ helper_method :disable_caching
199
+
200
+ def search
201
+ @terms = []
202
+ @pages = []
203
+
204
+ if params[:q]
205
+ @terms = params[:q].split(/\s+/).reject { |t| t.length < 3 }
206
+ end
207
+
208
+ CmsPage.index_all
209
+ unless @terms.empty?
210
+ term_variants = []
211
+ @terms.each do |term|
212
+ term_variants << [ term, term.singularize, term.pluralize ].uniq.map { |v| v.gsub(/[\[\]\:\>\(\)\?]/, '').gsub(/\+/, '\+') }.join('|')
213
+ end
214
+
215
+ conds = [ 'published_version >= 0' ]
216
+ vars = []
217
+ term_variants.each do |term_variant|
218
+ conds << "(title regexp ?)"
219
+ vars << "[[:<:]](#{term_variant})[[:>:]]"
220
+ end
221
+ @pages.concat CmsPage.find(:all, :conditions => [ conds.join(' and ') ].concat(vars))
222
+
223
+ conds = [ 'published_version >= 0' ]
224
+ vars = []
225
+ term_variants.each do |term_variant|
226
+ conds << "(title regexp ? or search_index regexp ?)"
227
+ vars << "[[:<:]](#{term_variant})[[:>:]]" << "[[:<:]](#{term_variant})[[:>:]]"
228
+ end
229
+ @pages.concat CmsPage.find(:all, :conditions => [ conds.join(' and ') ].concat(vars))
230
+
231
+ # fulltext doesn't work with innodb... may need to make a separate myisam
232
+ # table just for search. (this would be better because it would sort by relevance)
233
+ # @pages.concat CmsPage.find(:all, :conditions => [ 'match (title, search_index) against (?)', params[:q] ])
234
+ end
235
+ @pages = @pages.uniq.reject { |pg| pg.search_index.empty? }
236
+
237
+ @pg = CmsPage.new
238
+ @pg.template = CmsTemplate.find_by_name('Search') || CmsTemplate.new
239
+ @page_title = 'Search Results'
240
+
241
+ load_page_objects or return
242
+ @page_objects['obj-text-search_results'] = render_to_string(:partial => 'search')
243
+
244
+ render :inline => render_cms_page_to_string(@pg)
245
+ end
246
+
247
+ def rss_feed
248
+ min_time = Time.rfc2822(request.env["HTTP_IF_MODIFIED_SINCE"]) rescue nil
249
+ if min_time && (Time.now - min_time) < 5.minutes
250
+ render :text => '', :status => '304 Not Modified' and return
251
+ end
252
+
253
+ @pg = CmsPage.find_by_id(params[:page_id])
254
+ render :nothing => true and return unless @pg && params[:page_list_name]
255
+ key = "obj-page_list-#{params[:page_list_name].gsub(/[^\w]/, '_')}"
256
+
257
+ load_page_objects or return true
258
+
259
+ options ||= {}
260
+ today = Time.mktime(Time.now.year, Time.now.month, Time.now.day)
261
+ case @page_objects["#{key}-date-range"]
262
+ when 'all'
263
+ when 'past'
264
+ options[:end_date] = today
265
+ when 'future'
266
+ options[:start_date] = today
267
+ when 'custom'
268
+ options[:start_date] = @page_objects["#{key}-date-range-custom-start"]
269
+ options[:end_date] = @page_objects["#{key}-date-range-custom-end"]
270
+ end
271
+
272
+ str = render_cms_page_to_string(@pg)
273
+
274
+ @pages = page_list_items(@pg, key, options).first(20)
275
+ @page_contents = {}
276
+
277
+ unless @pages.empty?
278
+ @most_recent_pub_date = @pages.first
279
+ @pages.each { |pg| most_recent_pub_date = pg if pg.published_date > @most_recent_pub_date.published_date }
280
+
281
+ if min_time && @most_recent_pub_date.published_date && @most_recent_pub_date.published_date <= min_time
282
+ # use cached version
283
+ render :text => '', :status => '304 Not Modified' and return
284
+ end
285
+
286
+ @pages.each_with_index do |page, index|
287
+ @page_contents[page.id] = render_to_string :inline => substitute_placeholders(@page_objects["#{key}-template"] || options[:template] || '', page, :index => index+1, :count => @pages.size)
288
+ end
289
+ end
290
+
291
+ # send feed
292
+ response.headers["Content-Type"] = "application/rss+xml"
293
+ response.headers["Last-Modified"] = @pages.first.published_date.httpdate rescue Time.now
294
+
295
+ render :layout => false
296
+ end
297
+
298
+ def preview_template
299
+ @pg = CmsPage.find(1)
300
+ @pg.template = CmsTemplate.new
301
+ @pg.template.assign_attributes(params[:temp] || params[:snip] || {})
302
+ @page_objects = HashObject.new
303
+ render :inline => substitute_placeholders(@pg.template.content, @pg), :layout => 'application'
304
+ end
305
+
306
+ def page_list_calendar
307
+ @pg = CmsPage.find(params[:id])
308
+ load_page_objects or return true
309
+
310
+ @month = (params[:month] || Time.now.month).to_i
311
+ @year = (params[:year] || Time.now.year).to_i
312
+ @key = params[:key]
313
+ first_of_month = Time.mktime(@year, @month, 1)
314
+ last_of_month = first_of_month.end_of_month
315
+
316
+ @css_prefix = params[:css_prefix] || 'calendar_'
317
+
318
+ events = page_list_items(@pg, @key, :start_date => first_of_month, :end_date => last_of_month)
319
+
320
+ @event_days = {}
321
+ events.each do |e|
322
+ if e.article_date
323
+ event_start = e.article_date.mday
324
+ if e.article_end_date
325
+ event_end = e.article_end_date > last_of_month ? last_of_month.mday : e.article_end_date.mday
326
+ else
327
+ event_end = event_start
328
+ end
329
+
330
+ for index in event_start..event_end
331
+ @event_days[index] ||= ''
332
+ @event_days[index] << erb_render(substitute_placeholders(@page_objects["#{@key}-template"], e))
333
+ end
334
+
335
+ end
336
+ end
337
+ @event_days.each do |index, val|
338
+ @event_days[index] = (@page_objects["#{@key}-header"] || '') + val + (@page_objects["#{@key}-footer"] || '')
339
+ end
340
+
341
+ render :update do |page|
342
+ page.replace_html "page_list_calendar_#{@key}_month_year", :partial => 'page_list_calendar_month_year'
343
+ page.replace_html "page_list_calendar_#{@key}_days", :partial => 'page_list_calendar_days'
344
+ end
345
+ end
346
+
347
+
348
+ protected
349
+
350
+ def render_cms_page_to_string(page)
351
+ # sanitize possibly dangerous content before rendering
352
+ template_content = substitute_placeholders(page.template.content, page)
353
+ template_content.gsub!(/<(%.*?(exec|system)\s?\(.*?\s*%)>/, '&lt;\1&gt;')
354
+ template_content.gsub!(/<(%.*?\%x\s?\[.*?\s*%)>/, '&lt;\1&gt;')
355
+ template_content.gsub!(/<(%.*?\`.*?\s*%)>/, '&lt;\1&gt;')
356
+
357
+ logger.silence do
358
+ template_content = render_to_string(:inline => template_content,
359
+ :locals => { :page => page, :safe_level => 0 })
360
+ end
361
+
362
+ template_content = substitute_placeholders(template_content, page)
363
+ template_content.gsub!(/<(%.*?(exec|system)\s?\(.*?\s*%)>/, '&lt;\1&gt;')
364
+ template_content.gsub!(/<(%.*?\%x\s?\[.*?\s*%)>/, '&lt;\1&gt;')
365
+ template_content.gsub!(/<(%.*?\`.*?\s*%)>/, '&lt;\1&gt;')
366
+
367
+ logger.silence do
368
+ template_content = render_to_string(:inline => template_content,
369
+ :layout => 'application',
370
+ :locals => { :page => page })
371
+ end
372
+
373
+ template_content
374
+ end
375
+
60
376
  end
61
377
  end