django-forms-workflows 0.35.4__tar.gz → 0.35.7__tar.gz

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 (153) hide show
  1. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/PKG-INFO +1 -1
  2. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/ldap_backend.py +21 -3
  3. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/approve.html +32 -6
  4. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/submission_detail.html +7 -4
  5. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/workflow_engine.py +32 -2
  6. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/pyproject.toml +1 -1
  7. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/CHANGELOG.md +0 -0
  8. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/LICENSE +0 -0
  9. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/README.md +0 -0
  10. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/__init__.py +0 -0
  11. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/admin.py +0 -0
  12. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/apps.py +0 -0
  13. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/conditions.py +0 -0
  14. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/context_processors.py +0 -0
  15. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/data_sources/__init__.py +0 -0
  16. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/data_sources/base.py +0 -0
  17. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/data_sources/database_source.py +0 -0
  18. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/data_sources/ldap_source.py +0 -0
  19. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/data_sources/user_source.py +0 -0
  20. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/diff_views.py +0 -0
  21. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/email_backends/__init__.py +0 -0
  22. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/email_backends/gmail_api.py +0 -0
  23. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/form_builder_urls.py +0 -0
  24. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/form_builder_views.py +0 -0
  25. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/forms.py +0 -0
  26. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/__init__.py +0 -0
  27. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/api_handler.py +0 -0
  28. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/base.py +0 -0
  29. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/database_handler.py +0 -0
  30. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/email_handler.py +0 -0
  31. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/executor.py +0 -0
  32. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/file_handler.py +0 -0
  33. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/handlers/ldap_handler.py +0 -0
  34. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/create_default_templates.py +0 -0
  35. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/pull_forms.py +0 -0
  36. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/push_forms.py +0 -0
  37. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/seed_farm_demo.py +0 -0
  38. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/seed_pcn_form.py +0 -0
  39. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/seed_prefill_sources.py +0 -0
  40. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/sync_ldap_profiles.py +0 -0
  41. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/sync_ldap_users.py +0 -0
  42. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/management/commands/test_db_connection.py +0 -0
  43. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0001_initial.py +0 -0
  44. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0002_prefillsource_alter_formfield_prefill_source_and_more.py +0 -0
  45. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0003_postsubmissionaction.py +0 -0
  46. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0004_formtemplate.py +0 -0
  47. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0005_advanced_conditional_logic.py +0 -0
  48. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0006_workflowdefinition_visual_workflow_data_and_more.py +0 -0
  49. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0007_add_userprofile_ldap_enhancements.py +0 -0
  50. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0008_add_file_workflow_models.py +0 -0
  51. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0009_add_formfield_readonly.py +0 -0
  52. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0010_add_prefillsource_template_fields.py +0 -0
  53. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0011_postsubmissionaction_email_body_template_and_more.py +0 -0
  54. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0012_add_approval_step_fields.py +0 -0
  55. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0013_add_database_query_key.py +0 -0
  56. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0014_add_form_category.py +0 -0
  57. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0015_add_workflowstage_staged_approvals.py +0 -0
  58. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0016_add_pdf_generation.py +0 -0
  59. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0017_add_notification_batching.py +0 -0
  60. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0018_add_form_category_parent.py +0 -0
  61. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0019_add_ldap_group_profile.py +0 -0
  62. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0020_add_bulk_export_field.py +0 -0
  63. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0021_alter_pendingnotification_scheduled_for_and_more.py +0 -0
  64. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0022_add_bulk_pdf_export.py +0 -0
  65. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0023_add_performance_indexes.py +0 -0
  66. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0024_add_allow_resubmit.py +0 -0
  67. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0025_workflowstage_approve_label.py +0 -0
  68. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0026_alter_formfield_width.py +0 -0
  69. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0027_formsubmission_form_data_gin.py +0 -0
  70. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0028_workflowstagegroupconfig.py +0 -0
  71. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0029_formfield_workflow_stage_fk_drop_groupconfig.py +0 -0
  72. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0030_formfield_phone_type.py +0 -0
  73. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0031_sub_workflows.py +0 -0
  74. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0032_approved_pending_detached_sub_workflow.py +0 -0
  75. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0033_add_reject_parent_to_subworkflowdefinition.py +0 -0
  76. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0034_add_notificationlog.py +0 -0
  77. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0035_migrate_prefill_source_strings.py +0 -0
  78. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0036_add_workflowstage_auto_created.py +0 -0
  79. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0037_migrate_flat_workflows_to_staged.py +0 -0
  80. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0038_remove_legacy_prefill_source_and_approval_step.py +0 -0
  81. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0039_update_help_text.py +0 -0
  82. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0040_migrate_deprecated_features.py +0 -0
  83. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0041_remove_deprecated_fields.py +0 -0
  84. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0042_add_sub_workflow_section_label.py +0 -0
  85. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0043_fix_form_data_decimal_encoding.py +0 -0
  86. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0044_remove_subworkflowinstance_label.py +0 -0
  87. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0045_stageapprovalgroup_workflow_name_label.py +0 -0
  88. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0046_workflow_definition_one_to_many.py +0 -0
  89. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0047_add_hide_approval_history.py +0 -0
  90. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0048_workflowdefinition_trigger_conditions_and_more.py +0 -0
  91. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0049_formfield_multifile_type.py +0 -0
  92. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0050_workflowdefinition_collapse_parallel_stages.py +0 -0
  93. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0051_formdefinition_is_listed.py +0 -0
  94. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0052_dynamic_assignee_and_form_field_notifications.py +0 -0
  95. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0053_stageformfieldnotification_static_emails.py +0 -0
  96. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0054_rename_approved_pending_to_pending_approval.py +0 -0
  97. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0055_add_send_back.py +0 -0
  98. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0056_calculated_formula_spreadsheet.py +0 -0
  99. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0057_add_currency_field_type.py +0 -0
  100. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0058_rename_assignee_email_field_add_lookup_type.py +0 -0
  101. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0059_add_multiselect_list_field_type.py +0 -0
  102. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/0060_alter_workflowstage_assignee_lookup_type_helptext.py +0 -0
  103. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/migrations/__init__.py +0 -0
  104. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/models.py +0 -0
  105. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/signals.py +0 -0
  106. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/sso_backends.py +0 -0
  107. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/sso_urls.py +0 -0
  108. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/sso_views.py +0 -0
  109. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/static/django_forms_workflows/js/form-builder.js +0 -0
  110. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/static/django_forms_workflows/js/form-enhancements.js +0 -0
  111. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/static/django_forms_workflows/js/workflow-builder.js +0 -0
  112. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/sync_api.py +0 -0
  113. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/sync_views.py +0 -0
  114. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/tasks.py +0 -0
  115. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/_sync_diff.html +0 -0
  116. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/diff_forms.html +0 -0
  117. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/form_builder.html +0 -0
  118. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/formdef_change_form.html +0 -0
  119. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/formdefinition/change_list.html +0 -0
  120. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/sync_import.html +0 -0
  121. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/sync_pull.html +0 -0
  122. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/sync_push.html +0 -0
  123. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/admin/django_forms_workflows/workflow_builder.html +0 -0
  124. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/_category_node.html +0 -0
  125. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/approval_inbox.html +0 -0
  126. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/base.html +0 -0
  127. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/completed_approvals.html +0 -0
  128. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/form_categories.html +0 -0
  129. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/form_list.html +0 -0
  130. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/form_submit.html +0 -0
  131. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/my_submissions.html +0 -0
  132. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/reassign_task.html +0 -0
  133. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/resubmit_confirm.html +0 -0
  134. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/sso/login.html +0 -0
  135. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/sub_workflow_detail.html +0 -0
  136. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/submission_bulk_pdf.html +0 -0
  137. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/submission_pdf.html +0 -0
  138. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/django_forms_workflows/withdraw_confirm.html +0 -0
  139. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/approval_notification.html +0 -0
  140. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/approval_reminder.html +0 -0
  141. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/approval_request.html +0 -0
  142. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/email_styles.html +0 -0
  143. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/escalation_notification.html +0 -0
  144. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/notification_digest.html +0 -0
  145. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/rejection_notification.html +0 -0
  146. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/emails/submission_notification.html +0 -0
  147. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templates/registration/login.html +0 -0
  148. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templatetags/__init__.py +0 -0
  149. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/templatetags/forms_workflows_tags.py +0 -0
  150. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/urls.py +0 -0
  151. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/utils.py +0 -0
  152. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/views.py +0 -0
  153. {django_forms_workflows-0.35.4 → django_forms_workflows-0.35.7}/django_forms_workflows/workflow_builder_views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-forms-workflows
3
- Version: 0.35.4
3
+ Version: 0.35.7
4
4
  Summary: Enterprise-grade, database-driven form builder with approval workflows and external data integration
5
5
  License: LGPL-3.0-only
6
6
  License-File: LICENSE
@@ -394,10 +394,20 @@ def search_ldap_users(search_term, max_results=10):
394
394
  settings, "FORMS_WORKFLOWS_LDAP_USERNAME_ATTR", "sAMAccountName"
395
395
  )
396
396
 
397
- # Build search filter (search by username, first name, or last name)
397
+ # Build search filter.
398
+ # Searches displayName in addition to sAMAccountName, givenName, and sn
399
+ # so that full-name values (e.g. "Jarred Simmonds") from form fields are
400
+ # matched correctly. displayName is the authoritative full-name field in
401
+ # Active Directory and is what the _lookup_by_ldap engine passes here.
398
402
  if search_term:
399
403
  escaped_term = escape_filter_chars(search_term)
400
- search_filter = f"(&(objectClass=user)(|({username_attr}=*{escaped_term}*)(givenName=*{escaped_term}*)(sn=*{escaped_term}*)))"
404
+ search_filter = (
405
+ f"(&(objectClass=user)"
406
+ f"(|({username_attr}=*{escaped_term}*)"
407
+ f"(displayName=*{escaped_term}*)"
408
+ f"(givenName=*{escaped_term}*)"
409
+ f"(sn=*{escaped_term}*)))"
410
+ )
401
411
  else:
402
412
  search_filter = "(objectClass=user)"
403
413
 
@@ -407,7 +417,15 @@ def search_ldap_users(search_term, max_results=10):
407
417
  settings.AUTH_LDAP_USER_SEARCH.base_dn,
408
418
  ldap.SCOPE_SUBTREE,
409
419
  search_filter,
410
- [username_attr, "givenName", "sn", "mail", "department", "title"],
420
+ [
421
+ username_attr,
422
+ "displayName",
423
+ "givenName",
424
+ "sn",
425
+ "mail",
426
+ "department",
427
+ "title",
428
+ ],
411
429
  )
412
430
 
413
431
  users = []
@@ -255,7 +255,10 @@
255
255
  </div>
256
256
  {% endif %}
257
257
  {% if section.comments %}
258
- <p class="mb-2 small fst-italic text-secondary">&#8220;{{ section.comments }}&#8221;</p>
258
+ <p class="mb-2 small fst-italic text-secondary">
259
+ <span class="badge bg-warning text-dark me-1" title="This comment is visible to the submitter."><i class="bi bi-eye-fill"></i> Public</span>
260
+ &#8220;{{ section.comments }}&#8221;
261
+ </p>
259
262
  {% endif %}
260
263
  {% if section.fields %}
261
264
  <table class="table table-bordered table-sm mb-0">
@@ -333,8 +336,18 @@
333
336
  <!-- Decision Section inline -->
334
337
  <h6 class="mb-3"><i class="bi bi-clipboard-check"></i> Your Decision</h6>
335
338
  <div class="mb-3">
336
- <label for="comments" class="form-label">Comments (Optional)</label>
337
- <textarea class="form-control" id="comments" name="comments" rows="2" placeholder="Add any comments about your decision..."></textarea>
339
+ <label for="comments" class="form-label">
340
+ Decision Comment
341
+ <span class="badge bg-warning text-dark ms-1" title="This comment is visible to the submitter and all parties on the submission record.">
342
+ <i class="bi bi-eye-fill"></i> Public
343
+ </span>
344
+ </label>
345
+ <textarea class="form-control" id="comments" name="comments" rows="2" placeholder="Optional — visible to the submitter and all parties..."></textarea>
346
+ <div class="form-text text-muted">
347
+ <i class="bi bi-info-circle"></i>
348
+ This comment is <strong>visible to the submitter</strong> and appears on the public submission record.
349
+ For internal notes, add a private field to this approval step's configuration instead.
350
+ </div>
338
351
  </div>
339
352
  <div class="d-grid gap-2 d-md-block">
340
353
  <button type="submit" name="decision" value="approve" class="btn btn-success btn-lg">
@@ -494,7 +507,10 @@
494
507
  </div>
495
508
  {% endif %}
496
509
  {% if section.comments %}
497
- <p class="mb-0 mt-1 small fst-italic text-secondary">&#8220;{{ section.comments }}&#8221;</p>
510
+ <p class="mb-0 mt-1 small fst-italic text-secondary">
511
+ <span class="badge bg-warning text-dark me-1" title="This comment is visible to the submitter."><i class="bi bi-eye-fill"></i> Public</span>
512
+ &#8220;{{ section.comments }}&#8221;
513
+ </p>
498
514
  {% endif %}
499
515
  </div>
500
516
  </div>
@@ -564,8 +580,18 @@
564
580
  <form method="post" data-loading-message="Processing your decision...">
565
581
  {% csrf_token %}
566
582
  <div class="mb-3">
567
- <label for="comments" class="form-label">Comments (Optional)</label>
568
- <textarea class="form-control" id="comments" name="comments" rows="3" placeholder="Add any comments about your decision..."></textarea>
583
+ <label for="comments" class="form-label">
584
+ Decision Comment
585
+ <span class="badge bg-warning text-dark ms-1" title="This comment is visible to the submitter and all parties on the submission record.">
586
+ <i class="bi bi-eye-fill"></i> Public
587
+ </span>
588
+ </label>
589
+ <textarea class="form-control" id="comments" name="comments" rows="3" placeholder="Optional — visible to the submitter and all parties..."></textarea>
590
+ <div class="form-text text-muted">
591
+ <i class="bi bi-info-circle"></i>
592
+ This comment is <strong>visible to the submitter</strong> and appears on the public submission record.
593
+ For internal notes, add a private field to this approval step's configuration instead.
594
+ </div>
569
595
  </div>
570
596
  <div class="d-grid gap-2 d-md-block">
571
597
  <button type="submit" name="decision" value="approve" class="btn btn-success btn-lg">
@@ -186,7 +186,10 @@
186
186
  </div>
187
187
  {% endif %}
188
188
  {% if section.comments %}
189
- <p class="mb-0 mt-1 small fst-italic text-secondary">&#8220;{{ section.comments }}&#8221;</p>
189
+ <p class="mb-0 mt-1 small fst-italic text-secondary">
190
+ <span class="badge bg-warning text-dark me-1" title="This comment is visible to the submitter."><i class="bi bi-eye-fill"></i> Public</span>
191
+ &#8220;{{ section.comments }}&#8221;
192
+ </p>
190
193
  {% endif %}
191
194
  </div>
192
195
  </div>
@@ -320,7 +323,7 @@
320
323
  <th>Status</th>
321
324
  <th>Completed By</th>
322
325
  <th>Completed At</th>
323
- <th>Comments</th>
326
+ <th>Decision Comment <span class="badge bg-warning text-dark" title="Comments are visible to the submitter."><i class="bi bi-eye-fill"></i> Public</span></th>
324
327
  </tr>
325
328
  </thead>
326
329
  <tbody>
@@ -388,7 +391,7 @@
388
391
  <th>Status</th>
389
392
  <th>Completed By</th>
390
393
  <th>Completed At</th>
391
- <th>Comments</th>
394
+ <th>Decision Comment <span class="badge bg-warning text-dark" title="Comments are visible to the submitter."><i class="bi bi-eye-fill"></i> Public</span></th>
392
395
  </tr>
393
396
  </thead>
394
397
  <tbody>
@@ -441,7 +444,7 @@
441
444
  <th>Status</th>
442
445
  <th>Completed By</th>
443
446
  <th>Completed At</th>
444
- <th>Comments</th>
447
+ <th>Decision Comment <span class="badge bg-warning text-dark" title="Comments are visible to the submitter."><i class="bi bi-eye-fill"></i> Public</span></th>
445
448
  </tr>
446
449
  </thead>
447
450
  <tbody>
@@ -471,8 +471,9 @@ def _lookup_by_ldap(user_model, value, stage, submission):
471
471
  return None
472
472
 
473
473
  # Get or JIT-create the Django User
474
+ jit_created = False
474
475
  try:
475
- return user_model.objects.get(username__iexact=username)
476
+ user = user_model.objects.get(username__iexact=username)
476
477
  except user_model.DoesNotExist:
477
478
  # Auto-provision the user so the approval task can be assigned.
478
479
  # When they later SSO in, the social-auth pipeline's
@@ -484,6 +485,7 @@ def _lookup_by_ldap(user_model, value, stage, submission):
484
485
  last_name=match.get("last_name", ""),
485
486
  is_active=True,
486
487
  )
488
+ jit_created = True
487
489
  # Create a profile if the model exists
488
490
  try:
489
491
  from .models import UserProfile
@@ -509,7 +511,35 @@ def _lookup_by_ldap(user_model, value, stage, submission):
509
511
  stage.name,
510
512
  submission.id,
511
513
  )
512
- return user
514
+
515
+ # Sync LDAP group memberships so the user has the correct Django permissions.
516
+ # Always do this for JIT-provisioned users (they have no groups yet), and
517
+ # also for existing pre-provisioned users in case their groups have changed
518
+ # since they were last synced.
519
+ try:
520
+ from .sso_backends import sync_user_ldap_groups
521
+
522
+ n = sync_user_ldap_groups(user)
523
+ logger.info(
524
+ "Dynamic assignee lookup (ldap): synced %d LDAP groups for user '%s' "
525
+ "(jit_created=%s, stage '%s', submission %s).",
526
+ n,
527
+ username,
528
+ jit_created,
529
+ stage.name,
530
+ submission.id,
531
+ )
532
+ except Exception:
533
+ logger.warning(
534
+ "Dynamic assignee lookup (ldap): could not sync LDAP groups for "
535
+ "user '%s' (stage '%s', submission %s).",
536
+ username,
537
+ stage.name,
538
+ submission.id,
539
+ exc_info=True,
540
+ )
541
+
542
+ return user
513
543
 
514
544
 
515
545
  def _notify_stage_form_field_recipients(
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-forms-workflows"
3
- version = "0.35.4"
3
+ version = "0.35.7"
4
4
  description = "Enterprise-grade, database-driven form builder with approval workflows and external data integration"
5
5
  license = "LGPL-3.0-only"
6
6
  readme = "README.md"