From 76dcc6c4f5ebe390926a9c900e03480e53a8912d Mon Sep 17 00:00:00 2001 From: Jose Lloret Date: Fri, 23 Jun 2017 13:22:39 +0100 Subject: [PATCH 01/27] using data-toggle attribute to initiliase and trigger any popover. DMPRoadmap/roadmap#431 --- app/views/guidance_groups/admin_edit.html.erb | 4 ++-- app/views/guidance_groups/admin_new.html.erb | 4 ++-- app/views/guidances/_add_guidance.html.erb | 6 +++--- app/views/guidances/admin_edit.html.erb | 6 +++--- app/views/guidances/admin_new.html.erb | 8 ++++---- app/views/phases/_edit_phase.html.erb | 2 +- app/views/phases/admin_add.html.erb | 2 +- app/views/questions/_add_question.html.erb | 12 ++++++------ app/views/questions/_edit_question.html.erb | 12 ++++++------ app/views/sections/_add_section.html.erb | 2 +- app/views/sections/_edit_section.html.erb | 2 +- app/views/templates/_edit_annotations.html.erb | 4 ++-- app/views/templates/_edit_template.html.erb | 2 +- app/views/templates/admin_new.html.erb | 2 +- lib/assets/javascripts/admin.js | 10 +--------- lib/assets/javascripts/bootstrap_listeners.js | 9 +++++---- 16 files changed, 40 insertions(+), 47 deletions(-) diff --git a/app/views/guidance_groups/admin_edit.html.erb b/app/views/guidance_groups/admin_edit.html.erb index 77146d5e8d..a68ab68376 100644 --- a/app/views/guidance_groups/admin_edit.html.erb +++ b/app/views/guidance_groups/admin_edit.html.erb @@ -29,7 +29,7 @@
- <%= link_to(image_tag('help_button.png'), '#', class: 'guidance_group_title_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Add an appropriate name for your guidance group. This name will be used to tell the end user where the guidance has come from. It will be appended to text identifying the theme e.g. "[guidance group name]: guidance on data sharing" so we suggest you just use the institution or department name.')) %> + <%= link_to(image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Add an appropriate name for your guidance group. This name will be used to tell the end user where the guidance has come from. It will be appended to text identifying the theme e.g. "[guidance group name]: guidance on data sharing" so we suggest you just use the institution or department name.')) %>
@@ -55,7 +55,7 @@ <%= f.check_box :optional_subset %> <%= _('e.g. School/ Department') %>
- <%= link_to(image_tag('help_button.png'), '#', class: 'guidance_group_subset_popover', rel: "popover", 'data-html' => "true", 'data-content' => _("If the guidance is only meant for a subset of users e.g. those in a specific college or institute, check this box. Users will be able to select to display this subset guidance when answering questions in the 'create plan' wizard.")) %> + <%= link_to(image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _("If the guidance is only meant for a subset of users e.g. those in a specific college or institute, check this box. Users will be able to select to display this subset guidance when answering questions in the 'create plan' wizard.")) %>
diff --git a/app/views/guidance_groups/admin_new.html.erb b/app/views/guidance_groups/admin_new.html.erb index 8ea92b8826..2c466cbb39 100644 --- a/app/views/guidance_groups/admin_new.html.erb +++ b/app/views/guidance_groups/admin_new.html.erb @@ -25,7 +25,7 @@ <%= f.text_field :name, as: :string, class: "text_field" %>
- <%= link_to( image_tag("help_button.png"), "#", class: 'guidance_group_title_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Add an appropriate name for your guidance group. This name will be used to tell the end user where the guidance has come from. It will be appended to text identifying the theme e.g. "[guidance group name]: guidance on data sharing" so we suggest you just use the institution or department name.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Add an appropriate name for your guidance group. This name will be used to tell the end user where the guidance has come from. It will be appended to text identifying the theme e.g. "[guidance group name]: guidance on data sharing" so we suggest you just use the institution or department name.'))%>
@@ -35,7 +35,7 @@ <%= f.check_box :optional_subset %> <%= _('e.g. School/ Department') %>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_group_subset_popover', rel: "popover", 'data-html' => "true", 'data-content' => _("If the guidance is only meant for a subset of users e.g. those in a specific college or institute, check this box. Users will be able to select to display this subset guidance when answering questions in the 'create plan' wizard."))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _("If the guidance is only meant for a subset of users e.g. those in a specific college or institute, check this box. Users will be able to select to display this subset guidance when answering questions in the 'create plan' wizard."))%>
diff --git a/app/views/guidances/_add_guidance.html.erb b/app/views/guidances/_add_guidance.html.erb index bd036d2b85..ca49a90206 100644 --- a/app/views/guidances/_add_guidance.html.erb +++ b/app/views/guidances/_add_guidance.html.erb @@ -9,7 +9,7 @@ <%= text_area_tag("guidance-text", "", class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "guidance_text_popover", rel: "popover", "data-html" => "true", "data-content" => _('Enter your guidance here. You can include links where needed.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('Enter your guidance here. You can include links where needed.'))%>
@@ -24,7 +24,7 @@ :id, :title, {prompt: false, include_blank: _('None')}, {multiple: true})%>
- <%= link_to( image_tag("help_button.png"), "#", class: "guidance_by_themes_popover", rel: "popover", "data-html" => "true", "data-content" => _('Select which theme(s) this guidance relates to.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('Select which theme(s) this guidance relates to.'))%>
@@ -47,7 +47,7 @@ :id, :name, {prompt: false, include_blank: _('None')}, {multiple: false})%>
- <%= link_to( image_tag("help_button.png"), "#", class: "guidance_group_select_popover", rel: "popover", "data-html" => "true", "data-content" => _('Select which group this guidance relates to.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('Select which group this guidance relates to.'))%>
diff --git a/app/views/guidances/admin_edit.html.erb b/app/views/guidances/admin_edit.html.erb index b8ddce7611..769fc6ed55 100644 --- a/app/views/guidances/admin_edit.html.erb +++ b/app/views/guidances/admin_edit.html.erb @@ -29,7 +29,7 @@ <%= text_area_tag("guidance-text", @guidance.text, class: "tinymce") %>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_text_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Enter your guidance here. You can include links where needed.'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Enter your guidance here. You can include links where needed.'))%>
@@ -43,7 +43,7 @@ {prompt: false, include_blank: 'None'}, {multiple: true})%>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_by_themes_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Select which theme(s) this guidance relates to.'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Select which theme(s) this guidance relates to.'))%>
@@ -65,7 +65,7 @@ :id, :name, {prompt: false, include_blank: 'None'}, {multiple: false})%>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_group_select_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Select which group this guidance relates to.'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Select which group this guidance relates to.'))%>
diff --git a/app/views/guidances/admin_new.html.erb b/app/views/guidances/admin_new.html.erb index 59b5397d82..a67fe0ee1e 100644 --- a/app/views/guidances/admin_new.html.erb +++ b/app/views/guidances/admin_new.html.erb @@ -24,7 +24,7 @@ <%= text_area_tag("guidance-text", "", class: "tinymce") %>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_text_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Enter your guidance here. You can include links where needed.'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Enter your guidance here. You can include links where needed.'))%>
@@ -38,7 +38,7 @@ :id, :title, {prompt: false, include_blank: 'None'}, {multiple: true})%>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_by_themes_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Select which theme(s) this guidance relates to.'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Select which theme(s) this guidance relates to.'))%>
@@ -51,7 +51,7 @@ <%= f.check_box :published , as: :check_boxes%>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_group_subset_popover', rel: "popover", 'data-html' => "true", 'data-content' => _("Check this box when you are ready for this guidance to appear on user's plans."))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _("Check this box when you are ready for this guidance to appear on user's plans."))%>
@@ -62,7 +62,7 @@ :id, :name, {prompt: false, include_blank: 'None'}, {multiple: false})%>
- <%= link_to( image_tag('help_button.png'), '#', class: 'guidance_group_select_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Select which group this guidance relates to.'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Select which group this guidance relates to.'))%>
diff --git a/app/views/phases/_edit_phase.html.erb b/app/views/phases/_edit_phase.html.erb index de7b4255ba..40ae57202a 100644 --- a/app/views/phases/_edit_phase.html.erb +++ b/app/views/phases/_edit_phase.html.erb @@ -29,7 +29,7 @@ <%= text_area_tag("phase-desc", phase.description, class: "tinymce") %>
- <%= link_to( image_tag('help_button.png'), '#', class: 'phase_desc_popover', rel: "popover", 'data-html' => "true", 'data-content' => _("Enter a basic description. This will be presented to users on the 'Admin Plan' tab, above the summary of the sections and questions which they will be asked to answer."))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _("Enter a basic description. This will be presented to users on the 'Admin Plan' tab, above the summary of the sections and questions which they will be asked to answer."))%>
diff --git a/app/views/phases/admin_add.html.erb b/app/views/phases/admin_add.html.erb index 546c727a75..2263b8de0b 100644 --- a/app/views/phases/admin_add.html.erb +++ b/app/views/phases/admin_add.html.erb @@ -53,7 +53,7 @@ <%= tinymce :content_css => asset_path('application.css') %>
- <%= link_to( image_tag("help_button.png"), "#", class: "phase_desc_popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter a basic description. This will be presented to users on the 'Admin Plan' tab, above the summary of the sections and questions which they will be asked to answer."))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter a basic description. This will be presented to users on the 'Admin Plan' tab, above the summary of the sections and questions which they will be asked to answer."))%>
diff --git a/app/views/questions/_add_question.html.erb b/app/views/questions/_add_question.html.erb index 96b894fbe5..667582700a 100644 --- a/app/views/questions/_add_question.html.erb +++ b/app/views/questions/_add_question.html.erb @@ -43,7 +43,7 @@ in the admin interface. {}, class: "question_format" %>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_format_popover", rel: "popover", "data-html" => "true", "data-content" => _("You can choose from:"))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("You can choose from:"))%>
@@ -55,7 +55,7 @@ in the admin interface. <%= _('Order')%> <%= _('Text')%> <%= _('Default')%> - <%= link_to( image_tag("help_button.png"), "#", class: "question_options_popover", rel: "popover", "data-html" => "true", "data-content" => _('Enter any options that you wish to display. If you want to pre-set one option as selected, check the default box.'))%> + <%= link_to( image_tag("help_button.png"), "#", class: "question_options_popover", "data-toggle": "popover",rel: "popover", "data-html" => "true", "data-content" => _('Enter any options that you wish to display. If you want to pre-set one option as selected, check the default box.'))%> @@ -97,7 +97,7 @@ in the admin interface.
- <%= link_to( image_tag("help_button.png"), "#", class: "default_answer_popover", rel: "popover", "data-html" => "true", "data-content" => _('Anything you enter here will display in the answer box. If you want an answer in a certain format (e.g. tables), you can enter that style here.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('Anything you enter here will display in the answer box. If you want an answer in a certain format (e.g. tables), you can enter that style here.'))%>
@@ -113,7 +113,7 @@ in the admin interface. <%= text_area_tag(:example_answer, "", class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "suggested_answer_popover", rel: "popover", "data-html" => "true", "data-content" => _('You can add an example answer to help users respond. These will be presented above the answer box and can be copied/ pasted.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('You can add an example answer to help users respond. These will be presented above the answer box and can be copied/ pasted.'))%>
@@ -127,7 +127,7 @@ in the admin interface. <%= text_area_tag(:guidance, "", class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_guidance_popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter specific guidance to accompany this question. If you have guidance by themes too, this will be pulled in based on your selections below so it's best not to duplicate too much text."))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter specific guidance to accompany this question. If you have guidance by themes too, this will be pulled in based on your selections below so it's best not to duplicate too much text."))%>
@@ -143,7 +143,7 @@ in the admin interface. :id, :title, {prompt: false, include_blank: _('None')}, {multiple: true})%>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_themes_popover", rel: "popover", "data-html" => "true", "data-content" => _("

Select themes that are relevant to this question.

This allows your generic institution-level guidance to be drawn in, as well as that from other sources e.g. the %{organisation_abbreviation} or any Schools/Departments that you provide guidance for.

You can select multiple themes by using the CTRL button.

"))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("

Select themes that are relevant to this question.

This allows your generic institution-level guidance to be drawn in, as well as that from other sources e.g. the %{organisation_abbreviation} or any Schools/Departments that you provide guidance for.

You can select multiple themes by using the CTRL button.

"))%>
diff --git a/app/views/questions/_edit_question.html.erb b/app/views/questions/_edit_question.html.erb index c46d932ba3..0d721d4761 100644 --- a/app/views/questions/_edit_question.html.erb +++ b/app/views/questions/_edit_question.html.erb @@ -38,7 +38,7 @@ in the admin interface. {}, class: "question_format", id: "#{question.id}-select-format"%>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_format_popover", rel: "popover", "data-html" => "true", "data-content" => _("You can choose from:"))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("You can choose from:"))%>
@@ -51,7 +51,7 @@ in the admin interface. <%= _('Order')%> <%= _('Text')%> <%= _('Default')%> - <%= link_to( image_tag("help_button.png"), "#", class: "question_options_popover", rel: "popover", "data-html" => "true", "data-content" => _('Enter any options that you wish to display. If you want to pre-set one option as selected, check the default box.'))%> + <%= link_to( image_tag("help_button.png"), "#", class: "question_options_popover", "data-toggle": "popover",rel: "popover", "data-html" => "true", "data-content" => _('Enter any options that you wish to display. If you want to pre-set one option as selected, check the default box.'))%> @@ -92,7 +92,7 @@ in the admin interface.
- <%= link_to( image_tag("help_button.png"), "#", class: "default_answer_popover", rel: "popover", "data-html" => "true", "data-content" => _('Anything you enter here will display in the answer box. If you want an answer in a certain format (e.g. tables), you can enter that style here.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('Anything you enter here will display in the answer box. If you want an answer in a certain format (e.g. tables), you can enter that style here.'))%>
@@ -116,7 +116,7 @@ in the admin interface. <% end %>
- <%= link_to( image_tag("help_button.png"), "#", class: "suggested_answer_popover", rel: "popover", "data-html" => "true", "data-content" => _('You can add an example or suggested answer to help users respond. These will be presented above the answer box and can be copied/ pasted.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('You can add an example or suggested answer to help users respond. These will be presented above the answer box and can be copied/ pasted.'))%>
@@ -132,7 +132,7 @@ in the admin interface. <%= text_area_tag("question-guidance-#{question.id}", guidance_text , class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_guidance_popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter specific guidance to accompany this question. If you have guidance by themes too, this will be pulled in based on your selections below so it's best not to duplicate too much text."))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter specific guidance to accompany this question. If you have guidance by themes too, this will be pulled in based on your selections below so it's best not to duplicate too much text."))%>
@@ -147,7 +147,7 @@ in the admin interface. :id, :title, {prompt: false, include_blank: "None"}, {multiple: true})%>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_themes_popover", rel: "popover", "data-html" => "true", "data-content" => _("

Select themes that are relevant to this question.

This allows your generic institution-level guidance to be drawn in, as well as that from other sources e.g. the %{organisation_abbreviation} or any Schools/Departments that you provide guidance for.

You can select multiple themes by using the CTRL button.

"))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("

Select themes that are relevant to this question.

This allows your generic institution-level guidance to be drawn in, as well as that from other sources e.g. the %{organisation_abbreviation} or any Schools/Departments that you provide guidance for.

You can select multiple themes by using the CTRL button.

"))%>
diff --git a/app/views/sections/_add_section.html.erb b/app/views/sections/_add_section.html.erb index 4bbed72646..b8a2077020 100644 --- a/app/views/sections/_add_section.html.erb +++ b/app/views/sections/_add_section.html.erb @@ -35,7 +35,7 @@ <%= text_area_tag("section-desc", "" , class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "section_desc_popover", rel: "popover", "data-html" => "true", "data-content" => _("
Enter a basic description. This could be a summary of what is covered in the section or instructions on how to answer. This text will be displayed in the coloured banner once a section is opened to edit.
"))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("
Enter a basic description. This could be a summary of what is covered in the section or instructions on how to answer. This text will be displayed in the coloured banner once a section is opened to edit.
"))%>
diff --git a/app/views/sections/_edit_section.html.erb b/app/views/sections/_edit_section.html.erb index 5ed252cdab..9f12aeb1d2 100644 --- a/app/views/sections/_edit_section.html.erb +++ b/app/views/sections/_edit_section.html.erb @@ -48,7 +48,7 @@ <%= text_area_tag("section-desc-#{section.id}", section.description , class: "tinymce") %>
- <%= link_to( image_tag('help_button.png'), '#', class: 'section_desc_popover', rel: "popover", 'data-html' => "true", 'data-content' => _("
Enter a basic description. This could be a summary of what is covered in the section or instructions on how to answer. This text will be displayed in the coloured banner once a section is opened to edit.
"))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _("
Enter a basic description. This could be a summary of what is covered in the section or instructions on how to answer. This text will be displayed in the coloured banner once a section is opened to edit.
"))%>
diff --git a/app/views/templates/_edit_annotations.html.erb b/app/views/templates/_edit_annotations.html.erb index 8273f4dd3b..e69961f985 100644 --- a/app/views/templates/_edit_annotations.html.erb +++ b/app/views/templates/_edit_annotations.html.erb @@ -59,7 +59,7 @@ in the admin interface. <% end %>
- <%= link_to( image_tag("help_button.png"), "#", class: "suggested_answer_popover", rel: "popover", "data-html" => "true", "data-content" => _('You can add an example or suggested answer to help users respond. These will be presented above the answer box and can be copied/ pasted.'))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _('You can add an example or suggested answer to help users respond. These will be presented above the answer box and can be copied/ pasted.'))%>
@@ -74,7 +74,7 @@ in the admin interface. <%= text_area_tag("question-guidance-#{question.id}", question.guidance , class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "question_guidance_popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter specific guidance to accompany this question. If you have guidance by themes too, this will be pulled in based on your selections below so it's best not to duplicate too much text."))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("Enter specific guidance to accompany this question. If you have guidance by themes too, this will be pulled in based on your selections below so it's best not to duplicate too much text."))%>
diff --git a/app/views/templates/_edit_template.html.erb b/app/views/templates/_edit_template.html.erb index a660e7b9ad..dab424175c 100644 --- a/app/views/templates/_edit_template.html.erb +++ b/app/views/templates/_edit_template.html.erb @@ -15,7 +15,7 @@ <%= text_area_tag("template-desc", template.description, class: "tinymce") %>
- <%= link_to( image_tag('help_button.png'), '#', class: 'template_desc_popover', rel: "popover", 'data-html' => "true", 'data-content' => _('Enter a description that helps you to differentiate between templates e.g. if you have ones for different audiences'))%> + <%= link_to( image_tag('help_button.png'), '#', "data-toggle": "popover", rel: "popover", 'data-html' => "true", 'data-content' => _('Enter a description that helps you to differentiate between templates e.g. if you have ones for different audiences'))%>
diff --git a/app/views/templates/admin_new.html.erb b/app/views/templates/admin_new.html.erb index bfdf195176..9c5c7a4c4a 100644 --- a/app/views/templates/admin_new.html.erb +++ b/app/views/templates/admin_new.html.erb @@ -30,7 +30,7 @@ <%= text_area_tag("template-desc", "", class: "tinymce") %>
- <%= link_to( image_tag("help_button.png"), "#", class: "template_desc_popover", rel: "popover", "data-html" => "true", "data-content" => _("
Enter a description that helps you to differentiate between templates e.g. if you have ones for different audiences.
"))%> + <%= link_to( image_tag("help_button.png"), "#", "data-toggle": "popover", rel: "popover", "data-html" => "true", "data-content" => _("
Enter a description that helps you to differentiate between templates e.g. if you have ones for different audiences.
"))%>
diff --git a/lib/assets/javascripts/admin.js b/lib/assets/javascripts/admin.js index 4dc282939c..24bd345212 100644 --- a/lib/assets/javascripts/admin.js +++ b/lib/assets/javascripts/admin.js @@ -46,6 +46,7 @@ $( document ).ready(function() { last.after(clone); }); + if($('.in').length > 0) { if ($('.in .current_question').length > 0) { $(document.body).animate({ @@ -59,15 +60,6 @@ $( document ).ready(function() { } } - //set the tinymce popover help text - $(".template_desc_popover, .phase_desc_popover, .version_desc_popover, .section_desc_popover, .question_format_popover," + - " .default_answer_popover, .suggested_answer_popover, .question_guidance_popover, .question_themes_popover," + - " .question_options_popover, .guidance_group_title_popover, .guidance_group_template_popover," + - " .guidance_group_subset_popover, .guidance_text_popover, .guidance_apply_to_popover, .guidance_by_themes_popover," + - " .guidance_by_question_popover, .guidance_group_select_popover, .org_abbr_popover").on('click', function(e) { - e.preventDefault(); - }).popover(); - // This handler serves to display/hide default_answer field as well as to display/hide question_options fields // depending on the question_format selected $('.question_format').change(function(){ diff --git a/lib/assets/javascripts/bootstrap_listeners.js b/lib/assets/javascripts/bootstrap_listeners.js index 409805d284..269b1da176 100644 --- a/lib/assets/javascripts/bootstrap_listeners.js +++ b/lib/assets/javascripts/bootstrap_listeners.js @@ -15,9 +15,10 @@ $(document).ready(function(){ $(this).parent().find('.minus-laranja').removeClass('minus-laranja').addClass('plus-laranja'); }); // Initialises all tooltips present on a page - $('.has-tooltip').tooltip({ - placement: "right", - trigger: "focus" - }); + $('.has-tooltip').tooltip({ placement: "right", trigger: "focus" }); $(".help").popover(); + //Initiliases all popovers on a page + $('[data-toggle="popover"]').on('click', function(e){ + e.preventDefault(); + }).popover(); }); \ No newline at end of file From 7cfc8f52ddf591fbb3eee2bda812addd4da7de49 Mon Sep 17 00:00:00 2001 From: xsrust Date: Mon, 26 Jun 2017 11:18:43 +0100 Subject: [PATCH 02/27] added bullet point options to tinymce editor. circle and square export correctly. Addresses #464 --- config/tinymce.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/tinymce.yml b/config/tinymce.yml index 8002f2e067..3cece68d69 100644 --- a/config/tinymce.yml +++ b/config/tinymce.yml @@ -7,6 +7,8 @@ plugins: - autoresize - link - paste + - advlist +advlist_bullet_styles: "circle,square" #only disc bullets display on htmltoword target_list: false autoresize_min_height: 130 autoresize_bottom_margin: 10 From 78f4db7379c417fd2727a58ecba67c7d34f9c69c Mon Sep 17 00:00:00 2001 From: xsrust Date: Mon, 26 Jun 2017 13:39:32 +0100 Subject: [PATCH 03/27] fixed question update logic, addresses #460 --- app/controllers/questions_controller.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/controllers/questions_controller.rb b/app/controllers/questions_controller.rb index dbc56132a9..16ecdcac7f 100644 --- a/app/controllers/questions_controller.rb +++ b/app/controllers/questions_controller.rb @@ -56,10 +56,21 @@ def admin_update if guidance.blank? guidance = @question.annotations.build guidance.type = :guidance + guidance.org_id = current_user.org_id end guidance.text = params["question-guidance-#{params[:id]}"] guidance.save end + example_answer = @question.get_example_answer(current_user.org_id) + if params["question"]["annotations_attributes"]["0"]["id"].present? + if example_answer.blank? + example_answer = @question.annotations.build + example_answer.type = :example_answer + example_answer.org_id = current_user.org_id + end + example_answer.text = params["question"]["annotations_attributes"]["0"]["text"] + example_answer.save + end if @question.question_format.textfield? @question.default_value = params["question-default-value-textfield"] elsif @question.question_format.textarea? From f0d3d7aaf73647be67a1783a7a6cc1e88c1c744f Mon Sep 17 00:00:00 2001 From: xsrust Date: Mon, 26 Jun 2017 13:48:42 +0100 Subject: [PATCH 04/27] adds disk option for bullet display --- config/tinymce.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/tinymce.yml b/config/tinymce.yml index 3cece68d69..ce9069d9f4 100644 --- a/config/tinymce.yml +++ b/config/tinymce.yml @@ -8,7 +8,7 @@ plugins: - link - paste - advlist -advlist_bullet_styles: "circle,square" #only disc bullets display on htmltoword +advlist_bullet_styles: "circle,disc,square" #only disc bullets display on htmltoword target_list: false autoresize_min_height: 130 autoresize_bottom_margin: 10 From bb959fafd3b9063a94368b67262525d910ee7406 Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 10:43:01 +0100 Subject: [PATCH 05/27] added spaces between questions, better mimics pdf format --- app/views/plans/export.docx.erb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/views/plans/export.docx.erb b/app/views/plans/export.docx.erb index be267a8678..69602bb02f 100644 --- a/app/views/plans/export.docx.erb +++ b/app/views/plans/export.docx.erb @@ -21,9 +21,7 @@ %>

<%= section.title %>

<% questions.each do |question| %> -

<%= raw question.text %> -

<% answer = @plan.answer(question.id, false) %> <% if answer.nil? %>

<%= _('Question not answered') %>

@@ -42,6 +40,7 @@ <%= raw answer.text %> <% end %> <% end%> +

<% end %> <% end %> <% end %> From 45b559c80580b5cf97d8b0e8312d7da637569683 Mon Sep 17 00:00:00 2001 From: Jose Lloret Date: Tue, 27 Jun 2017 10:48:59 +0100 Subject: [PATCH 06/27] Redirect to the referer URL when changing language. DMPRoadmap/roadmap#456 --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a1ff6ad7b8..2d3dcb0e1a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -33,7 +33,7 @@ def set_locale_session if FastGettext.default_available_locales.include?(params[:locale]) session[:locale] = params[:locale] end - redirect_to root_path + redirect_to(request.referer || root_path) #redirects the user to URL where she/he was when the request to this resource was made or root if none is encountered end def store_location From 8375176ca5acfe54a295f09b6c3862154983a39b Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 11:20:59 +0100 Subject: [PATCH 07/27] accounting for tests not always having annotations (whereas views do) --- app/controllers/questions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/questions_controller.rb b/app/controllers/questions_controller.rb index 16ecdcac7f..f3250bbd3b 100644 --- a/app/controllers/questions_controller.rb +++ b/app/controllers/questions_controller.rb @@ -62,7 +62,7 @@ def admin_update guidance.save end example_answer = @question.get_example_answer(current_user.org_id) - if params["question"]["annotations_attributes"]["0"]["id"].present? + if params["question"]["annotations_attributes"].present? && params["question"]["annotations_attributes"]["0"]["id"].present? if example_answer.blank? example_answer = @question.annotations.build example_answer.type = :example_answer From e022460f03ef76a4557864f88bf5f27e0318d624 Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 11:21:43 +0100 Subject: [PATCH 08/27] allows customizer's sections to appear before the template creators --- app/views/sections/_add_section.html.erb | 3 ++- app/views/sections/_edit_section.html.erb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/sections/_add_section.html.erb b/app/views/sections/_add_section.html.erb index b8a2077020..93564b83be 100644 --- a/app/views/sections/_add_section.html.erb +++ b/app/views/sections/_add_section.html.erb @@ -25,7 +25,8 @@ <%= _('Order of display') %> - <%= f.number_field :number, in: 1..15, class: "number_field has-tooltip", "data-toggle" => "tooltip", title: _('This allows you to order sections.') %> + <% range = @phase.template.customization_of.present? ? 0..15 : 1..15 %> + <%= f.number_field :number, in: range, class: "number_field has-tooltip", "data-toggle" => "tooltip", title: _('This allows you to order sections.') %> diff --git a/app/views/sections/_edit_section.html.erb b/app/views/sections/_edit_section.html.erb index 9f12aeb1d2..4bc7cfce47 100644 --- a/app/views/sections/_edit_section.html.erb +++ b/app/views/sections/_edit_section.html.erb @@ -39,7 +39,8 @@ - + <% range = @phase.template.customization_of.present? ? 0..15 : 1..15 %> + From 3e202701d235177d4d303343b09af779ac34bf7d Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 12:36:12 +0100 Subject: [PATCH 09/27] allows guidances to save attributes other than text --- app/controllers/guidances_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/guidances_controller.rb b/app/controllers/guidances_controller.rb index 2356ef01e8..8a3d88bde7 100644 --- a/app/controllers/guidances_controller.rb +++ b/app/controllers/guidances_controller.rb @@ -69,8 +69,7 @@ def admin_update @guidance = Guidance.find(params[:id]) authorize @guidance @guidance.text = params["guidance-text"] - - if @guidance.save(guidance_params) + if @guidance.update_attributes(guidance_params) redirect_to admin_show_guidance_path(params[:guidance]), notice: _('Guidance was successfully updated.') else flash[:notice] = failed_update_error(@guidance, _('guidance')) From 050f1db292f332414a04313c8a6b15363bbfceac Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 12:53:14 +0100 Subject: [PATCH 10/27] removed auto-publishing of groups by publishing guidance --- app/controllers/guidances_controller.rb | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/controllers/guidances_controller.rb b/app/controllers/guidances_controller.rb index 8a3d88bde7..9cfcfc5727 100644 --- a/app/controllers/guidances_controller.rb +++ b/app/controllers/guidances_controller.rb @@ -39,19 +39,11 @@ def admin_create @guidance = Guidance.new(guidance_params) authorize @guidance @guidance.text = params["guidance-text"] - + @guidance.themes = [] if !guidance_params[:theme_ids].nil? guidance_params[:theme_ids].map{|t| @guidance.themes << Theme.find(t.to_i) unless t.empty? } end - - if @guidance.published == true then - @gg = GuidanceGroup.find(@guidance.guidance_group_id) - if @gg.published == false || @gg.published.nil? then - @gg.published = true - @gg.save - end - end if @guidance.save redirect_to admin_show_guidance_path(@guidance), notice: _('Guidance was successfully created.') From fdf3c54fc4ee6b847220e537c82aaeb0a4a7fd3c Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 13:04:20 +0100 Subject: [PATCH 11/27] only published guidance groups display for plan details --- app/controllers/plans_controller.rb | 152 ++++++---------------------- app/models/plan.rb | 6 +- 2 files changed, 35 insertions(+), 123 deletions(-) diff --git a/app/controllers/plans_controller.rb b/app/controllers/plans_controller.rb index f9673264bd..fc968ff83c 100644 --- a/app/controllers/plans_controller.rb +++ b/app/controllers/plans_controller.rb @@ -16,14 +16,14 @@ def index def new @plan = Plan.new authorize @plan - + # Get all of the available funders and non-funder orgs @funders = Org.funders.joins(:templates).where(templates: {published: true}).uniq.sort{|x,y| x.name <=> y.name } @orgs = (Org.institutions + Org.managing_orgs).flatten.uniq.sort{|x,y| x.name <=> y.name } - + # Get the current user's org @default_org = current_user.org if @orgs.include?(current_user.org) - + respond_to :html end @@ -32,48 +32,48 @@ def new def create @plan = Plan.new authorize @plan - + @plan.principal_investigator = current_user.surname.blank? ? nil : "#{current_user.firstname} #{current_user.surname}" @plan.data_contact = current_user.email @plan.funder_name = plan_params[:funder_name] - + # If a template hasn't been identified look for the available templates if plan_params[:template_id].blank? template_options(plan_params[:org_id], plan_params[:funder_id]) # Return the 'Select a template' section respond_to do |format| - format.js {} + format.js {} end - + # Otherwise create the plan else @plan.template = Template.find(plan_params[:template_id]) - + if plan_params[:title].blank? - @plan.title = current_user.firstname.blank? ? _('My Plan') + '(' + @plan.template.title + ')' : + @plan.title = current_user.firstname.blank? ? _('My Plan') + '(' + @plan.template.title + ')' : current_user.firstname + "'s" + _(" Plan") else @plan.title = plan_params[:title] end - + if @plan.save @plan.assign_creator(current_user) - + # pre-select org's guidance - ggs = GuidanceGroup.where(org_id: plan_params[:org_id], - optional_subset: false, + ggs = GuidanceGroup.where(org_id: plan_params[:org_id], + optional_subset: false, published: true) - if !ggs.blank? then @plan.guidance_groups << ggs end - + if !ggs.blank? then @plan.guidance_groups << ggs end + default = Template.find_by(is_default: true) - + msg = "#{_('Plan was successfully created.')} " - + if !default.nil? && default == @plan.template # We used the generic/default template msg += _('This plan is based on the default template.') - + elsif !@plan.template.customization_of.nil? # We used a customized version of the the funder template msg += "#{_('This plan is based on the')} #{plan_params[:funder_name]} #{_('template with customisations by the')} #{plan_params[:org_name]}" @@ -82,9 +82,9 @@ def create # We used the specified org's or funder's template msg += "#{_('This plan is based on the')} #{@plan.template.org.name} template." end - + flash[:notice] = msg - + respond_to do |format| format.js { render js: "window.location='#{plan_url(@plan)}?editing=true'" } end @@ -93,7 +93,7 @@ def create # Something went wrong so report the issue to the user flash[:notice] = failed_create_error(@plan, 'Plan') respond_to do |format| - format.js {} + format.js {} end end end @@ -115,8 +115,8 @@ def show @important_ggs = [] @important_ggs << [current_user.org, @all_ggs_grouped_by_org.delete(current_user.org)] @all_ggs_grouped_by_org.each do |org, ggs| - if org.organisation? - @important_ggs << [org,ggs] + if org.organisation? + @important_ggs << [org,ggs] @all_ggs_grouped_by_org.delete(org) end end @@ -226,96 +226,6 @@ def status end end - -# TODO: Remove these endpoints now that we're no longer using them -=begin - def section_answers - @plan = Plan.find(params[:id]) - authorize @plan - respond_to do |format| - format.json { render json: @plan.section_answers(params[:section_id]) } - end - end - - def locked - @plan = Plan.find(params[:id]) - authorize @plan - if !@plan.nil? && user_signed_in? && @plan.readable_by(current_user.id) then - respond_to do |format| - format.json { render json: @plan.locked(params[:section_id],current_user.id) } - end - else - render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false) - end - end - - def delete_recent_locks - @plan = Plan.find(params[:id]) - authorize @plan - if user_signed_in? && @plan.editable_by(current_user.id) then - respond_to do |format| - if @plan.delete_recent_locks(current_user.id) - format.html { render action: "edit" } - else - format.html { render action: "edit" } - end - end - else - render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false) - end - end - - def unlock_all_sections - @plan = Plan.find(params[:id]) - authorize @plan - if user_signed_in? && @plan.editable_by(current_user.id) then - respond_to do |format| - if @plan.unlock_all_sections(current_user.id) - format.html { render action: "edit" } - else - format.html { render action: "edit" } - end - end - else - render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false) - end - end - - def lock_section - @plan = Plan.find(params[:id]) - authorize @plan - if user_signed_in? && @plan.editable_by(current_user.id) then - respond_to do |format| - if @plan.lock_section(params[:section_id], current_user.id) - format.html { render action: "edit" } - else - format.html { render action: "edit" } - format.json { render json: @plan.errors, status: :unprocessable_entity } - end - end - else - render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false) - end - end - - def unlock_section - @plan = Plan.find(params[:id]) - authorize @plan - if user_signed_in? && @plan.editable_by(current_user.id) then - respond_to do |format| - if @plan.unlock_section(params[:section_id], current_user.id) - format.html { render action: "edit" } - - else - format.html { render action: "edit" } - end - end - else - render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false) - end - end -=end - def answer @plan = Plan.find(params[:id]) authorize @plan @@ -388,7 +298,7 @@ def export private - def plan_params + def plan_params params.require(:plan).permit(:org_id, :org_name, :funder_id, :funder_name, :template_id, :title) end @@ -459,7 +369,7 @@ def rollup(plan, src_plan_key, super_id, obj_plan_key) # -------------------------------------------------------------------------- def template_options(org_id, funder_id) @templates = [] - + if !org_id.blank? || !funder_id.blank? if funder_id.blank? # Load the org's template(s) @@ -468,15 +378,15 @@ def template_options(org_id, funder_id) @templates = Template.valid.where(published: true, org: org, customization_of: nil).to_a @msg = _("We found multiple DMP templates corresponding to the research organisation.") if @templates.count > 1 end - + else funder = Org.find(funder_id) # Load the funder's template(s) @templates = Template.valid.where(published: true, org: funder).to_a - + unless org_id.blank? org = Org.find(org_id) - + # Swap out any organisational cusotmizations of a funder template @templates.each do |tmplt| customization = Template.valid.find_by(published: true, org: org, customization_of: tmplt.dmptemplate_id) @@ -486,17 +396,17 @@ def template_options(org_id, funder_id) end end end - + msg = _("We found multiple DMP templates corresponding to the funder.") if @templates.count > 1 end end - + # If no templates were available use the generic templates if @templates.empty? @msg = _("Using the generic Data Management Plan") @templates << Template.find_by(is_default: true) end - + @templates = @templates.sort{|x,y| x.title <=> y.title } if @templates.count > 1 end diff --git a/app/models/plan.rb b/app/models/plan.rb index f3974d2403..1eee8a68d4 100644 --- a/app/models/plan.rb +++ b/app/models/plan.rb @@ -139,7 +139,8 @@ def set_possible_guidance_groups section.questions.each do |question| question.themes.each do |theme| theme.guidances.each do |guidance| - ggroups << guidance.guidance_group + ggroups << guidance.guidance_group if guidance.guidance_group.published + # only show published guidance groups end end end @@ -163,7 +164,8 @@ def get_guidance_group_options section.questions.each do |question| question.themes.each do |theme| theme.guidances.each do |guidance| - ggroups << guidance.guidance_group + ggroups << guidance.guidance_group if guidance.guidance_group.published + # only show published guidance groups end end end From 0475dd2b777fdb8e4213dc8daba2b33c349f6e5e Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 13:07:25 +0100 Subject: [PATCH 12/27] updated translations from plan_details page --- app/views/plans/_plan_details.html.erb | 4 ++-- config/locale/app.pot | 28 +++++--------------------- config/locale/de/app.po | 27 ++++--------------------- config/locale/domain.pot | 3 +++ config/locale/en_GB/app.po | 25 ++++------------------- config/locale/en_US/app.po | 25 ++++------------------- config/locale/es/app.po | 25 ++++------------------- config/locale/fr/app.po | 25 ++++------------------- 8 files changed, 30 insertions(+), 132 deletions(-) create mode 100644 config/locale/domain.pot diff --git a/app/views/plans/_plan_details.html.erb b/app/views/plans/_plan_details.html.erb index f97121482f..b23b647aea 100644 --- a/app/views/plans/_plan_details.html.erb +++ b/app/views/plans/_plan_details.html.erb @@ -153,10 +153,10 @@ <%= form_tag( update_guidance_choices_plan_path(@plan), method: :put) do %>
-

Guidance Choices

+

<%=_('Guidance Choices')%>

<%= _('Order of display') %><%= s.number_field :number, in: 1..15, class: "number_field has-tooltip", 'data-toggle' => "tooltip", 'title' => _('This allows you to order sections.') %><%= s.number_field :number, in: range, class: "number_field has-tooltip", 'data-toggle' => "tooltip", 'title' => _('This allows you to order sections.') %>
<%= _('Description') %>
- <% @important_ggs.each do |org, groups| %> + <% @important_ggs.each do |org, groups| %>
<% if groups && groups.size == 1 %> diff --git a/config/locale/app.pot b/config/locale/app.pot index 30adcde7a2..1f6401d697 100644 --- a/config/locale/app.pot +++ b/config/locale/app.pot @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: app 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-15 12:42+0000\n" -"PO-Revision-Date: 2017-06-15 12:42+0000\n" +"POT-Creation-Date: 2017-06-27 12:05+0000\n" +"PO-Revision-Date: 2017-06-27 12:05+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -42,9 +42,6 @@ msgstr "" msgid " by" msgstr "" -msgid " by " -msgstr "" - msgid " has been removed by " msgstr "" @@ -186,9 +183,6 @@ msgstr "" msgid "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" msgstr "" -msgid "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" -msgstr "" - msgid "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" msgstr "" @@ -519,9 +513,6 @@ msgstr "" msgid "Edit phase" msgstr "" -msgid "Edit phase details" -msgstr "" - msgid "Edit plan details" msgstr "" @@ -636,6 +627,9 @@ msgstr "" msgid "Guidance" msgstr "" +msgid "Guidance Choices" +msgstr "" + msgid "Guidance choices saved." msgstr "" @@ -1314,9 +1308,6 @@ msgstr "" msgid "This plan is based on:" msgstr "" -msgid "This section is locked for editing by " -msgstr "" - msgid "Title" msgstr "" @@ -1347,12 +1338,6 @@ msgstr "" msgid "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" msgstr "" -msgid "Unlink account" -msgstr "" - -msgid "Unlink institutional credentials alert" -msgstr "" - msgid "Unlock my account" msgstr "" @@ -1503,9 +1488,6 @@ msgstr "" msgid "You have un-published changes" msgstr "" -msgid "You have unsaved answers in the following sections:" -msgstr "" - msgid "You must accept the terms and conditions to register." msgstr "" diff --git a/config/locale/de/app.po b/config/locale/de/app.po index b28632bd71..5e222907c0 100644 --- a/config/locale/de/app.po +++ b/config/locale/de/app.po @@ -43,9 +43,6 @@ msgstr "" msgid " by" msgstr " von " -msgid " by " -msgstr " von " - #, fuzzy msgid " has been removed by " msgstr " von " @@ -199,9 +196,6 @@ msgstr "

Um eine Vorlage anzulegen beginnen sie mit einem Titel und einer Besc msgid "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" msgstr "

Nach der Anmeldung in DMPonline werden sie zur 'Meine Pläne'-Seite weitergeleitet. Dies ist der Startpunkt, um ihre Pläne zu Edieren, zu Teilen oder zu löschen. Sie sehen außerdem, welche Pläne sie mit anderen geteilt haben.

Pläne erstellen

Um einen Plan zu erstellen, klicken sie auf den 'Plan erstellen'-Knopf auf der 'Meine Pläne'-Seite, oder im Hauptmenü. Wählen sie die passenden Optionen in den Ausklappmenüs und Auswahlboxen aus, um zu bestimmen, welche Fragen und Hilfestellungen ihnen angezeigt werden sollen. Bestätigen sie ihre Auswahl durch das Klicken von 'Ja, Plan erstellen'.

Pläne schreiben

Die Reiter der Benutzerschnittstelle erlauben ihnen durch die verschiedenen Bereiche zu navigieren wenn sie ihren Plan bearbeiten.

  • - 'Plandetails' enthält die grundliegenden administrativen Details, listet die Fragen und Hilfestellungen, auf denen ihr Plan basiert und gibt eine Ãœbersicht über die zu beantwortenden Fragen
  • - die folgenden Reiter repräsentieren die zu beantwortenden Fragen. Sollten ihr Förderer oder ihre Institution verschiedene Fragen zu verschiedenen Stufen des Plans beantwortet wissen möchten, können hier mehrere Reiter auftauchen
  • - 'Teilen' enthält Details zum Einladen von anderen Personen zum Lesen oder zur aktiven Mitabeit am Plan
  • - 'Export' enthält Möglichkeiten zum Export des Plans in verschiedene Dateiformate. Dies kann nützlich sein, wenn sie ihren Plan im Rahmen eines Antrags einreichen müssen

In den Fragereitern sind die verschiedenen Abschnitte ihres Plans dargestellt, die sich durch anklicken zur Bearbeitung auswählen lassen. Die Antworttexte können mit den Textbearbeitungsknöpfen formatiert werden.

Hilfestellungen werden rechts von den Fragen durch klicken des '+'-Symbols angezeigt.

Bitte vergessen sie nicht ihre Antworten zu speichern, bevor sie die Seite verlassen.

Pläne teilen

Geben sie die E-Mail-Adresse der Person an, die ihren Plan lesen oder bearbeiten können sollen. Mithilfe des Ausklappmenüs können sie die Befugnisse, die die Person im Bezug auf den Plan haben soll, auswählen. Klicken sie abschließend auf 'Mitarbeitende(n) hinzufügen'.

Pläne exportieren

Wählen sie das Dateiformat aus, in das sie ihren Plan exportieren möchten und klicken sie 'Export'. Unterhalb des Dialogs können sie durch klicken auf das '+'-Symbol detaillierte Einstellungen zum Export vornehmen.

" -msgid "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" -msgstr "

You are about to unlink DMP Builder of your institutional credentials, would you like to continue?

" - #, fuzzy msgid "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" msgstr "

Sie können anderen Zugriff zu Ihren Plan gewähren. Es gibt hierbei drei Abstufungen des Zugriffs.

  • Benutzer mit 'nur lesen'-Rechten können den Plan nur lesen.
  • Bearbeiter können zum Plan beitragen.
  • Miteigentümer können zum Plan beitragen und zusätzlich die Plandetails und die Zugriffsrechte bearbeiten.

Neue Mitarbeitende können durch die Angabe ihrer E-Mail-Adresse und das Wählen des Zugriffsrechts hinzugefugt werden. Bestätigen Sie Ihre Angaben mit 'Mitarbeitende(n) hinzufügen'

Eingeladene Mitarbeitende erhalten eine E-Mail, die sie darüber informiert, dass sie Zugriff zu Ihrem Plan erhalten haben; sofern Mitarbeitende noch nicht bei DMPonline registriert sind, erhalten sie eine Einladung zur Registrierung. Wenn die Zugriffsrechte geändert werden wird ebenfalls eine Benachrichtigungs-E-Mail versand.

" @@ -556,9 +550,6 @@ msgstr "Anpassungen bearbeiten" msgid "Edit phase" msgstr "Phase bearbeiten" -msgid "Edit phase details" -msgstr "Details der Phase bearbeiten" - msgid "Edit plan details" msgstr "Plandetails bearbeiten" @@ -679,6 +670,10 @@ msgstr "Das Förderkennzeichen als Referenz, sofern sinnvoll (Nur für Datenmana msgid "Guidance" msgstr "Hilfestellung" +#, fuzzy +msgid "Guidance Choices" +msgstr "Hilfestellung" + #, fuzzy msgid "Guidance choices saved." msgstr "Hilfestellung" @@ -1385,9 +1380,6 @@ msgstr "templates" msgid "This plan is based on:" msgstr "Dieser Plan basiert auf:" -msgid "This section is locked for editing by " -msgstr "Dieser Abschnitt ist gespert wegen Bearbeitung durch " - msgid "Title" msgstr "Titel" @@ -1419,12 +1411,6 @@ msgstr "Unbekannte Formatierungseinstellung" msgid "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" msgstr "Unbekannter Rand. Kann nur 'oben', 'unten', 'links' oder 'rechts' sein" -msgid "Unlink account" -msgstr "Trenne Zugang" - -msgid "Unlink institutional credentials alert" -msgstr "Unlink institutional credentials alert" - msgid "Unlock my account" msgstr "Unlock my account" @@ -1590,11 +1576,6 @@ msgstr "Organisation" msgid "You have un-published changes" msgstr "" -#, fuzzy -msgid "You have unsaved answers in the following sections:" -msgstr "" -"You have unsaved answers in the following sections:\n" - msgid "You must accept the terms and conditions to register." msgstr "" diff --git a/config/locale/domain.pot b/config/locale/domain.pot new file mode 100644 index 0000000000..3069d0f6af --- /dev/null +++ b/config/locale/domain.pot @@ -0,0 +1,3 @@ +# Some descriptive title +msgid "" +msgstr "" \ No newline at end of file diff --git a/config/locale/en_GB/app.po b/config/locale/en_GB/app.po index 0d6a6e3ec5..50e9e8e88d 100644 --- a/config/locale/en_GB/app.po +++ b/config/locale/en_GB/app.po @@ -44,9 +44,6 @@ msgstr " on " msgid " by" msgstr " by" -msgid " by " -msgstr " by " - msgid " has been removed by " msgstr " has been removed by " @@ -194,9 +191,6 @@ msgstr "

To create a new template, first enter a title and description. Once y msgid "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" msgstr "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" -msgid "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" -msgstr "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" - msgid "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" msgstr "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" @@ -540,9 +534,6 @@ msgstr "Edit customisation" msgid "Edit phase" msgstr "Edit phase" -msgid "Edit phase details" -msgstr "Edit phase details" - msgid "Edit plan details" msgstr "Edit plan details" @@ -661,6 +652,10 @@ msgstr "Grant reference number if applicable [POST-AWARD DMPs ONLY]" msgid "Guidance" msgstr "Guidance" +#, fuzzy +msgid "Guidance Choices" +msgstr "Guidance" + #, fuzzy msgid "Guidance choices saved." msgstr "Guidance" @@ -1363,9 +1358,6 @@ msgstr "template" msgid "This plan is based on:" msgstr "This plan is based on:" -msgid "This section is locked for editing by " -msgstr "This section is locked for editing by " - msgid "Title" msgstr "Title" @@ -1396,12 +1388,6 @@ msgstr "Unknown formatting setting" msgid "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" msgstr "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" -msgid "Unlink account" -msgstr "Unlink account" - -msgid "Unlink institutional credentials alert" -msgstr "Unlink institutional credentials alert" - msgid "Unlock my account" msgstr "Unlock my account" @@ -1561,9 +1547,6 @@ msgstr "" msgid "You have un-published changes" msgstr "" -msgid "You have unsaved answers in the following sections:" -msgstr "" - msgid "You must accept the terms and conditions to register." msgstr "You must accept the terms and conditions to register." diff --git a/config/locale/en_US/app.po b/config/locale/en_US/app.po index d1e5e4eaef..0f7a34628a 100644 --- a/config/locale/en_US/app.po +++ b/config/locale/en_US/app.po @@ -44,9 +44,6 @@ msgstr " on " msgid " by" msgstr " by" -msgid " by " -msgstr " by " - msgid " has been removed by " msgstr " has been removed by " @@ -194,9 +191,6 @@ msgstr "

To create a new template, first enter a title and description. Once y msgid "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" msgstr "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" -msgid "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" -msgstr "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" - msgid "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" msgstr "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" @@ -540,9 +534,6 @@ msgstr "Edit customisation" msgid "Edit phase" msgstr "Edit phase" -msgid "Edit phase details" -msgstr "Edit phase details" - msgid "Edit plan details" msgstr "Edit plan details" @@ -661,6 +652,10 @@ msgstr "Grant reference number if applicable [POST-AWARD DMPs ONLY]" msgid "Guidance" msgstr "Guidance" +#, fuzzy +msgid "Guidance Choices" +msgstr "Guidance" + #, fuzzy msgid "Guidance choices saved." msgstr "Guidance" @@ -1363,9 +1358,6 @@ msgstr "template" msgid "This plan is based on:" msgstr "This plan is based on:" -msgid "This section is locked for editing by " -msgstr "This section is locked for editing by " - msgid "Title" msgstr "Title" @@ -1396,12 +1388,6 @@ msgstr "Unknown formatting setting" msgid "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" msgstr "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" -msgid "Unlink account" -msgstr "Unlink account" - -msgid "Unlink institutional credentials alert" -msgstr "Unlink institutional credentials alert" - msgid "Unlock my account" msgstr "Unlock my account" @@ -1561,9 +1547,6 @@ msgstr "You have been granted permission by your organization to use our API. Yo msgid "You have un-published changes" msgstr "" -msgid "You have unsaved answers in the following sections:" -msgstr "" - msgid "You must accept the terms and conditions to register." msgstr "You must accept the terms and conditions to register." diff --git a/config/locale/es/app.po b/config/locale/es/app.po index c921f5cf96..ffda90da52 100644 --- a/config/locale/es/app.po +++ b/config/locale/es/app.po @@ -43,9 +43,6 @@ msgstr "" msgid " by" msgstr " por " -msgid " by " -msgstr " por " - #, fuzzy msgid " has been removed by " msgstr " por " @@ -196,9 +193,6 @@ msgstr "

Para crear una plantilla nueva, en primer lugar introduzca un título msgid "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" msgstr "" -msgid "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" -msgstr "

Va a desvincular DMPonline de las credenciales de su institución, ¿Quiere continuar?

" - #, fuzzy msgid "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" msgstr "

Aquí puede dar a otras personas acceso a su plan. Hay tres niveles de permiso.

  • Los usuarios con acceso de \"sólo lectura\" sólo pueden leer el plan.
  • Los Editores pueden contribuir al plan.
  • Los Co-propietarios pueden también contribuir, editar los detalles y controlar el acceso al plan.

Añada cada colaborador individualmente introduciendo su dirección de correo electrónico, seleccionando un nivel de permiso y haciendo clic en \"Añadir colaborador\".

Aquellos a quienes invite recibirán un aviso por correo electrónico indicando que tienen acceso al plan e invitándoles a registrarse en DMPonline si no tienen ya una cuenta. También se envia un aviso si se cambia el nivel de permiso de un usuario.

" @@ -552,9 +546,6 @@ msgstr "Editar la personalización" msgid "Edit phase" msgstr "Editar fase" -msgid "Edit phase details" -msgstr "Editar los detalles de las fase" - msgid "Edit plan details" msgstr "Editar los detalles del plan" @@ -675,6 +666,10 @@ msgstr "Número de referencia de la subvención si es aplicable [SÓLO PGDs YA A msgid "Guidance" msgstr "Guía" +#, fuzzy +msgid "Guidance Choices" +msgstr "Guía" + #, fuzzy msgid "Guidance choices saved." msgstr "Guía" @@ -1378,9 +1373,6 @@ msgstr "templates" msgid "This plan is based on:" msgstr "Este plan está basado en:" -msgid "This section is locked for editing by " -msgstr "Esta sección está bloqueda para su edición por " - msgid "Title" msgstr "Título" @@ -1412,12 +1404,6 @@ msgstr "Valores de formato desconocidos" msgid "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" msgstr "Margen desconocido. Sólo puede ser 'superior', 'inferior', 'izquierdo' or 'derecho'" -msgid "Unlink account" -msgstr "Desvincular cuenta" - -msgid "Unlink institutional credentials alert" -msgstr "Desvincule las alertas relacionadas con las credenciales de su institución" - msgid "Unlock my account" msgstr "" @@ -1583,9 +1569,6 @@ msgstr "Organización" msgid "You have un-published changes" msgstr "" -msgid "You have unsaved answers in the following sections:" -msgstr "" - msgid "You must accept the terms and conditions to register." msgstr "" diff --git a/config/locale/fr/app.po b/config/locale/fr/app.po index 26cbc38f45..d7706f18d3 100644 --- a/config/locale/fr/app.po +++ b/config/locale/fr/app.po @@ -43,9 +43,6 @@ msgstr "" msgid " by" msgstr " par " -msgid " by " -msgstr " par " - #, fuzzy msgid " has been removed by " msgstr " par " @@ -195,9 +192,6 @@ msgstr "

Pour créer un nouveau modèle, commencez par saisir un titre et une msgid "

When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

Create a plan

To create a plan, click the 'Create plan' button from the 'My plans' page or the top menu. Select options from the drop-down menus and tickboxes to determine what questions and guidance you should be presented with. Confirm your selection by clicking 'Yes, create plan'

Write your plan

The tabbed interface allows you to navigate through different functions when editing your plan.

  • - 'Plan details' includes basic administrative details, tells you what sets of questions and guidance your plan is based on and gives you an overview to the questions that you will be asked.
  • - The following tab(s) present the questions to answer. There may be more than one tab if your funder or university asks different sets of questions at different stages e.g. at grant application and post-award.
  • - The 'Share' tab allows you to invite others to read or contribute to your plan.
  • - The 'Export' tab allows you to download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application.

When viewing any of the question tabs, you will see the different sections of your plan displayed. Click into these in turn to answer the questions. You can format your responses using the text editing buttons.

Guidance is displayed in the right-hand panel. Click the '+' symbol to view this.

Remember to 'save' your responses before moving on.

Share plans

Insert the email address of any collaborators you would like to invite to read or edit your plan. Set the level of permissions you would like to grant them via the drop-down options and click to 'Add collaborator'

Export plans

From here you can download your plan in various formats. This may be useful if you need to submit your plan as part of a grant application. Choose what format you would like to view/download your plan in and click to export. When you login to %{application_name} you will be directed to the 'My plans' page. From here you can edit, share, export or delete any of your plans. You will also see plans that have been shared with you by others.

" msgstr "

Lorsque vous vous connectez à l'Assistant PGD, vous serez dirigé vers la page « Mes plans ». À partir de cette page, vous pouvez modifier, partager, exporter ou supprimer l'un ou l'autre de vos plans. Vous verrez également les plans qui ont été partagés avec vous par d'autres personnes.

Créer un plan

Pour créer un plan, cliquez sur le bouton « Créer un plan » à la page « Mes plans » ou dans le menu du haut. Faites des choix dans les listes déroulantes et les cases à cocher afin de déterminer les questions et les directives qui seront affichées. Confirmez votre choix en cliquant sur « Oui, créer un plan ».

Rédiger votre plan

L'interface à onglets vous permet de naviguer dans diverses fonctions lorsque vous mettez au point votre plan.

  • - L'option « renseignements sur le plan » comprend des renseignements administratifs de base, indique la série de questions et de directives sur laquelle votre plan s'appuie et vous donne un aperçu des questions auxquelles vous devez répondre.
  • - Les onglets suivants contiennent les questions auxquelles il faut répondre. Il peut y avoir plus d'un onglet si votre bailleur de fonds ou votre université pose différentes séries de questions à diverses étapes, par exemple lors d'une demande de subvention et après l'octroi d'une subvention.
  • - L'onglet « Partager » vous permet d'inviter d'autres personnes à lire votre plan ou à y collaborer.
  • - L'onglet « Exporter » vous permet de télécharger votre plan en divers formats, ce qui peut être utile si vous devez joindre votre plan à une demande de subvention.

Lorsque vous consultez l'un ou l'autre des onglets de questions, vous verrez les différentes sections de votre plan affichées. Cliquez sur ces onglets à tour de rôle pour répondre aux questions. Vous pouvez choisir le format de vos réponses à l'aide des boutons de mise en forme.

Les directives sont affichées dans la partie de droite. Cliquez sur le symbole « + » pour les consulter.

N'oubliez pas d'enregistrer vos réponses avant de poursuivre.

Partager les plans

Inscrivez l'adresse électronique de tout collaborateur que vous aimeriez inviter à lire ou à modifier votre plan. Choisissez le niveau d'autorisation que vous souhaitez lui accorder dans les options de la liste déroulante et cliquez sur « Ajouter un collaborateur ».

Exporter les plans

En choisissant cette option, vous pouvez télécharger votre plan en divers formats, ce qui peut être utile si vous devez joindre votre plan à une demande de subvention. Choisissez le format dans lequel vous aimeriez voir ou télécharger votre plan et cliquez pour l'exporter. Lorsque vous vous connectez à l'Assistant PGD, vous êtes dirigé vers la page « Mes plans ». À partir de cette page, vous pouvez modifier, partager, exporter ou supprimer l'un ou l'autre de vos plans. Vous voyez également les plans qui ont été partagés avec vous par d'autres personnes.

" -msgid "

You are about to unlink %{application_name} of your institutional credentials, would you like to continue?

" -msgstr "

Vous allez détacher DMPonline de votre authentfiant détablissement, voulez-vous continuer ?

" - #, fuzzy msgid "

You can give other people access to your plan here. There are three permission levels.

  • Users with \"read only\" access can only read the plan.
  • Editors can contribute to the plan.
  • Co-owners can also contribute to the plan, but additionally can edit the plan details and control access to the plan.

Add each collaborator in turn by entering their email address below, choosing a permission level and clicking \"Add collaborator\".

Those you invite will receive an email notification that they have access to this plan, inviting them to register with %{application_name} if they don't already have an account. A notification is also issued when a user's permission level is changed.

" msgstr "

À ce niveau, vous pouvez donner accès à votre plan à dautres personnes. Trois niveaux dautorisation sont possibles.

  • Les utilisateurs avec un droit en \"lecture seule\" ne pourront que consulter le plan.
  • Les utilisateurs avec un droit de mofification pourront y contribuer.
  • Les copropriétaires le peuvent aussi, mais peuvent aussi en modifier les détails et en contrôler laccès.

Ajoutez chacun des collaborateurs en saisissant leurs courriels lun après lautre, en choisissant un niveau dautorisation et en cliquant sur \"Ajouter le collaborateur\".

Ceux qui sont invités recevront un avis par courriel leur indiquant quils ont accès à ce plan, invitant ceux qui nont pas de compte dans DMPonline à senregistrer. Lutilisateur reçoit aussi un avis quand ces droits sont changés.

" @@ -550,9 +544,6 @@ msgstr "Modifier la personnalisation" msgid "Edit phase" msgstr "Modifier la phase" -msgid "Edit phase details" -msgstr "Modifiez les détails de la phase" - msgid "Edit plan details" msgstr "Modifier des détails du plan" @@ -673,6 +664,10 @@ msgstr "N° de réféence de la subvention, le cas échéant (UNIQUEMENT POUR LE msgid "Guidance" msgstr "Conseils" +#, fuzzy +msgid "Guidance Choices" +msgstr "Conseils" + #, fuzzy msgid "Guidance choices saved." msgstr "Conseils" @@ -1375,9 +1370,6 @@ msgstr "templates" msgid "This plan is based on:" msgstr "Ce plan sinspire de :" -msgid "This section is locked for editing by " -msgstr "La modification de cette section a été verrouillée par " - msgid "Title" msgstr "Titre" @@ -1409,12 +1401,6 @@ msgstr "Réglage de mise en forme" msgid "Unknown margin. Can only be 'top', 'bottom', 'left' or 'right'" msgstr "Marge inconnue. Seules marges possibles : Haut, Bas, Gauche et Droite" -msgid "Unlink account" -msgstr "Délier le compte" - -msgid "Unlink institutional credentials alert" -msgstr "Alerte de détachement dauthentifiant détablissement" - msgid "Unlock my account" msgstr "" @@ -1580,9 +1566,6 @@ msgstr "Organisation" msgid "You have un-published changes" msgstr "" -msgid "You have unsaved answers in the following sections:" -msgstr "" - msgid "You must accept the terms and conditions to register." msgstr "" From de3a2f5911c83981fdfaf30b0c9700549233ee22 Mon Sep 17 00:00:00 2001 From: xsrust Date: Tue, 27 Jun 2017 13:17:31 +0100 Subject: [PATCH 13/27] updated guidance selection to ignore unpublished groups/guidances --- app/controllers/phases_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/phases_controller.rb b/app/controllers/phases_controller.rb index 4abba8bb5d..15d45f3822 100644 --- a/app/controllers/phases_controller.rb +++ b/app/controllers/phases_controller.rb @@ -23,14 +23,14 @@ def edit # get the ids of the dynamically selected guidance groups # and keep a map of them so we can extract the names later guidance_groups_ids = @plan.guidance_groups.map{|pgg| pgg.id} - guidance_groups = GuidanceGroup.includes({guidances: :themes}).find(guidance_groups_ids) + guidance_groups = GuidanceGroup.includes({guidances: :themes}).where(published: true, id: guidance_groups_ids) # create a map from theme to array of guidances # where guidance is a hash with the text and the org name theme_guidance = {} guidance_groups.each do |guidance_group| - guidance_group.guidances.each do |guidance| + guidance_group.guidances.where(published: true).each do |guidance| guidance.themes.each do |theme| title = theme.title if !theme_guidance.has_key?(title) From 958c08b889cce91377b1386a006ce232678c6f11 Mon Sep 17 00:00:00 2001 From: Jose Lloret Date: Tue, 27 Jun 2017 15:07:33 +0100 Subject: [PATCH 14/27] added remove_logo as permitted parameter. DMPRoadmap/roadmap#459 --- app/controllers/orgs_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/orgs_controller.rb b/app/controllers/orgs_controller.rb index a8f9835ff5..d0f5a8ec51 100644 --- a/app/controllers/orgs_controller.rb +++ b/app/controllers/orgs_controller.rb @@ -47,6 +47,6 @@ def admin_update private def org_params params.require(:org).permit(:name, :abbreviation, :target_url, :is_other, :banner_text, :language_id, - :region_id, :logo, :contact_email) + :region_id, :logo, :contact_email, :remove_logo) end end From ce7e37785d520f3c97e530751a68655e929699b9 Mon Sep 17 00:00:00 2001 From: Jose Lloret Date: Tue, 27 Jun 2017 16:39:37 +0100 Subject: [PATCH 15/27] Removed clear from select. Re-introduced logic to show/hide other organisation field. Link for non-listed organisation always visible. DMPRoadmap/roadmap#455 --- app/views/shared/_register_form.html.erb | 11 ++++------ .../javascripts/shared/register_form.js | 22 +++++++++++++++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/app/views/shared/_register_form.html.erb b/app/views/shared/_register_form.html.erb index 15465947f8..e8eac9ea1e 100644 --- a/app/views/shared/_register_form.html.erb +++ b/app/views/shared/_register_form.html.erb @@ -27,14 +27,11 @@ <%= f.hidden_field "user_identifiers[#{scheme}]", value: resource.user_identifiers.first.identifier%> <% end %>
  • - <%= collection_select(:user, :org_id, Org.where("parent_id IS NULL").order("sort_name ASC, name ASC"), :id, :name, {include_blank: _('Organisation')}, { :class => 'typeahead org_sign_up' }) %> + <%= collection_select(:user, :org_id, Org.where("parent_id IS NULL").order("sort_name ASC, name ASC"), :id, :name, {include_blank: _('Organisation')}, { :class => 'typeahead org_sign_up', 'data-allow-clear': false }) %>
  • - - <% other_organisations = Array.new %> - <% Org.where("parent_id IS ? AND is_other = ?", nil, true).each do |org| %> - <% other_organisations << org.id %> - <% end %> -
  • diff --git a/lib/assets/javascripts/shared/register_form.js b/lib/assets/javascripts/shared/register_form.js index 0a2be6c635..ccf86429bc 100644 --- a/lib/assets/javascripts/shared/register_form.js +++ b/lib/assets/javascripts/shared/register_form.js @@ -12,12 +12,26 @@ $(document).ready(function() { allowClear: true }); // TODO removing once the new create account functionality is in place + $('#user_org_id').on("change", function(e) { + e.preventDefault(); + var selected_org = $(this).select2("val"); + var other_orgs = $("#other-org-name").attr("data-orgs").split(","); + var index = $.inArray(selected_org, other_orgs); + if (index > -1) { + $("#other-org-name").show(); + $("#user_other_organisation").focus(); + } + else { + $("#other-org-name").hide(); + $("#user_other_organisation").val(""); + } + }); $("#other-org-link > a").click(function(e){ e.preventDefault(); - var other_org = $("#other-organisation-name").attr("data-orgs").split(","); - $("#user_organisation_id").select2("val", other_org); - $("#other-org-link").hide(); - $("#user_organisation_id").change(); + var other_org = $("#other-org-name").attr("data-orgs").split(","); + $("#user_org_id").select2("val", other_org); + $("#user_org_id").change(); + //$("#other-org-link").hide(); }); $("#user_email.text_field.reg-input").change(function(){ if (email_regex.test($(this).val())) { From 2264da4d941386a868076c761b282b68fe15f8e4 Mon Sep 17 00:00:00 2001 From: xsrust Date: Wed, 28 Jun 2017 09:37:18 +0100 Subject: [PATCH 16/27] apperantly htmltoword includes whitespace from erb code, indented questions fixed --- app/views/plans/export.docx.erb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/plans/export.docx.erb b/app/views/plans/export.docx.erb index 69602bb02f..05f5a3ccdf 100644 --- a/app/views/plans/export.docx.erb +++ b/app/views/plans/export.docx.erb @@ -21,7 +21,7 @@ %>

    <%= section.title %>

    <% questions.each do |question| %> - <%= raw question.text %> +

    <%= raw question.text %>

    <% answer = @plan.answer(question.id, false) %> <% if answer.nil? %>

    <%= _('Question not answered') %>

    @@ -34,12 +34,12 @@ <% end %> <% if question.option_comment_display %> - <%= raw answer.text %> +

    <%= raw answer.text %>

    <% end %> <% else %> - <%= raw answer.text %> +

    <%= raw answer.text %>

    <% end %> - <% end%> + <% end%>

    <% end %> <% end %> From 3340fcc6f84954a898963704e26964455790f774 Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Thu, 29 Jun 2017 14:00:14 +0100 Subject: [PATCH 17/27] data_model.png --- doc/data_model.png | Bin 0 -> 52755 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/data_model.png diff --git a/doc/data_model.png b/doc/data_model.png new file mode 100644 index 0000000000000000000000000000000000000000..af93cdb8f98e8ca9b68046b28142690c15dac418 GIT binary patch literal 52755 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 RiQo2>=X8$}w}1cLUjZ?91P%ZI literal 0 HcmV?d00001 From 9767217a949af641dfcb317d813abbd73febc355 Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Fri, 30 Jun 2017 11:29:54 +0100 Subject: [PATCH 18/27] Made super admin dashboards a bit less dangerous by removing destroy --- app/dashboards/exported_plan_dashboard.rb | 3 + app/dashboards/guidance_dashboard.rb | 5 +- app/dashboards/guidance_group_dashboard.rb | 9 ++- app/dashboards/org_dashboard.rb | 4 +- app/dashboards/plan_dashboard.rb | 6 -- app/dashboards/question_dashboard.rb | 3 - app/dashboards/template_dashboard.rb | 8 ++- app/dashboards/theme_dashboard.rb | 3 + config/routes.rb | 68 +++++++++++----------- 9 files changed, 53 insertions(+), 56 deletions(-) diff --git a/app/dashboards/exported_plan_dashboard.rb b/app/dashboards/exported_plan_dashboard.rb index 47b352e3a7..ec618cf498 100644 --- a/app/dashboards/exported_plan_dashboard.rb +++ b/app/dashboards/exported_plan_dashboard.rb @@ -15,6 +15,7 @@ class ExportedPlanDashboard < Administrate::BaseDashboard format: Field::String, created_at: Field::DateTime, updated_at: Field::DateTime, + phase_id: Field::Number, }.freeze # COLLECTION_ATTRIBUTES @@ -39,6 +40,7 @@ class ExportedPlanDashboard < Administrate::BaseDashboard :format, :created_at, :updated_at, + :phase_id, ].freeze # FORM_ATTRIBUTES @@ -49,6 +51,7 @@ class ExportedPlanDashboard < Administrate::BaseDashboard :user, :setting_objects, :format, + :phase_id, ].freeze # Overwrite this method to customize how exported plans are displayed diff --git a/app/dashboards/guidance_dashboard.rb b/app/dashboards/guidance_dashboard.rb index 8e6427ff9c..c76c41b279 100644 --- a/app/dashboards/guidance_dashboard.rb +++ b/app/dashboards/guidance_dashboard.rb @@ -10,7 +10,6 @@ class GuidanceDashboard < Administrate::BaseDashboard ATTRIBUTE_TYPES = { guidance_group: Field::BelongsTo, themes: Field::HasMany, - guidance_groups: Field::HasMany, id: Field::Number, text: Field::Text, created_at: Field::DateTime, @@ -27,8 +26,8 @@ class GuidanceDashboard < Administrate::BaseDashboard COLLECTION_ATTRIBUTES = [ :guidance_group, :themes, - :guidance_groups, :id, + :text, ].freeze # SHOW_PAGE_ATTRIBUTES @@ -36,7 +35,6 @@ class GuidanceDashboard < Administrate::BaseDashboard SHOW_PAGE_ATTRIBUTES = [ :guidance_group, :themes, - :guidance_groups, :id, :text, :created_at, @@ -51,7 +49,6 @@ class GuidanceDashboard < Administrate::BaseDashboard FORM_ATTRIBUTES = [ :guidance_group, :themes, - :guidance_groups, :text, :question_id, :published, diff --git a/app/dashboards/guidance_group_dashboard.rb b/app/dashboards/guidance_group_dashboard.rb index a8a83cc463..1916c3b48e 100644 --- a/app/dashboards/guidance_group_dashboard.rb +++ b/app/dashboards/guidance_group_dashboard.rb @@ -10,6 +10,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard ATTRIBUTE_TYPES = { org: Field::BelongsTo, guidances: Field::HasMany, + plans: Field::HasMany, id: Field::Number, name: Field::String, created_at: Field::DateTime, @@ -26,8 +27,8 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard COLLECTION_ATTRIBUTES = [ :org, :guidances, + :plans, :id, - :name, ].freeze # SHOW_PAGE_ATTRIBUTES @@ -35,6 +36,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard SHOW_PAGE_ATTRIBUTES = [ :org, :guidances, + :plans, :id, :name, :created_at, @@ -49,6 +51,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard FORM_ATTRIBUTES = [ :org, :guidances, + :plans, :name, :optional_subset, :published, @@ -60,8 +63,4 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard # def display_resource(guidance_group) # "GuidanceGroup ##{guidance_group.id}" # end - - def display_resource(guidance_group) - guidance_group.name - end end diff --git a/app/dashboards/org_dashboard.rb b/app/dashboards/org_dashboard.rb index c00db7ba04..72f8962007 100644 --- a/app/dashboards/org_dashboard.rb +++ b/app/dashboards/org_dashboard.rb @@ -43,7 +43,7 @@ class OrgDashboard < Administrate::BaseDashboard :abbreviation, :language, :guidance_groups, - :templates, +# :templates, :contact_email, :org_type, ].freeze @@ -55,7 +55,7 @@ class OrgDashboard < Administrate::BaseDashboard :abbreviation, :language, :guidance_groups, - :templates, +# :templates, :contact_email, :org_type, :users, diff --git a/app/dashboards/plan_dashboard.rb b/app/dashboards/plan_dashboard.rb index cb3b72447e..e22c30f416 100644 --- a/app/dashboards/plan_dashboard.rb +++ b/app/dashboards/plan_dashboard.rb @@ -17,12 +17,10 @@ class PlanDashboard < Administrate::BaseDashboard notes: Field::HasMany, roles: Field::HasMany, users: Field::HasMany, - plans_guidance_groups: Field::HasMany, guidance_groups: Field::HasMany, exported_plans: Field::HasMany, setting_objects: Field::HasMany.with_options(class_name: "Settings::Template"), id: Field::Number, - project_id: Field::Number, title: Field::String, created_at: Field::DateTime, updated_at: Field::DateTime, @@ -61,12 +59,10 @@ class PlanDashboard < Administrate::BaseDashboard :notes, :roles, :users, - :plans_guidance_groups, :guidance_groups, :exported_plans, :setting_objects, :id, - :project_id, :title, :created_at, :updated_at, @@ -94,11 +90,9 @@ class PlanDashboard < Administrate::BaseDashboard :notes, :roles, :users, - :plans_guidance_groups, :guidance_groups, :exported_plans, :setting_objects, - :project_id, :title, :slug, :grant_number, diff --git a/app/dashboards/question_dashboard.rb b/app/dashboards/question_dashboard.rb index af3d8bb170..cda2c4cf1d 100644 --- a/app/dashboards/question_dashboard.rb +++ b/app/dashboards/question_dashboard.rb @@ -17,7 +17,6 @@ class QuestionDashboard < Administrate::BaseDashboard id: Field::Number, text: Field::Text, default_value: Field::Text, - guidance: Field::Text, number: Field::Number, created_at: Field::DateTime, updated_at: Field::DateTime, @@ -49,7 +48,6 @@ class QuestionDashboard < Administrate::BaseDashboard :id, :text, :default_value, - :guidance, :number, :created_at, :updated_at, @@ -69,7 +67,6 @@ class QuestionDashboard < Administrate::BaseDashboard :question_format, :text, :default_value, - :guidance, :number, :option_comment_display, :modifiable, diff --git a/app/dashboards/template_dashboard.rb b/app/dashboards/template_dashboard.rb index cfaa8e077b..f7f46ff735 100644 --- a/app/dashboards/template_dashboard.rb +++ b/app/dashboards/template_dashboard.rb @@ -28,6 +28,8 @@ class TemplateDashboard < Administrate::BaseDashboard visibility: Field::Number, customization_of: Field::Number, dmptemplate_id: Field::Number, + migrated: Field::Boolean, + dirty: Field::Boolean, }.freeze # COLLECTION_ATTRIBUTES @@ -36,8 +38,6 @@ class TemplateDashboard < Administrate::BaseDashboard # By default, it's limited to four items to reduce clutter on index pages. # Feel free to add, remove, or rearrange items. COLLECTION_ATTRIBUTES = [ - :title, - :description, :org, :plans, :phases, @@ -67,6 +67,8 @@ class TemplateDashboard < Administrate::BaseDashboard :visibility, :customization_of, :dmptemplate_id, + :migrated, + :dirty, ].freeze # FORM_ATTRIBUTES @@ -90,6 +92,8 @@ class TemplateDashboard < Administrate::BaseDashboard :visibility, :customization_of, :dmptemplate_id, + :migrated, + :dirty, ].freeze # Overwrite this method to customize how templates are displayed diff --git a/app/dashboards/theme_dashboard.rb b/app/dashboards/theme_dashboard.rb index 40f8b3de61..2be7c8dfe0 100644 --- a/app/dashboards/theme_dashboard.rb +++ b/app/dashboards/theme_dashboard.rb @@ -60,4 +60,7 @@ class ThemeDashboard < Administrate::BaseDashboard # def display_resource(theme) # "Theme ##{theme.id}" # end + def display_resource(theme) + "Theme: #{theme.title} (##{theme.id})" + end end diff --git a/config/routes.rb b/config/routes.rb index 2f4c08cf4d..d7d2c537e9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,56 +1,56 @@ Rails.application.routes.draw do namespace :admin do - resources :users, only: [:new, :create, :edit, :update, :index, :show] - resources :orgs, only: [:new, :create, :edit, :update, :index, :show] - resources :perms, only: [:new, :create, :edit, :update, :index, :show] - resources :languages - resources :templates - resources :token_permission_types - resources :phases - resources :sections - resources :questions - resources :question_formats - resources :question_options - resources :annotations - resources :answers - resources :guidances - resources :guidance_groups - resources :themes - resources :notes - resources :plans - # resources :plans_guidance_groups - resources :identifier_schemes - resources :exported_plans - resources :regions - resources :roles - resources :splash_logs - resources :user_identifiers + resources :users, only: [:new, :create, :edit, :update, :index, :show] + resources :orgs, only: [:new, :create, :edit, :update, :index, :show] + resources :perms, only: [:new, :create, :edit, :update, :index, :show] + resources :languages, only: [:new, :create, :edit, :update, :index, :show] + resources :templates, only: [:new, :create, :edit, :update, :index, :show] + resources :phases, only: [:new, :create, :edit, :update, :index, :show] + resources :sections, only: [:new, :create, :edit, :update, :index, :show] + resources :questions, only: [:new, :create, :edit, :update, :index, :show] + resources :question_formats, only: [:new, :create, :edit, :update, :index, :show] + resources :question_options, only: [:new, :create, :edit, :update, :index, :show] + resources :annotations, only: [:new, :create, :edit, :update, :index, :show] + resources :answers, only: [:new, :create, :edit, :update, :index, :show] + resources :guidances, only: [:new, :create, :edit, :update, :index, :show] + resources :guidance_groups, only: [:new, :create, :edit, :update, :index, :show] + resources :themes, only: [:new, :create, :edit, :update, :index, :show] + resources :notes, only: [:new, :create, :edit, :update, :index, :show] + resources :plans, only: [:new, :create, :edit, :update, :index, :show] + resources :identifier_schemes, only: [:new, :create, :edit, :update, :index, :show] + resources :exported_plans, only: [:new, :create, :edit, :update, :index, :show] + resources :regions, only: [:new, :create, :edit, :update, :index, :show] + resources :roles, only: [:new, :create, :edit, :update, :index, :show] + resources :splash_logs, only: [:new, :create, :edit, :update, :index, :show] + resources :user_identifiers, only: [:new, :create, :edit, :update, :index, :show] +resources :token_permission_types, only: [:new, :create, :edit, :update, :index, :show] +#resources :plans_guidance_groups root to: "users#index" end devise_for :users, controllers: { - registrations: "registrations", - passwords: 'passwords', - sessions: 'sessions', + registrations: "registrations", + passwords: 'passwords', + sessions: 'sessions', omniauth_callbacks: 'users/omniauth_callbacks'} do - + get "/users/sign_out", :to => "devise/sessions#destroy" end - + # WAYFless access point - use query param idp #get 'auth/shibboleth' => 'users/omniauth_shibboleth_request#redirect', :as => 'user_omniauth_shibboleth' #get 'auth/shibboleth/assoc' => 'users/omniauth_shibboleth_request#associate', :as => 'user_shibboleth_assoc' #post '/auth/:provider/callback' => 'sessions#oauth_create' - + # fix for activeadmin signout bug devise_scope :user do delete '/users/sign_out' => 'devise/sessions#destroy' end delete '/users/identifiers/:id', to: 'user_identifiers#destroy', as: 'destroy_user_identifier' - + #ActiveAdmin.routes(self) #organisation admin area @@ -77,10 +77,10 @@ get "public_plans" => 'static_pages#public_plans' get "public_export/:id" => 'static_pages#public_export', as: 'public_export' get "existing_users" => 'existing_users#index' - + #post 'contact_form' => 'contacts', as: 'localized_contact_creation' #get 'contact_form' => 'contacts#new', as: 'localized_contact_form' - + resources :orgs, :path => 'org/admin', only: [] do member do get 'children' From a6014e2d8ac9b476da2c874e7e1f203981f23d91 Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Fri, 30 Jun 2017 11:35:44 +0100 Subject: [PATCH 19/27] Update guidance_group_dashboard.rb --- app/dashboards/guidance_group_dashboard.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/dashboards/guidance_group_dashboard.rb b/app/dashboards/guidance_group_dashboard.rb index 1916c3b48e..ca467532f9 100644 --- a/app/dashboards/guidance_group_dashboard.rb +++ b/app/dashboards/guidance_group_dashboard.rb @@ -25,9 +25,10 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard # By default, it's limited to four items to reduce clutter on index pages. # Feel free to add, remove, or rearrange items. COLLECTION_ATTRIBUTES = [ + :name :org, :guidances, - :plans, +# :plans, :id, ].freeze @@ -36,7 +37,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard SHOW_PAGE_ATTRIBUTES = [ :org, :guidances, - :plans, +# :plans, :id, :name, :created_at, @@ -51,7 +52,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard FORM_ATTRIBUTES = [ :org, :guidances, - :plans, +# :plans, :name, :optional_subset, :published, @@ -63,4 +64,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard # def display_resource(guidance_group) # "GuidanceGroup ##{guidance_group.id}" # end + def display_resource(guidance_group) + guidance_group.name + end end From 8b0f32ee60706d7af20701f844bbc1a0a1abbeea Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Fri, 30 Jun 2017 11:36:40 +0100 Subject: [PATCH 20/27] Update template_dashboard.rb --- app/dashboards/template_dashboard.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/dashboards/template_dashboard.rb b/app/dashboards/template_dashboard.rb index f7f46ff735..7a5a313ee0 100644 --- a/app/dashboards/template_dashboard.rb +++ b/app/dashboards/template_dashboard.rb @@ -38,6 +38,8 @@ class TemplateDashboard < Administrate::BaseDashboard # By default, it's limited to four items to reduce clutter on index pages. # Feel free to add, remove, or rearrange items. COLLECTION_ATTRIBUTES = [ + :title, + :description, :org, :plans, :phases, From ff3e19f1a11fe49619a6c8ba6021091b56ee237e Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Fri, 30 Jun 2017 12:15:24 +0100 Subject: [PATCH 21/27] typo --- app/dashboards/guidance_group_dashboard.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/dashboards/guidance_group_dashboard.rb b/app/dashboards/guidance_group_dashboard.rb index ca467532f9..76e2f095be 100644 --- a/app/dashboards/guidance_group_dashboard.rb +++ b/app/dashboards/guidance_group_dashboard.rb @@ -25,7 +25,7 @@ class GuidanceGroupDashboard < Administrate::BaseDashboard # By default, it's limited to four items to reduce clutter on index pages. # Feel free to add, remove, or rearrange items. COLLECTION_ATTRIBUTES = [ - :name + :name, :org, :guidances, # :plans, From 72868175763044aa2d320914a7cf6e2b61adcfd3 Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Fri, 30 Jun 2017 14:21:39 +0100 Subject: [PATCH 22/27] corrected data model --- doc/data_model.png | Bin 52755 -> 57498 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/data_model.png b/doc/data_model.png index af93cdb8f98e8ca9b68046b28142690c15dac418..cb83c4de8ffe5fc773b5abd4ff166a30aee23344 100644 GIT binary patch literal 57498 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 Nr>+s>!PdW@`CtCpDue(4 literal 52755 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 RiQo2>=X8$}w}1cLUjZ?91P%ZI From 0e21881e561d899e3971a38417bc310d40eec282 Mon Sep 17 00:00:00 2001 From: Jimmy Angelakos Date: Mon, 3 Jul 2017 13:41:51 +0100 Subject: [PATCH 23/27] Update CONTRIBUTING.md From 446b9ce77285ead7ac0d16bf0f4fdd9113438fff Mon Sep 17 00:00:00 2001 From: xsrust Date: Wed, 5 Jul 2017 11:23:17 +0100 Subject: [PATCH 24/27] fixes generation of api_token when a user is given permissions for api --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 57b504f2a2..b26a62e9ab 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -41,7 +41,7 @@ def admin_update_permissions else if perms.include? perm @user.perms << perm - if perm.name == Perm.use_api.id + if perm.id == Perm.use_api.id @user.keep_or_generate_token! end end From b5bfc7fd401c96f2ca0af6d76c62aa22592b3e3f Mon Sep 17 00:00:00 2001 From: xsrust Date: Wed, 5 Jul 2017 12:40:21 +0100 Subject: [PATCH 25/27] removes plans from default scope of users (this was causing 2 extra queries run per page) and not always used --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index c1350f6361..f9000300f9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -53,7 +53,7 @@ def filter(query) ## # Scopes - default_scope { includes(:org, :perms, :plans) } + default_scope { includes(:org, :perms) } From 23da3ac5cfead4cf5701df2ae7d361c2cc754ab3 Mon Sep 17 00:00:00 2001 From: xsrust Date: Wed, 5 Jul 2017 13:26:56 +0100 Subject: [PATCH 26/27] updates the indexes within the db to reflect those used in data access within the code --- .../20170702012742_ensure_indexes_in_place.rb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 db/migrate/20170702012742_ensure_indexes_in_place.rb diff --git a/db/migrate/20170702012742_ensure_indexes_in_place.rb b/db/migrate/20170702012742_ensure_indexes_in_place.rb new file mode 100644 index 0000000000..6bd9410487 --- /dev/null +++ b/db/migrate/20170702012742_ensure_indexes_in_place.rb @@ -0,0 +1,40 @@ +class EnsureIndexesInPlace < ActiveRecord::Migration + def change + #users_perms + remove_index :users_perms, name: 'index_users_perms_on_user_id_and_perm_id' + add_index :users_perms, :user_id + #user_identifiers + add_index :user_identifiers, :user_id + #roles + add_index :roles, :user_id + add_index :roles, :plan_id + #org_token_permissions + add_index :org_token_permissions, :org_id + #users + add_index :users, :org_id + remove_index :users, :confirmation_token + remove_index :users, :invitation_token + remove_index :users, :reset_password_token + #notes + add_index :notes, :answer_id + #guidance_groups + add_index :guidance_groups, :org_id + #guidance + add_index :guidances, :guidance_group_id + #themes_in_guidance + add_index :themes_in_guidance, :theme_id + add_index :themes_in_guidance, :guidance_id + #annotations + add_index :annotations, :question_id + #question_themes + remove_index :questions_themes, name: 'question_theme_index' + remove_index :questions_themes, name: 'theme_question_index' + add_index :questions_themes, :question_id + #question_options + add_index :question_options, :question_id + #answers_question_options + remove_index :answers_question_options, name: 'answer_question_option_index' + remove_index :answers_question_options, name: 'question_option_answer_index' + add_index :answers_question_options, :answer_id + end +end From 34c37e70182db2a953c7a5382daa904e61ee41f9 Mon Sep 17 00:00:00 2001 From: xsrust Date: Wed, 5 Jul 2017 14:02:53 +0100 Subject: [PATCH 27/27] removed n+1 queries from edit phase and show plans page --- app/controllers/phases_controller.rb | 22 ++++++++-------- app/models/plan.rb | 2 +- db/schema.rb | 38 ++++++++++++++++++++-------- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/app/controllers/phases_controller.rb b/app/controllers/phases_controller.rb index 15d45f3822..21084a9469 100644 --- a/app/controllers/phases_controller.rb +++ b/app/controllers/phases_controller.rb @@ -29,17 +29,19 @@ def edit # where guidance is a hash with the text and the org name theme_guidance = {} - guidance_groups.each do |guidance_group| - guidance_group.guidances.where(published: true).each do |guidance| - guidance.themes.each do |theme| - title = theme.title - if !theme_guidance.has_key?(title) - theme_guidance[title] = Array.new + guidance_groups.includes(guidances:[:themes]).each do |guidance_group| + guidance_group.guidances.each do |guidance| + if guidance.published + guidance.themes.each do |theme| + title = theme.title + if !theme_guidance.has_key?(title) + theme_guidance[title] = Array.new + end + theme_guidance[title] << { + text: guidance.text, + org: guidance_group.name + ':' + } end - theme_guidance[title] << { - text: guidance.text, - org: guidance_group.name + ':' - } end end end diff --git a/app/models/plan.rb b/app/models/plan.rb index 1eee8a68d4..8688f34e19 100644 --- a/app/models/plan.rb +++ b/app/models/plan.rb @@ -159,7 +159,7 @@ def get_guidance_group_options # find all the themes in this plan # and get the guidance groups they belong to ggroups = [] - self.template.phases.each do |phase| + Template.includes(phases: [sections: [questions: [themes: [guidances: [guidance_group: :org]]]]]).find(self.template_id).phases.each do |phase| phase.sections.each do |section| section.questions.each do |question| question.themes.each do |theme| diff --git a/db/schema.rb b/db/schema.rb index fd97ccea42..1c7f7115df 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170428083711) do +ActiveRecord::Schema.define(version: 20170702012742) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,6 +25,8 @@ t.datetime "updated_at" end + add_index "annotations", ["question_id"], name: "index_annotations_on_question_id", using: :btree + create_table "answers", force: :cascade do |t| t.text "text" t.integer "plan_id" @@ -40,8 +42,7 @@ t.integer "question_option_id", null: false end - add_index "answers_question_options", ["answer_id", "question_option_id"], name: "answer_question_option_index", using: :btree - add_index "answers_question_options", ["question_option_id", "answer_id"], name: "question_option_answer_index", using: :btree + add_index "answers_question_options", ["answer_id"], name: "index_answers_question_options_on_answer_id", using: :btree create_table "exported_plans", force: :cascade do |t| t.integer "plan_id" @@ -93,6 +94,8 @@ t.boolean "published" end + add_index "guidance_groups", ["org_id"], name: "index_guidance_groups_on_org_id", using: :btree + create_table "guidances", force: :cascade do |t| t.text "text" t.integer "guidance_group_id" @@ -102,6 +105,8 @@ t.boolean "published" end + add_index "guidances", ["guidance_group_id"], name: "index_guidances_on_guidance_group_id", using: :btree + create_table "identifier_schemes", force: :cascade do |t| t.string "name" t.string "description" @@ -129,6 +134,8 @@ t.datetime "updated_at" end + add_index "notes", ["answer_id"], name: "index_notes_on_answer_id", using: :btree + create_table "org_token_permissions", force: :cascade do |t| t.integer "org_id" t.integer "token_permission_type_id" @@ -136,6 +143,8 @@ t.datetime "updated_at" end + add_index "org_token_permissions", ["org_id"], name: "index_org_token_permissions_on_org_id", using: :btree + create_table "orgs", force: :cascade do |t| t.string "name" t.string "abbreviation" @@ -219,6 +228,8 @@ t.datetime "updated_at" end + add_index "question_options", ["question_id"], name: "index_question_options_on_question_id", using: :btree + create_table "questions", force: :cascade do |t| t.text "text" t.text "default_value" @@ -238,8 +249,7 @@ t.integer "theme_id", null: false end - add_index "questions_themes", ["question_id", "theme_id"], name: "question_theme_index", using: :btree - add_index "questions_themes", ["theme_id", "question_id"], name: "theme_question_index", using: :btree + add_index "questions_themes", ["question_id"], name: "index_questions_themes_on_question_id", using: :btree create_table "regions", force: :cascade do |t| t.string "abbreviation" @@ -256,6 +266,9 @@ t.integer "access", default: 0, null: false end + add_index "roles", ["plan_id"], name: "index_roles_on_plan_id", using: :btree + add_index "roles", ["user_id"], name: "index_roles_on_user_id", using: :btree + create_table "sections", force: :cascade do |t| t.string "title" t.text "description" @@ -319,6 +332,9 @@ t.integer "guidance_id" end + add_index "themes_in_guidance", ["guidance_id"], name: "index_themes_in_guidance_on_guidance_id", using: :btree + add_index "themes_in_guidance", ["theme_id"], name: "index_themes_in_guidance_on_theme_id", using: :btree + create_table "token_permission_types", force: :cascade do |t| t.string "token_type" t.text "text_description" @@ -334,14 +350,16 @@ t.integer "identifier_scheme_id" end + add_index "user_identifiers", ["user_id"], name: "index_user_identifiers_on_user_id", using: :btree + create_table "users", force: :cascade do |t| t.string "firstname" t.string "surname" t.string "email", default: "", null: false t.string "orcid_id" t.string "shibboleth_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "encrypted_password", default: "" t.string "reset_password_token" t.datetime "reset_password_sent_at" @@ -367,17 +385,15 @@ t.integer "language_id" end - add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree - add_index "users", ["invitation_token"], name: "index_users_on_invitation_token", unique: true, using: :btree - add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree + add_index "users", ["org_id"], name: "index_users_on_org_id", using: :btree create_table "users_perms", id: false, force: :cascade do |t| t.integer "user_id" t.integer "perm_id" end - add_index "users_perms", ["user_id", "perm_id"], name: "index_users_perms_on_user_id_and_perm_id", using: :btree + add_index "users_perms", ["user_id"], name: "index_users_perms_on_user_id", using: :btree add_foreign_key "annotations", "orgs" add_foreign_key "annotations", "questions"