Skip to content

Commit ea6bdaf

Browse files
committed
feat: aggiunta informazione Token di sessione e Ultimo login riuscito nella scheda info dell'utente
1 parent 1a042b0 commit ea6bdaf

3 files changed

Lines changed: 79 additions & 49 deletions

File tree

modules/utenti/edit.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,12 @@
7575
<div class="col-md-4">
7676
<div class="form-group">
7777
<label><i class="fa fa-home mr-1"></i> '.tr('Modulo iniziale').'</label>
78-
{["type":"select", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $group->id]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.($group->id_module_start ?: 0).'" ]}
78+
{["type":"select", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $group->id]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.($group->id_module_start ?: 0). '" ]}
7979
</div>
8080
</div>
8181
<div class="col-md-4">
8282
<div class="form-group">
83-
<label><i class="fa fa-palette mr-1"></i> '.tr('Tema').'</label>
83+
<label><i class="fa fa-adjust mr-1"></i> '.tr('Tema').'</label>
8484
{["type":"select", "name":"theme", "values":"list=\"\": \"'.tr('Predefinito').'\",\"black-light\": \"'.tr('Bianco').'\",\"red-light\": \"'.tr('Rosso chiaro').'\",\"red\": \"'.tr('Rosso').'\",\"blue-light\": \"'.tr('Blu chiaro').'\",\"blue\": \"'.tr('Blu').'\",\"info-light\": \"'.tr('Azzurro chiaro').'\",\"info\": \"'.tr('Azzurro').'\",\"green-light\": \"'.tr('Verde chiaro').'\",\"green\": \"'.tr('Verde').'\",\"yellow-light\": \"'.tr('Giallo chiaro').'\",\"yellow\": \"'.tr('Giallo').'\",\"purple-light\": \"'.tr('Viola chiaro').'\",\"purple\": \"'.tr('Viola').'\" ", "value":"'.$group->theme.'" ]}
8585
</div>
8686
</div>

modules/utenti/info.php

Lines changed: 45 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
$user = auth_osm()->getUser();
3636
$token = auth_osm()->getToken();
37+
$session_token = auth_osm()->getSessionToken();
38+
$last_login = auth_osm()->getLastLogin();
3739

3840
$rs = $dbo->fetchArray('SELECT * FROM an_anagrafiche WHERE idanagrafica = '.prepare($user['idanagrafica']));
3941
$anagrafica = [];
@@ -45,8 +47,10 @@
4547
$module = Module::where('name', 'Utenti e permessi')->first();
4648

4749
echo '
50+
<div class="row">
51+
<div class="col-md-6">
4852
<div class="card card-widget widget-user">
49-
<div class="widget-user-header bg-orange">
53+
<div class="widget-user-header bg-info">
5054
<h3 class="widget-user-username">'.$user['username'].'</h3>
5155
<h5 class="widget-user-desc">'.$user['gruppo'].'</h5>
5256
</div>
@@ -59,78 +63,53 @@
5963
</div>
6064
<div class="card-footer">
6165
<div class="row">
62-
<div class="col-sm-4 border-right">
66+
<div class="col-sm-4">
6367
<div class="description-block">
6468
<h5 class="description-header">'.tr('Anagrafica associata').'</h5>
6569
<span class="description-text">'.(!empty($anagrafica) ? $anagrafica['ragione_sociale'] : tr('Nessuna')).'</span>
6670
</div>
6771
</div>
6872
69-
<div class="col-sm-4 border-right">
73+
<div class="col-sm-4">
7074
<div class="description-block">
7175
<a class="btn btn-primary btn-block tip '.(($module) ? '' : 'disabled').'" data-href="'.(($module) ? ($module->fileurl('self.php').'?id_module='.$module->id) : '#').'&resource=photo" data-widget="modal" data-title="'.tr('Cambia foto utente').'">
7276
<i class="fa fa-picture-o"></i> '.tr('Cambia foto utente').'
7377
</a>
7478
</div>
7579
</div>
7680
77-
<div class="col-sm-4 border-right">
81+
<div class="col-sm-4">
7882
<div class="description-block">
7983
<a class="btn btn-warning btn-block tip '.(($module) ? '' : 'disabled').'" data-href="'.(($module) ? $module->fileurl('self.php').'?id_module='.$module->id : '#').'&resource=password" data-widget="modal" data-title="'.tr('Cambia password').'">
80-
<i class="fa fa-unlock-alt"></i> '.tr('Cambia password').'
84+
<i class="fa fa-unlock-alt"></i> '.tr('Cambia password'). '
8185
</a>
8286
</div>
8387
</div>
8488
</div>
8589
</div>
86-
</div>';
87-
88-
echo '
89-
<div class="row">
90+
</div>
91+
</div>
9092
<div class="col-md-6">
9193
9294
<div class="card card-info">
9395
<div class="card-header">
94-
<h3 class="card-title">'.tr('API').'</h3>
96+
<h3 class="card-title">' . tr('API e informazioni') . '</h3>
9597
</div>
9698
9799
<div class="card-body">
98-
<p>'.tr("Puoi utilizzare il token per accedere all'API del gestionale e per visualizzare il calendario su applicazioni esterne").'.</p>
99-
100-
<p>'.tr('Token personale').': <b>'.$token.'</b></p>
101-
<p>'.tr("URL dell'API").': <a href="'.$api.'" target="_blank">'.$api.'</a></p>
102-
103-
</div>
104-
</div>
105-
</div>';
106-
107-
$link = $api.'&resource=sync';
108-
echo '
109-
110-
<div class="col-md-6">
111-
<div class="card card-info">
112-
<div class="card-header">
113-
<h3 class="card-title">'.tr('Configurazione').'</h3>
114-
</div>
115-
<div class="card-body">
116-
<p>'.tr("Per _ANDROID_, scarica un'applicazione dedicata dal _LINK_", [
117-
'_ANDROID_' => '<b>'.tr('Android').'</b>',
118-
'_LINK_' => '<a href="https://play.google.com/store/search?q=iCalSync&c=apps" target="_blank">'.tr('Play Store').'</a>',
119-
]).'.</p>
120-
121-
<p>'.tr("Per _APPLE_, puoi configurare un nuovo calendario dall'app standard del calendario", [
122-
'_APPLE_' => '<b>'.tr('Apple').'</b>',
123-
]).'.</p>
100+
<p>' . tr("Puoi utilizzare il token per accedere all'API del gestionale e per visualizzare il calendario su applicazioni esterne") . '.</p>
124101
125-
<p>'.tr('Per _PC_ e altri client di posta, considerare le relative funzionalità o eventuali plugin', [
126-
'_PC_' => '<b>'.tr('PC').'</b>',
127-
]).'.</p>
102+
<p>' . tr('Token personale') . ': <b>' . $token . '</b></p>
103+
<p>' . tr("URL dell'API") . ': <a href="' . $api . '" target="_blank">' . $api . '</a></p>
104+
<hr>
105+
<p>' . tr("Token di sessione") . ': <b>' . $session_token . '</b></p>
106+
<p>' . tr("Ultimo login riuscito") . ': <b>' . Translator::timestampToLocale($last_login) . '</b></p>
128107
</div>
129108
</div>
130109
</div>
131-
</div>
110+
</div>';
132111

133-
<div class="row">
112+
echo '<div class="row">
134113
<div class="col-md-6">
135114
<div class="card card-info">
136115
<div class="card-header">
@@ -163,22 +142,41 @@
163142
echo '
164143
</div>
165144
</div>
166-
</div>
145+
</div>';
167146

147+
$link = $api . '&resource=sync';
148+
149+
echo '
168150
<div class="col-md-6">
169151
<div class="card card-info">
170152
<div class="card-header">
171-
<h3 class="card-title">'.tr('Calendario interventi').'</h3>
153+
<h3 class="card-title">'.tr('Configurazione').'</h3>
172154
</div>
173-
174155
<div class="card-body">
175-
<p>'.tr("Per accedere al calendario eventi attraverso l'API, accedi al seguente link").':</p>
176-
<a href="'.$link.'" target="_blank">'.$link.'</a>
156+
<p>'.tr("Per _ANDROID_, scarica un'applicazione dedicata dal _LINK_", [
157+
'_ANDROID_' => '<b>'.tr('Android').'</b>',
158+
'_LINK_' => '<a href="https://play.google.com/store/search?q=iCalSync&c=apps" target="_blank">'.tr('Play Store').'</a>',
159+
]).'.</p>
160+
161+
<p>'.tr("Per _APPLE_, puoi configurare un nuovo calendario dall'app standard del calendario", [
162+
'_APPLE_' => '<b>'.tr('Apple').'</b>',
163+
]).'.</p>
164+
165+
<p>'.tr('Per _PC_ e altri client di posta, considerare le relative funzionalità o eventuali plugin', [
166+
'_PC_' => '<b>'.tr('PC').'</b>',
167+
]). '.</p>
168+
169+
170+
<p>' . tr("Per accedere al calendario eventi attraverso l'API, accedi al seguente link") . ':</p>
171+
<a href="' . $link . '" target="_blank">' . $link . '</a>
172+
177173
</div>
178174
</div>
179175
</div>
180-
</div>
176+
</div>';
177+
181178

179+
echo '
182180
<script>
183181
$("[id^=impostazioni]").click(function() {
184182
caricaSezione(this);

src/AuthOSM.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,38 @@ public function getToken()
310310
return $token;
311311
}
312312

313+
/**
314+
* Restituisce il token di sessione dell'utente autenticato.
315+
*
316+
* @return string|null
317+
*/
318+
public function getSessionToken()
319+
{
320+
if (!empty($this->user)) {
321+
return $this->user->session_token;
322+
}
323+
324+
return null;
325+
}
326+
327+
/**
328+
* Restituisce la data e ora dell'ultimo login riuscito dell'utente autenticato.
329+
*
330+
* @return string|null Data e ora in formato datetime, null se non disponibile
331+
*/
332+
public function getLastLogin()
333+
{
334+
if (empty($this->user)) {
335+
return null;
336+
}
337+
338+
$database = database();
339+
340+
$result = $database->fetchOne('SELECT `created_at` FROM `zz_logs` WHERE `id_utente` = ' . prepare($this->user->id) . ' AND `stato` = ' . prepare(self::getStatus()['success']['code']) . ' ORDER BY `created_at` DESC LIMIT 1');
341+
342+
return $result['created_at'] ?? null;
343+
}
344+
313345
/**
314346
* Distrugge le informazioni riguardanti l'utente autenticato, forzando il logout.
315347
*/

0 commit comments

Comments
 (0)