ED Plantillas
De FSF
Instala y sincroniza plantiallas
Ejecuta así
- cd /d C:\xampp\htdocs\scripts && C:\xampp\php\php.exe sync_templates.php
<?php
if (php_sapi_name() !== 'cli') {
die("Solo CLI\n");
}
$fsfApi = "http://localhost/00_FSF/api.php";
$edApi = "http://localhost/00_ED/api.php";
$user = "Ed1@Zero";
$pass = "pa0n691978pqpmd3dcapqsmuj9044v8o";
$cookie = __DIR__ . "/cookie.txt";
// =========================
// REQUEST
// =========================
function request($url, $params, $cookie = null) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($cookie) {
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
}
$res = curl_exec($ch);
curl_close($ch);
return json_decode($res, true);
}
// =========================
// LOGIN CORRECTO
// =========================
function login($api, $user, $pass, $cookie) {
echo "Obteniendo login token...\n";
$tokenRes = request($api, [
"action" => "query",
"meta" => "tokens",
"type" => "login",
"format" => "json"
], $cookie);
$loginToken = $tokenRes["query"]["tokens"]["logintoken"] ?? null;
if (!$loginToken) {
die("ERROR TOKEN\n");
}
echo "Logeando...\n";
$res = request($api, [
"action" => "login",
"lgname" => $user,
"lgpassword" => $pass,
"lgtoken" => $loginToken,
"format" => "json"
], $cookie);
if (!isset($res["login"]["result"]) || $res["login"]["result"] !== "Success") {
die("ERROR LOGIN: " . json_encode($res) . "\n");
}
echo "Login OK\n";
}
// =========================
// CSRF
// =========================
function getCsrf($api, $cookie) {
$res = request($api, [
"action" => "query",
"meta" => "tokens",
"format" => "json"
], $cookie);
return $res["query"]["tokens"]["csrftoken"] ?? null;
}
// =========================
// PLANTILLAS
// =========================
function getTemplates($api) {
$list = [];
$cont = null;
do {
$params = [
"action" => "query",
"list" => "allpages",
"apnamespace" => 10,
"aplimit" => "max",
"format" => "json"
];
if ($cont) $params["apcontinue"] = $cont;
$raw = file_get_contents($api . "?" . http_build_query($params));
$res = json_decode($raw, true);
if (!isset($res["query"]["allpages"])) continue;
foreach ($res["query"]["allpages"] as $p) {
$list[] = $p["title"];
}
$cont = $res["continue"]["apcontinue"] ?? null;
} while ($cont);
return $list;
}
// =========================
// CONTENIDO
// =========================
function getContent($api, $title) {
$raw = file_get_contents($api . "?" . http_build_query([
"action" => "query",
"prop" => "revisions",
"rvprop" => "content",
"format" => "json",
"titles" => $title
]));
$res = json_decode($raw, true);
if (!isset($res["query"]["pages"])) return null;
foreach ($res["query"]["pages"] as $p) {
if (isset($p["revisions"][0]["*"])) {
return $p["revisions"][0]["*"];
}
}
return null;
}
// =========================
// GUARDAR
// =========================
function save($api, $title, $content, $token, $cookie) {
$res = request($api, [
"action" => "edit",
"title" => $title,
"text" => $content,
"token" => $token,
"format" => "json"
], $cookie);
if (isset($res["error"])) {
echo "ERROR SAVE\n";
return false;
}
return true;
}
// =========================
// EJECUCIÓN
// =========================
login($edApi, $user, $pass, $cookie);
$csrf = getCsrf($edApi, $cookie);
if (!$csrf) die("ERROR CSRF\n");
echo "CSRF OK\n";
$templates = getTemplates($fsfApi);
echo "Total: " . count($templates) . "\n\n";
foreach ($templates as $tpl) {
echo "Sync $tpl ... ";
$fsf = getContent($fsfApi, $tpl);
$ed = getContent($edApi, $tpl);
if ($fsf === null) {
echo "ERROR API\n";
continue;
}
if ($fsf !== $ed) {
save($edApi, $tpl, $fsf, $csrf, $cookie);
echo "GUARDADO\n";
} else {
echo "SIN CAMBIOS\n";
}
}
echo "\n✔ FIN\n";