mcms_blog 0.0.2

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 (216) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/images/icons/accept.png +0 -0
  5. data/app/assets/images/icons/add.png +0 -0
  6. data/app/assets/images/icons/ajax-loader.gif +0 -0
  7. data/app/assets/images/icons/application_edit.png +0 -0
  8. data/app/assets/images/icons/application_go.png +0 -0
  9. data/app/assets/images/icons/arrow_left.png +0 -0
  10. data/app/assets/images/icons/arrow_switch.png +0 -0
  11. data/app/assets/images/icons/arrow_up.png +0 -0
  12. data/app/assets/images/icons/bin.png +0 -0
  13. data/app/assets/images/icons/bin_closed.png +0 -0
  14. data/app/assets/images/icons/cancel.png +0 -0
  15. data/app/assets/images/icons/cog_add.png +0 -0
  16. data/app/assets/images/icons/cog_edit.png +0 -0
  17. data/app/assets/images/icons/cross.png +0 -0
  18. data/app/assets/images/icons/delete.png +0 -0
  19. data/app/assets/images/icons/doc.png +0 -0
  20. data/app/assets/images/icons/down.gif +0 -0
  21. data/app/assets/images/icons/edit.png +0 -0
  22. data/app/assets/images/icons/email.png +0 -0
  23. data/app/assets/images/icons/email_edit.png +0 -0
  24. data/app/assets/images/icons/email_go.png +0 -0
  25. data/app/assets/images/icons/email_open.png +0 -0
  26. data/app/assets/images/icons/eye.png +0 -0
  27. data/app/assets/images/icons/folder_page_white.png +0 -0
  28. data/app/assets/images/icons/image_add.png +0 -0
  29. data/app/assets/images/icons/image_edit.png +0 -0
  30. data/app/assets/images/icons/img.png +0 -0
  31. data/app/assets/images/icons/information.png +0 -0
  32. data/app/assets/images/icons/layout_add.png +0 -0
  33. data/app/assets/images/icons/layout_edit.png +0 -0
  34. data/app/assets/images/icons/music.png +0 -0
  35. data/app/assets/images/icons/page_add.png +0 -0
  36. data/app/assets/images/icons/page_edit.png +0 -0
  37. data/app/assets/images/icons/page_white_edit.png +0 -0
  38. data/app/assets/images/icons/page_white_gear.png +0 -0
  39. data/app/assets/images/icons/page_white_put.png +0 -0
  40. data/app/assets/images/icons/pdf.png +0 -0
  41. data/app/assets/images/icons/ppt.png +0 -0
  42. data/app/assets/images/icons/star.png +0 -0
  43. data/app/assets/images/icons/tick.png +0 -0
  44. data/app/assets/images/icons/up.gif +0 -0
  45. data/app/assets/images/icons/user_add.png +0 -0
  46. data/app/assets/images/icons/user_comment.png +0 -0
  47. data/app/assets/images/icons/user_edit.png +0 -0
  48. data/app/assets/images/icons/xls.png +0 -0
  49. data/app/assets/images/icons/zip.png +0 -0
  50. data/app/assets/images/icons/zoom.png +0 -0
  51. data/app/assets/images/page_bg.png +0 -0
  52. data/app/assets/images/rails.png +0 -0
  53. data/app/assets/javascripts/admin/blog/mcms-blog-submenu.js +50 -0
  54. data/app/assets/javascripts/contrib/ui.core.js +519 -0
  55. data/app/assets/javascripts/contrib/ui.tabs.js +688 -0
  56. data/app/assets/javascripts/posts.js +3 -0
  57. data/app/assets/stylesheets/blog_global.css +1587 -0
  58. data/app/assets/stylesheets/blog_home.css +1432 -0
  59. data/app/assets/stylesheets/home.css +1429 -0
  60. data/app/assets/stylesheets/images/back_ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  61. data/app/assets/stylesheets/images/spellayt.gif +0 -0
  62. data/app/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  63. data/app/assets/stylesheets/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  64. data/app/assets/stylesheets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  65. data/app/assets/stylesheets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  66. data/app/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  67. data/app/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  68. data/app/assets/stylesheets/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  69. data/app/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  70. data/app/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  71. data/app/assets/stylesheets/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  72. data/app/assets/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  73. data/app/assets/stylesheets/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  74. data/app/assets/stylesheets/images/ui-bg_green.png +1 -0
  75. data/app/assets/stylesheets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  76. data/app/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  77. data/app/assets/stylesheets/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  78. data/app/assets/stylesheets/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  79. data/app/assets/stylesheets/images/ui-icons_217bc0_256x240.png +0 -0
  80. data/app/assets/stylesheets/images/ui-icons_222222_256x240.png +0 -0
  81. data/app/assets/stylesheets/images/ui-icons_2e83ff_256x240.png +0 -0
  82. data/app/assets/stylesheets/images/ui-icons_454545_256x240.png +0 -0
  83. data/app/assets/stylesheets/images/ui-icons_469bdd_256x240.png +0 -0
  84. data/app/assets/stylesheets/images/ui-icons_6da8d5_256x240.png +0 -0
  85. data/app/assets/stylesheets/images/ui-icons_888888_256x240.png +0 -0
  86. data/app/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png +0 -0
  87. data/app/assets/stylesheets/images/ui-icons_d8e7f3_256x240.png +0 -0
  88. data/app/assets/stylesheets/images/ui-icons_f9bd01_256x240.png +0 -0
  89. data/app/assets/stylesheets/jquery-ui-1.8.6.custom.css +572 -0
  90. data/app/assets/stylesheets/submenu.css.scss +32 -0
  91. data/app/controllers/admin/blog/categories_controller.rb +47 -0
  92. data/app/controllers/admin/blog/comments_controller.rb +64 -0
  93. data/app/controllers/admin/blog/posts_controller.rb +80 -0
  94. data/app/controllers/admin/blog/settings_controller.rb +67 -0
  95. data/app/controllers/application_controller.rb +29 -0
  96. data/app/controllers/blog/categories_controller.rb +34 -0
  97. data/app/controllers/blog/comments_controller.rb +34 -0
  98. data/app/controllers/blog/posts_controller.rb +123 -0
  99. data/app/controllers/blog_controller.rb +31 -0
  100. data/app/helpers/application_helper.rb +5 -0
  101. data/app/helpers/blog_helper.rb +66 -0
  102. data/app/helpers/notification_hepler.rb +5 -0
  103. data/app/helpers/settings_helper.rb +38 -0
  104. data/app/mailers/blog/comment_mailer.rb +12 -0
  105. data/app/models/blog_category.rb +29 -0
  106. data/app/models/blog_comment.rb +109 -0
  107. data/app/models/blog_post.rb +121 -0
  108. data/app/models/categorization.rb +16 -0
  109. data/app/models/ckeditor/asset.rb +6 -0
  110. data/app/models/ckeditor/attachment_file.rb +12 -0
  111. data/app/models/ckeditor/picture.rb +13 -0
  112. data/app/models/setting.rb +59 -0
  113. data/app/views/admin/blog/_submenu.html.erb +89 -0
  114. data/app/views/admin/blog/categories/_category.html.erb +20 -0
  115. data/app/views/admin/blog/categories/_form.html.erb +21 -0
  116. data/app/views/admin/blog/categories/_sortable_list.html.erb +3 -0
  117. data/app/views/admin/blog/categories/edit.html.erb +1 -0
  118. data/app/views/admin/blog/categories/index.html.erb +23 -0
  119. data/app/views/admin/blog/categories/new.html.erb +2 -0
  120. data/app/views/admin/blog/comments/_comment.html.erb +27 -0
  121. data/app/views/admin/blog/comments/_sortable_list.html.erb +11 -0
  122. data/app/views/admin/blog/comments/index.html.erb +12 -0
  123. data/app/views/admin/blog/comments/show.html.erb +70 -0
  124. data/app/views/admin/blog/posts/_form.css.erb +22 -0
  125. data/app/views/admin/blog/posts/_form.html.erb +92 -0
  126. data/app/views/admin/blog/posts/_form.js.erb +34 -0
  127. data/app/views/admin/blog/posts/_form_part.html.erb +10 -0
  128. data/app/views/admin/blog/posts/_post.html.erb +26 -0
  129. data/app/views/admin/blog/posts/_sortable_list.html.erb +3 -0
  130. data/app/views/admin/blog/posts/_teaser_part.html.erb +11 -0
  131. data/app/views/admin/blog/posts/edit.html.erb +1 -0
  132. data/app/views/admin/blog/posts/index.html.erb +29 -0
  133. data/app/views/admin/blog/posts/new.html.erb +13 -0
  134. data/app/views/admin/blog/settings/notification_recipients.html.erb +23 -0
  135. data/app/views/blog/categories/show.html.erb +17 -0
  136. data/app/views/blog/posts/_comment.html.erb +17 -0
  137. data/app/views/blog/posts/_nav.html.erb +18 -0
  138. data/app/views/blog/posts/_post.html.erb +25 -0
  139. data/app/views/blog/posts/archive.html.erb +17 -0
  140. data/app/views/blog/posts/index.html.erb +15 -0
  141. data/app/views/blog/posts/show.html.erb +64 -0
  142. data/app/views/blog/posts/tagged.html.erb +20 -0
  143. data/app/views/blog/shared/_categories.html.erb +19 -0
  144. data/app/views/blog/shared/_post.html.erb +34 -0
  145. data/app/views/blog/shared/_posts.html.erb +17 -0
  146. data/app/views/blog/shared/_rss_feed.html.erb +2 -0
  147. data/app/views/blog/shared/_tags.html.erb +17 -0
  148. data/app/views/layouts/_javascript.html.erb +3 -0
  149. data/app/views/layouts/_scripts.html.erb +6 -0
  150. data/app/views/layouts/_stylesheets.html.erb +6 -0
  151. data/app/views/layouts/admin.html.erb +25 -0
  152. data/app/views/layouts/application.html.erb +38 -0
  153. data/app/views/layouts/home.html.erb +38 -0
  154. data/app/views/shared/_footer.html.erb +3 -0
  155. data/app/views/shared/_head.html.erb +4 -0
  156. data/app/views/shared/_header.html.erb +7 -0
  157. data/app/views/shared/_javascripts.html.erb +3 -0
  158. data/app/views/shared/_menu.html.erb +9 -0
  159. data/app/views/shared/_stylesheets.html.erb +6 -0
  160. data/app/views/shared/admin/_error_messages.html.erb +16 -0
  161. data/app/views/shared/admin/_form_actions.html.erb +34 -0
  162. data/config/locales/en.yml +192 -0
  163. data/config/routes.rb +65 -0
  164. data/db/migrate/20120606150655_create_mcms_assets.rb +26 -0
  165. data/db/migrate/20120608071959_create_blog_categories.rb +9 -0
  166. data/db/migrate/20120608072013_create_blog_comments.rb +14 -0
  167. data/db/migrate/20120608072027_create_blog_posts.rb +16 -0
  168. data/db/migrate/20120612055745_create_categorizations.rb +9 -0
  169. data/db/migrate/20120618104134_add_index_in_blog_comments.rb +5 -0
  170. data/db/migrate/20120618105246_add_custom_index_in_mcms_blog_comments.rb +5 -0
  171. data/db/migrate/20120618105511_add_custom_index_in_mcms_blog_posts.rb +5 -0
  172. data/db/migrate/20120619094143_create_settings.rb +12 -0
  173. data/db/migrate/20120627063009_acts_as_taggable_on_migration.rb +28 -0
  174. data/db/migrate/20120629065434_add_slug_to_blog_post.rb +6 -0
  175. data/db/migrate/20120629113457_add_slug_to_mcms_blog_category.rb +6 -0
  176. data/db/seeds.rb +26 -0
  177. data/lib/generators/mcms_blog/USAGE +8 -0
  178. data/lib/generators/mcms_blog/mcms_blog_generator.rb +60 -0
  179. data/lib/generators/mcms_blog/templates/asset_manager.rb +107 -0
  180. data/lib/generators/mcms_blog/templates/ckeditor.rb +18 -0
  181. data/lib/mcms_blog/engine.rb +18 -0
  182. data/lib/mcms_blog/version.rb +3 -0
  183. data/lib/mcms_blog.rb +4 -0
  184. data/lib/tasks/mcms_blog_tasks.rake +4 -0
  185. data/test/dummy/README.rdoc +261 -0
  186. data/test/dummy/Rakefile +7 -0
  187. data/test/dummy/app/assets/javascripts/application.js +15 -0
  188. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  189. data/test/dummy/app/controllers/application_controller.rb +3 -0
  190. data/test/dummy/app/helpers/application_helper.rb +2 -0
  191. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  192. data/test/dummy/config/application.rb +59 -0
  193. data/test/dummy/config/boot.rb +10 -0
  194. data/test/dummy/config/database.yml +25 -0
  195. data/test/dummy/config/environment.rb +5 -0
  196. data/test/dummy/config/environments/development.rb +37 -0
  197. data/test/dummy/config/environments/production.rb +67 -0
  198. data/test/dummy/config/environments/test.rb +37 -0
  199. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  200. data/test/dummy/config/initializers/inflections.rb +15 -0
  201. data/test/dummy/config/initializers/mime_types.rb +5 -0
  202. data/test/dummy/config/initializers/secret_token.rb +7 -0
  203. data/test/dummy/config/initializers/session_store.rb +8 -0
  204. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  205. data/test/dummy/config/locales/en.yml +5 -0
  206. data/test/dummy/config/routes.rb +58 -0
  207. data/test/dummy/config.ru +4 -0
  208. data/test/dummy/public/404.html +26 -0
  209. data/test/dummy/public/422.html +26 -0
  210. data/test/dummy/public/500.html +25 -0
  211. data/test/dummy/public/favicon.ico +0 -0
  212. data/test/dummy/script/rails +6 -0
  213. data/test/integration/navigation_test.rb +10 -0
  214. data/test/mcms_blog_test.rb +7 -0
  215. data/test/test_helper.rb +15 -0
  216. metadata +403 -0
@@ -0,0 +1,29 @@
1
+ =begin
2
+ @Name :BlogCategory model
3
+ @Created at :12-06-2012
4
+ @Updated at :12-06-2012
5
+ @Purpose :Needed for initailizing activerecord for blog_categories table in rails
6
+ @Company : Mindfire Solutions
7
+ =end
8
+ class BlogCategory < ActiveRecord::Base
9
+ extend FriendlyId
10
+ friendly_id :title, use: :slugged
11
+
12
+ #set table name prefix as mcms_
13
+ self.table_name = 'mcms_blog_categories'
14
+
15
+ #attribute accessibles
16
+ attr_accessible :title
17
+
18
+ #validation rules
19
+ validates :title, :presence => true
20
+
21
+
22
+ #model association rules
23
+ has_many :categorizations
24
+ has_many :posts, :through => :categorizations, :source => :blog_post
25
+
26
+ def post_count
27
+ posts.select(&:live?).count
28
+ end
29
+ end
@@ -0,0 +1,109 @@
1
+ =begin
2
+ @Name :BlogComment model
3
+ @Created at :12-06-2012
4
+ @Updated at :12-06-2012
5
+ @Purpose :Needed for initailizing activerecord for blog_comments table in rails
6
+ @Company :Mindfire Solutions
7
+ =end
8
+ class BlogComment < ActiveRecord::Base
9
+
10
+ #set a table name prefix
11
+ self.table_name = 'mcms_blog_comments'
12
+
13
+ #including NotificationHelper for notification helper methods
14
+ include ApplicationHelper
15
+
16
+ #attribute accessibles
17
+ attr_accessible :name, :email, :body, :blog_post_id, :state
18
+
19
+ #defining model associations
20
+ belongs_to :post, :class_name => 'BlogPost', :foreign_key => 'blog_post_id'
21
+
22
+ #validation rules
23
+ validates :name, :body, :presence => true
24
+ validates :email, :format => { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i }
25
+
26
+ #defining some scopes for lambda call
27
+ scope :unmoderated, :conditions => {:state=> nil}
28
+ scope :approved, :conditions => {:state => 'approved'}
29
+ scope :rejected, :conditions => {:state => 'rejected'}
30
+
31
+
32
+ #Set the approved state for the comment
33
+ def approve!
34
+ self.update_attribute(:state, 'approved')
35
+ end
36
+
37
+ #Set the reject state for the comment
38
+ def reject!
39
+ self.update_attribute(:state, 'rejected')
40
+ end
41
+
42
+ #Findout whether the comment is rejected or not
43
+ def is_rejected?
44
+ self.state == 'rejected'
45
+ end
46
+
47
+ #Findout whether the comment is approved or not
48
+ def is_approved?
49
+ self.state == 'approved'
50
+ end
51
+
52
+ #Findout whether the comment is unmoderated or not
53
+ def is_unmoderated?
54
+ self.state.nil?
55
+ end
56
+
57
+ #Notification module related to comment notifications
58
+ module Notification
59
+
60
+ class << self
61
+ #recipients method setting or finding a perticular recipient for mcms
62
+ def recipients
63
+ #notify_me
64
+ end
65
+
66
+ def recipients=(emails)
67
+ Setting.set_notification_recipient(emails)
68
+ end
69
+
70
+ def subject
71
+ "New inquiry from your website"
72
+ end
73
+
74
+ def find_notification_recipient
75
+ Setting.find_notification_recipient
76
+ end
77
+
78
+ end
79
+ end
80
+
81
+ #Moderation module for comments
82
+ module Moderation
83
+ class << self
84
+ def enabled?
85
+ value = Setting.find_by_name('comment_moderation').value
86
+ if value.to_i == 1
87
+ return true
88
+ else
89
+ return false
90
+ end
91
+ end
92
+
93
+ def toggle!
94
+ new_value = {
95
+ :value => !BlogComment::Moderation.enabled?,
96
+ :scoping => 'blog',
97
+ :restricted => false
98
+ }
99
+ if RefinerySetting.respond_to?(:set)
100
+ RefinerySetting.set(:comment_moderation, new_value)
101
+ else
102
+ RefinerySetting[:comment_moderation] = new_value
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+
109
+ end
@@ -0,0 +1,121 @@
1
+ =begin
2
+ @Name :BlogPost model
3
+ @Created at :12-06-2012
4
+ @Updated at :12-06-2012
5
+ @Purpose :Needed for initailizing activerecord for blog_posts table in rails
6
+ @Company : Mindfire Solutions
7
+ =end
8
+
9
+ class BlogPost < ActiveRecord::Base
10
+ extend FriendlyId
11
+ friendly_id :title, use: :slugged
12
+
13
+ #setting a table name prefix with mcms_
14
+ self.table_name = 'mcms_blog_posts'
15
+
16
+
17
+
18
+
19
+ #attribute accessibles
20
+ attr_accessible :title, :body, :tag_list, :draft, :published_at, :browser_title, :meta_keywords, :meta_description, :user_id, :category_ids, :custom_url, :custom_teaser,
21
+ :cached_slug
22
+
23
+ #Defining model associations
24
+ belongs_to :author, :class_name => 'User', :foreign_key => :user_id
25
+ has_many :comments, :class_name => 'BlogComment', :dependent => :destroy
26
+ has_many :categorizations
27
+ has_many :categories, :through => :categorizations, :source => :blog_category
28
+
29
+ #validation rules
30
+ validates :title, :presence => true
31
+ validates :body, :presence => true
32
+
33
+ #acts_as_taggable for blog posts
34
+ acts_as_taggable
35
+
36
+ #setting a default scope for all records
37
+ default_scope :order => 'published_at DESC'
38
+
39
+ #defining scope for user-defined functionality
40
+ scope :live, lambda { where( "published_at <= ? and draft = ?", Time.now, false) }
41
+ scope :all_previous, lambda { where(['published_at <= ?', Time.now.beginning_of_month]) }
42
+ scope :by_archive, lambda { |archive_date|
43
+ where(['published_at between ? and ?', archive_date.beginning_of_month, archive_date.end_of_month])
44
+ }
45
+
46
+ scope :by_year, lambda { |archive_year|
47
+ where(['published_at between ? and ?', archive_year.beginning_of_year, archive_year.end_of_year])
48
+ }
49
+
50
+
51
+ def live?
52
+ !draft and published_at <= Time.now
53
+ end
54
+
55
+ #class methods started here
56
+ class << self
57
+ def next current_record
58
+ self.send(:with_exclusive_scope) do
59
+ where(["published_at > ? and draft = ?", current_record.published_at, false]).order("published_at ASC")
60
+ end
61
+ end
62
+
63
+ def comments_allowed?
64
+ # RefinerySetting.find_or_set(:comments_allowed, true, {
65
+ # :scoping => 'blog'
66
+ # })
67
+ end
68
+
69
+ def uncategorized
70
+ BlogPost.live.reject { |p| p.categories.any? }
71
+ end
72
+ end
73
+
74
+ #Added module for settings
75
+ module CommentSetting
76
+ class << self
77
+
78
+ #this method returns true if comments_allowed value is true or 1 neither false in settings table
79
+ def is_comments_allowed?
80
+ value = Setting.find_by_name('comment_allowed').value
81
+ if value.to_i == 1
82
+ return true
83
+ else
84
+ return false
85
+ end
86
+ end
87
+
88
+ #this method returns true if comments_moderated value is true or 1 neither false in settings table
89
+ def is_comments_moderated?
90
+ value = Setting.find_by_name('comment_moderation').value
91
+ if value.to_i == 1
92
+ true
93
+ else
94
+ false
95
+ end
96
+ end
97
+
98
+ #this method update the comments_allowed value to false
99
+ def do_uncommentable
100
+ Setting.blog_uncommentable_setting
101
+ end
102
+
103
+ #this method update the comments_allowed value to true
104
+ def do_commentable
105
+ Setting.blog_commentable_setting
106
+ end
107
+
108
+ #this method update the comments_allowed value to false
109
+ def do_unmoderatable
110
+ Setting.blog_unmoderatable_setting
111
+ end
112
+
113
+ #this method update the comments_allowed value to true
114
+ def do_moderatable
115
+ Setting.blog_moderatable_setting
116
+ end
117
+
118
+ end
119
+ end
120
+
121
+ end
@@ -0,0 +1,16 @@
1
+ =begin
2
+ @Name Categorization model
3
+ @Created at :12-06-2012
4
+ @Updated at :12-06-2012
5
+ @Purpose :Needed for initailizing activerecord for blog_categories_blog_posts table in rails
6
+ @Company : Mindfire Solutions
7
+ =end
8
+ class Categorization < ActiveRecord::Base
9
+
10
+ #Setting table name
11
+ self.table_name = 'mcms_blog_categories_blog_posts'
12
+
13
+ #Defining model associations
14
+ belongs_to :blog_post
15
+ belongs_to :blog_category
16
+ end
@@ -0,0 +1,6 @@
1
+ class Ckeditor::Asset < ActiveRecord::Base
2
+ self.table_name = 'mcms_assets'
3
+ include Ckeditor::Orm::ActiveRecord::AssetBase
4
+ include Ckeditor::Backend::Paperclip
5
+ end
6
+
@@ -0,0 +1,12 @@
1
+ class Ckeditor::AttachmentFile < Ckeditor::Asset
2
+ has_attached_file :data,
3
+ :url => "/ckeditor_assets/attachments/:id/:filename",
4
+ :path => ":rails_root/public/ckeditor_assets/attachments/:id/:filename"
5
+
6
+ validates_attachment_size :data, :less_than => 100.megabytes
7
+ validates_attachment_presence :data
8
+
9
+ def url_thumb
10
+ @url_thumb ||= Ckeditor::Utils.filethumb(filename)
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ class Ckeditor::Picture < Ckeditor::Asset
2
+ has_attached_file :data,
3
+ :url => "/ckeditor_assets/pictures/:id/:style_:basename.:extension",
4
+ :path => ":rails_root/public/ckeditor_assets/pictures/:id/:style_:basename.:extension",
5
+ :styles => { :content => '800>', :thumb => '118x100#' }
6
+
7
+ validates_attachment_size :data, :less_than => 2.megabytes
8
+ validates_attachment_presence :data
9
+
10
+ def url_content
11
+ url(:content)
12
+ end
13
+ end
@@ -0,0 +1,59 @@
1
+ =begin
2
+ @Name :Setting model
3
+ @Created at :19-06-2012
4
+ @Updated at :20-06-2012
5
+ @Purpose :Needed for initailizing activerecord for mcms_settings table in rails
6
+ @Company :Mindfire Solutions
7
+ =end
8
+ class Setting < ActiveRecord::Base
9
+
10
+ #setting a table name prefix with mcms_
11
+ self.table_name = 'mcms_settings'
12
+
13
+ #including SettingsHelper to call helper methods here
14
+ include SettingsHelper
15
+
16
+ #attr_accessibles
17
+ attr_accessible :name, :value, :destroyable
18
+
19
+ #make settings for blogs to be uncommentable by updating attribute value to 0
20
+ def self.blog_uncommentable_setting
21
+ self.find_by_name('comment_allowed').update_attribute(:value, SettingsHelper.uncommentable)
22
+ end
23
+
24
+ #make settings for blogs to be commentable by updating attribute value to 1
25
+ def self.blog_commentable_setting
26
+ self.find_by_name('comment_allowed').update_attribute(:value, SettingsHelper.commentable)
27
+ end
28
+
29
+ #make settings for blogs to be unmoderatable by updating attribute value to 0
30
+ def self.blog_unmoderatable_setting
31
+ self.find_by_name('comment_moderation').update_attributes(:value => SettingsHelper.unmoderatable)
32
+ end
33
+
34
+ #make settings for blogs to be moderatable by updating attribute value to 1
35
+ def self.blog_moderatable_setting
36
+ self.find_by_name('comment_moderation').update_attributes(:value => SettingsHelper.moderatable)
37
+ end
38
+
39
+ #retrieve notification_recipient email
40
+ def self.notification_recipient
41
+ email_id = self.find_by_name('notication_recipient').email
42
+ if email_id.present?
43
+ return email_id
44
+ else
45
+ return User.first.email
46
+ end
47
+ end
48
+
49
+ #Setting notification recipients emails.
50
+ def self.set_notification_recipient(emails)
51
+ self.find_by_name('notification_recipient').update_attributes(:value => emails)
52
+ end
53
+
54
+ #Finding notification recipients emails.
55
+ def self.find_notification_recipient
56
+ self.find_by_name('notification_recipient').value
57
+ end
58
+
59
+ end
@@ -0,0 +1,89 @@
1
+ <!--
2
+ @Name: admin/blog/_submenu.html.erb
3
+ @Use: This is a page for displaying menu parts in admin side
4
+ @Created date: 13-06-2012
5
+ @Modified Date: 13-06-2012
6
+ @Company: Mindfire Solutions
7
+ -->
8
+ <nav id='actions' class='multilist'>
9
+
10
+ <ul class='collapsible-menu'>
11
+ <li class='not-a-link'>
12
+ <%= link_to t('.posts.title'), '#',
13
+ :class => 'page-copy-icon' %>
14
+ </li>
15
+ <li>
16
+ <%= link_to t('.posts.manage'), admin_blog_posts_path,
17
+ :class => 'page-icon' %>
18
+ </li>
19
+ <li>
20
+ <%= link_to t('.posts.uncategorized'), uncategorized_admin_blog_posts_url,
21
+ :class => 'page-icon' %>
22
+ </li>
23
+ <li>
24
+ <%= link_to t('.posts.new'), new_admin_blog_post_url,
25
+ :class => 'page-add-icon' %>
26
+ </li>
27
+ </ul>
28
+
29
+
30
+ <ul class='collapsible-menu'>
31
+ <li class='not-a-link'>
32
+ <%= link_to t('.categories.title'), '#',
33
+ :class => 'folder-icon' %>
34
+ </li>
35
+ <li>
36
+ <%= link_to t('.categories.manage'), admin_blog_categories_url,
37
+ :class => 'folder-edit-icon' %>
38
+ </li>
39
+ <li>
40
+ <%= link_to t('.categories.new'), new_admin_blog_category_url,
41
+ :class => 'folder-add-icon' %>
42
+ </li>
43
+ </ul>
44
+
45
+ <% if BlogPost::CommentSetting.is_comments_allowed? %>
46
+ <ul class='collapsible-menu'>
47
+ <li class='not-a-link'>
48
+
49
+ <%= link_to 'Comments', '#',
50
+ :class => 'comments-icon' %>
51
+ </li>
52
+ <li>
53
+ <%= link_to t('.comments.new'), admin_blog_comments_path,
54
+ :class => 'comment-icon' %>
55
+ </li>
56
+ <li>
57
+ <%= link_to t('.comments.approved'), approved_admin_blog_comments_path,
58
+ :class => 'comment-tick-icon' %>
59
+ </li>
60
+ <li>
61
+ <%= link_to t('.comments.rejected'), rejected_admin_blog_comments_path,
62
+ :class => 'comment-cross-icon' %>
63
+ </li>
64
+ </ul>
65
+ <% end %>
66
+
67
+ <ul class='collapsible-menu'>
68
+ <li class='not-a-link'>
69
+ <%= link_to t('.settings.title'), admin_blog_settings_path,
70
+ :class => 'settings-icon' %>
71
+ </li>
72
+ <li>
73
+ <%= link_to t('.settings.comments'), comments_admin_blog_settings_url,
74
+ :class => "#{BlogPost::CommentSetting.is_comments_allowed? ? 'success' : 'failure'}-icon" %>
75
+ </li>
76
+ <li>
77
+ <%= link_to t('.settings.moderation'), moderation_admin_blog_settings_url,
78
+ :class => "#{BlogPost::CommentSetting.is_comments_moderated? ? 'success' : 'failure'}-icon" %>
79
+ </li>
80
+ <li>
81
+ <%= link_to t('.settings.update_notified'),
82
+ notification_recipients_admin_blog_settings_url,
83
+ :class => 'user-comment-icon' %>
84
+ </li>
85
+ </ul>
86
+
87
+ </nav>
88
+
89
+
@@ -0,0 +1,20 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(category) -%>">
2
+ <span class='title'>
3
+ <%= category.title %>
4
+ <span class="preview">&nbsp;</span>
5
+ </span>
6
+
7
+ <span class='actions'>
8
+
9
+ <%= link_to image_tag("icons/application_edit.png"), edit_admin_blog_category_path(category),
10
+ :title => 'Edit' %>
11
+ <%= link_to image_tag("icons/delete.png"), admin_blog_category_path(category),
12
+ :class => "cancel confirm-delete",
13
+ :title => 'Delete',
14
+ :method => :delete,
15
+ :confirm => "Are you sure to delete ?" %>
16
+ <%= link_to image_tag("icons/application_go.png"), blog_category_path(category),
17
+ :title => 'Show' %>
18
+ </span>
19
+
20
+ </li>
@@ -0,0 +1,21 @@
1
+ <!--
2
+ @Name: admin/blog/categories/_form.html.erb
3
+ @Use: This is a partial for opening form for input categories records
4
+ @Created date: 13-06-2012
5
+ @Modified Date: 05-07-2012
6
+ @Company: Mindfire Solutions
7
+ -->
8
+ <%= form_for [:admin, @blog_category] do |f| %>
9
+ <%= render :partial => "/shared/admin/error_messages",
10
+ :locals => {
11
+ :object => f.object,
12
+ :include_object_name => true
13
+ } %>
14
+
15
+ <div class='field'>
16
+ <%= f.label :title -%>
17
+ <%= f.text_field :title, :class => 'larger widest' -%>
18
+ </div>
19
+
20
+ <%= render :partial => "/shared/admin/form_actions", :locals => { :f => f } %>
21
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'category', :collection => @blog_categories %>
3
+ </ul>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,23 @@
1
+ <!--
2
+ @Name: admin/blog/categories/index.html.erb
3
+ @Use: This is a page for displaying categories records
4
+ @Created date: 13-06-2012
5
+ @Modified Date: 13-06-2012
6
+ @Company: Mindfire Solutions
7
+ -->
8
+ <%=render :partial=>'/admin/blog/submenu' %>
9
+ <div id='records'>
10
+ <% if @blog_categories.any? %>
11
+ <%= will_paginate @blog_categories %>
12
+
13
+ <%= render :partial => "sortable_list" %>
14
+
15
+ <%= will_paginate @blog_categories %>
16
+ <% else %>
17
+ <p>
18
+ <strong>
19
+ <%= t('.no_items_yet', :create => t('admin.blog.submenu.categories.new')) %>
20
+ </strong>
21
+ </p>
22
+ <% end %>
23
+ </div>
@@ -0,0 +1,2 @@
1
+ <%= 'Add Category' %>
2
+ <%= render :partial => "form" %>
@@ -0,0 +1,27 @@
1
+ <!--
2
+ @Name: admin/blog/comments/_comment.html.erb
3
+ @Use: This is a page for displaying comments records
4
+ @Created date: 13-06-2012
5
+ @Modified Date: 19-06-2012
6
+ @Company: Mindfire Solutions
7
+ -->
8
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= "comment-#{comment.to_param}" -%>">
9
+ <span class='title'>
10
+ <%= comment.name %>
11
+ <span class="preview"> <%= truncate(comment.body, :length => 75) %></span>
12
+ </span>
13
+ <span class='actions'>
14
+ <%= link_to image_tag("icons/application_go.png"),
15
+ blog_post_url(comment.post, :anchor => "comment-#{comment.to_param}"),
16
+ :title => t('.view_live_html'),
17
+ :target => "_blank" unless comment.is_unmoderated? %>
18
+ <%= link_to image_tag('icons/zoom.png'), admin_blog_comment_path(comment),
19
+ :title => t('.read') %>
20
+ <%= link_to image_tag("icons/cross.png"),
21
+ rejected_admin_blog_comment_path(comment, :return_to => request.path.split('/').last.gsub(/^comments$/, 'index')),
22
+ :title => t('.reject') unless comment.is_rejected? %>
23
+ <%= link_to image_tag("icons/tick.png"),
24
+ approved_admin_blog_comment_path(comment, :return_to => request.path.split('/').last.gsub(/^comments$/, 'index')),
25
+ :title => t('.approve') unless comment.is_approved? %>
26
+ </span>
27
+ </li>
@@ -0,0 +1,11 @@
1
+ <!--
2
+ @Name: admin/blog/comments/_sortable_list.html.erb
3
+ @Use: This is a page for displaying blog comments records
4
+ @Created date: 13-06-2012
5
+ @Modified Date: 13-06-2012
6
+ @Company: Mindfire Solutions
7
+ -->
8
+ <ul id='sortable_list'>
9
+ <%= render :partial => 'comment', :collection => @blog_comments %>
10
+ </ul>
11
+
@@ -0,0 +1,12 @@
1
+ <%= render :partial => '/admin/blog/submenu' %>
2
+ <div id='records'>
3
+
4
+ <% if @blog_comments.any? %>
5
+ <%= render :partial => "sortable_list" %>
6
+ <% else %>
7
+ <h3>
8
+ <%= t('.no_items_yet',
9
+ :type => t("admin.blog.submenu.comments.#{action_name.gsub('index', 'new')}").downcase) %>
10
+ </h3>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,70 @@
1
+ <!--
2
+ @Name: admin/blog/comments/show.html.erb
3
+ @Use: This is a page for displaying comment record by id
4
+ @Created date: 18-06-2012
5
+ @Modified Date: 19-06-2012
6
+ @Company: Mindfire Solutions
7
+ -->
8
+ <div id='actions'>
9
+ <h2><%= t('.details')%></h2>
10
+ <p>
11
+ <strong><%= t('.age') %>:</strong> <%= time_ago_in_words(@blog_comment.created_at) %>
12
+ </p>
13
+ <h2><%= t('.actions') %></h2>
14
+ <ul>
15
+ <li>
16
+ <%= link_to t('.back'), {:action => 'index'}, :class => "back_icon" %>
17
+ </li>
18
+ <li>
19
+ <%= link_to t('.reject'), rejected_admin_blog_comment_path(@blog_comment, :return_to => 'rejected'),
20
+ :class => 'comment_cross_icon' unless @blog_comment.is_rejected? %>
21
+ </li>
22
+ <li>
23
+ <%= link_to t('.approve'), approved_admin_blog_comment_path(@blog_comment, :return_to => 'approved'),
24
+ :class => 'comment_tick_icon' unless @blog_comment.is_approved? %>
25
+ </li>
26
+ </ul>
27
+ </div>
28
+ <div id='records'>
29
+ <h2><%= t('.comment') %></h2>
30
+ <table id='inquiry'>
31
+ <tr>
32
+ <td>
33
+ <strong><%= t('.blog_post') %></strong>
34
+ </td>
35
+ <td>
36
+ <%= link_to @blog_comment.post.title,
37
+ blog_post_url(@blog_comment.post, :anchor => "comment-#{@blog_comment.to_param}"),
38
+ :target => '_blank' %>
39
+ </td>
40
+ </tr>
41
+ <tr>
42
+ <td>
43
+ <strong><%= t('.from') %></strong>
44
+ </td>
45
+ <td>
46
+ <%= @blog_comment.name %> [<%= mail_to @blog_comment.email, @blog_comment.email, {:title => t('.click_to_email')} %>]
47
+ </td>
48
+ </tr>
49
+ <tr>
50
+ <td>
51
+ <strong><%= t('.date') %></strong>
52
+ </td>
53
+ <td>
54
+ <%= l(Date.parse(@blog_comment.created_at.to_s), :format => :long) %>
55
+ </td>
56
+ </tr>
57
+ <tr>
58
+ <td valign='top'>
59
+ <strong><%= t('.message') %></strong>
60
+ </td>
61
+ <td>
62
+ <p style='margin-top: 0px'>
63
+ <%= @blog_comment.body.gsub("\r\n\r\n", "\r\n").gsub("\r\n", "</p><p>") %>
64
+ </p>
65
+ </td>
66
+ </tr>
67
+ </table>
68
+ </div>
69
+
70
+