File: /var/www/html/script.php
<?php
// ================================
// Configuración
// ================================
$apiUrl = "http://192.168.10.96/rrhh/api_empleados/api/empleado.php";
$moodleUrl = "https://demo.sumar.com.py";
$token = "c8a53a72b6ec32ecf838872489acf998";
// ================================
// Función para llamar a la API de empleados
// ================================
function getEmployeesFromAPI($url) {
$response = file_get_contents($url);
if ($response === FALSE) {
die("❌ Error al conectar con la API de empleados.");
}
$data = json_decode($response, true);
return $data["data"] ?? [];
}
// ================================
// Función para llamar al API REST de Moodle
// ================================
function callMoodleAPI($function, $params, $moodleUrl, $token) {
$url = $moodleUrl . "/webservice/rest/server.php?wstoken=" . $token .
"&moodlewsrestformat=json&wsfunction=" . $function;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
if ($response === FALSE) {
die("❌ Error al conectar con Moodle: " . curl_error($ch));
}
curl_close($ch);
return json_decode($response, true);
}
// ================================
// Obtener empleados de la API
// ================================
$empleados = getEmployeesFromAPI($apiUrl);
// Obtener usuarios existentes de Moodle
$moodleUsers = callMoodleAPI("core_user_get_users", [
"criteria[0][key]" => "email",
"criteria[0][value]" => "@"
], $moodleUrl, $token);
$moodleUsers = $moodleUsers["users"] ?? [];
$moodleUsersMap = [];
foreach ($moodleUsers as $u) {
$moodleUsersMap[$u["username"]] = $u;
}
// ================================
// Procesar empleados
// ================================
foreach ($empleados as $emp) {
$username = $emp["cedula"];
$email = $emp["correo"] ?: strtolower($emp["cedula"])."@demo.com";
// Datos obligatorios
$userdata = [
"username" => $username,
"firstname" => $emp["nombre"],
"lastname" => $emp["apellido"],
"email" => $email,
"auth" => "manual",
"idnumber" => $emp["cedula"],
];
// Campos personalizados
$userdata["customfields"] = [
["type" => "ingreso", "value" => $emp["ingreso"] ?? ""],
["type" => "baja", "value" => $emp["baja"] ?? ""],
["type" => "sector", "value" => $emp["sector"] ?? ""],
["type" => "puesto", "value" => $emp["puesto"] ?? ""],
["type" => "malla", "value" => $emp["malla"] ?? ""],
];
if (!isset($moodleUsersMap[$username])) {
// Crear usuario nuevo
echo "➕ Creando usuario: {$username}\n";
$params = ["users" => [$userdata]];
$resp = callMoodleAPI("core_user_create_users", $params, $moodleUrl, $token);
} else {
// Actualizar usuario existente
echo "🔄 Actualizando usuario: {$username}\n";
$userdata["id"] = $moodleUsersMap[$username]["id"];
$params = ["users" => [$userdata]];
$resp = callMoodleAPI("core_user_update_users", $params, $moodleUrl, $token);
}
}
// ================================
// Suspender usuarios que no estén en la API
// ================================
$apiUsernames = array_column($empleados, "cedula");
foreach ($moodleUsersMap as $username => $user) {
if (!in_array($username, $apiUsernames)) {
echo "⏸ Suspendiendo usuario: {$username}\n";
$params = ["users" => [["id" => $user["id"], "suspended" => 1]]];
$resp = callMoodleAPI("core_user_update_users", $params, $moodleUrl, $token);
}
}
echo "✅ Sincronización finalizada.\n";