public function handle_input(&$request) { $vd = new ViewDescriptor(); $vd->setPagina($request['page']); // $this->setImpToken($vd, $request); //utente non autentificato if (!$this->loggedIn()) { $this->showLoginPage($vd); } else { $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); if (isset($request["subpage"])) { switch ($request["subpage"]) { case 'gestione_ordini': $ordini = OrdineFactory::instance()->getListaOrdiniAttivi(); $vd->setSottoPagina('gestione_ordini'); break; default: $vd->setSottoPagina('home'); break; } } if (isset($request["cmd"])) { switch ($request["cmd"]) { case 'logout': $this->logout($vd); break; case 'invia': $msg = array(); $ordini = OrdineFactory::instance()->getListaOrdiniAttivi(); if (isset($request['id'])) { if (OrdineFactory::instance()->chiudiOrdinePerId($request['id']) != 1) { $msg[] = '<li>L\'ordine #' . $request['id'] . ' non è valido</li>'; } } $this->creaFeedbackUtente($msg, $vd, 'Ordine #' . $request['id'] . ' inviato'); $vd->setSottoPagina('gestione_ordini'); $this->showHomeAdmin($vd); /* Non mostra il msg di errore/conferma */ header('Location: ' . Settings::getApplicationPath() . 'php/admin/gestione_ordini'); exit; /* ************************************ */ break; default: $this->showHomeAdmin($vd); } } else { // nessun comando $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); $this->showHomeUser($vd); } } require basename(__DIR__) . '/../view/master.php'; }
/** * Metodo per gestire l'input dell'utente. * @param type $request la richiesta da gestire */ public function handleInput(&$request) { // creo il descrittore della vista $vd = new ViewDescriptor(); // imposto la pagina $vd->setPagina($request['page']); // imposto il token per impersonare un utente (nel lo stia facendo) $this->setImpToken($vd, $request); if (!$this->loggedIn()) { // utente non autenticato, rimando alla home $this->showLoginPage($vd); } else { // utente autenticato $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); // verifico quale sia la sottopagina della categoria // Docente da servire ed imposto il descrittore // della vista per caricare i "pezzi" delle pagine corretti // tutte le variabili che vengono create senza essere utilizzate // direttamente in questo switch, sono quelle che vengono poi lette // dalla vista, ed utilizzano le classi del modello if (isset($request["subpage"])) { switch ($request["subpage"]) { // modifica dei dati anagrafici case 'anagrafica': $dipartimenti = DipartimentoFactory::instance()->getDipartimenti(); $vd->setSottoPagina('anagrafica'); break; // inserimento di una lista di appelli // inserimento di una lista di appelli case 'appelli': $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); $vd->setSottoPagina('appelli'); break; // modifica di un appello // modifica di un appello case 'appelli_modifica': $msg = array(); $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $mod_appello = $this->getAppello($request, $msg); $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); if (!isset($mod_appello)) { $vd->setSottoPagina('appelli'); } else { $vd->setSottoPagina('appelli_modifica'); } break; // creazione di un appello // creazione di un appello case 'appelli_crea': $msg = array(); $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); if (!isset($request['cmd'])) { $vd->setSottoPagina('appelli'); } else { $vd->setSottoPagina('appelli_crea'); } break; // visualizzazione della lista di iscritti ad un appello // visualizzazione della lista di iscritti ad un appello case 'appelli_iscritti': $msg = array(); $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $mod_appello = $this->getAppello($request, $msg); if (!isset($mod_appello)) { $vd->setSottoPagina('appelli'); } else { $vd->setSottoPagina('appelli_iscritti'); } break; // registrazione degli esami // con visualizzazione delle liste attive // registrazione degli esami // con visualizzazione delle liste attive case 'reg_esami': if (!isset($_SESSION[self::elenco])) { $_SESSION[self::elenco] = array(); } $elenco_id = $this->getIdElenco($request, $msg, $_SESSION); $elenchi_attivi = $_SESSION[self::elenco]; $vd->setSottoPagina('reg_esami'); break; // registrazione degli esami, passo 1: // selezione dell'insegnamento // registrazione degli esami, passo 1: // selezione dell'insegnamento case 'reg_esami_step1': $msg = array(); // ricerco l'elenco da modificare, e' possibile gestirne // piu' di uno con lo stesso browser $elenco_id = $this->getIdElenco($request, $msg, $_SESSION); $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); $docenti = UserFactory::instance()->getListaDocenti(); if (isset($elenco_id)) { $sel_insegnamento = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getInsegnamento(); } $vd->setSottoPagina('reg_esami_step1'); break; // registrazione degli esami, passo 2: // selezione della commissione // registrazione degli esami, passo 2: // selezione della commissione case 'reg_esami_step2': $msg = array(); $docenti = UserFactory::instance()->getListaDocenti(); // ricerco l'elenco da modificare, e' possibile gestirne // piu' di uno con lo stesso browser $elenco_id = $this->getIdElenco($request, $msg, $_SESSION); $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); $elenchi_attivi = $_SESSION[self::elenco]; if (isset($elenco_id)) { $commissione = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione(); $sel_insegnamento = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getInsegnamento(); $sel_esami = $_SESSION[self::elenco][$elenco_id]->getEsami(); // se l'insegnamento non e' stato specificato lo rimandiamo // al passo precedente if (!isset($sel_insegnamento)) { $vd->setSottoPagina('reg_esami_step1'); } else { $vd->setSottoPagina('reg_esami_step2'); } } else { $vd->setSottoPagina('reg_esami'); } break; // registrazione degli esami, passo 3: // inserimento statini // registrazione degli esami, passo 3: // inserimento statini case 'reg_esami_step3': $msg = array(); $docenti = UserFactory::instance()->getListaDocenti(); // ricerco l'elenco da modificare, e' possibile gestirne // piu' di uno con lo stesso browser $elenco_id = $this->getIdElenco($request, $msg, $_SESSION); $elenchi_attivi = $_SESSION[self::elenco]; if (isset($elenco_id)) { $commissione = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione(); $sel_insegnamento = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getInsegnamento(); $sel_esami = $_SESSION[self::elenco][$elenco_id]->getEsami(); // se l'insegnamento non e' stato specificato lo // rimandiamo al passo 1 if (!isset($sel_insegnamento)) { $vd->setSottoPagina('reg_esami_step1'); // se la commissione non e' valida lo rimandiamo al passo 2 } else { if (!isset($commissione) || !$_SESSION[self::elenco][$elenco_id]->getTemplate()->commissioneValida()) { $vd->setSottoPagina('reg_esami_step2'); } else { // tutto ok, passo 3 $vd->setSottoPagina('reg_esami_step3'); } } } else { $vd->setSottoPagina('reg_esami'); } break; // visualizzazione dell'elenco esami // visualizzazione dell'elenco esami case 'el_esami': $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); $vd->setSottoPagina('el_esami'); $vd->addScript("../js/jquery-2.1.1.min.js"); $vd->addScript("../js/elencoEsami.js"); break; // gestione della richiesta ajax di filtro esami // gestione della richiesta ajax di filtro esami case 'filtra_esami': $vd->toggleJson(); $vd->setSottoPagina('el_esami_json'); $errori = array(); if (isset($request['insegnamento']) && $request['insegnamento'] != '') { $insegnamento_id = filter_var($request['insegnamento'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if ($insegnamento_id == null) { $errori['insegnamento'] = "Specificare un identificatore valido"; } } else { $insegnamento_id = null; } if (isset($request['matricola']) && $request['matricola'] != '') { $matricola = filter_var($request['matricola'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if ($matricola == null) { $errori['matricola'] = "Specificare una matricola valida"; } } else { $matricola = null; } if (isset($request['cognome'])) { $cognome = $request['cognome']; } else { $cognome = null; } if (isset($request['nome'])) { $nome = $request['nome']; } else { $nome = null; } $esami = EsameFactory::instance()->ricercaEsami($user, $insegnamento_id, $matricola, $nome, $cognome); break; default: $vd->setSottoPagina('home'); break; } } // gestione dei comandi inviati dall'utente if (isset($request["cmd"])) { switch ($request["cmd"]) { // logout case 'logout': $this->logout($vd); break; // modifica delle informazioni sull'indirizzo dell'ufficio // modifica delle informazioni sull'indirizzo dell'ufficio case 'ufficio': $msg = array(); if (isset($request['dipartimento'])) { $intVal = filter_var($request['dipartimento'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (!isset($intVal) || $intVal < 0 || $intVal > count($dipartimenti) || $user->setDipartimento($dipartimenti[$intVal])) { $msg[] = '<li>Il dipartimento specificato non è corretto</li>'; } } $this->aggiornaIndirizzo($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Indirizzo ufficio aggiornato"); $this->showHomeUtente($vd); break; // modifica delle informazioni di contatto // modifica delle informazioni di contatto case 'contatti': $msg = array(); if (isset($request['ricevimento'])) { if (!$user->setRicevimento($request['ricevimento'])) { $msg[] = '<li>Il ricevimento specificato non è corretto</li>'; } } $this->aggiornaEmail($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Contatti aggiornati"); $this->showHomeUtente($vd); break; // modifica della password // modifica della password case 'password': $msg = array(); $this->aggiornaPassword($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Password aggiornata"); $this->showHomeUtente($vd); break; // richiesta modifica di un appello esistente, // dobbiamo mostrare le informazioni // richiesta modifica di un appello esistente, // dobbiamo mostrare le informazioni case 'a_modifica': $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); if (isset($request['appello'])) { $intVal = filter_var($request['appello'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($intVal)) { $mod_appello = $this->cercaAppelloPerId($intVal, $appelli); $insegnamenti = InsegnamentoFactory::instance()->getListaInsegnamentiPerDocente($user); //$vd->setStato('a_modifica'); } } $this->showHomeUtente($vd); break; // salvataggio delle modifiche ad un appello esistente // salvataggio delle modifiche ad un appello esistente case 'a_salva': $msg = array(); if (isset($request['appello'])) { $intVal = filter_var($request['appello'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($intVal)) { $mod_appello = $this->cercaAppelloPerId($intVal, $appelli); $this->updateAppello($mod_appello, $request, $msg); if (count($msg) == 0 && AppelloFactory::instance()->salva($mod_appello) != 1) { $msg[] = '<li> Impossibile salvare l\'appello </li>'; } $this->creaFeedbackUtente($msg, $vd, "Appello aggiornato"); if (count($msg) == 0) { $vd->setSottoPagina('appelli'); } } } else { $msg[] = '<li> Appello non specificato </li>'; } $this->showHomeUtente($vd); break; // l'utente non vuole modificare l'appello selezionato // l'utente non vuole modificare l'appello selezionato case 'a_annulla': $vd->setSottoPagina('appelli'); $this->showHomeUtente($vd); break; // richesta di visualizzazione del form per la creazione di un nuovo // appello // richesta di visualizzazione del form per la creazione di un nuovo // appello case 'a_crea': $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $vd->setSottoPagina('appelli_crea'); $this->showHomeUtente($vd); break; // creazione di un nuovo appello // creazione di un nuovo appello case 'a_nuovo': $msg = array(); $nuovo = new Appello(); $nuovo->setId(-1); $this->updateAppello($nuovo, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Appello creato"); if (count($msg) == 0) { $vd->setSottoPagina('appelli'); if (AppelloFactory::instance()->nuovo($nuovo) != 1) { $msg[] = '<li> Impossibile creare l\'appello </li>'; } } $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $this->showHomeUtente($vd); break; // mostra la lista degli iscritti // mostra la lista degli iscritti case 'a_iscritti': $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); if (isset($request['appello'])) { $intVal = filter_var($request['appello'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($intVal)) { $mod_appello = $this->cercaAppelloPerId($intVal, $appelli); } } $this->showHomeUtente($vd); break; // cancella un appello // cancella un appello case 'a_cancella': if (isset($request['appello'])) { $intVal = filter_var($request['appello'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($intVal)) { $mod_appello = AppelloFactory::instance()->cercaAppelloPerId($intVal); if ($mod_appello != null) { if (AppelloFactory::instance()->cancella($mod_appello) != 1) { $msg[] = '<li> Impossibile cancellare l\'appello </li>'; } } $this->creaFeedbackUtente($msg, $vd, "Appello eliminato"); } } $appelli = AppelloFactory::instance()->getAppelliPerDocente($user); $this->showHomeUtente($vd); break; // richiesta di creazione di un nuovo elenco di esami // richiesta di creazione di un nuovo elenco di esami case 'r_nuovo': $elenco_id = $this->prossimoIndiceElencoListe($_SESSION[self::elenco]); // salviamo gli oggetti interi in sessione $el = new ElencoEsami($elenco_id); $el->getTemplate()->setData(new DateTime()); $_SESSION[self::elenco][$elenco_id] = $el; $elenchi_attivi = $_SESSION[self::elenco]; $this->showHomeUtente($vd); break; // selezione dell'insegnamento // selezione dell'insegnamento case 'r_sel_insegnamento': if (isset($elenco_id)) { $commissione = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione(); // richiesta di andare al passo successivo if (!isset($request['insegnamento'])) { $msg[] = "<li> Non è stato selezionato un insegnamento</li>"; } else { $insegnamento = InsegnamentoFactory::instance()->creaInsegnamentoDaCodice($request['insegnamento']); if (!isset($insegnamento)) { $msg[] = "<li> L'insegnamento specificato non è corretto</li>"; } } if (count($msg) == 0) { // nessun errore, impostiamo l'insegnamento $_SESSION[self::elenco][$elenco_id]->getTemplate()->setInsegnamento($insegnamento); $sel_insegnamento = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getInsegnamento(); $vd->setSottoPagina('reg_esami_step2'); } else { $vd->setSottoPagina('reg_esami_step1'); } $this->creaFeedbackUtente($msg, $vd, "Insegnamento selezionato"); } $this->showHomeUtente($vd); break; // aggiunta di un membro della commissione // aggiunta di un membro della commissione case 'r_add_commissione': if (isset($elenco_id)) { // richiesta di aggiungere un nuovo membro $index = filter_var($request['nuovo-membro'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($index) && ($new_docente = UserFactory::instance()->cercaUtentePerId($index, User::Docente)) != null) { // docente trovato // aggiungiamo il docente alla lista if (!$_SESSION[self::elenco][$elenco_id]->getTemplate()->aggiungiMembroCommissione($new_docente)) { $msg[] = '<li>Il docente specificato è già in lista </li>'; } else { // copiamo la nuova commissione nella variabile della vista $commissione = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione(); } } else { // docente non trovato $msg[] = '<li>Impossibile trovare il docente specificato </li>'; } $this->creaFeedbackUtente($msg, $vd, "Membro aggiunto in commissione"); } $this->showHomeUtente($vd); break; // rimozione di un membro della commissione // rimozione di un membro della commissione case 'r_del_commissione': if (isset($elenco_id)) { $index = filter_var($request['index'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($index) && $index >= 0 && $index < count($commissione)) { $old_docente = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione()[$index]; if (!$_SESSION[self::elenco][$elenco_id]->getTemplate()->rimuoviMembroCommissione($old_docente)) { $msg[] = '<li>Il docente specificato non è in lista </li>'; } else { // copiamo la nuova commissione nella variabile della vista $commissione = $_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione(); } } else { $msg[] = '<li>Impossibile trovare il membro specificato </li>'; } } $this->creaFeedbackUtente($msg, $vd, "Membro rimosso dalla commissione"); $this->showHomeUtente($vd); break; // salvataggio della commissione per l'elenco // salvataggio della commissione per l'elenco case 'r_save_commissione': if (isset($elenco_id)) { if (!$_SESSION[self::elenco][$elenco_id]->getTemplate()->commissioneValida()) { $msg[] = '<li>Ci devono essere almeno due membri in commissione</li>'; } $this->creaFeedbackUtente($msg, $vd, "Commissione inserita correttamente"); if (count($msg) > 0) { $vd->setSottoPagina('reg_esami_step2'); } } $this->showHomeUtente($vd); break; // aggiunta di uno statino // aggiunta di uno statino case 'r_add_esame': if (isset($elenco_id)) { $new_esame = new Esame(); $new_esame->setInsegnamento($_SESSION[self::elenco][$elenco_id]->getTemplate()->getInsegnamento()); $new_esame->setCommissione($_SESSION[self::elenco][$elenco_id]->getTemplate()->getCommissione()); // aggiungiamo un esame alla lista if (isset($request['matricola'])) { $studente = UserFactory::instance()->cercaStudentePerMatricola($request['matricola']); if (!isset($studente)) { $msg[] = '<li>La matricola specificata non è associata ad uno studente</li>'; } else { // impostiamo lo studente $new_esame->setStudente($studente); } } else { $msg[] = '<li>Specificare una matricola</li>'; } if (isset($request['voto'])) { if (!$new_esame->setVoto($request['voto'])) { $msg[] = '<li>Il voto specificato non è corretto</li>'; } } else { $msg[] = '<li>Specificare un voto </li>'; } if (count($msg) == 0 && !$_SESSION[self::elenco][$elenco_id]->aggiungiEsame($new_esame)) { // esame duplicato $msg[] = '<li>Lo statino specificato è già presente in elenco </li>'; } else { // facciamo una copia aggiornata dell'elenco esami per la vista $sel_esami = $_SESSION[self::elenco][$elenco_id]->getEsami(); } $this->creaFeedbackUtente($msg, $vd, "Statino inserito in elenco"); } $this->showHomeUtente($vd); break; // rimozione di uno statino // rimozione di uno statino case 'r_del_esame': if (isset($elenco_id)) { $index = filter_var($request['index'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (isset($index) && $index >= 0 && $index < count($sel_esami)) { $old_statino = $_SESSION[self::elenco][$elenco_id]->getEsami()[$index]; if (!$_SESSION[self::elenco][$elenco_id]->rimuoviEsame($old_statino)) { $msg[] = '<li>L\'esame specificato non è in lista </li>'; } else { // facciamo una copia aggiornata dell'elenco esami per la vista $sel_esami = $_SESSION[self::elenco][$elenco_id]->getEsami(); } } else { $msg[] = '<li>Impossibile trovare lo statino specificato </li>'; } $this->creaFeedbackUtente($msg, $vd, "Statino eliminato correttamente"); } $this->showHomeUtente($vd); break; // salvataggio permanente dell'elenco // salvataggio permanente dell'elenco case 'r_salva_elenco': if (isset($elenco_id)) { if (count($_SESSION[self::elenco][$elenco_id]->getEsami()) > 0) { if (!EsameFactory::instance()->salvaElenco($_SESSION[self::elenco][$elenco_id])) { $msg[] = '<li> Impossibile salvare l\'elenco</li>'; } else { unset($_SESSION[self::elenco][$elenco_id]); $elenchi_attivi = $_SESSION[self::elenco]; $vd->setPagina("reg_esami"); $vd->setSottoPagina('reg_esami'); } } else { $msg[] = '<li> È necessario inserire almeno un esame</li>'; } $this->creaFeedbackUtente($msg, $vd, "Esami registrati correttamente"); } $this->showHomeUtente($vd); break; // cancellazione di un elenco // cancellazione di un elenco case 'r_del_elenco': if (isset($elenco_id) && array_key_exists($elenco_id, $_SESSION[self::elenco])) { unset($_SESSION[self::elenco][$elenco_id]); $this->creaFeedbackUtente($msg, $vd, "Elenco cancellato"); $elenchi_attivi = $_SESSION[self::elenco]; } $this->showHomeUtente($vd); break; // ricerca di un esame // ricerca di un esame case 'e_cerca': $msg = array(); $this->creaFeedbackUtente($msg, $vd, "Lo implementiamo con il db, fai conto che abbia funzionato ;)"); $this->showHomeUtente($vd); break; // default // default default: $this->showHomeUtente($vd); break; } } else { // nessun comando, dobbiamo semplicemente visualizzare // la vista // nessun comando $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); $this->showHomeUtente($vd); } } // richiamo la vista require basename(__DIR__) . '/../view/master.php'; }
/** * Metodo per gestire l'input dell'utente. * @param type $request la richiesta da gestire */ public function handleInput(&$request) { // creo il descrittore della vista $vd = new ViewDescriptor(); // imposto la pagina $vd->setPagina($request['page']); // gestion dei comandi // tutte le variabili che vengono create senza essere utilizzate // direttamente in questo switch, sono quelle che vengono poi lette // dalla vista, ed utilizzano le classi del modello if (!$this->loggedIn()) { // utente non autenticato, rimando alla home $this->showLoginPage($vd); } else { // utente autenticato $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); // verifico quale sia la sottopagina della categoria // Docente da servire ed imposto il descrittore // della vista per caricare i "pezzi" delle pagine corretti // tutte le variabili che vengono create senza essere utilizzate // direttamente in questo switch, sono quelle che vengono poi lette // dalla vista, ed utilizzano le classi del modello if (isset($request["subpage"])) { switch ($request["subpage"]) { //ad ogni pagina viene associato un valore nella variabile $_SESSION['pagina'] per fare in modo che nel menu //a sinistra appaiano informazioni guida differenti a seconda della pagina che si sta visualizzando // modifica dei dati anagrafici per le consegne a domicilio case 'anagrafica': $_SESSION['pagina'] = 'anagrafica.php'; $vd->setSottoPagina('anagrafica'); break; // Ordinazione delle Album con scelta dei quantità e dimensioni // Ordinazione delle Album con scelta dei quantità e dimensioni case 'ordina': $_SESSION['pagina'] = 'ordina.php'; $album = AlbumFactory::instance()->getAlbum(); $orari = OrarioFactory::instance()->getOrari(); $vd->setSottoPagina('ordina'); break; // visualizzazione degli ordini effettuati precedentemente // visualizzazione degli ordini effettuati precedentemente case 'elenco_ordini': $_SESSION['pagina'] = 'elenco_ordini.php'; $ordini = OrdineFactory::instance()->getOrdiniPerIdCliente($user); $vd->setSottoPagina('elenco_ordini'); break; // visualizzaza come raggiungere e i vari contatti della Albumria // visualizzaza come raggiungere e i vari contatti della Albumria case 'contatti': $_SESSION['pagina'] = 'contatti.php'; $vd->setSottoPagina('contatti'); break; default: $_SESSION['pagina'] = 'home.php'; $vd->setSottoPagina('home'); break; } } // gestione dei comandi inviati dall'utente if (isset($request["cmd"])) { // abbiamo ricevuto un comando switch ($request["cmd"]) { // logout case 'logout': $this->logout($vd); break; case 'procedi_ordine': //si verifica che i dati inseriti dall'utente relativamente a quantità e dimensione Album siano nel formato //corretto e in numero accettabile. Successivamente ad ogni tipologia di prodotto viene associato un //nuovo record nella tabella Album_ordini in cui viene indicato, oltre al numero ordine relativo, anche //la quantità di Album di quel determinato tipo che si vogliono ordinare. $vd->setSottoPagina('conferma_ordine'); $msg = array(); //carico un array con tutti gli id delle Album ordinabili $idAlbum = AlbumFactory::instance()->getIdAlbum(); //verifico se i valori inseriti dall'utente sono corretti e conto quante Album sono state ordinate in totale $nAlbum = $this->validaForm($idAlbum, $request); $flagOrario = false; //creo un nuovo ordine attualmente formato solo dall'id (che è anche l'ulitmo disponibile) $ordine = new Ordine(); $ordine->setId(OrdineFactory::instance()->getLastId()); $ordineId = $ordine->getId(); //se il numero di Album ordinate è accettabile (>0) verifico se la fascia oraria richiesta è a sua volta disponibile //per quel quantitativo di Album. se non lo è assegno quella disponibile piu vicina if ($nAlbum) { $orari = OrarioFactory::instance()->getOrariSuccessivi($request['orario']); foreach ($orari as $orario) { if (Album_ordineFactory::instance()->getNAlbumPerOrario($orario->getId()) + $nAlbum <= $orario->getOrdiniDisponibili()) { //var_dump("Album per orario ".Album_ordineFactory::instance()->getNAlbumPerOrario($orario->getId())); $ordine->setOrario($orario->getId()); $flagOrario = true; break; } else { $ordine->setOrario(NULL); } } } else { $msg[] = '<li>I valori inseriti non sono validi. Ordine annullato</li>'; $vd->setSottoPagina('ordina'); $this->creaFeedbackUtente($msg, $vd, ""); $this->showHomeUtente($vd); break; } case 'dettaglio': //mi permette di vedere i dettagli relativi a un ordine : elenco Album, quantità, prezzi singoli e totali //e richieste di consegne $_SESSION['pagina'] = 'dettaglio_ordine.php'; $ordineId = filter_var($request['ordine'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); $ordine = OrdineFactory::instance()->getOrdine($ordineId); $POs = Album_ordineFactory::instance()->getPOPerIdOrdine($ordine); $vd->setSottoPagina('dettaglio_ordine'); $this->showHomeUtente($vd); break; case 'conferma_ordine': //dopo il riepilogo dell'ordine il ciente puo' decidere se confermarlo o... $msg = array(); $ordineId = $request['ordineId']; $this->creaFeedbackUtente($msg, $vd, "Ordine " . $ordineId . " creato con successo."); $vd->setSottoPagina('home'); $this->showHomeUtente($vd); break; case 'cancella_ordine': //...cancella PO e ordine $msg = array(); $ordineId = $request['ordineId']; $p = Album_ordineFactory::instance()->cancellaPO($ordineId); $o = OrdineFactory::instance()->cancellaOrdine($ordineId); if ($p && $o) { $this->creaFeedbackUtente($msg, $vd, "Ordine " . $ordineId . " cancellato."); } else { $this->creaFeedbackUtente('<li>Errore cancellazione</li>', $vd, ""); } $vd->setSottoPagina('home'); $this->showHomeUtente($vd); break; case 'indirizzo': //aggiornamento indirizzo - l'indirizzo viene utilizzato per le consegne a domicilio $msg = array(); $this->aggiornaIndirizzo($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Indirizzo aggiornato"); $this->showHomeCliente($vd); break; case 'password': // cambio password $msg = array(); $this->aggiornaPassword($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Password aggiornata"); $this->showHomeCliente($vd); break; default: $this->showHomeUtente($vd); } } else { // nessun comando $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); $this->showHomeUtente($vd); } } // includo la vista require basename(__DIR__) . '/../view/master.php'; }
/** * Metodo per gestire l'input dell'utente. * @param type $request la richiesta da gestire */ public function handleInput(&$request) { // creo il descrittore della vista $vd = new ViewDescriptor(); // imposto la pagina $vd->setPagina($request['page']); if (!$this->loggedIn()) { // utente non autenticato, rimando alla home $this->showLoginPage($vd); } else { // utente autenticato $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); // verifico quale sia la sottopagina della categoria // Docente da servire ed imposto il descrittore // della vista per caricare i "pezzi" delle pagine corretti // tutte le variabili che vengono create senza essere utilizzate // direttamente in questo switch, sono quelle che vengono poi lette // dalla vista, ed utilizzano le classi del modello if (isset($request["subpage"])) { switch ($request["subpage"]) { // visualizza i dati anagrafici case 'anagrafica': $_SESSION['pagina'] = 'anagrafica.php'; $vd->setSottoPagina('anagrafica'); break; // gestione degli ordini eseguiti oggi // gestione degli ordini eseguiti oggi case 'gestione_ordini': $_SESSION['pagina'] = 'gestione_ordini.php'; $ordini = OrdineFactory::instance()->getOrdiniNonPagati(); $vd->setSottoPagina('gestione_ordini'); break; // ricerca di tutti gli ordini che sono stati eseguiti tramite il sito // ricerca di tutti gli ordini che sono stati eseguiti tramite il sito case 'ricerca_ordini': $_SESSION['pagina'] = 'ricerca_ordini.php'; $date = OrdineFactory::instance()->getDate(); $vd->setSottoPagina('ricerca_ordini'); $vd->addScript("../js/jquery-2.1.1.min.js"); $vd->addScript("../js/ricercaOrdini.js"); break; // utilizzo la funzione js e il json per ricercare e stampare i risultati della ricerca_ordini // utilizzo la funzione js e il json per ricercare e stampare i risultati della ricerca_ordini case 'filtra_ordini': $vd->toggleJson(); $vd->setSottoPagina('ricerca_ordini_json'); $errori = array(); if (isset($request['myData']) && $request['myData'] != '') { $data = $request['myData']; } else { $data = null; } if (isset($request['myOra']) && $request['myOra'] != '') { $ora = $request['myOra']; } else { $ora = null; } //var_dump("data ".$data." Ora " .$ora); $ordini = OrdineFactory::instance()->getOrdiniPerDataOra($data, $ora); //i dati si vedono nel js ma non nel controller ne nel json break; default: $_SESSION['pagina'] = 'home.php'; $vd->setSottoPagina('home'); break; } } // gestione dei comandi inviati dall'utente if (isset($request["cmd"])) { switch ($request["cmd"]) { // logout case 'logout': $this->logout($vd); break; case 'dettaglio': //mi permette di vedere i dettagli relativi a un ordine : elenco pizze, quantità, prezzi singoli e totali //e richieste di consegne a domicilio $_SESSION['pagina'] = 'dettaglio_ordine.php'; $ordineId = filter_var($request['ordine'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); $ordine = OrdineFactory::instance()->getOrdine($ordineId); $POs = Album_ordineFactory::instance()->getPOPerIdOrdine($ordine); $cliente = UserFactory::instance()->getClientePerId($ordine->getCliente()); $vd->setSottoPagina('dettaglio_ordine'); $this->showHomeUtente($vd); break; case 'paga': //permette al dipendente di segnalare un ordine come pagato e quindi non farlo piu apparire //nell'elenco degli ordini da gestire $msg = array(); $ordineId = filter_var($request['ordine'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (OrdineFactory::instance()->setPagato($ordineId, $user)) { $this->creaFeedbackUtente($msg, $vd, "Ordine " . $ordineId . " pagato."); } else { $this->creaFeedbackUtente($msg, $vd, "Errore cancellazione"); } $vd->setSottoPagina('gestione_ordini'); $ordini = OrdineFactory::instance()->getOrdiniNonPagati(); $this->showHomeUtente($vd); break; // default // default default: $this->showHomeUtente($vd); break; } } else { // nessun comando, dobbiamo semplicemente visualizzare la vista $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); $this->showHomeUtente($vd); } } // richiamo la vista require basename(__DIR__) . '/../view/master.php'; }
public function handle_input(&$request) { $vd = new ViewDescriptor(); $vd->setPagina($request['page']); $this->setImpToken($vd, $request); //untente non autentificato if (!$this->loggedIn()) { $this->showLoginPage($vd); } else { $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); //carica le pizze da visualizzare sulla galleria $listaPizzeConImg = PizzaFactory::instance()->getListaPizze(true); reset($listaPizzeConImg); $pizza = current($listaPizzeConImg); $index = 0; // var_dump($listaPizzeConImg); $vd->setAjaxFile(basename(__DIR__) . '/../view/ajax.php'); if (isset($request["subpage"])) { switch ($request["subpage"]) { case 'base': $vd->setSottoPagina('base'); $vd->setBreadcrumb("Modifica username o e-mail"); break; case 'password': $vd->setSottoPagina('password'); $vd->setBreadcrumb("Modifica password"); break; case 'pagamento': $pagamenti = PagamentoFactory::instance()->getListaPagamentiPerCliente($user); $vd->setSottoPagina('pagamento'); $vd->setBreadcrumb("Visualizza i tuoi metodi di pagamento"); break; case 'visualizza_pagamento': $pagamenti = PagamentoFactory::instance()->getListaPagamentiPerCliente($user); $vd->setSottoPagina('visualizza_pagamento'); $vd->setBreadcrumb("Visualizza i tuoi metodi di pagamento"); break; case 'indirizzo': $vd->setSottoPagina('indirizzo'); $vd->setBreadcrumb("Modifica indirizzo di consegna"); break; case 'account': $msg = array(); if (!isset($_SESSION[self::elenco_articoli])) { $_SESSION[self::elenco_articoli] = array(); } $vd->setSottoPagina('account'); break; case 'conferma_ordine_step1': $vd->setSottoPagina('conferma_ordine_step1'); $vd->setTitoloStep('Passo 1: seleziona indirizzo di consegna'); break; case 'conferma_ordine_step2': $vd->setSottoPagina('conferma_ordine_step2'); $vd->setTitoloStep('Passo 2: riepilogo articoli'); break; case 'conferma_ordine_step3': $vd->setSottoPagina('conferma_ordine_step3'); $vd->setTitoloStep('Passo 3: seleziona metodo di pagamento'); $pagamenti = PagamentoFactory::instance()->getListaPagamentiPerCliente($user); break; case 'cronologia_ordini': $ordini = OrdineFactory::instance()->getListaOrdiniPerCliente($user); $vd->setSottoPagina('cronologia_ordini'); $vd->setBreadcrumb("Visualizza cronologia ordini"); break; case 'ordini_attivi': $ordini = OrdineFactory::instance()->getListaOrdiniPerCliente($user, true); $vd->setSottoPagina('cronologia_ordini'); $vd->setBreadcrumb("Visualizza ordini in corso"); break; default: if (!isset($_SESSION[self::elenco_articoli])) { $_SESSION[self::elenco_articoli] = array(); } $vd->setSottoPagina('home'); break; } } if (isset($request["cmd"])) { switch ($request["cmd"]) { //salvataggio permanente elenco articoli case 'ordina': $msg = array(); if (!empty($_SESSION[self::elenco_articoli])) { if (isset($request['carta'])) { $carta = intval($request['carta']); $pagamento = PagamentoFactory::instance()->cercaPagamentoPerId($carta); if (!isset($pagamento)) { $msg[] = 'Il metodo di pagamento inserito non è valido'; $vd->setTitoloStep('Passo 3: seleziona metodo di pagamento'); $vd->setSottoPagina('conferma_ordine_step3'); } else { if (!OrdineFactory::instance()->salvaOrdine($_SESSION[self::elenco_articoli], $user->getId(), $pagamento, $this->getSubTotale(true))) { $msg[] = '<li>Spiacente. Impossibile terminare la transazione</li>'; $vd->setTitoloStep('Passo 3: seleziona metodo di pagamento'); $vd->setSottoPagina('conferma_ordine_step3'); } else { $_SESSION[self::elenco_articoli] = array(); $vd->setSottoPagina('home'); } } } $this->creaFeedbackUtente($msg, $vd, 'Ordine inviato'); } $this->showHomeCliente($vd); $pagamenti = PagamentoFactory::instance()->getListaPagamentiPerCliente($user); break; //rimuove un articolo dal carrello //rimuove un articolo dal carrello case 'remove': if (isset($request['key'])) { $key = intval($request['key']); if (array_key_exists($key, $_SESSION[self::elenco_articoli])) { $this->rimuoviArticolo($_SESSION[self::elenco_articoli][$key]); } } $subpage = $_REQUEST['subpage']; if (empty($_SESSION[self::elenco_articoli])) { $subpage = 'home'; $vd->setSottoPagina('home'); } $this->showHomeCliente($vd); header('Location: ' . Settings::getApplicationPath() . "php/cliente/{$subpage}"); exit; break; /** * è stato aggiunto un "articolo" al carrello, * ovvero una quantità di pizze di un determinato tipo e di una certa dimensione */ /** * è stato aggiunto un "articolo" al carrello, * ovvero una quantità di pizze di un determinato tipo e di una certa dimensione */ case 'add': //controlla la provenienza della richiesta: selectmenu form ... if (isset($request['pizza-selection']) && isset($request['size']) && isset($request['quantity'])) { if (PizzaFactory::instance()->cercaPizzaPerId(intval($request['pizza-selection']))) { $articolo = new ArticoloSession(PizzaFactory::instance()->cercaPizzaPerId(intval($request['pizza-selection'])), $request['size'], intval($request['quantity'])); $this->aggiungiArticolo($articolo); } } //... altrimenti gallery form if (isset($request['pizza-gallery']) && isset($request['size']) && isset($request['quantity'])) { $key = intval($request['pizza-gallery']); if (array_key_exists($key, $listaPizzeConImg)) { $articolo = new ArticoloSession(PizzaFactory::instance()->cercaPizzaPerId($listaPizzeConImg[$key]->getId()), $request['size'], intval($request['quantity'])); $this->aggiungiArticolo($articolo); } } // file_put_contents('php/text.txt', $_SERVER['REQUEST_URI'], FILE_APPEND); $vd->setSottoPagina('home'); $this->showHomeCliente($vd); /** * Evita l'auto-submit del form in seguito alla ricarica della pagina nel browser. * Problema presente anche nel progetto d'esempio: * http://spano.sc.unica.it/amm2014/davide/esami14/php/docente/reg_esami_step1?cmd=r_nuovo */ header('Location: ' . Settings::getApplicationPath() . 'php/cliente/home'); exit; break; //visualizza i dettagli di un metodo di pagamento selezionato //visualizza i dettagli di un metodo di pagamento selezionato case 'v_pagamento': $msg = array(); // var_dump($request); $p = 0; if (isset($request['carta'])) { $p = filter_var($request['carta'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (!array_key_exists($p, $pagamenti)) { $msg[] = '<li>Il metodo di pagamento specificato non è valido</li>'; $vd->setSottoPagina('pagamento'); $this->creaFeedbackUtente($msg, $vd, ''); } else { $carta = $pagamenti[$p]; $vd->setSottoPagina('visualizza_pagamento'); } } else { $vd->setSottoPagina('pagamento'); } $this->showHomeUser($vd); break; case 'aggiorna_indirizzo': $msg = array(); $this->aggiornaIndirizzo($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Indirizzo di consegna aggiornato"); $this->showHomeUser($vd); break; case 'aggiorna_password': $msg = array(); $this->aggiornaPassword($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, 'Password aggiornata'); $vd->setSottoPagina('password'); $vd->setBreadcrumb("Modifica password"); $this->showHomeUser($vd); break; // aggiorna username, e-mail // aggiorna username, e-mail case 'aggiorna_info_base': $msg = array(); $vd->setSottoPagina('base'); $vd->setBreadcrumb("Modifica username o e-mail"); $this->aggiornaInfoBase($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, 'Username/e-mail sono stati aggiornati'); $this->showHomeUser($vd); break; case 'logout': $this->logout($vd); break; // ajax: click di un bullet: cambia pizza visualizzata sulla gallery // ajax: click di un bullet: cambia pizza visualizzata sulla gallery case 'go': $vd->toggleJson(); $index = filter_var($request["id"], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (!array_key_exists($index, $listaPizzeConImg)) { $index = 0; } $pizza = $listaPizzeConImg[$index]; break; // ajax: click next arrow: visualizza la pizza successiva // ajax: click next arrow: visualizza la pizza successiva case 'next': $vd->toggleJson(); $index = filter_var($request["id"], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (!isset($index)) { $intVal = 0; } $index++; if ($index > count($listaPizzeConImg) - 1) { $index = 0; } $pizza = $listaPizzeConImg[$index]; break; // ajax: click previous arrow: visualizza la pizza precedente // ajax: click previous arrow: visualizza la pizza precedente case 'prev': $vd->toggleJson(); $index = filter_var($request["id"], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); if (!isset($index)) { $index = 0; } $index--; if ($index < 0) { $index = count($listaPizzeConImg) - 1; } $pizza = $listaPizzeConImg[$index]; break; default: $this->showHomeCliente($vd); } } else { // nessun comando $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); $this->showHomeUser($vd); } } require basename(__DIR__) . '/../view/master.php'; }
/** * Metodo per gestire l'input dell'utente. * @param type $request la richiesta da gestire */ public function handleInput(&$request) { // creo il descrittore della vista $vd = new ViewDescriptor(); // imposto la pagina $vd->setPagina($request['page']); // imposto il token per impersonare un utente (nel lo stia facendo) $this->setImpToken($vd, $request); // gestion dei comandi // tutte le variabili che vengono create senza essere utilizzate // direttamente in questo switch, sono quelle che vengono poi lette // dalla vista, ed utilizzano le classi del modello if (!$this->loggedIn()) { // utente non autenticato, rimando alla home $this->showLoginPage($vd); } else { // utente autenticato $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); // verifico quale sia la sottopagina della categoria // Docente da servire ed imposto il descrittore // della vista per caricare i "pezzi" delle pagine corretti // tutte le variabili che vengono create senza essere utilizzate // direttamente in questo switch, sono quelle che vengono poi lette // dalla vista, ed utilizzano le classi del modello if (isset($request["subpage"])) { switch ($request["subpage"]) { // modifica dei dati anagrafici case 'anagrafica': $vd->setSottoPagina('anagrafica'); break; // visualizzazione degli esami sostenuti // visualizzazione degli esami sostenuti case 'esami': $esami = EsameFactory::instance()->esamiPerStudente($user); $vd->setSottoPagina('esami'); break; // iscrizione ad un appello // iscrizione ad un appello case 'iscrizione': // carichiamo gli appelli dal db $appelli = AppelloFactory::instance()->getAppelliPerStudente($user); $vd->setSottoPagina('iscrizione'); break; default: $vd->setSottoPagina('home'); break; } } // gestione dei comandi inviati dall'utente if (isset($request["cmd"])) { // abbiamo ricevuto un comando switch ($request["cmd"]) { // logout case 'logout': $this->logout($vd); break; // aggiornamento indirizzo // aggiornamento indirizzo case 'indirizzo': // in questo array inserisco i messaggi di // cio' che non viene validato $msg = array(); $this->aggiornaIndirizzo($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Indirizzo aggiornato"); $this->showHomeUtente($vd); break; // cambio email // cambio email case 'email': // in questo array inserisco i messaggi di // cio' che non viene validato $msg = array(); $this->aggiornaEmail($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Email aggiornata"); $this->showHomeUtente($vd); break; // cambio password // cambio password case 'password': // in questo array inserisco i messaggi di // cio' che non viene validato $msg = array(); $this->aggiornaPassword($user, $request, $msg); $this->creaFeedbackUtente($msg, $vd, "Password aggiornata"); $this->showHomeStudente($vd); break; // iscrizione ad un appello // iscrizione ad un appello case 'iscrivi': // recuperiamo l'indice $msg = array(); $a = $this->getAppelloPerIndice($appelli, $request, $msg); if (isset($a)) { $isOk = $a->iscrivi($user); $count = AppelloFactory::instance()->aggiungiIscrizione($user, $a); if (!$isOk || $count != 1) { $msg[] = "<li> Impossibile cancellarti dall'appello specificato </li>"; } } else { $msg[] = "<li> Impossibile iscriverti all'appello specificato. Verifica la capienza del corso </li>"; } $this->creaFeedbackUtente($msg, $vd, "Ti sei iscritto all'appello specificato"); $this->showHomeStudente($vd); break; // cancellazione da un appello // cancellazione da un appello case 'cancella': // recuperiamo l'indice $msg = array(); $a = $this->getAppelloPerIndice($appelli, $request, $msg); if (isset($a)) { $isOk = $a->cancella($user); $count = AppelloFactory::instance()->cancellaIscrizione($user, $a); if (!$isOk || $count != 1) { $msg[] = "<li> Impossibile cancellarti dall'appello specificato </li>"; } } else { $msg[] = "<li> Impossibile cancellarti dall'appello specificato </li>"; } $this->creaFeedbackUtente($msg, $vd, "Ti sei cancellato dall'appello specificato"); $this->showHomeUtente($vd); break; default: $this->showLoginPage($vd); } } else { // nessun comando $user = UserFactory::instance()->cercaUtentePerId($_SESSION[BaseController::user], $_SESSION[BaseController::role]); $this->showHomeUtente($vd); } } // includo la vista require basename(__DIR__) . '/../view/master.php'; }
/** * Crea un messaggio di feedback per l'utente * @param array $msg lista di messaggi di errore * @param ViewDescriptor $vd il descrittore della pagina * @param string $okMsg il messaggio da mostrare nel caso non ci siano errori */ protected function creaFeedbackUtente(&$msg, $vd, $okMsg) { if (count($msg) > 0) { // ci sono messaggi di errore nell'array, // qualcosa e' andato storto... $error = "Si sono verificati i seguenti errori:\n<ul>\n"; foreach ($msg as $m) { $error = $error . $m . "\n"; } // imposto il messaggio di errore $vd->setMessaggioErrore($error); } else { // non ci sono messaggi di errore, la procedura e' andata // quindi a buon fine, mostro un messaggio di conferma $vd->setMessaggioConferma($okMsg); } }