# Ambientes Virtuais de Aprendizagem/Desenvolvimento de módulos no Moodle

Para desenvolver um módulo para o Moodle existem passos e regras que necessitam ser respeitadas de forma a que a aplicação reconheça aquele grupo de arquivos como um módulo.
Assim um módulo deve respeitar as seguintes regras: - Todos os arquivos que compõem o módulo devem estar num diretório com um nome que não deverá conter números ou caracteres especiais e deve ser uma palavra única sem espaços. Esse diretório deverá ficar localizado na pasta /mod do moodle. - Todos os arquivos de código deverão ter a extensão .php - Todos os arquivos de modelo deverão ter a extensão .html - Todos os acessos a base de dados deverão ser feitos usando as funções que constam do arquivo datalib.php existente na pasta /lib do Moodle - Todos os textos deverão ser manuseados através das funções pré-definidas pelo moodle (get_string e print_string). Assim é forçado que parte do código seja standard e facilite a tradução do texto para outras línguas. Estas funções buscam as palavras chave no arquivo de língua localizado no directório /lang do módulo. Este arquivo tem de ter o nome do módulo seguido da extensão .php. - O nome do módulo é definido no arquivo de língua, atribuíndo o nome desejado à variável modulename. Para definir o plural deve-se atribuir o nome no plural à variável modulenames. - Cada arquivo de código deve incluir o arquivo config.php do moodle require_once("../../config.php"); necessário para identificação do utilizador através de require_login e isadmin, isteacher, iscreator ou isstudent. - Todos os arquivos de ajuda devem ser passíveis de tradução, colocando novos arquivos de ajuda no diretório adequado. Por ex. lang/pt/help - Todos os textos dentro do Moodle, especialmente aqueles que são provenientes de utilizadores devem ser impressos usando a função format_text. Isto assegura que o texto está filtrado e devidamente limpo.
Além disso os seguintes arquivos são obrigatórios: mod.html – um formulário inicial que será apresentado no moodle, serve para criar e modificar uma instância (objecto resultante do módulo, ex. inquérito X, inquérito Y, etc.) do módulo. version.php – indica a versão do módulo e é útil para posteriormente fazer upgrades. Também deve indicar o intervalo de tempo em que o script cron.php do moodle atualiza os dados relativos ao módulo. icon.gif – pequena imagem representativa do módulo index.php – página que lista todas as instâncias existentes do módulo view.php – página que permite ver uma instância em particular lib.php – Neste arquivo devem estar as seguintes funções (exemplo para um módulo chamado modulo):
Acrescenta-se ainda que também os seguintes métodos são de implementação obrigatória: modulo_add_instance – código para adicionar uma nova instância modulo_update_instance – código para actualizar uma instância modulo_delete_instance – código para apagar uma instância modulo_user_outline – código que lista resumo sobre o utilizador modulo_user_complete – código que fornece toda a informação do utilizador
Se o módulo necessitar de utilizar com uma base de dados, deve existir um directório db/ dentro do directório do módulo com um arquivo mysql.php e/ou postgres.php e também um arquivo mysql.sql e/ou postgres.sql consoante o SGBD sobre o qual a aplicação Moodle está a funcionar. o arquivo .php é utilizado para fazer actualizações na base de dados para a eventualidade de já existir uma versão anterior do mesmo módulo instalada no sistema. o arquivo .sql consiste nas instruções SQL que vão criar as tabelas na base de dados que o módulo irá usar. Todas as tabelas deverão ter como início do nome prefix_ seguido de um nome. O valor de prefix é depois atribuído pelo Moodle aquando da execução do código SQL.
A tabela principal devera ter o mesmo nome que o módulo (ex: prefix_modulo) e deve conter no mínimo os seguintes campos: id – INT 10 autoincremental como indice primário course – com o id do curso à qual a instância pertence name – o nome completo de cada instância do módulo
As outras tabelas devem ser nomeadas seguindo a regra prefix_modulo_nome. Após cumprir todos estes passos, passa-se então à restante implementação do módulo.