Programacao php moodle

45
Programação PHP para Moodle Versão 1.0.0

Transcript of Programacao php moodle

Page 1: Programacao php moodle

Programação PHP para MoodleVersão 1.0.0

Page 2: Programacao php moodle

Sumário

I Sobre essa Apostila 2

II Informações Básicas 5

III GNU Free Documentation License 10

IV Programação PHP para Moodle 19

1 O que é o curso Programação PHP para Moodle 20

2 Plano de ensino 212.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Principais arquivos do Moodle 243.1 Lição 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.1.1 moodle/config.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.1.2 moodle/version.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.3 moodle/file.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.4 moodle/index.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4 Principais funções do Moodle 274.1 Lição 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.1.1 /lib/moodlelib.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.1.2 /lib/accesslib.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.1.3 /lib/weblib.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.1.4 /lib/datalib.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

1

Page 3: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

5 Sistema de seleção de idiomas 335.1 Lição 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5.1.1 Sistema de seleção de idiomas . . . . . . . . . . . . . . . . . . . . . . . . . 335.1.2 A função get string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6 Sistema de permissão de usuários (Roles) 356.1 Lição 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

6.1.1 Sistema de permissões de usuários . . . . . . . . . . . . . . . . . . . . . . . 356.1.2 Formato da permissão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

7 Criação de Módulos 377.1 Lição 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7.1.1 Definições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377.1.2 Criação do Novo Módulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407.1.3 Instalação do Novo Módulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2

Page 4: Programacao php moodle

Parte I

Sobre essa Apostila

3

Page 5: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Conteúdo

O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)

O formato original deste material bem como sua atualização está disponível dentro da licençaGNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção demesmo nome, tendo inclusive uma versão traduzida (não oficial).

A revisão e alteração vem sendo realizada pelo CDTC ([email protected]) desde outubrode 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.

Autores

A autoria deste é de responsabilidade de Sidney Ricardo Britto Villela de Medeiros ([email protected]), Tiago Luiz Batista Maciel ([email protected]) e Leonardo Guilherme deFreitas ([email protected]).

O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento quevêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto comoutros parceiros institucionais, e com as universidades federais brasileiras que tem produzido eutilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidadesno país.

Informações adicionais podem ser obtidas através do email [email protected], ou dahome page da entidade, através da URL http://www.cdtc.org.br.

Garantias

O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizamdireta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação ([email protected]) .

Permission is granted to copy, distribute and/or modify this document under the termsof the GNU Free Documentation License, Version 1.1 or any later version published bythe Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-TILA. A copy of the license is included in the section entitled GNU Free DocumentationLicense.

4

Page 6: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

5

Page 7: Programacao php moodle

Parte II

Informações Básicas

6

Page 8: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Sobre o CDTC

Objetivo Geral

O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito dodesenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.

Objetivo Específico

Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário ede código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre osservidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercadonacional a adotar novos modelos de negócio da tecnologia da informação e de novos negóciosde comunicação com base em software não-proprietário e de código fonte aberto, oferecendotreinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar comoincentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento deprodutos de software não proprietários e do seu código fonte livre, articulando redes de terceiros(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-dutos de software livre.

Guia do aluno

Neste guia, você terá reunidas uma série de informações importantes para que você comeceseu curso. São elas:

• Licenças para cópia de material disponível;

• Os 10 mandamentos do aluno de Educação a Distância;

• Como participar dos foruns e da wikipédia;

• Primeiros passos.

É muito importante que você entre em contato com TODAS estas informações, seguindo oroteiro acima.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação ([email protected]).

7

Page 9: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

É dada permissão para copiar, distribuir e/ou modificar este documento sob os termosda Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posteriorpúblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSAAPOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-mentação Livre GNU".

Os 10 mandamentos do aluno de educação online

• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado épré-requisito para a participação nos cursos a distância;

• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-tica é necessário para poder executar as tarefas;

• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,dos colegas e dos professores;

• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seuscolegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;

• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisãoe a sua recuperação de materiais;

• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações erealizá-las em tempo real;

• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;

• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagense descobertas;

• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente éponto - chave na comunicação pela Internet;

• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual nãocontrola a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.

Como participar dos fóruns e Wikipédia

Você tem um problema e precisa de ajuda?

Podemos te ajudar de 2 formas:

A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:

. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informaçõesque sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a

8

Page 10: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação queinteresse ao grupo, favor postá-la aqui.Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico docurso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos maisefetivos para esta prática.

. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativopara solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadasa todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podemajudar.Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com aformalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópicoé recomendável ver se a sua pergunta já foi feita por outro participante.

A segunda forma se dá pelas Wikis:

. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podemser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece umótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, porpessoas de todas as partes do mundo. Acesse-a em português pelos links:

• Página principal da Wiki - http://pt.wikipedia.org/wiki/

Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!

Primeiros Passos

Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:

• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;

• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar dasferramentas básicas do mesmo;

• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;

• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.

Perfil do Tutor

Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.

O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivosvalores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita asidéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.

9

Page 11: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutorou instrutor:

• fornece explicações claras acerca do que ele espera e do estilo de classificação que iráutilizar;

• gosta que lhe façam perguntas adicionais;

• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-que motivo a classificação foi ou não foi atribuída’;

• tece comentários completos e construtivos, mas de forma agradável (em contraste com umreparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, deameaça e de nervossismo’)

• dá uma ajuda complementar para encorajar um estudante em dificuldade;

• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;

• ajuda o estudante a alcançar os seus objetivos;

• é flexível quando necessário;

• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,talvez numa fase menos interessante para o tutor);

• escreve todas as correções de forma legível e com um nível de pormenorização adequado;

• acima de tudo, devolve os trabalhos rapidamente;

10

Page 12: Programacao php moodle

Parte III

GNU Free Documentation License

11

Page 13: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-

leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuiçãode textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.

This is an unofficial translation of the GNU General Documentation License into Brazilian Por-tuguese. It was not published by the Free Software Foundation, and does not legally state thedistribution terms for software that uses the GFDL–only the original English text of the GFDL doesthat. However, we hope that this translation will help Portuguese speakers understand the GFDLbetter.

Licença de Documentação Livre GNU Versão 1.1, Março de 2000

Copyright (C) 2000 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, masnão é permitido alterá-lo.

INTRODUÇÃO

O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"nosentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantémpara o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsávelpelas modificações feitas por terceiros.

Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações dodocumento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-ral (GNU GPL), que é um copyleft para software livre.

Nós fizemos esta Licença para que seja usada em manuais de software livre, por que softwarelivre precisa de documentação livre: um programa livre deve ser acompanhado de manuais queprovenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita amanuais de software; ela pode ser usada para qualquer trabalho em texto, independentementedo assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-cipalmente para trabalhos cujo propósito seja de introdução ou referência.

APLICABILIDADE E DEFINIÇÕES

Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelodetentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um

12

Page 14: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

licenciado e é referida como "você".

Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documentoou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outralíngua.

Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-clusivamente da relação dos editores ou dos autores do Documento com o assunto geral doDocumento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamentenesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, aSeção Secundária pode não explicar nada de matemática).

Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.

As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, comosendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.

Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de CapaFrontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.

Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-mente, representada num formato cuja especificação esteja disponível ao público geral, cujosconteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editoresde texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível deservir como entrada a formatadores de texto ou para tradução automática para uma variedadede formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formatode arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é"Transparente"é chamada de "Opaca".

Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XMLusando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, eprojetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatosproprietários que podem ser lidos e editados apenas com processadores de texto proprietários,SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejamdisponíveis para o público, e HTML gerado automaticamente por alguns editores de texto comfinalidade apenas de saída.

A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,o material que esta Licença requer que apareça na página do título. Para trabalhos que nãotenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-minente do título do trabalho, precedendo o início do corpo do texto.

13

Page 15: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

FAZENDO CÓPIAS EXATAS

Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou nãocomercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que estaLicença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-cente nenhuma outra condição, quaisquer que sejam, às desta Licença.

Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção decópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,você também precisa respeitar as condições da seção 3.

Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e tambémpode exibir cópias publicamente.

FAZENDO CÓPIAS EM QUANTIDADE

Se você publicar cópias do Documento em número maior que 100, e a nota de licença doDocumento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clarae legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, eTextos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara elegivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionaroutros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estaspreservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópiaexata em outros aspectos.

Se os textos requeridos em qualquer das capas for muito volumoso para caber de formalegível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capaverdadeira, e continuar os outros nas páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, vocêprecisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópiaOpaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparentecompleta do Documento acessível publicamente em uma rede de computadores, à qual o públicousuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos deprotocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurarque esta cópia Transparente vai permanecer acessível desta forma na localização especificadapor pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-mente ou através de seus agentes ou distribuidores) daquela edição para o público.

É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes deredistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover vocêcom uma versão atualizada do Documento.

14

Page 16: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

MODIFICAÇÕES

Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuiçãoe modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Alémdisso, você precisa fazer o seguinte na versão modificada:

A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listadosna seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior seo editor original daquela versão lhe der permissão;

B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cincodos autores principais do Documento (todos os seus autores principais, se ele tiver menos quecinco);

C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;

D. Preservar todas as notas de copyright do Documento;

E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente àsoutras notas de copyright;

F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao públicoo direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópicoabaixo;

G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos deCapa requeridos dados na nota de licença do Documento;

H. Incluir uma cópia inalterada desta Licença;

I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendopelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página deTítulo. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo otítulo, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionarum item descrevendo a Versão Modificada, tal como descrito na sentença anterior;

J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a umacópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicadopelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refirader sua permissão;

K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da

15

Page 17: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-buidores e/ou dedicatórias dados;

L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou emseus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;

M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na VersãoModificada;

N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outrotítulo dado a uma Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem comoSeções Secundárias e não contenham nenhum material copiado do Documento, você pode optarpor designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seustítulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-sam ser diferentes de qualquer outro título de seção.

Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - porexemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como adefinição oficial de um padrão.

Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textosde Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma deTexto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente porvocê ou por acordo feito com alguma entidade para a qual você esteja agindo, você não podeadicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior queadicionou a passagem antiga.

O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seusnomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquerVersão Modificada.

COMBINANDO DOCUMENTOS

Você pode combinar o Documento com outros documentos publicados sob esta Licença, sobos termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e listetodas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.

O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções InvariantesIdênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houvermúltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de

16

Page 18: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editororigianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajustenos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.

Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combinequaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas asseções entituladas como "Endosso".

COLETÂNEAS DE DOCUMENTOS

Você pode fazer uma coletânea consitindo do Documento e outros documentos publicadossob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos comuma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópiaexata de cada um dos Documentos em todos os outros aspectos.

Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sobesta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga estaLicença em todos os outros aspectos relacionados à cópia exata daquele documento.

AGREGAÇÃO COM TRABALHOS INDEPENDENTES

Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pelacompilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outrostrabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assimcompilados, e eles não são trabalhos derivados do Documento.

Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capado Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.Senão eles precisarão aparecer nas capas de todo o agregado.

TRADUÇÃO

Tradução é considerada como um tipo de modificação, então você pode distribuir traduçõesdo Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduçõesrequer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluirtraduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessasSeções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a

17

Page 19: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.

TÉRMINO

Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitossob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob estaLicença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em totalacordo com esta Licença.

REVISÕES FUTURAS DESTA LICENÇA

A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versãopresente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Vejahttp://www.gnu.org/copyleft/.

A cada versão da Licença é dado um número de versão distinto. Se o Documento especificarque uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, vocêtem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versãoposterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se oDocumento não especificar um número de Versão desta Licença, você pode escolher qualquerversão já publicada (não como rascunho) pela Free Software Foundation.

ADENDO: Como usar esta Licença para seus documentos

Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licençano documento e ponha as seguintes notas de copyright e licenças logo após a página de título:

Copyright (c) ANO SEU NOME.É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licençade Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos daCapa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".

Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés dedizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos deCapa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para osTextos da Quarta Capa.

Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,

18

Page 20: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

19

Page 21: Programacao php moodle

Parte IV

Programação PHP para Moodle

20

Page 22: Programacao php moodle

Capítulo 1

O que é o curso Programação PHP paraMoodle

Este curso irá abordar a programação PHP no Moodle, expondo as principais funções do Moodlee exemplificando o seu uso. Ele é recomendado para usuários do Moodle com certa experiênciaem programação e que desejam fazer alterações pequenas ou complexas em módulos, blocos,estruturas dos cursos, etc.

21

Page 23: Programacao php moodle

Capítulo 2

Plano de ensino

2.1 Objetivo

Qualificar técnicos e programadores na linguagem de programação PHP voltada para o sis-tema Moodle.

2.2 Público Alvo

Técnicos e Programadores que desejam trabalhar com Moodle.

2.3 Pré-requisitos

Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-mento básico acerca da lógica de programação.

2.4 Descrição

O curso Programação PHP para Moodle será realizado na modalidade EAD e utilizará a plata-forma Moodle como ferramenta de aprendizagem. Ele é composto de um módulo de aprendizadoque será dado na primeira semana. O material didático estará disponível on-line de acordo comas datas pré-estabelecidas no calendário.

2.5 Metodologia

O curso está dividido da seguinte maneira:

2.6 Cronograma

• Lição 1 - Principais Arquivos do Moodle;

• Lição 2 - Principais funções do Moodle;

22

Page 24: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Lição 3 - Sistema de Seleção de Idiomas;

• Lição 4 - Sistemas de Permissões de Usuários;

• Lição 5 - Criação de Módulos.

As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces-sárias, desde que estejam dentro da semana programada. Ao final de uma lição, você receberáuma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li-ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição sejamenor que 6.0, sugerimos que você faça novamente esta lição.Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das liçõesquanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveispara que possam ser consultados durante a avaliação final.Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-sino à Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.Os instrutores estarão à sua disposição ao longo de todo curso. Qualquer dúvida deverá serenviada ao fórum. Diariamente os monitores darão respostas e esclarecimentos.

2.7 Programa

O curso Programação PHP para Moodle oferecerá o seguinte conteúdo:

• Principais Arquivos do Moodle;

• Principais funções do Moodle;

• Sistema de Seleção de Idiomas;

• Sistemas de Permissões de Usuários.

• Criação de Módulos.

2.8 Avaliação

Toda a avaliação será feita on-line.Aspectos a serem considerados na avaliação:

• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;

• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.

Instrumentos de avaliação:

• Participação ativa nas atividades programadas.

• Avaliação ao final do curso.

• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação eobtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordocom a fórmula abaixo:

• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições;

• AF = Avaliações.

23

Page 25: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

2.9 Bibliografia

• Site oficial: http://moodle.org

24

Page 26: Programacao php moodle

Capítulo 3

Principais arquivos do Moodle

Nesta lição, serão listados e explicados alguns dos principais arquivos do Moodle, bem comosua função.

3.1 Lição 1

3.1.1 moodle/config.php

moodle/config.phpLocalizado na pasta raiz do Moodle, possui as configurações necessárias para conexão ao

banco de dados, endereço da pasta onde o Moodle está instalado e endereço da pasta moodle-data.

O config.php é criado durante a instalação do Moodle, de acordo com os dados informadospelo administrador do Moodle. Seu conteúdo é o seguinte:

unset($CFG); // Limpando a variável global das configurações;

$CFG->dbtype = 'mysql'; // Tipo do banco de dados da instalação;$CFG->dbhost = 'localhost'; // Servidor onde o banco de dados está instalado(localhost caso for a própria máquina);$CFG->dbname = 'dbname'; // Nome do banco de dados;$CFG->dbuser = 'dbuser'; // Usuário do banco de dados;$CFG->dbpass = 'dbpass'; // Senha do banco de dados;$CFG->dbpersist = false; // Configuração especificada pelo script de instalação;$CFG->prefix = 'mdl_brasil'; // Prefixo do banco de dados;

$CFG->wwwroot = 'http://172.16.0.54/trunk'; // Endereço Web do Moodle instalado;$CFG->dirroot = '/var/www/trunk'; // Pasta onde se encontra a instalação do Moodle;$CFG->dataroot = '/var/moodledata'; // Pasta onde se encontra o moodledata (imagensde usuários, cursos, backups, etc);

$CFG->admin = 'admin'; // Usuário administrador do moodle;

require_once("$CFG->dirroot/lib/setup.php"); // Chamada do script de conexão aobanco de dados.

25

Page 27: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Se for preciso fazer uma reinstalação do Moodle, alterar o banco de dados ou sua localizaçãoou alguma outra alteração na instalação, basta remover o config.php que o guia de instalaçãoserá iniciado automaticamente quando o Moodle for acessado. Sendo assim, basta preencher oscampos com as novas configurações que um novo config.php será criado.

3.1.2 moodle/version.php

moodle/version.php

Localizado na pasta raiz, possui a versão instalada do Moodle. O Moodle compara essa va-riável com a armazenada no banco de dados para verificar se foi feito um upgrade na versão doMoodle, e se é necessário executar o script de atualização de versão.

No banco, a versão está armazenada na tabela prefix_config. Para verificar a versão executeo seguinte comando SQL no seu banco de dados:

SELECT * FROM 'prefix_config' where name='version'

Sendo que "prefix_"é o prefixo escolhido durante a instalação do Moodle (armazenado no arquivoconfig.php).

<?php

// MOODLE VERSION INFORMATION

// This file defines the current version of the core Moodle code being used.// This is compared against the values stored in the database to determine// whether upgrades should be performed (see lib/db/*.php)

$version = 2007021510; // YYYYMMDD = date of the 1.8 branch (don't change)// X = release number 1.8.[0,1,2,3...]// Y = micro-increments between releases

$release = '1.8.1'; // Human-friendly version name

?>

O número da versão é na realidade a data em que a versão atual foi fechada.

3.1.3 moodle/file.php

moodle/file.phpLocalizado na pasta raiz, é responsável por acessar os arquivos localizados no diretório da-

taroot (moodledata). Ele possui verificações para evitar que usuários sem permissões acessemarquivos de outros cursos, ou outros usuários.

A sintaxe é a seguinte:

26

Page 28: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

// Syntax: file.php/courseid/dir/dir/dir/filename.ext// file.php/courseid/dir/dir/dir/filename.ext?forcedownload=1 (download instead ofinline)// file.php/courseid/dir (returns index.html from dir)// Workaround: file.php?file=/courseid/dir/dir/dir/filename.ext// Test: file.php/testslasharguments

3.1.4 moodle/index.php

moodle/index.php

Localizado na pasta raiz, possui a estrutura da página inicial do Moodle.

O seguinte trecho de código, verifica se é uma nova instalação do Moodle:

if (!file_exists('./config.php')) {header('Location: install.php');die;}

Se o arquivo config.php não for encontrado, ele inicia o install.php, que irá criar um arquivo deconfiguração (config.php).

Após a criação do arquivo ele conecta verifica se já existe uma instalação no banco de dadosespecificado. Caso não exista, o script de criação de tabelas e instalação dos módulos é iniciado.

27

Page 29: Programacao php moodle

Capítulo 4

Principais funções do Moodle

Nesta lição, serão listadas e explicadas algumas das principais funções do Moodle.

4.1 Lição 2

4.1.1 /lib/moodlelib.php

function required_param($parname, $type=PARAM_CLEAN)Função utilizada para retornar o valor de determinada variável, passadas via GET ou via

POST. Caso seja passada simultaneamente pelos dois métodos, prevalece o método POST. Seo parâmetro não existir, um erro é retornado pois a variável é necessária.

A função recebe como parâmetro de entrada a string $parname com o nome da variávelrequerida, e o parâmetro $type um inteiro que determina o tipo esperado do valor a ser retornado.

Exemplo de uso:

$contextid = required_param('contextid', PARAM_INT); // context id

function optional_param($parname, $default=NULL, $type=PARAM_CLEAN)Função utilizada para retornar o valor de determinada variável, passada via GET ou via POST.

Caso seja passada simultaneamente pelos dois métodos, prevalece o método POST.

Caso nenhum valor tenha sido passado pela variável especificada, a função retorna o valorpassado no parâmetro $default.

A função recebe como parâmetro de entrada a string $parname, com o nome da variável re-querida, o parâmetro $default e o parâmetro $type, um inteiro que determina o tipo esperado dovalor a ser retornado.

Exemplo de uso:

$add = optional_param('add', 0, PARAM_BOOL);

function require_login($courseorid=0, $autologinguest=true, $cm=null)

28

Page 30: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Esta função verifica se o usuário atual está logado e possui os privilégios requridos em umdeterminado curso, ou módulo de um curso.

Caso o usuário não esteja logado, ele é redirecionado para a página de login. Se for infor-mado um ID de curso, então é verificado se o usuário está inscrito no curso. Caso contrário, éredirecionado para a página de inscrição no curso.

Exemplo de uso:

require_login($course->id); // verifica se está logado no curso com id $course->id

require_login(); // Verifica se está logado no site.

4.1.2 /lib/accesslib.php

function require_capability($capability, $context=NULL, $userid=NULL, $doanything=true, $errormessage=’nopermissions’, $stringfile=”)

Essa função verifica se o usuário possui a permissão requerida. Caso contrário, uma mensa-gem de erro é mostrada e a exibição da página interrompida.

Recebe como parâmetros de entrada o nome da permissão, o contexto em que deverá ser ve-rificada a permissão, um ID de usuário (informado caso queira verificar a permissão um usuáriodeterminado, sem ser o que está logado atualmente).

Exemplo de uso:

require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM,SITEID));

require_capability('moodle/site:config', $context, $USER->id);

function has_capability($capability, $context=NULL, $userid=NULL, $doanything=true)

Semelhante ao require_capability(), essa função verifica se determinado usuário possui per-missão para fazer determinada ação. Retorna TRUE caso positivo e FALSE caso negativo.

Recebe como parâmetros de entrada o nome da permissão, o contexto em que deverá serverificada a permissão, um ID de usuário. Se o parâmetro ID de usuário não for passado, assumecomo sendo o ID do usuário logado atualmente.

Exemplo de uso:

// Verifica se o usuário atual possui a permissão de realizar um backup, casopositivo entra no IF.if (has_capability('moodle/site:backup', $context)&& ($course->id!==SITEID)) {

// Verifica se o usuário atual é administrador, caso negativo, entra no IF.

29

Page 31: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

if (!$alreadyadmin = has_capability('moodle/site:config',get_context_instance(CONTEXT_SYSTEM, SITEID))) { ... }

4.1.3 /lib/weblib.php

function print_header ($title=”, $heading=”, $navigation=”, $focus=”, $meta=”, $cache=true, $button=’&nbsp;’, $menu=”, $usexml=false, $bodytags=”, $return=false)

Função utilizada para imprimir a parte superior do layout do Moodle. Sua aparência é definidade acordo com o tema escolhido nas configurações do Moodle. Ela só deve ser chamada umaúnica vez em cada script PHP, visto que sempre que a função é chamada, o cabeçalho HTML(HTML Header) é alterado.

Recebe como primeiro parâmetro de entrada o título, que aparecerá no topo da janela. Osegundo parâmetro irá aparecer no topo da página, e normalmente é o nome do site ou o nomedo curso que está atualmente.

O terceiro parâmetro é o endereço para navegação, e deve ser da seguinte forma:

"<a href=\".\">Curso Teste</a> -> Lista de usuários"

O quarto parâmetro, $focus, indica em qual campo de qual formulário o cursor deve estar quandoa página for carregada:

’eventform.name’ ou ’form.password’

O quinto parâmetro é utilizado para adicionar meta tags. No caso de scripts de upgrade deversão do moodle ou de módulos por exemplo, existe a função upgrade_get_javascript() que re-torna uma string na forma:

$linktoscrolltoerrors .= '<script type="text/javascript" src="' . $CFG->wwwroot .'/lib/scroll_to_errors.js"></script>';

O parâmetro $cache é um boleano (TRUE ou FALSE), que informa se a página pode serarmazenada no cache.

Exemplos de uso:

print_header($strdatabaseupgrades, $strdatabaseupgrades, $strdatabaseupgrades, '',upgrade_get_javascript());

print_header($SITE->fullname, "$SITE->fullname","<a href=\"../index.php\">$stradministration</a> -> $straction");

function print_footer($course=NULL, $usercourse=NULL, $return=false)

Função responsável por imprimir a parte inferior do layout, também definida pelo tema esco-lhido.

30

Page 32: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Recebe como parâmetro uma string ou um objeto contendo informações sobre a página atual.

Se for uma string com conteúdo ’none’, não imprime a informação do usuário logado. Se tivero conteúdo ’home’, exibe um layout específico para a página inicial, com um logo do Moodle.

Caso seja especificado um objeto com os dados do curso atual, exibe um link para a páginainicial do Moodle.

Exemplos de uso:

print_footer($course);

print_footer('none');

function notify($message, $style=’notifyproblem’, $align=’center’, $return=false)Função utilizada para imprimir uma mensagem em destaque com a cor definida pelo tema

escolhido.

O primeiro parâmetro é o texto que deverá ser impresso. O segundo é o estilo que a mensa-gem deve ter, definida no tema. No terceiro parâmetro é informado se deve imprimir no centro,esquerda ou direita da página. O quarto e último parâmetro informa se a imagem deve ser impri-mida ou ter seu conteúdo retornado para uma variável.

Exemplos de uso:

notify($displaynoticegood, 'notifysuccess');

$status = notify('Status OK', '', 'left', true);

function error ($message, $link=”, $adminroot=false)

Função utilizada para imprimir mensagens de erro durante a execução de um script PHP. Umavez chamada a função error(), a mensagem é exibida e a execução interrompida.

Recebe como primeiro parâmetro a mensagem de erro que será mostrada na tela, e o se-gundo parâmetro a URL para onde deverá ser redirecionado ao clicar no botão continuar, locali-zado abaixo da mensagem.

Exemplo de uso:

error("You need to be an admin user to use this page.","$CFG->wwwroot/login/index.php");

error("Site not found!");

31

Page 33: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

function print_box($message, $classes=’generalbox’, $ids=”, $return=false)

Função utilizada para imprimir uma mensagem em uma caixa com o layout definido pelo tema.

O primeiro parâmetro é a mensagem, que será o conteúdo da caixa. O segundo parâmetro épara especificar o tipo de caixa que será impresso, que deverá conter no css do tema. O terceiroé o id da caixa (tag <div>), utilizado pelos scripts em javascript quando necessário. O quartoparâmetro é um booleano que informa se a função deve imprimir a caixa com o conteúdo (com ocomando "echo") ou retornar o conteúdo para uma variável.

Exemplo de uso:

print_box(format_text($forum->intro), 'generalbox', 'intro');

print_box($message, 'generalbox', 'notice');

function redirect($url, $message=”, $delay=-1, $adminroot = ”)

Função utilizada para, em determinada situação, redirecionar o usuário para outra página.

Recebe como primeiro parâmetro a URL para onde o usuário será redirecionado. O segundoparâmetro é opcional, é uma mensagem que será exibida ao usuário sobre o redirecionamento.O terceiro parâmetro se refere ao tempo em segundos que o script deverá esperar antes de redi-recionar o usuário. Caso não for especificado, o padrão é 3 segundos.

Exemplos de uso:

redirect($CFG->wwwroot .'/course/', 'Message sent, thanks', 3);

redirect($CFG->wwwroot);

4.1.4 /lib/datalib.php

function add_to_log($courseid, $module, $action, $url=”, $info=”, $cm=0, $user=0)

Função que adiciona um registro à tabela de logs. É muito importante adicionar registros aolog sempre que algum script fizer alguma alteração ao banco de dados, para que tenha sempreum registro detalhado das ações de cada usuário.

Esta função não segue o padrão de acesso ao banco de dados utilizada em funções, pois é afunção mais freqüentemente usada com acesso ao banco. Por este motivo, ela foi otimizada paramaior velocidade.

O primeiro parâmetro é o ID do curso que o usuário está atualmente. Caso não esteja dentrode um curso o ID será igual a 1 (ID do SITE). O segundo é o nome do módulo, que pode serforum, journal, resource, course, user dentre outros. O terceiro é a ação realizada e pode seralgo como ’view’, ’update’, ’add’, ’delete’, ’error’, etc. O quarto é a url com o nome do arquivo e os

32

Page 34: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

parâmetros usados para resultar na ação do script. O quinto é para alguma informação adicional,importante na hora de analisar o log. O sexto é o ID do módulo que foi executado. O sétimo eúltimo é o ID do usuário que solicitou a ação executada.

Exemplos de uso:

add_to_log($course->id, 'data', 'templates saved', "templates.php?id=$cm->id&amp;d=$data->id", $data->id, $cm->id);

add_to_log($course->id, 'lesson', 'view', 'view.php?id='. $cm->id, $pageid,$cm->id);

add_to_log($course->id, "exercise", "delete", "view.php?id=$cm->id", "submission$submission->id");

33

Page 35: Programacao php moodle

Capítulo 5

Sistema de seleção de idiomas

Nesta lição, será explicado como o Moodle lida com o seletor de idiomas.

5.1 Lição 3

5.1.1 Sistema de seleção de idiomas

Para ter suporte há várias linguagens, o Moodle utiliza um sistema de organização de tradu-ções em vários módulos contendo alguns arquivos com as traduções.

São utilizados arquivos, com as traduções no seguinte formato:

$string['activities'] = 'Atividades';$string['activity'] = 'Atividade';$string['activityclipboard'] = 'Movendo esta atividade: <b>$a</b>';$string['activityiscurrentlyhidden'] = 'Sinto muito, por enquanto esta atividadenão pode ser acessada';

Onde os índices do array $string são os "identifier"e o conteúdo a tradução.

Para cada novo idioma, basta pegar um pacote de linguagem instalado atualmente (o inglêspor exemplo), duplicar os arquivos e ir traduzindo os termos.

5.1.2 A função get string()

Essa função é responsável por retornar a tradução dos termos:

function get_string($identifier, $module=”, $a=NULL, $extralocations=NULL)

O atributo $identifier é uma expressão em inglês sem espaços para identificar o conteúdo datradução. O $module é o nome do módulo de onde a função get_string() deve procurar pela tradu-ção especificada. Se não for especificado, o módulo "moodle"será usado. O atributo $a é utilizadopara passar um objeto, string ou número, que deverá ser inserido na tradução que será retornada.

34

Page 36: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Exemplo:

Para retornar a seguinte tradução corretamente no caso de ser uma string ou número:

$string['activityclipboard'] = 'Movendo esta atividade: <b>$a</b>';

Usa-se a função get_string() da seguinte forma:

$nomeatividade = 'Lição 1'$movendoativ = get_string('activityclipboard','',$nomeatividade)

Para retornar a seguinte tradução corretamente no caso de ser um objeto:

$string['xuserswiththerole'] = 'Usuários com a função \"$a->role\": $a->number';

Usa-se a função get_string() da seguinte forma:

$a->number = $totalcount;$a->role = $currentrole->name;$heading = format_string(get_string('xuserswiththerole', 'role', $a));

O atributo $extralocations é um array de strings com outras localizações de traduções, ondepode conter a tradução solicitada.

35

Page 37: Programacao php moodle

Capítulo 6

Sistema de permissão de usuários(Roles)

Nesta lição, será mostrada a forma como o Moodle gerencia as permissões dos usuários.

6.1 Lição 4

6.1.1 Sistema de permissões de usuários

Para gerenciar as permissões de usuários, o Moodle define várias funções (Administrador, Au-tores de curso, Tutor, Moderador, Estudante, Visitante, Usuário autenticado). Cada função possuiuma configuração específica de permissões, sendo que cada uma pode ser:

Not set;Permitir;Evitar;Proibir.

Para cada módulo instalado pode existir um arquivo com as permissões específicas deste.O arquivo é o access.php, e fica localizado no seguinte endereço: /mod/nome_do_modulo/db/access.php.

6.1.2 Formato da permissão

Cada permissão é da seguinte forma:

'mod/forum:viewdiscussion' => array(

'captype' => 'read','contextlevel' => CONTEXT_MODULE,'legacy' => array('guest' => CAP_ALLOW,'student' => CAP_ALLOW,

36

Page 38: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

'teacher' => CAP_ALLOW,'editingteacher' => CAP_ALLOW,'admin' => CAP_ALLOW))

Ou seja, a permissão ’mod/forum:viewdiscussion’ já vem habilitada para os seguintes papéis:’guest’ , ’student’, ’teacher’, ’editingteacher’ e ’admin’.

É possível também que um usuário tenha várias funções. Ou seja, um usuário pode ser umEstudante e também um Moderador em um mesmo curso. E da mesma forma, um usuário podeser Tutor em um curso e Administrador em outro.

Para colocar uma verificação em um script para que apenas os usuários que possuírem de-terminada permissão consigam acessá-lo, utilize o seguinte:

require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM,SITEID));

ou

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

error(get_string('accessdenied', 'admin'));}

Sendo que: ’moodle/site:config’ é a permissão padrão do usuário admin, ou seja, apenasusuários administradores terão acesso ao script; get_context_instance() é a função que retornao contexto da permissão, visto que um usuário pode ser simultaneamente aluno em um curso etutor em outro.

Atualmente existem 3 tipos de contextos:

$systemcontext = get_context_instance(CONTEXT_SYSTEM, SITEID);$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);$personalcontext = get_context_instance(CONTEXT_USER, $user->id);

CONTEXT_SYSTEM é o contexto geral no site, sendo que SITEID é o IDdo site (normalmente igual a 1);CONTEXT_COURSE é o contexto em determinado curso, sendo que $course->idé o ID do curso;CONTEXT_USER é o contexto em determinado usuário, sendo que $user->idé o ID do usuário;

37

Page 39: Programacao php moodle

Capítulo 7

Criação de Módulos

Nessa lição veremos como criar um módulo e como colocá-lo no nosso sistema.

7.1 Lição 5

7.1.1 Definições

Criação e Instalação do Módulo

No pincípio, entender como se relacionam as funções e os arquivos dentro do módulo podeser intimidador, mas de fato é mais simples do que parece, basta ter um ponto de partida paraestudar.

Um bom começo é um módulo de exemplo, já criado com o intuito de ser modificado. É um có-digo bem comentado e fácil de ser entendido. Você pode baixá-lo em http://download.moodle.org/plugins/mod/NEWMODULE.zip. Descompacte-o para que seja possível estudá-lo.

Para instalar o módulo, basta renomear a pasta NEWMODULE para newmodule, pois o Moo-dle só aceita arquivos em minúsculas como módulos. Depois de renomeado, mova a pasta parao diretório mod/, presente na raíz do Moodle. No Moodle, como administrador, clique em "Notifi-cações"ou "Notifications"e as tabelas do módulo devem ser inseridas corretamente.

Bem, Vamos começar pela pasta db/. Nela está o arquivo que descreve as tabelas do módulo,install.xml e o arquivo que descreve o upgrade, upgrade.php.

O moodle controla o seu módulo através de uma única tabela que deve ter o mesmo nomedo módulo. Para cada instância do módulo em um curso, existe uma entrada nesta tabela, poisinicialmente os módulos são feitos para serem colocados em cursos, tal qual o módulo de Fórum.

Portanto, tal tabela deve conter, além do campo de id, um campo para armazenar o id docurso que ela pertence. Outras informações pertinentes ao módulo também podem ser adicio-nadas nesta tabela. O recomendado é dividr as tabelas apropriadamente de maneira a tornar oarmazenamento de informações mais eficiente.

38

Page 40: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Para inserir módulos em cursos, como administrador, basta entrar no curso que se deseja adi-cionar o módulo, clicar no botão "Ativar Edição", no canto superior direito e então, no lado superioresquerdo do Moodle, você deve escolher o nome do módulo na listbox "Adicionar Atividade".

O Moodle vai te levar até a página do formúlario de configuração do módulo, e é aí que entra anossa parte. Como funciona esse formulário? Dentro do arquivo mod_form.php deve existir umaclasse chamada mod_(nome do modulo)_mod_form, onde (nome do modulo) deve ser substi-tuida pelo nome do seu modulo.

Esta classe deve herdar da classe moodleform_mod, e deve implementar os campos de umformulário de preenchimento. Felizmente, definir os campos de um formulário utilizando a classemoodleform é bastante simples.

Basta dar uma olhada no código do exemplo, que vai ficar fácil de entender. Aqui vai umtrecho do código:

require_once (’moodleform_mod.php’);

class mod_newmodule_mod_form extends moodleform_mod {

function definition() {

global $COURSE;

$mform =& $this->_form;

/// Adding the "general" fieldset, where all the common settings are showed

$mform->addElement('header', 'general', get_string('general', 'form'));

// Adding the standard "name" field

$mform->addElement('text', 'name', get_string('newmodulename', 'newmodule'),array('size'=>'64'));

...

...

...

}

39

Page 41: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

}E assim segue o padrão. Há as funções setType, addRule, e outras que podem ser adiciona-

das, mas não serão descritas aqui. Experimente com o mod_form.php para ver que é possívelobter todo tipo de resultado.

Vale lembrar que é importante que os nomes dos campos aqui presentes devem equivaleraos nomes dos campos da tabela no banco de dados. Havendo essa equivalência, fica fácil fazeruma inserção dos dados.

Depois que o usuário inseriu os dados e pressiona o botão de enviar, os dados são passados àuma função que deve estar presente no arquivo lib.php, chamada (nome do modulo)_add_instance.Dentro dessa função você pode fazer o que quiser com os dados, e no final usar a já conhecidafunção insert_record para inserir os dados na tabela. No nosso caso, a tabela seria newmodule.Trocando em miudos, essa é a função responsável por adicionar uma nova "instância"do módulo.

As informações da instância do módulo (quando o módulo é associado a um curso) po-dem ser atualizadas. Nesse caso, os dados do formulário são mandados à (nome do mo-dulo)_update_instance e funcionam da mesma forma, mas se deve utilizar update_record aoinvés de insert_record.

O módulo de exemplo está muito bem comentado nessa parte do lib.php e repetir tudo aquinão é necessário. Basta saber que para cada ação feita com o módulo, o lib.php que a imple-menta e faz funcionar.

Até agora, tudo muito simples, né? E não vai ficar mais complicado que isso. Vamos continuarnavegando pelos arquivos do módulo. Bem ali do lado, encontramos o view.php e o index.php.O primeiro tem a função de exibir as informações contidas em uma determinada instância domódulo, e o segundo navega por todas as instâncias do módulo, exibindo resumidamente infor-mações sobre todas elas.

Note que ambas as páginas precisam verificar se o usuário está autorizado a vizualizar apágina, com as funções require_login, has_capability, etc. Não há muita dificuldade nesses ar-quivos, seguindo o exemplo do NEWMODULE já dá pra ter uma idéia legal do que pode ser feito.

Agora, um pequeno, mas importante arquivo: version.php. Esse arquivo contém uma variávelmuito importante: $module->version, que é responsável por setar a versão do módulo. Geral-mente se utiliza como versão a data no formado AAAAMMDD (AAAA = Ano, exemplo 1999, MM= Mes, DD = dia), no entanto qualquer formato que represente uma mudança incremental naversão, tá valendo.

Uma vez incrementado esse número, quando se clica em "notificações"novamente, o mo-odle vai atualizar para a nova versão, e entra em cena uma função importante, contida emdb/update.php, xmldb_(nome do modulo)_upgrade. Ela recebe como parâmetro a versão an-tiga (ou seja, a que está rodando antes da nova atualização).

Isso é extremamente importante, pois muito frequentemente as tabelas do banco de dadospodem ser altaredas de versão para versão. A atualização não vai reler o "install.xml"no caso

40

Page 42: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

de uma atualização (somente no caso de uma instalação), e por tanto o update.php deve refle-tir as novas alterações no banco (como a inserção de uma nova tabela ou de um novo campo, etc).

Mais uma vez, o código exemplo é seu amigo, e preste bastante atenção na hora de criar umcódigo seu.

Um último arquivo a ser considerado resite na pasta lang/. Esta pasta contém, separadapor diretórios, os arquivos que contém as strings que podem e devem ser traduzidas de acordocom o pacote de linguagem instalado no moodle. No módulo exemplo, já existe o arquivolang/en_utf8/newmodule.php. Mais uma vez, observe que o newmodule.php deve ser substi-tuido com o nome do seu módulo.

O padrão de como esse arquivo é utilizado fica bem claro lá. Aquelas strings devem ser utili-zadas na função get_string. Por exemplo, se no arquivo de linguas estiver escrito algo como

$string['modulename'] = "Novo módulo";

você pode utilizar a função get_string(’modulename’, ’newmodule’) que ela vai retornar "Novomódulo". Simples né?

Fique atento pois caso você decida fazer uma tradução do arquivo já existente, o ideal é criara pasta pt_br_utf8, por exemplo, e colocar o arquivo de linguagem lá.

7.1.2 Criação do Novo Módulo

Edite todos os arquivos no diretório do seu módulo e modifique todas as instâncias de new-module para o nome do seu módulo (por exemplo, novomodulo).

Renomeie a pasta NEWMODULE para o nome do seu módulo, no caso novomodulo.

No arquivo de tradução (/lang/pt_br_utf8/novomodulo.php) deve conter as seguintes linhascom o nome do módulo, que irá aparecer na listagem dos módulos instalados no Moodle:

$string['modulename'] = 'Módulo';$string['modulenameplural'] = 'Módulos';

Neste mesmo arquivo, deve conter as traduções criadas para o seu módulo. Para que seumódulo fique disponível em outras linguagens, basta traduzir este arquivo e colocá-lo dentro dapasta correspondente:

/lang/en_utf8/novomodulo.php/lang/es_utf8/novomodulo.php

No arquivo /db/install.xml deve conter a estrutura de uma tabela com o mesmo nome do mó-dulo (novomodulo), que irá armazenar os dados das instâncias criadas para o módulo, além das

41

Page 43: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

outras tabelas necessárias ao funcionamento do módulo.

Cada vez que o módulo é inserido em um determinado curso, é criada uma nova instância eum novo registro é inserido na tabela novomodulo.

Tendo como exemplo um módulo de cadastramento de patrimônios, os registros inseridos de-vem ser armazenados em outra tabela como esta:

Tabela: novomodulo_itens

id - id autoincrementnovomodulo - id da instância do módulo na tabela novomodulo;name - nome do patrimônio;description - descrição do patrimônio;userid - id do usuário que inseriu;timecreated - quando o registro foi inserido.

Uma forma fácil de criar o arquivo install.xml, é utilizar a seguinte ferramenta do Moodle:

Administração -> Miscelânia -> Editor XMLDB

Ela permite gerar o XML de tabelas já existentes no seu banco Mysql.Exemplo de tabela no fomato XML:

<TABLE NAME="novomodulo" COMMENT="novomodulo table retrofitted from MySQL"NEXT="novomodulo_local"><FIELDS><FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true"SEQUENCE="true" ENUM="false" NEXT="course"/><FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false"DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="name"/><FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"ENUM="false" PREVIOUS="course" NEXT="summary"/><FIELD NAME="summary" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false"ENUM="false" PREVIOUS="name" NEXT="timecreated"/><FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false"DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="summary" NEXT="timemodified"/><FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false"DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timecreated"/></FIELDS>

<KEYS><KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for novomodulo"/></KEYS></TABLE>

42

Page 44: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Caso seja necessário utilizar capabilities (permissões diferentes para cada ação), elas devemficar no arquivo:

/db/access.php

Exemplo:

<?php$mod_novomodulo_capabilities = array(/** Inserindo permissão para adicionar local*/'mod/novomodulo:addlocal' => array('riskbitmask' => RISK_CONFIG,'captype' => 'write','contextlevel' => CONTEXT_MODULE,'legacy' => array('admin' => CAP_ALLOW)),/** Inserindo permissão para visualizar locais*/'mod/novomodulo:viewlocal' => array('riskbitmask' => RISK_CONFIG,'captype' => 'write','contextlevel' => CONTEXT_MODULE,'legacy' => array('admin' => CAP_ALLOW)))?>

No exemplo, os usuários do role admin terão a permissão de adicionar e visualizar locais. Masestas permissões podem ser alteradas depois que o módulo estiver instalado, acessando:

Administração -> Users -> Permissões -> Definir Funções

O arquivo defaults.php, é executado durante a instalação e também sempre que for clicadoem Avisos.

Quando for criada uma nova versão do seu módulo, você deverá informar as alterações queforam feitas nas tabelas do módulo (caso existam). Estas alterações ficam em:

/db/upgrade.php

43

Page 45: Programacao php moodle

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Para efetuar as alterações no banco de dados (independente do tipo do banco escolhido),devem ser usadas as funções contidas em:

lib/ddllib.php

No exemplo abaixo, se a versão anterior do módulo for anterior a versão 2008061701, seráalterado os atributos do campo name na tabela novomodulo:

function xmldb_novomodulo_upgrade($oldversion=0) {

global $CFG, $THEME, $db;

$result = true;

if ($result && $oldversion < 2008061701) {

$table = new XMLDBTable('novomodulo');$field = new XMLDBField('name');$field->setAttributes(XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null,'course');

/// Efetua a mudança no banco$result = $result && change_field_notnull($table, $field);}}

7.1.3 Instalação do Novo Módulo

• Copie a pasta novomodulo para o diretório /mod localizado na raiz do seu Moodle;

• Acesse o sistema como administrador e vá em Avisos. Se o seu Moodle estiver em inglêsacesse Notifications. Assim você vai ver se as tabelas foram criadas com sucesso.

• No bloco do administrador acesse Modules -> Atividades ou Modules -> Activities. Dessaforma vai ser possível ver que o novo módulo foi adicionado na lista de módulos reconheci-dos.

• Se for necessário atualizar o módulo instalado para uma versão mais nova, clique em Avisosou Notifications e o Moodle irá executar a função de upgrade do módulo.

44