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

нема опису редагування
Немає опису редагування
Мітка: Скасовано
Немає опису редагування
Мітка: Ручний відкіт
Рядок 32: Рядок 32:
     -- Отримуємо заголовки (перший рядок після {|)
     -- Отримуємо заголовки (перший рядок після {|)
     local headers = {}
     local headers = {}
     local first_row = nil
     local 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
      
      
     if first_row then
     if first_row then
         -- Розбиваємо по ! або !!
         -- Розбиваємо заголовки по ||
         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)
             if trimmed ~= "" then
             if trimmed ~= "" then
Рядок 178: Рядок 170:


----------------------------------------------------------------------
----------------------------------------------------------------------
-- ГОЛОВНА ФУНКЦІЯ ДЛЯ ОТРИМАННЯ ТИТУЛІВ
-- ГОЛОВНА ФУНКЦІЯ ДЛЯ ОТРИМАННЯ ТИТУЛІВ У ВИГЛЯДІ ТАБЛИЦІ
----------------------------------------------------------------------
----------------------------------------------------------------------
function p.titles(frame)
function p.titles(frame)
Рядок 187: Рядок 179:
     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
      
      
     if not data then
     -- Отримуємо дані з таблиці "Призовий_фонд"
         return err or "''Відсутні''"
    local prize_data, err2 = get_player_row("Призовий_фонд", name)
     end
   
    -- Мапа дат турнірів (потрібно буде заповнити)
    local tournament_dates = {
        ["Перший сезон"] = "30.05.2023",
         ["Другий сезон"] = "15.08.2023",
        ["Третій сезон"] = "30.10.2023",
        ["Четвертий сезон"] = "15.01.2024",
        ["П'ятий сезон"] = "30.03.2024",
        ["Шостий сезон"] = "15.06.2024",
        ["Сьомий сезон"] = "30.08.2024",
        ["Восьмий сезон"] = "15.11.2024",
        ["Дев'ятий сезон"] = "28.02.2025",
        ["Mafia Closed Cup I"] = "15.07.2024",
        ["Mafia Closed Cup I Online"] = "01.08.2024",
        ["Фінал Року"] = "31.12.2024"
     }
      
      
     local titles = {}
     local results = {}
      
      
     -- Пропускаємо першу колонку (ім'я гравця)
     -- Пропускаємо першу колонку (ім'я гравця)
     for i = 2, #data.cells do
     for i = 2, #titles_data.cells do
         local cell_value = data.cells[i]
         local cell_value = titles_data.cells[i]
         local header = data.headers[i]
         local header = titles_data.headers[i]
          
          
         if cell_value and cell_value ~= "" and header then
         if cell_value and 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 clean_header = mw.ustring.gsub(header, "%s*%(фінал%)%s*", "")
                 clean_header = mw.ustring.gsub(clean_header, "%s*%(рейтинг%)%s*", "")
                clean_header = mw.text.trim(clean_header)
               
                -- Отримуємо призові з таблиці "Призовий_фонд"
                local prize_amount = "0 ₴"
                if prize_data then
                    for j = 3, #prize_data.headers do
                        local prize_header = mw.text.trim(prize_data.headers[j])
                        if prize_header == clean_header then
                            local prize_value = prize_data.cells[j]
                            if prize_value and prize_value ~= "" and prize_value ~= "-" then
                                prize_amount = prize_value .. " ₴"
                            end
                            break
                        end
                    end
                end
               
                -- Отримуємо дату турніру
                local date = tournament_dates[clean_header] 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 #titles == 0 then
     if #results == 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