Módulos no SNEP




Amim Knabben <amim@thesource.com.br>
Rafael Bozzetti <rafael@thesource.com.br>
Baixe o Módulo Exemplo
 http://goo.gl/whK6q
O que é um Módulo
     Um módulo é uma parte de um
        programa que pode ser
    desenvolvido independentemente.

Adiciona funcionalidades extras ao SNEP, é
     facilmente instalado e atualizado.

        Deve seguir o padrão da
         Estrutura do Projeto.
MVC
O Módulo deve seguir o
    Padrão MVC
Estrutura do Módulo
MODEL

CONTROLLER

VIEW

ACTIONS              Descritor
                     do Módulo
INSTALLER

DADOS
Forms, Javascript,
Css, Imagens.
Módulo – Série 1.3.x

              Estrutura
              padronizada do
              Módulo.



              Descritor do módulo.
Descritor de Módulo 1.3.x
class Example extends
Snep_Module_Descriptor {

     public function __construct() {
       $this->setName("ModuleName");
       $this->setVersion("1.0");
       $this->setDescription("Descrição");
       $this->setModuleId('example');
       ...
     }
}
Descritor de Módulo 1.3.x
Definição do menu, no método __construct( )

$menu_item =
new Snep_Menu_Item( "Example",
                      "Consulta no Banco",
                      "example/teste/database/");
$menu =
new Snep_Menu_Item( 'example',
                      'Module',
                      null,
                      $menu_item );
$this->setMenuTree( array( $menu ) );
Descritor de Módulo 1.3.x
Inclui o caminho do Lib/ no include_path.

$path = Zend_Registry::get('config')->system
                                    ->path
                                    ->base;

set_include_path( get_include_path() .
                  PATH_SEPARATOR .
                  $path .
                  "/modules/example/lib");
Módulo – Série 1.4.x

           Estrutura padronizada
           do Módulo.


           Descritor do Módulo.


           Define estrutura de
           menus e controle de
           acesso.
Descritor de Módulo 1.4
                Info.xml
<module>
  <name> Snep Example Module </name>
  <description> Example </description>
  <author> OpenS Tecnologia </author>
  <website> www.snep.com.br </website>
</module>
Descritor de Módulo 1.4

              resources.xml
<example>
  <group id="example" label="Example">
     <resource id="x" label="x"> </resource>
     <resource id="y" label="y"> </resource>
     <resource id="z" label="z"> </resource>
  </group>
</example>
Model
      Cada módulo possui suas próprias
      classes, estas ficam acessíveis a
         qualquer rotina do sistema.


class Example_Manager {
   public static function get( $id ) { }
   public static function add( $dados ) { }
   public static function remove( $id ) { }
   public static function update( $dados ) { }
}
Controllers
Na pasta controllers são definidas classes que
     representam as rotinas da aplicação.

 Uma classe de controlador deve estender a
     classe Zend_Controller_Action.

    O método indexAction é necessário.

        Cada método terá a sua View.
Controllers
// Definição de uma classe de controlador
// Deve informar o módulo e ter um nome

class NomeModulo_AgentsController extends
Zend_Controller_Action {

    // Métodos da Classe
    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.

  O módulo do controlador é informado.
http://localhost/snep/index.php/

/NomeModulo/agents/      indexAction()
/NomeModulo/agents/add/
/NomeModulo/agents/remove/
/NomeModulo/agents/edit/
Actions
Actions são classes que definem
 Ações para Regras de Negócio.
Uma classe de ação deve estender
  a classe PBX_Rule_Action.
  Estas classes são instanciadas
   automaticamente pelo SNEP.
Actions
class TocaAudioDiscaTroncoAction extends
PBX_Rule_Action {
   public function __construct( ) { }
   public function getName( ) { }
   public function getVersion( ) { }
   public function getDesc( ) { }
   public function getConfig( ) { }
   public function setConfig( $config ) { }
   public function execute( $asterisk,
                            $request ) { }
}
Actions
public function getConfig() {
  if( isset( $this->config['ccustos'] ) ) {
      $ccustos = "<value>{$this->config['ccustos']}</value>";
  }else{
       $ccustos = " ";
  }
      return <<<XML
<params>
  <ccustos>
      <id>ccustos</id>
      $ccustos
  </ccustos>
</params>
XML;
}
Actions

public function execute( $asterisk, $request ) {

    $asterisk->exec_goto( $this->config['context'],
                          $request->destino, 1 );

}
Installer
A pasta installer contém a estrutura do
          banco do módulo.

 A subpasta installer/update contém
 atualizações do banco versionadas.


$ mysql -u snep -p snep25 < schema.sql
Módulo Exemplo

 Disponibilizamos um módulo exemplo
 para incentivar o desenvolvimento de
   novos projetos baseados na infra-
          estrutura do SNEP.


Disponível nas duas versões: 1.4 e 1.3.x.
Módulo Exemplo
O módulo foi criado para exemplificar as
 possibilidades dos módulos do SNEP.
 Cadastro simples em banco de dados.
 Uso de Model ( Example_Manager )
       Demostração do CRUD.
Demonstração da criação e validação de
            formulários.
Fork Me
É nosso objetivo que o projeto seja
   facilmente copiado e alterado,
estimulando o surgimento de novos
             módulos.
O Projeto do módulo exemplo está
      disponível no GitHub.
    Cadastre-se e faça um fork
   Necessita ter o git instalado.
       # apt-get install git
Fork Me
http://goo.gl/kL4PR

Modulos SNEP

  • 1.
    Módulos no SNEP AmimKnabben <amim@thesource.com.br> Rafael Bozzetti <rafael@thesource.com.br>
  • 2.
    Baixe o MóduloExemplo http://goo.gl/whK6q
  • 3.
    O que éum Módulo Um módulo é uma parte de um programa que pode ser desenvolvido independentemente. Adiciona funcionalidades extras ao SNEP, é facilmente instalado e atualizado. Deve seguir o padrão da Estrutura do Projeto.
  • 4.
    MVC O Módulo deveseguir o Padrão MVC
  • 5.
    Estrutura do Módulo MODEL CONTROLLER VIEW ACTIONS Descritor do Módulo INSTALLER DADOS Forms, Javascript, Css, Imagens.
  • 6.
    Módulo – Série1.3.x Estrutura padronizada do Módulo. Descritor do módulo.
  • 7.
    Descritor de Módulo1.3.x class Example extends Snep_Module_Descriptor { public function __construct() { $this->setName("ModuleName"); $this->setVersion("1.0"); $this->setDescription("Descrição"); $this->setModuleId('example'); ... } }
  • 8.
    Descritor de Módulo1.3.x Definição do menu, no método __construct( ) $menu_item = new Snep_Menu_Item( "Example", "Consulta no Banco", "example/teste/database/"); $menu = new Snep_Menu_Item( 'example', 'Module', null, $menu_item ); $this->setMenuTree( array( $menu ) );
  • 9.
    Descritor de Módulo1.3.x Inclui o caminho do Lib/ no include_path. $path = Zend_Registry::get('config')->system ->path ->base; set_include_path( get_include_path() . PATH_SEPARATOR . $path . "/modules/example/lib");
  • 10.
    Módulo – Série1.4.x Estrutura padronizada do Módulo. Descritor do Módulo. Define estrutura de menus e controle de acesso.
  • 11.
    Descritor de Módulo1.4 Info.xml <module> <name> Snep Example Module </name> <description> Example </description> <author> OpenS Tecnologia </author> <website> www.snep.com.br </website> </module>
  • 12.
    Descritor de Módulo1.4 resources.xml <example> <group id="example" label="Example"> <resource id="x" label="x"> </resource> <resource id="y" label="y"> </resource> <resource id="z" label="z"> </resource> </group> </example>
  • 13.
    Model Cada módulo possui suas próprias classes, estas ficam acessíveis a qualquer rotina do sistema. class Example_Manager { public static function get( $id ) { } public static function add( $dados ) { } public static function remove( $id ) { } public static function update( $dados ) { } }
  • 14.
    Controllers Na pasta controllerssão definidas classes que representam as rotinas da aplicação. Uma classe de controlador deve estender a classe Zend_Controller_Action. O método indexAction é necessário. Cada método terá a sua View.
  • 15.
    Controllers // Definição deuma classe de controlador // Deve informar o módulo e ter um nome class NomeModulo_AgentsController extends Zend_Controller_Action { // Métodos da Classe public function indexAction( ) { } public function addAction( ) { } public function removeAction( ) { } public function editAction( ) { } }
  • 16.
    Controllers A estrutura do Controlador e seus métodos definem a URL da aplicação. O módulo do controlador é informado. http://localhost/snep/index.php/ /NomeModulo/agents/ indexAction() /NomeModulo/agents/add/ /NomeModulo/agents/remove/ /NomeModulo/agents/edit/
  • 17.
    Actions Actions são classesque definem Ações para Regras de Negócio. Uma classe de ação deve estender a classe PBX_Rule_Action. Estas classes são instanciadas automaticamente pelo SNEP.
  • 18.
    Actions class TocaAudioDiscaTroncoAction extends PBX_Rule_Action{ public function __construct( ) { } public function getName( ) { } public function getVersion( ) { } public function getDesc( ) { } public function getConfig( ) { } public function setConfig( $config ) { } public function execute( $asterisk, $request ) { } }
  • 19.
    Actions public function getConfig(){ if( isset( $this->config['ccustos'] ) ) { $ccustos = "<value>{$this->config['ccustos']}</value>"; }else{ $ccustos = " "; } return <<<XML <params> <ccustos> <id>ccustos</id> $ccustos </ccustos> </params> XML; }
  • 20.
    Actions public function execute($asterisk, $request ) { $asterisk->exec_goto( $this->config['context'], $request->destino, 1 ); }
  • 21.
    Installer A pasta installercontém a estrutura do banco do módulo. A subpasta installer/update contém atualizações do banco versionadas. $ mysql -u snep -p snep25 < schema.sql
  • 22.
    Módulo Exemplo Disponibilizamosum módulo exemplo para incentivar o desenvolvimento de novos projetos baseados na infra- estrutura do SNEP. Disponível nas duas versões: 1.4 e 1.3.x.
  • 23.
    Módulo Exemplo O módulofoi criado para exemplificar as possibilidades dos módulos do SNEP. Cadastro simples em banco de dados. Uso de Model ( Example_Manager ) Demostração do CRUD. Demonstração da criação e validação de formulários.
  • 24.
    Fork Me É nossoobjetivo que o projeto seja facilmente copiado e alterado, estimulando o surgimento de novos módulos. O Projeto do módulo exemplo está disponível no GitHub. Cadastre-se e faça um fork Necessita ter o git instalado. # apt-get install git
  • 25.