Nowe parametry kilkunastu kanałów z satelity
CANAL+ Polska zwiększa pojemność swoich transponderów. Zmiana FEC przyniesie łącznie 14 Mbit/s dodatkowej przepustowości. Osoby z własnymi odbiornikami satelitarnymi mogą
Read MoreTechnologia, na której można polegać
CANAL+ Polska zwiększa pojemność swoich transponderów. Zmiana FEC przyniesie łącznie 14 Mbit/s dodatkowej przepustowości. Osoby z własnymi odbiornikami satelitarnymi mogą
Read MorePamięć podręczna pogody została wyczyszczona.
"; exit; } }); if (!function_exists('get_krupa_master_data')) { function get_krupa_master_data() { static $master_data = null; if ($master_data !== null) return $master_data; global $wpdb; $tz = new DateTimeZone('Europe/Warsaw'); $teraz = new DateTime('now', $tz); $teraz_str = $teraz->format('Y-m-d H:i:s'); $godzina = (int)$teraz->format('G'); $minuty = (int)$teraz->format('i'); $dzien_roku = (int)$teraz->format('z'); $dzien_tyg = (int)$teraz->format('N'); $rok = (int)$teraz->format('Y'); $status_reczny = get_option('krupa_status_pracy', 'auto'); $opis_reczny = get_option('krupa_opis_montazu', ''); $loc_reczna = get_option('krupa_lokalizacja_reczna', ''); $api_key = '3fce60aeedeb0edf258f9d208efa7f29'; $staff_id = 1; $miejsca = [ 'Lublin', 'Niemce', 'Nasutów', 'Nasutów-Kolonia', 'Dys', 'Ciecierzyn', 'Baszki', 'Krasienin', 'Krasienin-Kolonia', 'Stoczek Kolonia', 'Leonów', 'Kawka', 'Smugi', 'Elizówka', 'Pryszczowa Góra', 'Wola Niemiecka', 'Boduszyn', 'Rudka Kozłowiecka', 'Zalesie', 'Jakubowice Konińskie', 'Jakubowice Konińskie-Kolonia', 'Pliszczyn', 'Łagiewniki', 'Swoboda', 'Pólko', 'Dziuchów', 'Lubartów', 'Łucka', 'Łucka-Kolonia', 'Wólka Rokicka', 'Wólka Rokicka-Plaża', 'Serniki', 'Chlewiska', 'Pałecznica', 'Nowodwór', 'Annobór', 'Szczekarków', 'Wola Lisowska', 'Wandzin', 'Wincentów', 'Świdnik', 'Łęczna', 'Turka', 'os. Borek', 'Wólka Lubelska', 'Dominów', 'Kalinówka', 'Franciszków', 'Mełgiew', 'Minkowice', 'Spiczyn', 'Zawieprzyce', 'Kijany', 'Januszówka', 'Krzesimów', 'Świdnik Duży', 'Świdnik Mały', 'Jastków', 'Snopków', 'Marysin', 'Tomaszowice', 'Panieńszczyzna', 'Sieprawice', 'Moszna', 'Ożarów', 'Piotrowice', 'Konopnica', 'Szerokie', 'Motycz', 'Motycz Leśny', 'Stasin', 'Uniszowice', 'Płouszowice', 'Zemborzyce', 'Zemborzyce Tereszyńskie', 'Abramowice Prywatne', 'Wilczopole', 'Mętów', 'Głusk', 'Ćmiłów', 'Prawiedniki', 'Kalina', 'Cisica', 'Sławinek' ]; $real_services = []; $grafik = []; $bookly_holidays_stale = []; $bookly_holidays_jednorazowe = []; $jest_zlecenie = false; $lokalizacja = ''; $usluga_bookly = ''; $czas_info = ''; $sekundy_do_konca = 0; $calkowity_czas_uslugi = 5400; $koniec_zlecenia = null; $is_multi_day_active = false; $dzis_start = (clone $teraz)->setTime(8, 0, 0); $dzis_koniec = (clone $teraz)->setTime(16, 0, 0); // ZMIANA: \Throwable przechwyci nawet błędy Fatal, ratując json przed rozsypaniem się try { $table_services = $wpdb->prefix . 'bookly_services'; $table_schedule = $wpdb->prefix . 'bookly_staff_schedule_items'; $table_appointments = $wpdb->prefix . 'bookly_appointments'; $table_customer_appointments = $wpdb->prefix . 'bookly_customer_appointments'; $table_holidays = $wpdb->prefix . 'bookly_holidays'; $tables_exist = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $table_services)); if ($tables_exist) { $holidays_exist = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $table_holidays)); if ($holidays_exist) { $sql_holidays = $wpdb->prepare("SELECT date, repeat_event FROM {$table_holidays} WHERE staff_id = %d OR staff_id IS NULL", $staff_id); $db_holidays = $wpdb->get_results($sql_holidays); if (is_array($db_holidays)) { foreach ($db_holidays as $h) { if ($h->repeat_event) { $bookly_holidays_stale[] = substr($h->date, 5); } else { $bookly_holidays_jednorazowe[] = $h->date; } } } } $sql_services = "SELECT title, duration FROM {$table_services} WHERE type = 'simple'"; $db_services = $wpdb->get_results($sql_services); if (is_array($db_services)) { $real_services = $db_services; } $sql_hours = "SELECT day_index, start_time, end_time FROM {$table_schedule} WHERE staff_id = %d"; $db_hours = $wpdb->get_results($wpdb->prepare($sql_hours, $staff_id)); if (is_array($db_hours)) { foreach ($db_hours as $row) { $day_idx = (int)$row->day_index; $iso_idx = ($day_idx === 1) ? 7 : $day_idx - 1; if (!empty($row->start_time) && $row->start_time !== 'NULL' && !empty($row->end_time) && $row->end_time !== 'NULL') { $grafik[$iso_idx] = [ 'start_h' => (int)date('G', strtotime($row->start_time)), 'start_m' => (int)date('i', strtotime($row->start_time)), 'end_h' => (int)date('G', strtotime($row->end_time)), 'end_m' => (int)date('i', strtotime($row->end_time)), 'raw_start' => $row->start_time, 'raw_end' => $row->end_time ]; } else { $grafik[$iso_idx] = null; } } } if (isset($grafik[$dzien_tyg]) && is_array($grafik[$dzien_tyg])) { $dzis_start = (clone $teraz)->setTime((int)$grafik[$dzien_tyg]['start_h'], (int)$grafik[$dzien_tyg]['start_m'], 0); $dzis_koniec = (clone $teraz)->setTime((int)$grafik[$dzien_tyg]['end_h'], (int)$grafik[$dzien_tyg]['end_m'], 0); } $sql_current = $wpdb->prepare(" SELECT a.start_date, a.end_date, ca.notes as client_note, s.title as service_name FROM {$table_appointments} a LEFT JOIN {$table_services} s ON a.service_id = s.id LEFT JOIN {$table_customer_appointments} ca ON ca.appointment_id = a.id WHERE a.start_date <= %s AND a.end_date >= %s AND (ca.status IS NULL OR ca.status != 'cancelled') ORDER BY a.start_date ASC ", $teraz_str, $teraz_str); $db_current_apts = $wpdb->get_results($sql_current); $res_sql = null; $dzisiejszy_start_zlecenia = null; $dzisiejszy_koniec_zlecenia = null; if (is_array($db_current_apts)) { foreach ($db_current_apts as $apt) { $is_zbiorcza = false; if (!empty($apt->service_name)) { $name_lower = function_exists('mb_strtolower') ? mb_strtolower($apt->service_name, 'UTF-8') : strtolower($apt->service_name); if (strpos($name_lower, 'zbiorcz') !== false || strpos($name_lower, 'w bloku') !== false) { $is_zbiorcza = true; } } $apt_start = new DateTime($apt->start_date, $tz); $apt_end = new DateTime($apt->end_date, $tz); $effective_end = clone $apt_end; $effective_start = clone $apt_start; $multi = false; $lokalny_start = clone $dzis_start; $lokalny_koniec = clone $dzis_koniec; if ($is_zbiorcza) { $lokalny_start->setTime(8, 30, 0); $lokalny_koniec->setTime(15, 0, 0); } if ($apt_end->format('Y-m-d') > $teraz->format('Y-m-d')) { $effective_end = clone $lokalny_koniec; $multi = true; } if ($apt_start->format('Y-m-d') < $teraz->format('Y-m-d')) { $effective_start = clone $lokalny_start; $multi = true; } if ($is_zbiorcza) { if ($effective_start < $lokalny_start) $effective_start = clone $lokalny_start; if ($effective_end > $lokalny_koniec) $effective_end = clone $lokalny_koniec; } if ($teraz >= $effective_start && $teraz < $effective_end) { $res_sql = $apt; $is_multi_day_active = $multi || $is_zbiorcza; $dzisiejszy_start_zlecenia = $effective_start; $dzisiejszy_koniec_zlecenia = $effective_end; break; } } } if ($res_sql) { $jest_zlecenie = true; $usluga_bookly = !empty($res_sql->service_name) ? $res_sql->service_name : 'Konsultacja serwisowa'; if (!empty($res_sql->client_note)) { $adres_raw = trim($res_sql->client_note); $znaleziono_w_bazie = false; foreach ($miejsca as $m) { if (function_exists('mb_stripos') ? (mb_stripos($adres_raw, $m) === 0) : (stripos($adres_raw, $m) === 0)) { $lokalizacja = $m; $znaleziono_w_bazie = true; break; } } if (!$znaleziono_w_bazie) { if (strpos($adres_raw, ',') !== false) { $czesci = explode(',', $adres_raw); $adres_raw = trim($czesci[0]); } $czysty_tekst = preg_split('/(?:\\b(?:ul\\.?|ulica|nr)\\b|\\s\\d)/i', $adres_raw); $miejscowosc_temp = trim($czysty_tekst[0]); $lokalizacja = function_exists('mb_convert_case') ? mb_convert_case($miejscowosc_temp, MB_CASE_TITLE, "UTF-8") : ucwords($miejscowosc_temp); } } if (!empty($res_sql->end_date)) { $koniec_zlecenia = isset($dzisiejszy_koniec_zlecenia) ? clone $dzisiejszy_koniec_zlecenia : new DateTime($res_sql->end_date, $tz); $sekundy_do_konca = $koniec_zlecenia->getTimestamp() - $teraz->getTimestamp(); if ($is_multi_day_active) { $calkowity_czas_uslugi = $dzisiejszy_koniec_zlecenia->getTimestamp() - $dzisiejszy_start_zlecenia->getTimestamp(); } else { $calkowity_czas_uslugi = $koniec_zlecenia->getTimestamp() - (new DateTime($res_sql->start_date, $tz))->getTimestamp(); } } } } } catch (\Throwable $e) { $usluga_bookly = 'Status: Oczekuje na harmonogram'; } // Zabezpieczenie przez podziałem przez ZERO if ($calkowity_czas_uslugi <= 0) $calkowity_czas_uslugi = 5400; $czy_swieto = false; $dzien_m_d = $teraz->format('m-d'); $dzien_y_m_d = $teraz->format('Y-m-d'); $swieta_stale = ['01-01', '01-06', '05-01', '05-03', '08-15', '11-01', '11-11', '12-25', '12-26']; try { if (function_exists('easter_date')) { $easter = (new DateTime())->setTimestamp(easter_date($rok))->setTimezone($tz); } else { $a = $rok % 19; $b = floor($rok / 100); $c = $rok % 100; $d = floor($b / 4); $e = $b % 4; $f = floor(($b + 8) / 25); $g = floor(($b - $f + 1) / 3); $h = (19 * $a + $b - $d - $g + 15) % 30; $i = floor($c / 4); $k = $c % 4; $L = (32 + 2 * $e + 2 * $i - $h - $k) % 7; $m = floor(($a + 11 * $h + 22 * $L) / 451); $miesiac = floor(($h + $L - 7 * $m + 114) / 31); $dzien = (($h + $L - 7 * $m + 114) % 31) + 1; $easter = new DateTime("$rok-$miesiac-$dzien", $tz); } $pon_w = (clone $easter)->modify('+1 day')->format('m-d'); $boze_c = (clone $easter)->modify('+60 days')->format('m-d'); if (in_array($dzien_m_d, $swieta_stale) || $dzien_m_d == $pon_w || $dzien_m_d == $boze_c || in_array($dzien_m_d, $bookly_holidays_stale) || in_array($dzien_y_m_d, $bookly_holidays_jednorazowe)) { $czy_swieto = true; } } catch (\Throwable $e) { $czy_swieto = false; } $czy_godziny = false; if ($teraz >= $dzis_start && $teraz < $dzis_koniec && !$czy_swieto) { $czy_godziny = true; } $dzis_czy_pracuje = (isset($grafik[$dzien_tyg]) && is_array($grafik[$dzien_tyg]) && !$czy_swieto); $czy_przerwa = false; $typ_przerwy = ''; if (!$jest_zlecenie && $czy_godziny && $dzis_czy_pracuje) { if ($godzina == 10 && $minuty >= 15 && $minuty <= 25) { $czy_przerwa = true; $typ_przerwy = 'Przerwa śniadaniowa 🍕'; } elseif (($godzina == 12 && $minuty >= 45) || $godzina == 13 || ($godzina == 14 && $minuty <= 15)) { $czy_przerwa = true; $typ_przerwy = 'Wolny termin / Przerwa 🔧'; } elseif ($godzina == 16 && $minuty >= 20 && $minuty <= 35) { $czy_przerwa = true; $typ_przerwy = 'Wolne okienko 🔧'; } elseif ($godzina == 17 && $minuty >= 10) { $czy_przerwa = true; $typ_przerwy = 'Krótka pauza 🔋'; } elseif ($godzina == 9 && $minuty <= 10) { $czy_przerwa = true; $typ_przerwy = 'Przerwa techniczna 🔋'; } } if (empty($usluga_bookly)) { try { if (isset($tables_exist) && $tables_exist) { $najblizsze_zlecenie = $wpdb->get_var($wpdb->prepare(" SELECT a.start_date FROM {$table_appointments} a LEFT JOIN {$table_customer_appointments} ca ON ca.appointment_id = a.id WHERE a.start_date > %s AND DATE(a.start_date) = DATE(%s) AND (ca.status IS NULL OR ca.status != 'cancelled') ORDER BY a.start_date ASC LIMIT 1 ", $teraz_str, $teraz_str)); } else { $najblizsze_zlecenie = null; } $ts_koniec_dnia = $dzis_koniec->getTimestamp(); $ts_teraz = $teraz->getTimestamp(); if ($najblizsze_zlecenie) { $wolny_czas_sekundy = strtotime($najblizsze_zlecenie) - $ts_teraz; } else { $wolny_czas_sekundy = $ts_koniec_dnia - $ts_teraz; } if ($wolny_czas_sekundy < 0) $wolny_czas_sekundy = 0; $stan_losowy = (($dzien_roku * 24) + $godzina) % 100; if ($wolny_czas_sekundy >= 3600 && $stan_losowy <= 30 && $czy_godziny) { if (empty($lokalizacja)) $lokalizacja = !empty($loc_reczna) ? $loc_reczna : $miejsca[($dzien_roku + $godzina) % count($miejsca)]; $pula_uslug = []; if (!empty($real_services) && is_array($real_services)) { foreach ($real_services as $s) { $pula_uslug[] = ['title' => $s->title, 'duration' => (int)$s->duration]; } } else { $pula_uslug[] = ['title' => 'Montaż TV-SAT', 'duration' => 5400]; } $dostepne_uslugi = []; foreach ($pula_uslug as $usl) { if ($usl['duration'] > 0 && $usl['duration'] <= $wolny_czas_sekundy) { $dostepne_uslugi[] = $usl; } } if (empty($dostepne_uslugi)) { usort($pula_uslug, function($a, $b) { return $a['duration'] - $b['duration']; }); $dostepne_uslugi[] = $pula_uslug[0]; } $indeks_uslugi = ($dzien_roku + $godzina) % count($dostepne_uslugi); $wylosowana_usluga = $dostepne_uslugi[$indeks_uslugi]; $usluga_bookly = $wylosowana_usluga['title']; $calkowity_czas_uslugi = (int)$wylosowana_usluga['duration']; if ($calkowity_czas_uslugi <= 0 || $calkowity_czas_uslugi > 14400) { $calkowity_czas_uslugi = 5400; } $sekundy_do_konca = $calkowity_czas_uslugi - ($ts_teraz % max(1, $calkowity_czas_uslugi)); if ($sekundy_do_konca > $wolny_czas_sekundy) { $sekundy_do_konca = $wolny_czas_sekundy; } } else { $usluga_bookly = 'Status: Brak zleceń'; $sekundy_do_konca = 0; if (empty($lokalizacja)) $lokalizacja = !empty($loc_reczna) ? $loc_reczna : 'Baza lub w terenie'; } } catch (\Throwable $e) { $usluga_bookly = 'Status: Oczekuje na harmonogram'; $sekundy_do_konca = 0; if (empty($lokalizacja)) $lokalizacja = !empty($loc_reczna) ? $loc_reczna : 'Baza lub w terenie'; } } else { if (empty($lokalizacja)) $lokalizacja = !empty($loc_reczna) ? $loc_reczna : $miejsca[($dzien_roku + $godzina) % count($miejsca)]; } $procent_wykonania = 100; if ($sekundy_do_konca > 0 && !$czy_przerwa) { $h = floor($sekundy_do_konca / 3600); $m = floor(($sekundy_do_konca % 3600) / 60); if ($is_multi_day_active) { $czas_info = "Dzisiejszy etap: "; } else { $czas_info = "Pozostało ok: "; } if ($h > 0) $czas_info .= "{$h} godz. "; if ($m > 0 || $h == 0) $czas_info .= "{$m} min."; $calkowity = ($calkowity_czas_uslugi > 0) ? $calkowity_czas_uslugi : 5400; $uplynelo = $calkowity - $sekundy_do_konca; if ($uplynelo < 0) $uplynelo = 0; $procent_wykonania = round(($uplynelo / max(1, $calkowity)) * 100); } $cel = clone $teraz; if ($teraz >= $dzis_koniec || !isset($grafik[$dzien_tyg]) || !is_array($grafik[$dzien_tyg])) { $cel->modify('+1 day'); $target_day = (int)$cel->format('N'); $h_start = (isset($grafik[$target_day]) && is_array($grafik[$target_day])) ? (int)$grafik[$target_day]['start_h'] : 8; $m_start = (isset($grafik[$target_day]) && is_array($grafik[$target_day])) ? (int)$grafik[$target_day]['start_m'] : 0; $cel->setTime($h_start, $m_start, 0); } elseif ($teraz < $dzis_start) { $cel->setTime((int)$grafik[$dzien_tyg]['start_h'], (int)$grafik[$dzien_tyg]['start_m'], 0); } $znal = false; $bezpiecznik_petli = 0; while (!$znal && $bezpiecznik_petli < 15) { $bezpiecznik_petli++; $c_md = $cel->format('m-d'); $c_ymd = $cel->format('Y-m-d'); $c_sw = (in_array($c_md, $swieta_stale) || $c_md == $pon_w || $c_md == $boze_c || in_array($c_md, $bookly_holidays_stale) || in_array($c_ymd, $bookly_holidays_jednorazowe)); $target_day_idx = (int)$cel->format('N'); $pracuje_w_ten_dzien = (isset($grafik[$target_day_idx]) && is_array($grafik[$target_day_idx])); if ($pracuje_w_ten_dzien && !$c_sw) { if ($bezpiecznik_petli > 1) { $h_start = (int)$grafik[$target_day_idx]['start_h']; $m_start = (int)$grafik[$target_day_idx]['start_m']; $cel->setTime($h_start, $m_start, 0); } $znal = true; } else { $cel->modify('+1 day'); $next_day = (int)$cel->format('N'); $h_start = (isset($grafik[$next_day]) && is_array($grafik[$next_day])) ? (int)$grafik[$next_day]['start_h'] : 8; $m_start = (isset($grafik[$next_day]) && is_array($grafik[$next_day])) ? (int)$grafik[$next_day]['start_m'] : 0; $cel->setTime($h_start, $m_start, 0); } } $diff = $teraz->diff($cel); $l_godzin = ($diff->days * 24) + $diff->h; $l_minut = $diff->i; if ($l_godzin == 0) { $odliczanie = $l_minut . " min."; } else { $odliczanie = $l_godzin . " godz. " . $l_minut . " min."; } // POGODA $jutro = ['t'=>'--','w'=>0,'icon'=>'☀️','msg'=>'Brak danych','biomet'=>'KORZYSTNY','wilg'=>'--','cisnienie'=>'--','color'=>'#22c55e','status'=>'STABILNIE','porada'=>'Dobre warunki.']; $pogoda_oryginalna_desc = 'Pobieranie...'; $pogoda_teraz = [ 'temp' => 0, 'desc' => 'Pobieranie...', 'id' => 800, 'wind' => 0, 'hum' => 0, 'pressure' => '--', 'time' => $teraz->format('H:i'), 'color' => '#27ae60', 'bg' => '#f1fcf4', 'status' => 'STABILNIE', 'alert' => '', 'pulse' => false, 'opis' => '', 'prognoza' => '' ]; $teraz_realnie_pracujemy = ($czy_godziny && !$czy_przerwa); $cc = get_transient('krupa_current_weather_data'); if (empty($cc) || !is_array($cc)) { $cc_res = wp_remote_get("https://api.openweathermap.org/data/2.5/weather?lat=51.3556&lon=22.5694&appid={$api_key}&units=metric&lang=pl", ['timeout'=>5]); if (!is_wp_error($cc_res) && wp_remote_retrieve_response_code($cc_res) == 200) { $cc = json_decode(wp_remote_retrieve_body($cc_res), true); if (is_array($cc) && isset($cc['weather'])) { set_transient('krupa_current_weather_data', $cc, 5 * MINUTE_IN_SECONDS); } else { $cc = ['error' => true]; } } else { $cc = ['error' => true]; set_transient('krupa_current_weather_data', $cc, 2 * MINUTE_IN_SECONDS); } } $fj = get_transient('krupa_weather_transient_data'); if (empty($fj) || !is_array($fj)) { $f_res = wp_remote_get("https://api.openweathermap.org/data/2.5/forecast?lat=51.3556&lon=22.5694&appid={$api_key}&units=metric&lang=pl", ['timeout'=>5]); if (!is_wp_error($f_res) && wp_remote_retrieve_response_code($f_res) == 200) { $fj = json_decode(wp_remote_retrieve_body($f_res), true); if (is_array($fj) && isset($fj['list'])) { set_transient('krupa_weather_transient_data', $fj, 15 * MINUTE_IN_SECONDS); } else { $fj = ['error' => true]; } } else { $fj = ['error' => true]; set_transient('krupa_weather_transient_data', $fj, 2 * MINUTE_IN_SECONDS); } } $id_teraz = 800; $temp_teraz = 20; $wilg_teraz = 50; $wiatr_teraz = 10; if (is_array($cc) && isset($cc['weather'][0])) { $pogoda_oryginalna_desc = ucfirst($cc['weather'][0]['description']); $pogoda_teraz['desc'] = $pogoda_oryginalna_desc; $id_teraz = (int)$cc['weather'][0]['id']; $pogoda_teraz['id'] = $id_teraz; $temp_teraz = round($cc['main']['temp']); $pogoda_teraz['temp'] = $temp_teraz; $wiatr_teraz = isset($cc['wind']['speed']) ? round($cc['wind']['speed'] * 3.6) : 0; $pogoda_teraz['wind'] = $wiatr_teraz; $wilg_teraz = isset($cc['main']['humidity']) ? $cc['main']['humidity'] : 0; $pogoda_teraz['hum'] = $wilg_teraz; $pogoda_teraz['pressure'] = isset($cc['main']['pressure']) ? $cc['main']['pressure'] : '--'; } $id_za_chwile = 800; if (is_array($fj) && isset($fj['list'][0])) { $id_za_chwile = (int)$fj['list'][0]['weather'][0]['id']; } $pogoda_teraz['alert'] = $teraz_realnie_pracujemy ? '✅ Optymalna aura. Warunki sprzyjające pracom na zewnątrz.' : '✅ Stabilna i spokojna aura. Dobre warunki atmosferyczne.'; $pogoda_teraz['color'] = '#27ae60'; $pogoda_teraz['bg'] = '#f1fcf4'; $pogoda_teraz['status'] = 'STABILNIE'; $pogoda_teraz['pulse'] = false; if ($id_teraz >= 200 && $id_teraz < 300) { $pogoda_teraz['desc'] = "⛈️ " . $pogoda_oryginalna_desc; $pogoda_teraz['color'] = '#EF2020'; $pogoda_teraz['status'] = 'ALARM: BURZA'; $pogoda_teraz['pulse'] = true; $pogoda_teraz['alert'] = $teraz_realnie_pracujemy ? '⚠️ Wyładowania atmosferyczne! Prace wysokościowe są wstrzymane.' : '⛈️ Niebezpieczne wyładowania atmosferyczne oraz deszcz.'; $pogoda_teraz['bg'] = '#fff5f5'; } elseif (($id_za_chwile >= 200 && $id_za_chwile < 600) && ($id_teraz >= 800)) { $pogoda_teraz['desc'] = "⚠️ Zbliżają się opady"; $pogoda_teraz['color'] = '#EF2020'; $pogoda_teraz['status'] = 'OPADY ZA MOMENT'; $pogoda_teraz['pulse'] = true; $pogoda_teraz['alert'] = '⚠️ Radar live wykrywa zbliżający front deszczowy.'; $pogoda_teraz['bg'] = '#fff5f5'; } elseif ($id_teraz >= 500 && $id_teraz < 600) { $pogoda_teraz['desc'] = "🌧️ " . $pogoda_oryginalna_desc; $pogoda_teraz['color'] = '#ff9800'; $pogoda_teraz['status'] = 'OPADY DESZCZU'; $pogoda_teraz['alert'] = $teraz_realnie_pracujemy ? '🌧️ Występujące opady ograniczają bezpieczne działania na zewnątrz.' : '🌧️ Odnotowano opady deszczu.'; $pogoda_teraz['bg'] = '#fff9f2'; } elseif ($wiatr_teraz > 25) { $pogoda_teraz['color'] = '#EF2020'; $pogoda_teraz['status'] = 'SILNY WIATR'; $pogoda_teraz['pulse'] = true; $pogoda_teraz['alert'] = "⚠️ Silne porywy wiatru ({$wiatr_teraz} km/h). Bezpieczeństwo jest priorytetem."; $pogoda_teraz['bg'] = '#fff9f2'; } elseif ($id_teraz >= 600 && $id_teraz < 700) { $pogoda_teraz['desc'] = "❄️ " . $pogoda_oryginalna_desc; $pogoda_teraz['color'] = '#3182ce'; $pogoda_teraz['status'] = 'WARUNKI ZIMOWE'; $pogoda_teraz['bg'] = '#ebf8ff'; } $pogoda_teraz['opis'] = $pogoda_teraz['alert']; $pogoda_teraz['prognoza'] = "Brak zmian atmosferycznych w ciągu najbliższych godzin."; if (is_array($fj) && isset($fj['list'][1])) { $n_id = $fj['list'][1]['weather'][0]['id']; $n_desc = function_exists('mb_strtolower') ? mb_strtolower($fj['list'][1]['weather'][0]['description']) : strtolower($fj['list'][1]['weather'][0]['description']); $n_temp = round($fj['list'][1]['main']['temp']); $n_wind = round($fj['list'][1]['wind']['speed'] * 3.6); if ($n_id >= 200 && $n_id < 300) { $pogoda_teraz['prognoza'] = "⛈️ Uwaga: spodziewane burze i wyładowania."; } elseif ($n_id >= 500 && $n_id < 600) { $pogoda_teraz['prognoza'] = "🌧️ W ciągu 3h prognozowane opady ({$n_desc})."; } elseif ($n_wind > 25) { $pogoda_teraz['prognoza'] = "💨 Możliwy wzrost siły wiatru do {$n_wind} km/h."; } else { $pogoda_teraz['prognoza'] = "☁️ Przewidujemy stabilnie: {$n_desc}, ok. {$n_temp}°C."; } } $obj_jutro = (clone $teraz)->modify('+1 day'); $jutro_m_d = $obj_jutro->format('m-d'); $jutro_y_m_d = $obj_jutro->format('Y-m-d'); $jutro_dzien_tyg = (int)$obj_jutro->format('N'); $jutro_czy_swieto = (in_array($jutro_m_d, $swieta_stale) || $jutro_m_d == $pon_w || $jutro_m_d == $boze_c || in_array($jutro_m_d, $bookly_holidays_stale) || in_array($jutro_y_m_d, $bookly_holidays_jednorazowe)); $jutro_czy_pracuje = (isset($grafik[$jutro_dzien_tyg]) && is_array($grafik[$jutro_dzien_tyg]) && !$jutro_czy_swieto); if (is_array($fj) && isset($fj['list'][8])) { $item = $fj['list'][8]; $f_id = $item['weather'][0]['id']; $f_desc = function_exists('mb_strtolower') ? mb_strtolower($item['weather'][0]['description']) : strtolower($item['weather'][0]['description']); $f_t = round($item['main']['temp']); $f_w = round($item['wind']['speed'] * 3.6); $jutro['t'] = $f_t; $jutro['w'] = $f_w; $jutro['wilg'] = $item['main']['humidity']; $jutro['cisnienie'] = $item['main']['pressure']; if ($jutro_czy_pracuje) { $full_msg = "Jutro zapowiada się: {$f_desc} przy ok. {$f_t}°C. "; if ($f_w > 25 || $f_id < 600) { $full_msg .= "Realizacje zleceń będziemy wykonywać z ostrożnością."; $jutro['biomet'] = "NIEKORZYSTNY"; $jutro['color'] = "#ef4444"; $jutro['status'] = "UWAGA"; $jutro['icon'] = "🌧️"; $jutro['porada'] = "Wymagana ostrożność podczas montażu."; } else { $full_msg .= "Bardzo stabilne warunki. Prace będą przebiegać bez zakłóceń! 🚀"; $jutro['porada'] = "Dobre warunki do pracy na zewnątrz w terenie."; } } else { $full_msg = "Jutro oczekujemy aury typu: {$f_desc}, ok. {$f_t}°C. "; $jutro['porada'] = "Jak na dzień wolny od pracy możemy tylko życzyć miłego odpoczynku"; } $jutro['msg'] = $full_msg; } if (!$czy_godziny) { $pogoda_teraz['status'] = 'FIRMA NIECZYNNA'; $pogoda_teraz['color'] = '#1e5799'; $pogoda_teraz['bg'] = '#f0f7ff'; } $master_data = compact('status_reczny','opis_reczny','lokalizacja','usluga_bookly','czas_info','czy_godziny','jutro','pogoda_teraz','czy_swieto','odliczanie','czy_przerwa','typ_przerwy', 'l_godzin', 'l_minut', 'procent_wykonania'); return $master_data; } } if (!function_exists('krupa_v55_ajax_handler')) { function krupa_v55_ajax_handler() { // Agresywne wyczyszczenie bufora (blokuje "krzaczki", które psują JSON i wyłączają widgety) if (ob_get_length()) { ob_clean(); } $c = get_krupa_master_data(); $status_final = function_exists('krupa_get_current_effective_status') ? krupa_get_current_effective_status() : ''; $czy_urlop = ($status_final === 'urlop'); $tz = new DateTimeZone('Europe/Warsaw'); $teraz = new DateTime('now', $tz); $H = (int)$teraz->format('G'); $witamy = ($H >= 5 && $H < 18) ? "Dzień dobry" : (($H >= 18 && $H < 22) ? "Dobry wieczór" : "Miłej nocy"); $lokalizacja = isset($c['lokalizacja']) ? $c['lokalizacja'] : 'Baza'; $usluga = isset($c['usluga_bookly']) ? $c['usluga_bookly'] : 'Status: Brak zleceń'; $opis = isset($c['opis_reczny']) && !empty($c['opis_reczny']) ? $c['opis_reczny'] : $usluga; $miejsce = '📌 ' . $lokalizacja; $txt = $opis; $kolor = '#EF2020'; $ikona = (function_exists('mb_stripos') ? (mb_stripos($usluga, 'wifi') !== false) : (stripos($usluga, 'wifi') !== false)) ? '📶' : '📡'; $display_time = isset($c['czas_info']) ? $c['czas_info'] : ''; $odliczanie = isset($c['odliczanie']) ? $c['odliczanie'] : ''; $czy_swieto = isset($c['czy_swieto']) ? $c['czy_swieto'] : false; $czy_przerwa = isset($c['czy_przerwa']) ? $c['czy_przerwa'] : false; $czy_godziny = isset($c['czy_godziny']) ? $c['czy_godziny'] : false; if ($status_final === 'urlop') { $ikona = '🌴'; $miejsce = 'STATUS: URLOP'; $txt = 'Odpoczywamy. Zapraszamy wkrótce!'; $kolor = '#38b2ac'; $display_time = ''; } elseif ($czy_swieto) { $ikona = '🌴'; $miejsce = 'TERAZ MAMY WOLNE'; $txt = 'Wracamy za: ' . $odliczanie; $kolor = '#4A5568'; $display_time = ''; } elseif ($czy_przerwa) { $ikona = '🥪'; $miejsce = 'CHWILA PRZERWY'; $txt = isset($c['typ_przerwy']) ? $c['typ_przerwy'] : ''; $kolor = '#f59e0b'; $display_time = ''; } elseif (!$czy_godziny && !$czy_urlop) { $l_godzin = isset($c['l_godzin']) ? $c['l_godzin'] : 0; $l_minut = isset($c['l_minut']) ? $c['l_minut'] : 0; if ($l_godzin == 0) { $ikona = '⏳'; $miejsce = 'Jesteśmy: PRZED PRACĄ'; } else { $ikona = '🌙'; $miejsce = 'Jesteśmy: PO PRACY'; } if ($l_godzin == 0 && $l_minut <= 5) { $txt = '🏡 Ostatnie minuty przed pracą, startujemy za: ' . $odliczanie . ''; } else { $txt = ' Odpoczywamy, ładujemy akumulatorki, zaczniemy za: ' . $odliczanie . ''; } $kolor = '#4A5568'; $display_time = ''; } if ($usluga === 'Status: Brak zleceń' && !$czy_przerwa && $czy_godziny && !$czy_urlop && !$czy_swieto) { $ikona = '🟢'; $kolor = '#27ae60'; } wp_send_json([ 'witamy' => $witamy, 'pracujemy' => $czy_godziny && !$czy_przerwa && !$czy_urlop, 'jutro' => isset($c['jutro']) ? $c['jutro'] : [], 'pogoda' => isset($c['pogoda_teraz']) ? $c['pogoda_teraz'] : [], 'odliczanie'=> $odliczanie, 'miejsce' => $miejsce, 'txt' => $txt, 'czas' => $display_time, 'kolor' => $kolor, 'ikona' => $ikona, 'procent' => isset($c['procent_wykonania']) ? $c['procent_wykonania'] : 100, 'ver' => 'KRUPAs CORE V56.3.1 LIVE' ]); wp_die(); } } add_action('wp_ajax_get_krupa_status', 'krupa_v55_ajax_handler'); add_action('wp_ajax_nopriv_get_krupa_status', 'krupa_v55_ajax_handler');