From 0c1e916ed6b4483ab9f91d3718b44b0fa37b92a3 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Sat, 28 Feb 2026 00:39:34 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20modul=20Releases=20=E2=80=94=20dwukanal?= =?UTF-8?q?owy=20system=20aktualizacji=20(beta/stable)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - admin\factory\Releases: logika biznesowa (wersje, licencje, toggle beta) - admin\controls\Releases: handlery HTTP (promote, demote, save/delete/toggle licencji) - admin\view\Releases: renderowanie przez \Tpl - admin/templates/releases/main-view.php: dwa taby (Wersje + Licencje), tabela wersji z przyciskami promocji, CRUD licencji z formularzem inline - templates/additional-menu.php: link "Releases & Licencje" w menu dewelopera - updates/versions.php: przebudowa — czyta z DB (pp_update_licenses, pp_update_versions), auto-discovery nowych ZIPow jako beta - config.php: dodano host_remote dla polaczen zdalnych Co-Authored-By: Claude Sonnet 4.6 --- admin/templates/releases/main-view.php | 303 +++++++++++++ autoload/admin/controls/class.Releases.php | 54 +++ autoload/admin/factory/class.Releases.php | 81 ++++ autoload/admin/view/class.Releases.php | 13 + config.php | 1 + templates/additional-menu.php | 11 + updates/versions.php | 497 +++------------------ 7 files changed, 518 insertions(+), 442 deletions(-) create mode 100644 admin/templates/releases/main-view.php create mode 100644 autoload/admin/controls/class.Releases.php create mode 100644 autoload/admin/factory/class.Releases.php create mode 100644 autoload/admin/view/class.Releases.php create mode 100644 templates/additional-menu.php diff --git a/admin/templates/releases/main-view.php b/admin/templates/releases/main-view.php new file mode 100644 index 0000000..27de6e6 --- /dev/null +++ b/admin/templates/releases/main-view.php @@ -0,0 +1,303 @@ + + + + + + +
+ + + + + + + + + + + + + versions)): ?> + + versions as $v): ?> + + + + + + + + + + +
WersjaKanałData dodaniaData promocjiZIPAkcje
Brak wersji w bazie.
+ + stable + + beta + + —' ?> + + + + + + + +
+ + +
+ +
+ + +
+ +
+
+ + +
+ +
+ + Dodaj licencję + +
+ + +
+
+ Nowa licencja +
+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+ + Anuluj +
+
+
+ + + + + + + + + + + + + + + + + licenses)): ?> + + licenses as $lic): ?> + + + + + + + + + + + + +
DomenaKluczDo datyDo wersjiBetaNotatkaEdytujUsuń
Brak licencji w bazie.
+ + … + + —' ?>—' ?> +
+ + +
+
+ + + + +
+ + +
+
+
+ + +id = 'releases-view'; +$grid->gdb_opt = $gdb; +$grid->include_plugins = true; +$grid->title = 'Releases & Licencje'; +$grid->default_buttons = false; +$grid->external_code = $out; +echo $grid->draw(); +?> diff --git a/autoload/admin/controls/class.Releases.php b/autoload/admin/controls/class.Releases.php new file mode 100644 index 0000000..7bda90e --- /dev/null +++ b/autoload/admin/controls/class.Releases.php @@ -0,0 +1,54 @@ +select('pp_update_versions', '*', ['ORDER' => ['version' => 'DESC']]); + if (!$rows) return []; + foreach ($rows as &$row) + $row['zip_exists'] = file_exists('../updates/' . self::zip_dir($row['version']) . '/ver_' . $row['version'] . '.zip'); + return $rows; + } + + public static function promote(string $version): void + { + global $mdb; + $mdb->update('pp_update_versions', + ['channel' => 'stable', 'promoted_at' => date('Y-m-d H:i:s')], + ['version' => $version] + ); + } + + public static function demote(string $version): void + { + global $mdb; + $mdb->update('pp_update_versions', + ['channel' => 'beta', 'promoted_at' => null], + ['version' => $version] + ); + } + + public static function get_licenses(): array + { + global $mdb; + return $mdb->select('pp_update_licenses', '*', ['ORDER' => ['domain' => 'ASC']]) ?: []; + } + + public static function get_license(int $id): array + { + global $mdb; + return $mdb->get('pp_update_licenses', '*', ['id' => $id]) ?: []; + } + + public static function save_license(array $data): void + { + global $mdb; + $row = [ + 'key' => trim($data['key'] ?? ''), + 'domain' => trim($data['domain'] ?? ''), + 'valid_to_date' => $data['valid_to_date'] ?: null, + 'valid_to_version' => $data['valid_to_version'] ?: null, + 'beta' => (int)(bool)($data['beta'] ?? 0), + 'note' => trim($data['note'] ?? ''), + ]; + if (!empty($data['id'])) + $mdb->update('pp_update_licenses', $row, ['id' => (int)$data['id']]); + else + $mdb->insert('pp_update_licenses', $row); + } + + public static function delete_license(int $id): void + { + global $mdb; + $mdb->delete('pp_update_licenses', ['id' => $id]); + } + + public static function toggle_beta(int $id): void + { + global $mdb; + $license = $mdb->get('pp_update_licenses', ['id', 'beta'], ['id' => $id]); + if ($license) + $mdb->update('pp_update_licenses', ['beta' => $license['beta'] ? 0 : 1], ['id' => $id]); + } + + private static function zip_dir(string $version): string + { + return substr($version, 0, strlen($version) - (strlen($version) == 5 ? 2 : 1)) . '0'; + } +} diff --git a/autoload/admin/view/class.Releases.php b/autoload/admin/view/class.Releases.php new file mode 100644 index 0000000..f157d76 --- /dev/null +++ b/autoload/admin/view/class.Releases.php @@ -0,0 +1,13 @@ +versions = \admin\factory\Releases::get_versions(); + $tpl->licenses = \admin\factory\Releases::get_licenses(); + return $tpl->render('releases/main-view'); + } +} diff --git a/config.php b/config.php index 4b48b0c..b82cdbe 100644 --- a/config.php +++ b/config.php @@ -1,5 +1,6 @@ +
Developer
+ diff --git a/updates/versions.php b/updates/versions.php index dc132a5..f39489c 100644 --- a/updates/versions.php +++ b/updates/versions.php @@ -1,458 +1,71 @@ 'mysql', + 'database_name' => $database['name'], + 'server' => $database['host'], + 'username' => $database['user'], + 'password' => $database['password'], + 'charset' => 'utf8' +] ); + +$current_ver = 1691; // aktualizowane automatycznie przez build-update.ps1 + +// 1. Skan filesystem — lista istniejących ZIPów +$versions = []; +for ( $i = 1; $i <= $current_ver; $i++ ) { - $dir = substr(number_format($i / 1000, 3), 0, strlen(number_format($i / 1000, 3)) - 2) . '0'; - $version_old = number_format($i / 1000, 2); - $version_new = number_format($i / 1000, 3); + $dir = substr( number_format( $i / 1000, 3 ), 0, strlen( number_format( $i / 1000, 3 ) ) - 2 ) . '0'; + $version_old = number_format( $i / 1000, 2 ); + $version_new = number_format( $i / 1000, 3 ); - if (file_exists('../updates/' . $dir . '/ver_' . $version_old . '.zip')) + if ( file_exists( '../updates/' . $dir . '/ver_' . $version_old . '.zip' ) ) $versions[] = $version_old; - if (file_exists('../updates/' . $dir . '/ver_' . $version_new . '.zip')) + if ( file_exists( '../updates/' . $dir . '/ver_' . $version_new . '.zip' ) ) $versions[] = $version_new; } +$versions = array_unique( $versions ); -$license['']['domain'] = 'project-pro.pl'; -$license['']['valid_to_date'] = ''; -$license['']['valid_to_version'] = '1.519'; - -$license['cd9c8211255303fbacb4add2129caff9']['domain'] = 'template01'; -$license['cd9c8211255303fbacb4add2129caff9']['valid_to_date'] = ''; -$license['cd9c8211255303fbacb4add2129caff9']['valid_to_version'] = ''; - -$license['fc32d79ec43ac1a5bdf2de69b65773f2']['domain'] = 'szablony'; -$license['fc32d79ec43ac1a5bdf2de69b65773f2']['valid_to_date'] = ''; -$license['fc32d79ec43ac1a5bdf2de69b65773f2']['valid_to_version'] = ''; - -$license['E79DB4882828CCB767DFEA0AADF185BA']['domain'] = 'project-pro.pl'; -$license['E79DB4882828CCB767DFEA0AADF185BA']['valid_to_date'] = ''; -$license['E79DB4882828CCB767DFEA0AADF185BA']['valid_to_version'] = ''; - -$license['644DD48CEA53091AEE926A7EAE7B0653']['domain'] = 'tele-maco.com'; -$license['644DD48CEA53091AEE926A7EAE7B0653']['valid_to_date'] = ''; -$license['644DD48CEA53091AEE926A7EAE7B0653']['valid_to_version'] = '1.548'; - -$license['D1137E156E2196846D8FB10B71EB6B49']['domain'] = 'kangoor.pl'; -$license['D1137E156E2196846D8FB10B71EB6B49']['valid_to_date'] = ''; -$license['D1137E156E2196846D8FB10B71EB6B49']['valid_to_version'] = '1.548'; - -$license['093BB09C91A9E94D7C5336547748CDAF']['domain'] = 'projektowanieogrodow-kanczugowska.pl'; -$license['093BB09C91A9E94D7C5336547748CDAF']['valid_to_date'] = ''; -$license['093BB09C91A9E94D7C5336547748CDAF']['valid_to_version'] = '1.548'; - -$license['DFA5463207E86DD8D525340A7B63FD35']['domain'] = 'globelus.pl'; -$license['DFA5463207E86DD8D525340A7B63FD35']['valid_to_date'] = ''; -$license['DFA5463207E86DD8D525340A7B63FD35']['valid_to_version'] = '1.618'; - -$license['35C16BE1111EEB36355E1C5AE43F8373']['domain'] = 'domkidarbeskidu.pl'; -$license['35C16BE1111EEB36355E1C5AE43F8373']['valid_to_date'] = ''; -$license['35C16BE1111EEB36355E1C5AE43F8373']['valid_to_version'] = '1.548'; - -$license['E7750D7395576D424ABA08C81504AF65']['domain'] = 'wesolek-ropczyce.pl'; -$license['E7750D7395576D424ABA08C81504AF65']['valid_to_date'] = ''; -$license['E7750D7395576D424ABA08C81504AF65']['valid_to_version'] = '1.548'; - -$license['410ed13e1c99b03b0ef7067a96cddd2e']['domain'] = 'nexdiag.com'; -$license['410ed13e1c99b03b0ef7067a96cddd2e']['valid_to_date'] = ''; -$license['410ed13e1c99b03b0ef7067a96cddd2e']['valid_to_version'] = ''; - -$license['7448547CE8DB5FB02594D60C828282AF']['domain'] = 'sdprog.com'; -$license['7448547CE8DB5FB02594D60C828282AF']['valid_to_date'] = ''; -$license['7448547CE8DB5FB02594D60C828282AF']['valid_to_version'] = '1.618'; - -$license['8A75B8079231AF2C164B87A9945D9DA0']['domain'] = 'olihouse.pl'; -$license['8A75B8079231AF2C164B87A9945D9DA0']['valid_to_date'] = ''; -$license['8A75B8079231AF2C164B87A9945D9DA0']['valid_to_version'] = '1.618'; - -$license['D8C47C064A3B117512873DE29346397D']['domain'] = 'zaufany-ksiegowy.com.pl'; -$license['D8C47C064A3B117512873DE29346397D']['valid_to_date'] = ''; -$license['D8C47C064A3B117512873DE29346397D']['valid_to_version'] = ''; - -$license['B29764D197531EF8C8D39867034433DB']['domain'] = 'bziuk.pl'; -$license['B29764D197531EF8C8D39867034433DB']['valid_to_date'] = ''; -$license['B29764D197531EF8C8D39867034433DB']['valid_to_version'] = '1.618'; - -$license['0FD74F515F6C294BAEC97226C60FF173']['domain'] = 'feb.net.pl'; -$license['0FD74F515F6C294BAEC97226C60FF173']['valid_to_date'] = ''; -$license['0FD74F515F6C294BAEC97226C60FF173']['valid_to_version'] = ''; - -$license['9EE3E126BBC6E001F0F0184BDB36ECB3']['domain'] = 'lekkopijani.pl'; -$license['9EE3E126BBC6E001F0F0184BDB36ECB3']['valid_to_date'] = ''; -$license['9EE3E126BBC6E001F0F0184BDB36ECB3']['valid_to_version'] = '1.618'; - -$license['B7DCF327FDA377C13E0DDC267A3CAAC2']['domain'] = 'studniazyczen.pl'; -$license['B7DCF327FDA377C13E0DDC267A3CAAC2']['valid_to_date'] = ''; -$license['B7DCF327FDA377C13E0DDC267A3CAAC2']['valid_to_version'] = '1.607'; - -$license['387DD19D13F0AB85B20B4D1F16D0C0DF']['domain'] = 'kubak.com.pl'; -$license['387DD19D13F0AB85B20B4D1F16D0C0DF']['valid_to_date'] = ''; -$license['387DD19D13F0AB85B20B4D1F16D0C0DF']['valid_to_version'] = '1.618'; - -$license['81e85da9375bf2ad6594a5300f859c71']['domain'] = 'ctpoland.com.pl'; -$license['81e85da9375bf2ad6594a5300f859c71']['valid_to_date'] = ''; -$license['81e85da9375bf2ad6594a5300f859c71']['valid_to_version'] = '1.618'; - -$license['677A5C20CC99261A41D30C112A0C3441']['domain'] = 'bmk-ck.pl'; -$license['677A5C20CC99261A41D30C112A0C3441']['valid_to_date'] = ''; -$license['677A5C20CC99261A41D30C112A0C3441']['valid_to_version'] = '1.618'; - -$license['7835eb439a571df1ce63c56dd464a90a']['domain'] = 'demo.pro24.com.pl'; -$license['7835eb439a571df1ce63c56dd464a90a']['valid_to_date'] = ''; -$license['7835eb439a571df1ce63c56dd464a90a']['valid_to_version'] = '1.618'; - -$license['4e87d09851053a1d35dfb3dd0653504d']['domain'] = 'lipinskipawel.pl'; -$license['4e87d09851053a1d35dfb3dd0653504d']['valid_to_date'] = ''; -$license['4e87d09851053a1d35dfb3dd0653504d']['valid_to_version'] = '1.618'; - -$license['0918AB95878AD6EEE2936A77278B5C4E']['domain'] = 'iweda.pl'; -$license['0918AB95878AD6EEE2936A77278B5C4E']['valid_to_date'] = ''; -$license['0918AB95878AD6EEE2936A77278B5C4E']['valid_to_version'] = '1.618'; - -$license['7d16b320128c1eafd43637a28272ce5a']['domain'] = 'gpb-group.pl'; -$license['7d16b320128c1eafd43637a28272ce5a']['valid_to_date'] = ''; -$license['7d16b320128c1eafd43637a28272ce5a']['valid_to_version'] = '1.618'; - -$license['cd4aee2bce3827f446de7a60874fcc78']['domain'] = 'proxima.waw.pl'; -$license['cd4aee2bce3827f446de7a60874fcc78']['valid_to_date'] = ''; -$license['cd4aee2bce3827f446de7a60874fcc78']['valid_to_version'] = ''; - -$license['ca12bdf8718169341e2a2bd60b9b6718']['domain'] = 'kopalniarakszawa.pl'; -$license['ca12bdf8718169341e2a2bd60b9b6718']['valid_to_date'] = ''; -$license['ca12bdf8718169341e2a2bd60b9b6718']['valid_to_version'] = '1.618'; - -$license['caeeb6ff0580a30f23dbf5d74c50021f']['domain'] = 'konfiguratorgbp.pl'; -$license['caeeb6ff0580a30f23dbf5d74c50021f']['valid_to_date'] = ''; -$license['caeeb6ff0580a30f23dbf5d74c50021f']['valid_to_version'] = '1.618'; - -$license['f775aa50ba64a63a8e4fa6d27a75f7b5']['domain'] = 'agrofurdyna.pl'; -$license['f775aa50ba64a63a8e4fa6d27a75f7b5']['valid_to_date'] = ''; -$license['f775aa50ba64a63a8e4fa6d27a75f7b5']['valid_to_version'] = '1.618'; - -$license['118cf28359bb9a4e9892a5fe22f934b7']['domain'] = 'ankiety.pl'; -$license['118cf28359bb9a4e9892a5fe22f934b7']['valid_to_date'] = ''; -$license['118cf28359bb9a4e9892a5fe22f934b7']['valid_to_version'] = '1.618'; - -$license['2d9a32bb73802ebf5a5ff03cbad2fee5']['domain'] = 'dendron.net.pl'; -$license['2d9a32bb73802ebf5a5ff03cbad2fee5']['valid_to_date'] = ''; -$license['2d9a32bb73802ebf5a5ff03cbad2fee5']['valid_to_version'] = ''; - -$license['e8ddc0cc8a4292fde817506bbceea25e']['domain'] = 'orange.pl'; -$license['e8ddc0cc8a4292fde817506bbceea25e']['valid_to_date'] = ''; -$license['e8ddc0cc8a4292fde817506bbceea25e']['valid_to_version'] = '1.618'; - -$license['e7b112bcf7da625993537913205aeb90']['domain'] = 'kobcrane-montaze.pl'; -$license['e7b112bcf7da625993537913205aeb90']['valid_to_date'] = ''; -$license['e7b112bcf7da625993537913205aeb90']['valid_to_version'] = ''; - -$license['6582e3ac1215189e745cffa6f14242b7']['domain'] = 'landeo.pl'; -$license['6582e3ac1215189e745cffa6f14242b7']['valid_to_date'] = ''; -$license['6582e3ac1215189e745cffa6f14242b7']['valid_to_version'] = '1.618'; - -$license['8df0e9b3455b5de1d7bfbfd4924cf16a']['domain'] = '4est.pl'; -$license['8df0e9b3455b5de1d7bfbfd4924cf16a']['valid_to_date'] = ''; -$license['8df0e9b3455b5de1d7bfbfd4924cf16a']['valid_to_version'] = '1.618'; - -$license['bfd57185b0202b23d5a2cae1ddcfbcf2']['domain'] = 'pbawers.pl'; -$license['bfd57185b0202b23d5a2cae1ddcfbcf2']['valid_to_date'] = ''; -$license['bfd57185b0202b23d5a2cae1ddcfbcf2']['valid_to_version'] = '1.618'; - -$license['e82f945eeea9647022ab04821a8ca47d']['domain'] = 'uczciwawycena.pl'; -$license['e82f945eeea9647022ab04821a8ca47d']['valid_to_date'] = ''; -$license['e82f945eeea9647022ab04821a8ca47d']['valid_to_version'] = '1.618'; - -$license['3936b399e94b91829e1851b2fecb5977']['domain'] = 'm3rent.pl'; -$license['3936b399e94b91829e1851b2fecb5977']['valid_to_date'] = ''; -$license['3936b399e94b91829e1851b2fecb5977']['valid_to_version'] = '1.618'; - -$license['cbc2a0890d9974e03206e836e245c311']['domain'] = 'dhtpolska.pl'; -$license['cbc2a0890d9974e03206e836e245c311']['valid_to_date'] = ''; -$license['cbc2a0890d9974e03206e836e245c311']['valid_to_version'] = '1.618'; - -$license['aa1177a9715b5663ba4b251082679065']['domain'] = 'recosolar.pl'; -$license['aa1177a9715b5663ba4b251082679065']['valid_to_date'] = ''; -$license['aa1177a9715b5663ba4b251082679065']['valid_to_version'] = ''; - -$license['edd8ce704a8c04940d333b0b53266610']['domain'] = 'wonderloft.pl'; -$license['edd8ce704a8c04940d333b0b53266610']['valid_to_date'] = ''; -$license['edd8ce704a8c04940d333b0b53266610']['valid_to_version'] = '1.618'; - -$license['9adf305a9439e8f9fd78f7618e652978']['domain'] = 'kancelariaskoczek.pl'; -$license['9adf305a9439e8f9fd78f7618e652978']['valid_to_date'] = ''; -$license['9adf305a9439e8f9fd78f7618e652978']['valid_to_version'] = ''; - -$license['72b050effb57632584204046b6a298de']['domain'] = 'imperialogistyka.pl'; -$license['72b050effb57632584204046b6a298de']['valid_to_date'] = ''; -$license['72b050effb57632584204046b6a298de']['valid_to_version'] = ''; - -$license['6674cbb6c4d1edc9277b3c924a9a5005']['domain'] = 'dobrodomski.pl'; -$license['6674cbb6c4d1edc9277b3c924a9a5005']['valid_to_date'] = ''; -$license['6674cbb6c4d1edc9277b3c924a9a5005']['valid_to_version'] = ''; - -$license['fcb769550dae95039c25439e42b97077']['domain'] = 'mikro-domki.pl'; -$license['fcb769550dae95039c25439e42b97077']['valid_to_date'] = ''; -$license['fcb769550dae95039c25439e42b97077']['valid_to_version'] = ''; - -$license['d15c0512b8511c5a2bad7e02d8a74110']['domain'] = 'innovationprzeworsk.net'; -$license['d15c0512b8511c5a2bad7e02d8a74110']['valid_to_date'] = ''; -$license['d15c0512b8511c5a2bad7e02d8a74110']['valid_to_version'] = ''; - -$license['9158a44e52e5b24bd84419deebee051a']['domain'] = 'mpmkotly.pl'; -$license['9158a44e52e5b24bd84419deebee051a']['valid_to_date'] = ''; -$license['9158a44e52e5b24bd84419deebee051a']['valid_to_version'] = ''; - -$license['0bbc77cf87cde41d4761d57b0c7fe923']['domain'] = 'medologic.com'; -$license['0bbc77cf87cde41d4761d57b0c7fe923']['valid_to_date'] = ''; -$license['0bbc77cf87cde41d4761d57b0c7fe923']['valid_to_version'] = ''; - -$license['e428a539d475907921cd526ae88c9f47']['domain'] = 'dzieciusiowo.pl'; -$license['e428a539d475907921cd526ae88c9f47']['valid_to_date'] = ''; -$license['e428a539d475907921cd526ae88c9f47']['valid_to_version'] = ''; - -$license['2d0479b8cdb00fdb6a58105bc55e6cfa']['domain'] = 'nataliaroch.pl'; -$license['2d0479b8cdb00fdb6a58105bc55e6cfa']['valid_to_date'] = ''; -$license['2d0479b8cdb00fdb6a58105bc55e6cfa']['valid_to_version'] = ''; - -$license['454e89c0922aa91ce79ec4c1a5ac6054']['domain'] = 'softimi.pl'; -$license['454e89c0922aa91ce79ec4c1a5ac6054']['valid_to_date'] = ''; -$license['454e89c0922aa91ce79ec4c1a5ac6054']['valid_to_version'] = ''; - -$license['8c85f7f6aa5442e5f42cef1903f25f0b']['domain'] = 'nosmoke.pl'; -$license['8c85f7f6aa5442e5f42cef1903f25f0b']['valid_to_date'] = ''; -$license['8c85f7f6aa5442e5f42cef1903f25f0b']['valid_to_version'] = ''; - -$license['e688622c70a439ab650eacd0add35032']['domain'] = 'kudlatypies.pl'; -$license['e688622c70a439ab650eacd0add35032']['valid_to_date'] = ''; -$license['e688622c70a439ab650eacd0add35032']['valid_to_version'] = ''; - -$license['99593574ef188006af7f53715431623d']['domain'] = 'magdapara.pl'; -$license['99593574ef188006af7f53715431623d']['valid_to_date'] = ''; -$license['99593574ef188006af7f53715431623d']['valid_to_version'] = ''; - -$license['07c9408bae288ce6a7bf2b4189760960']['domain'] = 'verdavivo.pl'; -$license['07c9408bae288ce6a7bf2b4189760960']['valid_to_date'] = ''; -$license['07c9408bae288ce6a7bf2b4189760960']['valid_to_version'] = ''; - -$license['1cb534040cb2649a9b15b0becfc693da']['domain'] = 'swiatpaneli.rzeszow.pl'; -$license['1cb534040cb2649a9b15b0becfc693da']['valid_to_date'] = ''; -$license['1cb534040cb2649a9b15b0becfc693da']['valid_to_version'] = ''; - -$license['2cfdb0f74dbb7748dd06a67f076a2b70']['domain'] = 'fibnet.com.pl'; -$license['2cfdb0f74dbb7748dd06a67f076a2b70']['valid_to_date'] = ''; -$license['2cfdb0f74dbb7748dd06a67f076a2b70']['valid_to_version'] = ''; - -$license['1b1a48cdfc259963b1687d1ac88195e3']['domain'] = 'safarikamper.pl'; -$license['1b1a48cdfc259963b1687d1ac88195e3']['valid_to_date'] = ''; -$license['1b1a48cdfc259963b1687d1ac88195e3']['valid_to_version'] = ''; - -$license['8e148b983ff683837783f4ea4ccf2f71']['domain'] = 'rampol.net'; -$license['8e148b983ff683837783f4ea4ccf2f71']['valid_to_date'] = ''; -$license['8e148b983ff683837783f4ea4ccf2f71']['valid_to_version'] = ''; - -$license['40976930ccc19f6c0f08c903d68d2f85']['domain'] = 'vidok.pl'; -$license['40976930ccc19f6c0f08c903d68d2f85']['valid_to_date'] = ''; -$license['40976930ccc19f6c0f08c903d68d2f85']['valid_to_version'] = ''; - -$license['7f2e9bae197a7ca68b8ffa19fe116d14']['domain'] = 'pubmed.pl'; -$license['7f2e9bae197a7ca68b8ffa19fe116d14']['valid_to_date'] = ''; -$license['7f2e9bae197a7ca68b8ffa19fe116d14']['valid_to_version'] = ''; - -$license['a31397f5c0f290533a5418b3a7cd68f7']['domain'] = 'skoczek.pro24.link'; -$license['a31397f5c0f290533a5418b3a7cd68f7']['valid_to_date'] = ''; -$license['a31397f5c0f290533a5418b3a7cd68f7']['valid_to_version'] = ''; - -$license['599191bf2871cbf4bbf663a071c33cc1']['domain'] = 'marina-pallatium.eu'; -$license['599191bf2871cbf4bbf663a071c33cc1']['valid_to_date'] = ''; -$license['599191bf2871cbf4bbf663a071c33cc1']['valid_to_version'] = ''; - -$license['07117d04a12904e25dfe0b37e52176c7']['domain'] = 'zaufane.pl'; -$license['07117d04a12904e25dfe0b37e52176c7']['valid_to_date'] = ''; -$license['07117d04a12904e25dfe0b37e52176c7']['valid_to_version'] = ''; - -$license['3038ab96e469229478bd4d4266484a59']['domain'] = 'conflo.pl'; -$license['3038ab96e469229478bd4d4266484a59']['valid_to_date'] = ''; -$license['3038ab96e469229478bd4d4266484a59']['valid_to_version'] = ''; - -$license['25ce54d28231faad3a5854df9651e61f']['domain'] = 'inwestprofil.pl'; -$license['25ce54d28231faad3a5854df9651e61f']['valid_to_date'] = ''; -$license['25ce54d28231faad3a5854df9651e61f']['valid_to_version'] = ''; - -$license['79080dc0f7b03b50d74f00ba1f87825b']['domain'] = 'grzesiek.pro24.link'; -$license['79080dc0f7b03b50d74f00ba1f87825b']['valid_to_date'] = ''; -$license['79080dc0f7b03b50d74f00ba1f87825b']['valid_to_version'] = ''; - -$license['dec5859d7bd0eeccb8cf7016da184d5a']['domain'] = 'emerch.pl'; -$license['dec5859d7bd0eeccb8cf7016da184d5a']['valid_to_date'] = ''; -$license['dec5859d7bd0eeccb8cf7016da184d5a']['valid_to_version'] = ''; - -$license['7b1782067d011cc2d991b18e26f3e82b']['domain'] = 'enology.pl'; -$license['7b1782067d011cc2d991b18e26f3e82b']['valid_to_date'] = ''; -$license['7b1782067d011cc2d991b18e26f3e82b']['valid_to_version'] = ''; - -$license['8928ad9031cef96302c5c2f2e7686ed3']['domain'] = 'choinki-lancut.eu'; -$license['8928ad9031cef96302c5c2f2e7686ed3']['valid_to_date'] = ''; -$license['8928ad9031cef96302c5c2f2e7686ed3']['valid_to_version'] = ''; - -$license['64c01e72bff323a6dc5984f57074e393']['domain'] = 'choinki-lancut.eu'; -$license['64c01e72bff323a6dc5984f57074e393']['valid_to_date'] = ''; -$license['64c01e72bff323a6dc5984f57074e393']['valid_to_version'] = ''; - -$license['5f91caf697dfbb174bb4b7e80f57578e']['domain'] = 'wobistal.pl'; -$license['5f91caf697dfbb174bb4b7e80f57578e']['valid_to_date'] = ''; -$license['5f91caf697dfbb174bb4b7e80f57578e']['valid_to_version'] = ''; - -$license['4818078c90ac4e88c687c531c730f398']['domain'] = 'monika.pro24.link'; -$license['4818078c90ac4e88c687c531c730f398']['valid_to_date'] = ''; -$license['4818078c90ac4e88c687c531c730f398']['valid_to_version'] = ''; - -$license['fd51610b1f93c8ba96cd83c42c11777a']['domain'] = 'rodzic.eu'; -$license['fd51610b1f93c8ba96cd83c42c11777a']['valid_to_date'] = ''; -$license['fd51610b1f93c8ba96cd83c42c11777a']['valid_to_version'] = ''; - -$license['c957408692c36f05e1d12f8197aa54ae']['domain'] = 'emifloor.pl'; -$license['c957408692c36f05e1d12f8197aa54ae']['valid_to_date'] = ''; -$license['c957408692c36f05e1d12f8197aa54ae']['valid_to_version'] = ''; - -$license['cacae1bd64fe16d22a17c31941ba58a2']['domain'] = 'inwestor-zastepczy.rzeszow.pl'; -$license['cacae1bd64fe16d22a17c31941ba58a2']['valid_to_date'] = ''; -$license['cacae1bd64fe16d22a17c31941ba58a2']['valid_to_version'] = ''; - -$license['e3a8caa70a968f25bf097ad8623727c1']['domain'] = 'klimawent-lancut.pl'; -$license['e3a8caa70a968f25bf097ad8623727c1']['valid_to_date'] = ''; -$license['e3a8caa70a968f25bf097ad8623727c1']['valid_to_version'] = ''; - -$license['d41d8cd98f00b204e9800998ecf8427e']['domain'] = 'kurierolkuski.pl'; -$license['d41d8cd98f00b204e9800998ecf8427e']['valid_to_date'] = ''; -$license['d41d8cd98f00b204e9800998ecf8427e']['valid_to_version'] = ''; - -$license['a6ab4706022bd3000e48ce33d25d5081']['domain'] = 'pipir.pl'; -$license['a6ab4706022bd3000e48ce33d25d5081']['valid_to_date'] = ''; -$license['a6ab4706022bd3000e48ce33d25d5081']['valid_to_version'] = ''; - -$license['ecd142a4b8aab63383d762d4929341c8']['domain'] = 'hat-bud.pl'; -$license['ecd142a4b8aab63383d762d4929341c8']['valid_to_date'] = ''; -$license['ecd142a4b8aab63383d762d4929341c8']['valid_to_version'] = ''; - -$license['6badbcb418d51fc3d3b4f3121890c862']['domain'] = 'bip.rops.rzeszow.pl'; -$license['6badbcb418d51fc3d3b4f3121890c862']['valid_to_date'] = ''; -$license['6badbcb418d51fc3d3b4f3121890c862']['valid_to_version'] = ''; - -$license['8df2b842d2421be883c17b98b3c62eb8']['domain'] = 'haft.ertim.pl'; -$license['8df2b842d2421be883c17b98b3c62eb8']['valid_to_date'] = ''; -$license['8df2b842d2421be883c17b98b3c62eb8']['valid_to_version'] = ''; - -$license['c26efc849339d628d9d8cdc33158a9af']['domain'] = 'roximplast.pl'; -$license['c26efc849339d628d9d8cdc33158a9af']['valid_to_date'] = ''; -$license['c26efc849339d628d9d8cdc33158a9af']['valid_to_version'] = ''; - -$license['cf1fd02b4a287e235bc6ab5c2891f14d']['domain'] = 'tomaszpasko.pl'; -$license['cf1fd02b4a287e235bc6ab5c2891f14d']['valid_to_date'] = ''; -$license['cf1fd02b4a287e235bc6ab5c2891f14d']['valid_to_version'] = ''; - -$license['deb9fa5ac0c1ead8ba2a4224a4e3bd8f']['domain'] = 'symbiana.com.pl'; -$license['deb9fa5ac0c1ead8ba2a4224a4e3bd8f']['valid_to_date'] = ''; -$license['deb9fa5ac0c1ead8ba2a4224a4e3bd8f']['valid_to_version'] = ''; - -$license['549895ba2d09af4b938e41de51814ebb']['domain'] = 'pianfol.pl'; -$license['549895ba2d09af4b938e41de51814ebb']['valid_to_date'] = ''; -$license['549895ba2d09af4b938e41de51814ebb']['valid_to_version'] = ''; - -$license['076f0718e06bac1bcff90867eb0accf2']['domain'] = 'zsjasionka.szkola.pl'; -$license['076f0718e06bac1bcff90867eb0accf2']['valid_to_date'] = ''; -$license['076f0718e06bac1bcff90867eb0accf2']['valid_to_version'] = ''; - -$license['c377620734fa98b2418797f06326c718']['domain'] = 'de.vidok.com'; -$license['c377620734fa98b2418797f06326c718']['valid_to_date'] = ''; -$license['c377620734fa98b2418797f06326c718']['valid_to_version'] = ''; - -$license['2a5d8f9c8cb1423be0c366433252ddd1']['domain'] = 'kingstorage.pl'; -$license['2a5d8f9c8cb1423be0c366433252ddd1']['valid_to_date'] = ''; -$license['2a5d8f9c8cb1423be0c366433252ddd1']['valid_to_version'] = ''; - -$license['6d7813ea72268dd3a062e92be33adc59']['domain'] = 'dtf.centrumdruku24.pl'; -$license['6d7813ea72268dd3a062e92be33adc59']['valid_to_date'] = ''; -$license['6d7813ea72268dd3a062e92be33adc59']['valid_to_version'] = ''; - -$license['9ee5d052380f7b78a30656948e773705']['domain'] = 'dtf.centrumdruku24.pl'; -$license['9ee5d052380f7b78a30656948e773705']['valid_to_date'] = ''; -$license['9ee5d052380f7b78a30656948e773705']['valid_to_version'] = ''; - -$license['5ef6db1855e3d585fbbbb545034bbaf3']['domain'] = 'oknoland.mielec.pl'; -$license['5ef6db1855e3d585fbbbb545034bbaf3']['valid_to_date'] = ''; -$license['5ef6db1855e3d585fbbbb545034bbaf3']['valid_to_version'] = ''; - -$license['7fb7c4f62c94d24ff75f7931540ec75a']['domain'] = 'oknoland.mielec.pl'; -$license['7fb7c4f62c94d24ff75f7931540ec75a']['valid_to_date'] = ''; -$license['7fb7c4f62c94d24ff75f7931540ec75a']['valid_to_version'] = ''; - -$license['e2b0df429491afda870f30d4bdb313a0']['domain'] = 'przedszkole.pro24.com.pl'; -$license['e2b0df429491afda870f30d4bdb313a0']['valid_to_date'] = ''; -$license['e2b0df429491afda870f30d4bdb313a0']['valid_to_version'] = ''; - -$license['fb50f1b15be6a8af1178a2aab9a4dbdf']['domain'] = 'chmielowiec.eu'; -$license['fb50f1b15be6a8af1178a2aab9a4dbdf']['valid_to_date'] = ''; -$license['fb50f1b15be6a8af1178a2aab9a4dbdf']['valid_to_version'] = ''; - -$license['333f4c17de255dfec941fcdc60ea273a']['domain'] = 'kampery.brzezovka.pl'; -$license['333f4c17de255dfec941fcdc60ea273a']['valid_to_date'] = ''; -$license['333f4c17de255dfec941fcdc60ea273a']['valid_to_version'] = ''; - -$license['2f564150024940551b31a19b32ae9734']['domain'] = 'mogegarden.pl'; -$license['2f564150024940551b31a19b32ae9734']['valid_to_date'] = ''; -$license['2f564150024940551b31a19b32ae9734']['valid_to_version'] = ''; - -$license['78c454de6a7c40c55fbcd21440ef75a6']['domain'] = 'mogegarden.pl'; -$license['78c454de6a7c40c55fbcd21440ef75a6']['valid_to_date'] = ''; -$license['78c454de6a7c40c55fbcd21440ef75a6']['valid_to_version'] = ''; - -$license['2b353dfc72ad989727296019078a5939']['domain'] = 'manver.pl'; -$license['2b353dfc72ad989727296019078a5939']['valid_to_date'] = ''; -$license['2b353dfc72ad989727296019078a5939']['valid_to_version'] = ''; - -$license['7965db1a2cc68663077aa335aaf00d6e']['domain'] = 'dpsbabica.pl'; -$license['7965db1a2cc68663077aa335aaf00d6e']['valid_to_date'] = ''; -$license['7965db1a2cc68663077aa335aaf00d6e']['valid_to_version'] = ''; - -$license['1ac91c8663f2e371b9d3acbaeb45f184']['domain'] = 'eng.vidok.com'; -$license['1ac91c8663f2e371b9d3acbaeb45f184']['valid_to_date'] = ''; -$license['1ac91c8663f2e371b9d3acbaeb45f184']['valid_to_version'] = ''; - -$license['32967a10e80e258873376c9650206ff1']['domain'] = 'ertim.pl'; -$license['32967a10e80e258873376c9650206ff1']['valid_to_date'] = ''; -$license['32967a10e80e258873376c9650206ff1']['valid_to_version'] = ''; - -$license['797d5ede8228fff47151ec2555a71b29']['domain'] = 'patekaparments.pl'; -$license['797d5ede8228fff47151ec2555a71b29']['valid_to_date'] = ''; -$license['797d5ede8228fff47151ec2555a71b29']['valid_to_version'] = ''; - -$license['32764e943176bdd2563547046e2745cf']['domain'] = 'se.min-pan.krakow.pl'; -$license['32764e943176bdd2563547046e2745cf']['valid_to_date'] = ''; -$license['32764e943176bdd2563547046e2745cf']['valid_to_version'] = ''; - -$license['1802633572f03a814b86189b711d6979']['domain'] = 'kontrans.pl'; -$license['1802633572f03a814b86189b711d6979']['valid_to_date'] = ''; -$license['1802633572f03a814b86189b711d6979']['valid_to_version'] = ''; - -$update_key = $_GET['key']; -if (!isset($license[$_GET['key']])) +// 2. Walidacja klucza licencji +$license = $mdb->get( 'pp_update_licenses', '*', [ 'key' => ( $_GET['key'] ?? '' ) ] ); +if ( !$license ) die(); -$valid_to_date = $license[$_GET['key']]['valid_to']; -if ($valid_to && $valid_to < date('Y-m-d')) +// 3. Sprawdź ważność daty +if ( $license['valid_to_date'] && $license['valid_to_date'] < date( 'Y-m-d' ) ) die(); -$versions = array_unique($versions); - -$valid_to_version = $license[$_GET['key']]['valid_to_version']; -if ($valid_to_version) +// 4. Auto-discovery: rejestruj nowe ZIPy jako beta +$known = array_flip( $mdb->select( 'pp_update_versions', 'version', [] ) ?: [] ); +foreach ( $versions as $ver ) { - foreach ($versions as $ver) - if ($ver <= $valid_to_version) - echo $ver . PHP_EOL; + if ( !isset( $known[$ver] ) ) + { + @$mdb->insert( 'pp_update_versions', [ + 'version' => $ver, + 'channel' => 'beta', + 'created_at' => date( 'Y-m-d H:i:s' ) + ] ); + $known[$ver] = true; + } } -else + +// 5. Filtruj wersje wg kanału (beta widzi beta+stable, reszta tylko stable) +$channels = $license['beta'] ? [ 'beta', 'stable' ] : [ 'stable' ]; +$allowed = array_flip( $mdb->select( 'pp_update_versions', 'version', [ 'channel' => $channels ] ) ?: [] ); + +// 6. Wypisz dostępne wersje +$valid_to_version = $license['valid_to_version']; +foreach ( $versions as $ver ) { - foreach ($versions as $ver) - echo $ver . PHP_EOL; -} \ No newline at end of file + if ( !isset( $allowed[$ver] ) ) + continue; + + if ( $valid_to_version && $ver > $valid_to_version ) + continue; + + echo $ver . PHP_EOL; +}