dms-tog_depot 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +0 -0
- data/MIT-LICENSE +19 -0
- data/README.markdown +78 -0
- data/Rakefile +22 -0
- data/app/controllers/depot/filefolders_controller.rb +10 -0
- data/app/controllers/depot/files_controller.rb +35 -0
- data/app/controllers/member/depot/filefolders_controller.rb +84 -0
- data/app/controllers/member/depot/files_controller.rb +102 -0
- data/app/helpers/depot/files_helper.rb +18 -0
- data/app/models/depot/file.rb +41 -0
- data/app/models/depot/filefolder.rb +21 -0
- data/app/models/tog/depot/version.rb +17 -0
- data/app/models/user.rb +4 -0
- data/app/views/depot/filefolders/show.html.erb +97 -0
- data/app/views/depot/files/_tag_cloud_file.html.erb +6 -0
- data/app/views/depot/files/by_tag.html.erb +113 -0
- data/app/views/depot/files/index.html.erb +111 -0
- data/app/views/depot/files/show.html.erb +69 -0
- data/app/views/member/depot/filefolders/edit.html.erb +22 -0
- data/app/views/member/depot/filefolders/new.html.erb +19 -0
- data/app/views/member/depot/filefolders/show.html.erb +121 -0
- data/app/views/member/depot/files/by_tag.html.erb +130 -0
- data/app/views/member/depot/files/edit.html.erb +27 -0
- data/app/views/member/depot/files/index.html.erb +132 -0
- data/app/views/member/depot/files/new.html.erb +24 -0
- data/app/views/member/depot/files/show.html.erb +79 -0
- data/config/routes.rb +32 -0
- data/db/migrate/001_create_files.rb +21 -0
- data/db/migrate/002_create_files_folder.rb +16 -0
- data/init.rb +14 -0
- data/public/images/1px.gif +0 -0
- data/public/images/privacity/admin.gif +0 -0
- data/public/images/privacity/community.gif +0 -0
- data/public/images/privacity/member.gif +0 -0
- data/public/images/privacity/public_domain.gif +0 -0
- data/public/images/tog-depot_arrow_dn.gif +0 -0
- data/public/images/tog-depot_arrow_dn_deact.gif +0 -0
- data/public/images/tog-depot_arrow_up.gif +0 -0
- data/public/images/tog-depot_arrow_up_deact.gif +0 -0
- data/public/images/tog-depot_file_dl.gif +0 -0
- data/public/images/tog-depot_iconfile_16px.gif +0 -0
- data/public/images/tog-depot_iconfile_32px.gif +0 -0
- data/public/images/tog-depot_iconfile_48px.gif +0 -0
- data/public/images/tog-depot_iconfolder_16px.gif +0 -0
- data/public/images/tog-depot_iconfolder_32px.gif +0 -0
- data/public/images/tog-depot_iconfolder_48px.gif +0 -0
- data/public/stylesheets/depot.css +52 -0
- data/test/factories.rb +17 -0
- data/test/functional/depot/filefolders_controller_test.rb +30 -0
- data/test/functional/depot/files_controller_test.rb +43 -0
- data/test/functional/member/depot/filefolders_controller_test.rb +15 -0
- data/test/functional/member/depot/files_controller_test.rb +107 -0
- data/test/test_helper.rb +26 -0
- data/test/unit/file_test.rb +8 -0
- data/test/unit/filefolder_test.rb +8 -0
- data/tog_depot.gemspec +81 -0
- metadata +155 -0
data/CHANGELOG.md
ADDED
File without changes
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2008 DMS - Desarrollo de Medios y Sistemas
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
Depot
|
2
|
+
===========
|
3
|
+
|
4
|
+
File management system for TOG:Community framework.
|
5
|
+
|
6
|
+
Included functionality
|
7
|
+
----------------------
|
8
|
+
|
9
|
+
* File management
|
10
|
+
* Folder management
|
11
|
+
* Filesize and disk cuota configuration
|
12
|
+
* Tag system
|
13
|
+
* File and folder privacity
|
14
|
+
* Abuse report
|
15
|
+
* And more...
|
16
|
+
|
17
|
+
Resources
|
18
|
+
=========
|
19
|
+
|
20
|
+
Plugin requirements
|
21
|
+
-------------------
|
22
|
+
|
23
|
+
In case you haven't got any of them installed previously, you'll need the following plugins on your application:
|
24
|
+
|
25
|
+
* [acts\_as\_commentable](https://github.com/tog/tog/wikis/3rd-party-plugins-acts_as_commentable)
|
26
|
+
* [attachment\_fu](http://github.com/technoweenie/attachment_fu/tree/master)
|
27
|
+
* [acts\_as\_taggable\_on\_steroids](https://github.com/tog/tog/wikis/3rd-party-plugins-acts_as_taggable_on_steroids)
|
28
|
+
* [acts\_as\_rateable](http://github.com/tog/tog/wikis/3rd-party-plugins-acts_as_rateable)
|
29
|
+
* [seo\_urls](http://github.com/tog/tog/wikis/3rd-party-plugins-seo_urls)
|
30
|
+
|
31
|
+
Follow each link above for a short installation guide incase you have to install them.
|
32
|
+
|
33
|
+
Install
|
34
|
+
-------
|
35
|
+
|
36
|
+
* Install plugin form source:
|
37
|
+
<pre>
|
38
|
+
ruby script/plugin install git://github.com/dms/tog_depot.git
|
39
|
+
</pre>
|
40
|
+
|
41
|
+
* Add Depot's routes to your application's config/routes.rb
|
42
|
+
<pre>
|
43
|
+
map.routes_from_plugin 'tog_depot'
|
44
|
+
</pre>
|
45
|
+
|
46
|
+
* Add plugin static resources to public app:
|
47
|
+
<pre>
|
48
|
+
rake tog:plugins:copy_resources
|
49
|
+
</pre>
|
50
|
+
|
51
|
+
* Generate installation migration:
|
52
|
+
<pre>
|
53
|
+
ruby script/generate migration install_tog_depot
|
54
|
+
</pre>
|
55
|
+
|
56
|
+
* With the following content:
|
57
|
+
<pre>
|
58
|
+
class InstallTogDepot < ActiveRecord::Migration
|
59
|
+
def self.up
|
60
|
+
migrate_plugin "tog_depot", 2
|
61
|
+
end
|
62
|
+
def self.down
|
63
|
+
migrate_plugin "tog_depot", 0
|
64
|
+
end
|
65
|
+
end
|
66
|
+
</pre>
|
67
|
+
|
68
|
+
* And finally...
|
69
|
+
<pre>rake db:migrate</pre>
|
70
|
+
|
71
|
+
|
72
|
+
More
|
73
|
+
-------
|
74
|
+
Released under the MIT license
|
75
|
+
|
76
|
+
[http://dmsti.es](http://dmsti.es)
|
77
|
+
|
78
|
+
DMS 2008, Desarrollo de Medios y Sistemas.
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test the tog_depot plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Generate documentation for tog_depot plugin.'
|
16
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
17
|
+
rdoc.rdoc_dir = 'rdoc'
|
18
|
+
rdoc.title = 'Tog Depot'
|
19
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
20
|
+
rdoc.rdoc_files.include('README', 'MIT-LICENCE', 'CHANGELOG')
|
21
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Depot::FilefoldersController < ApplicationController
|
2
|
+
|
3
|
+
helper 'depot/files'
|
4
|
+
|
5
|
+
def show
|
6
|
+
@folder = Depot::Filefolder.find params[:id]
|
7
|
+
@my_files = Depot::File.paginate(:per_page => 10, :page => params[:page], :order => "created_at DESC", :conditions => ["filefolder_id=? and state=?", params[:id], 'public'])
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Depot::FilesController < ApplicationController
|
2
|
+
|
3
|
+
helper 'depot/files'
|
4
|
+
|
5
|
+
def index
|
6
|
+
if params[:order]
|
7
|
+
@order = params[:order]
|
8
|
+
else
|
9
|
+
@order = "created_at DESC"
|
10
|
+
end
|
11
|
+
@files = Depot::File.paginate(:per_page => 10, :page => params[:page], :order => @order, :conditions => ['state = ?', 'public'])
|
12
|
+
@folders = Depot::Filefolder.paginate(:page => params[:page], :conditions => ['state = ?', 'public'], :order => @order)
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
|
17
|
+
@file = Depot::File.find params[:id]
|
18
|
+
@extension = @file.filename.to_s.scan(/\.\w+$/)
|
19
|
+
end
|
20
|
+
|
21
|
+
def by_tag
|
22
|
+
@tag = Tag.find_by_name(params[:tag_name])
|
23
|
+
@files = Depot::File.find_tagged_with(@tag, :conditions => ['state=?', "public"]).paginate(:per_page => 10, :page => params[:page]) unless @tag.nil?
|
24
|
+
@folders = Depot::Filefolder.find_tagged_with(@tag, :conditions => ['state=?', "public"]) unless @tag.nil?
|
25
|
+
end
|
26
|
+
|
27
|
+
def download
|
28
|
+
@file = Depot::File.find params[:id]
|
29
|
+
@num = @file.num_download+1
|
30
|
+
@file.update_attribute (:num_download, @num)
|
31
|
+
send_file("public/" + @file.public_filename)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class Member::Depot::FilefoldersController < Member::BaseController
|
2
|
+
|
3
|
+
def show
|
4
|
+
@filefolder = current_user.filefolders.find(params[:id])
|
5
|
+
@my_files = current_user.files.paginate(:per_page => 10, :page => params[:page], :order => "created_at DESC", :conditions => ["filefolder_id=?",params[:id]])
|
6
|
+
end
|
7
|
+
|
8
|
+
def new
|
9
|
+
end
|
10
|
+
|
11
|
+
def create
|
12
|
+
@filefolder = current_user.filefolders.new(params[:folder])
|
13
|
+
@filefolder.user_id = current_user.id
|
14
|
+
|
15
|
+
@filefolder.state = 'public'
|
16
|
+
|
17
|
+
respond_to do |wants|
|
18
|
+
if @filefolder.save
|
19
|
+
wants.html do
|
20
|
+
flash[:ok] = "Folder <b>#{@filefolder.title}</b> created successfully"
|
21
|
+
redirect_to member_depot_files_path
|
22
|
+
end
|
23
|
+
else
|
24
|
+
wants.html do
|
25
|
+
redirect_to member_depot_files_path
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def edit
|
33
|
+
@filefolder = current_user.filefolders.find(params[:id])
|
34
|
+
end
|
35
|
+
|
36
|
+
def update
|
37
|
+
@filefolder = current_user.filefolders.find(params[:id])
|
38
|
+
@old_state=@filefolder.state
|
39
|
+
@new_state = params[:state]
|
40
|
+
|
41
|
+
@filefolder.state = params[:state]
|
42
|
+
|
43
|
+
respond_to do |wants|
|
44
|
+
if @filefolder.update_attributes(params[:filefolder])
|
45
|
+
wants.html do
|
46
|
+
if @old_state!=@new_state
|
47
|
+
@files = current_user.files.find(:all, :conditions => ["filefolder_id=?",params[:id]])
|
48
|
+
@files.each {|c| c.update_attribute 'state', params[:state]}
|
49
|
+
flash[:ok] = "Folder <b>#{@filefolder.title}</b> and files into it succcessfully updated!"
|
50
|
+
else
|
51
|
+
flash[:ok] = "Folder <b>#{@filefolder.title}</b> succcessfully updated!"
|
52
|
+
end
|
53
|
+
redirect_to member_depot_files_path
|
54
|
+
end
|
55
|
+
else
|
56
|
+
wants.html do
|
57
|
+
flash.now[:error] = 'Failed to Update a filefolder.'
|
58
|
+
render :action => :edit
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def destroy
|
65
|
+
@folder = current_user.filefolders.find params[:id]
|
66
|
+
@my_files = current_user.files.paginate(:page => params[:page], :order => "created_at DESC", :conditions => ["filefolder_id=?",params[:id]])
|
67
|
+
|
68
|
+
if @my_files.empty?
|
69
|
+
@folder.destroy
|
70
|
+
respond_to do |wants|
|
71
|
+
wants.html do
|
72
|
+
flash[:ok]='Folder deleted.'
|
73
|
+
redirect_to member_depot_files_path
|
74
|
+
end
|
75
|
+
end
|
76
|
+
else
|
77
|
+
flash[:error] = 'This folder cannot be deleted, because there are still any files into it.'
|
78
|
+
redirect_to member_depot_filefolder_path
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
@@ -0,0 +1,102 @@
|
|
1
|
+
class Member::Depot::FilesController < Member::BaseController
|
2
|
+
|
3
|
+
def index
|
4
|
+
if params[:order]
|
5
|
+
@order = params[:order]
|
6
|
+
else
|
7
|
+
@order = "created_at DESC"
|
8
|
+
end
|
9
|
+
@my_files = current_user.files.paginate(:per_page => 10, :page => params[:page], :order => @order)
|
10
|
+
@my_folders = current_user.filefolders.paginate(:page => params[:page], :order => @order)
|
11
|
+
@tot_size = current_user.files.sum('size').to_i / 1024
|
12
|
+
@max_storage = Tog::Plugins.settings(:tog_depot, "file.max_size_storage")
|
13
|
+
end
|
14
|
+
|
15
|
+
def by_tag
|
16
|
+
@tag = Tag.find_by_name(params[:tag_name])
|
17
|
+
@my_files = current_user.files.find_tagged_with(@tag).paginate(:per_page => 10, :page => params[:page]) unless @tag.nil?
|
18
|
+
@my_folders = current_user.filefolders.find_tagged_with(@tag) unless @tag.nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
def show
|
22
|
+
@file = current_user.files.find(params[:id])
|
23
|
+
@extension = @file.filename.to_s.scan(/\.\w+$/)
|
24
|
+
end
|
25
|
+
|
26
|
+
def new
|
27
|
+
@tot_size = current_user.files.sum('size').to_i / 1024
|
28
|
+
@max_storage = Tog::Plugins.settings(:tog_depot, "file.max_size_storage")
|
29
|
+
if (@max_storage.to_i - @tot_size.to_i)<0
|
30
|
+
flash[:error] = 'Your disk quota has been exceeded, please contact your administrator.'
|
31
|
+
redirect_to member_depot_files_path
|
32
|
+
end
|
33
|
+
@folders = current_user.filefolders.paginate(:page => params[:page], :order => "created_at DESC")
|
34
|
+
end
|
35
|
+
|
36
|
+
def create
|
37
|
+
@file = current_user.files.new(params[:file])
|
38
|
+
@file.user_id = current_user.id
|
39
|
+
@file.num_download=0
|
40
|
+
|
41
|
+
respond_to do |wants|
|
42
|
+
if @file.save
|
43
|
+
@file.send("#{params[:state].to_s}!")
|
44
|
+
wants.html do
|
45
|
+
flash[:ok] = 'New file Update.'
|
46
|
+
redirect_to member_depot_files_path
|
47
|
+
end
|
48
|
+
else
|
49
|
+
wants.html do
|
50
|
+
flash.now[:error] = 'Failed to Update a new file.'
|
51
|
+
render :action => :new
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def tags
|
58
|
+
end
|
59
|
+
|
60
|
+
def edit
|
61
|
+
@file = current_user.files.find(params[:id])
|
62
|
+
@folders = current_user.filefolders.paginate(:page => params[:page], :order => "created_at DESC")
|
63
|
+
end
|
64
|
+
|
65
|
+
def update
|
66
|
+
@file = current_user.files.find(params[:id])
|
67
|
+
respond_to do |wants|
|
68
|
+
if @file.update_attributes(params[:file])
|
69
|
+
@file.send("#{params[:state].to_s}!")
|
70
|
+
wants.html do
|
71
|
+
flash[:ok] = "File <b>#{@file.title}</b> succcessfully updated!"
|
72
|
+
redirect_to member_depot_files_path
|
73
|
+
end
|
74
|
+
else
|
75
|
+
wants.html do
|
76
|
+
flash.now[:error] = 'Failed to Update a new file.'
|
77
|
+
render :action => :edit
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def download
|
84
|
+
@file = current_user.files.find params[:id]
|
85
|
+
@num = @file.num_download+1
|
86
|
+
@file.update_attribute (:num_download, @num)
|
87
|
+
send_file("public/" + @file.public_filename)
|
88
|
+
end
|
89
|
+
|
90
|
+
def destroy
|
91
|
+
@file = current_user.files.find params[:id]
|
92
|
+
@file.destroy
|
93
|
+
respond_to do |wants|
|
94
|
+
wants.html do
|
95
|
+
flash[:ok]='File deleted.'
|
96
|
+
redirect_to member_depot_files_path
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Depot
|
2
|
+
module FilesHelper
|
3
|
+
|
4
|
+
def tag_cloud_files(classes)
|
5
|
+
tags1 = Depot::File.tag_counts(:conditions => ["files.state='public'"])
|
6
|
+
tags2 = Depot::Filefolder.tag_counts(:conditions => ["state='public'"])
|
7
|
+
tags= tags1 + tags2
|
8
|
+
return if tags.empty?
|
9
|
+
max_count = tags.sort_by(&:count).last.count.to_f
|
10
|
+
tags.each do |tag|
|
11
|
+
index = ((tag.count / max_count) * (classes.size - 1)).round
|
12
|
+
yield tag, classes[index]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Depot::File < ActiveRecord::Base
|
2
|
+
|
3
|
+
# set_table_name :files
|
4
|
+
|
5
|
+
acts_as_commentable
|
6
|
+
acts_as_taggable
|
7
|
+
# acts_as_list :scope => :filefolder
|
8
|
+
seo_urls
|
9
|
+
|
10
|
+
belongs_to :user, :class_name => "User", :foreign_key => "user_id"
|
11
|
+
belongs_to :filefolder, :class_name => "Depot::Filefolder", :foreign_key => "filefolder_id"
|
12
|
+
|
13
|
+
has_attachment :storage => :file_system,
|
14
|
+
:max_size => Tog::Plugins.settings(:tog_depot, "file.max_size_file").to_i.kilobytes,
|
15
|
+
:path_prefix=>'public/system/files'
|
16
|
+
validates_as_attachment
|
17
|
+
|
18
|
+
attr_accessible :title, :description, :filefolder_id, :tag_list, :publiC
|
19
|
+
|
20
|
+
validates_presence_of :title
|
21
|
+
|
22
|
+
acts_as_state_machine :initial => :private
|
23
|
+
|
24
|
+
state :private
|
25
|
+
state :public
|
26
|
+
|
27
|
+
event :public do
|
28
|
+
transitions :from => [:private] , :to => :public
|
29
|
+
end
|
30
|
+
|
31
|
+
event :private do
|
32
|
+
transitions :from => [:public] , :to => :private
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def owner
|
37
|
+
user
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Depot::Filefolder < ActiveRecord::Base
|
2
|
+
acts_as_taggable
|
3
|
+
set_table_name :files_folder
|
4
|
+
belongs_to :user, :class_name => "User", :foreign_key => "user_id"
|
5
|
+
has_many :files
|
6
|
+
validates_presence_of :title
|
7
|
+
|
8
|
+
acts_as_state_machine :initial => :public, :column => 'state'
|
9
|
+
|
10
|
+
state :private
|
11
|
+
state :public
|
12
|
+
|
13
|
+
event :public do
|
14
|
+
transitions :from => [:private] , :to => :public
|
15
|
+
end
|
16
|
+
|
17
|
+
event :private do
|
18
|
+
transitions :from => [:public] , :to => :private
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|