Commit Graph

2992 Commits

Author SHA1 Message Date
Mark Valentine 05fc182a76 add assignment_view lti launch placement
Fixes PFS-10993

Test Plan:
Documentation on how launchpoint works is in JIRA:

1.  Configure a new LTI at the account / course level.  See
    documentation above for how to create assignment_view
    launch.
2.  Verify that the launch happens in three different contexts:
    a) Assignment view (not in external tool assignments,
       explicitly - not in quizzes.next)
    b) Discussion topic view (course context only)
    c) Quiz view (not quizzes.next)
3.  For each context above (#2) verify that launch_height is honored
    when it is specified in the LTI install.
4.  For each context (#2) verify that launch sends custom_assignment_id
    and custom_lti_placement to the LTI, if it was set in the launch
    install.
5.  For each context (#2) verify that when no relevant LTIs are installed
    no discernible change is caused by this patchset.
6.  For each context (#2) verify that when multiple apps are installed
    they all show in an arbitrary order.
7.  A11y:  Verify that when you enter or leave the LTI content an
    appropriate message is sent to the screenreader.
    a) enter message = "The following content is partner provided"
    b) leave message = "The preceding content was partner provided"
8.  Review api docs at:
    doc/api/file.assignment_external_tools.html
    experiment with options and verify apps work as expected.
9.  Additionally, we may have impacted the following launch locations,
    that hit the launch_definitions endpoint.  It would be worthwhile
    to run a smoke test to verify these are still working:
    a) course_assignment_menu placements
       - add an LTI (just use the dummy xml for minimal
         LTI course_navigation and replace "course_navigation" with
         "course_assignment_menu").  These LTIs appear in a menu
         available only to teachers on the assignments menu page.
         Click the "..." menu and they will be listed under
         "Assignment Groups Weights".  Verify teachers still see
         these LTI options.  Verify that students don't even hit the
         "launch_definitions" endpoint on this page.
    b) module_item link_selection.
       - On "Modules" page, create a module.  Then add a module item.
         Type is "External Tool".  Verify that the same list of LTIs
         is returned whether using this patchset or not.

Change-Id: I52c0cb7ed871683ba821b1b242b27f8a31a28820
Reviewed-on: https://gerrit.instructure.com/162426
Tested-by: Jenkins
Reviewed-by: Marc Alan Phillips <mphillips@instructure.com>
QA-Review: Marisa Jense <mjense@instructure.com>
Product-Review: Christi Wruck
2018-09-13 14:33:58 +00:00
Ed Schiebel f2e8e20d87 initialize submission lti tool w/ keyboard
The code that initialized the lti tool when its tab was being
activated was using the wrong DOM element to get it's data when
the user kb-navigated over, rather than clicking. By using the correct
element, we no longer need the click handler and can initialize
the tool as the tab is being activated

fixes ADMIN-1427

test plan:
  - from a course, setings, apps, use +App to install a
    homework_submission lti tool (dropbox works and can be
    found at https://www.eduappcenter.com/apps/112
    the key and secret can be anything.)
  - as a teacher, create an assignment with submission types
    text entry and file upload
  - as a student, go to the assignment and click on "Submit Assignment"
  - click on the lti tool's tab (e.g. "dropbox")
  > expect the lti tool to initialize and load

  - refresh the page and click "Submit Assignment" again
  - this time, use the right arrow key to move
    to your lti tool's tab
  > expect the lti tool to initialize and load

Change-Id: Idb68438ce9428a748f6671c5b8e23ae4ad31f5a6
Reviewed-on: https://gerrit.instructure.com/163855
Tested-by: Jenkins
Reviewed-by: Jon Willesen <jonw+gerrit@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
QA-Review: Steven Burnett <sburnett@instructure.com>
2018-09-11 16:32:12 +00:00
Ryan Shaw 3bd849d4f3 spec: fix “option[selected]” to work w react 15
Change-Id: I85f03004ab80dc46b9c5dc642eb9a56c6329f0d5
Reviewed-on: https://gerrit.instructure.com/163738
Tested-by: Jenkins
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-09-10 15:50:36 +00:00
Mark Valentine 5980258ac6 Add assignment_edit lti launch placement
Fixes:  PFS-10922

Test Plan:
Documentation on how launchpoint works is in JIRA:

1.  Configure a new LTI at the account / course level.  See
    documentation above for how to create assignment_edit
    launch.
2.  Verify that the launch happens in three different contexts:
    a) Assignment create and edit.
    b) Discussion topic create and edit.
    c) Quiz create and edit.
3.  For each context above (#2) verify that launch_height is honored
    when it is specified in the LTI install.
4.  For each context (#2) verify that launch sends custom_assignment_id
    and custom_lti_placement to the LTI.
5.  For each context (#2) verify that when no relevant LTIs are installed
    no discernible change is caused by this patchset.
6.  For each context (#2) verify that when multiple apps are installed
    they all show in an arbitrary order.
7.  A11y:  Verify that when you enter or leave the LTI content an
    appropriate message is sent to the screenreader.
    a) enter message = "The following content is partner provided"
    b) leave message = "The preceding content was partner provided"
8.  Review api docs at:
    doc/api/file.assignment_external_tools.html
    experiment with options and verify apps work as expected.

Change-Id: I29c7fe43c9b08daa9ff9e53f86dd2a5f762beb37
Reviewed-on: https://gerrit.instructure.com/161571
Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
QA-Review: Marisa Jense <mjense@instructure.com>
Product-Review: Christi Wruck
Tested-by: Jenkins
2018-09-10 15:33:28 +00:00
Ed Schiebel 16cb291989 Remove PII from any page title
closes ADMIN-1118

test plan:
  - in a rails console, execute Setting.set('google_analytics_key', 'foo')
    (if that doesn't work, replace 'foo' with 'UA-124895132-1')
  - restart your rails server
  - load a user's profile page
  - inspect the network tab
  > expect the https://www.google-analytics.com/__utm.gif URLs to send
    a page title "utmdt" as "User Profile", and not the student's name

  - if you really want to be complete, repeat for each of the changed
    files and expect not to see any PII in the page title
    (I couldn't figure out the canvas URL for all of them)
	app/views/communication_channels/confirm.html.erb: /register/:nonce
             though I don't know how to get a valid nonce
	app/views/context/new_roster_user.html.erb: /courses/:cid/users/:uid
	app/views/context/roster_user.html.erb: almost positive this has
             been replaces by new_roster_user and is no longer used.
	app/views/profile/profile.html.erb: /profile
	app/views/profile/show.html.erb: /profile/settings
	app/views/gradebooks/grade_summary.html.erb: /courses/26/grades/43
	app/views/outcomes/user_outcome_results.html.erb:
             pretty sure it's /outcomes/users/:user_id, but when
             I try, I get a routing error. Maybe you have to turn
             outcomes on
	app/views/profile/observees.html.erb:
             pretty sure it's /users/:user_id/observees, but
             I get a routing error.
	app/views/quizzes/quizzes/history.html.erb:
                  /courses/26/quizzes/51/history (as the student)
	app/views/submissions/show_preview.html.erb:
                 /courses/:course_id/assignments/:aid/submissions/:user_id
	app/views/users/grades.html.erb: /users/:user_id/grades
	app/views/users/index.html.erb: i don't believe this is used any
             more. the title is "User Search results for %{user_name}",
             and from what I can tell, user search is an ajax query now.
	app/views/users/show.html.erb: /acounts/:acct_id/users/:user_id
               or /users/:user_id

  - you probably want to run Setting.set('google_analytics_key', nil)
    from the rails console and restart your server

Change-Id: I3619c5bf75889226f7bce52c641fb7d727485b36
Reviewed-on: https://gerrit.instructure.com/162694
Tested-by: Jenkins
Reviewed-by: Mysti Sadler <mysti@instructure.com>
QA-Review: Mysti Sadler <mysti@instructure.com>
Product-Review: Ed Schiebel <eschiebel@instructure.com>
2018-09-05 18:12:05 +00:00
Aaron Kc Hsu 38a9db0364 destroy double duplication module bug
fixes COMMS-1425

Test Plan
* Have a course with a multiple Modules that have Assignments, Discussions, and Pages in them
* Click on Modules for the course
* Click the Ellipsis Menu for a module and select 'Duplicate'
* Note the module is duplicated
* In a different module, click the Ellipsis Menu for an Assignment and select 'Duplicate'
* Note there is only 1 duplicate created

Change-Id: Iff38b7d15d73f47ddcd41258eeaee29bdf7d4dd6
Reviewed-on: https://gerrit.instructure.com/163066
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Tested-by: Jenkins
Product-Review: Steven Burnett <sburnett@instructure.com>
2018-09-04 17:54:23 +00:00
Justin Ball e27648e478 Refactor LTI event listeners to be reusable
This PR adds monitoring of window messages to the wiki_page_show.js so
that LTI tools embedded in wiki pages can post messages to Canvas. In
particular this allows an embedded tool to resize it’s iframe which
solves problems when the content of the iframe changes its height. The
message handling is refactored into its own file. In addition, the
findDomForWindow method will l find the iframe that contains the window
that produced the window message so that the correct iframe is resized.

Adds tests for messages and restores tool resizer

Change-Id: I2b83a72cd3074d8eb47a5131bcf9e3ef72552ea4
Reviewed-on: https://gerrit.instructure.com/154182
QA-Review: Weston Dransfield <wdransfield@instructure.com>
Reviewed-by: Marc Alan Phillips <mphillips@instructure.com>
Tested-by: Jenkins
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2018-09-04 16:57:39 +00:00
Adrian Packel 15125a2379 Don't link to plagiarism reports in SG if anon
Don't link to plagiarism reports in SpeedGrader if the assignment is
currently anonymizing students. Show a non-clickable score with a
tooltip saying that reports cannot be viewed for anonymous assignments.

fixes GRADE-1434

Test plan:

(Unless you really want to set up Turnitin/Vericite, you will have an
easier time if you manually add originality data to the submissions
you're testing. Details below.)

- Create two assignments (T and V) with anonymous grading enabled
  - Set assignment T to require text entry submissions
  - Set assignment V to require file uploads
- Masquerade as a student and submit something for each assignment
- In a Rails console, add originality reports for the relevant submissions
  (details below).
- As the teacher, open those submissions in SpeedGrader
  - The originality score should appear, but not link to anything
- Unmute both assignments (or turn off anonymous grading)
  - The originality score should link to a detailed report as before

Creating originality data:

For assignment T ("Turnitin"):
> submission = [the student-submitted submission]
> submission.originality_reports.create!(originality_score: 20)

For assignment V ("Vericite"):
> submission = [the student-submitted submission]
> submission.turnitin_data[:provider] = 'vericite'
> submission.save!
> submission.originality_reports.create!(
    originality_score: 80,
    attachment_id: [ID of uploaded attachment]
  )

(The originality score can be between 0 and 100--a "%" will be appended
when displayed--with a higher score indicating more dire plagiarism.)

Change-Id: I1f2a4dae16526b206da98d5c9c89db81011f3dd4
Reviewed-on: https://gerrit.instructure.com/162581
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-08-30 23:47:28 +00:00
Matthew Berns 398920d8ed fix extra add rating icon on edge rating
fixes OUT-2422

test plan:
- on an assignment show page, add a rubric
- edit the rubric on the assignment show page
- without reloading, re-open the rubric
- there should be no trailing '+' icon to add
  a rating on right side of the rightmost rating

Change-Id: I431cbda84c2f9023f468edfa8b6cd831d9ba3b4b
Reviewed-on: https://gerrit.instructure.com/162013
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Augusto Callejas <acallejas@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
Tested-by: Jenkins
2018-08-28 20:53:53 +00:00
Ed Schiebel c5c50c760c Pass correct locale to Planner
Sometimes ENV.LOCALE and ENV.MOMENT_LOCALE are different
(zh-Hans v zh-cn or mi v mi-nz). We were passing the former to planner,
but moment needs the full locale, including language and region
identifiers, and formatMessage copes with the full locale just fine,
so we really need to pass in the latter or moment eventually
blows up.

So mi-nz month names would successfully parse, had to both bump our
version of moment and tweak the canvas customized mi-nz locale data.

to test, you'll have to run yarn to update moment, then build with
RAILS_LOAD_ALL_LOCALES=1 yarn build

Note on the changes to timezoneSpec.js:
- some of the specs were parsing dates like "Mon, Aug 3", which are
  being interpreted in the current year, when Aut 3 is not a Monday.
  Resolved this by using MockDate to pretend today is 2/1/2015
- moment does not always interpret the Chinese characters for evening as
  implying PM.  I'm assuming canvas will never need that particular
  construct and commented out the failing string.
- there's one date-time that's getting the date totally wrong.
- Fixed grammatically incorrect instances of
  '8月 3, 2015' to ''8月 3日, 2015'
- fix cases where the year is coming after the month and day, which
  would never really happen

fixes ADMIN-1331

test plan:
  - have a student in course so planner is enabled.
  - go to /profile/settings and Edit
  - change the Language to Reo Māori (Aotearoa) and "Update Settings"
  - go to the planner dashboard
  - click on + to create a new todo
  > expect you can create a todo.

If you want, you can repeat with any of the languages listed in the
ticket just to prove ^that wasn't a fluke.

Change-Id: I9ba069ef61529088ab92271d7857998df6bbc409
Reviewed-on: https://gerrit.instructure.com/161206
Tested-by: Jenkins
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Reviewed-by: Mysti Sadler <mysti@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Ed Schiebel <eschiebel@instructure.com>
2018-08-27 20:51:33 +00:00
Adrian Packel c5f970005d fix SpeedGrader rubric assessment specs
Test plan:
  - Jenkins passes

Change-Id: I87da1da4021d685fd2aebeb913cea2563b7efcf8
Reviewed-on: https://gerrit.instructure.com/162229
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-08-27 20:45:09 +00:00
Ryan Shaw a39dbee7ea [react codemod] create-element-to-jsx
Change-Id: Ic98c9a2a85dad8750cd9c23d717a06a868106087
Reviewed-on: https://gerrit.instructure.com/162073
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-08-25 00:10:05 +00:00
Adrian Packel dd3122c88a Show provisional grader rubrics to moderator
For a moderated assignment, allow the moderator to view rubrics
submitted by provisional graders and enter a custom assessment.

fixes GRADE-1377

Test plan:
  - Set up a rubric
  - Set up two moderated assignments, one with grader names visible to
    the final grader and the other with them not visible
      - Attach the rubric to each assignment
  - As one or more provisional graders, assess some students using the
    rubric in each assignment
    - This should function as normal
  - As the moderator, open each assignment in SpeedGrader
    - The right side should have a dropdown letting you select among
      provisional graders' submitted assessments
      - If grader names are visible, the dropdown options will show that
        provisional grader's name
      - If not, they will appear as "Grader # Rubric" (note the "Rubric"
        suffix for anonymous graders), numbered as elsewhere on the page
      - A "Custom" option representing the moderator's assessment should
        always be present, and be the first option
        - The button to edit the rubric should only appear when this
          option is selected
    - Note that assessment scores are not (as of the time of writing)
      automatically propagated to provisional grades, so the scores
      shown in the grade selector will not necessarily reflect the
      contents of the rubric

Change-Id: I3cc05bc64b687096638c64f02633b37484a63455
Reviewed-on: https://gerrit.instructure.com/161822
Tested-by: Jenkins
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-08-24 21:55:45 +00:00
Ryan Kuang d9d2d54e4b Add custom columns to gradebook imports
When importing a gradebook, the csv import can include custom columns

closes GRADE-1315

Test Plan
 - Create a course with (not read_only) custom columns in the gradebook
 - Export the gradebook to csv
 - Make changes to the data in the writable custom columns in the csv
 - Import the csv into gradebook
 - Run the delayed jobs server
 - The gradebook will make changes in writable custom columns with
   or without additional changes in assignment columns
 - If no changes are made, or changes in non writable columns are made,
   the importer will skip these changes

Change-Id: I0a529ea8727be864f6105b9e6b256f75e1c8c471
Reviewed-on: https://gerrit.instructure.com/156068
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-08-24 21:15:03 +00:00
Adrian Packel 6a5a916e45 pass user-related params to docviewer
When talking to DocViewer, include relevant data for the current user as
well as the filter of users whose comments should be shown. This commit
enables functionality for anonymous annotations.

closes GRADE-1427
closes GRADE-1456

Test Plan 1: Moderated Assignments
1. Create a moderated assignment and allow for at least two provisional
   graders in addition to the final grader. Then, leave at least one
   annotation and one comment per provisional grader, final grader, and
   the student.
2. When "Graders cannot view student names" is checked, verify that
   no instructor or admin can see the students identity on annotaions.
   Instead, the student's name should show up simply as 'Student'.
3. When "Graders cannot view each other's names" is checked, verify that
   non-admin, non-final-grader provisional graders cannot see each
   other's names on annotations. Instead, they should see a generic
   grader name such as "Grader 1".
4. When "Final grader can view other grader names" is unchecked, verify
   the final grader cannot view the other graders' names on annotations.
   Instead, they should see a generic grader name such as "Grader 1".
5. Smoke test the settings listed in steps 2, 3, and 4 in various
   combinations of being on or off.
6. While the assignment is still in moderation, verify the student can
   only see their own annotations.
7. When grades are published for the assignment, verify the assignment
   no longer shows any anonymous annotations.

Test Plan 2: Anonymous, Not Moderated Assignments
1. Create an anonymous assignment. Submit to the assignment as a student
   and leave some annotations as the student and as an instructor.
2. Verify the student can only see their own annotations while the
   assignment is still muted.
3. An instructor *should* be able to see any annotations made by an
   instructor, but DocViewer has not implemented this functionality
   on their side yet. As a result, just verify that an instructor
   can see the student's annotations but they are anonymized while
   the assignment is muted.
4. Unmute the assignment and verify the annotations are no longer
   anonymized, and the student can now see annotations from instructors.

Test Plan 3: Normal, Not Anonymous Assignments
1. Do a general smoke test of not anonymous, not moderated assignments
   to verify annotations still show up as expected.

Change-Id: I181a6ace3c00ca93ab8e6c7608a034b521ed78b7
Reviewed-on: https://gerrit.instructure.com/161486
Reviewed-by: Derek Bender <djbender@instructure.com>
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-08-24 18:55:06 +00:00
Derek Bender 3865d53ef3 add submission comment pdf exporter
scores are shown, not grades.

closes: GRADE-1457

Test Plan:
  Note: the new endpoint is of the form:

    /submissions/:submssion_id/comments.pdf

 - given a submission with many submission comments
 - given SpeedGrader page
 - when the link for Export Submission Comments is clicked
 - then a pdf of submission comments is displayed

 - given a user that cannot Read Grades
 - when accessing a pdf url
 - then the response is unauthorized

 - given a user that cannot Read Comments
 - when accessing a pdf url
 - then the response is unauthorized

 - given an assignment that is anonymous
 - when on the SpeedGrader page
 - then the link for Export Submission Comments is not displayed
 - then hitting the pdf url returns unauthorized

 - also test with group assignments

Change-Id: I529fe170a3de6f8a1c8f28ae20a3346c5676a97e
Reviewed-on: https://gerrit.instructure.com/158888
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Derek Bender <djbender@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
Tested-by: Jenkins
2018-08-23 00:43:26 +00:00
Clay Diffrient ea4390d155 Make auto opening file previews not steal focus
closes CORE-1672

Test Plan:
  - Make sure file previews are enabled and/or you
    have something like Canvadocs running.
  - Add a link to a page to a PDF file
  - Use the link option to edit the link and make it
    auto open the preview
  - Save and load the page as a student
  - The preview should open, but it should not put focus
    on the minimize link.
  - Close the preview
  - Click the preview link
  - Focus should be on the minimize link.

Change-Id: Ibfb5047df62a6bf8cf50b4fdd035b685d7daae95
Reviewed-on: https://gerrit.instructure.com/160552
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>
2018-08-22 19:26:34 +00:00
Ryan Kuang 8369be31e0 Scores appear for inactive enrollments in gradebook csv exports
When “show inactive enrollments” is turned on, the csv export
includes assignment scores for inactive students

fixes GRADE-1415

Test Plan
  1. Create a course with inactive enrollments
  2. Make sure “show inactive enrollments” is toggled On,
     you can find this setting under students in the new gradebook
  3. Export the gradebook to csv
  4. In the csv, under the assignments columns, the inactive students’
     actual assignment scores will appear. The scores previously
     showed up as ‘N/A

Change-Id: Iaa2897b96e40ef9cc466505440608955359a788c
Reviewed-on: https://gerrit.instructure.com/160938
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
Tested-by: Jenkins
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-08-21 20:49:05 +00:00
Steven Burnett f250c52ead prevent duplicating of assignments with lti
fixes COMMS-1378

Test Plan:
- create a discussion, graded discussion, assignment, wiki page
  and put them in a module
- duplicate the module
- notice it works
- create another module but this time put a lti assignment in the module
- notice you can't duplicate it

Change-Id: Ie7cb6d34ef971e2bc74ebc662868e5ddf61cb19f
Reviewed-on: https://gerrit.instructure.com/161375
Reviewed-by: Landon Gilbert-Bland <lbland@instructure.com>
Tested-by: Jenkins
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Product-Review: Steven Burnett <sburnett@instructure.com>
2018-08-21 16:52:12 +00:00
wdransfield 03fa56b270 Allow resubmitting to plagiarism platform for anonymous grading
Closes PLAT-3647

Test Plan:
- Enable  the 'Anonymous Grading' FF in your root
  account
- Create an assignment with a plagiarism detection tool.
  Be sure to select the 'Graders cannot view student names'
  option when creating the assignment.
- As a student submit to the assignment.
- Create a pending originality report for the submission.
- In speedgrader click the "resubmit to <tool name>" button.
- Verify the page refreshes and a `plagiarism_resubmit` live
  event was emitted.

Change-Id: Ib633b0d2b9807d2c963ecdba00048d4cfb0392a7
Reviewed-on: https://gerrit.instructure.com/160767
Tested-by: Jenkins
Reviewed-by: Nathan Mills <nathanm@instructure.com>
Reviewed-by: Han Ngo <hngo@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Weston Dransfield <wdransfield@instructure.com>
2018-08-16 20:27:01 +00:00
Adrian Packel 01e2f8d5f1 Keep section synced between SG/new gradebook
When new gradebook is enabled and the user restricts the display to a
specific section, have the selected section carry over to SpeedGrader,
and similarly in the other direction. (If a section is changed in
SpeedGrader, the change will propagate to both old and new gradebooks;
if different selections are selected in OG and NG, SpeedGrader itself
will choose depending on whether new gradebook is enabled.)

fixes GRADE-989

Test plan:
- Have a course with multiple sections and new gradebook enabled
  - At least one section should be empty (i.e., contain no students)
- Test the following:
  - When you change the selected section in new gradebook and then
    open SpeedGrader, the new section should be shown
  - Similarly, section changes in SG should be persisted in NG
  - Selecting the empty section in SG (or selecting it in NG and then
    opening SG) should display an alert indicating no students could be
    found, and reload showing all students
  - Revert to old Gradebook and check that syncing sections still works
    between SG and OG

(Note that selecting a section in new gradebook will *not* directly
update the selected section in old gradebook, and vice versa. Changing
sections in SpeedGrader, however, will update both gradebooks.)

Change-Id: I42b4558f40f3208a93bd00fd6a2224d0f954c96e
Reviewed-on: https://gerrit.instructure.com/159356
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Tested-by: Jenkins
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-08-08 22:16:17 +00:00
Ryan Shaw 89bed86ec3 perf: speed up I18n.t calls
closes: CORE-1681

Test plan:
* this code should do exactly the same as what it did before,
  just faster
* verify by loading canvas in a production, translated environment
  and doing a few spot checks to make sure that strings, dates, times
  translated in javscript still show up exactly as they did before

Change-Id: Ibf72f290b64e7b4a664e92753ab3f95e03bd9576
Reviewed-on: https://gerrit.instructure.com/159002
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Tested-by: Jenkins
Product-Review: Ryan Shaw <ryan@instructure.com>
2018-08-07 21:32:58 +00:00
Jeremy Neander e97dfa167a sort anonymous students by user setting in speedgrader
fixes GRADE-1400

test plan:

 A. Setup
    1. Select or create a course with a teacher
    2. Select or create an assignment
       * with student anonymity enabled
       * with text entry submissions
       * assigned to everyone
    3. Using the table below, create three students
       a. Set their names as below (shown as sortable name)

       b. Act as Charlie Xi
       c. Submit to the assignment
       d. Act as Adam Jones
       e. Submit to the assignment

       f. Update each submission's anonymous_id
          * use the Rails console
          * match the table below
    4. Log in as the teacher
    5. Give Adam Jones a grade

-------------------------------
| student name | anonymous id |
-------------------------------
| Xi, Charlie  | bcdef        |
| Jones, Adam  | abcde        |
| Ford, Betty  | cdefg        |
-------------------------------

 B. Verify with Anonymity
    1. Log in as the teacher
    2. Visit SpeedGrader for the assignment

    3. For each sort option
       a. Select the option
       b. Verify students appear in the order below

------------------------------------------------------
| alphabetical | submission date | submission status |
------------------------------------------------------
| Student 1    | Student 2       | Student 2         |
| Student 2    | Student 1       | Student 3         |
| Student 3    | Student 3       | Student 1         |
------------------------------------------------------

 B. Verify without Anonymity
    1. Disable student anonymity for the assignment
    2. Log in as the teacher
    3. Visit SpeedGrader for the assignment

    4. For each sort option
       a. Select the option
       b. Verify students appear in the order below

------------------------------------------------------
| alphabetical | submission date | submission status |
------------------------------------------------------
| Betty Ford   | Charlie Xi      | Charlie Xi        |
| Adam Jones   | Adam Jones      | Betty Ford        |
| Charlie Xi   | Betty Ford      | Adam Jones        |
------------------------------------------------------

Change-Id: I0dbbd21486f3be5780c1ad0baaa1a9d49f4cbbbb
Reviewed-on: https://gerrit.instructure.com/159446
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-08-03 17:06:05 +00:00
Gary Mei f0cc68b7cb fix broken comment names for AMM assignments
The backend wasn't returning ids for the provisional grades when
provisional graders were looking at SpeedGrader, so all the names
were indexed by the same key: nil.
When the final grader was looking at SpeedGrader, the provisional
grader display names weren't refreshed moving from one submission
to the next, so the wrong display names would be requested, resulting
in empty names.

*Special Case
This also fixes another scenario where if you had three graders
comment on a student, and then only two graders comment on the next
student, it was possible that the provisional grader names would
look different. For example, on the first student you might see
"Grader 2, Grader 1, Grader 3" as the order of the comments, and
if Grader 1 and Grader 3 commented on the second student, the text
would instead show "Grader 1, Grader 2". This change happens to fix
that as well.

fixes GRADE-1360

Test Plan
 - Don't apply the commit just yet.
 - Have 3 teachers and 2 students.
 - Create an anonymous, moderated assignment with these settings:
     - Moderated Grading on
     - Number of graders 2
     - Graders can view each other's comments on
     - Select some final grader
     - Final grader can view other graders names off
     - Anonymous Grading on
     - Graders cannot view each others names on
     - Anything else not specified can be off

 - As Grader 1, go to SpeedGrader for the assignment and leave a
   comment, but not a grade, for both students.
 - As Grader 2, do the same.
 - As the final grader, go to SpeedGrader and check comments on both
   students' submissions. Notice that at least one comment won't have
   an author name.
 - As Grader 2, go to SpeedGrader and notice that at least one
   comment author has "Custom" as the name rather than "Grader 1" or
   some such.

 - Apply the commit.
 - Navigate to SpeedGrader as the three different teachers and verify
   that comment author names are as expected.

Extra Test Plan (for the Special Case)
 - Set up an assignment such that three graders commented on one
   student, and two of those three commented on a second student.
 - If the order of the comments on the first student is NOT 1, 2, 3
   then you are good to keep going. If it IS 1, 2, 3 then you either
   have to re-do the first step until it is NOT 1, 2, 3 or hop into
   a rails console to update anonymous_id of the ModerationGraders to
   change the order.
 - Once you've reached this step, open SpeedGrader and verify that
   comments belong to the Grader that it says they do.

Change-Id: I732dfd1ade5a88f799782202a6225c99a2c9a108
Reviewed-on: https://gerrit.instructure.com/157901
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-08-02 21:17:14 +00:00
Adrian Packel c229d1e25a Clear iframe in SG if student has no submission
When we switch students in SpeedGrader and the new student has no
submission, clear the contents of the submission-holding iframe rather
than merely hiding it. This prevents an issue with per-question quiz
grading (which is intended to retain selection on the selected question
when moving between users) that could occur when selecting a student who
had not yet submitted anything, since the contents of the now-hidden iframe
were receiving events that assumed they were visible.

fixes GRADE-1322

Test plan:
* Have a course with a couple students
* Create a quiz with a few questions (enough that the quiz would not
  all fit on the screen in SpeedGrader)
* Fill out the quiz for several students
* As a teacher, open the quiz in SpeedGrader
  * From the settings menu, enable the "Grade by question" option (this
    should reload the page automatically)
  * When you navigate between students in the following ways, check that
    the currently-focused question remains focused for the new student.
    (That is, if you had (say) question #3 selected before switching
    students, the new student's answer to question #3 should be shown.)
    * From a student who has taken the quiz to another student who has
      taken it
    * From a student who has taken the quiz, to one who has not, then
      back to one who has taken it

Change-Id: I23d14b05441a9ada02b9adb68a4ca95804c7c93a
Reviewed-on: https://gerrit.instructure.com/157995
Reviewed-by: Gary Mei <gmei@instructure.com>
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-08-01 21:58:01 +00:00
Venk Natarajan c2572aaa91 Don't show duplicated prerequisites and requirements.
After duplicating the module, editing any module on the page
takes you to a modal.  This is expected.  However what is not
expected is then clicking on "add prerequisite" or "add
requirement" will result in duplicate stuffs showing.  This
fixes that.

Fixes COMMS-1337

Test Plan:
* Duplicate a module.
* Edit *any* module on the page (particularly the one you just
  made, but the bug showed up on any module)
* Click on "Add prerequisite" and "Add requirement".  Duplicates
  should not appear.

Change-Id: Ibf88d20849d80e1b925a3967b0b8ce086069f4e7
Reviewed-on: https://gerrit.instructure.com/158186
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Tested-by: Jenkins
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
Product-Review: Venk Natarajan <vnatarajan@instructure.com>
2018-07-31 17:18:00 +00:00
Adrian Packel ac974da7e6 Fix moderator grade display error in SG
If a moderator attempts to assign an invalid grade in SpeedGrader and
has not selected a provisional grade prior to doing so, properly clear
the grade field instead of continuing to show the bad grade. (This was
a display bug only; the invalid values were not saved server-side.)

fixes GRADE-1362

Test plan:
* Create a moderated assignment
* As a provisional grader, open the assignment in SpeedGrader
  * Make sure entering valid scores still works
  * Make sure entering invalid scores still reverts the grade input
    to its previous value (or clears if it no previous value)
* As the moderator, open the assignment in SG
  * *Before* selecting a provisional grade or entering a valid value,
    try entering an invalid value and make sure the grade input is
    properly cleared
  * Make sure selecting a provisional grade or entering a valid custom
    value works properly
  * Once you've done either of the above, make sure entering an invalid
    value now causes the grade to revert to the previous valid value

Change-Id: I9ca468ab58162d39597f013610562889b731c52d
Reviewed-on: https://gerrit.instructure.com/157868
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Gary Mei <gmei@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
Tested-by: Jenkins
2018-07-30 22:21:49 +00:00
James Williams c68ad8f930 fix reset multi-factor authentication link
closes #CORE-1482

Change-Id: I2bbdcc78f1d32e5e65da4d221d1e5d9939c8f1fb
Reviewed-on: https://gerrit.instructure.com/158139
Tested-by: Jenkins
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Product-Review: James Williams  <jamesw@instructure.com>
QA-Review: James Williams  <jamesw@instructure.com>
2018-07-27 15:37:27 +00:00
Derek Bender 7aad2bbc8d fix small textarea in speedgrader
fixes: GRADE-1225

test plan:
- speed grader comment box is no longer "small" (aka one line in height)

Change-Id: If8c544c3f8aa6a29c93f2702a868cf3b7d846b7e
Reviewed-on: https://gerrit.instructure.com/158132
Tested-by: Jenkins
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-07-23 16:28:40 +00:00
Adrian Packel e0c61756f6 Hide SG viewed/submitted dates if anonymizing
Hide view/submission dates on submission details page and SpeedGrader if
the assignment should be anonymizing student information.

closes GRADE-1070

Test plan:
* Create an anonymous assignment allowing file-upload submissions
* Logged in as a student (S1):
  * Submit something
* As another student (S2), submit multiple files for the same assignment
  (i.e., submit something, then re-submit and upload something else)
* Logged in as a teacher:
  * Open the assignment in SpeedGrader
    * For S1, the "submitted" and "student viewed at" lines on the right
      side should not appear
    * For S2, the dropdown letting you choose between submissions, which
      previously denoted them using the dates submitted, should now name
      them "Submission 1", "Submission 2" and so forth
    * In both cases, it's okay if the assignment is marked as late or
      missing for a given student (we're not trying to hide that info)
* Logged in as an admin:
  * Open the assignment in SpeedGrader
    * None of the above should apply; i.e., the admin should be able to
      view submission dates as though the assignment weren't anonymous
* Log back in as the teacher:
  * Unmute the assignment
  * For both students, the submitted at/viewed at information should now
    be shown again

Change-Id: I35bb3e6d189fd6f5aca333b6eb4419c209d95090
Reviewed-on: https://gerrit.instructure.com/157540
Tested-by: Jenkins
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-07-23 12:29:28 +00:00
Jared Crystal 810674d62b allow negative values in numeric quiz question
fixes QO-376

test plan:
 - Add a numeric question to a quiz
 - change the question answer type to "Answer with Precision"
 - Change Precision to a value between 1 and 15
 - Type a negative answer into the answer field (or a zero)
 - The negative value should be formatted with the correct
   precision on blur (it should not change to NaN)
 - Students should be able to answer the question correctly

Change-Id: Iabf33557ca4544febe121c74df12837e5a73ed06
Reviewed-on: https://gerrit.instructure.com/156252
Tested-by: Jenkins
Reviewed-by: Mark Grant <mgrant@instructure.com>
QA-Review: Nathan Gbedemah <ngbedemah@instructure.com>
Product-Review: Kevin Dougherty <jdougherty@instructure.com>
2018-07-19 22:37:31 +00:00
Clay Diffrient b58d8029c3 Handle inserting links to existing text in IE 11
closes CORE-1362

Test Plan:
  - In IE 11 with RCE/RCS enabled go to a page
  - Enter in some content to the page
  - Select some content and click the link toolbar button
  - The link should appear on those words.
  - Click that link and have the cursor somewhere within that
    link.
  - Click the link toolbar button again
  - Replace the existing url with a new one
  - The link should update and look the same as it did before.
  - Repeat test in another browser for completeness.

Change-Id: I62079c00526f65fa7ded58a2e6abd5986385759f
Reviewed-on: https://gerrit.instructure.com/157347
Tested-by: Jenkins
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>
2018-07-18 21:31:55 +00:00
Brent Burgoyne d272793f73 don't remove dot from date string when parsing
i could not discover the purpose of the removeUnwantedChars when
parsing date strings, but it is currently causing a bug, and it is
not safe, especially dealing with locale specific date formats.

fixes CORE-1614

test plan:
- change computer date to a day after the 24th of the month
- test with each locale mentioned in CORE-1614
- create a new calendar event
- the date printed below the date picker should match computer date

Change-Id: I3bdefe228776b1c9a0e3ddaa71f2677dd9b5f2f0
Reviewed-on: https://gerrit.instructure.com/157419
Tested-by: Jenkins
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Brent Burgoyne <bburgoyne@instructure.com>
2018-07-18 20:58:48 +00:00
Michael Brewer-Davis 2f83a2eac8 change override handling with no sections
closes OUT-2191

Test plan:
- create a course with no sections
- enable mastery paths in the course
- create a quiz assigned to "Mastery Paths" only
- verify that quiz is saved assigned
  to Mastery Paths only, not Everyone Else as well
- create a discussion topic assigned to
  "Mastery Paths" only
- verify that discussion is saved assigned
  to Mastery Paths only, not Everyone Else as well

Change-Id: I3af0c58f54a6f9a7ee612ab87276984574ef08d0
Reviewed-on: https://gerrit.instructure.com/155222
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Tested-by: Jenkins
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-07-17 19:22:44 +00:00
Ed Schiebel b48d269f73 Add todo dates to module items
closes ADMIN-1229

test plan:
  - have a course with ungraded pages and/or discussions included
    in a module
  > expect the todo date to show up in the modules page like
    the due date would for an assignment

Change-Id: Iab3659dca116c61a4dbc2a68f57b884ea4501900
Reviewed-on: https://gerrit.instructure.com/157517
Reviewed-by: Carl Kibler <ckibler@instructure.com>
Reviewed-by: Dan Minkevitch <dan@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Christi Wruck
Tested-by: Jenkins
2018-07-17 15:47:48 +00:00
Jeremy Neander 7c56419ae6 spec: remove ember-qunit
Change-Id: I6618c974a69a630fb638ab2d4ad47a179c56740b
Reviewed-on: https://gerrit.instructure.com/157259
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
Product-Review: Jeremy Neander <jneander@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
2018-07-13 14:24:41 +00:00
Frank Murphy 2c0eec9c0a Make Points states more explicit, clean up tests
Fixes OUT-2299

Test Plan
- Align a rubric to an assignment.
- Test that you can fill out a new assessment for a student with
  no prior assessment.
- Verify that if you enter an invalid points value, that the text
  for the points when submitted appears as '--'
- Verify that a valid points value is persisted and displayed
  properly.

Change-Id: I8de8bbaf6c66ec3f488fec681d6ae026f350bc75
Reviewed-on: https://gerrit.instructure.com/156417
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Augusto Callejas <acallejas@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-07-12 17:30:31 +00:00
Adrian Packel d021972901 Disallow invalid values in provisional grades
Insist that provisional grades must have a valid non-empty score to be
saved, just as non-provisional grades must. Similarly, ensure that an
existing valid provisional grade cannot be replaced with an empty value.
(In both cases the grade should silently revert back to its previous
value, or nothing if no grade was previously entered.)

fixes GRADE-1279

Test plan:

(Note that, while entering invalid grades, you may see an "Oops! The
last request didn't work out" flash error message; this is because we're
actually handling bad values on the back-end as errors now instead of
silently reverting them. The messages will only appear in development
and otherwise shouldn't affect anything.)

* Set up a moderated assignment
* Open it in SG as a provisional grader
  * Before issuing a real grade, try to enter some invalid values, like
    "asdf" or "EX" (invalid because a provisional grader cannot excuse)
    * The grade field should revert to its previous (empty) value
    * Check that a provisional grade object has *not* been created as a
      result of the invalid values (you can do so using the Rails
      console or by opening the assignment in SG as a moderator and
      checking the grades in the provisional grade selector)
  * As the same grader, make sure you can enter a valid grade
    * If you have entered a valid grade at least once, entering an
      invalid grade should revert to the last valid value
* Open the assignment in SG as a moderator
  * Check that you can excuse the assignment by grading as "EX"
  * Check for the following behavior with respect to the provisional
    grade selector:
    * If you enter an invalid value, the grade field should revert to
      the previously-selected value, whether it was your own grade
      ("Custom") or a provisional grade from someone else
    * Similarly, an invalid value should not change the selection of
      the provisional grade selector
    * Trying to enter a valid value should work as before, and select
      the "Custom" radio button if not already selected
* Finally, Create a non-moderated assignment, open it in SG, and check
  that it handles valid/invalid grades properly as before

Change-Id: I33fd9450ebea4f1f2d1cae2dd0a4c0c70d6e65c8
Reviewed-on: https://gerrit.instructure.com/156351
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-07-11 19:22:10 +00:00
Spencer Olson c5ee434ff5 make anonymous grading checks consider muted status
Unmuting an anonymous assignment will now cause that assignment to show
in the UI as though it is not anonymous. In addition, posting grades for
a moderated anonymous assignment will now cause that assignment to show
in the UI as though it is not anonymous.

closes GRADE-1310
closes GRADE-1313

Test Plan:
1. Verify unmuting an anonymous assignment causes that assignment to no
   longer be anonymized in the UI. You can do this by spot checking
   gradebook (old/new/individual) and SpeedGrader. In addition,
   re-muting an unmuted anonymous assignment should cause the assignment
   to become anonymized in the UI.
2. Verify posting grades for a moderated, anonymous assignment causes
   that assignment to no longer be anonymized in the UI (even if the
   assignment is muted).

Change-Id: I113c61b4e7fa0eb8909448d8ba7cffb22600e17c
Reviewed-on: https://gerrit.instructure.com/156151
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Tested-by: Jenkins
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-07-10 16:24:26 +00:00
James Williams 3fcd5caa14 add welsh locale
test plan:
* everything except for the calendar (for now)
 should be translated

closes #CORE-1555

Change-Id: Ia13d7961e56dbe8eb618a208185a58ef0d2125cf
Reviewed-on: https://gerrit.instructure.com/155809
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
QA-Review: Rohan Cheeniyil <rcheeniyil@instructure.com>
Tested-by: Jenkins
Product-Review: James Williams  <jamesw@instructure.com>
2018-07-09 16:29:15 +00:00
Gary Mei 9c228a65e1 make anonymous comment author name consistent
For student comments on anonymous assignments, the comment author
name is now the same as the student name in the select dropdown.
The format of the student name is `Student ${number}`.

closes GRADE-1284

Test Plan
 - Create an anonymous assignment and assign it to at least two
   students.
 - As each of the students, submit some work and some comments.
 - As the teacher, open SpeedGrader for the assignment.
 - The author name of the comments should be the same as the author
   name in the select dropdown in the top right.

Change-Id: I17545fdb37792158f93a2029e38c59a17a13e039
Reviewed-on: https://gerrit.instructure.com/155668
Tested-by: Jenkins
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-07-06 20:20:07 +00:00
Gary Mei a91002e0bd fix import grade of zero from ungraded should work
A student not graded for an assignment should be able to be graded
with a zero during gradebook import if the imported CSV contains a
zero in that column. Previously, the import would think there was
no change and the student would stay ungraded.

fixes GRADE-1184

Test Plan
 - Create an assignment.
 - Make sure not to grade a student for that assignment.
 - Export the gradebook.
 - Edit the CSV so that the assignment name is sufficiently malformed
   such that the import process later will ask you to match an
   assignment to an existing one.
 - Still editing the CSV, give the student a score of zero.
 - Import the CSV to the gradebook.
 - Match the malformed assignment name to the actual assignment.
 - Verify that the ungraded student now has a grade of zero after
   importing and matching. Save the changes.
 - Verify in the Gradebook that the student now has a grade of zero.

Change-Id: I2ef79dbc2b66e9f1a41fce2a5ffc59dbceadae26
Reviewed-on: https://gerrit.instructure.com/155475
Tested-by: Jenkins
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-07-05 14:04:00 +00:00
Brent Burgoyne 58fdab7725 wrap tinymce plugin title for translation
refs CORE-1387

test plan
- test canvas with LOLCALIZE=true
- links, equalla, and record plugin should have tranlated strings
  when mouse is over the icon

Change-Id: I99fc0f653960a0bc7407de5750161ca2e8a0c462
Reviewed-on: https://gerrit.instructure.com/154892
Tested-by: Jenkins
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: Brent Burgoyne <bburgoyne@instructure.com>
Product-Review: Brent Burgoyne <bburgoyne@instructure.com>
2018-06-29 21:12:28 +00:00
Adrian Packel 18f4c5cde1 Re-add DocViewer resizing and min-height
The previous fixes to SpeedGrader scroll bars overreached a little bit
and adversely affected DocViewer frames shown outside of SpeedGrader.
Revert the changes that affected the DocViewer frame globally, but
don't set a min-height requirement when we open the frame from within
SpeedGrader.

fixes GRADE-1316

Test plan:
- SpeedGrader
  - View a document and make sure the DocViewer frame has only one
    vertical scroll bar (which should scroll over the document in
    question)

- Viewing as part of an assignment
  - Upload a file (such as a PDF) to the course
  - Create/edit an assignment and, as part of the description, insert
    a link to the file you uploaded (using the "Files" tab under "Insert
    Content into the Page" on the right-hand side of the screen)
  - Save and view the assignment
  - In the description, click the magnifying glass icon to the right of
    the link you just inserted
  - The resulting preview should once again be vertically resizable and
    occupy a reasonable height (800px) initially

Change-Id: I1f248d67bfdae9b9af9d55176eed9000b611313d
Reviewed-on: https://gerrit.instructure.com/155411
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-29 19:58:59 +00:00
Adrian Packel 41f0e2cf84 Use index-based for loop instead of for-in in SG
Using for-in on an empty array (from test data) was pulling in Ember
properties like firstObject for some reason, which was causing a spec
failure when we tried to access those objects in the array. Stop using
for-in so that the test stops failing.

Test plan:
- Specs pass

Change-Id: If9ff1b6785b4e1f113fe0195051696c404e8e75e
Reviewed-on: https://gerrit.instructure.com/155648
Tested-by: Jenkins
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Adrian Packel <apackel@instructure.com>
2018-06-29 19:43:05 +00:00
Adrian Packel edfb93f901 Remove specious outcome extra credit alerts
"Extra credit not possible on outcome" alerts were incorrectly appearing
when navigating from a student to another student when both students
were graded using a rubric with an outcome-based criterion and the new
student had fewer points on the criterion than the old student.  This
happened regardless of whether the relevant feature flag was enabled,
and was the result of comparing data in the rubric summary and the
editable form.  Only perform the relevant comparison when the grader
has entered new scores, and not when we are switching between students.

fixes GRADE-1198

Test plan:

Setup:
- Have a course with some students
- Define an outcome for the course
- Set up a rubric with a criterion mapped to the outcome
- As a grader, open SpeedGrader for the assignment and assess some
  students using the rubric

With the feature flag "Outcome Extra Credit" enabled:
- Attempt to enter a score higher than the outcome-based criterion's
  maximum allowed points and save
- Saving the assessment should succeed and keep the score you entered

With the flag disabled:
- Attempt to enter a score higher than the outcome-based criterion's
  maximum allowed points and save
- Saving the assessment should produce an "extra credit not possible"
  alert and force the score to the maximum allowed points

Testing that specious alerts don't show up:
- Assess students such that one student has a score on the criterion
  that is higher than a student immediately next to them in the list
  of students (but both are at/below the maximum points)
- Navigating back and forth between the two students should not produce
  any "extra credit not possible" alerts
- Similarly, editing one student's assessment and switching students
  without saving your changes should not produce errors
  - Note that currently we do not save any changes made when navigating
    this way (this is pre-existing behavior)

Change-Id: I412f743624268850e757781cbc80641d48227c77
Reviewed-on: https://gerrit.instructure.com/155287
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Tested-by: Jenkins
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-06-27 18:49:11 +00:00
Jeremy Neander 44ead80d5d spec: clean authentication providers spec more
Change-Id: Ie585dd244ded495c5865cedc4dd12d2ec0359df8
Reviewed-on: https://gerrit.instructure.com/155391
Tested-by: Jenkins
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Product-Review: Jeremy Neander <jneander@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
2018-06-27 15:07:19 +00:00
Jeremy Neander 47444752c0 spec: fix some speedgrader spec pollution
test plan:
 * Verify Jenkins passes

Change-Id: I1632755f809383a5ebe23ba0750576f5f68535d9
Reviewed-on: https://gerrit.instructure.com/155261
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Product-Review: Jeremy Neander <jneander@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
2018-06-26 22:38:05 +00:00
Ryan Shaw 45ec8669a6 Remove vendor tinymce light theme
I don’t think we use this anymore. I think we just get tinymce-lightskin
from npm. So I think it is safe to delete all these files.

I think these just leave a red herring because I was trying to fix a bug
that needed changing a tinymce style and I tracked it down to one of 
these files just to find out that’s not where it is coming from

Test plan:
* try to find any place that was still using this
* tests should pass
* tinymce editor with both RCE turned on and off should look the same
  as it did before

Change-Id: I1fe20a8607338335b241f412f672c6bc73d29072
Reviewed-on: https://gerrit.instructure.com/154718
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Tested-by: Jenkins
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-06-26 20:09:49 +00:00
Clay Diffrient 1673c05daa stub out reloading in speedgrader
This extracts out the window.location.reload calls to a
helper function that can be stubbed.  It goes ahead and
stubs calls that were occurring in #handleGradeSubmit
because it seems that for the master build, this is what
keeps forcing the page to reload and the specs to run
forever

refs CORE-1563

Test Plan:
  - Automated tests pass
  - Speedgrader isn't busted

Change-Id: I1ee79f98cd7e2b8ac8a546b59ffaa0a3fed05018
Reviewed-on: https://gerrit.instructure.com/155031
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Tested-by: Jenkins
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>
QA-Review: Clay Diffrient <cdiffrient@instructure.com>
2018-06-25 19:35:24 +00:00
Ryan Shaw 8f583f059b allow `longdesc` attribute in RCE editor for a11y
Fixes: CORE-1556

* go to an rich content editor
* add this markup with a “longdesc” attribute to the page
  <img 
    src=“https://placekitten.com/200/300” 
    longdesc=“http://www.example.com/“ 
  />
* save it
* reload the page
* make sure the longdesc attribute is still there

Change-Id: I8c57668e3c257ae186a7ea94c40dceb87835ca33
Reviewed-on: https://gerrit.instructure.com/155020
Tested-by: Jenkins
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
QA-Review: Nathan Rogowski <nathan@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
2018-06-25 19:33:43 +00:00
Adrian Packel 5e184c9982 Cull SpeedGrader scroll bars/resizing
fixes GRADE-1115

Test plan:

DocViewer caveat:
The DocViewer frame--which is not directly controlled by us--will
produce a horizontal scroll bar if resized to a small enough width,
even though it also zooms the document out to compensate. This isn't
something we have control over from SG, so it's not an issue for the
purposes of this change.

Viewing documents:
- Create an assignment with online submissions
- As a student, submit a multi-page PDF (or a similar longish
  document) for the assignment
- As a teacher, open SpeedGrader for the assignment
- The DocViewer frame should *not* be resizeable independently
  from the rest of the page.
- Check that there are no superfluous scrollbars on the page.
  Scrollbars should *only* be present for the following:
  - On the left side, you should be able to scroll vertically
    through the document assuming it is long enough
  - If you resize the window to a small enough height that the
    contents of the right side are not all visible, a vertical
    scroll bar should appear
  - If you resize the window to a small enough width that not
    everything is visible, a horizontal scroll bar should appear
    to let you scroll the window from left to right
  - (Note that, per the caveat above, a horizontal scroll bar
    specific to the DocViewer frame may also appear)
  - Changing the sizes of the left/right divs using the divider,
    or clicking on the divider to hide the right side entirely,
    should behave sanely with respect to scroll bars

Grading with a rubric:
  - Create an assignment with a rubric
    - Give at least one criterion several possible "ratings" so it extends
      far out horizontally when edited
  - Open the assignment in SpeedGrader
  - Click the "View Rubric" button and ensure that a horizontal scroll
    bar appears if the rubric is too wide to show in the existing width
    (and does not appear otherwise)

Change-Id: I25930c4100827f6a29bca2f220a4fc266a069e18
Reviewed-on: https://gerrit.instructure.com/154763
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Gary Mei <gmei@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-25 17:54:53 +00:00
Derek Bender 6725c76d8f tweak speed grader comment visiblity
closes: GRADE-1266

Test Plan:

enroll two students and two TAs and the teacher is the final grader (it
shouldn't matter if the final grader is a TA or a teacher, in fact feel
free to rotate them for more possibilities). If you're short on time the
following could be done on one assignment and for each test case toggle the
settings on and off, but then it would be difficult to quickly pull of the
correct configuration, if problems arise.

The titles of each feature are how they are found in the Assignment form.
This can cause some confusion due to some rules being enabling or disabling
a phrase with a 'not' present so be careful!

/------------+---------------------------+-----------+-----------------------+---------------------+-----------------------\
| assignment | anonymous (graders cannot | moderated | graders can view      | graders cannot view | final grader can view |
|            | view student names)       | grading   | each other's comments | each other's names  | other grader names    |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| I (basic)  |                           |           |                       |                     |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| II         |                           | on        | on                    |                     | on                    |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| III        |                           | on        | on                    |                     |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| IV         |                           | on        |                       |                     |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| V          | on                        | on        | on                    | on                  | on                    |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VI         | on                        | on        | on                    | on                  |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VII        | on                        | on        | on                    |                     |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| VIII       | on                        | on        |                       |                     |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
| IX         | on                        |           |                       |                     |                       |
+------------+---------------------------+-----------+-----------------------+---------------------+-----------------------+
Note: if a cell is empty, it means `off`,

For assignments with Moderated Grading enabled the `Number of graders` will
always be `2` (the final grader makes three enrollments we'll use for
Speed Grader)

for each assignment do the following:
have the first student (Student A) submit their homework
- As the first TA (TA1), create a published comment and draft comment on
  Student A's submission
- As the second TA (TA2), create a published comment and draft comment on
  Student A's submission
- As the final grader (the teacher), create a published comment and draft
  comment on Student A's submission

For the follow instructions, negatives are presented in uppercase (`CANNOT`)
for enhanced clarity. Ensure for each grader (unless final grader is
specified) in each assignment referenced via the parens:

(I)
  1. can view student names
  2. can view each other's comments
(II)
  1. can view student names
  2. can view each other's comments
  3. final graders can view other graders' names
(III)
  1. can view student names
  2. can view each other's comments
  3. final grader CANNOT view other graders' names
(IV)
  1. can view student names
  2. CANNOT view each other's comments
  3. final grader can view each others' comments
(V)
  1. CANNOT view student names
  2. can view each other's comments
  3. CANNOT view each other's names
  4. final grader view other graders' names
(VI)
  1. CANNOT view student names
  2. can view each other's comments
  3. CANNOT each other's names
  4. final grader CANNOT view other graders' names
(VII)
  1. CANNOT view student names
  2. can view each other's comments
  3. can view each other's names
  4. final grader CANNOT view other graders' names
(VIII)
  1. CANNOT view student names
  2. CANNOT each other's comments
  3. final grader can view each others' comments
(IX)
  1. CANNOT view student names

Change-Id: I3e9a8787f04cf03a38ea651aa85b3eaa98f41f9c
Reviewed-on: https://gerrit.instructure.com/154391
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-06-24 20:37:22 +00:00
Jeremy Neander 7d9ed3cf6c move context_module imports
test plan:
 * Verify Jenkins passes
 * Verify context modules works within:
    * app/jsx/bundles/context_modules.js
    * app/jsx/bundles/prerequisites_lookup.js
    * app/jsx/bundles/wiki_page_show.js

Change-Id: Iaa7cc3f0f16a240be31277797b842f6eabbf66fb
Reviewed-on: https://gerrit.instructure.com/154896
Tested-by: Jenkins
QA-Review: Venk Natarajan <vnatarajan@instructure.com>
Product-Review: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Venk Natarajan <vnatarajan@instructure.com>
2018-06-22 22:32:28 +00:00
Ryan Shaw 895c64647f spec: fix error that keeps polluting sentry in js build
in our specs, this code results in a bunch of errors that say:

Error
Syntax error, unrecognized expression: #%7B%22anonymous_id%22%3A%2200000%22%7D
/base/spec/javascripts/webpack_spec_index.js in Function.mOY9BNujNR.Sizzle.error at line 508435:8
/base/spec/javascripts/webpack_spec_index.js in Function.mOY9BNujNR.Sizzle.filter at line 508421:12
/base/spec/javascripts/webpack_spec_index.js in Sizzle at line 508211:12
/base/spec/javascripts/webpack_spec_index.js in Function.Sizzle [as find] at line 509343:11
/base/spec/javascripts/webpack_spec_index.js in init.find at line 509599:11
/base/spec/javascripts/webpack_spec_index.js in new init at line 504355:38
/base/spec/javascripts/webpack_spec_index.js in jQuery at line 504195:10
/base/spec/javascripts/webpack_spec_index.js at line 146640:477615

By wrapping this in a try/catch it will proceed even if it is using an
Invalid selector


Test plan:
* you should not see that ^ class of JS errors in the js master build

Change-Id: Ie42e5b1a8db8990adb8a0f570ec72887a51d3df3
Reviewed-on: https://gerrit.instructure.com/154745
Tested-by: Jenkins
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-06-22 19:30:09 +00:00
Derek Bender f8c59086d8 fix submission download in speedgrader
closes: GRADE-1290

test plan:
- create and assignment
- upload a file for a student
- download the file from speedgrader
- the file successfully downloads
- this should also work for anonymous assignments

Change-Id: Ib094ed116d71e2f333154023b73b2f97cee6989e
Reviewed-on: https://gerrit.instructure.com/154606
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-06-21 03:39:13 +00:00
Jeremy Neander 69588c049d unescape section names in gradebook section filter
fixes GRADE-1211

test plan:
 1. Select or create a Course
 2. Create a section in the Course
    * Use any or all of these characters:
    * ', ", /, &, `, =, <, >
 3. Visit New Gradebook
 4. Turn on the Section Filter
    * View > Filters > Sections
 5. Expand the Sections Filter
 6. Verify the section name appears as it was named

Change-Id: I7f23bdd37febadd37652d9a1e9beb40e3059469e
Reviewed-on: https://gerrit.instructure.com/154489
Tested-by: Jenkins
Reviewed-by: Gary Mei <gmei@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-06-20 19:09:47 +00:00
Frank Murphy 0fac28d930 Focus on container when opening full rubric.
Fixes OUT-2302

Test Plan:
- Using Safari / VO / High Sierra
- Open speedgrader with VO. Navigate to grading pane.
- Activate the "View Rubric" button.
- Verify that the focus is immediately changed to the rubric, and you
  can easily enter the rubric and start grading.
- Duplicate above steps for assessing the rubric on the student
  individual submission page.

Change-Id: I4ab54214c4551e21e6a5f7655a886236280ed703
Reviewed-on: https://gerrit.instructure.com/153881
Tested-by: Jenkins
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Augusto Callejas <acallejas@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-19 04:58:51 +00:00
Jeremy Neander 297e8cb826 restore old slickgrid method
fixes OUT-2306

test plan:
 - enable LMGB
 - have some outcome results (ideally multiple
   students and outcomes)
 - click the dropdown for 'Course Average' and
   select a different method
 - scores should be properly replaced in the main 
   header row, not the outcome title row
 - in course settings enable new gradebook
   (or alternatively, disable it if you were
    testing with it already enabled)
 - once course settings update (may take a few minutes
   due to caching), repeat test plan

Change-Id: I622959bcd2636f73ffe258253f46f1740cdf01b4
Reviewed-on: https://gerrit.instructure.com/154128
Reviewed-by: Matt Berns <mberns@instructure.com>
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Tested-by: Jenkins
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-18 23:51:05 +00:00
Gary Mei 0c0db55ca9 fix disabled pass/fail select being interactive
In SpeedGrader, an assignment in a closed grading period should not
be gradeable, so the select menu should not be openable.

fixes GRADE-1210

Test Plan
 - Create a pass/fail assignment, set it due in the past.
 - Change the grading period that it was set in to be closed.
 - Navigate to the assignment and open SpeedGrader for it.
 - Verify that you are unable to set a grade for the assignment.

Change-Id: I35ae261638e7f737d1c99b40dadaf06bb50e46e3
Reviewed-on: https://gerrit.instructure.com/153740
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-18 18:17:23 +00:00
Augusto Callejas 9ffb15d8e0 Display billboard when first customizing ratings
closes OUT-2220

test plan:
  - enable non-scoring rubrics feature flag if not already
  - open the account rubrics page
  - select the "Learning Mastery" tab
  - confirm a billboard is displayed matching the mockup
  - if previous custom ratings were defined, you can clear them out
    in the rails console:
    > OutcomeProficiency.destroy_all
  - after saving some custom ratings, confirm the billboard
    does not show up after loading the page
  - confirm that when using VO/SR, that focus is set on
    the first mastery checkbox after dismissing the billboard

Change-Id: Ia00ef7ec6bac771d502c92cbc0ffc088a0161816
Reviewed-on: https://gerrit.instructure.com/153541
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Michael Brewer-Davis <mbd@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-14 15:33:40 +00:00
Derek Bender 2cb76fb2f9 add anonymous commenting to speed grader
closes: GRADE-1126

test plan:
- create an anonymously graded assignment
- create a submissions
- in speedgrader, create a comment
- create a draft comment
- delete both comments
- create a draft comment and then publish it

- toggle off anonymous grading for the assignment
- in speedgrader, create a comment
- create a draft comment
- delete both comments
- create a draft comment and then publish it

Change-Id: I5273a0c62bd113713baa833c0a8f806943392d6e
Reviewed-on: https://gerrit.instructure.com/148897
Tested-by: Jenkins
Reviewed-by: Neil Gupta <ngupta@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-13 21:37:28 +00:00
Ed Schiebel 7123f77d68 Add screenreader alerts when selecting external tools
when selecting/unseleting external tools for an assignent submission,
tell the SR user what's happening.

closes ADMIN-1076

test plan:
  - go to a course's settings page, apps tab. ensure an external tool
    or 2 are added 
    (see https://lti-tool-provider-example.herokuapp.com/xml_builder
    for a handy list).
  - ensure a SR is enabled
  - create a new assignment, set its submission type to "external tool"
  - click the "Find" button
  - select and unselect tools from the list
  > expect the SR to tell you what you've just done

Change-Id: Ice09d79ebe64d3f4779a1b7f75e303fe1fd9e387
Reviewed-on: https://gerrit.instructure.com/153435
Tested-by: Jenkins
Reviewed-by: Carl Kibler <ckibler@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Ed Schiebel <eschiebel@instructure.com>
2018-06-13 18:16:19 +00:00
Frank Murphy 940c5029e0 Warn users when extra credit cannot be applied.
Fixes OUT-2285

Test Plan:
- Create a rubric with an outcome and non-outcome criterion.
- Assess that rubric for a student:
  - Verify that you can enter more than the maximum possible points for
    a non-outcome criterion, and no error is shown.
  - Verify that with the outcome criterion, if you enter more points
    than are possible, an error is shown.
  - Verify that if you enter invalid points in either field, an error is
    shown.
- Set the "Allow Outcome Extra Credit" field to "Allow" for the root
  account.
- Enable the feature flag for the course.
- Verify that no errors are shown when extra credit is given, but that
  invalid points errors still work.

Change-Id: I83581f153227295125d8782ca678af893769932c
Reviewed-on: https://gerrit.instructure.com/153191
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Reviewed-by: Matt Berns <mberns@instructure.com>
QA-Review: Augusto Callejas <acallejas@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-13 18:11:02 +00:00
Jeremy Stanley 9b9a47af4e fix blueprint lock initialization for new module items
test plan:
 - in a blueprint course, create a new module item
 - without reloading the page, ensure you can lock and unlock it

fixes ADMIN-1080

Change-Id: Ibb320274d6832dc6759040801bb8c6930e036897
Reviewed-on: https://gerrit.instructure.com/153567
Tested-by: Jenkins
Reviewed-by: Carl Kibler <ckibler@instructure.com>
Reviewed-by: James Williams  <jamesw@instructure.com>
QA-Review: Luke Kingsley <lkingsley@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2018-06-13 17:04:30 +00:00
Neil Gupta 6a659fbaa8 stop using anonymous moderated marking feature flag
fixes GRADE-976

test plan:
* Make sure the AMM flag is off
* All AMM features should be visible and work
* The Anonymous Marking and Moderated feature flags should be visible
* Toggling the AMM feature flag should do nothing

Change-Id: Ie0c52c23748389c6f5df5b85e8580bdf474c0a52
Reviewed-on: https://gerrit.instructure.com/152067
Reviewed-by: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-06-12 20:58:47 +00:00
Frank Murphy 3ceaed757f Use Rubric component for summary
Fixes OUT-2268

Test Plan:
- Open speedgrader, navigate to an assessment of a free-form rubric.
  Verify:
  - the new UI is present before clicking "view rubric"
  - the summary rubric only has two columns
  - each criteria lists points assessed out of points possible right after the
    comments.
- Now go to an assignment with a points-based rubric. Verify:
  - the spiky UI is present
  - the summary rubric only has two columns
  - each criteria lists the points assessment and comments right after
    the description of the rating.
- Navigate to a student without an assessment using the top right arrow
  keys
- Verify there is no summary rubric shown
- Navigate back to the student with an assessment, verify the summary is
  shown again.

Change-Id: Idae819264c507e42d67a6731367d2ddef5cd176d
Reviewed-on: https://gerrit.instructure.com/152226
Tested-by: Jenkins
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Matt Berns <mberns@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-11 21:36:34 +00:00
Venk Natarajan 16b1fc9291 Add a spinner for module duplication.
Also tidies up some a11y brokenness.

Closes COMMS-254

Test Plan:
* Have a course with 5-6 modules in it.
* Make sure you have module duplication enabled.
* Duplicate one of them.
* Try this both from the modules page, and also from
  the course home page when it's set to be the modules
  page.
* There will now be a spinner present that goes away once
  the new module has rendered.
* Make sure screenreaders are happy.

Change-Id: I7155c674a4c31b1650598d7b12631037b0355661
Reviewed-on: https://gerrit.instructure.com/152403
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Product-Review: Matt Goodwin <mattg@instructure.com>
QA-Review: Landon Gilbert-Bland <lbland@instructure.com>
2018-06-07 19:54:43 +00:00
Matthew Berns 507c9ed048 apply custom rating colors to rubrics
closes OUT-2248

test plan:
  - create an outcome with a default scale of 5/3/0
  - create a rubric with several criteria, including the outcome,
    and attach it to an assignment
  - go to speedgrader and assess the rubric, providing a varing
    level of scores
  - enable the non-scoring rubrics feature flag (note that due
    to caching you may need to wait for the feature to be truly
    enabled)
  - default colors should properly show on speedgrader, the
    submission show page, and student grade summary page
  - follow the instructions on g/150095 to create outcome proficiency
    ratings using the API in the course's account:
    * description: great, points: 5, mastery: false, color: 00ff00
    * description: good, points: 3, mastery: true, color: 0000ff
    * description: boo, points: 0, mastery: false, color: ff0000
  - the custom created colors should now be showing on speedgrader,
    the submission show page, and student grade summary page

Change-Id: I0dbe7196871950aa9786978c2f97ec6279823583
Reviewed-on: https://gerrit.instructure.com/152638
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Frank Murphy <fmurphy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-07 19:40:58 +00:00
Derek Bender 59922920f9 add anonymous submission scoring in speed grader
closes: GRADE-1125

test plan:
- enable the anonymous moderated marking feature flag
- create an anonymously graded assignment
- create a text submission for this assignment
- in speedgrader, score the submission
- the score should update on the page (not revert back!)
- the response object should not contain user_id (including
  in the submission_history)

- toggle off the anonymoud grading for the assignment
- in speedgrader, rescore the submission
- the score should update
- the response object should not contain anonymous_id anywhere

Change-Id: I2911d5e09a25be4a7ab58404eed209002b6cfbce
Reviewed-on: https://gerrit.instructure.com/148896
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-06 20:12:13 +00:00
Frank Murphy 4b3247fb56 Fix blank comments
References OUT-2251

Test Plan:
- Open speed grader / dev tools.
- Perform a points assessment, leave no comments.
- Confirm that no exception was thrown.
- Verify that the summary doesn't have "null" in the comments section.
- Add some comments to a criterion on that points assessment. Click the
  "update comments" button.
- Re-open the comments dialog for the same criterion. Verify that the
  comment dialog can be blanked out.

Change-Id: I516afcacf070418df8f1690df3ff1b47c8fb18f9
Reviewed-on: https://gerrit.instructure.com/152660
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Michael Brewer-Davis <mbd@instructure.com>
Product-Review: Michael Brewer-Davis <mbd@instructure.com>
2018-06-06 19:24:50 +00:00
Augusto Callejas a726f087f6 Display and persist account proficiency ratings
closes OUT-2252

test plan:
  - enable non-scoring rubrics feature flag
  - load the account rubrics page
  - click on the learning mastery tab
  - make changes to the default ratings:
    * add ratings
    * change existing descriptions, points, etc.
    * remove ratings
  - save changes by clicking "Save Learning Mastery" button
  - click on the account rubrics tab
  - click back on the learning mastery tab
  - confirm the latest version to the ratings is displayed
  - reload the page
  - click on the learning mastery tab
  - confirm the latest version of the ratings is displayed

Change-Id: Icd717bc18b84044d0f780e5cec97d2df9eaee615
Reviewed-on: https://gerrit.instructure.com/152427
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-06 17:52:17 +00:00
Michael Brewer-Davis bd3e17836c show rubric in assessing view correctly
closes OUT-2270

Test plan:
- create an course with two students,
  one teacher, and one ta
- remove permission "edit grades" from TA
  role
- create an assignment with a rubric
- submit the assignment as student 1
- assign student 2 to peer review
  student 1's submission
- verify that on the submission details
  page, student 1 sees non-editable rubric
- verify that on submission details page,
  student 2 sees an editable rubric
- verify that on submission details page,
  teacher sees an editable rubric
- verify that in speed grader, teacher
  sees an editable rubric
- verify that in speed grader, TA
  sees a non-editable rubric

Change-Id: I0e117440ea1ca4e6cee176a577e841f87d677ed9
Reviewed-on: https://gerrit.instructure.com/152448
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Tested-by: Jenkins
QA-Review: Augusto Callejas <acallejas@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-06 17:40:17 +00:00
Frank Murphy f13a030270 Persist rubric assessment.
Fixes OUT-2251

Test Plan:
- You will need assignments with both free-form and points rubrics.
- Both rubrics should have multiple criteria.
- You will need students who have not been graded yet for those
  assignments.
- In both speedgrader and the assignment page:
    - Verify that points rubric assessemnts persist.
      - Make sure no prior assessment exists.
      - Check that points can be set and persist.
      - Check that comments can be set and persist for the right
        criterion.
      - Verify that an existing assessment can be edited.
    - Check that free-form rubrics
      - Make sure no prior assessment exists.
      - Check that points can be set and persist.
      - Check that comments can be set and persist for the right
        criterion.
      - Enable the "save comments for later" field and verify that the
        comments from that assessment can be used for that criterion in
        a different assessment.
      - Verify that an existing assessment can be edited.

Change-Id: Ie25a83ef5a7af46caeeda514ca3ef87c7249d808
Reviewed-on: https://gerrit.instructure.com/151811
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
QA-Review: Michael Brewer-Davis <mbd@instructure.com>
Product-Review: Michael Brewer-Davis <mbd@instructure.com>
2018-06-05 21:17:17 +00:00
Adrian Packel 94a8105cfa Add provisional grade selector in SG
Add a component in SpeedGrader to allow the moderator to select among
provisional grades or enter a custom grade. Update the grade input to
match the selected grade and indicate which grader is responsible.

closes GRADE-1069

Test plan:

NOTE: you only need to test this with points-based assignments at the
moment. Other grading types will probably work but the display will be
screwy. Those will be addressed more fully in a future ticket.

  * Turn on Anonymous Moderated Marking if the feature flag still exists
  * Have a course with multiple teachers and students
  * Create a moderated assignment and designate one of the teachers to
    be the final grader.
  * [If the old moderation page still exists when you read this]
    On the existing moderation page, add all the students to the
    assignment's moderation set.
  * As one or more non-final-grader teachers, hand out some grades for
    the assignment in SpeedGrader (no need to go through the moderation
    page; you can just use the SpeedGrader link on the assignment page).
    Make sure there is at least one student who does *not* receive any
    provisional grades for the assignment.
  * As the final grader, open the assignment in SpeedGrader.
  * For any student who HAS received provisional grades, there should
    be a "Show/Hide Details" link that toggles a set of radio buttons
    showing the existing provisional grades.
  * Do some testing with these and make sure they adhere to the
    behavior described in the next section.
  * For the student who has NOT received provisional grades, the grade
    selector should not appear, but you should be able to assign a
    grade and submit comments as usual.

Provisional grade selector behavior:
  * The top radio button, corresponding to the grade assigned by the
    moderator, should always be labeled "Custom." Below that, one
    radio button should appear for each provisional grade handed out,
    showing the grader and the assigned grade.
  * For assignments where grader names are visible to the final grader,
    the each button's label should show that grader's name.
  * For assignments where grader names are NOT visible to the final
    grader, the labels should be "Grader 1", "Grader 2" and so on,
    listed in that order.
  * When you select a radio button other than "Custom", the value
    associated with that button should appear in the grade text input
    and the selected grader should be shown to the right of the input.
  * When you select the "Custom" button, the last custom value you
    entered should appear in the text input, and "Custom" should appear
    as the grader name.
  * If you directly enter a value in the grade input and tab out,
    the "Custom" button should be selected (and the label changed).
  * Your selections should persist in moving back/forward between
    students and refreshing the page.

Change-Id: I3696f9e0edbbe1aa81aa85fa6e51e229fc2136b5
Reviewed-on: https://gerrit.instructure.com/151472
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-05 18:03:05 +00:00
Adrian Packel f7a7974c1e Allow SG rubric scoring for anonymous assignments
Allow graders to score rubrics for anonymous assignments in SpeedGrader,
using the anonymous ID in place of the user ID to communicate.

closes GRADE-1127

Test plan:
- Have a course with some teachers and students
- (if the Anonymous Moderated Marking feature flag still exists by
  the time you read this, enable it)
- Create an assignment with anonymous grading enabled, and a second
  assignment with anonymous grading disabled
- Attach a rubric to each assignment (doesn't have to be the same
  rubric)
- Open SpeedGrader and evaluate some students vis-à-vis the rubric
- Ensure that the above works correctly for both assignments, and that
  your updates are preserved on reloading the page

Change-Id: I18e467d04b333b5c30f21e43791178c3271ca59b
Reviewed-on: https://gerrit.instructure.com/152276
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-06-05 17:04:18 +00:00
Ryan Shaw e415eaa961 Use yarn workspaces
Run `script/nuke_node.sh` to clean everything up
Run `yarn install` it should install everything for everything
Run `yarn build` and `yarn test` they should work exactly as before

Change-Id: I11a27ff2d705c6cbb3b3f9029dd8b32138706146
Reviewed-on: https://gerrit.instructure.com/151356
Tested-by: Jenkins
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-06-04 20:02:02 +00:00
Ryan Shaw 669d3c8c3b instUI5 upgrade: random stuff
refs: CORE-1437

This commit just upgrades these components to use instUI 5 instead of
getting them from ui-core in instUI 4.

It is mostly just path renaming.

Test plan:
* verify these components still work as they used to and tests pass

Change-Id: I4735d82855b0e78f3d03ec49ffc0487c60e65bb6
Reviewed-on: https://gerrit.instructure.com/151787
Tested-by: Jenkins
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-05-30 21:40:47 +00:00
Derek Bender b57cb8cbae add anonymous provisional grades controller
When loading or selecting a student in SpeedGrader, an ajax call is made
to obtain the provisional grade status for that student. This provides a
way to perform this request anonymously.

closes GRADE-1128

test plan
- given an anonymously graded and moderated assignment
- given some students assigned to said assignment
- when visiting speed grader
- then the page loads provisional grades endpoint which can be viewed in
  the dev tools on the network tab. The URL looks like:

  /api/v1/courses/1/assignments/1/anonymous_provisional_grades/status

Change-Id: Ib3d3a7b58fc8fa044d240dee0c1bef08b80384d0
Reviewed-on: https://gerrit.instructure.com/151607
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-05-30 17:40:14 +00:00
Ryan Shaw 63990e024c Use ui-icons instead of inst-icons for icon font
closes: CORE-1434

Test plan:
* all the icons should look the same as they did before
* make sure that icons that should flip for RTL (like the icons on 
  The course/user search pagination arrows, the icon to open the
  Submission details tray in new gradebook, the “>” icons to expand
  a submenu for the menus in new gradebook, etc)

Change-Id: I490d2dcd91b1b7ca2a116a1416718cd797f74901
Reviewed-on: https://gerrit.instructure.com/149482
Tested-by: Jenkins
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
Reviewed-by: Chris Hart <chart@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
2018-05-29 20:57:04 +00:00
Brent Burgoyne cdf3f96439 abort previous request in course/user search
if the reqeuest is not complete. also increase the debounce time to
reduce the chance of making more expensive search requests than
needed if someone is typing slow. without this fix the search was
making multiple requests to the server and would always show the last
results to come back regardless of order. this would lead to cases
where the right results show temporarily then the wrong results show
immediately after.

closes CORE-1347

test plan:
- test with course and user search. it will help to have a ton of
  records to make the search slow. when i tested I just added
  `sleep (rand 3) + 1` to each of the api controller actions to
  simulate slow search and make it more likely requests will come
  back in the wrong order.
- have the network tab open
- if you type in the search bar slowly enough to trigger multiple
  request the unfinished requests should be aborted
- results should always match the search term

Change-Id: I8953d73ea81784e4080cd64412effa0e95520761
Reviewed-on: https://gerrit.instructure.com/150218
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Matt Miller <mmiller@instructure.com>
2018-05-25 18:29:15 +00:00
Adrian Packel e99612d627 Show error in SG on grade/comment if max graders
When a moderated assignment's max grader count has been reached, further
provisional graders other than the moderator are not allowed to grade
or submit comments. Show an appropriate error in SpeedGrader if someone
tries to take either action.

closes GRADE-1058

Test plan:

Note that the plan below assumes that GRADE-1060 (which disables access
to SpeedGrader for new graders if the maximum number of graders has
already been reached) has been merged. If it has not been merged at the
time of testing, you can make the test plan a little easier by loading
both teachers sequentially in the same browser instead of using
different browsers.

  * Have a course with AMM enabled and at least three instructors
  * Enable AMM, create a moderated assignment, and set the max graders
    to 1
  * Open two browsers, each logged in as a teacher who is *not* the
    final grader. In each browser, open SpeedGrader for that assignment.
  * In one browser, enter a grade or submit a comment. This should
    complete without incident.
  * In the second browser, do the same thing. This time, you should get
    an alert stating that the maximum number of graders for the course
    has been reached.
  * The grader in the first browser should still be able to change their
    grade and leave comments.
  * Appoint a third teacher as the final grader; make sure this teacher
    can open SpeedGrader and grade/submit comments.

Change-Id: Ie2efa3c55bb71788210e7e1a02363712d8f7a2f0
Reviewed-on: https://gerrit.instructure.com/150804
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
Tested-by: Jenkins
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-25 17:24:26 +00:00
Augusto Callejas c4c9e764df Configurable proficiency ratings page
closes OUT-1856, OUT-1858, OUT-2239, OUT-2148

This adds configurable proficiency ratings on the account rubrics page.
Persisting these changes will occur in a future patchset (2252).
Validating order will be in a separate patchset (2240).

test plan:
  - with the "non-scoring rubrics" feature flag off, the account rubrics
    page should appear without the proficiency ratings tab
  - with the "non-scoring rubrics" feature flag on, the accounts rubrics
    page should appear with the proficiency tab, if visiting with an
    account with "manage_outcomes" permission (e.g. account admin)
  - create an account role that has "Create and edit assessing rubrics"
    permission enabled but "Manage learning outcomes" disabled by going
    to the account page, click on the "Permissions" link in the left menu,
    then select the "Account Roles" tab to then be able create the role
    and enable the permission above.
  - create an account user by going to the account page and then click
    on the "People" link in the left menu to then be able to
    click on "+ New User". you'll use the email address entered in
    the next step.
  - make that user an account admin by going to the account page,
    click on the "Settings" link in the left menu, then select the
    "Admins" tab, then click on "+ Account Admins". select the new
    role from the drop down menu and enter the email address you used
    in the preivous step
  - confirm with the feature flag enabled, that visiting the account
    rubrics page does not appear with the proficiency tab, if visiting
    with an account without "manage_outcomes" permission (e.g. masquerade
    as the user created above)
  - on the proficiency tab, test error handling:
    * description is required
    * points is required, should be a valid number
    * when saving changes, all fields with errors should be labelled
      with an error text, with the first field receiving focus

Change-Id: Ic52ef9fe9c58cfb215216b3a505ef1fb4b851c68
Reviewed-on: https://gerrit.instructure.com/150841
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Reviewed-by: Frank Murphy <fmurphy@instructure.com>
Tested-by: Jenkins
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-24 22:11:09 +00:00
Derek Bender d59c362679 fix preview/download links to display anonymous_id
closes: GRADE-1180

test plan:
- enable anonymous moderated marking
- create an anonymous assignment
- preview links in the right sidebar show anonymous_id,
  not the user id

Change-Id: I2be87f1f9a7877e99da9f06c62b88cc57b798a22
Reviewed-on: https://gerrit.instructure.com/150927
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
Tested-by: Jenkins
QA-Review: Indira Pai <ipai@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-24 20:56:37 +00:00
Derek Bender aab66d9e9f Revert "google docs won't show text/plain files"
This reverts commit 0bf7f60a21.

google docs does indeed show text/plain files

test plan:
- have s3 storage enabled
- submit a txt file for a submission
- preview is rendered in speedgrader

Change-Id: I88958c259fd103692f25c2a1168437d2407716fd
Reviewed-on: https://gerrit.instructure.com/150914
Tested-by: Jenkins
Reviewed-by: Keith T. Garner <kgarner@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Spencer Olson <solson@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-05-24 17:32:03 +00:00
Frank Murphy ab5f675041 Wire Rubric into assessment locations.
Fixes OUT-2246

Test Plan:
- Disable the non scoring rubrics feature flag. You might need to
  restart your services to expire the cached flag.
- Visit speed grader for an assignment with an aligned rubric. Verify
  that the rubric functions normally and can be used to grade.
- Visit a single assignment submission through gradebook > student
  results > selected submission. Example URL:
  http://canvas.docker/courses/6/assignments/2/submissions/14
  Verify that the rubric looks normal and can be used to grade.
- Enable the non scoring rubrics feature flag.
- The new Rubric currently cannot be used to assess, but it should be
  visible.
- Visit speed grader, verify the new Rubric is shown (the border
  currently around "show long description" is a good way to check this).
- Visit a single assignment submission and verify the new Rubric is
  shown.

Change-Id: Ifc5525d1cadaf1d4ff485057b23a7fe00b3f0747
Reviewed-on: https://gerrit.instructure.com/150701
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Tested-by: Jenkins
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Frank Murphy <fmurphy@instructure.com>
2018-05-24 16:24:18 +00:00
Clay Diffrient 0c56a80cc5 Give more memory to karma when it's running
This should make it so our post-merge build starts working again
and reporting new coverage information.

closes CORE-1435

Test Plan:
  - Run `COVERAGE=true yarn run test:karma`
  - It should not fail because of memory issues

Change-Id: I6e103352fa25e130d0ba8072a77c9d81ac11bb85
Reviewed-on: https://gerrit.instructure.com/150666
Tested-by: Jenkins
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Product-Review: Clay Diffrient <cdiffrient@instructure.com>
QA-Review: Clay Diffrient <cdiffrient@instructure.com>
2018-05-23 16:43:37 +00:00
Michael Brewer-Davis dfdc06231f disallow blank rubric criteria and ratings
closes OUT-2243

Test plan:
With non-scoring rubrics disabled
- verify you cannot create a criterion with
  a blank description
- you cannot edit a criterion to have a blank
  description
- you cannot create a rating with a blank
  description
- you cannot edit a rating to have a blank
  description

Change-Id: I06a88230434c22b35653023adebf0f950192a0cc
Reviewed-on: https://gerrit.instructure.com/150704
Reviewed-by: Matt Berns <mberns@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Tested-by: Jenkins
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-22 20:48:13 +00:00
Augusto Callejas 993bb581ac Hide points options when remove pts is checked
closes OUT-2157

test plan:
  - enable non-scoring rubric feature flag
  - create an assignment
  - create a rubric on an assignment
  - confirm that when `Remove points from rubric` is checked,
    that `Use this rubric for assignment grading` and
    `Hide score total for assessment results` are hidden.

Change-Id: I76f2ffb7cc8b9015302aba7e6c605ab8004aab98
Reviewed-on: https://gerrit.instructure.com/150496
Tested-by: Jenkins
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-21 23:02:10 +00:00
Derek Bender d87c836e7e add anonymous submission preview/download to SG
closes: GRADE-894

test plan:
- enable the anonymous moderated marking feature flag
- create an anonymously graded assignment
- create a text submission for a student
- in speedgrader, the submission previews correctly
- toggle anonymously graded off for the assignment
- in speedgrader, the submission previews correctly

- also test for file uploads, images

Change-Id: I030a741668d30b763626e1a247fb355c4ec0a8da
Reviewed-on: https://gerrit.instructure.com/148708
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
Tested-by: Jenkins
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-21 21:36:55 +00:00
Jeremy Neander a74da8dd3c spec: clean up some spec pollution
test plan:
 * Verify Jenkins passes

Change-Id: I5c6423bcf62a79dbc410e79b4c5e7f7b2f5a8818
Reviewed-on: https://gerrit.instructure.com/150694
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
Product-Review: Jeremy Neander <jneander@instructure.com>
QA-Review: Jeremy Neander <jneander@instructure.com>
2018-05-18 00:11:00 +00:00
Michael Brewer-Davis 8ed74305db add ability to set rubrics as non-scoring
feature flagged as development-only
adds "Don't show Outcomes results" checkbox

closes OUT-2132

Test plan:
On the assignments show page
and discussions edit page:
- Ensure the non-scoring rubrics feature flag is
  off
- Spot check that no non-scoring behavior is apparent
  and that rubrics are edited and saved as normal
- Enable the non-scoring rubrics feature flag
  (note that due to caching you may need to wait
  for the feature to be truly enabled)
- Verify that choosing "Remove points from rubric"
  removes all references to points -- existing ratings,
  outcome thresholds, creating new ratings, point totals,
  points column, etc.
- Choose update rubric, verify that no points are shown
  in the view of the rubric
- Reload page, verify that no points are shown in the view
  of the rubric
- Edit rubric and uncheck "Remove points...".  Verify that
  points are returned in all locations
- Verify that edit and view modes for a rubric do not show
  points when using a screenreader and "Remove points..."
  is set
- Verify that "Don't show outcome results" is persistent
  but otherwise has no effect

On manage rubrics page:
- Spot check that no non-scoring behavior is apparent

Change-Id: Ifa72e127f26936221304afcd6530c1d8f1a6ac3b
Reviewed-on: https://gerrit.instructure.com/149622
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Tested-by: Jenkins
QA-Review: Andrew Porter <hporter-c@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-16 21:50:23 +00:00
Clay Diffrient 57fcd768ea Make file preview links tabbable
closes CORE-1322

Test Plan:
  - Add a pdf file link to a page
  - View that page
  - You should be able to tab to the small file preview link
    that shows up next to the link
  - Pressing 'Enter' on the link should open a preview
  - Focus should be on the minimize file preview link
  - Pressing 'Enter' on that link should send focus back
    to the file preview link
Change-Id: I909ca7361b890c0a16be459dd538ecfe89f9a3e9
Reviewed-on: https://gerrit.instructure.com/149852
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Dan Sasaki <dsasaki@instructure.com>
2018-05-16 14:39:07 +00:00
Spencer Olson 5252a6087e speedgrader: conditionally remove moderation bar
Hides the Moderation Bar in SpeedGrader when the Anonymous Moderated
Marking feature flag is enabled.

closes GRADE-1139

Test Plan:
1. Turn the Anonymous Moderated Marking feature flag on at the root
   account level.
2. Create a moderated assignment. Go to the moderation page for the
   assignment and add a second reviewer.
3. Log in as an instructor that is not the moderator for the
   assignment. Go to SpeedGrader for the assignment and give a
   provisional grade for a student.
4. Log in as another instructor that is not the moderator for the
   assignment. Go to SpeedGrader and verify there is not a 'Moderation
   Bar' at the top of the page (if it was there, the 'Moderation Bar'
   would include a tab for each reviewer, and a dropdown to add a new
   review).
5. At the root account, disable the Anonymous Moderated Marking feature
   flag.
6. As the same instructor from step 4, revisit SpeedGrader and verify
   the 'Moderation Bar' is present.

Change-Id: Ib3965927ead41b8ad2bc781a3eb040999cb3d57b
Reviewed-on: https://gerrit.instructure.com/150181
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-15 19:27:06 +00:00
Omar Khan 70c6d02e9b Fix collaborations frontend code
Fixes gh-1292

Test plan: check that collaborations still work

Change-Id: I5faf10346d7a839ecbdc4ef55f7b169e81d60e57
Reviewed-on: https://gerrit.instructure.com/150053
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
QA-Review: Ryan Shaw <ryan@instructure.com>
Product-Review: Omar Khan <okhan@instructure.com>
2018-05-14 16:06:00 +00:00
Adrian Packel 1616618e95 Fix two AMM-related moderation/anonymity bugs
1. If Anonymous Moderated Marking is enabled, check the assignment's
anonymous grading setting to determine whether to anonymize names in
SpeedGrader, instead of always anonymizing assignments. If not enabled,
revert to checking the (old) "Anonymous Grading" course flag.

2. On the assignment edit page, make sure not to show the "Moderate" if
the assignment doesn't have moderated grading enabled (in addition to
the other conditions).

closes GRADE-1133

Test plan:

Testing SpeedGrader anonymity:
(Note that the "hide student names" setting in SpeedGrader's options
menu, if enabled, will force anonymity regardless of the assignment's
settings. If student names are showing up anonymous regardless of what
you do, make sure that setting is off.)

- Enable AMM for the root account
- Create an assignment with anonymous grading enabled and one without
- In SpeedGrader, the anonymous assignment should anonymize user names
  while the non-anonymous one should not
- Disable AMM and make sure SpeedGrader anonymity is now determined
  based on the course's Anonymous Grading setting (the *old* anonymous
  grading setting) as it was before

Testing the Moderate link for an assignment:
("Never" and "always" in this plan mean that it should behave that way
regardless of the status of the AMM flag.)
- Create an assignment with moderated grading disabled:
  - On the edit page, the "Moderate" button should never appear
- Create a moderated assignment and set the current user as final grader
  - On the edit page, the "Moderate" button should always appear
- Create a moderated assignment and set a different user as final grader
  - On the edit page, the "Moderate" button should appear if AMM is OFF
    but be hidden if it is ON.

Change-Id: I4159dbe271cb76791aa93bb6ad07acdc333cdf53
Reviewed-on: https://gerrit.instructure.com/149863
Tested-by: Jenkins
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Anju Reddy <areddy@instructure.com>
Product-Review: Keith T. Garner <kgarner@instructure.com>
2018-05-11 23:00:40 +00:00
Matthew Berns af3fdc54cc fix improper rubric highlighting on certain setups
fixes OUT-2183
fixes OUT-2187

test plan:
- create two rubrics - on one rubric, create 3 or more criteria,
  with at least two criteria utlizing rubric ranges (if you do not
  see option for range, you'll need to enable "Rubric Criterion
  Range" feature on the account).
- on the other rubric, utlize 5 criteria with the following setup:
  3 criteria with a scale of 20/15/10/5/0
  2 criteria with a scale of 20/10/5
- attach the rubrics to two different assignments
- as a student, submit to the assignments
- as a teacher, provide scores on the rubrics. On the first one
  with the range, ensure that the 2 (or more) range criteria have
  different point totals given to them
- on the second rubric, provide a range of points (20, 15, 10, 5, 0)
- as the student, view the grades
- first visit the submission show page. Both rubrics should have their
  proper areas highlighted per the scores on the criteria
- visit the student's grades page and expand the rubrics - they both
  should have their proper levels highlighted there as well. All
  highlights on this page should match the highlights shown on
  the submission's show page

Change-Id: I902f5d80285a3c4ef9d55e5d247c4b9f596ca04a
Reviewed-on: https://gerrit.instructure.com/148640
Reviewed-by: Michael Brewer-Davis <mbd@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Tested-by: Jenkins
QA-Review: Dariusz Dzien <ddzien@instructure.com>
Product-Review: Sidharth Oberoi <soberoi@instructure.com>
2018-05-11 21:15:25 +00:00
Ryan Shaw b6b67d6439 Fix right/wrong/flagged quiz arrows for RTL
fixes: CORE-1373

Test plan
* turn on RTL
* go take a quiz
* all the arrows to flag a question (eg https://cl.ly/2p163k092Q0v), the
  arrows to mark a question as wrong/right/partially correct, etc
  (Eg: https://cl.ly/3n0Q360f213L) should be flipped and look
  right (opposite of LTR)

* do a general hunt on the old quizzes pages for anything else you can
  find that isn’t flipped for RTL

Change-Id: I7bb032efb751e6b3d4d81e71d29fe61609cb71f6
Reviewed-on: https://gerrit.instructure.com/149028
Tested-by: Jenkins
QA-Review: Jeremy Putnam <jeremyp@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
Reviewed-by: Clay Diffrient <cdiffrient@instructure.com>
2018-05-10 16:28:37 +00:00
Ryan Shaw 8db2c527b1 Get slickGrid to work in RTL
Closes: CORE-1226

This gets both the old gradebook and the new gradezilla gradebook to
work in RTL.

Test plan:
* in both old gradebook and new gradezilla gradebook:
* go to the gradebook in normal LTR interface
* everything should work exactly as before
* turn on the RTL feature flag either in your user settings or by
  turning int on in accounts/x/settings and then setting your lang
  to arabic

Specific things to test:
* try it on both the old gradebook and the new gradezilla gradebook
* try it on a really large gradebook with tons of rows and columns
* try a really small gradebook with less columns than there is screen
  width
* try it in different browsers. Since each browser has different
  scrollLeft handling in RTL, I normalized it. but verify that it
  works in each
* try resizing and reordering columns
* borders and other styles should be flipped to the opposite side in RTL
* make sure keyboard shortcuts (like the left, right, top, down arrow
  keys) work and move you in the right direction in both LTR and RTL
  (Eg: if you are on “assignment 2”, right arrow goes to “assignment 3”
  In LTR but in RTL it goes back to “assignment 1”)
* try to think of other places that might have used the .r<column index>
  or .l<column index> classnames to make sure the use the new, RTL-aware
  ‘.b’ and ‘.f’ (those stand for “back” and “front”) classnames

This change started from this pull request:
https://github.com/mleibman/SlickGrid/pull/666
but there was a lot that still needed to be done there and we needed
change things to handle our frozen columns.

Some interesting trivia:
* in RTL, different browsers have different ways of handling scrollLeft.
  they all show the element scrolled all the way to the right by default
  (So you see the first columns) but chrome tells you scrollLeft is some
  large number to reflect how far from the left you’d have to scroll to
  get there if you scrolled all the way to the right like it should.
  Safari says scrollLeft is 0 by default and then as you scroll left to
  to see the rest of the columns, it counts down and shows
  a negative number. And IE does something else.
  So you have to do some trickery to normalize them all to be a
  consistent value, and that is why this pulled in that NPM module

Change-Id: Id00025db0918cbc2d354e96af88023e70e041e58
Reviewed-on: https://gerrit.instructure.com/144672
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Spencer Olson <solson@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
2018-04-30 21:20:54 +00:00
Ryan Shaw b9e7dd2bdd Automated RTL css fixes for gradebooks
refs: CORE-1226

I split this out from the javascript changes for slick grid because
the test plan for these changes can be much simpler.
the net result of this change is that absolutely nothing
should change in any of our existing css output. this just makes it so
all of these places where we said:
margin/padding/float/border/border-radus: (left or right), it does the
opposite in RTL so it flows right.

While the review on this can be completely automated, it does need to
be submitted at the same time as the one that changes the slickgrid
javascript. So when you want to manually QA this, check this and that
out at the same time and QA them together.

test plan:
* before you check this out, compile all the css in app.
* copy the contens of public/dist/brandable_css to a folder
* check this commit out
* run brandable_css again and diff the output of that folder with
  the old folder.
* there should be absolutely no changes

* verify that for the "_rtl" variants, the right and left values are
  swapped whenever they need to be.

With both this and the next commit that does all the RTL js changes
for slickgrid checked out:
* turn on the RTL feature flag and browse around, all the grading pages
  should be RTL and all of the margins, padding, spacing, arrow
  icons, etc. should be flipped and make sense for an RTL layout.

Change-Id: I896fe581f1ec91383387d34055509bea5b5c41b9
Reviewed-on: https://gerrit.instructure.com/145412
Reviewed-by: Brent Burgoyne <bburgoyne@instructure.com>
Tested-by: Jenkins
Reviewed-by: Jeremy Neander <jneander@instructure.com>
QA-Review: Tucker McKnight <tmcknight@instructure.com>
QA-Review: KC Naegle <knaegle@instructure.com>
Product-Review: Ryan Shaw <ryan@instructure.com>
2018-04-30 21:20:49 +00:00