Caminho no Gestor bibliotecas/plugins-installer.php
O motor de instalação de plugins. Quem o chama é o módulo admin-plugins (tela de plugins) e o script de linha de comando gestor/controladores/plugins/atualizacao-plugin.php. Os códigos de saída e estados estão em plugins-consts.php.
Ao ser incluída, carrega também banco.php, plugins-consts.php e o controlador do módulo admin-plugins.
plugin_process(array $params): int
$codigo = plugin_process([
'slug' => 'meu-plugin',
'origem_tipo' => 'github_privado', // upload | github_publico | github_privado | local_path
'owner' => 'empresa', 'repo' => 'meu-plugin', 'ref' => 'main',
'cred_ref' => 'EMPRESA', // lê PLUGIN_TOKEN_EMPRESA do .env
]);
echo plg_exit_code_label($codigo);Na ordem:
-
Obter o pacote em
sys_get_temp_dir()/plg_<slug>.zip:-
upload: copiaarquivo; -
github_publico/github_privado: baixa o zip deowner/repo@ref, ou umadownload_urldireta (asset de release); o privado usa um token (cred_ref); -
local_path: compacta uma pasta local ou copia um zip pronto.
-
-
SHA-256 (só quando há
sha256_url): baixa<pacote>.sha256e compara com o hash do zip. O arquivo precisa conter só o hash; o formato dosha256sum(hash nome) é recusado. Semsha256_url, não há verificação de integridade. -
Checksum inalterado: se o SHA-256 do zip é o mesmo já registrado para o plugin, para aqui com sucesso (use
reprocessarpara forçar). -
Extrair em
gestor/temp/plugins/<slug>/e localizarmanifest.json(na raiz ou emplugin/). -
Validar o manifesto:
id,nameeversionobrigatórios;versionno formatox.y.z;idcom minúsculas, dígitos,-e_. -
Mover para
gestor/plugins/<slug>/(com backup do anterior). -
Migrações Phinx de
db/migrations/do plugin, com a configuração do core. -
Dados: os
db/data/*Data.jsondo plugin vão para o banco pelo atualizador de plugins (controladores/plugins/atualizacao-plugin-banco-de-dados.php), com os recursos dos módulos do plugin. -
Metadados na tabela
plugins(versão, checksum, origem,status_execucao) e log emgestor/logs/plugins/.
Opções: dry_run (não move nem grava no banco), no_migrations, only_migrations, only_resources, no_resources, reprocessar, referencia.
Credenciais do GitHub
plugin_credentials_lookup($cred_ref): um valor que começa com ghp_, github_pat_, gho_, ghu_ ou ghs_ é usado como o próprio token; qualquer outro vira a variável PLUGIN_TOKEN_<VALOR> do .env.
Segurança
Instalar um plugin é executar o código dele no servidor: só instale pacotes de origem confiável, e com sha256_url sempre que possível. Além disso, a normalização de nomes com \ (zips feitos no Windows) move arquivos sem conferir se o destino continua dentro da pasta de staging.
Funções de apoio
Caminhos (plugin_base_root(), plugin_staging_path(), plugin_final_path(), plugin_datajson_dest_dir()), arquivos (plugin_safe_mkdir(), plugin_remove_dir(), plugin_read_json(), plugin_compute_checksum(), plugin_fix_temp_file_permissions(), plugin_cleanup_after_install()), download (plugin_http_download(), plugin_github_zip_url(), plugin_download_github_public(), plugin_download_github_private(), plugin_copy_local_path(), plugin_extract_zip(), plugin_locate_manifest()), instalação (plugin_move_to_final(), plugin_backup_existing(), plugin_persist_metadata(), plugin_mark_status(), plugin_checksum_changed(), plugin_log_block(), plugin_normalize_slug(), plugin_validate_manifest(), plugin_is_cli_context()) e dados (plugin_run_migrations(), plugin_sync_datajson(), plugin_sync_datajson_multi(), plugin_sync_resources_granular(), plugin_sync_modules_resources(), plugin_enrich_resource_checksums(), plugin_guess_resource_files(), plugin_delegate_database_operations(), plugin_db_fetch_one(), plugin_upsert_generic(), plugin_upsert_layout(), plugin_upsert_page(), plugin_upsert_component(), plugin_upsert_variable(), plugin_upsert_module(), tabelaFromDataFile()).
Funções
Gerado a partir de gestor/bibliotecas/plugins-installer.php · 44 funções
plugin_normalize_slug
ver no código · linha 30 ↗plugin_normalize_slug(string $slug): stringNormaliza um slug de plugin para formato seguro.
Parâmetros
$slugstring- Slug original do plugin.
Retorno
plugin_base_root
ver no código · linha 37 ↗plugin_base_root(): stringRetorna o caminho raiz do diretório do gestor.
Retorno
plugin_staging_path
ver no código · linha 45 ↗plugin_staging_path(string $slug): stringRetorna o caminho de staging temporário para um plugin.
Parâmetros
$slugstring- Slug do plugin.
Retorno
plugin_final_path
ver no código · linha 53 ↗plugin_final_path(string $slug): stringRetorna o caminho final de instalação de um plugin.
Parâmetros
$slugstring- Slug do plugin.
Retorno
plugin_datajson_dest_dir
ver no código · linha 61 ↗plugin_datajson_dest_dir(string $slug): stringRetorna o diretório de destino para arquivos *Data.json do plugin.
Parâmetros
$slugstring- Slug do plugin.
Retorno
plugin_safe_mkdir
ver no código · linha 69 ↗plugin_safe_mkdir(string $path): voidCria um diretório recursivamente se não existir.
Parâmetros
$pathstring- Caminho do diretório a criar.
Retorno
plugin_remove_dir
ver no código · linha 77 ↗plugin_remove_dir(string $dir): voidRemove um diretório recursivamente incluindo todo seu conteúdo.
Parâmetros
$dirstring- Caminho do diretório a remover.
Retorno
plugin_compute_checksum
ver no código · linha 85 ↗plugin_compute_checksum(string $file): ?stringCalcula o checksum SHA-256 de um arquivo.
Parâmetros
$filestring- Caminho do arquivo.
Retorno
plugin_is_cli_context
ver no código · linha 95 ↗plugin_is_cli_context(): boolDetecta se o script está sendo executado via CLI ou web.
Retorno
tabelaFromDataFile
ver no código · linha 110 ↗tabelaFromDataFile(string $file): stringConverte nome de arquivo *Data.json para nome de tabela snake_case.
Parâmetros
$filestring- Nome do arquivo *Data.json.
Retorno
plugin_read_json
ver no código · linha 134 ↗plugin_read_json(string $path, array &$errors): ?arrayLê e decodifica um arquivo JSON.
Parâmetros
$pathstring- Caminho do arquivo JSON.
$errorsarray- Array de erros (passado por referência).
Retorno
plugin_validate_manifest
ver no código · linha 154 ↗plugin_validate_manifest(array $manifest, array &$errors): boolValida campos obrigatórios e formato do manifest.json do plugin.
Parâmetros
$manifestarray- Dados do manifest.json decodificados.
$errorsarray- Array de erros (passado por referência).
Retorno
plugin_credentials_lookup
ver no código · linha 173 ↗plugin_credentials_lookup(?string $credRef): ?stringBusca credenciais de token para acesso a repositórios privados.
Parâmetros
$credRef?string- Referência ou token direto.
Retorno
plugin_http_download
ver no código · linha 206 ↗plugin_http_download(string $url, string $dest, array $headers, array &$log): boolRealiza download HTTP de arquivo com suporte a cURL e fallback para streams.
Parâmetros
$urlstring- URL para download.
$deststring- Caminho do arquivo de destino.
$headersarray- Headers HTTP a enviar (formato: ['Header-Name' => 'value']).
$logarray- Array de log (passado por referência).
Retorno
plugin_github_zip_url
ver no código · linha 276 ↗plugin_github_zip_url(string $owner, string $repo, string $ref): stringGera URL para download do zipball de um repositório GitHub.
Parâmetros
$ownerstring- Proprietário do repositório (usuário ou organização).
$repostring- Nome do repositório.
$refstring- Referência (branch, tag ou commit SHA).
Retorno
plugin_download_github_public
ver no código · linha 296 ↗plugin_download_github_public(string $owner, string $repo, string $ref, string $destZip, array &$log): boolBaixa plugin de repositório público do GitHub.
Parâmetros
$ownerstring- Proprietário do repositório.
$repostring- Nome do repositório.
$refstring- Referência (branch/tag/commit).
$destZipstring- Caminho do arquivo ZIP de destino.
$logarray- Array de log (passado por referência).
Retorno
plugin_download_github_private
ver no código · linha 355 ↗plugin_download_github_private(string $owner, string $repo, string $ref, string $destZip, string $token, array &$log): boolBaixa plugin de repositório privado do GitHub usando token de autenticação.
Parâmetros
$ownerstring- Proprietário do repositório.
$repostring- Nome do repositório.
$refstring- Referência (branch/tag/commit).
$destZipstring- Caminho do arquivo ZIP de destino.
$tokenstring- Token de autenticação do GitHub.
$logarray- Array de log (passado por referência).
Retorno
plugin_copy_local_path
ver no código · linha 379 ↗plugin_copy_local_path(string $sourcePath, string $destZip, array &$log): boolCopia plugin de caminho local (diretório ou arquivo ZIP).
Parâmetros
$sourcePathstring- Caminho local do plugin (diretório ou arquivo ZIP).
$destZipstring- Caminho do arquivo ZIP de destino.
$logarray- Array de log (passado por referência).
Retorno
plugin_extract_zip
ver no código · linha 419 ↗plugin_extract_zip(string $zipFile, string $destDir, array &$log): boolExtrai arquivo ZIP para diretório de destino.
Parâmetros
$zipFilestring- Caminho do arquivo ZIP.
$destDirstring- Diretório de destino para extração.
$logarray- Array de log (passado por referência).
Retorno
plugin_locate_manifest
ver no código · linha 457 ↗plugin_locate_manifest(string $staging, array &$log): ?stringLocaliza o arquivo manifest.json dentro do diretório de staging.
Parâmetros
$stagingstring- Diretório de staging extraído.
$logarray- Array de log (passado por referência).
Retorno
plugin_move_to_final
ver no código · linha 490 ↗plugin_move_to_final(string $staging, string $final, array &$log): boolMove diretório do plugin de staging para localização final.
Parâmetros
$stagingstring- Diretório de staging.
$finalstring- Diretório final de instalação.
$logarray- Array de log (passado por referência).
Retorno
plugin_persist_metadata
ver no código · linha 555 ↗plugin_persist_metadata(string $slug, array $manifest, ?string $checksum, string $origemTipo, array $opcoes, array &$log): voidPersiste metadados do plugin na tabela plugins do banco de dados.
Parâmetros
$slugstring- ID único do plugin.
$manifestarray- Dados do manifest.json.
$checksum?string- Hash SHA-256 do pacote.
$origemTipostring- Tipo de origem (github_public, github_private, local).
$opcoesarray- Opções de instalação (referencia, ref, cred_ref).
$logarray- Array de log (passado por referência).
Retorno
plugin_backup_existing
ver no código · linha 610 ↗plugin_backup_existing(string $finalPath, array &$log): voidCria backup em ZIP da instalação existente do plugin.
Parâmetros
$finalPathstring- Caminho do plugin instalado.
$logarray- Array de log (passado por referência).
Retorno
plugin_sync_datajson
ver no código · linha 638 ↗plugin_sync_datajson(string $staging, string $slug, array &$log): voidSincroniza arquivos Data.json do plugin com o banco de dados.
Parâmetros
$stagingstring- Diretório de staging do plugin
$slugstring- Identificador único do plugin
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_sync_datajson_multi
ver no código · linha 705 ↗plugin_sync_datajson_multi(array $filesMap, string $slug, array &$log, string $finalBase): voidSincroniza dados a partir de arquivos *Data.json detectados dinamicamente.
Parâmetros
$filesMaparray- Mapeamento de nome da tabela para caminho do arquivo Data.json
$slugstring- Identificador único do plugin
$logarray- Referência ao array de log (passado por referência)
$finalBasestring- Caminho base do plugin instalado
Retorno
plugin_run_migrations
ver no código · linha 748 ↗plugin_run_migrations(string $slug, string $finalPath, array &$log, array $opts = []): voidExecuta migrações de banco de dados específicas do plugin usando Phinx.
Parâmetros
$slugstring- Identificador único do plugin
$finalPathstring- Caminho final do plugin instalado
$logarray- Referência ao array de log (passado por referência)
$optsarray- Opções de execução:
Retorno
plugin_sync_resources_granular
ver no código · linha 794 ↗plugin_sync_resources_granular(array $resources, string $pluginId, ?string $baseDir, array &$log): voidSincroniza recursos (layouts, pages, components, variables) de forma granular.
Parâmetros
$resourcesarray- Array de recursos organizados por idioma
$pluginIdstring- Identificador único do plugin
$baseDir?string- Diretório base para buscar arquivos HTML/CSS (opcional)
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_enrich_resource_checksums
ver no código · linha 848 ↗plugin_enrich_resource_checksums(?string $baseDir, string $tipo, string $id, array &$item, array &$log): voidEnriquece recursos com checksums calculados a partir de arquivos HTML e CSS.
Parâmetros
$baseDir?string- Diretório base para buscar arquivos
$tipostring- Tipo de recurso: 'layouts', 'pages', ou 'components'
$idstring- Identificador do recurso
$itemarray- Referência ao array do item (modificado com checksums)
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_guess_resource_files
ver no código · linha 873 ↗plugin_guess_resource_files(string $baseDir, string $tipo, string $id): ?arrayTenta localizar automaticamente arquivos HTML e CSS de um recurso.
Parâmetros
$baseDirstring- Diretório base do plugin
$tipostring- Tipo de recurso: 'layouts', 'pages', ou 'components'
$idstring- Identificador do recurso
Retorno
plugin_sync_modules_resources
ver no código · linha 905 ↗plugin_sync_modules_resources(string $staging, string $pluginId, array &$log): voidSincroniza recursos de módulos a partir de arquivos module-id.json.
Parâmetros
$stagingstring- Diretório de staging do plugin
$pluginIdstring- Identificador único do plugin
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_db_fetch_one
ver no código · linha 995 ↗plugin_db_fetch_one(string $sql): array|nullBusca e retorna um único registro do banco de dados.
Parâmetros
$sqlstring- Consulta SQL completa
Retorno
plugin_delegate_database_operations
ver no código · linha 1011 ↗plugin_delegate_database_operations(string $pluginSlug, array $dataFiles, array &$log): boolDelega operações de banco de dados para o sistema robusto de atualizações.
Parâmetros
$pluginSlugstring- Slug normalizado do plugin
$dataFilesarray- Lista de arquivos Data.json para processar (vazio = todos)
$logarray- Array de log passado por referência para registrar mensagens
Retorno
plugin_upsert_generic
ver no código · linha 1080 ↗plugin_upsert_generic(string $tableName, string $pluginSlug, array $row, array &$tot, array &$log): voidFunção genérica de upsert que delega para o sistema robusto de banco de dados.
Parâmetros
$tableNamestring- Nome da tabela
$pluginSlugstring- Identificador único do plugin
$rowarray- Dados da linha a ser inserida/atualizada
$totarray- Referência ao array de totalizadores (passado por referência)
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_upsert_layout
ver no código · linha 1103 ↗plugin_upsert_layout(string $plugin, string $lang, string $id, array $src, array &$tot): voidInsere ou atualiza um layout no banco de dados.
Parâmetros
$pluginstring- Identificador do plugin
$langstring- Código do idioma (ex: 'pt-br')
$idstring- Identificador único do layout
$srcarray- Dados source com chaves: name/nome, checksum, version
$totarray- Referência ao array de totalizadores (passado por referência)
Retorno
plugin_upsert_page
ver no código · linha 1164 ↗plugin_upsert_page(string $plugin, string $lang, string $id, array $src, array &$tot): voidInsere ou atualiza uma página no banco de dados.
Parâmetros
$pluginstring- Identificador do plugin
$langstring- Código do idioma (ex: 'pt-br')
$idstring- Identificador único da página
$srcarray- Dados source com chaves: name/nome, path/caminho, module/modulo, checksum, version
$totarray- Referência ao array de totalizadores (passado por referência)
Retorno
plugin_upsert_component
ver no código · linha 1232 ↗plugin_upsert_component(string $plugin, string $lang, string $id, array $src, array &$tot): voidInsere ou atualiza um componente no banco de dados.
Parâmetros
$pluginstring- Identificador do plugin
$langstring- Código do idioma (ex: 'pt-br')
$idstring- Identificador único do componente
$srcarray- Dados source com chaves: name/nome, module/modulo, checksum, version
$totarray- Referência ao array de totalizadores (passado por referência)
Retorno
plugin_upsert_variable
ver no código · linha 1295 ↗plugin_upsert_variable(string $plugin, string $lang, string $id, array $src, array &$tot): voidInsere ou atualiza uma variável no banco de dados.
Parâmetros
$pluginstring- Identificador do plugin
$langstring- Código do idioma (ex: 'pt-br')
$idstring- Identificador único da variável
$srcarray- Dados source com chaves: value/valor, type/tipo, group/grupo, module/modulo
$totarray- Referência ao array de totalizadores (passado por referência)
Retorno
plugin_upsert_module
ver no código · linha 1346 ↗plugin_upsert_module(string $plugin, string $id, array $src, array &$tot): voidInsere ou atualiza um módulo no banco de dados.
Parâmetros
$pluginstring- Identificador do plugin
$idstring- Identificador único do módulo
$srcarray- Dados source com chaves: name/nome, modulo_grupo_id, titulo, icone, icone2,
$totarray- Referência ao array de totalizadores (passado por referência)
Retorno
plugin_checksum_changed
ver no código · linha 1402 ↗plugin_checksum_changed(string $slug, ?string $newChecksum): boolVerifica se o checksum do pacote mudou desde a última instalação.
Parâmetros
$slugstring- Identificador único do plugin
$newChecksum?string- Novo checksum calculado (SHA-256)
Retorno
plugin_mark_status
ver no código · linha 1424 ↗plugin_mark_status(string $slug, string $status): voidMarca o status de execução do plugin no banco de dados.
Parâmetros
$slugstring- Identificador único do plugin
$statusstring- Status a ser registrado (ex: 'instalando', 'erro', 'concluído')
Retorno
plugin_log_block
ver no código · linha 1440 ↗plugin_log_block(array $logLines, string $slug): voidRegistra mensagens de log em arquivo com timestamp.
Parâmetros
$logLinesarray- Array de mensagens de log
$slugstring- Identificador único do plugin
Retorno
plugin_cleanup_after_install
ver no código · linha 1458 ↗plugin_cleanup_after_install(string $finalPath, array &$log): voidLimpa pasta DB e corrige permissões após instalação do plugin.
Parâmetros
$finalPathstring- Caminho do plugin instalado
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_fix_temp_file_permissions
ver no código · linha 1479 ↗plugin_fix_temp_file_permissions(string $filePath, array &$log): voidCorrige permissões de arquivo temporário via chown.
Parâmetros
$filePathstring- Caminho completo do arquivo
$logarray- Referência ao array de log (passado por referência)
Retorno
plugin_process
ver no código · linha 1539 ↗plugin_process(array $params): intFunção principal do instalador de plugins - orquestra todo o processo.
Parâmetros
$paramsarray- Parâmetros da instalação:
Retorno