typus 1.0.0.pre8 → 1.0.0.pre9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +4 -6
- data/Gemfile +16 -13
- data/Gemfile.lock +26 -2
- data/Rakefile +2 -3
- data/app/controllers/admin/base_controller.rb +3 -5
- data/app/controllers/admin/resources_controller.rb +24 -26
- data/app/helpers/admin/base_helper.rb +14 -22
- data/app/helpers/admin/dashboard_helper.rb +2 -5
- data/app/helpers/admin/filters_helper.rb +6 -8
- data/app/helpers/admin/form_helper.rb +3 -9
- data/app/helpers/admin/preview_helper.rb +4 -6
- data/app/helpers/admin/relationships_helper.rb +9 -11
- data/app/helpers/admin/resources_helper.rb +6 -24
- data/app/helpers/admin/search_helper.rb +1 -1
- data/app/helpers/admin/sidebar_helper.rb +12 -15
- data/app/helpers/admin/table_helper.rb +13 -13
- data/app/views/admin/dashboard/show.html.erb +1 -1
- data/app/views/admin/helpers/_apps.html.erb +4 -3
- data/app/views/admin/helpers/_header.html.erb +2 -2
- data/app/views/admin/helpers/dashboard/_applications.html.erb +3 -3
- data/app/views/admin/helpers/dashboard/_resources.html.erb +17 -13
- data/app/views/admin/helpers/filters/_filters.html.erb +9 -27
- data/app/views/admin/helpers/resources/_pagination.html.erb +8 -9
- data/app/views/admin/helpers/search/_search.html.erb +1 -1
- data/app/views/admin/mailer/reset_password_link.text.erb +3 -0
- data/app/views/admin/resources/_form.html.erb +4 -4
- data/app/views/admin/resources/edit.html.erb +2 -3
- data/app/views/admin/resources/index.html.erb +15 -13
- data/app/views/admin/resources/new.html.erb +2 -2
- data/app/views/admin/resources/show.html.erb +1 -2
- data/app/views/admin/templates/_boolean.html.erb +1 -1
- data/app/views/admin/templates/_has_many.html.erb +2 -4
- data/app/views/admin/templates/_has_n.html.erb +1 -1
- data/app/views/admin/templates/_selector.html.erb +0 -1
- data/app/views/admin/templates/_string.html.erb +1 -1
- data/app/views/layouts/admin/session.html.erb +1 -1
- data/config/available_locales/ca.yml +3 -5
- data/config/available_locales/de.yml +2 -4
- data/config/available_locales/es.yml +2 -4
- data/config/available_locales/fr.yml +40 -39
- data/config/available_locales/fr_models.yml +2 -2
- data/config/available_locales/hu.yml +3 -5
- data/config/available_locales/it.yml +0 -4
- data/config/available_locales/language.yml.template +2 -4
- data/config/available_locales/pt-BR.yml +2 -4
- data/config/available_locales/ru.yml +2 -4
- data/config/routes.rb +1 -0
- data/lib/generators/templates/config/initializers/typus.rb +5 -5
- data/lib/generators/templates/config/initializers/typus_authentication.rb +5 -5
- data/lib/generators/templates/config/initializers/typus_resources.rb +7 -7
- data/lib/generators/templates/config/typus/README +11 -13
- data/lib/generators/templates/controller.rb +0 -2
- data/lib/generators/templates/functional_test.rb +4 -15
- data/lib/generators/typus/migration_generator.rb +0 -1
- data/lib/support/active_record.rb +18 -9
- data/lib/support/fake_user.rb +42 -0
- data/lib/support/object.rb +1 -0
- data/lib/support/string.rb +0 -32
- data/lib/tasks/typus.rake +0 -8
- data/lib/typus.rb +34 -18
- data/lib/typus/authentication/base.rb +26 -0
- data/lib/typus/authentication/http_basic.rb +22 -0
- data/lib/typus/authentication/none.rb +19 -0
- data/lib/typus/authentication/session.rb +190 -0
- data/lib/typus/format.rb +12 -19
- data/lib/typus/orm/active_record.rb +13 -51
- data/lib/typus/resources.rb +0 -9
- data/lib/typus/version.rb +1 -1
- data/test/factories.rb +43 -0
- data/test/fixtures/rails_app/app/controllers/application_controller.rb +0 -1
- data/test/fixtures/rails_app/app/models/page.rb +0 -4
- data/test/fixtures/rails_app/config/application.rb +6 -3
- data/test/fixtures/rails_app/config/database.yml +12 -20
- data/test/fixtures/rails_app/config/typus/application.yml +4 -8
- data/test/fixtures/rails_app/db/test.sqlite3 +0 -0
- data/test/fixtures/rails_app/log/test.log +227115 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012213057.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012213132.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012213234.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012213506.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215057.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215217.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215415.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215443.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215509.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215528.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215551.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215615.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215640.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215714.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215744.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215814.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215836.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012215906.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012220659.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012221043.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012221258.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012222558.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012222752.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012222848.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012223433.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012223535.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012224003.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012224052.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012224109.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012224139.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012224205.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012224243.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101012225119.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063215.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063300.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063352.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063427.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063448.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063530.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063559.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063646.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063737.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063822.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063837.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063919.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063939.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013063952.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064220.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064253.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064318.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064404.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064452.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064536.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064652.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013064845.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013065023.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013065137.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013065713.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013065954.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070057.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070116.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070156.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070349.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070429.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070448.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070514.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070709.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070745.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070809.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070905.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013070955.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071116.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071209.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071335.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071632.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071643.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071735.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013071749.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013072030.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013072050.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013072108.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013072713.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013072751.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013072912.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101013074546.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101018180512.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101018183359.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101018183608.csv +2 -0
- data/test/fixtures/rails_app/tmp/export-posts-20101018183759.csv +2 -0
- data/test/functional/admin/account_controller_test.rb +1 -1
- data/test/functional/admin/{resources_controller_assets_relationships.rb → assets_controller_test.rb} +12 -16
- data/test/functional/admin/categories_controller_test.rb +62 -0
- data/test/functional/admin/{resources_controller_comments_toggle_test.rb → comments_controller_test.rb} +0 -0
- data/test/functional/admin/dashboard_controller_test.rb +34 -2
- data/test/functional/admin/posts_controller_test.rb +548 -0
- data/test/functional/admin/session_controller_test.rb +2 -2
- data/test/functional/admin/{resources_controller_tableless_resource_test.rb → status_controller_test.rb} +0 -0
- data/test/functional/admin/{resources_controller_typus_users_test.rb → typus_users_controller_test.rb} +2 -2
- data/test/helpers/admin/base_helper_test.rb +35 -37
- data/test/helpers/admin/dashboard_helper_test.rb +4 -8
- data/test/helpers/admin/form_helper_test.rb +9 -34
- data/test/helpers/admin/resources_helper_test.rb +28 -16
- data/test/helpers/admin/sidebar_helper_test.rb +14 -27
- data/test/helpers/admin/table_helper_test.rb +24 -68
- data/test/integration/login_test.rb +13 -0
- data/test/integration_test_helper.rb +21 -0
- data/test/lib/support/active_record_test.rb +72 -21
- data/test/lib/support/array_test.rb +2 -6
- data/test/lib/support/string_test.rb +21 -30
- data/test/lib/typus/active_record_test.rb +162 -100
- data/test/lib/typus/resource_test.rb +2 -3
- data/test/lib/typus_test.rb +25 -22
- data/test/test_helper.rb +4 -17
- data/test/unit/admin/mailer_test.rb +2 -2
- data/test/unit/typus_user_roles_test.rb +23 -23
- data/test/unit/typus_user_test.rb +30 -24
- data/typus.gemspec +0 -1
- metadata +111 -60
- data/app/models/admin/fake_user.rb +0 -46
- data/lib/generators/templates/model.yml +0 -10
- data/lib/typus/authentication.rb +0 -241
- data/lib/vendor/paginator.rb +0 -143
- data/test/factories/assets.rb +0 -5
- data/test/factories/categories.rb +0 -3
- data/test/factories/comments.rb +0 -6
- data/test/factories/pages.rb +0 -5
- data/test/factories/pictures.rb +0 -7
- data/test/factories/posts.rb +0 -6
- data/test/factories/typus_users.rb +0 -8
- data/test/fixtures/rails_app/README +0 -244
- data/test/fixtures/rails_app/app/helpers/application_helper.rb +0 -2
- data/test/fixtures/rails_app/app/views/layouts/application.html.erb +0 -14
- data/test/fixtures/rails_app/config/environments/development.rb +0 -19
- data/test/fixtures/rails_app/config/environments/production.rb +0 -42
- data/test/fixtures/rails_app/config/initializers/acts_as_list.rb +0 -258
- data/test/fixtures/rails_app/config/initializers/acts_as_tree.rb +0 -98
- data/test/fixtures/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/fixtures/rails_app/config/initializers/inflections.rb +0 -10
- data/test/fixtures/rails_app/config/initializers/mime_types.rb +0 -5
- data/test/fixtures/rails_app/config/locales/en.yml +0 -5
- data/test/fixtures/rails_app/db/seeds.rb +0 -7
- data/test/fixtures/rails_app/public/404.html +0 -26
- data/test/fixtures/rails_app/public/422.html +0 -26
- data/test/fixtures/rails_app/public/500.html +0 -26
- data/test/fixtures/rails_app/public/favicon.ico +0 -0
- data/test/fixtures/rails_app/public/images/rails.png +0 -0
- data/test/fixtures/rails_app/public/index.html +0 -279
- data/test/fixtures/rails_app/public/javascripts/application.js +0 -2
- data/test/fixtures/rails_app/public/javascripts/controls.js +0 -965
- data/test/fixtures/rails_app/public/javascripts/dragdrop.js +0 -974
- data/test/fixtures/rails_app/public/javascripts/effects.js +0 -1123
- data/test/fixtures/rails_app/public/javascripts/prototype.js +0 -4874
- data/test/fixtures/rails_app/public/javascripts/rails.js +0 -118
- data/test/fixtures/rails_app/public/robots.txt +0 -5
- data/test/fixtures/rails_app/script/rails +0 -9
- data/test/functional/admin/dashboard_controller_http_basic_test.rb +0 -24
- data/test/functional/admin/dashboard_controller_none_test.rb +0 -18
- data/test/functional/admin/resources_controller_categories_before_test.rb +0 -10
- data/test/functional/admin/resources_controller_categories_lists_test.rb +0 -44
- data/test/functional/admin/resources_controller_categories_views_test.rb +0 -10
- data/test/functional/admin/resources_controller_posts_before_test.rb +0 -10
- data/test/functional/admin/resources_controller_posts_crud_custom_test.rb +0 -27
- data/test/functional/admin/resources_controller_posts_crud_test.rb +0 -44
- data/test/functional/admin/resources_controller_posts_formats_test.rb +0 -39
- data/test/functional/admin/resources_controller_posts_forms_test.rb +0 -58
- data/test/functional/admin/resources_controller_posts_permissions_test.rb +0 -100
- data/test/functional/admin/resources_controller_posts_relationships_test.rb +0 -91
- data/test/functional/admin/resources_controller_posts_roles.rb +0 -52
- data/test/functional/admin/resources_controller_posts_views_test.rb +0 -143
- data/test/lib/vendor/paginator_test.rb +0 -141
- data/typus-1.0.0.pre7.gem +0 -0
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
module Admin
|
|
2
|
-
|
|
3
|
-
class FakeUser
|
|
4
|
-
|
|
5
|
-
def id
|
|
6
|
-
0
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def can?(*args)
|
|
10
|
-
true
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def cannot?(*args)
|
|
14
|
-
!can?(*args)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def is_root?
|
|
18
|
-
true
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def is_not_root?
|
|
22
|
-
!is_root?
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def resources
|
|
26
|
-
Typus::Configuration.roles[role].compact
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def applications
|
|
30
|
-
Typus.applications
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def application(name)
|
|
34
|
-
Typus.application(name)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def role
|
|
38
|
-
Typus.master_role
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def name
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
end
|
data/lib/typus/authentication.rb
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
module Typus
|
|
2
|
-
|
|
3
|
-
module Authentication
|
|
4
|
-
|
|
5
|
-
protected
|
|
6
|
-
|
|
7
|
-
#--
|
|
8
|
-
# Require login checks if the user is logged on Typus, otherwise
|
|
9
|
-
# is sent to the sign in page with a :back_to param to return where
|
|
10
|
-
# she tried to go.
|
|
11
|
-
#++
|
|
12
|
-
def authenticate
|
|
13
|
-
case Typus.authentication
|
|
14
|
-
when :none
|
|
15
|
-
authenticate_via_none
|
|
16
|
-
when :http_basic
|
|
17
|
-
authenticate_via_http_basic
|
|
18
|
-
when :session
|
|
19
|
-
authenticate_via_session
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def authenticate_via_none
|
|
24
|
-
@current_user = Admin::FakeUser.new
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def authenticate_via_http_basic
|
|
28
|
-
@current_user = Admin::FakeUser.new
|
|
29
|
-
authenticate_or_request_with_http_basic(Typus.admin_title) do |user_name, password|
|
|
30
|
-
user_name == Typus.username && password == Typus.password
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def authenticate_via_session
|
|
35
|
-
if session[:typus_user_id]
|
|
36
|
-
current_user
|
|
37
|
-
else
|
|
38
|
-
back_to = request.env['PATH_INFO'] unless [admin_dashboard_path, admin_path].include?(request.env['PATH_INFO'])
|
|
39
|
-
redirect_to new_admin_session_path(:back_to => back_to)
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
#--
|
|
44
|
-
# Return the current user. If role does not longer exist on the
|
|
45
|
-
# system @current_user will be signed out from Typus.
|
|
46
|
-
#++
|
|
47
|
-
def current_user
|
|
48
|
-
|
|
49
|
-
@current_user = Typus.user_class.find(session[:typus_user_id])
|
|
50
|
-
|
|
51
|
-
unless Typus::Configuration.roles.has_key?(@current_user.role)
|
|
52
|
-
raise _t("Role does no longer exists.")
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
unless @current_user.status
|
|
56
|
-
back_to = (request.env['REQUEST_URI'] == admin_dashboard_path) ? nil : request.env['REQUEST_URI']
|
|
57
|
-
raise _t("Typus user has been disabled.")
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
I18n.locale = @current_user.preferences[:locale]
|
|
61
|
-
|
|
62
|
-
rescue Exception => error
|
|
63
|
-
flash[:notice] = error.message
|
|
64
|
-
session[:typus_user_id] = nil
|
|
65
|
-
redirect_to new_admin_session_path(:back_to => back_to)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
#--
|
|
69
|
-
# Action is available on: edit, update, toggle and destroy
|
|
70
|
-
#++
|
|
71
|
-
def check_if_user_can_perform_action_on_user
|
|
72
|
-
|
|
73
|
-
return unless Typus.authentication.eql?(:session)
|
|
74
|
-
|
|
75
|
-
return unless @item.kind_of?(Typus.user_class)
|
|
76
|
-
|
|
77
|
-
current_user = (@current_user == @item)
|
|
78
|
-
|
|
79
|
-
message = case params[:action]
|
|
80
|
-
when 'edit'
|
|
81
|
-
|
|
82
|
-
# Only admin and owner of Typus User can edit.
|
|
83
|
-
if @current_user.is_not_root? && !current_user
|
|
84
|
-
_t("As you're not the admin or the owner of this record you cannot edit it.")
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
when 'update'
|
|
88
|
-
|
|
89
|
-
# current_user cannot change her role.
|
|
90
|
-
if current_user && !(@item.role == params[@object_name][:role])
|
|
91
|
-
_t("You can't change your role.")
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
when 'toggle'
|
|
95
|
-
|
|
96
|
-
# Only admin can toggle typus user status, but not herself.
|
|
97
|
-
if @current_user.is_root? && current_user
|
|
98
|
-
_t("You can't toggle your status.")
|
|
99
|
-
elsif @current_user.is_not_root?
|
|
100
|
-
_t("You're not allowed to toggle status.")
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
when 'destroy'
|
|
104
|
-
|
|
105
|
-
# Admin can remove anything except herself.
|
|
106
|
-
if @current_user.is_root? && current_user
|
|
107
|
-
_t("You can't remove yourself.")
|
|
108
|
-
elsif @current_user.is_not_root?
|
|
109
|
-
_t("You're not allowed to remove Typus Users.")
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
if message
|
|
115
|
-
flash[:notice] = message
|
|
116
|
-
redirect_to set_path
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
#--
|
|
122
|
-
# This method checks if the user can perform the requested action.
|
|
123
|
-
# It works on models, so its available on the admin_controller.
|
|
124
|
-
#++
|
|
125
|
-
def check_if_user_can_perform_action_on_resources
|
|
126
|
-
|
|
127
|
-
return unless Typus.authentication.eql?(:session)
|
|
128
|
-
|
|
129
|
-
message = case params[:action]
|
|
130
|
-
when 'index', 'show'
|
|
131
|
-
"%{current_user_role} can't display items."
|
|
132
|
-
when 'destroy'
|
|
133
|
-
"%{current_user_role} can't delete this item."
|
|
134
|
-
else
|
|
135
|
-
"%{current_user_role} can't perform action. (%{action})"
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
message = _t(message,
|
|
139
|
-
:current_user_role => @current_user.role.capitalize,
|
|
140
|
-
:action => params[:action])
|
|
141
|
-
|
|
142
|
-
unless @current_user.can?(params[:action], @resource)
|
|
143
|
-
flash[:notice] = message
|
|
144
|
-
redirect_to set_path
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
#--
|
|
150
|
-
# This method checks if the user can perform the requested action.
|
|
151
|
-
# It works on a resource: git, memcached, syslog ...
|
|
152
|
-
#++
|
|
153
|
-
def check_if_user_can_perform_action_on_resource
|
|
154
|
-
return unless Typus.authentication.eql?(:session)
|
|
155
|
-
|
|
156
|
-
controller = params[:controller].extract_resource
|
|
157
|
-
action = params[:action]
|
|
158
|
-
unless @current_user.can?(action, controller.camelize, { :special => true })
|
|
159
|
-
render :text => "Not allowed!", :status => :unprocessable_entity
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
#--
|
|
164
|
-
# If item is owned by another user, we only can perform a
|
|
165
|
-
# show action on the item. Updated item is also blocked.
|
|
166
|
-
#
|
|
167
|
-
# before_filter :check_resource_ownership, :only => [ :edit, :update, :destroy,
|
|
168
|
-
# :toggle, :position,
|
|
169
|
-
# :relate, :unrelate ]
|
|
170
|
-
#++
|
|
171
|
-
def check_resource_ownership
|
|
172
|
-
|
|
173
|
-
return unless Typus.authentication.eql?(:session)
|
|
174
|
-
|
|
175
|
-
# By-pass if current_user is root.
|
|
176
|
-
return if @current_user.is_root?
|
|
177
|
-
|
|
178
|
-
condition_typus_users = @item.respond_to?(Typus.relationship) && !@item.send(Typus.relationship).include?(@current_user)
|
|
179
|
-
condition_typus_user_id = @item.respond_to?(Typus.user_fk) && !@item.owned_by?(@current_user)
|
|
180
|
-
|
|
181
|
-
if condition_typus_users || condition_typus_user_id
|
|
182
|
-
alert = _t("You don't have permission to access this item.")
|
|
183
|
-
redirect_to set_path, :alert => alert
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def check_resource_ownerships
|
|
189
|
-
|
|
190
|
-
return unless Typus.authentication.eql?(:session)
|
|
191
|
-
|
|
192
|
-
# By-pass if current_user is root.
|
|
193
|
-
return if @current_user.is_root?
|
|
194
|
-
|
|
195
|
-
# Show only related items it @resource has a foreign_key (Typus.user_fk)
|
|
196
|
-
# related to the logged user.
|
|
197
|
-
if @resource.typus_user_id?
|
|
198
|
-
condition = { Typus.user_fk => @current_user }
|
|
199
|
-
@conditions = @resource.merge_conditions(@conditions, condition)
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
def check_ownership_of_referal_item
|
|
205
|
-
return unless Typus.authentication.eql?(:session)
|
|
206
|
-
|
|
207
|
-
return unless params[:resource] && params[:resource_id]
|
|
208
|
-
klass = params[:resource].classify.constantize
|
|
209
|
-
return if !klass.typus_user_id?
|
|
210
|
-
item = klass.find(params[:resource_id])
|
|
211
|
-
raise "You're not owner of this record." unless item.owned_by?(@current_user) || @current_user.is_root?
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def set_attributes_on_create
|
|
215
|
-
return unless Typus.authentication.eql?(:session)
|
|
216
|
-
if @resource.typus_user_id?
|
|
217
|
-
@item.attributes = { Typus.user_fk => @current_user.id }
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
def set_attributes_on_update
|
|
222
|
-
return unless Typus.authentication.eql?(:session)
|
|
223
|
-
if @resource.typus_user_id? && @current_user.is_not_root?
|
|
224
|
-
@item.update_attributes(Typus.user_fk => @current_user.id)
|
|
225
|
-
end
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
#--
|
|
229
|
-
# Reload @current_user when updating to see flash message in the
|
|
230
|
-
# correct locale.
|
|
231
|
-
#++
|
|
232
|
-
def reload_locales
|
|
233
|
-
return unless Typus.authentication.eql?(:session)
|
|
234
|
-
if @resource.eql?(Typus.user_class)
|
|
235
|
-
I18n.locale = @current_user.reload.preferences[:locale]
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
end
|
data/lib/vendor/paginator.rb
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
require 'forwardable'
|
|
2
|
-
|
|
3
|
-
class Paginator
|
|
4
|
-
|
|
5
|
-
VERSION = '1.1.1'
|
|
6
|
-
|
|
7
|
-
include Enumerable
|
|
8
|
-
|
|
9
|
-
class ArgumentError < ::ArgumentError; end
|
|
10
|
-
class MissingCountError < ArgumentError; end
|
|
11
|
-
class MissingSelectError < ArgumentError; end
|
|
12
|
-
|
|
13
|
-
attr_reader :per_page, :count
|
|
14
|
-
|
|
15
|
-
# Instantiate a new Paginator object
|
|
16
|
-
#
|
|
17
|
-
# Provide:
|
|
18
|
-
# * A total count of the number of objects to paginate
|
|
19
|
-
# * The number of objects in each page
|
|
20
|
-
# * A block that returns the array of items
|
|
21
|
-
# * The block is passed the item offset
|
|
22
|
-
# (and the number of items to show per page, for
|
|
23
|
-
# convenience, if the arity is 2)
|
|
24
|
-
def initialize(count, per_page, &select)
|
|
25
|
-
@count, @per_page = count, per_page
|
|
26
|
-
unless select
|
|
27
|
-
raise MissingSelectError, "Must provide block to select data for each page"
|
|
28
|
-
end
|
|
29
|
-
@select = select
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Total number of pages
|
|
33
|
-
def number_of_pages
|
|
34
|
-
(@count / @per_page).to_i + (@count % @per_page > 0 ? 1 : 0)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# First page object
|
|
38
|
-
def first
|
|
39
|
-
page 1
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Last page object
|
|
43
|
-
def last
|
|
44
|
-
page number_of_pages
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def each
|
|
48
|
-
1.upto(number_of_pages) do |number|
|
|
49
|
-
yield page(number)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Retrieve page object by number
|
|
54
|
-
def page(number)
|
|
55
|
-
number = (n = number.to_i) > 0 ? n : 1
|
|
56
|
-
Page.new(self, number, lambda {
|
|
57
|
-
offset = (number - 1) * @per_page
|
|
58
|
-
args = [offset]
|
|
59
|
-
args << @per_page if @select.arity == 2
|
|
60
|
-
@select.call(*args)
|
|
61
|
-
})
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Page object
|
|
65
|
-
#
|
|
66
|
-
# Retrieves items for a page and provides metadata about the position
|
|
67
|
-
# of the page in the paginator
|
|
68
|
-
class Page
|
|
69
|
-
|
|
70
|
-
include Enumerable
|
|
71
|
-
|
|
72
|
-
attr_reader :number, :pager
|
|
73
|
-
|
|
74
|
-
def initialize(pager, number, select) #:nodoc:
|
|
75
|
-
@pager, @number = pager, number
|
|
76
|
-
@offset = (number - 1) * pager.per_page
|
|
77
|
-
@select = select
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Retrieve the items for this page
|
|
81
|
-
# * Caches
|
|
82
|
-
def items
|
|
83
|
-
@items ||= @select.call
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Does this page have any items?
|
|
87
|
-
def empty?
|
|
88
|
-
items.empty?
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Checks to see if there's a page before this one
|
|
92
|
-
def prev?
|
|
93
|
-
@number > 1
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Get previous page (if possible)
|
|
97
|
-
def prev
|
|
98
|
-
@pager.page(@number - 1) if prev?
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Checks to see if there's a page after this one
|
|
102
|
-
def next?
|
|
103
|
-
@number < @pager.number_of_pages
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Get next page (if possible)
|
|
107
|
-
def next
|
|
108
|
-
@pager.page(@number + 1) if next?
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# The "item number" of the first item on this page
|
|
112
|
-
def first_item_number
|
|
113
|
-
1 + @offset
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# The "item number" of the last item on this page
|
|
117
|
-
def last_item_number
|
|
118
|
-
if next?
|
|
119
|
-
@offset + @pager.per_page
|
|
120
|
-
else
|
|
121
|
-
@pager.count
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def ==(other) #:nodoc:
|
|
126
|
-
@pager == other.pager && self.number == other.number
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def each(&block)
|
|
130
|
-
items.each(&block)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def method_missing(meth, *args, &block) #:nodoc:
|
|
134
|
-
if @pager.respond_to?(meth)
|
|
135
|
-
@pager.__send__(meth, *args, &block)
|
|
136
|
-
else
|
|
137
|
-
super
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
end
|