Class: GenericFilesController

Inherits:
ApplicationController
  • Object
show all
Includes:
Blacklight::Configurable, Hydra::Controller::ControllerBehavior, Hydra::Controller::UploadBehavior, Sufia::Noid
Defined in:
app/controllers/generic_files_controller.rb

Overview

Copyright © 2012 The Pennsylvania State University

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Instance Method Summary collapse

Methods included from Sufia::Noid

namespaceize, #noid, noidify, #normalize_identifier

Instance Method Details

#auditObject

routed to /files/:id/audit (POST)



136
137
138
# File 'app/controllers/generic_files_controller.rb', line 136

def audit
  render :json=>@generic_file.audit
end

#citationObject

routed to /files/:id/citation



119
120
# File 'app/controllers/generic_files_controller.rb', line 119

def citation
end

#createObject

routed to /files (POST)



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'app/controllers/generic_files_controller.rb', line 71

def create
  begin
    retval = " "
    # check error condition No files
    if !params.has_key?(:files)
       retval = render :json => [{:error => "Error! No file to save"}].to_json

    # check error condition empty file
    elsif ((params[:files][0].respond_to?(:tempfile)) && (params[:files][0].tempfile.size == 0))
       retval = render :json => [{ :name => params[:files][0].original_filename, :error => "Error! Zero Length File!"}].to_json

    elsif ((params[:files][0].respond_to?(:size)) && (params[:files][0].size == 0))
       retval = render :json => [{ :name => params[:files][0].original_filename, :error => "Error! Zero Length File!"}].to_json

    elsif (params[:terms_of_service] != '1')
       retval = render :json => [{ :name => params[:files][0].original_filename, :error => "You must accept the terms of service!"}].to_json

    # process file
    else
      create_and_save_generic_file
      if @generic_file
        Sufia.queue.push(ContentDepositEventJob.new(@generic_file.pid, current_user.user_key))
        respond_to do |format|
          format.html {
            retval = render :json => [@generic_file.to_jq_upload].to_json,
              :content_type => 'text/html',
              :layout => false
          }
          format.json {
            retval = render :json => [@generic_file.to_jq_upload].to_json
          }
        end
      else
        retval = render :json => [{:error => "Error creating generic file."}].to_json
      end
    end
  rescue => error
    logger.warn "GenericFilesController::create rescued error #{error.backtrace}"
    retval = render :json => [{:error => "Error occurred while creating generic file."}].to_json
  ensure
    # remove the tempfile (only if it is a temp file)
    params[:files][0].tempfile.delete if params[:files][0].respond_to?(:tempfile)
  end

  return retval
end

#destroyObject

routed to /files/:id (DELETE)



63
64
65
66
67
68
# File 'app/controllers/generic_files_controller.rb', line 63

def destroy
  pid = @generic_file.noid
  @generic_file.delete
  Sufia.queue.push(ContentDeleteEventJob.new(pid, current_user.user_key))
  redirect_to sufia.dashboard_index_path, :notice => render_to_string(:partial=>'generic_files/asset_deleted_flash', :locals => { :generic_file => @generic_file })
end

#editObject

routed to /files/:id/edit



51
52
53
54
# File 'app/controllers/generic_files_controller.rb', line 51

def edit
  @terms = @generic_file.get_terms
  @groups = current_user.groups
end

#indexObject

routed to /files/:id



57
58
59
60
# File 'app/controllers/generic_files_controller.rb', line 57

def index
  @generic_files = GenericFile.find(:all, :rows => GenericFile.count)
  render :json => @generic_files.map(&:to_jq_upload).to_json
end

#newObject

routed to /files/new



45
46
47
48
# File 'app/controllers/generic_files_controller.rb', line 45

def new
  @generic_file = GenericFile.new
  @batch_noid = Sufia::Noid.noidify(Sufia::IdService.mint)
end

#showObject

routed to /files/:id



123
124
125
126
127
128
129
130
131
132
133
# File 'app/controllers/generic_files_controller.rb', line 123

def show
  perms = permissions_solr_doc_for_id(@generic_file.pid)
  @can_read =  can? :read, perms
  @can_edit =  can? :edit, perms
  @events = @generic_file.events(100)

  respond_to do |format|
    format.html
    format.endnote { render :text => @generic_file.export_as_endnote }
  end
end

#updateObject

routed to /files/:id (PUT)



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'app/controllers/generic_files_controller.rb', line 141

def update
  version_event = false

  if params.has_key?(:revision) and params[:revision] !=  @generic_file.content.latest_version.versionID
    revision = @generic_file.content.get_version(params[:revision])
    @generic_file.add_file_datastream(revision.content, :dsid => 'content')
    version_event = true
    Sufia.queue.push(ContentRestoredVersionEventJob.new(@generic_file.pid, current_user.user_key, params[:revision]))
  end

  if params.has_key?(:filedata)
    return unless virus_check(params[:filedata]) == 0
    add_posted_blob_to_asset(@generic_file, params[:filedata])
    version_event = true
    Sufia.queue.push(ContentNewVersionEventJob.new(@generic_file.pid, current_user.user_key))
  end
  @generic_file.attributes = params[:generic_file].reject { |k,v| %w{ Filedata Filename revision part_of date_modified date_uploaded format }.include? k}
  @generic_file.set_visibility(params[:visibility])
  @generic_file.date_modified = Time.now.ctime
  @generic_file.save!
  # do not trigger an update event if a version event has already been triggered
  Sufia.queue.push(ContentUpdateEventJob.new(@generic_file.pid, current_user.user_key)) unless version_event
  record_version_committer(@generic_file, current_user)
  redirect_to sufia.edit_generic_file_path(:tab => params[:redirect_tab]), :notice => render_to_string(:partial=>'generic_files/asset_updated_flash', :locals => { :generic_file => @generic_file })

end