<?php
/**
* Validates configuration for scheduled records.
* Logs errors to a file.
*
* @param array $config Configuration array.
* @return bool True if configuration is valid, false otherwise.
*/
function validateScheduledRecordConfig(array $config): bool
{
$logFile = 'config_validation.log'; // Log file path
// Function to log errors
function logError(string $message): void
{
global $logFile;
$timestamp = date('Y-m-d H:i:s');
error_log("[$timestamp] ERROR: $message", 3, $logFile);
}
// Validate required fields
if (empty($config['record_id'])) {
logError("Missing record_id configuration.");
return false;
}
if (empty($config['data_source'])) {
logError("Missing data_source configuration.");
return false;
}
if (empty($config['schedule']['frequency'])) {
logError("Missing schedule.frequency configuration.");
return false;
}
if (empty($config['schedule']['time'])) {
logError("Missing schedule.time configuration.");
return false;
}
// Validate data source type
if (!in_array($config['data_source'], ['database', 'api', 'file'])) {
logError("Invalid data_source: " . $config['data_source']);
return false;
}
// Validate schedule frequency
if (!in_array($config['schedule']['frequency'], ['hourly', 'daily', 'weekly', 'monthly'])) {
logError("Invalid schedule.frequency: " . $config['schedule']['frequency']);
return false;
}
// Validate time format (example, adjust as needed)
if (!preg_match('/^\d{2}:\d{2}$/', $config['schedule']['time'])) {
logError("Invalid schedule.time format. Expected HH:MM");
return false;
}
//Additional validation as needed. Example: Validate data_source specific parameters.
if ($config['data_source'] === 'database') {
if (empty($config['database']['host']) || empty($config['database']['user']) || empty($config['database']['password']) || empty($config['database']['name'])) {
logError("Missing required database parameters.");
return false;
}
}
// Configuration is valid
return true;
}
// Example usage:
$config = [
'record_id' => 123,
'data_source' => 'database',
'schedule' => [
'frequency' => 'daily',
'time' => '03:00',
],
'database' => [
'host' => 'localhost',
'user' => 'dbuser',
'password' => 'dbpassword',
'name' => 'mydb'
]
];
if (validateScheduledRecordConfig($config)) {
echo "Configuration is valid.\n";
} else {
echo "Configuration is invalid. See config_validation.log for details.\n";
}
?>
Add your comment