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
179 180 181 182 183 184 185 186 187 188 |
# File 'app/controllers/works_controller.rb', line 179 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
190 191 192 193 194 195 196 197 198 199 200 |
# File 'app/controllers/works_controller.rb', line 190 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
138 139 140 141 142 143 |
# File 'app/controllers/works_controller.rb', line 138 def approve @work = Work.find(params[:id]) @work.approve!(current_user) flash[:notice] = "Your files are being moved to the #{@work.files_mode_human} bucket in the background. Depending on the file sizes this may take some time." redirect_to work_path(@work) end |
#assign_curator ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'app/controllers/works_controller.rb', line 164 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
225 226 227 228 229 230 231 |
# File 'app/controllers/works_controller.rb', line 225 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
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/controllers/works_controller.rb', line 55 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
203 204 205 206 |
# File 'app/controllers/works_controller.rb', line 203 def datacite work = Work.find(params[:id]) render xml: work.to_xml end |
#datacite_validate ⇒ Object
208 209 210 211 212 213 214 215 |
# File 'app/controllers/works_controller.rb', line 208 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
117 118 119 120 121 122 123 124 125 126 |
# File 'app/controllers/works_controller.rb', line 117 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
94 95 96 97 98 99 100 101 102 103 |
# File 'app/controllers/works_controller.rb', line 94 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 39 40 41 42 43 44 |
# File 'app/controllers/works_controller.rb', line 32 def index if rss_index_request? rss_index elsif current_user.super_admin? @works = Work.all respond_to do |format| format.html end else flash[:notice] = "You do not have access to this page." redirect_to root_path end end |
#migrating? ⇒ Boolean
217 218 219 220 221 |
# File 'app/controllers/works_controller.rb', line 217 def return @work.resource.migrated if @work&.resource && !params.key?(:migrate) params[:migrate] end |
#new ⇒ Object
only non wizard mode
47 48 49 50 51 52 |
# File 'app/controllers/works_controller.rb', line 47 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
110 111 112 113 |
# File 'app/controllers/works_controller.rb', line 110 def resolve_ark @work = Work.find_by_ark(params[:ark]) redirect_to @work end |
#resolve_doi ⇒ Object
105 106 107 108 |
# File 'app/controllers/works_controller.rb', line 105 def resolve_doi @work = Work.find_by_doi(params[:doi]) redirect_to @work end |
#resubmit ⇒ Object
151 152 153 154 155 |
# File 'app/controllers/works_controller.rb', line 151 def resubmit @work = Work.find(params[:id]) @work.resubmit!(current_user) redirect_to work_path(@work) end |
#revert_to_draft ⇒ Object
157 158 159 160 161 162 |
# File 'app/controllers/works_controller.rb', line 157 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
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'app/controllers/works_controller.rb', line 75 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
130 131 132 133 134 135 136 |
# File 'app/controllers/works_controller.rb', line 130 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)
234 235 236 237 238 239 |
# File 'app/controllers/works_controller.rb', line 234 def upload_files @work = Work.find(params[:id]) upload_service = WorkUploadsEditService.new(@work, current_user) upload_service.update_precurated_file_list(params["files"], []) render plain: params["files"].map(&:original_filename).join(",") end |
#validate ⇒ Object
Validates that the work is ready to be approved GET /works/1/validate
243 244 245 246 247 |
# File 'app/controllers/works_controller.rb', line 243 def validate @work = Work.find(params[:id]) @work.complete_submission!(current_user) redirect_to user_path(current_user) end |
#withdraw ⇒ Object
145 146 147 148 149 |
# File 'app/controllers/works_controller.rb', line 145 def withdraw @work = Work.find(params[:id]) @work.withdraw!(current_user) redirect_to work_path(@work) end |