carrierwave upload, specified in photo model. create account at startup. auto add to admin role
This commit is contained in:
parent
efb21a1df1
commit
f52d6ba791
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -9,4 +9,5 @@ config/deploy.rb
|
||||||
config/deploy
|
config/deploy
|
||||||
Capfile
|
Capfile
|
||||||
photos
|
photos
|
||||||
public/thumbs
|
public/thumbs
|
||||||
|
public/uploads
|
||||||
|
|
|
@ -7,10 +7,16 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
filter_parameter_logging :password, :password_confirmation
|
filter_parameter_logging :password, :password_confirmation
|
||||||
helper_method :current_user, :current_user_session
|
helper_method :current_user, :current_user_session
|
||||||
|
|
||||||
|
before_filter :setup
|
||||||
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def setup
|
||||||
|
redirect_to new_account_path if User.all.length == 0
|
||||||
|
end
|
||||||
|
|
||||||
def check_public_access
|
def check_public_access
|
||||||
require_user unless APP_CONFIG[:public]
|
require_user unless APP_CONFIG[:public]
|
||||||
end
|
end
|
||||||
|
|
|
@ -76,7 +76,7 @@ class PhotosController < ApplicationController
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
@photo = Photo.new(params[:photo])
|
@photo = Photo.new(params[:photo])
|
||||||
if params[:Filedata]
|
if params[:Filedata]
|
||||||
@photo.swf_uploaded_data = params[:Filedata]
|
#@photo.swf_uploaded_data = params[:Filedata]
|
||||||
if @photo.save
|
if @photo.save
|
||||||
format.html { render :text => "FILEID:" + @photo.path_modified_public("album") }
|
format.html { render :text => "FILEID:" + @photo.path_modified_public("album") }
|
||||||
format.xml { render :nothing => true }
|
format.xml { render :nothing => true }
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
class UsersController < ApplicationController
|
class UsersController < ApplicationController
|
||||||
before_filter :require_no_user, :only => [:new, :create]
|
before_filter :require_no_user, :only => [:new, :create]
|
||||||
before_filter :require_user, :only => [:show, :edit, :update, :destroy]
|
before_filter :require_user, :only => [:show, :edit, :update, :destroy]
|
||||||
|
skip_filter :setup
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@user = User.new
|
@user = User.new
|
||||||
|
@ -9,8 +10,11 @@ class UsersController < ApplicationController
|
||||||
def create
|
def create
|
||||||
@user = User.new(params[:user])
|
@user = User.new(params[:user])
|
||||||
if @user.save
|
if @user.save
|
||||||
|
if User.all.length == 1
|
||||||
|
@user.roles << Role.create(:name => 'admin')
|
||||||
|
end
|
||||||
flash[:notice] = "Account registered!"
|
flash[:notice] = "Account registered!"
|
||||||
redirect_back_or_default account_path
|
redirect_back_or_default new_collection_path
|
||||||
else
|
else
|
||||||
render :action => :new
|
render :action => :new
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,13 +6,15 @@ class Photo < ActiveRecord::Base
|
||||||
has_many :photo_tags, :dependent => :destroy
|
has_many :photo_tags, :dependent => :destroy
|
||||||
has_many :tags, :through => :photo_tags
|
has_many :tags, :through => :photo_tags
|
||||||
|
|
||||||
validates_uniqueness_of :path, :message => "Photo already exsists on disc"
|
mount_uploader :file, FileUploader
|
||||||
validates_presence_of :title
|
|
||||||
|
#validates_uniqueness_of :path, :message => "Photo already exsists on disc"
|
||||||
|
#validates_presence_of :title
|
||||||
|
|
||||||
before_validation :set_title
|
before_validation :set_title
|
||||||
before_save :ensure_file
|
#before_save :ensure_file
|
||||||
before_create :exif_read
|
#before_create :exif_read
|
||||||
after_create :create_thumbnails
|
#after_create :create_thumbnails
|
||||||
#before_update :exif_write # should only write if tags are changed as images can be large and thus ExifTool will take a while to write to the file
|
#before_update :exif_write # should only write if tags are changed as images can be large and thus ExifTool will take a while to write to the file
|
||||||
before_destroy :destroy_file
|
before_destroy :destroy_file
|
||||||
|
|
||||||
|
@ -70,37 +72,6 @@ class Photo < ActiveRecord::Base
|
||||||
#end
|
#end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Map file extensions to mime types.
|
|
||||||
# Thanks to bug in Flash 8 the content type is always set to application/octet-stream.
|
|
||||||
# From: http://blog.airbladesoftware.com/2007/8/8/uploading-files-with-swfupload
|
|
||||||
def swf_uploaded_data=(data)
|
|
||||||
data.content_type = MIME::Types.type_for(data.original_filename)
|
|
||||||
self.title = data.original_filename
|
|
||||||
self.path = self.album.path + "/" + data.original_filename.parameterize
|
|
||||||
File.open(APP_CONFIG[:photos_path] + self.path, 'wb') { |f| f.write(data.read) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_thumbnails
|
|
||||||
# TODO: thumbnails size should be set in settings.yml
|
|
||||||
|
|
||||||
return if File.exists?(APP_CONFIG[:thumbs_path] + self.album.path + "/" + self.id.to_s + "_collection" + self.extension)
|
|
||||||
|
|
||||||
ImageScience.with_image(self.path_original) do |img|
|
|
||||||
img.cropped_thumbnail(200) do |thumb|
|
|
||||||
thumb.save APP_CONFIG[:thumbs_path] + self.album.path + "/" + self.id.to_s + "_collection" + self.extension
|
|
||||||
end
|
|
||||||
img.cropped_thumbnail(100) do |thumb|
|
|
||||||
thumb.save APP_CONFIG[:thumbs_path] + self.album.path + "/" + self.id.to_s + "_album" + self.extension
|
|
||||||
end
|
|
||||||
img.thumbnail(210) do |thumb|
|
|
||||||
thumb.save APP_CONFIG[:thumbs_path] + self.album.path + "/" + self.id.to_s + "_preview" + self.extension
|
|
||||||
end
|
|
||||||
img.thumbnail(950) do |thumb|
|
|
||||||
thumb.save APP_CONFIG[:thumbs_path] + self.album.path + "/" + self.id.to_s + "_single" + self.extension
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def extension
|
def extension
|
||||||
|
@ -118,11 +89,12 @@ class Photo < ActiveRecord::Base
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_title
|
def set_title
|
||||||
self.title = File.basename( self.path ).gsub( self.extension, "" ).titleize unless self.title
|
self.title = "tesitn"
|
||||||
|
#self.title = self.file.filename.titleize unless self.title
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_file
|
def ensure_file
|
||||||
self.destroy if !File.exists?( APP_CONFIG[:photos_path] + self.path )
|
#self.destroy if !File.exists?( APP_CONFIG[:photos_path] + self.path )
|
||||||
end
|
end
|
||||||
|
|
||||||
def exif_read
|
def exif_read
|
||||||
|
|
58
app/uploaders/file_uploader.rb
Normal file
58
app/uploaders/file_uploader.rb
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
class FileUploader < CarrierWave::Uploader::Base
|
||||||
|
|
||||||
|
# Include RMagick or ImageScience support
|
||||||
|
include CarrierWave::RMagick
|
||||||
|
# include CarrierWave::ImageScience
|
||||||
|
|
||||||
|
# Choose what kind of storage to use for this uploader
|
||||||
|
storage :file
|
||||||
|
# storage :s3
|
||||||
|
|
||||||
|
# Override the directory where uploaded files will be stored
|
||||||
|
# This is a sensible default for uploaders that are meant to be mounted:
|
||||||
|
def store_dir
|
||||||
|
# "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
||||||
|
"uploads/files/#{model.album.path}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Provide a default URL as a default if there hasn't been a file uploaded
|
||||||
|
# def default_url
|
||||||
|
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
||||||
|
# end
|
||||||
|
|
||||||
|
# Process files as they are uploaded.
|
||||||
|
# process :scale => [200, 300]
|
||||||
|
#
|
||||||
|
# def scale(width, height)
|
||||||
|
# # do something
|
||||||
|
# end
|
||||||
|
|
||||||
|
# Create different versions of your uploaded files
|
||||||
|
# two firsts should be cropped
|
||||||
|
version :collection do
|
||||||
|
process :scale => [200, 200]
|
||||||
|
end
|
||||||
|
version :album do
|
||||||
|
process :scale => [100, 100]
|
||||||
|
end
|
||||||
|
version :preview do
|
||||||
|
process :scale => [210, 210]
|
||||||
|
end
|
||||||
|
version :single do
|
||||||
|
process :scale => [950, 950]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Add a white list of extensions which are allowed to be uploaded,
|
||||||
|
# for images you might use something like this:
|
||||||
|
# def extension_white_list
|
||||||
|
# %w(jpg jpeg gif png)
|
||||||
|
# end
|
||||||
|
|
||||||
|
# Override the filename of the uploaded files
|
||||||
|
# def filename
|
||||||
|
# "something.jpg" if original_filename
|
||||||
|
# end
|
||||||
|
|
||||||
|
end
|
|
@ -4,8 +4,8 @@
|
||||||
<%= form.label :description %><br />
|
<%= form.label :description %><br />
|
||||||
<%= form.text_area :description %><br />
|
<%= form.text_area :description %><br />
|
||||||
|
|
||||||
|
<% unless @collection.albums.empty? %>
|
||||||
<%= form.label :albums %><br />
|
<%= form.label :albums %><br />
|
||||||
|
|
||||||
<div id="collection_albums">
|
<div id="collection_albums">
|
||||||
<% for album in @collection.albums %>
|
<% for album in @collection.albums %>
|
||||||
<% form.fields_for :album_list do |album_fields| %>
|
<% form.fields_for :album_list do |album_fields| %>
|
||||||
|
@ -32,4 +32,6 @@ grouped_options = [
|
||||||
grouped_options_for_select(grouped_options)
|
grouped_options_for_select(grouped_options)
|
||||||
%>
|
%>
|
||||||
<%= select_tag 'available_albums', grouped_options_for_select(grouped_options) %>
|
<%= select_tag 'available_albums', grouped_options_for_select(grouped_options) %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<% end %>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#photo').fileUpload({
|
$('#photo_file').fileUpload({
|
||||||
uploader:'/javascripts/jquery.uploadify-v1.6.2.mit/uploader.swf',
|
uploader:'/javascripts/jquery.uploadify-v1.6.2.mit/uploader.swf',
|
||||||
script:'<%= photos_path %>',
|
script:'<%= photos_path %>',
|
||||||
scriptData: {
|
scriptData: {
|
||||||
|
@ -29,7 +29,7 @@ $(document).ready(function() {
|
||||||
</script>
|
</script>
|
||||||
<% end %>
|
<% end %>
|
||||||
<form>
|
<form>
|
||||||
<input type="file" id="photo" name="photo" />
|
<input type="file" id="photo_file" name="photo[file]" />
|
||||||
<br />
|
<br />
|
||||||
<div id="thumbs"></div>
|
<div id="thumbs"></div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -11,8 +11,10 @@ Rails::Initializer.run do |config|
|
||||||
|
|
||||||
config.gem "authlogic"
|
config.gem "authlogic"
|
||||||
config.gem 'mime-types', :lib => 'mime/types'
|
config.gem 'mime-types', :lib => 'mime/types'
|
||||||
config.gem "image_science"
|
#config.gem "image_science"
|
||||||
#config.gem "mini_exiftool"
|
#config.gem "mini_exiftool"
|
||||||
|
#
|
||||||
|
config.gem "carrierwave"
|
||||||
|
|
||||||
config.load_paths += %W( #{RAILS_ROOT}/app/middleware )
|
config.load_paths += %W( #{RAILS_ROOT}/app/middleware )
|
||||||
|
|
||||||
|
|
9
db/migrate/20100412220801_add_file_to_photo.rb
Normal file
9
db/migrate/20100412220801_add_file_to_photo.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
class AddFileToPhoto < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
add_column :photos, :file, :string
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
remove_column :photos, :file
|
||||||
|
end
|
||||||
|
end
|
18
db/schema.rb
18
db/schema.rb
|
@ -9,7 +9,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20090604202930) do
|
ActiveRecord::Schema.define(:version => 20100412220801) do
|
||||||
|
|
||||||
create_table "albums", :force => true do |t|
|
create_table "albums", :force => true do |t|
|
||||||
t.string "title", :null => false
|
t.string "title", :null => false
|
||||||
|
@ -23,6 +23,8 @@ ActiveRecord::Schema.define(:version => 20090604202930) do
|
||||||
t.text "note"
|
t.text "note"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "albums", ["id"], :name => "index_albums_on_id", :unique => true
|
||||||
|
|
||||||
create_table "collection_albums", :force => true do |t|
|
create_table "collection_albums", :force => true do |t|
|
||||||
t.integer "collection_id"
|
t.integer "collection_id"
|
||||||
t.integer "album_id"
|
t.integer "album_id"
|
||||||
|
@ -30,6 +32,9 @@ ActiveRecord::Schema.define(:version => 20090604202930) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "collection_albums", ["album_id"], :name => "index_collection_albums_on_album_id"
|
||||||
|
add_index "collection_albums", ["collection_id"], :name => "index_collection_albums_on_collection_id"
|
||||||
|
|
||||||
create_table "collections", :force => true do |t|
|
create_table "collections", :force => true do |t|
|
||||||
t.string "title", :null => false
|
t.string "title", :null => false
|
||||||
t.string "description"
|
t.string "description"
|
||||||
|
@ -37,6 +42,8 @@ ActiveRecord::Schema.define(:version => 20090604202930) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "collections", ["id"], :name => "index_collections_on_id", :unique => true
|
||||||
|
|
||||||
create_table "permissions", :force => true do |t|
|
create_table "permissions", :force => true do |t|
|
||||||
t.integer "permissible_id"
|
t.integer "permissible_id"
|
||||||
t.string "permissible_type"
|
t.string "permissible_type"
|
||||||
|
@ -53,6 +60,9 @@ ActiveRecord::Schema.define(:version => 20090604202930) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "photo_tags", ["photo_id"], :name => "index_photo_tags_on_photo_id"
|
||||||
|
add_index "photo_tags", ["tag_id"], :name => "index_photo_tags_on_tag_id"
|
||||||
|
|
||||||
create_table "photos", :force => true do |t|
|
create_table "photos", :force => true do |t|
|
||||||
t.string "title", :null => false
|
t.string "title", :null => false
|
||||||
t.text "description"
|
t.text "description"
|
||||||
|
@ -62,8 +72,12 @@ ActiveRecord::Schema.define(:version => 20090604202930) do
|
||||||
t.text "path"
|
t.text "path"
|
||||||
t.float "longitude"
|
t.float "longitude"
|
||||||
t.float "latitude"
|
t.float "latitude"
|
||||||
|
t.string "file"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "photos", ["album_id"], :name => "index_photos_on_album_id"
|
||||||
|
add_index "photos", ["id"], :name => "index_photos_on_id", :unique => true
|
||||||
|
|
||||||
create_table "role_memberships", :force => true do |t|
|
create_table "role_memberships", :force => true do |t|
|
||||||
t.integer "roleable_id"
|
t.integer "roleable_id"
|
||||||
t.string "roleable_type"
|
t.string "roleable_type"
|
||||||
|
@ -84,6 +98,8 @@ ActiveRecord::Schema.define(:version => 20090604202930) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "tags", ["id"], :name => "index_tags_on_id", :unique => true
|
||||||
|
|
||||||
create_table "users", :force => true do |t|
|
create_table "users", :force => true do |t|
|
||||||
t.string "email", :null => false
|
t.string "email", :null => false
|
||||||
t.string "crypted_password", :null => false
|
t.string "crypted_password", :null => false
|
||||||
|
|
Loading…
Reference in a new issue