Ładowanie...

krupapiotr.pl

Technologia, na której można polegać

/** * ========================================================================== * KRUPAS CORE V56.2.6 - MODUŁ 2: POGODA & ŚWIĘTA (UTILS) * ========================================================================== */ if (!function_exists('krupa_calculate_holidays')) { function krupa_calculate_holidays($teraz, $tz, $rok) { $czy_swieto = false; $dzien_m_d = $teraz->format('m-d'); $swieta_stale = ['01-01', '01-06', '05-01', '05-03', '08-15', '11-01', '11-11', '12-25', '12-26']; $pon_w = null; $boze_c = null; 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) { $czy_swieto = true; } } catch (Exception $e) { $czy_swieto = false; } return [ 'czy_swieto' => $czy_swieto, 'swieta_stale' => $swieta_stale, 'pon_w' => $pon_w, 'boze_c' => $boze_c ]; } } if (!function_exists('krupa_calculate_weather')) { function krupa_calculate_weather($api_key, $teraz, $czy_godziny, $czy_przerwa, $grafik, $holiday_info) { $swieta_stale = $holiday_info['swieta_stale']; $pon_w = $holiday_info['pon_w']; $boze_c = $holiday_info['boze_c']; $jutro = ['t'=>'--','w'=>0,'icon'=>'☀️','msg'=>'Brak danych','biomet'=>'KORZYSTNY','wilg'=>'--','cisnienie'=>'--','color'=>'#22c55e','status'=>'STABILNIE','porada'=>'Warunki idealne.']; $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 (false === $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)) { $cc = json_decode(wp_remote_retrieve_body($cc_res), true); if (isset($cc['weather'])) { set_transient('krupa_current_weather_data', $cc, 5 * MINUTE_IN_SECONDS); } } } $fj = get_transient('krupa_weather_transient_data'); if (false === $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)) { $fj = json_decode(wp_remote_retrieve_body($f_res), true); if (isset($fj['list'])) { set_transient('krupa_weather_transient_data', $fj, 15 * MINUTE_IN_SECONDS); } } } $id_teraz = 800; $wiatr_teraz = 10; if (!empty($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; $pogoda_teraz['temp'] = round($cc['main']['temp']); $wiatr_teraz = isset($cc['wind']['speed']) ? round($cc['wind']['speed'] * 3.6) : 0; $pogoda_teraz['wind'] = $wiatr_teraz; $pogoda_teraz['hum'] = isset($cc['main']['humidity']) ? $cc['main']['humidity'] : 0; $pogoda_teraz['pressure'] = isset($cc['main']['pressure']) ? $cc['main']['pressure'] : '--'; } $id_za_chwile = 800; if (!empty($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, w tym na wysokości.' : '✅ Stabilna i spokojna aura. Bardzo dobre warunki atmosferyczne na dzisiejszy dzień.'; $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 ze względów bezpieczeństwa.' : '⛈️ Niebezpieczne wyładowania atmosferyczne oraz burze.'; $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 szybko 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 gwałtownych zmian atmosferycznych w ciągu najbliższych godzin."; if (!empty($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})."; } \n 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."; } } // JUTRO $obj_jutro = (clone $teraz)->modify('+1 day'); $jutro_m_d = $obj_jutro->format('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); $jutro_czy_pracuje = (isset($grafik[$jutro_dzien_tyg]) && is_array($grafik[$jutro_dzien_tyg]) && !$jutro_czy_swieto); if (!empty($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 terenowe 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'] = "Warunki idealne do pracy w terenie."; } } else { $full_msg = "Jutro oczekujemy aury typu: {$f_desc}, ok. {$f_t}°C. "; $jutro['porada'] = "Dzień wolny / Biuro nieczynne."; } $jutro['msg'] = $full_msg; } if (!$czy_godziny) { $pogoda_teraz['status'] = 'BIURO NIECZYNNE'; $pogoda_teraz['color'] = '#1e5799'; $pogoda_teraz['bg'] = '#f0f7ff'; } return [ 'pogoda_teraz' => $pogoda_teraz, 'jutro' => $jutro ]; } }