Class: WorksController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- WorksController
- Includes:
- ERB::Util
- Defined in:
- app/controllers/works_controller.rb
Overview
rubocop:disable Metrics/ClassLength
Instance Method Summary collapse
- #add_message ⇒ Object
- #add_provenance_note ⇒ Object
- #approve ⇒ Object
- #assign_curator ⇒ Object
-
#bibtex ⇒ Object
Returns the raw BibTex citation information.
-
#create ⇒ Object
only non wizard mode.
-
#datacite ⇒ Object
Outputs the Datacite XML representation of the work.
- #datacite_validate ⇒ Object
-
#edit ⇒ Object
GET /works/1/edit only non wizard mode.
-
#file_list ⇒ Object
only non wizard mode.
- #index ⇒ Object
- #migrating? ⇒ Boolean
-
#new ⇒ Object
only non wizard mode.
- #resolve_ark ⇒ Object
- #resolve_doi ⇒ Object
- #resubmit ⇒ Object
- #revert_to_draft ⇒ Object
-
#show ⇒ Object
Show the information for the dataset with the given id When requested as .json, return the internal json resource.
-
#update ⇒ Object
PATCH /works/1 only non wizard mode.
-
#upload_files ⇒ Object
POST /works/1/upload-files (called via Uppy).
-
#validate ⇒ Object
Validates that the work is ready to be approved GET /works/1/validate.
- #withdraw ⇒ Object
Methods inherited from ApplicationController
Instance Method Details
#add_message ⇒ Object
173 174 175 176 177 178 179 180 181 182 |
# File 'app/controllers/works_controller.rb', line 173 def work = Work.find(params[:id]) if params["new-message"].present? = params["new-message"] = html_escape() work.(, current_user.id) end redirect_to work_path(id: params[:id]) end |
#add_provenance_note ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 |
# File 'app/controllers/works_controller.rb', line 184 def add_provenance_note work = Work.find(params[:id]) if params["new-provenance-note"].present? new_date = params["new-provenance-date"] new_label = params["change_label"] new_note = html_escape(params["new-provenance-note"]) work.add_provenance_note(new_date, new_note, current_user.id, new_label) end redirect_to work_path(id: params[:id]) end |
#approve ⇒ Object
132 133 134 135 136 137 |
# File 'app/controllers/works_controller.rb', line 132 def approve @work = Work.find(params[:id]) @work.approve!(current_user) flash[:notice] = "Your files are being moved to the post-curation bucket in the background. Depending on the file sizes this may take some time." redirect_to work_path(@work) end |
#assign_curator ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'app/controllers/works_controller.rb', line 158 def assign_curator work = Work.find(params[:id]) work.change_curator(params[:uid], current_user) if work.errors.count > 0 render json: { errors: work.errors.map(&:type) }, status: :bad_request else render json: {} end rescue => ex # This is necessary for JSON responses Rails.logger.error("Error changing curator for work: #{work.id}. Exception: #{ex.}") Honeybadger.notify("Error changing curator for work: #{work.id}. Exception: #{ex.}") render(json: { errors: ["Cannot save dataset"] }, status: :bad_request) end |
#bibtex ⇒ Object
Returns the raw BibTex citation information
219 220 221 222 223 224 225 |
# File 'app/controllers/works_controller.rb', line 219 def bibtex work = Work.find(params[:id]) creators = work.resource.creators.map { |creator| "#{creator.family_name}, #{creator.given_name}" } citation = DatasetCitation.new(creators, [work.resource.publication_year], work.resource.titles.first.title, work.resource.resource_type, work.resource.publisher, work.resource.doi) bibtex = citation.bibtex send_data bibtex, filename: "#{citation.bibtex_id}.bibtex", type: "text/plain", disposition: "attachment" end |
#create ⇒ Object
only non wizard mode
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'app/controllers/works_controller.rb', line 49 def create @work = Work.new(created_by_user_id: current_user.id, group_id: params_group_id, user_entered_doi: params["doi"].present?) @work.resource = FormToResourceService.convert(params, @work) @work.resource.migrated = migrated? if @work.valid? @work.draft!(current_user) upload_service = WorkUploadsEditService.new(@work, current_user) upload_service.update_precurated_file_list(added_files_param, deleted_files_param) redirect_to work_url(@work), notice: "Work was successfully created." else @work_decorator = WorkDecorator.new(@work, current_user) @form_resource_decorator = FormResourceDecorator.new(@work, current_user) # return 200 so the loadbalancer doesn't capture the error render :new end end |
#datacite ⇒ Object
Outputs the Datacite XML representation of the work
197 198 199 200 |
# File 'app/controllers/works_controller.rb', line 197 def datacite work = Work.find(params[:id]) render xml: work.to_xml end |
#datacite_validate ⇒ Object
202 203 204 205 206 207 208 209 |
# File 'app/controllers/works_controller.rb', line 202 def datacite_validate @errors = [] @work = Work.find(params[:id]) validator = WorkValidator.new(@work) unless validator.valid_datacite? @errors = @work.errors. end end |
#edit ⇒ Object
GET /works/1/edit only non wizard mode
111 112 113 114 115 116 117 118 119 120 |
# File 'app/controllers/works_controller.rb', line 111 def edit @work = Work.find(params[:id]) @work_decorator = WorkDecorator.new(@work, current_user) if (work: @work, uneditable_message: "Can not update work: #{@work.id} is not editable by #{current_user.uid}", current_state_message: "Can not update work: #{@work.id} is not editable in current state by #{current_user.uid}") @uploads = @work.uploads @form_resource_decorator = FormResourceDecorator.new(@work, current_user) end end |
#file_list ⇒ Object
only non wizard mode
88 89 90 91 92 93 94 95 96 97 |
# File 'app/controllers/works_controller.rb', line 88 def file_list if params[:id] == "NONE" # This is a special case when we render the file list for a work being created # (i.e. it does not have an id just yet) render json: file_list_ajax_response(nil) else work = Work.find(params[:id]) render json: file_list_ajax_response(work) end end |
#index ⇒ Object
32 33 34 35 36 37 38 |
# File 'app/controllers/works_controller.rb', line 32 def index @works = Work.all respond_to do |format| format.html format.rss { render layout: false } end end |
#migrating? ⇒ Boolean
211 212 213 214 215 |
# File 'app/controllers/works_controller.rb', line 211 def return @work.resource.migrated if @work&.resource && !params.key?(:migrate) params[:migrate] end |
#new ⇒ Object
only non wizard mode
41 42 43 44 45 46 |
# File 'app/controllers/works_controller.rb', line 41 def new group = Group.find_by(code: params[:group_code]) || current_user.default_group @work = Work.new(created_by_user_id: current_user.id, group:) @work_decorator = WorkDecorator.new(@work, current_user) @form_resource_decorator = FormResourceDecorator.new(@work, current_user) end |
#resolve_ark ⇒ Object
104 105 106 107 |
# File 'app/controllers/works_controller.rb', line 104 def resolve_ark @work = Work.find_by_ark(params[:ark]) redirect_to @work end |
#resolve_doi ⇒ Object
99 100 101 102 |
# File 'app/controllers/works_controller.rb', line 99 def resolve_doi @work = Work.find_by_doi(params[:doi]) redirect_to @work end |
#resubmit ⇒ Object
145 146 147 148 149 |
# File 'app/controllers/works_controller.rb', line 145 def resubmit @work = Work.find(params[:id]) @work.resubmit!(current_user) redirect_to work_path(@work) end |
#revert_to_draft ⇒ Object
151 152 153 154 155 156 |
# File 'app/controllers/works_controller.rb', line 151 def revert_to_draft @work = Work.find(params[:id]) @work.revert_to_draft!(current_user) redirect_to work_path(@work) end |
#show ⇒ Object
Show the information for the dataset with the given id When requested as .json, return the internal json resource
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/controllers/works_controller.rb', line 69 def show @work = Work.find(params[:id]) UpdateSnapshotJob.perform_later(work_id: @work.id, last_snapshot_id: work.upload_snapshots.first&.id) @work_decorator = WorkDecorator.new(@work, current_user) respond_to do |format| format.html do # Ensure that the Work belongs to a Group group = @work_decorator.group raise(Work::InvalidGroupError, "The Work #{@work.id} does not belong to any Group") unless group @can_curate = current_user.can_admin?(group) @work.mark_new_notifications_as_read(current_user.id) end format.json { render json: @work.to_json } end end |
#update ⇒ Object
PATCH /works/1 only non wizard mode
124 125 126 127 128 129 130 |
# File 'app/controllers/works_controller.rb', line 124 def update @work = Work.find(params[:id]) if (work: @work, uneditable_message: "Can not update work: #{@work.id} is not editable by #{current_user.uid}", current_state_message: "Can not update work: #{@work.id} is not editable in current state by #{current_user.uid}") update_work end end |
#upload_files ⇒ Object
POST /works/1/upload-files (called via Uppy)
228 229 230 231 232 |
# File 'app/controllers/works_controller.rb', line 228 def upload_files @work = Work.find(params[:id]) upload_service = WorkUploadsEditService.new(@work, current_user) upload_service.update_precurated_file_list(params["files"], []) end |
#validate ⇒ Object
Validates that the work is ready to be approved GET /works/1/validate
236 237 238 239 240 |
# File 'app/controllers/works_controller.rb', line 236 def validate @work = Work.find(params[:id]) @work.complete_submission!(current_user) redirect_to user_path(current_user) end |
#withdraw ⇒ Object
139 140 141 142 143 |
# File 'app/controllers/works_controller.rb', line 139 def withdraw @work = Work.find(params[:id]) @work.withdraw!(current_user) redirect_to work_path(@work) end |