esdrt.content 1.74.5__zip → 1.75.0__zip
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.
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/PKG-INFO +11 -1
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/docs/HISTORY.txt +10 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/statisticsview.py +24 -24
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/inboxreviewfolderview.pt +22 -3
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/reviewfolderview.pt +25 -2
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/ldap_utils.py +2 -2
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/utils.py +11 -3
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/reviewfolder.py +65 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/subscriptionconfiguration.py +6 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/templates/subscriptionconfigurationreview.pt +34 -27
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utils.py +18 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/PKG-INFO +11 -1
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/SOURCES.txt +0 -1
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/setup.py +1 -1
- esdrt.content-1.74.5/esdrt/.DS_Store +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/.editorconfig +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/.gitignore +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/MANIFEST.in +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/Makefile +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/README.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/bootstrap.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/buildout.cfg +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/docs/INSTALL.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/docs/LICENSE.GPL +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/docs/LICENSE.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/INTEGRATION.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/adapters/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/adapters/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/adapters/reference_number.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/attachmentdownload.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/carryover.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/comments.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/copyfiles.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/get_sample_xls.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/inbox_sections.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/interfaces.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/macros.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/observation_import.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/statechange.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/tableau.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/assign_answerer_form.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/assign_conclusion_reviewer_form.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/assign_counterpart_form.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/carryover.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/finalisedfolderview.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/import_observation.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/inbox2reviewfolderview.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/macros.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/multi_input.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/reviewfolder_get_table.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/statisticsview.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/tableau_dashboard.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/comment.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/commentanswer.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/commentextender.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/conclusion.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/conclusionsphase2.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/constants.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/converter.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/crf_code_matching.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/crons.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/esdrtfile.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/indexers.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/locales/README.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/answer_acknowledged.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/answer_acknowledged.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/answer_to_msexperts.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/answer_to_msexperts.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/conclusion_to_comment.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/conclusion_to_comment.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalisation_denied.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalisation_denied.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalisation_request.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalisation_request.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalised.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalised.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalised_ms_remarks.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_finalised_rev_msg.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_to_phase2.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_to_phase2.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/observation_to_phase2_rev_msg.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_answered.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_answered_lr_msg.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_answered_msexperts_msg.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_answered_rev_msg.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_ready_for_approval.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_ready_for_approval.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_to_counterpart.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_to_counterpart.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_to_ms.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_to_ms.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/notifications/question_to_ms_rev_msg.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/observation.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/overrides.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/patches.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/patches.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/permissions.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/catalog.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/cssregistry.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/diff_tool.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrt.content_various.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/conclusion_phase2_reasons.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/conclusion_reasons.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/crf_code.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/eea_member_states.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/fuel.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/gas.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/ghg_source_category.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/ghg_source_sectors.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/highlight.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/esdrtvocabularies/parameter.csv +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/jsregistry.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/metadata.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/registry.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/rolemap.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/sharing.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/tinymce.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/Comment.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/CommentAnswer.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/Conclusion.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/ConclusionsPhase2.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/ESDRTFile.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/Folder.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/Observation.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/Question.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types/ReviewFolder.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/types.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-answer-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-comment-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-conclusion-phase2-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-conclusion-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-file-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-question-review-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-review-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows/esd-reviewtool-folder-workflow/definition.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles/default/workflows.xml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/profiles.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/question.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/roles/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/roles/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/roles/localroles.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/roles/localrolesubscriber.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/setuphandlers.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/chosen-sprite.png +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/chosen-sprite@2x.png +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/chosen.jquery.js +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/chosen.min.css +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/cookies.js +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/eea-tabs.css +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/eea-tabs.js +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/esdrt.content.css +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/flags.css +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/flags.png +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/inbox_view.css +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/inbox_view.js +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/moment.min.js +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/phase-1.png +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/phase-12.png +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/phase-2.png +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/static/superlink.jquery.js +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/subscribers.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/subscriptions/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/subscriptions/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/subscriptions/dexterity.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/subscriptions/interfaces.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/templates/diffedview.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/templates/observationview.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/templates/subscriptionconfiguration.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/tests.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/timeit.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/10_11.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/11_12.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/12_13.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/13_14.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/14_15.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/15_16.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/16_17.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/17_18.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/18_19.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/19_20.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/1_2.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/20_21.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/21_22.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/22_23.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/23_24.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/24_25.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/25_26.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/26_27.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/27_28.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/28_29.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/29_30.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/2_3.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/30_31.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/31_32.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/32_33.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/33_34.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/34_35.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/35_36.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/36_37.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/37_38.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/38_39.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/39_40.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/3_4.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/40_41.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/41_42.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/42_43.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/43_44.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/44_45.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/45_46.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/46_47.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/48_49.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/49_50.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/4_5.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/50_51.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/51_52.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/52_53.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/54_55.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/55_56.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/56_57.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/57_58.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/58_59.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/59_60.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/5_6.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/60_61.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/63_64.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/64_65.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/65_66.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/6_7.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/7_8.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/8_9.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/9_10.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/portal_workflow.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/upgrades/templates/portal_workflow_apply_and_reindex.pt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utilities/__init__.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utilities/configure.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utilities/interfaces.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utilities/ldap_utils.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utilities/ms_user.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/utilities/roles.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/vocabularies.py +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/vocabularies.zcml +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/dependency_links.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/entry_points.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/namespace_packages.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/not-zip-safe +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/requires.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt.content.egg-info/top_level.txt +0 -0
- {esdrt.content-1.74.5 → esdrt.content-1.75.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.1
|
|
2
2
|
Name: esdrt.content
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.75.0
|
|
4
4
|
Summary: Content-types for ESD Review Tool
|
|
5
5
|
Home-page: https://github.com/eea/esdrt.content/
|
|
6
6
|
Author: Mikel Larreategi
|
|
@@ -15,6 +15,16 @@ Description: Introduction
|
|
|
15
15
|
Changelog
|
|
16
16
|
=========
|
|
17
17
|
|
|
18
|
+
1.75.0 (2024-12-05)
|
|
19
|
+
-------------------
|
|
20
|
+
- Task: #277396 - Only notify author SE.
|
|
21
|
+
[batradav]
|
|
22
|
+
|
|
23
|
+
1.74.6 (2024-07-01)
|
|
24
|
+
-------------------
|
|
25
|
+
- Task: #272010 - ESD EMRT extract error
|
|
26
|
+
[batradav]
|
|
27
|
+
|
|
18
28
|
1.74.5 (2024-02-16)
|
|
19
29
|
-------------------
|
|
20
30
|
- Task: #265134 - Adding flags to the export function
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
1.75.0 (2024-12-05)
|
|
5
|
+
-------------------
|
|
6
|
+
- Task: #277396 - Only notify author SE.
|
|
7
|
+
[batradav]
|
|
8
|
+
|
|
9
|
+
1.74.6 (2024-07-01)
|
|
10
|
+
-------------------
|
|
11
|
+
- Task: #272010 - ESD EMRT extract error
|
|
12
|
+
[batradav]
|
|
13
|
+
|
|
4
14
|
1.74.5 (2024-02-16)
|
|
5
15
|
-------------------
|
|
6
16
|
- Task: #265134 - Adding flags to the export function
|
|
@@ -20,7 +20,7 @@ class StatisticsView(grok.View):
|
|
|
20
20
|
grok.require('cmf.ManagePortal')
|
|
21
21
|
|
|
22
22
|
def update(self):
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
self.observations = self.get_all_observations()
|
|
25
25
|
self.questions = self.get_all_questions()
|
|
26
26
|
|
|
@@ -74,7 +74,7 @@ class StatisticsView(grok.View):
|
|
|
74
74
|
return step
|
|
75
75
|
|
|
76
76
|
def _generic_getter(self, objs, key, value, columns=[], filter_fun=None):
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
"""
|
|
79
79
|
Generic function to get items for later rendering.
|
|
80
80
|
Parameters:
|
|
@@ -258,7 +258,7 @@ class DownloadStatisticsView(grok.View):
|
|
|
258
258
|
return step
|
|
259
259
|
|
|
260
260
|
def _generic_getter(self, objs, key, value, columns=[], filter_fun=None):
|
|
261
|
-
|
|
261
|
+
|
|
262
262
|
"""
|
|
263
263
|
Generic function to get items for later rendering.
|
|
264
264
|
Parameters:
|
|
@@ -359,15 +359,15 @@ class DownloadStatisticsView(grok.View):
|
|
|
359
359
|
columns=['SRRE', 'LRQE', 'MSC', 'answered', 'conclusions', 'finalised']
|
|
360
360
|
)
|
|
361
361
|
for observation in observations:
|
|
362
|
-
data.append([observation['country'],
|
|
362
|
+
data.append([observation['country'],
|
|
363
363
|
observation['SRRE'],
|
|
364
364
|
observation['LRQE'],
|
|
365
365
|
observation['MSC'],
|
|
366
|
-
observation['answered'],
|
|
367
|
-
observation['conclusions'],
|
|
368
|
-
observation['finalised'],
|
|
366
|
+
observation['answered'],
|
|
367
|
+
observation['conclusions'],
|
|
368
|
+
observation['finalised'],
|
|
369
369
|
observation['sum']])
|
|
370
|
-
data.headers = ['Country', 'SR/RE', 'LR/QE', 'MSC', 'Answer received', 'Conclusions', 'Finalised', 'Sum']
|
|
370
|
+
data.headers = ['Country', 'SR/RE', 'LR/QE', 'MSC', 'Answer received', 'Conclusions', 'Finalised', 'Sum']
|
|
371
371
|
|
|
372
372
|
return data
|
|
373
373
|
|
|
@@ -379,19 +379,19 @@ class DownloadStatisticsView(grok.View):
|
|
|
379
379
|
key='sector',
|
|
380
380
|
value='status',
|
|
381
381
|
columns=['SRRE', 'LRQE', 'MSC', 'answered', 'conclusions', 'finalised']
|
|
382
|
-
)
|
|
382
|
+
)
|
|
383
383
|
for observation in observations:
|
|
384
|
-
data.append([observation['sector'],
|
|
384
|
+
data.append([observation['sector'],
|
|
385
385
|
observation['SRRE'],
|
|
386
386
|
observation['LRQE'],
|
|
387
387
|
observation['MSC'],
|
|
388
|
-
observation['answered'],
|
|
389
|
-
observation['conclusions'],
|
|
390
|
-
observation['finalised'],
|
|
388
|
+
observation['answered'],
|
|
389
|
+
observation['conclusions'],
|
|
390
|
+
observation['finalised'],
|
|
391
391
|
observation['sum']])
|
|
392
|
-
data.headers = ['Sector', 'SR/RE', 'LR/QE', 'MSC', 'Answer received', 'Conclusions', 'Finalised', 'Sum']
|
|
392
|
+
data.headers = ['Sector', 'SR/RE', 'LR/QE', 'MSC', 'Answer received', 'Conclusions', 'Finalised', 'Sum']
|
|
393
393
|
|
|
394
|
-
return data
|
|
394
|
+
return data
|
|
395
395
|
|
|
396
396
|
def finalised_reason_per_country(self):
|
|
397
397
|
data = tablib.Dataset()
|
|
@@ -401,19 +401,19 @@ class DownloadStatisticsView(grok.View):
|
|
|
401
401
|
key='country',
|
|
402
402
|
value='finalisation_reason',
|
|
403
403
|
columns=['no-conclusion-yet', 'no-response-needed', 'partly-resolved', 'resolved', 'unresolved', 'significant-issue']
|
|
404
|
-
)
|
|
404
|
+
)
|
|
405
405
|
for observation in observations:
|
|
406
|
-
data.append([observation['country'],
|
|
406
|
+
data.append([observation['country'],
|
|
407
407
|
observation['no-conclusion-yet'],
|
|
408
408
|
observation['no-response-needed'],
|
|
409
409
|
observation['partly-resolved'],
|
|
410
|
-
observation['resolved'],
|
|
410
|
+
observation['resolved'],
|
|
411
411
|
observation['unresolved'],
|
|
412
412
|
observation['significant-issue'],
|
|
413
413
|
observation['sum']])
|
|
414
|
-
data.headers = ['Country', 'No conclusion yet', 'No response needed', 'Party resolved', 'Resolved', 'Unresolved', 'Significant issue', 'Sum']
|
|
414
|
+
data.headers = ['Country', 'No conclusion yet', 'No response needed', 'Party resolved', 'Resolved', 'Unresolved', 'Significant issue', 'Sum']
|
|
415
415
|
|
|
416
|
-
return data
|
|
416
|
+
return data
|
|
417
417
|
|
|
418
418
|
def finalised_reason_per_sector(self):
|
|
419
419
|
data = tablib.Dataset()
|
|
@@ -425,17 +425,17 @@ class DownloadStatisticsView(grok.View):
|
|
|
425
425
|
columns=['no-conclusion-yet', 'no-response-needed', 'partly-resolved', 'resolved', 'unresolved', 'significant-issue']
|
|
426
426
|
)
|
|
427
427
|
for observation in observations:
|
|
428
|
-
data.append([observation['sector'],
|
|
428
|
+
data.append([observation['sector'],
|
|
429
429
|
observation['no-conclusion-yet'],
|
|
430
430
|
observation['no-response-needed'],
|
|
431
431
|
observation['partly-resolved'],
|
|
432
|
-
observation['resolved'],
|
|
432
|
+
observation['resolved'],
|
|
433
433
|
observation['unresolved'],
|
|
434
434
|
observation['significant-issue'],
|
|
435
435
|
observation['sum']])
|
|
436
|
-
data.headers = ['Sector', 'No conclusion yet', 'No response needed', 'Party resolved', 'Resolved', 'Unresolved', 'Significant issue', 'Sum']
|
|
436
|
+
data.headers = ['Sector', 'No conclusion yet', 'No response needed', 'Party resolved', 'Resolved', 'Unresolved', 'Significant issue', 'Sum']
|
|
437
437
|
|
|
438
|
-
return data
|
|
438
|
+
return data
|
|
439
439
|
|
|
440
440
|
|
|
441
441
|
def observation_highlights_pgf(self):
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
<tal:block metal:fill-slot="javascript_head_slot">
|
|
9
9
|
<script tal:attributes="src string:${portal_url}/++resource++esdrt.content/cookies.js"></script>
|
|
10
10
|
<script tal:attributes="src string:${portal_url}/++resource++esdrt.content/inbox_view.js"></script>
|
|
11
|
+
<script type="text/javascript" src="++resource++orderedselect_input.js"></script>
|
|
12
|
+
<script type="text/javascript">
|
|
13
|
+
$(document).ready(function(){
|
|
14
|
+
$(".chosen-select").chosen({width: "100%", allow_single_deselect: true});
|
|
15
|
+
})
|
|
16
|
+
</script>
|
|
11
17
|
</tal:block>
|
|
12
18
|
<tal:block metal:fill-slot="style_slot">
|
|
13
19
|
<link rel="stylesheet" type="text/css" tal:attributes="href string:${portal_url}/++resource++esdrt.content/inbox_view.css" />
|
|
@@ -49,16 +55,29 @@
|
|
|
49
55
|
|
|
50
56
|
<div id="filters">
|
|
51
57
|
<div class="row" style="padding-top:30px">
|
|
52
|
-
<div class="cell position-1 width-
|
|
58
|
+
<div class="cell position-1 width-9 esdLabel">Free text</div>
|
|
59
|
+
<div class="cell position-10 width-3 esdLabel">Author</div>
|
|
53
60
|
</div>
|
|
54
61
|
<div class="row">
|
|
55
62
|
<form action="./inboxview" method="GET" tal:define="freeText request/freeText|nothing">
|
|
56
|
-
<div class="cell position-1 width-
|
|
57
|
-
<tal:params repeat="req_param python:[x for x in req_params if x[0]
|
|
63
|
+
<div class="cell position-1 width-9">
|
|
64
|
+
<tal:params repeat="req_param python:[x for x in req_params if x[0] not in ['freeText', 'obsAuthor']]">
|
|
58
65
|
<input type="hidden" tal:attributes="name python:req_param[0]; value python:req_param[1]" />
|
|
59
66
|
</tal:params>
|
|
60
67
|
<input type="text" style="width:100%;border-radius:5px;height:21px" name="freeText" tal:attributes="value freeText" />
|
|
61
68
|
</div>
|
|
69
|
+
<div class="cell position-10 width-3 esdLabel">
|
|
70
|
+
<select id="obsAuthorFilter" name="obsAuthor" class="chosen-select" data-placeholder="Select author"
|
|
71
|
+
tal:define="obsAuthor python:'';
|
|
72
|
+
obsAuthor request/obsAuthor | obsAuthor">
|
|
73
|
+
<option></option>
|
|
74
|
+
<tal:option repeat="author python:view.get_indexed_authors()">
|
|
75
|
+
<option
|
|
76
|
+
tal:attributes="value python:author[0]; selected python:author[0] == obsAuthor"
|
|
77
|
+
tal:content="python:author[1]"></option>
|
|
78
|
+
</tal:option>
|
|
79
|
+
</select>
|
|
80
|
+
</div>
|
|
62
81
|
<div class="cell position-14 width-1">
|
|
63
82
|
<input type="submit" class="standardButton" id="btnFilter" value="Search" />
|
|
64
83
|
</div>
|
{esdrt.content-1.74.5 → esdrt.content-1.75.0}/esdrt/content/browser/templates/reviewfolderview.pt
RENAMED
|
@@ -175,6 +175,16 @@
|
|
|
175
175
|
}
|
|
176
176
|
filter += "wfStatus=" + $('#wfStatusFilter').val();
|
|
177
177
|
}
|
|
178
|
+
// Commented so that empty value cand be used to show all available if desired.
|
|
179
|
+
// This is handled in reviewfolder.py by checking if obsAuthorFilter is None.
|
|
180
|
+
// if ($('#obsAuthorFilter').val() != ""){
|
|
181
|
+
if (filter == ""){
|
|
182
|
+
filter += "?";
|
|
183
|
+
}else{
|
|
184
|
+
filter += "&";
|
|
185
|
+
}
|
|
186
|
+
filter += "obsAuthor=" + $('#obsAuthorFilter').val();
|
|
187
|
+
// }
|
|
178
188
|
if ($('#crfFilter').val() != ""){
|
|
179
189
|
if (filter == ""){
|
|
180
190
|
filter += "?";
|
|
@@ -380,7 +390,8 @@
|
|
|
380
390
|
</div>
|
|
381
391
|
<div class="row" style="padding-top:20px">
|
|
382
392
|
<div class="cell position-1 width-3 esdLabel" tal:condition="here/enable_steps">Step</div>
|
|
383
|
-
<div class="cell position-4 width-
|
|
393
|
+
<div class="cell position-4 width-3 esdLabel">Workflow</div>
|
|
394
|
+
<div class="cell position-7 width-3 esdLabel">Author</div>
|
|
384
395
|
</div>
|
|
385
396
|
<div class="row">
|
|
386
397
|
<div class="cell position-1 width-3" tal:condition="here/enable_steps">
|
|
@@ -394,7 +405,7 @@
|
|
|
394
405
|
value="step2">Step2</option>
|
|
395
406
|
</select>
|
|
396
407
|
</div>
|
|
397
|
-
<div class="cell position-4 width-
|
|
408
|
+
<div class="cell position-4 width-3">
|
|
398
409
|
<select id="wfStatusFilter" class="chosen-select" data-placeholder="Select status"
|
|
399
410
|
tal:define="wfStatus python:'';
|
|
400
411
|
wfStatus request/wfStatus | wfStatus">
|
|
@@ -415,6 +426,18 @@
|
|
|
415
426
|
value="finalised">Finalised</option>
|
|
416
427
|
</select>
|
|
417
428
|
</div>
|
|
429
|
+
<div class="cell position-7 width-3">
|
|
430
|
+
<select id="obsAuthorFilter" class="chosen-select" data-placeholder="Select author"
|
|
431
|
+
tal:define="obsAuthor python:'';
|
|
432
|
+
obsAuthor request/obsAuthor | obsAuthor">
|
|
433
|
+
<option></option>
|
|
434
|
+
<tal:option repeat="author python:view.get_indexed_authors()">
|
|
435
|
+
<option
|
|
436
|
+
tal:attributes="value python:author[0]; selected python:author[0] == obsAuthor"
|
|
437
|
+
tal:content="python:author[1]"></option>
|
|
438
|
+
</tal:option>
|
|
439
|
+
</select>
|
|
440
|
+
</div>
|
|
418
441
|
</div>
|
|
419
442
|
<div class="row" style="padding-top:30px">
|
|
420
443
|
<div class="cell position-1 width-1">
|
|
@@ -29,7 +29,7 @@ def query_group_members(portal, query):
|
|
|
29
29
|
q_ldap.query_groups(query, ('uniqueMember', ))
|
|
30
30
|
)
|
|
31
31
|
|
|
32
|
-
unique_users = set(chain(*res_groups.values()))
|
|
32
|
+
unique_users = [v for v in set(chain(*res_groups.values())) if v]
|
|
33
33
|
user_names = format_users(
|
|
34
34
|
'cn',
|
|
35
35
|
q_ldap.query_users(
|
|
@@ -38,6 +38,6 @@ def query_group_members(portal, query):
|
|
|
38
38
|
)
|
|
39
39
|
|
|
40
40
|
return {
|
|
41
|
-
gname: [user_names[muid] for muid in muids]
|
|
41
|
+
gname: [user_names[muid] for muid in muids if muid]
|
|
42
42
|
for gname, muids in res_groups.items()
|
|
43
43
|
}
|
|
@@ -98,12 +98,20 @@ def get_users_in_context(observation, role, notification_name):
|
|
|
98
98
|
|
|
99
99
|
|
|
100
100
|
def exclude_user_from_notification(observation, user, role, notification):
|
|
101
|
+
user_id = user.getId()
|
|
101
102
|
adapted = INotificationUnsubscriptions(observation)
|
|
102
|
-
data = adapted.get_user_data(
|
|
103
|
+
data = adapted.get_user_data(user_id)
|
|
103
104
|
if not data:
|
|
104
105
|
area = aq_parent(aq_inner(observation))
|
|
105
106
|
if IReviewFolder.providedBy(area):
|
|
106
107
|
adapted = INotificationUnsubscriptions(area)
|
|
107
|
-
data = adapted.get_user_data(
|
|
108
|
+
data = adapted.get_user_data(user_id)
|
|
108
109
|
excluded_notifications = data.get(role, [])
|
|
109
|
-
|
|
110
|
+
exclude_based_on_notification = notification in excluded_notifications
|
|
111
|
+
if exclude_based_on_notification:
|
|
112
|
+
return exclude_based_on_notification
|
|
113
|
+
|
|
114
|
+
if role in ["ReviewerPhase1", "ReviewerPhase2"] and "config_only_where_author" not in excluded_notifications:
|
|
115
|
+
owner = observation.getOwner()
|
|
116
|
+
return user_id != owner.getId() if owner else False
|
|
117
|
+
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import operator
|
|
2
3
|
import itertools
|
|
3
4
|
import time
|
|
4
5
|
from datetime import datetime
|
|
@@ -54,6 +55,7 @@ from esdrt.content.crf_code_matching import get_category_ldap_from_crf_code
|
|
|
54
55
|
from esdrt.content.timeit import timeit
|
|
55
56
|
from esdrt.content.utilities.interfaces import ISetupReviewFolderRoles
|
|
56
57
|
from esdrt.content.utilities.ms_user import IUserIsMS
|
|
58
|
+
from esdrt.content.utils import get_userid_name
|
|
57
59
|
|
|
58
60
|
|
|
59
61
|
LOG = logging.getLogger(__name__)
|
|
@@ -85,6 +87,31 @@ LDAP_QUERY_GROUPS = (
|
|
|
85
87
|
)
|
|
86
88
|
|
|
87
89
|
|
|
90
|
+
def get_indexed_authors(context):
|
|
91
|
+
catalog = api.portal.get_tool("portal_catalog")
|
|
92
|
+
path = "/".join(context.getPhysicalPath())
|
|
93
|
+
query = {
|
|
94
|
+
"path": path,
|
|
95
|
+
"portal_type": "Observation",
|
|
96
|
+
}
|
|
97
|
+
authors = set([b.Creator for b in catalog.searchResults(query)])
|
|
98
|
+
return authors
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def get_indexed_authors_with_names(context):
|
|
102
|
+
authors = get_indexed_authors(context)
|
|
103
|
+
return [(v, get_userid_name(v)) for v in authors]
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def get_indexed_authors_for_select(context):
|
|
107
|
+
authors_with_names = get_indexed_authors_with_names(context)
|
|
108
|
+
user = api.user.get_current()
|
|
109
|
+
if (user):
|
|
110
|
+
userId = user.getId()
|
|
111
|
+
authors_with_names = [(uid, "Me ({})".format(uname)) if uid == userId else (uid, uname) for uid, uname in authors_with_names]
|
|
112
|
+
return sorted(authors_with_names, key=lambda x: float("-inf") if x[1][:2] == "Me" else x[1])
|
|
113
|
+
|
|
114
|
+
|
|
88
115
|
def get_observation_phase(brain):
|
|
89
116
|
result = ""
|
|
90
117
|
state = brain["observation_questions_workflow"]
|
|
@@ -162,6 +189,22 @@ def _user_name(fun, self, userid):
|
|
|
162
189
|
return (userid, time.time() // 86400)
|
|
163
190
|
|
|
164
191
|
|
|
192
|
+
def redirect_for_author(context, request):
|
|
193
|
+
obsAuthor = request.get("obsAuthor", None)
|
|
194
|
+
missing_author_filter = obsAuthor is None
|
|
195
|
+
user = api.user.get_current()
|
|
196
|
+
is_user = not api.user.is_anonymous() and "Manager" not in user.getRoles()
|
|
197
|
+
if missing_author_filter and is_user:
|
|
198
|
+
user_id = user.getId()
|
|
199
|
+
if user_id in get_indexed_authors(context):
|
|
200
|
+
new_url = "%s?%s&obsAuthor=%s" % (
|
|
201
|
+
request["ACTUAL_URL"],
|
|
202
|
+
request["QUERY_STRING"],
|
|
203
|
+
user_id,
|
|
204
|
+
)
|
|
205
|
+
return request.response.redirect(new_url)
|
|
206
|
+
|
|
207
|
+
|
|
165
208
|
class IReviewFolder(plone.directives.form.Schema, IImageScaleTraversable):
|
|
166
209
|
"""
|
|
167
210
|
Folder to have all observations together
|
|
@@ -235,6 +278,17 @@ class ReviewFolder(Container):
|
|
|
235
278
|
|
|
236
279
|
|
|
237
280
|
class ReviewFolderMixin(BrowserView):
|
|
281
|
+
|
|
282
|
+
def get_current_user_id(self):
|
|
283
|
+
result = ""
|
|
284
|
+
user = api.user.get_current()
|
|
285
|
+
if user:
|
|
286
|
+
result = user.getId()
|
|
287
|
+
return result
|
|
288
|
+
|
|
289
|
+
def get_indexed_authors(self):
|
|
290
|
+
return get_indexed_authors_for_select(self.context)
|
|
291
|
+
|
|
238
292
|
@memoize
|
|
239
293
|
def get_questions(self, sort_on="modified", sort_order="reverse"):
|
|
240
294
|
country = self.request.form.get("country", "")
|
|
@@ -245,6 +299,7 @@ class ReviewFolderMixin(BrowserView):
|
|
|
245
299
|
freeText = self.request.form.get("freeText", "")
|
|
246
300
|
step = self.request.form.get("step", "")
|
|
247
301
|
wfStatus = self.request.form.get("wfStatus", "")
|
|
302
|
+
obsAuthor = self.request.form.get("obsAuthor", "")
|
|
248
303
|
crfCode = self.request.form.get("crfCode", "")
|
|
249
304
|
gas = self.request.form.get("gas", self.request.form.get("gas[]", []))
|
|
250
305
|
gas = gas if isinstance(gas, list) else [gas]
|
|
@@ -289,6 +344,8 @@ class ReviewFolderMixin(BrowserView):
|
|
|
289
344
|
query["observation_step"] = step
|
|
290
345
|
if wfStatus != "":
|
|
291
346
|
query["observation_status"] = wfStatus
|
|
347
|
+
if obsAuthor != "":
|
|
348
|
+
query["Creator"] = obsAuthor
|
|
292
349
|
if crfCode != "":
|
|
293
350
|
query["crf_code"] = crfCode
|
|
294
351
|
if gas != "":
|
|
@@ -503,6 +560,7 @@ class ReviewFolderBrowserView(ReviewFolderMixin):
|
|
|
503
560
|
return table.render(table)
|
|
504
561
|
|
|
505
562
|
def render(self):
|
|
563
|
+
redirect_for_author(self.context, self.request)
|
|
506
564
|
sort_on = self.request.get("sort_on", "modified")
|
|
507
565
|
sort_order = self.request.get("sort_order", "reverse")
|
|
508
566
|
pagenumber = self.request.get("pagenumber", "1")
|
|
@@ -988,6 +1046,9 @@ class InboxReviewFolderView(BrowserView):
|
|
|
988
1046
|
def get_current_user(self):
|
|
989
1047
|
return api.user.get_current()
|
|
990
1048
|
|
|
1049
|
+
def get_indexed_authors(self):
|
|
1050
|
+
return get_indexed_authors_for_select(self.context)
|
|
1051
|
+
|
|
991
1052
|
def get_sections(self):
|
|
992
1053
|
is_sec = self.is_secretariat()
|
|
993
1054
|
viewable = [sec for sec in SECTIONS if is_sec or sec["check"](self)]
|
|
@@ -1015,6 +1076,7 @@ class InboxReviewFolderView(BrowserView):
|
|
|
1015
1076
|
|
|
1016
1077
|
def __call__(self):
|
|
1017
1078
|
self.rolemap_observations = {}
|
|
1079
|
+
redirect_for_author(self.context, self.request)
|
|
1018
1080
|
return super(InboxReviewFolderView, self).__call__()
|
|
1019
1081
|
|
|
1020
1082
|
def batch(self, observations, b_size, b_start, orphan, b_start_str):
|
|
@@ -1027,6 +1089,7 @@ class InboxReviewFolderView(BrowserView):
|
|
|
1027
1089
|
|
|
1028
1090
|
def get_observations(self, rolecheck=None, **kw):
|
|
1029
1091
|
freeText = self.request.form.get("freeText", "")
|
|
1092
|
+
obsAuthor = self.request.form.get("obsAuthor", "")
|
|
1030
1093
|
catalog = api.portal.get_tool("portal_catalog")
|
|
1031
1094
|
path = "/".join(self.context.getPhysicalPath())
|
|
1032
1095
|
query = {
|
|
@@ -1037,6 +1100,8 @@ class InboxReviewFolderView(BrowserView):
|
|
|
1037
1100
|
}
|
|
1038
1101
|
if freeText:
|
|
1039
1102
|
query["SearchableText"] = freeText
|
|
1103
|
+
if obsAuthor != "":
|
|
1104
|
+
query["Creator"] = obsAuthor
|
|
1040
1105
|
|
|
1041
1106
|
query.update(kw)
|
|
1042
1107
|
# from logging import getLogger
|
|
@@ -32,6 +32,7 @@ NOTIFICATIONS_PER_ROLE = {
|
|
|
32
32
|
'observation_finalised': True,
|
|
33
33
|
'question_answered': True,
|
|
34
34
|
'question_to_ms': True,
|
|
35
|
+
'config_only_where_author': True,
|
|
35
36
|
},
|
|
36
37
|
'ReviewerPhase2': {
|
|
37
38
|
'observation_finalisation_denied': True,
|
|
@@ -39,6 +40,7 @@ NOTIFICATIONS_PER_ROLE = {
|
|
|
39
40
|
'observation_to_phase2': True,
|
|
40
41
|
'question_answered': True,
|
|
41
42
|
'question_to_ms': True,
|
|
43
|
+
'config_only_where_author': True,
|
|
42
44
|
},
|
|
43
45
|
'QualityExpert': {
|
|
44
46
|
'conclusion_to_comment': True,
|
|
@@ -76,6 +78,7 @@ NOTIFICATION_NAMES = {
|
|
|
76
78
|
'observation_finalised': 'Observation finalised by QE',
|
|
77
79
|
'question_answered': 'Question answered by MS',
|
|
78
80
|
'question_to_ms': 'Question sent to MS by QE',
|
|
81
|
+
'config_only_where_author': 'Only notify me about observations I authored',
|
|
79
82
|
},
|
|
80
83
|
'ReviewerPhase2': {
|
|
81
84
|
'observation_finalisation_denied': 'Observation finalisation denied by LR',
|
|
@@ -83,6 +86,7 @@ NOTIFICATION_NAMES = {
|
|
|
83
86
|
'observation_to_phase2': 'Observation handed over to step 2',
|
|
84
87
|
'question_answered': 'Question answered by MS',
|
|
85
88
|
'question_to_ms': 'Question sent to MS by LR',
|
|
89
|
+
'config_only_where_author': 'Only notify me about observations I authored',
|
|
86
90
|
},
|
|
87
91
|
'QualityExpert': {
|
|
88
92
|
'conclusion_to_comment': 'Conclusion to comment by you as QE',
|
|
@@ -213,6 +217,8 @@ class SaveSubscriptionsReview(SubscriptionConfigurationMixin):
|
|
|
213
217
|
grok.require('zope2.View')
|
|
214
218
|
grok.name('save-subscriptions')
|
|
215
219
|
|
|
220
|
+
|
|
221
|
+
|
|
216
222
|
def render(self):
|
|
217
223
|
user_roles = []
|
|
218
224
|
if self.request.get('REQUEST_METHOD') == 'POST':
|
|
@@ -66,33 +66,40 @@
|
|
|
66
66
|
<input type="hidden" name="subscription_data.name:records"
|
|
67
67
|
tal:attributes="value python:item[0]" />
|
|
68
68
|
|
|
69
|
-
<
|
|
70
|
-
<
|
|
71
|
-
<
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
<
|
|
82
|
-
<
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
69
|
+
<tal:block define="notifications python:[x for x in item[1].items() if not x[0].startswith('config_')]; settings python:[x for x in item[1].items() if x[0].startswith('config_')]">
|
|
70
|
+
<table class="listing">
|
|
71
|
+
<thead>
|
|
72
|
+
<tr>
|
|
73
|
+
<th>
|
|
74
|
+
Notification
|
|
75
|
+
</th>
|
|
76
|
+
<th>
|
|
77
|
+
Enabled?
|
|
78
|
+
</th>
|
|
79
|
+
</tr>
|
|
80
|
+
</thead>
|
|
81
|
+
<tbody>
|
|
82
|
+
<tr tal:repeat="notification notifications">
|
|
83
|
+
<td>
|
|
84
|
+
<span tal:replace="python:view.notification_name(item[0], notification[0])" />
|
|
85
|
+
</td>
|
|
86
|
+
<td>
|
|
87
|
+
<input type="checkbox"
|
|
88
|
+
tal:attributes="checked python:notification[1];
|
|
89
|
+
name python:'subscription_data.' + notification[0] + ':records'" />
|
|
90
|
+
</td>
|
|
91
|
+
</tr>
|
|
92
|
+
</tbody>
|
|
93
|
+
|
|
94
|
+
</table>
|
|
95
|
+
|
|
96
|
+
<div tal:repeat="setting settings">
|
|
97
|
+
<input type="checkbox" tal:attributes="id python:setting[0]; name python:'subscription_data.{}:records'.format(setting[0]); checked python:setting[1]" />
|
|
98
|
+
<label tal:attributes="for python:setting[0]" tal:content="python:view.notification_name(item[0], setting[0])"></label>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<br />
|
|
102
|
+
</tal:block>
|
|
96
103
|
</div>
|
|
97
104
|
|
|
98
105
|
<div class="subscription-actions">
|
|
@@ -3,6 +3,24 @@ import string
|
|
|
3
3
|
from Products.CMFCore.interfaces._content import IContentish
|
|
4
4
|
from zope.globalrequest import getRequest
|
|
5
5
|
|
|
6
|
+
import plone.api as api
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def get_userid_name(userid):
|
|
10
|
+
result = userid
|
|
11
|
+
|
|
12
|
+
user = api.user.get(userid)
|
|
13
|
+
if (user):
|
|
14
|
+
result = user.getProperty("fullname", userid)
|
|
15
|
+
|
|
16
|
+
return result
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_indexed_values_for_index(index_name):
|
|
20
|
+
catalog = api.portal.get_tool("portal_catalog")
|
|
21
|
+
indexes = catalog._catalog.indexes
|
|
22
|
+
return sorted(set(indexes[index_name]._unindex.itervalues()))
|
|
23
|
+
|
|
6
24
|
|
|
7
25
|
def reduce_text(text, limit):
|
|
8
26
|
if len(text) <= limit:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.1
|
|
2
2
|
Name: esdrt.content
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.75.0
|
|
4
4
|
Summary: Content-types for ESD Review Tool
|
|
5
5
|
Home-page: https://github.com/eea/esdrt.content/
|
|
6
6
|
Author: Mikel Larreategi
|
|
@@ -15,6 +15,16 @@ Description: Introduction
|
|
|
15
15
|
Changelog
|
|
16
16
|
=========
|
|
17
17
|
|
|
18
|
+
1.75.0 (2024-12-05)
|
|
19
|
+
-------------------
|
|
20
|
+
- Task: #277396 - Only notify author SE.
|
|
21
|
+
[batradav]
|
|
22
|
+
|
|
23
|
+
1.74.6 (2024-07-01)
|
|
24
|
+
-------------------
|
|
25
|
+
- Task: #272010 - ESD EMRT extract error
|
|
26
|
+
[batradav]
|
|
27
|
+
|
|
18
28
|
1.74.5 (2024-02-16)
|
|
19
29
|
-------------------
|
|
20
30
|
- Task: #265134 - Adding flags to the export function
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|