. */ namespace SP\Config; use SP\Core\Exceptions\ConfigException; use SP\Core\Exceptions\SPException; use SP\Util\Checks; /** * Class ConfigUtil * * @package Config */ final class ConfigUtil { /** * Adaptador para convertir una cadena de extensiones a un array */ public static function filesExtsAdapter(string $filesAllowedExts): array { if (empty($filesAllowedExts)) { return []; } return array_map(static function ($value) { if (preg_match('/[^a-z0-9_-]+/i', $value)) { return null; } return strtoupper($value); }, explode(',', $filesAllowedExts)); } /** * Adaptador para convertir una cadena de direcciones de email a un array */ public static function mailAddressesAdapter(string $mailAddresses): array { if (empty($mailAddresses)) { return []; } return array_filter( explode(',', $mailAddresses), static fn($value) => filter_var($value, FILTER_VALIDATE_EMAIL) ); } /** * Adaptador para convertir una cadena de eventos a un array */ public static function eventsAdapter(array $events): array { return array_filter( $events, static fn($value) => preg_match('/^[a-z][a-z.]+$/i', $value) ); } /** * Comprobar el archivo de configuración. * Esta función comprueba que el archivo de configuración exista y los permisos sean correctos. * * @throws ConfigException */ public static function checkConfigDir(): void { if (!is_dir(CONFIG_PATH)) { clearstatcache(); throw new ConfigException(__u('\'/app/config\' directory does not exist.'), SPException::CRITICAL); } if (!is_writable(CONFIG_PATH)) { clearstatcache(); throw new ConfigException(__u('Unable to write into \'/app/config\' directory'), SPException::CRITICAL); } if (!Checks::checkIsWindows() && ($configPerms = decoct(fileperms(CONFIG_PATH) & 0777)) !== '750' ) { clearstatcache(); throw new ConfigException( __u('\'/app/config\' directory permissions are wrong'), SPException::ERROR, sprintf(__('Current: %s - Needed: 750'), $configPerms)); } } }