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,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when an admin batch updates paragraphs category.
|
|
7
|
+
class UpdateParagraphCategory < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# category_id - the category id to update
|
|
11
|
+
# paragraph_ids - the paragraphs ids to update.
|
|
12
|
+
def initialize(category_id, paragraph_ids)
|
|
13
|
+
@category = Decidim::Category.find_by id: category_id
|
|
14
|
+
@paragraph_ids = paragraph_ids
|
|
15
|
+
@response = { category_name: "", successful: [], errored: [] }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Executes the command. Broadcasts these events:
|
|
19
|
+
#
|
|
20
|
+
# - :update_paragraphs_category - when everything is ok, returns @response.
|
|
21
|
+
# - :invalid_category - if the category is blank.
|
|
22
|
+
# - :invalid_paragraph_ids - if the paragraph_ids is blank.
|
|
23
|
+
#
|
|
24
|
+
# Returns @response hash:
|
|
25
|
+
#
|
|
26
|
+
# - :category_name - the translated_name of the category assigned
|
|
27
|
+
# - :successful - Array of names of the updated paragraphs
|
|
28
|
+
# - :errored - Array of names of the paragraphs not updated because they already had the category assigned
|
|
29
|
+
def call
|
|
30
|
+
return broadcast(:invalid_category) if @category.blank?
|
|
31
|
+
return broadcast(:invalid_paragraph_ids) if @paragraph_ids.blank?
|
|
32
|
+
|
|
33
|
+
@response[:category_name] = @category.translated_name
|
|
34
|
+
Paragraph.where(id: @paragraph_ids).find_each do |paragraph|
|
|
35
|
+
if @category == paragraph.category
|
|
36
|
+
@response[:errored] << paragraph.title
|
|
37
|
+
else
|
|
38
|
+
transaction do
|
|
39
|
+
update_paragraph_category paragraph
|
|
40
|
+
notify_author paragraph if paragraph.coauthorships.any?
|
|
41
|
+
end
|
|
42
|
+
@response[:successful] << paragraph.title
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
broadcast(:update_paragraphs_category, @response)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def update_paragraph_category(paragraph)
|
|
52
|
+
paragraph.update!(
|
|
53
|
+
category: @category
|
|
54
|
+
)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def notify_author(paragraph)
|
|
58
|
+
Decidim::EventsManager.publish(
|
|
59
|
+
event: "decidim.events.enhanced_textwork.paragraph_update_category",
|
|
60
|
+
event_class: Decidim::EnhancedTextwork::Admin::UpdateParagraphCategoryEvent,
|
|
61
|
+
resource: paragraph,
|
|
62
|
+
affected_users: paragraph.notifiable_identities
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when an admin batch updates paragraphs scope.
|
|
7
|
+
class UpdateParagraphScope < Rectify::Command
|
|
8
|
+
include TranslatableAttributes
|
|
9
|
+
# Public: Initializes the command.
|
|
10
|
+
#
|
|
11
|
+
# scope_id - the scope id to update
|
|
12
|
+
# paragraph_ids - the paragraphs ids to update.
|
|
13
|
+
def initialize(scope_id, paragraph_ids)
|
|
14
|
+
@scope = Decidim::Scope.find_by id: scope_id
|
|
15
|
+
@paragraph_ids = paragraph_ids
|
|
16
|
+
@response = { scope_name: "", successful: [], errored: [] }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Executes the command. Broadcasts these events:
|
|
20
|
+
#
|
|
21
|
+
# - :update_paragraphs_scope - when everything is ok, returns @response.
|
|
22
|
+
# - :invalid_scope - if the scope is blank.
|
|
23
|
+
# - :invalid_paragraph_ids - if the paragraph_ids is blank.
|
|
24
|
+
#
|
|
25
|
+
# Returns @response hash:
|
|
26
|
+
#
|
|
27
|
+
# - :scope_name - the translated_name of the scope assigned
|
|
28
|
+
# - :successful - Array of names of the updated paragraphs
|
|
29
|
+
# - :errored - Array of names of the paragraphs not updated because they already had the scope assigned
|
|
30
|
+
def call
|
|
31
|
+
return broadcast(:invalid_scope) if @scope.blank?
|
|
32
|
+
return broadcast(:invalid_paragraph_ids) if @paragraph_ids.blank?
|
|
33
|
+
|
|
34
|
+
update_paragraphs_scope
|
|
35
|
+
|
|
36
|
+
broadcast(:update_paragraphs_scope, @response)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
attr_reader :scope, :paragraph_ids
|
|
42
|
+
|
|
43
|
+
def update_paragraphs_scope
|
|
44
|
+
@response[:scope_name] = translated_attribute(scope.name, scope.organization)
|
|
45
|
+
Paragraph.where(id: paragraph_ids).find_each do |paragraph|
|
|
46
|
+
if scope == paragraph.scope
|
|
47
|
+
@response[:errored] << paragraph.title
|
|
48
|
+
else
|
|
49
|
+
transaction do
|
|
50
|
+
update_paragraph_scope paragraph
|
|
51
|
+
notify_author paragraph if paragraph.coauthorships.any?
|
|
52
|
+
end
|
|
53
|
+
@response[:successful] << paragraph.title
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def update_paragraph_scope(paragraph)
|
|
59
|
+
paragraph.update!(
|
|
60
|
+
scope: scope
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def notify_author(paragraph)
|
|
65
|
+
Decidim::EventsManager.publish(
|
|
66
|
+
event: "decidim.events.enhanced_textwork.paragraph_update_scope",
|
|
67
|
+
event_class: Decidim::EnhancedTextwork::Admin::UpdateParagraphScopeEvent,
|
|
68
|
+
resource: paragraph,
|
|
69
|
+
affected_users: paragraph.notifiable_identities
|
|
70
|
+
)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when an admin updates participatory text paragraphs.
|
|
7
|
+
class UpdateParticipatoryText < Rectify::Command
|
|
8
|
+
include Decidim::TranslatableAttributes
|
|
9
|
+
|
|
10
|
+
# Public: Initializes the command.
|
|
11
|
+
#
|
|
12
|
+
# form - A PreviewParticipatoryTextForm form object with the params.
|
|
13
|
+
def initialize(form)
|
|
14
|
+
@form = form
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Executes the command. Broadcasts these events:
|
|
18
|
+
#
|
|
19
|
+
# - :ok when everything is valid.
|
|
20
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
21
|
+
#
|
|
22
|
+
# Returns nothing.
|
|
23
|
+
def call
|
|
24
|
+
transaction do
|
|
25
|
+
@failures = {}
|
|
26
|
+
update_contents_and_resort_paragraphs(form)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
if @failures.any?
|
|
30
|
+
broadcast(:invalid, @failures)
|
|
31
|
+
else
|
|
32
|
+
broadcast(:ok)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
attr_reader :form
|
|
39
|
+
|
|
40
|
+
# Prevents PaperTrail from creating versions while updating participatory text paragraphs.
|
|
41
|
+
# A first version will be created when publishing the Participatory Text.
|
|
42
|
+
def update_contents_and_resort_paragraphs(form)
|
|
43
|
+
PaperTrail.request(enabled: false) do
|
|
44
|
+
form.paragraphs.each do |prop_form|
|
|
45
|
+
add_failure(prop_form) if prop_form.invalid?
|
|
46
|
+
|
|
47
|
+
paragraph = Paragraph.where(component: form.current_component).find(prop_form.id)
|
|
48
|
+
paragraph.set_list_position(prop_form.position) if paragraph.position != prop_form.position
|
|
49
|
+
paragraph.title = { I18n.locale => translated_attribute(prop_form.title) }
|
|
50
|
+
paragraph.body = if paragraph.participatory_text_level == ParticipatoryTextSection::LEVELS[:article]
|
|
51
|
+
{ I18n.locale => translated_attribute(prop_form.body) }
|
|
52
|
+
else
|
|
53
|
+
{ I18n.locale => "" }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
add_failure(paragraph) unless paragraph.save
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
raise ActiveRecord::Rollback if @failures.any?
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def add_failure(paragraph)
|
|
63
|
+
@failures[paragraph.id] = paragraph.errors.full_messages
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user creates a new collaborative draft.
|
|
6
|
+
class CreateCollaborativeDraft < Rectify::Command
|
|
7
|
+
include ::Decidim::AttachmentMethods
|
|
8
|
+
include HashtagsMethods
|
|
9
|
+
|
|
10
|
+
# Public: Initializes the command.
|
|
11
|
+
#
|
|
12
|
+
# form - A form object with the params.
|
|
13
|
+
# current_user - The current user.
|
|
14
|
+
def initialize(form, current_user)
|
|
15
|
+
@form = form
|
|
16
|
+
@current_user = current_user
|
|
17
|
+
@attached_to = nil
|
|
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
|
+
|
|
29
|
+
if process_attachments?
|
|
30
|
+
build_attachment
|
|
31
|
+
return broadcast(:invalid) if attachment_invalid?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
transaction do
|
|
35
|
+
create_collaborative_draft
|
|
36
|
+
create_attachment if process_attachments?
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
broadcast(:ok, collaborative_draft)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
attr_reader :form, :collaborative_draft, :attachment
|
|
45
|
+
|
|
46
|
+
def create_collaborative_draft
|
|
47
|
+
@collaborative_draft = Decidim.traceability.perform_action!(
|
|
48
|
+
:create,
|
|
49
|
+
CollaborativeDraft,
|
|
50
|
+
@form.current_user,
|
|
51
|
+
visibility: "public-only"
|
|
52
|
+
) do
|
|
53
|
+
draft = CollaborativeDraft.new(
|
|
54
|
+
title: title_with_hashtags,
|
|
55
|
+
body: body_with_hashtags,
|
|
56
|
+
category: form.category,
|
|
57
|
+
scope: form.scope,
|
|
58
|
+
component: form.component,
|
|
59
|
+
address: form.address,
|
|
60
|
+
latitude: form.latitude,
|
|
61
|
+
longitude: form.longitude,
|
|
62
|
+
state: "open"
|
|
63
|
+
)
|
|
64
|
+
draft.coauthorships.build(author: @current_user, user_group: @form.user_group)
|
|
65
|
+
draft.save!
|
|
66
|
+
draft
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
@attached_to = @collaborative_draft
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def user_group
|
|
73
|
+
@user_group ||= Decidim::UserGroup.find_by(organization: organization, id: form.user_group_id)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def organization
|
|
77
|
+
@organization ||= @current_user.organization
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user creates a new paragraph.
|
|
6
|
+
class CreateParagraph < Rectify::Command
|
|
7
|
+
include ::Decidim::AttachmentMethods
|
|
8
|
+
include HashtagsMethods
|
|
9
|
+
|
|
10
|
+
# Public: Initializes the command.
|
|
11
|
+
#
|
|
12
|
+
# form - A form object with the params.
|
|
13
|
+
# current_user - The current user.
|
|
14
|
+
# coauthorships - The coauthorships of the paragraph.
|
|
15
|
+
def initialize(form, current_user, coauthorships = nil)
|
|
16
|
+
@form = form
|
|
17
|
+
@current_user = current_user
|
|
18
|
+
@coauthorships = coauthorships
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Executes the command. Broadcasts these events:
|
|
22
|
+
#
|
|
23
|
+
# - :ok when everything is valid, together with the paragraph.
|
|
24
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
25
|
+
#
|
|
26
|
+
# Returns nothing.
|
|
27
|
+
def call
|
|
28
|
+
return broadcast(:invalid) if form.invalid?
|
|
29
|
+
|
|
30
|
+
if paragraph_limit_reached?
|
|
31
|
+
form.errors.add(:base, I18n.t("decidim.enhanced_textwork.new.limit_reached"))
|
|
32
|
+
return broadcast(:invalid)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
transaction do
|
|
36
|
+
create_paragraph
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
broadcast(:ok, paragraph)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
attr_reader :form, :paragraph, :attachment
|
|
45
|
+
|
|
46
|
+
# Prevent PaperTrail from creating an additional version
|
|
47
|
+
# in the paragraph multi-step creation process (step 1: create)
|
|
48
|
+
#
|
|
49
|
+
# A first version will be created in step 4: publish
|
|
50
|
+
# for diff rendering in the paragraph version control
|
|
51
|
+
def create_paragraph
|
|
52
|
+
PaperTrail.request(enabled: false) do
|
|
53
|
+
@paragraph = Decidim.traceability.perform_action!(
|
|
54
|
+
:create,
|
|
55
|
+
Decidim::EnhancedTextwork::Paragraph,
|
|
56
|
+
@current_user,
|
|
57
|
+
visibility: "public-only"
|
|
58
|
+
) do
|
|
59
|
+
paragraph = Paragraph.new(
|
|
60
|
+
title: {
|
|
61
|
+
I18n.locale => title_with_hashtags
|
|
62
|
+
},
|
|
63
|
+
body: {
|
|
64
|
+
I18n.locale => body_with_hashtags
|
|
65
|
+
},
|
|
66
|
+
component: form.component
|
|
67
|
+
)
|
|
68
|
+
paragraph.add_coauthor(@current_user, user_group: user_group)
|
|
69
|
+
paragraph.save!
|
|
70
|
+
paragraph
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def paragraph_limit_reached?
|
|
76
|
+
return false if @coauthorships.present?
|
|
77
|
+
|
|
78
|
+
paragraph_limit = form.current_component.settings.paragraph_limit
|
|
79
|
+
|
|
80
|
+
return false if paragraph_limit.zero?
|
|
81
|
+
|
|
82
|
+
if user_group
|
|
83
|
+
user_group_paragraphs.count >= paragraph_limit
|
|
84
|
+
else
|
|
85
|
+
current_user_paragraphs.count >= paragraph_limit
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def user_group
|
|
90
|
+
@user_group ||= Decidim::UserGroup.find_by(organization: organization, id: form.user_group_id)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def organization
|
|
94
|
+
@organization ||= @current_user.organization
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def current_user_paragraphs
|
|
98
|
+
Paragraph.from_author(@current_user).where(component: form.current_component).except_withdrawn
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def user_group_paragraphs
|
|
102
|
+
Paragraph.from_user_group(@user_group).where(component: form.current_component).except_withdrawn
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user destroys a draft paragraph.
|
|
6
|
+
class DestroyParagraph < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# paragraph - The paragraph to destroy.
|
|
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 and the paragraph is deleted.
|
|
19
|
+
# - :invalid if the paragraph is not a draft.
|
|
20
|
+
# - :invalid if the paragraph's author is not the current user.
|
|
21
|
+
#
|
|
22
|
+
# Returns nothing.
|
|
23
|
+
def call
|
|
24
|
+
return broadcast(:invalid) unless @paragraph.draft?
|
|
25
|
+
return broadcast(:invalid) unless @paragraph.authored_by?(@current_user)
|
|
26
|
+
|
|
27
|
+
@paragraph.destroy!
|
|
28
|
+
|
|
29
|
+
broadcast(:ok, @paragraph)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A module with all the gallery common methods for paragraphs
|
|
6
|
+
# and collaborative draft commands.
|
|
7
|
+
# Allows to create several image attachments at once
|
|
8
|
+
module GalleryMethods
|
|
9
|
+
include ::Decidim::GalleryMethods
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def gallery_allowed?
|
|
14
|
+
@form.current_component.settings.attachments_allowed?
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A module with all the hash tags common methods for paragraphs
|
|
6
|
+
# and collaborative draft commands.
|
|
7
|
+
module HashtagsMethods
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
def title_with_hashtags
|
|
11
|
+
@title_with_hashtags ||= Decidim::ContentProcessor.parse_with_processor(:hashtag, form.title, current_organization: form.current_organization).rewrite
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def body_with_hashtags
|
|
15
|
+
@body_with_hashtags ||= begin
|
|
16
|
+
ret = Decidim::ContentProcessor.parse_with_processor(:hashtag, form.body, current_organization: form.current_organization).rewrite.strip
|
|
17
|
+
ret += "\n#{body_extra_hashtags.strip}" unless body_extra_hashtags.empty?
|
|
18
|
+
ret
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def body_extra_hashtags
|
|
23
|
+
@body_extra_hashtags ||= if form.respond_to?(:extra_hashtags)
|
|
24
|
+
Decidim::ContentProcessor.parse_with_processor(
|
|
25
|
+
:hashtag,
|
|
26
|
+
form.extra_hashtags.map { |hashtag| "##{hashtag}" }.join(" "),
|
|
27
|
+
current_organization: form.current_organization,
|
|
28
|
+
extra_hashtags: true
|
|
29
|
+
).rewrite
|
|
30
|
+
else
|
|
31
|
+
""
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user publishes a collaborative_draft.
|
|
6
|
+
class PublishCollaborativeDraft < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# collaborative_draft - The collaborative_draft to publish.
|
|
10
|
+
# current_user - The current user.
|
|
11
|
+
# paragraph_form - the form object of the new paragraph
|
|
12
|
+
def initialize(collaborative_draft, current_user)
|
|
13
|
+
@collaborative_draft = collaborative_draft
|
|
14
|
+
@current_user = current_user
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Executes the command. Broadcasts these events:
|
|
18
|
+
#
|
|
19
|
+
# - :ok when everything is valid and the collaborative_draft is published.
|
|
20
|
+
# - :invalid if the collaborative_draft's author is not the current user.
|
|
21
|
+
#
|
|
22
|
+
# Returns nothing.
|
|
23
|
+
def call
|
|
24
|
+
return broadcast(:invalid) unless @collaborative_draft.open?
|
|
25
|
+
return broadcast(:invalid) unless @collaborative_draft.authored_by? @current_user
|
|
26
|
+
|
|
27
|
+
transaction do
|
|
28
|
+
reject_access_to_collaborative_draft
|
|
29
|
+
publish_collaborative_draft
|
|
30
|
+
create_paragraph!
|
|
31
|
+
link_collaborative_draft_and_paragraph
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
broadcast(:ok, @new_paragraph)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
attr_accessor :new_paragraph
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def reject_access_to_collaborative_draft
|
|
42
|
+
@collaborative_draft.requesters.each do |requester_user|
|
|
43
|
+
RejectAccessToCollaborativeDraft.call(@collaborative_draft, current_user, requester_user)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def publish_collaborative_draft
|
|
48
|
+
Decidim.traceability.update!(
|
|
49
|
+
@collaborative_draft,
|
|
50
|
+
@current_user,
|
|
51
|
+
{ state: "published", published_at: Time.current },
|
|
52
|
+
visibility: "public-only"
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def paragraph_attributes
|
|
57
|
+
fields = {}
|
|
58
|
+
|
|
59
|
+
parsed_title = Decidim::ContentProcessor.parse_with_processor(:hashtag, @collaborative_draft.title, current_organization: @collaborative_draft.organization).rewrite
|
|
60
|
+
parsed_body = Decidim::ContentProcessor.parse_with_processor(:hashtag, @collaborative_draft.body, current_organization: @collaborative_draft.organization).rewrite
|
|
61
|
+
|
|
62
|
+
fields[:title] = { I18n.locale => parsed_title }
|
|
63
|
+
fields[:body] = { I18n.locale => parsed_body }
|
|
64
|
+
fields[:component] = @collaborative_draft.component
|
|
65
|
+
fields[:scope] = @collaborative_draft.scope
|
|
66
|
+
fields[:address] = @collaborative_draft.address
|
|
67
|
+
fields[:published_at] = Time.current
|
|
68
|
+
|
|
69
|
+
fields
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def create_paragraph!
|
|
73
|
+
@new_paragraph = Decidim.traceability.perform_action!(
|
|
74
|
+
:create,
|
|
75
|
+
Decidim::EnhancedTextwork::Paragraph,
|
|
76
|
+
@current_user,
|
|
77
|
+
visibility: "public-only"
|
|
78
|
+
) do
|
|
79
|
+
new_paragraph = Paragraph.new(paragraph_attributes)
|
|
80
|
+
new_paragraph.coauthorships = @collaborative_draft.coauthorships
|
|
81
|
+
new_paragraph.category = @collaborative_draft.category
|
|
82
|
+
new_paragraph.attachments = @collaborative_draft.attachments
|
|
83
|
+
new_paragraph.save!
|
|
84
|
+
new_paragraph
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def link_collaborative_draft_and_paragraph
|
|
89
|
+
@collaborative_draft.link_resources(@new_paragraph, "created_from_collaborative_draft")
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module EnhancedTextwork
|
|
5
|
+
# A command with all the business logic when a user publishes a draft paragraph.
|
|
6
|
+
class PublishParagraph < Rectify::Command
|
|
7
|
+
# Public: Initializes the command.
|
|
8
|
+
#
|
|
9
|
+
# paragraph - The paragraph to publish.
|
|
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 and the paragraph is published.
|
|
19
|
+
# - :invalid if the paragraph's author is not the current user.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
return broadcast(:invalid) unless @paragraph.authored_by?(@current_user)
|
|
24
|
+
|
|
25
|
+
transaction do
|
|
26
|
+
publish_paragraph
|
|
27
|
+
increment_scores
|
|
28
|
+
send_notification
|
|
29
|
+
send_notification_to_participatory_space
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
broadcast(:ok, @paragraph)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
# This will be the PaperTrail version that is
|
|
38
|
+
# shown in the version control feature (1 of 1)
|
|
39
|
+
#
|
|
40
|
+
# For an attribute to appear in the new version it has to be reset
|
|
41
|
+
# and reassigned, as PaperTrail only keeps track of object CHANGES.
|
|
42
|
+
def publish_paragraph
|
|
43
|
+
title = reset(:title)
|
|
44
|
+
body = reset(:body)
|
|
45
|
+
|
|
46
|
+
Decidim.traceability.perform_action!(
|
|
47
|
+
"publish",
|
|
48
|
+
@paragraph,
|
|
49
|
+
@current_user,
|
|
50
|
+
visibility: "public-only"
|
|
51
|
+
) do
|
|
52
|
+
@paragraph.update title: title, body: body, published_at: Time.current
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Reset the attribute to an empty string and return the old value
|
|
57
|
+
def reset(attribute)
|
|
58
|
+
attribute_value = @paragraph[attribute]
|
|
59
|
+
PaperTrail.request(enabled: false) do
|
|
60
|
+
# rubocop:disable Rails/SkipsModelValidations
|
|
61
|
+
@paragraph.update_attribute attribute, ""
|
|
62
|
+
# rubocop:enable Rails/SkipsModelValidations
|
|
63
|
+
end
|
|
64
|
+
attribute_value
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def send_notification
|
|
68
|
+
return if @paragraph.coauthorships.empty?
|
|
69
|
+
|
|
70
|
+
Decidim::EventsManager.publish(
|
|
71
|
+
event: "decidim.events.enhanced_textwork.paragraph_published",
|
|
72
|
+
event_class: Decidim::EnhancedTextwork::PublishParagraphEvent,
|
|
73
|
+
resource: @paragraph,
|
|
74
|
+
followers: coauthors_followers
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def send_notification_to_participatory_space
|
|
79
|
+
Decidim::EventsManager.publish(
|
|
80
|
+
event: "decidim.events.enhanced_textwork.paragraph_published",
|
|
81
|
+
event_class: Decidim::EnhancedTextwork::PublishParagraphEvent,
|
|
82
|
+
resource: @paragraph,
|
|
83
|
+
followers: @paragraph.participatory_space.followers - coauthors_followers,
|
|
84
|
+
extra: {
|
|
85
|
+
participatory_space: true
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def coauthors_followers
|
|
91
|
+
@coauthors_followers ||= @paragraph.authors.flat_map(&:followers)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def increment_scores
|
|
95
|
+
@paragraph.coauthorships.find_each do |coauthorship|
|
|
96
|
+
if coauthorship.user_group
|
|
97
|
+
Decidim::Gamification.increment_score(coauthorship.user_group, :paragraphs)
|
|
98
|
+
else
|
|
99
|
+
Decidim::Gamification.increment_score(coauthorship.author, :paragraphs)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|