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(
);