2008-07-14 21:54:50 +08:00
< ? php
//
// ZoneMinder web function library, $Date: 2008-07-08 16:06:45 +0100 (Tue, 08 Jul 2008) $, $Revision: 2484 $
2008-07-25 17:48:16 +08:00
// Copyright (C) 2001-2008 Philip Coombes
2008-07-14 21:54:50 +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
2016-12-26 23:23:16 +08:00
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2008-07-14 21:54:50 +08:00
//
2016-05-04 01:25:39 +08:00
2017-05-19 23:20:33 +08:00
function xhtmlHeaders ( $file , $title ) {
2017-06-05 09:42:56 +08:00
global $css ;
global $skin ;
2018-02-09 01:29:42 +08:00
global $view ;
2017-12-22 10:46:21 +08:00
# This idea is that we always include the classic css files,
# and then any different skin only needs to contain things that are different.
2018-01-11 23:57:07 +08:00
$baseCssPhpFile = getSkinFile ( 'css/base/skin.css.php' );
2017-12-22 10:46:21 +08:00
2017-05-31 23:16:55 +08:00
$skinCssPhpFile = getSkinFile ( 'css/' . $css . '/skin.css.php' );
2014-11-27 00:18:03 +08:00
2017-05-31 23:16:55 +08:00
$skinJsFile = getSkinFile ( 'js/skin.js' );
$skinJsPhpFile = getSkinFile ( 'js/skin.js.php' );
$cssJsFile = getSkinFile ( 'js/' . $css . '.js' );
2008-07-14 21:54:50 +08:00
2017-05-31 23:16:55 +08:00
$basename = basename ( $file , '.php' );
2017-12-22 10:46:21 +08:00
2017-05-31 23:16:55 +08:00
$viewCssPhpFile = getSkinFile ( '/css/' . $css . '/views/' . $basename . '.css.php' );
$viewJsFile = getSkinFile ( 'views/js/' . $basename . '.js' );
$viewJsPhpFile = getSkinFile ( 'views/js/' . $basename . '.js.php' );
2008-07-14 21:54:50 +08:00
2017-05-31 23:16:55 +08:00
extract ( $GLOBALS , EXTR_OVERWRITE );
2017-12-22 10:46:21 +08:00
function output_link_if_exists ( $files ) {
2018-02-09 01:29:42 +08:00
global $skin ;
2017-12-22 10:46:21 +08:00
$html = array ();
foreach ( $files as $file ) {
if ( getSkinFile ( $file ) ) {
$html [] = '<link rel="stylesheet" href="' . cache_bust ( 'skins/' . $skin . '/' . $file ) . '" type="text/css"/>' ;
}
}
return implode ( " \n " , $html );
}
2008-07-14 21:54:50 +08:00
?>
2016-03-16 12:17:05 +08:00
<! DOCTYPE html >
< html lang = " en " >
2008-07-14 21:54:50 +08:00
< head >
2016-03-16 12:17:05 +08:00
< meta charset = " utf-8 " >
< meta http - equiv = " X-UA-Compatible " content = " IE=edge " >
2014-12-05 07:44:23 +08:00
< title >< ? php echo ZM_WEB_TITLE_PREFIX ?> - <?php echo validHtmlStr($title) ?></title>
2017-10-02 23:55:36 +08:00
< ? php
2017-10-03 01:05:23 +08:00
if ( file_exists ( " skins/ $skin /css/ $css /graphics/favicon.ico " ) ) {
2017-11-03 21:24:13 +08:00
echo "
< link rel = \ " icon \" type= \" image/ico \" href= \" skins/ $skin /css/ $css /graphics/favicon.ico \" />
< link rel = \ " shortcut icon \" href= \" skins/ $skin /css/ $css /graphics/favicon.ico \" />
" ;
2017-10-02 23:55:36 +08:00
} else {
2017-10-18 01:10:20 +08:00
echo '
< link rel = " icon " type = " image/ico " href = " graphics/favicon.ico " />
< link rel = " shortcut icon " href = " graphics/favicon.ico " />
' ;
2017-10-02 23:55:36 +08:00
}
?>
2008-07-16 21:18:05 +08:00
< link rel = " stylesheet " href = " css/reset.css " type = " text/css " />
2011-07-28 00:09:09 +08:00
< link rel = " stylesheet " href = " css/overlay.css " type = " text/css " />
2016-03-12 14:16:19 +08:00
< link rel = " stylesheet " href = " css/bootstrap.min.css " type = " text/css " />
2018-03-25 06:25:39 +08:00
2017-12-22 10:46:21 +08:00
< ? php
echo output_link_if_exists ( array (
2018-01-11 23:57:07 +08:00
'css/base/skin.css' ,
2017-12-22 10:46:21 +08:00
'css/' . $css . '/skin.css' ,
2018-01-11 23:57:07 +08:00
'css/base/views/' . $basename . '.css' ,
2017-12-22 10:46:21 +08:00
'css/' . $css . '/views/' . $basename . '.css' ,
'/js/dateTimePicker/jquery-ui-timepicker-addon.css' ,
2018-02-09 02:19:16 +08:00
'/js/jquery-ui-1.12.1/jquery-ui.structure.min.css' ,
'/css/jquery-ui-1.12.1/jquery-ui.theme.min.css' ,
2017-12-22 10:46:21 +08:00
'/css/' . $css . '/jquery-ui-theme.css' ,
)
);
2018-01-13 03:25:15 +08:00
?>
2018-02-03 02:26:44 +08:00
<!-- Chosen can ' t be cache - busted because it loads sprites by relative path -->
< link rel = " stylesheet " href = " skins/classic/js/chosen/chosen.min.css " type = " text/css " />
2018-01-13 03:25:15 +08:00
< ? php
2018-01-12 02:14:11 +08:00
if ( $basename == 'watch' ) {
echo output_link_if_exists ( array (
'/css/base/views/control.css' ,
'/css/' . $css . '/views/control.css'
) );
2017-05-31 23:16:55 +08:00
}
if ( $viewCssPhpFile ) {
2008-07-14 21:54:50 +08:00
?>
< style type = " text/css " >
2009-10-17 01:04:44 +08:00
/*<![CDATA[*/
2008-07-14 21:54:50 +08:00
< ? php
2017-05-31 23:16:55 +08:00
require_once ( $viewCssPhpFile );
2008-07-14 21:54:50 +08:00
?>
2009-10-17 01:04:44 +08:00
/*]]>*/
2008-07-14 21:54:50 +08:00
</ style >
< ? php
2017-06-16 00:13:40 +08:00
}
2008-07-14 21:54:50 +08:00
?>
2017-12-22 10:46:21 +08:00
2018-04-06 23:43:19 +08:00
< script src = " tools/mootools/mootools-core.js " ></ script >
< script src = " tools/mootools/mootools-more.js " ></ script >
< script src = " js/mootools.ext.js " ></ script >
< script src = " skins/<?php echo $skin ; ?>/js/jquery.js " ></ script >
< script src = " skins/<?php echo $skin ; ?>/js/jquery-ui-1.12.1/jquery-ui.js " ></ script >
< script src = " skins/<?php echo $skin ; ?>/js/bootstrap.min.js " ></ script >
< script src = " skins/<?php echo $skin ; ?>/js/chosen/chosen.jquery.min.js " ></ script >
< script src = " skins/<?php echo $skin ; ?>/js/dateTimePicker/jquery-ui-timepicker-addon.js " ></ script >
2017-12-16 11:57:42 +08:00
2018-04-06 23:43:19 +08:00
< script >
2016-05-07 00:40:23 +08:00
//<![CDATA[
<!--
2017-06-16 00:13:40 +08:00
var $j = jQuery . noConflict ();
// $j is now an alias to the jQuery function; creating the new alias is optional.
2016-05-13 21:45:24 +08:00
2016-05-07 00:40:23 +08:00
//-->
//]]>
2017-06-16 00:13:40 +08:00
</ script >
2018-04-06 23:43:19 +08:00
< script src = " skins/<?php echo $skin ; ?>/views/js/state.js " ></ script >
2017-06-16 00:13:40 +08:00
< ? php
if ( $title == 'Login' && ( defined ( 'ZM_OPT_USE_GOOG_RECAPTCHA' ) && ZM_OPT_USE_GOOG_RECAPTCHA ) ) {
?>
2016-03-13 08:14:07 +08:00
< script src = 'https://www.google.com/recaptcha/api.js' ></ script >
2017-06-16 00:13:40 +08:00
< ? php
2018-02-09 01:29:42 +08:00
} else if ( $view == 'event' ) {
2016-10-28 05:05:33 +08:00
?>
2017-05-19 03:10:13 +08:00
< link href = " skins/<?php echo $skin ?>/js/video-js.css " rel = " stylesheet " >
2017-10-04 07:28:06 +08:00
< link href = " skins/<?php echo $skin ?>/js/video-js-skin.css " rel = " stylesheet " >
2017-05-19 03:10:13 +08:00
< script src = " skins/<?php echo $skin ?>/js/video.js " ></ script >
< script src = " ./js/videojs.zoomrotate.js " ></ script >
2017-12-10 00:14:10 +08:00
< ? php
2018-04-11 04:06:01 +08:00
}
2018-02-09 01:29:42 +08:00
?>
< script src = " skins/<?php echo $skin ?>/js/moment.min.js " ></ script >
< ? php
2017-05-31 23:16:55 +08:00
if ( $skinJsPhpFile ) {
2008-07-14 21:54:50 +08:00
?>
2018-04-06 23:43:19 +08:00
< script >
2009-10-17 01:04:44 +08:00
//<![CDATA[
<!--
2008-07-14 21:54:50 +08:00
< ? php
require_once ( $skinJsPhpFile );
?>
2009-10-17 01:04:44 +08:00
//-->
//]]>
2008-07-14 21:54:50 +08:00
</ script >
< ? php
2017-05-31 23:16:55 +08:00
}
if ( $viewJsPhpFile ) {
2008-07-14 21:54:50 +08:00
?>
2018-04-06 23:43:19 +08:00
< script >
2009-10-17 01:04:44 +08:00
//<![CDATA[
<!--
2008-07-14 21:54:50 +08:00
< ? php
2017-05-31 23:16:55 +08:00
require_once ( $viewJsPhpFile );
2008-07-14 21:54:50 +08:00
?>
2009-10-17 01:04:44 +08:00
//-->
//]]>
2008-07-14 21:54:50 +08:00
</ script >
< ? php
2017-05-31 23:16:55 +08:00
}
2015-05-02 04:03:40 +08:00
if ( $cssJsFile ) {
2008-07-14 21:54:50 +08:00
?>
2018-04-06 23:43:19 +08:00
< script src = " <?php echo cache_bust( $cssJsFile ) ?> " ></ script >
2017-10-03 00:39:39 +08:00
< ? php
} else {
?>
2018-04-06 23:43:19 +08:00
< script src = " skins/classic/js/base.js " ></ script >
2015-05-02 04:03:40 +08:00
< ? php } ?>
2018-04-06 23:43:19 +08:00
< script src = " <?php echo cache_bust( $skinJsFile ) ?> " ></ script >
< script src = " js/logger.js " ></ script >
2008-07-14 21:54:50 +08:00
< ? php
2017-05-31 23:16:55 +08:00
if ( $viewJsFile ) {
2008-07-14 21:54:50 +08:00
?>
2017-11-01 21:41:19 +08:00
< script type = " text/javascript " src = " <?php echo cache_bust( $viewJsFile ) ?> " ></ script >
2008-07-14 21:54:50 +08:00
< ? php
2017-05-31 23:16:55 +08:00
}
2008-07-14 21:54:50 +08:00
?>
</ head >
< ? php
2017-06-16 00:13:40 +08:00
} // end function xhtmlHeaders( $file, $title )
2016-05-07 02:30:32 +08:00
2017-11-30 12:04:38 +08:00
function getNavBarHTML ( $reload = null ) {
2017-10-05 09:51:30 +08:00
2016-05-07 02:58:41 +08:00
$versionClass = ( ZM_DYN_DB_VERSION && ( ZM_DYN_DB_VERSION != ZM_VERSION )) ? 'errorText' : '' ;
2016-10-21 01:38:12 +08:00
global $running ;
2016-05-07 03:16:48 +08:00
global $user ;
2017-10-10 22:38:13 +08:00
global $bandwidth_options ;
2017-10-02 23:25:51 +08:00
global $view ;
2017-12-02 23:09:19 +08:00
global $filterQuery ;
2017-12-14 11:24:55 +08:00
global $sortQuery ;
2017-12-15 21:45:49 +08:00
global $limitQuery ;
2017-12-14 11:24:55 +08:00
2017-12-15 21:45:49 +08:00
if ( ! $sortQuery ) {
2017-12-14 11:24:55 +08:00
parseSort ();
}
2017-12-02 23:09:19 +08:00
if ( ! $filterQuery ) {
parseFilter ( $_REQUEST [ 'filter' ] );
$filterQuery = $_REQUEST [ 'filter' ][ 'query' ];
}
if ( $reload === null ) {
2017-12-02 11:15:29 +08:00
ob_start ();
if ( $running == null )
$running = daemonCheck ();
$status = $running ? translate ( 'Running' ) : translate ( 'Stopped' );
2016-05-07 02:30:32 +08:00
?>
2017-10-05 09:51:30 +08:00
< noscript >
< div style = " background-color:red;color:white;font-size:x-large; " >
2017-12-22 10:46:21 +08:00
< ? php echo ZM_WEB_TITLE ?> requires Javascript. Please enable Javascript in your browser for this site.
2017-10-05 09:51:30 +08:00
</ div >
</ noscript >
2017-01-31 10:16:21 +08:00
< div class = " navbar navbar-inverse navbar-static-top " >
2016-05-07 02:30:32 +08:00
< div class = " container-fluid " >
< div class = " navbar-header " >
< button type = " button " class = " navbar-toggle collapsed " data - toggle = " collapse " data - target = " #main-header-nav " aria - expanded = " false " >
< span class = " sr-only " > Toggle navigation </ span >
< span class = " icon-bar " ></ span >
< span class = " icon-bar " ></ span >
< span class = " icon-bar " ></ span >
</ button >
2017-12-22 10:46:21 +08:00
< div class = " navbar-brand " >< a href = " <?php echo ZM_HOME_URL?> " target = " <?php echo ZM_WEB_TITLE ?> " >< ? php echo ZM_HOME_CONTENT ?> </a></div>
2016-05-07 02:30:32 +08:00
</ div >
< div class = " collapse navbar-collapse " id = " main-header-nav " >
2018-01-11 23:57:07 +08:00
< ? php if ( canView ( 'Monitors' ) ) { ?>
2016-05-07 02:30:32 +08:00
< ul class = " nav navbar-nav " >
< li >< a href = " ?view=console " >< ? php echo translate ( 'Console' ) ?> </a></li>
< ? php if ( canView ( 'System' ) ) { ?>
< li >< a href = " ?view=options " >< ? php echo translate ( 'Options' ) ?> </a></li>
2017-10-26 02:11:19 +08:00
< li >
< ? php
if ( logToDatabase () > Logger :: NOLOG ) {
if ( ! ZM_RUN_AUDIT ) {
# zmaudit can clean the logs, but if we aren't running it, then we should clecan them regularly
2018-02-12 03:18:40 +08:00
dbQuery ( 'DELETE FROM Logs WHERE TimeKey < unix_timestamp( NOW() - interval ' . ZM_LOG_DATABASE_LIMIT . ')' );
2017-10-26 02:11:19 +08:00
}
echo makePopupLink ( '?view=log' , 'zmLog' , 'log' , '<span class="' . logState () . '">' . translate ( 'Log' ) . '</span>' );
}
} // end if canview(System)
?> </li>
< ? php
if ( ZM_OPT_X10 && canView ( 'Devices' ) ) { ?>
2017-07-12 23:17:07 +08:00
< li >< a href = " ?view=devices " > Devices </ a ></ li >
2016-05-07 02:30:32 +08:00
< ? php } ?>
2017-10-02 21:02:57 +08:00
< li >< a href = " ?view=groups " < ? php echo $view == 'groups' ? ' class="selected"' : '' ?> ><?php echo translate('Groups') ?></a></li>
2017-12-15 21:45:49 +08:00
< li >< a href = " ?view=filter<?php echo $filterQuery . $sortQuery . $limitQuery ?> " < ? php echo $view == 'filter' ? ' class="selected"' : '' ?> ><?php echo translate('Filters') ?></a></li>
2016-05-07 02:30:32 +08:00
2016-11-03 21:41:54 +08:00
< ? php
2017-10-01 02:19:32 +08:00
if ( canView ( 'Stream' ) ) {
2016-05-07 02:30:32 +08:00
?>
2018-04-11 04:06:01 +08:00
< li >< a href = " ?view=cycle " < ? php echo $view == 'cycle' ? ' class="selected"' : '' ?> ><?php echo translate('Cycle') ?></a></li>
2017-10-02 21:02:57 +08:00
< li >< a href = " ?view=montage " < ? php echo $view == 'montage' ? ' class="selected"' : '' ?> ><?php echo translate('Montage') ?></a></li>
2017-06-16 00:13:40 +08:00
< ? php
}
2018-04-11 04:06:01 +08:00
// if canview_reports
?>
< li >< a href = " ?view=report_event_audit " < ? php echo $view == 'report_event_audit' ? ' class="selected"' : '' ?> ><?php echo translate('ReportEventAudit') ?></a></li>
< ? php
2017-12-06 23:25:04 +08:00
if ( isset ( $_REQUEST [ 'filter' ][ 'Query' ][ 'terms' ][ 'attr' ])) {
2017-12-03 01:25:18 +08:00
$terms = $_REQUEST [ 'filter' ][ 'Query' ][ 'terms' ];
$count = 0 ;
foreach ( $terms as $term ) {
if ( $term [ 'attr' ] == " StartDateTime " ) {
$count += 1 ;
if ( $term [ 'op' ] == '>=' ) $minTime = $term [ 'val' ];
if ( $term [ 'op' ] == '<=' ) $maxTime = $term [ 'val' ];
}
}
if ( $count == 2 ) {
$montageReviewQuery = '&minTime=' . $minTime . '&maxTime=' . $maxTime ;
}
}
2017-06-16 00:13:40 +08:00
if ( canView ( 'Events' ) ) {
?>
2017-12-03 01:25:18 +08:00
< li >< a href = " ?view=montagereview<?php echo isset( $montageReviewQuery )?'&fit=1'. $montageReviewQuery .'&live=0':'' ?> " < ? php echo $view == 'montagereview' ? ' class="selected"' : '' ?> ><?php echo translate('MontageReview')?></a></li>
2017-06-16 00:13:40 +08:00
< ? php
}
?>
2016-05-07 02:30:32 +08:00
</ ul >
2018-01-11 23:57:07 +08:00
< ? php } // end if canView('Monitors') ?>
2016-05-07 02:30:32 +08:00
< div class = " navbar-right " >
2018-01-11 23:57:07 +08:00
< ? php if ( ZM_OPT_USE_AUTH and $user ) { ?>
2018-03-25 21:44:30 +08:00
< p class = " navbar-text " >< i class = " material-icons " > account_circle </ i > < ? php echo makePopupLink ( '?view=logout' , 'zmLogout' , 'logout' , $user [ 'Username' ], ( ZM_AUTH_TYPE == " builtin " ) ) ?> </p>
2016-05-07 02:30:32 +08:00
< ? php } ?>
< ? php if ( canEdit ( 'System' ) ) { ?>
< button type = " button " class = " btn btn-default navbar-btn " data - toggle = " modal " data - target = " #modalState " >< ? php echo $status ?> </button>
< ? php } else if ( canView ( 'System' ) ) { ?>
< p class = " navbar-text " > < ? php echo $status ?> </p>
< ? php } ?>
</ div >
</ div ><!-- End . navbar - collapse -->
</ div > <!-- End . container - fluid -->
2017-12-02 11:15:29 +08:00
< ? php
} //end reload null. Runs on full page load
2018-01-11 23:57:07 +08:00
if ( ( ! ZM_OPT_USE_AUTH ) or $user ) {
2017-12-02 11:15:29 +08:00
if ( $reload == 'reload' ) ob_start ();
?>
2018-03-25 21:56:41 +08:00
< div id = " reload " class = " container-fluid reduced-text " >
2018-01-11 23:57:07 +08:00
< div id = " Bandwidth " class = " pull-left " >
2018-03-25 21:56:41 +08:00
< ? php echo makePopupLink ( '?view=bandwidth' , 'zmBandwidth' , 'bandwidth' , " <i class='material-icons md-18'>network_check</i> " . $bandwidth_options [ $_COOKIE [ 'zmBandwidth' ]] . ' ' , ( $user && $user [ 'MaxBandwidth' ] != 'low' ) ) ?>
2017-12-22 10:46:21 +08:00
</ div >
2018-01-11 23:57:07 +08:00
< div id = " Version " class = " pull-right " >
2017-12-22 10:46:21 +08:00
< ? php echo makePopupLink ( '?view=version' , 'zmVersion' , 'version' , '<span class="version ' . $versionClass . '">v' . ZM_VERSION . '</span>' , canEdit ( 'System' ) ) ?>
< ? php if ( defined ( 'ZM_WEB_CONSOLE_BANNER' ) and ZM_WEB_CONSOLE_BANNER != '' ) { ?>
< h3 id = " development " >< ? php echo ZM_WEB_CONSOLE_BANNER ?> </h3>
< ? php } ?>
</ div >
< ul class = " list-inline " >
2018-03-25 21:56:41 +08:00
< li class = " Load " >< i class = " material-icons md-18 " > trending_up </ i >& nbsp ; < ? php echo translate ( 'Load' ) ?> : <?php echo getLoad() ?></li>
< i class = " material-icons md-18 " > storage </ i >
2017-04-29 02:17:09 +08:00
< ? php
$connections = dbFetchOne ( " SHOW status WHERE variable_name='threads_connected' " , 'Value' );
$max_connections = dbFetchOne ( " SHOW variables WHERE variable_name='max_connections' " , 'Value' );
$percent_used = 100 * $connections / $max_connections ;
echo '<li' . ( $percent_used > 90 ? ' class="warning"' : '' ) . '>' . translate ( 'DB' ) . ':' . $connections . '/' . $max_connections . '</li>' ;
?>
2017-02-03 01:15:16 +08:00
< li >< ? php echo translate ( 'Storage' ) ?> :
< ? php
$storage_areas = Storage :: find_all ();
$storage_paths = null ;
foreach ( $storage_areas as $area ) {
$storage_paths [ $area -> Path ()] = $area ;
}
if ( ! isset ( $storage_paths [ ZM_DIR_EVENTS ]) ) {
array_push ( $storage_areas , new Storage () );
}
2017-10-10 22:38:13 +08:00
$func = function ( $S ){ return '<span title="' . human_filesize ( $S -> disk_used_space ()) . ' of ' . human_filesize ( $S -> disk_total_space ()) . '">' . $S -> Name () . ': ' . $S -> disk_usage_percent () . '%' . '</span>' ; };
2017-10-11 02:06:21 +08:00
#$func = function($S){ return '<span title="">'.$S->Name() . ': ' . $S->disk_usage_percent().'%' . '</span>'; };
2017-12-23 03:39:27 +08:00
if ( count ( $storage_areas ) >= 4 )
$storage_areas = Storage :: find_all ( array ( 'ServerId' => null ) );
if ( count ( $storage_areas ) < 4 )
echo implode ( ', ' , array_map ( $func , $storage_areas ) );
2016-11-12 11:40:00 +08:00
echo ' ' . ZM_PATH_MAP . ': ' . getDiskPercent ( ZM_PATH_MAP ) . '%' ;
2016-09-21 00:18:50 +08:00
?> </li>
2016-05-07 04:08:32 +08:00
</ ul >
2017-12-08 01:54:22 +08:00
<!-- End . footer / reload --></ div >
2017-12-02 11:15:29 +08:00
< ? php
if ( $reload == 'reload' ) return ( ob_get_clean () );
2018-01-11 23:57:07 +08:00
} // end if (!ZM_OPT_USE_AUTH) or $user )
2017-12-02 11:15:29 +08:00
?>
</ div ><!-- End . navbar . navbar - default -->
2016-05-07 02:30:32 +08:00
< ? php
2017-06-16 00:13:40 +08:00
return ( ob_get_clean () );
} // end function getNavBarHTML()
2017-07-13 22:07:23 +08:00
2017-07-13 00:49:01 +08:00
function xhtmlFooter () {
2017-07-13 22:07:23 +08:00
global $view ;
2017-07-13 00:49:01 +08:00
global $skin ;
2017-07-13 22:07:23 +08:00
global $running ;
2017-07-13 00:49:01 +08:00
if ( canEdit ( 'System' ) ) {
include ( " skins/ $skin /views/state.php " );
?>
< ? php
}
?>
2017-12-14 05:15:03 +08:00
</ body >
< script type = " text/javascript " >
$j ( '.chosen' ) . chosen ();
</ script >
</ html >
2017-07-13 00:49:01 +08:00
< ? php
} // end xhtmlFooter
2008-07-14 21:54:50 +08:00
?>