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
186 187 188 189 190 191 192 193 194 195 |
# File 'app/controllers/works_controller.rb', line 186 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
197 198 199 200 201 202 203 204 205 206 207 |
# File 'app/controllers/works_controller.rb', line 197 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
145 146 147 148 149 150 |
# File 'app/controllers/works_controller.rb', line 145 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
171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'app/controllers/works_controller.rb', line 171 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
232 233 234 235 236 237 238 |
# File 'app/controllers/works_controller.rb', line 232 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
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/controllers/works_controller.rb', line 59 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 @form_resource_decorator = FormResourcePresenter.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
210 211 212 213 |
# File 'app/controllers/works_controller.rb', line 210 def datacite work = Work.find(params[:id]) render xml: work.to_xml end |
#datacite_validate ⇒ Object
215 216 217 218 219 220 221 222 |
# File 'app/controllers/works_controller.rb', line 215 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
125 126 127 128 129 130 131 132 133 |
# File 'app/controllers/works_controller.rb', line 125 def edit @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}") @uploads = @work.uploads @form_resource_decorator = FormResourcePresenter.new(@work, current_user) end end |
#file_list ⇒ Object
only non wizard mode
97 98 99 100 101 102 103 104 105 106 |
# File 'app/controllers/works_controller.rb', line 97 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
224 225 226 227 228 |
# File 'app/controllers/works_controller.rb', line 224 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 |
# 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:) @form_resource_decorator = FormResourcePresenter.new(@work, current_user) end |
#resolve_ark ⇒ Object
118 119 120 121 |
# File 'app/controllers/works_controller.rb', line 118 def resolve_ark @work = Work.find_by_ark(params[:ark]) redirect_to @work end |
#resolve_doi ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'app/controllers/works_controller.rb', line 108 def resolve_doi @work = Work.find_by_doi(params[:doi]) if @work.draft? redirect_to @work.pdc_discovery_url else redirect_to @work end end |
#resubmit ⇒ Object
158 159 160 161 162 |
# File 'app/controllers/works_controller.rb', line 158 def resubmit @work = Work.find(params[:id]) @work.resubmit!(current_user) redirect_to work_path(@work) end |
#revert_to_draft ⇒ Object
164 165 166 167 168 169 |
# File 'app/controllers/works_controller.rb', line 164 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
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'app/controllers/works_controller.rb', line 78 def show @work = Work.find(params[:id]) UpdateSnapshotJob.perform_later(work_id: @work.id, last_snapshot_id: work.upload_snapshots.first&.id) @work_presenter = work.presenter(current_user:) respond_to do |format| format.html do # Ensure that the Work belongs to a Group group = @work_presenter.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
137 138 139 140 141 142 143 |
# File 'app/controllers/works_controller.rb', line 137 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)
241 242 243 244 245 246 |
# File 'app/controllers/works_controller.rb', line 241 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
250 251 252 253 254 255 256 257 258 259 |
# File 'app/controllers/works_controller.rb', line 250 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
152 153 154 155 156 |
# File 'app/controllers/works_controller.rb', line 152 def withdraw @work = Work.find(params[:id]) @work.withdraw!(current_user) redirect_to work_path(@work) end |