Ignore has_annotations? when new_annotations is enabled

We no longer care if the doc was created with annotations required.
The new DocViewer can handle annotating :allthethings:

Fixes RD-4229

Test plan:

Submit a box doc for an assignment
enable new_annotations and supports annotations
load doc in speed grader, you should be able to annotate it

Change-Id: I5dd594d338c7b1e60e8b15ec3021dd19bb4287c1
Reviewed-on: https://gerrit.instructure.com/116846
Tested-by: Jenkins
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Shahbaz Javeed <sjaveed@instructure.com>
Reviewed-by: Josh Orr <jgorr@instructure.com>
Product-Review: Brad Horrocks <bhorrocks@instructure.com>
This commit is contained in:
Brad Horrocks 2017-06-23 13:01:22 -06:00
parent 119251f6e0
commit bbe4a41738
10 changed files with 32 additions and 27 deletions

View File

@ -38,6 +38,7 @@ class CanvadocSessionsController < ApplicationController
opts[:preferred_plugins].unshift Canvadocs::RENDER_O365 opts[:preferred_plugins].unshift Canvadocs::RENDER_O365
end end
opts[:enable_annotations] = blob["enable_annotations"]
attachment.submit_to_canvadocs(1, opts) unless attachment.canvadoc_available? attachment.submit_to_canvadocs(1, opts) unless attachment.canvadoc_available?
url = attachment.canvadoc.session_url(opts.merge(user: @current_user)) url = attachment.canvadoc.session_url(opts.merge(user: @current_user))

View File

@ -34,6 +34,7 @@ class CrocodocSessionsController < ApplicationController
crocodoc = attachment.crocodoc_document crocodoc = attachment.crocodoc_document
url = crocodoc.session_url(:user => @current_user, url = crocodoc.session_url(:user => @current_user,
:annotations => annotations, :annotations => annotations,
:enable_annotations => blob["enable_annotations"],
:crocodoc_ids => blob["crocodoc_ids"]) :crocodoc_ids => blob["crocodoc_ids"])
# For the purposes of reporting student viewership, we only # For the purposes of reporting student viewership, we only

View File

@ -19,6 +19,7 @@
module AttachmentHelper module AttachmentHelper
# returns a string of html attributes suitable for use with $.loadDocPreview # returns a string of html attributes suitable for use with $.loadDocPreview
def doc_preview_attributes(attachment, attrs={}) def doc_preview_attributes(attachment, attrs={})
enable_annotations = attrs.delete(:enable_annotations)
if attachment.crocodoc_available? if attachment.crocodoc_available?
begin begin
attrs[:crocodoc_session_url] = attachment.crocodoc_url(@current_user, attrs[:crocodoc_ids]) attrs[:crocodoc_session_url] = attachment.crocodoc_url(@current_user, attrs[:crocodoc_ids])
@ -26,7 +27,7 @@ module AttachmentHelper
Canvas::Errors.capture_exception(:crocodoc, e) Canvas::Errors.capture_exception(:crocodoc, e)
end end
elsif attachment.canvadocable? elsif attachment.canvadocable?
attrs[:canvadoc_session_url] = attachment.canvadoc_url(@current_user) attrs[:canvadoc_session_url] = attachment.canvadoc_url(@current_user, enable_annotations: enable_annotations)
end end
attrs[:attachment_id] = attachment.id attrs[:attachment_id] = attachment.id
attrs[:mimetype] = attachment.mimetype attrs[:mimetype] = attachment.mimetype

View File

@ -203,7 +203,7 @@ class Assignment
end end
a.as_json(only: attachment_fields, a.as_json(only: attachment_fields,
methods: [:view_inline_ping_url]).tap do |json| methods: [:view_inline_ping_url]).tap do |json|
json[:attachment][:canvadoc_url] = a.canvadoc_url(@user) json[:attachment][:canvadoc_url] = a.canvadoc_url(@user, enable_annotations: true)
json[:attachment][:crocodoc_url] = a.crocodoc_url(@user, crocodoc_user_ids) json[:attachment][:crocodoc_url] = a.crocodoc_url(@user, crocodoc_user_ids)
json[:attachment][:submitted_to_crocodoc] = a.crocodoc_document.present? json[:attachment][:submitted_to_crocodoc] = a.crocodoc_document.present?
json[:attachment][:hijack_crocodoc_session] = a.crocodoc_document&.should_migrate_to_canvadocs? json[:attachment][:hijack_crocodoc_session] = a.crocodoc_document&.should_migrate_to_canvadocs?

View File

@ -1640,27 +1640,31 @@ class Attachment < ActiveRecord::Base
"/#{context_url_prefix}/files/#{self.id}/inline_view" "/#{context_url_prefix}/files/#{self.id}/inline_view"
end end
def canvadoc_url(user) def canvadoc_url(user, opts={})
return unless canvadocable? return unless canvadocable?
"/api/v1/canvadoc_session?#{preview_params(user, "canvadoc")}" "/api/v1/canvadoc_session?#{preview_params(user, "canvadoc", opts)}"
end end
def crocodoc_url(user, crocodoc_ids = nil) def crocodoc_url(user, crocodoc_ids = nil)
opts = {
enable_annotations: true
}
opts[:crocodoc_ids] = crocodoc_ids if crocodoc_ids.present?
return unless crocodoc_available? return unless crocodoc_available?
"/api/v1/crocodoc_session?#{preview_params(user, "crocodoc", crocodoc_ids)}" "/api/v1/crocodoc_session?#{preview_params(user, "crocodoc", opts)}"
end end
def previewable_media? def previewable_media?
self.content_type && self.content_type.match(/\A(video|audio)/) self.content_type && self.content_type.match(/\A(video|audio)/)
end end
def preview_params(user, type, crocodoc_ids = nil) def preview_params(user, type, opts = {})
h = { h = opts.merge({
user_id: user.try(:global_id), user_id: user.try(:global_id),
attachment_id: id, attachment_id: id,
type: type type: type
} })
h.merge!(crocodoc_ids: crocodoc_ids) if crocodoc_ids.present?
blob = h.to_json blob = h.to_json
hmac = Canvas::Security.hmac_sha1(blob) hmac = Canvas::Security.hmac_sha1(blob)
"blob=#{URI.encode blob}&hmac=#{URI.encode hmac}" "blob=#{URI.encode blob}&hmac=#{URI.encode hmac}"

View File

@ -57,6 +57,13 @@ class Canvadoc < ActiveRecord::Base
!!(document_id && process_state != 'error' && Canvadocs.enabled?) !!(document_id && process_state != 'error' && Canvadocs.enabled?)
end end
def has_annotations?
account_context = attachment.context.try(:account)
account_context ||= attachment.context.try(:root_account)
new_annotations_enabled = account_context&.feature_enabled?(:new_annotations)
new_annotations_enabled || annotations == true
end
def self.mime_types def self.mime_types
JSON.parse Setting.get('canvadoc_mime_types', %w[ JSON.parse Setting.get('canvadoc_mime_types', %w[
application/excel application/excel

View File

@ -159,7 +159,7 @@
%> %>
<% end %> <% end %>
<% if attachment.crocodoc_available? || attachment.canvadocable? %> <% if attachment.crocodoc_available? || attachment.canvadocable? %>
<a href=<%= preview_url %> data-tooltip title="<%= preview_document %>" class="modal_preview_link Button--link" role="button" data-attachment_id="<%= attachment.id %>" data-submission_id="<%= @submission.id %>" data-dialog-title="<%= attachment.display_name %>" <%= doc_preview_attributes(attachment, crocodoc_ids: @crocodoc_ids) %>><%= button_text %></a> <a href=<%= preview_url %> data-tooltip title="<%= preview_document %>" class="modal_preview_link Button--link" role="button" data-attachment_id="<%= attachment.id %>" data-submission_id="<%= @submission.id %>" data-dialog-title="<%= attachment.display_name %>" <%= doc_preview_attributes(attachment, enable_annotations: true, crocodoc_ids: @crocodoc_ids) %>><%= button_text %></a>
<% end %> <% end %>
</div> </div>

View File

@ -5,7 +5,8 @@ module Canvadocs
def canvadocs_session_url(opts = {}) def canvadocs_session_url(opts = {})
user = opts.delete(:user) user = opts.delete(:user)
opts.merge! canvadoc_permissions_for_user(user) enable_annotations = opts.delete(:enable_annotations)
opts.merge! canvadoc_permissions_for_user(user, enable_annotations)
opts[:url] = attachment.authenticated_s3_url(expires_in: 7.days) opts[:url] = attachment.authenticated_s3_url(expires_in: 7.days)
opts[:locale] = I18n.locale || I18n.default_locale opts[:locale] = I18n.locale || I18n.default_locale
@ -20,8 +21,8 @@ module Canvadocs
end end
private :canvadocs_api private :canvadocs_api
def canvadoc_permissions_for_user(user) def canvadoc_permissions_for_user(user, enable_annotations)
return {} unless canvadocs_can_annotate? user return {} unless enable_annotations && canvadocs_can_annotate?(user)
annotation_context = "default" annotation_context = "default"
if ApplicationController.respond_to?(:test_cluster?) && ApplicationController.test_cluster? if ApplicationController.respond_to?(:test_cluster?) && ApplicationController.test_cluster?
@ -57,9 +58,8 @@ module Canvadocs
private :canvadoc_permissions_for_user private :canvadoc_permissions_for_user
def canvadocs_can_annotate?(user) def canvadocs_can_annotate?(user)
user && has_annotations? user.present?
end end
private :canvadocs_can_annotate? private :canvadocs_can_annotate?
end end
end end

View File

@ -1721,15 +1721,6 @@ describe Attachment do
end end
end end
describe "preview_params" do
it "includes crocodoc_ids only when a whitelist is given" do
course_factory :active_all => true
att = attachment_model
expect(att.send :preview_params, @teacher, 'document/msword').not_to include 'crocodoc_ids'
expect(att.send :preview_params, @teacher, 'document/msword', [1]).to include 'crocodoc_ids'
end
end
describe '#ajax_upload_params' do describe '#ajax_upload_params' do
it 'returns the attachment filename in the upload params' do it 'returns the attachment filename in the upload params' do
attachment_model filename: 'test.txt' attachment_model filename: 'test.txt'

View File

@ -78,7 +78,7 @@ describe 'Canvadoc' do
@doc.has_annotations = true @doc.has_annotations = true
canvadocs_api = @doc.send(:canvadocs_api) canvadocs_api = @doc.send(:canvadocs_api)
expect(canvadocs_api).to receive(:session).with(anything, hash_including(annotation_context: 'default')).and_call_original expect(canvadocs_api).to receive(:session).with(anything, hash_including(annotation_context: 'default')).and_call_original
@doc.session_url(user: @attachment.user) @doc.session_url(user: @attachment.user, enable_annotations: true)
end end
it "Creates test context for annotation session" do it "Creates test context for annotation session" do
@ -91,7 +91,7 @@ describe 'Canvadoc' do
canvadocs_api = @doc.send(:canvadocs_api) canvadocs_api = @doc.send(:canvadocs_api)
expect(canvadocs_api).to receive(:session).with(anything, hash_including(annotation_context: 'default-super-secret-testing')).and_call_original expect(canvadocs_api).to receive(:session).with(anything, hash_including(annotation_context: 'default-super-secret-testing')).and_call_original
@doc.session_url(user: @attachment.user) @doc.session_url(user: @attachment.user, enable_annotations: true)
end end
it "Session creation sends users crocodoc id" do it "Session creation sends users crocodoc id" do
@ -101,7 +101,7 @@ describe 'Canvadoc' do
canvadocs_api = @doc.send(:canvadocs_api) canvadocs_api = @doc.send(:canvadocs_api)
expect(canvadocs_api).to receive(:session).with(anything, hash_including(user_crocodoc_id: @attachment.user.crocodoc_id)).and_call_original expect(canvadocs_api).to receive(:session).with(anything, hash_including(user_crocodoc_id: @attachment.user.crocodoc_id)).and_call_original
@doc.session_url(user: @attachment.user) @doc.session_url(user: @attachment.user, enable_annotations: true)
end end
end end