def dashboard_course(request):
    course_instance_id = request.LTI.get('lis_course_offering_sourcedid')

    # list of permissions to determine tool visibility
    tools = {
        'class_roster': {
            'visible': lti_permission_required_check(request, settings.CUSTOM_LTI_PERMISSIONS['class_roster'])},
        'isites_migration': {
            'visible': lti_permission_required_check(request, settings.CUSTOM_LTI_PERMISSIONS['isites_migration'])},
        'manage_people': {
            'visible': lti_permission_required_check(request, settings.CUSTOM_LTI_PERMISSIONS['manage_people'])},
        'manage_sections': {
            'visible': _lti_role_allowed(request, manage_sections_lti_roles_permitted)},
    }

    # django template tags can't do dict lookups, so create a *_visible context
    # variable for each tool
    tool_visibility = {
        '{}_visible'.format(tool): tools[tool]['visible']
        for tool in tools.keys()}

    view_context = tool_visibility

    # are all tools hidden?
    no_tools_visible = len(filter(lambda x: x, tool_visibility.values())) == 0
    view_context['no_tools_visible'] = no_tools_visible

    # Check to see if we have any iSites that are available for migration to
    # this Canvas course
    icm_active = len(get_previous_isites(course_instance_id)) > 0
    view_context['isites_migration_active'] = icm_active

    return render(request, 'canvas_course_admin_tools/dashboard_course.html',
                  view_context)
def dashboard_course(request):
    course_instance_id = request.LTI.get('lis_course_offering_sourcedid')

    tool_access_permission_names = [
        'class_roster',
        'im_import_files',  # isites_migration
        'manage_people',
        'manage_sections',
        'custom_fas_card_1']

    # Verify current user permissions to see the apps on the dashboard
    allowed = {tool: lti_permission_required_check(request, tool)
               for tool in tool_access_permission_names}
    no_tools_allowed = not any(allowed.values())

    view_context = {
        'allowed': allowed,
        'no_tools_allowed': no_tools_allowed}

    if no_tools_allowed:
        view_context['custom_error_title'] = u'Not available'
        view_context['custom_error_message'] = \
            u"You do not currently have access to any of the tools available " \
            u"in this view. If you think you should have access, please " \
            u"use \"Help\" to contact Canvas support from Harvard."

    # Check to see if we have any iSites that are available for migration to
    # this Canvas course
    icm_active = len(get_previous_isites(course_instance_id)) > 0
    view_context['isites_migration_active'] = icm_active

    return render(request, 'canvas_manage_course/dashboard_course.html',
                  view_context)
def index(request):

    course_instance_id = request.LTI.get('lis_course_offering_sourcedid')
    canvas_course_id = request.LTI.get('custom_canvas_course_id')
    audit_user_id = request.LTI.get('custom_canvas_user_login_id')

    if request.method == 'POST':
        keyword = request.POST.get('keyword')
        title = request.POST.get('title')
        term = request.POST.get('term')

        Process.enqueue(
            migrate_files,
            settings.ISITES_MIGRATION_QUEUE_NAME,
            keyword=keyword,
            canvas_course_id=canvas_course_id,
            term=term,
            title=title,
            audit_user=audit_user_id,
        )

        # try to get the school.
        # if we have a course instance id, try that first.
        school = get_school(course_instance_id, canvas_course_id)

        logger.info(u'"migration started" %s %s "%s" "%s" %s %s %s' % (request.user.username, keyword, title, term,
                                                                 course_instance_id, canvas_course_id, school))
        return redirect('isites_migration:index')

    processes = Process.objects.filter(
        name='isites_migration.jobs.migrate_files',
        details__canvas_course_id=canvas_course_id
    ).order_by('-date_created')

    has_active_process = len([p for p in processes if p.state != Process.COMPLETE]) > 0
    return render(request, 'isites_migration/index.html', {
        'isites': get_previous_isites(course_instance_id),
        'processes': processes,
        'link_to_files_page': settings.CANVAS_URL + '/courses/%s/files' % canvas_course_id,
        'has_active_process': has_active_process,
        # Harcode to EST for now, but eventually set based on the launch user's profile setting
        'user_timezone': 'America/New_York',
    })