'Lavoratori', 'dev' => false, 'fields' => $this->field_options(), 'form_title_add' => 'Add Issue', 'form_title_update' => 'Edit Issue', 'form_submit' => 'Add', 'table_title' => 'Pagina per la tabella Lavoratori', 'form_submit_update' => 'Update', 'base' => '', 'UpdatedAt' => 'lvUpdatedAt', 'DeletedAt' => 'lvDeletedAt', ]; $this->crud = new Crud($params, service('request')); }// __construct protected function field_options() { $fields = []; $fields['lvIDlavoratore'] = ['label' => 'ID Lavoratore']; $fields['lvNome'] = ['label' => 'Nome', 'helper' => 'Nome del lavoratore (max 64 caratteri)', 'required' => true]; $fields['lvCognome'] = ['label' => 'Cognome', 'helper' => 'Cognome del lavoratore (max 64 caratteri)', 'required' => true]; $fields['lvMail'] = ['label' => 'email', 'helper' => 'Indirizzo mail del lavoratore (max 128 caratteri)', 'required' => true, 'unique' => [true, 'lvMail']]; $fields['lvLevel'] = ['label' => 'Livello', 'helper' => 'Livello di accesso alla webapp: 0=Guest; 1=Oper; 2=Inven; 3=Admin; 4=Root', 'required' => true]; $fields['lvRimborsoKm'] = ['label' => '€/Km', 'helper' => 'Rimborso chilometrico riconosciuto al lavoratore', 'required' => true]; $fields['lvNickname'] = ['label' => 'Nickname', 'helper' => 'Nickname del lavoratore nella forma CSiCoCCN', 'required' => true, 'unique' => [true, 'lvNickname']]; $fields['lvPassword'] = [ 'label' => 'Password', 'required' => true, 'only_add' => true, 'type' => 'password', 'confirm' => true, 'password_hash' => true, 'helper' => 'Password per il riconoscimento del lavoratore (min 8 caratteri)' ]; $fields['lvCreatedAt'] = ['label' => 'Created at', 'helper' => 'Data di creazione del record relativo nel database', 'only_edit'=> true]; $fields['lvUpdatedAt'] = ['label' => 'Updated at', 'helper' => 'Timestamp dell\'ultimo aggiornamento del record nel database', 'type' => 'unset']; $fields['lvDeletedAt'] = ['label' => 'Deleted at', 'helper' => 'Data di cancellazione del record relativo nel database', 'type' => 'unset']; return $fields; }// field_options public function index() { return $this->CRUD_view(['lvIDlavoratore', 'lvNickname', 'lvNome', 'lvCognome', 'lvMail', 'lvLevel', 'lvRimborsoKm', 'lvCreatedAt', 'lvUpdatedAt', 'lvDeletedAt']); } //-------------------------------------------------------------------- // Auto CRUD terminato //-------------------------------------------------------------------- // funzione per reinizializzare un utente senza loggarsi, utile in caso di problemi per avere un nuovo amministratore e potersi collegare. // http://localhost/Lavoratori/reinizzializza/CSiCoAlm/4/password/127 public function Reinizzializza($Nickname = 'CSiCoZZZ', $Level = '0', $Password = 'password', $CheckId = 0){ if ($CheckId<>127) { // Se non siamo loggati session()->setFlashdata('danger', 'Reinizzializzazione del lavoratore non autorizzata.'); return redirect()->to('/dashboard'); } // Ricavo l'ID del lavoratore indicato: $model = new Lavoratori_Model(); $lav = $model->where('lvNickname', $Nickname) ->first(); if (!isset($lav)) { // Lavoratore non trovato session()->setFlashdata('danger', 'Lavoratore da reinizzializzare non trovato.'); return redirect()->to('/dashboard'); } // Preparo i dati per l'aggiornamento $newData = [ 'lvIDlavoratore' => $lav->lvIDlavoratore, 'lvLevel' => $Level, 'lvPassword' => $Password, ]; // Eseguo update del record if ($model->save($newData)) { session()->setFlashdata('success', 'Lavoratore reinizzializzato correttamente.'); return redirect()->to('/dashboard'); } else { session()->setFlashdata('warning', 'Reinizzializzazione non riuscita.'); return redirect()->to('/dashboard'); } } // function Reinizzializza //-------------------------------------------------------------------- public function logout(){ session()->destroy(); return redirect()->to('/Lavoratori/login'); }//function logout //-------------------------------------------------------------------- public function login (){ $data = []; helper(['tools','form']); // Gestione POST data dal form if ($this->request->getMethod() == 'post') { // Regole per validare i campi introdotti nel form: $rules = [ 'Nickname' => 'required|min_length[8]|max_length[8]', 'Password' => 'required|min_length[8]|max_length[255]', ]; // analisi della validazione if (! $this->validate($rules)) { // Validazione non passata, mostro errori sulla flash di warning $data['validation'] = $this->validator; session()->setFlashdata('warning', $data['validation']->listErrors()); } else { // validazione passata // ricavo il lavoratore dai dati inseriti $model = new Lavoratori_Model(); $lav = $model->where('lvNickname', $this->request->getVar('Nickname')) ->first(); if (isset($lav) && (password_verify($this->request->getVar('Password'), $lav->lvPassword))) { // Verifico se lavoratore abilitato: if (password_verify($this->request->getVar('Password'), $lav->lvPassword)){ // Utente riconosciuto, inizio la sessione di lavoro if (setUserSession($lav)){ session()->setFlashdata('success', 'Utente abilitato correttamente'); return redirect()->to('/dashboard'); } else { session()->setFlashdata('warning', 'Errore durante la creazione della sessione di lavoro.
Riprovare e se l\'errore si ripete, contattare l\'amministratore.'); } } else { // utente non riconosciuto, ritorno al login session()->setFlashdata('warning', 'Errore, lavoratore non riconosciuto.
Riprovare e se l\'errore si ripete, contattare l\'amministratore.'); } } else { // Coppia nickname/password non corretta. session()->setFlashdata('warning', 'Errore, lavoratore non riconosciuto.
Riprovare e se l\'errore si ripete, contattare l\'amministratore.'); } }// analisi della validazione }// Gestione POST data dal form // Show login page echo view('pages/lavoratori/lavoratori_form_login', $data); }//function login //-------------------------------------------------------------------- public function profile($id = null){ $data = []; helper(['tools','form']); $model = new Lavoratori_Model(); // Verifico sessione e livello: if (!CheckLevel(0)) { return redirect()->to('/dashboard'); } // Ricavo livello del lavoratore (solo amministratori o superiori, possono editare tutte del lavoratore) $enable = CheckLevel(3,false); // Ricavo l'ID del lavoratore di cui editare il profilo: if (!isset($id)) { $id = session()->get('lavoratore')->lvIDlavoratore; } // Ricavo il profilo del lavoratore da editare $lav = $model->where('lvIDlavoratore', $id) ->first(); // Gestione POST if ($this->request->getMethod() == 'post') { // Regole per validare i campi introdotti nel form: // // L'utente normale può editare solo nome, cognome e quando vuole anche la password. // L'utente amministratore o superiore, può editare tutto dell'utente. $rules = [ //'IDlavoratore' => '', 'Nome' => 'trim|required|min_length[3]|max_length[64]', 'Cognome' => 'trim|required|min_length[3]|max_length[64]', ]; if ($enable){ $rules['Mail'] = 'required|min_length[6]|max_length[50]|valid_email'; $rules['Nickname'] = 'trim|required|min_length[8]|max_length[8]'; $rules['RimborsoKm'] = 'required'; } if($this->request->getPost('NewPassword') != ''){ $rules['NewPassword'] = 'required|min_length[8]|max_length[255]'; $rules['ConfirmNewPassword'] = 'matches[NewPassword]'; } // analisi della validazione if (! $this->validate($rules)) { $data['validation'] = $this->validator; session()->setFlashdata('warning', $data['validation']->listErrors()); }else{ // validazione passata // Preparo i dati per l'aggiornamento $newData = [ 'lvIDlavoratore' => $lav->lvIDlavoratore, 'lvNome' => $this->request->getVar('Nome'), 'lvCognome' => $this->request->getVar('Cognome'), ]; if ($enable){ $newData['lvLevel'] = $this->request->getVar('Livello'); $newData['lvMail'] = $this->request->getVar('Mail'); $newData['lvNickname'] = $this->request->getVar('Nickname'); $newData['lvRimborsoKm'] = $this->request->getVar('RimborsoKm'); } if($this->request->getPost('NewPassword') != ''){ $newData['lvPassword'] = $this->request->getPost('NewPassword'); } if ($model->save($newData)) { session()->setFlashdata('success', 'Successfuly Updated'); return redirect()->to('/dashboard'); } else { session()->setFlashdata('danger', 'Errore durante l\'update del record nel DB.'); } }// analisi validazione }// Gestione POST // Rileggo i dati dal DB $data['lavoratore'] = $lav; $data['enable'] = $enable; // Show profile echo view('pages/lavoratori/lavoratori_form_profile', $data); } // function profile //-------------------------------------------------------------------- public function delete($id = null){ $data = []; helper(['tools','form']); // Verifico sessione e livello: if (!CheckLevel(3,false)) { return redirect()->to('/Lavoratori/anagrafica'); } // Verifico di non cancellare me stesso: if (session()->get('lavoratore')->lvIDlavoratore==$id) { session()->setFlashdata('warning', 'L\'utente non può cancellare se stesso.'); return redirect()->to('/Lavoratori/anagrafica'); } // Elimino il record: $model = new Lavoratori_Model(); if ($model->delete($id)) { session()->setFlashdata('success', 'Recors cancellato correttamente.'); } else { session()->setFlashdata('warning', 'Errore durante la cancellazione del record.'); } return redirect()->to('/Lavoratori/anagrafica'); } // function delete //-------------------------------------------------------------------- public function register(){ $data = []; helper(['tools','form']); // // Verifico sessione e livello: // if (CheckLevel(0,false)) { return redirect()->to('/dashboard'); } // non faccio il test così lo uso anche per creare nuovo utente dalla pagina anagrafica // Gestione POST data dal form if ($this->request->getMethod() == 'post') { // Regole per validare i campi introdotti nel form: $rules = [ 'Nome' => 'required|min_length[3]|max_length[64]', 'Cognome' => 'required|min_length[3]|max_length[64]', 'Password' => 'required|min_length[8]|max_length[255]', 'PasswordConfirm' => 'matches[Password]', ]; // analisi della validazione if (! $this->validate($rules)) { // Validazione non passata, mostro errori sulla flash di warning $data['validation'] = $this->validator; session()->setFlashdata('warning', $data['validation']->listErrors()); }else{ // validazione passata $model = new Lavoratori_Model(); $nom = $this->request->getVar('Nome'); $cogn = $this->request->getVar('Cognome'); // Preparo i dati del nuovo record $newData = [ 'lvNome' => $nom, 'lvCognome' => $cogn, 'lvMail' => strtolower($nom) . "." . strtolower($cogn) . "@csico.it", 'lvLevel' => 0, 'lvRimborsoKm' => 0.0, 'lvNickname' => 'CSiCo'.(substr(strtoupper($cogn), 0, 1)).(substr(strtolower($cogn), 1, 1)).(substr(strtolower($nom), 0, 1)), 'lvPassword' => $this->request->getVar('Password'), ]; // Inserisco il nuovo record if ($model->save($newData)){ session()->setFlashdata('success', 'Dati acquisiti, attendere la mail di conferma per l\'abilitazione completa'); //return redirect()->to('/dashboard'); return redirect()->to('/Lavoratori/anagrafica'); // uso register anche nell'anagrafica } else { session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.'); } }// analisi validazione }// Gestione POST echo view('pages/lavoratori/lavoratori_form_register', $data); } // function register //-------------------------------------------------------------------- public function anagrafica(){ $data['tab'] = 'amministrazione'; helper(['tools','form']); // Verifico sessione e livello: if (!CheckLevel(1)) { return redirect()->to('/dashboard'); } $model = new Lavoratori_Model(); // imposto l'ordinamento richiesto: CheckSort('anagrafica',true); $data['sortCol'] = session()->get('sort')['col']; $data['sortDir'] = session()->get('sort')['dir']; $model->orderBy($data['sortCol'], $data['sortDir']); // // imposto l'ordinamento richiesto: // $order_field = session()->get('sort_lavoratori_field'); // $order_direction = session()->get('sort_lavoratori_val'); // $model->orderBy($order_field, $order_direction); $data['dataset'] = $model->paginate(session()->get('pager_num')); $data['pager'] = $model->pager; // Show anagrafica echo view('pages/lavoratori/lavoratori_anagrafica', $data); } // function anagrafica //-------------------------------------------------------------------- // Funzione per resettare la password dell'utente indicato con la standard password. // TODO Deve inviare mail di conferma all'utente. public function reset($id){ $data = []; helper(['tools','form']); // Verifico sessione e livello: if (!CheckLevel(0)) { return redirect()->to('/Lavoratori/login'); } // Se non abbiamo il livello amministrativo non posso resettare la password a meno che non sia la mia. $lav = session()->get('lavoratore'); if ((CheckLevel(3, false)) || ($lav->lvIDlavoratore==$id)){ //Resetto password con quella standard: password // Preparo i dati per l'aggiornamento $newData = [ 'lvIDlavoratore' => $id, 'lvPassword' => 'password', ]; // Eseguo update del record $model = new Lavoratori_Model(); if ($model->save($newData)) { session()->setFlashdata('success', 'Password resettata correttamente.'); } else { session()->setFlashdata('warning', 'Reset password non riuscito.'); } } else{ // non resetto la password session()->setFlashdata('warning', 'Reset password non consentito.'); } return redirect()->to('/Lavoratori/anagrafica'); } // function reset //-------------------------------------------------------------------- public function export_csv(){ helper(['tools']); // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Lavoratori/export_csv -> Error code 001'); } return redirect()->to('/dashboard'); } // Ricavo le ore dell'utente: // Tab: Lavoratori = ['lvIDlavoratore', 'lvNome', 'lvCognome', 'lvMail', 'lvLevel', 'lvRimborsoKm', 'lvNickname', 'lvPassword', 'lvCreatedAt', 'lvUpdatedAt', 'lvDeletedAt']; $model = new Lavoratori_Model(); // imposto l'ordinamento richiesto: CheckSort('anagrafica',true); $sortCol = session()->get('sort')['col']; $sortDir = session()->get('sort')['dir']; $model->orderBy($sortCol, $sortDir); // eseguo la query: $data['dataset'] = $model->asArray() ->findAll(); // Imposto il nome del file da downloadare: $filepath = $_SERVER['MRK_FILE_PATH']; $filename = 'CSiCoDB_Lavoratori_il_' . date('Y-m-d_H-i-s') . '.csv'; // file creation $file = fopen($filepath . $filename,"w"); // Esport header fputcsv($file,['ID','Nome','Cognome','Mail','Level','RimborsoKm','Nickname','Hash Password','CreatedAt','UpdatedAt','DeletedAt']); foreach ($data['dataset'] as $line){ fputcsv($file,$line); } // Chiudo il file // download header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=".$filename); header("Content-Type: application/csv; "); readfile($filepath . $filename); // deleting file unlink($filepath . $filename); exit(); }//function export_csv //-------------------------------------------------------------------- }//class Lavoratori