Fórum de desenvolvedores

Duplicar Curso do Moodle com API

 
Picture of Lino Vaz Moniz
Duplicar Curso do Moodle com API
by Lino Vaz Moniz - Saturday, 24 October 2015, 12:59 AM
 

Este post apresenta a codificação PHP para duplicar um curso do Moodle usando o  API do próprio framework Moodle.

 A duplicação pelo código possibilita automatizar o processo de backup e restauração. Imagine a situação em que você tem um curso modelo com todo o conteúdo formatado e pronto para ofertar.  Para cada turma no sistema acadêmico é criado uma instancia diferente do curso no Moodle com o mesmo conteúdo.  Neste caso, ninguém merece o processo repetitivo de restaurar manualmente o backup para cada instancia do curso. Se isso for a sua situação, relaxe. Tome uma cerva gelada para se animar com as sopas de letrinhas reaproveitando o API do Moodle.

Para duplicar um curso pelo código PHP, abra um editor de texto, e manda a ver na sopa de letrinhas. Siga os seguintes passos:

1° Passo – Importar biblioteca de funções gerais

Importe a biblioteca de funções do Moodle:

require_once("../config.php");

2° Passo – Importar biblioteca externa do curso

Importe a biblioteca externallib.php  do Moodle que faz duplicação do curso.

require("$CFG->dirroot/course/externallib.php");

3° Passo – Efetuar controle de segurança

Faça controle de segurança. Operações sensíveis como esse é recomendado para quem tem o perfil de administrador.

Esse comando força que o usuário esteja logado

require_login();

O código a seguir exige que o usuário tenha permissão de configuração do Moodle, permissão de administrador.

 
if(!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))){

     echo "Falha de permissao. Apenas adminitrador do Moodle deve duplicar curso";

     exit;

 }

4° Passo – Capturar parâmetros

Capture os parâmetros que devem ser passados no URL  para customizar o processo de clonagem do curso.

$ocourseid= optional_param('ocourseid', 2,PARAM_INT);

 

Esse código especifica o id do curso que deve ser clonado, ou seja, duplicado. Se nenhum parâmetro for passado, 2 será usado como valor padrão.

$newcursofname= optional_param('newcursofname', 'Novo Curso  - '.time(),PARAM_TEXT);

 

Esse código especifica o nome do novo curso a ser criado a partir do clone . Se nenhum parâmetro for passado, Novo Curso  - {timestamp} será usado como valor padrão.

$newcursosname= optional_param('newcursosname', 'NC-'.time(),PARAM_TEXT);

Esse código especifica o nome abreviado do novo curso a ser criado a partir do clone. Se nenhum parâmetro for passado, NC -{timestamp} será usado como valor padrão.

$catcourseid= optional_param('catcourseid', 1,PARAM_INT);

Esse código especifica o id da categoria de curso em que o novo curso deve ser vinculado. Se nenhum parâmetro for passado, 1 será usado como valor padrão.

{timestamp} se refere a data que vai compor o nome padrão caso não for especificado. Por exemplo, se o parâmetro nome do curso não for passado, será criado Novo Curso – 1407840745.  O  valor 1407840745 se refere a data em número, ou seja, formato timestamp.

 

5° Passo – Processar clone

Nessa etapa vamos processar o clone

$cextlib=new core_course_external();

Esse código cria instância da biblioteca do Moodle que faz duplicação

$result=$cextlib->duplicate_course($ocourseid,$newcursofname,$newcursosname,$catcourseid);

Esse código executa a duplicação do curso.

print_r($result);

Esse código mostra o retorno do id novo curso criado e nove abreviado.  Deve retornar algo assim na tela: Array ( [id] => 7 [shortname] =>NC -1407840745 )

 

Isso é tudo que você precisa para duplicar um curso de forma automática. Aproveite desse código e faça a festa de clonagem do curso do Moodle. Não esqueça de fazer teste do código sempre em ambiente de desenvolvimento.  Esse API só funciona a partir da versão 2.3 do Moodle.

Código Completo

require_once("../config.php");
//importar biblioteca 
require("$CFG->dirroot/course/externallib.php");

//requer que o usuário esteja logado
 require_login();
 
 //requer ter permissão de admin
 if(!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))){
     echo "Falha de permissao. Apenas adminitrador do Moodle deve duplicar curso";
     exit;
 }
//perâmetros 
$ocourseid= optional_param('ocourseid', 2,PARAM_INT); // id do curso origem
$newcursofname= optional_param('newcursofname', 'Novo Curso  - '.time(),PARAM_TEXT); //nome do novo curso
$newcursosname= optional_param('newcursosname', 'NC-'.time(),PARAM_TEXT); //nome abreviado do novo curso
$catcourseid= optional_param('catcourseid', 1,PARAM_INT); // id da categoria de curso do novo curso

//criar objeto da classe core_course_external
$cextlib=new core_course_external();
$result=$cextlib->duplicate_course($ocourseid,$newcursofname,$newcursosname,$catcourseid); 

//impremir resultado gerado
print_r($result);

 

Implementar no Moodle
Para executar esse código no Moodle, crie uma pasta denominado _extra dentro da raiz da instalação do Moodle. Em seguida, crie um arquivo denominado duplicar_curso.php dentro dessa pasta. Digite o código php nesse arquivo.

 

Feito isso, acesse o endereço:

Url sem parâmetro – Valores padrões o códigos

http://[endereço do moodle_extra/duplicar_curso.php

Url com parâmetro
http://[endereço do moodle_extra/duplicar_curso.php?ocourseid=2&newcursofname=Curso Novo&newcursosname=CN&catcourseid=1

No URL com parâmetro, se executar duas vezes sem alterar o parâmetro newcursosname deve ser alterado uma vez que o nome abreviado do curso não deve ter duplicado na base de dados. Então, ao executar pela segunda vez sem mudar o parâmetro newcursosname,  vai dar erro de duplicação do nome abreviado do curso.

Download

Para economizar o tempo, faça download desse exemplo. Descompacte  o arquivo e cole na pasta _extra na raiz do seu Moodle. Caso a pasta _extra não exista ainda, crie-a. Agora faça o teste.

Só para lembrar os desavisados. Esse código só funciona a partir da versão 2.3 do Moodle.