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.


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

def initialize(model, current_ability, controller)
  @current_ability = current_ability
  @agreement_accepted = !model.new_record?
  @controller = controller
  super(model)
end

Instance Attribute Details

#agreement_acceptedObject (readonly)

Returns the value of attribute agreement_accepted


22
23
24
# File 'app/forms/hyrax/forms/work_form.rb', line 22

def agreement_accepted
  @agreement_accepted
end

#current_abilityObject

Returns the value of attribute current_ability


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

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.


98
99
100
101
# File 'app/forms/hyrax/forms/work_form.rb', line 98

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

#collections_for_selectObject

Get a list of collection id/title pairs for the select form


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

def collections_for_select
  service = Hyrax::CollectionsService.new(@controller)
  CollectionOptionsPresenter.new(service).select_options(:edit)
end

#display_additional_fields?Boolean

Do not display additional fields if there are no secondary terms

Returns:

  • (Boolean)

    display additional fields on the form?


141
142
143
# File 'app/forms/hyrax/forms/work_form.rb', line 141

def display_additional_fields?
  secondary_terms.any?
end

#find_child_workNilClass

backs the child work search element

Returns:

  • (NilClass)

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

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


84
85
86
87
88
89
90
91
92
93
94
# File 'app/forms/hyrax/forms/work_form.rb', line 84

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.


47
48
49
50
51
# File 'app/forms/hyrax/forms/work_form.rb', line 47

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


62
63
64
65
66
67
68
69
70
# File 'app/forms/hyrax/forms/work_form.rb', line 62

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


113
114
115
116
117
118
119
120
121
122
123
124
# File 'app/forms/hyrax/forms/work_form.rb', line 113

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>)

130
131
132
133
134
135
136
137
# File 'app/forms/hyrax/forms/work_form.rb', line 130

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


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

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


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

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.


146
147
148
# File 'app/forms/hyrax/forms/work_form.rb', line 146

def work_members
  model.works
end

#work_members_jsonObject


72
73
74
75
76
77
78
79
80
# File 'app/forms/hyrax/forms/work_form.rb', line 72

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