typus 0.9.22 → 0.9.23
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/README.rdoc +20 -2
- data/VERSION +1 -1
- data/app/controllers/admin/master_controller.rb +7 -7
- data/app/controllers/typus_controller.rb +19 -2
- data/app/helpers/admin/form_helper.rb +17 -17
- data/app/helpers/admin/sidebar_helper.rb +9 -9
- data/app/helpers/admin/table_helper.rb +25 -8
- data/app/helpers/typus_helper.rb +7 -1
- data/app/views/admin/dashboard/_sidebar.html.erb +1 -3
- data/app/views/typus_mailer/reset_password_link.erb +1 -6
- data/config/locales/typus/de.yml +3 -4
- data/config/locales/typus/es.yml +3 -4
- data/config/locales/typus/language.yml.template +3 -4
- data/config/locales/typus/pt-BR.yml +3 -4
- data/config/locales/typus/ru.yml +4 -5
- data/generators/typus/templates/config/initializers/typus.rb +0 -1
- data/generators/typus/templates/db/create_typus_users.rb +1 -0
- data/generators/typus_update_schema_to_02/templates/migration.rb +11 -0
- data/generators/typus_update_schema_to_02/typus_update_schema_to_02_generator.rb +11 -0
- data/lib/typus/active_record.rb +18 -4
- data/lib/typus/authentication.rb +0 -4
- data/lib/typus/locale.rb +12 -2
- data/lib/typus/preview.rb +2 -2
- data/lib/typus/user.rb +7 -0
- data/test/helpers/admin/form_helper_test.rb +4 -1
- data/test/helpers/admin/sidebar_helper_test.rb +6 -6
- data/test/lib/active_record_test.rb +10 -11
- data/test/lib/configuration_test.rb +0 -1
- data/test/models.rb +3 -0
- data/test/unit/typus_mailer_test.rb +0 -4
- data/typus.gemspec +4 -2
- metadata +4 -2
data/README.rdoc
CHANGED
@@ -26,6 +26,25 @@ Step 3: Go to the admin area and enjoy it!
|
|
26
26
|
|
27
27
|
http://0.0.0.0:3000/admin
|
28
28
|
|
29
|
+
== Want to see a demo working?
|
30
|
+
|
31
|
+
There's an application running at Heroku.
|
32
|
+
|
33
|
+
http://typus.heroku.com/
|
34
|
+
|
35
|
+
Use the following credentials to log in.
|
36
|
+
|
37
|
+
Email: userdemo@intraducibles.com
|
38
|
+
Password: userdemo
|
39
|
+
|
40
|
+
Notes on the application demo:
|
41
|
+
|
42
|
+
- Runs under SSL.
|
43
|
+
- Has an Assets model to show how assets can work.
|
44
|
+
- User can only edit the posts they have generated.
|
45
|
+
- User cannot edit Categories, just view them.
|
46
|
+
- Shows how TinyMCE is integrated with Pages.
|
47
|
+
|
29
48
|
== Installing
|
30
49
|
|
31
50
|
Install from GitHub the latest version which it's compatible with Rails 2.3.2.
|
@@ -58,8 +77,7 @@ Typus and blog about Typus.
|
|
58
77
|
|
59
78
|
== Fancyzoom for assets
|
60
79
|
|
61
|
-
This feature is a work in progress.
|
62
|
-
named asset and only previews images.
|
80
|
+
This feature is a work in progress. Only previews images.
|
63
81
|
|
64
82
|
# db/migrate/create_photos.rb
|
65
83
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.23
|
@@ -88,7 +88,7 @@ class Admin::MasterController < ApplicationController
|
|
88
88
|
@item = @resource[:class].new(params[:item])
|
89
89
|
|
90
90
|
if @item.attributes.include?(Typus.user_fk)
|
91
|
-
@item.attributes = { Typus.user_fk =>
|
91
|
+
@item.attributes = { Typus.user_fk => @current_user.id }
|
92
92
|
end
|
93
93
|
|
94
94
|
if @item.valid?
|
@@ -147,7 +147,7 @@ class Admin::MasterController < ApplicationController
|
|
147
147
|
def destroy
|
148
148
|
@item.destroy
|
149
149
|
flash[:success] = _("{{model}} successfully removed.", :model => @resource[:class].typus_human_name)
|
150
|
-
redirect_to
|
150
|
+
redirect_to request.referer || admin_dashboard_path
|
151
151
|
rescue Exception => error
|
152
152
|
error_handler(error, params.merge(:action => 'index', :id => nil))
|
153
153
|
end
|
@@ -161,7 +161,7 @@ class Admin::MasterController < ApplicationController
|
|
161
161
|
else
|
162
162
|
flash[:notice] = _("Toggle is disabled.")
|
163
163
|
end
|
164
|
-
redirect_to
|
164
|
+
redirect_to request.referer || admin_dashboard_path
|
165
165
|
end
|
166
166
|
|
167
167
|
##
|
@@ -176,7 +176,7 @@ class Admin::MasterController < ApplicationController
|
|
176
176
|
def position
|
177
177
|
@item.send(params[:go])
|
178
178
|
flash[:success] = _("Record moved {{to}}.", :to => params[:go].gsub(/move_/, '').humanize.downcase)
|
179
|
-
redirect_to
|
179
|
+
redirect_to request.referer || admin_dashboard_path
|
180
180
|
end
|
181
181
|
|
182
182
|
##
|
@@ -256,9 +256,9 @@ private
|
|
256
256
|
|
257
257
|
# OPTIMIZE: `typus_users` is currently hard-coded. We should find a good name for this option.
|
258
258
|
if @item.respond_to?('typus_users') && !@item.send('typus_users').include?(@current_user) ||
|
259
|
-
@item.respond_to?(Typus.user_fk) &&
|
259
|
+
@item.respond_to?(Typus.user_fk) && !@item.owned_by?(@current_user)
|
260
260
|
flash[:notice] = _("You don't have permission to access this item.")
|
261
|
-
redirect_to
|
261
|
+
redirect_to request.referer || admin_dashboard_path
|
262
262
|
end
|
263
263
|
|
264
264
|
end
|
@@ -271,7 +271,7 @@ private
|
|
271
271
|
# If current user is not root and @resource has a foreign_key which
|
272
272
|
# is related to the logged user (Typus.user_fk) we only show the user
|
273
273
|
# related items.
|
274
|
-
if @resource[:class].
|
274
|
+
if @resource[:class].typus_user_id?
|
275
275
|
condition = { Typus.user_fk => @current_user }
|
276
276
|
@conditions = @resource[:class].merge_conditions(@conditions, condition)
|
277
277
|
end
|
@@ -13,12 +13,15 @@ class TypusController < ApplicationController
|
|
13
13
|
include SslRequirement
|
14
14
|
ssl_required :sign_in, :sign_out,
|
15
15
|
:dashboard,
|
16
|
-
:recover_password, :reset_password
|
16
|
+
:recover_password, :reset_password,
|
17
|
+
:set_locale
|
17
18
|
end
|
18
19
|
|
19
20
|
filter_parameter_logging :password
|
20
21
|
|
21
|
-
before_filter :
|
22
|
+
before_filter :verify_typus_users_table_schema
|
23
|
+
|
24
|
+
before_filter :set_default_locale, :except => [ :dashboard ]
|
22
25
|
|
23
26
|
before_filter :reload_config_et_roles
|
24
27
|
before_filter :require_login,
|
@@ -35,6 +38,8 @@ class TypusController < ApplicationController
|
|
35
38
|
before_filter :recover_password_disabled?,
|
36
39
|
:only => [ :recover_password, :reset_password ]
|
37
40
|
|
41
|
+
before_filter :set_locale, :only => [ :dashboard ]
|
42
|
+
|
38
43
|
def dashboard
|
39
44
|
flash[:notice] = _("There are not defined applications in config/typus/*.yml.") if Typus.applications.empty?
|
40
45
|
end
|
@@ -117,6 +122,18 @@ class TypusController < ApplicationController
|
|
117
122
|
|
118
123
|
private
|
119
124
|
|
125
|
+
def verify_typus_users_table_schema
|
126
|
+
|
127
|
+
unless Typus.user_class.model_fields.keys.include?(:roles)
|
128
|
+
raise "Run `script/generate typus_update_schema_to_01 -f && rake db:migrate` to update database schema."
|
129
|
+
end
|
130
|
+
|
131
|
+
unless Typus.user_class.model_fields.keys.include?(:preferences)
|
132
|
+
raise "Run `script/generate typus_update_schema_to_02 -f && rake db:migrate` to update database schema."
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
120
137
|
def recover_password_disabled?
|
121
138
|
redirect_to admin_sign_in_path unless Typus::Configuration.options[:recover_password]
|
122
139
|
end
|
@@ -58,7 +58,7 @@ module Admin::FormHelper
|
|
58
58
|
html << typus_tree_field(related_fk, related.roots, related_fk)
|
59
59
|
else
|
60
60
|
html << <<-HTML
|
61
|
-
<li><label for="item_#{attribute}">#{
|
61
|
+
<li><label for="item_#{attribute}">#{@resource[:class].human_attribute_name(attribute)}
|
62
62
|
<small>#{link_to _("Add"), { :controller => "admin/#{related.class_name.tableize}", :action => 'new', :back_to => back_to, :selected => related_fk }, :confirm => message.join("\n\n") if @current_user.can_perform?(related, 'create')}</small>
|
63
63
|
</label>
|
64
64
|
#{select :item, related_fk, related.find(:all, :order => related.typus_order_by).collect { |p| [p.typus_name, p.id] }, { :include_blank => true }, { :disabled => attribute_disabled?(attribute) } }</li>
|
@@ -93,25 +93,27 @@ module Admin::FormHelper
|
|
93
93
|
HTML
|
94
94
|
end
|
95
95
|
|
96
|
-
#
|
96
|
+
# Optimize
|
97
97
|
def typus_file_field(attribute)
|
98
|
-
|
98
|
+
|
99
|
+
attachment = attribute.split('_file_name').first
|
100
|
+
|
99
101
|
unless @item.send(attribute).blank?
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
102
|
+
item = @item.send(attachment)
|
103
|
+
preview = if @item.send("#{attachment}_content_type") =~ /^image\/.+/ && item.styles.member?(:typus_thumbnail)
|
104
|
+
image_tag item.url(:typus_thumbnail)
|
105
|
+
else
|
106
|
+
link_to @item.send(attribute), item.url
|
107
|
+
end
|
108
108
|
end
|
109
|
+
|
109
110
|
<<-HTML
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
<li><label for="item_#{attribute}">#{_(attachment.humanize)}</label>
|
112
|
+
#{file_field :item, attachment, :disabled => attribute_disabled?(attribute)}
|
113
|
+
#{preview}
|
114
|
+
</li>
|
114
115
|
HTML
|
116
|
+
|
115
117
|
end
|
116
118
|
|
117
119
|
def typus_password_field(attribute)
|
@@ -235,8 +237,6 @@ module Admin::FormHelper
|
|
235
237
|
association = reflection.macro
|
236
238
|
foreign_key = reflection.through_reflection ? reflection.primary_key_name.pluralize : reflection.primary_key_name
|
237
239
|
|
238
|
-
#WEI: Changed link to use type name rather than field:
|
239
|
-
#WEI: link_options = { :controller => "admin/#{field}",
|
240
240
|
link_options = { :controller => "admin/#{model_to_relate_as_resource.pluralize}",
|
241
241
|
:action => 'new',
|
242
242
|
:back_to => "#{@back_to}##{field}",
|
@@ -28,10 +28,17 @@ module Admin::SidebarHelper
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
# OPTIMIZE
|
31
32
|
case params[:action]
|
32
33
|
when 'show'
|
33
34
|
if @current_user.can_perform?(@resource[:class], 'update')
|
34
|
-
|
35
|
+
if @item.typus_user_id?
|
36
|
+
if @item.owned_by?(@current_user)
|
37
|
+
items << (link_to _("Edit entry"), :action => 'edit', :id => @item.id)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
items << (link_to _("Edit entry"), :action => 'edit', :id => @item.id)
|
41
|
+
end
|
35
42
|
end
|
36
43
|
end
|
37
44
|
|
@@ -194,16 +201,9 @@ function surfto_#{model_pluralized}(form) {
|
|
194
201
|
|
195
202
|
end
|
196
203
|
|
197
|
-
##
|
198
|
-
# Thinking in update datetime_filters to ...
|
199
|
-
#
|
200
|
-
# %w( today last_few_days last_7_days last_30_days )
|
201
|
-
#
|
202
|
-
# ... which are the ones used by 'exception_logger'.
|
203
|
-
#
|
204
204
|
def datetime_filter(request, filter)
|
205
205
|
items = []
|
206
|
-
%w( today
|
206
|
+
%w( today last_few_days last_7_days last_30_days ).each do |timeline|
|
207
207
|
switch = request.include?("#{filter}=#{timeline}") ? 'on' : 'off'
|
208
208
|
options = { filter.to_sym => timeline, :page => nil }
|
209
209
|
items << (link_to _(timeline.humanize), params.merge(options), :class => switch)
|
@@ -31,14 +31,21 @@ module Admin::TableHelper
|
|
31
31
|
else
|
32
32
|
html << typus_table_string_field(key, item, link_options)
|
33
33
|
end
|
34
|
-
|
35
34
|
end
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
action = if item.typus_user_id? && !@current_user.is_root?
|
37
|
+
# If there's a typus_user_id column on the table and logged user is not root ...
|
38
|
+
item.owned_by?(@current_user) ? 'edit' : 'show'
|
39
|
+
elsif !@current_user.can_perform?(model, 'edit')
|
40
|
+
'show'
|
41
|
+
else
|
42
|
+
item.class.typus_options_for(:default_action_on_item)
|
43
|
+
end
|
44
|
+
|
45
|
+
content = link_to _(action.capitalize), :controller => "admin/#{item.class.name.tableize}", :action => action, :id => item.id
|
46
|
+
html << <<-HTML
|
40
47
|
<td width="10px">#{content}</td>
|
41
|
-
|
48
|
+
HTML
|
42
49
|
|
43
50
|
##
|
44
51
|
# This controls the action to perform. If we are on a model list we
|
@@ -149,10 +156,20 @@ module Admin::TableHelper
|
|
149
156
|
end
|
150
157
|
|
151
158
|
def typus_table_file_field(attribute, item, link_options = {})
|
152
|
-
|
159
|
+
|
160
|
+
attachment = attribute.split('_file_name').first
|
161
|
+
|
162
|
+
if item.send(attachment).styles.member?(:typus_preview) && item.send("#{attachment}_content_type") =~ /^image\/.+/
|
163
|
+
<<-HTML
|
153
164
|
<td><a href="##{item.to_dom(:suffix => 'zoom')}" id="#{item.to_dom}" title="Click to preview">#{item.send(attribute)}</a></td>
|
154
|
-
<div id
|
155
|
-
|
165
|
+
<div id=\"#{item.to_dom(:suffix => 'zoom')}\">#{item.typus_preview(attachment)}</div>
|
166
|
+
HTML
|
167
|
+
else
|
168
|
+
<<-HTML
|
169
|
+
<td>#{link_to item.send(attribute), item.send(attachment).url}</td>
|
170
|
+
HTML
|
171
|
+
end
|
172
|
+
|
156
173
|
end
|
157
174
|
|
158
175
|
def typus_table_tree_field(attribute, item)
|
data/app/helpers/typus_helper.rb
CHANGED
@@ -149,9 +149,15 @@ module TypusHelper
|
|
149
149
|
|
150
150
|
message = _("Are you sure you want to sign out and end your session?")
|
151
151
|
|
152
|
+
user_details = if user.can_perform?(Typus::Configuration.options[:user_class_name], 'edit')
|
153
|
+
link_to user.name, admin_edit_typus_user_path, :title => "#{user.email} (#{user.role})"
|
154
|
+
else
|
155
|
+
user.name
|
156
|
+
end
|
157
|
+
|
152
158
|
<<-HTML
|
153
159
|
<ul>
|
154
|
-
<li>#{_("Logged as")} #{
|
160
|
+
<li>#{_("Logged as")} #{user_details}</li>
|
155
161
|
<li>#{link_to _("Sign out"), admin_sign_out_path, { :confirm => message } }</li>
|
156
162
|
</ul>
|
157
163
|
HTML
|
@@ -4,6 +4,4 @@
|
|
4
4
|
|
5
5
|
<p>If you need help don't hesitate in joining the <%= link_to 'Typus', 'http://groups.google.com/group/typus', :rel => 'external' %> mailing list.</p>
|
6
6
|
|
7
|
-
<p>
|
8
|
-
|
9
|
-
<p>Have a nice day!</p>
|
7
|
+
<p>Replace this sidebar dropping a file named <code>_sidebar.html.erb</code> on the <code>app/views/admin/dashboard</code> folder.</p>
|
@@ -3,9 +3,4 @@
|
|
3
3
|
|
4
4
|
<%= url_for admin_reset_password_url(:token => @user.token) %>
|
5
5
|
|
6
|
-
<%= _("If you didn't request a password update, you can ignore this message") %>
|
7
|
-
|
8
|
-
<%= _("Have a nice day") %>
|
9
|
-
|
10
|
-
--
|
11
|
-
<%= Typus::Configuration.options[:app_name] %>
|
6
|
+
<%= _("If you didn't request a password update, you can ignore this message") %>
|
data/config/locales/typus/de.yml
CHANGED
@@ -86,7 +86,6 @@ de:
|
|
86
86
|
"{{current_user_role}} can't display items": "{{current_user_role}} kann Einträge nicht anzeigen"
|
87
87
|
"You can update your password at": "Sie k7ouml;nnen Ihr Passwort ändern unter"
|
88
88
|
"If you didn't request a password update, you can ignore this message": "Falls Sie keine Passwort Äderung beantragt haben, können Sie diese nachricht ignorieren"
|
89
|
-
"Have a nice day": "Haben Sie einen guten Tag"
|
90
89
|
"Reset password": "Passwort zurücksetzen"
|
91
90
|
"Add new": "Erstellen"
|
92
91
|
"Do you want to cancel it?": "Wollen Sie abbrechen?"
|
@@ -99,9 +98,9 @@ de:
|
|
99
98
|
"Change {{attribute}}?": "{{attribute}}ändern?"
|
100
99
|
"Set language": "Sprache einstellen"
|
101
100
|
"Today": "Heute"
|
102
|
-
"
|
103
|
-
"
|
104
|
-
"
|
101
|
+
"Last few days": "Letzten Tage"
|
102
|
+
"Last 7 days": "Letzten 7 Tage"
|
103
|
+
"Last 30 days": "Letzten 30 Tage"
|
105
104
|
"{{model}} filtered by {{filtered_by}}": "{{model}} gefiltert nach {{filtered_by}}"
|
106
105
|
"True": "Richtig"
|
107
106
|
"False": "Falsch"
|
data/config/locales/typus/es.yml
CHANGED
@@ -86,7 +86,6 @@ es:
|
|
86
86
|
"{{current_user_role}} can't display items": "{{current_user_role}} no puede mostrar los elementos."
|
87
87
|
"You can update your password at": "Puedes actualizar tu contraseña en"
|
88
88
|
"If you didn't request a password update, you can ignore this message": "Si no pediste una actualización de tu contraseña, puedes ignorar este mensaje."
|
89
|
-
"Have a nice day": "Que tengas un buen dia."
|
90
89
|
"Reset password": "Cambiar contraseña"
|
91
90
|
"Add new": "Añadir nuevo"
|
92
91
|
"Do you want to cancel it?": "¿Quieres cancelarlo?"
|
@@ -99,9 +98,9 @@ es:
|
|
99
98
|
"Change {{attribute}}?": "Change {{attribute}}?"
|
100
99
|
"Set language": "Cambiar idioma"
|
101
100
|
"Today": "Hoy"
|
102
|
-
"
|
103
|
-
"
|
104
|
-
"
|
101
|
+
"Last few days": "Últimos dias"
|
102
|
+
"Last 7 days": "Últimos 7 dias"
|
103
|
+
"Last 30 days": "Últimos 30 dias"
|
105
104
|
"{{model}} filtered by {{filtered_by}}": "{{model}} filtrados por {{filtered_by}}"
|
106
105
|
"True": "Verdadero"
|
107
106
|
"False": "Falso"
|
@@ -90,7 +90,6 @@
|
|
90
90
|
"{{current_user_role}} can't display items":
|
91
91
|
"You can update your password at":
|
92
92
|
"If you didn't request a password update, you can ignore this message":
|
93
|
-
"Have a nice day":
|
94
93
|
"Reset password":
|
95
94
|
"Add new":
|
96
95
|
"Do you want to cancel it?":
|
@@ -103,9 +102,9 @@
|
|
103
102
|
"Change {{attribute}}?":
|
104
103
|
"Set language":
|
105
104
|
"Today":
|
106
|
-
"
|
107
|
-
"
|
108
|
-
"
|
105
|
+
"Last few days":
|
106
|
+
"Last 7 days":
|
107
|
+
"Last 30 days":
|
109
108
|
"{{model}} filtered by {{filtered_by}}":
|
110
109
|
"True":
|
111
110
|
"False":
|
@@ -86,7 +86,6 @@ pt-BR:
|
|
86
86
|
"{{current_user_role}} can't display items": "{{current_user_role}} não pode mostrar os items."
|
87
87
|
"You can update your password at": "Você pode atualizar sua senha em"
|
88
88
|
"If you didn't request a password update, you can ignore this message": "Se você não pediu uma renovação de senha, por favor ignore esta mensagem."
|
89
|
-
"Have a nice day": "Tenha um bom dia."
|
90
89
|
"Reset password": "Trocar senha"
|
91
90
|
"Add new": "Adicionar novo"
|
92
91
|
"Do you want to cancel it?": "Quer cancelar?"
|
@@ -99,9 +98,9 @@ pt-BR:
|
|
99
98
|
"Change {{attribute}}?": "Mudar {{attribute}}?"
|
100
99
|
"Set language": "Mudar idioma"
|
101
100
|
"Today": "Hoje"
|
102
|
-
"
|
103
|
-
"
|
104
|
-
"
|
101
|
+
"Last few days": "Últimos dias"
|
102
|
+
"Last 7 days": "Últimos 7 dias"
|
103
|
+
"Last 30 days": "Últimos 30 dias"
|
105
104
|
"Created at": "Criado em"
|
106
105
|
"Updated at": "Atualizado em"
|
107
106
|
"{{model}} filtered by {{filtered_by}}": "{{model}} filtrados por {{filtered_by}}"
|
data/config/locales/typus/ru.yml
CHANGED
@@ -26,7 +26,7 @@ ru:
|
|
26
26
|
"Update entry": "Изменить запись"
|
27
27
|
"New": "Новый"
|
28
28
|
"Show": "Показать"
|
29
|
-
"Edit":
|
29
|
+
"Edit":
|
30
30
|
"Login": "Редактировать"
|
31
31
|
"Setup": "Установки"
|
32
32
|
"Create": "Создать"
|
@@ -86,7 +86,6 @@ ru:
|
|
86
86
|
"{{current_user_role}} can't display items": "{{current_user_role}} не может отобразить записи"
|
87
87
|
"You can update your password at": "Вы можете установить свой пароль на"
|
88
88
|
"If you didn't request a password update, you can ignore this message": "Если Вы не запрашивали обновление пароля, Вы можете проигнорировать это сообщение."
|
89
|
-
"Have a nice day": "Добрый день."
|
90
89
|
"Reset password": "Сбросить пароль"
|
91
90
|
"Add new": "Добавить новый"
|
92
91
|
"Do you want to cancel it?": "Вы хотите отменить это?"
|
@@ -99,9 +98,9 @@ ru:
|
|
99
98
|
"Change {{attribute}}?": "Изменить {{attribute}}?"
|
100
99
|
"Set language": "Установить язык"
|
101
100
|
"Today": "Сегодня"
|
102
|
-
"
|
103
|
-
"
|
104
|
-
"
|
101
|
+
"Last few days": "Последние дней"
|
102
|
+
"Last 7 days": "Последние 7 дней"
|
103
|
+
"Last 30 days": "Последние 30 дней"
|
105
104
|
"Created at": "Создано"
|
106
105
|
"Updated at": "Обновлено"
|
107
106
|
"{{model}} filtered by {{filtered_by}}":
|
@@ -5,7 +5,6 @@
|
|
5
5
|
Typus::Configuration.options[:app_name] = '<%= application %>'
|
6
6
|
# Typus::Configuration.options[:config_folder] = 'config/typus'
|
7
7
|
# Typus::Configuration.options[:email] = 'admin@example.com'
|
8
|
-
# Typus::Configuration.options[:image_preview_size] = :typus
|
9
8
|
# Typus::Configuration.options[:locales] = [ [ "English", :en ], [ "Español", :es ] ]
|
10
9
|
# Typus::Configuration.options[:recover_password] = true
|
11
10
|
# Typus::Configuration.options[:root] = 'admin'
|
data/lib/typus/active_record.rb
CHANGED
@@ -235,9 +235,11 @@ module Typus
|
|
235
235
|
# Sidebar filters:
|
236
236
|
#
|
237
237
|
# - Booleans: true, false
|
238
|
-
# - Datetime: today,
|
238
|
+
# - Datetime: today, last_few_days, last_7_days, last_30_days
|
239
239
|
# - Integer & String: *_id and "selectors" (p.ej. category_id)
|
240
240
|
#
|
241
|
+
# today last_few_days last_7_days last_30_days
|
242
|
+
#
|
241
243
|
case filter_type
|
242
244
|
when :boolean
|
243
245
|
condition = { key => (value == 'true') ? true : false }
|
@@ -245,9 +247,9 @@ module Typus
|
|
245
247
|
when :datetime
|
246
248
|
interval = case value
|
247
249
|
when 'today' then Time.new.midnight..Time.new.midnight.tomorrow
|
248
|
-
when '
|
249
|
-
when '
|
250
|
-
when '
|
250
|
+
when 'last_few_days' then 3.days.ago.midnight..Time.new.midnight.tomorrow
|
251
|
+
when 'last_7_days' then 6.days.ago.midnight..Time.new.midnight.tomorrow
|
252
|
+
when 'last_30_days' then Time.new.midnight.last_month..Time.new.midnight.tomorrow
|
251
253
|
end
|
252
254
|
condition = ["#{key} BETWEEN ? AND ?", interval.first.to_s(:db), interval.last.to_s(:db)]
|
253
255
|
conditions = merge_conditions(conditions, condition)
|
@@ -266,6 +268,10 @@ module Typus
|
|
266
268
|
|
267
269
|
end
|
268
270
|
|
271
|
+
def typus_user_id?
|
272
|
+
columns.map { |u| u.name }.include?(Typus.user_fk)
|
273
|
+
end
|
274
|
+
|
269
275
|
end
|
270
276
|
|
271
277
|
module InstanceMethods
|
@@ -299,6 +305,14 @@ module Typus
|
|
299
305
|
respond_to?(:name) ? name : "#{self.class}##{id}"
|
300
306
|
end
|
301
307
|
|
308
|
+
def typus_user_id?
|
309
|
+
self.class.typus_user_id?
|
310
|
+
end
|
311
|
+
|
312
|
+
def owned_by?(user)
|
313
|
+
send(Typus.user_fk) == user.id
|
314
|
+
end
|
315
|
+
|
302
316
|
end
|
303
317
|
|
304
318
|
end
|
data/lib/typus/authentication.rb
CHANGED
@@ -27,10 +27,6 @@ module Typus
|
|
27
27
|
|
28
28
|
@current_user = Typus.user_class.find(session[:typus_user_id])
|
29
29
|
|
30
|
-
unless @current_user.respond_to?(:role)
|
31
|
-
raise _("Run 'script/generate typus_update_schema_to_01 -f && rake db:migrate' to update database schema.")
|
32
|
-
end
|
33
|
-
|
34
30
|
unless Typus::Configuration.roles.keys.include?(@current_user.role)
|
35
31
|
raise _("Role does no longer exists.")
|
36
32
|
end
|
data/lib/typus/locale.rb
CHANGED
@@ -6,12 +6,22 @@ module Typus
|
|
6
6
|
if params[:locale]
|
7
7
|
I18n.locale = params[:locale]
|
8
8
|
session[:typus_locale] = params[:locale]
|
9
|
-
|
9
|
+
@current_user.update_attributes :preferences => { :locale => params[:locale] }
|
10
|
+
redirect_to request.referer || admin_dashboard_path
|
10
11
|
else
|
11
|
-
|
12
|
+
begin
|
13
|
+
I18n.locale = @current_user.preferences[:locale]
|
14
|
+
rescue
|
15
|
+
@current_user.update_attributes :preferences => { :locale => params[:locale] }
|
16
|
+
retry
|
17
|
+
end
|
12
18
|
end
|
13
19
|
end
|
14
20
|
|
21
|
+
def set_default_locale
|
22
|
+
I18n.locale = Typus.default_locale
|
23
|
+
end
|
24
|
+
|
15
25
|
end
|
16
26
|
|
17
27
|
end
|
data/lib/typus/preview.rb
CHANGED
@@ -2,8 +2,8 @@ module Typus
|
|
2
2
|
|
3
3
|
module InstanceMethods
|
4
4
|
|
5
|
-
def typus_preview
|
6
|
-
return "<img src=\"#{
|
5
|
+
def typus_preview(attachment)
|
6
|
+
return "<img src=\"#{send(attachment).url(:typus_preview)}\" />"
|
7
7
|
end
|
8
8
|
|
9
9
|
end
|
data/lib/typus/user.rb
CHANGED
@@ -25,6 +25,9 @@ module Typus
|
|
25
25
|
validates_presence_of :role
|
26
26
|
|
27
27
|
before_save :initialize_salt, :encrypt_password, :initialize_token
|
28
|
+
before_create :set_preferences
|
29
|
+
|
30
|
+
serialize :preferences
|
28
31
|
|
29
32
|
include InstanceMethods
|
30
33
|
|
@@ -96,6 +99,10 @@ module Typus
|
|
96
99
|
|
97
100
|
protected
|
98
101
|
|
102
|
+
def set_preferences
|
103
|
+
self.preferences = { :locale => Typus.default_locale }
|
104
|
+
end
|
105
|
+
|
99
106
|
def generate_hash(string)
|
100
107
|
Digest::SHA1.hexdigest(string)
|
101
108
|
end
|
@@ -109,11 +109,14 @@ class Admin::FormHelperTest < ActiveSupport::TestCase
|
|
109
109
|
def test_typus_file_field
|
110
110
|
|
111
111
|
@resource = { :class => Post }
|
112
|
+
@item = Post.new
|
112
113
|
|
113
114
|
output = typus_file_field('asset_file_name')
|
114
115
|
expected = <<-HTML
|
115
116
|
<li><label for="item_asset_file_name">Asset</label>
|
116
|
-
<input id="item_asset" name="item[asset]" size="30" type="file"
|
117
|
+
<input id="item_asset" name="item[asset]" size="30" type="file" />
|
118
|
+
|
119
|
+
</li>
|
117
120
|
HTML
|
118
121
|
|
119
122
|
assert_equal expected, output
|
@@ -194,9 +194,9 @@ class Admin::SidebarHelperTest < ActiveSupport::TestCase
|
|
194
194
|
<h2>Created at</h2>
|
195
195
|
<ul>
|
196
196
|
<li><a href="http://test.host/admin/typus_users?created_at=today" class="off">Today</a></li>
|
197
|
-
<li><a href="http://test.host/admin/typus_users?created_at=
|
198
|
-
<li><a href="http://test.host/admin/typus_users?created_at=
|
199
|
-
<li><a href="http://test.host/admin/typus_users?created_at=
|
197
|
+
<li><a href="http://test.host/admin/typus_users?created_at=last_few_days" class="off">Last few days</a></li>
|
198
|
+
<li><a href="http://test.host/admin/typus_users?created_at=last_7_days" class="off">Last 7 days</a></li>
|
199
|
+
<li><a href="http://test.host/admin/typus_users?created_at=last_30_days" class="off">Last 30 days</a></li>
|
200
200
|
</ul>
|
201
201
|
HTML
|
202
202
|
assert_equal expected, output
|
@@ -207,9 +207,9 @@ class Admin::SidebarHelperTest < ActiveSupport::TestCase
|
|
207
207
|
<h2>Created at</h2>
|
208
208
|
<ul>
|
209
209
|
<li><a href="http://test.host/admin/typus_users?created_at=today" class="on">Today</a></li>
|
210
|
-
<li><a href="http://test.host/admin/typus_users?created_at=
|
211
|
-
<li><a href="http://test.host/admin/typus_users?created_at=
|
212
|
-
<li><a href="http://test.host/admin/typus_users?created_at=
|
210
|
+
<li><a href="http://test.host/admin/typus_users?created_at=last_few_days" class="off">Last few days</a></li>
|
211
|
+
<li><a href="http://test.host/admin/typus_users?created_at=last_7_days" class="off">Last 7 days</a></li>
|
212
|
+
<li><a href="http://test.host/admin/typus_users?created_at=last_30_days" class="off">Last 30 days</a></li>
|
213
213
|
</ul>
|
214
214
|
HTML
|
215
215
|
assert_equal expected, output
|
@@ -285,33 +285,32 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|
285
285
|
params = { :created_at => 'today' }
|
286
286
|
assert_equal expected, TypusUser.build_conditions(params).first
|
287
287
|
|
288
|
-
|
289
288
|
expected = case ENV['DB']
|
290
289
|
when /postgresql/
|
291
|
-
"(created_at BETWEEN E'#{
|
290
|
+
"(created_at BETWEEN E'#{3.days.ago.midnight.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
|
292
291
|
else
|
293
|
-
"(created_at BETWEEN '#{
|
292
|
+
"(created_at BETWEEN '#{3.days.ago.midnight.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
|
294
293
|
end
|
295
|
-
params = { :created_at => '
|
294
|
+
params = { :created_at => 'last_few_days' }
|
296
295
|
assert_equal expected, TypusUser.build_conditions(params).first
|
297
296
|
|
298
|
-
|
299
297
|
expected = case ENV['DB']
|
300
298
|
when /postgresql/
|
301
|
-
"(created_at BETWEEN E'#{
|
299
|
+
"(created_at BETWEEN E'#{6.days.ago.midnight.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
|
302
300
|
else
|
303
|
-
"(created_at BETWEEN '#{
|
301
|
+
"(created_at BETWEEN '#{6.days.ago.midnight.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
|
304
302
|
end
|
305
|
-
params = { :created_at => '
|
303
|
+
params = { :created_at => 'last_7_days' }
|
306
304
|
assert_equal expected, TypusUser.build_conditions(params).first
|
307
305
|
|
306
|
+
|
308
307
|
expected = case ENV['DB']
|
309
308
|
when /postgresql/
|
310
|
-
"(created_at BETWEEN E'#{Time.new.midnight.
|
309
|
+
"(created_at BETWEEN E'#{Time.new.midnight.last_month.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
|
311
310
|
else
|
312
|
-
"(created_at BETWEEN '#{Time.new.midnight.
|
311
|
+
"(created_at BETWEEN '#{Time.new.midnight.last_month.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
|
313
312
|
end
|
314
|
-
params = { :created_at => '
|
313
|
+
params = { :created_at => 'last_30_days' }
|
315
314
|
assert_equal expected, TypusUser.build_conditions(params).first
|
316
315
|
|
317
316
|
end
|
@@ -12,7 +12,6 @@ class ConfigurationTest < ActiveSupport::TestCase
|
|
12
12
|
assert_equal 'Typus', Typus::Configuration.options[:app_name]
|
13
13
|
assert_equal 'vendor/plugins/typus/test/config/working', Typus::Configuration.options[:config_folder]
|
14
14
|
assert_equal 'admin@example.com', Typus::Configuration.options[:email]
|
15
|
-
assert_equal 'typus', Typus::Configuration.options[:image_preview_size]
|
16
15
|
assert_equal [ [ "English", :en] ], Typus::Configuration.options[:locales]
|
17
16
|
assert_equal false, Typus::Configuration.options[:recover_password]
|
18
17
|
assert_equal 'admin', Typus::Configuration.options[:root]
|
data/test/models.rb
CHANGED
data/typus.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{typus}
|
8
|
-
s.version = "0.9.
|
8
|
+
s.version = "0.9.23"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Francesc Esplugas"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-09-03}
|
13
13
|
s.description = %q{Effortless backend interface for Ruby on Rails applications. (Admin scaffold generator.)}
|
14
14
|
s.email = %q{francesc@intraducibles.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -94,6 +94,8 @@ Gem::Specification.new do |s|
|
|
94
94
|
"generators/typus_update_schema_to_01/templates/config/typus.yml",
|
95
95
|
"generators/typus_update_schema_to_01/templates/migration.rb",
|
96
96
|
"generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb",
|
97
|
+
"generators/typus_update_schema_to_02/templates/migration.rb",
|
98
|
+
"generators/typus_update_schema_to_02/typus_update_schema_to_02_generator.rb",
|
97
99
|
"lib/typus.rb",
|
98
100
|
"lib/typus/active_record.rb",
|
99
101
|
"lib/typus/authentication.rb",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francesc Esplugas
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-03 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -100,6 +100,8 @@ files:
|
|
100
100
|
- generators/typus_update_schema_to_01/templates/config/typus.yml
|
101
101
|
- generators/typus_update_schema_to_01/templates/migration.rb
|
102
102
|
- generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb
|
103
|
+
- generators/typus_update_schema_to_02/templates/migration.rb
|
104
|
+
- generators/typus_update_schema_to_02/typus_update_schema_to_02_generator.rb
|
103
105
|
- lib/typus.rb
|
104
106
|
- lib/typus/active_record.rb
|
105
107
|
- lib/typus/authentication.rb
|