agile_rails 0.0.0.1
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 +7 -0
- data/CHANGELOG.md +5 -0
- data/MIT-LICENSE +20 -0
- data/README.md +285 -0
- data/Rakefile +39 -0
- data/agile_rails.gemspec +36 -0
- data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
- data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
- data/app/assets/images/32px.png +0 -0
- data/app/assets/images/throbber.gif +0 -0
- data/app/assets/javascripts/agile/agile.js +1489 -0
- data/app/assets/javascripts/agile/jquery-migrate.js +702 -0
- data/app/assets/javascripts/agile/jquery.bpopup.js +372 -0
- data/app/assets/javascripts/agile/jquery.datetimepicker.js +1353 -0
- data/app/assets/javascripts/agile/jstree.min.js +6 -0
- data/app/assets/javascripts/agile/select-multiple.js +459 -0
- data/app/assets/javascripts/agile/some_scripts.js +33 -0
- data/app/assets/javascripts/agile.js +22 -0
- data/app/assets/javascripts/agile_application.js +22 -0
- data/app/assets/javascripts/agile_editor.js +22 -0
- data/app/assets/stylesheets/agile/agile.css +1882 -0
- data/app/assets/stylesheets/agile/agile_apps.css +149 -0
- data/app/assets/stylesheets/agile/jquery.datetimepicker.css +304 -0
- data/app/assets/stylesheets/agile/jstree.css +1107 -0
- data/app/assets/stylesheets/agile/select-multiple.css +110 -0
- data/app/assets/stylesheets/agile/th-bg.png +0 -0
- data/app/assets/stylesheets/agile/theme.css +49 -0
- data/app/assets/stylesheets/agile.css +21 -0
- data/app/assets/stylesheets/agile_application.css +20 -0
- data/app/assets/stylesheets/agile_editor.css +19 -0
- data/app/controllers/agile_application_controller.rb +735 -0
- data/app/controllers/agile_common_controller.rb +345 -0
- data/app/controllers/agile_controller.rb +977 -0
- data/app/controllers/agile_main_controller.rb +36 -0
- data/app/controls/agile_control.rb +120 -0
- data/app/controls/agile_report.rb +364 -0
- data/app/controls/ar_category_control.rb +39 -0
- data/app/controls/ar_help_control.rb +139 -0
- data/app/controls/ar_image_control.rb +180 -0
- data/app/controls/ar_journal_control.rb +47 -0
- data/app/controls/ar_menu_item_control.rb +55 -0
- data/app/controls/ar_page_control.rb +64 -0
- data/app/controls/ar_poll_result_control.rb +84 -0
- data/app/controls/ar_setup_control.rb +62 -0
- data/app/controls/belongs_to_control.rb +61 -0
- data/app/controls/browse_models_control.rb +98 -0
- data/app/controls/settings_form_control.rb +137 -0
- data/app/forms/agile_help.yml +112 -0
- data/app/forms/agile_menu.yml +140 -0
- data/app/forms/agile_report_defaults.yml +39 -0
- data/app/forms/all_options.yml +810 -0
- data/app/forms/ar_ad.yml +121 -0
- data/app/forms/ar_big_table.yml +60 -0
- data/app/forms/ar_big_table_value.yml +52 -0
- data/app/forms/ar_browse_fields.yml +35 -0
- data/app/forms/ar_browse_models.yml +48 -0
- data/app/forms/ar_category.yml +73 -0
- data/app/forms/ar_category_as_tree.yml +31 -0
- data/app/forms/ar_design.yml +75 -0
- data/app/forms/ar_filter.yml +52 -0
- data/app/forms/ar_folder_permission.yml +56 -0
- data/app/forms/ar_folder_rule.yml +48 -0
- data/app/forms/ar_gallery.yml +55 -0
- data/app/forms/ar_image.yml +126 -0
- data/app/forms/ar_image_search.yml +83 -0
- data/app/forms/ar_journal.yml +76 -0
- data/app/forms/ar_json_ld.yml +56 -0
- data/app/forms/ar_key_value.yml +33 -0
- data/app/forms/ar_key_value_store.yml +33 -0
- data/app/forms/ar_link.yml +60 -0
- data/app/forms/ar_menu.yml +67 -0
- data/app/forms/ar_menu_item.yml +141 -0
- data/app/forms/ar_page.yml +187 -0
- data/app/forms/ar_part.yml +91 -0
- data/app/forms/ar_permission.yml +52 -0
- data/app/forms/ar_permission_rule.yml +40 -0
- data/app/forms/ar_piece.yml +106 -0
- data/app/forms/ar_policy.yml +64 -0
- data/app/forms/ar_policy_rule.yml +42 -0
- data/app/forms/ar_policy_rule_nocms.yml +40 -0
- data/app/forms/ar_poll.yml +118 -0
- data/app/forms/ar_poll_item.yml +78 -0
- data/app/forms/ar_poll_result.yml +88 -0
- data/app/forms/ar_poll_result_export.yml +35 -0
- data/app/forms/ar_removed_url.yml +41 -0
- data/app/forms/ar_role.yml +43 -0
- data/app/forms/ar_seo.yml +32 -0
- data/app/forms/ar_setup.yml +45 -0
- data/app/forms/ar_site.yml +149 -0
- data/app/forms/ar_steps_template.yml +51 -0
- data/app/forms/ar_user.yml +140 -0
- data/app/forms/ar_user_role.yml +57 -0
- data/app/forms/help/dc_category_as_tree.en +4 -0
- data/app/forms/help/dc_category_as_tree.sl +5 -0
- data/app/forms/json_ld_schema.yml +168 -0
- data/app/helpers/agile_application_helper.rb +1162 -0
- data/app/helpers/agile_category_helper.rb +128 -0
- data/app/helpers/agile_common_helper.rb +308 -0
- data/app/helpers/agile_edit_helper.rb +645 -0
- data/app/helpers/agile_helper.rb +509 -0
- data/app/helpers/agile_index_helper.rb +677 -0
- data/app/helpers/ar_image_helper.rb +128 -0
- data/app/models/agile_form_fields/action.rb +61 -0
- data/app/models/agile_form_fields/agile_form_field.rb +322 -0
- data/app/models/agile_form_fields/belongs_to.rb +112 -0
- data/app/models/agile_form_fields/check_box.rb +73 -0
- data/app/models/agile_form_fields/comment.rb +62 -0
- data/app/models/agile_form_fields/date_picker.rb +104 -0
- data/app/models/agile_form_fields/date_select.rb +68 -0
- data/app/models/agile_form_fields/datetime_picker.rb +88 -0
- data/app/models/agile_form_fields/datetime_select.rb +73 -0
- data/app/models/agile_form_fields/file_field.rb +52 -0
- data/app/models/agile_form_fields/file_select.rb +69 -0
- data/app/models/agile_form_fields/hidden_field.rb +51 -0
- data/app/models/agile_form_fields/html_field.rb +69 -0
- data/app/models/agile_form_fields/journal_diff.rb +62 -0
- data/app/models/agile_form_fields/link_to.rb +69 -0
- data/app/models/agile_form_fields/method.rb +66 -0
- data/app/models/agile_form_fields/multitext_autocomplete.rb +215 -0
- data/app/models/agile_form_fields/number_field.rb +92 -0
- data/app/models/agile_form_fields/password_field.rb +63 -0
- data/app/models/agile_form_fields/radio_button.rb +95 -0
- data/app/models/agile_form_fields/readonly.rb +77 -0
- data/app/models/agile_form_fields/select.rb +281 -0
- data/app/models/agile_form_fields/submit_tag.rb +58 -0
- data/app/models/agile_form_fields/text_area.rb +61 -0
- data/app/models/agile_form_fields/text_autocomplete.rb +171 -0
- data/app/models/agile_form_fields/text_field.rb +55 -0
- data/app/models/agile_form_fields/text_with_select.rb +94 -0
- data/app/models/agile_form_fields/tree_select.rb +170 -0
- data/app/models/ar_big_table.rb +82 -0
- data/app/models/ar_big_table_value.rb +53 -0
- data/app/models/ar_category.rb +109 -0
- data/app/models/ar_design.rb +116 -0
- data/app/models/ar_filter.rb +200 -0
- data/app/models/ar_folder_permission.rb +50 -0
- data/app/models/ar_folder_rule.rb +47 -0
- data/app/models/ar_gallery.rb +53 -0
- data/app/models/ar_image.rb +198 -0
- data/app/models/ar_internals.rb +60 -0
- data/app/models/ar_journal.rb +46 -0
- data/app/models/ar_json_ld.rb +131 -0
- data/app/models/ar_key_value_store.rb +128 -0
- data/app/models/ar_link.rb +48 -0
- data/app/models/ar_memory.rb +172 -0
- data/app/models/ar_menu.rb +144 -0
- data/app/models/ar_menu_item.rb +106 -0
- data/app/models/ar_page.rb +74 -0
- data/app/models/ar_part.rb +66 -0
- data/app/models/ar_permission.rb +180 -0
- data/app/models/ar_permission_rule.rb +65 -0
- data/app/models/ar_policy.rb +78 -0
- data/app/models/ar_policy_rule.rb +65 -0
- data/app/models/ar_poll.rb +74 -0
- data/app/models/ar_poll_item.rb +47 -0
- data/app/models/ar_poll_result.rb +38 -0
- data/app/models/ar_removed_url.rb +42 -0
- data/app/models/ar_role.rb +84 -0
- data/app/models/ar_setup.rb +115 -0
- data/app/models/ar_site.rb +68 -0
- data/app/models/ar_temp.rb +150 -0
- data/app/models/ar_user.rb +72 -0
- data/app/models/ar_user_group.rb +38 -0
- data/app/models/ar_user_role.rb +54 -0
- data/app/models/ar_visit.rb +41 -0
- data/app/models/concerns/ar_page_concern.rb +128 -0
- data/app/models/concerns/ar_part_concern.rb +48 -0
- data/app/models/concerns/ar_piece_concern.rb +48 -0
- data/app/models/concerns/ar_policy_rule_concern.rb +87 -0
- data/app/models/concerns/ar_seo_concern.rb +66 -0
- data/app/models/concerns/ar_site_concern.rb +103 -0
- data/app/models/concerns/ar_user_concern.rb +195 -0
- data/app/renderers/agile_common_renderer.rb +93 -0
- data/app/renderers/agile_renderer.rb +59 -0
- data/app/renderers/ar_ad_renderer.rb +219 -0
- data/app/renderers/ar_captcha_renderer.rb +113 -0
- data/app/renderers/ar_common_renderer.rb +90 -0
- data/app/renderers/ar_gallery_renderer.rb +107 -0
- data/app/renderers/ar_menu_renderer.rb +195 -0
- data/app/renderers/ar_page_renderer.rb +147 -0
- data/app/renderers/ar_part_renderer.rb +235 -0
- data/app/renderers/ar_piece_renderer.rb +119 -0
- data/app/renderers/ar_poll_renderer.rb +272 -0
- data/app/views/agile/_edit_stuff.html.erb +57 -0
- data/app/views/agile/_form.html.erb +24 -0
- data/app/views/agile/_result.html.erb +28 -0
- data/app/views/agile/edit.html.erb +13 -0
- data/app/views/agile/error.html.erb +2 -0
- data/app/views/agile/index.html.erb +14 -0
- data/app/views/agile/login.html.erb +19 -0
- data/app/views/agile/new.html.erb +12 -0
- data/app/views/agile_common/_help.html.erb +18 -0
- data/app/views/agile_common/_iframe_edit.html.erb +2 -0
- data/app/views/agile_common/paste_clipboard.html.erb +17 -0
- data/app/views/layouts/agile.html.erb +17 -0
- data/app/views/layouts/content.html.erb +20 -0
- data/app/views/models/dump_models.html.erb +47 -0
- data/config/initializers/kaminari_patch.rb +56 -0
- data/config/locales/agile_de.yml +138 -0
- data/config/locales/agile_en.yml +162 -0
- data/config/locales/agile_sl.yml +163 -0
- data/config/locales/datetimepicker.yml +19 -0
- data/config/locales/de.yml +231 -0
- data/config/locales/en.yml +13 -0
- data/config/locales/kaminari.yml +26 -0
- data/config/locales/models_en.yml +1032 -0
- data/config/locales/models_sl.yml +1065 -0
- data/config/locales/sl.yml +211 -0
- data/db/migrate/20240120160001_add_sessions_table.rb +12 -0
- data/db/migrate/20240120160002_ar_big_table.rb +17 -0
- data/db/migrate/20240120160003_ar_big_table_value.rb +18 -0
- data/db/migrate/20240120160004_ar_category.rb +22 -0
- data/db/migrate/20240120160005_ar_design.rb +20 -0
- data/db/migrate/20240120160006_ar_filter.rb +17 -0
- data/db/migrate/20240120160007_ar_gallery.rb +21 -0
- data/db/migrate/20240120160008_ar_journal.rb +19 -0
- data/db/migrate/20240120160009_ar_key_value_store.rb +11 -0
- data/db/migrate/20240120160010_ar_link.rb +19 -0
- data/db/migrate/20240120160011_ar_memory.rb +8 -0
- data/db/migrate/20240120160012_ar_menu.rb +21 -0
- data/db/migrate/20240120160013_ar_menu_item.rb +28 -0
- data/db/migrate/20240120160014_ar_page.rb +50 -0
- data/db/migrate/20240120160015_ar_part.rb +33 -0
- data/db/migrate/20240120160016_ar_permission.rb +16 -0
- data/db/migrate/20240120160017_ar_permission_rule.rb +17 -0
- data/db/migrate/20240120160018_ar_piece.rb +28 -0
- data/db/migrate/20240120160019_ar_policy.rb +21 -0
- data/db/migrate/20240120160020_ar_policy_rule.rb +18 -0
- data/db/migrate/20240120160021_ar_poll.rb +27 -0
- data/db/migrate/20240120160022_ar_poll_item.rb +23 -0
- data/db/migrate/20240120160023_ar_poll_result.rb +14 -0
- data/db/migrate/20240120160024_ar_removed_url.rb +16 -0
- data/db/migrate/20240120160025_ar_role.rb +17 -0
- data/db/migrate/20240120160026_ar_site.rb +37 -0
- data/db/migrate/20240120160027_ar_temp.rb +11 -0
- data/db/migrate/20240120160028_ar_user.rb +42 -0
- data/db/migrate/20240120160029_ar_user_group.rb +12 -0
- data/db/migrate/20240120160030_ar_user_role.rb +18 -0
- data/db/migrate/20240120160031_ar_visit.rb +15 -0
- data/db/migrate/20240703016001_ar_setup.rb +16 -0
- data/db/migrate/20240703016002_ar_folder_permission.rb +15 -0
- data/db/migrate/20240703016003_ar_folder_rule.rb +14 -0
- data/db/migrate/20250115000001_ar_image.rb +25 -0
- data/lib/agile/configuration.rb +43 -0
- data/lib/agile/engine.rb +29 -0
- data/lib/agile/version.rb +27 -0
- data/lib/agile.rb +282 -0
- data/lib/agile_rails.rb +1 -0
- data/lib/generators/agile/USAGE +11 -0
- data/lib/generators/agile/new_form_generator.rb +369 -0
- data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
- data/lib/tasks/agile_db_clone.rake +132 -0
- data/lib/tasks/agile_db_export_to_yaml.rake +37 -0
- data/lib/tasks/agile_db_migrate.rake +35 -0
- metadata +414 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ 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
|
+
######################################################################
|
25
|
+
# Controls for belongs_to AgileRails Form field.
|
26
|
+
######################################################################
|
27
|
+
module BelongsToControl
|
28
|
+
|
29
|
+
######################################################################
|
30
|
+
# Default filter for selecting related records
|
31
|
+
######################################################################
|
32
|
+
def default_filter
|
33
|
+
model = @tables.last[0]
|
34
|
+
return YAML.load(@record[params[:belongs_to]]) if model == 'ar_memory'
|
35
|
+
|
36
|
+
if model.column_names.include? 'parent_type'
|
37
|
+
model.where(parent_type: @tables.first[0].to_s, parent_id: params[:ids])
|
38
|
+
else
|
39
|
+
parent_table_index = @tables.size - 2
|
40
|
+
belongs_to_field = "#{(params[:belongs_to] || @tables[parent_table_index][1])}_id"
|
41
|
+
ids = params[:ids].split(';')
|
42
|
+
model.where(belongs_to_field => ids[parent_table_index])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
######################################################################
|
47
|
+
# Before save, set required fields
|
48
|
+
######################################################################
|
49
|
+
def before_save
|
50
|
+
if @record.respond_to?(:parent_type)
|
51
|
+
@record.parent_type = @tables.first[0].to_s
|
52
|
+
@record.parent_id = params[:ids]
|
53
|
+
else
|
54
|
+
parent_table_index = @tables.size - 2
|
55
|
+
belongs_to_field = "#{params[:belongs_to] || @tables[parent_table_index][1]}_id="
|
56
|
+
ids = params[:ids].split(';')
|
57
|
+
@record.send(belongs_to_field, ids[parent_table_index])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ 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
|
+
######################################################################
|
25
|
+
|
26
|
+
######################################################################
|
27
|
+
module BrowseModelsControl
|
28
|
+
|
29
|
+
#########################################################################
|
30
|
+
# Return array of all models found in application.
|
31
|
+
#########################################################################
|
32
|
+
def all_collections
|
33
|
+
collections = []
|
34
|
+
Agile.paths(:forms).each do |path|
|
35
|
+
models_dir = File.expand_path("../models", path)
|
36
|
+
Dir["#{models_dir}/*.rb"].each do |model_file|
|
37
|
+
model_file =~ /(.*)\/(.*).rb/
|
38
|
+
# check if model exists
|
39
|
+
collection = $2.camelize.constantize.new rescue nil
|
40
|
+
collections << collection.class.to_s.underscore if collection&.respond_to?(:_id)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
collections.sort
|
44
|
+
end
|
45
|
+
|
46
|
+
######################################################################
|
47
|
+
# List all collections
|
48
|
+
######################################################################
|
49
|
+
def collections
|
50
|
+
@records = []
|
51
|
+
all_collections.each do |collection|
|
52
|
+
next if params[:filter] && !collection.match(/#{params[:filter]}/i)
|
53
|
+
|
54
|
+
@records << ArMemory.new({'id' => collection, 'description' => t("helpers.label.#{collection}.table_title") })
|
55
|
+
end
|
56
|
+
@records
|
57
|
+
end
|
58
|
+
|
59
|
+
######################################################################
|
60
|
+
# List field definition for single model
|
61
|
+
######################################################################
|
62
|
+
def all_fields
|
63
|
+
@records = []
|
64
|
+
model = params[:id].classify.constantize
|
65
|
+
document = model.new
|
66
|
+
document.attribute_names.each do |attribute_name|
|
67
|
+
options = model.fields[attribute_name].options
|
68
|
+
description = I18n.t("helpers.help.#{params[:id]}.#{attribute_name}")
|
69
|
+
description = I18n.t("helpers.label.#{params[:id]}.#{attribute_name}") if description.match('missing:')
|
70
|
+
description = attribute_name if description.match('missing:')
|
71
|
+
|
72
|
+
@records << ArMemory.new({id: attribute_name,
|
73
|
+
'collection' => params[:id],
|
74
|
+
'field' => attribute_name,
|
75
|
+
'type' => options[:type],
|
76
|
+
'description' => description,
|
77
|
+
'_default' => options[:default]
|
78
|
+
})
|
79
|
+
end
|
80
|
+
# embedded documents
|
81
|
+
document.embedded_relations.each do |a_embedded|
|
82
|
+
embedded = a_embedded.last
|
83
|
+
description = I18n.t("helpers.help.#{params[:id]}.#{embedded.key}")
|
84
|
+
description = I18n.t("helpers.label.#{params[:id]}.#{embedded.key}") if description.match('missing:')
|
85
|
+
description = embedded.key if description.match('missing:')
|
86
|
+
|
87
|
+
@records << ArMemory.new({ id: embedded.key,
|
88
|
+
'collection' => params[:id],
|
89
|
+
'field' => embedded.key,
|
90
|
+
'type' => 'Embedded:' + embedded.class_name,
|
91
|
+
'description' => description
|
92
|
+
})
|
93
|
+
end
|
94
|
+
|
95
|
+
@records
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ 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
|
+
######################################################################
|
25
|
+
# AgileRails controls for editing settings saved in a document.
|
26
|
+
#
|
27
|
+
# Parameters to settings call:
|
28
|
+
# :location - model_name where settings document is located. Typically ar_page or ar_site.
|
29
|
+
# :field_name - name of the field where settings are saved
|
30
|
+
# :element - element name as defined on design
|
31
|
+
# :id - document id
|
32
|
+
######################################################################
|
33
|
+
module SettingsFormControl
|
34
|
+
|
35
|
+
######################################################################
|
36
|
+
# Check if settings control document exists and return document and
|
37
|
+
# settings values as yaml string.
|
38
|
+
#
|
39
|
+
# Return:
|
40
|
+
# [record, data] : record, yaml as String
|
41
|
+
######################################################################
|
42
|
+
def get_settings
|
43
|
+
# On save. Set required variables
|
44
|
+
if params[:record]
|
45
|
+
params[:location] = params[:record][:ar_location]
|
46
|
+
params[:field_name] = params[:record][:ar_field_name]
|
47
|
+
params[:element] = params[:record][:ar_element]
|
48
|
+
params[:id] = params[:record][:ar_record_id]
|
49
|
+
end
|
50
|
+
|
51
|
+
# Check if table exists
|
52
|
+
begin
|
53
|
+
model = params[:location].classify.constantize
|
54
|
+
rescue
|
55
|
+
flash[:error] = "Invalid or undefined model name! #{params[:location]}"
|
56
|
+
return false
|
57
|
+
end
|
58
|
+
|
59
|
+
# Check if field_name exists
|
60
|
+
begin
|
61
|
+
document = model.find(params[:id])
|
62
|
+
params[:field_name] ||= (params[:location] == 'ar_site' ? 'settings' : 'params')
|
63
|
+
# field not defined
|
64
|
+
raise unless document.respond_to?(params[:field_name])
|
65
|
+
|
66
|
+
yaml = document[params[:field_name]] || ''
|
67
|
+
rescue
|
68
|
+
flash[:error] = 'Invalid or undefined field name!'
|
69
|
+
return false
|
70
|
+
end
|
71
|
+
|
72
|
+
# Check data
|
73
|
+
begin
|
74
|
+
data = YAML.load(yaml) || {}
|
75
|
+
rescue
|
76
|
+
flash[:error] = 'Invalid configuration data found!'
|
77
|
+
return false
|
78
|
+
end
|
79
|
+
[document, data]
|
80
|
+
end
|
81
|
+
|
82
|
+
######################################################################
|
83
|
+
# Called before edit.
|
84
|
+
#
|
85
|
+
# Load fields on form with values from settings document.
|
86
|
+
######################################################################
|
87
|
+
def new_record
|
88
|
+
document, data = get_settings
|
89
|
+
return false if document.instance_of?(FalseClass) && data.nil?
|
90
|
+
|
91
|
+
# fill values with settings values
|
92
|
+
if data['settings'] && data['settings'][ params[:element] ]
|
93
|
+
data['settings'][ params[:element] ].each { |key, value| @record.send("#{key}=", value) }
|
94
|
+
end
|
95
|
+
# add some fields required at post as hidden fields to form
|
96
|
+
form = @form['form']['tabs'] ? @form['form']['tabs'].to_a.last : @form['form']['fields']
|
97
|
+
form[9999] = { 'type' => 'hidden_field', 'name' => 'ar_location', 'html' => { 'value' => params[:location] } }
|
98
|
+
form[9998] = { 'type' => 'hidden_field', 'name' => 'ar_field_name' }
|
99
|
+
@record[:ar_field_name] = params[:field_name]
|
100
|
+
form[9997] = { 'type' => 'hidden_field', 'name' => 'ar_element' }
|
101
|
+
@record.ar_element = params[:element]
|
102
|
+
form[9996] = { 'type' => 'hidden_field', 'name' => 'ar_record_id', 'html' => { 'value' => params[:id] } }
|
103
|
+
end
|
104
|
+
|
105
|
+
######################################################################
|
106
|
+
# Called before save.
|
107
|
+
#
|
108
|
+
# Convert data from fields on form to yaml and save it to document settings field.
|
109
|
+
######################################################################
|
110
|
+
def before_save
|
111
|
+
document, data = get_settings
|
112
|
+
return false if document.instance_of?(FalseClass) && data.nil?
|
113
|
+
|
114
|
+
fields_on_form.each do |v|
|
115
|
+
session[:form_processing] = v['name'] # for debugging
|
116
|
+
next if v['type'].nil? || v['readonly']
|
117
|
+
|
118
|
+
# return value from form field definition
|
119
|
+
value = AgileFormFields.const_get(v['type'].camelize).get_data(params, v['name'])
|
120
|
+
value = value.map(&:to_s) if value.instance_of?(Array)
|
121
|
+
# set to nil if blank
|
122
|
+
value = nil if value.blank?
|
123
|
+
data['settings'] ||= {}
|
124
|
+
data['settings'][params[:element]] ||= {}
|
125
|
+
data['settings'][params[:element]][v['name']] = value
|
126
|
+
end
|
127
|
+
# remove nil elements
|
128
|
+
data['settings'][ params[:element] ].compact!
|
129
|
+
# save data to document field
|
130
|
+
document.send("#{params[:field_name]}=", data.to_yaml)
|
131
|
+
document.save
|
132
|
+
# to re-set form again
|
133
|
+
new_record
|
134
|
+
false # must be
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
## Form for creating help files
|
2
|
+
---
|
3
|
+
table: ar_temp
|
4
|
+
title: agile.ar_help.title
|
5
|
+
control: ar_help
|
6
|
+
|
7
|
+
index:
|
8
|
+
actions:
|
9
|
+
|
10
|
+
10:
|
11
|
+
type: field
|
12
|
+
name: select_project
|
13
|
+
field_type: select
|
14
|
+
caption: agile.ar_help.project
|
15
|
+
choices: eval ArHelpControl.choices_for_project
|
16
|
+
default:
|
17
|
+
eval: 'session[:help_project]'
|
18
|
+
position: left
|
19
|
+
|
20
|
+
20:
|
21
|
+
type: field
|
22
|
+
name: lang_1
|
23
|
+
caption: agile.ar_help.lang
|
24
|
+
field_type: text_with_select
|
25
|
+
size: 5
|
26
|
+
choices: eval ArBigTable.choices_for('application_locales')
|
27
|
+
default:
|
28
|
+
eval: 'session[:help_lang]'
|
29
|
+
html:
|
30
|
+
placeholder: agile.ar_help.lang
|
31
|
+
position: left
|
32
|
+
|
33
|
+
50:
|
34
|
+
type: ajax
|
35
|
+
caption: agile.ar_help.project_refresh
|
36
|
+
title: agile.ar_help.project_refresh_title
|
37
|
+
icon: refresh
|
38
|
+
action: run
|
39
|
+
method: post
|
40
|
+
control: ar_help.project_refresh
|
41
|
+
|
42
|
+
60: new
|
43
|
+
|
44
|
+
data_set:
|
45
|
+
filter: data_filter
|
46
|
+
actions:
|
47
|
+
1: edit
|
48
|
+
columns:
|
49
|
+
10:
|
50
|
+
name: form_name
|
51
|
+
caption: agile.ar_help.form_name
|
52
|
+
width: 20%
|
53
|
+
20:
|
54
|
+
name: lang
|
55
|
+
caption: agile.ar_help.lang
|
56
|
+
width: 10%
|
57
|
+
30:
|
58
|
+
name: updated_at
|
59
|
+
caption: agile.ar_help.updated_at
|
60
|
+
width: 10%
|
61
|
+
format: T
|
62
|
+
|
63
|
+
form:
|
64
|
+
actions:
|
65
|
+
1: back
|
66
|
+
2: save
|
67
|
+
|
68
|
+
title:
|
69
|
+
edit: agile.ar_help.edit_title
|
70
|
+
show: agile.ar_help.show_title
|
71
|
+
|
72
|
+
tabs:
|
73
|
+
1basic:
|
74
|
+
caption: agile.ar_help.1basic
|
75
|
+
10:
|
76
|
+
name: project
|
77
|
+
type: readonly
|
78
|
+
size: 20
|
79
|
+
20:
|
80
|
+
name: form_name
|
81
|
+
caption: agile.ar_help.form_name
|
82
|
+
type: text_with_select
|
83
|
+
choices: eval ArHelpControl.choices_for_form_name(@env.session)
|
84
|
+
size: 20
|
85
|
+
html:
|
86
|
+
minlength: 4
|
87
|
+
30:
|
88
|
+
name: lang
|
89
|
+
caption: agile.ar_help.lang
|
90
|
+
type: text_field
|
91
|
+
size: 2
|
92
|
+
html:
|
93
|
+
minlength: 2
|
94
|
+
maxlength: 2
|
95
|
+
|
96
|
+
2index:
|
97
|
+
caption: agile.ar_help.2index
|
98
|
+
10:
|
99
|
+
name: index
|
100
|
+
caption: false
|
101
|
+
line: top
|
102
|
+
type: html_field
|
103
|
+
options: "height: 600"
|
104
|
+
|
105
|
+
3form:
|
106
|
+
caption: agile.ar_help.3form
|
107
|
+
10:
|
108
|
+
name: form
|
109
|
+
caption: false
|
110
|
+
line: top
|
111
|
+
type: html_field
|
112
|
+
options: "height: 600"
|
@@ -0,0 +1,140 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2024+ 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
|
+
menu:
|
25
|
+
10_system_menu:
|
26
|
+
caption: agile.cms_main
|
27
|
+
icon: support
|
28
|
+
|
29
|
+
items:
|
30
|
+
10:
|
31
|
+
caption: helpers.label.ar_site.table_title
|
32
|
+
controller: agile
|
33
|
+
icon: public
|
34
|
+
table: ar_site
|
35
|
+
20:
|
36
|
+
caption: helpers.label.ar_design.table_title
|
37
|
+
controller: agile
|
38
|
+
icon: web
|
39
|
+
table: ar_design
|
40
|
+
30:
|
41
|
+
caption: helpers.label.ar_page.table_title
|
42
|
+
controller: agile
|
43
|
+
icon: description-o
|
44
|
+
table: ar_page
|
45
|
+
40:
|
46
|
+
caption: helpers.label.ar_image.table_title
|
47
|
+
controller: agile
|
48
|
+
icon: image-o
|
49
|
+
table: ar_image
|
50
|
+
60:
|
51
|
+
caption: helpers.label.ar_link.table_title
|
52
|
+
controller: agile
|
53
|
+
icon: link
|
54
|
+
table: ar_link
|
55
|
+
70:
|
56
|
+
caption: helpers.label.ar_menu.table_title
|
57
|
+
controller: agile
|
58
|
+
icon: menu
|
59
|
+
table: ar_menu
|
60
|
+
90:
|
61
|
+
caption: helpers.label.ar_category.table_title
|
62
|
+
controller: agile
|
63
|
+
icon: list
|
64
|
+
table: ar_category
|
65
|
+
|
66
|
+
100:
|
67
|
+
caption: helpers.label.ar_poll.table_title
|
68
|
+
controller: agile
|
69
|
+
icon: poll-o
|
70
|
+
table: ar_poll
|
71
|
+
110:
|
72
|
+
caption: helpers.label.ar_poll_result.table_title
|
73
|
+
controller: agile
|
74
|
+
icon: leaderboard
|
75
|
+
table: ar_poll_result
|
76
|
+
|
77
|
+
11_system_menu:
|
78
|
+
caption: agile.cms_advanced
|
79
|
+
icon: star
|
80
|
+
items:
|
81
|
+
10:
|
82
|
+
caption: helpers.label.ar_user.table_title
|
83
|
+
controller: agile
|
84
|
+
icon: account_circle-o
|
85
|
+
table: ar_user
|
86
|
+
20:
|
87
|
+
caption: helpers.label.ar_role.table_title
|
88
|
+
controller: agile
|
89
|
+
icon: manage_accounts
|
90
|
+
table: ar_role
|
91
|
+
30:
|
92
|
+
caption: helpers.label.ar_permission.table_title
|
93
|
+
controller: agile
|
94
|
+
icon: security
|
95
|
+
table: ar_permission
|
96
|
+
40:
|
97
|
+
caption: helpers.label.ar_folder_permission.table_title
|
98
|
+
controller: agile
|
99
|
+
icon: shield-o
|
100
|
+
table: ar_folder_permission
|
101
|
+
60:
|
102
|
+
caption: helpers.label.ar_big_table.table_title
|
103
|
+
controller: agile
|
104
|
+
icon: topic-o
|
105
|
+
table: ar_big_table
|
106
|
+
70:
|
107
|
+
caption: helpers.label.ar_key_value_store.table_title
|
108
|
+
controller: agile
|
109
|
+
icon: view_list
|
110
|
+
table: ar_key_value_store
|
111
|
+
90:
|
112
|
+
caption: helpers.label.ar_removed_url.table_title
|
113
|
+
controller: agile
|
114
|
+
icon: link_off
|
115
|
+
table: ar_removed_url
|
116
|
+
400:
|
117
|
+
caption: agile.ar_help.title
|
118
|
+
controller: agile
|
119
|
+
icon: help-o
|
120
|
+
table: ar_temp
|
121
|
+
form_name: agile_help
|
122
|
+
500:
|
123
|
+
caption: helpers.label.ar_journal.table_title
|
124
|
+
controller: agile
|
125
|
+
icon: history
|
126
|
+
table: ar_journal
|
127
|
+
|
128
|
+
510:
|
129
|
+
caption: helpers.label.ar_setup.table_title
|
130
|
+
controller: agile
|
131
|
+
icon: cog-o
|
132
|
+
table: ar_setup
|
133
|
+
form_name: ar_setup
|
134
|
+
|
135
|
+
# 600:
|
136
|
+
# caption: agile.browse_collections
|
137
|
+
# controller: agile
|
138
|
+
# icon: list_alt
|
139
|
+
# table: ar_memory
|
140
|
+
# form_name: ar_browse_models
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
form:
|
3
|
+
actions:
|
4
|
+
10:
|
5
|
+
type: ajax
|
6
|
+
caption: agile.refresh
|
7
|
+
icon: cog
|
8
|
+
table: ar_temp
|
9
|
+
form_name: &report
|
10
|
+
action: run
|
11
|
+
control: &report.collect_data
|
12
|
+
method: post
|
13
|
+
|
14
|
+
20:
|
15
|
+
type: ajax
|
16
|
+
caption: agile.print
|
17
|
+
icon: print
|
18
|
+
table: ar_temp
|
19
|
+
form_name: &report
|
20
|
+
action: run
|
21
|
+
control: &report.print
|
22
|
+
method: post
|
23
|
+
|
24
|
+
30:
|
25
|
+
type: ajax
|
26
|
+
caption: agile.export
|
27
|
+
icon: file-excel-o
|
28
|
+
table: ar_temp
|
29
|
+
form_name: &report
|
30
|
+
action: run
|
31
|
+
control: &report.export
|
32
|
+
|
33
|
+
fields:
|
34
|
+
1000:
|
35
|
+
name: ar_temp
|
36
|
+
type: belongs_to
|
37
|
+
caption: false
|
38
|
+
table: ar_temp
|
39
|
+
form_name: &report
|