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.
- checksums.yaml +4 -4
- data/README.rdoc +2 -1
- data/app/assets/images/interface/form_loading.gif +0 -0
- data/app/assets/images/management/btn-top-delete.png +0 -0
- data/app/assets/images/management/btn-top-edit.png +0 -0
- data/app/assets/images/management/btn-top-exterminate.png +0 -0
- data/app/assets/images/management/btn-top-new.png +0 -0
- data/app/assets/images/management/btn-top-preview.png +0 -0
- data/app/assets/images/management/btn-top-properties.png +0 -0
- data/app/assets/javascripts/codemirror/modes-custom/imagine_cms.js +87 -0
- data/app/assets/javascripts/imagine_cms/core.js +510 -0
- data/app/assets/javascripts/imagine_cms/legacy/misc.js +537 -0
- data/app/assets/javascripts/imagine_cms/legacy/rollovers.js +193 -0
- data/app/assets/javascripts/imagine_cms/legacy/slideshow.js +116 -0
- data/app/assets/javascripts/imagine_cms/legacy/textfieldhints.js +55 -0
- data/app/assets/javascripts/imagine_cms.js +14 -1
- data/app/assets/javascripts/imagine_cms_compat.js +26 -0
- data/app/assets/javascripts/jquery-ui.js +16608 -0
- data/app/assets/javascripts/tag-it.js +591 -0
- data/app/assets/stylesheets/imagine_cms.css.scss +26 -10
- data/app/assets/stylesheets/imagine_controls.css.scss +8 -0
- data/app/assets/stylesheets/jquery-ui.css +1225 -0
- data/app/assets/stylesheets/jquery-ui.structure.css +833 -0
- data/app/assets/stylesheets/jquery-ui.theme.css +410 -0
- data/app/assets/stylesheets/jquery.tagit.css +69 -0
- data/app/assets/stylesheets/management.css.scss +7 -0
- data/app/assets/stylesheets/tagit.ui-imagine.css +100 -0
- data/app/controllers/cms/content_controller.rb +28 -45
- data/app/controllers/management/cms_controller.rb +116 -94
- data/app/helpers/cms_application_helper.rb +76 -39
- data/app/models/cms_page.rb +32 -14
- data/app/models/cms_page_object.rb +1 -1
- data/app/models/cms_page_tag.rb +2 -2
- data/app/models/cms_template.rb +1 -1
- data/app/models/user.rb +6 -6
- data/app/models/user_group.rb +1 -1
- data/app/views/cms/content/_photo_gallery.html.erb +12 -12
- data/app/views/cms/content/_search.html.erb +2 -2
- data/app/views/cms/content/_search_result.html.erb +16 -10
- data/app/views/layouts/management.html.erb +18 -17
- data/app/views/management/cms/_edit_page.html.erb +47 -33
- data/app/views/management/cms/_gallery_index.html.erb +4 -4
- data/app/views/management/cms/_image.html.erb +3 -3
- data/app/views/management/cms/_image_details.html.erb +9 -8
- data/app/views/management/cms/_list_page.html.erb +2 -2
- data/app/views/management/cms/_list_page_select.html.erb +1 -1
- data/app/views/management/cms/_page_list.html.erb +69 -48
- data/app/views/management/cms/_page_list_source_folder.html.erb +2 -2
- data/app/views/management/cms/_template_options.html.erb +4 -4
- data/app/views/management/cms/_template_reference.html.erb +13 -15
- data/app/views/management/cms/edit_page_content.html.erb +3 -3
- data/app/views/management/cms/edit_snippet.html.erb +19 -41
- data/app/views/management/cms/edit_template.html.erb +15 -38
- data/app/views/management/cms/pages.html.erb +17 -29
- data/app/views/management/cms/snippets.html.erb +2 -2
- data/app/views/management/cms/templates.html.erb +2 -2
- data/app/views/management/cms/toolbar_edit.html.erb +2 -0
- data/app/views/management/cms/toolbar_preview.html.erb +2 -2
- data/config/initializers/config_file.rb +1 -1
- data/imagine_cms.gemspec +7 -4
- data/lib/extensions/action_controller_extensions.rb +50 -19
- data/lib/imagine_cms/engine.rb +12 -8
- data/lib/imagine_cms/version.rb +1 -1
- data/lib/prototype_legacy_helper/lib/prototype_legacy_helper.rb +2 -2
- data/lib/tasks/imagine_cms_tasks.rake +8 -0
- metadata +69 -91
- data/app/assets/images/management/btn_archive.gif +0 -0
- data/app/assets/images/management/btn_delete.gif +0 -0
- data/app/assets/images/management/btn_duplicate.gif +0 -0
- data/app/assets/images/management/btn_edit.gif +0 -0
- data/app/assets/images/management/btn_new_page.gif +0 -0
- data/app/assets/images/management/btn_preview.gif +0 -0
- data/app/assets/images/management/btn_properties.gif +0 -0
- data/app/assets/images/management/btn_restore.gif +0 -0
- data/app/assets/images/management/btn_top_delete.gif +0 -0
- data/app/assets/images/management/btn_top_duplicate.gif +0 -0
- data/app/assets/images/management/btn_top_edit.gif +0 -0
- data/app/assets/images/management/btn_top_new.gif +0 -0
- data/app/assets/images/management/btn_top_preview.gif +0 -0
- data/app/assets/images/management/btn_top_properties.gif +0 -0
- data/app/assets/javascripts/codepress/codepress.html +0 -36
- data/app/assets/javascripts/codepress/codepress.js +0 -130
- data/app/assets/javascripts/codepress/engines/gecko.js +0 -240
- data/app/assets/javascripts/codepress/engines/khtml.js +0 -0
- data/app/assets/javascripts/codepress/engines/msie.js +0 -263
- data/app/assets/javascripts/codepress/engines/older.js +0 -0
- data/app/assets/javascripts/codepress/engines/opera.js +0 -259
- data/app/assets/javascripts/codepress/languages/css.js +0 -23
- data/app/assets/javascripts/codepress/languages/generic.js +0 -25
- data/app/assets/javascripts/codepress/languages/html.js +0 -63
- data/app/assets/javascripts/codepress/languages/java.js +0 -24
- data/app/assets/javascripts/codepress/languages/javascript.js +0 -30
- data/app/assets/javascripts/codepress/languages/perl.js +0 -27
- data/app/assets/javascripts/codepress/languages/php.js +0 -60
- data/app/assets/javascripts/codepress/languages/ruby.js +0 -26
- data/app/assets/javascripts/codepress/languages/sql.js +0 -30
- data/app/assets/javascripts/codepress/languages/text.js +0 -9
- data/app/assets/javascripts/imagine.js +0 -1393
- data/app/assets/stylesheets/codepress/codepress.css +0 -7
- data/app/assets/stylesheets/codepress/languages/css.css +0 -10
- data/app/assets/stylesheets/codepress/languages/generic.css +0 -9
- data/app/assets/stylesheets/codepress/languages/html.css +0 -18
- data/app/assets/stylesheets/codepress/languages/java.css +0 -7
- data/app/assets/stylesheets/codepress/languages/javascript.css +0 -8
- data/app/assets/stylesheets/codepress/languages/perl.css +0 -11
- data/app/assets/stylesheets/codepress/languages/php.css +0 -12
- data/app/assets/stylesheets/codepress/languages/ruby.css +0 -10
- data/app/assets/stylesheets/codepress/languages/sql.css +0 -10
- 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 :
|
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 :
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
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
|
237
|
+
@pages.concat query.all
|
243
238
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
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
|
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.
|
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
|
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
|
-
|
278
|
+
# populate @page_list_pages
|
279
|
+
render_cms_page_to_string(@pg)
|
297
280
|
|
298
|
-
@pages =
|
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
|
-
:
|
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
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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(:
|
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
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
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
|
-
|
228
|
-
|
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
|
-
|
234
|
-
|
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
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
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
|
-
|
254
|
-
|
255
|
-
|
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
|
-
|
258
|
-
|
259
|
-
|
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.
|
347
|
-
@pg.objects.where(:
|
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(:
|
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 :
|
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("
|
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(:
|
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.
|
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.
|
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.
|
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
|
-
|
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
|
-
|
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(
|
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('.')
|
1014
|
+
image_id = params[:image].split('.').first.to_i
|
993
1015
|
@caption = captions[image_id]
|
994
1016
|
|
995
|
-
render :
|
1017
|
+
render partial: 'image_details'
|
996
1018
|
end
|
997
1019
|
|
998
1020
|
def update_caption
|
999
1021
|
if request.post?
|
1000
|
-
|
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(
|
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
|
-
|
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 :
|
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
|
-
|
1130
|
+
@pg = CmsPage.find_by_id(params[:id])
|
1108
1131
|
|
1109
|
-
|
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')
|
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('.')
|
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
|
-
|
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
|
-
|
1418
|
-
|
1419
|
-
@pg
|
1420
|
-
|
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(
|
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.
|
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.
|
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.
|
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.
|
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
|