function eben_kontakty_load() { $base_id = sanitize_text_field($_POST['base_id']); $table_name = sanitize_text_field($_POST['table_name']); $columns = array_map('trim', explode(',', $_POST['columns'])); $sort_column = sanitize_text_field($_POST['sort_column']); $sort_order = strtolower($_POST['sort_order']) === 'desc' ? 'desc' : 'asc'; $offset = sanitize_text_field($_POST['offset']); $search = sanitize_text_field($_POST['search'] ?? ''); $team_filter = sanitize_text_field($_POST['team_filter'] ?? ''); $eben_status = sanitize_text_field($_POST['eben_status'] ?? ''); $formulaParts = []; if (!empty($team_filter)) { $formulaParts[] = "SEARCH(LOWER('" . strtolower($team_filter) . "'), LOWER({Patrí do tímov}))"; } if (!empty($eben_status)) { $formulaParts[] = "LOWER({Eben Status}) = '" . strtolower($eben_status) . "'"; } else { $formulaParts[] = "OR(LOWER({Eben Status}) = 'eben', LOWER({Eben Status}) = 'eben youth')"; } if (!empty($formulaParts)) { $formula = '&filterByFormula=' . urlencode(count($formulaParts) > 1 ? 'AND(' . implode(',', $formulaParts) . ')' : $formulaParts[0]); } else { $formula = ''; } $sort = ''; if (!empty($sort_column)) { $sort = "&sort[0][field]=" . urlencode($sort_column) . "&sort[0][direction]=" . $sort_order; } $all_records = []; $next_offset = $offset; $page_size = (strlen($search) >= 2) ? 100 : 16; $current_offset = null; do { $url = "https://api.airtable.com/v0/{$base_id}/{$table_name}?pageSize={$page_size}{$formula}{$sort}"; if (!empty($next_offset)) { $url .= "&offset=" . urlencode($next_offset); } $args = ['headers' => ['Authorization' => 'Bearer ' . AIRTABLE_API_KEY], 'timeout' => 15]; $res = wp_remote_get($url, $args); if (is_wp_error($res)) wp_send_json_error($res->get_error_message()); $data = json_decode(wp_remote_retrieve_body($res), true); if (!isset($data['records'])) break; $all_records = array_merge($all_records, $data['records']); // Ulož aktuálny offset pre návrat do odpovede $current_offset = $data['offset'] ?? null; $next_offset = $data['offset'] ?? null; } while ($next_offset && strlen($search) >= 2); if (empty($all_records)) wp_send_json_error('Žiadne dáta'); $filtered_records = []; if (strlen($search) >= 2) { $search_normalized = eben_remove_diacritics(mb_strtolower($search)); foreach ($all_records as $record) { $name = $record['fields']['Meno'] ?? ''; $team = $record['fields']['Patrí do tímov'] ?? ''; $haystack = eben_remove_diacritics(mb_strtolower($name . ' ' . (is_array($team) ? implode(' ', $team) : $team))); if (strpos($haystack, $search_normalized) !== false) { $filtered_records[] = $record; } } } else { $filtered_records = $all_records; } $html = ''; foreach ($filtered_records as $record) { $html .= '