Drupal modules for browsing and managing Fedora-based digital repositories.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
5.1 KiB

<?php
13 years ago
13 years ago
/**
* @file
* ShowQTStreamsInFieldSets class
*/
/**
* Show QT Stream in Field Sets
*/
class ShowQtStreamsInFieldSets {
13 years ago
private $pid = NULL;
/**
* Constructor
* @param type $pid
*/
function ShowQtStreamsInFieldSets($pid) {
$this->pid = $pid;
}
13 years ago
/**
* Returna a new Fedora Object with the QT movie ???
* @return fedora_item
*/
function fedoraObject() {
return new fedora_item($this->pid);
}
13 years ago
/**
* Tecnical metadata ??
* @param type $defaults
* @param type $dsid
* @return type
*/
function technicalMetadata($defaults = array(), $dsid = 'OBJ_EXIFTOOL') {
$data = $defaults;
try {
13 years ago
$src = ObjectHelper::getStream($this->pid, $dsid);
$doc = new SimpleXMLElement($src);
$doc->registerXPathNamespace('File', 'http://ns.exiftool.ca/File/1.0/');
$doc->registerXPathNamespace('Composite', 'http://ns.exiftool.ca/Composite/1.0/');
$mime = reset($doc->xpath('//File:MIMEType'));
$data['mime'] = $mime;
if (strpos($mime, 'audio/') !== FALSE) {
13 years ago
$data['width'] = 300;
$data['height'] = 0;
}
else {
$size = reset($doc->xpath('//Composite:ImageSize/text()'));
list($width, $height) = explode('x', $size);
$data['width'] = $width;
$data['height'] = $height;
}
13 years ago
$data['doc'] = $src;
} catch (Exception $e) {
$data = $defaults;
}
return $data;
}
13 years ago
/**
* Get Poster Frame Datastream Information ??
* @param type $dsid
* @return type
*/
function getPosterFrameDatastreamInfo($dsid = 'FULL_SIZE') {
$p = ObjectHelper::getDatastreamInfo($this->pid, $dsid);
if (empty($p) || $p == ' ' || $p === FALSE) {
return FALSE;
}
return $p;
}
13 years ago
/**
* Get Media Datastream Information ??
* @param type $dsid
* @param type $alt
* @return type
*/
function getMediaDatastreamInfo($dsid = 'OBJ', $alt = array('')) {
$p = ObjectHelper::getDatastreamInfo($this->pid, $dsid);
if (empty($p) || $p == ' ' || $p === FALSE) {
13 years ago
if (!empty($alt)) {
$ds = array_shift($alt);
return $this->getMediaDatastreamInfo($ds, $alt);
}
return FALSE;
}
return $p;
}
13 years ago
/**
* Is download enabled. It always returns FALSE. ???
13 years ago
* @return FALSE
*/
function enableDownload() {
return FALSE;
}
13 years ago
/**
* Show the QT ???
* @global type $base_url
* @return type
*/
function showQt() {
module_load_include('inc', 'fedora_repository', 'plugins/tagging_form');
module_load_include('inc', 'fedora_repository', 'plugins/ShowStreamsInFieldSets');
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
$info = $this->technicalMetadata(array('width' => 640, 'height' => 480));
$width = $info['width'];
$height = $info['height'];
$pframe = $this->getPosterFrameDatastreamInfo();
$media = $this->getMediaDatastreamInfo('PROXY', array('OBJ'));
if ($media === FALSE) {
return '';
}
global $base_url;
$path = drupal_get_path('module', 'Fedora_Repository');
13 years ago
$fullPath = base_path() . $path;
$content = '';
$pathTojs = drupal_get_path('module', 'Fedora_Repository') . '/js/AC_Quicktime.js';
drupal_add_js($pathTojs);
13 years ago
$divid = 'player' . md5($this->pid) . 'MOV';
$content .= '<div class="player" id="' . $divid . '">';
if ($pframe !== FALSE) {
13 years ago
$content .= '<div class="poster" style="cursor: pointer; position: relative; width: ' . $width . 'px; min-height: ' . ($height) . 'px;">';
$content .= '<img src="' . base_path() . 'fedora/repository/' . $this->pid . '/' . $pframe->ID . '/poster.jpg' . '" />';
$content .= '<div class="play" style="font-size: 128px; color: white; position: absolute; top: 50%; left: 50%; margin-top: -0.085em; margin-left: -0.33em; opacity: 0.9; "></div>';
$content .= '</div>';
}
$content .= '</div>';
13 years ago
if ($this->enableDownload()) {
$url = base_path() . 'fedora/repository/' . $this->pid . '/OBJ/MOV.mov';
$content .= '<a class="download" href="' . $url . '">Download Media File</a>';
}
13 years ago
$src = base_path() . 'fedora/repository/' . $this->pid . '/' . $media->ID . '/MOV.mov';
$qtparams = '';
$qtparams .= "'autostart', '" . ($pframe !== FALSE ? 'TRUE' : 'FALSE') . "', ";
$init = <<<EOD
$(function() {
src = "$src";
if(src.substring(0,4) != 'http') {
src = 'http://' + location.host + src;
}
str = QT_GenerateOBJECTText_XHTML(src, "$width", ($height+15), '',
$qtparams
'postdomevents', 'TRUE',
'EnableJavaScript', 'TRUE',
'bgcolor', 'black',
'controller', 'TRUE',
'SCALE', 'aspect',
'LOOP', 'FALSE'
);
if($('.poster', '#$divid').length ==0) {
$('#$divid').append(str);
} else {
$('#$divid .poster').one('click', function() { $(this).hide(); $('#$divid').append(str); });
}
});
EOD;
13 years ago
drupal_add_js($init, 'inline', 'footer');
$collection_fieldset = array(
'#title' => t('Quicktime'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#value' => $content);
return theme('fieldset', $collection_fieldset);
}
}