# Criando um módulo extra

Compreender como o modulo é organizado dentro do sistema é o primeiro passo para desenvolver.

Para tanto, tenha em mente que cada modulo deve ser representado por um diretório com nome exclusivo, escrito em minúsculo e armazenado no diretório **/modulos/extras**.

Dentro do diretório são armazenados os arquivos do modulo, sendo que a base do modulo será o arquivo que leva seu nome, nesse caso, **moduloExemplo.php**

*\*index.php é apenas uma proteção para o diretório*

*No diretório do módulo podem ser incluídos diversos outros arquivos e bibliotecas a depender de sua necessidade final. No nosso exemplo incluiremos um arquivo de estilos CSS chamado style.css e um arquivo para javascript chamado de scripts.js*

{% hint style="info" %}
Junto desse material você recebeu os arquivos de exemplo para o desenvolvimento do primeiro modulo, que desmembramos abaixo.
{% endhint %}

#### Arquivo /modulos/extras/moduloExemplo/moduloExemplo.php

Esse é o arquivo inicial do modulo, deve ser armazenado dentro do diretório do modulo que está sendo criado.

**Seu nome deve ser o mesmo nome do diretório acrescido de .php Aqui se inicia a configuração do modulo.**

**Início do arquivo**

```php
<?php

if(VALIDA_MODULO!=1){//PROTEÇÃO DO MÓDULO
	die('acesso negado');
	exit();
}

```

**Variável $extra\['moduloExemplo']**

Essa variável carrega os parâmetros do seu módulo sendo que a chave 'moduloExemplo' deve ser o mesmo nome do seu modulo

{% code overflow="wrap" %}

```php
$extra['moduloExemplo']=array(
	'nome'		=> "Modulo extra (exemplo)",
	'autor'		=> "HOSTMGR",
	'versao'	=> '1.0',
	'descricao'	=> 'Complemento de demonstração para criação de modulo extra'
);
```

{% endcode %}

{% hint style="info" %}
Importante. O parâmetro versão deve sempre ser preenchido usando o padrão **x.x** sendo permitido apenas um dígito após o ponto. Isso é importante para trabalhar os updates do módulo.
{% endhint %}

### Funções do modulo

O módulo conta com 4 funções necessárias para sua operação, que são executadas em determinadas etapas sendo: Ativar, Update, Desativar e Executar.

**Função Ativar**

Essa função contem a relação de comandos que serão executadas quando o usuário clicar para ativar o modulo.

É comumente utilizado para criar tabelas na base de dados.

{% code overflow="wrap" %}

```php
# ATIVAR O COMPLEMENTO
function extra_moduloExemplo_ativar(){
	
	global $banco;
	
	$sql=mysqli_query($banco->con,"CREATE TABLE IF NOT EXISTS mod_moduloExemplo (
  id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  id_servidor INT( 11 ) NOT NULL ,
  parametro TEXT NOT NULL ,
  id_produto INT( 11 ) NOT NULL 
);");
	
	if($sql){	
		return true;
	}else{
		return false;	
	}
}
```

{% endcode %}

**Função Update**

Quando houverem modificações no modulo, podem ser necessário executar específicos, como por exemplo atualizar uma tabela na base de dados ou adicionar novas tabelas.

Essa função trabalha em conjunto com o parâmetro Versão, desse modo sempre que for feito o upload de novos arquivos do modulo e o sistema identificar que a versão declarada no parametro versão for maior que a versão registrada na base de dados, será disponibilizado ao usuário fazer o update do módulo.

O botão será exibido em configurações, Gerenciar Módulos Extras.

Ao clicar em Atualizar a função será chamada

{% code overflow="wrap" %}

```php
# UPDATE O COMPLEMENTO
function extra_moduloExemplo_update(){
	# CODIGO ao ATUALIZAR DA VERSÃO anterior para mais recente
	
	global $banco, $extra;
	
	$sql=mysqli_query($banco->con,"CREATE TABLE IF NOT EXISTS mod_moduloExemplo (
  id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  id_servidor INT( 11 ) NOT NULL ,
  parametro TEXT NOT NULL ,
  id_produto INT( 11 ) NOT NULL 
);");
	
	if($sql){	
		$sql=$banco->query("UPDATE modulosextras SET versao='".$extra['moduloExemplo']['versao']."' WHERE modulo='moduloExemplo' LIMIT 1;");
		return true;
	}else{
		return false;	
	}
	
	return true;
}
```

{% endcode %}

**Função Desativar**

Função executada quando o usuário decide desativar o modulo.

Normalmente usado para excluir as tabelas do modulo

```php
# DESATIVAR O COMPLEMENTO
function extra_moduloExemplo_desativar(){
	
	global $banco;
	
	$sql=$banco->query("DROP TABLE mod_moduloExemplo");
	
	if($sql){
		return true;
	}else{
		return false;	
	}
}
```

**Função Executar**

Essa função é responsável pela execução do modulo em si. É nela que serão executados todos os comandos do seu modulo e exibidas as informações ao usuário.

Você pode criar outros arquivos e funções e chamar essas informações dentro da função executar.

Você deve preparar todo o código de saida que será impresso no retorno da função.

{% code overflow="wrap" %}

```php
# CHAMAR MODULO

function extra_moduloExemplo_executar(){
	
	global $banco;
	
	$output='<div class="panel">
	
	<div class="panel-body">'.mod_moduloExemploFunction().'</div>
	
	</div>';
	
	$output.='
	<link href="../modulos/extras/moduloExemplo/style.css" rel="stylesheet" type="text/css" />
	<script src="../modulos/extras/moduloExemplo/scripts.js"></script>
	';
	
	return $output;
	
}

function mod_moduloExemploFunction(){
	$x='Teste Olá Modulo';
	
	return $x;
}
```

{% endcode %}
