Skip to content

Commit

Permalink
Don't use stubs for UserInfo.current_user_id because it blocks the us…
Browse files Browse the repository at this point in the history
…e case where UserInfo.current_user_id is changed at runtime.
  • Loading branch information
mantas authored and thorsteneckel committed Sep 18, 2019
1 parent 8096ee0 commit 6606aa2
Show file tree
Hide file tree
Showing 33 changed files with 484 additions and 244 deletions.
1 change: 1 addition & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ browser:build:
paths:
- public/assets/.sprockets-manifest*
- public/assets/application-*
- public/assets/knowledge_base*
- public/assets/print-*

.services_browser_template: &services_browser_definition
Expand Down
7 changes: 0 additions & 7 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,6 @@ Rails/HasManyOrHasOneDependent:
- 'app/models/ticket/state_type.rb'
- 'app/models/user.rb'

# Offense count: 15
# Configuration parameters: Include.
# Include: app/helpers/**/*.rb
Rails/HelperInstanceVariable:
Exclude:
- 'app/helpers/knowledge_base_helper.rb'

# Offense count: 808
Style/Documentation:
Enabled: false
Expand Down
58 changes: 58 additions & 0 deletions app/helpers/knowledge_base_breadcrumb_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
module KnowledgeBaseBreadcrumbHelper
def render_breadcrumb_if_needed(knowledge_base, object, alternative)
objects = calculate_breadcrumb_path(object, alternative)

return if objects.empty?

render 'knowledge_base/public/breadcrumb',
{
objects: objects,
knowledge_base: knowledge_base
}
end

def calculate_breadcrumb_path(object, alternative)
objects = calculate_breadcrumb_to_category(object&.parent)

last = if alternative.present? && alternative.translations.any?
Translation.translate(system_locale_via_uri&.locale, 'Alternative translations')
else
object
end

objects + [last].compact
end

def calculate_breadcrumb_to_category(category)
return [] if category.blank?

output = [category]

parent = category
while (parent = find_category(parent&.parent_id))
output << parent
end

output.compact.reverse
end

def breadcrumb_path_for(object, locale = params.fetch(:locale))
case object
when KnowledgeBase
help_root_path(locale: locale)
when KnowledgeBase::Category
help_category_path(object.translation, locale: locale)
when KnowledgeBase::Answer
help_answer_path(object.category.translation, object.translation, locale: locale)
end
end

def breadcrumb_text_for(object)
case object
when HasTranslations
object.translation.title
else
object
end
end
end
174 changes: 4 additions & 170 deletions app/helpers/knowledge_base_helper.rb
Original file line number Diff line number Diff line change
@@ -1,97 +1,11 @@
module KnowledgeBaseHelper
def render_breadcrumb_if_needed
objects = []
def effective_layout_name(knowledge_base, object)
layout_prefix = object.present? ? :category : :homepage

if @object
objects += calculate_breadcrumb_to_category(@category || @object&.parent)
end

last = if @alternative.present? && @alternative.translations.any?
Translation.translate(system_locale_via_uri&.locale, 'Alternative translations')
else
@object
end

objects << last if last.present?

return if objects.empty?

render 'knowledge_base/public/breadcrumb',
{
objects: objects,
knowledge_base: @knowledge_base
}
end

def calculate_breadcrumb_to_category(category)
output = [category]

parent = category
while (parent = find_category(parent&.parent_id))
output << parent
end

output.compact.reverse
end

def visibility_note(object)
return if !current_user&.permissions?('knowledge_base.editor')

text = visibility_text(object)

return if text.nil?

render 'knowledge_base/public/visibility_note', text: text
end

def visibility_text(object)
case object
when CanBePublished
visiblity_text_can_be_published(object)
when KnowledgeBase::Category
visiblity_text_category(object)
end
end

def visiblity_text_can_be_published(object)
case object.can_be_published_aasm.current_state
when :internal
'internal'
when :archived
'archived'
when :draft
'not published'
end
end

def visiblity_text_category(object)
return if object.public_content?

if object.self_with_children_answers.only_internal.any?
'hidden, visible only internally'
else
'hidden, no published answers'
end
knowledge_base.send("#{layout_prefix}_layout")
end

def breadcrumb_path_for(object, locale = params.fetch(:locale))
case object
when KnowledgeBase
help_root_path(locale: locale)
when KnowledgeBase::Category
help_category_path(object.translation, locale: locale)
when KnowledgeBase::Answer
help_answer_path(object.category.translation, object.translation, locale: locale)
end
end

def effective_layout_name
layout_prefix = @object.present? ? :category : :homepage

@knowledge_base.send("#{layout_prefix}_layout")
end

def custom_path_if_needed(path, knowledge_base = @knowledge_base)
def custom_path_if_needed(path, knowledge_base)
return path if knowledge_base.custom_address_matches? request

prefix = knowledge_base.custom_address_uri&.path
Expand All @@ -117,43 +31,6 @@ def edit_kb_link_label(object)
"edit #{suffix}"
end

def kb_top_bar_tag(object)
case object
when KnowledgeBase::Answer
object.can_be_published_aasm.current_state
when KnowledgeBase::Category
kb_locale = object&.translation&.kb_locale
object.public_content?(kb_locale) ? 'Visible' : 'Invisible'
when KnowledgeBase
'Published'
end
end

def kb_top_bar_color(object)
case object
when KnowledgeBase::Answer
kb_answer_top_bar_color(object)
when KnowledgeBase::Category
kb_locale = object&.translation&.kb_locale
object.public_content?(kb_locale) ? 'green' : 'yellow'
when KnowledgeBase
'green'
end
end

def kb_answer_top_bar_color(answer)
case answer.can_be_published_aasm.current_state
when :draft
'yellow'
when :internal
'blue'
when :published
'green'
when :archived
'grey'
end
end

def build_kb_link(object)
locale = params.fetch(:locale, object.translation.kb_locale)

Expand All @@ -177,47 +54,4 @@ def build_zammad_link(path)
.build(host: host, scheme: scheme, port: port, fragment: path)
.to_s
end

def kb_public_page_title
title = @knowledge_base.translation.title

if @page_title_error
suffix = case @page_title_error
when :not_found
'Not Found'
when :alternatives
'Alternative Translations'
end

title + " - #{zt(suffix)}"
elsif @object
title + " - #{@object.translation.title}"
else
title
end
end

def prepare_rich_text_links(input)
scrubber = Loofah::Scrubber.new do |node|
next if node.name != 'a'
next if !node.key? 'data-target-type'

case node['data-target-type']
when 'knowledge-base-answer'
if (translation = KnowledgeBase::Answer::Translation.find_by(id: node['data-target-id']))
path = help_answer_path(translation.answer.category.translation_preferred(translation.kb_locale),
translation,
locale: translation.kb_locale.system_locale.locale)

node['href'] = custom_path_if_needed path
else
node['href'] = '#'
end
end
end

parsed = Loofah.scrub_fragment(input, scrubber).to_s.html_safe # rubocop:disable Rails/OutputSafety

parsed
end
end
21 changes: 21 additions & 0 deletions app/helpers/knowledge_base_public_page_title_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module KnowledgeBasePublicPageTitleHelper
def kb_public_page_title(leading, trailing, exception)
[
leading&.translation&.title,
kb_public_page_title_suffix(trailing, exception)
].compact.join(' - ')
end

def kb_public_page_title_suffix(item, exception)
return item&.translation&.title if exception.blank?

suffix = case exception
when :not_found
'Not Found'
when :alternatives
'Alternative Translations'
end

zt(suffix)
end
end
25 changes: 25 additions & 0 deletions app/helpers/knowledge_base_rich_text_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module KnowledgeBaseRichTextHelper
def prepare_rich_text_links(input)
scrubber = Loofah::Scrubber.new do |node|
next if node.name != 'a'
next if !node.key? 'data-target-type'

case node['data-target-type']
when 'knowledge-base-answer'
if (translation = KnowledgeBase::Answer::Translation.find_by(id: node['data-target-id']))
path = help_answer_path(translation.answer.category.translation_preferred(translation.kb_locale),
translation,
locale: translation.kb_locale.system_locale.locale)

node['href'] = custom_path_if_needed path, translation.kb_locale.knowledge_base
else
node['href'] = '#'
end
end
end

parsed = Loofah.scrub_fragment(input, scrubber).to_s.html_safe # rubocop:disable Rails/OutputSafety

parsed
end
end
38 changes: 38 additions & 0 deletions app/helpers/knowledge_base_top_bar_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
module KnowledgeBaseTopBarHelper
def kb_top_bar_color(object)
case object
when KnowledgeBase::Answer
kb_answer_top_bar_color(object)
when KnowledgeBase::Category
kb_locale = object&.translation&.kb_locale
object.public_content?(kb_locale) ? 'green' : 'yellow'
when KnowledgeBase
'green'
end
end

def kb_answer_top_bar_color(answer)
case answer.can_be_published_aasm.current_state
when :draft
'yellow'
when :internal
'blue'
when :published
'green'
when :archived
'grey'
end
end

def kb_top_bar_tag(object)
case object
when KnowledgeBase::Answer
object.can_be_published_aasm.current_state
when KnowledgeBase::Category
kb_locale = object&.translation&.kb_locale
object.public_content?(kb_locale) ? 'Visible' : 'Invisible'
when KnowledgeBase
'Published'
end
end
end
Loading

0 comments on commit 6606aa2

Please sign in to comment.