Commit c89f593c authored by mku's avatar mku

ZP-151 #comment Review Encode function for empty tags for the Streamer object...

ZP-151 #comment Review Encode function for empty tags for the Streamer object - use STREAMER_PROP for STREAMER_TYPE_SEND_EMPTY, always stream STREAMER_TYPE_SEND_EMPTY tags #time 1h 30m

git-svn-id: https://z-push.org/svn/z-push/trunk@1355 b7dd7b3b-3a3c-0410-9da9-bee62a6cc5b5
parent 8caf10d4
......@@ -101,8 +101,6 @@ class Streamer implements Serializable {
else if ($map[self::STREAMER_TYPE] == self::STREAMER_TYPE_DATE || $map[self::STREAMER_TYPE] == self::STREAMER_TYPE_DATE_DASHES ) {
$this->$map[self::STREAMER_VAR] = "";
}
else if ($map[self::STREAMER_TYPE] == self::STREAMER_TYPE_SEND_EMPTY)
$this->$map[self::STREAMER_VAR] = "";
else if (isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY)
$this->$map[self::STREAMER_VAR] = "";
continue;
......@@ -173,11 +171,6 @@ class Streamer implements Serializable {
if(!$decoder->getElementEndTag())
return false;
}
else if($map[self::STREAMER_TYPE] == self::STREAMER_TYPE_SEND_EMPTY) {
$decoded = $decoder->getElementContent();
if(!$decoder->getElementEndTag())
return false;
}
else {
$subdecoder = new $map[self::STREAMER_TYPE]();
if($subdecoder->Decode($decoder) === false)
......@@ -230,6 +223,8 @@ class Streamer implements Serializable {
* @access public
*/
public function Encode(&$encoder) {
// A return value if anything was streamed. We need for empty tags.
$streamed = false;
foreach($this->mapping as $tag => $map) {
if(isset($this->$map[self::STREAMER_VAR])) {
// Variable is available
......@@ -237,16 +232,18 @@ class Streamer implements Serializable {
// Subobjects can do their own encoding
if ($this->$map[self::STREAMER_VAR] instanceof Streamer) {
$encoder->startTag($tag);
$this->$map[self::STREAMER_VAR]->Encode($encoder);
$res = $this->$map[self::STREAMER_VAR]->Encode($encoder);
$encoder->endTag();
// nothing was streamed in previous encode but it should be streamed empty anyway
if (!$res && isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY)
$encoder->startTag($tag, false, true);
}
else
ZLog::Write(LOGLEVEL_ERROR, sprintf("Streamer->Encode(): parameter '%s' of object %s is not of type Streamer", $map[self::STREAMER_VAR], get_class($this)));
}
// Array of objects
else if(isset($map[self::STREAMER_ARRAY])) {
if ((empty($this->$map[self::STREAMER_VAR]) && isset($map[self::STREAMER_TYPE]) && $map[self::STREAMER_TYPE] == self::STREAMER_TYPE_SEND_EMPTY)
|| (isset($map[self::STREAMER_PROP]) && isset($map[self::STREAMER_PROP]) == self::STREAMER_TYPE_SEND_EMPTY)) {
if (empty($this->$map[self::STREAMER_VAR]) && isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY) {
$encoder->startTag($tag, false, true);
}
else {
......@@ -269,6 +266,7 @@ class Streamer implements Serializable {
$encoder->startTag($map[self::STREAMER_ARRAY]);
$encoder->content($element);
$encoder->endTag();
$streamed = true;
}
}
}
......@@ -284,11 +282,11 @@ class Streamer implements Serializable {
// Simple type
if(!isset($map[self::STREAMER_TYPE]) && strlen($this->$map[self::STREAMER_VAR]) == 0) {
if ((isset($map[self::STREAMER_TYPE]) && $map[self::STREAMER_TYPE] == self::STREAMER_TYPE_SEND_EMPTY)
|| (isset($map[self::STREAMER_PROP]) && isset($map[self::STREAMER_PROP]) == self::STREAMER_TYPE_SEND_EMPTY)) {
// send empty tags
if (isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY)
$encoder->startTag($tag, false, true);
}
// Do not output empty items. See above: $encoder->startTag($tag, false, true);
// Do not output empty items. See above: $encoder->startTag($tag, false, true);
continue;
} else
$encoder->startTag($tag);
......@@ -322,12 +320,15 @@ class Streamer implements Serializable {
$encoder->content($this->$map[self::STREAMER_VAR]);
}
$encoder->endTag();
$streamed = true;
}
}
}
// Output our own content
if(isset($this->content))
$encoder->content($this->content);
return $streamed;
}
/**
......
......@@ -57,13 +57,13 @@ class SyncOOFMessage extends SyncObject {
$mapping = array (
//only one of the following 3 apply types will be available
SYNC_SETTINGS_APPLIESTOINTERVAL => array ( self::STREAMER_VAR => "appliesToInternal",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY),
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY),
SYNC_SETTINGS_APPLIESTOEXTERNALKNOWN => array ( self::STREAMER_VAR => "appliesToExternal",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY),
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY),
SYNC_SETTINGS_APPLIESTOEXTERNALUNKNOWN => array ( self::STREAMER_VAR => "appliesToExternalUnknown",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY),
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY),
SYNC_SETTINGS_ENABLED => array ( self::STREAMER_VAR => "enabled"),
......
......@@ -223,11 +223,11 @@ class SyncProvisioning extends SyncObject {
self::STREAMER_CHECKS => array( self::STREAMER_CHECK_ONEVALUEOF => array(0,1) )),
SYNC_PROVISION_UNAPPROVEDINROMAPPLIST => array ( self::STREAMER_VAR => "unapprovedinromapplist",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY,
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY,
self::STREAMER_ARRAY => SYNC_PROVISION_APPNAME), //TODO check
SYNC_PROVISION_APPROVEDAPPLIST => array ( self::STREAMER_VAR => "approvedapplist",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY,
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY,
self::STREAMER_ARRAY => SYNC_PROVISION_HASH), //TODO check
);
}
......
......@@ -61,10 +61,10 @@ class SyncSendMail extends SyncObject {
SYNC_COMPOSEMAIL_CLIENTID => array ( self::STREAMER_VAR => "clientid"),
SYNC_COMPOSEMAIL_SAVEINSENTITEMS => array ( self::STREAMER_VAR => "saveinsent",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY),
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY),
SYNC_COMPOSEMAIL_REPLACEMIME => array ( self::STREAMER_VAR => "replacemime",
self::STREAMER_TYPE => self::STREAMER_TYPE_SEND_EMPTY),
self::STREAMER_PROP => self::STREAMER_TYPE_SEND_EMPTY),
SYNC_COMPOSEMAIL_ACCOUNTID => array ( self::STREAMER_VAR => "accountid"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment