imagine_cms 4.1.4 → 4.2.0

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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +2 -1
  3. data/app/assets/images/interface/form_loading.gif +0 -0
  4. data/app/assets/images/management/btn-top-delete.png +0 -0
  5. data/app/assets/images/management/btn-top-edit.png +0 -0
  6. data/app/assets/images/management/btn-top-exterminate.png +0 -0
  7. data/app/assets/images/management/btn-top-new.png +0 -0
  8. data/app/assets/images/management/btn-top-preview.png +0 -0
  9. data/app/assets/images/management/btn-top-properties.png +0 -0
  10. data/app/assets/javascripts/codemirror/modes-custom/imagine_cms.js +87 -0
  11. data/app/assets/javascripts/imagine_cms/core.js +510 -0
  12. data/app/assets/javascripts/imagine_cms/legacy/misc.js +537 -0
  13. data/app/assets/javascripts/imagine_cms/legacy/rollovers.js +193 -0
  14. data/app/assets/javascripts/imagine_cms/legacy/slideshow.js +116 -0
  15. data/app/assets/javascripts/imagine_cms/legacy/textfieldhints.js +55 -0
  16. data/app/assets/javascripts/imagine_cms.js +14 -1
  17. data/app/assets/javascripts/imagine_cms_compat.js +26 -0
  18. data/app/assets/javascripts/jquery-ui.js +16608 -0
  19. data/app/assets/javascripts/tag-it.js +591 -0
  20. data/app/assets/stylesheets/imagine_cms.css.scss +26 -10
  21. data/app/assets/stylesheets/imagine_controls.css.scss +8 -0
  22. data/app/assets/stylesheets/jquery-ui.css +1225 -0
  23. data/app/assets/stylesheets/jquery-ui.structure.css +833 -0
  24. data/app/assets/stylesheets/jquery-ui.theme.css +410 -0
  25. data/app/assets/stylesheets/jquery.tagit.css +69 -0
  26. data/app/assets/stylesheets/management.css.scss +7 -0
  27. data/app/assets/stylesheets/tagit.ui-imagine.css +100 -0
  28. data/app/controllers/cms/content_controller.rb +28 -45
  29. data/app/controllers/management/cms_controller.rb +116 -94
  30. data/app/helpers/cms_application_helper.rb +76 -39
  31. data/app/models/cms_page.rb +32 -14
  32. data/app/models/cms_page_object.rb +1 -1
  33. data/app/models/cms_page_tag.rb +2 -2
  34. data/app/models/cms_template.rb +1 -1
  35. data/app/models/user.rb +6 -6
  36. data/app/models/user_group.rb +1 -1
  37. data/app/views/cms/content/_photo_gallery.html.erb +12 -12
  38. data/app/views/cms/content/_search.html.erb +2 -2
  39. data/app/views/cms/content/_search_result.html.erb +16 -10
  40. data/app/views/layouts/management.html.erb +18 -17
  41. data/app/views/management/cms/_edit_page.html.erb +47 -33
  42. data/app/views/management/cms/_gallery_index.html.erb +4 -4
  43. data/app/views/management/cms/_image.html.erb +3 -3
  44. data/app/views/management/cms/_image_details.html.erb +9 -8
  45. data/app/views/management/cms/_list_page.html.erb +2 -2
  46. data/app/views/management/cms/_list_page_select.html.erb +1 -1
  47. data/app/views/management/cms/_page_list.html.erb +69 -48
  48. data/app/views/management/cms/_page_list_source_folder.html.erb +2 -2
  49. data/app/views/management/cms/_template_options.html.erb +4 -4
  50. data/app/views/management/cms/_template_reference.html.erb +13 -15
  51. data/app/views/management/cms/edit_page_content.html.erb +3 -3
  52. data/app/views/management/cms/edit_snippet.html.erb +19 -41
  53. data/app/views/management/cms/edit_template.html.erb +15 -38
  54. data/app/views/management/cms/pages.html.erb +17 -29
  55. data/app/views/management/cms/snippets.html.erb +2 -2
  56. data/app/views/management/cms/templates.html.erb +2 -2
  57. data/app/views/management/cms/toolbar_edit.html.erb +2 -0
  58. data/app/views/management/cms/toolbar_preview.html.erb +2 -2
  59. data/config/initializers/config_file.rb +1 -1
  60. data/imagine_cms.gemspec +7 -4
  61. data/lib/extensions/action_controller_extensions.rb +50 -19
  62. data/lib/imagine_cms/engine.rb +12 -8
  63. data/lib/imagine_cms/version.rb +1 -1
  64. data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +2 -2
  65. data/lib/tasks/imagine_cms_tasks.rake +8 -0
  66. metadata +69 -91
  67. data/app/assets/images/management/btn_archive.gif +0 -0
  68. data/app/assets/images/management/btn_delete.gif +0 -0
  69. data/app/assets/images/management/btn_duplicate.gif +0 -0
  70. data/app/assets/images/management/btn_edit.gif +0 -0
  71. data/app/assets/images/management/btn_new_page.gif +0 -0
  72. data/app/assets/images/management/btn_preview.gif +0 -0
  73. data/app/assets/images/management/btn_properties.gif +0 -0
  74. data/app/assets/images/management/btn_restore.gif +0 -0
  75. data/app/assets/images/management/btn_top_delete.gif +0 -0
  76. data/app/assets/images/management/btn_top_duplicate.gif +0 -0
  77. data/app/assets/images/management/btn_top_edit.gif +0 -0
  78. data/app/assets/images/management/btn_top_new.gif +0 -0
  79. data/app/assets/images/management/btn_top_preview.gif +0 -0
  80. data/app/assets/images/management/btn_top_properties.gif +0 -0
  81. data/app/assets/javascripts/codepress/codepress.html +0 -36
  82. data/app/assets/javascripts/codepress/codepress.js +0 -130
  83. data/app/assets/javascripts/codepress/engines/gecko.js +0 -240
  84. data/app/assets/javascripts/codepress/engines/khtml.js +0 -0
  85. data/app/assets/javascripts/codepress/engines/msie.js +0 -263
  86. data/app/assets/javascripts/codepress/engines/older.js +0 -0
  87. data/app/assets/javascripts/codepress/engines/opera.js +0 -259
  88. data/app/assets/javascripts/codepress/languages/css.js +0 -23
  89. data/app/assets/javascripts/codepress/languages/generic.js +0 -25
  90. data/app/assets/javascripts/codepress/languages/html.js +0 -63
  91. data/app/assets/javascripts/codepress/languages/java.js +0 -24
  92. data/app/assets/javascripts/codepress/languages/javascript.js +0 -30
  93. data/app/assets/javascripts/codepress/languages/perl.js +0 -27
  94. data/app/assets/javascripts/codepress/languages/php.js +0 -60
  95. data/app/assets/javascripts/codepress/languages/ruby.js +0 -26
  96. data/app/assets/javascripts/codepress/languages/sql.js +0 -30
  97. data/app/assets/javascripts/codepress/languages/text.js +0 -9
  98. data/app/assets/javascripts/imagine.js +0 -1393
  99. data/app/assets/stylesheets/codepress/codepress.css +0 -7
  100. data/app/assets/stylesheets/codepress/languages/css.css +0 -10
  101. data/app/assets/stylesheets/codepress/languages/generic.css +0 -9
  102. data/app/assets/stylesheets/codepress/languages/html.css +0 -18
  103. data/app/assets/stylesheets/codepress/languages/java.css +0 -7
  104. data/app/assets/stylesheets/codepress/languages/javascript.css +0 -8
  105. data/app/assets/stylesheets/codepress/languages/perl.css +0 -11
  106. data/app/assets/stylesheets/codepress/languages/php.css +0 -12
  107. data/app/assets/stylesheets/codepress/languages/ruby.css +0 -10
  108. data/app/assets/stylesheets/codepress/languages/sql.css +0 -10
  109. data/app/assets/stylesheets/codepress/languages/text.css +0 -5
@@ -43,7 +43,7 @@ module Cms # :nodoc:
43
43
  end
44
44
 
45
45
  if template_found
46
- render :template => @content_path
46
+ render template: @content_path
47
47
  elsif show_from_db
48
48
  return
49
49
  else
@@ -62,8 +62,10 @@ module Cms # :nodoc:
62
62
 
63
63
  def rendering_error(exception = nil)
64
64
  logger.error "500 from #{request.referer} (exception: #{exception})"
65
+ logger.error exception.annoted_source_code if exception.class.name == 'ActionView::Template::Error'
66
+
65
67
  @exception = exception.message
66
- render :template => 'imagine_cms/errors/500', :status => 500
68
+ render template: 'imagine_cms/errors/500', status: 500, formats: [ :html ]
67
69
  end
68
70
 
69
71
  def show_from_db
@@ -136,9 +138,9 @@ module Cms # :nodoc:
136
138
  params[:offset] = db_path.pop
137
139
  db_path.pop
138
140
 
139
- # don't cache to disk, but do allow browsers and proxies to cache briefly
141
+ # don't cache to disk on server, but do allow browsers and proxies to cache briefly
140
142
  @allow_caching = false
141
- expires_in 5.minutes, :public => true
143
+ expires_in 1.minutes, public: true if Rails.env.production?
142
144
  end
143
145
  end
144
146
 
@@ -189,8 +191,7 @@ module Cms # :nodoc:
189
191
  if @page_list_segment
190
192
  name = params[:page_list_name]
191
193
  key = "obj-page_list-#{name.gsub(/[^\w]/, '_')}"
192
- pages = page_list_items(@pg, key).compact.uniq
193
- render :inline => render_page_list_segment(name, pages) and return true
194
+ render :inline => render_page_list_segment(name, @page_list_pages[key]) and return true
194
195
  end
195
196
  # end of page list segment code
196
197
 
@@ -219,41 +220,35 @@ module Cms # :nodoc:
219
220
  helper_method :disable_caching
220
221
 
221
222
  def search
222
- @terms = []
223
223
  @pages = []
224
+ @terms = []
225
+ @terms = params[:q].split(/[^\w\-]+/).reject { |t| t.length < 3 } if params[:q]
224
226
 
225
- if params[:q]
226
- @terms = params[:q].split(/[^\w\-]+/).reject { |t| t.length < 3 }
227
- end
228
-
229
- CmsPage.index_all
230
227
  unless @terms.empty?
231
- term_variants = []
232
- @terms.each do |term|
233
- term_variants << [ term, term.singularize, term.pluralize ].uniq.map { |v| v.gsub(/[\[\]\|\:\>\(\)\?]/, '').gsub(/\+/, '\+') }.join('|')
234
- end
228
+ CmsPage.index_all
235
229
 
236
- conds = [ 'published_version >= 0' ]
237
- vars = []
238
- term_variants.each do |term_variant|
239
- conds << "(title regexp ?)"
240
- vars << "[[:<:]](#{term_variant})[[:>:]]"
230
+ base_query = CmsPage.includes(:tags).references(:cms_page_tags).where('published_version >= 0').limit(100)
231
+
232
+ query = base_query.dup
233
+ @terms.each do |term|
234
+ term_variants = [ term, term.singularize, term.pluralize ].uniq.map { |v| v.gsub(/[\[\]\|\:\>\(\)\?]/, '').gsub(/\+/, '\+') }.join('|')
235
+ query = query.where("(title regexp ?)", "[[:<:]](#{term_variants})[[:>:]]")
241
236
  end
242
- @pages.concat CmsPage.where([ conds.join(' and ') ].concat(vars))
237
+ @pages.concat query.all
243
238
 
244
- conds = [ 'published_version >= 0' ]
245
- vars = []
246
- term_variants.each do |term_variant|
247
- conds << "(title regexp ? or search_index regexp ?)"
248
- vars << "[[:<:]](#{term_variant})[[:>:]]" << "[[:<:]](#{term_variant})[[:>:]]"
239
+ query = base_query.dup.where('search_index is not null')
240
+ @terms.each do |term|
241
+ term_variants = [ term, term.singularize, term.pluralize ].uniq.map { |v| v.gsub(/[\[\]\|\:\>\(\)\?]/, '').gsub(/\+/, '\+') }.join('|')
242
+ query = query.where("cms_page_tags.name regexp :regex or search_index regexp :regex",
243
+ regex: "[[:<:]](#{term_variants})[[:>:]]")
249
244
  end
250
- @pages.concat CmsPage.where([ conds.join(' and ') ].concat(vars))
245
+ query.each { |pg| @pages << pg unless @pages.include?(pg) }
251
246
 
252
247
  # fulltext doesn't work with innodb... may need to make a separate myisam
253
248
  # table just for search. (this would be better because it would sort by relevance)
254
249
  # @pages.concat CmsPage.where('match (title, search_index) against (?)', params[:q])
255
250
  end
256
- @pages = @pages.uniq.reject { |pg| pg.search_index.blank? }.first(100)
251
+ @pages = @pages.first(100)
257
252
 
258
253
  @pg = CmsPage.new
259
254
  @pg.template = CmsTemplate.find_by_name('Search') || CmsTemplate.new
@@ -278,24 +273,12 @@ module Cms # :nodoc:
278
273
  render :nothing => true and return unless @pg && params[:page_list_name]
279
274
  key = "obj-page_list-#{params[:page_list_name].gsub(/[^\w]/, '_')}"
280
275
 
281
- load_page_objects or return true
282
-
283
- options ||= {}
284
- today = Time.mktime(Time.now.year, Time.now.month, Time.now.day)
285
- case @page_objects["#{key}-date-range"]
286
- when 'all'
287
- when 'past'
288
- options[:end_date] = today
289
- when 'future'
290
- options[:start_date] = today
291
- when 'custom'
292
- options[:start_date] = @page_objects["#{key}-date-range-custom-start"]
293
- options[:end_date] = @page_objects["#{key}-date-range-custom-end"]
294
- end
276
+ load_page_objects or return false
295
277
 
296
- str = render_cms_page_to_string(@pg)
278
+ # populate @page_list_pages
279
+ render_cms_page_to_string(@pg)
297
280
 
298
- @pages = page_list_items(@pg, key, options).first(20)
281
+ @pages = @page_list_pages[key].first(20) rescue [] # why only first 20?
299
282
  @page_contents = {}
300
283
 
301
284
  unless @pages.empty?
@@ -5,7 +5,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
5
5
  before_filter :check_permissions
6
6
  before_filter :block_basic_users, :except => [
7
7
  :index, :edit_page_content,
8
- :include_codepress, :disable_caching, :garbage_collect,
8
+ :disable_caching, :garbage_collect,
9
9
  :select_page, :list_pages_select, :request_review,
10
10
  :toolbar_preview, :toolbar_edit,
11
11
 
@@ -86,16 +86,16 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
86
86
  if request.post?
87
87
  @temp.assign_attributes(cms_template_params)
88
88
 
89
- begin
89
+ # begin
90
90
  @pg = CmsPage.new
91
91
  @page_objects = HashObject.new
92
92
  render_to_string :inline => @temp.content
93
- rescue Exception => e
94
- message = e.message
95
- flash.now[:error] = "<pre>#{ERB::Util.html_escape(message)}</pre>".html_safe
96
- logger.debug e
97
- return
98
- end
93
+ # rescue Exception => e
94
+ # message = e.message
95
+ # flash.now[:error] = "<pre>#{ERB::Util.html_escape(message)}</pre>".html_safe
96
+ # logger.debug e
97
+ # return
98
+ # end
99
99
 
100
100
  # this must come after the render_to_string so that we capture template
101
101
  # options embedded in snippets
@@ -176,7 +176,8 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
176
176
  @pg.template ||= @parent.template
177
177
  end
178
178
 
179
- @attrs = CmsPageObject.where(:obj_type => 'attribute').uniq.pluck(:name).sort
179
+ @attrs = CmsPageObject.where(obj_type: 'attribute').uniq.pluck(:name).sort
180
+ @taglist = CmsPageTag.uniq.pluck(:name).sort
180
181
 
181
182
  if params[:mode] == 'ajax_new' || params[:mode] == 'ajax_edit'
182
183
  @pg.published_version = -1 if params[:mode] == 'ajax_new'
@@ -212,51 +213,45 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
212
213
 
213
214
  if @pg.send(@pg.new_record? ? :save : :save_without_revision)
214
215
  # now try to save tags
215
- # begin
216
- existing_tags = @pg.tags.map(&:name)
217
- tags_to_delete = @pg.tags.to_a
218
- params[:tags].split(',').map(&:strip).reject(&:blank?).each do |t|
219
- if existing_tags.include?(t)
220
- # still in use, don't delete
221
- tags_to_delete = tags_to_delete.reject { |tag| tag.name == t }
222
- else
223
- # doesn't exist, create
224
- @pg.tags.create(:name => t)
225
- end
216
+ existing_tags = @pg.tags.map(&:name)
217
+ tags_to_delete = [] ; @pg.tags.each { |t| tags_to_delete << t }
218
+ params[:tags].split(',').map(&:strip).reject(&:blank?).each do |t|
219
+ if existing_tags.include?(t)
220
+ # still in use, don't delete
221
+ tags_to_delete = tags_to_delete.reject { |tag| tag.name == t }
222
+ else
223
+ # doesn't exist, create
224
+ @pg.tags.create(name: t)
226
225
  end
227
- tags_to_delete.each { |t| t.destroy }
228
- # rescue Exception => e
229
- # logger.debug e
230
- # end
226
+ end
227
+ tags_to_delete.each { |t| t.destroy }
231
228
 
232
229
  # now try to save page objects (just attributes in this case)
233
- # begin
234
- objects_to_delete = @pg.objects.where("obj_type = 'attribute' or obj_type = 'option'").all
230
+ objects_to_delete = @pg.objects.where("obj_type = 'attribute' or obj_type = 'option'").all
231
+
232
+ (params[:page_objects] || {}).each do |key,val|
233
+ next if val.blank?
235
234
 
236
- (params[:page_objects] || {}).each do |key,val|
237
- next if val.blank?
238
-
239
- if key =~ /^obj-(\w+?)-(.+?)$/
240
- obj = @pg.objects.where(:name => $2, :obj_type => $1).first
241
- obj ||= @pg.objects.build(:name => $2, :obj_type => $1)
242
- obj.content = val
243
- obj.save
244
- objects_to_delete = objects_to_delete.reject { |obj| obj.name == $2 }
245
- end
235
+ if key =~ /^obj-(\w+?)-(.+?)$/
236
+ obj = @pg.objects.where(:name => $2, :obj_type => $1).first
237
+ obj ||= @pg.objects.build(:name => $2, :obj_type => $1)
238
+ obj.content = val
239
+ obj.save
240
+ objects_to_delete = objects_to_delete.reject { |obj| obj.name == $2 }
246
241
  end
247
-
248
- objects_to_delete.each { |t| t.destroy }
249
- # rescue Exception => e
250
- # logger.debug e
251
- # end
242
+ end
252
243
 
253
- render :update do |page|
254
- case params[:return_to]
255
- when 'preview'
244
+ objects_to_delete.each { |t| t.destroy }
245
+
246
+ case params[:return_to]
247
+ when 'preview'
248
+ render :update do |page|
256
249
  page.redirect_to "#{@pg.path.blank? ? '' : '/' + @pg.path}/version/#{@pg.published_version > 0 ? @pg.published_version : @pg.version}"
257
- else
258
- flash[:notice] = 'Page saved.'
259
- session[:cms_pages_path] = @pg.path
250
+ end
251
+ else
252
+ flash[:notice] = 'Page saved.'
253
+ session[:cms_pages_path] = @pg.path
254
+ render :update do |page|
260
255
  page.redirect_to :action => 'pages'
261
256
  end
262
257
  end
@@ -343,8 +338,8 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
343
338
  @page_objects = HashObject.new(params[:page_objects] || {})
344
339
 
345
340
  if request.get?
346
- @pg.revert_to(params[:version]) if params[:version]
347
- @pg.objects.where(:cms_page_version => @pg.version).each do |obj|
341
+ @pg.version = params[:version] if params[:version] && params[:version].to_i != @pg.version
342
+ @pg.objects.where(cms_page_version: @pg.version).each do |obj|
348
343
  key = "obj-#{obj.obj_type.to_s}-#{obj.name}"
349
344
  @page_objects[key] = obj.content.html_safe
350
345
  end
@@ -362,10 +357,10 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
362
357
  @page_title = @pg.title
363
358
 
364
359
  @cms_head ||= ''
365
- @cms_head << "<script type=\"text/javascript\" src=\"#{url_for(:action => 'page_tags_for_lookup')}\"></script>"
360
+ @cms_head << "<script type=\"text/javascript\" src=\"#{url_for(action: 'page_tags_for_lookup')}\"></script>"
366
361
 
367
362
  @template_content = substitute_placeholders(@pg.template.content, @pg)
368
- render :layout => 'application'
363
+ render layout: 'application'
369
364
 
370
365
  elsif request.post?
371
366
  CmsPage.transaction do
@@ -441,7 +436,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
441
436
  key =~ /^obj-(\w+?)-(.+?)$/
442
437
  obj = @pg.objects.build(:name => $2, :obj_type => $1)
443
438
 
444
- # do a little bit of "censorship" to fix up Word pastes
439
+ # do a little bit of "censorship" to fix up Word pastes and strange things from the editor
445
440
  if val.is_a?(String)
446
441
  # all meta and link tags
447
442
  val.gsub!(/(<\/?)(meta|link)(.*?)>/m, '')
@@ -459,9 +454,6 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
459
454
  # not even sure what these are supposed to be
460
455
  val.gsub!(/<xml>(.*?)<\/xml>/m, '')
461
456
 
462
- # pirate styles not welcome
463
- val.gsub!(/<style>(.*?)<\/style>/m, '')
464
-
465
457
  # images pointing to the local drive??
466
458
  val.gsub!(/<img src="file:(.*?)>/, '')
467
459
 
@@ -478,6 +470,15 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
478
470
 
479
471
  # but it's easier just remove all tags with colons in them
480
472
  val.gsub!(/(<\/?)[\w\d]+:[\w\d]+(.*?)>/, '')
473
+
474
+
475
+ ### other non-ms word specific stuff ###
476
+
477
+ # pirate styles not welcome
478
+ val.gsub!(/<style(?:.*?)>(.*?)<\/style>/m, '')
479
+
480
+ # fix strange <br>s from the editor
481
+ val.gsub!(/<br>(<\/h\d>|<\/p>)/, '\1')
481
482
  end
482
483
 
483
484
  obj.content = val
@@ -604,19 +605,19 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
604
605
  :focusOnLoad => focusOnLoad.to_s, :style => 'border: 2px dashed gray; padding: 5px',
605
606
  :minHeight => '100px' }.update(html_options))
606
607
  content << content_tag(:div, ''.html_safe, :id => "page_object_config_#{key}")
607
- content << javascript_tag("addLoadEvent(function () { scanForPageObjects(#{@pg.id}, '#{key}', #{@pg.version}); });")
608
+ content << javascript_tag("jQuery(document).ready(function () { scanForPageObjects(#{@pg.id}, '#{key}', #{@pg.version}); });")
608
609
  content << observe_field("page_objects_#{key}", :function => "scanForPageObjects(#{@pg.id}, '#{key}', #{@pg.version});", :frequency => 2)
609
610
  content
610
611
  when :page_list
612
+ # set defaults unless values are present in template
611
613
  @page_objects["#{key}-min-item-count"] ||= 3 unless options[:item_min_count]
612
614
  @page_objects["#{key}-max-item-count"] ||= 5 unless options[:item_count]
613
- @page_objects["#{key}-item-offset"] ||= 0 unless options[:item_offset]
614
615
  @page_objects["#{key}-sort-first-field"] ||= options[:primary_sort_key]
615
616
  @page_objects["#{key}-sort-first-direction"] ||= options[:primary_sort_direction]
616
617
  @page_objects["#{key}-sort-second-field"] ||= options[:secondary_sort_key]
617
618
  @page_objects["#{key}-sort-second-direction"] ||= options[:secondary_sort_direction]
618
619
 
619
- render_to_string(:partial => 'page_list', :locals => { :name => name, :key => key }).html_safe
620
+ render_to_string(partial: 'page_list', locals: { name: name, key: key, options: options }).html_safe
620
621
  when :snippet
621
622
  @snippet = CmsSnippet.find_by_name(name)
622
623
  if @snippet
@@ -630,6 +631,25 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
630
631
  end
631
632
  helper_method :insert_object
632
633
 
634
+ # shortcuts
635
+ def text_editor(name, options = {}, html_options = {})
636
+ insert_object(name, :text, options, html_options)
637
+ end
638
+ alias :texteditor :text_editor
639
+ helper_method :text_editor, :texteditor
640
+
641
+ def page_list(name, options = {}, html_options = {})
642
+ insert_object(name, :page_list, options, html_options)
643
+ end
644
+ alias :pagelist :page_list
645
+ helper_method :page_list, :pagelist
646
+
647
+ def snippet(name, options = {}, html_options = {})
648
+ insert_object(name, :snippet, options, html_options)
649
+ end
650
+ helper_method :snippet
651
+
652
+
633
653
  def disable_caching ; end
634
654
  helper_method :disable_caching
635
655
 
@@ -655,7 +675,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
655
675
  @pg = CmsPage.find_by_id(params[:id])
656
676
  target_dir = File.join(Rails.root, 'public', 'assets', 'content', @pg.path)
657
677
 
658
- if File.exists?(target_dir)
678
+ if File.exist?(target_dir)
659
679
  redirect_to :action => 'select_gallery', :id => @pg, :gallery_id => params[:gallery_id]
660
680
  else
661
681
  render :partial => 'upload_image'
@@ -764,7 +784,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
764
784
 
765
785
  count = 1
766
786
  localdir = File.join(target_dir, 'gallery_1')
767
- while File.exists?(localdir) && count < 100
787
+ while File.exist?(localdir) && count < 100
768
788
  count += 1
769
789
  localdir = File.join(target_dir, "gallery_#{count}")
770
790
  end
@@ -821,7 +841,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
821
841
  thumbfile = File.join(Rails.root, 'public', @dirname, File.basename(img, File.extname(img))) + '-thumb.jpg'
822
842
  @thumbs << File.join(@dirname, File.basename(img, File.extname(img))) + '-thumb.jpg'
823
843
 
824
- next if File.exists?(thumbfile)
844
+ next if File.exist?(thumbfile)
825
845
 
826
846
  im = MiniMagick::Image.from_file(File.join(Rails.root, 'public', img))
827
847
  im.resize "80x80" # hardcoded!
@@ -976,41 +996,44 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
976
996
  new_captions << original_captions[img.to_i] || ''
977
997
  end
978
998
 
979
- File.open(File.join(gallery_dir, 'captions.yml'), 'w') { |f| YAML.dump(new_captions, f) }
999
+ yaml = YAML.dump(new_captions)
1000
+ File.open(File.join(gallery_dir, 'captions.yml'), 'w') { |f| f << yaml }
980
1001
  session[:gallery_images_sorted] = nil
981
1002
 
982
1003
  redirect_to :action => 'gallery_management', :id => @pg, :gallery_id => params[:gallery_id]
983
1004
  end
984
1005
 
985
1006
  def image_details
986
- gallery_dir = File.join(Rails.root, 'public', 'assets', 'content', params[:path].to_s, params[:gallery_id])
1007
+ @pg = CmsPage.find_by_id(params[:id])
987
1008
 
988
1009
  # create blank captions.yml if it doesn't already exist
989
- create_captions_file(params[:id])
1010
+ create_captions_file(@pg.id)
990
1011
 
1012
+ gallery_dir = File.join(Rails.root, 'public', 'assets', 'content', @pg.path, params[:gallery_id])
991
1013
  captions = YAML.load(File.open(File.join(gallery_dir, 'captions.yml')).read)
992
- image_id = params[:image].split('.')[0].to_i
1014
+ image_id = params[:image].split('.').first.to_i
993
1015
  @caption = captions[image_id]
994
1016
 
995
- render :partial => 'image_details'
1017
+ render partial: 'image_details'
996
1018
  end
997
1019
 
998
1020
  def update_caption
999
1021
  if request.post?
1000
- gallery_dir = File.join(Rails.root, 'public', 'assets', 'content', params[:path].to_s, params[:gallery_id])
1001
-
1002
- image_id = params[:image].split('.')[0].to_i
1022
+ @pg = CmsPage.find_by_id(params[:id])
1003
1023
 
1004
1024
  # create blank captions.yml if it doesn't already exist
1005
- create_captions_file(params[:id])
1025
+ create_captions_file(@pg.id)
1006
1026
 
1027
+ gallery_dir = File.join(Rails.root, 'public', 'assets', 'content', @pg.path, params[:gallery_id])
1007
1028
  captions = YAML.load_file(File.join(gallery_dir, 'captions.yml')).to_a
1029
+ image_id = params[:image].split('.').first.to_i
1008
1030
  captions[image_id] = params[:caption]
1009
1031
 
1010
- File.open(File.join(gallery_dir, 'captions.yml'), "w") { |f| f << captions.to_yaml }
1032
+ yaml = YAML.dump(captions)
1033
+ File.open(File.join(gallery_dir, 'captions.yml'), "w") { |f| f << yaml }
1011
1034
  end
1012
1035
 
1013
- redirect_to :action => 'gallery_management', :id => params[:id], :gallery_id => params[:gallery_id]
1036
+ redirect_to action: 'gallery_management', id: params[:id], gallery_id: params[:gallery_id]
1014
1037
  end
1015
1038
 
1016
1039
  def add_to_gallery
@@ -1104,9 +1127,15 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1104
1127
 
1105
1128
  def delete_photo
1106
1129
  if request.post?
1107
- gallery_dir = File.join(Rails.root, 'public', 'assets', 'content', params[:path].to_s, params[:gallery_id])
1130
+ @pg = CmsPage.find_by_id(params[:id])
1108
1131
 
1109
- image_id = params[:image].split('.')[0].to_i
1132
+ # create blank captions.yml if it doesn't already exist
1133
+ create_captions_file(@pg.id)
1134
+
1135
+ gallery_dir = File.join(Rails.root, 'public', 'assets', 'content', @pg.path, params[:gallery_id])
1136
+ captions = YAML.load(File.open(File.join(gallery_dir, 'captions.yml')).read).to_a
1137
+
1138
+ image_id = params[:image].split('.').first.to_i
1110
1139
 
1111
1140
  begin ; File.delete(File.join(gallery_dir, image_id.to_s + '.jpg')) ; rescue ; end
1112
1141
  begin ; File.delete(File.join(gallery_dir, image_id.to_s + '-thumb.jpg')) ; rescue ; end
@@ -1114,16 +1143,12 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1114
1143
 
1115
1144
  all_images = Dir.glob(File.join(gallery_dir, '*.{jpg,jpeg,png,gif}'))
1116
1145
  images = []
1117
- all_images.each { |img| images << img if !File.basename(img).include?('thumb') and File.basename(img).split('.')[0].to_i > image_id }
1146
+ all_images.each { |img| images << img if !File.basename(img).include?('thumb') && File.basename(img).split('.').first.to_i > image_id }
1118
1147
 
1119
1148
  image_names = []
1120
- images.each_with_index { |img, index| image_names << File.basename(img).split('.')[0].to_i }
1149
+ images.each_with_index { |img, index| image_names << File.basename(img).split('.').first.to_i }
1121
1150
  image_names.sort!
1122
1151
 
1123
- # create blank captions.yml if it doesn't already exist
1124
- create_captions_file(params[:id])
1125
- captions = YAML.load(File.open(File.join(gallery_dir, 'captions.yml')).read).to_a
1126
-
1127
1152
  new_captions = []
1128
1153
  for i in 0...image_id do
1129
1154
  new_captions[i] = captions[i] || ''
@@ -1139,7 +1164,8 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1139
1164
  image_id += 1
1140
1165
  end
1141
1166
 
1142
- File.open(File.join(gallery_dir, 'captions.yml'), "w") { |f| f.write(YAML.dump(new_captions)) }
1167
+ yaml = YAML.dump(new_captions)
1168
+ File.open(File.join(gallery_dir, 'captions.yml'), "w") { |f| f << yaml }
1143
1169
  end
1144
1170
 
1145
1171
  redirect_to :action => 'gallery_management', :id => params[:id], :gallery_id => params[:gallery_id]
@@ -1414,16 +1440,12 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1414
1440
  end
1415
1441
 
1416
1442
  def create_captions_file(pg_id, options = {})
1417
- gallery_id = (!options[:gallery_id] ? params[:gallery_id] : options[:gallery_id])
1418
-
1419
- @pg = CmsPage.find_by_id(pg_id)
1420
- galleries_dir = File.join(Rails.root, 'public', 'assets', 'content', @pg.path)
1421
- gallery_dir = File.join(galleries_dir, gallery_id)
1422
- captions_location = File.join(gallery_dir, 'captions.yml')
1423
-
1424
- return if File.exists?(captions_location)
1443
+ @pg ||= CmsPage.find_by_id(pg_id)
1444
+ gallery_id = options[:gallery_id] || params[:gallery_id]
1445
+ captions_file = File.join(Rails.root, 'public', 'assets', 'content', @pg.path, gallery_id, 'captions.yml')
1446
+ return if File.exist?(captions_file)
1425
1447
 
1426
- File.open(captions_location, 'w') { |f| YAML.dump([0], f) }
1448
+ File.open(captions_file, 'w') { |f| YAML.dump([0], f) }
1427
1449
  end
1428
1450
 
1429
1451
  # prerequisites: @pg (CmsPage)
@@ -1434,7 +1456,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1434
1456
 
1435
1457
  ret = {}
1436
1458
 
1437
- if File.exists?(settings_location)
1459
+ if File.exist?(settings_location)
1438
1460
  File.open(settings_location, 'r') { |f| ret = YAML.load(f.read) }
1439
1461
  else
1440
1462
  File.open(settings_location, 'w') { |f| YAML.dump({}, f) }
@@ -1473,7 +1495,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1473
1495
  raise "Source file required" if src_file.blank?
1474
1496
 
1475
1497
  dest = File.join(dest, File.basename(src_file)) if File.directory?(dest)
1476
- if !File.exists?(dest) || force == 1
1498
+ if !File.exist?(dest) || force == 1
1477
1499
  logger.debug "Reading source file #{src_file}"
1478
1500
  im = Magick::Image::read(src_file)[0]
1479
1501
  im_overlay = Magick::Image::read(File.join(ImagineCms::Engine.root, 'app', 'assets', 'images', 'management', overlay))[0]
@@ -1500,7 +1522,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1500
1522
  Dir.glob("#{galleries_dir}/gallery_*").each do |g|
1501
1523
  begin
1502
1524
  management_dir = File.join(g, 'management')
1503
- FileUtils.mkdir_p(management_dir) unless File.exists?(management_dir)
1525
+ FileUtils.mkdir_p(management_dir) unless File.exist?(management_dir)
1504
1526
 
1505
1527
  images = Dir.glob("#{g}/*.{jpg,jpeg,png,gif}")
1506
1528
  preview_images = []
@@ -1508,7 +1530,7 @@ class Management::CmsController < Management::ApplicationController # :nodoc:
1508
1530
 
1509
1531
  # gallery preview image
1510
1532
  preview_image_location = File.join(management_dir, 'preview.jpg')
1511
- unless File.exists?(preview_image_location)
1533
+ unless File.exist?(preview_image_location)
1512
1534
  preview_image = preview_images.first
1513
1535
  create_preview_image(preview_image, preview_image_location, options[:force], 'gallery_preview_overlay.png', 130)
1514
1536
  end