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:
parent
119251f6e0
commit
bbe4a41738
|
@ -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))
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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}"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue