Files
crm.clientright.ru/modules/OnlyOfficeTemplates/config.php
Fedor e21a37c2cb feat: finalize OnlyOfficeTemplates rollout and stability fixes
Complete OnlyOfficeTemplates safe rollout with module-scoped template paths, placeholder side panel, docx-renderer feature flags/fallback, public OnlyOffice endpoints, and list/delete UX so editing and saving work reliably without breaking legacy flow.
2026-03-26 18:03:58 +03:00

155 lines
7.1 KiB
PHP

<?php
/**
* OnlyOfficeTemplates module configuration.
* Reads from environment (.env) or optional external config (crm_extensions/file_storage/config.php).
* Portable: no hardcoded paths; set S3_*, ONLYOFFICE_* in .env or your config.
*/
$OnlyOfficeTemplatesConfig = null;
/**
* Read env var: getenv() then $_ENV then EnvLoader::get() then direct .env parse.
*/
function OnlyOfficeTemplates_env($key, $default = '') {
$v = getenv($key);
if ($v !== false && $v !== '') {
return $v;
}
$v = $_ENV[$key] ?? null;
if ($v !== null && $v !== '') {
return $v;
}
if (class_exists('EnvLoader')) {
$v = EnvLoader::get($key, $default);
if ($v !== null && $v !== '') {
return $v;
}
}
// Fallback: read .env file directly (when EnvLoader not loaded or empty)
$envPaths = [];
if (!empty($GLOBALS['root_directory'])) {
$envPaths[] = rtrim($GLOBALS['root_directory'], '/') . '/crm_extensions/.env';
}
$baseDir = dirname(__DIR__);
$rootDir = dirname(dirname($baseDir));
$envPaths[] = $rootDir . '/crm_extensions/.env';
foreach ($envPaths as $envPath) {
if (file_exists($envPath) && is_readable($envPath)) {
$content = @file_get_contents($envPath);
if ($content !== false && preg_match('/^\s*' . preg_quote($key, '/') . '\s*=\s*([^\s#]+)/m', $content, $m)) {
return trim(trim($m[1]), '"\'');
}
}
}
return $default;
}
function OnlyOfficeTemplates_getConfig() {
global $OnlyOfficeTemplatesConfig;
if ($OnlyOfficeTemplatesConfig !== null) {
return $OnlyOfficeTemplatesConfig;
}
$baseDir = dirname(__DIR__);
$rootDir = dirname(dirname($baseDir));
// Load .env (EnvLoader uses $_ENV, not getenv)
if (file_exists($rootDir . '/crm_extensions/shared/EnvLoader.php')) {
require_once $rootDir . '/crm_extensions/shared/EnvLoader.php';
$envPath = $rootDir . '/crm_extensions/.env';
if (file_exists($envPath)) {
EnvLoader::load($envPath);
}
}
// 1) Try external config (crm_extensions) if present
$extConfigPath = $rootDir . '/crm_extensions/file_storage/config.php';
if (file_exists($extConfigPath)) {
try {
$ext = require $extConfigPath;
if (is_array($ext) && isset($ext['s3'])) {
$s3 = $ext['s3'];
$bucket = $s3['bucket'] ?? $ext['bucket'] ?? $ext['s3_bucket'] ?? OnlyOfficeTemplates_env('S3_BUCKET', '');
if ($bucket === '') {
$bucket = OnlyOfficeTemplates_env('S3_BUCKET', '');
}
$s3['bucket'] = $bucket;
$OnlyOfficeTemplatesConfig = [
's3' => $s3,
's3_prefix' => OnlyOfficeTemplates_env('OOT_S3_PREFIX', 'crm2/OnlyOfficeTemplates'),
'onlyoffice_convert_url' => OnlyOfficeTemplates_env('OOT_ONLYOFFICE_CONVERT_URL') ?: OnlyOfficeTemplates_env('ONLYOFFICE_CONVERT_URL', ''),
'onlyoffice_document_server' => OnlyOfficeTemplates_env('OOT_ONLYOFFICE_DOCUMENT_SERVER') ?: OnlyOfficeTemplates_env('ONLYOFFICE_DOCUMENT_SERVER', ''),
'documents_s3_prefix' => OnlyOfficeTemplates_env('OOT_DOCUMENTS_S3_PREFIX', 'crm2/CRM_Active_Files/Documents'),
's3_bucket' => $bucket,
'document_secret' => OnlyOfficeTemplates_env('OOT_DOCUMENT_SECRET', ''),
'docx_renderer' => [
'enabled' => strtolower((string)OnlyOfficeTemplates_env('OOT_USE_DOCX_RENDERER', 'false')) === 'true',
'url' => rtrim((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_URL', ''), '/'),
'api_key' => (string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_API_KEY', ''),
'timeout_sec' => (int)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_TIMEOUT', '25'),
'fallback_enabled' => strtolower((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_FALLBACK', 'true')) !== 'false',
'module_whitelist' => trim((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_MODULE_WHITELIST', '')),
'template_whitelist' => trim((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_TEMPLATE_WHITELIST', '')),
],
];
return $OnlyOfficeTemplatesConfig;
}
} catch (Exception $e) {
// fallback to env
}
}
// 2) Build from environment
$bucket = OnlyOfficeTemplates_env('S3_BUCKET', '');
$OnlyOfficeTemplatesConfig = [
's3' => [
'key' => OnlyOfficeTemplates_env('S3_ACCESS_KEY', ''),
'secret' => OnlyOfficeTemplates_env('S3_SECRET_KEY', ''),
'endpoint' => OnlyOfficeTemplates_env('S3_ENDPOINT', ''),
'bucket' => $bucket,
'region' => OnlyOfficeTemplates_env('S3_REGION', 'ru-1'),
'use_path_style_endpoint' => true,
'version' => 'latest',
],
's3_prefix' => OnlyOfficeTemplates_env('OOT_S3_PREFIX', 'crm2/OnlyOfficeTemplates'),
'onlyoffice_convert_url' => OnlyOfficeTemplates_env('OOT_ONLYOFFICE_CONVERT_URL') ?: OnlyOfficeTemplates_env('ONLYOFFICE_CONVERT_URL', ''),
'onlyoffice_document_server' => OnlyOfficeTemplates_env('OOT_ONLYOFFICE_DOCUMENT_SERVER') ?: OnlyOfficeTemplates_env('ONLYOFFICE_DOCUMENT_SERVER', ''),
'documents_s3_prefix' => OnlyOfficeTemplates_env('OOT_DOCUMENTS_S3_PREFIX', 'crm2/CRM_Active_Files/Documents'),
's3_bucket' => $bucket,
'document_secret' => OnlyOfficeTemplates_env('OOT_DOCUMENT_SECRET', ''),
'docx_renderer' => [
'enabled' => strtolower((string)OnlyOfficeTemplates_env('OOT_USE_DOCX_RENDERER', 'false')) === 'true',
'url' => rtrim((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_URL', ''), '/'),
'api_key' => (string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_API_KEY', ''),
'timeout_sec' => (int)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_TIMEOUT', '25'),
'fallback_enabled' => strtolower((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_FALLBACK', 'true')) !== 'false',
'module_whitelist' => trim((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_MODULE_WHITELIST', '')),
'template_whitelist' => trim((string)OnlyOfficeTemplates_env('OOT_DOCX_RENDERER_TEMPLATE_WHITELIST', '')),
],
];
return $OnlyOfficeTemplatesConfig;
}
function OnlyOfficeTemplates_log($event, array $data = [])
{
$rootDir = dirname(dirname(__DIR__));
$logDir = $rootDir . '/cache/logs';
if (!is_dir($logDir)) {
@mkdir($logDir, 0755, true);
}
$line = date('Y-m-d H:i:s') . ' ' . $event . ' ' . json_encode($data, JSON_UNESCAPED_UNICODE) . "\n";
@file_put_contents($logDir . '/OnlyOfficeTemplates_runtime.log', $line, FILE_APPEND);
}
function OnlyOfficeTemplates_listFromCsv($value)
{
if (!is_string($value) || trim($value) === '') {
return [];
}
$parts = array_map('trim', explode(',', $value));
return array_values(array_filter($parts, function ($v) {
return $v !== '';
}));
}