Instalador de Módulo

Conforme detalhado nos outros capítulos deste livro, há muitas maneiras de personalizar o SuiteCRM. O instalador do módulo permite que você empacote essas mudanças e instale-as em outras instâncias do SuiteCRM.
Isso é conseguido criando um pacote. No mínimo, um pacote é um arquivo zip que contém um arquivo manifest.php em sua raiz. O arquivo de manifesto é responsável por fornecer informações sobre o instalador, bem como fornecer informações sobre como instalar o pacote.

 

manifest.php
O arquivo manifest.php contém a definição de três arrays. Vejamos cada uma dessas matrizes separadamente. Veja abaixo um exemplo completo do arquivo manifest.php.

$manifest
O array $ manifest fornece informações sobre o próprio pacote, como seu nome, leia-me etc. (ele também define o array de cópia para pacotes de patch). Um exemplo de definição da matriz de manifesto aparecerá mais ou menos assim:
Exemplo 15.1: Exemplo de definição de array $manifest

$manifest = array(
    'name' => 'My First Package',
    'description' => 'This is a simple package example manifest file',
    'version' => '1.5',
    'author' => 'Jim Mackin',
    'readme' => 'readme.txt',
    'acceptable_sugar_flavors' => array('CE'),
    'acceptable_sugar_versions' => array(
      'exact_matches' => array(),
      'regex_matches' => array('6.5.[0-9]$'),
    ),
    'copy_files' => array (
      'from_dir' => '/custom/',
      'to_dir' => 'custom',
      'force_copy' => array (),
    ),
    'dependencies' => array(
      array(
        'id_name' => 'example_dependency_package',
        'version' => '2.4',
      ),
    ),
 );

name
O nome do pacote. É assim que o pacote aparecerá para o usuário durante a instalação e na lista de pacotes do Module Loader. O nome do pacote é obrigatório.

description
Uma breve descrição do pacote.

version
A versão deste pacote. Pode ser qualquer string, mas geralmente é um número de versão tradicional (como 3.1.4).

actor
O autor do pacote.

readme
Uma breve string leia-me. Observe que, se um README.txt for encontrado na raiz do pacote, ele será usado.

accetable_sugar_flavors
Um remanescente dos pacotes SugarCRM. Deve ser sempre uma matriz com (pelo menos) uma entrada CE. Se você deseja que o instalador seja direcionado para as edições SuiteCRM e SugarCRM, ele pode conter um dos outros sabores do SugarCRM (PRO, CORP, ULT ou ENT).

accetable_sugar_versions
Uma matriz detalhando as versões correspondentes do SugarCRM. Observe que a versão SugarCRM é diferente da versão SuiteCRM. Este array possui duas chaves. exact_matches é simplesmente uma matriz das versões permitidas. regex_matches permite especificar regexes para corresponder às versões. Para SuiteCRM, você só precisa se preocupar em suportar as versões 6.5. * Que podem ser combinadas com o regex 6 \ .5 \. [0-9] $. No momento da escrita, a versão atual do SugarCRM para SuiteCRM é 6.5.20.

copy_files
Isso só é usado para instaladores de patches e copiará os arquivos da chave from_dir para os da chave to_dir. Finalmente, a chave force_copy pode ser usada para especificar arquivos que devem ser copiados à força.

dependencies
Uma série de outros pacotes nos quais este pacote confia. Cada entrada é uma matriz com id_name – a id do pacote e a versão da versão necessária do pacote.

icon
O caminho (dentro do instalador) para um ícone a ser exibido durante a instalação.

is_uninstallable
Se as desinstalações devem ou não ser permitidas. data_publicada A data em que o pacote foi publicado. Não existe um formato fixo para a data, é simplesmente uma string.

key
Especifica uma chave para garantir que os módulos não entrem em conflito. Isso irá prefixar os módulos e tabelas instalados com a chave. Isso é usado pelo construtor de módulo ao criar pacotes, mas pode ser especificado se desejar.

remove_tables
Uma string que especifica se as tabelas do módulo devem ser removidas ao desinstalar este pacote. Os valores aceitos são true, false e prompt. O padrão é verdadeiro.

type
O tipo de instalador, um de langpack, módulo, patch ou tema. Veja a seção de tipos.

$installdefs
Fornece informações sobre como o pacote deve ser instalado, quais arquivos vão para onde e quaisquer informações adicionais, como ganchos lógicos, campos personalizados, etc.

ID
Um identificador exclusivo para o módulo.

conectores
Uma série de conectores a serem instalados. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
name O nome do conector.
connector O diretório de onde copiar os arquivos do conector.
formatter O diretório de onde copiar os arquivos do formatador do conector.

 

Copy
Uma série de arquivos e diretórios a serem copiados na instalação. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
from O arquivo / diretório de origem no pacote.
to O arquivo / diretório de destino.

 

dashlets
Uma série de dashlets a serem instalados. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
name O nome do novo painel.
from O caminho no pacote de instalação do qual os arquivos do painel serão copiados.

 

Línguas
Uma série de arquivos de idioma a serem instalados. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
from A localização do arquivo de idioma dentro do pacote.
to_module O módulo para o qual este arquivo de idioma se destina (ou “aplicativo” para strings de idioma do aplicativo).
language O idioma para o qual este arquivo se destina (ou seja, en_us ou es_es).

Consulte o capítulo sobre Strings de idioma para obter mais informações.

 

layoutdefs
Uma série de arquivos layoutdef que são usados ​​para adicionar, remover ou editar subpainéis. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
from O caminho no pacote para o arquivo a ser instalado.
to_module O módulo em que este arquivo será instalado.

 

vardefs
Um array dos vardefs a serem adicionados a módulos específicos. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
from A localização do arquivo vardef no pacote.
to_module O módulo de destino.

 

menu
Uma série de menus a serem instalados. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
from A localização do arquivo de menu no pacote.
to_module O módulo de destino para este menu.

 

beans
Uma série de beans a serem instalados. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
module O nome do módulo.
class O nome da classe do bean.
path O caminho (dentro do pacote) para o arquivo bean.
tab Se uma guia deve ou não ser adicionada a este módulo.

 

Relacionamentos
Uma matriz detalhando quaisquer novos relacionamentos adicionados (em relacionamentos específicos em que um lado é um módulo existente). Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
module O módulo ao qual esse relacionamento será anexado.
meta_data A localização do arquivo de metadados para este relacionamento.

 

Os campos personalizados
Uma série de novos campos personalizados a serem instalados (consulte o capítulo Vardefs para obter mais informações). Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
name O nome do novo campo personalizado.
label A chave para a string de idioma que atuará como o rótulo para este campo personalizado.
type O tipo deste campo personalizado.
max_size Para tipos de campo de string, o número máximo de caracteres.
require_option Se o campo é ou não obrigatório.
default_value O valor padrão deste campo.
ext1 Informações de campo estendidas. Tipos de campo diferentes usarão esse valor de maneira diferente. Por exemplo, os campos Enum irão armazenar a chave para as opções neste campo, os campos decimal e float irão armazenar a precisão.
ext2 Informações de campo estendidas. Tipos de campo diferentes usarão esse valor de maneira diferente. Por exemplo, as listas suspensas dinâmicas armazenarão a lista suspensa pai, as áreas de texto armazenarão o número de linhas.
ext3 Informações de campo estendidas. Tipos de campo diferentes usarão esse valor de maneira diferente. Por exemplo, as áreas de texto armazenam o número de colunas.
ext4 Informações de campo estendidas. Tipos de campo diferentes usarão esse valor de maneira diferente. Para tipos de campo HTML, isso armazenará o HTML.
audited Se as alterações neste campo devem ou não ser auditadas.
module Usado para especificar o módulo onde o campo personalizado será adicionado.

 

logic_hooks
Uma série de ganchos lógicos a serem instalados. Consulte o capítulo Logic Hooks para obter mais informações. Cada entrada é uma matriz com as seguintes chaves:

Chave Descrição
module O módulo onde este gancho lógico deve ser instalado. Deixar vazio irá instalar no gancho lógico de nível superior.
hook O tipo de gancho lógico (ou seja, after_save, after_login, etc.).
order A ordem de classificação para este gancho lógico.
description Uma descrição do gancho.
file O arquivo que contém a classe para este gancho lógico, relativo à raiz do SuiteCRM.
class A classe que contém a função de gancho lógico que deve ser chamada por esse gancho.
function A função a ser chamada quando este gancho é acionado.

 

image_dir
Um caminho para um diretório de imagens a ser incluído na instalação.

 

programadores
Uma série de planejadores a serem instalados. Cada entrada é uma matriz com uma única chave:

Chave Descrição
from O arquivo que contém a nova tarefa agendada.

 

administração
Uma série de painéis de administração a serem instalados. Cada entrada é uma matriz com uma única chave:

Chave Descrição
from O arquivo que contém a nova definição do painel de administração.

 

pre_execute
Define uma série de arquivos a serem executados antes da instalação do pacote. Cada entrada é um caminho para um arquivo dentro do pacote. Qualquer saída será exibida para o usuário no log de instalação.

post_execute
Define uma série de arquivos a serem executados após a instalação do pacote. Cada entrada é um caminho para um arquivo dentro do pacote. Qualquer saída será exibida para o usuário no log de instalação.

pre_uninstall
Define uma série de arquivos a serem executados antes que o pacote seja desinstalado. Cada entrada é um caminho para um arquivo dentro do pacote. Qualquer saída será exibida para o usuário no log de desinstalação.

post_uninstall
Define uma série de arquivos a serem executados após a desinstalação do pacote. Cada entrada é um caminho para um arquivo dentro do pacote. Qualquer saída será exibida para o usuário no log de desinstalação.

$upgrade_manifest
Fornece um meio de atualizar um pacote já instalado, fornecendo diferentes installdefs.

 

Types (Tipos)

Tipo Descrição
Langpack Um instalador de idioma. Isso adicionará uma entrada à lista suspensa de idiomas.
Módulo Um instalador de módulo. Irá instalar novos módulos e / ou funcionalidades.
Fragmento Um instalador de patch. Isso é usado para atualizar o SuiteCRM.
Tema Um instalador de tema. Isso adicionará uma nova opção aos temas.

 

 

Outros arquivos

README.txt
Contém o leia-me deste pacote. Se README.txt e uma entrada leia-me no manifest.php forem definidos, este arquivo será usado.

LICENSE.txt
Fornece informações sobre a licença deste pacote.

scripts / pre_install.php
Um script PHP que define um método pre_install (). Este método será chamado antes da instalação do pacote. Qualquer saída será exibida para o usuário no log de instalação.

scripts / post_install.php
Um script PHP que define um método post_install (). Este método será chamado após a instalação do pacote.

scripts / pre_uninstall.php
Um script PHP que define um método pre_uninstall (). Este método será chamado antes que o pacote seja desinstalado.

scripts / post_uninstall.php
Um script PHP que define um método post_uninstall (). Este método será chamado depois que o pacote for desinstalado. ↩

 

Arquivo de manifesto de amostra
A seguir está um arquivo de manifesto de exemplo básico.

Exemplo A.3: Exemplo de arquivo de manifesto

$manifest = array(
    'name' => 'Example manifest',
    'description' => 'A basic manifest example',
    'version' => '1.2.3',
    'author' => 'Jim Mackin',
    'readme' => 'This is a manifest example for the SuiteCRM for Developers book',
    'acceptable_sugar_flavors' => array('CE'),
    'acceptable_sugar_versions' => array(
        'exact_matches' => array('6.5.20',),
    ),
    'dependencies' => array(
      array(
        'id_name' => 'hello_world',
        'version' => '3.2.1'
      ),
    ),
    'icon' => 'ManifestExample.png',
    'is_uninstallable' => true,
    'published_date' => '2015-05-05',
    'type' => 'module',
    'remove_tables' => 'prompt',
  );
  $installdefs = array(
    'id' => 'suitecrmfordevelopers_example_manifest',
    'image_dir' => '/images/',
    'copy' => array(
      array(
        'from' => '/modules/ExampleModule',
        'to' => 'modules/ExampleModule',
      ),
    ),
    'dashlets' => array(
      array(
        'from' => '/modules/ExampleModule/Dashlets/',
        'name' => 'ExampleModuleDashlet'
      )
    ),
    'language' => array(
      array(
        'from' => 'application/language/en_us.examplemoduleadmin.php',
        'to_module' => 'application',
        'language' => 'en_us'
      ),
      array(
        'from' => '/modules/Accounts/language/en_us.examplemodule.php',
        'to_module' => 'Accounts',
        'language' => 'en_us'
      ),
      array(
        'from' => '/application/language/es_es.examplemoduleadmin.php',
        'to_module' => 'application',
        'language' => 'es_es'
      ),
      array(
        'from' => '/modules/Accounts/language/es_es.examplemodule.php',
        'to_module' => 'Accounts',
        'language' => 'es_es'
      ),
    ),
    'custom_fields' => array(
      array(
        'name' => 'example_field',
        'label' => 'Example Field',
        'type' => 'varchar',
        'max_size' =>  100,
        'module' => 'Accounts',
      ),
    ),
    'vardefs' => array(
      array(
        'from' => 'modules/Accounts/vardefs/examplemodule_vardefs.php',
        'to_module' => 'Accounts',
      ),
    ),
    'beans' => array(
      array(
        'module' => 'ExampleModule',
        'class' => 'ExampleModule',
        'path' => 'modules/ExampleModule/ExampleModule.php',
      ),
    ),
    'logic_hooks' => array(
      array(
        'module' => 'Accounts',
        'hook' => 'before_save',
        'order' => 100,
        'description'  => 'Example module before save hook',
        'file' => 'modules/ExampleModule/ExampleModuleHook.php',
        'class' => 'ExampleModuleLogicHooks',
        'function' => 'accounts_before_save',
      ),
    ),
    'administration' => array(
      array(
        'from' => 'modules/administration/examplemodule_admin.php',
      ),
    ),
  );
  $upgrade_manifest = array(
 );