canvas-lms/app/presenters/mark_done_presenter.rb

66 lines
2.2 KiB
Ruby

#
# Copyright (C) 2015 - present Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
class MarkDonePresenter
def initialize(ctrl, context, module_item_id, user, asset)
@ctrl = ctrl
@context = context
@asset = asset
module_item_id ||= infer_item_id
@item = ContentTag.find(module_item_id.to_i) if module_item_id
@module = @item.context_module if @item
@user = user
end
def infer_item_id
item_context =
case @context
when Course
@context
when Group
@context.context
end
return unless item_context.is_a?(Course)
item_ids = item_context.module_items_visible_to(@user).where(:content_type => @asset.class.name, :content_id => @asset.id).reorder(nil).pluck(:id)
item_ids.first if item_ids.count == 1
end
def has_requirement?
return false unless @module
return false unless @context.grants_any_right?(@user, @ctrl.session, :participate_as_student)
requirements = @module.completion_requirements
requirement = requirements.find {|i| i[:id] == @item.id}
return false unless requirement
requirement[:type] == 'must_mark_done'
end
def checked?
return false unless has_requirement?
progression = @module.context_module_progressions.find{|p| p[:user_id] == @user.id}
return false unless progression
!!progression.requirements_met.find {|r| r[:id] == @item.id && r[:type] == "must_mark_done" }
end
def api_url
@ctrl.api_v1_course_context_module_item_done_path(:course_id => @context.id,
:module_id => @item.context_module_id,
:id => @item.id)
end
end