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.
- 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
|