lucy_cms 0.0.1

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 (245) hide show
  1. data/Gemfile +19 -0
  2. data/Gemfile.lock +88 -0
  3. data/LICENSE +24 -0
  4. data/README.md +161 -0
  5. data/Rakefile +26 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/application_controller.rb +5 -0
  8. data/app/controllers/cms_admin/base_controller.rb +43 -0
  9. data/app/controllers/cms_admin/layouts_controller.rb +66 -0
  10. data/app/controllers/cms_admin/pages_controller.rb +111 -0
  11. data/app/controllers/cms_admin/sessions_controller.rb +25 -0
  12. data/app/controllers/cms_admin/sites_controller.rb +69 -0
  13. data/app/controllers/cms_admin/snippets_controller.rb +62 -0
  14. data/app/controllers/cms_admin/upload_dirs_controller.rb +79 -0
  15. data/app/controllers/cms_admin/users_controller.rb +129 -0
  16. data/app/controllers/cms_content_controller.rb +51 -0
  17. data/app/models/cms_block.rb +28 -0
  18. data/app/models/cms_layout.rb +118 -0
  19. data/app/models/cms_page.rb +163 -0
  20. data/app/models/cms_site.rb +38 -0
  21. data/app/models/cms_snippet.rb +70 -0
  22. data/app/models/cms_upload.rb +19 -0
  23. data/app/models/cms_upload_dir.rb +11 -0
  24. data/app/models/cms_user.rb +93 -0
  25. data/app/views/cms_admin/layouts/_form.html.erb +10 -0
  26. data/app/views/cms_admin/layouts/_index_branch.html.erb +24 -0
  27. data/app/views/cms_admin/layouts/edit.html.erb +6 -0
  28. data/app/views/cms_admin/layouts/index.html.erb +6 -0
  29. data/app/views/cms_admin/layouts/new.html.erb +6 -0
  30. data/app/views/cms_admin/pages/_form.html.erb +37 -0
  31. data/app/views/cms_admin/pages/_form_blocks.html.erb +7 -0
  32. data/app/views/cms_admin/pages/_index_branch.html.erb +40 -0
  33. data/app/views/cms_admin/pages/edit.html.erb +5 -0
  34. data/app/views/cms_admin/pages/form_blocks.js.erb +2 -0
  35. data/app/views/cms_admin/pages/index.html.erb +6 -0
  36. data/app/views/cms_admin/pages/new.html.erb +5 -0
  37. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  38. data/app/views/cms_admin/sessions/new.html.erb +12 -0
  39. data/app/views/cms_admin/sites/_form.html.erb +16 -0
  40. data/app/views/cms_admin/sites/edit.html.erb +6 -0
  41. data/app/views/cms_admin/sites/new.html.erb +6 -0
  42. data/app/views/cms_admin/sites/setup.html.erb +16 -0
  43. data/app/views/cms_admin/snippets/_form.html.erb +4 -0
  44. data/app/views/cms_admin/snippets/edit.html.erb +6 -0
  45. data/app/views/cms_admin/snippets/index.html.erb +23 -0
  46. data/app/views/cms_admin/snippets/new.html.erb +6 -0
  47. data/app/views/cms_admin/upload_dirs/_file.html.erb +15 -0
  48. data/app/views/cms_admin/upload_dirs/_form.html.erb +2 -0
  49. data/app/views/cms_admin/upload_dirs/conflict.html.erb +12 -0
  50. data/app/views/cms_admin/upload_dirs/index.html.erb +23 -0
  51. data/app/views/cms_admin/upload_dirs/new.html.erb +6 -0
  52. data/app/views/cms_admin/upload_dirs/show.html.erb +26 -0
  53. data/app/views/cms_admin/upload_dirs/uploads_destroy.js.erb +3 -0
  54. data/app/views/cms_admin/users/_form.html.erb +9 -0
  55. data/app/views/cms_admin/users/_index_branch.html.erb +16 -0
  56. data/app/views/cms_admin/users/change_password.html.erb +14 -0
  57. data/app/views/cms_admin/users/edit.html.erb +17 -0
  58. data/app/views/cms_admin/users/index.html.erb +6 -0
  59. data/app/views/cms_admin/users/new.html.erb +14 -0
  60. data/app/views/layouts/cms_admin.html.erb +52 -0
  61. data/config/application.rb +48 -0
  62. data/config/boot.rb +13 -0
  63. data/config/database.yml +22 -0
  64. data/config/environment.rb +5 -0
  65. data/config/environments/development.rb +22 -0
  66. data/config/environments/production.rb +49 -0
  67. data/config/environments/test.rb +35 -0
  68. data/config/initializers/LucyCMS.rb +37 -0
  69. data/config/initializers/mime_types.rb +5 -0
  70. data/config/locales/en.yml +5 -0
  71. data/config/routes.rb +45 -0
  72. data/config.ru +4 -0
  73. data/db/cms_seeds/example.local/layouts/default.yml +8 -0
  74. data/db/cms_seeds/example.local/layouts/nested.yml +6 -0
  75. data/db/cms_seeds/example.local/pages/child/subchild.yml +14 -0
  76. data/db/cms_seeds/example.local/pages/child.yml +10 -0
  77. data/db/cms_seeds/example.local/pages/index.yml +11 -0
  78. data/db/cms_seeds/example.local/snippets/example.yml +4 -0
  79. data/db/migrate/01_create_cms.rb +114 -0
  80. data/db/seeds.rb +7 -0
  81. data/lib/LucyCMS/acts_as_tree.rb +102 -0
  82. data/lib/LucyCMS/cms_tag/field_datetime.rb +26 -0
  83. data/lib/LucyCMS/cms_tag/field_integer.rb +26 -0
  84. data/lib/LucyCMS/cms_tag/field_string.rb +26 -0
  85. data/lib/LucyCMS/cms_tag/field_text.rb +26 -0
  86. data/lib/LucyCMS/cms_tag/helper.rb +20 -0
  87. data/lib/LucyCMS/cms_tag/page_datetime.rb +22 -0
  88. data/lib/LucyCMS/cms_tag/page_integer.rb +22 -0
  89. data/lib/LucyCMS/cms_tag/page_rich_text.rb +22 -0
  90. data/lib/LucyCMS/cms_tag/page_string.rb +22 -0
  91. data/lib/LucyCMS/cms_tag/page_text.rb +22 -0
  92. data/lib/LucyCMS/cms_tag/partial.rb +21 -0
  93. data/lib/LucyCMS/cms_tag/snippet.rb +22 -0
  94. data/lib/LucyCMS/cms_tag.rb +119 -0
  95. data/lib/LucyCMS/configuration.rb +36 -0
  96. data/lib/LucyCMS/controller_methods.rb +42 -0
  97. data/lib/LucyCMS/engine.rb +12 -0
  98. data/lib/LucyCMS/form_builder.rb +129 -0
  99. data/lib/LucyCMS/rails_extensions.rb +22 -0
  100. data/lib/LucyCMS/site_form_builder.rb +129 -0
  101. data/lib/LucyCMS/view_hooks.rb +30 -0
  102. data/lib/LucyCMS/view_methods.rb +68 -0
  103. data/lib/LucyCMS.rb +40 -0
  104. data/lib/generators/README +17 -0
  105. data/lib/generators/cms_generator.rb +44 -0
  106. data/lib/tasks/LucyCMS.rake +283 -0
  107. data/lucy_cms.gemspec +100 -0
  108. data/public/404.html +26 -0
  109. data/public/422.html +26 -0
  110. data/public/500.html +26 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/images/LucyCMS/arrow_bottom.gif +0 -0
  113. data/public/images/LucyCMS/arrow_right.gif +0 -0
  114. data/public/images/LucyCMS/icon_folder.png +0 -0
  115. data/public/images/LucyCMS/icon_layout.gif +0 -0
  116. data/public/images/LucyCMS/icon_move.gif +0 -0
  117. data/public/images/LucyCMS/icon_regular.gif +0 -0
  118. data/public/images/LucyCMS/icon_snippet.gif +0 -0
  119. data/public/images/LucyCMS/icon_upload.png +0 -0
  120. data/public/images/LucyCMS/icon_user.jpg +0 -0
  121. data/public/javascripts/LucyCMS/cms.js +204 -0
  122. data/public/javascripts/LucyCMS/codemirror/codemirror.css +102 -0
  123. data/public/javascripts/LucyCMS/codemirror/codemirror.js +23 -0
  124. data/public/javascripts/LucyCMS/codemirror/codemirror_base.js +88 -0
  125. data/public/javascripts/LucyCMS/codemirror/parse_css.js +4 -0
  126. data/public/javascripts/LucyCMS/codemirror/parse_html_mixed.js +3 -0
  127. data/public/javascripts/LucyCMS/codemirror/parse_js.js +12 -0
  128. data/public/javascripts/LucyCMS/codemirror/parse_xml.js +7 -0
  129. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  130. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  131. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  132. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  133. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  134. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  135. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  136. data/public/javascripts/LucyCMS/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  137. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  138. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_2e83ff_256x240.png +0 -0
  139. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_454545_256x240.png +0 -0
  140. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_888888_256x240.png +0 -0
  141. data/public/javascripts/LucyCMS/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
  142. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.css +362 -0
  143. data/public/javascripts/LucyCMS/jquery-ui/jquery-ui.js +190 -0
  144. data/public/javascripts/LucyCMS/jquery.js +154 -0
  145. data/public/javascripts/LucyCMS/plupload/plupload.full.min.js +1 -0
  146. data/public/javascripts/LucyCMS/plupload/plupload.html5.min.js +1 -0
  147. data/public/javascripts/LucyCMS/plupload/plupload.min.js +1 -0
  148. data/public/javascripts/LucyCMS/rails.js +132 -0
  149. data/public/javascripts/LucyCMS/tiny_mce/jquery.tinymce.js +1 -0
  150. data/public/javascripts/LucyCMS/tiny_mce/langs/en.js +170 -0
  151. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/about.htm +54 -0
  152. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/anchor.htm +26 -0
  153. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/charmap.htm +52 -0
  154. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/color_picker.htm +73 -0
  155. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/editor_template.js +1 -0
  156. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/image.htm +80 -0
  157. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  158. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/img/icons.gif +0 -0
  159. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/about.js +72 -0
  160. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/anchor.js +37 -0
  161. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/charmap.js +335 -0
  162. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/color_picker.js +253 -0
  163. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/image.js +245 -0
  164. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/link.js +156 -0
  165. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/js/source_editor.js +56 -0
  166. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en.js +62 -0
  167. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/langs/en_dlg.js +51 -0
  168. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/link.htm +58 -0
  169. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/content.css +36 -0
  170. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  171. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  172. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  173. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  174. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  175. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  176. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  177. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/skins/default/ui.css +213 -0
  178. data/public/javascripts/LucyCMS/tiny_mce/themes/advanced/source_editor.htm +25 -0
  179. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce.js +1 -0
  180. data/public/javascripts/LucyCMS/tiny_mce/tiny_mce_popup.js +5 -0
  181. data/public/robots.txt +5 -0
  182. data/public/stylesheets/LucyCMS/content.css +196 -0
  183. data/public/stylesheets/LucyCMS/form.css +125 -0
  184. data/public/stylesheets/LucyCMS/reset.css +1 -0
  185. data/public/stylesheets/LucyCMS/site_form.css +82 -0
  186. data/public/stylesheets/LucyCMS/structure.css +125 -0
  187. data/public/stylesheets/LucyCMS/typography.css +25 -0
  188. data/script/rails +6 -0
  189. data/test/cms_seeds/test.host/layouts/broken.yml +1 -0
  190. data/test/cms_seeds/test.host/layouts/default.yml +3 -0
  191. data/test/cms_seeds/test.host/layouts/nested.yml +4 -0
  192. data/test/cms_seeds/test.host/pages/broken.yml +1 -0
  193. data/test/cms_seeds/test.host/pages/child/subchild.yml +10 -0
  194. data/test/cms_seeds/test.host/pages/child.yml +10 -0
  195. data/test/cms_seeds/test.host/pages/index.yml +10 -0
  196. data/test/cms_seeds/test.host/snippets/broken.yml +1 -0
  197. data/test/cms_seeds/test.host/snippets/default.yml +3 -0
  198. data/test/fixtures/cms_blocks.yml +12 -0
  199. data/test/fixtures/cms_layouts.yml +36 -0
  200. data/test/fixtures/cms_pages.yml +39 -0
  201. data/test/fixtures/cms_sites.yml +3 -0
  202. data/test/fixtures/cms_snippets.yml +5 -0
  203. data/test/fixtures/cms_upload_dirs.yml +9 -0
  204. data/test/fixtures/cms_uploads.yml +4 -0
  205. data/test/fixtures/cms_users.yml +11 -0
  206. data/test/fixtures/files/invalid_file.gif +9 -0
  207. data/test/fixtures/files/valid_image.jpg +0 -0
  208. data/test/fixtures/views/_nav_hook.html.erb +1 -0
  209. data/test/fixtures/views/_nav_hook_2.html.erb +1 -0
  210. data/test/functional/cms_admin/layouts_controller_test.rb +103 -0
  211. data/test/functional/cms_admin/pages_controller_test.rb +334 -0
  212. data/test/functional/cms_admin/sites_controller_test.rb +99 -0
  213. data/test/functional/cms_admin/snippets_controller_test.rb +102 -0
  214. data/test/functional/cms_admin/uploads_controller_test.rb +26 -0
  215. data/test/functional/cms_content_controller_test.rb +134 -0
  216. data/test/integration/rake_tasks_test.rb +65 -0
  217. data/test/integration/render_cms_seed_test.rb +34 -0
  218. data/test/integration/render_cms_test.rb +81 -0
  219. data/test/integration/sites_test.rb +63 -0
  220. data/test/integration/view_hooks_test.rb +33 -0
  221. data/test/test_helper.rb +86 -0
  222. data/test/unit/cms_block_test.rb +43 -0
  223. data/test/unit/cms_configuration_test.rb +17 -0
  224. data/test/unit/cms_layout_test.rb +146 -0
  225. data/test/unit/cms_page_test.rb +257 -0
  226. data/test/unit/cms_site_test.rb +41 -0
  227. data/test/unit/cms_snippet_test.rb +77 -0
  228. data/test/unit/cms_tag_test.rb +206 -0
  229. data/test/unit/cms_tags/field_datetime_test.rb +34 -0
  230. data/test/unit/cms_tags/field_integer_test.rb +33 -0
  231. data/test/unit/cms_tags/field_string_test.rb +34 -0
  232. data/test/unit/cms_tags/field_text_test.rb +32 -0
  233. data/test/unit/cms_tags/helper_test.rb +38 -0
  234. data/test/unit/cms_tags/page_datetime_test.rb +34 -0
  235. data/test/unit/cms_tags/page_integer_test.rb +33 -0
  236. data/test/unit/cms_tags/page_rich_text.rb +33 -0
  237. data/test/unit/cms_tags/page_string_test.rb +33 -0
  238. data/test/unit/cms_tags/page_text_test.rb +34 -0
  239. data/test/unit/cms_tags/partial_test.rb +44 -0
  240. data/test/unit/cms_tags/snippet_test.rb +33 -0
  241. data/test/unit/cms_upload_dir_test.rb +8 -0
  242. data/test/unit/cms_upload_test.rb +26 -0
  243. data/test/unit/cms_user_test.rb +8 -0
  244. data/test/unit/view_methods_test.rb +21 -0
  245. metadata +488 -0
@@ -0,0 +1,70 @@
1
+ class CmsSnippet < ActiveRecord::Base
2
+
3
+ # -- Relationships --------------------------------------------------------
4
+ belongs_to :cms_site
5
+ belongs_to :cms_user
6
+
7
+ # -- Callbacks ------------------------------------------------------------
8
+ after_save :clear_cached_page_content
9
+ after_destroy :clear_cached_page_content
10
+
11
+ # -- Validations ----------------------------------------------------------
12
+ validates :cms_site_id,
13
+ :presence => true
14
+ validates :label,
15
+ :presence => true
16
+ validates :slug,
17
+ :presence => true,
18
+ :uniqueness => { :scope => :cms_site_id },
19
+ :format => { :with => /^\w[a-z0-9_-]*$/i }
20
+
21
+ # -- Class Methods --------------------------------------------------------
22
+ def self.content_for(slug)
23
+ (s = find_by_slug(slug)) ? s.content : ''
24
+ end
25
+
26
+ def self.initialize_or_find(cms_page, slug)
27
+ load_for_slug(cms_page.cms_site, slug) || new(:slug => slug)
28
+ end
29
+
30
+ # Attempting to initialize snippet object from yaml file that is found in config.seed_data_path
31
+ def self.load_from_file(site, name)
32
+ return nil if LucyCMS.config.seed_data_path.blank?
33
+ file_path = "#{LucyCMS.config.seed_data_path}/#{site.hostname}/snippets/#{name}.yml"
34
+ return nil unless File.exists?(file_path)
35
+ attributes = YAML.load_file(file_path).symbolize_keys!
36
+ new(attributes)
37
+ rescue
38
+ raise "Failed to load from #{file_path}"
39
+ end
40
+
41
+ # Wrapper around load_from_file and find_by_slug
42
+ # returns layout object if loaded / found
43
+ def self.load_for_slug!(site, slug)
44
+ if LucyCMS.configuration.seed_data_path
45
+ load_from_file(site, slug)
46
+ else
47
+ # FIX: This a bit odd... Snippet is used as a tag, so sometimes there's no site scope
48
+ # being passed. So we're enforcing this only if it's found. Need to review.
49
+ conditions = site ? {:conditions => {:cms_site_id => site.id}} : {}
50
+ find_by_slug(slug, conditions)
51
+ end || raise(ActiveRecord::RecordNotFound, "CmsSnippet with slug: #{slug} cannot be found")
52
+ end
53
+
54
+ # Non-blowing-up version of the method above
55
+ def self.load_for_slug(site, slug)
56
+ load_for_slug!(site, slug)
57
+ rescue ActiveRecord::RecordNotFound
58
+ nil
59
+ end
60
+
61
+ protected
62
+
63
+ # Note: This might be slow. We have no idea where the snippet is used, so
64
+ # gotta reload every single page. Kinda sucks, but might be ok unless there
65
+ # are hundreds of pages.
66
+ def clear_cached_page_content
67
+ CmsPage.all.each{ |page| page.save! }
68
+ end
69
+
70
+ end
@@ -0,0 +1,19 @@
1
+ class CmsUpload < ActiveRecord::Base
2
+
3
+ Paperclip::Attachment.interpolations[:cms_upload_dir_label] = proc do |attachment, style|
4
+ attachment.instance.cms_upload_dir_label
5
+ end
6
+ # -- AR Extensions --------------------------------------------------------
7
+ has_attached_file :file,
8
+ :url => '/common/:cms_upload_dir_label/:basename.:extension',
9
+ :path => Rails.public_path + "/common/:cms_upload_dir_label/:basename.:extension"
10
+
11
+ # -- Relationships --------------------------------------------------------
12
+ belongs_to :cms_upload_dir
13
+ belongs_to :cms_user
14
+
15
+ # -- Validations ----------------------------------------------------------
16
+ validates :cms_upload_dir_id, :presence => true
17
+ validates_attachment_presence :file
18
+
19
+ end
@@ -0,0 +1,11 @@
1
+ class CmsUploadDir < ActiveRecord::Base
2
+ belongs_to :cms_site
3
+ belongs_to :cms_user
4
+ has_many :cms_uploads, :dependent => :destroy
5
+
6
+ validates :label,
7
+ :presence => true,
8
+ :uniqueness => true,
9
+ :format => { :with => /^[^\<\>\/\*\\\? ]*$/ }
10
+
11
+ end
@@ -0,0 +1,93 @@
1
+ class CmsUser < ActiveRecord::Base
2
+
3
+ validates :login,
4
+ :presence => true,
5
+ :uniqueness => true
6
+
7
+ validates :first_name,
8
+ :presence => true
9
+
10
+ validates :last_name,
11
+ :presence => true
12
+
13
+ @cms_site = CmsSite.first
14
+
15
+ unless @cms_site.nil?
16
+ if @cms_site.authentication != 'LDAP'
17
+ attr_accessor :password_confirmation
18
+ validates_confirmation_of :password
19
+
20
+ validates :password,
21
+ :presence => true,
22
+ :on => :create
23
+
24
+ # 'password' is a virtual attribute
25
+ def password
26
+ @password
27
+ end
28
+
29
+ def password=(pwd)
30
+ @password = pwd
31
+ return if pwd.blank?
32
+ create_new_salt
33
+ self.hashed_password = CmsUser.encrypted_password(self.password, self.salt)
34
+ end
35
+ end
36
+ end
37
+
38
+ def full_name
39
+ [first_name, last_name].join(' ')
40
+ end
41
+
42
+ def self.authenticate(login, password)
43
+
44
+ if @cms_site.authentication == 'LDAP'
45
+ username = login
46
+
47
+ if (password.empty?) then
48
+ return nil
49
+ end
50
+
51
+ ldap = Net::LDAP.new(:host => @cms_site.ldap_hostname, :base => @cms_site.ldap_base_DN)
52
+ filter = Net::LDAP::Filter.eq(@cms_site.ldap_uid, login)
53
+ ldap.search(:filter => filter) {|entry| login = entry.dn}
54
+ ldap.auth(login, password)
55
+
56
+ if ldap.bind
57
+ user = CmsUser.find_by_login_and_disabled(username, false) # need to check if user is in the database and not disabled
58
+ if (user)
59
+ return user
60
+ else
61
+ #user is in LDAP but not in local database
62
+ return nil
63
+ end
64
+ else
65
+ #authentication failed
66
+ return nil
67
+ end
68
+ else
69
+ user= self.find_by_login(login)
70
+ if user
71
+ expected_password = encrypted_password(password, user.salt)
72
+ if user.hashed_password != expected_password
73
+ user = nil
74
+ end
75
+ end
76
+ user
77
+ end
78
+
79
+ rescue Net::LDAP::LdapError
80
+ end
81
+
82
+ private
83
+
84
+ def create_new_salt
85
+ self.salt = self.object_id.to_s + rand.to_s
86
+ end
87
+
88
+ def self.encrypted_password(password,salt)
89
+ string_to_hash = password + "LucyCMS" + salt
90
+ Digest::SHA1.hexdigest(string_to_hash)
91
+ end
92
+
93
+ end
@@ -0,0 +1,10 @@
1
+ <%= form.hidden_field :cms_user_id, :value => @cms_current_user.id %>
2
+ <%= form.text_field :label, :label => 'Layout Name', :id => (@cms_layout.new_record?? 'slugify' : nil)%>
3
+ <%= form.text_field :slug, :id => 'slug' %>
4
+ <% if (options = CmsLayout.options_for_select(@cms_site, @cms_layout)).present? %>
5
+ <%= form.select :parent_id, [['---- Select Parent Layout ----', nil]] + options %>
6
+ <% end %>
7
+
8
+ <%= form.text_area :content, :class => 'code' %>
9
+ <%= form.text_area :css, :class => 'code_css' %>
10
+ <%= form.text_area :js, :class => 'code_js' %>
@@ -0,0 +1,24 @@
1
+ <% cms_layout ||= index_branch %>
2
+
3
+ <li id='cms_layout_<%= cms_layout.id %>'>
4
+ <div class='item'>
5
+ <div class='icon'></div>
6
+ <div class='action_links'>
7
+ <%= link_to 'Add Child Layout', new_cms_admin_layout_path(:parent_id => cms_layout.id) %>
8
+ <%= link_to 'Edit', edit_cms_admin_layout_path(cms_layout) %>
9
+ <%= link_to 'Delete', cms_admin_layout_path(cms_layout), :method => :delete, :confirm => 'Are you sure?' %>
10
+ </div>
11
+ <div class='label'>
12
+ <%= link_to cms_layout.label, edit_cms_admin_layout_path(cms_layout) %>
13
+ <div class='sublabel'>
14
+ <%= link_to cms_layout.slug, edit_cms_admin_layout_path(cms_layout) %><br>
15
+ <div style='float:right'>Last updated by: <%=cms_layout.cms_user.full_name%> on <%=cms_layout.updated_at.strftime("%m/%d/%Y at %I:%M %p %Z") %></div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ <% if cms_layout.children.present? %>
20
+ <ul>
21
+ <%= render :partial => 'index_branch', :collection => cms_layout.children %>
22
+ </ul>
23
+ <% end %>
24
+ </li>
@@ -0,0 +1,6 @@
1
+ <h1> Editing Layout </h1>
2
+
3
+ <%= cms_form_for @cms_layout, :url => {:action => :update} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Update Layout' %>
6
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <%= link_to span_tag('Create New Layout'), new_cms_admin_layout_path, :class => 'big button' %>
2
+ <h1>Layouts</h1>
3
+
4
+ <ul class='list'>
5
+ <%= render :partial => 'index_branch', :collection => @cms_layouts %>
6
+ </ul>
@@ -0,0 +1,6 @@
1
+ <h1> New Layout </h1>
2
+
3
+ <%= cms_form_for @cms_layout, :url => {:action => :create} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Create Layout' %>
6
+ <% end %>
@@ -0,0 +1,37 @@
1
+ <% content_for :right_column do %>
2
+ <div id='page_save' class='box'>
3
+ <label>
4
+ <input type='checkbox'/>
5
+ Published
6
+ </label>
7
+ <a class='big button' href='#'></a>
8
+ </div>
9
+ <% end %>
10
+
11
+ <%= form.hidden_field :cms_user_id, :value => @cms_current_user.id %>
12
+ <%= form.text_field :label, :id => (@cms_page.new_record?? 'slugify' : nil) %>
13
+
14
+ <div class='page_form_extras'>
15
+ <% unless @cms_site.cms_pages.count == 0 || @cms_site.cms_pages.root == @cms_page%>
16
+ <%= form.text_field :slug, :id => 'slug' %>
17
+ <% end %>
18
+ <% if (options = CmsLayout.options_for_select(@cms_site)).present? %>
19
+ <%= form.select :cms_layout_id, options, {}, 'data-page-id' => @cms_page.id.to_i, :label => 'Layout' %>
20
+ <% end %>
21
+ <% if (options = CmsPage.options_for_select(@cms_site, @cms_page)).present? %>
22
+ <%= form.select :parent_id, options %>
23
+ <% end %>
24
+ <% if (options = CmsPage.options_for_select(@cms_site, @cms_page, nil, 0, false)).present? %>
25
+ <%= form.select :target_page_id, options, :include_blank => true, :label => 'Redirect To Page' %>
26
+ <% end %>
27
+ <%= cms_hook :page_form, :object => form %>
28
+ </div>
29
+
30
+ <%= render :partial => 'form_blocks' %>
31
+
32
+ <%= form.simple_field nil, nil, :class => 'submit_element' do %>
33
+ <%= form.check_box :is_published, :disable_builder => true %>
34
+ <%= form.label_for :is_published, :label => 'Published' %>
35
+ <%= form.submit @cms_page.new_record?? 'Create Page' : 'Update Page', :disable_builder => true %>
36
+ <%= form.submit 'Preview', :name => 'preview', :id => 'cms_page_preview', :disable_builder => true %>
37
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <div id='form_blocks'>
2
+ <%= fields_for :cms_blocks, :builder => LucyCMS::FormBuilder do |cms_blocks| %>
3
+ <% @cms_page.cms_tags(true).each do |tag| %>
4
+ <%= cms_blocks.send(tag.class.name.underscore.downcase.idify, tag)%>
5
+ <% end %>
6
+ <% end %>
7
+ </div>
@@ -0,0 +1,40 @@
1
+ <%
2
+ cms_page ||= index_branch
3
+ has_children = cms_page.children.present?
4
+ has_siblings = cms_page.siblings.present?
5
+ branch_open = (session[:cms_page_tree] || []).member?(cms_page.id.to_s) || cms_page.root?
6
+ %>
7
+
8
+ <li id='<%= dom_id(cms_page) %>'>
9
+ <div class='item'>
10
+ <div class='toggle <%= 'open' if branch_open %>'>
11
+ <%=
12
+ if has_children && !cms_page.root?
13
+ link_to span_tag('toggle'), toggle_branch_cms_admin_page_path(cms_page), :remote => true
14
+ end
15
+ %>
16
+ </div>
17
+ <div class='icon'>
18
+ <% if has_siblings %>
19
+ <div class='dragger'><span>drag</span></div>
20
+ <% end %>
21
+ </div>
22
+ <div class='action_links'>
23
+ <%= link_to 'Add Child Page', new_cms_admin_page_path(:parent_id => cms_page.id) %>
24
+ <%= link_to 'Edit', edit_cms_admin_page_path(cms_page) %>
25
+ <%= link_to 'Delete', cms_admin_page_path(cms_page), :method => :delete, :confirm => 'Are you sure?' %>
26
+ </div>
27
+ <div class='label'>
28
+ <%= link_to cms_page.label, edit_cms_admin_page_path(cms_page) %>
29
+ <div class='sublabel'>
30
+ <%= link_to cms_page.url, cms_page.full_path, :target => '_blank' %><br>
31
+ <div style='float:right'>Last updated by: <%=cms_page.cms_user.full_name%> on <%=cms_page.updated_at.strftime("%m/%d/%Y at %I:%M %p %Z") %></div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <% if has_children && branch_open %>
36
+ <ul>
37
+ <%= render :partial => 'index_branch', :collection => cms_page.children %>
38
+ </ul>
39
+ <% end %>
40
+ </li>
@@ -0,0 +1,5 @@
1
+ <h1> Editing Page </h1>
2
+
3
+ <%= cms_form_for @cms_page, :url => {:action => :update} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <% end %>
@@ -0,0 +1,2 @@
1
+ $('#form_blocks').replaceWith('<%= escape_javascript(render(:partial => "form_blocks")) %>');
2
+ $.CMS.enable_codemirror();
@@ -0,0 +1,6 @@
1
+ <%= link_to span_tag('Create New Page'), new_cms_admin_page_path, :class => 'big button' %>
2
+ <h1>Pages</h1>
3
+
4
+ <ul class='list sortable'>
5
+ <%= render :partial => 'index_branch', :collection => @cms_pages %>
6
+ </ul>
@@ -0,0 +1,5 @@
1
+ <h1> New Page </h1>
2
+
3
+ <%= cms_form_for @cms_page, :url => {:action => :create} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <% end %>
@@ -0,0 +1,11 @@
1
+ var li = $('li#cms_page_<%=@cms_page.id%>');
2
+ li.find('.item .toggle').first().toggleClass('open');
3
+
4
+ <% if session[:cms_page_tree].member?(@cms_page.id.to_s) %>
5
+ if(!li.find('ul')[0]) {
6
+ li.append('<ul><%= escape_javascript(render :partial => "index_branch", :collection => @cms_page.children) %></ul>');
7
+ $.CMS.enable_sortable_list();
8
+ }
9
+ <% else %>
10
+ li.find('ul').remove();
11
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <h1>Please Log in</h1>
2
+ <%= form_tag cms_admin_session_path do %>
3
+ <div class='form_element text_field_element '>
4
+ <div class='label'><label for="cms_user_name">Username</label></div>
5
+ <div class='value'><input id="login" name="login" size="30" type="text" /></div>
6
+ </div>
7
+ <div class='form_element password_field_element '>
8
+ <div class='label'><label for="cms_user_name">Password</label></div>
9
+ <div class='value'><input id="password" name="password" size="30" type="password" /></div>
10
+ </div>
11
+ <div><%= submit_tag 'Login' %></div>
12
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <%= form.hidden_field :version, :value => LucyCMS.config.version %>
2
+ <%= form.text_field :label, :label => 'Title'%>
3
+ <%= form.text_field :hostname, :label => 'Hostname<br>(www.example.com)' %>
4
+ <div class='form_element radio_button_element '>
5
+ <div class='site_label'><label for="cms_site_authentication">Authentication</label></div>
6
+ <div class='site_value'>
7
+ <input id="cms_site_authentication_internal_database" name="cms_site[authentication]" type="radio" value="Internal" <%if @cms_site.authentication != 'ldap'%>checked<%end%> onclick="$('#ldap_fields').hide();" > Internal Database
8
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
9
+ <input id="auth_ldap" name="cms_site[authentication]" type="radio" value="LDAP" <%if @cms_site.authentication == 'LDAP'%>checked<%end%> onclick="$('#ldap_fields').show();"> LDAP
10
+ </div>
11
+ </div>
12
+ <div id = "ldap_fields" <%if @cms_site.authentication != 'LDAP'%> style = "display:none;"<%end%>>
13
+ <%= form.text_field :ldap_hostname, :label => 'LDAP Hostname<br>(ldap.example.com)' %>
14
+ <%= form.text_field :ldap_base_DN, :label => 'LDAP Base DN<br>(dc=example,dc=com)' %>
15
+ <%= form.text_field :ldap_uid, :label => 'LDAP User Id Attribute<br>(uid)' %>
16
+ </div>
@@ -0,0 +1,6 @@
1
+ <h1> Edit Site </h1>
2
+
3
+ <%= cms_site_form_for @cms_site, :url => {:action => :update} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Update Site' %>
6
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1> Setup Site </h1>
2
+
3
+ <%= cms_site_form_for @cms_site, :url => {:action => :create} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Setup Site' %>
6
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <h1>Setup</h1>
2
+ <table border = 0 cellspacing=0 cellpadding=0>
3
+ <tr><td><b>Title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><%= @cms_site.label %></td></tr>
4
+ <tr><td>&nbsp;</td></tr>
5
+ <tr><td><b>Hostname:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><%= @cms_site.hostname %></td></tr>
6
+ <tr><td>&nbsp;</td></tr>
7
+ <tr><td><b>Authentication:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><%= @cms_site.authentication %></td></tr>
8
+ <tr><td>&nbsp;</td></tr>
9
+ <% if @cms_site.authentication == 'LDAP' %>
10
+ <tr><td><b>LDAP Hostname:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><%= @cms_site.ldap_hostname %></td></tr>
11
+ <tr><td>&nbsp;</td></tr>
12
+ <tr><td><b>LDAP Base DN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><%= @cms_site.ldap_base_DN %></td></tr>
13
+ <tr><td>&nbsp;</td></tr>
14
+ <tr><td><b>LDAP User ID Attibute:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><%= @cms_site.ldap_uid %></td></tr>
15
+ <% end %>
16
+ </table>
@@ -0,0 +1,4 @@
1
+ <%= form.hidden_field :cms_user_id, :value => @cms_current_user.id %>
2
+ <%= form.text_field :label, :id => (@cms_snippet.new_record?? 'slugify' : nil) %>
3
+ <%= form.text_field :slug, :id => 'slug' %>
4
+ <%= form.text_area :content, :class => 'code' %>
@@ -0,0 +1,6 @@
1
+ <h1> Editing Snippet </h1>
2
+
3
+ <%= cms_form_for @cms_snippet, :url => {:action => :update} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Update Snippet' %>
6
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <%= link_to span_tag('Create New Snippet'), new_cms_admin_snippet_path, :class => 'big button' %>
2
+ <h1>Snippets</h1>
3
+
4
+ <ul class='list'>
5
+ <% @cms_snippets.each do |cms_snippet| %>
6
+ <li id='cms_snippet_<%= cms_snippet.id %>'>
7
+ <div class='item'>
8
+ <div class='icon'></div>
9
+ <div class='action_links'>
10
+ <%= link_to 'Edit', edit_cms_admin_snippet_path(cms_snippet) %>
11
+ <%= link_to 'Delete', cms_admin_snippet_path(cms_snippet), :method => :delete, :confirm => 'Are you sure?' %>
12
+ </div>
13
+ <div class='label'>
14
+ <%= link_to cms_snippet.label, edit_cms_admin_snippet_path(cms_snippet) %>
15
+ <div class='sublabel'>
16
+ <%= link_to cms_snippet.slug, edit_cms_admin_snippet_path(cms_snippet) %><br>
17
+ <div style='float:right'>Last updated by: <%=cms_snippet.cms_user.full_name%> on <%=cms_snippet.updated_at.strftime("%m/%d/%Y at %I:%M %p %Z") %></div>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ </li>
22
+ <% end %>
23
+ </ul>
@@ -0,0 +1,6 @@
1
+ <h1> New Snippet </h1>
2
+
3
+ <%= cms_form_for @cms_snippet, :url => {:action => :create} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Create Snippet' %>
6
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <li id='<%= dom_id(file) %>'>
2
+ <div class='item'>
3
+ <div class='icon'></div>
4
+ <div class='action_links'>
5
+ <%= link_to 'Delete', uploads_destroy_cms_admin_upload_dir_path(file), :method => :delete, :remote => true, :confirm => 'Are you sure?' %>
6
+ </div>
7
+ <div class='label'>
8
+ <%= link_to file.file_file_name, file.file.url, :target => '_blank', :class => 'filename' %>
9
+ <div class='sublabel'>
10
+ <br>
11
+ <div style='float:right'>Last updated by: <%=file.cms_user.full_name %> on <%=file.updated_at.strftime("%m/%d/%Y at %I:%M %p %Z") %></div>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ </div>
@@ -0,0 +1,2 @@
1
+ <%= form.hidden_field :cms_user_id, :value => @cms_current_user.id %>
2
+ <%= form.text_field :label, :label => 'Directory Name' %>
@@ -0,0 +1,12 @@
1
+ <h1>Houston we have a problem</h1>
2
+
3
+ <%= LucyCMS.config.cms_title %> uses a directory named <b><%= LucyCMS.config.cms_upload_directory %></b> to put all uploaded content in. This directory is located in <b><%=Rails.public_path%></b>.<br>
4
+ <br>
5
+ Unfortunatly there is already a file named <b><%= LucyCMS.config.cms_upload_directory %></b> in this directory.<br>
6
+ <br>
7
+ This problem can be fixed in two ways:<br>
8
+ <br>
9
+ 1. Delete or rename this file.<br>
10
+ 2. Edit the setting <i>config.cms_upload_directory</i> in the <b>LucyCMS.rb</b> file located in the <b>config/initializers/</b> directory to use a directory name that is not already in use.<br>
11
+ <br>
12
+ Sorry for the inconvenience
@@ -0,0 +1,23 @@
1
+ <%= link_to span_tag('Create New Directory'), new_cms_admin_upload_dir_path, :class => 'big button' %>
2
+ <h1>Upload Directories</h1>
3
+ <b>Base Directory: /<%=LucyCMS.config.cms_upload_directory%></b><br>
4
+ <br>
5
+ <ul class='list'>
6
+ <% @cms_upload_dirs.each do |cms_upload_dir| %>
7
+ <li id='cms_upload_dir_<%= cms_upload_dir.id %>'>
8
+ <div class='item'>
9
+ <div class='icon'></div>
10
+ <div class='action_links'>
11
+ <%= link_to 'Delete', cms_admin_upload_dir_path(cms_upload_dir), :method => :delete, :confirm => 'Are you sure?' %>
12
+ </div>
13
+ <div class='label'>
14
+ <%= link_to cms_upload_dir.label, cms_admin_upload_dir_path(cms_upload_dir) %>
15
+ <div class='sublabel'>
16
+ <br>
17
+ <div style='float:right'>Created by: <%=cms_upload_dir.cms_user.full_name%> on <%=cms_upload_dir.updated_at.strftime("%m/%d/%Y at %I:%M %p %Z") %></div>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ </li>
22
+ <% end %>
23
+ </ul>
@@ -0,0 +1,6 @@
1
+ <h1> New Directory </h1>
2
+
3
+ <%= cms_form_for @cms_upload_dir, :url => {:action => :create} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <%= form.submit 'Create Directory' %>
6
+ <% end %>
@@ -0,0 +1,26 @@
1
+ <div id='file_uploads' class='box'>
2
+ <div class='actions'>
3
+ <a id='uploader_button' href='#' class='big button'>Upload Files</a>
4
+ </div>
5
+ </div>
6
+ <h1>Directory: /<%=LucyCMS.config.cms_upload_directory%>/<%=@cms_upload_dir.label%></h1>
7
+
8
+ <ul class='list' id = 'uploaded_files'>
9
+ <% @cms_uploads.each do |cms_upload| %>
10
+ <li id='cms_upload_<%= cms_upload.id %>'>
11
+ <div class='item'>
12
+ <div class='icon'></div>
13
+ <div class='action_links'>
14
+ <%= link_to 'Delete', uploads_destroy_cms_admin_upload_dir_path(cms_upload), :method => :delete, :remote => true, :confirm => 'Are you sure?' %>
15
+ </div>
16
+ <div class='label'>
17
+ <%= link_to cms_upload.file_file_name, cms_upload.file.url, :target => '_blank', :class => 'filename' %>
18
+ <div class='sublabel'>
19
+ <br>
20
+ <div style='float:right'>Last updated by: <%=cms_upload.cms_user.full_name %> on <%=cms_upload.updated_at.strftime("%m/%d/%Y at %I:%M %p %Z") %></div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </li>
25
+ <% end %>
26
+ </ul>
@@ -0,0 +1,3 @@
1
+ $("#<%= dom_id(@cms_upload) %>").fadeOut('slow', function(){
2
+ $(this).remove()
3
+ })
@@ -0,0 +1,9 @@
1
+ <%= form.text_field :login%>
2
+ <%= form.text_field :first_name%>
3
+ <%= form.text_field :last_name%>
4
+ <% unless @cms_site.authentication == 'LDAP' %>
5
+ <%= form.password_field :password %>
6
+ <%= form.password_field :password_confirmation %>
7
+ <% end %>
8
+ <%= form.check_box :admin%>
9
+ <%= form.check_box :disabled%>
@@ -0,0 +1,16 @@
1
+ <% cms_user ||= index_branch %>
2
+
3
+ <li id='cms_user_<%= cms_user.id %>'>
4
+ <div class='item'>
5
+ <div class='icon'></div>
6
+ <div class='action_links'>
7
+ <%= link_to 'Edit', edit_cms_admin_user_path(cms_user) %>
8
+ </div>
9
+ <div class='label'>
10
+ <%= link_to cms_user.last_name + ', ' + cms_user.first_name, edit_cms_admin_user_path(cms_user) %>
11
+ <div class='sublabel'>
12
+ <%= cms_user.login %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </li>
@@ -0,0 +1,14 @@
1
+ <h1> Change Password</h1>
2
+ <%= cms_form_for @cms_user, :url => {:action => :update_password} do |form| %>
3
+ <div class='form_element' >
4
+ <div class='label'>
5
+ Login
6
+ </div>
7
+ <div class='value'>
8
+ <b><%= @cms_user.login %></b>
9
+ </div>
10
+ </div>
11
+ <%= form.password_field :password %>
12
+ <%= form.password_field :password_confirmation, :label => 'Repeat Password' %>
13
+ <%= form.submit 'Update Password' %>
14
+ <% end %>