|
Server : Apache/2.4.62 System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64 User : www ( 80) PHP Version : 8.3.8 Disable Function : NONE Directory : /domains/afglcweb/ny/sites/all/modules/filefield/filefield_meta/ |
Upload File : |
<?php
// $Id: filefield_meta.module,v 1.14 2009/04/20 22:29:24 quicksketch Exp $
/**
* @file
* FileField Meta: Add Video Support to File Field.
*/
/**
* Implementation of hook_theme().
*/
function filefield_meta_theme() {
return array(
'filefield_meta_duration' => array(
'arguments' => array('duration' => NULL),
),
'filefield_meta_samplerate' => array(
'arguments' => array('samplerate' => NULL),
),
'filefield_meta_bitrate' => array(
'arguments' => array('bitrate' => NULL),
),
);
}
/**
* Implementation of hook_cron().
*/
function filefield_meta_cron() {
$result = db_query('SELECT fm.fid FROM {filefield_meta} fm LEFT JOIN {files} f ON fm.fid=f.fid WHERE f.fid IS NULL');
while ($file = db_fetch_object($result)) {
db_query('DELETE FROM {filefield_meta} WHERE fid = %d', $file->fid);
}
}
/**
* Implementation of hook_views_api().
*/
function filefield_meta_views_api() {
return array(
'api' => 2.0,
'path' => drupal_get_path('module', 'filefield_meta') . '/includes',
);
}
/**
* Implementation of filefield's hook_file_insert().
*/
function filefield_meta_file_insert(&$file) {
if (!empty($file->fid)) {
filefield_meta($file);
$record = array_merge(array('fid' => $file->fid), $file->data);
drupal_write_record('filefield_meta', $record);
}
}
/**
* Implementation of filefield's hook_file_update().
*/
function filefield_meta_file_update(&$file) {
if (!empty($file->fid)) {
filefield_meta_file_delete($file);
filefield_meta_file_insert($file);
}
}
/**
* Implementation of filefield's hook_file_delete().
*/
function filefield_meta_file_delete($file) {
db_query('DELETE FROM {filefield_meta} WHERE fid = %d', $file->fid);
}
/**
* Adds the width, height and duration to the file's data property.
*/
function filefield_meta(&$file) {
$info = getid3_analyze($file->filepath);
$file->data['width'] = $file->data['height'] = $file->data['duration'] = 0;
if (isset($info['video']['resolution_x'])) {
$file->data['width'] = $info['video']['resolution_x'];
$file->data['height'] = $info['video']['resolution_y'];
}
elseif (isset($info['video']['streams'])) {
foreach ($info['video']['streams'] as $stream) {
$file->data['width'] = max($file->data['width'], $stream['resolution_x']);
$file->data['height'] = max($file->data['height'], $stream['resolution_y']);
}
}
if (isset($info['playtime_seconds'])) {
$file->data['duration'] = $info['playtime_seconds'];
}
// initialize fields.
$file->data['audio_format'] = $file->data['audio_channel_mode'] = $file->data['audio_bitrate_mode'] = '';
$file->data['audio_sample_rate'] = $file->data['audio_bitrate'] = 0;
if (isset($info['audio'])) {
$file->data['audio_format'] = $info['audio']['dataformat']; //e.g. mp3
$file->data['audio_sample_rate'] = $info['audio']['sample_rate']; //e.g. 44100
$file->data['audio_channel_mode'] = $info['audio']['channelmode']; // e.g. mono
$file->data['audio_bitrate'] = isset($info['audio']['bitrate']) ? $info['audio']['bitrate'] : NULL; //e.g. 64000
$file->data['audio_bitrate_mode'] = isset($info['audio']['bitrate_mode']) ? $info['audio']['bitrate_mode'] : NULL; //e.g. cbr
}
};
/**
* Convert the float duration into a pretty string.
*
* @param $duration
*/
function theme_filefield_meta_duration($duration) {
$seconds = round((($duration / 60) - floor($duration / 60)) * 60);
$minutes = floor($duration / 60);
if ($seconds >= 60) {
$seconds -= 60;
$minutes++;
}
return intval($minutes) . ':' . str_pad($seconds, 2, 0, STR_PAD_LEFT);
}
/**
* Formats audio sample rate.
*/
function theme_filefield_meta_samplerate($samplerate) {
return sprintf("%.1f kHz", $samplerate/1000);
}
/**
* Formats audio bit rate.
*/
function theme_filefield_meta_bitrate($bitrate) {
return sprintf("%d Kbps", $bitrate/1000);
}