Introduzione pagina personale (#116)
Introduzione di una pagina personale per l'utente, con la possbilità di modificare la propria password (#116).
This commit is contained in:
parent
90bdad2b98
commit
c85bb159fa
|
@ -3,6 +3,7 @@
|
|||
include_once __DIR__.'/../core.php';
|
||||
|
||||
$paths = App::getPaths();
|
||||
$user = Auth::user();
|
||||
|
||||
// Istanziamento della barra di debug
|
||||
if (!empty($debug)) {
|
||||
|
@ -210,7 +211,10 @@ if (Auth::check()) {
|
|||
<!-- Sidebar user panel -->
|
||||
<div class="user-panel text-center info">
|
||||
<div class="info">
|
||||
<p>'.$_SESSION['username'].'</p>
|
||||
<p><a href="'.$rootdir.'/modules/utenti/info.php">
|
||||
<i class="fa fa-user"></i>
|
||||
'.$user['username'].'
|
||||
</a></p>
|
||||
<p id="datetime"></p>
|
||||
</div>
|
||||
|
||||
|
|
14
info.php
14
info.php
|
@ -3,15 +3,15 @@ include_once __DIR__.'/core.php';
|
|||
$pageTitle = 'Info';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include($docroot.'/include/custom/top.php');
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include($docroot.'/include/top.php');
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
?>
|
||||
<div class="box">
|
||||
<div class="box-header">
|
||||
<img src="<?php echo $img; ?>/logo.png" alt="<?php echo tr('OSM Logo'); ?>">
|
||||
<h3 class="box-title"><?php echo tr('OpenSTAManager'); ?></h3>
|
||||
<h3 class="box-title"><?php echo tr('OpenSTAManager'); ?></h3>
|
||||
<div class="pull-right">
|
||||
<i class="fa fa-info"></i> <?php echo tr('Informazioni'); ?>
|
||||
</div>
|
||||
|
@ -20,7 +20,7 @@ if (file_exists($docroot.'/include/custom/top.php')) {
|
|||
<div class="box-body">
|
||||
<?php
|
||||
if (file_exists('assistenza.php')) {
|
||||
include('assistenza.php');
|
||||
include 'assistenza.php';
|
||||
} else {
|
||||
?>
|
||||
<div class="row">
|
||||
|
@ -144,9 +144,7 @@ if (file_exists('assistenza.php')) {
|
|||
|
||||
<?php
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include($docroot.'/include/custom/bottom.php');
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include($docroot.'/include/bottom.php');
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
||||
?>
|
||||
|
||||
|
|
|
@ -61,6 +61,11 @@ switch (filter('op')) {
|
|||
$_SESSION['errors'][] = tr('Utente già esistente!');
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($id_record)) {
|
||||
redirect(ROOTDIR.'/modules/utenti/info.php');
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Aggiunta di un nuovo utente
|
||||
|
|
|
@ -4,20 +4,7 @@ switch ($resource) {
|
|||
case 'login':
|
||||
// Controllo sulle credenziali
|
||||
if (Auth::getInstance()->attempt($request['username'], $request['password'])) {
|
||||
$user = Auth::user();
|
||||
|
||||
// Generazione del token per l'utente
|
||||
$tokens = $database->fetchArray('SELECT `token` FROM `zz_tokens` WHERE `enabled` = 1 AND `id_utente` = '.prepare($user['id_utente']));
|
||||
if (empty($tokens)) {
|
||||
$token = secure_random_string();
|
||||
|
||||
$database->insert('zz_tokens', [
|
||||
'id_utente' => $user['id_utente'],
|
||||
'token' => $token,
|
||||
]);
|
||||
} else {
|
||||
$token = $tokens[0]['token'];
|
||||
}
|
||||
$token = Auth::getInstance()->getToken();
|
||||
|
||||
// Informazioni da restituire tramite l'API
|
||||
$results = $dbo->fetchArray('SELECT `ragione_sociale`, `codice`, `piva`, `codice_fiscale`, `indirizzo`, `citta`, `provincia`, (SELECT `nome` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione, `telefono`, `fax`, `cellulare`, `an_anagrafiche`.`email` FROM `zz_users` LEFT JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica` WHERE `id` = '.prepare($user['id_utente']))[0];
|
||||
|
|
|
@ -65,7 +65,7 @@ if (!empty($utenti)) {
|
|||
|
||||
// Cambio password e nome utente
|
||||
echo '
|
||||
<a href="" data-href="'.$rootdir.'/modules/'.Modules::get($id_module)['directory'].'/user.php?id_utente='.$utente['id'].'&idgruppo='.$record['id'].'" class="text-warning tip" data-toggle="modal" data-target="#bs-popup" title="Aggiorna dati utente"" data-title="Aggiorna dati utente"><i class="fa fa-2x fa-unlock-alt"></i></a>';
|
||||
<a href="" data-href="'.$rootdir.'/modules/'.Modules::get($id_module)['directory'].'/user.php?id_utente='.$utente['id'].'&idgruppo='.$record['id'].'" class="text-warning tip" data-toggle="modal" data-target="#bs-popup" title="Aggiorna dati utente" data-title="Aggiorna dati utente"><i class="fa fa-2x fa-unlock-alt"></i></a>';
|
||||
|
||||
// Eliminazione utente, se diverso da id_utente #1 (admin)
|
||||
if ($utente['id'] != '1') {
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
$skip_permissions = true;
|
||||
include __DIR__.'/../../core.php';
|
||||
|
||||
$pageTitle = 'Utente';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/top.php')) {
|
||||
include $docroot.'/include/custom/top.php';
|
||||
} else {
|
||||
include $docroot.'/include/top.php';
|
||||
}
|
||||
|
||||
$user = Auth::user();
|
||||
$token = Auth::getInstance()->getToken();
|
||||
|
||||
echo '
|
||||
<div class="box">
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">'.tr("Informazioni sull'utente").'</h3>
|
||||
</div>
|
||||
|
||||
<div class="box-body">';
|
||||
|
||||
// Cambio password e nome utente
|
||||
echo '
|
||||
<div>
|
||||
<p>'.tr('Utente').':'.$user['username'].'</p>
|
||||
|
||||
<a class="btn btn-info" data-href="'.$rootdir.'/modules/'.Modules::get('Utenti e permessi')['directory'].'/user.php" class="text-warning tip" data-toggle="modal" data-target="#bs-popup" data-title="Cambia password">
|
||||
<i class="fa fa-unlock-alt"></i> '.tr('Cambia password').'
|
||||
</a>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div>
|
||||
<h4>'.tr('Token personale').': '.$token.'</h4>
|
||||
<p>'.tr("Puoi utilizzare il token per accedere all'API del gestionale e per visualizzare il calendario su applicazioni esterne").'</p>
|
||||
</div>';
|
||||
|
||||
$link = BASEURL.'/api/?token='.$token.'&resource=sync';
|
||||
echo '
|
||||
<h3>'.tr('Calendario interventi').'</h3>
|
||||
|
||||
<div>
|
||||
<p>'.tr("Per accedere al calendario eventi attraverso l'API, accedi al seguente link").':</p>
|
||||
<a href="'.$link.'" target="_blank">'.$link.'</a>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<h4>'.tr('Configurazione').'</h4>
|
||||
<div>
|
||||
<p>'.tr('Per _ANDROID_, scarica _LINK_', [
|
||||
'_ANDROID_' => '<b>'.tr('Android').'</b>',
|
||||
'_LINK_' => '<a href="https://play.google.com/store/apps/details?id=org.kc.and.ical&hl=it" target="_blank"><b>'.tr('iCalSync2').'</b></a>',
|
||||
]).'.</p>
|
||||
|
||||
<p>'.tr("Per _APPLE_, puoi configurare un nuovo calendario dall'app standard del calendario", [
|
||||
'_APPLE_' => '<b>'.tr('Apple').'</b>',
|
||||
]).'.</p>
|
||||
|
||||
<p>'.tr('Per _PC_ e altri client di posta, considerare le relative funzionalità o eventuali plugin delle relative applicazioni', [
|
||||
'_PC_' => '<b>'.tr('PC').'</b>',
|
||||
]).'.</p>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
if (file_exists($docroot.'/include/custom/bottom.php')) {
|
||||
include $docroot.'/include/custom/bottom.php';
|
||||
} else {
|
||||
include $docroot.'/include/bottom.php';
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
include __DIR__.'/../../core.php';
|
||||
|
||||
?>
|
||||
<div class="text-center">
|
||||
<h4>Per generare il link per visualizzare il calendario su applicazioni esterne, inserisci username e password qui sotto, poi copia il link nella tua applicazione:</h4>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<div class="row fields">
|
||||
<div class="col-md-offset-3 col-md-3">
|
||||
<div class="form-group">
|
||||
<label>Username:</label>
|
||||
<input type="text" class="form-control" id="username">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label>Password:</label>
|
||||
<input type="password" class="form-control" id="password">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row fields">
|
||||
<div class="col-md-offset-3 col-md-6">
|
||||
<div class="form-group">
|
||||
<label>LINK:</label>
|
||||
<input type="text" class="form-control text-center" id="link" value="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row fields">
|
||||
<div class="col-md-offset-3 col-md-6">
|
||||
Per <b>Android</b>, scarica <a href="https://play.google.com/store/apps/details?id=org.kc.and.ical&hl=it" target="_blank"><b>iCalSync2</b></a>.<br><br>
|
||||
|
||||
Per <b>Apple</b>, puoi configurare un nuovo calendario dall'app standard del calendario, specificando l'URL sopra.<br><br>
|
||||
|
||||
Per <b>PC</b>, per altri client di posta, considerare le relative funzionalità o eventuali plugin.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$('.fields input').on('keyup change', function(){
|
||||
$('#link').val( "<?php echo $rootdir; ?>/modules/osmsync/sync_interventi.php?username="+$('#username').val()+"&password="+$('#password').val() );
|
||||
});
|
||||
|
||||
$('#link').on('click', function(){
|
||||
$(this).select();
|
||||
});
|
||||
|
||||
$('.fields input').trigger('change');
|
||||
</script>
|
|
@ -6,18 +6,26 @@ include_once __DIR__.'/../../core.php';
|
|||
$min_length = 8;
|
||||
$min_length_username = 4;
|
||||
|
||||
$idgruppo = intval(filter('idgruppo'));
|
||||
$id_utente = filter('id_utente');
|
||||
$self_edit = Modules::getPermission('Utenti e permessi') == 'rw' && filter('id_utente') != null;
|
||||
|
||||
if ($self_edit) {
|
||||
$idgruppo = intval(filter('idgruppo'));
|
||||
$id_utente = filter('id_utente');
|
||||
} else {
|
||||
$user = Auth::user();
|
||||
|
||||
$id_utente = $user['id'];
|
||||
}
|
||||
|
||||
if (!empty($id_utente)) {
|
||||
$value = 'change_pwd';
|
||||
$op = 'change_pwd';
|
||||
$message = tr('Modifica');
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT idanagrafica, idtipoanagrafica, username FROM zz_users WHERE id='.prepare($id_utente));
|
||||
$username = $rs[0]['username'];
|
||||
$id_anagrafica = $rs[0]['idtipoanagrafica'].'-'.$rs[0]['idanagrafica'];
|
||||
} else {
|
||||
$value = 'adduser';
|
||||
$op = 'adduser';
|
||||
$message = tr('Aggiungi');
|
||||
|
||||
$username = '';
|
||||
|
@ -26,46 +34,62 @@ if (!empty($id_utente)) {
|
|||
|
||||
echo '
|
||||
<form id="link_form" action="'.$rootdir.'/editor.php?id_module='.Modules::get('Utenti e permessi')['id'].'&id_record='.$idgruppo.'" method="post">
|
||||
<input type="hidden" name="op" value="'.$value.'">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="'.$op.'">
|
||||
<input type="hidden" name="min_length" value="'.$min_length.'">
|
||||
<input type="hidden" name="min_length_username" value="'.$min_length_username.'">';
|
||||
<input type="hidden" name="min_length_username" value="'.$min_length_username.'">';
|
||||
|
||||
if (!empty($id_utente)) {
|
||||
echo '
|
||||
<input type="hidden" name="id_utente" value="'.$id_utente.'">';
|
||||
}
|
||||
echo '
|
||||
|
||||
if ($self_edit) {
|
||||
echo '
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$username.'" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<input type="hidden" id="username" name="username" value="'.$username.'">';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
{[ "type": "password", "label": "'.tr('Password').'", "name": "password1", "required": 1, "value": "" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
{[ "type": "password", "label": "'.tr('Ripeti la password').'", "name": "password2", "value": "" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
if ($self_edit) {
|
||||
echo '
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
{[ "type": "select", "label": "'.tr('Collega ad una anagrafica').'", "name": "idanag", "values": "query=SELECT CONCAT(`an_tipianagrafiche`.`idtipoanagrafica`, \'-\', `an_anagrafiche`.`idanagrafica`) AS \'id\', `ragione_sociale` AS \'descrizione\', `descrizione` AS \'optgroup\' FROM `an_tipianagrafiche` INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_tipianagrafiche`.`idtipoanagrafica`=`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica` INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica`=`an_tipianagrafiche_anagrafiche`.`idanagrafica` ORDER BY `descrizione` ASC", "value": "'.$id_anagrafica.'" ]}
|
||||
</div>
|
||||
</div>';
|
||||
</div>';
|
||||
} else {
|
||||
echo '
|
||||
<input type="hidden" id="idanag" name="idanag" value="'.$id_anagrafica.'">';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
||||
<button type="button" onclick="do_submit()" class="btn btn-primary"><i class="fa fa-plus"></i> '.$message.'</button>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
var min_length = '.$min_length.';
|
||||
var min_length_username = '.$min_length_username.';
|
||||
|
|
31
src/Auth.php
31
src/Auth.php
|
@ -247,6 +247,37 @@ class Auth extends \Util\Singleton
|
|||
return $this->infos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il token di accesso all'API per l'utente autenticato.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getToken()
|
||||
{
|
||||
$token = null;
|
||||
|
||||
if ($this->isAuthenticated()) {
|
||||
$user = self::user();
|
||||
|
||||
$database = Database::getConnection();
|
||||
$tokens = $database->fetchArray('SELECT `token` FROM `zz_tokens` WHERE `enabled` = 1 AND `id_utente` = '.prepare($user['id_utente']));
|
||||
|
||||
// Generazione del token per l'utente
|
||||
if (empty($tokens)) {
|
||||
$token = secure_random_string();
|
||||
|
||||
$database->insert('zz_tokens', [
|
||||
'id_utente' => $user['id_utente'],
|
||||
'token' => $token,
|
||||
]);
|
||||
} else {
|
||||
$token = $tokens[0]['token'];
|
||||
}
|
||||
}
|
||||
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Distrugge le informazioni riguardanti l'utente autenticato, forzando il logout.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue