sferik/rails_admin

View on GitHub
app/views/rails_admin/main/export.html.erb

Summary

Maintainability
Test Coverage
<% params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token) %>
<% visible_fields = @model_config.export.with(view: self, object: @abstract_model.model.new, controller: self.controller).visible_fields %>
<%= form_tag export_path(params.merge(all: true)), method: 'post', class: "main", data: {turbo: false} do %>
  <input name="send_data" type="hidden" value="true" />
  <fieldset id="fields_to_export" class="mb-3">
    <legend>
      <i class="fas fa-chevron-down"></i>
      <%= t('admin.export.select') %>
    </legend>
    <div class="form-group control-group">
      <div class="col-sm-12">
        <div class="checkbox">
          <label for="check_all">
            <%= check_box_tag 'all', 'all', true, { id: 'check_all' } %>
            <b>
              <%= t('admin.export.select_all_fields') %>
            </b>
          </label>
        </div>
      </div>
    </div>
    <div class="control-group row">
      <div class="col-sm-12">
        <div class="card bg-light my-2 reverse-selection" rel="tooltip" role="button" title="<%= t('admin.export.click_to_reverse_selection') %>">
          <div class="card-body p-2">
            <b><%= t('admin.export.fields_from', name: @model_config.label_plural.downcase) %></b>
          </div>
        </div>
        <div class="controls">
          <div class="row">
            <% visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field| %>
              <% list = field.virtual? ? 'methods' : 'only' %>
              <div class="checkbox col-sm-3 my-1">
                <% if field.association? && field.association.polymorphic? %>
                  <label for="schema_<%= list %>_<%= field.method_name %>">
                    <%= check_box_tag "schema[#{list}][]", field.method_name, true, { id: "schema_#{list}_#{field.method_name}" } %>
                    <%= field.label + " [id]" %>
                  </label>
                  <% polymorphic_type_column_name = @abstract_model.properties.detect {|p| field.association.foreign_type == p.name }.name %>
                  <label for="schema_<%= list %>_<%= polymorphic_type_column_name %>">
                    <%= check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { id: "schema_#{list}_#{polymorphic_type_column_name}" } %>
                    <%= field.label + " [type]" %>
                  </label>
                <% else %>
                  <label for="schema_<%= list %>_<%= field.name %>">
                    <%= check_box_tag "schema[#{list}][]", field.name, true, { id: "schema_#{list}_#{field.name}" } %>
                    <%= field.label %>
                  </label>
                <% end %>
              </div>
            <% end %>
          </div>
        </div>
      </div>
    </div>
    <% visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field| %>
      <% fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? } %>
      <div class="control-group row">
        <div class="col-sm-12">
          <div class="card bg-light my-2 reverse-selection" rel="tooltip" role="button" title="<%= t('admin.export.click_to_reverse_selection') %>">
            <div class="card-body p-2">
              <b><%= t('admin.export.fields_from_associated', name: field.label.downcase) %></b>
            </div>
          </div>
          <div class="controls">
            <div class="row">
              <% fields.each do |associated_model_field| %>
                <% list = associated_model_field.virtual? ? 'methods' : 'only' %>
                <div class="checkbox col-sm-3 my-1">
                  <label for="schema_include_<%= field.name %>_<%= list %>_<%= associated_model_field.name %>">
                    <%= check_box_tag "schema[include][#{field.name}][#{list}][]", associated_model_field.name, true, { id: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}" } %>
                    <%= associated_model_field.label %>
                  </label>
                </div>
              <% end %>
            </div>
          </div>
        </div>
      </div>
    <% end %>
  </fieldset>
  <fieldset>
    <legend>
      <i class="fas fa-chevron-down"></i>
      <%= t('admin.export.options_for', name: 'csv') %>
    </legend>
    <div class="control-group row">
      <% guessed_encoding = @abstract_model.encoding %>
      <label class="col-sm-2 col-form-label text-md-end" for="csv_options_encoding_to">
        <%= t('admin.export.csv.encoding_to') %>
      </label>
      <div class="col-sm-10 controls">
        <div class="w-50">
          <%= select_tag 'csv_options[encoding_to]', options_for_select(Encoding.name_list.sort), include_blank: true, placeholder: t('admin.misc.search'), :'data-enumeration' => true %>
        </div>
        <p class="form-text">
          <%= t('admin.export.csv.encoding_to_help', name: guessed_encoding) %>
        </p>
      </div>
    </div>
    <div class="control-group row">
      <label class="col-sm-2 col-form-label text-md-end" for="csv_options_skip_header">
        <%= t('admin.export.csv.skip_header') %>
      </label>
      <div class="col-sm-10 controls">
        <div class="col-form-label">
          <label>
            <%= check_box_tag 'csv_options[skip_header]', 'true' %>
          </label>
        </div>
        <p class="form-text">
          <%= t('admin.export.csv.skip_header_help') %>
        </p>
      </div>
    </div>
    <div class="control-group row">
      <label class="col-sm-2 col-form-label text-md-end" for="csv_options_generator_col_sep">
        <%= t('admin.export.csv.col_sep') %>
      </label>
      <div class="col-sm-10 controls">
        <div class="w-50">
          <%= select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), "<comma> ','" => ',', "<semicolon> ';'" => ';', '<tabs>' => "'\t'" }), placeholder: t('admin.misc.search'), :'data-enumeration' => true %>
        </div>
        <p class="form-text">
          <%= t('admin.export.csv.col_sep_help', value: t('admin.export.csv.default_col_sep')) %>
        </p>
      </div>
    </div>
  </fieldset>
  <div class="form-actions row justify-content-end mb-3">
    <div class="col-sm-offset-2 col-sm-10">
      <input name="return_to" type="<%= :hidden %>" value="<%= (params[:return_to].presence || request.referer) %>" />
      <button class="btn btn-primary" name="csv" type="submit">
        <i class="fas fa-check"></i>
        <%= t("admin.export.confirmation", name: 'csv') %>
      </button>
      <button class="btn btn-info" name="json" type="submit">
        <%= t("admin.export.confirmation", name: 'json') %>
      </button>
      <button class="btn btn-info" name="xml" type="submit">
        <%= t("admin.export.confirmation", name: 'xml') %>
      </button>
      <button class="btn btn-light" name="_continue" type="submit">
        <i class="fas fa-times"></i>
        <%= t("admin.form.cancel") %>
      </button>
    </div>
  </div>
<% end %>