Class: CamaleonCms::PostDecorator

Inherits:
ApplicationDecorator show all
Includes:
CustomFieldsConcern
Defined in:
app/decorators/camaleon_cms/post_decorator.rb

Overview

Camaleon CMS is a content management system

Copyright (C) 2015 by Owen Peredo Diaz
Email: [email protected]
This program is free software: you can redistribute it and/or modify   it under the terms of the GNU Affero General Public License as  published by the Free Software Foundation, either version 3 of the  License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the  GNU Affero General Public License (GPLv3) for more details.

Instance Method Summary collapse

Methods included from CustomFieldsConcern

#render_fields, #the_field, #the_field!, #the_fields

Methods inherited from ApplicationDecorator

#_calc_locale, #get_locale, #set_decoration_locale, #the_breadcrumb, #the_created_at, #the_id, #the_keywords, #the_slug, #the_updated_at

Methods included from MetasDecoratorMethods

#the_meta, #the_option

Instance Method Details

#can_visit?Boolean

check if the post can be visited by current visitor


188
189
190
191
192
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 188

def can_visit?
  r = {flag: true, post: object}
  h.hooks_run("post_can_visit", r)
  r[:flag] && object.status == 'published'
end

#generate_breadcrumb(show_categories = true, add_post_type = true) ⇒ Object

add_post_type: true/false to include post type link children: true/false (show/hide last item link) show_categories: true/false, true: add categories tree to the breadcrumb


197
198
199
200
201
202
203
204
205
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 197

def generate_breadcrumb(show_categories = true, add_post_type = true)
  f_cat = object.categories.first
  if f_cat.present? && show_categories
    f_cat.decorate.generate_breadcrumb(add_post_type, true)
  else
    object.post_type.decorate.generate_breadcrumb(add_post_type, true)
  end
  h.breadcrumb_add(self.the_title)
end

#has_thumb?Boolean

check if this page has registered the thumbnail


45
46
47
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 45

def has_thumb?
  object.get_meta("thumb").present?
end

#the_authorObject

return the user object who created this post


168
169
170
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 168

def the_author
  object.author.decorate
end

#the_categoriesObject

return all categories assigned for this post filtered by permissions + hidden posts + roles + etc…


173
174
175
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 173

def the_categories
  object.categories
end

#the_commentsObject

return all comments for this post filtered by permissions + hidden posts + roles + etc…


183
184
185
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 183

def the_comments
  object.comments.main.approveds.eager_load(:user)
end

#the_contentObject

return the content of this post


30
31
32
33
34
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 30

def the_content
  r = {content: object.content.to_s.translate(get_locale), post: object}
  h.hooks_run("post_the_content", r)
  h.do_shortcode(r[:content], self)
end

create the html link with edit link return html link attrs: Hash of link tag attributes, sample: {id: “myid”, class: “sss” }


126
127
128
129
130
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 126

def the_edit_link(title = nil, attrs = { })
  return '' unless h.cama_current_user.present?
  attrs = {target: "_blank", style: "font-size:11px !important;cursor:pointer;"}.merge(attrs)
  h.link_to("→ #{title || h.ct("edit")}".html_safe, the_edit_url, attrs)
end

#the_edit_urlObject

return edit url for this post


119
120
121
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 119

def the_edit_url
  h.edit_cama_admin_post_type_post_url(object.post_type.id, object)
end

#the_excerpt(qty_chars = 200) ⇒ Object

return the excerpt of this post


21
22
23
24
25
26
27
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 21

def the_excerpt(qty_chars = 200)
  excerpt = object.get_meta("summary").to_s.translate(get_locale)
  # r = {content: (excerpt.present? ? excerpt : object.content_filtered.to_s.translate(get_locale).strip_tags.gsub(/
|\n/, " ").truncate(qty_chars)), post: object}
  r = {content: (excerpt.present? ? excerpt : h.cama_strip_shortcodes(object.content_filtered.to_s.translate(get_locale).strip_tags.gsub(/
|\n/, " ").truncate(qty_chars))), post: object}
  h.hooks_run("post_the_excerpt", r)
  r[:content]
end

show link and thumbnail included as html link_args: html attributes for link img_args: html attributes for image


142
143
144
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 142

def the_link_thumb(link_args = {}, img_args = {})
  h.link_to(the_thumb(img_args), the_url, link_args)
end

#the_path(*args) ⇒ Object

return the path for this page sample: /my-page.html


51
52
53
54
55
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 51

def the_path(*args)
  args = args.extract_options!
  args[:as_path] = true
  the_url(args)
end

#the_post_typeObject

return the post type of this post


208
209
210
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 208

def the_post_type
  object.post_type.decorate
end

#the_statusObject


146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 146

def the_status
  case self.status
    when "published"
      color = "info"
      status = I18n.t('camaleon_cms.admin.post_type.published')
    when "draft"
      color = "warning"
      status = I18n.t('camaleon_cms.admin.table.draft')
    when "trash"
      color = "danger"
      status = I18n.t('camaleon_cms.admin.table.trash')
    when "pending"
      color = "default"
      status = I18n.t('camaleon_cms.admin.table.pending')
    else
      color = "default"
      status = self.status
  end
  "<span class='label label-#{color} label-form'>#{status.titleize}</span>"
end

#the_tagsObject

return all post_tags assigned for this post


178
179
180
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 178

def the_tags
  object.
end

#the_thumb(img_args = {}) ⇒ Object

show thumbnail image as html


133
134
135
136
137
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 133

def the_thumb(img_args = {})
  r = {image: h.image_tag(the_thumb_url, img_args), post: object}
  h.hooks_run("post_the_thumb", r)
  r[:image]
end

#the_thumb_url(default = nil) ⇒ Object

return thumbnail image for this post default: default image if thumbails not exist if default is empty, post_type default thumb will be returned


39
40
41
42
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 39

def the_thumb_url(default = nil)
  th = object.get_meta("thumb")
  th.present? ? th : (default || object.post_type.get_option('default_thumb', nil) || h.asset_url("camaleon_cms/image-not-found.png"))
end

#the_title(locale = nil) ⇒ Object


14
15
16
17
18
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 14

def the_title(locale = nil)
  r = {title: object.title.to_s.translate(get_locale(locale)), post: object}
  h.hooks_run("post_the_title", r)
  r[:title]
end

#the_url(*args) ⇒ Object

return front url for this post sample: localhost.com/my-page.html args:

locale: language (default current language)
as_path: return the path instead of full url, sample: /my-page.html
Also, you can pass extra attributes as params for the url, sample: page.the_url(my_param: 'value', other: "asd")
  => http://localhost.com/my-page.html?my_param=value&other=asd

Return String URL


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 65

def the_url(*args)
  args = args.extract_options!
  args[:locale] = get_locale unless args.include?(:locale)
  args[:format] = "html"
  args[:slug] = the_slug(args[:locale])
  p = args.delete(:as_path).present? ? "path" : "url"
  l = _calc_locale(args[:locale])
  ptype = object.post_type.decorate
  p_url_format = ptype.contents_route_format
  case p_url_format
    when "post_of_post_type"
      args[:post_type_id] = ptype.id
      args[:title] = ptype.the_title(args[:locale]).parameterize
    when "post_of_category"
      if ptype.manage_categories?
        cat = object.categories.first.decorate rescue ptype.default_category.decorate
        args[:category_id] = cat.id
        args[:title] = cat.the_title(args[:locale]).parameterize
      else
        p_url_format = "post"
        l = ""
      end
    when "post_of_posttype"
      args[:post_type_title] = ptype.the_title(args[:locale]).parameterize
      l = ""
    when "post_of_category_post_type"
      if ptype.manage_categories?
        cat = object.categories.first.decorate rescue ptype.default_category.decorate
        args[:post_type_title] = ptype.the_title(args[:locale]).parameterize
        args[:category_id] = cat.id
        args[:title] = cat.the_title(args[:locale]).parameterize
      else
        p_url_format = "post"
        l = ""
      end
    else
      l = ""
  end
  h.cama_url_to_fixed("cama_#{p_url_format}#{l}_#{p}", args)
end

#the_urls(*args) ⇒ Object

return a hash of frontend urls for this post sample: 'mydomain.com/es/articulo-3.html', en: 'mydomain.com/en/post-3.html'


108
109
110
111
112
113
114
115
116
# File 'app/decorators/camaleon_cms/post_decorator.rb', line 108

def the_urls(*args)
  args = args.extract_options!
  res = {}
  h.current_site.the_languages.each do |l|
    args[:locale] = l
    res[l] = the_url(args.clone)
  end
  res
end