Class: Pageflow::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/pageflow/configuration.rb,
lib/pageflow/configuration/defaults.rb,
lib/pageflow/configuration/permissions.rb

Overview

Options to be defined in the pageflow initializer of the main app.

Defined Under Namespace

Modules: Defaults Classes: FeatureLevelConfiguration, Permissions

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
# File 'lib/pageflow/configuration.rb', line 318

def initialize
  @paperclip_attachments_version = 'v1'
  @paperclip_filesystem_root = Rails.public_path.join('system/uploads')
  @paperclip_s3_root = 'main'

  @paperclip_s3_default_options = Defaults::PAPERCLIP_S3_DEFAULT_OPTIONS.dup

  @paperclip_direct_upload_options = lambda { |attachment|
    max_upload_size = 4_294_967_296 # max file size in bytes
    presigned_post_config = attachment.s3_bucket
                                      .presigned_post(key: attachment.path,
                                                      success_action_status: '201',
                                                      acl: 'public-read',
                                                      content_length_range: 0..max_upload_size)
    {
      url: presigned_post_config.url,
      fields: presigned_post_config.fields
    }
  }

  @zencoder_options = {}

  @mailer_sender = '[email protected]'

  @features = Features.new
  @hooks = Hooks.new
  @quotas = Quotas.new
  @themes = Themes.new
  @page_types = PageTypes.new
  @file_types = FileTypes.new(page_types)
  @widget_types = WidgetTypes.new
  @help_entries = HelpEntries.new

  @thumbnail_styles = Defaults::THUMBNAIL_STYLES.dup
  @css_rendered_thumbnail_styles = Defaults::CSS_RENDERED_THUMBNAIL_STYLES.dup

  @theming_request_scope = CnameThemingRequestScope.new
  @public_entry_request_scope = lambda { |entries, request| entries }
  @public_entry_redirect = ->(_entry, _request) { nil }
  @public_entry_url_options = Pageflow::ThemingsHelper::DEFAULT_PUBLIC_ENTRY_OPTIONS
  @entry_embed_url_options = {protocol: 'https'}

  @confirm_encoding_jobs = false

  @admin_resource_tabs = Pageflow::Admin::Tabs.new
  @admin_form_inputs = Pageflow::Admin::FormInputs.new
  @admin_attributes_table_rows = Pageflow::Admin::AttributesTableRows.new

  @available_locales = [:en, :de]
  @available_public_locales = PublicI18n.available_locales

  @public_https_mode = :prevent

  @default_keywords_meta_tag = 'pageflow, multimedia, reportage'
  @default_author_meta_tag = 'Pageflow'
  @default_publisher_meta_tag = 'Pageflow'

  @authorize_user_deletion = lambda { |_user| true }

  @available_text_track_kinds = [:captions, :subtitles, :descriptions]

  @allow_multiaccount_users = true

  @account_admin_menu_options = {}

  @permissions = Permissions.new

  @edit_lock_polling_interval = 15.seconds
end

Instance Attribute Details

#account_admin_menu_optionsObject

Options hash for account admin menu. Options from config precede defaults.

Since:

  • 12.1



301
302
303
# File 'lib/pageflow/configuration.rb', line 301

def 
  @account_admin_menu_options
end

#admin_attributes_table_rowsAdmin::AttributesTableRows (readonly)

Insert additional rows into admin attributes tables.

Examples:


config.admin_attributes_table_rows.register(:entry, :custom)
config.admin_attributes_table_rows.register(:entry, :my_attribute, after: :title)
config.admin_attributes_table_rows.register(:entry, :some_attribute, before: :updated_at)

Custom content


config.admin_attributes_table_rows.register(:entry, :custom) do |entry|
  span(entry.custom_attribute)
end

Returns:

Since:

  • 12.2



239
240
241
# File 'lib/pageflow/configuration.rb', line 239

def admin_attributes_table_rows
  @admin_attributes_table_rows
end

#admin_form_inputsAdmin::FormInputs (readonly)

Add custom form fields to admin forms.

Examples:


config.admin_form_inputs.register(:entry, :custom_field) do

Returns:

Since:

  • 0.9



221
222
223
# File 'lib/pageflow/configuration.rb', line 221

def admin_form_inputs
  @admin_form_inputs
end

#admin_resource_tabsAdmin::Tabs (readonly)

Used by Pageflow extensions to provide new tabs to be displayed in the admin.

Examples:


config.admin_resource_tabs.register(:entry, Admin::CustomTab)

Returns:



211
212
213
# File 'lib/pageflow/configuration.rb', line 211

def admin_resource_tabs
  @admin_resource_tabs
end

#allow_multiaccount_usersObject

Allow one user to be member of multiple accounts. Defaults to true.

Since:

  • 12.1



296
297
298
# File 'lib/pageflow/configuration.rb', line 296

def allow_multiaccount_users
  @allow_multiaccount_users
end

#authorize_user_deletionObject

Whether a user can be deleted.

Examples:


config.authorize_user_deletion =
  lambda do |user_to_delete|
    if user_to_delete.accounts.all? { || .users.size > 1 }
      true
    else
      'Last user on account. Permission denied'
    end
  end

Since:

  • 0.11



287
288
289
# File 'lib/pageflow/configuration.rb', line 287

def authorize_user_deletion
  @authorize_user_deletion
end

#available_localesObject

Array of locales which can be chosen as interface language by a user. Defaults to ‘[:en, :de]`.

Since:

  • 0.7



244
245
246
# File 'lib/pageflow/configuration.rb', line 244

def available_locales
  @available_locales
end

#available_public_localesObject

Array of locales which can be chosen as interface language for an entry. Defaults to the locales supported by the ‘pageflow-public-i18n` gem.

Since:

  • 0.10



250
251
252
# File 'lib/pageflow/configuration.rb', line 250

def available_public_locales
  @available_public_locales
end

#available_text_track_kindsObject (readonly)

Array of values that the ‘kind` attribute on text tracks can take. Defaults to `[:captions, :subtitles, :descriptions]`.



291
292
293
# File 'lib/pageflow/configuration.rb', line 291

def available_text_track_kinds
  @available_text_track_kinds
end

#confirm_encoding_jobsObject

Submit video/audio encoding jobs only after the user has explicitly confirmed in the editor. Defaults to false.



201
202
203
# File 'lib/pageflow/configuration.rb', line 201

def confirm_encoding_jobs
  @confirm_encoding_jobs
end

#css_rendered_thumbnail_stylesObject

Names of Paperclip styles that shall be rendered into entry specific stylesheets.



125
126
127
# File 'lib/pageflow/configuration.rb', line 125

def css_rendered_thumbnail_styles
  @css_rendered_thumbnail_styles
end

#default_author_meta_tagObject

Returns the value of attribute default_author_meta_tag.



271
272
273
# File 'lib/pageflow/configuration.rb', line 271

def default_author_meta_tag
  @default_author_meta_tag
end

#default_keywords_meta_tagObject

Meta tag defaults.

These defaults will be included in the page <head> unless overriden by the Entry. If you set these to nil or "" the meta tag won’t be included.

Since:

  • 0.10



270
271
272
# File 'lib/pageflow/configuration.rb', line 270

def default_keywords_meta_tag
  @default_keywords_meta_tag
end

#default_publisher_meta_tagObject

Returns the value of attribute default_publisher_meta_tag.



272
273
274
# File 'lib/pageflow/configuration.rb', line 272

def default_publisher_meta_tag
  @default_publisher_meta_tag
end

#edit_lock_polling_intervalnumber

Defines the editor lock polling interval.

Returns:

  • (number)

Since:

  • 12.1



310
311
312
# File 'lib/pageflow/configuration.rb', line 310

def edit_lock_polling_interval
  @edit_lock_polling_interval
end

#editor_route_constraintObject

A constraint used by the pageflow engine to restrict access to the editor related HTTP end points. This can be used to ensure the editor is only accessable via a certain host when different CNAMES are used to access the public end points of pageflow.



43
44
45
# File 'lib/pageflow/configuration.rb', line 43

def editor_route_constraint
  @editor_route_constraint
end

#editor_routing_constraintObject

Either a lambda or an object with a ‘match?` method, to restrict access to the editor routes defined by Pageflow.

This can be used if published entries shall be available under different CNAMES but the admin and the editor shall only be accessible via one official url.



133
134
135
# File 'lib/pageflow/configuration.rb', line 133

def editor_routing_constraint
  @editor_routing_constraint
end

#entry_embed_url_optionsObject

Either a lambda or an object with a ‘call` method taking a Theming as paramater and returing a hash of options used to construct the embed url of a published entry.



197
198
199
# File 'lib/pageflow/configuration.rb', line 197

def entry_embed_url_options
  @entry_embed_url_options
end

#featuresObject (readonly)

Extend the configuration based on feature flags set for accounts or entries.

Make a page type only available if a feature flag is set on the entry or its account

config.features.register('some_special_page_type' do |config
  config.page_types.register(Pageflow::SomeSpecial.page_type)
end

Since:

  • 0.9



63
64
65
# File 'lib/pageflow/configuration.rb', line 63

def features
  @features
end

#file_typesFileTypes (readonly)

List of FileType instances provided by page types.

Returns:



99
100
101
# File 'lib/pageflow/configuration.rb', line 99

def file_types
  @file_types
end

#help_entriesHelpEntries (readonly)

Used to add new sections to the help dialog displayed in the editor.

Returns:

Since:

  • 0.7



116
117
118
# File 'lib/pageflow/configuration.rb', line 116

def help_entries
  @help_entries
end

#hooksObject (readonly)

Subscribe to hooks in order to be notified of events. Any object with a call method can be a subscriber

Example:

config.hooks.subscribe(:submit_file, -> { do_something })


72
73
74
# File 'lib/pageflow/configuration.rb', line 72

def hooks
  @hooks
end

#mailer_senderObject

The email address to use as from header in invitation mails to new users



47
48
49
# File 'lib/pageflow/configuration.rb', line 47

def mailer_sender
  @mailer_sender
end

#news#item

News collection to add items to. Can be used to integrate Pageflow with Krant (see github.com/codevise/krant).

Returns:

  • (#item)

Since:

  • 12.2



316
317
318
# File 'lib/pageflow/configuration.rb', line 316

def news
  @news
end

#page_typesPageTypes (readonly)

Register new types of pages.

Returns:

Since:

  • 0.9



95
96
97
# File 'lib/pageflow/configuration.rb', line 95

def page_types
  @page_types
end

#paperclip_attachments_versionObject

String to interpolate into paths of files generated by paperclip preprocessors. This allows to refresh cdn caches after reprocessing attachments.



11
12
13
# File 'lib/pageflow/configuration.rb', line 11

def paperclip_attachments_version
  @paperclip_attachments_version
end

#paperclip_direct_upload_optionsObject

Upload options provided to direct upload form. Defaults to S3 storage options. returns a hash with keys:

  • url: The URL to use as the action of the form

  • fields: A hash of fields that will be included in the direct upload form.

    This hash should include the signed POST policy, the access key ID and
    security token (if present), etc.
    These fields will be included as input elements of type 'hidden' on the form
    


33
34
35
# File 'lib/pageflow/configuration.rb', line 33

def paperclip_direct_upload_options
  @paperclip_direct_upload_options
end

#paperclip_filesystem_rootObject

Path to the location in the filesystem where attachments shall be stored. The value of this option is available via the pageflow_filesystem_root paperclip interpolation.



16
17
18
# File 'lib/pageflow/configuration.rb', line 16

def paperclip_filesystem_root
  @paperclip_filesystem_root
end

#paperclip_s3_default_optionsObject

Default options for paperclip attachments which are supposed to use s3 storage.



6
7
8
# File 'lib/pageflow/configuration.rb', line 6

def paperclip_s3_default_options
  @paperclip_s3_default_options
end

#paperclip_s3_rootObject

Root folder in S3 bucket to store files in. Can be used to separate files of multiple development instances in a shared development S3 bucket.

Since:

  • 13.0



23
24
25
# File 'lib/pageflow/configuration.rb', line 23

def paperclip_s3_root
  @paperclip_s3_root
end

#permissionsObject (readonly)

Sublayer for permissions related config.

Since:

  • 12.1



305
306
307
# File 'lib/pageflow/configuration.rb', line 305

def permissions
  @permissions
end

#public_entry_redirectObject

Either a lambda or an object with a ‘call` method taking an Entry record and an ActionDispatch::Request object and returning `nil` or a path to redirect to. Can be used in conjuction with PrimaryDomainEntryRedirect to make sure entries are accessed via their account’s configured cname.

Since:

  • 12.4



178
179
180
# File 'lib/pageflow/configuration.rb', line 178

def public_entry_redirect
  @public_entry_redirect
end

#public_entry_request_scopeObject

Either a lambda or an object with a ‘call` method taking two parameters: An `ActiveRecord` scope of `Pageflow::Entry` records and an `ActionDispatch::Request` object. Has to return the scope in which to find entries.

Used by all public actions that display entries to restrict the available entries by hostname or other request attributes.

Use #public_entry_url_options to make sure urls of published entries conform twith the restrictions.

Example:

# Only make entries of one account available under <account.name>.example.com
config.public_entry_request_scope = lambda do |entries, request|
  entries.includes(:account).where(pageflow_accounts: {name: request.subdomain})
end


169
170
171
# File 'lib/pageflow/configuration.rb', line 169

def public_entry_request_scope
  @public_entry_request_scope
end

#public_entry_url_optionsObject

Either a lambda or an object with a ‘call` method taking a Theming as paramater and returing a hash of options used to construct the url of a published entry.

Can be used to change the host of the url under which entries are available.

Example:

config.public_entry_url_options = lambda do |theming|
  {host: "#{theming.account.name}.example.com"}
end


192
193
194
# File 'lib/pageflow/configuration.rb', line 192

def public_entry_url_options
  @public_entry_url_options
end

#public_https_modeObject

How to handle https requests for URLs which will have assets in the page. If you wish to serve all assets over http and prevent mixed-content warnings, you can force a redirect to http. The inverse is also true: you can force a redirect to https for all http requests.

Examples:


config.public_https_mode = :prevent (default) # => redirects https to http
config.public_https_mode = :enforce # => redirects http to https
config.public_https_mode = :ignore # => does nothing

Since:

  • 0.9



263
264
265
# File 'lib/pageflow/configuration.rb', line 263

def public_https_mode
  @public_https_mode
end

#quotasObject

Limit the use of certain resources. Any object implementing the interface of Pageflow::Quota can be registered.

Example:

config.quotas.register(:users, UserQuota)


81
82
83
# File 'lib/pageflow/configuration.rb', line 81

def quotas
  @quotas
end

#themesThemes (readonly)

Additional themes can be registered to use custom css.

Example:

config.themes.register(:custom)

Returns:



90
91
92
# File 'lib/pageflow/configuration.rb', line 90

def themes
  @themes
end

#theming_request_scopeObject

Either a lambda or an object with a ‘call` method taking two parameters: An `ActiveRecord` scope of Theming records and an ActionDispatch::Request object. Has to return the scope in which to find themings.

Defaults to Pageflow::CnameThemingRequestScope which finds themings based on the request subdomain. Can be used to alter the logic of finding a theming whose home_url to redirect to when visiting the public root path.

Example:

config.theming_request_scope = lambda do |themings, request|
  themings.where(id: Pageflow::.find_by_name!(request.subdomain).default_theming_id)
end


150
151
152
# File 'lib/pageflow/configuration.rb', line 150

def theming_request_scope
  @theming_request_scope
end

#thumbnail_stylesObject

Paperclip style definitions of thumbnails used by Pageflow.

Returns:

  • Hash



120
121
122
# File 'lib/pageflow/configuration.rb', line 120

def thumbnail_styles
  @thumbnail_styles
end

#widget_typesWidgetTypes (readonly)

Used to register new types of widgets to be displayed in entries.

Returns:



103
104
105
# File 'lib/pageflow/configuration.rb', line 103

def widget_types
  @widget_types
end

#zencoder_optionsObject

Refer to the pageflow initializer template for a list of supported options.



37
38
39
# File 'lib/pageflow/configuration.rb', line 37

def zencoder_options
  @zencoder_options
end

Instance Method Details

#enable_all_featuresObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



423
424
425
# File 'lib/pageflow/configuration.rb', line 423

def enable_all_features
  features.enable_all(FeatureLevelConfiguration.new(self))
end

#enable_features(names) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



418
419
420
# File 'lib/pageflow/configuration.rb', line 418

def enable_features(names)
  features.enable(names, FeatureLevelConfiguration.new(self))
end

#lint!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



407
408
409
# File 'lib/pageflow/configuration.rb', line 407

def lint!
  @features.lint!
end

#plugin(plugin) ⇒ Object

Activate a plugin.

Parameters:

Since:

  • 0.7



392
393
394
# File 'lib/pageflow/configuration.rb', line 392

def plugin(plugin)
  plugin.configure(self)
end

#register_page_type(page_type) ⇒ Object

Deprecated.

Use ‘config.page_types.register` instead.



397
398
399
400
# File 'lib/pageflow/configuration.rb', line 397

def register_page_type(page_type)
  ActiveSupport::Deprecation.warn('Pageflow::Configuration#register_page_type is deprecated. Use config.page_types.register instead.', caller)
  page_types.register(page_type)
end

#revision_componentsObject



402
403
404
# File 'lib/pageflow/configuration.rb', line 402

def revision_components
  page_types.map(&:revision_components).flatten.uniq
end

#theming_url_options(theming) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



412
413
414
415
# File 'lib/pageflow/configuration.rb', line 412

def theming_url_options(theming)
  options = public_entry_url_options
  options.respond_to?(:call) ? options.call(theming) : options
end