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 { ...@@ -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 ) { else if ($map[self::STREAMER_TYPE] == self::STREAMER_TYPE_DATE || $map[self::STREAMER_TYPE] == self::STREAMER_TYPE_DATE_DASHES ) {
$this->$map[self::STREAMER_VAR] = ""; $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) else if (isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY)
$this->$map[self::STREAMER_VAR] = ""; $this->$map[self::STREAMER_VAR] = "";
continue; continue;
...@@ -173,11 +171,6 @@ class Streamer implements Serializable { ...@@ -173,11 +171,6 @@ class Streamer implements Serializable {
if(!$decoder->getElementEndTag()) if(!$decoder->getElementEndTag())
return false; return false;
} }
else if($map[self::STREAMER_TYPE] == self::STREAMER_TYPE_SEND_EMPTY) {
$decoded = $decoder->getElementContent();
if(!$decoder->getElementEndTag())
return false;
}
else { else {
$subdecoder = new $map[self::STREAMER_TYPE](); $subdecoder = new $map[self::STREAMER_TYPE]();
if($subdecoder->Decode($decoder) === false) if($subdecoder->Decode($decoder) === false)
...@@ -230,6 +223,8 @@ class Streamer implements Serializable { ...@@ -230,6 +223,8 @@ class Streamer implements Serializable {
* @access public * @access public
*/ */
public function Encode(&$encoder) { public function Encode(&$encoder) {
// A return value if anything was streamed. We need for empty tags.
$streamed = false;
foreach($this->mapping as $tag => $map) { foreach($this->mapping as $tag => $map) {
if(isset($this->$map[self::STREAMER_VAR])) { if(isset($this->$map[self::STREAMER_VAR])) {
// Variable is available // Variable is available
...@@ -237,16 +232,18 @@ class Streamer implements Serializable { ...@@ -237,16 +232,18 @@ class Streamer implements Serializable {
// Subobjects can do their own encoding // Subobjects can do their own encoding
if ($this->$map[self::STREAMER_VAR] instanceof Streamer) { if ($this->$map[self::STREAMER_VAR] instanceof Streamer) {
$encoder->startTag($tag); $encoder->startTag($tag);
$this->$map[self::STREAMER_VAR]->Encode($encoder); $res = $this->$map[self::STREAMER_VAR]->Encode($encoder);
$encoder->endTag(); $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 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))); 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 // Array of objects
else if(isset($map[self::STREAMER_ARRAY])) { 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) if (empty($this->$map[self::STREAMER_VAR]) && isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY) {
|| (isset($map[self::STREAMER_PROP]) && isset($map[self::STREAMER_PROP]) == self::STREAMER_TYPE_SEND_EMPTY)) {
$encoder->startTag($tag, false, true); $encoder->startTag($tag, false, true);
} }
else { else {
...@@ -269,6 +266,7 @@ class Streamer implements Serializable { ...@@ -269,6 +266,7 @@ class Streamer implements Serializable {
$encoder->startTag($map[self::STREAMER_ARRAY]); $encoder->startTag($map[self::STREAMER_ARRAY]);
$encoder->content($element); $encoder->content($element);
$encoder->endTag(); $encoder->endTag();
$streamed = true;
} }
} }
} }
...@@ -284,10 +282,10 @@ class Streamer implements Serializable { ...@@ -284,10 +282,10 @@ class Streamer implements Serializable {
// Simple type // Simple type
if(!isset($map[self::STREAMER_TYPE]) && strlen($this->$map[self::STREAMER_VAR]) == 0) { 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) // send empty tags
|| (isset($map[self::STREAMER_PROP]) && isset($map[self::STREAMER_PROP]) == self::STREAMER_TYPE_SEND_EMPTY)) { if (isset($map[self::STREAMER_PROP]) && $map[self::STREAMER_PROP] == self::STREAMER_TYPE_SEND_EMPTY)
$encoder->startTag($tag, false, true); $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; continue;
} else } else
...@@ -322,12 +320,15 @@ class Streamer implements Serializable { ...@@ -322,12 +320,15 @@ class Streamer implements Serializable {
$encoder->content($this->$map[self::STREAMER_VAR]); $encoder->content($this->$map[self::STREAMER_VAR]);
} }
$encoder->endTag(); $encoder->endTag();
$streamed = true;
} }
} }
} }
// Output our own content // Output our own content
if(isset($this->content)) if(isset($this->content))
$encoder->content($this->content); $encoder->content($this->content);
return $streamed;
} }
/** /**
......
...@@ -57,13 +57,13 @@ class SyncOOFMessage extends SyncObject { ...@@ -57,13 +57,13 @@ class SyncOOFMessage extends SyncObject {
$mapping = array ( $mapping = array (
//only one of the following 3 apply types will be available //only one of the following 3 apply types will be available
SYNC_SETTINGS_APPLIESTOINTERVAL => array ( self::STREAMER_VAR => "appliesToInternal", 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", 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", 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"), SYNC_SETTINGS_ENABLED => array ( self::STREAMER_VAR => "enabled"),
......
...@@ -223,11 +223,11 @@ class SyncProvisioning extends SyncObject { ...@@ -223,11 +223,11 @@ class SyncProvisioning extends SyncObject {
self::STREAMER_CHECKS => array( self::STREAMER_CHECK_ONEVALUEOF => array(0,1) )), self::STREAMER_CHECKS => array( self::STREAMER_CHECK_ONEVALUEOF => array(0,1) )),
SYNC_PROVISION_UNAPPROVEDINROMAPPLIST => array ( self::STREAMER_VAR => "unapprovedinromapplist", 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 self::STREAMER_ARRAY => SYNC_PROVISION_APPNAME), //TODO check
SYNC_PROVISION_APPROVEDAPPLIST => array ( self::STREAMER_VAR => "approvedapplist", 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 self::STREAMER_ARRAY => SYNC_PROVISION_HASH), //TODO check
); );
} }
......
...@@ -61,10 +61,10 @@ class SyncSendMail extends SyncObject { ...@@ -61,10 +61,10 @@ class SyncSendMail extends SyncObject {
SYNC_COMPOSEMAIL_CLIENTID => array ( self::STREAMER_VAR => "clientid"), SYNC_COMPOSEMAIL_CLIENTID => array ( self::STREAMER_VAR => "clientid"),
SYNC_COMPOSEMAIL_SAVEINSENTITEMS => array ( self::STREAMER_VAR => "saveinsent", 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", 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"), 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