public static function validMessageVersion($msgId, $version) { $db = Zend_Registry::get('my_db'); switch (DB_TYPE) { case 'mysql': $message = new MessageQueues($db); $where = "msg_id = '" . $msgId . "' and msg_type = 1"; $result = $message->fetchAll($where); $request_version = $result[0]->version; break; case 'oci8': $request = new Requests($db); $where = "request_msg_id = '" . $msgId . "'"; $result = $request->fetchAll($where); $request_version = $result[0]->VERSION; break; } $pos = strpos($request_version, '*'); if ($pos === false) { if ($version == $request_version) { return true; } else { return false; } } else { if (substr($version, 0, $pos) == substr($request_version, 0, $pos)) { return true; } else { return false; } } }
private function getFirstMessage($agent) { /* NOTE: CHRISTOPHER WHITELEY Within this section we have allowed the alteration of how SIF Ack messages are needed. If $sif_response, $sif_request, and $sif_event are set to a value of 2 then your system will work according to SIF Specifications. If you do not want to send a SIF_Ack message for any of the three message types below you can change the value to 3. This functionality was done per request of a paid support member. */ $sif_response = 2; $sif_request = 2; $sif_event = 2; $sif_ack = 2; $empty = null; $zero = 0; $id = $zero; $db = Zend_Registry::get('my_db'); # $mysql = '' # .' (' # .' Select response_id v, 1 t ' # .' from ' .DBConvertor::convertCase('response').' where status_id in (1,2) ' # .' and agent_id_requester = '.$agent->agentId.' and context_id = '.$_SESSION['CONTEXT_ID'].' and zone_id = '.$_SESSION['ZONE_ID'] # .') ' # .' union all ' # .' (' # .' Select request_id v, 2 t ' # .' from ' .DBConvertor::convertCase('request').' where status_id in (1,2) ' # .' and agent_id_responder = '.$agent->agentId.' and context_id = '.$_SESSION['CONTEXT_ID'].' and zone_id = '.$_SESSION['ZONE_ID'] # .') ' # .' union all ' # .' (' # .'Select event_id v, 3 t ' # .' from ' .DBConvertor::convertCase('event').' where status_id in (1,2) ' # .' and agent_id_rec = '.$agent->agentId.' and context_id = '.$_SESSION['CONTEXT_ID'].' and zone_id = '.$_SESSION['ZONE_ID'] # .')' # .' ORDER BY t, v LIMIT 1'; $oracle = 'Select v, t from ( Select response_id v, 1 t ' . ' from ' . DBConvertor::convertCase('response') . ' where status_id in (1,2) ' . ' and agent_id_requester = ' . $agent->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ' union all ' . 'Select request_id v, 2 t ' . 'from ' . DBConvertor::convertCase('request') . ' where status_id in (1,2) ' . ' and agent_id_responder = ' . $agent->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ' union all ' . 'Select event_id v, 3 t ' . ' from ' . DBConvertor::convertCase('event') . ' where status_id in (1,2) ' . ' and agent_id_rec = ' . $agent->agentId . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ') ORDER BY t, v'; $mysql = 'select id, msg_type, data ' . ' from ' . DBConvertor::convertCase('messagequeue') . ' where agt_id_out = ' . $agent->agentId . ' and zone_id = ' . $_SESSION['ZONE_ID'] . ' and context_id = ' . $_SESSION['CONTEXT_ID'] . ' and status_id in (1,2) ' . ' order by status_id desc, msg_type asc, insert_timestamp asc' . ' Limit 1'; switch (DB_TYPE) { case 'mysql': $sql = $mysql; break; case 'oci8': $sql = $oracle; $db->setLobAsString(true); break; } try { $stmt = $db->query($sql); $result = $stmt->fetchAll(); } catch (Zend_Exception $e) { ZitLog::writeToErrorLog("[SystemControl]", "Errors:{$e->getTraceAsString}() \n \n {$sql}", "Try|Catch block", $_SESSION['ZONE_ID']); GeneralError::systemError($xml); } switch (DB_TYPE) { case 'mysql': $id = isset($result[0]->id) ? $result[0]->id : $zero; # $msgType = isset($result[0]->msg_type) ? $result[0]->msg_type : $zero; $msgType = 4; $XMLData = isset($result[0]->data) ? $result[0]->data : $zero; break; case 'oci8': $id = isset($result[0]->V) ? $result[0]->V : $zero; $msgType = isset($result[0]->T) ? $result[0]->T : $zero; break; } // ZitLog::writeToErrorLog("[SystemControl]", "id: $id --> msgType: $msgType\n\n", "Record Found?", $_SESSION['ZONE_ID']); if ($id != $zero) { switch ($msgType) { case 1: /***** ORACLE ONLY $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $response = new Responses($db); $where = "response_id = {$id}"; $result2 = $response->fetchAll($where); foreach ($result2 as $row) { switch (DB_TYPE) { case 'mysql': $status_id = $row->status_id; $responseData = $row->response_data; break; case 'oci8': $status_id = $row->STATUS_ID; $responseData = $row->RESPONSE_DATA; break; } } $dom = new DomDocument(); $dom->loadXML($responseData); $headerNode = $dom->getElementsByTagName('SIF_Header')->item(0); $msgId = $headerNode->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $data = array(DBConvertor::convertCase('status_id') => $sif_response, DBConvertor::convertCase('msg_id') => $msgId); $n = $response->update($data, 'response_id = ' . $id); return $responseData; break; case 2: /***** ORACLE ONLY $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $request = new Requests($db); $where = "request_id = {$id}"; $result = $request->fetchAll($where); foreach ($result as $row) { switch (DB_TYPE) { case 'mysql': $status_id = $row->status_id; $requestData = $row->request_data; break; case 'oci8': $status_id = $row->STATUS_ID; $messageDataXML = $row->REQUEST_DATA; // $requestData = $messageDataXML->read($messageDataXML->size()); $requestData = $messageDataXML; break; } } $dom = new DomDocument(); $dom->loadXML($requestData); $headerNode = $dom->getElementsByTagName('SIF_Header')->item(0); $msgId = $headerNode->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $data = array(DBConvertor::convertCase('status_id') => $sif_request, DBConvertor::convertCase('msg_id') => $msgId); $n = $request->update($data, 'request_id = ' . $id); return $requestData; break; case 3: /***** ORACLE ONLY $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $event = new Events($db); $where = "event_id = {$id}"; $result = $event->fetchAll($where); foreach ($result as $row) { switch (DB_TYPE) { case 'mysql': $status_id = $row->status_id; $eventData = $row->event_data; break; case 'oci8': $status_id = $row->STATUS_ID; $eventData = $row->EVENT_DATA; break; } } $dom = new DomDocument(); $dom->loadXML($eventData); $headerNode = $dom->getElementsByTagName('SIF_Header')->item(0); $msgId = $headerNode->getElementsByTagName('SIF_MsgId')->item(0)->nodeValue; $data = array(DBConvertor::convertCase('status_id') => $sif_event, DBConvertor::convertCase('msg_id') => $msgId); $n = $event->update($data, 'event_id = ' . $id); return $eventData; break; case 4: $message = new MessageQueues($db); /***** $SIF_ACK is used to set the status of the message read. The SIF Standard states that you should set this value to 2 so that the item can be requested again if an error happens. Setting the item to a 3 will allow you not to send a SIF_Ack Message. *****/ $data = array(DBConvertor::convertCase('status_id') => $sif_ack); $n = $message->update($data, 'id = ' . $id); return $XMLData; break; } } else { return null; } }