Модуль:FetchData3: відмінності між версіями

нема опису редагування
Немає опису редагування
Мітка: Скасовано
Немає опису редагування
Мітка: Скасовано
Рядок 32: Рядок 32:
     -- Отримуємо заголовки (перший рядок після {|)
     -- Отримуємо заголовки (перший рядок після {|)
     local headers = {}
     local headers = {}
     local first_row = mw.ustring.match(table_content, "!\n(.-)\n|-")
     local first_row = nil
      
      
     if not first_row then
     -- Спробуємо знайти рядок заголовків
        first_row = mw.ustring.match(table_content, "{|[^\n]*\n!(.-)[\n]")
    for line in mw.ustring.gmatch(table_content, "([^\n]+)") do
        if mw.ustring.match(line, "^!") then
            first_row = line
            break
        end
     end
     end
      
      
     if first_row then
     if first_row then
         -- Замінюємо   на пробіли та розбиваємо по ||
         -- Розбиваємо по ! або !!
        first_row = mw.ustring.gsub(first_row, " ", " ")
         for header in mw.ustring.gmatch(first_row, "!+%s*([^!]+)") do
       
         for header in mw.ustring.gmatch(first_row, "([^!]+)") do
             local trimmed = mw.text.trim(header)
             local trimmed = mw.text.trim(header)
            -- Видаляємо || якщо вони є на початку
            trimmed = mw.ustring.gsub(trimmed, "^||%s*", "")
            trimmed = mw.text.trim(trimmed)
           
             if trimmed ~= "" then
             if trimmed ~= "" then
                 table.insert(headers, trimmed)
                 table.insert(headers, trimmed)
Рядок 106: Рядок 104:
         return nil
         return nil
     elseif value == "1" then
     elseif value == "1" then
         return "[[Файл:Gold.png|1-е]]"
         return "[[Файл:Gold.png|1-е Місце]]"
     elseif value == "2" then
     elseif value == "2" then
         return "[[Файл:Silver.png|2-е]]"
         return "[[Файл:Silver.png|2-е Місце]]"
     elseif value == "3" then
     elseif value == "3" then
         return "[[Файл:Bronze.png|3-е]]"
         return "[[Файл:Bronze.png|3-е Місце]]"
     elseif value == "4" then
     elseif value == "4" then
         return "[[Файл:Finalist.png|Участь]]"
         return "[[Файл:Finalist.png|Фіналіст]]"
     elseif value == "S" or mw.ustring.match(value, "^S%d") then
     elseif value == "S" or mw.ustring.match(value, "^S%d") then
         return "[[Файл:Star.png|Кращий]]"
         return "[[Файл:Star.png|Найкращий]]"
     else
     else
         return nil
         return nil
     end
     end
end
-- DEBUG функція для таблиці Титули
function p.debug_titles(frame)
    local name = frame.args.player
    local titles_data = get_player_row("Титули", name)
   
    if not titles_data then
        return "Гравця не знайдено в таблиці Титули"
    end
   
    local result = {"Заголовки:"}
    for i = 1, math.min(10, #titles_data.headers) do
        table.insert(result, string.format("%d. '%s'", i, titles_data.headers[i]))
    end
   
    table.insert(result, "\nЗначення:")
    for i = 1, math.min(10, #titles_data.cells) do
        table.insert(result, string.format("%d. '%s'", i, titles_data.cells[i] or "nil"))
    end
   
    return table.concat(result, "\n")
end
end


Рядок 202: Рядок 178:


----------------------------------------------------------------------
----------------------------------------------------------------------
-- ГОЛОВНА ФУНКЦІЯ ДЛЯ ОТРИМАННЯ ТИТУЛІВ У ВИГЛЯДІ ТАБЛИЦІ
-- ГОЛОВНА ФУНКЦІЯ ДЛЯ ОТРИМАННЯ ТИТУЛІВ
----------------------------------------------------------------------
----------------------------------------------------------------------
function p.titles(frame)
function p.titles(frame)
Рядок 211: Рядок 187:
     end
     end
      
      
    -- Отримуємо дані з таблиці "Титули"
     local data, err = get_player_row("Титули", name)
     local titles_data, err1 = get_player_row("Титули", name)
    if not titles_data then
        return err1 or "''Відсутні''"
    end
   
    -- Отримуємо дані з таблиці "Призовий_фонд"
    local prize_data = get_player_row("Призовий_фонд", name)
      
      
    -- Створюємо мапу призових для швидкого доступу
     if not data then
    local prize_map = {}
         return err or "''Відсутні''"
     if prize_data then
         for j = 1, #prize_data.headers do
            local header = prize_data.headers[j]
            local value = prize_data.cells[j] or ""
            prize_map[header] = value
        end
     end
     end
      
      
    -- Мапа дат турнірів
     local titles = {}
     local tournament_dates = {
        ["Перший сезон"] = "09.09.2023",
        ["Другий сезон"] = "28.10.2023",
        ["Третій сезон"] = "23.12.2023",
        ["Четвертий сезон"] = "10.02.2024",
        ["П'ятий сезон"] = "06.04.2024",
        ["Шостий сезон"] = "11.05.2024",
        ["Сьомий сезон"] = "06.07.2024",
        ["Восьмий сезон"] = "10.08.2024",
        ["Дев'ятий сезон"] = "28.09.2024",
        ["Mafia Closed Cup I"] = "12.11.2023",
        ["Mafia Closed Cup I Online"] = "28.01.2024",
        ["Фінал Року"] = "13.10.2024"
    }
   
    local results = {}
      
      
     -- Пропускаємо першу колонку (ім'я гравця)
     -- Пропускаємо першу колонку (ім'я гравця)
     for i = 2, #titles_data.cells do
     for i = 2, #data.cells do
         local cell_value = titles_data.cells[i]
         local cell_value = data.cells[i]
         local header = titles_data.headers[i]
         local header = data.headers[i]
          
          
         if cell_value and cell_value ~= "" and cell_value ~= "-" and header then
         if cell_value and cell_value ~= "" and header then
             local medal = get_medal_icon(cell_value)
             local medal = get_medal_icon(cell_value)
              
              
             if medal then
             if medal then
                -- Визначаємо назву колонки в таблиці "Призовий_фонд"
                 local tournament = get_tournament_link(header)
                -- Прибираємо (фінал) та (рейтинг) з назви
                 table.insert(titles, string.format("* %s '''%s'''", medal, tournament))
                 local prize_column_name = mw.ustring.gsub(header, "%s*%(фінал%)%s*", "")
                 prize_column_name = mw.ustring.gsub(prize_column_name, "%s*%(рейтинг%)%s*", "")
                prize_column_name = mw.text.trim(prize_column_name)
               
                -- Нормалізуємо апостроф (є два види: ' та ')
                prize_column_name = mw.ustring.gsub(prize_column_name, "'", "'")
               
                -- Отримуємо призові з мапи
                local prize_value = prize_map[prize_column_name]
               
                -- Якщо не знайшли, пробуємо з іншим апострофом
                if not prize_value then
                    prize_column_name = mw.ustring.gsub(prize_column_name, "'", "'")
                    prize_value = prize_map[prize_column_name]
                end
               
                local prize_amount = "0 ₴"
                if prize_value and prize_value ~= "" and prize_value ~= "-" and prize_value ~= "0" then
                    prize_amount = prize_value .. " ₴"
                end
               
                -- Отримуємо дату турніру
                local date = tournament_dates[prize_column_name] or "01.01.2023"
               
                -- Форматуємо посилання на турнір
                local tournament_link = get_tournament_link(header)
               
                -- Текст місця
                local place_text = ""
                if cell_value == "1" then
                    place_text = "1-е"
                elseif cell_value == "2" then
                    place_text = "2-е"
                elseif cell_value == "3" then
                    place_text = "3-є"
                elseif cell_value == "4" then
                    place_text = "Участь"
                elseif cell_value == "S" or mw.ustring.match(cell_value, "^S%d") then
                    place_text = "Кращий"
                end
               
                table.insert(results, {
                    date = date,
                    place = place_text,
                    medal = medal,
                    tournament = tournament_link,
                    prize = prize_amount
                })
             end
             end
         end
         end
     end
     end
      
      
     if #results == 0 then
     if #titles == 0 then
         return "''Відсутні''"
         return "''Відсутні''"
     end
     end
      
      
    -- Генеруємо таблицю
     return table.concat(titles, "\n")
    local table_html = {
        '{| class="wikitable sortable" style="width: calc(100% - 470px);"',
        '! Дата !! Місце !! Турнір !! Призові',
        '|-'
    }
   
    for _, result in ipairs(results) do
        table.insert(table_html, string.format(
            '| style="text-align:left;" | %s || style="text-align:left;" | %s || style="text-align:left; padding-left:10px;" | %s %s || style="text-align:right;" | %s',
            result.date,
            result.place,
            result.medal,
            result.tournament,
            result.prize
        ))
        table.insert(table_html, '|-')
    end
   
    table.insert(table_html, '|}')
   
     return table.concat(table_html, '\n')
end
end


return p
return p