udongo 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|