decidim-enhanced_textwork 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +64 -0
- data/Rakefile +3 -0
- data/app/cells/decidim/enhanced_textwork/amendment/show.erb +14 -0
- data/app/cells/decidim/enhanced_textwork/amendment_cell.rb +39 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_draft_cell.rb +49 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_draft_link_to_paragraph/show.erb +13 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_draft_link_to_paragraph_cell.rb +57 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_draft_m/footer.erb +6 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_draft_m/tags.erb +1 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_draft_m_cell.rb +44 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_drafts/reported_content/show.erb +3 -0
- data/app/cells/decidim/enhanced_textwork/collaborative_drafts/reported_content_cell.rb +15 -0
- data/app/cells/decidim/enhanced_textwork/comments/show.erb +33 -0
- data/app/cells/decidim/enhanced_textwork/comments_cell.rb +8 -0
- data/app/cells/decidim/enhanced_textwork/content_blocks/highlighted_paragraphs/elements.erb +5 -0
- data/app/cells/decidim/enhanced_textwork/content_blocks/highlighted_paragraphs/heading.erb +1 -0
- data/app/cells/decidim/enhanced_textwork/content_blocks/highlighted_paragraphs_cell.rb +19 -0
- data/app/cells/decidim/enhanced_textwork/cost_report/show.erb +35 -0
- data/app/cells/decidim/enhanced_textwork/cost_report_cell.rb +42 -0
- data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs/show.erb +3 -0
- data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs_cell.rb +25 -0
- data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs_for_component/show.erb +19 -0
- data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs_for_component_cell.rb +41 -0
- data/app/cells/decidim/enhanced_textwork/irreversible_action_modal/show.erb +27 -0
- data/app/cells/decidim/enhanced_textwork/irreversible_action_modal_cell.rb +80 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_activity_cell.rb +35 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_cell.rb +53 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_link_to_collaborative_draft_cell.rb +26 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_link_to_rejected_emendation/show.erb +9 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_link_to_rejected_emendation_cell.rb +34 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_linked_resources/show.erb +9 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_linked_resources_cell.rb +14 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_m/footer.erb +26 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_m/tags.erb +1 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_m_cell.rb +152 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_tags/show.erb +33 -0
- data/app/cells/decidim/enhanced_textwork/paragraph_tags_cell.rb +35 -0
- data/app/cells/decidim/enhanced_textwork/paragraphs_picker/paragraphs.erb +12 -0
- data/app/cells/decidim/enhanced_textwork/paragraphs_picker/show.erb +14 -0
- data/app/cells/decidim/enhanced_textwork/paragraphs_picker_cell.rb +72 -0
- data/app/cells/decidim/enhanced_textwork/participatory_text_paragraph/buttons.erb +33 -0
- data/app/cells/decidim/enhanced_textwork/participatory_text_paragraph/show.erb +38 -0
- data/app/cells/decidim/enhanced_textwork/participatory_text_paragraph_cell.rb +104 -0
- data/app/cells/decidim/enhanced_textwork/reported_content/show.erb +4 -0
- data/app/cells/decidim/enhanced_textwork/reported_content_cell.rb +13 -0
- data/app/commands/decidim/enhanced_textwork/accept_access_to_collaborative_draft.rb +70 -0
- data/app/commands/decidim/enhanced_textwork/admin/answer_paragraph.rb +74 -0
- data/app/commands/decidim/enhanced_textwork/admin/assign_paragraphs_to_valuator.rb +61 -0
- data/app/commands/decidim/enhanced_textwork/admin/create_paragraph.rb +97 -0
- data/app/commands/decidim/enhanced_textwork/admin/create_paragraph_note.rb +67 -0
- data/app/commands/decidim/enhanced_textwork/admin/destroy_paragraph.rb +32 -0
- data/app/commands/decidim/enhanced_textwork/admin/discard_participatory_text.rb +40 -0
- data/app/commands/decidim/enhanced_textwork/admin/import_from_editor_participatory_text.rb +53 -0
- data/app/commands/decidim/enhanced_textwork/admin/import_paragraphs.rb +101 -0
- data/app/commands/decidim/enhanced_textwork/admin/import_participatory_text.rb +55 -0
- data/app/commands/decidim/enhanced_textwork/admin/merge_paragraphs.rb +69 -0
- data/app/commands/decidim/enhanced_textwork/admin/notify_paragraph_answer.rb +85 -0
- data/app/commands/decidim/enhanced_textwork/admin/publish_answers.rb +67 -0
- data/app/commands/decidim/enhanced_textwork/admin/publish_participatory_text.rb +81 -0
- data/app/commands/decidim/enhanced_textwork/admin/split_paragraphs.rb +67 -0
- data/app/commands/decidim/enhanced_textwork/admin/unassign_paragraphs_from_valuator.rb +62 -0
- data/app/commands/decidim/enhanced_textwork/admin/update_paragraph.rb +86 -0
- data/app/commands/decidim/enhanced_textwork/admin/update_paragraph_category.rb +68 -0
- data/app/commands/decidim/enhanced_textwork/admin/update_paragraph_scope.rb +75 -0
- data/app/commands/decidim/enhanced_textwork/admin/update_participatory_text.rb +68 -0
- data/app/commands/decidim/enhanced_textwork/create_collaborative_draft.rb +81 -0
- data/app/commands/decidim/enhanced_textwork/create_paragraph.rb +106 -0
- data/app/commands/decidim/enhanced_textwork/destroy_paragraph.rb +33 -0
- data/app/commands/decidim/enhanced_textwork/gallery_methods.rb +18 -0
- data/app/commands/decidim/enhanced_textwork/hashtags_methods.rb +36 -0
- data/app/commands/decidim/enhanced_textwork/publish_collaborative_draft.rb +93 -0
- data/app/commands/decidim/enhanced_textwork/publish_paragraph.rb +105 -0
- data/app/commands/decidim/enhanced_textwork/reject_access_to_collaborative_draft.rb +62 -0
- data/app/commands/decidim/enhanced_textwork/request_access_to_collaborative_draft.rb +49 -0
- data/app/commands/decidim/enhanced_textwork/unvote_paragraph.rb +65 -0
- data/app/commands/decidim/enhanced_textwork/update_collaborative_draft.rb +63 -0
- data/app/commands/decidim/enhanced_textwork/update_paragraph.rb +135 -0
- data/app/commands/decidim/enhanced_textwork/vote_paragraph.rb +77 -0
- data/app/commands/decidim/enhanced_textwork/withdraw_collaborative_draft.rb +65 -0
- data/app/commands/decidim/enhanced_textwork/withdraw_paragraph.rb +50 -0
- data/app/controllers/concerns/decidim/enhanced_textwork/admin/filterable.rb +82 -0
- data/app/controllers/concerns/decidim/enhanced_textwork/admin/picker.rb +21 -0
- data/app/controllers/concerns/decidim/enhanced_textwork/collaborative_orderable.rb +42 -0
- data/app/controllers/concerns/decidim/enhanced_textwork/orderable.rb +78 -0
- data/app/controllers/decidim/enhanced_textwork/admin/application_controller.rb +16 -0
- data/app/controllers/decidim/enhanced_textwork/admin/paragraph_answers_controller.rb +50 -0
- data/app/controllers/decidim/enhanced_textwork/admin/paragraph_notes_controller.rb +39 -0
- data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_controller.rb +237 -0
- data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_imports_controller.rb +33 -0
- data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_merges_controller.rb +30 -0
- data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_splits_controller.rb +30 -0
- data/app/controllers/decidim/enhanced_textwork/admin/participatory_texts_controller.rb +128 -0
- data/app/controllers/decidim/enhanced_textwork/admin/valuation_assignments_controller.rb +58 -0
- data/app/controllers/decidim/enhanced_textwork/application_controller.rb +31 -0
- data/app/controllers/decidim/enhanced_textwork/collaborative_draft_collaborator_requests_controller.rb +53 -0
- data/app/controllers/decidim/enhanced_textwork/collaborative_drafts_controller.rb +161 -0
- data/app/controllers/decidim/enhanced_textwork/paragraph_votes_controller.rb +65 -0
- data/app/controllers/decidim/enhanced_textwork/paragraphs_controller.rb +316 -0
- data/app/controllers/decidim/enhanced_textwork/versions_controller.rb +21 -0
- data/app/controllers/decidim/enhanced_textwork/widgets_controller.rb +19 -0
- data/app/events/decidim/enhanced_textwork/accepted_paragraph_event.rb +17 -0
- data/app/events/decidim/enhanced_textwork/admin/paragraph_note_created_event.rb +27 -0
- data/app/events/decidim/enhanced_textwork/admin/update_paragraph_category_event.rb +11 -0
- data/app/events/decidim/enhanced_textwork/admin/update_paragraph_scope_event.rb +11 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_access_accepted_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_access_rejected_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_access_request_event.rb +27 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_access_requested_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_access_requester_accepted_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_access_requester_rejected_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/collaborative_draft_withdrawn_event.rb +29 -0
- data/app/events/decidim/enhanced_textwork/creation_enabled_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/endorsing_enabled_event.rb +8 -0
- data/app/events/decidim/enhanced_textwork/evaluating_paragraph_event.rb +11 -0
- data/app/events/decidim/enhanced_textwork/paragraph_endorsed_event.rb +33 -0
- data/app/events/decidim/enhanced_textwork/paragraph_mentioned_event.rb +21 -0
- data/app/events/decidim/enhanced_textwork/publish_paragraph_event.rb +25 -0
- data/app/events/decidim/enhanced_textwork/rejected_paragraph_event.rb +17 -0
- data/app/events/decidim/enhanced_textwork/voting_enabled_event.rb +8 -0
- data/app/forms/decidim/enhanced_textwork/accept_access_to_collaborative_draft_form.rb +10 -0
- data/app/forms/decidim/enhanced_textwork/access_to_collaborative_draft_form.rb +33 -0
- data/app/forms/decidim/enhanced_textwork/admin/import_editor_participatory_text_form.rb +35 -0
- data/app/forms/decidim/enhanced_textwork/admin/import_participatory_text_form.rb +68 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraph_answer_form.rb +44 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraph_base_form.rb +137 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraph_form.rb +32 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraph_note_form.rb +16 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraphs_fork_form.rb +63 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraphs_import_form.rb +67 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraphs_merge_form.rb +13 -0
- data/app/forms/decidim/enhanced_textwork/admin/paragraphs_split_form.rb +12 -0
- data/app/forms/decidim/enhanced_textwork/admin/participatory_text_paragraph_form.rb +20 -0
- data/app/forms/decidim/enhanced_textwork/admin/preview_participatory_text_form.rb +21 -0
- data/app/forms/decidim/enhanced_textwork/admin/valuation_assignment_form.rb +37 -0
- data/app/forms/decidim/enhanced_textwork/collaborative_draft_form.rb +20 -0
- data/app/forms/decidim/enhanced_textwork/paragraph_form.rb +126 -0
- data/app/forms/decidim/enhanced_textwork/paragraph_wizard_create_step_form.rb +41 -0
- data/app/forms/decidim/enhanced_textwork/reject_access_to_collaborative_draft_form.rb +9 -0
- data/app/forms/decidim/enhanced_textwork/request_access_to_collaborative_draft_form.rb +20 -0
- data/app/helpers/decidim/enhanced_textwork/admin/filterable_helper.rb +17 -0
- data/app/helpers/decidim/enhanced_textwork/admin/paragraph_bulk_actions_helper.rb +35 -0
- data/app/helpers/decidim/enhanced_textwork/admin/paragraph_rankings_helper.rb +63 -0
- data/app/helpers/decidim/enhanced_textwork/admin/paragraphs_helper.rb +144 -0
- data/app/helpers/decidim/enhanced_textwork/admin/paragraphs_picker_helper.rb +30 -0
- data/app/helpers/decidim/enhanced_textwork/application_helper.rb +191 -0
- data/app/helpers/decidim/enhanced_textwork/collaborative_draft_cells_helper.rb +48 -0
- data/app/helpers/decidim/enhanced_textwork/collaborative_draft_helper.rb +29 -0
- data/app/helpers/decidim/enhanced_textwork/control_version_helper.rb +12 -0
- data/app/helpers/decidim/enhanced_textwork/map_helper.rb +48 -0
- data/app/helpers/decidim/enhanced_textwork/paragraph_cells_helper.rb +75 -0
- data/app/helpers/decidim/enhanced_textwork/paragraph_votes_helper.rb +103 -0
- data/app/helpers/decidim/enhanced_textwork/paragraph_wizard_helper.rb +140 -0
- data/app/helpers/decidim/enhanced_textwork/paragraphs_helper.rb +63 -0
- data/app/helpers/decidim/enhanced_textwork/participatory_texts_helper.rb +49 -0
- data/app/jobs/decidim/enhanced_textwork/notify_paragraphs_mentioned_job.rb +27 -0
- data/app/jobs/decidim/enhanced_textwork/settings_change_job.rb +50 -0
- data/app/models/decidim/enhanced_textwork/application_record.rb +10 -0
- data/app/models/decidim/enhanced_textwork/collaborative_draft.rb +73 -0
- data/app/models/decidim/enhanced_textwork/collaborative_draft_collaborator_request.rb +13 -0
- data/app/models/decidim/enhanced_textwork/paragraph.rb +411 -0
- data/app/models/decidim/enhanced_textwork/paragraph_note.rb +20 -0
- data/app/models/decidim/enhanced_textwork/paragraph_vote.rb +50 -0
- data/app/models/decidim/enhanced_textwork/participatory_text.rb +16 -0
- data/app/models/decidim/enhanced_textwork/valuation_assignment.rb +24 -0
- data/app/packs/documents/decidim/enhanced_textwork/participatory_texts/participatory_text.md +52 -0
- data/app/packs/documents/decidim/enhanced_textwork/participatory_texts/participatory_text.odt +0 -0
- data/app/packs/entrypoints/decidim_enhanced_textwork.js +17 -0
- data/app/packs/entrypoints/decidim_enhanced_textwork_admin.js +3 -0
- data/app/packs/images/decidim/enhanced_textwork/decidim_paragraphs.svg +1 -0
- data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_accepted_paragraphs.svg +1 -0
- data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_paragraph_votes.svg +1 -0
- data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_paragraphs.svg +1 -0
- data/app/packs/src/decidim/enhanced_textwork/add_paragraph.js +49 -0
- data/app/packs/src/decidim/enhanced_textwork/admin/paragraphs.js +143 -0
- data/app/packs/src/decidim/enhanced_textwork/admin/paragraphs_form.js +29 -0
- data/app/packs/src/decidim/enhanced_textwork/admin/paragraphs_picker.js +35 -0
- data/app/packs/src/decidim/enhanced_textwork/toggle_element.js +21 -0
- data/app/packs/src/decidim/enhanced_textwork/utils.js +11 -0
- data/app/packs/stylesheets/decidim/enhanced_textwork/_paragraphs.scss +208 -0
- data/app/packs/stylesheets/decidim/enhanced_textwork/paragraphs/_preview.scss +3 -0
- data/app/permissions/decidim/enhanced_textwork/admin/permissions.rb +147 -0
- data/app/permissions/decidim/enhanced_textwork/permissions.rb +163 -0
- data/app/presenters/decidim/enhanced_textwork/admin_log/paragraph_note_presenter.rb +39 -0
- data/app/presenters/decidim/enhanced_textwork/admin_log/paragraph_presenter.rb +51 -0
- data/app/presenters/decidim/enhanced_textwork/admin_log/valuation_assignment_presenter.rb +51 -0
- data/app/presenters/decidim/enhanced_textwork/admin_log/value_types/paragraph_state_presenter.rb +17 -0
- data/app/presenters/decidim/enhanced_textwork/admin_log/value_types/paragraph_title_body_presenter.rb +23 -0
- data/app/presenters/decidim/enhanced_textwork/admin_log/value_types/valuator_role_user_presenter.rb +19 -0
- data/app/presenters/decidim/enhanced_textwork/collaborative_draft_presenter.rb +25 -0
- data/app/presenters/decidim/enhanced_textwork/log/resource_presenter.rb +22 -0
- data/app/presenters/decidim/enhanced_textwork/log/valuation_assignment_presenter.rb +22 -0
- data/app/presenters/decidim/enhanced_textwork/official_author_presenter.rb +14 -0
- data/app/presenters/decidim/enhanced_textwork/paragraph_presenter.rb +146 -0
- data/app/queries/decidim/enhanced_textwork/filtered_paragraphs.rb +37 -0
- data/app/queries/decidim/enhanced_textwork/metrics/accepted_paragraphs_metric_manage.rb +32 -0
- data/app/queries/decidim/enhanced_textwork/metrics/endorsements_metric_manage.rb +58 -0
- data/app/queries/decidim/enhanced_textwork/metrics/paragraph_followers_metric_measure.rb +58 -0
- data/app/queries/decidim/enhanced_textwork/metrics/paragraph_participants_metric_measure.rb +74 -0
- data/app/queries/decidim/enhanced_textwork/metrics/paragraphs_metric_manage.rb +48 -0
- data/app/queries/decidim/enhanced_textwork/metrics/votes_metric_manage.rb +52 -0
- data/app/queries/decidim/enhanced_textwork/similar_paragraphs.rb +67 -0
- data/app/services/decidim/enhanced_textwork/collaborative_draft_search.rb +59 -0
- data/app/services/decidim/enhanced_textwork/diff_renderer.rb +74 -0
- data/app/services/decidim/enhanced_textwork/paragraph_builder.rb +132 -0
- data/app/services/decidim/enhanced_textwork/paragraph_search.rb +85 -0
- data/app/validators/paragraph_length_validator.rb +40 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraph_answers/_form.html.erb +35 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraph_notes/_form.html.erb +8 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraph_notes/_paragraph_notes.html.erb +45 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/_bulk-actions.html.erb +33 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/_form.html.erb +101 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/_js-callout.html.erb +6 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/_paragraph-tr.html.erb +76 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_assign_to_valuator.html.erb +15 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_dropdown.html.erb +56 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_merge.html.erb +15 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_publish_answers.html.erb +14 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_recategorize.html.erb +15 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_scope-change.html.erb +25 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_split.html.erb +15 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_unassign_from_valuator.html.erb +15 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/edit.html.erb +7 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/index.html.erb +84 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/new.html.erb +7 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/publish_answers.js.erb +12 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/show.html.erb +186 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/update_category.js.erb +26 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs/update_scope.js.erb +27 -0
- data/app/views/decidim/enhanced_textwork/admin/paragraphs_imports/new.html.erb +37 -0
- data/app/views/decidim/enhanced_textwork/admin/participatory_texts/_article-preview.html.erb +16 -0
- data/app/views/decidim/enhanced_textwork/admin/participatory_texts/_bulk-actions.html.erb +3 -0
- data/app/views/decidim/enhanced_textwork/admin/participatory_texts/index.html.erb +55 -0
- data/app/views/decidim/enhanced_textwork/admin/participatory_texts/new_editor.html.erb +39 -0
- data/app/views/decidim/enhanced_textwork/admin/participatory_texts/new_import.html.erb +39 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_accept_request_access_form.html.erb +8 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_collaborative_drafts.html.erb +16 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_collaborator_requests.html.erb +20 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_count.html.erb +1 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_edit_form_fields.html.erb +83 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_filters.html.erb +32 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_filters_small_view.html.erb +18 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_new_collaborative_draft_button.html.erb +11 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_reject_request_access_form.html.erb +10 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_request_access_form.html.erb +7 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_wizard_aside.html.erb +13 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/_wizard_header.html.erb +14 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/edit.html.erb +31 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/index.html.erb +23 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/index.js.erb +10 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/new.html.erb +24 -0
- data/app/views/decidim/enhanced_textwork/collaborative_drafts/show.html.erb +128 -0
- data/app/views/decidim/enhanced_textwork/paragraph_votes/update_buttons_and_counters.js.erb +41 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_count.html.erb +1 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_dynamic_map_instructions.html.erb +4 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_edit_form_fields.html.erb +115 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_endorsements_card_row.html.erb +0 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_filters.html.erb +48 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_filters_small_view.html.erb +18 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_linked_paragraphs.html.erb +34 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_paragraph.html.erb +1 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_paragraph_badge.html.erb +3 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_paragraph_similar.html.erb +22 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_paragraphs.html.erb +46 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_remaining_votes_count.html.erb +3 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_vote_button.html.erb +61 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_votes_count.html.erb +18 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_voting_rules.html.erb +50 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_wizard_aside.html.erb +20 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/_wizard_header.html.erb +42 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/compare.html.erb +23 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/complete.html.erb +24 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/edit.html.erb +31 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/edit_draft.html.erb +26 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/index.html.erb +56 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/index.js.erb +10 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/new.html.erb +38 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_index.html.erb +20 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_overview.html.erb +35 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_paragraph_vote_button.html.erb +53 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_paragraph_vote_button_chevron.html.erb +72 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_paragraph_votes_count.html.erb +41 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_view_index.html.erb +10 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/participatory_text.html.erb +29 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/preview.html.erb +41 -0
- data/app/views/decidim/enhanced_textwork/paragraphs/show.html.erb +143 -0
- data/app/views/decidim/enhanced_textwork/versions/index.html.erb +16 -0
- data/app/views/decidim/enhanced_textwork/versions/show.html.erb +18 -0
- data/config/assets.rb +10 -0
- data/config/locales/de.yml +927 -0
- data/config/locales/en.yml +967 -0
- data/config/locales/todo/am-ET.yml +1 -0
- data/config/locales/todo/ar-SA.yml +801 -0
- data/config/locales/todo/ar.yml +791 -0
- data/config/locales/todo/bg-BG.yml +237 -0
- data/config/locales/todo/bg.yml +238 -0
- data/config/locales/todo/ca.yml +908 -0
- data/config/locales/todo/cs-CZ.yml +787 -0
- data/config/locales/todo/cs.yml +969 -0
- data/config/locales/todo/da-DK.yml +1 -0
- data/config/locales/todo/da.yml +1 -0
- data/config/locales/todo/el-GR.yml +1 -0
- data/config/locales/todo/el.yml +848 -0
- data/config/locales/todo/eo-UY.yml +1 -0
- data/config/locales/todo/eo.yml +1 -0
- data/config/locales/todo/es-MX.yml +908 -0
- data/config/locales/todo/es-PY.yml +908 -0
- data/config/locales/todo/es.yml +908 -0
- data/config/locales/todo/et-EE.yml +1 -0
- data/config/locales/todo/et.yml +1 -0
- data/config/locales/todo/eu.yml +717 -0
- data/config/locales/todo/fi-pl.yml +763 -0
- data/config/locales/todo/fi-plain.yml +920 -0
- data/config/locales/todo/fi.yml +920 -0
- data/config/locales/todo/fr-CA.yml +936 -0
- data/config/locales/todo/fr-LU.yml +903 -0
- data/config/locales/todo/fr.yml +936 -0
- data/config/locales/todo/ga-IE.yml +275 -0
- data/config/locales/todo/gl.yml +808 -0
- data/config/locales/todo/hr-HR.yml +1 -0
- data/config/locales/todo/hr.yml +1 -0
- data/config/locales/todo/hu.yml +847 -0
- data/config/locales/todo/id-ID.yml +704 -0
- data/config/locales/todo/is-IS.yml +269 -0
- data/config/locales/todo/is.yml +274 -0
- data/config/locales/todo/it.yml +908 -0
- data/config/locales/todo/ja.yml +922 -0
- data/config/locales/todo/ko-KR.yml +1 -0
- data/config/locales/todo/ko.yml +1 -0
- data/config/locales/todo/lb-LU.yml +1 -0
- data/config/locales/todo/lb.yml +40 -0
- data/config/locales/todo/lt-LT.yml +1 -0
- data/config/locales/todo/lt.yml +1 -0
- data/config/locales/todo/lv.yml +838 -0
- data/config/locales/todo/mt-MT.yml +1 -0
- data/config/locales/todo/mt.yml +1 -0
- data/config/locales/todo/nl.yml +882 -0
- data/config/locales/todo/no.yml +770 -0
- data/config/locales/todo/om-ET.yml +1 -0
- data/config/locales/todo/pl.yml +927 -0
- data/config/locales/todo/pt-BR.yml +908 -0
- data/config/locales/todo/pt.yml +945 -0
- data/config/locales/todo/ro-RO.yml +886 -0
- data/config/locales/todo/ru.yml +379 -0
- data/config/locales/todo/si-LK.yml +1 -0
- data/config/locales/todo/sk-SK.yml +896 -0
- data/config/locales/todo/sk.yml +851 -0
- data/config/locales/todo/sl.yml +26 -0
- data/config/locales/todo/so-SO.yml +1 -0
- data/config/locales/todo/sr-CS.yml +125 -0
- data/config/locales/todo/sv.yml +908 -0
- data/config/locales/todo/sw-KE.yml +1 -0
- data/config/locales/todo/ti-ER.yml +1 -0
- data/config/locales/todo/tr-TR.yml +890 -0
- data/config/locales/todo/uk.yml +379 -0
- data/config/locales/todo/vi-VN.yml +1 -0
- data/config/locales/todo/vi.yml +1 -0
- data/config/locales/todo/zh-CN.yml +857 -0
- data/config/locales/todo/zh-TW.yml +1 -0
- data/db/migrate/20161212110850_create_decidim_paragraphs.rb +16 -0
- data/db/migrate/20170112115253_create_paragraph_votes.rb +14 -0
- data/db/migrate/20170113114245_add_enhanced_textwork_text_search_indexes.rb +8 -0
- data/db/migrate/20170118120151_add_counter_cache_votes_to_paragraphs.rb +7 -0
- data/db/migrate/20170120151202_add_user_group_id_to_paragraphs.rb +7 -0
- data/db/migrate/20170131092413_add_answers_to_paragraphs.rb +9 -0
- data/db/migrate/20170205082832_add_index_to_decidim_enhanced_textwork_paragraphs_paragraph_votes_count.rb +9 -0
- data/db/migrate/20170215113152_create_paragraph_reports.rb +16 -0
- data/db/migrate/20170215131720_add_report_count_to_paragraphs.rb +7 -0
- data/db/migrate/20170215132030_add_reference_to_paragraphs.rb +13 -0
- data/db/migrate/20170220152416_add_hidden_at_to_paragraphs.rb +7 -0
- data/db/migrate/20170228105156_add_geolocalization_fields_to_paragraphs.rb +9 -0
- data/db/migrate/20170307085300_migrate_paragraph_reports_data_to_reports.rb +24 -0
- data/db/migrate/20170410073742_remove_not_null_reference_paragraphs.rb +7 -0
- data/db/migrate/20170612101809_migrate_paragraphs_category.rb +15 -0
- data/db/migrate/20171201115434_create_paragraph_endorsements.rb +16 -0
- data/db/migrate/20171201122623_add_counter_cache_endorsements_to_paragraphs.rb +8 -0
- data/db/migrate/20171212102250_enable_pg_trgm_extension_for_paragraphs.rb +18 -0
- data/db/migrate/20171220084719_add_published_at_to_paragraphs.rb +14 -0
- data/db/migrate/20180111110204_create_decidim_paragraph_notes.rb +15 -0
- data/db/migrate/20180115155220_add_index_created_at_paragraph_notes.rb +7 -0
- data/db/migrate/20180305133811_rename_features_to_components_at_paragraphs.rb +11 -0
- data/db/migrate/20180326091532_create_decidim_enhanced_textwork_collaborative_drafts.rb +29 -0
- data/db/migrate/20180413135249_fix_nil_threshold_per_paragraph.rb +18 -0
- data/db/migrate/20180529101323_add_counter_cache_coauthorships_to_paragraphs.rb +8 -0
- data/db/migrate/20180529110230_move_enhanced_textwork_authorships_to_coauthorships.rb +28 -0
- data/db/migrate/20180529110830_remove_authorships_from_paragraphs.rb +8 -0
- data/db/migrate/20180613151121_create_enhanced_textwork_collaborative_draft_collaborator_requests.rb +12 -0
- data/db/migrate/20180711074134_add_enhanced_textwork_counter_cache_coauthorships_to_collaborative_drafts.rb +7 -0
- data/db/migrate/20180711075004_remove_index_counter_cache_coauthorships_to_paragraphs.rb +7 -0
- data/db/migrate/20180927111721_create_enhanced_textwork_participatory_texts.rb +13 -0
- data/db/migrate/20180930125321_add_participatory_text_level_to_paragraphs.rb +7 -0
- data/db/migrate/20180930125321_add_position_to_paragraphs.rb +7 -0
- data/db/migrate/20181003074440_fix_user_groups_ids_in_paragraphs_endorsements.rb +20 -0
- data/db/migrate/20181010114622_add_enhanced_textwork_temporary_votes.rb +9 -0
- data/db/migrate/20181016132225_add_enhanced_textwork_organization_as_author.rb +13 -0
- data/db/migrate/20181017084221_make_author_polymorhpic_for_paragraph_endorsements.rb +31 -0
- data/db/migrate/20181026073215_add_enhanced_textwork_created_in_meeting.rb +7 -0
- data/db/migrate/20190215113158_use_enhanced_textwork_md5_indexes.rb +17 -0
- data/db/migrate/20191206154128_add_endorsements_counter_cache_to_paragraphs.rb +7 -0
- data/db/migrate/20200120215928_move_paragraph_endorsements_to_core_endorsements.rb +54 -0
- data/db/migrate/20200120230130_drop_paragraph_endorsements.rb +8 -0
- data/db/migrate/20200203111239_add_paragraph_valuation_assignments.rb +12 -0
- data/db/migrate/20200210135152_add_costs_to_paragraphs.rb +9 -0
- data/db/migrate/20200212120110_sync_paragraphs_state_with_amendments_state.rb +28 -0
- data/db/migrate/20200227175922_add_state_published_at_to_paragraphs.rb +7 -0
- data/db/migrate/20200306123652_publish_existing_paragraphs_state.rb +15 -0
- data/db/migrate/20200708091228_move_paragraphs_fields_to_i18n.rb +86 -0
- data/db/migrate/20200730131631_move_paragraph_endorsed_event_notifications_to_resource_endorsed_event.rb +20 -0
- data/db/migrate/20200827154156_add_commentable_counter_cache_to_paragraphs.rb +12 -0
- data/db/migrate/20201002085508_fix_paragraphs_data.rb +36 -0
- data/db/migrate/20210127115628_fix_answered_paragraphs_after_copy.rb +14 -0
- data/db/migrate/20210310102839_add_followable_counter_cache_to_paragraphs.rb +16 -0
- data/db/migrate/20210310120812_add_enhanced_textwork_followable_counter_cache_to_collaborative_drafts.rb +16 -0
- data/db/migrate/20210318082934_fix_counters_for_copied_paragraphs.rb +19 -0
- data/lib/decidim/api/paragraph_input_filter.rb +29 -0
- data/lib/decidim/api/paragraph_input_sort.rb +20 -0
- data/lib/decidim/api/paragraph_type.rb +56 -0
- data/lib/decidim/api/paragraphs_type.rb +43 -0
- data/lib/decidim/content_parsers/paragraph_parser.rb +101 -0
- data/lib/decidim/content_renderers/paragraph_renderer.rb +33 -0
- data/lib/decidim/enhanced_textwork/admin.rb +10 -0
- data/lib/decidim/enhanced_textwork/admin_engine.rb +52 -0
- data/lib/decidim/enhanced_textwork/api.rb +10 -0
- data/lib/decidim/enhanced_textwork/commentable_collaborative_draft.rb +38 -0
- data/lib/decidim/enhanced_textwork/commentable_paragraph.rb +36 -0
- data/lib/decidim/enhanced_textwork/component.rb +448 -0
- data/lib/decidim/enhanced_textwork/doc_to_markdown.rb +50 -0
- data/lib/decidim/enhanced_textwork/engine.rb +204 -0
- data/lib/decidim/enhanced_textwork/html_to_markdown.rb +22 -0
- data/lib/decidim/enhanced_textwork/markdown_to_paragraphs.rb +153 -0
- data/lib/decidim/enhanced_textwork/odt_to_markdown.rb +46 -0
- data/lib/decidim/enhanced_textwork/paragraph_creator.rb +98 -0
- data/lib/decidim/enhanced_textwork/paragraph_serializer.rb +95 -0
- data/lib/decidim/enhanced_textwork/participatory_text_section.rb +21 -0
- data/lib/decidim/enhanced_textwork/test/capybara_paragraphs_picker.rb +59 -0
- data/lib/decidim/enhanced_textwork/test/factories.rb +492 -0
- data/lib/decidim/enhanced_textwork/valuatable.rb +21 -0
- data/lib/decidim/enhanced_textwork/version.rb +14 -0
- data/lib/decidim/enhanced_textwork.rb +58 -0
- data/lib/decidim/exporters/word.rb +309 -0
- metadata +704 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic to reject a user request to
|
|
6
|
+
# contribute to a collaborative draft.
|
|
7
|
+
class RejectAccessToCollaborativeDraft < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# form - A form object with the params.
|
|
11
|
+
# collaborative_draft - A Decidim::EnhancedTextwork::CollaborativeDraft object.
|
|
12
|
+
# current_user - The current user.
|
|
13
|
+
# requester_user - The user that requested to collaborate.
|
|
14
|
+
def initialize(form, current_user)
|
|
15
|
+
@form = form
|
|
16
|
+
@collaborative_draft = form.collaborative_draft
|
|
17
|
+
@current_user = current_user
|
|
18
|
+
@requester_user = form.requester_user
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Executes the command. Broadcasts these events:
|
|
22
|
+
#
|
|
23
|
+
# - :ok when everything is valid.
|
|
24
|
+
# - :invalid if it wasn't valid and we couldn't proceed.
|
|
25
|
+
#
|
|
26
|
+
# Returns nothing.
|
|
27
|
+
def call
|
|
28
|
+
return broadcast(:invalid) if @form.invalid?
|
|
29
|
+
return broadcast(:invalid) if @current_user.nil?
|
|
30
|
+
|
|
31
|
+
@collaborative_draft.requesters.delete @requester_user
|
|
32
|
+
|
|
33
|
+
notify_collaborative_draft_requester
|
|
34
|
+
notify_collaborative_draft_authors
|
|
35
|
+
broadcast(:ok, @requester_user)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def notify_collaborative_draft_authors
|
|
41
|
+
Decidim::EventsManager.publish(
|
|
42
|
+
event: "decidim.events.enhanced_textwork.collaborative_draft_access_rejected",
|
|
43
|
+
event_class: Decidim::EnhancedTextwork::CollaborativeDraftAccessRejectedEvent,
|
|
44
|
+
resource: @collaborative_draft,
|
|
45
|
+
affected_users: @collaborative_draft.authors,
|
|
46
|
+
extra: {
|
|
47
|
+
requester_id: @requester_user.id
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def notify_collaborative_draft_requester
|
|
53
|
+
Decidim::EventsManager.publish(
|
|
54
|
+
event: "decidim.events.enhanced_textwork.collaborative_draft_access_requester_rejected",
|
|
55
|
+
event_class: Decidim::EnhancedTextwork::CollaborativeDraftAccessRequesterRejectedEvent,
|
|
56
|
+
resource: @collaborative_draft,
|
|
57
|
+
affected_users: [@requester_user]
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user requests access
|
|
6
|
+
# to edit a collaborative draft.
|
|
7
|
+
class RequestAccessToCollaborativeDraft < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# form - A form object with the params.
|
|
11
|
+
# collaborative_draft - A Decidim::EnhancedTextwork::CollaborativeDraft object.
|
|
12
|
+
# current_user - The current user and requester user
|
|
13
|
+
def initialize(form, current_user)
|
|
14
|
+
@form = form
|
|
15
|
+
@collaborative_draft = form.collaborative_draft
|
|
16
|
+
@current_user = current_user
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Executes the command. Broadcasts these events:
|
|
20
|
+
#
|
|
21
|
+
# - :ok when everything is valid.
|
|
22
|
+
# - :invalid if it wasn't valid and we couldn't proceed.
|
|
23
|
+
#
|
|
24
|
+
# Returns nothing.
|
|
25
|
+
def call
|
|
26
|
+
return broadcast(:invalid) if @form.invalid?
|
|
27
|
+
return broadcast(:invalid) if @current_user.nil?
|
|
28
|
+
|
|
29
|
+
@collaborative_draft.collaborator_requests.create!(user: @current_user)
|
|
30
|
+
notify_collaborative_draft_authors
|
|
31
|
+
broadcast(:ok, @collaborative_draft)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def notify_collaborative_draft_authors
|
|
37
|
+
Decidim::EventsManager.publish(
|
|
38
|
+
event: "decidim.events.enhanced_textwork.collaborative_draft_access_requested",
|
|
39
|
+
event_class: Decidim::EnhancedTextwork::CollaborativeDraftAccessRequestedEvent,
|
|
40
|
+
resource: @collaborative_draft,
|
|
41
|
+
affected_users: @collaborative_draft.authors,
|
|
42
|
+
extra: {
|
|
43
|
+
requester_id: @current_user.id
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user unvotes a paragraph.
|
|
6
|
+
class UnvoteParagraph < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# paragraph - A Decidim::EnhancedTextwork::Paragraph object.
|
|
10
|
+
# current_user - The current user.
|
|
11
|
+
def initialize(paragraph, current_user)
|
|
12
|
+
@paragraph = paragraph
|
|
13
|
+
@current_user = current_user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid, together with the paragraph.
|
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
ActiveRecord::Base.transaction do
|
|
24
|
+
ParagraphVote.where(
|
|
25
|
+
author: @current_user,
|
|
26
|
+
paragraph: @paragraph
|
|
27
|
+
).destroy_all
|
|
28
|
+
|
|
29
|
+
update_temporary_votes
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Decidim::Gamification.decrement_score(@current_user, :paragraph_votes)
|
|
33
|
+
|
|
34
|
+
broadcast(:ok, @paragraph)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def component
|
|
40
|
+
@component ||= @paragraph.component
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def minimum_votes_per_user
|
|
44
|
+
component.settings.minimum_votes_per_user
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def minimum_votes_per_user?
|
|
48
|
+
minimum_votes_per_user.positive?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def update_temporary_votes
|
|
52
|
+
return unless minimum_votes_per_user? && user_votes.count < minimum_votes_per_user
|
|
53
|
+
|
|
54
|
+
user_votes.each { |vote| vote.update(temporary: true) }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def user_votes
|
|
58
|
+
@user_votes ||= ParagraphVote.where(
|
|
59
|
+
author: @current_user,
|
|
60
|
+
paragraph: Paragraph.where(component: component)
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user updates a collaborative_draft.
|
|
6
|
+
class UpdateCollaborativeDraft < Rectify::Command
|
|
7
|
+
include HashtagsMethods
|
|
8
|
+
|
|
9
|
+
# Public: Initializes the command.
|
|
10
|
+
#
|
|
11
|
+
# form - A form object with the params.
|
|
12
|
+
# current_user - The current user.
|
|
13
|
+
# collaborative_draft - the collaborative_draft to update.
|
|
14
|
+
def initialize(form, current_user, collaborative_draft)
|
|
15
|
+
@form = form
|
|
16
|
+
@current_user = current_user
|
|
17
|
+
@collaborative_draft = collaborative_draft
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Executes the command. Broadcasts these events:
|
|
21
|
+
#
|
|
22
|
+
# - :ok when everything is valid, together with the collaborative_draft.
|
|
23
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
24
|
+
#
|
|
25
|
+
# Returns nothing.
|
|
26
|
+
def call
|
|
27
|
+
return broadcast(:invalid) if form.invalid?
|
|
28
|
+
return broadcast(:invalid) unless collaborative_draft.editable_by?(current_user)
|
|
29
|
+
|
|
30
|
+
transaction do
|
|
31
|
+
update_collaborative_draft
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
broadcast(:ok, collaborative_draft)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
attr_reader :form, :collaborative_draft, :current_user
|
|
40
|
+
|
|
41
|
+
def update_collaborative_draft
|
|
42
|
+
Decidim.traceability.update!(
|
|
43
|
+
@collaborative_draft,
|
|
44
|
+
@current_user,
|
|
45
|
+
attributes,
|
|
46
|
+
visibility: "public-only"
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def attributes
|
|
51
|
+
{
|
|
52
|
+
title: title_with_hashtags,
|
|
53
|
+
body: body_with_hashtags,
|
|
54
|
+
category: form.category,
|
|
55
|
+
scope: form.scope,
|
|
56
|
+
address: form.address,
|
|
57
|
+
latitude: form.latitude,
|
|
58
|
+
longitude: form.longitude
|
|
59
|
+
}
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user updates a paragraph.
|
|
6
|
+
class UpdateParagraph < Rectify::Command
|
|
7
|
+
include ::Decidim::MultipleAttachmentsMethods
|
|
8
|
+
include GalleryMethods
|
|
9
|
+
include HashtagsMethods
|
|
10
|
+
|
|
11
|
+
# Public: Initializes the command.
|
|
12
|
+
#
|
|
13
|
+
# form - A form object with the params.
|
|
14
|
+
# current_user - The current user.
|
|
15
|
+
# paragraph - the paragraph to update.
|
|
16
|
+
def initialize(form, current_user, paragraph)
|
|
17
|
+
@form = form
|
|
18
|
+
@current_user = current_user
|
|
19
|
+
@paragraph = paragraph
|
|
20
|
+
@attached_to = paragraph
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Executes the command. Broadcasts these events:
|
|
24
|
+
#
|
|
25
|
+
# - :ok when everything is valid, together with the paragraph.
|
|
26
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
27
|
+
#
|
|
28
|
+
# Returns nothing.
|
|
29
|
+
def call
|
|
30
|
+
return broadcast(:invalid) if invalid?
|
|
31
|
+
|
|
32
|
+
if process_attachments?
|
|
33
|
+
build_attachments
|
|
34
|
+
return broadcast(:invalid) if attachments_invalid?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
if process_gallery?
|
|
38
|
+
build_gallery
|
|
39
|
+
return broadcast(:invalid) if gallery_invalid?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
transaction do
|
|
43
|
+
if @paragraph.draft?
|
|
44
|
+
update_draft
|
|
45
|
+
else
|
|
46
|
+
update_paragraph
|
|
47
|
+
end
|
|
48
|
+
create_gallery if process_gallery?
|
|
49
|
+
create_attachments if process_attachments?
|
|
50
|
+
|
|
51
|
+
photo_cleanup!
|
|
52
|
+
document_cleanup!
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
broadcast(:ok, paragraph)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
attr_reader :form, :paragraph, :current_user, :attachment
|
|
61
|
+
|
|
62
|
+
def invalid?
|
|
63
|
+
form.invalid? || !paragraph.editable_by?(current_user) || paragraph_limit_reached?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Prevent PaperTrail from creating an additional version
|
|
67
|
+
# in the paragraph multi-step creation process (step 3: complete)
|
|
68
|
+
#
|
|
69
|
+
# A first version will be created in step 4: publish
|
|
70
|
+
# for diff rendering in the paragraph control version
|
|
71
|
+
def update_draft
|
|
72
|
+
PaperTrail.request(enabled: false) do
|
|
73
|
+
@paragraph.update(attributes)
|
|
74
|
+
@paragraph.coauthorships.clear
|
|
75
|
+
@paragraph.add_coauthor(current_user, user_group: user_group)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def update_paragraph
|
|
80
|
+
@paragraph = Decidim.traceability.update!(
|
|
81
|
+
@paragraph,
|
|
82
|
+
current_user,
|
|
83
|
+
attributes,
|
|
84
|
+
visibility: "public-only"
|
|
85
|
+
)
|
|
86
|
+
@paragraph.coauthorships.clear
|
|
87
|
+
@paragraph.add_coauthor(current_user, user_group: user_group)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def attributes
|
|
91
|
+
{
|
|
92
|
+
title: {
|
|
93
|
+
I18n.locale => title_with_hashtags
|
|
94
|
+
},
|
|
95
|
+
body: {
|
|
96
|
+
I18n.locale => body_with_hashtags
|
|
97
|
+
},
|
|
98
|
+
category: form.category,
|
|
99
|
+
scope: form.scope,
|
|
100
|
+
address: form.address,
|
|
101
|
+
latitude: form.latitude,
|
|
102
|
+
longitude: form.longitude
|
|
103
|
+
}
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def paragraph_limit_reached?
|
|
107
|
+
paragraph_limit = form.current_component.settings.paragraph_limit
|
|
108
|
+
|
|
109
|
+
return false if paragraph_limit.zero?
|
|
110
|
+
|
|
111
|
+
if user_group
|
|
112
|
+
user_group_paragraphs.count >= paragraph_limit
|
|
113
|
+
else
|
|
114
|
+
current_user_paragraphs.count >= paragraph_limit
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def user_group
|
|
119
|
+
@user_group ||= Decidim::UserGroup.find_by(organization: organization, id: form.user_group_id)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def organization
|
|
123
|
+
@organization ||= current_user.organization
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def current_user_paragraphs
|
|
127
|
+
Paragraph.from_author(current_user).where(component: form.current_component).published.where.not(id: paragraph.id).except_withdrawn
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def user_group_paragraphs
|
|
131
|
+
Paragraph.from_user_group(user_group).where(component: form.current_component).published.where.not(id: paragraph.id).except_withdrawn
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user votes a paragraph.
|
|
6
|
+
class VoteParagraph < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# paragraph - A Decidim::EnhancedTextwork::Paragraph object.
|
|
10
|
+
# current_user - The current user.
|
|
11
|
+
def initialize(paragraph, current_user)
|
|
12
|
+
@paragraph = paragraph
|
|
13
|
+
@current_user = current_user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid, together with the paragraph vote.
|
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
return broadcast(:invalid) if @paragraph.maximum_votes_reached? && !@paragraph.can_accumulate_supports_beyond_threshold
|
|
24
|
+
|
|
25
|
+
build_paragraph_vote
|
|
26
|
+
return broadcast(:invalid) unless vote.valid?
|
|
27
|
+
|
|
28
|
+
ActiveRecord::Base.transaction do
|
|
29
|
+
@paragraph.with_lock do
|
|
30
|
+
vote.save!
|
|
31
|
+
update_temporary_votes
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Decidim::Gamification.increment_score(@current_user, :paragraph_votes)
|
|
36
|
+
|
|
37
|
+
broadcast(:ok, vote)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
attr_reader :vote
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def component
|
|
45
|
+
@component ||= @paragraph.component
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def minimum_votes_per_user
|
|
49
|
+
component.settings.minimum_votes_per_user
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def minimum_votes_per_user?
|
|
53
|
+
minimum_votes_per_user.positive?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def update_temporary_votes
|
|
57
|
+
return unless minimum_votes_per_user? && user_votes.count >= minimum_votes_per_user
|
|
58
|
+
|
|
59
|
+
user_votes.each { |vote| vote.update(temporary: false) }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def user_votes
|
|
63
|
+
@user_votes ||= ParagraphVote.where(
|
|
64
|
+
author: @current_user,
|
|
65
|
+
paragraph: Paragraph.where(component: component)
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def build_paragraph_vote
|
|
70
|
+
@vote = @paragraph.votes.build(
|
|
71
|
+
author: @current_user,
|
|
72
|
+
temporary: minimum_votes_per_user?
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user withdraws a collaborative_draft.
|
|
6
|
+
class WithdrawCollaborativeDraft < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# collaborative_draft - The collaborative_draft to withdraw.
|
|
10
|
+
# current_user - The current user.
|
|
11
|
+
def initialize(collaborative_draft, current_user)
|
|
12
|
+
@collaborative_draft = collaborative_draft
|
|
13
|
+
@current_user = current_user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid and the collaborative_draft is published.
|
|
19
|
+
# - :invalid if the collaborative_draft's author is not the current user.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
return broadcast(:invalid) if @collaborative_draft.withdrawn?
|
|
24
|
+
return broadcast(:invalid) if @collaborative_draft.published?
|
|
25
|
+
return broadcast(:invalid) unless @collaborative_draft.authored_by? @current_user
|
|
26
|
+
|
|
27
|
+
transaction do
|
|
28
|
+
@collaborative_draft.requesters.each do |requester_user|
|
|
29
|
+
RejectAccessToCollaborativeDraft.call(@collaborative_draft, current_user, requester_user)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
withdraw_collaborative_draft
|
|
33
|
+
send_notification_to_authors
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
broadcast(:ok, @collaborative_draft)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def withdraw_collaborative_draft
|
|
42
|
+
Decidim.traceability.update!(
|
|
43
|
+
@collaborative_draft,
|
|
44
|
+
@current_user,
|
|
45
|
+
state: "withdrawn"
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def send_notification_to_authors
|
|
50
|
+
recipients = @collaborative_draft.authors - [@current_user]
|
|
51
|
+
return if recipients.blank?
|
|
52
|
+
|
|
53
|
+
Decidim::EventsManager.publish(
|
|
54
|
+
event: "decidim.events.enhanced_textwork.collaborative_draft_withdrawn",
|
|
55
|
+
event_class: Decidim::EnhancedTextwork::CollaborativeDraftWithdrawnEvent,
|
|
56
|
+
resource: @collaborative_draft,
|
|
57
|
+
affected_users: recipients.uniq,
|
|
58
|
+
extra: {
|
|
59
|
+
author_id: @current_user.id
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user withdraws a new paragraph.
|
|
6
|
+
class WithdrawParagraph < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# paragraph - The paragraph to withdraw.
|
|
10
|
+
# current_user - The current user.
|
|
11
|
+
def initialize(paragraph, current_user)
|
|
12
|
+
@paragraph = paragraph
|
|
13
|
+
@current_user = current_user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid, together with the paragraph.
|
|
19
|
+
# - :has_supports if the paragraph already has supports or does not belong to current user.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
return broadcast(:has_supports) if @paragraph.votes.any?
|
|
24
|
+
|
|
25
|
+
transaction do
|
|
26
|
+
change_paragraph_state_to_withdrawn
|
|
27
|
+
reject_emendations_if_any
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
broadcast(:ok, @paragraph)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def change_paragraph_state_to_withdrawn
|
|
36
|
+
@paragraph.update state: "withdrawn"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def reject_emendations_if_any
|
|
40
|
+
return if @paragraph.emendations.empty?
|
|
41
|
+
|
|
42
|
+
@paragraph.emendations.each do |emendation|
|
|
43
|
+
@form = form(Decidim::Amendable::RejectForm).from_params(id: emendation.amendment.id)
|
|
44
|
+
result = Decidim::Amendable::Reject.call(@form)
|
|
45
|
+
return result[:ok] if result[:ok]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
|
|
5
|
+
module Decidim
|
|
6
|
+
module EnhancedTextwork
|
|
7
|
+
module Admin
|
|
8
|
+
module Filterable
|
|
9
|
+
extend ActiveSupport::Concern
|
|
10
|
+
|
|
11
|
+
included do
|
|
12
|
+
include Decidim::Admin::Filterable
|
|
13
|
+
|
|
14
|
+
helper Decidim::EnhancedTextwork::Admin::FilterableHelper
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
# Comment about participatory_texts_enabled.
|
|
19
|
+
def base_query
|
|
20
|
+
return collection.order(:position) if current_component.settings.participatory_texts_enabled?
|
|
21
|
+
|
|
22
|
+
accessible_paragraphs_collection
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def accessible_paragraphs_collection
|
|
26
|
+
return collection if current_participatory_space.user_roles(:valuator).where(user: current_user).empty?
|
|
27
|
+
|
|
28
|
+
collection.with_valuation_assigned_to(current_user, current_participatory_space)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def search_field_predicate
|
|
32
|
+
:id_string_or_title_cont
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def filters
|
|
36
|
+
[
|
|
37
|
+
:is_emendation_true,
|
|
38
|
+
:state_eq,
|
|
39
|
+
:state_null,
|
|
40
|
+
:scope_id_eq,
|
|
41
|
+
:category_id_eq,
|
|
42
|
+
:valuator_role_ids_has
|
|
43
|
+
]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def filters_with_values
|
|
47
|
+
{
|
|
48
|
+
is_emendation_true: %w(true false),
|
|
49
|
+
state_eq: paragraph_states,
|
|
50
|
+
scope_id_eq: scope_ids_hash(scopes.top_level),
|
|
51
|
+
category_id_eq: category_ids_hash(categories.first_class),
|
|
52
|
+
valuator_role_ids_has: valuator_role_ids
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Can't user `super` here, because it does not belong to a superclass
|
|
57
|
+
# but to a concern.
|
|
58
|
+
def dynamically_translated_filters
|
|
59
|
+
[:scope_id_eq, :category_id_eq, :valuator_role_ids_has]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def valuator_role_ids
|
|
63
|
+
current_participatory_space.user_roles(:valuator).pluck(:id)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def translated_valuator_role_ids_has(valuator_role_id)
|
|
67
|
+
user_role = current_participatory_space.user_roles(:valuator).find_by(id: valuator_role_id)
|
|
68
|
+
user_role&.user&.name
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# An Array<Symbol> of possible values for `state_eq` filter.
|
|
72
|
+
# Excludes the states that cannot be filtered with the ransack predicate.
|
|
73
|
+
# A link to filter by "Not answered" will be added in:
|
|
74
|
+
# Decidim::EnhancedTextwork::Admin::FilterableHelper#extra_dropdown_submenu_options_items
|
|
75
|
+
def paragraph_states
|
|
76
|
+
Paragraph::POSSIBLE_STATES.without("not_answered")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
|
|
5
|
+
module Decidim
|
|
6
|
+
module EnhancedTextwork
|
|
7
|
+
module Admin
|
|
8
|
+
module Picker
|
|
9
|
+
extend ActiveSupport::Concern
|
|
10
|
+
|
|
11
|
+
included do
|
|
12
|
+
helper Decidim::EnhancedTextwork::Admin::ParagraphsPickerHelper
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def paragraphs_picker
|
|
16
|
+
render :paragraphs_picker, layout: false
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|