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
This method allows any user to visit /works.rss and a list is generated of all works in an RSS format so that the works are harvestable by PDC Discovery.
- #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
184 185 186 187 188 189 190 191 192 193 |
# File 'app/controllers/works_controller.rb', line 184 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
195 196 197 198 199 200 201 202 203 204 205 |
# File 'app/controllers/works_controller.rb', line 195 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
143 144 145 146 147 148 |
# File 'app/controllers/works_controller.rb', line 143 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
169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'app/controllers/works_controller.rb', line 169 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
230 231 232 233 234 235 236 |
# File 'app/controllers/works_controller.rb', line 230 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
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/controllers/works_controller.rb', line 60 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
208 209 210 211 |
# File 'app/controllers/works_controller.rb', line 208 def datacite work = Work.find(params[:id]) render xml: work.to_xml end |
#datacite_validate ⇒ Object
213 214 215 216 217 218 219 220 |
# File 'app/controllers/works_controller.rb', line 213 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
122 123 124 125 126 127 128 129 130 131 |
# File 'app/controllers/works_controller.rb', line 122 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
99 100 101 102 103 104 105 106 107 108 |
# File 'app/controllers/works_controller.rb', line 99 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
This method allows any user to visit /works.rss and a list is generated of all works in an RSS format so that the works are harvestable by PDC Discovery.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/controllers/works_controller.rb', line 35 def index if rss_index_request? rss_index # If the user is authenticated as a super admin and visits /works it will return a list of all approved works in an HTML format. elsif current_user.super_admin? @works = Work.all respond_to do |format| format.html end else # If a user who is not a super admin attempts to visit /works they will be redirected to the root_path and receive a flash notice that they do not have access to that page. flash[:notice] = "You do not have access to this page." redirect_to root_path end end |
#migrating? ⇒ Boolean
222 223 224 225 226 |
# File 'app/controllers/works_controller.rb', line 222 def return @work.resource.migrated if @work&.resource && !params.key?(:migrate) params[:migrate] end |
#new ⇒ Object
only non wizard mode
52 53 54 55 56 57 |
# File 'app/controllers/works_controller.rb', line 52 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
115 116 117 118 |
# File 'app/controllers/works_controller.rb', line 115 def resolve_ark @work = Work.find_by_ark(params[:ark]) redirect_to @work end |
#resolve_doi ⇒ Object
110 111 112 113 |
# File 'app/controllers/works_controller.rb', line 110 def resolve_doi @work = Work.find_by_doi(params[:doi]) redirect_to @work end |
#resubmit ⇒ Object
156 157 158 159 160 |
# File 'app/controllers/works_controller.rb', line 156 def resubmit @work = Work.find(params[:id]) @work.resubmit!(current_user) redirect_to work_path(@work) end |
#revert_to_draft ⇒ Object
162 163 164 165 166 167 |
# File 'app/controllers/works_controller.rb', line 162 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
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'app/controllers/works_controller.rb', line 80 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
135 136 137 138 139 140 141 |
# File 'app/controllers/works_controller.rb', line 135 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)
239 240 241 242 243 244 |
# File 'app/controllers/works_controller.rb', line 239 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
248 249 250 251 252 253 254 255 256 257 |
# File 'app/controllers/works_controller.rb', line 248 def validate @work = Work.find(params[:id]) if @work.valid_to_complete redirect_to work_review_path(@work) else = @work.errors.to_a.join(", ") = "We apologize, the following errors were encountered: #{}. Please contact the PDC Describe administrators for any assistance." redirect_to edit_work_url(id: @work.id), notice: , params: end end |
#withdraw ⇒ Object
150 151 152 153 154 |
# File 'app/controllers/works_controller.rb', line 150 def withdraw @work = Work.find(params[:id]) @work.withdraw!(current_user) redirect_to work_path(@work) end |