@@ -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