Merge pull request #1501 from ZoneMinder/fix_zone_edit

Fix zone edit
This commit is contained in:
Andrew Bauer 2016-05-31 10:33:31 -05:00
commit a57a3d3186
4 changed files with 79 additions and 82 deletions

View File

@ -191,6 +191,15 @@ function getMimeType( $file ) {
} }
function outputVideoStream( $id, $src, $width, $height, $format, $title="" ) { function outputVideoStream( $id, $src, $width, $height, $format, $title="" ) {
echo getVideoStreamHTML( $id, $src, $width, $height, $format, $title );
}
function getVideoStreamHTML( $id, $src, $width, $height, $format, $title="" ) {
$html = '';
$width = validInt($width);
$height = validInt($height);
$title = validHtmlStr($title);
if ( file_exists( $src ) ) { if ( file_exists( $src ) ) {
$mimeType = getMimeType( $src ); $mimeType = getMimeType( $src );
} else { } else {
@ -222,7 +231,6 @@ function outputVideoStream( $id, $src, $width, $height, $format, $title="" ) {
} }
if ( !$mimeType || ($mimeType == 'application/octet-stream') ) if ( !$mimeType || ($mimeType == 'application/octet-stream') )
$mimeType = 'video/'.$format; $mimeType = 'video/'.$format;
$objectTag = false;
if ( ZM_WEB_USE_OBJECT_TAGS ) { if ( ZM_WEB_USE_OBJECT_TAGS ) {
switch( $mimeType ) { switch( $mimeType ) {
case "video/x-ms-asf" : case "video/x-ms-asf" :
@ -230,105 +238,88 @@ function outputVideoStream( $id, $src, $width, $height, $format, $title="" ) {
case "video/mp4" : case "video/mp4" :
{ {
if ( isWindows() ) { if ( isWindows() ) {
?> return '<object id="'.$id.'" width="'.$width.'" height="'.$height.'
<object id="<?php echo $id ?>" width="<?php echo validNum($width) ?>" height="<?php echo validNum($height) ?>"
classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,902" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,902"
standby="Loading Microsoft Windows Media Player components..." standby="Loading Microsoft Windows Media Player components..."
type="<?php echo $mimeType ?>"> type="'.$mimeType.'">
<param name="FileName" value="<?php echo $src ?>"/> <param name="FileName" value="'.$src.'"/>
<param name="autoStart" value="1"/> <param name="autoStart" value="1"/>
<param name="showControls" value="0"/> <param name="showControls" value="0"/>
<embed type="<?php echo $mimeType ?>" <embed type="'.$mimeType.'"
pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/"
src="<?php echo $src ?>" src="'.$src.'"
name="<?php echo validHtmlStr($title) ?>" name="'.$title.'"
width="<?php echo validNum($width) ?>" width="'.$width.'"
height="<?php echo validInt($height) ?>" height="'.$height.'"
autostart="1" autostart="1"
showcontrols="0"> showcontrols="0">
</embed> </embed>
</object> </object>';
<?php
$objectTag = true;
} }
break;
} }
case "video/quicktime" : case "video/quicktime" :
{ {
?> return '<object id="'.$id.'" width="'.$width.'" height="'.$height.'"
<object id="<?php echo $id ?>" width="<?php echo $width ?>" height="<?php echo $height ?>"
classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
codebase="http://www.apple.com/qtactivex/qtplugin.cab" codebase="http://www.apple.com/qtactivex/qtplugin.cab"
type="<?php echo $mimeType ?>"> type="'.$mimeType.'">
<param name="src" value="<?php echo $src ?>"/> <param name="src" value="'.$src.'"/>
<param name="autoplay" VALUE="true"/> <param name="autoplay" VALUE="true"/>
<param name="controller" VALUE="false"/> <param name="controller" VALUE="false"/>
<embed type="<?php echo $mimeType ?>" <embed type="'.$mimeType.'"
src="<?php echo $src ?>" src="'.$src.'"
pluginspage="http://www.apple.com/quicktime/download/" pluginspage="http://www.apple.com/quicktime/download/"
name="<?php echo validHtmlStr($title) ?>" name="'.$title.'" width="'.$width.'" height="'.$height.'"
width="<?php echo validInt($width) ?>"
height="<?php echo validInt($height) ?>"
autoplay="true" autoplay="true"
controller="true"> controller="true">
</embed> </embed>
</object> </object>';
<?php
$objectTag = true;
break;
} }
case "application/x-shockwave-flash" : case "application/x-shockwave-flash" :
{ {
?> return '<object id="'.$id.'" width="'.$width.'" height="'.$height.'"
<object id="<?php echo $id ?>" width="<?php echo $width ?>" height="<?php echo $height ?>"
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"
type="<?php echo $mimeType ?>"> type="'.$mimeType.'">
<param name="movie" value="<?php echo $src ?>"/> <param name="movie" value="'.$src.'"/>
<param name="quality" value="high"/> <param name="quality" value="high"/>
<param name="bgcolor" value="#ffffff"/> <param name="bgcolor" value="#ffffff"/>
<embed type="<?php echo $mimeType ?>" <embed type="'.$mimeType.'"
pluginspage="http://www.macromedia.com/go/getflashplayer" pluginspage="http://www.macromedia.com/go/getflashplayer"
src="<?php echo $src ?>" src="'.$src.'"
name="<?php echo validHtmlStr($title) ?>" name="'.$title.'"
width="<?php echo validInt($width) ?>" width="'.$width.'"
height="<?php echo validInt($height) ?>" height="'.$height.'"
quality="high" quality="high"
bgcolor="#ffffff"> bgcolor="#ffffff">
</embed> </embed>
</object> </object>';
<?php
$objectTag = true;
break;
} }
} } # end switch
} } # end if use object tags
if ( !$objectTag ) { return '<embed'. ( isset($mimeType)?(' type="'.$mimeType.'"'):'' ). '
?> src="'.$src.'"
<embed<?php echo isset($mimeType)?(' type="'.$mimeType.'"'):"" ?> name="'.$title.'"
src="<?php echo $src ?>" width="'.$width.'"
name="<?php echo validHtmlStr($title) ?>" height="'.$height.'"
width="<?php echo validInt($width) ?>"
height="<?php echo validInt($height) ?>"
autostart="1" autostart="1"
autoplay="1" autoplay="1"
showcontrols="0" showcontrols="0"
controller="0"> controller="0">
</embed> </embed>';
<?php
}
} }
function outputImageStream( $id, $src, $width, $height, $title="" ) { function outputImageStream( $id, $src, $width, $height, $title="" ) {
echo getImageStream( $id, $src, $width, $height, $title );
}
function getImageStream( $id, $src, $width, $height, $title="" ) {
if ( canStreamIframe() ) { if ( canStreamIframe() ) {
?> return '<iframe id="'.$id.'" src="'.$src.'" alt="'. validHtmlStr($title) .'" width="'. validInt($width)." height=".validInt($height).'"/>';
<iframe id="<?php echo $id ?>" src="<?php echo $src ?>" alt="<?php echo validHtmlStr($title) ?>" width="<?php echo $width ?>" height="<?php echo $height ?>"/>
<?php
} else { } else {
?> return '<img id="'.$id.'" src="'.$src.'" alt="'. validHtmlStr($title) .'" width="'. validInt($width) .'" height="'. validInt( $height ).'"/>';
<img id="<?php echo $id ?>" src="<?php echo $src ?>" alt="<?php echo validHtmlStr($title) ?>" width="<?php echo $width ?>" height="<?php echo $height ?>"/>
<?php
} }
} }
@ -374,9 +365,10 @@ function outputHelperStream( $id, $src, $width, $height, $title="" ) {
} }
function outputImageStill( $id, $src, $width, $height, $title="" ) { function outputImageStill( $id, $src, $width, $height, $title="" ) {
?> echo getImageStill( $id, $src, $width, $height, $title="" );
<img id="<?php echo $id ?>" src="<?php echo $src ?>" alt="<?php echo $title ?>" width="<?php echo $width ?>" height="<?php echo $height ?>"/> }
<?php function getImageStill( $id, $src, $width, $height, $title="" ) {
return '<img id="'.$id.'" src="'.$src.'" alt="'.$title.'" width="'.$width.'" height="'.$height.'"/>';
} }
function outputControlStill( $src, $width, $height, $monitor, $scale, $target ) { function outputControlStill( $src, $width, $height, $monitor, $scale, $target ) {
@ -2100,17 +2092,18 @@ function getStreamHTML( $monitor, $scale=100 ) {
//FIXME, the width and height of the image need to be scaled. //FIXME, the width and height of the image need to be scaled.
if ( ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT ) { if ( ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT ) {
$streamSrc = $monitor->getStreamSrc( array( "mode=mpeg", "scale=".$scale, "bitrate=".ZM_WEB_VIDEO_BITRATE, "maxfps=".ZM_WEB_VIDEO_MAXFPS, "format=".ZM_MPEG_LIVE_FORMAT ) ); $streamSrc = $monitor->getStreamSrc( array( "mode=mpeg", "scale=".$scale, "bitrate=".ZM_WEB_VIDEO_BITRATE, "maxfps=".ZM_WEB_VIDEO_MAXFPS, "format=".ZM_MPEG_LIVE_FORMAT ) );
outputVideoStream( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), ZM_MPEG_LIVE_FORMAT, $monitor->Name() ); return getVideoStream( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), ZM_MPEG_LIVE_FORMAT, $monitor->Name() );
} else if ( canStream() ) { } else if ( canStream() ) {
$streamSrc = $monitor->getStreamSrc( array( 'mode=jpeg', 'scale='.$scale, 'maxfps='.ZM_WEB_VIDEO_MAXFPS, 'buffer='.$monitor->StreamReplayBuffer() ) ); $streamSrc = $monitor->getStreamSrc( array( 'mode=jpeg', 'scale='.$scale, 'maxfps='.ZM_WEB_VIDEO_MAXFPS, 'buffer='.$monitor->StreamReplayBuffer() ) );
if ( canStreamNative() ) if ( canStreamNative() ) {
outputImageStream( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), $monitor->Name() ); return getImageStream( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), $monitor->Name() );
elseif ( canStreamApplet() ) } elseif ( canStreamApplet() ) {
outputHelperStream( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), $monitor->Name() ); return getHelperStream( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), $monitor->Name() );
}
} else { } else {
$streamSrc = $monitor->getStreamSrc( array( 'mode=single', "scale=".$scale ) ); $streamSrc = $monitor->getStreamSrc( array( 'mode=single', "scale=".$scale ) );
outputImageStill( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), $monitor->Name() );
Info( "The system has fallen back to single jpeg mode for streaming. Consider enabling Cambozola or upgrading the client browser."); Info( "The system has fallen back to single jpeg mode for streaming. Consider enabling Cambozola or upgrading the client browser.");
return getImageStill( "liveStream", $streamSrc, reScale( $monitor->Width(), $scale ), reScale( $monitor->Height(), $scale ), $monitor->Name() );
} }
} // end function getStreamHTML } // end function getStreamHTML

View File

@ -350,7 +350,7 @@ echo $Server->Name();
<?php <?php
} }
?> ?>
<td class="colZones"><?php echo makePopupLink( '?view=zones&amp;mid='.$monitor['Id'], 'zmZones', array( 'zones', $monitor['Width'], $monitor['Height'] ), $monitor['ZoneCount'], canView( 'Monitors' ) ) ?></td> <td class="colZones"><?php echo makePopupLink( '?view=zones&amp;mid='.$monitor['Id'], 'zmZones', array( 'zones', $monitor['Width'], $monitor['Height'] ), $monitor['ZoneCount'], $running && canView( 'Monitors' ) ) ?></td>
<?php <?php
if ( canEdit('Monitors') ) if ( canEdit('Monitors') )
{ {

View File

@ -118,6 +118,10 @@ $selfIntersecting = isSelfIntersecting( $newZone['Points'] );
$focusWindow = true; $focusWindow = true;
$connkey = generateConnKey(); $connkey = generateConnKey();
$streamSrc = '';
$streamMode = '';
# Have to do this here, because the .js.php references somethings figured out when generating the streamHTML
$StreamHTML = getStreamHTML( $monitor, $scale );
xhtmlHeaders(__FILE__, translate('Zone') ); xhtmlHeaders(__FILE__, translate('Zone') );
?> ?>
@ -210,9 +214,9 @@ xhtmlHeaders(__FILE__, translate('Zone') );
</div> </div>
<div id="definitionPanel"> <div id="definitionPanel">
<div id="imagePanel"> <div id="imagePanel">
<div id="imageFrame" style="width: <?php echo reScale( $monitor->Width(), $scale ) ?>px; height: <?php echo reScale( $monitor->Height(), $scale ) ?>px;"> <div id="imageFrame" style="position: relative; width: <?php echo reScale( $monitor->Width(), $scale ) ?>px; height: <?php echo reScale( $monitor->Height(), $scale ) ?>px;">
<?php echo getStreamHTML( $monitor, $scale ); ?> <?php echo $StreamHTML; ?>
<svg id="zoneSVG" class="zones" style="width: <?php echo reScale( $monitor->Width(), $scale ) ?>px; height: <?php echo reScale( $monitor->Height(), $scale ) ?>px;margin-top: -<?php echo $monitor->Height ?>px;background: none;"> <svg id="zoneSVG" class="zones" style="position: absolute; top: 0; left: 0; width: <?php echo reScale( $monitor->Width(), $scale ) ?>px; height: <?php echo reScale( $monitor->Height(), $scale ) ?>px; background: none;">
<polygon id="zonePoly" points="<?php echo $zone['AreaCoords'] ?>" class="<?php echo $zone['Type'] ?>"/> <polygon id="zonePoly" points="<?php echo $zone['AreaCoords'] ?>" class="<?php echo $zone['Type'] ?>"/>
Sorry, your browser does not support inline SVG Sorry, your browser does not support inline SVG
</svg> </svg>

View File

@ -47,9 +47,9 @@ xhtmlHeaders(__FILE__, translate('Zones') );
<div id="headerButtons"><a href="#" onclick="closeWindow();"><?php echo translate('Close') ?></a></div> <div id="headerButtons"><a href="#" onclick="closeWindow();"><?php echo translate('Close') ?></a></div>
<h2><?php echo translate('Zones') ?></h2> <h2><?php echo translate('Zones') ?></h2>
</div> </div>
<div id="content"> <div id="content" style="width:<?php echo $monitor->Width() ?>px; height:<?php echo $monitor->Height() ?>px; position:relative; margin: 0 auto;">
<?php echo getStreamHTML( $monitor ); ?> <?php echo getStreamHTML( $monitor ); ?>
<svg class="zones" width="<?php echo $monitor->Width ?>" height="<?php echo $monitor->Height ?>" style="margin-top: -<?php echo $monitor->Height ?>px;background: none;"> <svg class="zones" width="<?php echo $monitor->Width() ?>" height="<?php echo $monitor->Height() ?>" style="position:absolute; top: 0; left: 0; background: none;">
<?php <?php
foreach( array_reverse($zones) as $zone ) { foreach( array_reverse($zones) as $zone ) {
?> ?>