Upload
rafaelbozzetti
View
1.258
Download
5
Embed Size (px)
DESCRIPTION
Slides da apresentação no Snep Conference
Citation preview
Amim Knabben <[email protected]>Rafael Bozzetti <[email protected]>
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.
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.
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/
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/
Download do Código
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/
http://192.168.0.14/dev/
O Arquivo de Configuração
includes/setup.conf
Parametriza dados de configuração do ambiente SNEP
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.
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.
Atualização de Banco
● As atualizações do banco são versionadas e encontram-se na pasta install/update/.
● A atualização do banco de dados deve ser gradual, versão a versão.
install / update /├── 1.1.0│ └── database.sql├── 1.1.3│ └── database.sql├── 1.1.6│ └── database.sql├── 1.2.0│ └── database.sql├── 1.3.0│ └── database.sql├── 1.3.1│ └── database.sql└── 1.3.2 └── database.sql
/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/
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/
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_BRmoh - /var/lib/asterisk/moh
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
Hands On
● Estrutura de Arquivos● setup.conf● Apache.● Banco de dados.● Arquivos /etc/asterisk/● Integração AGI● Arquivos de Som● Unixodbc
Estrutura do Projeto
Interface com Asterisk ( agi )Asterisk delega a Lógica de ligações ao SNEP
Por intermédio do AGI
Interface do Usuário ( web )Manipula Dados no Banco de DadosManipula Arquivos de Configuração
Interage com Asterisk via AMI.
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.
Padrão - MVC
Model View
Controller
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.
Controllers
<?phpclass AgentsController extends Zend_Controller_Action {
public function indexAction() { } public function addAction() { } public function removeAction() { } public function editAction() { }}?>
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/
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
Hands On
● Estrutura do MVC.● Escrever um
controlador.● Escrever uma view.
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.
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
Hands On
● Estrutura de Classes.● Exemplo de uso no
controlador criado.● CostCenter_Manager● Mostra Snep_Form
uma especialização de Zend_Form.
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.
lib/PBX
$asterisk = PBX_Asterisk_AMI::getInstance();
$asterisk->Command(“core show channels”);
PBX_Trunks::getAll();
Asterisk SNEPRegras
DeNegócio
DialPlan
AGI
DialplanDialplan
InterfacesInterfaces
RegrasRegras
RamaisRamaisTroncosTroncosAçõesAções
Hands On
● Consultas no Asterisk utilizando a classe PBX_Asterisk_AMI.
● Exemplo com Ramais
lib/Zend
Biblioteca Zend, dão suporte a aplicação.
Podem ser estendidas por outras Classes.
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');
Zend_Db
$db = Zend_Registry::get(“db”);
$select = $db->select() ->from(“peers”) ->where(“name != 'admin'”) ->order(“id”);
$stmt = $db->query( $select );$resultado = $stmt->fetchAll( );
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;
Zend_TranslateA 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.
Zend_Translate
// Uso na Visãoecho $this->translate(“Texto”);
// Uso no Controladorecho $this->view->translate(“Texto”);
// No Model deve-se recuperar a instancia.$i18n = Zend_Registry::get('i18n');$i18n->translate(“Texto”);
Forms
Cada formform é 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;
Forms<?xml version="1.0" encoding="UTF-8"?><form> <elements> <nome> <type>text</type> <options> <label> Nome </label> <required>true</required> </options> </nome> <id> <type> hidden </type> </id> </elements></form>
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!”;}
Hands On
● Zend_Config● Zend_Db● Zend_Form● Zend_Translate