Skip to content

Commit c202bae

Browse files
committed
fix: ricerca aggiornamenti
1 parent f5e0894 commit c202bae

2 files changed

Lines changed: 75 additions & 13 deletions

File tree

modules/aggiornamenti/src/UpdateHook.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ protected static function getClient()
9898
self::$client = new Client([
9999
'base_uri' => 'https://api.github.com/repos/devcode-it/openstamanager/',
100100
'verify' => false,
101+
'timeout' => 30,
102+
'headers' => [
103+
'User-Agent' => 'OpenSTAManager-UpdateChecker',
104+
'Accept' => 'application/vnd.github.v3+json',
105+
],
101106
]);
102107
}
103108

@@ -111,9 +116,36 @@ protected static function getClient()
111116
*/
112117
protected static function getAPI()
113118
{
119+
// Se è abilitato il canale pre-release, usa l'endpoint latest per l'ultima versione assoluta
120+
if (setting('Abilita canale pre-release per aggiornamenti')) {
121+
$response = self::getClient()->request('GET', 'releases/latest');
122+
$body = $response->getBody();
123+
124+
$result = json_decode($body, true);
125+
if (!is_array($result) || empty($result)) {
126+
throw new \Exception('Invalid API response: empty or malformed data');
127+
}
128+
129+
return $result;
130+
}
131+
132+
// Altrimenti cerca l'ultima versione stabile (non pre-release)
114133
$response = self::getClient()->request('GET', 'releases');
115134
$body = $response->getBody();
116135

117-
return json_decode($body, true)[0];
136+
$releases = json_decode($body, true);
137+
if (!is_array($releases) || empty($releases)) {
138+
throw new \Exception('Invalid API response: empty or malformed data');
139+
}
140+
141+
// Cerca la prima release stabile
142+
foreach ($releases as $release) {
143+
if (!$release['prerelease']) {
144+
return $release;
145+
}
146+
}
147+
148+
// Se non trova release stabili, restituisce la prima disponibile come fallback
149+
return $releases[0];
118150
}
119151
}

modules/aggiornamenti/src/UpdateHookTask.php

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,39 +34,42 @@ public function execute()
3434
$result = [
3535
'response' => 1,
3636
'message' => tr('Ricerca nuovo aggiornamento completata! Nessun nuovo aggiornamento disponibile.'),
37-
];
38-
37+
];
38+
3939
try {
4040
$api = self::getLastRelease();
4141
$update = null;
4242
if (!$api['prerelease'] or setting('Abilita canale pre-release per aggiornamenti')) {
4343
$version[0] = ltrim((string) $api['tag_name'], 'v');
4444
$version[1] = !empty($api['prerelease']) ? 'beta' : 'stabile';
4545
$current = \Update::getVersion();
46-
46+
4747
if (version_compare($current, $version[0]) < 0) {
4848
$update = $version[0];
4949
}
5050
}
51-
51+
5252
database()->update('zz_cache', [
5353
'content' => json_encode($version),
5454
'expire_at' => Carbon::now(),
5555
], [
5656
'name' => 'Ultima versione di OpenSTAManager disponibile',
5757
]);
58-
58+
5959
if (empty($update) || empty(setting('Attiva aggiornamenti'))) {
6060
return $result;
6161
}else{
6262
$module = Module::where('name', 'Aggiornamenti')->first();
6363
$link = !empty($module) ? base_path().'/controller.php?id_module='.$module->id : '#';
64-
64+
6565
$result = [
6666
'response' => 2,
6767
'message' => tr("E' disponibile la versione _VERSION_ del gestionale", [
6868
'_VERSION_' => $update,
6969
]),
70+
'link' => $link,
71+
'icon' => 'fa fa-download text-info',
72+
'show' => true,
7073
];
7174
}
7275
} catch (\Exception $e) {
@@ -76,7 +79,7 @@ public function execute()
7679
'_error_' => $e->getMessage(),
7780
]),
7881
];
79-
}
82+
}
8083

8184
return $result;
8285
}
@@ -87,17 +90,44 @@ protected static function getLastRelease()
8790
self::$client = new Client([
8891
'base_uri' => 'https://api.github.com/repos/devcode-it/openstamanager/',
8992
'verify' => false,
93+
'timeout' => 30,
94+
'headers' => [
95+
'User-Agent' => 'OpenSTAManager-UpdateChecker',
96+
'Accept' => 'application/vnd.github.v3+json',
97+
],
9098
]);
9199
}
92100

101+
// Se è abilitato il canale pre-release, usa l'endpoint latest per l'ultima versione assoluta
102+
if (setting('Abilita canale pre-release per aggiornamenti')) {
103+
$response = self::$client->request('GET', 'releases/latest');
104+
$body = $response->getBody();
105+
106+
$result = json_decode($body, true);
107+
if (!is_array($result) || empty($result)) {
108+
throw new \Exception('Invalid API response: empty or malformed data');
109+
}
110+
111+
return $result;
112+
}
113+
114+
// Altrimenti cerca l'ultima versione stabile (non pre-release)
93115
$response = self::$client->request('GET', 'releases');
94116
$body = $response->getBody();
95117

96-
$result = json_decode($body, true);
97-
if( $result[0] ){
98-
return $result[0];
99-
}else{
100-
return [];
118+
$releases = json_decode($body, true);
119+
if (!is_array($releases) || empty($releases)) {
120+
throw new \Exception('Invalid API response: empty or malformed data');
101121
}
122+
123+
// Cerca la prima release stabile
124+
foreach ($releases as $release) {
125+
if (!$release['prerelease']) {
126+
return $release;
127+
}
128+
}
129+
130+
// Se non trova release stabili, restituisce la prima disponibile come fallback
131+
return $releases[0];
102132
}
103133
}

0 commit comments

Comments
 (0)