'Issues', '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 Issues', 'form_submit_update' => 'Update', 'base' => '', 'UpdatedAt' => 'isUpdatedAt', 'DeletedAt' => 'isDeletedAt', ]; $this->crud = new Crud($params, service('request')); }// __construct protected function field_options() { $fields = []; $fields['isIDissue'] = ['label' => 'ID', 'helper' => 'Identificativo univoco del record nel database']; $fields['isTipologia'] = ['label' => 'Tipologia', 'helper' => 'Tipologia dell\'issue', 'required' => true]; $fields['isStato'] = ['label' => 'Stato', 'helper' => 'Stato dell\'issue', 'required' => true]; $fields['isIDlavoratore'] = [ 'label' => 'Lavoratore', 'required' => true, 'type' => 'dropdown', 'helper' => 'Lavoratore che inserisce l\'issue', 'relation' => [ 'table'=> 'Lavoratori', 'primary_key' => 'lvIDlavoratore', 'display' => ['lvNickname', 'lvNome', 'lvCognome'], //'display' => ['lvNickname'], 'order_by' => 'lvNickname', 'order' => 'ASC' ] ]; $fields['isTesto'] = ['label' => 'Testo', 'helper' => 'Testo descrittivo della issue','required' => true]; $fields['isCreatedAt'] = ['label' => 'Created At', 'helper' => 'Data di creazione del record relativo nel database', 'only_edit'=> true]; $fields['isUpdatedAt'] = ['label' => 'Updated At', 'helper' => 'Timestamp dell\'ultimo aggiornamento del record nel database', 'type' => 'unset']; $fields['isDeletedAt'] = ['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(['isIDissue', 'isTipologia', 'isStato', 'isIDlavoratore', 'isTesto', 'isCreatedAt', 'isUpdatedAt', 'isDeletedAt']); } //-------------------------------------------------------------------- // Auto CRUD terminato //-------------------------------------------------------------------- public function View() { helper(['tools','form']); $data['tab'] = 'admin'; // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Issues/show -> Error code 001'); } return redirect()->to('/dashboard'); } // Ricavo i relativi eventi: $mev = new Issues_Model(); $mev->join('Lavoratori', 'Lavoratori.lvIDlavoratore = Issues.isIDlavoratore'); // Per ora niente filtro, poi in futuro forse // imposto l'ordinamento richiesto: CheckSort('Issues',true); $data['sortCol'] = session()->get('sort')['col']; $data['sortDir'] = session()->get('sort')['dir']; $mev->orderBy($data['sortCol'], $data['sortDir']); // eseguo la query con paginazione: $data['dataset'] = $mev->paginate(session()->get('pager_num')); $data['pager'] = $mev->pager; return view('/pages/issues', $data); }//function select //-------------------------------------------------------------------- public function add() { helper(['tools','form']); $data['tab'] = 'admin'; $data['add'] = true; $data['title'] = 'Dettagli dell\'Issue:'; // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Issues/add -> Error code 001'); } return redirect()->to('/Lavoratori/login'); } // Ricavo livello del lavoratore (solo amministratori o superiori, possono editare tutti i campi) $data['enable'] = $enable = CheckLevel(3, false); // Gestione POST if ($this->request->getMethod() == 'post') { // Regole per validare i campi introdotti nel form: $rules = [ 'Tipologia' => 'trim|required', 'Stato' => 'trim|required', 'Descrizione' => 'trim|required|min_length[8]', ]; if ($enable){ $rules['IDlavoratore'] = 'trim|required'; } // 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'inserimento $newData = [ //isIDissue' => $this->request->getVar('IDlavoratore'), 'isTipologia' => $this->request->getVar('Tipologia'), 'isStato' => $this->request->getVar('Stato'), 'isTesto' => $this->request->getVar('Descrizione'), ]; if ($enable){ $newData['isIDlavoratore'] = $this->request->getVar('IDlavoratore'); } else { $newData['isIDlavoratore'] = session()->get('lavoratore')->lvIDlavoratore; } $model = new Issues_Model(); if ($model->save($newData)) { // issue inserito con successo, aggiorno lo stato della SIM session()->setFlashdata('success', 'issue inserito con successo'); // apro la pagina desiderata in base al pulsante utilizzato: if(isset($_POST['crea_continua'])) { // è stato premuto il secondo pulsante, quindi inserisco un secondo valore: //return redirect()->to('/dashboard/orari'); } else { return redirect()->to('/Issues/View'); } } else { // errore durante l'inserimento dell'issue session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.'); } }// analisi validazione }// Gestione POST // Ricavo i dati per il select dei lavoratori: $modelLavoratori = new Lavoratori_Model(); $data['select_lavoratori'] = $modelLavoratori->get_select(); // Show form echo view('pages/form/Issues_form_add_edit', $data); }//function add //-------------------------------------------------------------------- public function edit($IDissue = null) { helper(['tools','form']); $data['tab'] = 'admin'; $data['add'] = false; $data['title'] = 'Dettagli dell\'Issue:'; // Verifico dato introdotto: if ($IDissue==null) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Issues/edit -> Error code 001'); } return redirect()->to('/dashboard'); } // Ricavo livello del lavoratore (solo amministratori o superiori, possono editare tutti i campi) $data['enable'] = $enable = CheckLevel(3, false); // Ricavo l'issue selezionato, completo di tutti i particolari: $model = new Issues_Model(); $model->join('Lavoratori', 'Issues.isIDlavoratore = Lavoratori.lvIDlavoratore'); $data['issue'] = $model->where('isIDissue', $IDissue) ->first(); // Verifico che esista il record: if (null==$data['issue']) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Issues/edit -> Error code 003'); } return redirect()->to('/dashboard'); } // Gestione POST if ($this->request->getMethod() == 'post') { // Regole per validare i campi introdotti nel form: $rules = [ 'Tipologia' => 'trim|required', 'Stato' => 'trim|required', 'Descrizione' => 'trim|required|min_length[8]', ]; if ($enable){ $rules['IDlavoratore'] = 'trim|required'; } // 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'inserimento $newData = [ 'isIDissue' => $IDissue, 'isTipologia' => $this->request->getVar('Tipologia'), 'isStato' => $this->request->getVar('Stato'), 'isTesto' => $this->request->getVar('Descrizione'), ]; if ($enable){ $newData['isIDlavoratore'] = $this->request->getVar('IDlavoratore'); } if ($model->save($newData)) { // issue inserito con successo, aggiorno lo stato della carta session()->setFlashdata('success', 'issue aggiornato con successo'); // apro la pagina desiderata in base al pulsante utilizzato: if(isset($_POST['crea_continua'])) { // è stato premuto il secondo pulsante, quindi inserisco un secondo valore: //return redirect()->to('/dashboard/orari'); } else { return redirect()->to('/Issues/View'); } } else { // errore durante l'inserimento dell'issue session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.'); } }// analisi validazione }// Gestione POST // Ricavo i dati per il select dei lavoratori: $modelLavoratori = new Lavoratori_Model(); $data['select_lavoratori'] = $modelLavoratori->get_select(); // Show form echo view('pages/form/Issues_form_add_edit', $data); }//function edit //-------------------------------------------------------------------- public function delete($IDissue = null){ helper(['tools']); $data = []; // Ricavo l'issue selezionato, completo di tutti i particolari: $model = new Issues_Model(); $model->join('Lavoratori', 'Issues.isIDlavoratore = Lavoratori.lvIDlavoratore'); $issue = $model->where('isIDissue', $IDissue) ->first(); // Verifico che esista il record: if (null==$issue) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Issues/delete -> Error code 001'); } return redirect()->to('/dashboard'); } // Verifico sessione e livello: if (!(CheckLevel(3) || session()->get('lavoratore')->lvIDlavoratore==$issue->isIDlavoratore)) { session()->setFlashdata('warning', 'Non si hanno i permessi per cancellare un issue inserito da altri lavoratori.'); return redirect()->to('/Issues/show'); } // Elimino il record: if ($model->delete($IDissue)) { // issue cancellato, aggiorno stato della macchina relativa session()->setFlashdata('success', 'Record cancellato correttamente.'); } else { $data['validation'] = $this->validator; session()->setFlashdata('warning', 'Errore durante la cancellazione del record.'); } // Show profile return redirect()->to('/Issues/View'); } // function delete($id) //-------------------------------------------------------------------- public function export_csv(){ helper(['tools','form']); // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/SIMs/export_csv -> Error code 001'); } return redirect()->to('/Issues/show'); } // Ricavo gli eventi della sim: // Tab: Issues = ['isIDissue', 'isTipologia', 'isStato', 'isIDlavoratore', 'isTesto', 'isCreatedAt', 'isUpdatedAt', 'isDeletedAt']; $mev = new Issues_Model(); $mev->join('Lavoratori', 'Issues.isIDlavoratore = Lavoratori.lvIDlavoratore'); // Per ora niente filtro, poi in futuro forse // imposto l'ordinamento richiesto: CheckSort('Issues',true); $data['sortCol'] = session()->get('sort')['col']; $data['sortDir'] = session()->get('sort')['dir']; $mev->orderBy($data['sortCol'], $data['sortDir']); // eseguo la query: $data['dataset'] = $mev->asArray() ->findAll(); // Imposto il nome del file da downloadare: $filepath = $_SERVER['MRK_FILE_PATH']; $filename = 'CSiCoDB_Issues_il_' . date('Y-m-d_H-i-s') . '.csv'; // file creation $file = fopen($filepath . $filename,"w"); // Esport header fputcsv($file,['Issue della web app:']); fputcsv($file,['ID issue', 'Tipologia', 'Stato', 'Descrizione issue', 'ID Lavoratore', 'Nickname', 'Created At', 'Updated At']); foreach ($data['dataset'] as $line){ //fputcsv($file,$line); // Seleziono le colonne da esportare: $record = []; $record['isIDissue'] = $line['isIDissue']; $record['isTipologia'] = $line['isTipologia']; $record['isStato'] = $line['isStato']; $record['isTesto'] = $line['isTesto']; $record['isIDlavoratore'] = $line['isIDlavoratore']; $record['lvNickname'] = $line['lvNickname']; $record['isCreatedAt'] = $line['isCreatedAt']; $record['isUpdatedAt'] = $line['isUpdatedAt']; fputcsv($file,$record); } // Chiudo il file fclose($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 //-------------------------------------------------------------------- }