=begin Camaleon CMS is a content management system Copyright (C) 2015 by Owen Peredo Diaz Email: owenperedo@gmail.com 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. =end class CamaleonCms::PostDecorator < CamaleonCms::ApplicationDecorator include CamaleonCms::CustomFieldsConcern delegate_all def the_title r = {title: object.title.to_s.translate(get_locale), post: object} h.hooks_run("post_the_title", r) r[:title] end # return the excerpt of this post 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 # return the content of this post 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 # return thumbnail image for this post # default: default image if thumbails not exist # if default is empty, post_type default thumb will be returned 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 # check if this page has registered the thumbnail def has_thumb? object.get_meta("thumb").present? end # return the path for this page # sample: /my-page.html def the_path(*args) args = args.extract_options! args[:as_path] = true the_url(args) end # return front url for this post # sample: http://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 def the_url(*args) args = args.extract_options! args[:slug] = the_slug args[:locale] = get_locale unless args.include?(:locale) args[:format] = "html" 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.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.parameterize else p_url_format = "post" l = "" end when "post_of_posttype" args[:post_type_title] = ptype.the_title.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.parameterize args[:category_id] = cat.id args[:title] = cat.the_title.parameterize else p_url_format = "post" l = "" end else l = "" end h.cama_url_to_fixed("cama_#{p_url_format}#{l}_#{p}", args) end # return a hash of frontend urls for this post # sample: {es: 'http://mydomain.com/es/articulo-3.html', en: 'http://mydomain.com/en/post-3.html'} 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 # return edit url for this post def the_edit_url h.edit_cama_admin_post_type_post_url(object.post_type.id, object) end # create the html link with edit link # return html link # attrs: Hash of link tag attributes, sample: {id: "myid", class: "sss" } 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 # show thumbnail image as html 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 # show link and thumbnail included as html # link_args: html attributes for link # img_args: html attributes for image def the_link_thumb(link_args = {}, img_args = {}) h.link_to(the_thumb(img_args), the_url, link_args) end 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 "#{status.titleize}" end # return the user object who created this post def the_author object.author.decorate end # return all categories assigned for this post filtered by permissions + hidden posts + roles + etc... def the_categories object.categories end # return all post_tags assigned for this post def the_tags object.post_tags end # return all comments for this post filtered by permissions + hidden posts + roles + etc... def the_comments object.comments.main.approveds.eager_load(:user) end # check if the post can be visited by current visitor def can_visit? r = {flag: true, post: object} h.hooks_run("post_can_visit", r) r[:flag] && object.status == 'published' end # 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 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 # return the post type of this post def the_post_type object.post_type.decorate end end