/**
  * Builds InboundMessage objects from parsed XML
  * @param SimpleXMLElement $node The captured elements to build from
  * @return MoodletxtInboundMessage[] Inbound messages built from the XML
  * @version 2012101001
  * @since 2011033101
  */
 private function buildInboundMessage($node)
 {
     $receivedMessages = array();
     // Check that required children exist for object build
     if (isset($node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_MESSAGE_TEXT}) && isset($node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_PHONE}) && isset($node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_DELIVERY_DATE}) && isset($node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_TICKET}) && isset($node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_DESTINATION})) {
         try {
             // Create object and shove onto array
             $messageObject = new MoodletxtInboundMessage((string) $node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_TICKET}, (string) $node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_MESSAGE_TEXT}, new MoodletxtPhoneNumber((string) $node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_PHONE}), (string) $node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_DELIVERY_DATE}, false);
             $messageObject->setDestinationNumber(new MoodletxtPhoneNumber((string) $node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_DESTINATION}));
             // If this field exists, we're parsing a pushed inbound message,
             // rather than one retrieved manually
             if (isset($node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_DESTINATION_ACC})) {
                 $messageObject->setDestinationAccountUsername((string) $node->{MoodletxtXMLConstants::$RESPONSE_INBOUND_DESTINATION_ACC});
             } else {
                 $messageObject->setDestinationAccountId($this->getTxttoolsAccountObject()->getId());
                 $messageObject->setDestinationAccountUsername($this->getTxttoolsAccountObject()->getUsername());
             }
         } catch (InvalidPhoneNumberException $ex) {
             // Invalid message content - ignore and continue
         }
         array_push($receivedMessages, $messageObject);
     }
     return $receivedMessages;
 }
 /**
  * Builds response JSON to send back to the webpage
  * @param MoodletxtInboundMessage $message Message to build JSON from
  * @return array JSON structure ready for encoding
  * @TODO Return destination accounts when stored by system
  * @version 2012050401
  * @since 2012050301
  */
 private function buildMessageJSON(MoodletxtInboundMessage $message)
 {
     $JSON = array('source' => array('firstName' => $message->getSourceFirstName(), 'lastName' => $message->getSourceLastName(), 'displayName' => $message->getSourceNameForDisplay(), 'number' => $message->getSourceNumber()->getPhoneNumber()), 'ticket' => $message->getMessageTicket(), 'messageText' => $message->getMessageText(), 'timeReceived' => $message->getTimeReceived('%H:%M:%S,  %d %B %Y'), 'hasBeenRead' => $message->getHasBeenRead());
     if ($message->hasOwner()) {
         $JSON['owner'] = array('userId' => $message->getOwner()->getId(), 'username' => $message->getOwner()->getUsername(), 'firstName' => $message->getOwner()->getFirstName(), 'lastName' => $message->getOwner()->getLastName(), 'displayName' => $message->getOwner()->getFullNameForDisplay());
     }
     return $JSON;
 }
 /**
  * Converts a message object down to a basic data object for use in the DB
  * @param MoodletxtInboundMessage $bean Message to convert
  * @return array One or more raw database row objects
  * @TODO Store and retrieve destination txttools accounts
  * @version 2012050401
  * @since 2011080401
  */
 private function convertBeanToStandardClasses(MoodletxtInboundMessage $bean)
 {
     $returnedObjects = array();
     // Existing record - update
     if ($bean->getId() > 0) {
         $stdObject = new stdClass();
         $stdObject->id = $bean->getId();
         $stdObject->userid = $bean->getOwner()->getId();
         $stdObject->ticket = $bean->getMessageTicket();
         $stdObject->messagetext = $bean->getMessageText();
         $stdObject->source = $bean->getSourceNumber()->getPhoneNumber();
         $stdObject->sourcefirstname = $bean->getSourceFirstName();
         $stdObject->sourcelastname = $bean->getSourceLastName();
         $stdObject->timereceived = $bean->getTimeReceived();
         $stdObject->hasbeenread = $bean->getHasBeenRead();
     } else {
         // Fresh from being filtered or forwarded - make new
         // message objects for destination users
         foreach ($bean->getDestinationUserIds() as $userId) {
             $stdObject = new stdClass();
             $stdObject->userid = $userId;
             $stdObject->ticket = $bean->getMessageTicket();
             $stdObject->messagetext = $bean->getMessageText();
             $stdObject->source = $bean->getSourceNumber()->getPhoneNumber();
             $stdObject->sourcefirstname = $bean->getSourceFirstName();
             $stdObject->sourcelastname = $bean->getSourceLastName();
             $stdObject->timereceived = $bean->getTimeReceived();
             $stdObject->hasbeenread = $bean->getHasBeenRead();
             array_push($returnedObjects, $stdObject);
         }
     }
     return $returnedObjects;
 }