예제 #1
0
 /**
  * Insert a new event into database
  * @param {array} data dataset of key:value pairs to store in "data" field
  * @return {string} "" if ok; null on error
  */
 function putEvent(&$data)
 {
     $this->myLogger->enter();
     $sid = $this->sessionID;
     $onInit = false;
     // si el evento es "init" y el flag reset_events está a 1 borramos el historico de eventos antes de reinsertar
     if (intval($this->myConfig->getEnv("reset_events")) == 1 && $data['Type'] === 'init') {
         $rs = $this->query("DELETE FROM Eventos WHERE (Session={$sid})");
         if (!$rs) {
             return $this->error($this->conn->error);
         }
         $onInit = true;
     }
     // comprueba los permisos de los diversos eventos antes de aceptarlos:
     switch ($data['Type']) {
         case 'null':
             // null event: no action taken
         // null event: no action taken
         case 'init':
             // operator starts tablet application
         // operator starts tablet application
         case 'login':
             // operador hace login en el sistema
             break;
         case 'info':
             // user definded manga: no dogs
         // user definded manga: no dogs
         case 'open':
             // operator selects tanda on tablet
             $data['NombrePrueba'] = http_request('NombrePrueba', "s", "");
             $data['NombreJornada'] = http_request('NombreJornada', "s", "");
             $data['NombreManga'] = http_request('NombreManga', "s", "");
             $data['NombreRing'] = http_request('NombreRing', "s", "");
             // add additional parameters to event data
             break;
         case 'close':
             // no more dogs in tanda
             break;
             // eventos de crono manual
         // eventos de crono manual
         case 'salida':
             // juez da orden de salida ( crono 15 segundos )
         // juez da orden de salida ( crono 15 segundos )
         case 'start':
             // Crono manual - value: timestamp
         // Crono manual - value: timestamp
         case 'stop':
             // Crono manual - value: timestamp
             break;
             // en crono electronico se pasan dos valores 'Tim' Tiempo a mostrar 'Value': timestamp
         // en crono electronico se pasan dos valores 'Tim' Tiempo a mostrar 'Value': timestamp
         case 'crono_start':
             // Arranque Crono electronico
         // Arranque Crono electronico
         case 'crono_restart':
             // manual to auto transition
         // manual to auto transition
         case 'crono_int':
             // Tiempo intermedio Crono electronico
         // Tiempo intermedio Crono electronico
         case 'crono_stop':
             // Parada Crono electronico
         // Parada Crono electronico
         case 'crono_rec':
             // Llamada a reconocimiento de pista
         // Llamada a reconocimiento de pista
         case 'crono_dat':
             // Envio de Falta/Rehuse/Eliminado desde el crono
         // Envio de Falta/Rehuse/Eliminado desde el crono
         case 'crono_reset':
             // puesta a cero del contador
         // puesta a cero del contador
         case 'crono_error':
             // error en alineamiento de sensores
             if (!$this->myAuth->allowed(ENABLE_CHRONO)) {
                 $this->myLogger->info("Ignore chrono events: licencse forbids");
                 return array('errorMsg' => 'Current license does not allow chrono handling');
             }
             // silently ignore
             break;
             // entrada de datos, dato siguiente, cancelar operacion
         // entrada de datos, dato siguiente, cancelar operacion
         case 'llamada':
             // operador abre panel de entrada de datos
             // retrieve additional textual data
             $data['Numero'] = http_request('Numero', "i", 0);
             $data['Nombre'] = http_request('Nombre', "s", "");
             $data['NombreLargo'] = http_request('NombreLargo', "s", "");
             $data['NombreGuia'] = http_request('NombreGuia', "s", "");
             $data['NombreClub'] = http_request('NombreClub', "s", "");
             $data['NombreEquipo'] = http_request('NombreEquipo', "s", "");
             $data['Categoria'] = http_request('Categoria', "s", "-");
             $data['Grado'] = http_request('Grado', "s", "-");
             break;
         case 'datos':
             // actualizar datos (si algun valor es -1 o nulo se debe ignorar)
         // actualizar datos (si algun valor es -1 o nulo se debe ignorar)
         case 'aceptar':
             // grabar datos finales
         // grabar datos finales
         case 'cancelar':
             // restaurar datos originales
             break;
             // eventos de cambio de camara para videomarcadores
             // el campo data contiene la variable "Value" (url del stream ) y "mode" { mjpeg,h264,ogg,webm }
         // eventos de cambio de camara para videomarcadores
         // el campo data contiene la variable "Value" (url del stream ) y "mode" { mjpeg,h264,ogg,webm }
         case 'camera':
             // cambio de fuente de streaming
             if (!$this->myAuth->allowed(ENABLE_VIDEOWALL)) {
                 $this->myLogger->info("Ignore camera events: licencse forbids");
                 return array('errorMsg' => 'Current license does not allow LiveStream handling');
             }
             // silently ignore
             break;
         case 'reconfig':
             // cambio en la configuracion del servidor
             if (!$this->myAuth->access(PERMS_ADMIN)) {
                 $this->myLogger->info("Ignore reconfig events: not enough permissions");
                 return array('errorMsg' => 'Only Admin users cand send reconfiguration events');
             }
             break;
         default:
             $this->myLogger->error("Unknown event type:" . $data['Type']);
             return "";
     }
     // iniciamos los valores
     // $timestamp= date('Y-m-d G:i:s');
     $timestamp = date('Y-m-d G:i:s', $data['TimeStamp'] / 1000);
     $source = $data['Source'];
     $type = $data['Type'];
     $evtdata = json_encode($data);
     // prepare statement
     $sql = "INSERT INTO Eventos ( TimeStamp,Session, Source, Type, Data ) VALUES (?,{$sid},?,?,?)";
     $this->myLogger->trace("Events::insert() Source:{$source} Type:{$type} Data:{$evtdata}");
     $stmt = $this->conn->prepare($sql);
     if (!$stmt) {
         return $this->error($this->conn->error);
     }
     $res = $stmt->bind_param('ssss', $timestamp, $source, $type, $evtdata);
     if (!$res) {
         return $this->error($this->conn->error);
     }
     // invocamos la orden SQL y devolvemos el resultado
     $res = $stmt->execute();
     if (!$res) {
         return $this->error($this->conn->error);
     }
     // retrieve EventID on newly create event
     $data['TimeStamp'] = $timestamp;
     $data['ID'] = $this->conn->insert_id;
     $stmt->close();
     // and save content to event file
     $flag = $this->myConfig->getEnv("register_events");
     $str = json_encode($data);
     if (boolval($flag)) {
         if ($onInit) {
             file_put_contents($this->sessionFile, $str . "\n", LOCK_EX);
         } else {
             file_put_contents($this->sessionFile, $str . "\n", FILE_APPEND | LOCK_EX);
         }
     } else {
         // as touch() doesn't work if "no_atime" flag is enabled (SSD devices)
         // just overwrite event file with last event
         file_put_contents($this->sessionFile, $str . "\n", LOCK_EX);
     }
     // if printer is enabled, send every "accept" events
     if ($data['Type'] == 'aceptar') {
         $p = new RawPrinter();
         $p->rawprinter_Print($data);
     }
     // that's all.
     $this->myLogger->leave();
     return "";
 }
예제 #2
0
         $ev = new Eventos("SaveConfig", 1, $am);
         $ev->reconfigure();
         break;
     case "defaultConfig":
         $am->access(PERMS_ADMIN);
         $config = Config::getInstance();
         $result = $config->defaultConfig();
         $ev = new Eventos("DefaultConfig", 1, $am);
         $ev->reconfigure();
         break;
     case "printerCheck":
         $am->access(PERMS_OPERATOR);
         $config = Config::getInstance();
         $pname = http_request("event_printer", "s", "");
         $pwide = http_request("wide_printer", "i", -1);
         $printer = new RawPrinter($pname, $pwide);
         $printer->rawprinter_check();
         break;
     default:
         throw new Exception("adminFunctions:: invalid operation: '{$operation}' provided");
 }
 if ($result === null) {
     throw new Exception($adm->errormsg);
 }
 // error
 if ($result === "ok") {
     return;
 }
 // don't generate any aditional response
 if ($result === "") {
     $result = array('success' => true);