Allow user_blocks to be created for longer periods
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 15 May 2019 09:30:28 +0000 (11:30 +0200)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 15 May 2019 09:30:28 +0000 (11:30 +0200)
This avoids admins from having to manually change end periods in the database

app/helpers/user_blocks_helper.rb
app/views/user_blocks/edit.html.erb
app/views/user_blocks/new.html.erb
config/locales/en.yml
config/settings.yml

index 668eeb0..ed9997f 100644 (file)
@@ -22,4 +22,19 @@ module UserBlocksHelper
       I18n.t("user_blocks.helper.time_past", :time => friendly_date(last_time)).html_safe
     end
   end
+
+  def block_duration_in_words(duration)
+    parts = ActiveSupport::Duration.build(duration).parts
+    if duration < 1.day
+      I18n.t("user_blocks.helper.block_duration.hours", :count => parts[:hours])
+    elsif duration < 1.week
+      I18n.t("user_blocks.helper.block_duration.days", :count => parts[:days])
+    elsif duration < 1.month
+      I18n.t("user_blocks.helper.block_duration.weeks", :count => parts[:weeks])
+    elsif duration < 1.year
+      I18n.t("user_blocks.helper.block_duration.months", :count => parts[:months])
+    else
+      I18n.t("user_blocks.helper.block_duration.years", :count => parts[:years])
+    end
+  end
 end
index 82757af..6f0ea99 100644 (file)
@@ -18,7 +18,7 @@
   </p>
   <p>
     <%= label_tag "user_block_period", t(".period") %><br />
-    <%= select_tag("user_block_period", options_for_select(UserBlock::PERIODS.collect { |h| [t("user_blocks.period", :count => h), h.to_s] }, params[:user_block_period])) %>
+    <%= select_tag("user_block_period", options_for_select(UserBlock::PERIODS.collect { |h| [block_duration_in_words(h.hours), h.to_s] }, params[:user_block_period])) %>
   </p>
   <p>
     <%= f.check_box :needs_view %>
index c92fe74..aa4bf71 100644 (file)
@@ -13,7 +13,7 @@
   </p>
   <p>
     <%= label_tag "user_block_period", t(".period") %><br />
-    <%= select_tag("user_block_period", options_for_select(UserBlock::PERIODS.collect { |h| [t("user_blocks.period", :count => h), h.to_s] }, params[:user_block_period])) %>
+    <%= select_tag("user_block_period", options_for_select(UserBlock::PERIODS.collect { |h| [block_duration_in_words(h.hours), h.to_s] }, params[:user_block_period])) %>
   </p>
   <p>
     <%= f.check_box :needs_view %>
index 5699925..bc85260 100644 (file)
@@ -2311,14 +2311,27 @@ en:
       confirm: "Are you sure you wish to revoke this block?"
       revoke: "Revoke!"
       flash: "This block has been revoked."
-    period:
-      one: "1 hour"
-      other: "%{count} hours"
     helper:
       time_future: "Ends in %{time}."
       until_login: "Active until the user logs in."
       time_future_and_until_login: "Ends in %{time} and after the user has logged in."
       time_past: "Ended %{time} ago."
+      block_duration:
+        hours:
+          one: "1 hour"
+          other: "%{count} hours"
+        days:
+          one: "1 day"
+          other: "%{count} days"
+        weeks:
+          one: "1 week"
+          other: "%{count} weeks"
+        months:
+          one: "1 month"
+          other: "%{count} months"
+        years:
+          one: "1 year"
+          other: "%{count} years"
     blocks_on:
       title: "Blocks on %{name}"
       heading: "List of blocks on %{name}"
index 6031f06..988b55a 100644 (file)
@@ -42,7 +42,7 @@ api_timeout: 300
 # Timeout for web pages in seconds
 web_timeout: 30
 # Periods (in hours) which are allowed for user blocks
-user_block_periods: [0, 1, 3, 6, 12, 24, 48, 96]
+user_block_periods: [0, 1, 3, 6, 12, 24, 48, 96, 168, 336, 731, 4383, 8766, 87660]
 # Rate limit for message sending
 max_messages_per_hour: 60
 # Domain for handling message replies