PageRenderTime 74ms CodeModel.GetById 45ms RepoModel.GetById 0ms app.codeStats 0ms

/web/skins/classic/views/event.php

https://github.com/mastertheknife/ZoneMinder-kfir
PHP | 222 lines | 191 code | 13 blank | 18 comment | 22 complexity | 6c1764963ad84fe44dff9d7d84e9cb4e MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. //
  3. // ZoneMinder web event view file, $Date$, $Revision$
  4. // Copyright (C) 2001-2008 Philip Coombes
  5. //
  6. // This program is free software; you can redistribute it and/or
  7. // modify it under the terms of the GNU General Public License
  8. // as published by the Free Software Foundation; either version 2
  9. // of the License, or (at your option) any later version.
  10. //
  11. // This program is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. // GNU General Public License for more details.
  15. //
  16. // You should have received a copy of the GNU General Public License
  17. // along with this program; if not, write to the Free Software
  18. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19. //
  20. if ( !canView( 'Events' ) )
  21. {
  22. $view = "error";
  23. return;
  24. }
  25. $eid = validInt( $_REQUEST['eid'] );
  26. $fid = !empty($_REQUEST['fid'])?validInt($_REQUEST['fid']):1;
  27. if ( $user['MonitorIds'] )
  28. $midSql = " and MonitorId in (".join( ",", preg_split( '/["\'\s]*,["\'\s]*/', dbEscape($user['MonitorIds']) ) ).")";
  29. else
  30. $midSql = '';
  31. $sql = "select E.*,M.Name as MonitorName,M.DefaultRate,M.DefaultScale from Events as E inner join Monitors as M on E.MonitorId = M.Id where E.Id = '".dbEscape($eid)."'".$midSql;
  32. $event = dbFetchOne( $sql );
  33. if ( isset( $_REQUEST['rate'] ) )
  34. $rate = validInt($_REQUEST['rate']);
  35. else
  36. $rate = reScale( RATE_BASE, $event['DefaultRate'], ZM_WEB_DEFAULT_RATE );
  37. if ( isset( $_REQUEST['scale'] ) )
  38. $scale = validInt($_REQUEST['scale']);
  39. else
  40. $scale = reScale( SCALE_BASE, $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
  41. $replayModes = array(
  42. 'single' => $SLANG['ReplaySingle'],
  43. 'all' => $SLANG['ReplayAll'],
  44. 'gapless' => $SLANG['ReplayGapless'],
  45. );
  46. if ( isset( $_REQUEST['streamMode'] ) )
  47. $streamMode = validHtmlStr($_REQUEST['streamMode']);
  48. else
  49. $streamMode = canStream()?'stream':'stills';
  50. if ( isset( $_REQUEST['replayMode'] ) )
  51. $replayMode = validHtmlStr($_REQUEST['replayMode']);
  52. if ( isset( $_COOKIE['replayMode']) && preg_match('#^[a-z]+$#', $_COOKIE['replayMode']) )
  53. $replayMode = validHtmlStr($_COOKIE['replayMode']);
  54. else
  55. $replayMode = array_shift( array_keys( $replayModes ) );
  56. parseSort();
  57. parseFilter( $_REQUEST['filter'] );
  58. $filterQuery = $_REQUEST['filter']['query'];
  59. $panelSections = 40;
  60. $panelSectionWidth = (int)ceil(reScale($event['Width'],$scale)/$panelSections);
  61. $panelWidth = ($panelSections*$panelSectionWidth-1);
  62. $connkey = generateConnKey();
  63. $focusWindow = true;
  64. xhtmlHeaders(__FILE__, $SLANG['Event'] );
  65. ?>
  66. <body>
  67. <div id="page">
  68. <div id="content">
  69. <div id="dataBar">
  70. <table id="dataTable" class="major" cellspacing="0">
  71. <tr>
  72. <td><span id="dataId" title="<?= $SLANG['Id'] ?>"><?= $event['Id'] ?></span></td>
  73. <td><span id="dataCause" title="<?= $event['Notes']?validHtmlStr($event['Notes']):$SLANG['AttrCause'] ?>"><?= validHtmlStr($event['Cause']) ?></span></td>
  74. <td><span id="dataTime" title="<?= $SLANG['Time'] ?>"><?= strftime( STRF_FMT_DATETIME_SHORT, strtotime($event['StartTime'] ) ) ?></span></td>
  75. <td><span id="dataDuration" title="<?= $SLANG['Duration'] ?>"><?= $event['Length'] ?></span>s</td>
  76. <td><span id="dataFrames" title="<?= $SLANG['AttrFrames']."/".$SLANG['AttrAlarmFrames'] ?>"><?= $event['Frames'] ?>/<?= $event['AlarmFrames'] ?></span></td>
  77. <td><span id="dataScore" title="<?= $SLANG['AttrTotalScore']."/".$SLANG['AttrAvgScore']."/".$SLANG['AttrMaxScore'] ?>"><?= $event['TotScore'] ?>/<?= $event['AvgScore'] ?>/<?= $event['MaxScore'] ?></span></td>
  78. </tr>
  79. </table>
  80. </div>
  81. <div id="menuBar1">
  82. <div id="scaleControl"><label for="scale"><?= $SLANG['Scale'] ?></label><?= buildSelect( "scale", $scales, "changeScale();" ); ?></div>
  83. <div id="replayControl"><label for="replayMode"><?= $SLANG['Replay'] ?></label><?= buildSelect( "replayMode", $replayModes, "changeReplayMode();" ); ?></div>
  84. <div id="nameControl"><input type="text" id="eventName" name="eventName" value="<?= validHtmlStr($event['Name']) ?>" size="16"/><input type="button" value="<?= $SLANG['Rename'] ?>" onclick="renameEvent()"<?php if ( !canEdit( 'Events' ) ) { ?> disabled="disabled"<?php } ?>/></div>
  85. </div>
  86. <div id="menuBar2">
  87. <div id="closeWindow"><a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a></div>
  88. <?php
  89. if ( canEdit( 'Events' ) )
  90. {
  91. ?>
  92. <div id="deleteEvent"><a href="#" onclick="deleteEvent()"><?= $SLANG['Delete'] ?></a></div>
  93. <div id="editEvent"><a href="#" onclick="editEvent()"><?= $SLANG['Edit'] ?></a></div>
  94. <?php
  95. }
  96. if ( canView( 'Events' ) )
  97. {
  98. ?>
  99. <div id="exportEvent"><a href="#" onclick="exportEvent()"><?= $SLANG['Export'] ?></a></div>
  100. <?php
  101. }
  102. if ( canEdit( 'Events' ) )
  103. {
  104. ?>
  105. <div id="archiveEvent" class="hidden"><a href="#" onclick="archiveEvent()"><?= $SLANG['Archive'] ?></a></div>
  106. <div id="unarchiveEvent" class="hidden"><a href="#" onclick="unarchiveEvent()"><?= $SLANG['Unarchive'] ?></a></div>
  107. <?php
  108. }
  109. ?>
  110. <div id="framesEvent"><a href="#" onclick="showEventFrames()"><?= $SLANG['Frames'] ?></a></div>
  111. <div id="streamEvent"<?php if ( $streamMode == 'stream' ) { ?> class="hidden"<?php } ?>><a href="#" onclick="showStream()"><?= $SLANG['Stream'] ?></a></div>
  112. <div id="stillsEvent"<?php if ( $streamMode == 'still' ) { ?> class="hidden"<?php } ?>><a href="#" onclick="showStills()"><?= $SLANG['Stills'] ?></a></div>
  113. <?php
  114. if ( ZM_OPT_FFMPEG )
  115. {
  116. ?>
  117. <div id="videoEvent"><a href="#" onclick="videoEvent()"><?= $SLANG['Video'] ?></a></div>
  118. <?php
  119. }
  120. ?>
  121. </div>
  122. <div id="eventStream">
  123. <div id="imageFeed">
  124. <?php
  125. if ( ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT )
  126. {
  127. $streamSrc = getStreamSrc( array( "source=event", "mode=mpeg", "event=".$eid, "frame=".$fid, "scale=".$scale, "rate=".$rate, "bitrate=".ZM_WEB_VIDEO_BITRATE, "maxfps=".ZM_WEB_VIDEO_MAXFPS, "format=".ZM_MPEG_REPLAY_FORMAT, "replay=".$replayMode ) );
  128. outputVideoStream( "evtStream", $streamSrc, reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ), ZM_MPEG_LIVE_FORMAT );
  129. }
  130. else
  131. {
  132. $streamSrc = getStreamSrc( array( "source=event", "mode=jpeg", "event=".$eid, "frame=".$fid, "scale=".$scale, "rate=".$rate, "maxfps=".ZM_WEB_VIDEO_MAXFPS, "replay=".$replayMode) );
  133. if ( canStreamNative() )
  134. {
  135. outputImageStream( "evtStream", $streamSrc, reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ), validHtmlStr($event['Name']) );
  136. }
  137. else
  138. {
  139. outputHelperStream( "evtStream", $streamSrc, reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ) );
  140. }
  141. }
  142. ?>
  143. </div>
  144. <p id="dvrControls">
  145. <input type="button" value="&lt;+" id="prevBtn" title="<?= $SLANG['Prev'] ?>" class="inactive" onclick="streamPrev( true )"/>
  146. <input type="button" value="&lt;&lt;" id="fastRevBtn" title="<?= $SLANG['Rewind'] ?>" class="inactive" disabled="disabled" onclick="streamFastRev( true )"/>
  147. <input type="button" value="&lt;" id="slowRevBtn" title="<?= $SLANG['StepBack'] ?>" class="unavail" disabled="disabled" onclick="streamSlowRev( true )"/>
  148. <input type="button" value="||" id="pauseBtn" title="<?= $SLANG['Pause'] ?>" class="inactive" onclick="streamPause( true )"/>
  149. <input type="button" value="|>" id="playBtn" title="<?= $SLANG['Play'] ?>" class="active" disabled="disabled" onclick="streamPlay( true )"/>
  150. <input type="button" value="&gt;" id="slowFwdBtn" title="<?= $SLANG['StepForward'] ?>" class="unavail" disabled="disabled" onclick="streamSlowFwd( true )"/>
  151. <input type="button" value="&gt;&gt;" id="fastFwdBtn" title="<?= $SLANG['FastForward'] ?>" class="inactive" disabled="disabled" onclick="streamFastFwd( true )"/>
  152. <input type="button" value="&ndash;" id="zoomOutBtn" title="<?= $SLANG['ZoomOut'] ?>" class="avail" onclick="streamZoomOut()"/>
  153. <input type="button" value="+&gt;" id="nextBtn" title="<?= $SLANG['Next'] ?>" class="inactive" onclick="streamNext( true )"/>
  154. </p>
  155. <div id="replayStatus">
  156. <span id="mode">Mode: <span id="modeValue">&nbsp;</span></span>
  157. <span id="rate">Rate: <span id="rateValue"></span>x</span>
  158. <span id="progress">Progress: <span id="progressValue"></span>s</span>
  159. <span id="zoom">Zoom: <span id="zoomValue"></span>x</span>
  160. </div>
  161. <div id="progressBar" class="invisible">
  162. <?php
  163. for ( $i = 0; $i < $panelSections; $i++ )
  164. {
  165. ?>
  166. <div class="progressBox" id="progressBox<?= $i ?>" title=""></div>
  167. <?php
  168. }
  169. ?>
  170. </div>
  171. </div>
  172. <div id="eventStills" class="hidden">
  173. <div id="eventThumbsPanel">
  174. <div id="eventThumbs">
  175. </div>
  176. </div>
  177. <div id="eventImagePanel" class="hidden">
  178. <div id="eventImageFrame">
  179. <img id="eventImage" src="graphics/transparent.gif" alt=""/>
  180. <div id="eventImageBar">
  181. <div id="eventImageClose"><input type="button" value="<?= $SLANG['Close'] ?>" onclick="hideEventImage()"/></div>
  182. <div id="eventImageStats" class="hidden"><input type="button" value="<?= $SLANG['Stats'] ?>" onclick="showFrameStats()"/></div>
  183. <div id="eventImageData">Frame <span id="eventImageNo"></span></div>
  184. </div>
  185. </div>
  186. </div>
  187. <div id="eventImageNav">
  188. <div id="eventImageButtons">
  189. <div id="prevButtonsPanel">
  190. <input id="prevEventBtn" type="button" value="&lt;E" onclick="prevEvent()" disabled="disabled"/>
  191. <input id="prevThumbsBtn" type="button" value="&lt;&lt;" onclick="prevThumbs()" disabled="disabled"/>
  192. <input id="prevImageBtn" type="button" value="&lt;" onclick="prevImage()" disabled="disabled"/>
  193. <input id="nextImageBtn" type="button" value="&gt;" onclick="nextImage()" disabled="disabled"/>
  194. <input id="nextThumbsBtn" type="button" value="&gt;&gt;" onclick="nextThumbs()" disabled="disabled"/>
  195. <input id="nextEventBtn" type="button" value="E&gt;" onclick="nextEvent()" disabled="disabled"/>
  196. </div>
  197. </div>
  198. <div id="thumbsSliderPanel">
  199. <div id="thumbsSlider">
  200. <div id="thumbsKnob">
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. </div>
  206. </div>
  207. </div>
  208. </body>
  209. </html>