Module:ZoteroAPI

De alcolois
Aller à la navigation Aller à la recherche

La documentation pour ce module peut être créée à Module:ZoteroAPI/doc

local p = {}
local cachedData = nil  -- 🔒 Cache unique pour la durée d'exécution de la page

-- Fonction de récupération de données via un proxy local
function p._fetchZoteroData(frame)
    -- Utiliser le cache si disponible
    if cachedData then
        return cachedData
    end
    
    -- Obtenir l'itemKey depuis le paramètre
    local itemKey = frame and frame.args[1]
    
    -- Si aucun itemKey n'est fourni, retourner nil
    if not itemKey or itemKey == "" then
        return nil
    end
    
    -- Récupérer les données depuis une page locale de notre wiki
    local proxyPage = "MediaWiki:ZoteroData/" .. itemKey
    local proxyContent = mw.title.new(proxyPage).content
    
    if not proxyContent or proxyContent == "" then
        return nil
    end
    
    -- Décoder le JSON stocké dans la page proxy
    local success, decoded = pcall(mw.text.jsonDecode, proxyContent)
    
    if not success or not decoded then
        return nil
    end
    
    -- Stocker dans le cache
    cachedData = decoded
    return cachedData
end

-- Fonction pour créer une page proxy (à utiliser par les administrateurs)
function p.createProxyPage(frame)
    local itemKey = frame.args[1]
    local jsonData = frame.args[2]
    
    if not itemKey or not jsonData then
        return "Erreur: itemKey et jsonData sont requis"
    end
    
    -- Vérifier que le JSON est valide
    local success, _ = pcall(mw.text.jsonDecode, jsonData)
    if not success then
        return "Erreur: JSON invalide"
    end
    
    -- Afficher le contenu à copier dans une page MediaWiki:ZoteroData/<itemKey>
    return "Pour créer la page proxy, copiez le JSON suivant dans la page [[MediaWiki:ZoteroData/" .. 
           itemKey .. "]]:\n\n<pre>" .. jsonData .. "</pre>"
end

-- Fonction de débogage pour vérifier si une page proxy existe
function p.checkProxyPage(frame)
    local itemKey = frame and frame.args[1]
    
    if not itemKey or itemKey == "" then
        return "Aucun itemKey fourni"
    end
    
    local proxyPage = "MediaWiki:ZoteroData/" .. itemKey
    local pageTitle = mw.title.new(proxyPage)
    
    if not pageTitle.exists then
        return "La page proxy " .. proxyPage .. " n'existe pas"
    end
    
    return "La page proxy " .. proxyPage .. " existe et contient " .. 
           #pageTitle.content .. " caractères"
end

-- Les autres fonctions restent identiques
function p.debugResult(frame)
    local d = p._fetchZoteroData(frame)
    if not d then return "Aucune donnée reçue" end
    local out = {}
    table.insert(out, "✔ Clé : " .. (d.key or ''))
    table.insert(out, "✔ Titre : " .. (d.caseName or ''))
    table.insert(out, "✔ Tribunal : " .. (d.court or ''))
    table.insert(out, "✔ Date : " .. (d.dateDecided or ''))
    table.insert(out, "✔ URL : " .. (d.url or ''))
    table.insert(out, "✔ Auteur : " .. (d.firstName or '') .. " " .. (d.lastName or ''))
    return table.concat(out, "\n")
end

-- Fonctions accessibles
function p.caseName(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.caseName or ''
end

function p.dateDecided(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.dateDecided or ''
end

function p.docketNumber(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.docketNumber or ''
end

function p.history(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.history or ''
end

function p.url(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.url or ''
end

function p.court(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.court or ''
end

function p.auteurPrenom(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.firstName or ''
end

function p.auteurNom(frame)
    local d = p._fetchZoteroData(frame)
    return d and d.lastName or ''
end

return p