drg_cms 0.5.3 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65d229ac8eb1045776751d341d8f0d15964a7006
4
- data.tar.gz: 035c9ee8254c4c9c2d2933eb498366c73279afc8
3
+ metadata.gz: 0867ef411e20c533abaff83ba61268fffe01be0d
4
+ data.tar.gz: 7a249dfea4847991e8437fd9f5b9d9f0445cedd6
5
5
  SHA512:
6
- metadata.gz: db1f82f1c6c9bd23dbde2e59f687d4ff5890b9169600dba872c538213cb6e60866a20f32a4cb5e2e067246b046effb0975ef67c945dff6708ad1dc2d176d7ce6
7
- data.tar.gz: 182856d300f43127a0539b66bfb4339e206c9e68e77e37261a24895b6edb1b8e92d8fffae9fe2ab7b65964d7309c052ce9d48fb31630062d94038d723f37631e
6
+ metadata.gz: 52bf2980ec6fbc9c88314b21b766fa827ec6e482dbf9db06b0d029adec3d4759b5157de196aef1c717ec1c2ac8016f5b9479b3d341fb716ac841f38957360670
7
+ data.tar.gz: aced1888c2df9660b106ba36129db5b9eaffb94ff7fae741fd845ac3e665946c5a6e510d37c8c86024870caf8590e93b5300d48a5ef9ca53dcc90f1f6cb4f303
@@ -438,6 +438,11 @@ background-color: #888;
438
438
  background-color: #fff;
439
439
  }
440
440
 
441
+ .dc-separator {
442
+ padding: 0px;
443
+ border-top: 2px solid #ccc;
444
+ }
445
+
441
446
  #cmsedit-div {
442
447
  }
443
448
 
@@ -20,9 +20,11 @@ result_set:
20
20
  1:
21
21
  name: key
22
22
  2:
23
+ name: description
24
+ 3:
23
25
  name: site_id
24
26
  eval: dc_name4_id,dc_site,name
25
- 3:
27
+ 4:
26
28
  name: active
27
29
  eval: dc_icon4_boolean
28
30
 
@@ -609,6 +609,18 @@ def dc_check_and_default(value, default, values=nil) #:nodoc:
609
609
  value
610
610
  end
611
611
 
612
+ ############################################################################
613
+ # Creates top or bottom horizontal line on form.
614
+ ############################################################################
615
+ def top_bottom_line(yaml)
616
+ if yaml.class == Hash
617
+ clas = yaml['class']
618
+ style = yaml['style']
619
+ end
620
+ clas ||= 'dc-separator'
621
+ "<tr><td colspan=\"4\" class=\"#{clas}\" style=\"#{style}\"></td></tr>"
622
+ end
623
+
612
624
  ############################################################################
613
625
  # Creates input field for one tab. Subroutine of dc_fields_for_form.
614
626
  ############################################################################
@@ -654,6 +666,9 @@ def dc_fields_for_tab(fields) #:nodoc:
654
666
  else # litle error string
655
667
  "Error: Code for field type #{options['type']} not defined!"
656
668
  end
669
+ # Separator
670
+ html << top_bottom_line(options['top-line']) if options['top-line']
671
+ # Double entry fields in one row
657
672
  double_field = 1 if options['double']
658
673
  html << '<tr>' if double_field < 2
659
674
  #
@@ -672,6 +687,7 @@ def dc_fields_for_tab(fields) #:nodoc:
672
687
  html << '</tr>' if double_field != 1
673
688
  double_field = 0 if double_field == 2
674
689
  double_field = 2 if double_field == 1
690
+ html << top_bottom_line(options['bottom-line']) if options['bottom-line']
675
691
  end
676
692
  html << '</table></table>'
677
693
  end
@@ -933,16 +933,17 @@ def dc_user_has_role( role, user=nil, roles=nil )
933
933
  end
934
934
 
935
935
  ####################################################################
936
- # Returns true if parameter has value of 0, false, no or -. Returns default
936
+ # Returns true if parameter has value of 0, false, no, none or -. Returns default
937
937
  # if parameter has nil value.
938
938
  #
939
939
  # Parameters:
940
- # [what] String/boolean.
940
+ # [what] String/boolean/Integer.
941
941
  # [default] Default value when what has value of nil. False by default.
942
942
  #
943
943
  # Example:
944
- # dc_dont?('no') # => true
945
- # dc_dont?(1) # => false
944
+ # dc_dont?('none') # => true
945
+ # dc_dont?('-') # => true
946
+ # dc_dont?(1) # => false
946
947
  ####################################################################
947
948
  def dc_dont?(what, default=false)
948
949
  return default if what.nil?
@@ -1011,11 +1012,8 @@ def dc_big_table(key)
1011
1012
  end
1012
1013
 
1013
1014
  ########################################################################
1014
- # Will return html code required for open edit form in iframe. If parameters
1015
- # are found in url iframe will be initial loaded with url parameters thus
1016
- # enabling forms load on page display.
1017
1015
  ########################################################################
1018
- def iframe_edit1()
1016
+ def iframe_edit1() #:nodoc
1019
1017
  # default_table = params[:table] if default_table.nil?
1020
1018
  # p params
1021
1019
  parms = {}
@@ -1035,4 +1033,42 @@ def iframe_edit1()
1035
1033
  ret.html_safe
1036
1034
  end
1037
1035
 
1036
+ ########################################################################
1037
+ # Will return html code required for load DRG form into iframe. If parameters
1038
+ # are passed to method iframe url will have initial value and thus enabling automatic form
1039
+ # load on page display.
1040
+ #
1041
+ # Parameters:
1042
+ # [table] String: Collection (table) name used to load initial form.
1043
+ # [opts] Hash: Optional parameters which define url for loading DRG form.
1044
+ # These parameters are :action, :oper, :table, :formname, :id, :readonly
1045
+ #
1046
+ # Example:
1047
+ # # just iframe code
1048
+ # <%= dc_iframe_edit(nil) %>
1049
+ # # load note form for note collection
1050
+ # <%= dc_iframe_edit('note') %>
1051
+ # # on register collection use reg_adresses formname to display data with id @register.id
1052
+ # <%= dc_iframe_edit('register', action: :show, formname: 'reg_adresses', readonly: 1, id: @register.id ) %>
1053
+ #
1054
+ # Returns:
1055
+ # Html code for edit iframe
1056
+ ########################################################################
1057
+ def dc_iframe_edit(table, opts={})
1058
+ ret = if params.size > 2 and table # controller, action, path is minimal
1059
+ params[:controller] = 'cmsedit'
1060
+ params[:action] = (params[:oper] and (params[:oper] == 'edit')) ? 'edit' : 'index'
1061
+ params[:action] = opts[:action] unless params[:oper]
1062
+ params[:table] ||= table
1063
+ params[:formname] ||= opts[:formname] || table
1064
+ params[:id] ||= params[:idp] || opts[:id]
1065
+ params[:readonly] ||= opts[:readonly]
1066
+ params[:path] = nil
1067
+ "<iframe id='iframe_edit' name='iframe_edit' src='#{url_for params}'></iframe>"
1068
+ else
1069
+ "<iframe id='iframe_edit' name='iframe_edit'></iframe>"
1070
+ end
1071
+ ret.html_safe
1072
+ end
1073
+
1038
1074
  end
@@ -98,12 +98,21 @@ def link_4menu(item)
98
98
  link = '/' + link unless link[0] == '/' # link should start with '/'
99
99
  end
100
100
 
101
- target = item.target.blank? ? nil : item.target
101
+ caption = ''
102
+ unless item.picture.blank?
103
+ caption = if item.picture.match(/\./)
104
+ @parent.image_tag(item.picture)
105
+ elsif item.picture.match('<i')
106
+ item.picture
107
+ else
108
+ @parent.fa_icon(item.picture)
109
+ end
110
+ end
102
111
  # - in first place won't write caption text
103
- caption = item.caption[0] == '-' ? '' : item.caption.to_s
104
- img_title = item.caption.to_s.sub('-','')
105
- (item.picture.blank? ? '' : @parent.link_to( @parent.image_tag(item.picture), link, {title: img_title, target: target} )) +
106
- ( caption.blank? ? '' : @parent.link_to(caption, link, {target: target}))
112
+ caption = caption.html_safe + (item.caption[0] == '-' ? '' : (' ' + item.caption) )
113
+
114
+ target = item.target.blank? ? nil : item.target
115
+ @parent.link_to(caption, link, {target: target})
107
116
  end
108
117
 
109
118
  ########################################################################
@@ -491,7 +491,7 @@ en:
491
491
  page_table: Name of table holding data for pages
492
492
  page_class: Rails model class name which defines table holding pages data usually DcPage
493
493
  menu_class: Rails model class name which defines table holding menu data usually DcMenu
494
- site_layout: Rails layout used to draw response. This is by default application.
494
+ site_layout: Rails layout used to draw response. This is by default content layout.
495
495
  files_directory: Directory name where uploaded files are located
496
496
  logo: Logotype picture for the site
497
497
  dc_policies: Access policies defined for the site
@@ -1,4 +1,4 @@
1
1
  module DrgCms #:nodoc:
2
2
  # drg_cms gem version
3
- VERSION = "0.5.3"
3
+ VERSION = "0.5.5"
4
4
  end
@@ -0,0 +1,93 @@
1
+
2
+ @logger = Logger.new(STDOUT)
3
+
4
+ #########################################################################
5
+ # Determine module class from filename.
6
+ #########################################################################
7
+ def determine_model(path)
8
+ path =~ /(.*)\/(.*).rb/
9
+ begin
10
+ $2.camelize.constantize
11
+ rescue Exception # it happends
12
+ nil
13
+ end
14
+ end
15
+
16
+ #########################################################################
17
+ # Create index for single module
18
+ #########################################################################
19
+ def create_index(model)
20
+ return if model.index_specifications.empty?
21
+ #
22
+ if !model.embedded? || model.cyclic?
23
+ @logger.info("DRGCMS: Creating indexes on #{model}:")
24
+ model.create_indexes
25
+ model.index_specifications.each do |spec|
26
+ @logger.info("DRGCMS: Index: #{spec.key}, Options: #{spec.options}")
27
+ end
28
+ model
29
+ else
30
+ @logger.info("DRGCMS: Index ignored on: #{model}, please define in the root model.")
31
+ nil
32
+ end
33
+ end
34
+
35
+ #########################################################################
36
+ # Will remove all undefined indexes from collection.
37
+ #########################################################################
38
+ def remove_undefined_indexes(model)
39
+ return if model.embedded?
40
+ #
41
+ begin
42
+ undefined = []
43
+ model.collection.indexes.each do |index|
44
+ # ignore default index
45
+ next if index['name'] == '_id_'
46
+
47
+ key = index['key'].symbolize_keys
48
+ spec = model.index_specification(key)
49
+ undefined << index unless spec
50
+ end
51
+ rescue Mongo::Error::OperationFailure; end
52
+ #
53
+ undefined.each do |index|
54
+ key = index['key'].symbolize_keys
55
+ collection = model.collection
56
+ collection.indexes.drop(key)
57
+ @logger.info(
58
+ "MONGOID: Removed index '#{index['name']}' on collection " +
59
+ "'#{collection.name}' in database '#{collection.database.name}'."
60
+ )
61
+ end
62
+ end
63
+
64
+ #########################################################################
65
+ # Return array of all models found in application.
66
+ #########################################################################
67
+ def all_models()
68
+ models = []
69
+ DrgCms.paths(:forms).each do |path|
70
+ models_dir = File.expand_path("../models", path)
71
+ Dir["#{models_dir}/*.rb"].each do |model_file|
72
+ model = determine_model(model_file)
73
+ models << model if !model.nil? and model.respond_to?(:index_specifications)
74
+ end
75
+ end
76
+ models
77
+ end
78
+
79
+ #########################################################################
80
+ #
81
+ #########################################################################
82
+ namespace :drg_cms do
83
+ desc "Create indexes for all mongoid models. Including those in gem plugins."
84
+ task :create_indexes => :environment do
85
+ all_models.each {|model| create_index(model)}
86
+ end
87
+
88
+ desc "Remove undefined indexes for all mongoid models. Including those in gem plugins."
89
+ task :remove_undefined_indexes => :environment do
90
+ all_models.each {|model| remove_undefined_indexes(model)}
91
+ end
92
+
93
+ end
@@ -2,11 +2,9 @@
2
2
  #
3
3
  #########################################################################
4
4
  def ok_to_start
5
- p 'bla'
6
5
  # DcPermission.all.delete
7
6
  # DcPolicyRole.all.delete
8
7
  # DcUser.all.delete
9
- p DcPermission.all.to_a
10
8
  if DcPermission.all.to_a.size > 0
11
9
  p 'DcPermission (Permissions) collection is not empty! Aborting.'
12
10
  return false
@@ -0,0 +1,22 @@
1
+
2
+
3
+ #########################################################################
4
+ #
5
+ #########################################################################
6
+ namespace :drg_cms do
7
+
8
+ desc "Runs all tests in test folder"
9
+ task :test do
10
+ require 'rake/testtask'
11
+ require 'rails/test_unit/sub_test_task'
12
+
13
+ # p 1, Rake.application.top_level_tasks
14
+ # p 2, Rails::TestTask.test_creator(Rake.application.top_level_tasks)
15
+ # Rails::TestTask.test_creator(Rake.application.top_level_tasks).invoke_rake_task
16
+
17
+ Rails::TestTask.new(functionals: "test:prepare") do |t|
18
+ t.pattern = 'test/{controllers,mailers,functional}/**/*_test.rb'
19
+ end
20
+ end
21
+
22
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damjan Rems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-17 00:00:00.000000000 Z
11
+ date: 2015-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -281,27 +281,14 @@ files:
281
281
  - lib/drg_cms.rb
282
282
  - lib/drg_cms/engine.rb
283
283
  - lib/drg_cms/version.rb
284
- - lib/examples/extend_database_model/dc_user.rb
285
- - lib/examples/extend_database_model/dc_user.yml
286
- - lib/examples/extend_database_model/locale_en.yml
287
- - lib/examples/extend_database_model/locale_sl.yml
288
- - lib/examples/image gallery/gallery.yml
289
- - lib/examples/image gallery/gallery_renderer.rb
290
- - lib/examples/picture gallery/gallery_renderer.rb
291
- - lib/examples/responsive/design.erb
292
- - lib/examples/responsive/mailing.rb
293
- - lib/examples/responsive/responsive.css
294
- - lib/examples/responsive/responsive_controller.rb
295
- - lib/examples/responsive/responsive_renderer.rb
296
- - lib/examples/responsive/responsive_views/_send_mail.erb
297
284
  - lib/generators/new_drg_form/USAGE
298
285
  - lib/generators/new_drg_form/new_drg_form_generator.rb
299
- - lib/tasks/at_the_beginning.yml
286
+ - lib/tasks/database.rake
300
287
  - lib/tasks/dc_at_the_beginning.rake
301
288
  - lib/tasks/dc_cleanup.rake
302
289
  - lib/tasks/log_statistics.rb
303
- - lib/tasks/send_mail.rake
304
290
  - lib/tasks/site_statistics.rake
291
+ - lib/tasks/tests.rake
305
292
  - test/drg_cms_test.rb
306
293
  - test/dummy/README.rdoc
307
294
  - test/dummy/Rakefile
@@ -1,19 +0,0 @@
1
- require_dependency DrgCms.model 'dc_user'
2
-
3
- class DcUser
4
- include DcUserConcern
5
-
6
- field :member, type: Boolean, default: false
7
- field :card_number, type: String
8
-
9
- index( { 'card_number' => 1 } )
10
-
11
- validate :my_control
12
-
13
- def my_control
14
- if member and card_number.to_s.size < 8
15
- errors.add(:card_number, "Card number is not valid!")
16
- end
17
- end
18
-
19
- end
@@ -1,11 +0,0 @@
1
-
2
- extend: drg_cms.dc_user
3
- form:
4
- tabs:
5
- tab2:
6
- 10:
7
- name: member
8
- type: check_box
9
- 20:
10
- name: card_number
11
- type: text_field
@@ -1,13 +0,0 @@
1
- en:
2
- helpers:
3
- label:
4
- dc_user:
5
- tab2: Membership
6
- member: Is member
7
- card_number: Card number
8
-
9
- help:
10
- dc_user:
11
- member: User is member of our organization
12
- card_number: Membership card number
13
-
@@ -1,13 +0,0 @@
1
- sl:
2
- helpers:
3
- label:
4
- dc_user:
5
- tab2: Članstvo
6
- member: Je član
7
- card_number: Številka kartice
8
-
9
- help:
10
- dc_user:
11
- member: Uporabnik je naš član
12
- card_number: Številka članske kartice
13
-
@@ -1,58 +0,0 @@
1
- table: dc_part
2
- index:
3
- actions:
4
- 1: new
5
-
6
- result_set:
7
- actions: standard
8
-
9
- columns:
10
- 1:
11
- name: name
12
- 2:
13
- name: div_id
14
- 3:
15
- name: updated_by
16
- eval: dc_name4_id,dc_user,name
17
- 4:
18
- name: updated_at
19
-
20
- form:
21
- actions: standard
22
- title:
23
- new: New image
24
- edit: Edit image
25
- field: name
26
- fields:
27
- 05:
28
- name: div_id
29
- type: readonly
30
- html:
31
- size: 10
32
- 10:
33
- name: name
34
- type: text_field
35
- text: Image title
36
- html:
37
- size: 50
38
- 20:
39
- name: description
40
- type: text_field
41
- text: Image description
42
- html:
43
- size: 50
44
- 30:
45
- name: thumbnail
46
- type: file_select
47
- html:
48
- size: 50
49
- 40:
50
- name: picture
51
- type: file_select
52
- html:
53
- size: 50
54
- 60:
55
- name: order
56
- type: text_field
57
- html:
58
- size: 2
@@ -1,74 +0,0 @@
1
- #coding: utf-8
2
- #--
3
- # Copyright (c) 2014+ Damjan Rems
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
- #++
24
-
25
- ########################################################################
26
- #
27
- ########################################################################
28
- class GalleryRenderer < DcRenderer
29
-
30
- #######################################################################
31
- # Will render picture gallery
32
- #######################################################################
33
- def gallery(page=nil)
34
- page ||= @parent.page
35
- return '' if page.gallery.blank?
36
- #
37
- html = '<div class="picture-gallery">'
38
- if @parent.dc_edit_mode?
39
- opts = { controller: 'cmsedit', action: 'create', formname: 'gallery',
40
- table: "#{@parent.site.page_table};dc_part", ids: page._id,
41
- 'dc_part.div_id' => page.gallery, 'dc_part.name' => page.subject,
42
- title: 'Add new picture to gallery.' }
43
- html << @parent.dc_link_for_create(opts)
44
- end
45
- html << '<h2>Picture gallery:</h2>'
46
- page.dc_parts.where(:div_id => page.gallery).order(order: 1).each do |part|
47
- html << '<span class="gallery-pic">'
48
- if @parent.dc_edit_mode?
49
- opts.merge!({ action: 'edit', ids: page._id, id: part._id, title: 'Edit picture.' })
50
- html << @parent.dc_link_for_edit(opts)
51
- end
52
- # Display thumbnail if defined. Otherwise use picture. Picture height should be limited by CSS
53
- pic = part.thumbnail.blank? ? part.picture : part.thumbnail
54
- # Use part.name as title. If not use page title (subject) field
55
- title = part.name.blank? ? page.subject : part.name
56
- html << @parent.link_to(@parent.image_tag(pic, title: title), part.picture)
57
- # Description under picture
58
- html << "<h6>#{part.description}</h6>" unless part.description.blank?
59
- html << '</span>'
60
- end
61
- # At the end we use baguetteBox javascript library to transparently display gallery on phone or pc
62
- html << @parent.javascript_tag( "baguetteBox.run('.picture-gallery', {});" )
63
- html << '</div>'
64
- end
65
-
66
- ########################################################################
67
- #
68
- ########################################################################
69
- def render_html
70
- method = @opts[:method] || 'default'
71
- respond_to?(method) ? send(method) : "#{self.class}. Method #{method} not found!"
72
- end
73
-
74
- end
@@ -1,74 +0,0 @@
1
- #coding: utf-8
2
- #--
3
- # Copyright (c) 2014+ Damjan Rems
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
- #++
24
-
25
- ########################################################################
26
- #
27
- ########################################################################
28
- class GalleryRenderer < DcRenderer
29
-
30
- #######################################################################
31
- # Will render picture gallery
32
- #######################################################################
33
- def gallery(page=nil)
34
- page = @parent.page if page.nil?
35
- return '' if page.gallery.blank?
36
- #
37
- html = '<div class="picture-gallery">'
38
- if @parent.dc_edit_mode?
39
- opts = { controller: 'cmsedit', action: 'create', formname: 'gallery',
40
- table: "#{@parent.site.page_table};dc_part", ids: page._id,
41
- 'dc_part.div_id' => page.gallery, 'dc_part.name' => page.subject,
42
- title: 'Add new picture to gallery.' }
43
- html << @parent.dc_link_for_create(opts)
44
- end
45
- html << '<h2>Picture gallery:</h2>'
46
- page.dc_parts.where(:div_id => page.gallery).order(order: 1).each do |part|
47
- html << '<span class="gallery-pic">'
48
- if @parent.dc_edit_mode?
49
- opts.merge!({ action: 'edit', ids: page._id, id: part._id, title: 'Edit picture.' })
50
- html << @parent.dc_link_for_edit(opts)
51
- end
52
- # Display thumbnail if defined. Otherwise use picture. Picture height should be limited by CSS
53
- pic = part.thumbnail.blank? ? part.picture : part.thumbnail
54
- # Use part.name as title. If not use page title (subject) field
55
- title = part.name.blank? ? page.subject : part.name
56
- html << @parent.link_to(@parent.image_tag(pic, title: title), part.picture)
57
- # Description under picture
58
- html << "<h6>#{part.description}</h6>" unless part.description.blank?
59
- html << '</span>'
60
- end
61
- # At the end we use baguetteBox javascript library to transparently display gallery on phone or pc
62
- html << @parent.javascript_tag( "baguetteBox.run('.picture-gallery', {});" )
63
- html << '</div>'
64
- end
65
-
66
- ########################################################################
67
- #
68
- ########################################################################
69
- def render_html
70
- method = @opts[:method] || 'default'
71
- respond_to?(method) ? send(method) : "#{self.class}. Method #{method} not found!"
72
- end
73
-
74
- end
@@ -1,35 +0,0 @@
1
- <!-- dc_site.design field data -->
2
- <div id="site">
3
- <ul id='meni-site' class='small-block-grid-3'>
4
- <%= dc_render(:dc_simple_menu, name: 'meni-site', method: 'as_responsive') %>
5
- </ul>
6
-
7
- <div class="site-top picture-top">
8
- <img src="/files/logos/top-bg-pic.jpg" />
9
- </div>
10
-
11
- <div id="page" class="row">
12
- <div id="div-main" class="small-12 large-7 columns">
13
- <div class="show-for-medium-down" style="padding: 10px;"><%= dc_render(:responsive, method: 'i_move') %></div>
14
- [main]
15
- </div>
16
- <div id="div-right" class="small-12 large-5 columns">
17
- <div class="show-for-medium-up"><%= dc_render(:responsive, method: 'i_move') %></div>
18
- <%= dc_render(:responsive, method: 'roller') %>
19
- <div class="na-mailing"><%= dc_render(:dc_poll, poll_id: 'mail-subscribe') %></div>
20
- <div class="na-mailing"><%= dc_render(:sport, method: 'send_mail') %></div>
21
- </div>
22
- </div>
23
-
24
- <div id="site-footer">
25
- <%= dc_render(:dc_piece, id: 'site-footer') %>
26
- </div>
27
-
28
- </div>
29
- <%= dc_render(:responsive, method: 'eu_cookies') %>
30
- <%= dc_render(:dc_common, method: 'google_analytics') %>
31
-
32
- <!-- dc_design.body field data -->
33
- <% main="\<\%= dc_render(:sport, method: 'seznam') \%\>" %>
34
-
35
- <%= dc_replace_in_design(replace: '[main]', with: main) %>
@@ -1,32 +0,0 @@
1
- #--
2
- # Copyright (c) 2012+ Damjan Rems
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # "Software"), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- class Mailing
25
- include Mongoid::Document
26
- include Mongoid::Timestamps
27
-
28
- field :email, type: String, default: ''
29
- field :active, type: Boolean, default: true
30
-
31
- validates :email, presence: true
32
- end
@@ -1,27 +0,0 @@
1
- /* This will center and automatically resize top picture. Picture size is 1280x480px */
2
- .site-top {
3
- text-align: center;
4
- position: relative;
5
- height: 0;
6
- overflow: hidden;
7
- }
8
- .picture-top { padding-bottom:37.5%; }
9
-
10
- /* Prevent too much padding when resized past 1400 px */
11
- @media screen and (min-width: 1400px) {
12
- .picture-top { padding-bottom:28%; }
13
- }
14
-
15
- #page {max-width: 820px; margin: 0 auto;}
16
-
17
- #site-footer {
18
- color: white;
19
- background: linear-gradient(#474748 4%, #191a1a 100%);
20
- }
21
- #site-footer div { max-width: 820px; margin: 0 auto;}
22
- #site-footer a {color: #fff; font-weight: normal;}
23
- #site-footer a:hover {color: #222;}
24
-
25
- @media screen and (max-width: 640px) {
26
- html { font-size: 18px; }
27
- }
@@ -1,56 +0,0 @@
1
- #coding: utf-8
2
- #--
3
- # Copyright (c) 2012-2013 Damjan Rems
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
- #++
24
- class ResponsiveController < DcApplicationController
25
- protect_from_forgery
26
-
27
- ####################################################################
28
- # Checks if email is OK.
29
- ####################################################################
30
- def email_ok(email)
31
- email = email.downcase.strip
32
- return 'e-mail is empty!' unless email.size > 0
33
- return 'e-mail is not validd!' unless email =~ /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
34
- ''
35
- end
36
-
37
- ####################################################################
38
- # This action is called when submit is selected on subscribe poll form.
39
- ####################################################################
40
- def subscribe
41
- check = emyil_ok(params[:record][:email])
42
- if check.size > 0
43
- flash[:error] = check
44
- else
45
- email = params[:record][:email].strip.downcase
46
- if Mailing.find_by(email: email)
47
- flash[:error] = 'e-mail already exists!'
48
- else
49
- Mailing.create(email: email)
50
- flash[:info] = 'e-mail recorded. Thank you for your interest.'
51
- end
52
- end
53
- redirect_to params[:return_to]
54
- end
55
-
56
- end
@@ -1,104 +0,0 @@
1
- #coding: utf-8
2
- #--
3
- # Copyright (c) 2014+ Damjan Rems
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
- #++
24
-
25
- ########################################################################
26
- #
27
- ########################################################################
28
- class ResponsiveRenderer < DcRenderer
29
-
30
- ########################################################################
31
- # i_move may move between right and main part.
32
- ########################################################################
33
- def i_move
34
- html = '<div id="i-move"><h2>I MOVE WHEN ON PHONE<h2>'
35
- html << 'Contents'
36
- html << '</div>'
37
- end
38
-
39
- ########################################################################
40
- # Roller rolls ads in it's div. With little help of slick javascript library.
41
- ########################################################################
42
- def roller
43
- html = '<div class="sponsors">'
44
- # Ads are saved in home page parts which have 'ads' written in div_id field.
45
- home = DcPage.find_by(dc_site_id: @parent.dc_get_site._id, subject_link: 'home')
46
- ads = home.dc_parts.where(div_id: 'ads')
47
- ads = ads.and(active: true) unless @parent.dc_edit_mode? # active only
48
- ads = ads.order_by(order: 1).to_a
49
- html << 'OUR SPONSORS' if ads.size > 0 or @parent.dc_edit_mode?
50
- ads.each do |ad|
51
- # Edit link for ad
52
- if @parent.dc_edit_mode?
53
- opts = { controller: 'cmsedit', action: 'edit', formname: 'ad',
54
- table: "#{@parent.site.page_table};dc_part", ids: home._id,
55
- id: ad._id, title: 'Edit sponsor\'s ad.' }
56
- html << @parent.dc_link_for_edit(opts)
57
- end
58
- html << "<div>#{@parent.link_to(@parent.image_tag(ad.picture),ad.link, target: '_blank')}</div>"
59
- end
60
- # Link for new ad
61
- if @parent.dc_edit_mode?
62
- opts = { controller: 'cmsedit', action: 'create', formname: 'ad',
63
- table: "#{@parent.site.page_table};dc_part", ids: home._id,
64
- 'dc_part.div_id' => 'ads', title: 'Add new sponsor\'s ad!' }
65
- html << @parent.dc_link_for_create(opts)
66
- end
67
- html << '</div>'
68
- html << @parent.javascript_tag( "$('.sponsors').slick({
69
- autoplay: true, infinite: true, autoplaySpeed: 2000, speed: 2000,
70
- arrows: false});" ) unless @parent.dc_edit_mode?
71
- html
72
- end
73
-
74
- ########################################################################
75
- # EU cookies message.
76
- ########################################################################
77
- def eu_cookies
78
- html =<<EOT
79
- <div id="cookies-msg">
80
- Our web site is using cookies in order to ensure best user experience.
81
- By visiting our web site you agree to our conditions.
82
- <span class="cookies-yes">Close</span>
83
- #{@parent.link_to('More information about cookies!','/cookies')}
84
- </div>
85
- EOT
86
- html.html_safe
87
- end
88
-
89
- ########################################################################
90
- # Send mail dialog. Data can also be rendered by Rails render method.
91
- ########################################################################
92
- def send_mail
93
- @parent.render(partial: 'responsive_views/send_email')
94
- end
95
-
96
- ########################################################################
97
- #
98
- ########################################################################
99
- def render_html
100
- method = @opts[:method] || 'default'
101
- respond_to?(method) ? send(method) : "#{self.class}. Method #{method} not found!"
102
- end
103
-
104
- end
@@ -1,4 +0,0 @@
1
- <div id="mailing"><div class="reklame">DO YOU HAVE AN IDEA?</div>
2
- <a href="mailto:info.address@mysite.com?subject=Suggestion%20from%20www.mysite.com">
3
- <%= fa_icon('envelope 2x') %>Click and send as an email.</a>
4
- </div>
@@ -1,26 +0,0 @@
1
- ## YAML Template.
2
- dc_poll:
3
- name: login
4
- display: td
5
- operation: link
6
- parameters: '/dc_common/process_login'
7
- title: Autocreated login form
8
-
9
- dc_poll_items:
10
- 1:
11
- type: text_field
12
- name: username
13
- size: 15
14
- text: Username
15
-
16
- 2:
17
- type: password_field
18
- name: password
19
- size: 15
20
- text: Password
21
-
22
- 3:
23
- type: submit_tag
24
- name: send
25
- text: Login
26
-
@@ -1,253 +0,0 @@
1
- #coding: utf-8
2
- require 'net/smtp'
3
- Rake.application.options.trace = true
4
-
5
- ##############################################################################
6
- # Add style to message body.
7
- ##############################################################################
8
- def get_body(doc)
9
- style =<<EOT
10
- <style>
11
- body {font-family: sans-serif;font-size:12px;}
12
- </style>
13
- EOT
14
- "#{style}#{doc.body}"
15
- end
16
-
17
- ###########################################################################
18
- # Actually sends mail to mail server
19
- ###########################################################################
20
- def smtp_send(mail)
21
- smtp = Net::SMTP.start( ActionMailer::Base.smtp_settings[:address] )
22
- begin
23
- smtp.send_message mail.to_s, 'pmaster@ozs.si', mail.to
24
- $mail_sent << mail.to
25
- rescue Exception => exc
26
- p "#{mail.to} : #{exc.message}"
27
- $mail_errors << "#{mail.to} : #{exc.message}\n"
28
- ensure
29
- smtp.finish
30
- end
31
- sleep 0.4
32
- end
33
- =begin
34
- ##############################################################################
35
- # Include pictures as inline attachments and update coresponding links in the message.
36
- ##############################################################################
37
- def update_attachments(doc)
38
- offset = 0
39
- # find img tags
40
- while i1 = doc.body.index('<img', offset)
41
- i2 = doc.body.index('/>', i1) + 1
42
- # find src tag
43
- s1 = doc.body.index('src="', i1) + 6
44
- s2 = doc.body.index('"', s1) - 1
45
- filename = doc.body[s1..s2]
46
- cid = File.basename(filename)
47
- # read file into inline attachments and replace link with new link
48
- attachments.inline[cid] = File.read( Rails.root.join('public', filename) )
49
- doc.body[(s1-1)..s2] = "cid:#{cid}"
50
- #
51
- offset = i1 + 10 # just in case ..
52
- # replace style with pure html height= and width= because inline style doesn't work in mailers. At least not in outlook.
53
- s1 = doc.body.index('style="', i1) + 7
54
- next if s1.nil? or s1 > i2 # style might not be present
55
- s2 = doc.body.index('"', s1) - 1
56
- style = doc.body[s1..s2]
57
- h_w = ''
58
- style.split(';').each do |hw|
59
- a = hw.split(':')
60
- h_w << "#{a.first}='#{a.last.strip.gsub('px','')}' "
61
- end
62
- doc.body[(s1-7)..s2] = h_w
63
- end
64
- end
65
- =end
66
- ##############################################################################
67
- # Include pictures as inline attachments and update coresponding links in the message.
68
- ##############################################################################
69
- def update_attachments(docbody, mail)
70
- offset, n = 0, 0
71
- # find img tags
72
- while i1 = docbody.index('<img', offset)
73
- i2 = docbody.index('/>', i1) + 1
74
- # find src tag
75
- s1 = docbody.index('src="', i1) + 6
76
- s2 = docbody.index('"', s1) - 1
77
- filename = docbody[s1..s2]
78
- cid = File.basename(filename)
79
- # read file into inline attachments and replace link with new link
80
- mail.attachments[cid] = File.read( Rails.root.join('public', filename) )
81
- mail.parts[n].content_id = cid
82
- mail.parts[n].content_disposition = "inline; filename=#{cid}"
83
-
84
- # attachments.inline[cid] = File.read( Rails.root.join('public', filename) )
85
- docbody[(s1-1)..s2] = "cid:#{cid}"
86
- n += 1
87
- #
88
- offset = i1 + 10 # just in case ..
89
- # replace style with pure html height= and width= because inline style doesn't work in mailers. At least not in outlook.
90
- s1 = docbody.index('style="', i1) + 7
91
- next if s1.nil? or s1 > i2 # style might not be present
92
- s2 = docbody.index('"', s1) - 1
93
- style = docbody[s1..s2]
94
- h_w = ''
95
- style.split(';').each do |hw|
96
- a = hw.split(':')
97
- h_w << "#{a.first}='#{a.last.strip.gsub('px','')}' "
98
- end
99
- docbody[(s1-7)..s2] = h_w
100
- end
101
- end
102
-
103
- ##############################################################################
104
- # Send document to test e-mail address
105
- ##############################################################################
106
- def send_test(doc)
107
- mail = Mail.new
108
- mail.to = doc.to_test
109
- mail.subject = doc.subject
110
- mail.from = doc.from
111
- update_attachments(doc, mail)
112
- #
113
- body = (doc.css.to_s.size > 5 ? "<style type=\"text/css\">#{doc.css}</style>" : '') + doc.body
114
- html = Mail::Part.new do
115
- content_type 'text/html; charset=UTF8'
116
- body body
117
- end
118
- mail.html_part = html
119
- smtp_send(mail)
120
- end
121
-
122
- ##############################################################################
123
- # Returns array of addresses mail will be send to.
124
- ##############################################################################
125
- def get_adresses(doc)
126
- a = []
127
- # direct specified addresses
128
- if doc.to_address.size > 5
129
- doc.to_address.split("\n").each do |line|
130
- doc.to_address.split(/,|;| /).each { |address| a << [address.strip.downcase] }
131
- end
132
- end
133
- # maling lists
134
- doc.to_list.each do |id|
135
- list = DcMailList.find(id)
136
- DcMailAddress.where('dc_mail_list_members.dc_mail_list_id' => id, active: true).each do |addr|
137
- address = ''
138
- if addr.email.to_s.size > 5
139
- address = addr.email
140
- elsif addr.dc_user_id
141
- address = DcUser.find(addr.dc_user_id).email.to_s
142
- end
143
- a << [address.strip.downcase, addr.id] if address.size > 1
144
- end
145
- end
146
- # return only unique addresses
147
- a.uniq { |s| s.first }
148
- end
149
-
150
- ##############################################################################
151
- # Send document to defined recipients
152
- ##############################################################################
153
- def sending(doc)
154
- addresses = get_adresses(doc)
155
-
156
- # Write list of all addresses to file. Very useful when something gets wrong
157
- File.open(Rails.root.join('log/sendmail.list'),'w') {|f| f.write(addresses.join("\n")) }
158
- addresses.each do |a|
159
- mail = Mail.new
160
- mail.subject = doc.subject
161
- mail.from = doc.from
162
- docbody = doc.body.dup
163
- update_attachments(docbody, mail)
164
- url = "<a href=\"http://#{doc.dc_site.name}/dc_mail/unsubscribe?id_list=#{a.last}\">#{I18n.t('drgcms.dc_mail.unsubscription')}</a>"
165
- #
166
- body = (doc.css.to_s.size > 5 ? "<style type=\"text/css\">#{doc.css}</style>" : '')
167
- body << docbody.sub('%{unsubscription}', url)
168
- part = Mail::Part.new do
169
- content_type 'text/html; charset=UTF8'
170
- body body
171
- end
172
- mail.html_part = part
173
- mail.to = a.first
174
- smtp_send(mail)
175
- end
176
- end
177
-
178
- ##############################################################################
179
- # Send document to test e-mail address
180
- ##############################################################################
181
- def send_report(doc, text, status = :ok)
182
- mail = Mail.new
183
- mail.to = doc.from
184
- mail.subject = "#{(status == :ok ? '' : I18n.t('drgcms.error'))}#{I18n.t('drgcms.dc_mail.report')}: #{doc.subject}"
185
- mail.from = 'SENDMAIL REPORT'
186
- html = Mail::Part.new do
187
- content_type 'text/html; charset=UTF8'
188
- body text.gsub("\n",'<br>')
189
- end
190
- smtp_send(mail)
191
- end
192
-
193
- namespace :drg_cms do
194
- namespace :sendmail do
195
- ###########################################################################
196
- # sendmail:test
197
- ###########################################################################
198
- desc 'Sends mail to test recipient!'
199
-
200
- task :test => :environment do
201
- begin
202
- id = ENV["MAIL_ID"] || '517a7eb27246cd2958000104'
203
- doc = DcMail.find(id)
204
- send_test(doc)
205
- rescue Exception => exc
206
- stack = "\n#{Time.now.strftime('%d.%m.%Y %H:%M')}:#{exc.to_s} + \n"
207
- exc.backtrace.each {|c| stack << "#{c}\n" }
208
- p stack.to_yaml
209
- File.open(Rails.root.join('log/error.log'),'a+') {|f| f.write(stack) }
210
- send_report(doc)
211
- end
212
- end
213
-
214
- ###########################################################################
215
- # sendmail:send
216
- ###########################################################################
217
- desc 'Sends mail to all recipients!'
218
-
219
- task :sending => :environment do
220
- $mail_errors, $mail_sent = [], []
221
- ok = false
222
- begin
223
- id = ENV["MAIL_ID"] || '517a7eb27246cd2958000104'
224
- doc = DcMail.find(id)
225
- if doc.status == 1 # status must be ready
226
- doc.status = 2; doc.save
227
- sending(doc)
228
- else
229
- send_report(doc, I18n.t('drgcms.dc_mail.message_status_error'), :error )
230
- end
231
- ok = true
232
- rescue Exception => exc
233
- stack = "ERROR! rake drgcms:sendmail:send\n\n#{Time.now.strftime('%d.%m.%Y %H:%M')}:#{exc.to_s} \n"
234
- exc.backtrace.each {|c| stack << "#{c}\n\n" }
235
- stack << "Last OK mail sent:#{$mail_sent.last}\n"
236
- p stack.to_yaml
237
- File.open(Rails.root.join('log/error.log'),'a+') {|f| f.write(stack) }
238
- send_report(doc, stack, :error )
239
- doc.status = 3; doc.save
240
- end
241
- # Send report if OK
242
- if ok
243
- msg = I18n.t('drgcms.dc_mail.message_sent_to', :number => $mail_sent.size) + "\n\n"
244
- msg << I18n.t('drgcms.dc_mail.message_errors', :number => $mail_errors.size) + "\n"
245
- msg << $mail_errors.join("\n")
246
- doc.status = 10; doc.save
247
- send_report(doc, msg)
248
- end
249
- end
250
-
251
- end
252
- end
253
-