zena 1.2.4 → 1.2.5
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/History.txt +18 -0
- data/app/controllers/nodes_controller.rb +11 -6
- data/app/controllers/sites_controller.rb +3 -2
- data/app/controllers/user_sessions_controller.rb +1 -1
- data/app/controllers/virtual_classes_controller.rb +3 -2
- data/app/models/document.rb +2 -2
- data/app/models/node.rb +6 -1
- data/app/models/note.rb +3 -27
- data/app/models/role.rb +11 -5
- data/app/models/site.rb +140 -43
- data/app/models/string_hash.rb +2 -0
- data/app/models/user.rb +9 -4
- data/app/models/user_session.rb +1 -1
- data/app/models/virtual_class.rb +49 -18
- data/app/views/sites/_form.erb +7 -4
- data/app/views/sites/_li.erb +15 -9
- data/app/views/users/_li.rhtml +3 -0
- data/app/views/users/index.rhtml +1 -1
- data/app/views/virtual_classes/_form.erb +1 -1
- data/bricks/acls/zena/init.rb +1 -2
- data/bricks/acls/zena/test/sites/erebus/roles.yml +4 -0
- data/bricks/activity/lib/bricks/activity.rb +24 -0
- data/bricks/activity/zena/migrate/20130711135905_add_activity_to_user.rb +9 -0
- data/bricks/activity/zena/test/integration/activity_integration_test.rb +29 -0
- data/bricks/captcha/zena/init.rb +0 -3
- data/bricks/fs_skin/lib/bricks/fs_skin.rb +3 -3
- data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
- data/bricks/fs_skin/zena/tasks.rb +2 -2
- data/bricks/fs_skin/zena/test/integration/fs_skin_integration_test.rb +2 -2
- data/bricks/fs_skin/zena/test/unit/fs_skin_test.rb +1 -1
- data/bricks/math/zena/init.rb +0 -3
- data/bricks/pdf/zena/init.rb +1 -5
- data/bricks/worker/zena/init.rb +0 -2
- data/bricks/zena/zena/migrate/20130617164527_add_master_id_to_site.rb +13 -0
- data/bricks/zena/zena/migrate/20130712081512_alter_login_users.rb +9 -0
- data/config/bricks.yml +4 -1
- data/lib/bricks/loader.rb +17 -9
- data/lib/tasks/zena.rake +40 -5
- data/lib/zafu/process/ruby_less_processing.rb +3 -5
- data/lib/zena.rb +2 -0
- data/lib/zena/acts/secure.rb +11 -2
- data/lib/zena/console.rb +5 -4
- data/lib/zena/core_ext/string.rb +2 -2
- data/lib/zena/deploy.rb +22 -6
- data/lib/zena/deploy/logrotate_app.rhtml +10 -7
- data/lib/zena/deploy/logrotate_host.rhtml +21 -26
- data/lib/zena/deploy/vhost.rhtml +3 -3
- data/lib/zena/foxy_parser.rb +1 -1
- data/lib/zena/info.rb +1 -1
- data/lib/zena/site_worker.rb +2 -2
- data/lib/zena/use.rb +0 -1
- data/lib/zena/use/ancestry.rb +1 -1
- data/lib/zena/use/authlogic.rb +2 -1
- data/lib/zena/use/display.rb +6 -0
- data/lib/zena/use/query_builder.rb +1 -1
- data/lib/zena/use/query_node.rb +3 -3
- data/lib/zena/use/rendering.rb +47 -13
- data/lib/zena/use/test_helper.rb +1 -1
- data/lib/zena/use/urls.rb +6 -104
- data/lib/zena/use/zafu_safe_definitions.rb +9 -4
- data/lib/zena/use/zafu_templates.rb +1 -0
- data/locale/app.pot +4 -0
- data/locale/de/LC_MESSAGES/zena.mo +0 -0
- data/locale/de/zena.po +6 -2
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.po +6 -2
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.po +5 -1
- data/locale/it/LC_MESSAGES/zena.mo +0 -0
- data/locale/it/zena.po +6 -2
- data/locale/zena.pot +4 -0
- data/test/functional/nodes_controller_test.rb +2 -133
- data/test/functional/sites_controller_test.rb +1 -1
- data/test/integration/multiple_hosts_test.rb +2 -1
- data/test/integration/navigation_test.rb +37 -0
- data/test/integration/query_node/basic.yml +1 -1
- data/test/integration/zafu_compiler/ajax.yml +7 -0
- data/test/integration/zafu_compiler/comments.yml +2 -2
- data/test/integration/zafu_compiler/context.yml +6 -2
- data/test/integration/zafu_compiler/display.yml +16 -4
- data/test/integration/zafu_compiler/forms.yml +1 -0
- data/test/integration/zafu_compiler/query.yml +7 -1
- data/test/integration/zafu_compiler/relations.yml +12 -7
- data/test/integration/zafu_compiler/roles.yml +3 -3
- data/test/integration/zafu_compiler/rubyless.yml +1 -2
- data/test/integration/zafu_compiler/safe_definitions.yml +5 -0
- data/test/sites/complex/roles.yml +1 -1
- data/test/sites/ocean/roles.yml +4 -0
- data/test/sites/zena/columns.yml +3 -1
- data/test/sites/zena/roles.yml +5 -1
- data/test/sites/zena/sites.yml +22 -0
- data/test/unit/document_test.rb +14 -0
- data/test/unit/node_test.rb +14 -0
- data/test/unit/role_test.rb +19 -4
- data/test/unit/site_test.rb +67 -0
- data/test/unit/user_test.rb +20 -0
- data/test/unit/virtual_class_test.rb +116 -11
- data/test/unit/zena/use/rendering_test.rb +1 -1
- data/zena.gemspec +67 -66
- metadata +126 -125
- data/bricks/fs_skin/zena/init.rb +0 -1
- data/bricks/grid/zena/init.rb +0 -4
- data/bricks/single/zena/init.rb +0 -1
- data/bricks/spreadsheet/zena/init.rb +0 -3
data/lib/zena/use/ancestry.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Zena
|
|
|
10
10
|
TITLE_ML_JOIN = %Q{INNER JOIN idx_nodes_ml_strings AS id1 ON id1.node_id = nodes.id AND id1.key = 'title'}
|
|
11
11
|
|
|
12
12
|
# (slow). Find a node by it's path. This is used during node importation when stored as zml files or to resolve custom_base url until we have an "alias" table.
|
|
13
|
-
def find_by_path(path, parent_id = current_site.
|
|
13
|
+
def find_by_path(path, parent_id = current_site.orphan_id, multilingual = false)
|
|
14
14
|
res = nil
|
|
15
15
|
path = path.split('/') unless path.kind_of?(Array)
|
|
16
16
|
last = path.size - 1
|
data/lib/zena/use/authlogic.rb
CHANGED
|
@@ -50,7 +50,8 @@ module Zena
|
|
|
50
50
|
User.send(:with_scope, :find => {:conditions => ['site_id = ?', site.id]}) do
|
|
51
51
|
if user = token_visitor || registered_visitor || anonymous_visitor(site)
|
|
52
52
|
user.asset_host = @asset_host
|
|
53
|
-
|
|
53
|
+
# Make sure we load alias site in visitor
|
|
54
|
+
setup_visitor(user, site)
|
|
54
55
|
end
|
|
55
56
|
end
|
|
56
57
|
end
|
data/lib/zena/use/display.rb
CHANGED
|
@@ -236,6 +236,7 @@ module Zena
|
|
|
236
236
|
safe_method [:sprintf, String, Number] => {:class => String, :method => 'sprintf'}
|
|
237
237
|
safe_method [:search_box, {:ajax => String, :type => String}] => {:class => String, :method => 'search_box', :html_safe => true}
|
|
238
238
|
safe_context [:admin_links, {:list => String}] => [String]
|
|
239
|
+
safe_method :uuid => String
|
|
239
240
|
|
|
240
241
|
# Return sprintf formated entry. Return '' for values eq to zero.
|
|
241
242
|
def sprintf_unless_zero(fmt, value)
|
|
@@ -246,6 +247,11 @@ module Zena
|
|
|
246
247
|
def search_box(opts={})
|
|
247
248
|
render_to_string(:partial=>'search/form', :locals => {:ajax => opts[:ajax], :type => opts[:type]})
|
|
248
249
|
end
|
|
250
|
+
|
|
251
|
+
# Return a random string that can be used as id (starts with a character)
|
|
252
|
+
def uuid
|
|
253
|
+
'u' + UUIDTools::UUID.random_create.to_s.gsub('-','')[0..8]
|
|
254
|
+
end
|
|
249
255
|
|
|
250
256
|
# Return the 'zip' of the node corresponding to the browser url (start node). This value is kept
|
|
251
257
|
# accross all Ajax calls.
|
data/lib/zena/use/query_node.rb
CHANGED
|
@@ -105,7 +105,7 @@ module Zena
|
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
|
|
108
|
-
class Compiler < QueryBuilder::Processor
|
|
108
|
+
class Compiler < ::QueryBuilder::Processor
|
|
109
109
|
attr_reader :context # ?
|
|
110
110
|
set_main_table 'nodes'
|
|
111
111
|
set_main_class 'Node'
|
|
@@ -328,7 +328,7 @@ module Zena
|
|
|
328
328
|
if klass = Node.get_class(right[1])
|
|
329
329
|
"#{field_or_attr('kpath')} #{is_not ? 'NOT ' : ''}LIKE #{quote(klass.kpath + '%')}"
|
|
330
330
|
else
|
|
331
|
-
raise QueryBuilder::QueryException.new("Unknown class #{right.last.inspect}.")
|
|
331
|
+
raise ::QueryBuilder::QueryException.new("Unknown class #{right.last.inspect}.")
|
|
332
332
|
end
|
|
333
333
|
else
|
|
334
334
|
process_op(:like, left, right)
|
|
@@ -577,7 +577,7 @@ module Zena
|
|
|
577
577
|
set_main_class(klass)
|
|
578
578
|
kpath_filter = ".kpath LIKE #{quote("#{klass.kpath}%")}" unless klass.kpath == 'N'
|
|
579
579
|
else
|
|
580
|
-
raise QueryBuilder::QueryException.new("Unknown class #{klass} in scope '#{class_name}:#{scope}'.")
|
|
580
|
+
raise ::QueryBuilder::QueryException.new("Unknown class #{klass} in scope '#{class_name}:#{scope}'.")
|
|
581
581
|
end
|
|
582
582
|
else
|
|
583
583
|
klass = nil
|
data/lib/zena/use/rendering.rb
CHANGED
|
@@ -171,21 +171,28 @@ module Zena
|
|
|
171
171
|
render :inline => result[:data]
|
|
172
172
|
|
|
173
173
|
else
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
174
|
+
|
|
175
|
+
if disposition = zafu_headers.delete('Content-Disposition')
|
|
176
|
+
result.delete(:filename) if disposition =~ /filename\s*=/
|
|
177
|
+
result[:disposition] = disposition
|
|
178
|
+
end
|
|
179
179
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
if type = zafu_headers.delete('Content-Type')
|
|
181
|
+
result[:type] = type
|
|
182
|
+
end
|
|
183
183
|
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
if filename = zafu_headers.delete('filename')
|
|
185
|
+
result[:filename] = filename
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
if status = zafu_headers.delete('Status')
|
|
189
|
+
if (status.to_i / 100) == 3
|
|
190
|
+
redirect_to zafu_headers.delete('Location'), :status => status.to_i
|
|
191
|
+
else
|
|
192
|
+
render :status => status.to_i
|
|
186
193
|
end
|
|
187
|
-
|
|
188
194
|
headers.merge!(zafu_headers)
|
|
195
|
+
return
|
|
189
196
|
end
|
|
190
197
|
|
|
191
198
|
if data = result.delete(:data)
|
|
@@ -195,7 +202,9 @@ module Zena
|
|
|
195
202
|
else
|
|
196
203
|
# Should never happen
|
|
197
204
|
raise Exception.new("Render '#{params[:format]}' should return either :file or :data (none found).")
|
|
198
|
-
end
|
|
205
|
+
end
|
|
206
|
+
headers.merge!(zafu_headers)
|
|
207
|
+
|
|
199
208
|
end
|
|
200
209
|
|
|
201
210
|
cache_page(:content_data => result[:data], :content_path => result[:file]) if opts[:cache]
|
|
@@ -205,7 +214,26 @@ module Zena
|
|
|
205
214
|
render_to_string :file => template_url(opts), :layout => false
|
|
206
215
|
else
|
|
207
216
|
render :file => template_url(opts), :layout => false, :status => opts[:status]
|
|
217
|
+
|
|
218
|
+
if status = zafu_headers.delete('Status')
|
|
219
|
+
# reset rendering
|
|
220
|
+
response.content_type = nil
|
|
221
|
+
erase_render_results
|
|
222
|
+
reset_variables_added_to_assigns
|
|
223
|
+
|
|
224
|
+
if (status.to_i / 100) == 3
|
|
225
|
+
redirect_to zafu_headers.delete('Location'), :status => status.to_i
|
|
226
|
+
else
|
|
227
|
+
render :status => status.to_i
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
headers.merge!(zafu_headers)
|
|
231
|
+
|
|
232
|
+
return
|
|
233
|
+
end
|
|
234
|
+
|
|
208
235
|
headers.merge!(zafu_headers)
|
|
236
|
+
|
|
209
237
|
cache_page(:url => opts[:cache_url]) if opts[:cache]
|
|
210
238
|
end
|
|
211
239
|
end
|
|
@@ -239,7 +267,13 @@ module Zena
|
|
|
239
267
|
:content_data => response.body,
|
|
240
268
|
:node_id => @node[:id]
|
|
241
269
|
}.merge(opts)
|
|
242
|
-
secure!(CachedPage) { CachedPage.create(opts) }
|
|
270
|
+
if secure!(CachedPage) { CachedPage.create(opts) }
|
|
271
|
+
true
|
|
272
|
+
else
|
|
273
|
+
false
|
|
274
|
+
end
|
|
275
|
+
else
|
|
276
|
+
false
|
|
243
277
|
end
|
|
244
278
|
end
|
|
245
279
|
|
data/lib/zena/use/test_helper.rb
CHANGED
data/lib/zena/use/urls.rb
CHANGED
|
@@ -93,7 +93,7 @@ module Zena
|
|
|
93
93
|
if ep.delete('mode')
|
|
94
94
|
mode ||= params[:mode]
|
|
95
95
|
end
|
|
96
|
-
opts[
|
|
96
|
+
opts[:encode_params] = ep
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
if host = opts.delete(:host)
|
|
@@ -155,6 +155,7 @@ module Zena
|
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
def append_query_params(path, opts)
|
|
158
|
+
|
|
158
159
|
if opts == {}
|
|
159
160
|
path
|
|
160
161
|
else
|
|
@@ -162,7 +163,9 @@ module Zena
|
|
|
162
163
|
list = opts.keys.map do |k|
|
|
163
164
|
# FIXME: DOC
|
|
164
165
|
if k.to_s == 'encode_params'
|
|
165
|
-
opts[k]
|
|
166
|
+
list = opts[k]
|
|
167
|
+
list = list.split(',').map(&:strip) unless list.kind_of?(Array)
|
|
168
|
+
list.map do |key|
|
|
166
169
|
value = params[key]
|
|
167
170
|
if value.kind_of?(Hash)
|
|
168
171
|
{key => value}.to_query
|
|
@@ -277,7 +280,7 @@ module Zena
|
|
|
277
280
|
def host_with_port
|
|
278
281
|
@host_with_port ||= begin
|
|
279
282
|
port = request.port
|
|
280
|
-
if port.blank? || port.to_s == '80'
|
|
283
|
+
if port.blank? || port.to_s == '80' || port.to_s == '443'
|
|
281
284
|
current_site.host
|
|
282
285
|
else
|
|
283
286
|
"#{current_site.host}:#{port}"
|
|
@@ -502,107 +505,6 @@ module Zena
|
|
|
502
505
|
# We wrap without callbacks (before_wrap, after_wrap) so that the link
|
|
503
506
|
# is used as raw text in these callbacks.
|
|
504
507
|
markup.wrap(text)
|
|
505
|
-
=begin
|
|
506
|
-
query_params = options[:query_params] || {}
|
|
507
|
-
default_text = options[:default_text]
|
|
508
|
-
params = {}
|
|
509
|
-
(options[:params] || @params).each do |k,v|
|
|
510
|
-
next if v.nil?
|
|
511
|
-
params[k] = v
|
|
512
|
-
end
|
|
513
|
-
|
|
514
|
-
opts = {}
|
|
515
|
-
|
|
516
|
-
if href = params.delete(:href)
|
|
517
|
-
if lnode = get_context_var('set_var', value) && stored.klass <= Node
|
|
518
|
-
# using stored node
|
|
519
|
-
else
|
|
520
|
-
lnode, klass = build_finder(:first, href, {})
|
|
521
|
-
return unless lnode
|
|
522
|
-
return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node)
|
|
523
|
-
end
|
|
524
|
-
else
|
|
525
|
-
# obj
|
|
526
|
-
if node_class == Version
|
|
527
|
-
lnode = "#{node}.node"
|
|
528
|
-
opts[:lang] = "#{node}.lang"
|
|
529
|
-
elsif node.will_be?(Node)
|
|
530
|
-
lnode = node
|
|
531
|
-
else
|
|
532
|
-
lnode = @context[:previous_node]
|
|
533
|
-
end
|
|
534
|
-
end
|
|
535
|
-
|
|
536
|
-
if fmt = params.delete(:format)
|
|
537
|
-
if fmt == 'data'
|
|
538
|
-
opts[:format] = "#{node}.ext"
|
|
539
|
-
else
|
|
540
|
-
opts[:format] = fmt.inspect
|
|
541
|
-
end
|
|
542
|
-
end
|
|
543
|
-
|
|
544
|
-
if mode = params.delete(:mode)
|
|
545
|
-
opts[:mode] = mode.inspect
|
|
546
|
-
end
|
|
547
|
-
|
|
548
|
-
if anchor = params.delete(:anchor)
|
|
549
|
-
opts[:anchor] = anchor.inspect
|
|
550
|
-
end
|
|
551
|
-
|
|
552
|
-
if anchor_in = params.delete(:in)
|
|
553
|
-
finder, klass = build_finder(:first, anchor_in, {})
|
|
554
|
-
return unless finder
|
|
555
|
-
return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node)
|
|
556
|
-
opts[:anchor_in] = finder
|
|
557
|
-
end
|
|
558
|
-
|
|
559
|
-
if @html_tag && @html_tag != 'a'
|
|
560
|
-
# FIXME: can we remove this ?
|
|
561
|
-
# html attributes do not belong to anchor
|
|
562
|
-
pre_space = ''
|
|
563
|
-
html_params = {}
|
|
564
|
-
else
|
|
565
|
-
html_params = get_html_params(params.merge(@html_tag_params), :link)
|
|
566
|
-
pre_space = @space_before || ''
|
|
567
|
-
@html_tag_done = true
|
|
568
|
-
end
|
|
569
|
-
|
|
570
|
-
(params.keys - [:style, :class, :id, :rel, :name, :anchor, :attr, :tattr, :trans, :text]).each do |k|
|
|
571
|
-
next if k.to_s =~ /if_|set_|\A_/
|
|
572
|
-
query_params[k] = params[k]
|
|
573
|
-
end
|
|
574
|
-
|
|
575
|
-
# TODO: merge these two query_params cleanup things into something cleaner.
|
|
576
|
-
else
|
|
577
|
-
# direct link
|
|
578
|
-
query_params.each do |k,v|
|
|
579
|
-
if k == :date
|
|
580
|
-
if v == 'current_date'
|
|
581
|
-
query_params[k] = current_date
|
|
582
|
-
elsif v =~ /\A\d/
|
|
583
|
-
query_params[k] = v.inspect
|
|
584
|
-
elsif v =~ /\[/
|
|
585
|
-
attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false)
|
|
586
|
-
query_params[k] = "\"#{attribute}\""
|
|
587
|
-
else
|
|
588
|
-
query_params[k] = node_attribute(v)
|
|
589
|
-
end
|
|
590
|
-
else
|
|
591
|
-
attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false)
|
|
592
|
-
query_params[k] = "\"#{attribute}\""
|
|
593
|
-
end
|
|
594
|
-
end
|
|
595
|
-
|
|
596
|
-
query_params.merge!(opts)
|
|
597
|
-
|
|
598
|
-
opts_str = ''
|
|
599
|
-
query_params.keys.sort {|a,b| a.to_s <=> b.to_s }.each do |k|
|
|
600
|
-
opts_str << ",:#{k.to_s.gsub(/[^a-z_A-Z_]/,'')}=>#{query_params[k]}"
|
|
601
|
-
end
|
|
602
|
-
|
|
603
|
-
pre_space + "<a#{params_to_html(html_params)} href='<%= zen_path(#{lnode}#{opts_str}) %>'>#{text_for_link(default_text)}</a>"
|
|
604
|
-
end
|
|
605
|
-
=end
|
|
606
508
|
end
|
|
607
509
|
|
|
608
510
|
|
|
@@ -117,7 +117,9 @@ module Zena
|
|
|
117
117
|
def self.first_proc
|
|
118
118
|
@@first_proc ||= Proc.new do |receiver, method|
|
|
119
119
|
if elem = receiver.opts[:elem] || receiver.klass.first
|
|
120
|
-
|
|
120
|
+
# All query contexts are only opened if they are not empty.
|
|
121
|
+
could_be_nil = !receiver.opts[:query]
|
|
122
|
+
RubyLess::TypedString.new("#{receiver.raw}.first", :class => elem, :nil => could_be_nil, :query => receiver.opts[:query])
|
|
121
123
|
else
|
|
122
124
|
# should never happen
|
|
123
125
|
raise RubyLess::NoMethodError.new(receiver.raw, receiver.klass, ['first'])
|
|
@@ -157,7 +159,8 @@ module Zena
|
|
|
157
159
|
|
|
158
160
|
safe_method :now => {:method => 'Time.now', :class => Time}
|
|
159
161
|
safe_method :string_hash => {:method => 'StringHash.new', :class => StringHash}
|
|
160
|
-
safe_method [:string_hash, Hash]
|
|
162
|
+
safe_method [:string_hash, Hash] => {:method => 'StringHash.from_hash', :class => StringHash}
|
|
163
|
+
safe_method [:string_hash, String] => {:method => 'StringHash.from_string', :class => StringHash}
|
|
161
164
|
safe_method [:h, String] => {:class => String, :accept_nil => true}
|
|
162
165
|
safe_method_for String, [:gsub, Regexp, String] => {:class => String, :pre_processor => true}
|
|
163
166
|
safe_method_for String, :upcase => {:class => String, :pre_processor => true}
|
|
@@ -166,8 +169,10 @@ module Zena
|
|
|
166
169
|
safe_method_for String, :url_name => {:class => String, :pre_processor => true, :method => :url_name}
|
|
167
170
|
safe_method_for String, :to_i => {:class => Number, :pre_processor => true}
|
|
168
171
|
safe_method_for String, :to_s => {:class => String, :pre_processor => true}
|
|
169
|
-
safe_method_for String,
|
|
170
|
-
safe_method_for String, [:limit, Number
|
|
172
|
+
safe_method_for String, :size => {:class => Number, :pre_processor => true}
|
|
173
|
+
safe_method_for String, [:limit, Number] => {:class => String, :pre_processor => true}
|
|
174
|
+
safe_method_for String, [:limit, Number, String] => {:class => Number, :pre_processor => true}
|
|
175
|
+
|
|
171
176
|
safe_method_for String, :to_f => {:class => Number, :pre_processor => true}
|
|
172
177
|
safe_method_for String, :to_json => {:class => String, :pre_processor => true}
|
|
173
178
|
safe_method_for String, [:split, String] => {:class => [String], :pre_processor => true}
|
|
@@ -261,6 +261,7 @@ module Zena
|
|
|
261
261
|
return default_template_url(opts) unless zafu_url
|
|
262
262
|
|
|
263
263
|
rel_path = current_site.zafu_path + "/#{zafu_url}/#{lang_path}/_main.erb"
|
|
264
|
+
|
|
264
265
|
path = SITES_ROOT + rel_path
|
|
265
266
|
if !File.exists?(path) || params[:rebuild]
|
|
266
267
|
if @node && klass = VirtualClass.find_by_kpath(template.tkpath)
|
data/locale/app.pot
CHANGED
|
Binary file
|
data/locale/de/zena.po
CHANGED
|
@@ -1612,11 +1612,15 @@ msgstr "%H:%M"
|
|
|
1612
1612
|
#: app/views/sites/_form.erb:22 lib/gettext_strings.rb:38
|
|
1613
1613
|
#, fuzzy
|
|
1614
1614
|
msgid "site group"
|
|
1615
|
-
msgstr "<img src='/images/group.png' title='group'/>"
|
|
1615
|
+
msgstr "<img src='/images/group.png' alt='group' title='group'/>"
|
|
1616
1616
|
|
|
1617
1617
|
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1618
1618
|
msgid "site_img"
|
|
1619
|
-
msgstr "<img src='/images/world.png' title='site'/>"
|
|
1619
|
+
msgstr "<img src='/images/world.png' alt='site' title='site'/>"
|
|
1620
|
+
|
|
1621
|
+
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1622
|
+
msgid "alias_img"
|
|
1623
|
+
msgstr "<img src='/images/world_link.png' alt='alias' title='alias'/>"
|
|
1620
1624
|
|
|
1621
1625
|
#: app/views/sites/index.erb:1 lib/zena/use/display.rb:279
|
|
1622
1626
|
msgid "sites"
|
|
Binary file
|
data/locale/en/zena.po
CHANGED
|
@@ -480,7 +480,7 @@ msgstr "Acl with highest priority is tested first."
|
|
|
480
480
|
#: app/views/acls/_form.rhtml:47
|
|
481
481
|
msgid "acl_query_help"
|
|
482
482
|
msgstr ""
|
|
483
|
-
"SQLiss query to fetch all the nodes for which this acl authorizes access."
|
|
483
|
+
"SQLiss query to fetch all the nodes for which this acl authorizes access (Ruby)."
|
|
484
484
|
|
|
485
485
|
#: lib/zena/use/display.rb:282
|
|
486
486
|
msgid "acls"
|
|
@@ -1595,7 +1595,11 @@ msgstr "<img src='/images/group.png' alt='group'/>"
|
|
|
1595
1595
|
|
|
1596
1596
|
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1597
1597
|
msgid "site_img"
|
|
1598
|
-
msgstr "<img src='/images/world.png' alt='site'/>"
|
|
1598
|
+
msgstr "<img src='/images/world.png' alt='site' title='site'/>"
|
|
1599
|
+
|
|
1600
|
+
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1601
|
+
msgid "alias_img"
|
|
1602
|
+
msgstr "<img src='/images/world_link.png' alt='alias' title='alias'/>"
|
|
1599
1603
|
|
|
1600
1604
|
#: app/views/sites/index.erb:1 lib/zena/use/display.rb:279
|
|
1601
1605
|
msgid "sites"
|
|
Binary file
|
data/locale/fr/zena.po
CHANGED
|
@@ -1545,7 +1545,11 @@ msgstr "groupe de site"
|
|
|
1545
1545
|
|
|
1546
1546
|
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1547
1547
|
msgid "site_img"
|
|
1548
|
-
msgstr "<img src='/images/world.png' alt='site'/>"
|
|
1548
|
+
msgstr "<img src='/images/world.png' alt='site' title='site'/>"
|
|
1549
|
+
|
|
1550
|
+
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1551
|
+
msgid "alias_img"
|
|
1552
|
+
msgstr "<img src='/images/world_link.png' alt='alias' title='alias'/>"
|
|
1549
1553
|
|
|
1550
1554
|
#: app/views/sites/index.erb:1 lib/zena/use/display.rb:279
|
|
1551
1555
|
msgid "sites"
|
|
Binary file
|
data/locale/it/zena.po
CHANGED
|
@@ -480,7 +480,7 @@ msgstr "Acl with highest priority is tested first."
|
|
|
480
480
|
|
|
481
481
|
#: app/views/acls/_form.rhtml:47
|
|
482
482
|
msgid "acl_query_help"
|
|
483
|
-
msgstr "SQLiss query to fetch all the nodes for which this acl authorizes access."
|
|
483
|
+
msgstr "SQLiss query to fetch all the nodes for which this acl authorizes access (Ruby)."
|
|
484
484
|
|
|
485
485
|
#: lib/zena/use/display.rb:282
|
|
486
486
|
msgid "acls"
|
|
@@ -1658,7 +1658,11 @@ msgstr "<img src='/images/group.png' alt='group'/>"
|
|
|
1658
1658
|
#: app/views/sites/_li.erb:2
|
|
1659
1659
|
#: lib/gettext_strings.rb:34
|
|
1660
1660
|
msgid "site_img"
|
|
1661
|
-
msgstr "<img src='/images/world.png' alt='site'/>"
|
|
1661
|
+
msgstr "<img src='/images/world.png' alt='site' title='site'/>"
|
|
1662
|
+
|
|
1663
|
+
#: app/views/sites/_li.erb:2 lib/gettext_strings.rb:34
|
|
1664
|
+
msgid "alias_img"
|
|
1665
|
+
msgstr "<img src='/images/world_link.png' alt='alias' title='alias'/>"
|
|
1662
1666
|
|
|
1663
1667
|
#: app/views/sites/index.erb:1
|
|
1664
1668
|
#: lib/zena/use/display.rb:279
|