_plugins)) { return false; } $this->_plugins[] = $plugin; return true; } /** * Record a message with the given data in the given structure * * @param Zend_Wildfire_Plugin_Interface $plugin The plugin recording the message * @param string $structure The structure to be used for the data * @param array $data The data to be recorded * @return boolean Returns TRUE if message was recorded */ public function recordMessage(Zend_Wildfire_Plugin_Interface $plugin, $structure, $data) { if(!isset($this->_messages[$structure])) { $this->_messages[$structure] = array(); } $uri = $plugin->getUri(); if(!isset($this->_messages[$structure][$uri])) { $this->_messages[$structure][$uri] = array(); } $this->_messages[$structure][$uri][] = $this->_encode($data); return true; } /** * Remove all qued messages * * @param Zend_Wildfire_Plugin_Interface $plugin The plugin for which to clear messages * @return boolean Returns TRUE if messages were present */ public function clearMessages(Zend_Wildfire_Plugin_Interface $plugin) { $uri = $plugin->getUri(); $present = false; foreach ($this->_messages as $structure => $messages) { if(!isset($this->_messages[$structure][$uri])) { continue; } $present = true; unset($this->_messages[$structure][$uri]); if (!$this->_messages[$structure]) { unset($this->_messages[$structure]); } } return $present; } /** * Get all qued messages * * @return mixed Returns qued messages or FALSE if no messages are qued */ public function getMessages() { if (!$this->_messages) { return false; } return $this->_messages; } /** * Use the JSON encoding scheme for the value specified * * @param mixed $value The value to be encoded * @return string The encoded value */ protected function _encode($value) { return Zend_Json::encode($value, true, array('silenceCyclicalExceptions'=>true)); } /** * Retrieves all formatted data ready to be sent by the channel. * * @param Zend_Wildfire_Channel_Interface $channel The instance of the channel that will be transmitting the data * @return mixed Returns the data to be sent by the channel. * @throws Zend_Wildfire_Exception */ public function getPayload(Zend_Wildfire_Channel_Interface $channel) { if (!$channel instanceof Zend_Wildfire_Channel_HttpHeaders) { throw new Zend_Wildfire_Exception('The '.get_class($channel).' channel is not supported by the '.get_class($this).' protocol.'); } if ($this->_plugins) { foreach ($this->_plugins as $plugin) { $plugin->flushMessages(self::PROTOCOL_URI); } } if (!$this->_messages) { return false; } $protocol_index = 1; $structure_index = 1; $plugin_index = 1; $message_index = 1; $payload = array(); $payload[] = array('Protocol-'.$protocol_index, self::PROTOCOL_URI); foreach ($this->_messages as $structure_uri => $plugin_messages ) { $payload[] = array($protocol_index.'-Structure-'.$structure_index, $structure_uri); foreach ($plugin_messages as $plugin_uri => $messages ) { $payload[] = array($protocol_index.'-Plugin-'.$plugin_index, $plugin_uri); foreach ($messages as $message) { $parts = explode("\n",chunk_split($message, 5000, "\n")); for ($i=0 ; $i2) { $msg = (($i==0)?strlen($message):'') . '|' . $part . '|' . (($i 99999) { throw new Zend_Wildfire_Exception('Maximum number (99,999) of messages reached!'); } } } } $plugin_index++; } $structure_index++; } return $payload; } }