--- /dev/null
+class OriginalPicturesController < ApplicationController
+ before_filter :authenticate_author!, :except => [:index, :show]
+
+ private
+
+ def set_image(prm)
+ img = nil
+ if (f = prm[:original_picture][:file]).respond_to?(:read)
+ if f.size > 1000000
+ @original_picture.width = 0
+ @original_picture.height = 0
+ @original_picture.ext = 'none'
+ @original_picture.filesize = 1.megabytes
+ else
+ img = Magick::Image.from_blob(f.read).shift
+ @original_picture.width = img.columns
+ @original_picture.height = img.rows
+ @original_picture.ext = img.format.downcase
+ @original_picture.filesize = f.size
+ end
+ else
+ dat = Base64.decode64(prm[:original_picture][:file].to_s.gsub(' ', '+')) #rubyのバグ?+でデコードされるべきキャラがスペースになる
+ img = Magick::Image.from_blob(dat).shift
+ @original_picture.width = img.columns
+ @original_picture.height = img.rows
+ @original_picture.ext = img.format.downcase
+ @original_picture.filesize = 1000
+ end
+ img
+ end
+
+ public
+
+ # GET /original_pictures
+ # GET /original_pictures.json
+ def index
+ @original_pictures = OriginalPicture.all
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @original_pictures }
+ end
+ end
+
+ # GET /original_pictures/1
+ # GET /original_pictures/1.json
+ def show
+ @original_picture = OriginalPicture.find(params[:id])
+# if params[:subdir] == 'refresh'
+# refresh
+# return
+# end
+
+ respond_to do |format|
+ opt = {:type => @original_picture.mime_type, :disposition=>"inline"}
+ format.png { send_data(@original_picture.restore, opt ) }
+ format.gif { send_data(@original_picture.restore, opt ) }
+ format.jpeg { send_data(@original_picture.restore, opt ) }
+ format.html # show.html.erb
+ format.json { render json: @original_picture}
+ end
+ end
+
+ def refresh
+ @original_picture = OriginalPicture.find(params[:id])
+ img = Magick::Image.from_blob(@original_picture.restore).shift
+ @original_picture.store img
+ respond_to do |format|
+ format.html { redirect_to original_pictures_url }
+ end
+ end
+
+ # GET /original_pictures/new
+ # GET /original_pictures/new.json
+ def new
+ @original_picture = OriginalPicture.new
+
+ respond_to do |format|
+ format.html # new.html.erb
+ format.json { render json: @original_picture }
+ end
+ end
+
+ # GET /original_pictures/1/edit
+ def edit
+ @original_picture = OriginalPicture.find(params[:id])
+ end
+
+ # POST /original_pictures
+ # POST /original_pictures.json
+ def create
+ unless @artist
+ respond_to do |format|
+ format.html { redirect_to @original_picture, notice: 'Failed! author does not artist.' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ return
+ end
+ @original_picture = OriginalPicture.new
+ img = set_image params
+ @original_picture.artist_id = current_author.artist.id
+
+ respond_to do |format|
+ OriginalPicture.transaction do
+ if @original_picture.save
+ if @original_picture.store(img)
+ format.html { redirect_to @original_picture, notice: 'Original picture was successfully created.' }
+ format.json { render json: @original_picture, status: :created, location: @original_picture }
+ else
+ format.html { redirect_to @original_picture, notice: 'Failed! Original picture was NOT created.' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ else
+ format.html { render action: "new" }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+ end
+
+ # PUT /original_pictures/1
+ # PUT /original_pictures/1.json
+ def update
+ unless @artist
+ respond_to do |format|
+ format.html { redirect_to @original_picture, notice: 'Failed! author does not artist.' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ return
+ end
+ @original_picture = OriginalPicture.find(params[:id])
+ unless @original_picture.own? current_author
+ respond_to do |format|
+ format.html { redirect_to @original_picture, notice: 'Failed! ' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ return
+ end
+ img = set_image params
+
+ respond_to do |format|
+ OriginalPicture.transaction do
+ if @original_picture.save
+ if @original_picture.store(img)
+ format.html { redirect_to @original_picture, notice: 'Original picture was successfully updated.' }
+ format.json { head :ok }
+ else
+ format.html { redirect_to @original_picture, notice: 'Failed! Original picture was NOT created.' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ else
+ format.html { render action: "edit" }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+ end
+
+ # DELETE /original_pictures/1
+ # DELETE /original_pictures/1.json
+ def destroy
+ unless @artist
+ respond_to do |format|
+ format.html { redirect_to @original_picture, notice: 'Failed! author does not artist.' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ return
+ end
+ @original_picture = OriginalPicture.find(params[:id])
+ unless @original_picture.own? current_author
+ respond_to do |format|
+ format.html { redirect_to @original_picture, notice: 'Failed! ' }
+ format.json { render json: @original_picture.errors, status: :unprocessable_entity }
+ end
+ return
+ end
+ @original_picture.destroy
+
+ respond_to do |format|
+ format.html { redirect_to original_pictures_url }
+ format.json { head :ok }
+ end
+ end
+end