infopark_rails_connector 6.8.0.beta.200.621.4c8e1b0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/README +59 -0
  2. data/app/assets/images/admin/minus.gif +0 -0
  3. data/app/assets/images/bg80.png +0 -0
  4. data/app/assets/images/edit.png +0 -0
  5. data/app/assets/images/icons/mm_generic.png +0 -0
  6. data/app/assets/images/icons/mm_menu.png +0 -0
  7. data/app/assets/images/ratings/star.gif +0 -0
  8. data/app/assets/images/time_machine/calendar-menuarrow.gif +0 -0
  9. data/app/assets/images/time_machine/calendar_bg.png +0 -0
  10. data/app/assets/images/time_machine/icon.png +0 -0
  11. data/app/assets/images/time_machine/slider_bg.png +0 -0
  12. data/app/assets/images/time_machine/slider_handle.png +0 -0
  13. data/app/assets/images/time_machine/timemachine_bg.png +0 -0
  14. data/app/assets/javascripts/comments.js +29 -0
  15. data/app/assets/javascripts/editmarker.js +240 -0
  16. data/app/assets/javascripts/infopark_rails_connector.js.erb +3 -0
  17. data/app/assets/javascripts/initializer.js +9 -0
  18. data/app/assets/javascripts/ratings.js +26 -0
  19. data/app/assets/javascripts/time_machine/calendar-setup.js +200 -0
  20. data/app/assets/javascripts/time_machine/calendar.js +1806 -0
  21. data/app/assets/javascripts/time_machine/lang/calendar-de.js +127 -0
  22. data/app/assets/javascripts/time_machine/lang/calendar-en.js +127 -0
  23. data/app/assets/javascripts/time_machine/lang/calendar-es.js +129 -0
  24. data/app/assets/javascripts/time_machine/lang/calendar-fr.js +125 -0
  25. data/app/assets/javascripts/time_machine/lang/calendar-it.js +124 -0
  26. data/app/assets/javascripts/time_machine/slider.js +278 -0
  27. data/app/assets/javascripts/time_machine.js +8 -0
  28. data/app/assets/stylesheets/editmarker.css +70 -0
  29. data/app/assets/stylesheets/infopark_rails_connector.css.erb +4 -0
  30. data/app/assets/stylesheets/ratings.css +97 -0
  31. data/app/assets/stylesheets/time_machine/time_machine.css +292 -0
  32. data/app/assets/stylesheets/time_machine.css +6 -0
  33. data/app/controllers/cms_controller.rb +6 -0
  34. data/app/controllers/comments_controller.rb +6 -0
  35. data/app/controllers/crm_form_controller.rb +2 -0
  36. data/app/controllers/pdf_controller.rb +6 -0
  37. data/app/controllers/rails_connector/default_cms_controller.rb +40 -0
  38. data/app/controllers/rails_connector/default_comments_controller.rb +71 -0
  39. data/app/controllers/rails_connector/default_crm_form_controller.rb +167 -0
  40. data/app/controllers/rails_connector/default_pdf_controller.rb +136 -0
  41. data/app/controllers/rails_connector/default_ratings_controller.rb +84 -0
  42. data/app/controllers/rails_connector/default_rss_controller.rb +29 -0
  43. data/app/controllers/rails_connector/default_search_controller.rb +60 -0
  44. data/app/controllers/rails_connector/default_user_controller.rb +267 -0
  45. data/app/controllers/rails_connector/pdf_external_controller.rb +54 -0
  46. data/app/controllers/rails_connector/time_machine_controller.rb +48 -0
  47. data/app/controllers/ratings_controller.rb +6 -0
  48. data/app/controllers/rss_controller.rb +6 -0
  49. data/app/controllers/search_controller.rb +2 -0
  50. data/app/controllers/seo_sitemap_controller.rb +12 -0
  51. data/app/controllers/user_controller.rb +2 -0
  52. data/app/helpers/cms_helper.rb +6 -0
  53. data/app/helpers/cms_routing_helper.rb +6 -0
  54. data/app/helpers/crm_form_helper.rb +3 -0
  55. data/app/helpers/rails_connector/cms_asset_helper.rb +51 -0
  56. data/app/helpers/rails_connector/default_cms_helper.rb +27 -0
  57. data/app/helpers/rails_connector/default_cms_routing_helper.rb +93 -0
  58. data/app/helpers/rails_connector/default_crm_form_helper.rb +58 -0
  59. data/app/helpers/rails_connector/default_ratings_helper.rb +38 -0
  60. data/app/helpers/rails_connector/default_user_helper.rb +90 -0
  61. data/app/helpers/rails_connector/display_helper.rb +117 -0
  62. data/app/helpers/rails_connector/error_messages_helper.rb +23 -0
  63. data/app/helpers/rails_connector/layout_helper.rb +30 -0
  64. data/app/helpers/rails_connector/link_helper.rb +88 -0
  65. data/app/helpers/rails_connector/mandatory_label_helper.rb +10 -0
  66. data/app/helpers/rails_connector/marker_helper.rb +363 -0
  67. data/app/helpers/rails_connector/menu_helper.rb +72 -0
  68. data/app/helpers/rails_connector/micronav_helper.rb +107 -0
  69. data/app/helpers/rails_connector/seo_helper.rb +44 -0
  70. data/app/helpers/rails_connector/table_of_contents_helper.rb +20 -0
  71. data/app/helpers/rails_connector/time_machine_helper.rb +24 -0
  72. data/app/helpers/rails_connector/tracking_helper.rb +32 -0
  73. data/app/helpers/ratings_helper.rb +4 -0
  74. data/app/helpers/user_helper.rb +3 -0
  75. data/app/mailers/confirmation_mailer.rb +13 -0
  76. data/app/models/crm_form.rb +2 -0
  77. data/app/models/named_link.rb +2 -0
  78. data/app/models/obj.rb +9 -0
  79. data/app/models/rails_connector/default_comment.rb +28 -0
  80. data/app/models/rails_connector/default_rating.rb +20 -0
  81. data/app/models/rails_connector/link_list.rb +30 -0
  82. data/app/views/cms/_comments.html.erb +44 -0
  83. data/app/views/cms/_index.html.erb +7 -0
  84. data/app/views/cms/_rating.html.erb +31 -0
  85. data/app/views/cms/index.html.erb +3 -0
  86. data/app/views/comments/_comment.html.erb +28 -0
  87. data/app/views/confirmation_mailer/register_confirmation.erb +5 -0
  88. data/app/views/confirmation_mailer/reset_password.erb +5 -0
  89. data/app/views/crm_form/_flash_messages.html.erb +11 -0
  90. data/app/views/crm_form/_form.html.erb +17 -0
  91. data/app/views/crm_form/confirmation.html.erb +3 -0
  92. data/app/views/crm_form/index.html.erb +5 -0
  93. data/app/views/crm_form/not_logged_in.html.erb +1 -0
  94. data/app/views/errors/403_forbidden.html.erb +3 -0
  95. data/app/views/errors/410_gone.html.erb +7 -0
  96. data/app/views/layouts/rails_connector/time_machine.html.erb +12 -0
  97. data/app/views/pdf/index.html.erb +7 -0
  98. data/app/views/pdf/index.xsl +1240 -0
  99. data/app/views/rails_connector/time_machine/index.html.erb +88 -0
  100. data/app/views/rss/_item.rss.builder +11 -0
  101. data/app/views/rss/index.rss.builder +11 -0
  102. data/app/views/search/_hit.html.erb +12 -0
  103. data/app/views/search/_hits.html.erb +11 -0
  104. data/app/views/search/_mini_panel.html.erb +4 -0
  105. data/app/views/search/_pagination.html.erb +5 -0
  106. data/app/views/search/_panel.html.erb +4 -0
  107. data/app/views/search/search.html.erb +12 -0
  108. data/app/views/seo_sitemap/show.xml.builder +16 -0
  109. data/app/views/user/_flash_messages.html.erb +11 -0
  110. data/app/views/user/edit.html.erb +6 -0
  111. data/app/views/user/edit_password.html.erb +11 -0
  112. data/app/views/user/forgot_password.html.erb +7 -0
  113. data/app/views/user/login.html.erb +15 -0
  114. data/app/views/user/new.html.erb +11 -0
  115. data/app/views/user/profile.html.erb +8 -0
  116. data/app/views/user/register_pending.html.erb +1 -0
  117. data/app/views/user/set_password.html.erb +14 -0
  118. data/config/cms_routes.rb +13 -0
  119. data/config/locales/de.rails_connector.controllers.yml +30 -0
  120. data/config/locales/de.rails_connector.errors.yml +11 -0
  121. data/config/locales/de.rails_connector.helpers.yml +9 -0
  122. data/config/locales/de.rails_connector.lib.yml +6 -0
  123. data/config/locales/de.rails_connector.models.yml +8 -0
  124. data/config/locales/de.rails_connector.views.yml +87 -0
  125. data/config/locales/en.rails_connector.controllers.yml +30 -0
  126. data/config/locales/en.rails_connector.errors.yml +10 -0
  127. data/config/locales/en.rails_connector.helpers.yml +9 -0
  128. data/config/locales/en.rails_connector.lib.yml +6 -0
  129. data/config/locales/en.rails_connector.models.yml +8 -0
  130. data/config/locales/en.rails_connector.views.yml +87 -0
  131. data/config/routes.rb +37 -0
  132. data/lib/generators/rails_connector/comments/comments_generator.rb +21 -0
  133. data/lib/generators/rails_connector/comments/templates/migration.rb +17 -0
  134. data/lib/generators/rails_connector/install/install_generator.rb +38 -0
  135. data/lib/generators/rails_connector/install/templates/initializers/rails_connector.rb +58 -0
  136. data/lib/generators/rails_connector/install/templates/local/configuration.rb +2 -0
  137. data/lib/generators/rails_connector/install/templates/obj_extensions.rb +25 -0
  138. data/lib/generators/rails_connector/ratings/ratings_generator.rb +21 -0
  139. data/lib/generators/rails_connector/ratings/templates/migration.rb +15 -0
  140. data/lib/infopark_rails_connector.rb +31 -0
  141. data/lib/obj_extensions.rb +6 -0
  142. data/lib/rails_connector/authenticable.rb +30 -0
  143. data/lib/rails_connector/cms_accessible.rb +114 -0
  144. data/lib/rails_connector/cms_dispatch_controller.rb +47 -0
  145. data/lib/rails_connector/cms_env.rb +55 -0
  146. data/lib/rails_connector/cms_test_request.rb +23 -0
  147. data/lib/rails_connector/commentable.rb +23 -0
  148. data/lib/rails_connector/configuration/google_analytics.rb +29 -0
  149. data/lib/rails_connector/configuration/pdf_generator.rb +15 -0
  150. data/lib/rails_connector/configuration/rss.rb +46 -0
  151. data/lib/rails_connector/configuration.rb +235 -0
  152. data/lib/rails_connector/core_extensions/time.rb +18 -0
  153. data/lib/rails_connector/core_extensions.rb +1 -0
  154. data/lib/rails_connector/crm.rb +282 -0
  155. data/lib/rails_connector/engine.rb +78 -0
  156. data/lib/rails_connector/fop.rb +18 -0
  157. data/lib/rails_connector/fop_on_rails/document/dom_tree.rb +42 -0
  158. data/lib/rails_connector/fop_on_rails/document/images.rb +34 -0
  159. data/lib/rails_connector/fop_on_rails/document/tables.rb +67 -0
  160. data/lib/rails_connector/fop_on_rails/document.rb +25 -0
  161. data/lib/rails_connector/fop_on_rails.rb +92 -0
  162. data/lib/rails_connector/googlebot_checker.rb +47 -0
  163. data/lib/rails_connector/html_string.rb +19 -0
  164. data/lib/rails_connector/infopark_base.rb +2 -0
  165. data/lib/rails_connector/link_resolvable.rb +9 -0
  166. data/lib/rails_connector/liquid_support/action_marker.rb +69 -0
  167. data/lib/rails_connector/liquid_support/field_value_drop.rb +22 -0
  168. data/lib/rails_connector/liquid_support/general_helper_tag.rb +44 -0
  169. data/lib/rails_connector/liquid_support/link_drop.rb +22 -0
  170. data/lib/rails_connector/liquid_support/liquid_template_handler.rb +162 -0
  171. data/lib/rails_connector/liquid_support/named_object_drop.rb +14 -0
  172. data/lib/rails_connector/liquid_support/obj_drop.rb +43 -0
  173. data/lib/rails_connector/liquid_support/obj_filters.rb +77 -0
  174. data/lib/rails_connector/liquid_support.rb +23 -0
  175. data/lib/rails_connector/markdown_string.rb +19 -0
  176. data/lib/rails_connector/rateable.rb +57 -0
  177. data/lib/rails_connector/seo.rb +52 -0
  178. data/lib/rails_connector/ses.rb +72 -0
  179. data/lib/rails_connector/string_tagging.rb +29 -0
  180. data/lib/rails_connector/syndicateable.rb +11 -0
  181. data/lib/search_request.rb +2 -0
  182. data/lib/tasks/check.rake +25 -0
  183. data/lib/tasks/cms_license_check.rake +17 -0
  184. metadata +489 -0
@@ -0,0 +1,235 @@
1
+ require "helpful_configuration"
2
+
3
+ require "rails_connector/cms_base_model"
4
+ require "rails_connector/blob"
5
+
6
+ module RailsConnector
7
+
8
+ # RailsConnector::Configuration is used to en/disable and initialize addons.
9
+ class Configuration
10
+ DEFAULT_MODE = :live
11
+
12
+ #
13
+ # Default fields which the +DefaultUserController+ will store in the session.
14
+ #
15
+ DEFAULT_STORE_USER_ATTRS_IN_SESSION = [:login, :first_name, :last_name, :email, :id]
16
+
17
+ @features = {}
18
+
19
+ class << self
20
+ # Automatically generate editmarkers when rendering liquid templates in editor mode.
21
+ attr_accessor :auto_liquid_editmarkers
22
+
23
+ # there are three available modes for the rails connector:
24
+ # <tt>live</tt> (show released contents only),
25
+ # <tt>preview</tt> (show edited contents)
26
+ # <tt>editor</tt> (show edited contents and editor interface (e.g. edit markers))
27
+ # Default mode is <tt>live</tt>.
28
+ attr_accessor :mode
29
+
30
+ # default options for SearchRequest
31
+ attr_writer :search_options
32
+
33
+ def search_options
34
+ @search_options || local_config_file["search"].symbolize_keys
35
+ end
36
+
37
+ def mode=(new_mode) #:nodoc:#
38
+ new_mode = new_mode.to_sym
39
+ raise ArgumentError, "Unknown Mode #{new_mode}" unless [:editor, :preview, :live].include?(new_mode)
40
+ @mode = new_mode
41
+ end
42
+
43
+ def mode #:nodoc:#
44
+ @mode || DEFAULT_MODE
45
+ end
46
+
47
+ #
48
+ # Sets the array of fields which the +DefaultUserController+ will store in the session.
49
+ # Defaults to +DEFAULT_STORE_USER_ATTRS_IN_SESSION+.
50
+ #
51
+ attr_writer :store_user_attrs_in_session
52
+
53
+ #
54
+ # Returns fields which the +DefaultUserController+ stores in the session.
55
+ #
56
+ def store_user_attrs_in_session
57
+ @store_user_attrs_in_session || DEFAULT_STORE_USER_ATTRS_IN_SESSION
58
+ end
59
+
60
+ def editor_interface_enabled? #:nodoc:#
61
+ mode == :editor
62
+ end
63
+
64
+ def use_edited_content? #:nodoc:#
65
+ mode == :preview || mode == :editor
66
+ end
67
+
68
+ def register_features(*features) #:nodoc:
69
+ features.each do |f|
70
+ @features.merge!(f.to_sym => false)
71
+ end
72
+ end
73
+ alias :register_feature :register_features
74
+
75
+ def registered_features #:nodoc:
76
+ @features.keys
77
+ end
78
+
79
+ # Rails Connector Addons can be enabled as follows (in <tt>config/rails_connector.rb</tt>):
80
+ #
81
+ # RailsConnector::Configuration.enable(
82
+ # :search,
83
+ # :time_machine,
84
+ # :pdf_generator,
85
+ # :crm
86
+ # )
87
+ #
88
+ def enable(*features)
89
+ features.each do |f|
90
+ assert_feature_is_known(f)
91
+ @features[f.to_sym] = true
92
+ end
93
+ initialize_addon_mixins
94
+ end
95
+
96
+ # Returns true if +feature+ is enabled, else false.
97
+ def enabled?(feature)
98
+ assert_feature_is_known(feature)
99
+ @features[feature.to_sym] == true
100
+ end
101
+
102
+ # Configures your CMS instance name.
103
+ #
104
+ # Example call as to be used in <tt>rails_connector.rb</tt>:
105
+ # RailsConnector::Configuration.instance_name = 'internet'
106
+ def instance_name=(name)
107
+ RailsConnector::CmsBaseModel.instance_name = name
108
+ end
109
+
110
+ def after_initialize #:nodoc:
111
+ enable_authentication
112
+ # Hier muss explizit der Namespace verwendet werden, da diese Methode von Rails
113
+ # während der Initialisierung aufgerufen wird.
114
+ ::RailsConnector::Obj.configure_for_content(
115
+ ::RailsConnector::Configuration.use_edited_content? ? :edited : :released
116
+ )
117
+ end
118
+
119
+ def to_prepare #:nodoc:
120
+ unless Rails.configuration.cache_classes
121
+ after_initialize
122
+ NamedLink.reset_cache
123
+ initialize_addon_mixins
124
+ end
125
+ end
126
+
127
+ def configure_cms_database
128
+ if RailsConnector::CmsBaseModel.superclass.to_s == "ActiveRecord::Base"
129
+ CmsBaseModel.configure_database("cms")
130
+ else
131
+ CmsBaseModel.configure_database(local_config_file["cms_database"])
132
+ Blob.configure(local_config_file["cms_blob_storage"])
133
+ end
134
+ end
135
+
136
+ def license #:nodoc:
137
+ license_file.read
138
+ end
139
+
140
+ def license_file #:nodoc:
141
+ @license_file.presence || Rails.root + "config" + "license.xml"
142
+ end
143
+
144
+ def license_file=(license_file) #:nodoc:
145
+ @license_file = license_file.presence && Pathname(license_file)
146
+ end
147
+
148
+ def cms_routes(*args) #:nodoc:
149
+ raise <<-EOS.gsub(/\s+/, ' ')
150
+ Calling RailsConnector::Configuration.cms_routes is not needed anymore.
151
+ Please remove it from config/routes.rb
152
+ EOS
153
+ end
154
+
155
+ def use_x_sendfile=(value) #:nodoc:
156
+ raise 'Configuration.use_x_sendfile is now available as Rails configuration:'\
157
+ ' config.action_dispatch.x_sendfile_header = "X-Sendfile"'
158
+ end
159
+
160
+ def initialize_addon_mixins #:nodoc:
161
+ ::ApplicationController.__send__(:helper, :cms)
162
+ if enabled?(:search)
163
+ require "rails_connector/ses"
164
+ RailsConnector::SES.enable
165
+ end
166
+ RailsConnector::Crm.enable if enabled?(:crm)
167
+ ::Obj.__send__(:include, RailsConnector::Syndicateable) if enabled?(:rss)
168
+ ::Obj.__send__(:include, RailsConnector::Commentable) if enabled?(:comments)
169
+ ::Obj.__send__(:include, RailsConnector::Rateable) if enabled?(:ratings)
170
+ end
171
+
172
+ def local_config_file #:nodoc:
173
+ @local_config_file ||= read_local_config_file
174
+ end
175
+
176
+ def local_config_file_name #:nodoc:
177
+ (Rails.root + "config/rails_connector.yml").expand_path
178
+ end
179
+
180
+ # for test purposes only
181
+ def reset_local_config_file_cache #:nodoc:
182
+ @local_config_file = nil
183
+ end
184
+
185
+ protected
186
+
187
+ def read_local_config_file
188
+ contents = YAML.load_file(local_config_file_name) if File.exists?(local_config_file_name)
189
+ contents ||= {}
190
+
191
+ config = HelpfulConfiguration.new(
192
+ contents,
193
+ local_config_file_name
194
+ )
195
+ config.explain(
196
+ "cms_database",
197
+ "a hash of options, including type, that specify the database configuration"
198
+ )
199
+ config.explain(
200
+ "cms_blob_storage",
201
+ "a hash of options, including type, that specify the cms blob storage configuration"
202
+ )
203
+ config.explain(
204
+ "search",
205
+ "a hash of options that specify access to the search server"
206
+ )
207
+
208
+ config
209
+ end
210
+
211
+ def assert_feature_is_known(f) #:nodoc:
212
+ raise ArgumentError, "unknown feature: #{f.inspect}" unless @features.keys.include?(f.to_sym)
213
+ end
214
+
215
+ def enable_authentication #:nodoc:
216
+ # Wenn das OMC-Features an ist, dann braucht man keine Standardimplementierung
217
+ # für die Authentifizierung.
218
+ unless enabled?(:crm)
219
+ ::ApplicationController.__send__(:include, RailsConnector::Authenticable)
220
+ end
221
+ end
222
+ end
223
+
224
+ # defaults
225
+ self.auto_liquid_editmarkers = true
226
+
227
+ register_features(
228
+ :search, :time_machine, :pdf_generator, :rss, :comments, :ratings,
229
+ :crm, :seo_sitemap, :google_analytics
230
+ )
231
+ end
232
+
233
+ class ConfigurationError < StandardError # :nodoc:
234
+ end
235
+ end
@@ -0,0 +1,18 @@
1
+ class Time #:nodoc:
2
+
3
+ # Returns a new Time created from the ISO date format String "YYYYMMDDhhmmss"
4
+ def self.from_iso(t)
5
+ return nil unless t
6
+ if t.to_s =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/
7
+ utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i)
8
+ else
9
+ raise ArgumentError, "invalid iso time format: #{t}"
10
+ end
11
+ end
12
+
13
+ # Returns the Time as ISO date format String "YYYYMMDDhhmmss"
14
+ def to_iso
15
+ getutc.strftime('%Y%m%d%H%M%S')
16
+ end
17
+
18
+ end
@@ -0,0 +1 @@
1
+ require "rails_connector/core_extensions/time"
@@ -0,0 +1,282 @@
1
+ module RailsConnector
2
+
3
+ # This module provides high-level access to the Infopark Online Marketing Cockpit.
4
+ #
5
+ # Methods from the +AuthenticationSupport+ module are included
6
+ # in all controllers when enabling the Crm feature in your RailsConnector configuration:
7
+ #
8
+ # RailsConnector::Configuration.enable(
9
+ # :crm
10
+ # )
11
+ module Crm
12
+
13
+ # This method requires the omc_connector gem.
14
+ #
15
+ # If the gem is available, it does the following:
16
+ # * require it
17
+ # * include +AuthenticationSupport+ in +ApplicationController+
18
+ # * declares helper methods in +ApplicationController+
19
+ # * adds a class-inheritable array to +ApplicationController+ for convenience
20
+ # (see +session_attributes_for+)
21
+ #
22
+ # If not, it raises a +LoadError+.
23
+ def self.enable #:nodoc:
24
+ require 'infopark_crm_connector'
25
+ ApplicationController.__send__(:include, AuthenticationSupport)
26
+ end
27
+
28
+ module AuthenticationSupport
29
+
30
+ protected
31
+
32
+ def self.included(base) # :nodoc:
33
+ base.helper_method :logged_in?, :current_user, :admin?
34
+ end
35
+
36
+ #
37
+ # Returns a hash of attributes for the given user that are to be stored in the session.
38
+ #
39
+ # Uses the array +RailsConnector::Configuration.store_user_attrs_in_session+ to determine which
40
+ # fields to store.
41
+ # Because the field <tt>:id</tt> must always be stored in the session, it is always in the array
42
+ # returned by +session_attributes_for+, independent on the fields specified by
43
+ # +RailsConnector::Configuration.store_user_attrs_in_session+.
44
+ #
45
+ # User live_server_groups are stored in the session by default.
46
+ #
47
+ def session_attributes_for(user) # :nodoc:
48
+ attributes = {}
49
+ serialized_attributes = \
50
+ user.attributes.merge(:live_server_groups => user.live_server_groups).symbolize_keys
51
+ (RailsConnector::Configuration.store_user_attrs_in_session + [:id]).each do |attr|
52
+ attributes[attr.to_sym] = serialized_attributes[attr.to_sym]
53
+ end
54
+ attributes[:live_server_groups] = serialized_attributes[:live_server_groups]
55
+ attributes
56
+ end
57
+
58
+ # Determines if the user is logged in.
59
+ # Defined as helper method in +ApplicationController+ when enabling the Crm feature.
60
+ def logged_in?
61
+ !session[:user].blank?
62
+ end
63
+
64
+ #
65
+ # Returns a +Contact+ object with attributes stored in the session.
66
+ #
67
+ # To change which fields +DefaultUserController+ stores in the session use
68
+ # +RailsConnector::Configuration.store_user_attrs_in_session+.
69
+ #
70
+ def current_user
71
+ @current_user ||= if logged_in?
72
+ user_session = session[:user].dup
73
+ live_server_groups = user_session.delete(:live_server_groups)
74
+ user = Infopark::Crm::Contact.new(user_session || {})
75
+ user.live_server_groups = live_server_groups
76
+ user
77
+ end
78
+ end
79
+
80
+ # Takes a +Contact+ object and stores its user attributes in the session.
81
+ #
82
+ # This can be helpful if you want to set a user for e.g. Googlebot.
83
+ def current_user=(user)
84
+ @current_user = user
85
+ session[:user] = user.nil? ? nil : session_attributes_for(user)
86
+ end
87
+
88
+ # Reloads the +Contact+ object in +current_user+ from the WebCRM,
89
+ # and updates the user attribute cached in the session.
90
+ def reload_current_user
91
+ user = current_user
92
+ user.reload
93
+ self.current_user = user
94
+ end
95
+
96
+ # Determines if the current user is admin (+false+ by default).
97
+ # Being admin eables to user to delete comments and reset ratings.
98
+ # Defined as helper method in +ApplicationController+ when enabling the CRM feature.
99
+ #
100
+ # To change the default behavior overwride <tt>admin?</tt> in your ApplicationController.
101
+ #
102
+ # class ApplicationController < ActionController::Base
103
+ #
104
+ # private
105
+ #
106
+ # def admin?
107
+ # logged_in? && current_user.live_server_groups.include?("admins")
108
+ # end
109
+ #
110
+ # end
111
+ def admin?
112
+ false
113
+ end
114
+
115
+ end
116
+
117
+ # :stopdoc:
118
+ module Localizable
119
+ # --------------------------------------------
120
+ # This module can be included in controllers
121
+ # that interface the WebCRM so error messages
122
+ # are localized
123
+ # --------------------------------------------
124
+ def self.included(base)
125
+ base.before_filter :set_crm_language
126
+ end
127
+
128
+ private
129
+
130
+ def set_crm_language
131
+ Infopark::Crm.configure {|config| config.locale = I18n.locale.to_s }
132
+ end
133
+ end
134
+ # :startdoc:
135
+
136
+ # :stopdoc:
137
+ module Sanitization
138
+ # --------------------------------------------
139
+ # This module is included in controllers to
140
+ # sanitize user input, in reference to a given
141
+ # whitelist
142
+ # --------------------------------------------
143
+
144
+ private
145
+
146
+ def sanitize_user_params(user_params_or_nil, whitelist)
147
+ user_params = user_params_or_nil || {}
148
+
149
+ filtered_contact_attrs = filter_params_hash(
150
+ user_params, whitelist[:contact]
151
+ )
152
+
153
+ filtered_contact_attrs
154
+ end
155
+
156
+ def filter_params_hash(source_hash, allowed_keys_unstringified)
157
+ return {} unless source_hash
158
+ allowed_keys = allowed_keys_unstringified.map(&:to_s)
159
+ source_hash.reject { |key, value| !allowed_keys.include?(key) }
160
+ end
161
+ end
162
+ # :startdoc:
163
+
164
+ # This module is included in +DefaultUserController+ to provide callbacks for user functionality.
165
+ #
166
+ # If you want to add behavior before or after authentication, logout or register, override any of
167
+ # the methods included in this module in your +UserController+.
168
+ module Callbacks
169
+
170
+ # :stopdoc:
171
+ # --------------------------------------------
172
+ # This module is documented in sections
173
+ # because RDoc orders methods alphabetically,
174
+ # which doesn't make sense here.
175
+ # --------------------------------------------
176
+ # :startdoc:
177
+
178
+ private
179
+
180
+ # :section: "Before" callbacks
181
+
182
+ # Called by +DefaultUserController+ on POST requests before a user is authenticated,
183
+ # i.e. the user has already provided credentials in a form.
184
+ #
185
+ # By default, it doesn't do anything.
186
+ def before_authenticate
187
+ end
188
+
189
+ # Called by +DefaultUserController+ before a user is logged out,
190
+ # i.e. the session is reset.
191
+ #
192
+ # By default, it doesn't do anything.
193
+ def before_logout
194
+ end
195
+
196
+ # Called by +DefaultUserController+ on POST requests before a user is created,
197
+ # i.e. the user has already provided name, e-mail etc. in a form.
198
+ #
199
+ # By default, it doesn't do anything.
200
+ def before_register
201
+ end
202
+
203
+ # :section: "After" callbacks
204
+
205
+ # Called by +DefaultUserController+ on POST requests after a user is authenticated,
206
+ # i.e. the user has already provided correct credentials but the session has not yet been set.
207
+ #
208
+ # By default, it doesn't do anything.
209
+ def after_authenticate
210
+ end
211
+
212
+ # Called by +DefaultUserController+ after a user is logged out,
213
+ # i.e. the session is reset.
214
+ #
215
+ # By default, it doesn't do anything.
216
+ def after_logout
217
+ end
218
+
219
+ # Called by +DefaultUserController+ on POST requests after a user is created,
220
+ # i.e. a WebCRM activity has been created or the user has been created directly in the WebCRM.
221
+ #
222
+ # By default, it doesn't do anything.
223
+ def after_register
224
+ end
225
+
226
+ # :section: WebCRM error handling
227
+
228
+ # Called by +DefaultUserController+ whenever requests to the WebCRM fail.
229
+ # This includes <tt>Errno::ECONNREFUSED</tt> or the ActiveResource errors +ForbiddenAccess+,
230
+ # +UnauthorizedAccess+, and +BadRequest+.
231
+ #
232
+ # By default, it raises an error so that administrators are notified immediately
233
+ # if the WebCRM is down or not configured properly.
234
+ def on_crm_error(exception)
235
+ raise exception
236
+ end
237
+
238
+ end
239
+
240
+ # :stopdoc:
241
+ # Default attributes for WebCRM's Contact.
242
+ #
243
+ # Helpers like +form_for+ will fail on +ActiveResource+ attributes
244
+ # until those attributes are set.
245
+ # See http://www.ruby-forum.com/topic/113542
246
+ #
247
+ # This constant provides default values for nearly all attributes.
248
+ #
249
+ # You are free to use any of these attributes in your views.
250
+ # If you try to use others, +form_for+ will fail.
251
+ CONTACT_DEFAULT_ATTRS = {
252
+ :id => '',
253
+ :account_id => '',
254
+ :org_name_address => '',
255
+ :org_unit_address => '',
256
+ :extended_address => '',
257
+ :street_address => '',
258
+ :postalcode => '',
259
+ :locality => '',
260
+ :region => '',
261
+ :country => '',
262
+ :email => '',
263
+ :fax => '',
264
+ :first_name => '',
265
+ :gender => 'N',
266
+ :job_title => '',
267
+ :language => 'en',
268
+ :last_name => '',
269
+ :login => '',
270
+ :mobile_phone => '',
271
+ :name_prefix => '',
272
+ :phone => '',
273
+ :want_geo_location => '',
274
+ :want_email => 0,
275
+ :want_phonecall => 0,
276
+ :want_snailmail => 0
277
+ }.stringify_keys
278
+ # :startdoc:
279
+
280
+ end
281
+
282
+ end
@@ -0,0 +1,78 @@
1
+ require "rails"
2
+ require "action_view"
3
+ require "will_paginate"
4
+
5
+ require 'jquery-rails'
6
+
7
+ require 'rails_connector/configuration'
8
+
9
+ module ::RailsConnector
10
+ class Engine < Rails::Engine #:nodoc:
11
+ config.to_prepare { RailsConnector::Configuration.to_prepare }
12
+ config.after_initialize { RailsConnector::Configuration.after_initialize }
13
+
14
+ initializer "rails_connector.add_cms_routing_paths", :after => :add_routing_paths do |app|
15
+ cms_route = File.expand_path("cms_routes.rb", paths['config'].to_a.first)
16
+ app.routes_reloader.paths.push(cms_route)
17
+ end
18
+
19
+ # Expose rails connector runtime to controller for logging.
20
+ initializer "rails_connector.log_runtime" do |app|
21
+ runtime =
22
+ begin
23
+ RailsConnector::ControllerRuntime
24
+ rescue NameError
25
+ nil
26
+ end
27
+
28
+ if runtime
29
+ RailsConnector::LogSubscriber.attach_to :rails_connector
30
+ ActiveSupport.on_load(:action_controller) do
31
+ include runtime
32
+ end
33
+ end
34
+ end
35
+
36
+ # make sure our exceptions cause an adequate error page and http status code
37
+ initializer "rails_connector.register_exceptions" do |app|
38
+ responses = ActionDispatch::ShowExceptions.rescue_responses
39
+ responses["RailsConnector::ResourceNotFound"] = :not_found
40
+ end
41
+
42
+ initializer "rails_connector.configure_database" do |app|
43
+ RailsConnector::Configuration.configure_cms_database
44
+ end
45
+
46
+ initializer "rails_connector.liquid_support" do
47
+ # Liquid Gem integration
48
+ ActionView::Template.register_template_handler(
49
+ :liquid, ::RailsConnector::LiquidSupport::LiquidTemplateHandler
50
+ )
51
+ if Rails.env.test? && ::RailsConnector::LiquidSupport.raise_template_errors == nil
52
+ ::RailsConnector::LiquidSupport.raise_template_errors = true
53
+ end
54
+ end
55
+
56
+ initializer "rails_connector.routing_helpers" do
57
+ if Rails.env == 'test'
58
+ ActionDispatch::TestRequest.__send__(:include, RailsConnector::CmsTestRequest)
59
+ end
60
+
61
+ ActionController::Base.__send__(:include, CmsRoutingHelper)
62
+ ActionView::Base.__send__(:include, CmsRoutingHelper)
63
+ end
64
+
65
+ initializer "rails_connector.config_local", :after => :load_config_initializers,
66
+ :before => :engines_blank_point do
67
+ Dir.glob(Rails.root.join('config', 'local', '*.rb')).each do |file|
68
+ require file
69
+ end
70
+ end
71
+
72
+ config.autoload_paths += paths['lib'].to_a
73
+ config.autoload_once_paths += paths['app/helpers'].to_a + paths['lib'].to_a
74
+
75
+ RailsConnector.rack_middlewares.each { |middleware| config.app_middleware.use middleware }
76
+ end
77
+ end
78
+
@@ -0,0 +1,18 @@
1
+ module RailsConnector
2
+ module Fop
3
+ #
4
+ # Is raised if the PDF generation fails.
5
+ # The error message contains the Java error stack trace of the Apache FOP.
6
+ #
7
+ class GenerationFailed < RuntimeError; end
8
+
9
+ CMD = 'fop -xml "%s" -xsl "%s" -pdf "%s" 2>&1' # :nodoc:
10
+
11
+ def self.generate_pdf(xml, xsl, pdf) # :nodoc:
12
+ output = `#{CMD % [xml, xsl, pdf]}`
13
+ unless `file -pb "#{pdf}"`.include?('PDF')
14
+ raise GenerationFailed, output
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ require 'tidy'
2
+ require "rexml/document"
3
+
4
+ module RailsConnector
5
+ module FopOnRails
6
+ module Document # :nodoc: all
7
+ module DomTree
8
+ TIDY_CONF = {
9
+ 'clean' => true,
10
+ 'doctype' => 'omit',
11
+ 'output-xhtml' => true,
12
+ 'numeric-entities' => true,
13
+ 'drop-font-tags' => true,
14
+ 'enclose-block-text' => true,
15
+ 'char-encoding' => 'utf8'
16
+ }
17
+
18
+ def self.repair(data)
19
+ xml = REXML::Document.new(tidy(data))
20
+ clean_namespace(xml)
21
+ return xml
22
+ end
23
+
24
+ private
25
+
26
+ def self.tidy(data)
27
+ %w(dylib so).each do |ext|
28
+ if File.exist?(path = "/usr/lib/libtidy.#{ext}")
29
+ Tidy.path = path
30
+ break
31
+ end
32
+ end
33
+ Tidy.open(TIDY_CONF) { |tidy| tidy.clean(data) }
34
+ end
35
+
36
+ def self.clean_namespace(xml)
37
+ xml.root.delete_namespace
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end