/** * 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 ""; }
$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);