module SkinsHelper def skin_author_link(skin) if skin.author.is_a? User link_to(skin.byline, skin.author) else skin.byline end end # we only actually display an image if there's a file def skin_preview_display(skin) return unless skin&.icon&.attached? link_to image_tag(rails_blob_url(skin.icon.variant(:standard)), alt: skin.icon_alt_text, class: "icon", skip_pipeline: true), rails_blob_url(skin.icon) end # Fetches the current skin. This is determined by the following # 1. Skin ID set by request parameter # 2. Skin ID set in the current session (if someone, a user or admin, is logged in) # 3. Current user's skin preference # 4. The default skin (as set by the active AdminSetting) def current_skin skin = Skin.approved_or_owned_by.usable.find_by(id: params[:site_skin]) if params[:site_skin] skin ||= Skin.approved_or_owned_by.usable.find_by(id: session[:site_skin]) if (logged_in? || logged_in_as_admin?) && session[:site_skin] skin ||= current_user&.preference&.skin skin || AdminSetting.default_skin end def skin_tag roles = if logged_in_as_admin? Skin::DEFAULT_ROLES_TO_INCLUDE + ["admin"] else Skin::DEFAULT_ROLES_TO_INCLUDE end skin = current_skin return "" unless skin # We include the version information for both the skin's id and the # AdminSetting.default_skin_id because the default skin is used in skins of # type "user", so we need to regenerate the cache block when it's modified. # # We also include the default_skin_id in the version number so that we # regenerate the cache block when an admin updates the current default # skin. Rails.cache.fetch( [:v1, :site_skin, skin.id, logged_in_as_admin?], version: [skin_cache_version(skin.id), AdminSetting.default_skin_id, skin_cache_version(AdminSetting.default_skin_id)] ) do skin.get_style(roles) end end def show_advanced_skin?(skin) !skin.new_record? && (skin.role != Skin::DEFAULT_ROLE || (skin.media.present? && skin.media != Skin::DEFAULT_MEDIA) || skin.ie_condition.present? || skin.unusable? || !skin.skin_parents.empty?) end def my_site_skins_link(link_text = nil) link_text ||= "My Site Skins" span_if_current ts(link_text), user_skins_path(current_user, skin_type: "Site"), current_page?(user_skins_path(current_user)) && (params[:skin_type].blank? || params[:skin_type] == "Site") end def my_work_skins_link(link_text = nil) link_text ||= "My Work Skins" span_if_current ts(link_text), user_skins_path(current_user, skin_type: "WorkSkin") end def public_site_skins_link(link_text = nil) link_text ||= "Public Site Skins" span_if_current ts(link_text), skins_path(skin_type: "Site"), current_page?(skins_path) && (params[:skin_type].blank? || params[:skin_type] == "Site") end def public_work_skins_link(link_text = nil) link_text ||= "Public Work Skins" span_if_current ts(link_text), skins_path(skin_type: "WorkSkin") end end