Hi,
If it can still help, I also had this issue and it seems that the problem is indeed that some theme configuration elements are considered as objects (stdClass) and not strings or arrays, which XMLwriter can't handle.
The following update worked for me. I changed writeXmlFromArray function in application/helpers/export_helper.php file. The original code was
Code:
function writeXmlFromArray(XMLWriter $xml, $aData, $sParentKey = '')
{
$bCloseElement = false;
foreach ($aData as $key => $value) {
if (!empty($value)) {
if (is_array($value)) {
if (is_numeric($key)) {
$xml->startElement($sParentKey);
$bCloseElement = true;
} elseif (isAssociativeArray($value)) {
$xml->startElement($key);
$bCloseElement = true;
}
if (is_numeric($key)) {
writeXmlFromArray($xml, $value, $sParentKey);
} else {
writeXmlFromArray($xml, $value, $key);
}
if ($bCloseElement === true) {
$xml->endElement();
$bCloseElement = false;
}
continue;
} elseif (is_numeric($key)) {
$xml->writeElement($sParentKey, $value);
} else {
$xml->writeElement($key, $value);
}
}
}
return $xml;
}
I changed it to the following one (added code surrounded by comments)
Code:
function writeXmlFromArray(XMLWriter $xml, $aData, $sParentKey = '')
{
$bCloseElement = false;
foreach ($aData as $key => $value) {
if (!empty($value)) {
/////////////////////
// convert to json //
/////////////////////
if (is_object($value)) {
$value = json_encode($value);
}
/////////////////////
/////////////////////
/////////////////////
if (is_array($value)) {
if (is_numeric($key)) {
$xml->startElement($sParentKey);
$bCloseElement = true;
} elseif (isAssociativeArray($value)) {
$xml->startElement($key);
$bCloseElement = true;
}
if (is_numeric($key)) {
writeXmlFromArray($xml, $value, $sParentKey);
} else {
writeXmlFromArray($xml, $value, $key);
}
if ($bCloseElement === true) {
$xml->endElement();
$bCloseElement = false;
}
continue;
} elseif (is_numeric($key)) {
$xml->writeElement($sParentKey, $value);
} else {
$xml->writeElement($key, $value);
}
}
}
return $xml;
}
Added code converts object (stdClass) to json, ensuring it can be handled by xmlwriter.
Please note that this is a manual fix that I made and is not part of the bug fixes provided by the Limesurvey developers. I cannot guarantee that this is the optimal solution, but only that it worked for me.