Class: TaxonNamesController

Inherits:
ApplicationController show all
Includes:
DataControllerConfiguration::ProjectDataControllerConfiguration
Defined in:
app/controllers/taxon_names_controller.rb

Instance Method Summary collapse

Methods included from DataControllerConfiguration::ProjectDataControllerConfiguration

#annotator_params

Methods included from RequestType

#json_request?

Methods included from LogRecent

#log_user_recent_route

Methods included from Cookies

#digest_cookie, #digested_cookie_exists?

Methods included from Whitelist

#whitelist_constantize

Methods included from ProjectsHelper

#invalid_object, #project_link, #project_matches, #project_tag, #projects_list, #projects_search_form

Methods included from Api::Intercept

#intercept_api

Instance Method Details

#api_indexObject

GET /api/v1/taxon_names



224
225
226
227
228
229
230
# File 'app/controllers/taxon_names_controller.rb', line 224

def api_index
  @taxon_names = Queries::TaxonName::Filter.new(api_params).all
    .where(project_id: sessions_current_project_id)
    .order('taxon_names.id')
    .page(params[:page]).per(params[:per])
  render '/taxon_names/api/v1/index'
end

#api_paramsObject (private)



315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
# File 'app/controllers/taxon_names_controller.rb', line 315

def api_params
  params.permit(
    :name, :author, :year,
    :leaves,
    :exact,
    :validity,
    :descendants,
    :descendants_max_depth,
    :updated_since,
    :type_metadata,
    :citations,
    :otus,
    :authors,
    :nomenclature_group, # !! different than autocomplete
    :nomenclature_code,
    :taxon_name_type,
    :etymology,
    type: [],
    taxon_name_id: [],
    parent_id: [],
    taxon_name_classification: [],
    taxon_name_relationship_type: [],
    taxon_name_relationship: []
  ).to_h.symbolize_keys.merge(project_id: sessions_current_project_id)
end

#api_showObject

GET /api/v1/taxon_names/:id



233
234
235
# File 'app/controllers/taxon_names_controller.rb', line 233

def api_show
  render '/taxon_names/api/v1/show'
end

#autocompleteObject



90
91
92
93
94
95
96
97
# File 'app/controllers/taxon_names_controller.rb', line 90

def autocomplete
  render json: {} and return if params[:term].blank?

  @taxon_names = Queries::TaxonName::Autocomplete.new(
    params[:term],
    **autocomplete_params
  ).autocomplete
end

#autocomplete_paramsObject (private)



244
245
246
247
248
249
# File 'app/controllers/taxon_names_controller.rb', line 244

def autocomplete_params
  params.permit(
    :valid, :exact, :no_leaves,
    type: [], parent_id: [], nomenclature_group: []
  ).to_h.symbolize_keys.merge(project_id: sessions_current_project_id)
end

#batch_loadObject



110
111
# File 'app/controllers/taxon_names_controller.rb', line 110

def batch_load
end

#batch_paramsObject (private)



270
271
272
273
274
275
276
277
278
279
280
# File 'app/controllers/taxon_names_controller.rb', line 270

def batch_params
  params.permit(
    :file,
    :parent_taxon_name_id,
    :nomenclature_code,
    :also_create_otu,
    :import_level).merge(
      user_id: sessions_current_user_id,
      project_id: sessions_current_project_id
    ).to_h.symbolize_keys
end

#browseObject



206
207
208
# File 'app/controllers/taxon_names_controller.rb', line 206

def browse
  @data = NomenclatureCatalog.data_for(@taxon_name)
end

#catalogObject



219
220
221
# File 'app/controllers/taxon_names_controller.rb', line 219

def catalog
  @data = NomenclatureCatalog.data_for(@taxon_name)
end

#createObject

POST /taxon_names POST /taxon_names.json



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/controllers/taxon_names_controller.rb', line 38

def create
  @taxon_name = TaxonName.new(taxon_name_params)
  respond_to do |format|
    if @taxon_name.save
      format.html { redirect_to url_for(@taxon_name.metamorphosize),
                    notice: "Taxon name '#{@taxon_name.name}' was successfully created." }
      format.json { render :show, status: :created, location: @taxon_name.metamorphosize }
    else
      format.html { render action: :new }
      format.json { render json: @taxon_name.errors, status: :unprocessable_entity }
    end
  end
end

#create_castor_batch_loadObject



191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'app/controllers/taxon_names_controller.rb', line 191

def create_castor_batch_load
  if params[:file] && digested_cookie_exists?(params[:file].tempfile, :Castor_taxon_names_md5)
    @result = BatchLoad::Import::TaxonNames::CastorInterpreter.new(**batch_params)
    if @result.create
      flash[:notice] = "Successfully proccessed file, #{@result.total_records_created} items were created."
      render 'taxon_names/batch_load/castor/create' and return
    else
      flash[:alert] = 'Batch import failed.'
    end
  else
    flash[:alert] = 'File to batch upload must be supplied.'
  end
  render :batch_load
end

#create_simple_batch_loadObject



165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'app/controllers/taxon_names_controller.rb', line 165

def create_simple_batch_load
  if params[:file] && digested_cookie_exists?(params[:file].tempfile, :simple_taxon_names_md5)
    @result =  BatchLoad::Import::TaxonifiToTaxonworks.new(**batch_params)
    if @result.create
      flash[:notice] = "Successfully proccessed file, #{@result.total_records_created} taxon names were created."
      render 'taxon_names/batch_load/simple/create' and return
    else
      flash[:alert] = 'Batch import failed.'
    end
  else
    flash[:alert] = 'File to batch upload must be supplied.'
  end
  render :batch_load
end

#destroyObject

DELETE /taxon_names/1 DELETE /taxon_names/1.json



69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/controllers/taxon_names_controller.rb', line 69

def destroy
  @taxon_name.destroy
  respond_to do |format|
    if @taxon_name.destroyed?
      format.html {redirect_back(fallback_location: (request.referer || root_path), notice: 'TaxonName was successfully destroyed.')}
      format.json {head :no_content}
    else
      format.html {redirect_back(fallback_location: (request.referer || root_path), notice: 'TaxonName was not destroyed, ' + @taxon_name.errors.full_messages.join('; '))}
      format.json {render json: @taxon_name.errors, status: :unprocessable_entity}
    end
  end
end

#downloadObject

GET /taxon_names/download



104
105
106
107
108
# File 'app/controllers/taxon_names_controller.rb', line 104

def download
  send_data Export::Download.generate_csv(
    TaxonName.where(project_id: sessions_current_project_id)
  ), type: 'text', filename: "taxon_names_#{DateTime.now}.csv"
end

#editObject

GET /taxon_names/1/edit



32
33
34
# File 'app/controllers/taxon_names_controller.rb', line 32

def edit
  @taxon_name.source = Source.new if !@taxon_name.source
end

#filter_paramsObject (private)



282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
# File 'app/controllers/taxon_names_controller.rb', line 282

def filter_params
  params.permit(
    :name, :author, :year,
    :leaves,
    :exact,
    :validity,
    :ancestors,
    :descendants,
    :descendants_max_depth,
    :updated_since,
    :type_metadata,
    :citations,
    :otus,
    :authors,
    :nomenclature_group, # !! different than autocomplete
    :nomenclature_code,
    :taxon_name_type,
    :etymology,
    :user_id,
    :user_target,
    :user_date_start,
    :user_date_end,
    :per,
    :page,
    type: [],
    taxon_name_id: [],
    parent_id: [],
    taxon_name_classification: [],
    taxon_name_relationship_type: [],
    taxon_name_relationship: []
  ).to_h.symbolize_keys.merge(project_id: sessions_current_project_id)
end

#indexObject

GET /taxon_names GET /taxon_names.json



9
10
11
12
13
14
15
16
17
18
19
# File 'app/controllers/taxon_names_controller.rb', line 9

def index
  respond_to do |format|
    format.html do
      @recent_objects = TaxonName.recent_from_project_id(sessions_current_project_id).order(updated_at: :desc).limit(10)
      render '/shared/data/all/index'
    end
    format.json {
      @taxon_names = Queries::TaxonName::Filter.new(filter_params).all.page(params[:page]).per(params[:per] || 500)
    }
  end
end

#listObject



99
100
101
# File 'app/controllers/taxon_names_controller.rb', line 99

def list
  @taxon_names = TaxonName.with_project_id(sessions_current_project_id).order(:id).page(params[:page])
end

#newObject

GET /taxon_names/new



27
28
29
# File 'app/controllers/taxon_names_controller.rb', line 27

def new
  @taxon_name = Protonym.new(source: Source.new)
end

#parseObject



210
211
212
213
214
215
216
217
# File 'app/controllers/taxon_names_controller.rb', line 210

def parse
  @combination = Combination.where(project_id: sessions_current_project_id).find(params[:combination_id]) if params[:combination_id] # TODO: this may have to change to taxon_name_id
  @result = TaxonWorks::Vendor::Biodiversity::Result.new(
    query_string: params.require(:query_string),
    project_id: sessions_current_project_id,
    code: :iczn # !! TODO:
  ).result
end

#predicted_rankObject



117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/controllers/taxon_names_controller.rb', line 117

def predicted_rank
  if params[:parent_id]
    p = TaxonName.find_by(id: params[:parent_id])
    if p.nil?
      render json: {predicted_rank: ''}.to_json
    else
      render json: {predicted_rank: p.predicted_child_rank(params[:name]).to_s}.to_json
    end
  else
    render json: {predicted_rank: ''}.to_json
  end
end

#preview_castor_batch_loadObject



180
181
182
183
184
185
186
187
188
189
# File 'app/controllers/taxon_names_controller.rb', line 180

def preview_castor_batch_load
  if params[:file]
    @result = BatchLoad::Import::TaxonNames::CastorInterpreter.new(**batch_params)
    digest_cookie(params[:file].tempfile, :Castor_taxon_names_md5)
    render 'taxon_names/batch_load/castor/preview'
  else
    flash[:notice] = 'No file provided!'
    redirect_to action: :batch_load
  end
end

#preview_simple_batch_loadObject



154
155
156
157
158
159
160
161
162
163
# File 'app/controllers/taxon_names_controller.rb', line 154

def preview_simple_batch_load
  if params[:file]
    @result = BatchLoad::Import::TaxonifiToTaxonworks.new(**batch_params)
    digest_cookie(params[:file].tempfile, :simple_taxon_names_md5)
    render 'taxon_names/batch_load/simple/preview'
  else
    flash[:notice] = 'No file provided!'
    redirect_to action: :batch_load
  end
end

#randomObject



130
131
132
133
134
# File 'app/controllers/taxon_names_controller.rb', line 130

def random
  redirect_to browse_nomenclature_task_path(
    taxon_name_id: TaxonName.where(project_id: sessions_current_project_id).order('random()').limit(1).pluck(:id).first
  )
end

#rank_tableObject



136
137
138
139
140
141
142
143
144
145
146
147
# File 'app/controllers/taxon_names_controller.rb', line 136

def rank_table
  @q = Queries::TaxonName::Tabular.new(
    ancestor_id: params.require(:ancestor_id),
    ranks: params.require(:ranks),
    fieldsets: params[:fieldsets],
    limit: params[:limit],
    validity: params[:validity],
    combinations: params[:combinations],
    project_id: sessions_current_project_id,
    rank_data: params[:rank_data]
  )
end

#ranksObject



113
114
115
# File 'app/controllers/taxon_names_controller.rb', line 113

def ranks
  render json: RANKS_JSON.to_json
end

#searchObject



82
83
84
85
86
87
88
# File 'app/controllers/taxon_names_controller.rb', line 82

def search
  if params[:id].blank?
    redirect_to taxon_names_path, notice: 'You must select an item from the list with a click or tab press before clicking show.'
  else
    redirect_to taxon_name_path(params[:id])
  end
end

#select_optionsObject

GET /taxon_names/select_options



150
151
152
# File 'app/controllers/taxon_names_controller.rb', line 150

def select_options
  @taxon_names = TaxonName.select_optimized(sessions_current_user_id, sessions_current_project_id)
end

#set_taxon_nameObject (private)



239
240
241
242
# File 'app/controllers/taxon_names_controller.rb', line 239

def set_taxon_name
  @taxon_name = TaxonName.with_project_id(sessions_current_project_id).includes(:creator, :updater).find(params[:id])
  @recent_object = @taxon_name
end

#showObject

GET /taxon_names/1 GET /taxon_names/1.json



23
24
# File 'app/controllers/taxon_names_controller.rb', line 23

def show
end

#taxon_name_paramsObject (private)



251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
# File 'app/controllers/taxon_names_controller.rb', line 251

def taxon_name_params
  params.require(:taxon_name).permit(
    :name,
    :parent_id,
    :year_of_publication,
    :etymology,
    :verbatim_author, :verbatim_name, :rank_class, :type, :masculine_name,
    :feminine_name, :neuter_name, :also_create_otu,
    roles_attributes: [
      :id, :_destroy, :type, :person_id, :position,
      person_attributes: [
        :last_name, :first_name, :suffix, :prefix
      ]
    ],
    origin_citation_attributes: [:id, :_destroy, :source_id, :pages],
    taxon_name_classifications_attributes: [:id, :_destroy, :type]
  )
end

#updateObject

PATCH/PUT /taxon_names/1 PATCH/PUT /taxon_names/1.json



54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/controllers/taxon_names_controller.rb', line 54

def update
  respond_to do |format|
    if @taxon_name.update(taxon_name_params)
      @taxon_name.reload
      format.html { redirect_to url_for(@taxon_name.metamorphosize), notice: 'Taxon name was successfully updated.' }
      format.json { render :show, status: :ok, location: @taxon_name.metamorphosize }
    else
      format.html { render action: :edit }
      format.json { render json: @taxon_name.errors, status: :unprocessable_entity }
    end
  end
end