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 .= ''; foreach ($columns as $col) { $cls = 'column-' . sanitize_title($col); $val = $record['fields'][$col] ?? ''; $img = 'https://eben-ezer.sk/wp-content/uploads/2025/03/Daco_5058560-1.png'; if (is_array($val)) { if ($cls === 'column-fotka' && isset($val[0]['url'])) { $img = esc_url($val[0]['url']); } else { $val = implode(', ', array_map('esc_html', $val)); } } if ($cls === 'column-fotka') { $html .= 'Foto'; } elseif (preg_match('/^\+?\d{1,3}[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{3,4}$/', $val)) { $html .= '' . esc_html($val) . ''; } else { $val = !empty($val) ? esc_html($val) : '-'; $html .= '' . $val . ''; } } $html .= ''; } wp_send_json_success([ 'rows_html' => $html, 'offset' => (!empty($search)) ? null : $current_offset ]); }