udongo 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/backend/flexible_content.js +33 -0
- data/app/assets/javascripts/backend/sortable.js +1 -1
- data/app/assets/stylesheets/backend/pages/_flexible_content.scss +61 -0
- data/app/controllers/backend/admins_controller.rb +7 -7
- data/app/controllers/backend/content/rows/columns_controller.rb +7 -15
- data/app/controllers/backend/content/rows/images_controller.rb +1 -1
- data/app/controllers/backend/content/rows/texts_controller.rb +1 -1
- data/app/controllers/backend/content/rows_controller.rb +4 -13
- data/app/controllers/backend/email_templates_controller.rb +4 -4
- data/app/controllers/backend/emails_controller.rb +3 -3
- data/app/controllers/backend/forms/base_controller.rb +14 -0
- data/app/controllers/backend/forms/submissions_controller.rb +8 -0
- data/app/controllers/backend/forms_controller.rb +7 -0
- data/app/controllers/backend/navigation/items_controller.rb +8 -5
- data/app/controllers/backend/navigations_controller.rb +1 -1
- data/app/controllers/backend/pages_controller.rb +5 -5
- data/app/controllers/backend/redirects_controller.rb +4 -4
- data/app/controllers/backend/sessions_controller.rb +1 -1
- data/app/controllers/backend/snippets_controller.rb +6 -5
- data/app/controllers/backend/tagbox_controller.rb +4 -4
- data/app/controllers/backend_controller.rb +3 -3
- data/app/controllers/catch_all_controller.rb +1 -1
- data/app/controllers/redirects_controller.rb +1 -1
- data/app/decorators/application_decorator.rb +5 -0
- data/app/decorators/content_image_decorator.rb +1 -1
- data/app/decorators/content_row_decorator.rb +9 -0
- data/app/decorators/content_text_decorator.rb +1 -1
- data/app/decorators/form_decorator.rb +16 -0
- data/app/decorators/form_submission_decorator.rb +3 -0
- data/app/decorators/navigation_item_decorator.rb +2 -2
- data/app/decorators/page_decorator.rb +2 -2
- data/app/decorators/pagination_decorator.rb +4 -0
- data/app/decorators/redirect_decorator.rb +1 -1
- data/app/decorators/snippet_decorator.rb +1 -1
- data/app/forms/backend/snippet_form.rb +4 -18
- data/app/helpers/backend/pagination_helper.rb +1 -11
- data/app/helpers/icon_helper.rb +1 -1
- data/app/helpers/snippet_helper.rb +1 -1
- data/app/models/concerns/storable/collection.rb +48 -26
- data/app/models/concerns/translatable.rb +1 -1
- data/app/models/content_row.rb +4 -0
- data/app/models/form.rb +1 -0
- data/app/models/store_with_file.rb +2 -0
- data/app/views/backend/content/_image.html.erb +1 -8
- data/app/views/backend/content/_rows.html.erb +52 -49
- data/app/views/backend/emails/index.html.erb +2 -10
- data/app/views/backend/forms/index.html.erb +27 -0
- data/app/views/backend/forms/submissions/_filter.html.erb +16 -0
- data/app/views/backend/forms/submissions/index.html.erb +34 -0
- data/app/views/backend/redirects/index.html.erb +2 -10
- data/app/views/layouts/backend/_top_navigation.html.erb +1 -0
- data/changelog.md +14 -1
- data/config/locales/en_backend.yml +5 -5
- data/config/locales/nl_backend.yml +10 -10
- data/config/routes.rb +6 -6
- data/db/migrate/20160711114156_add_description_to_forms.rb +5 -0
- data/lib/generators/udongo/form/form_generator.rb +1 -1
- data/lib/tasks/udongo_tasks.rake +1 -1
- data/lib/udongo/config.rb +2 -1
- data/lib/udongo/configs/forms.rb +14 -0
- data/lib/udongo/flexible_content/column_width_calculator.rb +32 -0
- data/lib/udongo/form.rb +36 -0
- data/lib/udongo/forms/config.rb +11 -0
- data/lib/udongo/forms/submission_datagrid.rb +29 -0
- data/lib/udongo/forms/submission_filter.rb +33 -0
- data/lib/udongo/notification.rb +19 -0
- data/lib/udongo/object_path.rb +0 -2
- data/lib/udongo/version.rb +1 -1
- data/lib/udongo/will_paginate/options.rb +40 -0
- data/lib/udongo/will_paginate/renderer.rb +8 -4
- data/lib/udongo.rb +4 -11
- data/readme.md +145 -49
- metadata +24 -2
@@ -2,6 +2,7 @@ nl:
|
|
2
2
|
b:
|
3
3
|
actions: Acties
|
4
4
|
add: Toevoegen
|
5
|
+
admin: Beheerder
|
5
6
|
admins: Beheerders
|
6
7
|
advanced: Geavanceerd
|
7
8
|
cancel: Annuleren
|
@@ -20,11 +21,13 @@ nl:
|
|
20
21
|
email_templates: E-mail templates
|
21
22
|
enabled?: Ingeschakeld?
|
22
23
|
extra: Extra
|
24
|
+
filter: Filter
|
23
25
|
first_name: Voornaam
|
24
26
|
flexible_content: Flexibele inhoud
|
25
27
|
forms: Formulieren
|
26
28
|
from: Van
|
27
29
|
general: Algemeen
|
30
|
+
house_number: Huisnummer
|
28
31
|
html_content: HTML inhoud
|
29
32
|
last_name: Achternaam
|
30
33
|
locale: Taal
|
@@ -33,6 +36,7 @@ nl:
|
|
33
36
|
move: Verplaatsen
|
34
37
|
name: Naam
|
35
38
|
navigation: Navigatie
|
39
|
+
navigation_item: Navigatie-item
|
36
40
|
new: Nieuw
|
37
41
|
none: Geen
|
38
42
|
not_yet_sent: Nog niet verzonden
|
@@ -56,6 +60,7 @@ nl:
|
|
56
60
|
status_code: Statuscode
|
57
61
|
subject: Onderwerp
|
58
62
|
tags: Tags
|
63
|
+
telephone: Telefoonnummer
|
59
64
|
title: Titel
|
60
65
|
to: Naar
|
61
66
|
up: Omhoog
|
@@ -64,19 +69,17 @@ nl:
|
|
64
69
|
view: Bekijk
|
65
70
|
|
66
71
|
msg:
|
67
|
-
added: '%
|
72
|
+
added: '%{actor} werd toegevoegd.'
|
68
73
|
admins:
|
69
74
|
account_details: Accountgegevens
|
70
|
-
added: De admin werd toegevoegd.
|
71
|
-
deleted: De admin werd verwijderd.
|
72
75
|
personal_details: Persoonlijke gegevens
|
73
76
|
changes_saved: De wijzigingen werden opgeslagen.
|
74
77
|
confirm: Ben je zeker?
|
75
78
|
content_types:
|
76
79
|
image: Afbeelding
|
77
80
|
text: Tekst
|
78
|
-
deleted: '%
|
79
|
-
edited: '%
|
81
|
+
deleted: '%{actor} werd verwijderd.'
|
82
|
+
edited: '%{actor} werd gewijzigd.'
|
80
83
|
flexible_content:
|
81
84
|
add_column: Kolom toevoegen
|
82
85
|
add_row: Rij toevoegen
|
@@ -85,18 +88,15 @@ nl:
|
|
85
88
|
edit_column: Kolom bewerken
|
86
89
|
edit_image: Afbeelding bewerken
|
87
90
|
edit_text: Tekst bewerken
|
88
|
-
explanation: Met module kan je flexibele responsive inhoud toevoegen. Klik op onderstaande knop om een eerste rij toe te voegen.
|
91
|
+
explanation: Met deze module kan je flexibele, responsive inhoud toevoegen. Klik op onderstaande knop om een eerste rij toe te voegen.
|
89
92
|
forgot_password: Wachtwoord vergeten?
|
90
93
|
help_texts:
|
91
94
|
status_code: Meer info over het gebruik van status codes
|
92
95
|
incorrect_login: Ongeldige login gegevens.
|
93
96
|
navigation:
|
94
|
-
added: Het navigatie item werd toegevoegd.
|
95
97
|
custom: Op maat
|
96
|
-
deleted: Het navigatie item werd verwijderd.
|
97
98
|
no_items: Er zijn geen items.
|
98
|
-
|
99
|
-
saved: '%s werd bewaard.'
|
99
|
+
saved: '%{actor} werd bewaard.'
|
100
100
|
seo: SEO
|
101
101
|
status_codes:
|
102
102
|
'301': 301 (Moved Permanently)
|
data/config/routes.rb
CHANGED
@@ -24,6 +24,10 @@ Rails.application.routes.draw do
|
|
24
24
|
member { post :tree_drag_and_drop }
|
25
25
|
end
|
26
26
|
|
27
|
+
resources :forms do
|
28
|
+
resources :submissions, controller: 'forms/submissions'
|
29
|
+
end
|
30
|
+
|
27
31
|
resources :navigations, only: [:index] do
|
28
32
|
scope module: 'navigation' do
|
29
33
|
resources :items, except: [:index, :show] do
|
@@ -57,15 +61,11 @@ Rails.application.routes.draw do
|
|
57
61
|
|
58
62
|
namespace :content do
|
59
63
|
resources :rows, only: [:index, :new, :destroy] do
|
60
|
-
|
61
|
-
get 'move_up', 'move_down'
|
62
|
-
end
|
64
|
+
concerns :positionable
|
63
65
|
|
64
66
|
scope module: 'rows' do
|
65
67
|
resources :columns do
|
66
|
-
|
67
|
-
get 'move_up', 'move_down'
|
68
|
-
end
|
68
|
+
concerns :positionable
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -24,7 +24,7 @@ class Udongo::FormGenerator < Rails::Generators::Base
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def create_database_records
|
27
|
-
f =
|
27
|
+
f = Form.create!(locales: Udongo.config.locales, identifier: name)
|
28
28
|
|
29
29
|
@fields.each do |field|
|
30
30
|
field_object = f.fields.create!(locales: Udongo.config.locales, name: field.name, field_type: field.type)
|
data/lib/tasks/udongo_tasks.rake
CHANGED
data/lib/udongo/config.rb
CHANGED
@@ -2,7 +2,7 @@ module Udongo
|
|
2
2
|
class Config
|
3
3
|
attr_accessor :default_locale, :locales, :prefix_routes_with_locale, :host,
|
4
4
|
:time_zone, :allow_new_tags, :flexible_content_types,
|
5
|
-
:project_name
|
5
|
+
:project_name, :forms
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
@default_locale = :nl
|
@@ -13,6 +13,7 @@ module Udongo
|
|
13
13
|
@allow_new_tags = true
|
14
14
|
@flexible_content_types = %w(text image)
|
15
15
|
@project_name = 'Udongo'
|
16
|
+
@forms = Udongo::Configs::Forms.new
|
16
17
|
end
|
17
18
|
|
18
19
|
def prefix_routes_with_locale?
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Udongo
|
2
|
+
module Configs
|
3
|
+
class Forms
|
4
|
+
def initialize
|
5
|
+
@submission_datagrids = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_missing(method, *args, &block)
|
9
|
+
form = ::Form.find_by!(identifier: method)
|
10
|
+
@submission_datagrids[form.identifier.to_sym] ||= OpenStruct.new(datagrid_fields: [], filter_fields: [])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Udongo
|
2
|
+
module FlexibleContent
|
3
|
+
class ColumnWidthCalculator
|
4
|
+
attr_reader :row
|
5
|
+
|
6
|
+
COLUMNS = %w(width_xs width_sm width_md width_lg width_xl)
|
7
|
+
|
8
|
+
def initialize(row)
|
9
|
+
@row = row
|
10
|
+
end
|
11
|
+
|
12
|
+
def calculate(field)
|
13
|
+
difference = 12 - total(field)
|
14
|
+
return 12 if difference.zero?
|
15
|
+
difference
|
16
|
+
end
|
17
|
+
|
18
|
+
def hashed_values
|
19
|
+
COLUMNS.inject({}) do |result, column|
|
20
|
+
result[column.to_sym] = calculate(column.to_sym)
|
21
|
+
result
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def total(field)
|
26
|
+
sum = row.columns.sum(field.to_sym).to_i
|
27
|
+
return 12 if sum > 12
|
28
|
+
sum
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/udongo/form.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Udongo
|
2
|
+
class Form
|
3
|
+
include ActiveModel::Model
|
4
|
+
include Virtus.model
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
attributes.keys.each { |k| send("#{k}=", params[k]) } if params.any?
|
8
|
+
end
|
9
|
+
|
10
|
+
def persisted?
|
11
|
+
false
|
12
|
+
end
|
13
|
+
|
14
|
+
def save(params)
|
15
|
+
attributes.keys.each { |k| send("#{k}=", params[k]) }
|
16
|
+
|
17
|
+
if valid?
|
18
|
+
save_object
|
19
|
+
true
|
20
|
+
else
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# This method only exists so the related factory tests pass
|
26
|
+
def save!
|
27
|
+
valid?
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Written in the subclass
|
33
|
+
def save_object
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Udongo
|
2
|
+
module Forms
|
3
|
+
class SubmissionDatagrid
|
4
|
+
include Udongo::Forms::Config
|
5
|
+
include ActionView::Helpers::TagHelper
|
6
|
+
|
7
|
+
def initialize(form)
|
8
|
+
@form = form
|
9
|
+
end
|
10
|
+
|
11
|
+
def column_values(submission)
|
12
|
+
map_fields { |field| content_tag(:td, submission.data_object.send(field)) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def column_headers(filter)
|
16
|
+
map_fields { |field| content_tag(:th, I18n.t("b.#{field}")) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def fields
|
20
|
+
return [] if config.nil?
|
21
|
+
config.datagrid_fields
|
22
|
+
end
|
23
|
+
|
24
|
+
def map_fields(&block)
|
25
|
+
fields.map { |field| yield(field) }.join("\n").html_safe
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Udongo
|
2
|
+
module Forms
|
3
|
+
class SubmissionFilter
|
4
|
+
include Udongo::Forms::Config
|
5
|
+
attr_reader :params
|
6
|
+
|
7
|
+
def initialize(form, params = {})
|
8
|
+
@form = form
|
9
|
+
@params = params || {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def fields
|
13
|
+
return [] if config.nil?
|
14
|
+
config.filter_fields
|
15
|
+
end
|
16
|
+
|
17
|
+
def result
|
18
|
+
data = FormSubmissionData.all
|
19
|
+
|
20
|
+
params.each do |key,value|
|
21
|
+
next if value.blank?
|
22
|
+
data = data.where(name: key).where('value REGEXP ?', value)
|
23
|
+
end
|
24
|
+
|
25
|
+
FormSubmission.where(id: data.pluck(:submission_id).uniq)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.search(*args)
|
29
|
+
new(*args)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Udongo::Notification
|
2
|
+
def initialize(notice)
|
3
|
+
@notice = notice
|
4
|
+
end
|
5
|
+
|
6
|
+
def build_hash(actor)
|
7
|
+
{ actor: I18n.t("b.#{actor}") }
|
8
|
+
end
|
9
|
+
|
10
|
+
def label
|
11
|
+
"b.msg.#{@notice}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def translate(vars = nil)
|
15
|
+
return I18n.t(label) if vars.blank?
|
16
|
+
vars = build_hash(vars) unless vars.is_a?(Hash)
|
17
|
+
I18n.t(label, vars)
|
18
|
+
end
|
19
|
+
end
|
data/lib/udongo/object_path.rb
CHANGED
data/lib/udongo/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Udongo
|
2
|
+
module WillPaginate
|
3
|
+
class Options
|
4
|
+
include ActionView::Helpers::TagHelper
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
@options = options || {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def defaults
|
11
|
+
{
|
12
|
+
class: 'pagination',
|
13
|
+
inner_window: 1,
|
14
|
+
outer_window: 0,
|
15
|
+
renderer: Udongo::WillPaginate::Renderer,
|
16
|
+
previous_label: previous_label,
|
17
|
+
next_label: next_label
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def next_label
|
22
|
+
nav_label('→', 'next_label')
|
23
|
+
end
|
24
|
+
|
25
|
+
def previous_label
|
26
|
+
nav_label('←', 'previous_label')
|
27
|
+
end
|
28
|
+
|
29
|
+
def nav_label(default_value, sr_only_value)
|
30
|
+
string = content_tag(:span, default_value.html_safe, aria: { hidden: true })
|
31
|
+
string += content_tag(:span, I18n.t("will_paginate.#{sr_only_value}"), class: 'sr-only')
|
32
|
+
string.html_safe
|
33
|
+
end
|
34
|
+
|
35
|
+
def values
|
36
|
+
@options.reverse_merge!(defaults)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -7,19 +7,23 @@ module Udongo
|
|
7
7
|
protected
|
8
8
|
|
9
9
|
def page_number(page)
|
10
|
-
|
10
|
+
list_classes = 'page-item'
|
11
|
+
list_classes += ' active' if page == current_page
|
12
|
+
tag(:li, link(page, page, class: 'page-link', rel: rel_value(page)), class: list_classes)
|
11
13
|
end
|
12
14
|
|
13
15
|
def previous_or_next_page(page, text, classname)
|
14
|
-
|
16
|
+
list_classes = [classname[0..3], classname, 'page-item']
|
17
|
+
list_classes.push('disabled') unless page
|
18
|
+
tag(:li, link(text, page || '#', class: 'page-link'), class: list_classes.join(' '))
|
15
19
|
end
|
16
20
|
|
17
21
|
def html_container(html)
|
18
|
-
tag :ul, html, container_attributes
|
22
|
+
tag(:nav, tag(:ul, html, container_attributes))
|
19
23
|
end
|
20
24
|
|
21
25
|
def gap
|
22
|
-
tag
|
26
|
+
tag(:li, link(super, '#', class: 'page-link'), class: 'page-item disabled')
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
data/lib/udongo.rb
CHANGED
@@ -1,14 +1,3 @@
|
|
1
|
-
require 'udongo/engine'
|
2
|
-
require 'udongo/config'
|
3
|
-
require 'udongo/breadcrumb'
|
4
|
-
require 'udongo/meta_info'
|
5
|
-
require 'udongo/object_path'
|
6
|
-
require 'udongo/crypt'
|
7
|
-
require 'udongo/cryptography'
|
8
|
-
require 'udongo/active_model_simulator'
|
9
|
-
require 'udongo/email_vars_parser'
|
10
|
-
require 'udongo/email_vars/form_submission'
|
11
|
-
require 'udongo/email_vars/address'
|
12
1
|
require 'jquery-rails'
|
13
2
|
require 'jquery-ui-rails'
|
14
3
|
require 'simple_form'
|
@@ -27,6 +16,10 @@ module Udongo
|
|
27
16
|
|
28
17
|
class << self
|
29
18
|
attr_writer :config
|
19
|
+
|
20
|
+
Dir.glob("#{PATH}/lib/udongo/**/*.rb").each do |file|
|
21
|
+
require file
|
22
|
+
end
|
30
23
|
end
|
31
24
|
|
32
25
|
def self.config
|