dtext links: add search options for finding broken links.

Add "Wiki Exists?" and "Tag Exists?" options to /dtext_links. These can
be used to find links to wikis or tags that don't exist (broken links).
This commit is contained in:
evazion
2019-10-23 21:23:52 -05:00
parent 812cabfc07
commit 97a758dec6
3 changed files with 44 additions and 1 deletions

View File

@@ -24,10 +24,38 @@ class DtextLink < ApplicationRecord
where(model_id: WikiPage.search(params).reorder(nil))
end
def self.linked_wiki_exists(exists = true)
dtext_links = DtextLink.arel_table
wiki_pages = WikiPage.arel_table
wiki_exists = wiki_pages.project(1).where(wiki_pages[:is_deleted].eq(false)).where(wiki_pages[:title].eq(dtext_links[:link_target])).exists
if exists
where(link_type: :wiki_link).where(wiki_exists)
else
where(link_type: :wiki_link).where.not(wiki_exists)
end
end
def self.linked_tag_exists(exists = true)
dtext_links = DtextLink.arel_table
tags = Tag.arel_table
tag_exists = tags.project(1).where(tags[:post_count].gt(0)).where(tags[:name].eq(dtext_links[:link_target])).exists
if exists
where(link_type: :wiki_link).where(tag_exists)
else
where(link_type: :wiki_link).where.not(tag_exists)
end
end
def self.search(params)
q = super
q = q.search_attributes(params, :model_type, :model_id, :link_type, :link_target)
q = q.model_matches(params[:model])
q = q.linked_wiki_exists(params[:linked_wiki_exists].truthy?) if params[:linked_wiki_exists].present?
q = q.linked_tag_exists(params[:linked_tag_exists].truthy?) if params[:linked_tag_exists].present?
q.apply_default_order(params)
end

View File

@@ -52,6 +52,10 @@ class WikiPage < ApplicationRecord
end
end
def tag_matches(params)
where(title: Tag.search(params).select(:name).reorder(nil))
end
def default_order
order(updated_at: :desc)
end
@@ -70,6 +74,10 @@ class WikiPage < ApplicationRecord
q = q.other_names_match(params[:other_names_match])
end
if params[:tag].present?
q = q.tag_matches(params[:tag])
end
if params[:hide_deleted].to_s.truthy?
q = q.where("is_deleted = false")
end

View File

@@ -5,7 +5,14 @@
<%= fa.input :title, label: "Wiki", hint: "Use * for wildcard", input_html: { value: params.dig(:search, :model, :title), "data-autocomplete": "wiki-page" } %>
<% end %>
<%= f.input :link_target_ilike, label: "Link", hint: "Use * for wildcard", input_html: { value: params[:search][:link_target_ilike], data: { autocomplete: "wiki-page" } } %>
<%= f.input :link_type, label: "Type", collection: [["Wiki", "0"], ["External", "1"]], include_blank: true, selected: params[:search][:link_type] %>
<%= f.simple_fields_for :model do |fm| %>
<%= fm.simple_fields_for :tag do |ft| %>
<%= ft.input :category, label: "Wiki Type", collection: TagCategory.canonical_mapping.to_a, include_blank: true, selected: params.dig(:search, :model, :tag, :category) %>
<% end %>
<% end %>
<%= f.input :link_type, label: "Link Type", collection: [["Wiki", "0"], ["External", "1"]], include_blank: true, selected: params[:search][:link_type] %>
<%= f.input :linked_wiki_exists, label: "Wiki Exists?", collection: ["Yes", "No"], include_blank: true, selected: params[:search][:linked_wiki_exists] %>
<%= f.input :linked_tag_exists, label: "Tag Exists?", collection: ["Yes", "No"], include_blank: true, selected: params[:search][:linked_tag_exists] %>
<%= f.submit "Search" %>
<% end %>