コード例 #1
0
ファイル: ACK.php プロジェクト: jabrehu/Net_HL7
 /**
  * Usage:
  * <code>
  * $ack = new Net_HL7_Messages_ACK($request);
  * </code>
  *
  * Convenience module implementing an acknowledgement (ACK) message. This
  * can be used in HL7 servers to create an acknowledgement for an
  * incoming message.
  *
  * @version    0.10
  * @author     D.A.Dokter <*****@*****.**>
  * @access     public
  * @category   Networking
  * @package    Net_HL7
  * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  */
 public function __construct($req = "", $reqMsh = null)
 {
     parent::__construct();
     if ($req) {
         $msh = $req->getSegmentByIndex(0);
         if ($msh) {
             $msh = new Net_HL7_Segments_MSH($msh->getFields(1));
         } else {
             $msh = new Net_HL7_Segments_MSH();
         }
     } else {
         $msh = new Net_HL7_Segments_MSH();
     }
     $msa = new Net_HL7_Segment("MSA");
     // Determine acknowledge mode: normal or enhanced
     //
     if ($req && ($msh->getField(15) || $msh->getField(16))) {
         $this->_ACK_TYPE = "E";
         $msa->setField(1, "CA");
     } else {
         $this->_ACK_TYPE = "N";
         $msa->setField(1, "AA");
     }
     $this->addSegment($msh);
     $this->addSegment($msa);
     $msh->setField(9, "ACK");
     // Construct an ACK based on the request
     if ($req && $reqMsh) {
         $msh->setField(3, $reqMsh->getField(5));
         $msh->setField(4, $reqMsh->getField(6));
         $msh->setField(5, $reqMsh->getField(3));
         $msh->setField(6, $reqMsh->getField(4));
         $msa->setField(2, $reqMsh->getField(10));
     }
 }
コード例 #2
0
<?php

require_once "Net/HL7/Segments/MSH.php";
require_once "Net/HL7/Message.php";
require_once "Net/HL7/Connection.php";
require_once "test_base.php";
$msg = new Net_HL7_Message();
$msg->addSegment(new Net_HL7_Segments_MSH());
$seg1 = new Net_HL7_Segment("PID");
$seg1->setField(3, "XXX");
$msg->addSegment($seg1);
/**
// If you have fork support, try this...

$pid = pcntl_fork();

if (! $pid) {

  // Server process
  set_time_limit(0);

  // Turn on implicit output flushing so we see what we're getting
  // as it comes in.
  ob_implicit_flush();

  if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n";
  }

  if (($ret = socket_bind($sock, "localhost", 12011)) < 0) {
    echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n";
コード例 #3
0
ファイル: MessageTest.php プロジェクト: jabrehu/Net_HL7
 public function test()
 {
     # Simple constructor
     #
     $msg = new Net_HL7_Message();
     $seg1 = new Net_HL7_Segment("PID");
     $seg1->setField(2, "Foo");
     $msg->addSegment(new Net_HL7_Segments_MSH());
     $msg->addSegment($seg1);
     $seg0 = $msg->getSegmentByIndex(0);
     $seg1 = $msg->getSegmentByIndex(1);
     $seg0->setField(3, "XXX");
     $this->assertTrue($seg0->getName() == "MSH", "Segment 0 name MSH");
     $this->assertTrue($seg1->getName() == "PID", "Segment 1 name PID");
     $this->assertTrue($seg0->getField(3) == "XXX", "3d field of MSH");
     $this->assertTrue($seg1->getField(2) == "Foo", "2nd field of PID");
     // Check references
     $segX = $msg->getSegmentByIndex(0);
     $this->assertTrue($segX->getField(3) == "XXX", "3d field of MSH");
     $msg = new Net_HL7_Message("MSH|^~\\&|1|\rPID|||xxx|\r");
     $seg0 = $msg->getSegmentByIndex(0);
     $this->assertTrue($msg->toString() == "MSH|^~\\&|1|\rPID|||xxx|\r", "String representation of message");
     $this->assertTrue($msg->toString(1) == "MSH|^~\\&|1|\nPID|||xxx|\n", "Pretty print representation of message");
     $this->assertTrue($seg0->getField(2) == "^~\\&", "Encoding characters (MSH(2))");
     # Constructor with components and subcomponents
     #
     $msg = new Net_HL7_Message("MSH|^~\\&|1|\rPID|||xx^x&y&z^yy^zz|\r");
     $seg1 = $msg->getSegmentByIndex(1);
     $comps = $seg1->getField(3);
     $this->assertTrue($comps[0] == "xx", "Composed field");
     $this->assertTrue($comps[1][1] == "y", "Subcomposed field");
     # Trying different field separator
     #
     $msg = new Net_HL7_Message("MSH*^~\\&*1\rPID***xxx\r");
     $this->assertTrue($msg->toString() == "MSH*^~\\&*1*\rPID***xxx*\r", "String representation of message with * as field separator");
     $seg0 = $msg->getSegmentByIndex(0);
     $this->assertTrue($seg0->getField(3) == "1", "3d field of MSH");
     # Trying different field sep and control chars
     #
     $msg = new Net_HL7_Message("MSH*.%#@*1\rPID***x.x@y@z.z\r");
     $seg1 = $msg->getSegmentByIndex(1);
     $comps = $seg1->getField(3);
     $this->assertTrue($comps[0] == "x", "Composed field with . as separator");
     $this->assertTrue($comps[1][1] == "y", "Subcomposed field with @ as separator");
     # Faulty constuctor
     #
     //$this->assertTrue(! defined(new Net::HL7::Message("MSH|^~\\&*1\rPID|||xxx\r")), "Field separator not repeated");
     $seg2 = new Net_HL7_Segment("XXX");
     $msg->addSegment($seg2);
     $msg->removeSegmentByIndex(1);
     $seg1 = $msg->getSegmentByIndex(1);
     $this->assertTrue($seg1->getName() == $seg2->getName(), "Add/remove segment");
     $seg3 = new Net_HL7_Segment("YYY");
     $seg4 = new Net_HL7_Segment("ZZZ");
     $msg->insertSegment($seg3, 1);
     $msg->insertSegment($seg4, 1);
     $seg3 = $msg->getSegmentByIndex(3);
     $seg4 = $msg->getSegmentByIndex(4);
     $this->assertTrue($seg3->getName() == $seg2->getName(), "Insert segment");
     $msg->removeSegmentByIndex(1);
     $msg->removeSegmentByIndex(1);
     $msg->removeSegmentByIndex(6);
     $seg5 = new Net_HL7_Segment("ZZ1");
     # This shouldn't be possible
     @$msg->insertSegment($seg5, 3);
     $this->assertTrue(!$msg->getSegmentByIndex(3), "Erroneous insert");
     $msg->insertSegment($seg5, 2);
     $seg2 = $msg->getSegmentByIndex(2);
     $this->assertTrue($seg2->getName() == $seg5->getName(), "Insert segment");
     $msg->setSegment($seg3, 2);
     $seg2 = $msg->getSegmentByIndex(2);
     $this->assertTrue($seg2->getName() == $seg3->getName(), "Set segment");
     $this->assertTrue(count($msg->getSegmentsByName("MSH")) == 1, "Number of MSH segments");
     $msh2 = new Net_HL7_Segments_MSH();
     $msg->addSegment($msh2);
     $this->assertTrue(count($msg->getSegmentsByName("MSH")) == 2, "Added MSH segment, now two in message");
     # Fumble 'round with ctrl chars
     #
     $msg = new Net_HL7_Message();
     $msh = new Net_HL7_Segments_MSH(array());
     $msh->setField(1, "*");
     $msh->setField(2, "abcd");
     $msg->addSegment($msh);
     $this->assertTrue($msg->toString() == "MSH*abcd*\r", "Creating separate MSH");
     $msh->setField(1, "|");
     $msh->setField(2, "^~\\&");
     $this->assertTrue($msg->toString() == "MSH|^~\\&|\r", "Change MSH after add");
     $msh = new Net_HL7_Segments_MSH(array());
     $msh->setField(1, "*");
     $msh->setField(2, "abcd");
     $msg->setSegment($msh, 0);
     $this->assertTrue($msg->toString() == "MSH*abcd*\r", "New MSH with setSegment");
     $str = 'MSH|^~\\&|CodeRyte HL7|CodeRyte HQ|VISION|MISYS|200404061744||DFT^P03|TC-2743|P^T|2.3|||AL|NE||ASCII||| |';
     $msg = new Net_HL7_Message($str);
     $this->assertTrue($msg->toString(1) == "{$str}\n", "Message from string and to string with subcomponents");
     // Segment as string
     $msg = new Net_HL7_Message("MSH*^~\\&*1\rPID*a^b^c*a^b1&b2^c*xxx\r");
     $xxx = new Net_HL7_Segment("XXX");
     $xxx->setField(2, array("a", array("b1", "b2"), "c"));
     $msg->addSegment($xxx);
     $this->assertTrue($msg->getSegmentAsString(0) == "MSH*^~\\&*1*", "MSH segment as string");
     $this->assertTrue($msg->getSegmentAsString(1) == "PID*a^b^c*a^b1&b2^c*xxx*", "PID segment as string");
     $this->assertTrue($msg->getSegmentAsString(2) == "XXX**a^b1&b2^c*", "XXX segment as string");
     // Get segment field as string
     $this->assertTrue($msg->getSegmentFieldAsString(0, 3) == "1", "MSH(3) as string");
     $this->assertTrue($msg->getSegmentFieldAsString(1, 2) == "a^b1&b2^c", "PID(2) as string");
 }
コード例 #4
0
ok(count($msg->getSegmentsByName("MSH")) == 2, "Added MSH segment, now two in message<br>");
# Fumble 'round with ctrl chars
#
$msg = new Net_HL7_Message();
$msh = new Net_HL7_Segments_MSH(array());
$msh->setField(1, "*");
$msh->setField(2, "abcd");
$msg->addSegment($msh);
ok($msg->toString() == "MSH*abcd*\r", "Creating separate MSH<br>");
$msh->setField(1, "|");
$msh->setField(2, "^~\\&");
ok($msg->toString() == "MSH|^~\\&|\r", "Change MSH after add<br>");
$msh = new Net_HL7_Segments_MSH(array());
$msh->setField(1, "*");
$msh->setField(2, "abcd");
$msg->setSegment($msh, 0);
ok($msg->toString() == "MSH*abcd*\r", "New MSH with setSegment<br>");
$str = 'MSH|^~\\&|CodeRyte HL7|CodeRyte HQ|VISION|MISYS|200404061744||DFT^P03|TC-2743|P^T|2.3|||AL|NE||ASCII||| |';
$msg = new Net_HL7_Message($str);
ok($msg->toString(1) == "{$str}\n", "Message from string and to string with subcomponents<br>");
// Segment as string
$msg = new Net_HL7_Message("MSH*^~\\&*1\rPID*a^b^c*a^b1&b2^c*xxx\r");
$xxx = new Net_HL7_Segment("XXX");
$xxx->setField(2, array("a", array("b1", "b2"), "c"));
$msg->addSegment($xxx);
ok($msg->getSegmentAsString(0) == "MSH*^~\\&*1*", "MSH segment as string<br>");
ok($msg->getSegmentAsString(1) == "PID*a^b^c*a^b1&b2^c*xxx*", "PID segment as string<br>");
ok($msg->getSegmentAsString(2) == "XXX**a^b1&b2^c*", "XXX segment as string<br>");
// Get segment field as string
ok($msg->getSegmentFieldAsString(0, 3) == "1", "MSH(3) as string<br>");
ok($msg->getSegmentFieldAsString(1, 2) == "a^b1&b2^c", "PID(2) as string<br>");
コード例 #5
0
ファイル: ConnectionTest.php プロジェクト: jabrehu/Net_HL7
 public function test()
 {
     $msg = new Net_HL7_Message();
     $msg->addSegment(new Net_HL7_Segments_MSH());
     $seg1 = new Net_HL7_Segment("PID");
     $seg1->setField(3, "XXX");
     $msg->addSegment($seg1);
     /**
     // If you have fork support, try this...
     
     $pid = pcntl_fork();
     
     if (! $pid) {
     
       // Server process
       set_time_limit(0);
     
       // Turn on implicit output flushing so we see what we're getting
       // as it comes in.
       ob_implicit_flush();
     
       if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
         echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n";
       }
     
       if (($ret = socket_bind($sock, "localhost", 12011)) < 0) {
         echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n";
       }
     
       if (($ret = socket_listen($sock, 5)) < 0) {
         echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n";
       }
     
       do {
         if (($msgsock = socket_accept($sock)) < 0) {
           echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
           break;
         }
     
         if (false === ($buf = socket_read($msgsock, 8192, PHP_NORMAL_READ))) {
           echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
           break 2;
         }
     
         echo "Incoming: $buf\n";
     
         $msg = new Net_HL7_Message($buf);
     
         $ack = new Net_HL7_Messages_ACK($msg);
         socket_write($msgsock, "\013" . $ack->toString() . "\034\015", strlen($ack->toString() + 3));
         echo "Said: " . $ack->toString(1) . "\n";
     
       } while (true);
     
       socket_close($msgsock);
     
       exit;
     }
     */
     $socket = $this->getMock('Net_Socket');
     $socket->expects($this->once())->method('write')->with("\v" . $msg->toString() . "\r");
     $socket->expects($this->once())->method('read')->will($this->returnValue("MSH*^~\\&*1\rPID***xxx\r" . "\r"));
     $conn = new Net_HL7_Connection($socket);
     $resp = $conn->send($msg);
     $this->assertTrue($resp instanceof Net_HL7_Message);
 }
コード例 #6
0
ファイル: MSH.php プロジェクト: tejdeeps/tejcs.com
 /**
  * Set the field specified by index to value. 
  *
  * Indices start at 1, to stay with the HL7 standard. Trying to
  * set the value at index 0 has no effect. Setting the value on
  * index 1, will effectively change the value of FIELD_SEPARATOR
  * for the message containing this segment, if the value has
  * length 1; setting the field on index 2 will change the values
  * of COMPONENT_SEPARATOR, REPETITION_SEPARATOR, ESCAPE_CHARACTER
  * and SUBCOMPONENT_SEPARATOR for the message, if the string is of
  * length 4.
  * 
  * @param int Index of field
  * @param mixed Value
  * @return boolean
  * @access public
  */
 function setField($index, $value)
 {
     if ($index == 1) {
         if (strlen($value) != 1) {
             return false;
         }
     }
     if ($index == 2) {
         if (strlen($value) != 4) {
             return false;
         }
     }
     return parent::setField($index, $value);
 }
コード例 #7
0
ファイル: SegmentTest.php プロジェクト: jabrehu/Net_HL7
 public function test()
 {
     # Basic stuff
     #
     $hl7 = new Net_HL7();
     $seg = new Net_HL7_Segment("PID");
     $seg->setField(0, "XXX");
     $seg->setField(3, "XXX");
     $this->assertTrue($seg->getField(0) == "PID", "Field 0 is PID");
     $this->assertTrue($seg->getName() == "PID", "Segment name is PID");
     $this->assertTrue($seg->getField(3) == "XXX", "Field 3 is XXX");
     # Try faulty constructors
     #
     //$this->assertTrue(! defined(new Net::HL7::Segment()), "Segment constructor with no name");
     //$this->assertTrue(! defined( new Net::HL7::Segment("XXXX")), "Segment constructor with 4 char name");
     //$this->assertTrue(! defined(new Net::HL7::Segment("xxx")), "Segment constructor with lowercase name");
     $seg = new Net_HL7_Segment("DG1", array(4, 3, 2, array(1, 2, 3), 0));
     $this->assertTrue($seg->getField(3) == "2", "Constructor with array ref");
     $comps = $seg->getField(4);
     $this->assertTrue($comps[2] == "3", "Constructor with array ref for composed fields");
     # Field setters/getters
     #
     $seg = new Net_HL7_Segment("DG1");
     $seg->setField(3, array(1, 2, 3));
     $seg->setField(8, $hl7->getNull());
     $this->assertTrue(is_array($seg->getField(3)), "Composed field 1^2^3");
     $this->assertTrue($seg->getField(8) == "\"\"" && $seg->getField(8) == $hl7->getNull(), "HL7 NULL value");
     $subFields = $seg->getField(3);
     $this->assertTrue(count($subFields) == 3, "Getting composed fields as array");
     $this->assertTrue($subFields[1] == "2", "Getting single value from composed field");
     $flds = $seg->getFields();
     $this->assertTrue(count($flds) == 9, "Number of fields in segment");
     $flds = $seg->getFields(2);
     $this->assertTrue(count($flds) == 7, "Getting all fields from 2nd index");
     $flds = $seg->getFields(2, 4);
     $this->assertTrue(count($flds) == 3, "Getting fields from 2 till 4");
     $seg->setField(12);
     $this->assertTrue($seg->size() == 8, "Size operator");
     $seg->setField(12, "x");
     $this->assertTrue($seg->size() == 12, "Size operator");
 }
コード例 #8
0
$seg->setField(3, "XXX");
ok($seg->getField(0) == "PID", "Field 0 is PID<br>");
ok($seg->getName() == "PID", "Segment name is PID<br>");
ok($seg->getField(3) == "XXX", "Field 3 is XXX<br>");
# Try faulty constructors
#
//ok(! defined(new Net::HL7::Segment()), "Segment constructor with no name");
//ok(! defined( new Net::HL7::Segment("XXXX")), "Segment constructor with 4 char name");
//ok(! defined(new Net::HL7::Segment("xxx")), "Segment constructor with lowercase name");
$seg = new Net_HL7_Segment("DG1", array(4, 3, 2, array(1, 2, 3), 0));
ok($seg->getField(3) == "2", "Constructor with array ref<br>");
$comps = $seg->getField(4);
ok($comps[2] == "3", "Constructor with array ref for composed fields<br>");
# Field setters/getters
#
$seg = new Net_HL7_Segment("DG1");
$seg->setField(3, array(1, 2, 3));
$seg->setField(8, $hl7->getNull());
ok(is_array($seg->getField(3)), "Composed field 1^2^3<br>");
ok($seg->getField(8) == "\"\"" && $seg->getField(8) == $hl7->getNull(), "HL7 NULL value<br>");
$subFields = $seg->getField(3);
ok(count($subFields) == 3, "Getting composed fields as array<br>");
ok($subFields[1] == "2", "Getting single value from composed field<br>");
$flds = $seg->getFields();
ok(count($flds) == 9, "Number of fields in segment<br>");
$flds = $seg->getFields(2);
ok(count($flds) == 7, "Getting all fields from 2nd index<br>");
$flds = $seg->getFields(2, 4);
ok(count($flds) == 3, "Getting fields from 2 till 4<br>");
$seg->setField(12);
ok($seg->size() == 8, "Size operator<br>");