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.
Files changed (259) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +285 -0
  5. data/Rakefile +39 -0
  6. data/agile_rails.gemspec +36 -0
  7. data/app/assets/fonts/ibm-plex-sans-300.woff2 +0 -0
  8. data/app/assets/fonts/ibm-plex-sans-400.woff2 +0 -0
  9. data/app/assets/fonts/ibm-plex-sans-500.woff2 +0 -0
  10. data/app/assets/fonts/ibm-plex-sans-600.woff2 +0 -0
  11. data/app/assets/fonts/ibm-plex-sans-700.woff2 +0 -0
  12. data/app/assets/fonts/ibm-plex-sans-italic.woff2 +0 -0
  13. data/app/assets/images/32px.png +0 -0
  14. data/app/assets/images/throbber.gif +0 -0
  15. data/app/assets/javascripts/agile/agile.js +1489 -0
  16. data/app/assets/javascripts/agile/jquery-migrate.js +702 -0
  17. data/app/assets/javascripts/agile/jquery.bpopup.js +372 -0
  18. data/app/assets/javascripts/agile/jquery.datetimepicker.js +1353 -0
  19. data/app/assets/javascripts/agile/jstree.min.js +6 -0
  20. data/app/assets/javascripts/agile/select-multiple.js +459 -0
  21. data/app/assets/javascripts/agile/some_scripts.js +33 -0
  22. data/app/assets/javascripts/agile.js +22 -0
  23. data/app/assets/javascripts/agile_application.js +22 -0
  24. data/app/assets/javascripts/agile_editor.js +22 -0
  25. data/app/assets/stylesheets/agile/agile.css +1882 -0
  26. data/app/assets/stylesheets/agile/agile_apps.css +149 -0
  27. data/app/assets/stylesheets/agile/jquery.datetimepicker.css +304 -0
  28. data/app/assets/stylesheets/agile/jstree.css +1107 -0
  29. data/app/assets/stylesheets/agile/select-multiple.css +110 -0
  30. data/app/assets/stylesheets/agile/th-bg.png +0 -0
  31. data/app/assets/stylesheets/agile/theme.css +49 -0
  32. data/app/assets/stylesheets/agile.css +21 -0
  33. data/app/assets/stylesheets/agile_application.css +20 -0
  34. data/app/assets/stylesheets/agile_editor.css +19 -0
  35. data/app/controllers/agile_application_controller.rb +735 -0
  36. data/app/controllers/agile_common_controller.rb +345 -0
  37. data/app/controllers/agile_controller.rb +977 -0
  38. data/app/controllers/agile_main_controller.rb +36 -0
  39. data/app/controls/agile_control.rb +120 -0
  40. data/app/controls/agile_report.rb +364 -0
  41. data/app/controls/ar_category_control.rb +39 -0
  42. data/app/controls/ar_help_control.rb +139 -0
  43. data/app/controls/ar_image_control.rb +180 -0
  44. data/app/controls/ar_journal_control.rb +47 -0
  45. data/app/controls/ar_menu_item_control.rb +55 -0
  46. data/app/controls/ar_page_control.rb +64 -0
  47. data/app/controls/ar_poll_result_control.rb +84 -0
  48. data/app/controls/ar_setup_control.rb +62 -0
  49. data/app/controls/belongs_to_control.rb +61 -0
  50. data/app/controls/browse_models_control.rb +98 -0
  51. data/app/controls/settings_form_control.rb +137 -0
  52. data/app/forms/agile_help.yml +112 -0
  53. data/app/forms/agile_menu.yml +140 -0
  54. data/app/forms/agile_report_defaults.yml +39 -0
  55. data/app/forms/all_options.yml +810 -0
  56. data/app/forms/ar_ad.yml +121 -0
  57. data/app/forms/ar_big_table.yml +60 -0
  58. data/app/forms/ar_big_table_value.yml +52 -0
  59. data/app/forms/ar_browse_fields.yml +35 -0
  60. data/app/forms/ar_browse_models.yml +48 -0
  61. data/app/forms/ar_category.yml +73 -0
  62. data/app/forms/ar_category_as_tree.yml +31 -0
  63. data/app/forms/ar_design.yml +75 -0
  64. data/app/forms/ar_filter.yml +52 -0
  65. data/app/forms/ar_folder_permission.yml +56 -0
  66. data/app/forms/ar_folder_rule.yml +48 -0
  67. data/app/forms/ar_gallery.yml +55 -0
  68. data/app/forms/ar_image.yml +126 -0
  69. data/app/forms/ar_image_search.yml +83 -0
  70. data/app/forms/ar_journal.yml +76 -0
  71. data/app/forms/ar_json_ld.yml +56 -0
  72. data/app/forms/ar_key_value.yml +33 -0
  73. data/app/forms/ar_key_value_store.yml +33 -0
  74. data/app/forms/ar_link.yml +60 -0
  75. data/app/forms/ar_menu.yml +67 -0
  76. data/app/forms/ar_menu_item.yml +141 -0
  77. data/app/forms/ar_page.yml +187 -0
  78. data/app/forms/ar_part.yml +91 -0
  79. data/app/forms/ar_permission.yml +52 -0
  80. data/app/forms/ar_permission_rule.yml +40 -0
  81. data/app/forms/ar_piece.yml +106 -0
  82. data/app/forms/ar_policy.yml +64 -0
  83. data/app/forms/ar_policy_rule.yml +42 -0
  84. data/app/forms/ar_policy_rule_nocms.yml +40 -0
  85. data/app/forms/ar_poll.yml +118 -0
  86. data/app/forms/ar_poll_item.yml +78 -0
  87. data/app/forms/ar_poll_result.yml +88 -0
  88. data/app/forms/ar_poll_result_export.yml +35 -0
  89. data/app/forms/ar_removed_url.yml +41 -0
  90. data/app/forms/ar_role.yml +43 -0
  91. data/app/forms/ar_seo.yml +32 -0
  92. data/app/forms/ar_setup.yml +45 -0
  93. data/app/forms/ar_site.yml +149 -0
  94. data/app/forms/ar_steps_template.yml +51 -0
  95. data/app/forms/ar_user.yml +140 -0
  96. data/app/forms/ar_user_role.yml +57 -0
  97. data/app/forms/help/dc_category_as_tree.en +4 -0
  98. data/app/forms/help/dc_category_as_tree.sl +5 -0
  99. data/app/forms/json_ld_schema.yml +168 -0
  100. data/app/helpers/agile_application_helper.rb +1162 -0
  101. data/app/helpers/agile_category_helper.rb +128 -0
  102. data/app/helpers/agile_common_helper.rb +308 -0
  103. data/app/helpers/agile_edit_helper.rb +645 -0
  104. data/app/helpers/agile_helper.rb +509 -0
  105. data/app/helpers/agile_index_helper.rb +677 -0
  106. data/app/helpers/ar_image_helper.rb +128 -0
  107. data/app/models/agile_form_fields/action.rb +61 -0
  108. data/app/models/agile_form_fields/agile_form_field.rb +322 -0
  109. data/app/models/agile_form_fields/belongs_to.rb +112 -0
  110. data/app/models/agile_form_fields/check_box.rb +73 -0
  111. data/app/models/agile_form_fields/comment.rb +62 -0
  112. data/app/models/agile_form_fields/date_picker.rb +104 -0
  113. data/app/models/agile_form_fields/date_select.rb +68 -0
  114. data/app/models/agile_form_fields/datetime_picker.rb +88 -0
  115. data/app/models/agile_form_fields/datetime_select.rb +73 -0
  116. data/app/models/agile_form_fields/file_field.rb +52 -0
  117. data/app/models/agile_form_fields/file_select.rb +69 -0
  118. data/app/models/agile_form_fields/hidden_field.rb +51 -0
  119. data/app/models/agile_form_fields/html_field.rb +69 -0
  120. data/app/models/agile_form_fields/journal_diff.rb +62 -0
  121. data/app/models/agile_form_fields/link_to.rb +69 -0
  122. data/app/models/agile_form_fields/method.rb +66 -0
  123. data/app/models/agile_form_fields/multitext_autocomplete.rb +215 -0
  124. data/app/models/agile_form_fields/number_field.rb +92 -0
  125. data/app/models/agile_form_fields/password_field.rb +63 -0
  126. data/app/models/agile_form_fields/radio_button.rb +95 -0
  127. data/app/models/agile_form_fields/readonly.rb +77 -0
  128. data/app/models/agile_form_fields/select.rb +281 -0
  129. data/app/models/agile_form_fields/submit_tag.rb +58 -0
  130. data/app/models/agile_form_fields/text_area.rb +61 -0
  131. data/app/models/agile_form_fields/text_autocomplete.rb +171 -0
  132. data/app/models/agile_form_fields/text_field.rb +55 -0
  133. data/app/models/agile_form_fields/text_with_select.rb +94 -0
  134. data/app/models/agile_form_fields/tree_select.rb +170 -0
  135. data/app/models/ar_big_table.rb +82 -0
  136. data/app/models/ar_big_table_value.rb +53 -0
  137. data/app/models/ar_category.rb +109 -0
  138. data/app/models/ar_design.rb +116 -0
  139. data/app/models/ar_filter.rb +200 -0
  140. data/app/models/ar_folder_permission.rb +50 -0
  141. data/app/models/ar_folder_rule.rb +47 -0
  142. data/app/models/ar_gallery.rb +53 -0
  143. data/app/models/ar_image.rb +198 -0
  144. data/app/models/ar_internals.rb +60 -0
  145. data/app/models/ar_journal.rb +46 -0
  146. data/app/models/ar_json_ld.rb +131 -0
  147. data/app/models/ar_key_value_store.rb +128 -0
  148. data/app/models/ar_link.rb +48 -0
  149. data/app/models/ar_memory.rb +172 -0
  150. data/app/models/ar_menu.rb +144 -0
  151. data/app/models/ar_menu_item.rb +106 -0
  152. data/app/models/ar_page.rb +74 -0
  153. data/app/models/ar_part.rb +66 -0
  154. data/app/models/ar_permission.rb +180 -0
  155. data/app/models/ar_permission_rule.rb +65 -0
  156. data/app/models/ar_policy.rb +78 -0
  157. data/app/models/ar_policy_rule.rb +65 -0
  158. data/app/models/ar_poll.rb +74 -0
  159. data/app/models/ar_poll_item.rb +47 -0
  160. data/app/models/ar_poll_result.rb +38 -0
  161. data/app/models/ar_removed_url.rb +42 -0
  162. data/app/models/ar_role.rb +84 -0
  163. data/app/models/ar_setup.rb +115 -0
  164. data/app/models/ar_site.rb +68 -0
  165. data/app/models/ar_temp.rb +150 -0
  166. data/app/models/ar_user.rb +72 -0
  167. data/app/models/ar_user_group.rb +38 -0
  168. data/app/models/ar_user_role.rb +54 -0
  169. data/app/models/ar_visit.rb +41 -0
  170. data/app/models/concerns/ar_page_concern.rb +128 -0
  171. data/app/models/concerns/ar_part_concern.rb +48 -0
  172. data/app/models/concerns/ar_piece_concern.rb +48 -0
  173. data/app/models/concerns/ar_policy_rule_concern.rb +87 -0
  174. data/app/models/concerns/ar_seo_concern.rb +66 -0
  175. data/app/models/concerns/ar_site_concern.rb +103 -0
  176. data/app/models/concerns/ar_user_concern.rb +195 -0
  177. data/app/renderers/agile_common_renderer.rb +93 -0
  178. data/app/renderers/agile_renderer.rb +59 -0
  179. data/app/renderers/ar_ad_renderer.rb +219 -0
  180. data/app/renderers/ar_captcha_renderer.rb +113 -0
  181. data/app/renderers/ar_common_renderer.rb +90 -0
  182. data/app/renderers/ar_gallery_renderer.rb +107 -0
  183. data/app/renderers/ar_menu_renderer.rb +195 -0
  184. data/app/renderers/ar_page_renderer.rb +147 -0
  185. data/app/renderers/ar_part_renderer.rb +235 -0
  186. data/app/renderers/ar_piece_renderer.rb +119 -0
  187. data/app/renderers/ar_poll_renderer.rb +272 -0
  188. data/app/views/agile/_edit_stuff.html.erb +57 -0
  189. data/app/views/agile/_form.html.erb +24 -0
  190. data/app/views/agile/_result.html.erb +28 -0
  191. data/app/views/agile/edit.html.erb +13 -0
  192. data/app/views/agile/error.html.erb +2 -0
  193. data/app/views/agile/index.html.erb +14 -0
  194. data/app/views/agile/login.html.erb +19 -0
  195. data/app/views/agile/new.html.erb +12 -0
  196. data/app/views/agile_common/_help.html.erb +18 -0
  197. data/app/views/agile_common/_iframe_edit.html.erb +2 -0
  198. data/app/views/agile_common/paste_clipboard.html.erb +17 -0
  199. data/app/views/layouts/agile.html.erb +17 -0
  200. data/app/views/layouts/content.html.erb +20 -0
  201. data/app/views/models/dump_models.html.erb +47 -0
  202. data/config/initializers/kaminari_patch.rb +56 -0
  203. data/config/locales/agile_de.yml +138 -0
  204. data/config/locales/agile_en.yml +162 -0
  205. data/config/locales/agile_sl.yml +163 -0
  206. data/config/locales/datetimepicker.yml +19 -0
  207. data/config/locales/de.yml +231 -0
  208. data/config/locales/en.yml +13 -0
  209. data/config/locales/kaminari.yml +26 -0
  210. data/config/locales/models_en.yml +1032 -0
  211. data/config/locales/models_sl.yml +1065 -0
  212. data/config/locales/sl.yml +211 -0
  213. data/db/migrate/20240120160001_add_sessions_table.rb +12 -0
  214. data/db/migrate/20240120160002_ar_big_table.rb +17 -0
  215. data/db/migrate/20240120160003_ar_big_table_value.rb +18 -0
  216. data/db/migrate/20240120160004_ar_category.rb +22 -0
  217. data/db/migrate/20240120160005_ar_design.rb +20 -0
  218. data/db/migrate/20240120160006_ar_filter.rb +17 -0
  219. data/db/migrate/20240120160007_ar_gallery.rb +21 -0
  220. data/db/migrate/20240120160008_ar_journal.rb +19 -0
  221. data/db/migrate/20240120160009_ar_key_value_store.rb +11 -0
  222. data/db/migrate/20240120160010_ar_link.rb +19 -0
  223. data/db/migrate/20240120160011_ar_memory.rb +8 -0
  224. data/db/migrate/20240120160012_ar_menu.rb +21 -0
  225. data/db/migrate/20240120160013_ar_menu_item.rb +28 -0
  226. data/db/migrate/20240120160014_ar_page.rb +50 -0
  227. data/db/migrate/20240120160015_ar_part.rb +33 -0
  228. data/db/migrate/20240120160016_ar_permission.rb +16 -0
  229. data/db/migrate/20240120160017_ar_permission_rule.rb +17 -0
  230. data/db/migrate/20240120160018_ar_piece.rb +28 -0
  231. data/db/migrate/20240120160019_ar_policy.rb +21 -0
  232. data/db/migrate/20240120160020_ar_policy_rule.rb +18 -0
  233. data/db/migrate/20240120160021_ar_poll.rb +27 -0
  234. data/db/migrate/20240120160022_ar_poll_item.rb +23 -0
  235. data/db/migrate/20240120160023_ar_poll_result.rb +14 -0
  236. data/db/migrate/20240120160024_ar_removed_url.rb +16 -0
  237. data/db/migrate/20240120160025_ar_role.rb +17 -0
  238. data/db/migrate/20240120160026_ar_site.rb +37 -0
  239. data/db/migrate/20240120160027_ar_temp.rb +11 -0
  240. data/db/migrate/20240120160028_ar_user.rb +42 -0
  241. data/db/migrate/20240120160029_ar_user_group.rb +12 -0
  242. data/db/migrate/20240120160030_ar_user_role.rb +18 -0
  243. data/db/migrate/20240120160031_ar_visit.rb +15 -0
  244. data/db/migrate/20240703016001_ar_setup.rb +16 -0
  245. data/db/migrate/20240703016002_ar_folder_permission.rb +15 -0
  246. data/db/migrate/20240703016003_ar_folder_rule.rb +14 -0
  247. data/db/migrate/20250115000001_ar_image.rb +25 -0
  248. data/lib/agile/configuration.rb +43 -0
  249. data/lib/agile/engine.rb +29 -0
  250. data/lib/agile/version.rb +27 -0
  251. data/lib/agile.rb +282 -0
  252. data/lib/agile_rails.rb +1 -0
  253. data/lib/generators/agile/USAGE +11 -0
  254. data/lib/generators/agile/new_form_generator.rb +369 -0
  255. data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
  256. data/lib/tasks/agile_db_clone.rake +132 -0
  257. data/lib/tasks/agile_db_export_to_yaml.rake +37 -0
  258. data/lib/tasks/agile_db_migrate.rake +35 -0
  259. 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