static function handleInlineNode($child, $generator, $prevLineBreak = false) { $paragraphParameters = array(); $imageArray = array(); switch ($child->localName) { case "line": // @todo: (Alex) check why this is needed here and not after the next line if ($prevLineBreak) { $paragraphParameters[] = array(eZOOGenerator::LINE, ''); } // Todo: support inline tags $paragraphParameters[] = array(eZOOGenerator::TEXT, $child->textContent); foreach ($child->childNodes as $lineChild) { if ($lineChild->localName == 'embed') { // Only support objects of image class for now $object = eZContentObject::fetch($lineChild->getAttribute("object_id")); if ($object && $object->canRead()) { $classIdentifier = $object->attribute("class_identifier"); // Todo: read class identifiers from configuration if ($classIdentifier == "image") { $imageSize = $lineChild->getAttribute('size'); if ($imageSize == "") { $imageSize = "large"; } $imageAlignment = $lineChild->getAttribute('align'); if ($imageAlignment == "") { $imageAlignment = "center"; } $dataMap = $object->dataMap(); $imageAttribute = $dataMap['image']; $imageHandler = $imageAttribute->content(); $originalImage = $imageHandler->attribute('original'); $fileHandler = eZClusterFileHandler::instance($originalImage['url']); $uniqueFile = $fileHandler->fetchUnique(); $displayImage = $imageHandler->attribute($imageSize); $displayWidth = $displayImage['width']; $displayHeight = $displayImage['height']; $imageArray[] = array("FileName" => $uniqueFile, "Alignment" => $imageAlignment, "DisplayWidth" => $displayWidth, "DisplayHeight" => $displayHeight); } } else { eZDebug::writeError("Image (object_id = " . $child->getAttribute('object_id') . " ) could not be used (does not exist or due to insufficient privileges)"); } } } break; // text nodes // text nodes case "": $paragraphParameters[] = array(eZOOGenerator::TEXT, $child->textContent); break; case "link": $href = $child->getAttribute('href'); if (!$href) { $url_id = $child->getAttribute('url_id'); if ($url_id) { $eZUrl = eZURL::fetch($url_id); if (is_object($eZUrl)) { $href = $eZUrl->attribute('url'); } } } $paragraphParameters[] = array(eZOOGenerator::LINK, $href, $child->textContent); break; case "emphasize": case "strong": $style = $child->localName == 'strong' ? 'bold' : 'italic'; $paragraphParameters[] = array(eZOOGenerator::STYLE_START, $style); foreach ($child->childNodes as $inlineNode) { $return = self::handleInlineNode($inlineNode); $paragraphParameters = array_merge($paragraphParameters, $return['paragraph_parameters']); } $paragraphParameters[] = array(eZOOGenerator::STYLE_STOP); break; case "literal": $literalContent = $child->textContent; $literalContentArray = explode("\n", $literalContent); foreach ($literalContentArray as $literalLine) { $generator->addParagraph("Preformatted_20_Text", htmlspecialchars($literalLine)); } break; case "custom": $customTagName = $child->getAttribute('name'); // Check if the custom tag is inline $ini = eZINI::instance('content.ini'); $isInlineTagList = $ini->variable('CustomTagSettings', 'IsInline'); $isInline = array_key_exists($customTagName, $isInlineTagList) && $isInlineTagList[$customTagName]; // Handle inline custom tags if ($isInline) { $paragraphParameters[] = array(eZOOGenerator::STYLE_START, "eZCustominline_20_{$customTagName}"); $paragraphParameters[] = array(eZOOGenerator::TEXT, $child->textContent); $paragraphParameters[] = array(eZOOGenerator::STYLE_STOP); } else { $GLOBALS['CustomTagStyle'] = "eZCustom_20_{$customTagName}"; foreach ($child->childNodes as $customParagraph) { // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak self::handleNode($customParagraph, $generator, $prevLineBreak); } $GLOBALS['CustomTagStyle'] = false; } break; case "ol": case "ul": $listType = $child->localName == "ol" ? "ordered" : "unordered"; $generator->startList($listType); foreach ($child->childNodes as $listItem) { foreach ($listItem->childNodes as $childNode) { if ($childNode->nodeType == XML_TEXT_NODE) { $generator->addParagraph($childNode->textContent); } else { // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak self::handleNode($childNode, $generator, $prevLineBreak); } } $generator->nextListItem(); } $generator->endList(); break; case "table": $generator->startTable(); $rows = 1; foreach ($child->childNodes as $row) { foreach ($row->childNodes as $cell) { // Set the correct col span $colSpan = $cell->getAttribute("colspan"); if (is_numeric($colSpan)) { $generator->setCurrentColSpan($colSpan); } // Check for table header if ($cell->localName == 'th' and $rows == 1) { $generator->setIsInsideTableHeading(true); } // If the cell is empty, create a dummy so the cell is properly exported if (!$cell->hasChildNodes()) { $dummy = $cell->ownerDocument->createElement("paragraph"); $cell->appendChild($dummy); // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak eZOOConverter::handleNode($dummy, $generator, $prevLineBreak); } eZDebug::writeDebug($cell->ownerDocument->saveXML($cell), 'ezxmltext table cell'); foreach ($cell->childNodes as $cellNode) { // Alex 2008-06-03: changed $level (3rd argument) to $prevLineBreak self::handleNode($cellNode, $generator, $prevLineBreak); } $generator->nextCell(); } $generator->nextRow(); ++$rows; } $generator->endTable(); break; case 'object': case 'embed': $objectID = $child->localName == 'embed' ? $child->getAttribute("object_id") : $child->getAttribute("id"); // Only support objects of image class for now $object = eZContentObject::fetch($objectID); if ($object && $object->canRead()) { $classIdentifier = $object->attribute("class_identifier"); // Todo: read class identifiers from configuration if ($classIdentifier == "image") { $imageSize = $child->getAttribute('size'); $imageAlignment = $child->getAttribute('align'); $dataMap = $object->dataMap(); $imageAttribute = $dataMap['image']; $imageHandler = $imageAttribute->content(); $originalImage = $imageHandler->attribute('original'); $fileHandler = eZClusterFileHandler::instance($originalImage['url']); $uniqueFile = $fileHandler->fetchUnique(); $displayImage = $imageHandler->attribute($imageSize); $displayWidth = $displayImage['width']; $displayHeight = $displayImage['height']; $imageArray[] = array("FileName" => $uniqueFile, "Alignment" => $imageAlignment, "DisplayWidth" => $displayWidth, "DisplayHeight" => $displayHeight); } } else { eZDebug::writeError("Image (object_id = " . $child->getAttribute('object_id') . " ) could not be used (does not exist or insufficient privileges)"); } break; default: eZDebug::writeError("Unsupported node at this level" . $child->localName); } return array("paragraph_parameters" => $paragraphParameters, "image_array" => $imageArray); }