2. Histórico - SNEP
Escrito por Flávio Somensi, em PHP puro.
Modelo mantido até a versão 1.2.2.
Na versão 1.3.0 o ambiente Zend Framework
começou a ser introduzido gradualmente.
A série 1.3.x convive com dois ambientes.
A série 1.4.x foi totalmente reescrita utilizando o
Zend Framework.
3. Como é distribuído.
A versão ISO, vem com ambiente previamente
instalado e configurado. É baseado em Debian.
Só Série 1.3.x.
Código fonte disponibilizado no formato tar.gz,
exige a configuração do ambiente.
Pode ser obtido no repositório SVN.
4. Repositório SVN
O Projeto é hospedado no Source Forge.
O repositório TRUNK é a versão
atual de desenvolvimento, não estável.
https://snep.svn.sourceforge.net/svnroot/snep/trunk/
Os repositórios TAGS são versões
fechadas e estáveis.
https://snep.svn.sourceforge.net/svnroot/snep/tags/
5. Versão de Desenvolvimento
Para obter do projeto é necessário o
Subversion (SVN).
A estrutura pode ser atualizada
quando necessário.
https://snep.svn.sourceforge.net/
svnroot/snep/trunk/
6. Download do Código
http://192.168.0.14/dev/
Disponibilizamos o código fonte do
SNEP 1.4 para acompanhamento.
Baixe-o e Descompacte.
tar xvf snep-1.4.tar.gz -C /var/www/
7. O Arquivo de Configuração
includes/setup.conf
Parametriza dados de configuração
do ambiente SNEP
8. Configuração do Apache
/install/snep.apache
Arquivo previamente configurado que define a
configuração no Apache do SNEP
Copiar para /etc/apache/sites-enabled/
É baseado no ambiente Debian.
Necessita que o serviço seja reiniciado.
9. Banco de Dados
A estrutura do banco e os dados iniciais do
SNEP estão na pasta default/installer/
schema.sql Estrutura de tabelas.
system_data.sql Dados iniciais do SNEP.
cnl-data.sql Dados para localização de
chamadas.
10. Atualização de Banco
install / update /
● As atualizações do ├── 1.1.0
banco são versionadas │ └── database.sql
e encontram-se na ├── 1.1.3
pasta install/update/. │ └── database.sql
├── 1.1.6
│ └── database.sql
├── 1.2.0
● A atualização do banco │ └── database.sql
de dados deve ser ├── 1.3.0
gradual, versão a │ └── database.sql
├── 1.3.1
versão. │ └── database.sql
└── 1.3.2
└── database.sql
11. /etc/asterisk
O SNEP possui sua própria estrutura de
configuração para o Asterisk.
Os arquivos de configuração do SNEP são
incluídos pelos do Asterisk.
Não devem ser manipulados manualmente.
Estão em install/etc/asterisk/
12. AGI's
O Asterisk delega o roteamento de
ligações ao SNEP.
Isso é feito por intermédio do AGI.
Deve ser criado um link simbólico chamado
/var/lib/asterisk/agi-bin/snep
Os Agi's do SNEP estão na pasta /agi/
13. Arquivos de Som
As rotinas do SNEP precisam de acesso aos
arquivos de som do Asterisk.
São os arquivos de áudio padrão e
as músicas em espera.
Essa integração é feita por links simbólicos
criados na pasta /sounds/
pt_BR - /var/lib/asterisk/sounds/pt_BR
moh - /var/lib/asterisk/moh
14. Unixodbc
O acesso do Asterisk ao banco de dados é feito por
intermédio do Unixodbc.
O SNEP também disponibiliza os arquivos de
referência para a configuração do mesmo.
Esta referência diz respeito ao res_odbc.conf
Estão na pasta install/etc/
São unixodbc.ini e odbcinst.ini
15. Hands On
● Estrutura de Arquivos
● setup.conf
● Apache.
● Banco de dados.
● Arquivos /etc/asterisk/
● Integração AGI
● Arquivos de Som
● Unixodbc
17. Estrutura do Projeto
Interface do Usuário ( web )
Manipula Dados no Banco de Dados
Manipula Arquivos de Configuração
Interage com Asterisk via AMI.
Interface com Asterisk ( agi )
Asterisk delega a Lógica de ligações ao SNEP
Por intermédio do AGI
18. Padrão - MVC
O MVC é um padrão de arquitetura que o SNEP
segue, é utilizado para construir as rotinas da
aplicação.
Divide de forma organizada as categorias de:
VIEW – Apresentação.
CONTROLLER - Lógica de Negócio
MODEL - Acesso de Dados do projeto.
Norteia o desenvolvimento no SNEP.
20. Controllers
Controllers são classes que representam as
rotinas da aplicação.
Uma classe de controlador deve estender a
classe Zend_Controller_Action.
Cada método terá a sua Views.
Controle as requisições da aplicação.
22. Controllers
A estrutura do Controlador e seus métodos
definem a URL da aplicação.
modulo/controlador/index/
modulo/controlador/add/
modulo/controlador/remove/
modulo/controlador/edit/
23. Views
As visões são a interface com o usuário.
Emprega PHP, HTML e Javascript.
São organizadas por pastas
com o nome do controlador.
Cada método tem uma view arquivo.phtml
24. Hands On
● Estrutura do MVC.
● Escrever um
controlador.
● Escrever uma view.
25. Bibliotecas
Representam a camada Model do MVC.
lib/Zend – Dá suporte a aplicação como um todo.
lib/Snep – Persistência de dados no banco e/ou
arquivos de configuração.
lib/PBX – Abstração do PBX.
26. lib/Snep
Possui classes para manipulação de dados.
Estão associadas a interface web do SNEP.
Manipula informações do banco de dados e
arquivos de configuração do SNEP/Asterisk.
Classes mais especializadas.
Snep_Form, Snep_Db
27. Hands On
● Estrutura de Classes.
● Exemplo de uso no
controlador criado.
● CostCenter_Manager
● Mostra Snep_Form
uma especialização
de Zend_Form.
28. lib/PBX
Classes que abstraem diversos
aspectos do PBX.
Interface (Ramais, Troncos)
Regra de Negócio
Ação de Regra de Negócio
Interface com o Asterisk via AMI.
33. Zend_Registry
É um recipiente onde objetos são
armazenados. Objetos ficam disponíveis em
toda aplicação.
Esse mecanismo substitui o uso de variáveis
globais. register_globals = Off.
Zend_Registry::set('objeto', $objeto);
$objeto = Zend_Registry::get('index');
35. Zend_Config
Faz o parse de arquivos de configuração.
.ini ou .xml
O SNEP utiliza Zend_Config_Ini para ler o
setup.conf e Zend_Registry para guarda-lo.
Os parâmetros do setup.conf podem ser obtidos
Zend_Config::get('config')->system->debug;
36. Zend_Translate
A versão 1.4 do SNEP conta com suporte a
internacionalização.
Toda e qualquer string deve ser definida com
Zend_Translate, desta forma ela torna-se
dinâmica.
Como o Zend_Translate é um atributo da
View, seu uso é diferente na Visão, Controlador
e Modelo.
37. Zend_Translate
// Uso na Visão
echo $this->translate(“Texto”);
// Uso no Controlador
echo $this->view->translate(“Texto”);
// No Model deve-se recuperar a instancia.
$i18n = Zend_Registry::get('i18n');
$i18n->translate(“Texto”);
38. Forms
Cada form é definido em XML seguindo um padrão.
Define tipo do elemento e validação do formulário.
$xml = new Zend_Config_Xml("example.xml");
$form = new Snep_Form( $xml );
$this->view->form = $form;
40. Forms
Um objeto do tipo Snep_Form possui diversos
métodos herdados de Zend_Form.
O método isValid() é responsável por validar
os dados do formulário.
$isValid = $form->isValid( $_POST );
if ( $isValid ) {
echo “Form Válido!”;
} else {
echo “Form Inválido!”;
}