Class: Hyrax::Forms::WorkForm Abstract

Inherits:
Object
  • Object
show all
Includes:
HydraEditor::Form, HydraEditor::Form::Permissions
Defined in:
app/forms/hyrax/forms/work_form.rb

Overview

This class is abstract.

Direct Known Subclasses

BatchEditForm, BatchUploadForm

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, current_ability, controller) ⇒ WorkForm

Returns a new instance of WorkForm.


37
38
39
40
41
# File 'app/forms/hyrax/forms/work_form.rb', line 37

def initialize(model, current_ability, controller)
  @current_ability = current_ability
  @controller = controller
  super(model)
end

Instance Attribute Details

#current_abilityObject

Returns the value of attribute current_ability


9
10
11
# File 'app/forms/hyrax/forms/work_form.rb', line 9

def current_ability
  @current_ability
end

Class Method Details

.build_permitted_paramsArray

This describes the parameters we are expecting to receive from the client

Returns:

  • (Array)

    a list of parameters used by sanitize_params


170
171
172
173
174
175
176
177
178
179
180
181
# File 'app/forms/hyrax/forms/work_form.rb', line 170

def self.build_permitted_params
  super + [
    :on_behalf_of,
    :version,
    :add_works_to_collection,
    {
      based_near_attributes: [:id, :_destroy],
      member_of_collections_attributes: [:id, :_destroy],
      work_members_attributes: [:id, :_destroy]
    }
  ]
end

.sanitize_params(form_params) ⇒ Object

Sanitize the parameters coming from the form. This ensures that the client doesn't send us any more parameters than we expect. In particular we are discarding any access grant parameters for works that are going into a mediated deposit workflow.


161
162
163
164
165
166
# File 'app/forms/hyrax/forms/work_form.rb', line 161

def self.sanitize_params(form_params)
  admin_set_id = form_params[:admin_set_id]
  return super if admin_set_id && workflow_for(admin_set_id: admin_set_id).allows_access_grant?
  params_without_permissions = permitted_params.reject { |arg| arg.respond_to?(:key?) && arg.key?(:permissions_attributes) }
  form_params.permit(*params_without_permissions)
end

Instance Method Details

#[](key) ⇒ Object

Returns the value of the form field.

Parameters:

  • key (Symbol)

    the field to read

Returns:

  • the value of the form field.


105
106
107
108
# File 'app/forms/hyrax/forms/work_form.rb', line 105

def [](key)
  return model.member_of_collection_ids if key == :member_of_collection_ids
  super
end

#agreement_accepted?Boolean Also known as: agreement_accepted

Returns whether the deposit agreement has already been accepted.

Returns:

  • (Boolean)

    whether the deposit agreement has already been accepted


46
47
48
# File 'app/forms/hyrax/forms/work_form.rb', line 46

def agreement_accepted?
  !model.new_record?
end

#display_additional_fields?Boolean

Do not display additional fields if there are no secondary terms

Returns:

  • (Boolean)

    display additional fields on the form?


148
149
150
# File 'app/forms/hyrax/forms/work_form.rb', line 148

def display_additional_fields?
  secondary_terms.any?
end

#find_child_workNilClass

backs the child work search element

Returns:

  • (NilClass)

67
# File 'app/forms/hyrax/forms/work_form.rb', line 67

def find_child_work; end

#initialize_field(key) ⇒ Object

The value for some fields should not be set to the defaults (['']) because it should be an empty array instead


91
92
93
94
95
96
97
98
99
100
101
# File 'app/forms/hyrax/forms/work_form.rb', line 91

def initialize_field(key)
  return if [:embargo_release_date, :lease_expiration_date].include?(key)
  # rubocop:disable Lint/AssignmentInCondition
  if class_name = model_class.properties[key.to_s].try(:class_name)
    # Initialize linked properties such as based_near
    self[key] += [class_name.new]
  else
    super
  end
  # rubocop:enable Lint/AssignmentInCondition
end

#member_of_collectionsObject

when the add_works_to_collection parameter is set, they mean to create a new work and add it to that collection.


54
55
56
57
58
# File 'app/forms/hyrax/forms/work_form.rb', line 54

def member_of_collections
  base = model.member_of_collections
  return base unless @controller.params[:add_works_to_collection]
  base + [::Collection.find(@controller.params[:add_works_to_collection])]
end

#member_of_collections_jsonObject


69
70
71
72
73
74
75
76
77
# File 'app/forms/hyrax/forms/work_form.rb', line 69

def member_of_collections_json
  member_of_collections.map do |coll|
    {
      id: coll.id,
      label: coll.to_s,
      path: @controller.url_for(coll)
    }
  end.to_json
end

#primary_termsEnumerable<Symbol>

Fields that are automatically drawn on the page above the fold

Returns:

  • (Enumerable<Symbol>)

    symbols representing each primary term


120
121
122
123
124
125
126
127
128
129
130
131
# File 'app/forms/hyrax/forms/work_form.rb', line 120

def primary_terms
  primary = (required_fields & terms)

  (required_fields - primary).each do |missing|
    Rails.logger.warn("The form field #{missing} is configured as a " \
                      'required field, but not as a term. This can lead ' \
                      'to unexpected behavior. Did you forget to add it ' \
                      "to `#{self.class}#terms`?")
  end

  primary
end

#secondary_termsEnumerable<Symbol>

Fields that are automatically drawn on the page below the fold

Returns:

  • (Enumerable<Symbol>)

137
138
139
140
141
142
143
144
# File 'app/forms/hyrax/forms/work_form.rb', line 137

def secondary_terms
  terms - primary_terms -
    [:files, :visibility_during_embargo, :embargo_release_date,
     :visibility_after_embargo, :visibility_during_lease,
     :lease_expiration_date, :visibility_after_lease, :visibility,
     :thumbnail_id, :representative_id, :rendering_ids, :ordered_member_ids,
     :member_of_collection_ids, :in_works_ids, :admin_set_id]
end

#select_filesHash

The possible values for the representative_id dropdown

Returns:

  • (Hash)

    All file sets in the collection, file.to_s is the key, file.id is the value


112
113
114
# File 'app/forms/hyrax/forms/work_form.rb', line 112

def select_files
  Hash[file_presenters.map { |file| [file.to_s, file.id] }]
end

#versionString

Returns an etag representing the current version of this form.

Returns:

  • (String)

    an etag representing the current version of this form


61
62
63
# File 'app/forms/hyrax/forms/work_form.rb', line 61

def version
  model.etag
end

#work_membersArray

Returns a list of works that are members of the primary work on this form.

Returns:

  • (Array)

    a list of works that are members of the primary work on this form.


153
154
155
# File 'app/forms/hyrax/forms/work_form.rb', line 153

def work_members
  model.works
end

#work_members_jsonObject


79
80
81
82
83
84
85
86
87
# File 'app/forms/hyrax/forms/work_form.rb', line 79

def work_members_json
  work_members.map do |child|
    {
      id: child.id,
      label: child.to_s,
      path: @controller.url_for(child)
    }
  end.to_json
end