public function execute() { global $gvPath; // Trim data $this->desk_number = trim($this->desk_number); $this->desk_ip_address = trim($this->desk_ip_address); // Data validation if ($this->desk_number === '' && $this->desk_ip_address === '') { $this->message = "Errore: tutti i campi sono obbligatori."; return true; } // desk_number should contain... numbers if (preg_match('/^[1-9][0-9]*$/', $this->desk_number) !== 1) { $this->message = "Errore: il numero dello sportello non è valido."; return true; } // Check ip_address if (!filter_var($this->desk_ip_address, FILTER_VALIDATE_IP)) { $this->message = "Errore: l'indirizzo IP non è valido."; return true; } $desk = Desk::fromDatabaseByNumber($this->desk_number); if ($desk && ($this->desk_id === 0 || $this->desk_id !== (int) $desk->getId())) { $this->message = "Errore: il numero sportello non è disponibile."; return true; } unset($desk); // Check ip is not taken $desk = Desk::fromDatabaseByIpAddress($this->desk_ip_address); $device = Device::fromDatabaseByIpAddress($this->desk_ip_address); if ($device || $desk && ($this->desk_id === 0 || $this->desk_id !== (int) $desk->getId())) { $this->message = "Errore: l'indirizzo IP è gia stato assegnato."; return true; } unset($desk); if ($this->desk_id === 0) { $desk = Desk::newRecord(); } else { $desk = Desk::fromDatabaseById($this->desk_id); } if ($desk->isOpen()) { $this->message = "Errore: il desk è aperto. Chiudere la sessione prima di continuare."; return true; } $desk->setNumber($this->desk_number); $desk->setIpAddress($this->desk_ip_address); if ($desk->save()) { gfSetDelayedMsg('Operazione effettuata correttamente', 'Ok'); $redirect = new RedirectOutput("{$gvPath}/application/adminDeskList"); return $redirect; } else { $this->message = "Impossibile salvare le modifiche. Ritentare in seguito."; return true; } }
public static function start() { global $gvSessionTimeout; if (session_status() != PHP_SESSION_NONE) { return; } session_start(); if (isset($_SESSION['lastActivity'])) { if (time() - $_SESSION['lastActivity'] >= $gvSessionTimeout) { if (isset($_SESSION['op_code'])) { Operator::clearTableForLogout($_SESSION['op_code']); } // Session expired session_destroy(); unset($_SESSION); session_start(); session_regenerate_id(); gfSetDelayedMsg('La sessione è scaduta.', 'Err'); } } $_SESSION['lastActivity'] = time(); // Set userlevel if (!isset($_SESSION['userLevel'])) { $_SESSION['userLevel'] = Page::NORMAL_USER; } if (isset($_SESSION['op_code'])) { $op = Operator::fromDatabaseByCode($_SESSION['op_code']); if ($op) { // This is not really a session variable // It will be reloaded at every request // It's just to be used in other classes $_SESSION['operator'] = $op; if (!isset($_SESSION['td_served'])) { $_SESSION['td_served'] = array(); } } else { // Operator deleted while still logged in? self::logoutOperator(); } } if (isset($_SESSION['desk_number'])) { $desk = Desk::fromDatabaseByNumber($_SESSION['desk_number']); if ($desk) { $_SESSION['desk'] = $desk; $desk->updateLastActivityTime(); $desk->save(); } else { self::logoutOperator(); } } }
private function getDesk() { if (!$this->desk) { if (isset($_SESSION['desk'])) { $this->desk = $_SESSION['desk']; } else { if (isset($_SESSION['desk_number'])) { $this->desk = Desk::fromDatabaseByNumber($_SESSION['desk_number']); } else { throw new Exception("Unable to retrieve operator's desk."); } } } return $this->desk; }
if ($content = getContentForRedirect($dev, (int) $deskNumber)) { $output = new JsonOutput(); $output->setContent($content); $output->output(); exit; } // Response is json $output = new JsonOutput(); $pageTicketCode = gfGetVar('ticketCode', ''); $pageTicketNumber = gfGetVar('ticketNumber', ''); $startTime = time(); while (time() - $startTime < 120) { sleep(1); // Check every second // Update table for session timed out $desk = Desk::fromDatabaseByNumber($deskNumber); $desk->isOpen(); $currentTicket = Ticket::fromDatabaseByDesk($deskNumber); if (!$currentTicket) { if ($pageTicketCode == '' && $pageTicketNumber == '') { // Still no ticket continue; } // Desk is closing send empty stuff $output->setContent(array('status' => 'changed', 'code' => '', 'number' => '')); $output->output(); die; } if ($currentTicket->getCode() != $pageTicketCode || $currentTicket->getNumber() != $pageTicketNumber) { // New ticket called $output->setContent(array('status' => 'changed', 'code' => $currentTicket->getCode(), 'number' => $currentTicket->getNumber()));
public function execute() { global $gvPath; // Trim data $this->dev_ip_address = trim($this->dev_ip_address); $this->dev_desk_number = trim($this->dev_desk_number); // Data validation if ($this->dev_ip_address === '' || $this->dev_desk_number === '') { $this->message = "Errore: tutti i campi sono obbligatori."; return true; } // dev_desk_number should contain... numbers if (preg_match('/^(0|[1-9][0-9]*)$/', $this->dev_desk_number) !== 1) { $this->message = "Errore: il numero dello sportello non è valido."; return true; } // Check ip_address if (!filter_var($this->dev_ip_address, FILTER_VALIDATE_IP)) { $this->message = "Errore: l'indirizzo IP non è valido."; return true; } // Check if desk number really exists if ((int) $this->dev_desk_number !== 0) { $desk = Desk::fromDatabaseByNumber($this->dev_desk_number); if (!$desk) { $this->message = "Errore: lo sportello specificato non esiste."; return true; } unset($desk); } // Check tdCode exists and active if ($this->dev_td_code) { $td = TopicalDomain::fromDatabaseByCode($this->dev_td_code); if (!$td || !$td->getActive()) { $this->message = "Errore: l'area tematica selezionata non è disponibile."; return true; } } // Check ip is not taken $device = Device::fromDatabaseByIpAddress($this->dev_ip_address); $desk = Desk::fromDatabaseByIpAddress($this->dev_ip_address); if ($desk || $device && ($this->dev_id === 0 || $this->dev_id !== (int) $device->getId())) { $this->message = "Errore: l'indirizzo IP è gia stato assegnato."; return true; } unset($device); if ($this->dev_id === 0) { $device = Device::newRecord(); } else { $device = Device::fromDatabaseById($this->dev_id); } $device->setIpAddress($this->dev_ip_address); $device->setDeskNumber($this->dev_desk_number); $device->setTdCode($this->dev_td_code); if ($device->save()) { gfSetDelayedMsg('Operazione effettuata correttamente', 'Ok'); $redirect = new RedirectOutput("{$gvPath}/application/adminDeviceList"); return $redirect; } else { $this->message = "Impossibile salvare le modifiche. Ritentare in seguito."; return true; } }