Commit Graph

626 Commits

Author SHA1 Message Date
Cody Cutrer 0e78c63102 don't close connections when switching to slave
test plan:
 * in script/console, do Account.count, and then
   a slaved { Account.count }; there should be two connections now
 * ActiveRecord::Base.connection_handler.clear_all_connections!;
   both connections should be gone now
 * repeat for Delayed::Job.count with a separate queue config

Change-Id: I4858221e959fb91207470b84943843687751b2ee
Reviewed-on: https://gerrit.instructure.com/13889
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
Reviewed-by: Jacob Fugal <jacob@instructure.com>
2012-09-28 13:49:22 -06:00
Cameron Matheson 30d3cf7c83 use crocodoc for eligible files in full_files.js
closes #10956

Test plan:
  * make a crocodocable homework submission
  * preview the file in the user file's page and make sure it opens in
    crocodoc (not google docs)

Change-Id: Ifa9557dbfba2f1253fa02b99ece20de7a7f9cd21
Reviewed-on: https://gerrit.instructure.com/14006
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
2012-09-28 10:08:16 -06:00
Jon Jensen 308bebe454 send bulk private messages in background process, fixes #7277, #8548
implement background message sending in the inbox. when sending any
message, the form now unlocks right away and a progress bar appears
at the top. you can potentially have several messages sending at once,
each with its own progress bar. determinate progress bars (i.e. for
bulk private messages) will still be on the page if you reload (assuming
they haven't finished sending).

also implement client-side form validations so that users are prompted to
put in recipients and a message

progress bar should be aria compliant. refs #9237

test plan:
1. send a new message to a single recipient
2. there should be an indeterminate progress bar as it sends, and the ui
   should be unlocked
3. send a new group message
4. see step 2.
5. send a bulk private message
6. there should be a determinate progress bar as it sends, and it should
   move with a relatively consistent velocity. the ui should be unlocked
7. send a message on an existing conversation
8. see step 2.
9. repeat steps 1-8 with attachments
10. try sending messages without a body or recipients. you should get red
    error boxes

Change-Id: I1e4641505c3e4c42f840b292d739c78cb1c2baff
Reviewed-on: https://gerrit.instructure.com/13617
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Zach Pendleton <zachp@instructure.com>
2012-09-25 09:55:36 -06:00
Brian Palmer 051642f9fc update the comments about redis in the .yml.example files
Change-Id: I373d046162d348492319590ef12f84415afcf159
Reviewed-on: https://gerrit.instructure.com/13796
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
2012-09-24 08:40:36 -06:00
Cameron Matheson b5f566f1f6 crocodoc integration
Adds support for optionally viewing documents with Crocodoc.

closes #9865

Test plan:
  * configure the crocodoc plugin
  * add an assignment that allows file uploads
  * make a submission for that assignment with a pdf or doc or ppt
    - on the 'submission details' page, opening a preview of the
      assignment should display it in crocodoc
    - speedgrader should display the submission in crocodoc too
  * make a submission with odt or rtf
    - the submission should be displayed with scribd or google docs
  * if you disable the crocodoc plugin, submissions could continue being
    previewed in google docs or scribd

Change-Id: I7dd2547f8e2d907c98ebe894a7f1ee9d58f1e030
Reviewed-on: https://gerrit.instructure.com/13668
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jon Jensen <jon@instructure.com>
2012-09-21 12:57:02 -06:00
Cody Cutrer 70e475c5d8 rename Shard#description to id
test plan:
 * make sure page views are still processed

Change-Id: I07ead6c075823c2021fdcc0cc1f1fddf70f695d0
Reviewed-on: https://gerrit.instructure.com/13810
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jacob Fugal <jacob@instructure.com>
2012-09-21 10:48:02 -06:00
Cody Cutrer 71c95cf7f0 allow hash interpolation in database configs
test plan:
 * set something like username: canvas
   schema_search_path: "%{username},public" in database.yml
 * it should work

Change-Id: I904f83c2ebeea0139e80ac1566a7e934ba3c1eef
Reviewed-on: https://gerrit.instructure.com/13806
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jacob Fugal <jacob@instructure.com>
2012-09-20 10:58:20 -06:00
Brian Palmer c25465506a redis jobs backend
This supports all the features of our current delayed jobs backend,
including priorities, queues, jobs scheduled for the future, strands,
periodic jobs, etc.

Atomicity is guaranteed by using the new Lua scripting features of Redis
2.6, so this requires 2.6 (which is still only a release candidate as of this
time).

It's not yet production ready (see the TODO at the top of the
redis/job.rb file), so trying to start canvas in prod with redis jobs
configured will raise an error as a safeguard.

The tests have been modified to all pass with redis configured as the
jobs backend. Some selenium specs were removed because the jobs UI lost
some functionality that I didn't think was important enough to port to
redis (listing the most popular tags for future and failed jobs, for
example).

Change-Id: Ie57b15bae1d4ba7b2b2344c872411165551d1ac8
Reviewed-on: https://gerrit.instructure.com/12120
Reviewed-by: Bracken Mosbacker <bracken@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-09-19 08:50:11 -06:00
Simon Williams 96ebee6dcc api: maintain query parameters in pagination links
fixes #10491

test plan:
- make an api call to a paginated endpoint that has a query parameter as part
  of the call (courses/<id>/users with enrollment_type=student is a good one)
- the pagination link header links that come back should maintain the query
  parameter (in the example above, they would include enrollment_type=student)
- also try one that has an "include[]=" type parameter
- read the api pagination documentation (linked from the api sidebar) and make
  sure it makes sense.

Change-Id: I6c1649513553bb2ac9c1cfc137ff16c21e50a6a3
Reviewed-on: https://gerrit.instructure.com/13641
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-09-17 09:40:06 -06:00
Jeremy Stanley d511e04fee modules api, closes #10404
also modifies the discussion topic and assignment API
controllers to make sure "must_view" requirements are
fulfilled

test plan:
 * check the API documentation; ensure it looks okay
 * create a course with module items of each supported type
 * set completion criteria of each supported type
 * create another module, so you can set prerequisites
 * use the list modules API and verify its output matches
   the course and the documentation
   * as a teacher, "state" should be missing
   * as a student, "state" should be "locked", "unlocked",
     "started", or "completed"
 * use the show module API and verify the correct information
   is returned for a single module
 * use the list module items API and verify the output
   * as a teacher, the "completion_requirement" omits the
     "completed" flag
   * as a student, "completed" should be true or false,
     depending on whether the requirement was met
 * use the show module API and verify the correct information
   is returned for a single module item
 * last but not least, verify "must view" requirements can
   be fulfilled through the api_data_endpoints supplied
   for files, pages, discussions, and assignments
   * files are viewed when downloading their content
   * pages are viewed by the show action (where content
     is returned)
   * discussions are viewed when marked read via the
     mark_topic_read or mark_all_read actions
   * assignments are viewed by the show action
     (where description is returned).  they are not viewed
     if the assignment is locked and the user does not
     have access to the content yet.

Change-Id: I0cbbbc542f69215e7b396a501d4d86ff2f76c149
Reviewed-on: https://gerrit.instructure.com/13626
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
2012-09-17 09:30:04 -06:00
Brian Palmer 056cfbbcab allow setting the log level in logging.yml for syslog
test plan: Set up your logging.yml to go to syslog, with a log_level
defined (see logging.yml.example). If you're on OS X you already have
syslog running, just open Console.app and view system.log. Note though
that syslog is probably set to filter < warn or error logs.

Change-Id: I828a09329fae612d46e43fe761849a6e1336a4d3
Reviewed-on: https://gerrit.instructure.com/13623
Reviewed-by: Brian Palmer <brianp@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-09-13 09:55:09 -06:00
Brian Palmer 9861228ae8 handle child events in calendar ICS/ATOM feed
currently this only works for the user's calendar feed, not the
individual course calendar feed, since that feed doesn't include any
information on which user is requesting the data. that's a further TODO.

fixes #9647

test plan:
 * create a course event in calendar2 which has different times for
   different sections in the course.
 * go to /calendar and load the Calendar Feed as a teacher, verify that
   two separate individual events are shown one for each section, just
   like in the web ui.
 * go to /calendar and load the Calendar Feed as a student, verify that
   just the one event for that section is shown
 * in both cases, there shouldn't be a separate copy of the event that
   spans both time periods, like there is on prod right now

Change-Id: I3244121ef3ff911eac043a5f69bb5944556a828a
Reviewed-on: https://gerrit.instructure.com/13394
Reviewed-by: Bryan Madsen <bryan@instructure.com>
Tested-by: Bryan Madsen <bryan@instructure.com>
2012-09-12 14:40:31 -06:00
Cody Cutrer 82174eb49c fix find_ids_in_ranges that find multiple ranges with joins
Change-Id: I9c4dd94cac51e84425ed06472a3222ff5c5a1a83
Reviewed-on: https://gerrit.instructure.com/13545
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
2012-09-11 14:09:11 -06:00
Brian Palmer 1530e91d2e per-shard setting to disable page view queue processing
test plan: enable the redis page view queue, then set
shard.settings[:process_page_view_queue] = "false" for one shard. Verify
that shard doesn't get PageView.process_cache_queue jobs created.

Change-Id: I57a8ae59a4e35678529c6855e1549098bad17b2b
Reviewed-on: https://gerrit.instructure.com/13470
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-09-11 08:45:47 -06:00
Jon Jensen aea857aef7 fix i18n js issues, fixes #10456
ensure that translations don't get overridden due to the locale being in
the translation hash twice (symbol and string)

also ensure _core translations (date/time/number formats) are always
included

test plan:
1. use canvas w/ optimized js
2. switch to another language (e.g. spanish)
3. go to the web conferences page
4. click to delete a conference
5. the confirmation dialog should be translated

Change-Id: I73cb94a34a4acc2fe80b01148b950240bbd26d94
Reviewed-on: https://gerrit.instructure.com/13580
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Mark Ericksen <marke@instructure.com>
2012-09-10 12:19:05 -06:00
Jake Sorce c76e2582ce fix locales.yml file
Change-Id: Ic205728f62b7d979f706769f368676af5d61d844
Reviewed-on: https://gerrit.instructure.com/13484
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Bryan Madsen <bryan@instructure.com>
2012-09-05 17:40:54 -06:00
Jake Sorce bc97fae842 add Russian to Canvas
Change-Id: I5ff29320619f6e9af7fd057eea5899b48c2c966c
Reviewed-on: https://gerrit.instructure.com/13468
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Whitmer <brian@instructure.com>
2012-09-05 15:08:50 -06:00
Cody Cutrer c9210fae80 improve find_ids_in_ranges to work with scopes refs #6892
test plan:
 * run specs

Change-Id: I8274ba73f13b0f2c5c947bcbf675e8a85ce15fdf
Reviewed-on: https://gerrit.instructure.com/13340
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-09-05 10:04:08 -06:00
Brian Palmer 308bf58f0f some ruby 1.9.3 fixes
* fix some invalid syntax that's snuck in recently
 * fix an issue with initializing tempfiles in Canvas::HTTP
 * fix some "can't modify frozen object" errors in specs
 * upgrade mocha to 0.12.3

Change-Id: I6b6f25bcfff2466774e2941d35fafb7af7c50569
Reviewed-on: https://gerrit.instructure.com/13344
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
2012-09-04 10:49:55 -06:00
Jon Jensen 4b59fa0466 paginate prior enrollments
added uber_scope fu to override association :select/:order. slight
refactor of order_by_sortable_name (which incidentally makes it so custom
:select's get respected rather than getting all columns)

test plan:
1. go to a course with more than 20 concluded enrollments
2. go the prior enrollments page
3. it should be paginated
4. spot check other places that order_by_sortable_name (e.g. user_notes)
5. they should work

Change-Id: I3176876383a03d38950b2159cbb73931017d1cc1
Reviewed-on: https://gerrit.instructure.com/13167
Reviewed-by: Zach Pendleton <zachp@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-08-27 14:27:02 -06:00
Ryan Shaw 2b1fffdecc use a simple dialog for creating new courses
this gets rid of the "getting started" workflow (with the 4
steps: name, assignments, students, save) and just uses a
simple dialog for creating new courses.  It is part of the new
user experience stuff.

refs: #9898

test plan:
click "create a new course" on dashboard, make sure
it works.

Change-Id: If1b28f3dd58fa40e3a0c0195dc5db97292566e7e
Reviewed-on: https://gerrit.instructure.com/13003
Reviewed-by: Jon Jensen <jon@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-08-27 13:29:42 -06:00
Jeremy Stanley dd143ee73c add data-api-endpoint attribute to urls returned by the api
fixes #9954

test plan:
 - create a wiki page
 - put in links to pages, assignments, discussion topics,
   and files, and also to the index pages for these
 - retrieve the page via the API, and check that the
   data-api-endpoint and data-api-returntype attributes
   are set

Change-Id: Ife67f3119aa73971153f88fe46787d7e1563f0ef
Reviewed-on: https://gerrit.instructure.com/12925
Reviewed-by: Brian Palmer <brianp@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-08-17 16:41:18 -06:00
Simon Williams 1f4599b456 add more detailed errors to ldap tester
fixes #6347

* logs more information on ldap failures and passes it down to the browser in
  the ajax response.
* fixes a crazy javascript bug where we were accidentally using a reserved
  global var in webkit, 'status', which is a string, which interacted strangely
  with our use of it as a boolean. this fixes the tester for firefox/ie

test plan:
(for #6347)
- use the tester in firefox and ie, it should work

(for error messages)
- one at a time, change the fields of a config, and run the tester
- you should get (slightly) more helpful error messages about what is failing,
  based on status returned from the server.

Change-Id: Ic0837d7ff9f6283d615ddd4bbeef5a957dbd6553
Reviewed-on: https://gerrit.instructure.com/12880
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-08-17 14:31:41 -06:00
Ryan Shaw 723d9c7e6d make jslint settings more sane
we use jslint just as a last resort effort to make
sure our javascript doesn't have syntax errors or
something.  these changes will make the jenkins
output less verbose.

Change-Id: I937ad1bc6f6b142c4ba424f65e72e9806468638f
Reviewed-on: https://gerrit.instructure.com/12787
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
2012-08-17 11:04:40 -06:00
Ryan Shaw ac9eebb275 new discussion topics/announcement index, edit and create
closes: #7172

test plan:

* open discussion topic index page:
  - see how it looks in blank course
  - full course
  - try graded & unread filters (make sure you see things you expect to and not those you don't)
  - do bulk actions by clicking checkbox for a few and hitting delete and lock buttons
  - verify infinite scroll works
  - verify that as a student you don't see posts that had delayed posting
  - click "create new" button to make a new one, make sure it works
  - do all the above in the announcement index page

* while viewing announcements index:
  - verify teacher can create external feed on right
  - no right side unless external feeds exist or they are teacher
  - external feeds are listed
  - only teacher can delete external feed

* while editing/creating new discussion/announcement
  - verify that announcement cant be made into assignment
  - for discussion topic, set as assignment and make sure the assignment settings set.
  - cant change discussion -> announcement (& vise versa)
  - type crazy & blank input, verify that it validates it for you
  - title cant be longer than 254
  - make sure these features work:
    - podcast feed
    - student posts in podcast feed
    - delayed posting
    - toggling threaded/unthreaded
    - must post before seeing replies
  - attach file, remove file attachment, upload new attachment should work

* make sure announcements/discussions look & behave right in other places they show up
  (like course, user dashboard)

* if you can think of any other places where you can edit/create discussions/announcements, make
  sure that still works

Change-Id: Ib0acaff8542bf09f99cd7aa99fb3ed16c999d224
Reviewed-on: https://gerrit.instructure.com/12655
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jon Jensen <jon@instructure.com>
2012-08-17 09:26:04 -06:00
Cody Cutrer 1033111308 use login/cas route for cas logins
functionally the same, but allows for higher level routing of CAS
requests apart from general login requests

test plan:
 * login and log out with CAS configured

Change-Id: Id4a9633f2dd48e9d7fe0cf9d3ec917750eb8c8ce
Reviewed-on: https://gerrit.instructure.com/12961
Reviewed-by: Brian Palmer <brianp@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-08-16 14:23:55 -06:00
Cody Cutrer b7b407248f multi-factor authentication closes #9532
test plan:
 * enable optional MFA, and check the following:
   * normal log in should not be affected
   * you can enroll in MFA from your profile page
   * you can re-enroll in MFA from your profile page
   * you can disable MFA from your profile page
   * MFA can be reset by an admin on your user page
   * when enrolled, you are asked for verification code after
     username/password when logging in
   * you can't access any other part of the site directly until
     until entering your verification code
 * enable required MFA, and check the following
   * when not enrolled in MFA, and you log in, you are forced to
     enroll
   * you cannot disable MFA from your profile page
   * you can re-enroll in MFA from your profile page
   * an admin (other than himself) can reset MFA from the user page
 * for enrolling in MFA
   * use Google Authenticator and scan the QR code; you should have
     30-seconds or so of extra leeway to enter your code
   * having no SMS communication channels on your profile, the
     enrollment page should just have a form to add a new phone
   * having one or more SMS communication channels on your profile,
     the enrollment page should list them, or allow you to create
     a new one (and switch back)
   * having more than one SMS communication channel on your profile,
     the enrollment page should remember which one you have selected
     after you click "send"
   * an unconfirmed SMS channel should go to confirmed when it's used
     to enroll in MFA
   * you should not be able to go directly to /login/otp to enroll
     if you used "Remember me" token to log in
 * MFA login flow
   * if configured with SMS, it should send you an SMS after you
     put in your username/password; you should have about 5 minutes
     of leeway to put it in
   * if you don't check "remember computer" checkbox, you should have
     to enter a verification code each time you log in
   * if you do check it, you shouldn't have to enter your code
     anymore (for three days). it also shouldn't SMS you a
     verification code each time you log in
 * setting MFA to required for admins should make it required for
   admins, optional for other users
 * with MFA enabled, directly go to /login/otp after entering
   username/password but before entering a verification code; it
   should send you back to the main login page
 * if you enrolled via SMS, you should not be able to remove that
   SMS from your profile
 * there should not be a reset MFA link on a user page if they
   haven't enrolled
 * test a login or required enrollment sequence with CAS and/or SAML

Change-Id: I692de7405bf7ca023183e717930ee940ccf0d5e6
Reviewed-on: https://gerrit.instructure.com/12700
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-08-16 13:09:07 -06:00
Brian Palmer 0cb816bd47 API for adding files by URL
This adds an alternative method for uploading files by giving Canvas a
public URL in the first step, rather than uploading the file data directly.

test plan:
- create a course file via the API upload mechanism
- make sure the return values are as documented
- make sure the file was correctly uploaded

- create a course file via the URL approach
- make sure the return values are as documented
- make sure the file status endpoint returns valid responses
- make sure the file was correctly stored in Canvas

- repeat that process with a file that has at least one redirect

- repeat that process but creating a homework submission file

- try to create a course file with a malformed URL
- confirm that the appropriate error message is returned

- try to create a course file with a relative URL
- confirm that the appropriate error message is returned

- try to create a course file with a URL that doesn't return 200
- confirm that the appropriate error message is returned

Change-Id: I2dcf711347ec4ef26d767ae1c1fa0bb056986651
Reviewed-on: https://gerrit.instructure.com/12143
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
2012-08-15 16:38:50 -06:00
Jon Jensen 93e2892c7f restore conversations/find_recipients API route, fixes #9914
ensure legacy API route is still available (and added spec). minor doc
tweaks/fixes

test plan:

1. find conversation recipients through the web UI
2. find recipients by hitting the following URLs directly:
   * /api/v1/search/recipients
   * /api/v1/conversations/find_recipients
3. find recipients using the iPad app
4. it should all work

Change-Id: Ic283b3f5bacb22aba7b077e300d96c07565b8cd0
Reviewed-on: https://gerrit.instructure.com/12887
Reviewed-by: Jon Jensen <jon@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-08-13 23:43:11 -06:00
Zach Pendleton 35b3fd355a paginate course people page w/ ajax. fixes #9678
return students and teachers/TAs 50 users at a time, and
display them in an infinitely scrolling div. also update
the styling of the scrolling divs to better reflect that they
are scrollable to users w/o permanent scrollbars (e.g. OS X).

test plan:
  * create a course with over 50 student or teacher/ta
    enrollments;
  * view the course people page and verify that student
    and teacher enrollments load as expected;
  * scroll the field with the most enrollments and verify
    that when the bottom is reached more enrollments load;
  * verify that when all enrollments have loaded, the div
    no longer attempts to load new enrollments;
  * create a new course section and add enrollments to it;
  * as a user with permissions limited to section, verify
    that only enrollments in the allowed section are
    displayed.

Change-Id: I2e6485a2edf950acf58f5ccbc75c2965297aed04
Reviewed-on: https://gerrit.instructure.com/12680
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Zach Pendleton <zachp@instructure.com>
2012-08-13 14:50:29 -06:00
Ryan Shaw 8403f9a06a upgrade jqueryui to 1.9b1, closes: #9493 refs: #9492
wins:
* we now have a tooltip widget
* no more having both jqueryui 1.8 and alpha 1.9
  stuff on the same page

for more info:
http://blog.jqueryui.com/2012/06/jquery-ui-1-9-beta/
info about tooltips:
http://wiki.jqueryui.com/w/page/12138112/Tooltip

test plan:
interact with as many jquery ui widgets as possible
e.g.: wiki sidebar (the tabs and accordion), gradebook2
(and all of its dialogs), date pickers, help dialog, etc

Change-Id: I2c1c0d761a99c972fd8ae704ee3782140955ce3c
Reviewed-on: https://gerrit.instructure.com/12258
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jon Jensen <jon@instructure.com>
2012-08-13 10:20:06 -06:00
Jeremy Stanley 7c318740b2 wiki pages api; fixes #8140
test plan:
 - consult the Pages documentation; ensure it renders properly.
 - exercise the following endpoints:
   - GET /api/v1/courses/:course_id/pages
   - GET /api/v1/courses/:course_id/pages/:url
   - GET /api/v1/groups/:group_id/pages
   - GET /api/v1/groups/:group_id/pages/:url
 - verify students can't see hidden pages
 - verify permissions are respected

Change-Id: I2911e42a3c276301a0170917871c6648aded4a79
Reviewed-on: https://gerrit.instructure.com/12838
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-08-10 15:44:14 -06:00
Brian Palmer 55f3aae3d7 refactor jobs admin functionality to not use AR queries
A set of class functions were added to Delayed::Backend::ActiveRecord
for all the querying a updating functionality that the jobs admin needs,
so that no direct ActiveRecord queries are needed. The /jobs UI is
refactored to use these new functions.

There are a few differences in behavior: The search isn't a combined
wildcard search anymore. Instead, new "flavors" were added to the
drop-down for strand, tag, and ID. The search box searches only the
selected attribute, and it's exact match now.

Specs are being updated to use these new functions as well. Eventually,
no direct AR queries will be done against Jobs anywhere, so that non-AR
jobs backends are possible.

Also as part of this, all jobs require a queue now. Passing nil for the
queue will use the default of Delayed::Worker.queue.

test plan: Load /jobs, and verify that it works as before except where
there are differences as described above.
  * Selecting flavors of jobs lists only those jobs.
  * Searching by ID, strand or tag works.
  * The hold/unhold/delete actions work in the various combinations of
    filtering/searching.
  * Linking to an individual job still works (though the query string
    has changed so old links don't work)
  * Running jobs and list of popular tags still works as expected.

Change-Id: Iffd5b8c7b3d6e4b128792a9dee7b97c6dfb251dc
Reviewed-on: https://gerrit.instructure.com/12632
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Bracken Mosbacker <bracken@instructure.com>
2012-08-08 08:31:48 -06:00
Jeremy Stanley 290be02cc4 update ruby-saml to validate saml assertions with libxmlsec1
fixes #9634

test plan:
 * saml should still work
 * some problematic SAML IDPs (e.g., shibboleth) should now work

Change-Id: Ie4307d0bc5490af5117055b0b342f5b4e3266984
Reviewed-on: https://gerrit.instructure.com/12731
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Zach Wily <zach@instructure.com>
2012-08-07 12:10:24 -06:00
Cody Cutrer e651026f52 make ConnectionSpecification extensions cache coherent
refs #9786

Change-Id: I0cdb23840a00be0dde48d5b8a865263842742050
Reviewed-on: https://gerrit.instructure.com/12777
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-08-07 10:59:47 -06:00
Brian Palmer 426fcd241c track request timing and error reports with statsd
Adds an infrastructure for using statsd (configured with
config/statsd.yml) and uses it to track a few basic stats. Stat names
are appended with the hostname.

test plan: without statsd enabled, make sure no errors are raised when
doing requests. add a statsd.yml configuration, restart the server, and
verify that stats are sent over UDP to the given host/port (this could
even be checked without statsd available, by monitoring UDP traffic)

Change-Id: Ie8c3ece7e08ff48616ffd968069bd760300e4fd2
Reviewed-on: https://gerrit.instructure.com/12673
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
2012-08-07 08:50:49 -06:00
Zach Pendleton 3d37d58b47 load recently logged in users via ajax. fixes #5457
change the the list of recently logged in users to be loaded
asynchronously and paginated via the api.

test plan:
- navigate to /courses/:course_id/statistics;
- click on the 'Students' tab;
- verify that the most recent students have
  loaded;
- in a course with > 25 users who have logged in, and some of
  whom have multiple pseudonyms, view the same page
- verify that while scrolling, more students are loaded automatically
  in until all the students in the course are present in the list.

Change-Id: I10ea92e0a286ce117ec0e957a91c8c347b89e751
Reviewed-on: https://gerrit.instructure.com/8404
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-08-03 09:22:33 -06:00
Zach Wily d38867476d fix showing discussion entries from collection items in stream api
Having a collection item discussion entry in your activity stream was
causing a 500 error from the API

test plan: create a collection item, and add a discussion comment to it
(currently this can only be done from the API). then get your activity
stream from the API, and verify there's no error. The html_url won't yet
be returned, since the html routes aren't enabled for collections yet.

Change-Id: Iea20460dd5279e80f9437012855d4032ce9bce22
Reviewed-on: https://gerrit.instructure.com/12588
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Zach Pendleton <zachp@instructure.com>
2012-08-03 09:05:47 -06:00
Cody Cutrer 78f72ce0cd OAuth logout API closes #5879
test plan:
 * generate an access token
 * use the logout endpoint
 * verify that the access token is no longer accepted

Change-Id: Iaac94e35d81711cff87604b6a996c41fdae3c640
Reviewed-on: https://gerrit.instructure.com/12674
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-08-02 09:39:15 -06:00
Brian Palmer 41e436d767 remove separate jobs db from example test db config
Some of the selenium specs currently fail with a separate jobs db, so
this is a bad default to give people.

Change-Id: Ide0c2c037c6f5eb8e3661bb49371b6828c29565a
Reviewed-on: https://gerrit.instructure.com/12587
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-07-30 14:22:03 -06:00
Cody Cutrer 29cf0db046 remove WikiNamespace fixes #9121
no user visible behavior change

test plan:
 * make sure existing wiki contents haven't disappeared
 * make sure a new course gets a wiki that functions correctly
 * make sure wiki rss feeds are still functional
 * try to access the wiki from a new course from multiple requests
   simultaneously; it should get a single wiki that's not conflated

Change-Id: I339b56c39d7868dbdec3df4007291a429272b1cf
Reviewed-on: https://gerrit.instructure.com/12432
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-07-30 09:15:04 -06:00
Cody Cutrer f7d8a0b992 add folder-direct file and folder creation apis fixes #9645, #9646
test plan:
 * create files and folders with only a parent folder id (no context)

Change-Id: I76420c4481e1ddd4a201f281a5b8dd83feb09dd2
Reviewed-on: https://gerrit.instructure.com/12554
Reviewed-by: Bracken Mosbacker <bracken@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-07-27 15:29:51 -06:00
Zach Pendleton 5f25bed998 add course update api. refs #9582
allow courses to be updated through the api.

test plan:
  * as an account admin, make a put to
    /api/v1/accounts/:account_id/courses/:id
    and verify that the course is updated;
  * as a teacher with course update permissions, attempt
    to update a course's sis id and verify that it is
    not updated (should just be ignored);
  * as a non-authorized user (e.g. a student), attempt to
    update a course and verify that 401 is returned.

Change-Id: I903081abac74db3ae2d941e105423dce2d5c4f8a
Reviewed-on: https://gerrit.instructure.com/12438
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-07-26 18:41:18 -06:00
Cameron Matheson 55e94efb87 updated user_profile API endpoints
Adds 'title' and 'bio' information to the profile api endpoint.  Also
optionally includes user_service and user_profile_link information.

Also includes a new update_profile API endpoint for updating profile
information (short_name, bio, title) , user_profile_links, and
user_service visibility.

The update_profile endpoint should replace the ProfileController#update
action as soon as we move that (when the User settings page is re-done).

Test plan:
  * make API calls to update/query the profile information OR
    wait for the new profile page which will exercise the new
    {user_profile,user_service,user_profile_link}_json methods

Change-Id: Ia4d902bf190ca51085216b71c5c9215d0dbf2f98
Reviewed-on: https://gerrit.instructure.com/12323
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Zach Pendleton <zachp@instructure.com>
2012-07-25 16:26:38 -06:00
Cody Cutrer a5e57b30f9 default database.yml.example to postgres
Change-Id: I052ec7e00da170ade4e3b6ea281072bc3972560f
Reviewed-on: https://gerrit.instructure.com/12482
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
2012-07-25 16:08:00 -06:00
Mark Ericksen 36cf340563 Rewrite of the Notification Preferences page. Closes #8066, Closes #9400
Implementing the re-designed Notification Preferences page.

Testing plan:
=========
* Verify that expected preferences can be set.
* Verify that it supports accessibility (screen readers) for blind users
* Verify that mobile users (iPad at least) can smoothly interact.

Change-Id: I2b98f2477932d800d2ec3de580e47a95f827616b
Reviewed-on: https://gerrit.instructure.com/12356
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jon Jensen <jon@instructure.com>
2012-07-25 10:04:36 -06:00
Simon Williams 9fcdba5ae3 improve html on course settings page; refs #8956
fix a few broken tags and validation errors on the course settings page in
hopes that it will help with IE 8/9 bugs that pop up on that page.

test plan:
- in IE 8/9 go to a course settings page
- click edit, enable grading scheme, set grading scheme
- click the edit pencil in the dialog that pops up
- the text boxes to enter the grade and % breakdown should show up
Change-Id: I03213b06126d76832af0ae74aeee8528511e24e4
Reviewed-on: https://gerrit.instructure.com/12367
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Reviewed-by: Jon Jensen <jon@instructure.com>
2012-07-23 09:48:53 -06:00
Jon Jensen 5249178632 sensible year range for birth date, fixes #9553
* fix year range in birth date input
* localize display of birth date
* fix javascript to display changes to birth date
* fix es.yml mis-translation (those symbols shouldn't be translated, but
  we do want per-locale ordering)

test plan:
1. edit your profile
2. confirm you can set your birth date to something sensible (last year,
   all the way back to 125 years ago)
3. confirm that when you set the birth date, the ui reflects it after you
   save
4. confirm that you can clear out the birth date

Change-Id: Ic9894070076a0d5b23f2005b36effee32c2fefc2
Reviewed-on: https://gerrit.instructure.com/12399
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Zach Wily <zach@instructure.com>
2012-07-20 16:56:20 -06:00
Jeremy Stanley 5b8524b14a Batch file notifications; closes #9012
Test plan:
(We need two users here because Canvas doesn't notify you about
files you upload yourself.  We'll call them Student and Teacher
here, but they don't actually have to be these things.)

 * As Student, enable notifications for new files in Profile.
 * As Teacher, upload a file.
 * Within an hour or so (everything about notifications occurs
   in low-priority background tasks), Student should receive
   a notification for the file.
 * As Teacher, upload multiple files.
 * Student should eventually receive a notification that
   X number of files were added.

Note that files are batched over a five-minute period; that is,
if a file is added to a course within five minutes of a previous
file, it will be counted in the same batch.

Change-Id: I09b5f497cae1d726b7aaf85824e98e69e45b0c1b
Reviewed-on: https://gerrit.instructure.com/12346
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
2012-07-20 14:45:12 -06:00
Jon Jensen c906c49e49 restyle flash messages and unauthorized-style pages, fixes #9466
test plan:
1. go to a course page when not logged in
   1. you should see the unauthorized message
   2. it should be styled correctly
2. go to a course page when logged in that you are not enrolled in
   1. you should see the unauthorized message
   2. it should be styled correctly
3. perform an action that generates a flash notice (e.g. send a message in
   conversations)
   1. the notice should appear and should overlap the header
   2. it should disappear when clicked (or after a few seconds)
4. perform an action that generates a flash error message
   1. the error should appear and should overlap the header
   2. it should disappear when clicked (or after a few seconds)
5. go to a page that has an initial flash notice (e.g. view course you've
   been invited to)
   1. the notice should appear and should shift all content down
   2. it should only disappear if clicked
6. go to a page that has an initial flash error
   1. the error should appear and should shift all content down
   2. it should only disappear if clicked

Change-Id: I3a1ca8f44e9f36bc7ce191392a7bf8922eb4fcc4
Reviewed-on: https://gerrit.instructure.com/12324
Reviewed-by: Ryan Shaw <ryan@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
2012-07-18 17:12:52 -06:00