diff --git a/app/models/decidim/anonymous_codes/group.rb b/app/models/decidim/anonymous_codes/group.rb
index 210c9e6..7d63089 100644
--- a/app/models/decidim/anonymous_codes/group.rb
+++ b/app/models/decidim/anonymous_codes/group.rb
@@ -19,7 +19,11 @@ def self.for(organization)
end
def expired?
- expires_at.present? && expires_at < Time.current
+ expires? && expires_at < Time.current
+ end
+
+ def expires?
+ expires_at.present?
end
end
end
diff --git a/app/views/decidim/anonymous_codes/admin/export/_token_tr.html.erb b/app/views/decidim/anonymous_codes/admin/export/_token_tr.html.erb
new file mode 100644
index 0000000..0f75985
--- /dev/null
+++ b/app/views/decidim/anonymous_codes/admin/export/_token_tr.html.erb
@@ -0,0 +1,7 @@
+
+ <%= token[:token] %> |
+ <%= token[:resource_url] %> |
+ <%= t("booleans.#{token[:available]}") %> |
+ <%= t("booleans.#{token[:used]}") %> |
+ <%= token[:usage_count] %> |
+
diff --git a/app/views/decidim/anonymous_codes/admin/export/tokens_pdf.html.erb b/app/views/decidim/anonymous_codes/admin/export/tokens_pdf.html.erb
new file mode 100644
index 0000000..40ef6a2
--- /dev/null
+++ b/app/views/decidim/anonymous_codes/admin/export/tokens_pdf.html.erb
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ <%= t("token", scope: "decidim.anonymous_codes.tokens_serializer") %> |
+ <%= t("resource_url", scope: "decidim.anonymous_codes.tokens_serializer") %> |
+ <%= t("available", scope: "decidim.anonymous_codes.tokens_serializer") %> |
+ <%= t("used", scope: "decidim.anonymous_codes.tokens_serializer") %> |
+ <%= t("usage_count", scope: "decidim.anonymous_codes.tokens_serializer") %> |
+
+
+
+ <%= render partial: "decidim/anonymous_codes/admin/export/token_tr", collection: collection, locals: { code_group: code_group }, as: :token %>
+
+
+
diff --git a/app/views/layouts/decidim/anonymous_codes/admin/export/pdf.html.erb b/app/views/layouts/decidim/anonymous_codes/admin/export/pdf.html.erb
new file mode 100644
index 0000000..cdb3c3f
--- /dev/null
+++ b/app/views/layouts/decidim/anonymous_codes/admin/export/pdf.html.erb
@@ -0,0 +1,29 @@
+
+
+
+
+
+ <%= @title %>
+
+
+
+ <%= yield %>
+
+
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 73e8381..302ebaa 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -8,6 +8,10 @@ en:
max_uses_exceeded: The code has already been used the maximum number of
times.
decidim:
+ admin:
+ exports:
+ formats:
+ AnonymousTokensPDF: PDF
anonymous_codes:
admin:
actions:
@@ -51,6 +55,12 @@ en:
back: Back to groups
new_codes_button: Generate new codes
title: Codes for group %{group}
+ export:
+ tokens_pdf:
+ expires: Expires? %{expires}
+ expires_at: 'Expires at: %{expires_at}'
+ tokens_for: Tokens for "%{group}"
+ totals: "%{total} total tokens"
exports:
all_tokens: All tokens
menu_title: Access Codes
@@ -75,4 +85,10 @@ en:
label: Code
submit: Continue
title: Form restricted
+ tokens_serializer:
+ available: Available?
+ resource_url: Resource URL
+ token: Code
+ usage_count: Num. of uses
+ used: Used?
used_code: The introduced code has already been used. Please try again.
diff --git a/lib/decidim/anonymous_codes.rb b/lib/decidim/anonymous_codes.rb
index 437e20b..bbc0c51 100644
--- a/lib/decidim/anonymous_codes.rb
+++ b/lib/decidim/anonymous_codes.rb
@@ -18,7 +18,7 @@ module AnonymousCodes
end
config_accessor :export_formats do
- ENV.fetch("ANONYMOUS_CODES_EXPORT_FORMATS", "CSV JSON Excel").split
+ ENV.fetch("ANONYMOUS_CODES_EXPORT_FORMATS", "CSV JSON Excel AnonymousTokensPDF").split
end
def self.token_generator(length = nil)
@@ -31,4 +31,9 @@ def self.token_generator(length = nil)
end
end
end
+
+ module Exporters
+ autoload :AnonymousTokensPDF, "decidim/exporters/anonymous_tokens_pdf"
+ autoload :AnonymousTokensPDFControllerHelper, "decidim/exporters/anonymous_tokens_pdf_controller_helper"
+ end
end
diff --git a/lib/decidim/exporters/anonymous_tokens_pdf.rb b/lib/decidim/exporters/anonymous_tokens_pdf.rb
new file mode 100644
index 0000000..298585e
--- /dev/null
+++ b/lib/decidim/exporters/anonymous_tokens_pdf.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require "wicked_pdf"
+
+module Decidim
+ module Exporters
+ # Inherits from abstract PDF exporter. This class is used to set
+ # the parameters used to create a PDF when exporting Survey Answers.
+ #
+ class AnonymousTokensPDF < PDF
+ def controller
+ @controller ||= AnonymousTokensPDFControllerHelper.new
+ end
+
+ def template
+ "decidim/anonymous_codes/admin/export/tokens_pdf"
+ end
+
+ def layout
+ "decidim/anonymous_codes/admin/export/pdf"
+ end
+
+ def locals
+ {
+ code_group: collection&.first&.group,
+ collection: collection.map { |token| Decidim::AnonymousCodes::TokenSerializer.new(token).serialize }
+ }
+ end
+ end
+ end
+end
diff --git a/lib/decidim/exporters/anonymous_tokens_pdf_controller_helper.rb b/lib/decidim/exporters/anonymous_tokens_pdf_controller_helper.rb
new file mode 100644
index 0000000..1ef37a9
--- /dev/null
+++ b/lib/decidim/exporters/anonymous_tokens_pdf_controller_helper.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+module Decidim
+ module Exporters
+ # rubocop: disable Rails/ApplicationController
+ # A dummy controller to render views while exporting questionnaires
+ class AnonymousTokensPDFControllerHelper < ActionController::Base
+ # rubocop: enable Rails/ApplicationController
+ helper Decidim::TranslationsHelper
+ end
+ end
+end