2002-10-11 17:45:06 +08:00
< ? php
//
2004-01-08 19:45:57 +08:00
// ZoneMinder web function library, $Date$, $Revision$
2003-01-12 02:22:27 +08:00
// Copyright (C) 2003 Philip Coombes
2002-10-11 17:45:06 +08:00
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
2003-06-26 19:12:00 +08:00
function userLogin ( $username , $password )
{
2005-01-17 00:08:35 +08:00
global $user , $cookies , $_SESSION , $_SERVER ;
2003-06-26 19:12:00 +08:00
2005-01-19 06:27:09 +08:00
$sql = " select * from Users where Username = ' " . mysql_escape_string ( $username ) . " ' and Password = password(' " . mysql_escape_string ( $password ) . " ') and Enabled = 1 " ;
2003-06-26 19:12:00 +08:00
$result = mysql_query ( $sql );
if ( ! $result )
echo mysql_error ();
2005-01-17 00:08:35 +08:00
$_SESSION [ 'username' ] = $username ;
$_SESSION [ 'password' ] = $password ;
$_SESSION [ 'remote_addr' ] = $_SERVER [ 'REMOTE_ADDR' ]; // To help prevent session hijacking
2004-01-21 22:20:33 +08:00
if ( $db_user = mysql_fetch_assoc ( $result ) )
2003-06-26 19:12:00 +08:00
{
2005-01-17 00:08:35 +08:00
$_SESSION [ 'user' ] = $user = $db_user ;
$_SESSION [ 'password_hash' ] = $user [ 'Password' ];
2003-06-26 19:12:00 +08:00
}
2003-06-30 04:53:55 +08:00
else
{
2004-01-21 22:20:33 +08:00
unset ( $user );
2003-06-30 04:53:55 +08:00
}
2004-12-29 02:20:11 +08:00
if ( $cookies ) session_write_close ();
2003-06-26 19:12:00 +08:00
}
2003-06-30 04:53:55 +08:00
function userLogout ()
{
2005-01-17 00:08:35 +08:00
global $user , $_SESSION ;
2003-06-30 04:53:55 +08:00
2005-01-17 00:08:35 +08:00
unset ( $_SESSION [ 'user' ] );
2003-06-30 04:53:55 +08:00
unset ( $user );
session_destroy ();
}
2004-12-30 02:03:13 +08:00
function authHash ()
{
2005-01-17 00:08:35 +08:00
global $_SESSION ;
2004-12-30 02:03:13 +08:00
if ( ZM_OPT_USE_AUTH )
{
$time = localtime ();
2005-01-17 00:08:35 +08:00
$auth_key = ZM_AUTH_SECRET . $_SESSION [ 'username' ] . $_SESSION [ 'password_hash' ] . $_SESSION [ 'remote_addr' ] . $time [ 2 ] . $time [ 3 ] . $time [ 4 ] . $time [ 5 ];
2004-12-30 02:03:13 +08:00
$auth = md5 ( $auth_key );
}
else
{
$auth = " 0 " ;
}
return ( $auth );
}
function getStreamSrc ( $args )
{
2005-01-17 00:08:35 +08:00
global $_SESSION ;
2004-12-30 02:03:13 +08:00
$stream_src = ZM_PATH_ZMS ;
if ( ZM_OPT_USE_AUTH )
{
$args [] = " auth= " . authHash ();
2005-01-17 00:08:35 +08:00
$args [] = " user= " . $_SESSION [ 'username' ];
2004-12-30 02:03:13 +08:00
}
if ( count ( $args ) )
{
$stream_src .= " ? " . join ( " & " , $args );
}
return ( $stream_src );
}
2003-06-30 04:53:55 +08:00
function visibleMonitor ( $mid )
2003-06-27 20:10:10 +08:00
{
global $user ;
2004-01-08 18:09:35 +08:00
return ( empty ( $user [ 'MonitorIds' ]) || in_array ( $mid , split ( ',' , $user [ 'MonitorIds' ] ) ) );
2003-06-27 20:10:10 +08:00
}
2003-06-30 04:53:55 +08:00
function canView ( $area , $mid = false )
2003-06-27 20:10:10 +08:00
{
global $user ;
2003-06-30 04:53:55 +08:00
return ( ( $user [ $area ] == 'View' || $user [ $area ] == 'Edit' ) && ( ! $mid || visibleMonitor ( $mid ) ) );
2003-06-27 20:10:10 +08:00
}
2003-06-30 04:53:55 +08:00
function canEdit ( $area , $mid = false )
2003-06-26 19:12:00 +08:00
{
global $user ;
2003-06-30 04:53:55 +08:00
return ( $user [ $area ] == 'Edit' && ( ! $mid || visibleMonitor ( $mid ) ) );
2003-06-26 19:12:00 +08:00
}
2002-11-22 20:12:16 +08:00
function deleteEvent ( $eid )
{
2003-06-27 20:10:10 +08:00
global $user ;
2004-01-08 18:09:35 +08:00
if ( $user [ 'Events' ] == 'Edit' && $eid )
2002-12-10 20:51:27 +08:00
{
2002-12-24 19:56:01 +08:00
$result = mysql_query ( " delete from Events where Id = ' $eid ' " );
2002-12-10 20:51:27 +08:00
if ( ! $result )
die ( mysql_error () );
2003-01-11 01:12:23 +08:00
if ( ! ZM_OPT_FAST_DELETE )
2002-12-24 19:56:01 +08:00
{
$result = mysql_query ( " delete from Stats where EventId = ' $eid ' " );
if ( ! $result )
die ( mysql_error () );
$result = mysql_query ( " delete from Frames where EventId = ' $eid ' " );
if ( ! $result )
die ( mysql_error () );
2003-03-21 17:40:46 +08:00
system ( escapeshellcmd ( " rm -rf " . ZM_PATH_EVENTS . " /*/ " . sprintf ( " %d " , $eid ) ) );
2002-12-24 19:56:01 +08:00
}
2002-12-10 20:51:27 +08:00
}
2002-11-22 20:12:16 +08:00
}
2004-12-29 02:20:11 +08:00
function makeLink ( $url , $label , $condition = 1 , $options = " " )
2003-06-26 19:12:00 +08:00
{
$string = " " ;
if ( $condition )
{
2004-12-29 02:20:11 +08:00
$string .= '<a href="' . $url . '"' . ( $options ? ( ' ' . $options ) : '' ) . '>' ;
2003-06-26 19:12:00 +08:00
}
$string .= $label ;
if ( $condition )
{
$string .= '</a>' ;
}
return ( $string );
}
2004-12-29 01:41:55 +08:00
function truncText ( $text , $length , $deslash = 1 )
{
return ( preg_replace ( " /^(. { " . $length . " ,}?) \ b.* $ / " , " \\ 1… " , ( $deslash ? stripslashes ( $text ) : $text ) ) );
}
2003-06-27 20:10:10 +08:00
function buildSelect ( $name , $contents , $onchange = " " )
{
2003-10-28 01:07:04 +08:00
if ( preg_match ( " /^( \ w+) \ s* \ [ \ s*[' \" ]?( \ w+)[ \" ']? \ s*] $ / " , $name , $matches ) )
{
$arr = $matches [ 1 ];
$idx = $matches [ 2 ];
global $$arr ;
$value = ${$arr} [ $idx ];
}
else
{
global $$name ;
$value = $$name ;
}
ob_start ();
2003-06-27 20:10:10 +08:00
?>
< select name = " <?= $name ?> " class = " form " < ? php if ( $onchange ) { echo " onChange= \" $onchange\ " " ; } ?>>
< ? php
foreach ( $contents as $content_value => $content_text )
{
?>
2003-10-28 01:07:04 +08:00
< option value = " <?= $content_value ?> " < ? php if ( $value == $content_value ) { echo " selected " ; } ?> ><?= $content_text ?></option>
2003-06-27 20:10:10 +08:00
< ? php
}
?>
</ select >
< ? php
2003-10-28 01:07:04 +08:00
$html = ob_get_contents ();
ob_end_clean ();
return ( $html );
}
function getFormChanges ( $values , $new_values , $types = false )
{
$changes = array ();
if ( ! $types )
$types = array ();
foreach ( $new_values as $key => $value )
{
switch ( $types [ $key ] )
{
case 'set' :
{
if ( is_array ( $new_values [ $key ] ) )
{
if ( join ( ',' , $new_values [ $key ]) != $values [ $key ] )
{
$changes [] = " $key = ' " . join ( ',' , $new_values [ $key ]) . " ' " ;
}
}
elseif ( $values [ $key ] )
{
$changes [] = " $key = '' " ;
}
break ;
}
default :
{
if ( $values [ $key ] != $value )
{
$changes [] = " $key = ' $value ' " ;
}
break ;
}
}
}
return ( $changes );
2003-06-27 20:10:10 +08:00
}
2002-10-11 17:45:06 +08:00
function getBrowser ( & $browser , & $version )
{
2005-01-17 00:08:35 +08:00
global $_SERVER ;
2002-10-11 17:45:06 +08:00
2005-01-17 00:08:35 +08:00
if ( ereg ( 'MSIE ([0-9].[0-9]{1,2})' , $_SERVER [ 'HTTP_USER_AGENT' ], $log_version ))
2002-10-11 17:45:06 +08:00
{
$version = $log_version [ 1 ];
$browser = 'ie' ;
}
2005-01-17 00:08:35 +08:00
elseif ( ereg ( 'Safari/([0-9.]+)' , $_SERVER [ 'HTTP_USER_AGENT' ], $log_version ))
2003-12-16 17:52:36 +08:00
{
$version = $log_version [ 1 ];
$browser = 'safari' ;
}
2005-01-17 00:08:35 +08:00
elseif ( ereg ( 'Opera ([0-9].[0-9]{1,2})' , $_SERVER [ 'HTTP_USER_AGENT' ], $log_version ))
2002-10-11 17:45:06 +08:00
{
$version = $log_version [ 1 ];
$browser = 'opera' ;
}
2005-01-17 00:08:35 +08:00
elseif ( ereg ( 'Mozilla/([0-9].[0-9]{1,2})' , $_SERVER [ 'HTTP_USER_AGENT' ], $log_version ))
2002-10-11 17:45:06 +08:00
{
$version = $log_version [ 1 ];
$browser = 'mozilla' ;
}
else
{
$version = 0 ;
$browser = 'unknown' ;
}
}
function isNetscape ()
{
getBrowser ( $browser , $version );
return ( $browser == " mozilla " );
}
2004-03-04 23:05:54 +08:00
function isInternetExplorer ()
{
getBrowser ( $browser , $version );
return ( $browser == " ie " );
}
function isWindows ()
{
2005-01-17 00:08:35 +08:00
global $_SERVER ;
2004-03-04 23:05:54 +08:00
2005-01-17 00:08:35 +08:00
return ( preg_match ( '/Win/' , $_SERVER [ 'HTTP_USER_AGENT' ] ) );
2004-03-04 23:05:54 +08:00
}
2004-01-27 17:57:12 +08:00
function canStreamNative ()
{
return ( ZM_CAN_STREAM == " yes " || ( ZM_CAN_STREAM == " auto " && isNetscape () ) );
}
function canStreamApplet ()
{
return ( ( ZM_OPT_CAMBOZOLA && file_exists ( ZM_PATH_WEB . '/' . ZM_PATH_CAMBOZOLA )) );
}
2002-10-11 17:45:06 +08:00
function canStream ()
{
2004-01-27 17:57:12 +08:00
return ( canStreamNative () | canStreamApplet () );
2002-10-11 17:45:06 +08:00
}
2003-01-07 18:44:25 +08:00
function fixDevices ()
{
2003-01-15 23:06:15 +08:00
$string = ZM_PATH_BIN . " /zmfix " ;
2003-01-07 18:44:25 +08:00
$string .= " 2>/dev/null >&- <&- >/dev/null " ;
exec ( $string );
}
2003-01-14 21:07:57 +08:00
function packageControl ( $command )
{
2003-01-15 23:06:15 +08:00
$string = ZM_PATH_BIN . " /zmpkg.pl $command " ;
2003-01-14 21:07:57 +08:00
$string .= " 2>/dev/null >&- <&- >/dev/null " ;
exec ( $string );
}
2002-12-24 19:56:01 +08:00
function daemonControl ( $command , $daemon = false , $args = false )
2002-12-12 06:43:00 +08:00
{
2003-01-15 23:06:15 +08:00
$string = ZM_PATH_BIN . " /zmdc.pl $command " ;
2002-12-12 06:43:00 +08:00
if ( $daemon )
2002-12-24 20:43:13 +08:00
{
$string .= " $daemon " ;
if ( $args )
{
$string .= " $args " ;
}
}
2002-12-12 06:43:00 +08:00
$string .= " 2>/dev/null >&- <&- >/dev/null " ;
exec ( $string );
}
2003-03-26 19:41:22 +08:00
function zmcControl ( $monitor , $restart = false )
2002-10-11 17:45:06 +08:00
{
2004-01-08 18:09:35 +08:00
if ( $monitor [ 'Type' ] == " Local " )
2002-12-24 19:56:01 +08:00
{
2004-01-08 18:09:35 +08:00
$sql = " select count(if(Function!='None',1,NULL)) as ActiveCount from Monitors where Device = ' " . $monitor [ 'Device' ] . " ' " ;
$zmc_args = " -d " . $monitor [ 'Device' ];
2003-03-26 19:41:22 +08:00
}
else
{
2004-02-16 03:17:38 +08:00
$sql = " select count(if(Function!='None',1,NULL)) as ActiveCount from Monitors where Id = ' " . $monitor [ 'Id' ] . " ' " ;
$zmc_args = " -m " . $monitor [ 'Id' ];
2002-12-24 19:56:01 +08:00
}
$result = mysql_query ( $sql );
if ( ! $result )
echo mysql_error ();
$row = mysql_fetch_assoc ( $result );
2004-01-08 18:09:35 +08:00
$active_count = $row [ 'ActiveCount' ];
2002-12-11 08:22:51 +08:00
2003-11-08 19:52:12 +08:00
if ( ! $active_count )
2002-10-11 17:45:06 +08:00
{
2003-03-26 19:41:22 +08:00
daemonControl ( " stop " , " zmc " , $zmc_args );
2002-10-11 17:45:06 +08:00
}
2002-12-24 19:56:01 +08:00
else
2002-10-11 17:45:06 +08:00
{
2002-12-24 19:56:01 +08:00
if ( $restart )
{
2003-03-26 19:41:22 +08:00
daemonControl ( " stop " , " zmc " , $zmc_args );
2002-12-24 19:56:01 +08:00
}
2003-03-26 19:41:22 +08:00
daemonControl ( " start " , " zmc " , $zmc_args );
2002-10-11 17:45:06 +08:00
}
}
2002-12-24 19:56:01 +08:00
function zmaControl ( $monitor , $restart = false )
2002-10-11 17:45:06 +08:00
{
2002-12-24 19:56:01 +08:00
if ( ! is_array ( $monitor ) )
2002-10-11 17:45:06 +08:00
{
2003-11-08 19:52:12 +08:00
$sql = " select Id,Function,RunMode from Monitors where Id = ' $monitor ' " ;
2002-12-24 19:56:01 +08:00
$result = mysql_query ( $sql );
if ( ! $result )
echo mysql_error ();
$monitor = mysql_fetch_assoc ( $result );
2002-10-11 17:45:06 +08:00
}
2004-01-08 18:09:35 +08:00
if ( $monitor [ 'RunMode' ] == 'Triggered' )
2003-11-08 19:52:12 +08:00
{
// Don't touch anything that's triggered
return ;
}
2003-09-23 17:52:45 +08:00
switch ( $monitor [ 'Function' ] )
2002-10-11 17:45:06 +08:00
{
2003-09-23 17:52:45 +08:00
case 'Modect' :
case 'Record' :
case 'Mocord' :
2004-12-29 01:41:55 +08:00
case 'Nodect' :
2003-09-23 17:52:45 +08:00
{
if ( $restart )
{
2004-01-08 18:09:35 +08:00
daemonControl ( " stop " , " zma " , " -m " . $monitor [ 'Id' ] );
2003-09-23 17:52:45 +08:00
if ( ZM_OPT_FRAME_SERVER )
{
2004-01-08 18:09:35 +08:00
daemonControl ( " stop " , " zmf " , " -m " . $monitor [ 'Id' ] );
2003-09-23 17:52:45 +08:00
}
}
if ( ZM_OPT_FRAME_SERVER )
{
2004-01-08 18:09:35 +08:00
daemonControl ( " start " , " zmf " , " -m " . $monitor [ 'Id' ] );
2003-09-23 17:52:45 +08:00
}
2004-01-08 18:09:35 +08:00
daemonControl ( " start " , " zma " , " -m " . $monitor [ 'Id' ] );
2003-09-23 17:52:45 +08:00
break ;
}
default :
2002-12-24 19:56:01 +08:00
{
2004-01-08 18:09:35 +08:00
daemonControl ( " stop " , " zma " , " -m " . $monitor [ 'Id' ] );
2003-04-22 22:18:20 +08:00
if ( ZM_OPT_FRAME_SERVER )
{
2004-01-08 18:09:35 +08:00
daemonControl ( " stop " , " zmf " , " -m " . $monitor [ 'Id' ] );
2003-04-22 22:18:20 +08:00
}
2003-09-23 17:52:45 +08:00
break ;
2003-04-22 22:18:20 +08:00
}
2002-10-11 17:45:06 +08:00
}
}
2002-12-24 19:56:01 +08:00
function daemonCheck ( $daemon = false , $args = false )
2002-10-11 17:45:06 +08:00
{
2003-01-15 23:06:15 +08:00
$string = ZM_PATH_BIN . " /zmdc.pl check " ;
2002-12-24 19:56:01 +08:00
if ( $daemon )
2002-10-11 17:45:06 +08:00
{
2002-12-24 19:56:01 +08:00
$string .= " $daemon " ;
if ( $args )
$string .= " $args " ;
2002-10-11 17:45:06 +08:00
}
2002-12-24 19:56:01 +08:00
$result = exec ( $string );
return ( preg_match ( '/running/' , $result ) );
}
2003-03-26 19:41:22 +08:00
function zmcCheck ( $monitor )
2002-12-24 19:56:01 +08:00
{
2004-01-08 18:09:35 +08:00
if ( $monitor [ 'Type' ] == 'Local' )
2003-03-26 19:41:22 +08:00
{
2004-01-08 18:09:35 +08:00
$zmc_args = " -d " . $monitor [ 'Device' ];
2003-03-26 19:41:22 +08:00
}
else
2002-10-11 17:45:06 +08:00
{
2004-02-16 03:17:38 +08:00
$zmc_args = " -m " . $monitor [ 'Id' ];
2002-10-11 17:45:06 +08:00
}
2003-03-26 19:41:22 +08:00
return ( daemonCheck ( " zmc " , $zmc_args ) );
2002-12-24 19:56:01 +08:00
}
function zmaCheck ( $monitor )
{
if ( is_array ( $monitor ) )
2002-10-11 17:45:06 +08:00
{
2004-01-08 18:09:35 +08:00
$monitor = $monitor [ 'Id' ];
2002-10-11 17:45:06 +08:00
}
2002-12-24 19:56:01 +08:00
return ( daemonCheck ( " zma " , " -m $monitor " ) );
2002-10-11 17:45:06 +08:00
}
2003-04-14 06:20:22 +08:00
2004-09-23 20:06:21 +08:00
function createListThumbnail ( $event , $overwrite = false )
{
$sql = " select * from Frames where EventId = ' " . $event [ 'Id' ] . " ' and Score = ' " . $event [ 'MaxScore' ] . " ' order by FrameId limit 0,1 " ;
if ( ! ( $result = mysql_query ( $sql )) )
die ( mysql_error () );
$frame = mysql_fetch_assoc ( $result );
$frame_id = $frame [ 'FrameId' ];
if ( ZM_WEB_LIST_THUMB_WIDTH )
{
$thumb_width = ZM_WEB_LIST_THUMB_WIDTH ;
$fraction = ZM_WEB_LIST_THUMB_WIDTH / $event [ 'Width' ];
$thumb_height = $event [ 'Height' ] * $fraction ;
}
elseif ( ZM_WEB_LIST_THUMB_HEIGHT )
{
$thumb_height = ZM_WEB_LIST_THUMB_HEIGHT ;
$fraction = ZM_WEB_LIST_THUMB_HEIGHT / $event [ 'Height' ];
$thumb_width = $event [ 'Width' ] * $fraction ;
}
else
{
die ( " No thumbnail width or height specified, please check in Options->Web " );
}
$event_path = ZM_DIR_EVENTS . '/' . $event [ 'MonitorId' ] . '/' . $event [ 'Id' ];
$image_path = sprintf ( " %s/%0 " . ZM_EVENT_IMAGE_DIGITS . " d-capture.jpg " , $event_path , $frame_id );
$capt_image = $image_path ;
if ( $scale == 1 || ! file_exists ( ZM_PATH_NETPBM . " /jpegtopnm " ) )
{
$anal_image = preg_replace ( " /capture/ " , " analyse " , $image_path );
if ( file_exists ( $anal_image ) && filesize ( $anal_image ) )
{
$thumb_image = $anal_image ;
}
else
{
$thumb_image = $capt_image ;
}
}
else
{
$thumb_image = preg_replace ( " /capture/ " , " mini " , $capt_image );
if ( ! file_exists ( $thumb_image ) || ! filesize ( $thumb_image ) )
{
$anal_image = preg_replace ( " /capture/ " , " analyse " , $capt_image );
if ( file_exists ( $anal_image ) )
$command = ZM_PATH_NETPBM . " /jpegtopnm -dct fast $anal_image | " . ZM_PATH_NETPBM . " /pnmscalefixed $fraction | " . ZM_PATH_NETPBM . " /ppmtojpeg --dct=fast > $thumb_image " ;
else
$command = ZM_PATH_NETPBM . " /jpegtopnm -dct fast $capt_image | " . ZM_PATH_NETPBM . " /pnmscalefixed $fraction | " . ZM_PATH_NETPBM . " /ppmtojpeg --dct=fast > $thumb_image " ;
#exec( escapeshellcmd( $command ) );
exec ( $command );
}
}
$thumb_data = $frame ;
$thumb_data [ 'Path' ] = $thumb_image ;
$thumb_data [ 'Width' ] = $thumb_width ;
$thumb_data [ 'Height' ] = $thumb_height ;
return ( $thumb_data );
}
function createVideo ( $event , $rate , $scale , $overwrite = false )
2003-04-14 06:20:22 +08:00
{
2004-03-10 01:03:46 +08:00
$command = ZM_PATH_BIN . " /zmvideo.pl -e " . $event [ 'Id' ] . " -r " . sprintf ( " %.2f " , ( $rate / RATE_SCALE ) ) . " -s " . sprintf ( " %.2f " , ( $scale / SCALE_SCALE ) );
2003-11-05 23:06:44 +08:00
if ( $overwrite )
2003-10-10 23:46:36 +08:00
$command .= " -o " ;
2003-04-14 06:20:22 +08:00
$result = exec ( $command , $output , $status );
2003-04-14 07:07:07 +08:00
return ( $status ? " " : rtrim ( $result ) );
2003-04-14 06:20:22 +08:00
}
2004-05-05 19:22:50 +08:00
// Now deprecated
2004-02-19 18:48:33 +08:00
function createImage ( $monitor , $scale )
{
if ( is_array ( $monitor ) )
{
$monitor = $monitor [ 'Id' ];
}
chdir ( ZM_DIR_IMAGES );
$command = ZMU_COMMAND . " -m $monitor -i " ;
if ( ! empty ( $scale ) && $scale < 100 )
$command .= " -S $scale " ;
$status = exec ( escapeshellcmd ( $command ) );
chdir ( '..' );
return ( $status );
}
2004-02-16 03:47:23 +08:00
function reScale ( $dimension , $scale = SCALE_SCALE )
2003-10-19 17:47:32 +08:00
{
2004-02-16 03:47:23 +08:00
if ( $scale == SCALE_SCALE )
2003-10-19 17:47:32 +08:00
return ( $dimension );
2004-02-16 03:47:23 +08:00
return ( ( int )(( $dimension * $scale ) / SCALE_SCALE ) );
2003-10-19 17:47:32 +08:00
}
2004-12-29 02:20:11 +08:00
function parseSort ( $save_to_session = false )
2004-03-10 22:23:22 +08:00
{
2005-01-17 00:08:35 +08:00
global $_SESSION ;
2004-03-10 22:23:22 +08:00
global $sort_field , $sort_asc ; // Inputs
global $sort_query , $sort_column , $sort_order ; // Outputs
if ( ! isset ( $sort_field ) )
{
$sort_field = " StartTime " ;
$sort_asc = false ;
}
switch ( $sort_field )
{
case 'Id' :
$sort_column = " E.Id " ;
break ;
case 'MonitorName' :
$sort_column = " M.Name " ;
break ;
case 'Name' :
$sort_column = " E.Name " ;
break ;
2004-12-29 01:41:55 +08:00
case 'Cause' :
$sort_column = " E.Cause " ;
break ;
2004-09-24 06:21:05 +08:00
case 'DateTime' :
2004-12-29 01:41:55 +08:00
case 'StartTime' :
2004-03-10 22:23:22 +08:00
$sort_column = " E.StartTime " ;
break ;
2004-09-24 06:21:05 +08:00
case 'Length' :
2004-03-10 22:23:22 +08:00
$sort_column = " E.Length " ;
break ;
case 'Frames' :
$sort_column = " E.Frames " ;
break ;
case 'AlarmFrames' :
$sort_column = " E.AlarmFrames " ;
break ;
case 'TotScore' :
$sort_column = " E.TotScore " ;
break ;
case 'AvgScore' :
$sort_column = " E.AvgScore " ;
break ;
case 'MaxScore' :
$sort_column = " E.MaxScore " ;
break ;
default :
$sort_column = " E.StartTime " ;
break ;
}
$sort_order = $sort_asc ? " asc " : " desc " ;
if ( ! $sort_asc ) $sort_asc = 0 ;
$sort_query = " &sort_field= $sort_field &sort_asc= $sort_asc " ;
2004-12-29 02:20:11 +08:00
if ( $save_to_session )
{
2005-01-17 00:08:35 +08:00
$_SESSION [ 'sort_field' ] = $sort_field ;
$_SESSION [ 'sort_asc' ] = $sort_asc ;
2004-12-29 02:20:11 +08:00
}
2004-03-10 22:23:22 +08:00
}
2004-12-29 02:20:11 +08:00
function parseFilter ( $save_to_session = false )
2004-03-10 22:23:22 +08:00
{
2005-01-17 00:08:35 +08:00
global $_SESSION ;
2004-12-29 02:20:11 +08:00
global $trms ; // Inputs
global $filter_query , $filter_sql , $filter_fields ; // Outputs
2004-03-10 22:23:22 +08:00
$filter_query = '' ;
$filter_sql = '' ;
$filter_fields = '' ;
if ( $trms )
{
2004-12-29 02:20:11 +08:00
if ( $save_to_session )
{
2005-01-17 00:08:35 +08:00
$_SESSION [ 'trms' ] = $trms ;
2004-12-29 02:20:11 +08:00
}
2004-03-10 22:23:22 +08:00
$filter_query .= " &trms= $trms " ;
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="trms" value="' . $trms . '"/>' . " \n " ;
2004-03-10 22:23:22 +08:00
2004-04-21 17:20:28 +08:00
for ( $i = 1 ; $i <= $trms ; $i ++ )
2004-03-10 22:23:22 +08:00
{
2004-04-21 17:20:28 +08:00
$conjunction_name = " cnj $i " ;
$obracket_name = " obr $i " ;
$cbracket_name = " cbr $i " ;
$attr_name = " attr $i " ;
$op_name = " op $i " ;
$value_name = " val $i " ;
global $$conjunction_name , $$obracket_name , $$cbracket_name , $$attr_name , $$op_name , $$value_name ;
if ( isset ( $$conjunction_name ) )
{
$filter_query .= " & $conjunction_name = " . $$conjunction_name ;
$filter_sql .= " " . $$conjunction_name . " " ;
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="' . $conjunction_name . '" value="' . $$conjunction_name . '"/>' . " \n " ;
if ( $save_to_session )
{
2005-01-17 00:08:35 +08:00
$_SESSION [ $conjunction_name ] = $$conjunction_name ;
2004-12-29 02:20:11 +08:00
}
2004-04-21 17:20:28 +08:00
}
if ( isset ( $$obracket_name ) )
2004-03-10 22:23:22 +08:00
{
2004-04-21 17:20:28 +08:00
$filter_query .= " & $obracket_name = " . $$obracket_name ;
$filter_sql .= str_repeat ( " ( " , $$obracket_name );
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="' . $obracket_name . '" value="' . $$obracket_name . '"/>' . " \n " ;
if ( $save_to_session )
{
2005-01-17 00:08:35 +08:00
$_SESSION [ $obracket_name ] = $$obracket_name ;
2004-12-29 02:20:11 +08:00
}
2004-03-10 22:23:22 +08:00
}
2004-04-21 17:20:28 +08:00
if ( isset ( $$attr_name ) )
2004-03-22 17:57:02 +08:00
{
2004-04-21 17:20:28 +08:00
$filter_query .= " & $attr_name = " . $$attr_name ;
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="' . $attr_name . '" value="' . $$attr_name . '"/>' . " \n " ;
2004-03-22 17:57:02 +08:00
switch ( $$attr_name )
{
case 'MonitorName' :
2004-04-21 17:20:28 +08:00
$filter_sql .= 'M.' . preg_replace ( '/^Monitor/' , '' , $$attr_name );
2004-03-22 17:57:02 +08:00
break ;
2004-12-29 01:41:55 +08:00
case 'Name' :
$filter_sql .= " E.Name " ;
break ;
case 'Cause' :
$filter_sql .= " E.Cause " ;
break ;
2004-03-22 17:57:02 +08:00
case 'DateTime' :
2004-04-21 17:20:28 +08:00
$filter_sql .= " E.StartTime " ;
2004-03-22 17:57:02 +08:00
break ;
case 'Date' :
2004-04-21 17:20:28 +08:00
$filter_sql .= " to_days( E.StartTime ) " ;
2004-03-22 17:57:02 +08:00
break ;
case 'Time' :
2004-04-21 17:20:28 +08:00
$filter_sql .= " extract( hour_second from E.StartTime ) " ;
2004-03-22 17:57:02 +08:00
break ;
case 'Weekday' :
2004-04-21 17:20:28 +08:00
$filter_sql .= " weekday( E.StartTime ) " ;
break ;
2004-09-24 06:21:05 +08:00
case 'Id' :
case 'Name' :
2004-04-21 17:20:28 +08:00
case 'MonitorId' :
case 'Length' :
case 'Frames' :
case 'AlarmFrames' :
case 'TotScore' :
case 'AvgScore' :
case 'MaxScore' :
$filter_sql .= " E. " . $$attr_name ;
break ;
case 'Archived' :
$filter_sql .= " E.Archived = " . $$value_name ;
break ;
case 'DiskPercent' :
$filter_sql .= getDiskPercent ();
break ;
case 'DiskBlocks' :
$filter_sql .= getDiskBlocks ();
2004-03-22 17:57:02 +08:00
break ;
}
2004-04-21 17:20:28 +08:00
$value_list = array ();
foreach ( preg_split ( '/["\'\s]*?,["\'\s]*?/' , preg_replace ( '/^["\']+?(.+)["\']+?$/' , '$1' , $$value_name ) ) as $value )
{
switch ( $$attr_name )
{
case 'MonitorName' :
2004-12-29 01:41:55 +08:00
case 'Name' :
case 'Cause' :
2004-04-21 17:20:28 +08:00
$value = " ' $value ' " ;
break ;
case 'DateTime' :
$value = " ' " . strftime ( " %Y-%m-%d %H:%M:%S " , strtotime ( $value ) ) . " ' " ;
break ;
case 'Date' :
$value = " to_days( ' " . strftime ( " %Y-%m-%d %H:%M:%S " , strtotime ( $value ) ) . " ' ) " ;
break ;
case 'Time' :
$value = " extract( hour_second from ' " . strftime ( " %Y-%m-%d %H:%M:%S " , strtotime ( $value ) ) . " ' ) " ;
break ;
case 'Weekday' :
$value = " weekday( ' " . strftime ( " %Y-%m-%d %H:%M:%S " , strtotime ( $value ) ) . " ' ) " ;
break ;
}
$value_list [] = $value ;
}
2004-03-10 22:23:22 +08:00
2004-04-21 17:20:28 +08:00
switch ( $$op_name )
{
case '=' :
case '!=' :
case '>=' :
case '>' :
case '<' :
case '<=' :
$filter_sql .= " " . $$op_name . " $value " ;
break ;
case '=~' :
$filter_sql .= " regexp $value " ;
break ;
case '!~' :
$filter_sql .= " not regexp $value " ;
break ;
case '=[]' :
$filter_sql .= " in ( " . join ( " , " , $value_list ) . " ) " ;
break ;
case '![]' :
$filter_sql .= " not in ( " . join ( " , " , $value_list ) . " ) " ;
break ;
}
$filter_query .= " & $op_name = " . urlencode ( $$op_name );
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="' . $op_name . '" value="' . $$op_name . '"/>' . " \n " ;
2004-04-21 17:20:28 +08:00
$filter_query .= " & $value_name = " . urlencode ( $$value_name );
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="' . $value_name . '" value="' . $$value_name . '"/>' . " \n " ;
if ( $save_to_session )
{
2005-01-17 00:08:35 +08:00
$_SESSION [ $attr_name ] = $$attr_name ;
$_SESSION [ $op_name ] = $$op_name ;
$_SESSION [ $value_name ] = $$value_name ;
2004-12-29 02:20:11 +08:00
}
2004-04-21 17:20:28 +08:00
}
if ( isset ( $$cbracket_name ) )
2004-03-10 22:23:22 +08:00
{
2004-04-21 17:20:28 +08:00
$filter_query .= " & $cbracket_name = " . $$cbracket_name ;
$filter_sql .= str_repeat ( " ) " , $$cbracket_name );
2004-12-29 02:20:11 +08:00
$filter_fields .= '<input type="hidden" name="' . $cbracket_name . '" value="' . $$cbracket_name . '"/>' . " \n " ;
if ( $save_to_session )
{
2005-01-17 00:08:35 +08:00
$_SESSION [ $cbracket_name ] = $$cbracket_name ;
2004-12-29 02:20:11 +08:00
}
2004-03-10 22:23:22 +08:00
}
}
2004-04-21 17:20:28 +08:00
$filter_sql = " and ( $filter_sql ) " ;
2004-03-10 22:23:22 +08:00
}
}
2004-03-18 06:54:29 +08:00
function getLoad ()
{
$uptime = shell_exec ( 'uptime' );
$load = '' ;
if ( preg_match ( '/load average: ([\d.]+)/' , $uptime , $matches ) )
$load = $matches [ 1 ];
return ( $load );
}
2004-04-21 17:20:28 +08:00
function getDiskPercent ()
2004-03-18 06:54:29 +08:00
{
$df = shell_exec ( 'df ' . ZM_DIR_EVENTS );
2004-04-21 17:20:28 +08:00
$space = - 1 ;
if ( preg_match ( '/\s(\d+)%/ms' , $df , $matches ) )
$space = $matches [ 1 ];
return ( $space );
}
function getDiskBlocks ()
{
$df = shell_exec ( 'df ' . ZM_DIR_EVENTS );
$space = - 1 ;
if ( preg_match ( '/\s(\d+)\s+\d+\s+\d+%/ms' , $df , $matches ) )
2004-03-18 06:54:29 +08:00
$space = $matches [ 1 ];
return ( $space );
}
2004-12-29 02:20:11 +08:00
// Function to fix a problem whereby the built in PHP session handling
// features want to put the sid as a hidden field after the form or
// fieldset tag, neither of which will work with strict XHTML Basic.
function sidField ()
{
if ( SID )
{
list ( $sessname , $sessid ) = split ( " = " , SID );
?>
< input type = " hidden " name = " <?= $sessname ?> " value = " <?= $sessid ?> " />
< ? php
}
}
2002-10-11 17:45:06 +08:00
?>