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,128 @@
|
|
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
|
+
# Helper for editing categories as tree view.
|
27
|
+
####################################################################
|
28
|
+
module AgileCategoryHelper
|
29
|
+
|
30
|
+
####################################################################
|
31
|
+
# Returns code for editing categories in a treeview
|
32
|
+
####################################################################
|
33
|
+
def categories_as_tree
|
34
|
+
head = '<div id="catagories-as-tree"><ul><li data-id="nil"><span class="mi-o mi-home"></span>'
|
35
|
+
data = ArCategory.where(parent: nil).order(order: :asc).to_a
|
36
|
+
(head + html_for_category_tree(data) + '</li></ul></div>' + js_for_category_tree).html_safe
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
####################################################################
|
42
|
+
#
|
43
|
+
####################################################################
|
44
|
+
def html_for_category_tree(data)
|
45
|
+
html = '<ul>'
|
46
|
+
data.each do |category|
|
47
|
+
icon = category.active ? 'check_box' : 'check_box_outline_blank'
|
48
|
+
html += %(<li id="#{category.id}" data-parent="#{category.parent}"><span class="mi-o mi-#{icon} mi-18"></span>#{category.name}\n)
|
49
|
+
children = ArCategory.where(parent: category.id).order(order: :asc).to_a
|
50
|
+
|
51
|
+
html += html_for_category_tree(children) if children.size > 0
|
52
|
+
html += '</li>'
|
53
|
+
end
|
54
|
+
html + '</ul>'
|
55
|
+
end
|
56
|
+
|
57
|
+
####################################################################
|
58
|
+
# Required javascript code
|
59
|
+
####################################################################
|
60
|
+
def js_for_category_tree
|
61
|
+
%(<script>
|
62
|
+
$(function() {
|
63
|
+
$("#catagories-as-tree").jstree( {
|
64
|
+
core: { themes: { icons: false },
|
65
|
+
multiple: false
|
66
|
+
},
|
67
|
+
plugins: ["types", "contextmenu"],
|
68
|
+
contextmenu: {
|
69
|
+
items: function ($node) {
|
70
|
+
return {
|
71
|
+
edit: {
|
72
|
+
label: "<span class='ar-result-submenu'>#{t('agile.edit')}</span>",
|
73
|
+
icon: "mi-o mi-edit",
|
74
|
+
action: function (obj) {
|
75
|
+
let id = $('#catagories-as-tree').jstree('get_selected', true)[0].id;
|
76
|
+
let params = "&ids=" + id;
|
77
|
+
location.href = "/agile/" + id + "/edit?t=ar_category&f=ar_category_as_tree" + params;
|
78
|
+
}
|
79
|
+
},
|
80
|
+
|
81
|
+
new_child: {
|
82
|
+
label: "<span class='ar-result-submenu'>#{t('agile.new')}</span>",
|
83
|
+
icon: "mi-o mi-plus",
|
84
|
+
action: function (obj) {
|
85
|
+
let id = $('#catagories-as-tree').jstree('get_selected', true)[0].id;
|
86
|
+
let params = "&ids=" + id + "&p_parent=" + id;
|
87
|
+
location.href = "/agile/new?t=ar_category&f=ar_category_as_tree" + params
|
88
|
+
}
|
89
|
+
},
|
90
|
+
|
91
|
+
delete: {
|
92
|
+
label: "<span class='ar-result-submenu'>#{t('agile.delete')}</span>",
|
93
|
+
icon: "mi-o mi-delete",
|
94
|
+
action: function (obj) {
|
95
|
+
if (confirmation_is_cancelled("#{t('agile.confirm_delete')}") === true) return false;
|
96
|
+
|
97
|
+
let id = $('#catagories-as-tree').jstree('get_selected', true)[0].id;
|
98
|
+
let id_return = $('#catagories-as-tree').jstree('get_selected', true)[0].data["parent"];
|
99
|
+
|
100
|
+
$.ajax({
|
101
|
+
url: "/agile/" + id + "?t=ar_category",
|
102
|
+
type: 'DELETE',
|
103
|
+
success: function(data) {
|
104
|
+
let error = data.match("#{I18n.t('agile.category_has_subs')}");
|
105
|
+
if (error !== null) {
|
106
|
+
alert(error[0]);
|
107
|
+
params = "?t=ar_category&f=ar_category_as_tree&ids=" + id;
|
108
|
+
location.href = "/agile" + params;
|
109
|
+
return true;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
});
|
113
|
+
|
114
|
+
let params = "?t=ar_category&f=ar_category_as_tree&ids=" + id_return;
|
115
|
+
location.href = "/agile" + params;
|
116
|
+
}
|
117
|
+
},
|
118
|
+
}
|
119
|
+
},
|
120
|
+
},
|
121
|
+
});
|
122
|
+
$("#catagories-as-tree").jstree(true).select_node("#{params[:ids]}");
|
123
|
+
});
|
124
|
+
|
125
|
+
</script>)
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,308 @@
|
|
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
|
+
# Common methods which may also come handy in controllers or models or any
|
27
|
+
# other module of program.
|
28
|
+
#
|
29
|
+
# Usage: include AgileCommonHelper
|
30
|
+
####################################################################
|
31
|
+
module AgileCommonHelper
|
32
|
+
|
33
|
+
####################################################################
|
34
|
+
def t(key, default = nil) #:nodoc
|
35
|
+
AgileHelper.t(key, default)
|
36
|
+
end
|
37
|
+
|
38
|
+
####################################################################
|
39
|
+
# Returns table (table) name translation for usage in dialog title. Tablename
|
40
|
+
# title is provided by helpers.label.table_name.table_title locale.
|
41
|
+
#
|
42
|
+
# Parameters:
|
43
|
+
# [tablename] String. Table (table) name to be translated.
|
44
|
+
# [default] String. Value returned if translation is not found.
|
45
|
+
#
|
46
|
+
# Returns:
|
47
|
+
# String. Translated text.
|
48
|
+
####################################################################
|
49
|
+
def t_table_name(table_name, default = nil)
|
50
|
+
t('helpers.label.' + table_name + '.table_title', default || table_name)
|
51
|
+
end
|
52
|
+
|
53
|
+
############################################################################
|
54
|
+
# Returns label for field translated to current locale for usage on data entry form.
|
55
|
+
# Translation is provided by lang.helpers.label.table_name.field_name locale. If
|
56
|
+
# translation is not found method will capitalize field_name and replace '_' with ' '.
|
57
|
+
############################################################################
|
58
|
+
def t_label_for_field(field_name, default = '')
|
59
|
+
c = (@form['i18n_prefix'] || "helpers.label.#{@form['table']}") + ".#{field_name}"
|
60
|
+
c = field_name if field_name.match(/helpers\./)
|
61
|
+
|
62
|
+
label = t(c, default)
|
63
|
+
label = field_name.capitalize.gsub('_', ' ') if c.match( /translation missing/i )
|
64
|
+
label
|
65
|
+
end
|
66
|
+
|
67
|
+
############################################################################
|
68
|
+
# Returns label for field translated to current locale for usage in browser header.
|
69
|
+
# Translation is provided by lang.helpers.label.table_name.field_name locale. If
|
70
|
+
# not found method will look in standard agile translations.
|
71
|
+
############################################################################
|
72
|
+
def t_label_for_column(options)
|
73
|
+
label = options['caption'] || options['label']
|
74
|
+
return ' ' if label == false
|
75
|
+
|
76
|
+
if label.blank?
|
77
|
+
label = if options['name']
|
78
|
+
prefix = @form['i18n_prefix'] || "helpers.label.#{@form['table']}"
|
79
|
+
"#{prefix}.#{options['name']}"
|
80
|
+
end
|
81
|
+
label = label.to_s
|
82
|
+
end
|
83
|
+
label = t(label) if label.match(/\./)
|
84
|
+
label = t("agile.#{options['name']}") if label.match('helpers.') # standard field names like created_by, updated_at
|
85
|
+
label = options['name'].capitalize if label.match('agile.') # still no translation. Just capitalize
|
86
|
+
label
|
87
|
+
end
|
88
|
+
|
89
|
+
############################################################################
|
90
|
+
def agile_text_for_value(model, field, value)
|
91
|
+
AgileHelper.name_for_value(model, field, value)
|
92
|
+
end
|
93
|
+
|
94
|
+
############################################################################
|
95
|
+
# Return choices for field in model if choices are defined in localization text.
|
96
|
+
#
|
97
|
+
# Parameters:
|
98
|
+
# [model] String. Table (table) model name (lowercase).
|
99
|
+
# [field] String. Field name used.
|
100
|
+
#
|
101
|
+
# Example:
|
102
|
+
# agile_choices_for_field('ar_user', 'state' )
|
103
|
+
#
|
104
|
+
# Returns:
|
105
|
+
# Array. Choices for select input field
|
106
|
+
############################################################################
|
107
|
+
def self.agile_choices_for_field(model, field)
|
108
|
+
c = AgileCommonHelper.t("helpers.label.#{model}.choices_for_#{field}")
|
109
|
+
return ['error'] if c.match(/translation missing/i)
|
110
|
+
|
111
|
+
c.chomp.split(',').map{ _1.split(':') }
|
112
|
+
end
|
113
|
+
|
114
|
+
############################################################################
|
115
|
+
# Will return descriptive text for id key when field in one table (table) has belongs_to
|
116
|
+
# relation to other table.
|
117
|
+
#
|
118
|
+
# Parameters:
|
119
|
+
# [model] String. Table (table) model name (lowercase).
|
120
|
+
# [field] String. Field name holding the value of descriptive text.
|
121
|
+
# [field_name] String. ID field name. This is by default id, but can be any other
|
122
|
+
# (preferred unique) field.
|
123
|
+
# [value] Value of id_field. Usually an id key but can be any other data type.
|
124
|
+
#
|
125
|
+
# Example:
|
126
|
+
# # usage in program.
|
127
|
+
# agile_name_for_id('ar_user', 'name', nil, ar_page.created_by)
|
128
|
+
#
|
129
|
+
# # usage in form
|
130
|
+
# columns:
|
131
|
+
# 2:
|
132
|
+
# name: site_id
|
133
|
+
# eval: agile_name_for_id,site,name
|
134
|
+
# # username is saved to document instead of user.id field
|
135
|
+
# 5:
|
136
|
+
# name: user
|
137
|
+
# eval: agile_name_for_id,ar_user,name,username
|
138
|
+
#
|
139
|
+
# Returns:
|
140
|
+
# String. Name (descriptive value) for specified key in table.
|
141
|
+
############################################################################
|
142
|
+
def agile_name_for_id(model, field, field_name, id = nil)
|
143
|
+
return '' if id.nil?
|
144
|
+
|
145
|
+
field_name = (field_name || 'id').strip.to_sym
|
146
|
+
field = field.strip.to_sym
|
147
|
+
model = model.strip.classify.constantize if model.class == String
|
148
|
+
record = model.find_by(field_name => id)
|
149
|
+
record.nil? ? '' : (record.send(field) rescue '?? not defined')
|
150
|
+
end
|
151
|
+
|
152
|
+
############################################################################
|
153
|
+
# Return html code for icon presenting boolean value. Icon is a picture of checked or unchecked box.
|
154
|
+
# If second parameter (fiel_name) is ommited value is supplied as first parameter.
|
155
|
+
#
|
156
|
+
# Parameters:
|
157
|
+
# [value] Boolean.
|
158
|
+
#
|
159
|
+
# Example:
|
160
|
+
# # usage from program
|
161
|
+
# agile_icon_for_boolean(document, field_name)
|
162
|
+
#
|
163
|
+
# # usage from form description
|
164
|
+
# columns:
|
165
|
+
# 10:
|
166
|
+
# name: active
|
167
|
+
# eval:agile_icon_for_boolean
|
168
|
+
############################################################################
|
169
|
+
def agile_icon_for_boolean(document = false, field_name = nil)
|
170
|
+
value = field_name.nil? ? document : document[field_name]
|
171
|
+
agile_dont?(value, true) ? mi_icon('check_box_outline_blank md-18') : mi_icon('check_box-o md-18')
|
172
|
+
end
|
173
|
+
|
174
|
+
############################################################################
|
175
|
+
# Returns html code for displaying date/time formatted by strftime. Will return '' if value is nil.
|
176
|
+
#
|
177
|
+
# Parameters:
|
178
|
+
# [value] Date/DateTime/Time.
|
179
|
+
# [format] String. strftime format mask. Defaults to locale's default format.
|
180
|
+
############################################################################
|
181
|
+
def agile_format_date_time(value, format=nil) #:nodoc:
|
182
|
+
AgileHelper.format_date_time(value, format)
|
183
|
+
end
|
184
|
+
|
185
|
+
############################################################################
|
186
|
+
# Returns html code for displaying formatted number.
|
187
|
+
#
|
188
|
+
# Parameters:
|
189
|
+
# [value] Numeric number.
|
190
|
+
# [decimals] Integer. Number of decimals
|
191
|
+
# [separator] String. Decimals separator
|
192
|
+
# [delimiter] String. Thousands delimiter.
|
193
|
+
# [currency] String. Currency symbol if applied to result string.
|
194
|
+
############################################################################
|
195
|
+
def agile_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil) #:nodoc:
|
196
|
+
AgileHelper.format_number(value, decimals, separator, delimiter, currency)
|
197
|
+
end
|
198
|
+
|
199
|
+
############################################################################
|
200
|
+
# Create help text for fields on single tab
|
201
|
+
############################################################################
|
202
|
+
def agile_help_for_tab(tab)
|
203
|
+
return '' if tab.nil?
|
204
|
+
|
205
|
+
html = ''
|
206
|
+
if tab.class == Array
|
207
|
+
tab_name = tab.last['caption'] || tab.first
|
208
|
+
tab_label, tab_help = agile_tab_label_help(tab_name)
|
209
|
+
html += %(<div class="help-tab">#{tab_label}</div><div class="help-tab-help">#{tab_help}</div>)
|
210
|
+
|
211
|
+
tab = tab.last
|
212
|
+
end
|
213
|
+
|
214
|
+
tab.each do |field|
|
215
|
+
label, help = agile_label_help(field.last)
|
216
|
+
next if help.blank?
|
217
|
+
|
218
|
+
html += %(<div class="help-field"><div class="help-label">#{label}</div><div class="help-text">#{help.gsub("\n",'<br>')}</div></div>)
|
219
|
+
end
|
220
|
+
html
|
221
|
+
end
|
222
|
+
|
223
|
+
############################################################################
|
224
|
+
# Will scoop fields and help text associated with them to create basic help text.
|
225
|
+
############################################################################
|
226
|
+
def agile_help_fields
|
227
|
+
return '' if @form['form'].nil?
|
228
|
+
|
229
|
+
html = '<a id="fields"></a>'
|
230
|
+
if @form['form']['tabs']
|
231
|
+
@form['form']['tabs'].each { |tab| html += agile_help_for_tab(tab) }
|
232
|
+
else
|
233
|
+
html += agile_help_for_tab(@form['form']['fields'])
|
234
|
+
end
|
235
|
+
html.html_safe
|
236
|
+
end
|
237
|
+
|
238
|
+
############################################################################
|
239
|
+
# Will return text from help files
|
240
|
+
############################################################################
|
241
|
+
def agile_help_body
|
242
|
+
(params[:type] == 'index' ? @help['index'] : @help['form']).html_safe
|
243
|
+
end
|
244
|
+
|
245
|
+
############################################################################
|
246
|
+
# Will return code for help button if there is any help text available for the form.
|
247
|
+
############################################################################
|
248
|
+
def agile_help_button(data_set)
|
249
|
+
type = data_set.nil? ? 'form' : 'index'
|
250
|
+
form_name = AgileHelper.form_param(params) || AgileHelper.table_param(params)
|
251
|
+
url = url_for(controller: :agile_common, action: :help, type: type, f: form_name)
|
252
|
+
html = %(<div class="ar-help-icon ar-link-ajax" data-url=#{url}>#{mi_icon('question-circle')}</div>)
|
253
|
+
return html if type == 'form'
|
254
|
+
|
255
|
+
# check if index has any help available
|
256
|
+
help_file_name = @form['help'] || @form['extend'] || form_name
|
257
|
+
help_file_name = AgileApplicationController.find_help_file(help_file_name)
|
258
|
+
if help_file_name
|
259
|
+
help = YAML.load_file(help_file_name)
|
260
|
+
return html if help['index']
|
261
|
+
end
|
262
|
+
''
|
263
|
+
end
|
264
|
+
|
265
|
+
############################################################################
|
266
|
+
# Will return html code for steps menu when form with steps is processed.
|
267
|
+
############################################################################
|
268
|
+
def agile_steps_menu_get(parent)
|
269
|
+
yaml = @form['form']['steps']
|
270
|
+
return '' unless yaml
|
271
|
+
|
272
|
+
html = %(<ul id="ar-steps-menu"><h2>#{t('agile.steps')}</h2>)
|
273
|
+
control = @form['control'] ? @form['control'] : @form['table']
|
274
|
+
parms = { controller: :agile, action: 'run', control: "#{control}.steps",
|
275
|
+
table: AgileHelper.table_param(params),
|
276
|
+
form_name: AgileHelper.form_param(params),
|
277
|
+
id: @record.id }
|
278
|
+
|
279
|
+
yaml.sort.each_with_index do |data, i|
|
280
|
+
n = i + 1
|
281
|
+
step = data.last # it's an array
|
282
|
+
url = case params[:step].to_i
|
283
|
+
when n + 1 then url_for(parms.merge({ step: n + 1, next_step: n}))
|
284
|
+
when n then url_for(parms.merge({ step: n, next_step: n}))
|
285
|
+
when n - 1 then url_for(parms.merge({ step: n - 1, next_step: n}))
|
286
|
+
else
|
287
|
+
''
|
288
|
+
end
|
289
|
+
_class = url.present? ? 'ar-link-ajax' : ''
|
290
|
+
_class += (params[:step].to_i == n ? ' active' : '')
|
291
|
+
html += %(<li class="#{_class}" data-url="#{url}">#{step['title']}</li>)
|
292
|
+
end
|
293
|
+
html += '</ul>'
|
294
|
+
end
|
295
|
+
|
296
|
+
############################################################################
|
297
|
+
# Adds additional parameters to url parameters hash. If url is nil then
|
298
|
+
# additional parameters are the return value of method.
|
299
|
+
#
|
300
|
+
# @param [Array] url : URL parameters as array. Values will be added to array.
|
301
|
+
############################################################################
|
302
|
+
def url_forward_params(parms)
|
303
|
+
if params[:belongs_to]
|
304
|
+
parms[:belongs_to] = params[:belongs_to]
|
305
|
+
parms[:belongs_to_id] = params[:belongs_to_id]
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|