Files
crm.clientright.ru/erv_ticket/config.php
Fedor 9245768987 🚀 CRM Files Migration & Real-time Features
 Features:
- Migrated ALL files to new S3 structure (Projects, Contacts, Accounts, HelpDesk, Invoice, etc.)
- Added Nextcloud folder buttons to ALL modules
- Fixed Nextcloud editor integration
- WebSocket server for real-time updates
- Redis Pub/Sub integration
- File path manager for organized storage
- Redis caching for performance (Functions.php)

📁 New Structure:
Documents/Project/ProjectName_ID/file_docID.ext
Documents/Contacts/FirstName_LastName_ID/file_docID.ext
Documents/Accounts/AccountName_ID/file_docID.ext

🔧 Technical:
- FilePathManager for standardized paths
- S3StorageService integration
- WebSocket server (Node.js + Docker)
- Redis cache for getBasicModuleInfo()
- Predis library for Redis connectivity

📝 Scripts:
- Migration scripts for all modules
- Test pages for WebSocket/SSE/Polling
- Documentation (MIGRATION_*.md, REDIS_*.md)

🎯 Result: 15,000+ files migrated successfully!
2025-10-24 19:59:28 +03:00

174 lines
5.7 KiB
PHP

<?php
/**
* ============================================
* CONFIG.PHP - Загрузка конфигурации из .env
* ============================================
*
* Загружает переменные окружения из .env файла
* Использование: require_once 'config.php';
*
* Создан: 23.10.2025
*/
/**
* Загрузка переменных из .env файла
*
* @param string $path Путь к .env файлу
* @return void
*/
function loadEnv($path) {
if (!file_exists($path)) {
die('ERROR: .env file not found at: ' . $path);
}
$lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
// Пропускаем комментарии
if (strpos(trim($line), '#') === 0) {
continue;
}
// Разбираем строку KEY=VALUE
if (strpos($line, '=') !== false) {
list($key, $value) = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
// Удаляем кавычки если есть
$value = trim($value, '"\'');
// Устанавливаем переменную окружения
if (!array_key_exists($key, $_ENV)) {
$_ENV[$key] = $value;
putenv("$key=$value");
}
}
}
}
// Загружаем .env
loadEnv(__DIR__ . '/.env');
/**
* Получить значение переменной окружения
*
* @param string $key Имя переменной
* @param mixed $default Значение по умолчанию
* @return mixed Значение переменной или default
*/
function env($key, $default = null) {
if (isset($_ENV[$key])) {
$value = $_ENV[$key];
// Преобразуем строковые boolean в bool
if ($value === 'true') return true;
if ($value === 'false') return false;
if ($value === 'null') return null;
return $value;
}
return $default;
}
// ============================================
// КОНСТАНТЫ ДЛЯ УДОБНОГО ДОСТУПА
// ============================================
// База данных
define('DB_HOST', env('DB_HOST', 'localhost'));
define('DB_NAME', env('DB_NAME'));
define('DB_USER', env('DB_USER'));
define('DB_PASS', env('DB_PASSWORD'));
// SMS
define('SMS_API_URL', env('SMS_API_URL'));
define('SMS_LOGIN', env('SMS_LOGIN'));
define('SMS_PASSWORD', env('SMS_PASSWORD'));
define('SMS_TOKEN', env('SMS_TOKEN'));
define('SMS_SENDER', env('SMS_SENDER'));
// Email
define('MAIL_HOST', env('MAIL_HOST'));
define('MAIL_PORT', env('MAIL_PORT', 465));
define('MAIL_USERNAME', env('MAIL_USERNAME'));
define('MAIL_PASSWORD', env('MAIL_PASSWORD'));
define('MAIL_FROM_EMAIL', env('MAIL_FROM_EMAIL'));
define('MAIL_FROM_NAME', env('MAIL_FROM_NAME'));
define('MAIL_TO_1', env('MAIL_TO_1'));
define('MAIL_TO_2', env('MAIL_TO_2'));
// CRM
define('CRM_WEBFORM_URL', env('CRM_WEBFORM_URL'));
define('CRM_PUBLIC_ID', env('CRM_PUBLIC_ID'));
define('CRM_SESSION_TOKEN', env('CRM_SESSION_TOKEN'));
// Внешние API
define('DADATA_TOKEN', env('DADATA_TOKEN'));
define('DADATA_API_URL', env('DADATA_API_URL'));
define('IP_API_URL', env('IP_API_URL'));
// Контрагент
define('CONTRACTOR_NAME', env('CONTRACTOR_NAME'));
define('CONTRACTOR_INN', env('CONTRACTOR_INN'));
define('CONTRACTOR_OGRN', env('CONTRACTOR_OGRN'));
define('CONTRACTOR_ADDRESS', env('CONTRACTOR_ADDRESS'));
define('CONTRACTOR_EMAIL', env('CONTRACTOR_EMAIL'));
define('CONTRACTOR_PHONE', env('CONTRACTOR_PHONE'));
define('CONTRACTOR_WEBSITE', env('CONTRACTOR_WEBSITE'));
// Настройки приложения
define('DEBUG_MODE_PHP', env('DEBUG_MODE', false));
define('APP_ENV', env('APP_ENV', 'production'));
define('SUCCESS_REDIRECT_URL', env('SUCCESS_REDIRECT_URL'));
// Безопасность
define('RATE_LIMIT_SMS_MAX', env('RATE_LIMIT_SMS_MAX', 3));
define('RATE_LIMIT_SMS_WINDOW', env('RATE_LIMIT_SMS_WINDOW', 300));
define('RATE_LIMIT_FORM_MAX', env('RATE_LIMIT_FORM_MAX', 5));
define('RATE_LIMIT_FORM_WINDOW', env('RATE_LIMIT_FORM_WINDOW', 3600));
// Redis
define('REDIS_HOST', env('REDIS_HOST', '127.0.0.1'));
define('REDIS_PORT', env('REDIS_PORT', 6379));
define('REDIS_PASSWORD', env('REDIS_PASSWORD'));
define('REDIS_DATABASE', env('REDIS_DATABASE', 0));
define('REDIS_PREFIX', env('REDIS_PREFIX', 'erv:'));
// RabbitMQ
define('RABBITMQ_HOST', env('RABBITMQ_HOST'));
define('RABBITMQ_PORT', env('RABBITMQ_PORT', 5672));
define('RABBITMQ_USER', env('RABBITMQ_USER', 'guest'));
define('RABBITMQ_PASSWORD', env('RABBITMQ_PASSWORD'));
define('RABBITMQ_VHOST', env('RABBITMQ_VHOST', '/'));
// Драйверы
define('CACHE_DRIVER', env('CACHE_DRIVER', 'file'));
define('QUEUE_DRIVER', env('QUEUE_DRIVER', 'sync'));
define('SESSION_DRIVER', env('SESSION_DRIVER', 'file'));
// Очереди
define('QUEUE_OCR_DOCUMENTS', env('QUEUE_OCR_DOCUMENTS', 'erv_ocr_documents'));
define('QUEUE_CHECK_FLIGHTS', env('QUEUE_CHECK_FLIGHTS', 'erv_check_flights'));
define('QUEUE_SEND_EMAILS', env('QUEUE_SEND_EMAILS', 'erv_send_emails'));
define('QUEUE_SYNC_CRM', env('QUEUE_SYNC_CRM', 'erv_sync_crm'));
// ============================================
// ПРОВЕРКА КРИТИЧНЫХ ПЕРЕМЕННЫХ
// ============================================
$required_vars = [
'DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS',
'SMS_TOKEN', 'MAIL_USERNAME', 'MAIL_PASSWORD'
];
foreach ($required_vars as $var) {
if (empty(constant($var))) {
die("ERROR: Required environment variable '{$var}' is not set in .env file");
}
}
// Всё загружено успешно!
?>