Files
claude-plugins/perfex-dev/skills/perfex-hooks/SKILL.md
T

4.9 KiB

name, description, layer
name description layer
perfex-hooks Sistema de hooks Perfex CRM — actions, filters, add_action, add_filter, do_action, apply_filters com lista completa por categoria. Baseado apenas na documentação oficial. wiki

/perfex-hooks - Sistema de Hooks Perfex CRM

Sistema de extensibilidade via actions e filters. Zero assumptions, zero hallucinations - apenas documentação oficial.


Documentação Base


Conceitos Fundamentais

Tipo Função Retorno Uso
Action Executa lógica após eventos void Side effects (logs, emails, etc.)
Filter Modifica dados antes de processamento Dados modificados Alterar valores

Sintaxe (v2.3.0+)

Registar Action

hooks()->add_action($tag, $callback, $priority = 10, $accepted_args = 1);

Parâmetros:

  • $tag (string): Nome do hook
  • $callback (callable): Função a executar
  • $priority (int): Ordem de execução (menor = primeiro). Default: 10
  • $accepted_args (int): Número de argumentos. Default: 1

Exemplo:

// No init file do módulo
hooks()->add_action('after_client_added', 'meu_modulo_after_client_added');

function meu_modulo_after_client_added($clientId)
{
    // Lógica após cliente criado
    log_activity('Novo cliente criado: ' . $clientId);

    // Enviar notificação
    $CI = &get_instance();
    $CI->load->model('clients_model');
    $client = $CI->clients_model->get($clientId);

    // Integração externa, etc.
}

Registar Filter

hooks()->add_filter($tag, $callback, $priority = 10, $accepted_args = 1);

Exemplo:

hooks()->add_filter('before_client_added', 'meu_modulo_before_client_added');

function meu_modulo_before_client_added($data)
{
    // Modificar dados antes de guardar
    if (empty($data['country'])) {
        $data['country'] = 177; // Portugal
    }

    // OBRIGATÓRIO: retornar dados modificados
    return $data;
}

Executar Action (criar hooks próprios)

hooks()->do_action($tag, $arg = '');

Exemplo:

// No teu módulo, permitir que outros módulos executem código
hooks()->do_action('meu_modulo_after_process', $resultId);

Aplicar Filter (criar filters próprios)

hooks()->apply_filters($tag, $value, $additionalParams = []);

Exemplo:

// Permitir que outros módulos modifiquem dados
$data = hooks()->apply_filters('meu_modulo_data', $data);

Onde Colocar Hooks

Opção 1: Init File do Módulo (Recomendado)

// modules/meu_modulo/meu_modulo.php
hooks()->add_action('after_client_added', 'meu_modulo_client_handler');

Opção 2: my_functions_helper.php (Customizações Simples)

// application/helpers/my_functions_helper.php
hooks()->add_action('after_client_added', 'custom_client_handler');

Lista Completa de Hooks por Categoria

Autenticação

Hook Trigger Argumentos
admin_auth_init Início auth admin -
after_staff_login Após login staff $staff_id
after_user_logout Após logout -
after_contact_login Após login contacto $contact_id
after_client_register Após registo cliente $client_id
after_client_logout Após logout cliente -

Clientes

Hook Trigger Argumentos
before_client_added FILTER - Antes de criar $data
after_client_added Após criar cliente $client_id
before_client_updated FILTER - Antes de actualizar $data, $client_id
after_client_updated Após actualizar $client_id
before_client_deleted Antes de apagar $client_id
after_client_deleted Após apagar $client_id
contact_created Contacto criado $contact_id
contact_updated Contacto actualizado $contact_id
before_delete_contact Antes apagar contacto $contact_id
contact_deleted Contacto apagado $contact_id

Facturas

Hook Trigger Argumentos
before_invoice_added FILTER - Antes de criar $data
after_invoice_added Após criar $invoice_id
before_invoice_updated FILTER - Antes de actualizar $data, $invoice_id
after_invoice_updated Após actualizar $invoice_id
invoice_sent Factura enviada $invoice_id
invoice_status_changed Status alterado $invoice_id, $status
before_invoice_deleted Antes de apagar $invoice_id
invoice_marked_as_cancelled Factura cancelada $invoice_id

Orçamentos (Estimates)

Hook Trigger Argumentos
before_estimate_added FILTER - Antes de criar $data
after_estimate_added Após criar $estimate_id
after_estimate_updated Após actualizar $estimate_id
`estimate_