MonitorId() ) ) { $view = 'error'; return; } $monitor = $event->Monitor(); if ( isset($_REQUEST['rate']) ) $rate = validInt($_REQUEST['rate']); else $rate = reScale(RATE_BASE, $monitor->DefaultRate(), ZM_WEB_DEFAULT_RATE); if ( isset($_REQUEST['scale']) ) $scale = validInt($_REQUEST['scale']); else $scale = reScale(SCALE_BASE, $monitor->DefaultScale(), ZM_WEB_DEFAULT_SCALE); $event_path = $event->Path(); $videoFormats = array(); $ffmpegFormats = preg_split('/\s+/', ZM_FFMPEG_FORMATS); foreach ( $ffmpegFormats as $ffmpegFormat ) { if ( preg_match('/^([^*]+)(\*\*?)$/', $ffmpegFormat, $matches) ) { $videoFormats[$matches[1]] = $matches[1]; if ( !isset($videoFormat) && $matches[2] == '*' ) { $videoFormat = $matches[1]; } } else { $videoFormats[$ffmpegFormat] = $ffmpegFormat; } } $videoFiles = array(); if ( $dir = opendir($event_path) ) { while ( ($file = readdir($dir)) !== false ) { $file = $event_path.'/'.$file; if ( is_file($file) ) { if ( preg_match('/\.(?:'.join('|', $videoFormats).')$/', $file) ) { $videoFiles[] = $file; } } } closedir($dir); } if ( isset($_REQUEST['deleteIndex']) ) { $deleteIndex = validInt($_REQUEST['deleteIndex']); unlink($videoFiles[$deleteIndex]); unset($videoFiles[$deleteIndex]); } if ( isset($_REQUEST['downloadIndex']) ) { // can't be output buffering, as this file might be large ob_end_clean(); $downloadIndex = validInt($_REQUEST['downloadIndex']); ZM\Error("Download $downloadIndex, file: " . $videoFiles[$downloadIndex]); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private', false); // required by certain browsers header('Content-Description: File Transfer'); header('Content-disposition: attachment; filename="'.basename($videoFiles[$downloadIndex]).'"'); // basename is required because the video index contains the path and firefox doesn't strip the path but simply replaces the slashes with an underscore. header('Content-Transfer-Encoding: binary'); header('Content-Type: application/force-download'); header('Content-Length: '.filesize($videoFiles[$downloadIndex])); readfile($videoFiles[$downloadIndex]); exit; } $focusWindow = true; xhtmlHeaders(__FILE__, translate('Video')); ?>

checked="checked"/>

0 ) { preg_match('/^(.+)-((?:r[_\d]+)|(?:F[_\d]+))-((?:s[_\d]+)|(?:S[0-9a-z]+))\.([^.]+)$/', $file, $matches); if ( preg_match('/^r(.+)$/', $matches[2], $temp_matches) ) { $rate = (int)(100 * preg_replace( '/_/', '.', $temp_matches[1] ) ); $rateText = isset($rates[$rate])?$rates[$rate]:($rate."x"); } elseif ( preg_match('/^F(.+)$/', $matches[2], $temp_matches) ) { $rateText = $temp_matches[1].'fps'; } if ( preg_match('/^s(.+)$/', $matches[3], $temp_matches) ) { $scale = (int)(100 * preg_replace('/_/', '.', $temp_matches[1]) ); $scaleText = isset($scales[$scale])?$scales[$scale]:($scale.'x'); } elseif ( preg_match('/^S(.+)$/', $matches[3], $temp_matches) ) { $scaleText = $temp_matches[1]; } $width = $scale?reScale($event->Width(), $scale):$event->Width(); $height = $scale?reScale($event->Height(), $scale):$event->Height(); ?>
Id().'&width='.$width.'&height='.$height.'&showIndex='.$index, translate('View') ); ?>  /   /