imagine_cms 4.1.4 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
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