OSDN Git Service

temp
authoryasushiito <yas@pen-chan.jp>
Mon, 25 Nov 2013 23:45:23 +0000 (08:45 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 25 Nov 2013 23:45:23 +0000 (08:45 +0900)
52 files changed:
app/assets/javascripts/configurations.js.coffee.erb
app/controllers/application_controller.rb
app/controllers/artists_controller.rb
app/controllers/authors_controller.rb
app/controllers/balloons_controller.rb
app/controllers/comics_controller.rb
app/controllers/ground_colors_controller.rb
app/controllers/ground_pictures_controller.rb
app/controllers/license_groups_controller.rb
app/controllers/licenses_controller.rb
app/controllers/original_pictures_controller.rb
app/controllers/panel_pictures_controller.rb
app/controllers/panels_controller.rb
app/controllers/pictures_controller.rb
app/controllers/resource_pictures_controller.rb
app/controllers/scroll_panels_controller.rb
app/controllers/scrolls_controller.rb
app/controllers/sheet_panels_controller.rb
app/controllers/sheets_controller.rb
app/controllers/speech_balloon_templates_controller.rb
app/controllers/speech_balloons_controller.rb
app/controllers/speeches_controller.rb
app/controllers/stories_controller.rb
app/controllers/story_sheets_controller.rb
app/controllers/system_pictures_controller.rb
app/controllers/writing_formats_controller.rb
app/models/artist.rb
app/models/author.rb
app/models/comic.rb
app/models/panel.rb
app/models/speech_balloon.rb
app/models/user.rb
app/views/artists/show.html.erb
app/views/authors/show.html.erb
app/views/home/index.html.erb
app/views/layouts/system.html.erb
app/views/layouts/test.html.erb
app/views/panels/_body.html.erb
config/environment.rb
db/migrate/20131121230958_artist_belongs_to_user.rb [new file with mode: 0644]
lib/content.rb [new file with mode: 0644]
lib/element.rb
lib/item.rb [new file with mode: 0644]
lib/operator.rb [new file with mode: 0644]
lib/owner.rb [new file with mode: 0644]
spec/models/item_spec.rb [new file with mode: 0644]
vendor/plugins/content/init.rb [deleted file]
vendor/plugins/content/lib/content.rb [deleted file]
vendor/plugins/element/init.rb [deleted file]
vendor/plugins/element/lib/element.rb [deleted file]
vendor/plugins/item/init.rb [deleted file]
vendor/plugins/item/lib/item.rb [deleted file]

index a0cbf7a..d7da9f3 100644 (file)
         updated_at: {\r
           type: 'datetime',\r
         }\r
-      }\r
+      },\r
     },\r
     Picture: 'picture',\r
     picture: {\r
index 0a4273f..aa4f3a6 100644 (file)
@@ -29,42 +29,49 @@ class ApplicationController < ActionController::Base
         redirect_to :controller => '/system', :action => 'start'
       end
     else
-      if user_signed_in?
-        @user = current_user
-        @author = @user.author
-        @artist = if @author and @author.artist?
-          @author.artist
-        else
-          nil
-        end
+      user = if user_signed_in?
+        current_user
+      else
+        nil
+      end
+      author = if user
+        user.author
+      else
+        nil
       end
-      @admin = if admin_signed_in?
+      artist = if user
+        user.artist
+      else
+        nil
+      end
+      admin = if admin_signed_in?
         current_admin
       else
         nil
       end
-      @demand_user = if demand_user_signed_in?
+      demand_user = if demand_user_signed_in?
         current_demand_user
       else
         nil
       end
+      @operators = Operator.new [user, author, artist, admin, demand_user]
     end
   end
   
   def authenticate_reader
-    authenticate_user! unless (@user || @admin)
+    authenticate_user! unless @operators.reader?
   end
   
   def authenticate_user
-    authenticate_user! unless (@user)
+    authenticate_user! unless @operators.user?
   end
   
   def authenticate_resource_reader
-    authenticate_user! unless (@user || @admin || @demand_user)
+    authenticate_user! unless @operators.resource_reader?
   end
   
   def authenticate_author
-    if @author
+    if @operators.author
       true
     else
       respond_to do |format|
@@ -79,7 +86,7 @@ class ApplicationController < ActionController::Base
   end
       
   def authenticate_artist
-    if @artist
+    if @operators.artist
       true
     else
       respond_to do |format|
@@ -93,10 +100,44 @@ class ApplicationController < ActionController::Base
     end
   end
   
+  def set_filer 
+    @page = @@model.page_number params[:page]
+    @page_size = @@model.page_size params[:page_size]
+    list_method = 'list' || configurations['models'][@@model.to_s.underscore]['select']['method']
+    @items = @@model.__send__(list_method, @page, @page_size)
+  end
+  
+  def format_filer format
+    format.html {
+      @paginate = @@model.list_paginate(@page, @page_size)
+      render :template => 'system/filer', :locals => {
+        :items => @items, :model => @@model, 
+        :operators => @operators, :pager => @paginate
+      }
+    }
+  end
+  
+  def set_filer_by_anybody 
+    @page = @@model.page_number params[:page]
+    @page_size = @@model.page_size params[:page_size]
+    list_method = 'himlist' || configurations['models'][@@model.to_s.underscore]['select']['method']
+    @items = @@model.__send__(list_method, @operators, @page, @page_size)
+  end
+  
+  def format_filer_by_anybody format
+    format.html {
+      @paginate = @@model.himlist_paginate(@operators, @page, @page_size)
+      render :template => 'system/filer', :locals => {
+        :items => @items, :model => @@model, 
+        :operators => @operators, :pager => @paginate
+      }
+    }
+  end
+  
   def format_prof format
     format.prof { 
       render :template => 'system/prof', :locals => {
-        :item => @item, :roles => [@user, @admin]
+        :item => @item, :operators => @operators
       }
     }
   end
index 77c944b..0985278 100644 (file)
@@ -10,25 +10,18 @@ class ArtistsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Artist
   def index
-    @page = Artist.page params[:page]
-    @page_size = Artist.page_size params[:page_size]
-    @artists = Artist.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = Artist.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @artists, :model => Artist, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @artists.to_json(Artist.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = Artist.show(params[:id], [@user, @admin, @demand_user])
+    @item = Artist.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
@@ -40,22 +33,22 @@ class ArtistsController < ApplicationController
   end
 
   def resource_pictures
-    @ar = Artist.show(params[:id], [@user, @admin, @demand_user])
+    @artist = Artist.show(params[:id], @operators)
     @page = Author.page params[:page]
     @page_size = Author.resource_picture_page_size params[:page_size]
-    @resource_pictures = ResourcePicture.himlist(@ar, @page, @page_size)
+    @resource_pictures = ResourcePicture.himlist(@artist, @page, @page_size)
     respond_to do |format|
       format.html {
-        @paginate = ResourcePicture.himlist_paginate(@ar, @page, @page_size)
+        @paginate = ResourcePicture.himlist_paginate(@artist, @page, @page_size)
       }
       format.json { render json: @resource_pictures.to_json(ResourcePicture.list_json_opt) }
     end
   end
   
   def count
-    @ar = {:count => Artist.visible_count}
+    @artist = {:count => Artist.visible_count}
     respond_to do |format|
-      format.json { render json: @ar.to_json }
+      format.json { render json: @artist.to_json }
     end
   end
   
@@ -69,81 +62,72 @@ class ArtistsController < ApplicationController
   end
 
   def browse
-    @ar = Artist.find(params[:id])
+    @artist = Artist.find(params[:id])
 
     respond_to do |format|
       format.html { render layout: 'system' }
-      format.json { render json: @ar }
+      format.json { render json: @artist }
     end
   end
 
-  # GET /artists/new
-  # GET /artists/new.json
   def new
-    @ar = Artist.new
-    @ar.supply_default 
+    @artist = Artist.new
+    @artist.supply_default 
 
     respond_to do |format|
       format.html # new.html.erb
       format.js
-      format.json { render json: @ar.to_json(Artist.show_json_opt) }
+      format.json { render json: @artist.to_json(Artist.show_json_opt) }
     end
   end
 
-  # GET /artists/1/edit
   def edit
-    @ar = Artist.edit(params[:id], @author)
+    @artist = Artist.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
     end
   end
 
-  # POST /artists
-  # POST /artists.json
   def create
-    @ar = Artist.new()
-    @ar.supply_default 
-    @ar.attributes = params[:artist]
-    @ar.overwrite @author
+    @artist = Artist.new()
+    @artist.supply_default 
+    @artist.attributes = params[:artist]
+    @artist.overwrite @operators
     respond_to do |format|
-      if @ar.save
+      if @artist.save
         flash[:notice] = I18n.t('flash.notice.created', :model => Artist.model_name.human)
         format.html { redirect_to root_path }
-        format.json { render json: @ar.to_json(Artist.show_json_opt), status: :created, location: @artist }
+        format.json { render json: @artist.to_json(Artist.show_json_opt), status: :created, location: @artist }
       else
         flash[:notice] = I18n.t('flash.notice.not_created', :model => Artist.model_name.human)
         format.html { render action: "new" }
-        format.json { render json: @ar.errors, status: :unprocessable_entity }
+        format.json { render json: @artist.errors, status: :unprocessable_entity }
       end
     end
   end
 
-  # PUT /artists/1
-  # PUT /artists/1.json
   def update
-    @ar = Artist.edit(params[:id], @author)
-    @ar.attributes = params[:artist]
-    @ar.overwrite @author
+    @artist = Artist.edit(params[:id], @operators)
+    @artist.attributes = params[:artist]
+    @artist.overwrite @operators
 
     respond_to do |format|
-      if @ar.save
+      if @artist.save
         flash[:notice] = I18n.t('flash.notice.updated', :model => Artist.model_name.human)
         format.html { redirect_to '/home/configure' }
         format.json { head :ok }
       else
         flash[:notice] = I18n.t('flash.notice.not_updated', :model => Artist.model_name.human)
         format.html { render action: "edit" }
-        format.json { render json: @ar.errors, status: :unprocessable_entity }
+        format.json { render json: @artist.errors, status: :unprocessable_entity }
       end
     end
   end
 
-  # DELETE /artists/1
-  # DELETE /artists/1.json
   def destroy
-    @ar = Artist.edit(params[:id], @author)
-    @ar.destroy
+    @artist = Artist.edit(params[:id], @operators)
+    @artist.destroy
 
     respond_to do |format|
       format.html { redirect_to artists_url }
index 7f436de..6c87f0f 100644 (file)
@@ -10,25 +10,18 @@ class AuthorsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Author
   def index
-    @page = Author.page params[:page]
-    @page_size = Author.page_size params[:page_size]
-    @authors = Author.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = Author.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @authors, :model => Author, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @authors.to_json(Author.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = Author.show(params[:id], [@user, @admin])
+    @item = Author.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
index e218da1..745db47 100644 (file)
@@ -10,25 +10,18 @@ class BalloonsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
   
+  @@model = Balloon
   def index
-    @page = Balloon.page params[:page]
-    @page_size = Balloon.page_size params[:page_size]
-    @balloons = Balloon.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = Balloon.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @balloons, :model => Balloon, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @balloons.to_json(Balloon.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
   
   def show
-    @item = Balloon.show(params[:id], [@user, @admin])
+    @item = Balloon.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @balloon = @item
index 18c5bb0..617439a 100644 (file)
@@ -10,26 +10,20 @@ class ComicsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Comic
   def index
-    @page = Comic.page params[:page]
-    @page_size = Comic.page_size params[:page_size]
-    @comics = Comic.list(@page, @page_size)
+    set_filer
+
     respond_to do |format|
-      format.html {
-        @paginate = Comic.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @comics, :model => Comic, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @comics.to_json(Comic.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
       format.atom 
       format.rss
     end
   end
 
   def show
-    @item = Comic.show(params[:id], [@user, @admin])
+    @item = Comic.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @comic = @item
index 1071639..53bc819 100644 (file)
@@ -9,25 +9,18 @@ class GroundColorsController < ApplicationController
     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
   end
 
+  @@model = GroundColor
   def index
-    @page = GroundColor.page params[:page]
-    @page_size = GroundColor.page_size params[:page_size]
-    @ground_colors = GroundColor.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = GroundColor.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @ground_colors, :model => GroundColor, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @ground_colors.to_json(GroundColor.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
   
   def show
-    @item = GroundColor.show(params[:id], [@user, @admin])
+    @item = GroundColor.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @ground_color = @item
index 7763724..9de2107 100644 (file)
@@ -9,25 +9,18 @@ class GroundPicturesController < ApplicationController
     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
   end
 
+  @@model = GroundPicture
   def index
-    @page = GroundPicture.page params[:page]
-    @page_size = GroundPicture.page_size params[:page_size]
-    @ground_pictures = GroundPicture.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = GroundPicture.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @ground_pictures, :model => GroundPicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @ground_pictures.to_json(GroundPicture.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = GroundPicture.show(params[:id], [@user, @admin])
+    @item = GroundPicture.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @ground_picture = @item
index 8a84314..3c90807 100644 (file)
@@ -2,22 +2,18 @@ class LicenseGroupsController < ApplicationController
   layout 'test' if MagicNumber['test_layout']
   before_filter :authenticate_admin!, :only => [:list, :browse]
   
+  @@model = LicenseGroup
   def index
-    @license_groups = LicenseGroup.list()
+    set_filer
 
     respond_to do |format|
-      format.html {
-        render :template => 'system/filer', :locals => {
-          :items => @license_groups, :model => LicenseGroup, 
-          :roles => [@user, @admin], :pager => nil
-        }
-      }
-      format.json { render json: @license_groups.to_json(LicenseGroup.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = LicenseGroup.show(params[:id])
+    @item = LicenseGroup.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @license_group = @item
index e561f6a..a365198 100644 (file)
@@ -2,22 +2,18 @@ class LicensesController < ApplicationController
   layout 'test' if MagicNumber['test_layout']
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = License
   def index
-    @licenses = License.list()
+    set_filer
 
     respond_to do |format|
-      format.html {
-        render :template => 'system/filer', :locals => {
-          :items => @licenses, :model => License, 
-          :roles => [@user, @admin], :pager => nil
-        }
-      }
-      format.json { render json: @licenses.to_json(License.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = License.show(params[:id])
+    @item = License.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @license = @item
index 30b6f44..3c39e17 100644 (file)
@@ -6,25 +6,18 @@ class OriginalPicturesController < ApplicationController
   before_filter :authenticate_artist, :only => [:index, :new, :edit, :create, :update, :destroy]
   before_filter :authenticate_admin!, :only => [:list, :browse]
   
+  @@model = OriginalPicture
   def index
-    @page = OriginalPicture.page params[:page]
-    @page_size = OriginalPicture.page_size params[:page_size]
-    @original_pictures = OriginalPicture.mylist(@artist, @page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = OriginalPicture.mylist_paginate(@artist, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @original_pictures, :model => OriginalPicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @original_pictures.to_json(OriginalPicture.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = OriginalPicture.show(params[:id], [@artist, @admin])
+    @item = OriginalPicture.show(params[:id], @operators)
     
     respond_to do |format|
       opt = {:type => @item.mime_type, :disposition=>"inline"}
index 680cffe..9dd3ac0 100644 (file)
@@ -10,25 +10,18 @@ class PanelPicturesController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = PanelPicture
   def index
-    @page = PanelPicture.page params[:page]
-    @page_size = PanelPicture.page_size params[:page_size]
-    @panel_pictures = PanelPicture.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = PanelPicture.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @panel_pictures, :model => PanelPicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @panel_pictures.to_json(PanelPicture.list_json_opt) }
+      format_filer format
+      format.json { render :json => @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = PanelPicture.show(params[:id], [@user, @admin])
+    @item = PanelPicture.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
index fd50073..e3c14a9 100644 (file)
@@ -9,48 +9,34 @@ class PanelsController < ApplicationController
     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy, :catch]
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
-
-  public
   
+  @@model = Panel
   def index
-    @page = Panel.page params[:page]
-    @page_size = Panel.page_size params[:page_size]
-    @panels = Panel.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = Panel.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @panels, :model => Panel, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.html {
-      }
-      format.json { render text: Panel.list_as_json_text(@panels) }
+      format_filer format
+      format.json { render text: @@model.list_as_json_text(@items) }
       format.atom 
       format.rss { render :layout => false }
     end
   end
 
   def show
-    @item = Panel.show(params[:id], [@user, @admin])
+    @item = Panel.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
         @panel = @item
-        if @author
-          @new_scrolls = Scroll.mylist(@author, 1, 5)
-          @fresh_scrolls = ScrollPanel.mylist(@author, 1, 5).map {|sp| sp.scroll}
-          @new_sheets = Sheet.mylist(@author, 1, 5)
-          @fresh_sheets = SheetPanel.mylist(@author, 1, 5).map {|sp| sp.sheet}
+        if @operators.author
+          @new_scrolls = Scroll.mylist(@operators.author, 1, 5)
+          @fresh_scrolls = ScrollPanel.mylist(@operators.author, 1, 5).map {|sp| sp.scroll}
+          @new_sheets = Sheet.mylist(@operators.author, 1, 5)
+          @fresh_sheets = SheetPanel.mylist(@operators.author, 1, 5).map {|sp| sp.sheet}
         end
       }
       format_prof format
       format.json { render json: @item.panel_elements_as_json }
-      format.jsonp {
-        render :json => "callback(" + @item.panel_elements_as_json + ");"
-      }
     end
   end
 
index 4f472f4..959f171 100644 (file)
@@ -11,7 +11,7 @@ class PicturesController < ApplicationController
   before_filter :authenticate_admin!, :only => [:list, :browse]
   
   def show
-    @item = Picture.show(params[:id], [@user, @admin, @demand_user])
+    @item = Picture.show(params[:id], @operators)
 
     respond_to do |format|
       opt = {:type => @item.mime_type, :disposition=>"inline"}
index 1148e8d..3ba8579 100644 (file)
@@ -10,25 +10,18 @@ class ResourcePicturesController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = ResourcePicture
   def index
-    @page = ResourcePicture.page params[:page]
-    @page_size = ResourcePicture.page_size params[:page_size]
-    @resource_pictures = ResourcePicture.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = ResourcePicture.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @resource_pictures, :model => ResourcePicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @resource_pictures.to_json(ResourcePicture.list_json_opt) }
+      format_filer format
+      format.json { render :json => @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = ResourcePicture.show(params[:id], [@user, @admin, @demand_user])
+    @item = ResourcePicture.show(params[:id], @operators)
 
     respond_to do |format|
       opt = {:type => @item.mime_type, :disposition=>"inline"}
index fe91d4f..dfdb3a8 100644 (file)
@@ -10,32 +10,25 @@ class ScrollPanelsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = ScrollPanel
   def index
-    @page = ScrollPanel.page params[:page]
-    @page_size = ScrollPanel.page_size params[:page_size]
-    @scroll_panels = ScrollPanel.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = ScrollPanel.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @scroll_panels, :model => ScrollPanel, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @scroll_panels.to_json(ScrollPanel.list_json_opt) }
+      format_filer format
+      format.json { render :json => @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = ScrollPanel.show(params[:id], [@user, @admin])
+    @item = ScrollPanel.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
         @scroll_panel = @item
       }
       format_prof format
-      format.json { render json: @item.scroll_panel_as_json(@author) }
+      format.json { render json: @item.scroll_panel_as_json(@operators.author) }
     end
   end
   
index f183bd5..825e153 100644 (file)
@@ -10,32 +10,26 @@ class ScrollsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Scroll
   def index
-    @page = Scroll.page params[:page]
-    @page_size = Scroll.page_size params[:page_size]
-    @scrolls = Scroll.list(@page, @page_size)
+    set_filer
+
     respond_to do |format|
-      format.html {
-        @paginate = Scroll.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @scrolls, :model => Scroll, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @scrolls.to_json(Scroll.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
       format.atom 
       format.rss
     end
   end
 
   def show
-    @item = Scroll.show(params[:id], [@user, @admin])
+    @item = Scroll.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
         @scroll = @item
-        if @author
-          @new_panels = Panel.mylist(@author, 1, 5)
+        if @operators.author
+          @new_panels = Panel.mylist(@operators.author, 1, 5)
         end
       }
       format.json { render json: @item.to_json(Scroll.show_json_opt) }
index fe64c51..95cfab5 100644 (file)
@@ -10,25 +10,18 @@ class SheetPanelsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = SheetPanel
   def index
-    @page = SheetPanel.page params[:page]
-    @page_size = SheetPanel.page_size params[:page_size]
-    @sheet_panels = SheetPanel.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = SheetPanel.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @sheet_panels, :model => SheetPanel, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @sheet_panels.to_json(SheetPanel.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = SheetPanel.show(params[:id], [@user, @admin])
+    @item = SheetPanel.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
index 5e5e86f..ab093eb 100644 (file)
@@ -10,34 +10,28 @@ class SheetsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Sheet
   def index
-    @page = Sheet.page params[:page]
-    @page_size = Sheet.page_size params[:page_size]
-    @sheets = Sheet.list(@page, @page_size)
+    set_filer
+
     respond_to do |format|
-      format.html {
-        @paginate = Sheet.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @sheets, :model => Sheet, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @sheets.to_json(Sheet.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
       format.atom 
       format.rss
     end
   end
 
   def show
-    @item = Sheet.show(params[:id], [@user, @admin])
+    @item = Sheet.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
         @sheet = @item
-        if @author
-          @new_panels = Panel.mylist(@author, 1, 5)
-          @new_stories = Story.mylist(@author, 1, 5)
-          @fresh_stories = StorySheet.mylist(@author, 1, 5).map {|ss| ss.story}
+        if @operators.author
+          @new_panels = Panel.mylist(@operators.author, 1, 5)
+          @new_stories = Story.mylist(@operators.author, 1, 5)
+          @fresh_stories = StorySheet.mylist(@operators.author, 1, 5).map {|ss| ss.story}
         end
       }
       format_prof format
index a89f957..c89db4b 100644 (file)
@@ -8,22 +8,18 @@ class SpeechBalloonTemplatesController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse, :destroy]
 
+  @@model = SpeechBalloonTemplate
   def index
-    @speech_balloon_templates = SpeechBalloonTemplate.enable_list
+    set_filer
 
     respond_to do |format|
-      format.html {
-        render :template => 'system/filer', :locals => {
-          :items => @speech_balloon_templates, :model => SpeechBalloonTemplate, 
-          :roles => [@user, @admin], :pager => nil
-        }
-      }
-      format.json { render json: @speech_balloon_templates.to_json(SpeechBalloonTemplate.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = SpeechBalloonTemplate.show(params[:id], [@user, @admin])
+    @item = SpeechBalloonTemplate.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
@@ -33,9 +29,6 @@ class SpeechBalloonTemplatesController < ApplicationController
       format.json {
         render :json => @item.to_json(SpeechBalloonTemplate.show_json_opt)
       }
-      format.jsonp {
-        render :json => "callback(" + @item.to_json() + ")"
-      }
     end
   end
 
index 1eb3764..9247534 100644 (file)
@@ -10,25 +10,18 @@ class SpeechBalloonsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = SpeechBalloon
   def index
-    @page = SpeechBalloon.page params[:page]
-    @page_size = SpeechBalloon.page_size params[:page_size]
-    @speech_balloons = SpeechBalloon.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = SpeechBalloon.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @speech_balloons, :model => SpeechBalloon, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @speech_balloons.to_json(SpeechBalloon.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
   
   def show
-    @item = SpeechBalloon.show(params[:id], [@user, @admin])
+    @item = SpeechBalloon.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @speech_balloon = @item
index 1a34b66..a7bdd40 100644 (file)
@@ -10,25 +10,18 @@ class SpeechesController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Speech
   def index
-    @page = Speech.page params[:page]
-    @page_size = Speech.page_size params[:page_size]
-    @speeches = Speech.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = Speech.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @speeches, :model => Speech, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @speeches.to_json(Speech.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
   
   def show
-    @item = Speech.show(params[:id], [@user, @admin])
+    @item = Speech.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         @speech = @item
index 5d137c4..c828287 100644 (file)
@@ -10,31 +10,24 @@ class StoriesController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = Story
   def index
-    @page = Story.page params[:page]
-    @page_size = Story.page_size params[:page_size]
-    @stories = Story.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = Story.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @stories, :model => Story, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @stories.to_json(Story.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = Story.show(params[:id], [@user, @admin])
+    @item = Story.show(params[:id], @operators)
 
     respond_to do |format|
       format.html { 
         @story = @item
-        if @author
-          @new_sheets = Sheet.mylist(@author, 1, 5)
+        if @operators.author
+          @new_sheets = Sheet.mylist(@operators.author, 1, 5)
         end
       }
       format_prof format
index f071f13..9748aa7 100644 (file)
@@ -10,25 +10,18 @@ class StorySheetsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
+  @@model = StorySheet
   def index
-    @page = StorySheet.page params[:page]
-    @page_size = StorySheet.page_size params[:page_size]
-    @story_sheets = StorySheet.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = StorySheet.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @story_sheets, :model => StorySheet, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render :json => @story_sheets.to_json(StorySheet.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = StorySheet.show(params[:id], [@user, @admin])
+    @item = StorySheet.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
index ea1d542..374788c 100644 (file)
@@ -10,25 +10,18 @@ class SystemPicturesController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse, :new, :create]
 
+  @@model = SystemPicture
   def index
-    @page = SystemPicture.page params[:page]
-    @page_size = SystemPicture.page_size params[:page_size]
-    @system_pictures = SystemPicture.list(@page, @page_size)
+    set_filer
 
     respond_to do |format|
-      format.html {
-        @paginate = SystemPicture.list_paginate(@page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @system_pictures, :model => SystemPicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @system_pictures.to_json(SystemPicture.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = SystemPicture.show(params[:id], [@user, @admin, @demand_user])
+    @item = SystemPicture.show(params[:id], @operators)
     
     respond_to do |format|
       opt = {:type => @item.mime_type, :disposition=>"inline"}
index d4d38ce..a6bed1a 100644 (file)
@@ -8,34 +8,25 @@ class WritingFormatsController < ApplicationController
   end
   before_filter :authenticate_admin!, :only => [:list, :browse, :destroy]
 
+  @@model = WritingFormat
   def index
-    @writing_formats = WritingFormat.enable_list
+    set_filer
 
     respond_to do |format|
-      format.html {
-        render :template => 'system/filer', :locals => {
-          :items => @writing_formats, :model => WritingFormat, 
-          :roles => [@user, @admin], :pager => nil
-        }
-      }
-      format.json { render json: @writing_formats.to_json(WritingFormat.list_json_opt) }
+      format_filer format
+      format.json { render json: @items.to_json(@@model.list_json_opt) }
     end
   end
 
   def show
-    @item = WritingFormat.show(params[:id], [@user, @admin])
+    @item = WritingFormat.show(params[:id], @operators)
 
     respond_to do |format|
       format.html {
         @writing_format = @item
       }
       format_prof format
-      format.json {
-        render :json => @item.to_json(WritingFormat.show_json_opt)
-      }
-      format.jsonp {
-        render :json => "callback(" + @item.to_json() + ")"
-      }
+      format.json { render :json => @item.to_json(WritingFormat.show_json_opt) }
     end
   end
 
index bef4215..955c8ff 100644 (file)
-class Artist < ActiveRecord::Base
-  belongs_to :author
+class Artist < Pettanr::Owner
+  belongs_to :user
   has_many :original_pictures
   has_many :pictures
   has_many :resource_pictures
   
   validates :name, :presence => true, :length => {:maximum => 30}
-  validates :author_id, :numericality => {:allow_blank => true}
+  validates :user_id, :numericality => true, :existence => {:both => false}
+  validates :provider, :numericality => true
   
-  before_validation :valid_encode
-  
-  def valid_encode
-    ['name'].each do |a|
-      next if attributes[a] == nil
-      raise Pettanr::BadRequest unless attributes[a].valid_encoding?
-    end
-  end
+  @@valid_encode_columns += ['name']
+  @@visible_count_options = {:conditions => ['artists.author_id is not null']}
   
   def supply_default
     self.name = 'no name' if self.name.blank?
   end
   
-  def overwrite au
-    return false unless au
-    self.author_id = au.id
-  end
-  
-  def own? roles
-    roles = [roles] unless roles.respond_to?(:each)
-    au = Artist.get_author_from_roles roles
-    return false unless au
-    self.author_id == au.id
-  end
-  
-  def visible? roles
-    if MagicNumber['run_mode'] == 0
-      return false unless guest_role_check(roles)
-    else
-      return false unless resource_reader_role_check(roles)
-    end
-    true
-  end
-  
   def self.find_by_author author
     Artist.find( :first, :conditions => ['author_id = ?', author.id])
   end
   
-  def self.default_page_size
-    25
-  end
-  
-  def self.max_page_size
-    100
-  end
-  
-  def self.page prm = nil
-    page = prm.to_i
-    page = 1 if page < 1
-    page
-  end
-  
-  def self.page_size prm = self.default_page_size
-    page_size = prm.to_i
-    page_size = self.max_page_size if page_size > self.max_page_size
-    page_size = self.default_page_size if page_size < 1
-    page_size
-  end
-  
-  def self.offset cnt, prm = nil
-    offset = prm.to_i
-    offset = cnt - 1 if offset >= cnt
-    offset = cnt - offset.abs if offset < 0
-    offset = 0 if offset < 0
-    offset
-  end
-  
   def self.list_where
-    'artists.author_id is not null'
-  end
-  
-  def self.list page = 1, page_size = self.default_page_size
-    Artist.where(self.list_where()).includes(Artist.list_opt).order('artists.created_at desc').offset((page -1) * page_size).limit(page_size)
+    'artists.provider = 0'
   end
   
-  def self.list_paginate page = 1, page_size = self.default_page_size
-    Kaminari.paginate_array(Array.new(Artist.where(self.list_where()).count, nil)).page(page).per(page_size)
+  def self.list_order
+    'artists.created_at desc'
   end
   
   def self.list_opt
-    {:author => {} }
+    {:user => {:author => {}} }
   end
   
   def self.list_json_opt
-    {:include => {:author => {}} }
-  end
-  
-  def self.show aid, au
-    opt = {}
-    opt.merge!(Artist.show_opt)
-    res = Artist.find(aid, opt)
-    raise ActiveRecord::Forbidden unless res.visible?(au)
-    res
-  end
-  
-  def self.edit sid, au
-    opt = {}
-    opt.merge!(Artist.show_opt)
-    res = Artist.find sid, opt
-    raise ActiveRecord::Forbidden unless res.own?(au)
-    res
+    {:include => {:user => {:author => {}}} }
   end
   
   def self.show_opt
-    {:include => {:author => {}} }
+    {:include => {:user => {:author => {}}} }
   end
   
   def self.show_json_opt
-    {:include => {:author => {}} }
-  end
-  
-  def self.visible_count
-    Artist.count :conditions => ['artists.author_id is not null']
+    {:include => {:user => {:author => {}}} }
   end
   
   def self.export(dt = nil)
     opt = {}
     cond = if dt
-      ['artists.author_id is not null and artists.updated_at >= ?', dt]
+      ['artists.artists.provider = 0 and artists.updated_at >= ?', dt]
     else
-      'artists.author_id is not null'
+      'artists.artists.provider = 0'
     end
     opt.merge!({:conditions => cond}) 
     opt.merge!({:order => 'id'})
index 460d2e8..63940e0 100644 (file)
@@ -1,5 +1,4 @@
-class Author < ActiveRecord::Base
-  has_one :artist
+class Author < Pettanr::Owner
   belongs_to :user
   has_many :scrolls
   has_many :comics
@@ -12,111 +11,39 @@ class Author < ActiveRecord::Base
   validates :working_panel_id, :numericality => {:allow_nil => true}
   validates :user_id, :numericality => true, :existence => {:both => false}
   
-  before_validation :valid_encode
-  
-  def valid_encode
-    ['name'].each do |a|
-      next if attributes[a] == nil
-      raise Pettanr::BadRequest unless attributes[a].valid_encoding?
-    end
-  end
+  @@valid_encode_columns += ['name']
+  # @@visible_count_options = {}
   
   def supply_default
     self.name = 'no name' if self.name.blank?
   end
   
-  def overwrite uid
-    self.user_id = uid
-  end
-  
-  def own? roles
-    roles = [roles] unless roles.respond_to?(:each)
-    au = Author.get_author_from_roles roles
-    return false unless au
-    self.id == au.id
-  end
-  
-  def visible? roles
-    if MagicNumber['run_mode'] == 0
-      return false unless guest_role_check(roles)
-    else
-      return false unless reader_role_check(roles)
-    end
-    return true
-  end
-  
-  def artist?
-    Artist.find_by_author(self) != nil
-  end
-  
   def working?
     self.working_panel_id and self.working_panel
   end
   
-  def step2 n
-    self.name = n
-    self.save
-  end
-  
-  def self.default_page_size
-    25
-  end
-  
-  def self.max_page_size
-    100
-  end
-  
-  def self.page prm = nil
-    page = prm.to_i
-    page = 1 if page < 1
-    page
-  end
-  
-  def self.page_size prm = self.default_page_size
-    page_size = prm.to_i
-    page_size = self.max_page_size if page_size > self.max_page_size
-    page_size = self.default_page_size if page_size < 1
-    page_size
+  def self.list_where
+    ''
   end
   
-  def self.list page = 1, page_size = self.default_page_size
-    Author.includes(Author.list_opt).order('authors.created_at desc').offset((page -1) * page_size).limit(page_size)
-  end
-  
-  def self.list_paginate page = 1, page_size = self.default_page_size
-    Kaminari.paginate_array(Array.new(Author.count, nil)).page(page).per(page_size)
+  def self.list_order
+    'authors.created_at desc'
   end
   
   def self.list_opt
-    {:artist => {} }
+    {:user => {:artist => {}} }
   end
   
   def self.list_json_opt
-    {:include => {:artist => {}} }
-  end
-  
-  def self.show aid, roles
-    opt = {}
-    opt.merge!(Author.show_opt)
-    res = Author.find(aid, opt)
-    raise ActiveRecord::Forbidden unless res.visible?(roles)
-    res
+    {:include => {:user => {:artist => {}}} }
   end
   
   def self.show_opt
-    {:include => {:artist => {}} }
+    {:include => {:user => {:artist => {}}} }
   end
   
   def self.show_json_opt
-    {:include => {:artist => {}} }
-  end
-  
-  def self.edit aid, au
-    opt = {}
-    opt.merge!(Author.show_opt)
-    res = Author.find aid, opt
-    raise ActiveRecord::Forbidden unless res.own?(au)
-    res
+    {:include => {:user => {:artist => {}}} }
   end
   
   def self.default_scroll_page_size
@@ -329,8 +256,4 @@ class Author < ActiveRecord::Base
     page_size
   end
   
-  def self.visible_count
-    Author.count
-  end
-  
 end
index 98fd4ab..fbb04e2 100644 (file)
@@ -1,5 +1,5 @@
 #コミック
-class Comic < ActiveRecord::Base
+class Comic < Pettanr::Content
   has_many :stories, :order => 't'
   belongs_to :author
   
@@ -7,14 +7,8 @@ class Comic < ActiveRecord::Base
   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
   
-  before_validation :valid_encode
-  
-  def valid_encode
-    ['title', 'description'].each do |a|
-      next if attributes[a] == nil
-      raise Pettanr::BadRequest unless attributes[a].valid_encoding?
-    end
-  end
+  @@valid_encode_columns += ['title', 'description']
+  @@visible_count_options = {:conditions => 'visible > 0'}
   
   def supply_default
     self.visible = 0 if self.visible.blank?
@@ -25,20 +19,8 @@ class Comic < ActiveRecord::Base
     self.author_id = au.id
   end
   
-  def own? roles
-    roles = [roles] unless roles.respond_to?(:each)
-    au = Comic.get_author_from_roles roles
-    return false unless au
-    self.author_id == au.id
-  end
-  
-  def visible? roles
-    if MagicNumber['run_mode'] == 0
-      return false unless guest_role_check(roles)
-    else
-      return false unless reader_role_check(roles)
-    end
-    return true if self.own?(roles)
+  def visible? operators
+    super
     self.visible > 0
   end
   
@@ -49,69 +31,28 @@ class Comic < ActiveRecord::Base
   def symbol_filename
   end
   
-  def self.default_page_size
-    25
-  end
-  
-  def self.max_page_size
-    100
-  end
-  
-  def self.default_panel_size
-    30
-  end
-  
-  def self.max_panel_size
-    200
-  end
-  
-  def self.page prm = nil
-    page = prm.to_i
-    page = 1 if page < 1
-    page
-  end
-  
-  def self.page_size prm = self.default_page_size
-    page_size = prm.to_i
-    page_size = self.max_page_size if page_size > self.max_page_size
-    page_size = self.default_page_size if page_size < 1
-    page_size
-  end
-  
   def self.list_where
     'comics.visible > 0'
   end
   
-  def self.mylist_where au
-    ['comics.author_id = ?', au.id]
-  end
-  
-  def self.himlist_where au
-    ['comics.author_id = ? and comics.visible > 0', au.id]
-  end
-  
-  def self.list page = 1, page_size = self.default_page_size
-    Comic.where(self.list_where()).includes(Comic.list_opt).order('comics.updated_at desc').offset((page -1) * page_size).limit(page_size)
-  end
-  
-  def self.mylist au, page = 1, page_size = Author.default_comic_page_size
-    Comic.where(self.mylist_where(au)).includes(Comic.list_opt).order('comics.updated_at desc').offset((page -1) * page_size).limit(page_size)
+  def self.list_order
+    'comics.updated_at desc'
   end
   
-  def self.himlist au, page = 1, page_size = Author.default_comic_page_size
-    Comic.where(self.himlist_where(au)).includes(Comic.list_opt).order('comics.updated_at desc').offset((page -1) * page_size).limit(page_size)
+  def self.mylist_where me
+    ['comics.author_id = ?', me.id]
   end
   
-  def self.list_paginate page = 1, page_size = self.default_page_size
-    Kaminari.paginate_array(Array.new(Comic.where(self.list_where()).count, nil)).page(page).per(page_size)
+  def self.mylist_order
+    'comics.updated_at desc'
   end
   
-  def self.mylist_paginate au, page = 1, page_size = Author.default_comic_page_size
-    Kaminari.paginate_array(Array.new(Comic.where(self.mylist_where(au)).count, nil)).page(page).per(page_size)
+  def self.himlist_where anybody
+    ['comics.author_id = ? and comics.visible > 0', anybody.id]
   end
   
-  def self.himlist_paginate au, page = 1, page_size = Author.default_comic_page_size
-    Kaminari.paginate_array(Array.new(Comic.where(self.himlist_where(au)).count, nil)).page(page).per(page_size)
+  def self.himlist_order
+    'comics.updated_at desc'
   end
   
   def self.list_by_author_where author_id
@@ -130,22 +71,6 @@ class Comic < ActiveRecord::Base
     {:include => {:stories => {}, :author => {}} }
   end
   
-  def self.show cid, roles
-    opt = {}
-    opt.merge!(Comic.show_opt)
-    res = Comic.find(cid, opt)
-    raise ActiveRecord::Forbidden unless res.visible?(roles)
-    res
-  end
-  
-  def self.edit cid, au
-    opt = {}
-    opt.merge!(Comic.show_opt)
-    res = Comic.find(cid, opt)
-    raise ActiveRecord::Forbidden unless res.own?(au)
-    res
-  end
-  
   def self.show_opt
     {:include => {:stories => {}, :author => {}} }
   end
@@ -154,10 +79,6 @@ class Comic < ActiveRecord::Base
     {:include => {:stories => {}, :author => {}} }
   end
   
-  def self.visible_count
-    Comic.count 'visible > 0'
-  end
-  
   def destroy_with_story
     res = false
     Comic.transaction do
index e988223..0f133cb 100644 (file)
@@ -123,6 +123,14 @@ class Panel < ActiveRecord::Base
     self.field_tag_attributes(column, no_attr, opt).to_attr
   end
   
+    def render_count
+      @render_count ||= 1
+    end
+    
+    def rendered
+      @render_count = render_count + 1
+    end
+    
   def self.default_page_size
     25
   end
index fe9f919..00b5901 100644 (file)
@@ -76,7 +76,7 @@ class SpeechBalloon < ActiveRecord::Base
     self.speech_balloon_template.symbol_option
   end
   
-  def new_sballoon
+  def new_balloon
     @new_balloon
   end
   
index 48a344c..d59f35e 100644 (file)
@@ -1,5 +1,6 @@
 class User < ActiveRecord::Base
   has_one :author
+  has_one :artist
   
   # Include default devise modules. Others available are:
   # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
@@ -28,11 +29,11 @@ class User < ActiveRecord::Base
       self.author.panels.each do |panel|
         raise ActiveRecord::Rollback unless panel.destroy_with_elements
       end
-      if self.author.artist
-        self.author.artist.original_pictures.each do |original_picture|
+      if self.artist
+        self.artist.original_pictures.each do |original_picture|
           raise ActiveRecord::Rollback unless original_picture.destroy_with_resource_picture
         end
-        raise ActiveRecord::Rollback unless self.author.artist.destroy
+        raise ActiveRecord::Rollback unless self.artist.destroy
       end
       raise ActiveRecord::Rollback unless self.author.destroy
       raise ActiveRecord::Rollback unless super
index 96cc8f2..191f9be 100644 (file)
@@ -1,26 +1,26 @@
-<% @page_title = t('.title') + ':' + @ar.name %>
+<% @page_title = t('.title') + ':' + @artist.name %>
 <h1><%= t '.title' -%></h1>
 <p id="notice"><%= notice %></p>
 
 <p>
   <b><%= t_m 'Artist.name' -%>:</b>
-  <%= h @ar.name %>
+  <%= h @artist.name %>
 </p>
 
 <p>
   <b><%= t_m 'Artist.created_at' -%>:</b>
-  <%= l @ar.created_at %>
+  <%= l @artist.created_at %>
 </p>
 
 <p>
   <b><%= t_m 'Artist.updated_at' -%>:</b>
-  <%= l @ar.updated_at %>
+  <%= l @artist.updated_at %>
 </p>
 
 <p>
-  <%= link_to t('artists.show.to_resource_pictures'), resource_pictures_artist_path(@ar) %>
+  <%= link_to t('artists.show.to_resource_pictures'), resource_pictures_artist_path(@artist) %>
 </p>
 
-<% if @ar.own?(@artist) %>
-  <%= link_to t('link.edit'), edit_artist_path(@ar) %>
+<% if @artist.own?(@artist) %>
+  <%= link_to t('link.edit'), edit_artist_path(@artist) %>
 <% end %>
index 2ffcf81..031c159 100644 (file)
@@ -1,70 +1,70 @@
-<% @page_title = t('.title') + ':' + @au.name %>
+<% @page_title = t('.title') + ':' + @author.name %>
 <h1><%= t '.title' -%></h1>
 <p id="notice"><%= notice %></p>
 
 <p>
   <b><%= t_m 'Author.name' -%>:</b>
-  <%= h @au.name %>
+  <%= h @author.name %>
 </p>
 
 <p>
   <b><%= t_m 'Author.created_at' -%>:</b>
-  <%= l @au.created_at %>
+  <%= l @author.created_at %>
 </p>
 
 <p>
   <b><%= t_m 'Author.updated_at' -%>:</b>
-  <%= l @au.updated_at %>
+  <%= l @author.updated_at %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_scrolls'), scrolls_author_path(@au) %>
+  <%= link_to t('authors.show.to_scrolls'), scrolls_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_scroll_panels'), scroll_panels_author_path(@au) %>
+  <%= link_to t('authors.show.to_scroll_panels'), scroll_panels_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_comics'), comics_author_path(@au) %>
+  <%= link_to t('authors.show.to_comics'), comics_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_stories'), stories_author_path(@au) %>
+  <%= link_to t('authors.show.to_stories'), stories_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_story_sheets'), story_sheets_author_path(@au) %>
+  <%= link_to t('authors.show.to_story_sheets'), story_sheets_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_sheets'), sheets_author_path(@au) %>
+  <%= link_to t('authors.show.to_sheets'), sheets_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_sheet_panels'), sheet_panels_author_path(@au) %>
+  <%= link_to t('authors.show.to_sheet_panels'), sheet_panels_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_panels'), panels_author_path(@au) %>
+  <%= link_to t('authors.show.to_panels'), panels_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_panel_pictures'), panel_pictures_author_path(@au) %>
+  <%= link_to t('authors.show.to_panel_pictures'), panel_pictures_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_speech_balloons'), speech_balloons_author_path(@au) %>
+  <%= link_to t('authors.show.to_speech_balloons'), speech_balloons_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_ground_pictures'), ground_pictures_author_path(@au) %>
+  <%= link_to t('authors.show.to_ground_pictures'), ground_pictures_author_path(@author) %>
 </p>
 
 <p>
-  <%= link_to t('authors.show.to_ground_colors'), ground_colors_author_path(@au) %>
+  <%= link_to t('authors.show.to_ground_colors'), ground_colors_author_path(@author) %>
 </p>
 
-<% if @au.own?(@author) %>
-  <%= link_to t('link.edit'), edit_author_path(@au) %>
+<% if @author.own?(@author) %>
+  <%= link_to t('link.edit'), edit_author_path(@author) %>
 <% end %>
index 2c6dd4e..3fc48ad 100644 (file)
@@ -1,5 +1,5 @@
 <h1><%= t '.title' -%></h1>
-<h2><%= link_to h(@author.name), main_app.author_path(@author) -%></h2>
+<h2><%= link_to h(@operators.author.name), main_app.author_path(@operators.author) -%></h2>
 <h3><%= t('.updated_scroll') -%></h3>
 <table>
   <tr height="100px">
@@ -58,8 +58,8 @@
     </td>
   </tr>
 </table>
-<% if @author.artist? -%>
-  <h2><%= link_to h(@artist.name), main_app.artist_path(@artist) -%></h2>
+<% if @operators.artist -%>
+  <h2><%= link_to h(@operators.artist.name), main_app.artist_path(@operators.artist) -%></h2>
   <h3><%= t('.updated_picture') -%></h3>
   <table>
     <tr height="100px">
index f5abbcf..9937819 100644 (file)
 <div>
 <% if user_signed_in? %>
   <%= link_to t('home.index.title'), '/home' %>
-  <%= link_to t('home.scrolls.title'), '/home/scroll' %>
-  <%= link_to t('home.panels.title'), '/home/panel' %>
-  <%= link_to t('home.panel_pictures.title'), '/home/panel_picture' %>
-  <%= link_to h(truncate(@author.name, :length => 12)), main_app.author_path(@author) %>
-  <% if @artist %>
+  <% if @operators.author %>
+    <%= link_to t('home.scrolls.title'), '/home/scroll' %>
+    <%= link_to t('home.panels.title'), '/home/panel' %>
+    <%= link_to t('home.panel_pictures.title'), '/home/panel_picture' %>
+    <%= link_to h(truncate(@operators.author.name, :length => 12)), main_app.author_path(@operators.author) %>
+  <% end %>
+  <% if @operators.artist %>
     <%= link_to t('home.pictures.title'), main_app.original_pictures_path %>
-    <%= link_to h(truncate(@artist.name, :length => 12)), main_app.artist_path(@artist) %>
+    <%= link_to h(truncate(@operators.artist.name, :length => 12)), main_app.artist_path(@operators.artist) %>
   <% end %>
   <%= link_to t('home.configure.title'), '/home/configure' %>
   <%= link_to t('home.sign_out.title'), main_app.destroy_user_session_path, :method => :delete %>
index d6ad022..93aeab0 100644 (file)
     </td>\r
     <td>\r
       <div>\r
-        <% if @author %>\r
-          <%= link_to h(truncate(@author.name, :length => 12)), main_app.author_path(@author) %>\r
+        <% if @operators.author %>\r
+          <%= link_to h(truncate(@operators.author.name, :length => 12)), main_app.author_path(@operators.author) %>\r
         <% end %>\r
       </div>\r
       <div>\r
-        <% if @artist %>\r
-          <%= link_to h(truncate(@artist.name, :length => 12)), main_app.artist_path(@artist) %>\r
+        <% if @operators.artist %>\r
+          <%= link_to h(truncate(@operators.artist.name, :length => 12)), main_app.artist_path(@operators.artist) %>\r
         <% end %>\r
       </div>\r
     </td>\r
@@ -61,9 +61,9 @@
   <%= link_to t_m('Author'), main_app.authors_path %>\r
   <%= link_to t_m('Artist'), main_app.artists_path %>\r
 </div>\r
-<% if @author %>\r
-  <div width="100%" style="background-color: #fadddd; padding: 5px;">\r
-    <%= link_to t('tab.creator.home'), '/home' %>\r
+<div width="100%" style="background-color: #fadddd; padding: 5px;">\r
+  <%= link_to t('tab.creator.home'), '/home' %>\r
+  <% if @operators.author %>\r
     <%= link_to t('tab.creator.comic'), '/home/comics' %>\r
     <%= link_to t('*'), main_app.new_comic_path %>\r
     <%= link_to t('tab.creator.story'), '/home/stories' %>\r
     <%= link_to t('*'), main_app.new_scroll_path %>\r
     <%= link_to t('tab.creator.panel'), '/home/panels' %>\r
     <%= link_to t('*'), main_app.new_panel_path %>\r
-    <% if @artist %>\r
-      <%= link_to t('tab.creator.original_picture'), main_app.original_pictures_path %>\r
-      <%= link_to t('*'), main_app.new_original_picture_path %>\r
-      <%= link_to t('tab.creator.resource_picture'), '/home/resource_pictures' %>\r
-    <% end %>\r
-    <% if @author and @author.working? -%>\r
-      <%= link_to t('tab.creator..catch'), main_app.panel_path(@author.working_panel) %>\r
-    <% end -%>\r
-  </div>\r
-<% end %>\r
+  <% end -%>\r
+  <% if @operators.artist %>\r
+    <%= link_to t('tab.creator.original_picture'), main_app.original_pictures_path %>\r
+    <%= link_to t('*'), main_app.new_original_picture_path %>\r
+    <%= link_to t('tab.creator.resource_picture'), '/home/resource_pictures' %>\r
+  <% end %>\r
+  <% if @operators.author and @operators.author.working? -%>\r
+    <%= link_to t('tab.creator..catch'), main_app.panel_path(@operators.author.working_panel) %>\r
+  <% end %>\r
+</div>\r
 <%= yield %>\r
 <div width="100%" style="background-color: #faddfa; padding: 5px;">\r
   <%= link_to t('tab.demander.title'), main_app.demanders_path %>\r
index 1002028..355017e 100644 (file)
@@ -4,7 +4,7 @@
     <% elm.boost %>
   <% end %>
 <% end %>
-<div id="<%= panel.tag_id -%>" panel_id="<%= panel.tag_panel_id -%>" class="pettanr-comic-panel" style="width:<%= panel.width %>px;height:<%= panel.height %>px;border-style: solid;border-width: <%= panel.border %>px;border-color:black; background-color:white;">
+<%= content_tag :div, :id => panel.tag_id, :panel_id => panel.tag_panel_id, :class => "pettanr-comic-panel", :style => "width: #{panel.width}px; height: #{panel.height}px; border-style: solid; border-width: #{panel.border}px; border-color: black; background-color: white;" do %>
   <% if panel.visible? author -%>
     <% panel.panel_elements.each do |elm| %>
       <%= render elm.class.to_s.tableize + '/element', :elm => elm, :spot => spot %>
@@ -12,4 +12,5 @@
   <% else %>
     <h2><%= t('panels.hidden') %></h2>
   <% end %>
-</div>
+<% end %>
+<% panel.rendered %>
index c6824f7..7cceeb6 100644 (file)
@@ -7,8 +7,12 @@ require 'inspire'
 require 'picture_io'
 require 'pettan_imager'
 require 'ar_helper'
+require 'operator'
 require 'import_result'
 require 'common'
+require 'item'
+require 'owner'
+require 'content'
 require 'element'
 require 'element_part'
 # Initialize the rails application
diff --git a/db/migrate/20131121230958_artist_belongs_to_user.rb b/db/migrate/20131121230958_artist_belongs_to_user.rb
new file mode 100644 (file)
index 0000000..dd1327c
--- /dev/null
@@ -0,0 +1,18 @@
+class ArtistBelongsToUser < ActiveRecord::Migration
+  def up
+    add_column :artists, :user_id, :integer, :null => false, :default => 0
+    add_column :artists, :provider, :integer, :null => false, :default => 0
+    Artist.find(:all).each do |artist|
+      if artist.author_id
+        artist.user_id = Author.find(artist.author_id).user_id
+      else
+        artist.provider = 1
+      end
+      artist.save!
+    end
+  end
+
+  def down
+    remove_column :artists, :author_id
+  end
+end
diff --git a/lib/content.rb b/lib/content.rb
new file mode 100644 (file)
index 0000000..9f34832
--- /dev/null
@@ -0,0 +1,71 @@
+class Pettanr::Content < Pettanr::Item
+  self.abstract_class = true
+  # ClassMethods
+  
+  def self.mylist_where me
+    ''
+  end
+  
+  def self.mylist_order
+    ''
+  end
+  
+  def self.himlist_where anyone
+    ''
+  end
+  
+  def self.himlist_order
+    ''
+  end
+  
+  def self.mylist me, page = 1, page_size = self.default_page_size
+    self.where(self.mylist_where(me)).includes(self.list_opt).order(self.mylist_order).offset((page -1) * page_size).limit(page_size)
+  end
+  
+  def self.himlist anyone, operators, page = 1, page_size = self.default_page_size
+    where_str = if operators.admin?
+      self.list_where
+    else
+      self.himlist_where(anyone)
+    end
+    self.where(where_str).includes(self.list_opt).order(self.mylist_order).offset((page -1) * page_size).limit(page_size)
+  end
+  
+  def self.mylist_paginate me, page = 1, page_size = self.default_page_size
+    Kaminari.paginate_array(
+      Array.new(self.where(self.mylist_where(me)
+    ).includes(self.list_opt).count, nil)).page(page).per(page_size)
+  end
+  
+  def self.himlist_paginate anyone, operators, page = 1, page_size = self.default_page_size
+    where_str = if operators.admin?
+      self.list_where
+    else
+      self.himlist_where(anyone)
+    end
+    Kaminari.paginate_array(
+      Array.new(self.where(where_str)
+    ).includes(self.list_opt).count, nil)).page(page).per(page_size)
+  end
+  
+  def self.edit content_id, operators
+    content = self.find content_id, self.show_opt
+    raise ActiveRecord::Forbidden unless content.own?(operators)
+    content
+  end
+  
+  #InstanceMethods
+  
+  def visible? operators
+    super
+    return true if self.own?(operators)
+    true
+  end
+  
+  def own? operators
+    return false unless operators.author
+    self.author_id == operators.author.id
+  end
+  
+end
+
index a92f430..3cfa688 100644 (file)
@@ -68,6 +68,18 @@ module Element
        end
     end
     
+    def element_index
+      @element_index ||= self.t
+    end
+    
+    def parent
+      @parent ||= self.panel
+    end
+    
+    def parent= content
+      @parent = content
+    end
+    
     def new_index
       @new_index
     end
diff --git a/lib/item.rb b/lib/item.rb
new file mode 100644 (file)
index 0000000..b5af83b
--- /dev/null
@@ -0,0 +1,175 @@
+class Pettanr::Item < ActiveRecord::Base
+  self.abstract_class = true
+  # ClassMethods
+  # class_name
+  # table_name
+  
+  before_validation :valid_encode
+  
+  cattr_accessor :valid_encode_columns, :default_page_size, :max_page_size, :visible_count_options
+  @@valid_encode_columns = []
+  @@default_page_size = 25
+  @@max_page_size = 100
+  @@visible_count_options = {}
+  cattr_reader :singular, :plural
+  @@singular = 'Item'
+  @@plural = 'Items'
+  
+  def self.item_name
+    self.singular.underscore
+  end
+  
+  def self.path_name with_engine = false
+    self.plural.underscore
+  end
+  
+  def self.page_number prm = nil
+    page = prm.to_i
+    page = 1 if page < 1
+    page
+  end
+  
+  def self.page_size prm = self.default_page_size
+    page_size = prm.to_i
+    page_size = self.max_page_size if page_size > self.max_page_size
+    page_size = self.default_page_size if page_size < 1
+    page_size
+  end
+  
+  def self.list_where
+    ''
+  end
+  
+  def self.list_order
+    ''
+  end
+  
+  def self.list page = 1, page_size = self.default_page_size
+    self.where(self.list_where()).includes(self.list_opt).order(self.list_order).offset((page -1) * page_size).limit(page_size)
+  end
+  
+  def self.list_paginate page = 1, page_size = self.default_page_size
+    Kaminari.paginate_array(
+      Array.new(self.where(self.list_where()).includes(self.list_opt).count, nil)
+    ).page(page).per(page_size)
+  end
+  
+  def self.list_opt
+    {}
+  end
+  
+  def self.list_json_opt
+    {}
+  end
+  
+  def self.show item_id, operators
+    opt = {}
+    opt.merge!(self.show_opt)
+    item = self.find(item_id, opt)
+    raise ActiveRecord::Forbidden unless item.visible?(operators)
+    item
+  end
+  
+  def self.show_opt
+    {}
+  end
+  
+  def self.show_json_opt
+    {}
+  end
+  
+  def self.visible_count
+    self.count self.visible_count_options
+  end
+  
+  #InstanceMethods
+  
+  def item_name
+    self.class.item_name
+  end
+  
+  def valid_encode
+    self.class.valid_encode_columns.each do |a|
+      next if attributes[a] == nil
+      raise Pettanr::BadRequest unless attributes[a].valid_encoding?
+    end
+  end
+  
+  def supply_default
+  end
+  
+  def overwrite 
+  end
+  
+  def visible? operators
+    if MagicNumber['run_mode'] == 0
+      return false unless operators.guest?
+    else
+      return false unless operators.resource_reader?
+    end
+    true
+  end
+  
+  def dom_id_item 
+    self.new_record? ? '0' : self.id.to_s
+  end
+  
+  def tag_item_id c = nil
+    self.item_name + self.item_id + c.to_s
+  end
+  
+  def dom_id_item_field field_name
+    self.tag_item_id + field_name.to_s
+  end
+  
+  def path_name with_engine = false
+    self.class.path_name(with_engine)
+  end
+  
+  def form_template with_engine = false
+    self.path_name(with_engine) + '/form'
+  end
+  
+  def tag_item_attributes column = nil, opt = {}
+    {
+      :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, 
+      :element_id => self.tag_element_id, :element_type => self.tag_element_type
+    }.merge(opt)
+  end
+  
+  def field_tag_attributes column, no_attr, opt = {}
+    self.tag_attributes(column).merge(
+      {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
+    ).merge(opt)
+  end
+  
+  #render element by body
+  def any_tag_attributes name = nil, opt = {}
+    r = self.tag_attributes(name)
+    r.merge!(
+      {:new_index => self.tag_new_index}
+    ) if self.new_index
+    r.merge(opt)
+  end
+  
+  def select_tag_attributes(selected, column, no_attr)
+    [
+      :last, :first, 
+      {:html => {:selected => selected}}, 
+      self.field_tag_attributes(column, no_attr)
+    ]
+  end
+  
+  def tag_attr column = nil, opt = {}
+    self.tag_attributes(column, opt).to_attr
+  end
+  
+  def field_tag_attr column, no_attr, opt = {}
+    self.field_tag_attributes(column, no_attr, opt).to_attr
+  end
+  
+  def any_tag_attr name = nil, opt = {}
+    self.any_tag_attributes(name, opt).to_attr
+  end
+  
+end
diff --git a/lib/operator.rb b/lib/operator.rb
new file mode 100644 (file)
index 0000000..316bcbb
--- /dev/null
@@ -0,0 +1,82 @@
+class Operator
+  
+  def initialize operators
+    @operators = operators
+    @operators = [@operators] unless @operators.respond_to?(:each)
+    @operators.compact!
+  end
+  
+  #InstanceMethods
+  def find_author
+    @operators.each do |operator|
+      return operator if operator.is_a?(Author)
+      return operator.author if operator.is_a?(User)
+      return operator.user.author if operator.is_a?(Artist) and operator.user.author
+    end
+    nil
+  end
+  
+  def find_artist
+    @operators.each do |operator|
+      return operator.user.artist if operator.is_a?(Author) and operator.user.artist
+      return operator.artist if operator.is_a?(User)
+      return operator if operator.is_a?(Artist)
+    end
+    nil
+  end
+  
+  def find_admin
+    @operators.each do |operator|
+      return operator if operator.is_a?(Admin)
+    end
+    nil
+  end
+  
+  def author
+    return @author if @author
+    @author = find_author
+  end
+  
+  def artist
+    return @artist if @artist
+    @artist = find_artist
+  end
+  
+  def admin
+    return @admin if @admin
+    @admin = find_admin
+  end
+  
+  def guest?
+    true
+  end
+  
+  def reader?
+    @operators.each do |operator|
+      return true if operator.is_a?(Author) or operator.is_a?(Artist) or operator.is_a?(Admin) or operator.is_a?(User)
+    end
+    false
+  end
+  
+  def user?
+    @operators.each do |operator|
+      return true if operator.is_a?(Author) or operator.is_a?(Artist) or operator.is_a?(User)
+    end
+    false
+  end
+  
+  def resource_reader?
+    @operators.each do |operator|
+      return true if operator.is_a?(Author) or operator.is_a?(Artist) or operator.is_a?(Admin) or operator.is_a?(User) or operator.is_a?(DemandUser)
+    end
+    false
+  end
+  
+  def admin?
+    @operators.each do |operator|
+      return true if operator.is_a?(Admin)
+    end
+    false
+  end
+  
+end
diff --git a/lib/owner.rb b/lib/owner.rb
new file mode 100644 (file)
index 0000000..0d232d5
--- /dev/null
@@ -0,0 +1,23 @@
+class Pettanr::Owner < Pettanr::Item
+  self.abstract_class = true
+  # ClassMethods
+  
+  def self.edit owner_id, operators
+    owner = self.find owner_id, self.show_opt
+    raise ActiveRecord::Forbidden unless owner.own?(operators)
+    owner
+  end
+  
+  #InstanceMethods
+  
+  def overwrite operators
+    self.user_id = operators.user.id
+  end
+  
+  def own? operators
+    return false unless operators.user
+    self.user_id == operators.user.id
+  end
+  
+end
+
diff --git a/spec/models/item_spec.rb b/spec/models/item_spec.rb
new file mode 100644 (file)
index 0000000..d6fc310
--- /dev/null
@@ -0,0 +1,206 @@
+# -*- encoding: utf-8 -*-
+#管理者
+require 'spec_helper'
+
+describe Pettanr::Item do
+  before do
+    SpeechBalloonTemplate.delete_all
+    @admin = FactoryGirl.create :admin
+    @user = FactoryGirl.create( :user_yas)
+    @author = FactoryGirl.create :author, :user_id => @user.id
+    @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
+    @other_user = FactoryGirl.create( :user_yas)
+    @other_author = FactoryGirl.create :author, :user_id => @other_user.id
+    @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
+    @sp = FactoryGirl.create :system_picture
+    @lg = FactoryGirl.create :license_group
+    @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+  end
+  
+  describe '検証に於いて' do
+    before do
+    end
+    
+    context 'オーソドックスなデータのとき' do
+=begin
+      it 'nullなら失敗する' do
+        @gc = User.singular
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.plural
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.item_name
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.path_name
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.default_page_size
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.max_page_size
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.page_number 
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.page_size 
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.list_where
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.list
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.list_paginate
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.list_opt
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.list_json_opt
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.show 1, 1
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.show_opt
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = User.show_json_opt
+        @gc.should be_nil
+      end
+=end
+    end
+    
+    context 'オーソドックスなデータのとき' do
+      before do
+      end
+=begin
+      it 'nullなら失敗する' do
+        @user.item_name
+      end
+      it 'nullなら失敗する' do
+        @user.dom_id_item
+      end
+      it 'nullなら失敗する' do
+        @user.tag_item_id
+      end
+      it 'nullなら失敗する' do
+        @user.dom_id_item_field ''
+      end
+      it 'nullなら失敗する' do
+        @user.path_name
+      end
+      it 'nullなら失敗する' do
+        @user.form_template
+      end
+      it 'nullなら失敗する' do
+        @user.tag_item_attributes
+      end
+      it 'nullなら失敗する' do
+        @user.field_tag_attributes
+      end
+      it 'nullなら失敗する' do
+        @user.any_tag_attributes
+      end
+      it 'nullなら失敗する' do
+        @user.select_tag_attributes
+      end
+      it 'nullなら失敗する' do
+        @user.tag_attr
+      end
+      it 'nullなら失敗する' do
+        @user.field_tag_attr
+      end
+      it 'nullなら失敗する' do
+        @user.any_tag_attr
+      end
+=end
+    end
+    
+    context 'オーソドックスなデータのとき' do
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.singular
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.plural
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.item_name
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.path_name
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.default_page_size
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.max_page_size
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.page 
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.page_size 
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.list_where
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.list
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.list_paginate
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.list_opt
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.list_json_opt
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.show 1, 1
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.show_opt
+        @gc.should be_nil
+      end
+      it 'nullなら失敗する' do
+        @gc = Pettanr::Item.show_json_opt
+        @gc.should be_nil
+      end
+    end
+  end
+end
diff --git a/vendor/plugins/content/init.rb b/vendor/plugins/content/init.rb
deleted file mode 100644 (file)
index c5f49cc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-require 'content'
diff --git a/vendor/plugins/content/lib/content.rb b/vendor/plugins/content/lib/content.rb
deleted file mode 100644 (file)
index a631988..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-=begin
-module ActiveRecord
-  class Base
-    module Content
-      def self.included(base)
-        base.extend(ClassMethods)
-        base.__send__ :include, InstanceMethods
-      end
-      
-      module ClassMethods
-        
-        def self.mylist_where au
-          ['panels.author_id = ?', au.id]
-        end
-        
-        def self.himlist_where au
-          ['panels.author_id = ? and panels.publish > 0', au.id]
-        end
-        
-        def self.mylist au, page = 1, page_size = Author.default_panel_picture_page_size
-          PanelPicture.where(self.mylist_where(au)).includes(PanelPicture.list_opt).order('panel_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
-        end
-        
-        def self.himlist au, page = 1, page_size = Author.default_panel_picture_page_size
-          PanelPicture.where(self.himlist_where(au)).includes(PanelPicture.list_opt).order('panel_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
-        end
-        
-        def self.mylist_paginate au, page = 1, page_size = Author.default_panel_picture_page_size
-          Kaminari.paginate_array(Array.new(PanelPicture.where(self.mylist_where(au)).includes(PanelPicture.list_opt).count, nil)).page(page).per(page_size)
-        end
-        
-        def self.himlist_paginate au, page = 1, page_size = Author.default_panel_picture_page_size
-          Kaminari.paginate_array(Array.new(PanelPicture.where(self.himlist_where(au)).includes(PanelPicture.list_opt).count, nil)).page(page).per(page_size)
-        end
-        
-      end
-      
-      module InstanceMethods
-        private
-        
-        public
-        
-        def visible? roles
-          if MagicNumber['run_mode'] == 0
-            return false unless guest_role_check(roles)
-          else
-            return false unless reader_role_check(roles)
-          end
-          return true if self.panel.own?(roles)
-          self.panel.visible? roles
-        end
-        
-        def supply_default
-          self.x = 0
-          self.y = 0
-          if self.picture
-            self.width = self.picture.width 
-            self.height = self.picture.height 
-          end
-          if self.panel
-            self.t = self.panel.new_t 
-            self.z = self.panel.new_z 
-          end
-        end
-        
-        def overwrite  pid
-          self.panel_id = pid
-        end
-        
-      end
-      
-    end
-    include Content
-  end
-end
-
-
-=end
diff --git a/vendor/plugins/element/init.rb b/vendor/plugins/element/init.rb
deleted file mode 100644 (file)
index 6c58bcb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-require 'element'
diff --git a/vendor/plugins/element/lib/element.rb b/vendor/plugins/element/lib/element.rb
deleted file mode 100644 (file)
index 20f3fb7..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-=begin
-module ActiveRecord
-  class Base
-    module Element
-      def self.included(base)
-        base.extend(ClassMethods)
-        base.__send__ :include, InstanceMethods
-      end
-      
-      module ClassMethods
-      end
-      
-      module InstanceMethods
-        private
-        
-        public
-        
-      end
-      
-    end
-    include Element
-  end
-end
-
-
-=end
diff --git a/vendor/plugins/item/init.rb b/vendor/plugins/item/init.rb
deleted file mode 100644 (file)
index e81018b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-require 'item'
diff --git a/vendor/plugins/item/lib/item.rb b/vendor/plugins/item/lib/item.rb
deleted file mode 100644 (file)
index e1ec412..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-=begin
-module ActiveRecord
-  class Base
-    module Item
-      def self.included(base)
-        base.extend(ClassMethods)
-        base.__send__ :include, InstanceMethods
-      end
-      
-      module ClassMethods
-        # class_name
-        # table_name
-        
-        def singular
-        end
-        
-        def plural
-        end
-        
-        def item_name
-        end
-        
-        def path_name
-        end
-        
-        def self.default_page_size
-          25
-        end
-        
-        def self.max_page_size
-          100
-        end
-        
-        def self.page prm = nil
-          page = prm.to_i
-          page = 1 if page < 1
-          page
-        end
-        
-        def self.page_size prm = self.default_page_size
-          page_size = prm.to_i
-          page_size = self.max_page_size if page_size > self.max_page_size
-          page_size = self.default_page_size if page_size < 1
-          page_size
-        end
-        
-        def self.list_where
-          'panels.publish > 0'
-        end
-        
-        def self.list page = 1, page_size = self.default_page_size
-          PanelPicture.where(self.list_where()).includes(PanelPicture.list_opt).order('panel_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
-        end
-        
-        def self.list_paginate page = 1, page_size = self.default_page_size
-          Kaminari.paginate_array(Array.new(PanelPicture.where(self.list_where()).includes(PanelPicture.list_opt).count, nil)).page(page).per(page_size)
-        end
-        
-        def self.list_opt
-          {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}} }
-        end
-        
-        def self.list_json_opt
-          {:include => {:panel => {:include => {:author => {}}}, :picture => {:include => {:artist => {}, :license => {}}} }}
-        end
-        
-        def self.show cid, au
-          opt = {}
-          opt.merge!(PanelPicture.show_opt)
-          res = PanelPicture.find(cid, opt)
-          raise ActiveRecord::Forbidden unless res.visible?(au)
-          res
-        end
-        
-        def self.show_opt
-          {:include => {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}}}}
-        end
-        
-        def self.show_json_opt
-          {:include => {:panel => {:include => {:author => {}}}, :picture => {:include => {:artist => {}, :license => {}}} }}
-        end
-        
-      end
-      
-      module InstanceMethods
-        private
-        
-        public
-        
-        def item_name
-        end
-        
-        def item_id 
-          self.new_record? ? '0' : self.id.to_s
-        end
-        
-        def tag_item_id c = nil
-          self.item_name + self.item_id + c.to_s
-        end
-        
-        def tag_item_field_id field_name
-          self.tag_item_id + field_name.to_s
-        end
-        
-        def path_name with_engine = false
-          self.class.path_name(with_engine)
-        end
-        
-        def form_template with_engine = false
-          self.path_name(with_engine) + '/form'
-        end
-        
-        def tag_item_attributes column = nil, opt = {}
-          {
-            :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, 
-            :element_id => self.tag_element_id, :element_type => self.tag_element_type
-          }.merge(opt)
-        end
-        
-        def field_tag_attributes column, no_attr, opt = {}
-          self.tag_attributes(column).merge(
-            {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
-          ).merge(opt)
-        end
-        
-        #render element by body
-        def any_tag_attributes name = nil, opt = {}
-          r = self.tag_attributes(name)
-          r.merge!(
-            {:new_index => self.tag_new_index}
-          ) if self.new_index
-          r.merge(opt)
-        end
-        
-        def select_tag_attributes(selected, column, no_attr)
-          [
-            :last, :first, 
-            {:html => {:selected => selected}}, 
-            self.field_tag_attributes(column, no_attr)
-          ]
-        end
-        
-        def tag_attr column = nil, opt = {}
-          self.tag_attributes(column, opt).to_attr
-        end
-        
-        def field_tag_attr column, no_attr, opt = {}
-          self.field_tag_attributes(column, no_attr, opt).to_attr
-        end
-        
-        def any_tag_attr name = nil, opt = {}
-          self.any_tag_attributes(name, opt).to_attr
-        end
-        
-      end
-      
-    end
-    include Item
-  end
-end
-
-=end