Amim Knabben <amim@thesource.com.br>
Rafael Bozzetti <rafael@thesource.com.br>
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

   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/
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
                             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
/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_BR
       moh - /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 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
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

        Controller




Model            View
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
<?php
class 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();
AGI
                                      Regras
           Dial
Asterisk
           Plan                  SNEP   De
                                      Negócio




                                           Dialplan
                                           Dialplan
                         Interfaces
                          Interfaces
                                           Regras
                                           Regras

                   Troncos
                    Troncos       Ramais
                                  Ramais
                                            Ações
                                            Açõ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_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.
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”);
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;
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
Obrigado!


                  Perguntas?
                  Sugestões?
Rafael Bozzetti
rafael@thesource.com.br
rafael@opens.com.br
@rafaelbozzetti

Snep arquitetura

  • 1.
    Amim Knabben <amim@thesource.com.br> RafaelBozzetti <rafael@thesource.com.br>
  • 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 deConfiguraçã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 Aestrutura 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 SNEPpossui 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 Asrotinas 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 doAsterisk 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 OMVC é 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.
  • 19.
    Padrão - MVC Controller Model View
  • 20.
    Controllers Controllers são classesque 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.
  • 21.
    Controllers <?php class AgentsController extends Zend_Controller_Action{ public function indexAction() { } public function addAction() { } public function removeAction() { } public function editAction() { } } ?>
  • 22.
    Controllers A estrutura doControlador 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ãoa 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 paramanipulaçã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 abstraemdiversos aspectos do PBX. Interface (Ramais, Troncos) Regra de Negócio Ação de Regra de Negócio Interface com o Asterisk via AMI.
  • 29.
  • 30.
    AGI Regras Dial Asterisk Plan SNEP De Negócio Dialplan Dialplan Interfaces Interfaces Regras Regras Troncos Troncos Ramais Ramais Ações Ações
  • 31.
    Hands On ● Consultas no Asterisk utilizando a classe PBX_Asterisk_AMI. ● Exemplo com Ramais
  • 32.
    lib/Zend Biblioteca Zend, dãosuporte a aplicação. Podem ser estendidas por outras Classes.
  • 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');
  • 34.
    Zend_Db $db = Zend_Registry::get(“db”); $select= $db->select() ->from(“peers”) ->where(“name != 'admin'”) ->order(“id”); $stmt = $db->query( $select ); $resultado = $stmt->fetchAll( );
  • 35.
    Zend_Config Fazo 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.4do 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 naVisã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;
  • 39.
    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>
  • 40.
    Forms Um objeto dotipo 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!”; }
  • 41.
    Hands On ● Zend_Config ● Zend_Db ● Zend_Form ● Zend_Translate
  • 42.
    Obrigado! Perguntas? Sugestões? Rafael Bozzetti rafael@thesource.com.br rafael@opens.com.br @rafaelbozzetti