Descubra como criar e instalar plugins no Moodle para otimizar suas tarefas

Descubra como criar e instalar plugins no Moodle para otimizar suas tarefas

No universo open source, Moodle  pode ser considerado um sinônimo de plataforma de ensino à distância (EAD) e se tratando de um software de código aberto,  cedo ou tarde temos a necessidade de implementar funcionalidades para adequá-los à características únicas de nossas aplicações. Com o objetivo de facilitar essas alterações, sem que fosse preciso alterar o núcleo do sistema, muitas ferramentas fornecem a possibilidade de adicionar pequenos módulos – plugins – e com o Moodle isso não é diferente.

Uma das possibilidades que podemos destacar é poder criar plugins que funcionam como uma espécie de crontab – agendador de tarefas – no próprio Moodle. Pode ser um plugin que verifica uma API para inserir alunos, um plugin que extraí estatísticas em determinados horários ou ainda um plugin que de tempos em tempos sincroniza um pequeno backup.

Antes de mais nada, é preciso entender que a instalação de plugins do Moodle se dá pelos diretórios que foram compactados em um arquivo .zip e então enviados pelo painel ou simplesmente copiado no seu respectivo diretório sem compactação alguma.

Vamos criar um simples plugin chamado pulso que a cada 1 minuto escreve a data atual em um arquivo no diretório /tmp.

Estrutura de diretórios:

Um plugin consiste de um diretório com seu próprio nome e algumas pastas obrigatórias, formando a seguinte árvore:

 - pulso
   - classes
      - task
         pulso.php
   - db
      tasks.php
   - lang
      - en
         local_pulso.php
   version.php

pulso/version.php

O arquivo da raíz, version.php é um arquivo muito simples contento apenas informações sobre a versão, o tipo e o estado do desenvolvimento:

<?php defined('MOODLE_INTERNAL') || die(); $plugin->version   = 2018091000;      // YYYYMMDDXX, versão, XX é a versão incremental
$plugin->requires  = 2014051200;      // Mesmo caso acima, especifica a versão mínima do moodle
$plugin->cron      = 0;               // Antigo modelo de contrab, ignorar
$plugin->component = 'local_pulso';   // tipo_nome
$plugin->maturity  = MATURITY_STABLE; // <tt>MATURITY_ALPHA, _BETA, _RC</tt> ou <tt>_STABLE</tt>
$plugin->release   = 1.0;             // Versão da release

pulso/lang/en/local_pulso.php

De baixo para cima, dentro de lang existem subdiretórios para cada linguagem, vamos criar apenas o en, o arquivo precisa ter o tipo do plugin, seguido de um “_” (underscore) e seu nome, neste caso local_pulso.php:

<?php

$string['pluginname'] = 'Pulso';
$string['pluginname_desc'] = 'Plugin local que grava em arquivo de log.';

pulso/db/tasks.php

Dentro do diretório db existe o arquivo tasks.php que definirá os valores que serão inseridos na crontab:

<?php defined('MOODLE_INTERNAL') || die(); $tasks = array( array( 'classname' => 'local_pulso\task\pulso',
      'blocking'  => 0,
      'minute'    => '*/1', # A cada 1 minuto
      'hour'      => 0,
      'day'       => 0,
      'dayofweek' => 0,
      'month'     => 0
   )
);

pulso/classes/task/pulso.php

No diretório classes/task reside o arquivo pulso.php que controla o que será executado dado o intervalo de tempo especificado. Este arquivo é uma classe e possuí um namespace, ambos estes nomes precisam coincidir com o que foi definido nos arquivos anteriores e com o tipo do plugin:

<?php namespace local_pulso\task; //require_once $CFG->dirroot . '/course/lib.php'; # Inclusão de arquivos do moodle aqui
defined('MOODLE_INTERNAL') || die();

class pulso extends \core\task\scheduled_task {
   # Nome exibido para os admins no painel
   public function get_name() {
      return get_string('pluginname', 'local_pulso');
   }
   public function execute() {
      file_put_contents('/tmp/pulso.log', date('Y-m-d h:i:s'), FILE_APPEND);
   }
}

Verificar instalação

Feito isso você pode copiar a pasta pulso para dentro do diretório local de onde o Moodle foi instalado, por exemplo /var/www/local, caso você não tenha acesso, pode compactar a pasta em formato .zip e instalar pelo painel. Uma vez instalado, você pode verificar se a tarefa está agendada:

1 – Administração do Site

Clicar em administrar site

2 – Servidor

Clicar em servidor

3 – Tarefas Agendadas

Clicar em tarefas agendadas

4 – Verificar pelo plugin na lista

Verificar se tarefa existe

Exemplo no github

Este código pode ser baixado pelo github para melhor compreensão no seguinte repositório: https://github.com/hector-vido/exemplo-task-moodle.

CURSOSCONSULTORIA    CONTATO

Anterior Guia passo a passo para instalar o Anaconda e iniciar o Jupyter Notebook
Próxima Gerente de TI: Como o uso de software livre pode reduzir custos

About author

Hector Silva
Hector Silva 11 posts

Hector Vido Silva atua como Consultor de Infraestrutura em Software Livre, cursando Engenharia da Computação, formado em Análise e Desenvolvimento de Sistemas com MBA em Cibersegurança. Atua desde 2006 com desenvolvimento, implantação, arquitetura e resolução de problemas em ambientes envolvendo diferentes plataformas. Na 4Linux também ministra os cursos de desenvolvimento, banco de dados e infraestrutura para ambientes ágeis e automatizados com forte utilização de contêineres. Sim, é um generalista. Possuí certificações CKA, Openshift, LPIC-2, LPI DevOps, GCP Engineer, MongoDB, Blockchain e ZCE.

View all posts by this author →

Você pode gostar também

Desenvolvimento

Descubra as vantagens do MongoDB para o desenvolvimento Web

Bancos de dados são a base dos projetos de desenvolvimento Web. Muitos desenvolvedores estão voltando sua atenção para o MongoDB, um banco de dados sem esquema que é popular para uma

Infraestrutura TI

Descubra o Redis: a solução open source para armazenamento de dados

Administradores de sistemas e desenvolvedores provavelmente em algum momento já precisaram de alguma solução para armazenar dados temporários – como token de sessão – que sejam acessíveis de um ponto

Monitoramento TI

Guia Prático: Configurando o Prometheus em um Cluster Kubernetes

Nesse artigo faremos um guia para configurar o Prometheus em um cluster Kubernetes. Essa configuração irá coletar métricas de nó, pods e serviços automaticamente usando um auto disconvery do Prometheus.