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.