/**
  * Adds an Instruction to a Channel.
  *
  * Body of output document takes the form:
  *
  * <code>
  * {"position":"12","channel":"main","data":{"k"=>"v pairs"},"object_type":"Car","communication_key":"g4c667c80947"}
  * </code>
  *
  * @param array $params Expected in the form: 
  *	`array('channelset'=>'name','channel'=>'name','object_type'=>'type of object','data'=>array('k'='v pairs'))
  */
 public function restPostChannelsetChannel($params)
 {
     InstructionControl::startTransaction();
     $channelsetId = $this->getChannelSetId($params['channelset']);
     $userRec = $this->getUser($channelsetId);
     $channelId = InstructionControl::getChannelId($channelsetId, $params['channel']);
     $instructionId = InstructionControl::reserveInstructionId($userRec['id'], $channelId, $params['object_type']);
     $data = array_key_exists('data', $_REQUEST) ? $_REQUEST['data'] : array();
     InstructionControl::addInstructionData($instructionId, $data);
     InstructionControl::completeTransaction();
     $position = InstructionControl::getPositionForInstructionId($instructionId);
     $return = InstructionControl::generateReturnDocument('INSTRUCTION', array(), array(), array(), array(), array('position' => $position, 'channel' => $params['channel'], 'data' => $data, 'object_type' => $params['object_type'], 'communication_key' => $userRec['communication_key']));
     header('HTTP/1.1 201 Created');
     echo json_encode($return);
     if (INSTRUCTIONCONTROL__NOTIFY_OTHER_CLIENTS == 'APE') {
         InstructionControl::notifyOtherClientsApe($params['channelset'], $channelId, $return);
     }
     return true;
 }
 public function testGetInstructionForChannel()
 {
     // Load a load of data and check we can read it back.
     $channel = genSaneGuid();
     $channelId = $this->_getChannelId($channel);
     $user = InstructionControl::getUser(null, genSaneGuid());
     foreach ($this->providerAddInstructionData() as $dataChunk) {
         $data = $dataChunk[1];
         $objectType = $dataChunk[0];
         $id = InstructionControl::reserveInstructionId($user['id'], $channelId, $objectType);
         InstructionControl::addInstructionData($id, $data);
     }
     $loadedData = InstructionControl::getInstructionForChannel($channelId);
     $position = 0;
     foreach ($this->providerAddInstructionData() as $dataChunk) {
         $data = $dataChunk[1];
         $objectType = $dataChunk[0];
         $loaded = array_shift($loadedData);
         $expected = array('object_type' => $objectType, 'communication_key' => $user['communication_key'], 'position' => $position++, 'data' => $data);
         $this->assertEquals($expected, $loaded);
     }
     // Also check that if we supply a non existant channel we get an empty
     // array
     $this->assertEquals(array(), InstructionControl::getInstructionForChannel(genSaneGuid()));
 }