/** * Add an Asset to the feed * * @param object Asset $asset * @return object RSSItem * @access public * @since 8/8/06 */ function getAssetItem($asset) { $harmoni = Harmoni::instance(); $idManager = Services::getService("IdManager"); $assetId = $asset->getId(); $repository = $asset->getRepository(); $repositoryId = $repository->getId(); $item = new RSSItem(); $item->setTitle($asset->getDisplayName()); $item->setLink($harmoni->request->quickURL('asset', 'view', array('collection_id' => $repositoryId->getIdString(), 'asset_id' => $assetId->getIdString()))); if (RequestContext::value('order') == 'modification') { $item->setPubDate($asset->getModificationDate()); } else { $item->setPubDate($asset->getCreationDate()); } $type = $asset->getAssetType(); $item->addCategory($type->getKeyword(), $type->getDomain()); // The item HTML ob_start(); print "<div>"; /********************************************************* * Files *********************************************************/ print "\n\t<div id='files' style='float: right; max-width: 60%;'>"; $fileRecords = $asset->getRecordsByRecordStructure($idManager->getId("FILE")); while ($fileRecords->hasNext()) { $fileRecord = $fileRecords->next(); $fileUrl = RepositoryInputOutputModuleManager::getFileUrlForRecord($asset, $fileRecord); print "\n\t<div style='height: 200px; width: 200px; text-align: center; vertical-align: middle; float: left;'>"; print "\n\t\t<a href='" . $fileUrl . "'>"; print "\n\t\t<img src='"; print RepositoryInputOutputModuleManager::getThumbnailUrlForRecord($asset, $fileRecord); print "' style='vertical-align: middle;'/>"; print "\n\t\t</a>"; print "\n\t</div>"; // Add it as an enclosure $fileSizeParts = $fileRecord->getPartsByPartStructure($idManager->getId('FILE_SIZE')); $fileSizePart = $fileSizeParts->next(); $mimeTypeParts = $fileRecord->getPartsByPartStructure($idManager->getId('MIME_TYPE')); $mimeTypePart = $mimeTypeParts->next(); $item->addEnclosure($fileUrl, $fileSizePart->getValue(), $mimeTypePart->getValue()); } print "\n\t</div>"; /********************************************************* * Basic metadata *********************************************************/ print "\n\t<dl>"; if ($asset->getDescription()) { $description = HtmlString::withValue($asset->getDescription()); $description->clean(); print "\n\t\t<dt style='font-weight: bold;'>" . _("Description:") . "</dt>"; print "\n\t\t<dd>" . $description->asString() . "</dd>"; } $date = $asset->getModificationDate(); print "\n\t\t<dt style='font-weight: bold;'>"; print _("Modification Date"); print ":</dt>\n\t\t<dd >"; print $date->monthName() . " " . $date->dayOfMonth() . ", " . $date->year() . " " . $date->hmsString() . " " . $date->timeZoneAbbreviation(); print "</dd>"; $date = $asset->getCreationDate(); print "\n\t\t<dt style='font-weight: bold;'>"; print _("Creation Date"); print ":</dt>\n\t\t<dd >"; print $date->monthName() . " " . $date->dayOfMonth() . ", " . $date->year() . " " . $date->hmsString() . " " . $date->timeZoneAbbreviation(); print "</dd>"; if (is_object($asset->getEffectiveDate())) { $date = $asset->getEffectiveDate(); print "\n\t\t<dt style='font-weight: bold;'>"; print _("Effective Date"); print ":</dt>\n\t\t<dd >"; print $date->monthName() . " " . $date->dayOfMonth() . ", " . $date->year() . " " . $date->hmsString() . " " . $date->timeZoneAbbreviation(); print "</dd>"; } if (is_object($asset->getExpirationDate())) { $date = $asset->getExpirationDate(); print "\n\t\t<dt style='font-weight: bold;'>"; print _("Expiration Date"); print ":</dt>\n\t\t<dd >"; print $date->monthName() . " " . $date->dayOfMonth() . ", " . $date->year() . " " . $date->hmsString() . " " . $date->timeZoneAbbreviation(); print "</dd>"; } print "\n\t</dl>"; /********************************************************* * Other Info Records *********************************************************/ // Get the set of RecordStructures so that we can print them in order. $setManager = Services::getService("Sets"); $structSet = $setManager->getPersistentSet($repositoryId); $structSet->reset(); // First, lets go through the info structures listed in the set and print out // the info records for those structures in order. while ($structSet->hasNext()) { $structureId = $structSet->next(); if ($structureId->isEqual($idManager->getId("FILE"))) { continue; } $recordStructure = $repository->getRecordStructure($structureId); $records = $asset->getRecordsByRecordStructure($structureId); while ($records->hasNext()) { $record = $records->next(); $recordId = $record->getId(); print "\n\t<hr />"; print "\n\t<h3>" . $recordStructure->getDisplayName() . "</h3>"; $this->printRecord($repositoryId, $assetId, $record); } } print "</div>"; print "\n\t<div style='clear: both;'>"; print "</div>"; $item->setDescription(ob_get_clean()); return $item; }
/** * Return the URL of a file for a given Asset. If the Asset has multiple * files, only one will be returned. * * @param object Id $assetId * @return string The URL of the thumbnail * @access public * @since 7/22/05 * @static */ static function getFileUrlForAsset($assetOrId) { ArgumentValidator::validate($assetOrId, OrValidatorRule::getRule(ExtendsValidatorRule::getRule("Id"), ExtendsValidatorRule::getRule("Asset"))); $rule = ExtendsValidatorRule::getRule("Id"); if ($rule->check($assetOrId)) { $repositoryManager = Services::getService("RepositoryManager"); $asset = $repositoryManager->getAsset($assetOrId); } else { $asset = $assetOrId; } if (!$asset) { return false; } $fileRecord = RepositoryInputOutputModuleManager::getFirstImageOrFileRecordForAsset($asset); return RepositoryInputOutputModuleManager::getFileUrlForRecord($asset, $fileRecord); }
/** * Answer out an XML block representing the given asset, its Dublin Core, and * its file records * * @param object Asset $asset * @return void * @access public * @since 1/26/07 */ function getAssetXml($asset) { try { $idManager = Services::getService("Id"); $authZ = Services::getService("AuthZ"); if (!$authZ->isUserAuthorized($idManager->getId("edu.middlebury.authorization.view"), $asset->getId())) { return ''; } ob_start(); $assetId = $asset->getId(); $repository = $asset->getRepository(); $repositoryId = $repository->getId(); print "\n\t<asset id=\"" . $assetId->getIdString() . "\" repositoryId=\"" . $repositoryId->getIdString() . "\">"; print "\n\t\t<displayName><![CDATA["; print HtmlString::getSafeHtml($asset->getDisplayName()); print "]]></displayName>"; print "\n\t\t<description><![CDATA["; print HtmlString::getSafeHtml($asset->getDescription()); print "]]></description>"; print "\n\t\t<modificationDate><![CDATA["; $date = $asset->getModificationDate(); print $date->asString(); print "]]></modificationDate>"; print "\n\t\t<authorization function='edu.middlebury.authorization.view' />"; if ($authZ->isUserAuthorized($idManager->getId("edu.middlebury.authorization.modify"), $asset->getId())) { print "\n\t\t<authorization function='edu.middlebury.authorization.modify' />"; } if ($authZ->isUserAuthorized($idManager->getId("edu.middlebury.authorization.delete"), $asset->getId())) { print "\n\t\t<authorization function='edu.middlebury.authorization.delete' />"; } /********************************************************* * Files *********************************************************/ $fileRecords = $asset->getRecordsByRecordStructure($idManager->getId('FILE')); while ($fileRecords->hasNext()) { $fileRecord = $fileRecords->next(); $fileRecordId = $fileRecord->getId(); print "\n\t\t<file id=\"" . $fileRecordId->getIdString() . "\""; print " mimetype=\"" . $fileRecord->getPartsByPartStructure($idManager->getId("MIME_TYPE"))->next()->getValue() . "\""; print ">"; $parts = $fileRecord->getPartsByPartStructure($idManager->getId("FILE_NAME")); $part = $parts->next(); print "\n\t\t\t<name><![CDATA[" . HtmlString::getSafeHtml($part->getValue()) . "]]></name>"; $parts = $fileRecord->getPartsByPartStructure($idManager->getId("FILE_SIZE")); $part = $parts->next(); print "\n\t\t\t<size>" . $part->getValue() . "</size>"; print "\n\t\t\t<url><![CDATA["; print RepositoryInputOutputModuleManager::getFileUrlForRecord($asset, $fileRecord); print "]]></url>"; print "\n\t\t\t<thumbnailUrl><![CDATA["; print RepositoryInputOutputModuleManager::getThumbnailUrlForRecord($asset, $fileRecord); print "]]></thumbnailUrl>"; print "\n\t\t</file>"; } /********************************************************* * Dublin Core *********************************************************/ $records = $asset->getRecordsByRecordStructure($idManager->getId('dc')); if ($records->hasNext()) { $record = $records->next(); $recordId = $record->getId(); print "\n\t\t<dublinCore id=\"" . $recordId->getIdString() . "\">"; $parts = $record->getPartsByPartStructure($idManager->getId("dc.title")); if ($parts->hasNext()) { $part = $parts->next(); $valueObj = $part->getValue(); print "\n\t\t\t<title><![CDATA[" . HtmlString::getSafeHtml($valueObj->asString()) . "]]></title>"; } $parts = $record->getPartsByPartStructure($idManager->getId("dc.description")); if ($parts->hasNext()) { $part = $parts->next(); $valueObj = $part->getValue(); print "\n\t\t\t<description><![CDATA[" . HtmlString::getSafeHtml($valueObj->asString()) . "]]></description>"; } $parts = $record->getPartsByPartStructure($idManager->getId("dc.creator")); if ($parts->hasNext()) { $part = $parts->next(); $valueObj = $part->getValue(); print "\n\t\t\t<creator><![CDATA[" . HtmlString::getSafeHtml($valueObj->asString()) . "]]></creator>"; } $parts = $record->getPartsByPartStructure($idManager->getId("dc.source")); if ($parts->hasNext()) { $part = $parts->next(); $valueObj = $part->getValue(); print "\n\t\t\t<source><![CDATA[" . HtmlString::getSafeHtml($valueObj->asString()) . "]]></source>"; } $parts = $record->getPartsByPartStructure($idManager->getId("dc.publisher")); if ($parts->hasNext()) { $part = $parts->next(); $valueObj = $part->getValue(); print "\n\t\t\t<publisher><![CDATA[" . HtmlString::getSafeHtml($valueObj->asString()) . "]]></publisher>"; } $parts = $record->getPartsByPartStructure($idManager->getId("dc.date")); if ($parts->hasNext()) { $part = $parts->next(); $valueObj = $part->getValue(); $date = $valueObj->asDate(); print "\n\t\t\t<date><![CDATA["; print $date->asString(); print "]]></date>"; } print "\n\t\t</dublinCore>"; } print "\n\t\t<permsHtml><![CDATA["; print AuthZPrinter::getAZIcon($asset->getId()); print "]]></permsHtml>"; print "\n\t</asset>"; return ob_get_clean(); } catch (Exception $e) { HarmoniErrorHandler::logException($e, 'Segue'); $this->error($e->getMessage()); } }
/** * Generate HTML for displaying particular parts of the Record * * @param object $record The record to print. * @param array $partStructures An array of particular partStructures to print. * @return string * @access public * @since 10/19/04 */ function generateDisplayForPartStructures(Id $repositoryId, Id $assetId, Record $record, array $partStructures) { ArgumentValidator::validate($partStructures, new ArrayValidatorRuleWithRule(new ExtendsValidatorRule("PartStructure"))); $partIterator = $record->getParts(); $parts = array(); while ($partIterator->hasNext()) { $part = $partIterator->next(); $partStructure = $part->getPartStructure(); $partStructureId = $partStructure->getId(); if (!isset($parts[$partStructureId->getIdString()]) || !is_array($parts[$partStructureId->getIdString()])) { $parts[$partStructureId->getIdString()] = array(); } $parts[$partStructureId->getIdString()][] = $part; } // print out the parts; ob_start(); $partStructuresToSkip = array('FILE_DATA', 'THUMBNAIL_DATA', 'THUMBNAIL_MIME_TYPE', 'THUMBNAIL_DIMENSIONS'); $printThumbnail = FALSE; foreach (array_keys($partStructures) as $key) { $partStructure = $partStructures[$key]; $partStructureId = $partStructure->getId(); if (!in_array($partStructureId->getIdString(), $partStructuresToSkip)) { print "\n<strong>" . $partStructure->getDisplayName() . ":</strong> \n"; switch ($partStructureId->getIdString()) { case 'FILE_SIZE': $size = ByteSize::withValue($parts[$partStructureId->getIdString()][0]->getValue()); print $size->asString(); break; case 'DIMENSIONS': $dimensionArray = $parts[$partStructureId->getIdString()][0]->getValue(); print "<em>" . _('width: ') . "</em>" . $dimensionArray[0] . 'px<em>;</em> '; print "<em>" . _('height: ') . "</em>" . $dimensionArray[1] . 'px'; break; default: print $parts[$partStructureId->getIdString()][0]->getValue(); } print "\n<br />"; } else { $printThumbnail = TRUE; } } $html = ob_get_clean(); $harmoni = Harmoni::instance(); $harmoni->request->startNamespace("polyphony-repository"); if ($printThumbnail) { ob_start(); $recordId = $record->getId(); $ns = $harmoni->request->endNamespace(); // ======= VIEWER LINK ======== // $xmlAssetIdString = $harmoni->request->get("asset_id"); print "<a href='#' onclick='Javascript:window.open("; print '"' . VIEWER_URL . "?&source="; print urlencode($harmoni->request->quickURL("asset", "browserecordxml", array("collection_id" => $repositoryId->getIdString(), "asset_id" => $xmlAssetIdString, "record_id" => $recordId->getIdString(), RequestContext::name("limit_by") => RequestContext::value("limit_by"), RequestContext::name("type") => RequestContext::value("type"), RequestContext::name("searchtype") => RequestContext::value("searchtype"), RequestContext::name("searchstring") => RequestContext::value("searchstring")))); print '&start=0", '; print '"' . preg_replace("/[^a-z0-9]/i", '_', $assetId->getIdString()) . '", '; print '"toolbar=no,location=no,directories=no,status=yes,scrollbars=yes,resizable=yes,copyhistory=no,width=600,height=500"'; print ")'>"; $harmoni->request->startNamespace($ns); // If we have a thumbnail with a valid mime type, print a link to that. $thumbnailName = preg_replace("/\\.[^\\.]+\$/", "", $parts['FILE_NAME'][0]->getValue()); if ($thumbnailMimeType = $parts['THUMBNAIL_MIME_TYPE'][0]->getValue()) { $mime = Services::getService("MIME"); $thumbnailName .= "." . $mime->getExtensionForMIMEType($thumbnailMimeType); } print "\n<img src='"; print RepositoryInputOutputModuleManager::getThumbnailUrlForRecord($assetId, $record); print "'"; print " style='border: 0px;'"; print " alt='Thumbnail image.'"; print " align='left'"; print " />"; print "</a> <br />"; $html2 = ob_get_clean(); ob_start(); print "\n<a href='"; print RepositoryInputOutputModuleManager::getFileUrlForRecord($assetId, $record); print "' target='_blank'>"; print "Download This File</a>\n"; $downloadlink = ob_get_clean(); $html = "<table border=0><tr><td>" . $html2 . "</td><td>" . $html . $downloadlink . "</td></tr></table>"; } $harmoni->request->endNamespace(); return $html; }