diff --git a/app/helpers/works_helper.rb b/app/helpers/works_helper.rb
index da6bd272e84..300a9eafab2 100644
--- a/app/helpers/works_helper.rb
+++ b/app/helpers/works_helper.rb
@@ -148,6 +148,11 @@ def related_work_note(related_work, relation, download: false)
language: language,
locale: default_locale,
creator_link: creator_link)
+ elsif related_work.respond_to?(:hidden_by_admin?) && related_work.hidden_by_admin?
+ t(".#{relation}.hidden_html",
+ language: language,
+ locale: default_locale,
+ creator_link: creator_link)
else
t(".#{relation}.revealed_html",
language: language,
diff --git a/app/views/downloads/_download_afterword.html.erb b/app/views/downloads/_download_afterword.html.erb
index 5ae55c1611c..5bdcd98be66 100644
--- a/app/views/downloads/_download_afterword.html.erb
+++ b/app/views/downloads/_download_afterword.html.erb
@@ -10,6 +10,7 @@
<% end %>
+ <%# i18n-tasks-use t("downloads.download_afterword.inspired_by.hidden_html") %>
<%# i18n-tasks-use t("downloads.download_afterword.inspired_by.restricted_html") %>
<%# i18n-tasks-use t("downloads.download_afterword.inspired_by.revealed_html") %>
<%# i18n-tasks-use t("downloads.download_afterword.inspired_by.unrevealed") %>
diff --git a/app/views/downloads/_download_preface.html.erb b/app/views/downloads/_download_preface.html.erb
index 08cf5c3d96b..bc24b96e56d 100644
--- a/app/views/downloads/_download_preface.html.erb
+++ b/app/views/downloads/_download_preface.html.erb
@@ -61,12 +61,15 @@
<% end %>
<% end %>
+ <%# i18n-tasks-use t("downloads.download_preface.translated_to.hidden_html") %>
<%# i18n-tasks-use t("downloads.download_preface.translated_to.restricted_html") %>
<%# i18n-tasks-use t("downloads.download_preface.translated_to.revealed_html") %>
<%# i18n-tasks-use t("downloads.download_preface.translated_to.unrevealed_html") %>
+ <%# i18n-tasks-use t("downloads.download_preface.inspired_by.hidden_html") %>
<%# i18n-tasks-use t("downloads.download_preface.inspired_by.restricted_html") %>
<%# i18n-tasks-use t("downloads.download_preface.inspired_by.revealed_html") %>
<%# i18n-tasks-use t("downloads.download_preface.inspired_by.unrevealed") %>
+ <%# i18n-tasks-use t("downloads.download_preface.translation_of.hidden_html") %>
<%# i18n-tasks-use t("downloads.download_preface.translation_of.restricted_html") %>
<%# i18n-tasks-use t("downloads.download_preface.translation_of.revealed_html") %>
<%# i18n-tasks-use t("downloads.download_preface.translation_of.unrevealed") %>
diff --git a/app/views/works/_work_approved_children.html.erb b/app/views/works/_work_approved_children.html.erb
index 9f7ee8f430b..7f40285c521 100644
--- a/app/views/works/_work_approved_children.html.erb
+++ b/app/views/works/_work_approved_children.html.erb
@@ -3,6 +3,7 @@
<%= t(".inspired_by.title") %>:
+ <%# i18n-tasks-use t("works.work_approved_children.inspired_by.hidden_html") %>
<%# i18n-tasks-use t("works.work_approved_children.inspired_by.restricted_html") %>
<%# i18n-tasks-use t("works.work_approved_children.inspired_by.revealed_html") %>
<%# i18n-tasks-use t("works.work_approved_children.inspired_by.unrevealed") %>
diff --git a/app/views/works/_work_header_notes.html.erb b/app/views/works/_work_header_notes.html.erb
index a81d38d84ba..9dfbb63b30b 100644
--- a/app/views/works/_work_header_notes.html.erb
+++ b/app/views/works/_work_header_notes.html.erb
@@ -11,6 +11,7 @@
<% end %>
<%# translations %>
+ <%# i18n-tasks-use t("works.work_header_notes.translated_to.hidden_html") %>
<%# i18n-tasks-use t("works.work_header_notes.translated_to.restricted_html") %>
<%# i18n-tasks-use t("works.work_header_notes.translated_to.revealed_html") %>
<%# i18n-tasks-use t("works.work_header_notes.translated_to.unrevealed_html") %>
@@ -25,9 +26,11 @@
<% end %>
<%# parent works %>
+ <%# i18n-tasks-use t("works.work_header_notes.translation_of.hidden_html") %>
<%# i18n-tasks-use t("works.work_header_notes.translation_of.restricted_html") %>
<%# i18n-tasks-use t("works.work_header_notes.translation_of.revealed_html") %>
<%# i18n-tasks-use t("works.work_header_notes.translation_of.unrevealed") %>
+ <%# i18n-tasks-use t("works.work_header_notes.inspired_by.hidden_html") %>
<%# i18n-tasks-use t("works.work_header_notes.inspired_by.restricted_html") %>
<%# i18n-tasks-use t("works.work_header_notes.inspired_by.revealed_html") %>
<%# i18n-tasks-use t("works.work_header_notes.inspired_by.unrevealed") %>
diff --git a/config/locales/views/en.yml b/config/locales/views/en.yml
index 630a3291f93..cc2521bb64d 100644
--- a/config/locales/views/en.yml
+++ b/config/locales/views/en.yml
@@ -937,6 +937,7 @@ en:
comment: drop by the Archive and comment
end_notes: End Notes
inspired_by:
+ hidden_html: "[Hidden Work] by %{creator_link}"
restricted_html: "[Restricted Work] by %{creator_link}"
revealed_html: "%{work_link} by %{creator_link}"
title: Works inspired by this one
@@ -960,6 +961,7 @@ en:
end_notes_with_work_notes: more notes
end_notes_without_work_notes: notes
inspired_by:
+ hidden_html: Inspired by [Hidden Work] by %{creator_link}
restricted_html: Inspired by [Restricted Work] by %{creator_link}
revealed_html: Inspired by %{work_link} by %{creator_link}
unrevealed: Inspired by a work in an unrevealed collection
@@ -975,10 +977,12 @@ en:
summary: Summary
tag_type: "%{tag_type}:"
translated_to:
+ hidden_html: 'Translation into %{language} available: [Hidden Work] by %{creator_link}'
restricted_html: 'Translation into %{language} available: [Restricted Work] by %{creator_link}'
revealed_html: 'Translation into %{language} available: %{work_link} by %{creator_link}'
unrevealed_html: 'Translation into %{language} available: A work in an unrevealed collection'
translation_of:
+ hidden_html: A translation of [Hidden Work] by %{creator_link}
restricted_html: A translation of [Restricted Work] by %{creator_link}
revealed_html: A translation of %{work_link} by %{creator_link}
unrevealed: A translation of a work in an unrevealed collection
@@ -3327,6 +3331,7 @@ en:
works_translation_link_help_title: Translation link
work_approved_children:
inspired_by:
+ hidden_html: "[Hidden Work] by %{creator_link}"
restricted_html: "[Restricted Work] by %{creator_link} (Log in to access.)"
revealed_html: "%{work_link} by %{creator_link}"
title: Works inspired by this one
@@ -3348,6 +3353,7 @@ en:
heading: Download
work_header_notes:
inspired_by:
+ hidden_html: Inspired by [Hidden Work] by %{creator_link}
other_works_inspired_by_this_one: other works inspired by this one
restricted_html: Inspired by [Restricted Work] by %{creator_link} (Log in to access.)
revealed_html: Inspired by %{work_link} by %{creator_link}
@@ -3359,10 +3365,12 @@ en:
notes: notes
related_works_html: "(See the end of the work for %{related_works_link}.)"
translated_to:
+ hidden_html: 'Translation into %{language} available: [Hidden Work] by %{creator_link}'
restricted_html: 'Translation into %{language} available: [Restricted Work] by %{creator_link} (Log in to access.)'
revealed_html: 'Translation into %{language} available: %{work_link} by %{creator_link}'
unrevealed_html: 'Translation into %{language} available: A work in an unrevealed collection'
translation_of:
+ hidden_html: A translation of [Hidden Work] by %{creator_link}
restricted_html: A translation of [Restricted Work] by %{creator_link} (Log in to access.)
revealed_html: A translation of %{work_link} by %{creator_link}
unrevealed: A translation of a work in an unrevealed collection
diff --git a/features/works/work_download.feature b/features/works/work_download.feature
index 5ae172083f7..fe0c0717caa 100644
--- a/features/works/work_download.feature
+++ b/features/works/work_download.feature
@@ -388,7 +388,7 @@ Feature: Download a work
And a related work has been posted and approved
And I am logged in as "remixer"
And I lock the work "Followup"
- When I am logged out
+ When I log out
And I view the work "Worldbuilding"
And I follow "HTML"
Then I should see "[Restricted Work] by remixer"
@@ -396,7 +396,7 @@ Feature: Download a work
And I lock the work "Worldbuilding"
And I am logged in as "remixer"
And I unlock the work "Followup"
- And I am logged out
+ And I log out
And I view the work "Followup"
And I follow "HTML"
Then I should see "Inspired by [Restricted Work] by inspiration"
@@ -431,11 +431,65 @@ Feature: Download a work
And a translation has been posted and approved
And I am logged in as "translator"
And I lock the work "Worldbuilding Translated"
- When I am logged out
+ When I log out
And I view the work "Worldbuilding"
And I follow "HTML"
Then I should see "[Restricted Work] by translator"
+ Scenario: Hidden inspired and inspiring works' titles should be hidden in downloads
+ Given I have related works setup
+ And a related work has been posted and approved
+ When I am logged in as a "policy_and_abuse" admin
+ And I hide the work "Followup"
+ When I log out
+ And I view the work "Worldbuilding"
+ And I follow "HTML"
+ Then I should see "[Hidden Work] by remixer"
+ When I am logged in as a "policy_and_abuse" admin
+ And I unhide the work "Followup"
+ And I hide the work "Worldbuilding"
+ When I log out
+ And I view the work "Followup"
+ And I follow "HTML"
+ Then I should see "[Hidden Work] by inspiration"
+
+ Scenario: Hidden translations and translated works' titles should be hidden in downloads
+ Given I have related works setup
+ And a translation has been posted and approved
+ When I am logged in as a "policy_and_abuse" admin
+ And I hide the work "Worldbuilding Translated"
+ When I log out
+ And I view the work "Worldbuilding"
+ And I follow "HTML"
+ Then I should see "[Hidden Work] by translator"
+ When I am logged in as a "policy_and_abuse" admin
+ And I unhide the work "Worldbuilding Translated"
+ And I hide the work "Worldbuilding"
+ When I log out
+ And I view the work "Worldbuilding Translated"
+ And I follow "HTML"
+ Then I should see "[Hidden Work] by inspiration"
+
+ Scenario: Downloads should update when works get hidden and unhidden
+ Given I have related works setup
+ And a related work has been posted and approved
+ When I log out
+ And I view the work "Worldbuilding"
+ And I follow "HTML"
+ Then I should see "Followup by remixer"
+ When I am logged in as a "policy_and_abuse" admin
+ And I hide the work "Followup"
+ When I log out
+ And I view the work "Worldbuilding"
+ And I follow "HTML"
+ Then I should see "[Hidden Work] by remixer"
+ When I am logged in as a "policy_and_abuse" admin
+ And I unhide the work "Followup"
+ When I log out
+ And I view the work "Worldbuilding"
+ And I follow "HTML"
+ Then I should see "Followup by remixer"
+
Scenario: Download multi-chapter work with mixed chapter titles (one without, one with)
Given I am logged in as "myname"
diff --git a/features/works/work_related.feature b/features/works/work_related.feature
index b68699c495c..d8d6c7af851 100644
--- a/features/works/work_related.feature
+++ b/features/works/work_related.feature
@@ -335,17 +335,17 @@ Scenario: Restricted works listed as Inspiration show up [Restricted] for guests
And a related work has been posted and approved
When I am logged in as "remixer"
And I lock the work "Followup"
- When I am logged out
+ When I log out
And I view the work "Worldbuilding"
Then I should see "[Restricted Work] by remixer"
When I am logged in as "remixer"
And I unlock the work "Followup"
- When I am logged out
+ When I log out
And I view the work "Followup"
Then I should see "Inspired by Worldbuilding by inspiration"
When I am logged in as "inspiration"
And I lock the work "Worldbuilding"
- When I am logged out
+ When I log out
And I view the work "Followup"
Then I should see "Inspired by [Restricted Work] by inspiration"
@@ -368,11 +368,41 @@ Scenario: Anonymous works listed as inspiration should have links to the authors
When I follow "remixer" within ".afterword .children"
Then I should be on the dashboard page for user "remixer" with pseud "remixer"
- When I am logged out
+ When I log out
And I view the work "Worldbuilding"
Then I should see "Works inspired by this one: Followup by Anonymous"
And I should not see "remixer" within ".afterword .children"
+Scenario: Hidden inspired and inspiring works should show up as [Hidden]
+ Given I have related works setup
+ And a related work has been posted and approved
+ When I am logged in as a "policy_and_abuse" admin
+ And I hide the work "Followup"
+ When I log out
+ And I view the work "Worldbuilding"
+ Then I should see "[Hidden Work] by remixer"
+ When I am logged in as a "policy_and_abuse" admin
+ And I unhide the work "Followup"
+ And I hide the work "Worldbuilding"
+ When I log out
+ And I view the work "Followup"
+ Then I should see "[Hidden Work] by inspiration"
+
+Scenario: Hidden translations and translated works should show up as [Hidden]
+ Given I have related works setup
+ And a translation has been posted and approved
+ When I am logged in as a "policy_and_abuse" admin
+ And I hide the work "Worldbuilding Translated"
+ When I log out
+ And I view the work "Worldbuilding"
+ Then I should see "[Hidden Work] by translator"
+ When I am logged in as a "policy_and_abuse" admin
+ And I unhide the work "Worldbuilding Translated"
+ And I hide the work "Worldbuilding"
+ When I log out
+ And I view the work "Worldbuilding Translated"
+ Then I should see "[Hidden Work] by inspiration"
+
Scenario: When a user is notified that a co-authored work has been inspired by a work they posted,
the e-mail should link to each author's URL instead of showing escaped HTML
Given I have related works setup