imagine_cms 3.0.0.beta6 → 3.0.0.beta7

Sign up to get free protection for your applications and to get access to all the features.
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