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 individualtheme/templates/ead.php— template de listagem de cursos
Configuração (ACF Options)
Credenciais armazenadas no campo ACF apis (Options page):
| Campo ACF | Descrição |
|---|---|
canvas-api-url | URL base da API Canvas (ex: https://canvas.instructure.com/api/v1/) |
canvas-token | Bearer token de autenticação |
canvas-integration-id | ID do provedor de autenticação |
canvas-subaccount-id | ID da subconta Canvas |
Evidência: ead.php:4-7 — get_field('apis', 'option').
Banco de dados local
Tabela wp_ead_enrolled_to_courses
Criada via dbDelta no hook after_switch_theme:
| Campo | Tipo | Descrição |
|---|---|---|
id | INT AUTO_INCREMENT | PK |
courseid | TEXT | ID do curso Canvas |
userid | TEXT | ID do usuário WordPress |
Evidência: db.php:8-14.
User meta
| Meta key | Descrição |
|---|---|
canvas-id | ID do usuário no Canvas (mapeamento WP ↔ Canvas) |
Post meta (CPT ead)
| Meta key | Descrição |
|---|---|
course_id | ID do curso no Canvas |
users_allowed_to_enroll | IDs de usuários autorizados a cursar (multiple) |
course_workload | Carga horária |
course_topics | Nú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-iddo 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
- Canvas (sidebar): Mostra status de criação do curso no Canvas (ID ou erro).
- 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
| Action | Descrição |
|---|---|
group_selected_users_ajax | Retorna lista de usuários já autorizados para o dual-listbox |
Evidência: hooks.php — função group_selected_users_ajax().
Endpoint AJAX (público)
| Action | Método | Auth | Descrição |
|---|---|---|---|
course_enroll_ajax | POST | Logado | Inscreve 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_coursesusa TEXT paracourseideuserid(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.