drg_blog_news_forum 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +65 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/stylesheets/drg_blog_news_forum.css +162 -0
  6. data/app/controllers/drgcms_controls/dc_blog_dc_reply_control.rb +50 -0
  7. data/app/controllers/drgcms_controls/dc_forum_topic_control.rb +50 -0
  8. data/app/controllers/drgcms_controls/dc_forum_topic_dc_reply_control.rb +61 -0
  9. data/app/forms/cms_menu.yml +33 -0
  10. data/app/forms/dc_blog.yml +42 -0
  11. data/app/forms/dc_forum.yml +59 -0
  12. data/app/forms/dc_forum_policy_rule.yml +4 -0
  13. data/app/forms/dc_forum_topic.yml +30 -0
  14. data/app/forms/dc_reply.yml +25 -0
  15. data/app/helpers/dc_blog_renderer.rb +75 -0
  16. data/app/helpers/dc_forum_helper.rb +39 -0
  17. data/app/helpers/dc_forum_renderer.rb +79 -0
  18. data/app/models/dc_blog.rb +83 -0
  19. data/app/models/dc_forum.rb +45 -0
  20. data/app/models/dc_forum_policy_rule.rb +30 -0
  21. data/app/models/dc_forum_topic.rb +47 -0
  22. data/app/models/dc_news.rb +42 -0
  23. data/app/models/dc_reply.rb +39 -0
  24. data/app/models/dc_reply_concern.rb +45 -0
  25. data/app/views/dc_blog/_blog.html.erb +24 -0
  26. data/app/views/dc_blog/_blogers.html.erb +9 -0
  27. data/app/views/dc_blog/_entries.html.erb +13 -0
  28. data/app/views/dc_blog/_entry.html.erb +18 -0
  29. data/app/views/dc_forum/_forums.html.erb +33 -0
  30. data/app/views/dc_forum/_topic.html.erb +51 -0
  31. data/app/views/dc_forum/_topics.html.erb +44 -0
  32. data/app/views/dc_replay/_reply.html.erb +24 -0
  33. data/config/locales/dc_forum_en.yml +44 -0
  34. data/config/locales/dc_forum_sl.yml +45 -0
  35. data/config/locales/models_en.yml +118 -0
  36. data/config/locales/models_sl.yml +101 -0
  37. data/lib/drg_blog_news_forum/engine.rb +4 -0
  38. data/lib/drg_blog_news_forum/version.rb +3 -0
  39. data/lib/drg_blog_news_forum.rb +6 -0
  40. data/lib/tasks/drg_blog_news_forum_tasks.rake +44 -0
  41. data/test/drg_blog_news_forum_test.rb +7 -0
  42. data/test/integration/navigation_test.rb +10 -0
  43. data/test/test_helper.rb +15 -0
  44. metadata +118 -0
@@ -0,0 +1,75 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ ########################################################################
25
+ #
26
+ ########################################################################
27
+ class DcBlogRenderer < DcRenderer
28
+ include DcApplicationHelper
29
+
30
+ ########################################################################
31
+ # Show one blog entry
32
+ ########################################################################
33
+ def show_entry
34
+ # blog = @parent.params[:blog_id] ? DcBlog.find(@parent.params[:blog_id]) : DcBlog.last
35
+ entry = DcBlog.find_by(created_by_name: @parent.params[:name], link: @parent.params[:link])
36
+ return t('dc_blog.entry_not_found') if entry.nil?
37
+
38
+ replies = entry.dc_replies.where(active: true).order(created_at: 1).
39
+ page(@parent.params[:page]).per(5)
40
+ @parent.render partial: 'dc_blog/entry', formats: [:html],
41
+ locals: { entry: entry, replies: replies, opts: @opts }
42
+ end
43
+
44
+ ########################################################################
45
+ # List all blogs from one bloger
46
+ ########################################################################
47
+ def list_all
48
+ entries = DcBlog.only(:created_by_name, :link, :subject, :created_at)
49
+ .where(created_by_name: @parent.params[:name]).order_by(created_at: -1)
50
+ .page(@parent.params[:page]).per(10)
51
+ @parent.render partial: 'dc_blog/entries', formats: [:html], locals: { entries: entries }
52
+ end
53
+
54
+ ########################################################################
55
+ # List all blogers
56
+ ########################################################################
57
+ def list_blogers
58
+ blogers = DcBlog.all.distinct(:created_by_name)
59
+ @parent.render partial: 'dc_blog/blogers', formats: [:html], locals: { blogers: blogers }
60
+ end
61
+
62
+ ########################################################################
63
+ # Default method will dispatch to proper method.
64
+ ########################################################################
65
+ def default
66
+ if @parent.params[:name].nil?
67
+ list_blogers
68
+ elsif @parent.params[:link].nil? or @parent.params[:link] == 'all'
69
+ list_all
70
+ else
71
+ show_entry
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,39 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ module DcForumHelper
25
+ #include DcApplicationHelper
26
+
27
+ ########################################################################
28
+ #
29
+ ########################################################################
30
+ def dc_pretty_date(time)
31
+ case
32
+ when time < 11.months.ago then I18n.localize(time.to_date, format: :long)
33
+ when time < 6.days.ago then I18n.localize(time.to_date, format: :short)
34
+ when time < 14.hours.ago then I18n.localize(time, format: :short)
35
+ else time.strftime('%H:%M')
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,79 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ ########################################################################
25
+ #
26
+ ########################################################################
27
+ class DcForumRenderer < DcRenderer
28
+ include DcApplicationHelper
29
+
30
+ ########################################################################
31
+ #
32
+ ########################################################################
33
+ #def pretty_date(time)
34
+ # case
35
+ # when time < 11.months.ago then I18n.localize(time.to_date, format: :long)
36
+ # when time < 6.days.ago then I18n.localize(time.to_date, format: :short)
37
+ # when time < 14.hours.ago then I18n.localize(time, format: :short)
38
+ # else time.strftime('%H:%M')
39
+ # end
40
+ #end
41
+
42
+ ########################################################################
43
+ # Topic method lists topic and its replays.
44
+ #
45
+ # Same as code above but with usage of view partial.
46
+ ########################################################################
47
+ def topic
48
+ forum = DcForum.find(@parent.params[:forum])
49
+ topic = DcForumTopic.find(@parent.params[:topic])
50
+ replies = topic.dc_replies.where(active: true).order(created_at: 1).page(@parent.params[:page]).per(5)
51
+ @parent.render partial: 'dc_forum/topic', formats: [:html],
52
+ locals: { forum: forum, topic: topic, replies: replies }
53
+ end
54
+
55
+ ########################################################################
56
+ # Topic method lists topic and its replays.
57
+ #
58
+ # Same as code above but with usage of view partial.
59
+ ########################################################################
60
+ def topics
61
+ forum = DcForum.find(@parent.params[:forum])
62
+ topics = DcForumTopic.only(:id, :created_by_name, :updated_by_name, :subject, :created_at, :updated_at, :replies)
63
+ .where(dc_forum_id: forum._id, active: true).order(updated_at: -1)
64
+ .page(@parent.params[:page]).per(10)
65
+ @parent.render partial: 'dc_forum/topics', formats: [:html], locals: { forum: forum, topics: topics }
66
+ end
67
+
68
+ ########################################################################
69
+ # Default method will list all available forums
70
+ ########################################################################
71
+ def default
72
+ return topic if @parent.params[:topic]
73
+ return topics if @parent.params[:forum]
74
+ #
75
+ forums = DcForum.where(:site_id.in => [nil, dc_get_site._id], active: true).order(order: 1).each
76
+ @parent.render partial: 'dc_forum/forums', formats: [:html], locals: { forums: forums, opts: @opts }
77
+ end
78
+
79
+ end
@@ -0,0 +1,83 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ #########################################################################
25
+ # ActiveSupport::Concern definition for DcBlog class.
26
+ #########################################################################
27
+ module DcBlogConcern
28
+ extend ActiveSupport::Concern
29
+ included do
30
+
31
+ include Mongoid::Document
32
+ include Mongoid::Timestamps
33
+
34
+ field :subject, type: String, default: ''
35
+ field :body, type: String, default: ''
36
+ field :active, type: Boolean, default: true
37
+ field :link, type: String
38
+
39
+ field :created_by, type: BSON::ObjectId
40
+ field :created_by_name, type: String
41
+
42
+ embeds_many :dc_replies, as: :replies
43
+
44
+ index({created_by_name: 1, link: 1})
45
+
46
+ validates_length_of :subject, minimum: 4
47
+ validates_length_of :body, minimum: 10
48
+
49
+ before_save :do_before_save
50
+
51
+ ########################################################################
52
+ # Update link if if field is left blank.
53
+ ########################################################################
54
+ def do_before_save
55
+ if self.link.size < 5
56
+ self.link = self.created_at.strftime('%Y-%m-%d-') + UnicodeUtils.downcase(self.subject)
57
+ end
58
+ if self.created_by_name.nil?
59
+ self.created_by_name = DcUser.find(self.created_by).name
60
+ end
61
+ end
62
+
63
+ ########################################################################
64
+ # Method returns all users having bloger system role.
65
+ ########################################################################
66
+ def blogers
67
+ blogers_role = DcRole.only(:id).find_by(sytem_name: 'bloger')
68
+ return [] unless blogers_role
69
+ #
70
+ DcUser.where('dc_user_roles.dc_policy_role_id' => blogers_role.id).order_by(name: 1)
71
+ end
72
+
73
+ end
74
+ end
75
+
76
+ ########################################################################
77
+ # Mongoid::Document model for dc_blogs documents.
78
+ #
79
+ # dc_blog class is used for creating simple blog site.
80
+ ########################################################################
81
+ class DcBlog
82
+ include DcBlogConcern
83
+ end
@@ -0,0 +1,45 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ class DcForum
25
+ include Mongoid::Document
26
+ include Mongoid::Timestamps
27
+
28
+ field :name, type: String, default: ''
29
+ field :description, type: String, default: ''
30
+ field :site_id, type: BSON::ObjectId
31
+ field :order, type: Integer, default: 10
32
+ field :topics, type: Integer, default: 0
33
+ field :replies, type: Integer, default: 0
34
+ field :forum_groups,type: Array
35
+
36
+ field :active, type: Boolean, default: true
37
+ field :created_by, type: BSON::ObjectId
38
+ field :updated_by, type: BSON::ObjectId
39
+ field :created_by_name, type: String
40
+ field :updated_by_name, type: String
41
+
42
+ embeds_many :dc_policy_rules, as: :policy_rules
43
+
44
+ index( { name: 1 } )
45
+ end
@@ -0,0 +1,30 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require_dependency DrgCms.model 'dc_policy_rule'
25
+
26
+ class DcForumPolicyRule
27
+ include DcPolicyRuleConcern
28
+
29
+ embedded_in :dc_forum
30
+ end
@@ -0,0 +1,47 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ class DcForumTopic
25
+ include Mongoid::Document
26
+ include Mongoid::Timestamps
27
+
28
+ field :subject, type: String, default: ''
29
+ field :body, type: String, default: ''
30
+ field :replies, type: Integer, default: 0
31
+ field :views, type: Integer, default: 0
32
+
33
+ belongs_to :dc_forum
34
+ embeds_many :dc_replies, as: :replies
35
+
36
+ field :active, type: Boolean, default: true
37
+ field :created_by, type: BSON::ObjectId
38
+ field :updated_by, type: BSON::ObjectId
39
+ field :created_by_name, type: String
40
+ field :updated_by_name, type: String
41
+
42
+
43
+ index( { dc_forum_id: 1 } )
44
+
45
+ validates_length_of :subject, minimum: 4
46
+ validates_length_of :body, minimum: 10
47
+ end
@@ -0,0 +1,42 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ class DcNews
25
+ include Mongoid::Document
26
+ include Mongoid::Timestamps
27
+
28
+ field :subject, type: String, default: ''
29
+ field :body, type: String, default: ''
30
+ field :active, type: Boolean, default: true
31
+ field :valid_from, type: Date
32
+ field :valid_to, type: Date
33
+ field :categories, type: Array
34
+
35
+ field :created_by, type: BSON::ObjectId
36
+ field :created_by_name, type: String
37
+
38
+ embeds_many :replies
39
+
40
+ validates_length_of :subject, minimum: 4
41
+ validates_length_of :body, minimum: 10
42
+ end
@@ -0,0 +1,39 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ class DcReply
25
+ include Mongoid::Document
26
+ include Mongoid::Timestamps
27
+
28
+ field :subject, type: String, default: ''
29
+ field :body, type: String, default: ''
30
+ field :active, type: Boolean, default: true
31
+
32
+ field :created_by, type: BSON::ObjectId
33
+ field :created_by_name, type: String
34
+
35
+ embedded_in :replies, polymorphic: true
36
+
37
+ validates_length_of :subject, minimum: 4
38
+ validates_length_of :body, minimum: 10
39
+ end
@@ -0,0 +1,45 @@
1
+ #--
2
+ # Copyright (c) 2014+ Damjan Rems
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ module DcReplyConcern
25
+ extend ActiveSupport::Concern
26
+ included do
27
+
28
+ include Mongoid::Document
29
+ include Mongoid::Timestamps
30
+
31
+ field :subject, type: String, default: ''
32
+ field :body, type: String, default: ''
33
+ field :active, type: Boolean, default: true
34
+
35
+ field :created_by, type: BSON::ObjectId
36
+
37
+ embedded_in :dc_forum_topic
38
+
39
+ index( { dc_forum_topic_id: 1 } )
40
+
41
+ validates_length_of :subject, minimum: 4
42
+ validates_length_of :body, minimum: 10
43
+
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ <div class="blog-title">
2
+ <%= title %>
3
+ </div>
4
+
5
+ <%= if opts[:edit_mode] > 1
6
+ dc_link_for_create(controller: 'cmsedit', table: 'dc_blog', title: 'dc_blog.new_entry' )
7
+ end %>
8
+
9
+ <% if blog %>
10
+ <div class="blog-date"><%= dc_pretty_date(blog.created_at) %></div>
11
+ <div class="blog-subject"><%= blog.subject %></div>
12
+ <div style="clear:both;"></div>
13
+
14
+ <div class="blog-body"><%= blog.body%></div>
15
+
16
+ <div class="blog-replies">
17
+ <%= render partial: 'dc_reply/reply', formats: [:html],
18
+ locals: { replies: replies, parent_id: blog.id } %>
19
+ </div>
20
+
21
+ <iframe id="iframe_edit" name="iframe_edit" scrolling="no"></iframe>
22
+ <% else %>
23
+ <br><br><br>This blog has no posts. Yet ;-)
24
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <div class="blog-title">
2
+ <h1><%= t('dc_blog.blogers') %></h1>
3
+ </div>
4
+
5
+ <% for bloger in blogers %>
6
+ <div class="blog-entry">
7
+ <%= link_to( bloger, { path: 'blog', name: bloger} )%>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <div class="blog-title">
2
+ <h1><%= params[:name] %>, <%= t('dc_blog.my_blog') %></h1>
3
+ </div>
4
+ <% for entry in entries %>
5
+
6
+ <div class="blog-entry">
7
+
8
+ <%= link_to( entry.subject,
9
+ { path: 'blog', name: params[:name], link: entry.link } )%>
10
+
11
+ <div class="blog-date"><h3><%= dc_pretty_date(entry.created_at) %></h3></div>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,18 @@
1
+
2
+ <% if opts[:edit_mode] > 1 %>
3
+ <%= dc_link_for_create(controller: 'cmsedit', table: 'dc_blog', title: 'dc_blog.new_entry' ) %>
4
+ <br><br>
5
+ <%= dc_link_for_edit(controller: 'cmsedit', table: 'dc_blog', title: 'dc_blog.edit_entry', id: entry.id ) %>
6
+ <% end %>
7
+
8
+ <div class="blog-subject"><h1><%= entry.subject %></h1></div>
9
+ <div class="blog-date"><h3><%= t('dc_blog.published') + ' ' + dc_pretty_date(entry.created_at) %></h3></div>
10
+
11
+ <div class="blog-body"><%= entry.body.html_safe %></div>
12
+
13
+ <div class="blog-replies">
14
+ <%= render partial: 'dc_replay/reply', formats: [:html],
15
+ locals: { replies: replies, parent_id: entry.id, parent_document: 'dc_blog' } %>
16
+ </div>
17
+
18
+ <iframe id="iframe_edit" name="iframe_edit" scrolling="no"></iframe>
@@ -0,0 +1,33 @@
1
+ <%= if opts[:edit_mode] > 1
2
+ dc_link_for_create(controller: 'cmsedit', table: 'dc_forum', title: 'dc_forum.add_new_forum' )
3
+ end %>
4
+
5
+ <div class="forum-topics">
6
+ <div class="forum-title">
7
+ <h1><%= t 'dc_forum.forums_list' %></h1>
8
+ </div>
9
+
10
+ <% for forum in forums %>
11
+ <div class="topic-<%= cycle("odd", "even") %>">
12
+ <%= if opts[:edit_mode] > 1 then
13
+ dc_link_for_edit(controller: 'cmsedit', table: 'dc_forum', id: forum._id, title: 'dc_forum.edit_forum' ); end %>
14
+ <div class="name">
15
+ <%= link_to(forum.name,{ path: params[:path], forum: forum.id} ) %>
16
+ </div>
17
+ <div class='description'>
18
+ <%= forum.description %><hr>
19
+ <b><%= t('dc_forum.topics') %>:</b>
20
+ <%= forum.topics %> &nbsp;|&nbsp;
21
+
22
+ <b><%= t('dc_forum.replies') %>:</b>
23
+ <%= forum.replies %> &nbsp;|&nbsp;
24
+
25
+ <b><%= t('dc_forum.last') %>:</b>
26
+ <%= forum.updated_by_name %>
27
+ <%= dc_pretty_date(forum.updated_at) %>
28
+
29
+ </div>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+