OSDN Git Service

import all source code
[pettanr/pettanr.git] / app / controllers / original_pictures_controller.rb
diff --git a/app/controllers/original_pictures_controller.rb b/app/controllers/original_pictures_controller.rb
new file mode 100644 (file)
index 0000000..ac85efe
--- /dev/null
@@ -0,0 +1,184 @@
+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