Pular para o conteúdo principal

EAD — Integração Canvas LMS

Resumo

Integração com Canvas LMS para criação de cursos e matrícula de alunos. Quando um post do tipo ead é publicado no WordPress, um curso é criado automaticamente no Canvas. Usuários podem se matricular via AJAX, o que cria o usuário no Canvas (se necessário) e o inscreve como StudentEnrollment.

Fontes de evidência

  • theme/functions/ead/ead.php — funções de integração Canvas (~160 linhas)
  • theme/functions/ead/ajax.php — endpoint AJAX de matrícula (38 linhas)
  • theme/functions/ead/hooks.php — hooks WordPress para EAD (~160 linhas)
  • theme/functions/ead/db.php — criação da tabela de matrículas (18 linhas)
  • theme/single-ead.php — template de curso individual
  • theme/templates/ead.php — template de listagem de cursos

Configuração (ACF Options)

Credenciais armazenadas no campo ACF apis (Options page):

Campo ACFDescrição
canvas-api-urlURL base da API Canvas (ex: https://canvas.instructure.com/api/v1/)
canvas-tokenBearer token de autenticação
canvas-integration-idID do provedor de autenticação
canvas-subaccount-idID da subconta Canvas

Evidência: ead.php:4-7get_field('apis', 'option').

Banco de dados local

Tabela wp_ead_enrolled_to_courses

Criada via dbDelta no hook after_switch_theme:

CampoTipoDescrição
idINT AUTO_INCREMENTPK
courseidTEXTID do curso Canvas
useridTEXTID do usuário WordPress

Evidência: db.php:8-14.

User meta

Meta keyDescrição
canvas-idID do usuário no Canvas (mapeamento WP ↔ Canvas)

Post meta (CPT ead)

Meta keyDescrição
course_idID do curso no Canvas
users_allowed_to_enrollIDs de usuários autorizados a cursar (multiple)
course_workloadCarga horária
course_topicsNúmero de tópicos

Fluxos

Criação de curso (automática)

sequenceDiagram
participant Editor as Editor WP
participant WP as WordPress
participant Canvas as Canvas LMS API

Editor->>WP: Publica post tipo "ead"
WP->>WP: Hook publish_ead → ead_new_course()
WP->>WP: Verifica se course_id já existe
alt Curso já criado
WP-->>WP: Ignora (já tem course_id)
end
WP->>Canvas: POST /api/v1/accounts/{subaccount}/courses
Note right of Canvas: course[name] = post_title<br>course[integration_id] = post_id
Canvas-->>WP: {id: 12345, ...}
WP->>WP: add_post_meta('course_id', 12345)

Evidência: hooks.php:3-7 — hook publish_ead, e ead.php — função ead_create_course().

Matrícula (usuário)

sequenceDiagram
participant U as Usuário logado
participant WP as WordPress
participant Canvas as Canvas LMS API
participant DB as Database

U->>WP: POST course_enroll_ajax (course_id + nonce)
WP->>WP: check_ajax_referer('ajax-course-nonce')
WP->>WP: Verifica is_user_logged_in()

WP->>Canvas: POST /accounts/{sub}/users (ead_create_user)
Note right of Canvas: pseudonym.unique_id = user.ID<br>user.name = display_name<br>communication_channel.email = user_email
alt Usuário já existe no Canvas
WP->>Canvas: GET /accounts/{sub}/users?search_term={email}
Canvas-->>WP: [{id: 999}]
else Criado com sucesso
Canvas-->>WP: {id: 999}
end
WP->>WP: update_user_meta('canvas-id', 999)

WP->>Canvas: POST /courses/{course}/enrollments (ead_enroll_user_to_course)
Note right of Canvas: enrollment.user_id = canvas_id<br>enrollment.type = StudentEnrollment<br>enrollment.enrollment_state = active
Canvas-->>WP: {id: enrollment_id}
WP->>DB: INSERT wp_ead_enrolled_to_courses (courseid, userid)
WP-->>U: {status: "success"}

Evidência: ajax.php:6-37 e ead.php — funções ead_create_user() e ead_enroll_user_to_course().

Limpeza de dados

Função clean_user_ead_data($user_id, $course_id):

  • Remove meta canvas-id do usuário.
  • Deleta registro de matrícula da tabela wp_ead_enrolled_to_courses.

Evidência: ead.php — função clean_user_ead_data().

Admin WordPress

Metaboxes no editor de posts EAD

  1. Canvas (sidebar): Mostra status de criação do curso no Canvas (ID ou erro).
  2. Usuários com acesso ao curso (normal): Dual listbox para selecionar usuários autorizados via users_allowed_to_enroll.

Evidência: hooks.php — funções canvas_metaboxes(), canvas_metabox_html(), canvas_users_allowed_metabox().

AJAX admin

ActionDescrição
group_selected_users_ajaxRetorna lista de usuários já autorizados para o dual-listbox

Evidência: hooks.php — função group_selected_users_ajax().

Endpoint AJAX (público)

ActionMétodoAuthDescrição
course_enroll_ajaxPOSTLogadoInscreve usuário em curso Canvas

Proteção: check_ajax_referer('ajax-course-nonce', 'security_nonce').

Evidência: ajax.php:3-5.

Pendências

  • Não há tratamento de erro detalhado quando Canvas API retorna códigos diferentes de 200.
  • A tabela ead_enrolled_to_courses usa TEXT para courseid e userid (deveria ser INT).
  • Não há desmatrícula automática — apenas clean_user_ead_data() para limpeza manual.
  • Token Canvas armazenado no banco (ACF Options) — sem rotação automática.