public function toHTML($asSimpleXML=false) { $html = new SimpleXMLElement('<table/>'); /* // Title $tr = $html->addChild('tr'); $tr->addAttribute('class', 'title'); $tr->addChild('th', Zotero_ItemFields::getLocalizedString(false, 'title')); $tr->addChild('td', htmlspecialchars($item->getDisplayTitle(true))); */ // Item type Zotero_Atom::addHTMLRow( $html, "itemType", Zotero_ItemFields::getLocalizedString(false, 'itemType'), Zotero_ItemTypes::getLocalizedString($this->itemTypeID) ); // Creators $creators = $this->getCreators(); if ($creators) { $displayText = ''; foreach ($creators as $creator) { // Two fields if ($creator['ref']->fieldMode == 0) { $displayText = $creator['ref']->firstName . ' ' . $creator['ref']->lastName; } // Single field else if ($creator['ref']->fieldMode == 1) { $displayText = $creator['ref']->lastName; } else { // TODO } Zotero_Atom::addHTMLRow( $html, "creator", Zotero_CreatorTypes::getLocalizedString($creator['creatorTypeID']), trim($displayText) ); } } $primaryFields = array(); $fields = array_merge($primaryFields, $this->getUsedFields()); foreach ($fields as $field) { if (Zotero_Items::isPrimaryField($field)) { $fieldName = $field; } else { $fieldName = Zotero_ItemFields::getName($field); } // Skip certain fields switch ($fieldName) { case '': case 'userID': case 'libraryID': case 'key': case 'itemTypeID': case 'itemID': case 'title': case 'serverDateModified': case 'version': continue 2; } if (Zotero_ItemFields::isFieldOfBase($fieldName, 'title')) { continue; } $localizedFieldName = Zotero_ItemFields::getLocalizedString(false, $field); $value = $this->getField($field); $value = trim($value); // Skip empty fields if (!$value) { continue; } $fieldText = ''; // Shorten long URLs manually until Firefox wraps at ? // (like Safari) or supports the CSS3 word-wrap property if (false && preg_match("'https?://'", $value)) { $fieldText = $value; $firstSpace = strpos($value, ' '); // Break up long uninterrupted string if (($firstSpace === false && strlen($value) > 29) || $firstSpace > 29) { $stripped = false; /* // Strip query string for sites we know don't need it for each(var re in _noQueryStringSites) { if (re.test($field)){ var pos = $field.indexOf('?'); if (pos != -1) { fieldText = $field.substr(0, pos); stripped = true; } break; } } */ if (!$stripped) { // Add a line-break after the ? of long URLs //$fieldText = str_replace($field.replace('?', "?<ZOTEROBREAK/>"); // Strip query string variables from the end while the // query string is longer than the main part $pos = strpos($fieldText, '?'); if ($pos !== false) { while ($pos < (strlen($fieldText) / 2)) { $lastAmp = strrpos($fieldText, '&'); if ($lastAmp === false) { break; } $fieldText = substr($fieldText, 0, $lastAmp); $shortened = true; } // Append '&...' to the end if ($shortened) { $fieldText .= "&…"; } } } } if ($field == 'url') { $linkContainer = new SimpleXMLElement("<container/>"); $linkContainer->a = $value; $linkContainer->a['href'] = $fieldText; } } // Remove SQL date from multipart dates // (e.g. '2006-00-00 Summer 2006' becomes 'Summer 2006') else if ($fieldName == 'date') { $fieldText = $value; } // Convert dates to local format else if ($fieldName == 'accessDate' || $fieldName == 'dateAdded' || $fieldName == 'dateModified') { //$date = Zotero.Date.sqlToDate($field, true) $date = $value; //fieldText = escapeXML(date.toLocaleString()); $fieldText = $date; } else { $fieldText = $value; } if (isset($linkContainer)) { $tr = Zotero_Atom::addHTMLRow($html, $fieldName, $localizedFieldName, "", true); $tdNode = dom_import_simplexml($tr->td); $linkNode = dom_import_simplexml($linkContainer->a); $importedNode = $tdNode->ownerDocument->importNode($linkNode, true); $tdNode->appendChild($importedNode); unset($linkContainer); } else { Zotero_Atom::addHTMLRow($html, $fieldName, $localizedFieldName, $fieldText); } } if ($this->isNote() || $this->isAttachment()) { $note = $this->getNote(true); if ($note) { $tr = Zotero_Atom::addHTMLRow($html, "note", "Note", "", true); try { $noteXML = @new SimpleXMLElement("<td>" . $note . "</td>"); $trNode = dom_import_simplexml($tr); $tdNode = $trNode->getElementsByTagName("td")->item(0); $noteNode = dom_import_simplexml($noteXML); $importedNode = $trNode->ownerDocument->importNode($noteNode, true); $trNode->replaceChild($importedNode, $tdNode); unset($noteXML); } catch (Exception $e) { // Store non-HTML notes as <pre> $tr->td->pre = $note; } } } if ($this->isAttachment()) { Zotero_Atom::addHTMLRow($html, "linkMode", "Link Mode", $this->attachmentLinkMode); Zotero_Atom::addHTMLRow($html, "mimeType", "MIME Type", $this->attachmentMIMEType); Zotero_Atom::addHTMLRow($html, "charset", "Character Set", $this->attachmentCharset); // TODO: get from a constant /*if ($this->attachmentLinkMode != 3) { $doc->addField('path', $this->attachmentPath); }*/ } if ($this->getDeleted()) { Zotero_Atom::addHTMLRow($html, "deleted", "Deleted", "Yes"); } if ($asSimpleXML) { return $html; } return str_replace('<?xml version="1.0"?>', '', $html->asXML()); }
/** * Converts group to a SimpleXMLElement item * * @return SimpleXMLElement Group data as SimpleXML element */ public function toHTML() { if (($this->id || $this->libraryID) && !$this->loaded) { $this->load(); } $html = new SimpleXMLElement("<table/>"); $tr = Zotero_Atom::addHTMLRow($html, 'owner', "Owner", "", true); $tr->td->a = Zotero_Users::getUsername($this->ownerUserID); $tr->td->a['href'] = Zotero_URI::getUserURI($this->ownerUserID); Zotero_Atom::addHTMLRow($html, '', "Type", preg_replace('/([a-z])([A-Z])/', '$1 $2', $this->type)); Zotero_Atom::addHTMLRow($html, '', "Description", $this->description); Zotero_Atom::addHTMLRow($html, '', "URL", $this->url); Zotero_Atom::addHTMLRow($html, '', "Library Reading", ucwords($this->libraryReading)); Zotero_Atom::addHTMLRow($html, '', "Library Editing", ucwords($this->libraryEditing)); Zotero_Atom::addHTMLRow($html, '', "File Editing", ucwords($this->fileEditing)); $admins = $this->getAdmins(); if ($admins) { $tr = Zotero_Atom::addHTMLRow($html, '', "Admins", '', true); $ul = $tr->td->addChild('ul'); foreach ($admins as $admin) { $li = $ul->addChild('li'); $li->a = Zotero_Users::getUsername($admin); $li->a['href'] = Zotero_URI::getUserURI($admin); } } return $html; }