Initial commit of bootstrap-based skin
|
@ -0,0 +1,15 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic
|
||||
|
||||
SUBDIRS = \
|
||||
ajax \
|
||||
css \
|
||||
graphics \
|
||||
includes \
|
||||
js \
|
||||
lang \
|
||||
views
|
||||
|
||||
dist_web_DATA = \
|
||||
skin.php
|
|
@ -0,0 +1,5 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/ajax
|
||||
|
||||
dist_web_DATA = # No files here
|
|
@ -0,0 +1,8 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/css
|
||||
|
||||
dist_web_DATA = \
|
||||
skin.css \
|
||||
control.css \
|
||||
export.css
|
|
@ -0,0 +1,147 @@
|
|||
.ptzControls {
|
||||
vertical-align: top;
|
||||
margin: 10px auto 0;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.ptzControls input.ptzTextBtn {
|
||||
margin-top: 2px;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.ptzControls input[type=image] {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .arrowControl {
|
||||
width: 40px;
|
||||
height: 180px;
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .arrowControl input {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .longArrowBtn {
|
||||
width: 32px;
|
||||
height: 48px;
|
||||
margin: 0 auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a bit of a hack as these lines should be in the above
|
||||
* section but that messes up layout on IE6
|
||||
*/
|
||||
/*
|
||||
.ptzControls .controlsPanel > div > div.longArrowBtn {
|
||||
left: 50%;
|
||||
margin-left: -16px;
|
||||
}
|
||||
*/
|
||||
|
||||
.ptzControls .controlsPanel .upBtn {
|
||||
background: url("../graphics/arrow-l-u.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .downBtn {
|
||||
background: url("../graphics/arrow-l-d.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .focusControls {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .zoomControls {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .irisControls {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .whiteControls {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel {
|
||||
margin: 0 auto;
|
||||
height: 180px;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .pantiltButtons {
|
||||
margin: 5px auto;
|
||||
border: 1px solid #006699;
|
||||
text-align: center;
|
||||
padding: 1px;
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .arrowBtn {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .upLeftBtn {
|
||||
background: url("../graphics/arrow-ul.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .upBtn {
|
||||
background: url("../graphics/arrow-u.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .upRightBtn {
|
||||
background: url("../graphics/arrow-ur.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .leftBtn {
|
||||
background: url("../graphics/arrow-l.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .centerBtn {
|
||||
background: url("../graphics/center.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .rightBtn {
|
||||
background: url("../graphics/arrow-r.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .downLeftBtn {
|
||||
background: url("../graphics/arrow-dl.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .downBtn {
|
||||
background: url("../graphics/arrow-d.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .downRightBtn {
|
||||
background: url("../graphics/arrow-dr.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.ptzControls .controlsPanel .pantiltPanel .powerControls {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.ptzControls .presetControls {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.ptzControls .presetControls input {
|
||||
margin: 1px;
|
||||
}
|
||||
|
||||
.ptzControls .presetControls input.ptzNumBtn {
|
||||
padding: 1px 2px;
|
||||
width: 24px;
|
||||
color: #ffffff;
|
||||
text-align: center;
|
||||
background-color: #016A9D;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
body {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size:10px;
|
||||
font-weight: normal
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 1px solid #7f7fb2;
|
||||
text-align: center;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color: #7f7fb2;
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #7f7fb2;
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #666699;
|
||||
text-decoration: underline
|
||||
}
|
||||
|
||||
img.thumb {
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
td.monoRow {
|
||||
line-height: 200%;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#eventFrames tr.alarm {
|
||||
background-color: #fa8072;
|
||||
}
|
||||
|
||||
#eventFrames tr.bulk {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
|
||||
#eventFrames tr.normal {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
|
@ -0,0 +1,439 @@
|
|||
/*
|
||||
* ZoneMinder Base Stylesheet, $Date$, $Revision$
|
||||
* Copyright (C) 2001-2008 Philip Coombes
|
||||
*
|
||||
* 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) input[type=password], 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Primary look and feel styles
|
||||
*/
|
||||
|
||||
body {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 10px;
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: inherit;
|
||||
font-size: 120%;
|
||||
color: #000066;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: inherit;
|
||||
font-size: 110%;
|
||||
color: #000066;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
color: #016A9d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
color: #016A9d;
|
||||
}
|
||||
|
||||
p {
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
color: #333333;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: bold;
|
||||
color: #016A9d;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color: #7f7fb2;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #7f7fb2;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #666699;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
input,textarea,select,button {
|
||||
border: 1px #7f7fb2 solid;
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
input[type=text], input[type=password], textarea {
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
input.noborder {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
input[disabled] {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
img.normal {
|
||||
border: white solid 1px;
|
||||
}
|
||||
|
||||
img.alarm {
|
||||
border: red solid 1px;
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 1px;
|
||||
width: 100%;
|
||||
border: 0;
|
||||
color: #7f7fb2;
|
||||
background-color: #7f7fb2;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tabbed headings
|
||||
*/
|
||||
ul.tabList {
|
||||
float: left;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 0 -4px 0;
|
||||
white-space: nowrap;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.tabList li {
|
||||
float: left;
|
||||
border: 1px solid;
|
||||
color: #333333;
|
||||
border: #7f7fb2 solid 1px;
|
||||
border-bottom-width: 0;
|
||||
margin: 0 2px 0 0;
|
||||
background: #dddddd;
|
||||
text-align: center;
|
||||
padding: 3px 4px;
|
||||
}
|
||||
|
||||
ul.tabList li a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ul.tabList li:hover {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
ul.tabList li.active {
|
||||
background-color: #ffffff;
|
||||
border-bottom: #7f7fb2 dotted 1px;
|
||||
}
|
||||
|
||||
ul.tabList li.active a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*
|
||||
* Major league table for multiple inputs or presentation
|
||||
*/
|
||||
|
||||
#content table.major {
|
||||
margin: 4px auto;
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#content table.major tr.highlight {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
#content table.major thead tr th {
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#content table.major tfoot td {
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#content table.major th, #content table.major td {
|
||||
border: 1px solid #7f7fb2;
|
||||
padding: 3px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#content table.major th {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
#content table.major td {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#content table.major th[scope=row] {
|
||||
padding: 4px 3px 3px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#content table.major .colMark, #content table.major .colSelect {
|
||||
text-align: center;
|
||||
}
|
||||
/*
|
||||
* Lesser table for very simple forms
|
||||
*/
|
||||
|
||||
#content table.minor {
|
||||
width: 280px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#content table.minor td {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
#content table.minor .colLeft {
|
||||
width: 50%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#content table.minor .colRight {
|
||||
width: 50%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#content table.minor input[type=submit]
|
||||
{
|
||||
margin-top: 8px;
|
||||
padding: 0 2px;
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.overlay fieldset {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
.validation-advice {
|
||||
padding: 4px;
|
||||
color: #dc143c;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
border: 1px solid black;
|
||||
padding: 4px;
|
||||
margin-bottom: 8px;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
}
|
||||
|
||||
fieldset > legend {
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Behavior classes
|
||||
*/
|
||||
.alarm, .errorText {
|
||||
color: #dc143c;
|
||||
}
|
||||
|
||||
.alert, .warnText {
|
||||
color: #ff8c00;
|
||||
}
|
||||
|
||||
.ok, .infoText {
|
||||
color: #688e23;
|
||||
}
|
||||
|
||||
.fakelink {
|
||||
color: #7f7fb2;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fakelink:hover {
|
||||
color: #336699;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic useful classes, especially with mootools
|
||||
*/
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.invisible {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/*
|
||||
.table-th-sort {
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
td.table-td-sort {
|
||||
font-style:italic;
|
||||
}
|
||||
*/
|
||||
|
||||
th.table-th-sort {
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
th.table-th-sort span.table-th-sort-span {
|
||||
float: right;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background: url("../graphics/arrow-s-u.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
th.table-th-sort-rev span.table-th-sort-span {
|
||||
float: right;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background: url("../graphics/arrow-s-d.gif") no-repeat 0 0;
|
||||
}
|
||||
|
||||
.table-tr-odd {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
/*
|
||||
* Primary layout styles
|
||||
*/
|
||||
|
||||
#page {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#header {
|
||||
width: 96%;
|
||||
line-height: 24px;
|
||||
margin: 8px auto;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#header h2 {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#header h2.floating {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#headerControl {
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#headerButtons {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#headerButtons a {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
#headerButtons input {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: 96%;
|
||||
margin: 8px auto;
|
||||
line-height: 130%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#content p {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
#content p.textblock {
|
||||
text-align: justify;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
#content p.textblock br {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/*
|
||||
#contentDiv {
|
||||
margin: 0 auto 8px;
|
||||
line-height: 140%;
|
||||
text-align: center;
|
||||
}
|
||||
*/
|
||||
|
||||
#content > input[type=submit], #content > input[type=button], #content > button {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
#content table input[type=submit], #content table input[type=button], #content table button {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#contentButtons {
|
||||
margin-top: 8px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
#contentButtons input {
|
||||
margin-left: 8px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
#footer {
|
||||
width: 96%;
|
||||
margin: 8px auto;
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/graphics
|
||||
|
||||
dist_web_DATA = \
|
||||
arrow-d.gif \
|
||||
arrow-dl.gif \
|
||||
arrow-dr.gif \
|
||||
arrow-l-d.gif \
|
||||
arrow-l.gif \
|
||||
arrow-l-u.gif \
|
||||
arrow-r.gif \
|
||||
arrow-s-d.gif \
|
||||
arrow-s-u.gif \
|
||||
arrow-u.gif \
|
||||
arrow-ul.gif \
|
||||
arrow-ur.gif \
|
||||
center.gif \
|
||||
point-g.gif \
|
||||
point-o.gif \
|
||||
point-r.gif \
|
||||
seq-d.gif \
|
||||
seq-u.gif
|
After Width: | Height: | Size: 293 B |
After Width: | Height: | Size: 232 B |
After Width: | Height: | Size: 263 B |
After Width: | Height: | Size: 538 B |
After Width: | Height: | Size: 524 B |
After Width: | Height: | Size: 284 B |
After Width: | Height: | Size: 265 B |
After Width: | Height: | Size: 206 B |
After Width: | Height: | Size: 203 B |
After Width: | Height: | Size: 278 B |
After Width: | Height: | Size: 286 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 621 B |
After Width: | Height: | Size: 76 B |
After Width: | Height: | Size: 76 B |
After Width: | Height: | Size: 76 B |
After Width: | Height: | Size: 68 B |
After Width: | Height: | Size: 68 B |
|
@ -0,0 +1,11 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/includes
|
||||
|
||||
dist_web_DATA = \
|
||||
init.php \
|
||||
config.php \
|
||||
functions.php \
|
||||
control_functions.php \
|
||||
export_functions.php \
|
||||
timeline_functions.php
|
|
@ -0,0 +1,112 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder HTML configuration file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
$rates = array(
|
||||
"10000" => "100x",
|
||||
"5000" => "50x",
|
||||
"2500" => "25x",
|
||||
"1000" => "10x",
|
||||
"400" => "4x",
|
||||
"200" => "2x",
|
||||
"100" => $SLANG['Real'],
|
||||
"50" => "1/2x",
|
||||
"25" => "1/4x",
|
||||
);
|
||||
|
||||
$scales = array(
|
||||
"400" => "4x",
|
||||
"300" => "3x",
|
||||
"200" => "2x",
|
||||
"150" => "1.5x",
|
||||
"100" => $SLANG['Actual'],
|
||||
"75" => "3/4x",
|
||||
"50" => "1/2x",
|
||||
"33" => "1/3x",
|
||||
"25" => "1/4x",
|
||||
);
|
||||
|
||||
$bwArray = array(
|
||||
"high" => $SLANG['High'],
|
||||
"medium" => $SLANG['Medium'],
|
||||
"low" => $SLANG['Low']
|
||||
);
|
||||
|
||||
switch ( $_COOKIE['zmBandwidth'] )
|
||||
{
|
||||
case "high" :
|
||||
{
|
||||
define( "ZM_WEB_REFRESH_MAIN", ZM_WEB_H_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes
|
||||
define( "ZM_WEB_REFRESH_CYCLE", ZM_WEB_H_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor
|
||||
define( "ZM_WEB_REFRESH_IMAGE", ZM_WEB_H_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming)
|
||||
define( "ZM_WEB_REFRESH_STATUS", ZM_WEB_H_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window
|
||||
define( "ZM_WEB_REFRESH_EVENTS", ZM_WEB_H_REFRESH_EVENTS ); // How often the event listing is refreshed in the watch window, only for recent events
|
||||
define( "ZM_WEB_CAN_STREAM", ZM_WEB_H_CAN_STREAM ); // Override the automatic detection of browser streaming capability
|
||||
define( "ZM_WEB_STREAM_METHOD", ZM_WEB_H_STREAM_METHOD ); // Which method should be used to send video streams to your browser
|
||||
define( "ZM_WEB_DEFAULT_SCALE", ZM_WEB_H_DEFAULT_SCALE ); // What the default scaling factor applied to 'live' or 'event' views is (%)
|
||||
define( "ZM_WEB_DEFAULT_RATE", ZM_WEB_H_DEFAULT_RATE ); // What the default replay rate factor applied to 'event' views is (%)
|
||||
define( "ZM_WEB_VIDEO_BITRATE", ZM_WEB_H_VIDEO_BITRATE ); // What the bitrate of any streamed video should be
|
||||
define( "ZM_WEB_VIDEO_MAXFPS", ZM_WEB_H_VIDEO_MAXFPS ); // What the maximum frame rate of any streamed video should be
|
||||
define( "ZM_WEB_SCALE_THUMBS", ZM_WEB_H_SCALE_THUMBS ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
|
||||
define( "ZM_WEB_EVENTS_VIEW", ZM_WEB_H_EVENTS_VIEW ); // What the default view of multiple events should be.
|
||||
define( "ZM_WEB_SHOW_PROGRESS", ZM_WEB_H_SHOW_PROGRESS ); // Whether to show the progress of replay in event view.
|
||||
define( "ZM_WEB_AJAX_TIMEOUT", ZM_WEB_H_AJAX_TIMEOUT ); // Timeout to use for Ajax requests, no timeout used if unset
|
||||
break;
|
||||
}
|
||||
case "medium" :
|
||||
{
|
||||
define( "ZM_WEB_REFRESH_MAIN", ZM_WEB_M_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes
|
||||
define( "ZM_WEB_REFRESH_CYCLE", ZM_WEB_M_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor
|
||||
define( "ZM_WEB_REFRESH_IMAGE", ZM_WEB_M_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming)
|
||||
define( "ZM_WEB_REFRESH_STATUS", ZM_WEB_M_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window
|
||||
define( "ZM_WEB_REFRESH_EVENTS", ZM_WEB_M_REFRESH_EVENTS ); // How often the event listing is refreshed in the watch window, only for recent events
|
||||
define( "ZM_WEB_CAN_STREAM", ZM_WEB_M_CAN_STREAM ); // Override the automatic detection of browser streaming capability
|
||||
define( "ZM_WEB_STREAM_METHOD", ZM_WEB_M_STREAM_METHOD ); // Which method should be used to send video streams to your browser
|
||||
define( "ZM_WEB_DEFAULT_SCALE", ZM_WEB_M_DEFAULT_SCALE ); // What the default scaling factor applied to 'live' or 'event' views is (%)
|
||||
define( "ZM_WEB_DEFAULT_RATE", ZM_WEB_M_DEFAULT_RATE ); // What the default replay rate factor applied to 'event' views is (%)
|
||||
define( "ZM_WEB_VIDEO_BITRATE", ZM_WEB_M_VIDEO_BITRATE ); // What the bitrate of any streamed video should be
|
||||
define( "ZM_WEB_VIDEO_MAXFPS", ZM_WEB_M_VIDEO_MAXFPS ); // What the maximum frame rate of any streamed video should be
|
||||
define( "ZM_WEB_SCALE_THUMBS", ZM_WEB_M_SCALE_THUMBS ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
|
||||
define( "ZM_WEB_EVENTS_VIEW", ZM_WEB_M_EVENTS_VIEW ); // What the default view of multiple events should be.
|
||||
define( "ZM_WEB_SHOW_PROGRESS", ZM_WEB_M_SHOW_PROGRESS ); // Whether to show the progress of replay in event view.
|
||||
define( "ZM_WEB_AJAX_TIMEOUT", ZM_WEB_M_AJAX_TIMEOUT ); // Timeout to use for Ajax requests, no timeout used if unset
|
||||
break;
|
||||
}
|
||||
case "low" :
|
||||
{
|
||||
define( "ZM_WEB_REFRESH_MAIN", ZM_WEB_L_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes
|
||||
define( "ZM_WEB_REFRESH_CYCLE", ZM_WEB_L_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor
|
||||
define( "ZM_WEB_REFRESH_IMAGE", ZM_WEB_L_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming)
|
||||
define( "ZM_WEB_REFRESH_STATUS", ZM_WEB_L_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window
|
||||
define( "ZM_WEB_REFRESH_EVENTS", ZM_WEB_L_REFRESH_EVENTS ); // How often the event listing is refreshed in the watch window, only for recent events
|
||||
define( "ZM_WEB_CAN_STREAM", ZM_WEB_L_CAN_STREAM ); // Override the automatic detection of browser streaming capability
|
||||
define( "ZM_WEB_STREAM_METHOD", ZM_WEB_L_STREAM_METHOD ); // Which method should be used to send video streams to your browser
|
||||
define( "ZM_WEB_DEFAULT_SCALE", ZM_WEB_L_DEFAULT_SCALE ); // What the default scaling factor applied to 'live' or 'event' views is (%)
|
||||
define( "ZM_WEB_DEFAULT_RATE", ZM_WEB_L_DEFAULT_RATE ); // What the default replay rate factor applied to 'event' views is (%)
|
||||
define( "ZM_WEB_VIDEO_BITRATE", ZM_WEB_L_VIDEO_BITRATE ); // What the bitrate of any streamed video should be
|
||||
define( "ZM_WEB_VIDEO_MAXFPS", ZM_WEB_L_VIDEO_MAXFPS ); // What the maximum frame rate of any streamed video should be
|
||||
define( "ZM_WEB_SCALE_THUMBS", ZM_WEB_L_SCALE_THUMBS ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
|
||||
define( "ZM_WEB_EVENTS_VIEW", ZM_WEB_L_EVENTS_VIEW ); // What the default view of multiple events should be.
|
||||
define( "ZM_WEB_SHOW_PROGRESS", ZM_WEB_L_SHOW_PROGRESS ); // Whether to show the progress of replay in event view.
|
||||
define( "ZM_WEB_AJAX_TIMEOUT", ZM_WEB_L_AJAX_TIMEOUT ); // Timeout to use for Ajax requests, no timeout used if unset
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -0,0 +1,390 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web control function library, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
function getControlCommands( $monitor )
|
||||
{
|
||||
$cmds = array();
|
||||
|
||||
$cmds['Wake'] = "wake";
|
||||
$cmds['Sleep'] = "sleep";
|
||||
$cmds['Reset'] = "reset";
|
||||
|
||||
$cmds['PresetSet'] = "presetSet";
|
||||
$cmds['PresetGoto'] = "presetGoto";
|
||||
$cmds['PresetHome'] = "presetHome";
|
||||
|
||||
if ( !empty($monitor['CanZoom']) )
|
||||
{
|
||||
if ( $monitor['CanZoomCon'] )
|
||||
$cmds['ZoomRoot'] = "zoomCon";
|
||||
elseif ( $monitor['CanZoomRel'] )
|
||||
$cmds['ZoomRoot'] = "zoomRel";
|
||||
elseif ( $monitor['CanZoomAbs'] )
|
||||
$cmds['ZoomRoot'] = "zoomAbs";
|
||||
$cmds['ZoomTele'] = $cmds['ZoomRoot']."Tele";
|
||||
$cmds['ZoomWide'] = $cmds['ZoomRoot']."Wide";
|
||||
$cmds['ZoomStop'] = "zoomStop";
|
||||
$cmds['ZoomAuto'] = "zoomAuto";
|
||||
$cmds['ZoomMan'] = "zoomMan";
|
||||
}
|
||||
|
||||
if ( !empty($monitor['CanFocus']) )
|
||||
{
|
||||
if ( $monitor['CanFocusCon'] )
|
||||
$cmds['FocusRoot'] = "focusCon";
|
||||
elseif ( $monitor['CanFocusRel'] )
|
||||
$cmds['FocusRoot'] = "focusRel";
|
||||
elseif ( $monitor['CanFocusAbs'] )
|
||||
$cmds['FocusRoot'] = "focusAbs";
|
||||
$cmds['FocusFar'] = $cmds['FocusRoot']."Far";
|
||||
$cmds['FocusNear'] = $cmds['FocusRoot']."Near";
|
||||
$cmds['FocusStop'] = "focusStop";
|
||||
$cmds['FocusAuto'] = "focusAuto";
|
||||
$cmds['FocusMan'] = "focusMan";
|
||||
}
|
||||
|
||||
if ( !empty($monitor['CanIris']) )
|
||||
{
|
||||
if ( $monitor['CanIrisCon'] )
|
||||
$cmds['IrisRoot'] = "irisCon";
|
||||
elseif ( $monitor['CanIrisRel'] )
|
||||
$cmds['IrisRoot'] = "irisRel";
|
||||
elseif ( $monitor['CanIrisAbs'] )
|
||||
$cmds['IrisRoot'] = "irisAbs";
|
||||
$cmds['IrisOpen'] = $cmds['IrisRoot']."Open";
|
||||
$cmds['IrisClose'] = $cmds['IrisRoot']."Close";
|
||||
$cmds['IrisStop'] = "irisStop";
|
||||
$cmds['IrisAuto'] = "irisAuto";
|
||||
$cmds['IrisMan'] = "irisMan";
|
||||
}
|
||||
|
||||
if ( !empty($monitor['CanWhite']) )
|
||||
{
|
||||
if ( $monitor['CanWhiteCon'] )
|
||||
$cmds['WhiteRoot'] = "whiteCon";
|
||||
elseif ( $monitor['CanWhiteRel'] )
|
||||
$cmds['WhiteRoot'] = "whiteRel";
|
||||
elseif ( $monitor['CanWhiteAbs'] )
|
||||
$cmds['WhiteRoot'] = "whiteAbs";
|
||||
$cmds['WhiteIn'] = $cmds['WhiteRoot']."In";
|
||||
$cmds['WhiteOut'] = $cmds['WhiteRoot']."Out";
|
||||
$cmds['WhiteAuto'] = "whiteAuto";
|
||||
$cmds['WhiteMan'] = "whiteMan";
|
||||
}
|
||||
|
||||
if ( !empty($monitor['CanGain']) )
|
||||
{
|
||||
if ( $monitor['CanGainCon'] )
|
||||
$cmds['GainRoot'] = "gainCon";
|
||||
elseif ( $monitor['CanGainRel'] )
|
||||
$cmds['GainRoot'] = "gainRel";
|
||||
elseif ( $monitor['CanGainAbs'] )
|
||||
$cmds['GainRoot'] = "gainAbs";
|
||||
$cmds['GainUp'] = $cmds['GainRoot']."Up";
|
||||
$cmds['GainDown'] = $cmds['GainRoot']."Down";
|
||||
$cmds['GainAuto'] = "gainAuto";
|
||||
$cmds['GainMan'] = "gainMan";
|
||||
}
|
||||
|
||||
if ( !empty($monitor['CanMove']) )
|
||||
{
|
||||
if ( $monitor['CanMoveCon'] )
|
||||
{
|
||||
$cmds['MoveRoot'] = "moveCon";
|
||||
$cmds['Center'] = "moveStop";
|
||||
}
|
||||
elseif ( $monitor['CanMoveRel'] )
|
||||
{
|
||||
$cmds['MoveRoot'] = "moveRel";
|
||||
$cmds['Center'] = $cmds['PresetHome'];
|
||||
}
|
||||
elseif ( $monitor['CanMoveAbs'] )
|
||||
{
|
||||
$cmds['MoveRoot'] = "moveAbs";
|
||||
$cmds['Center'] = $cmds['PresetHome'];
|
||||
}
|
||||
|
||||
$cmds['MoveUp'] = $cmds['MoveRoot']."Up";
|
||||
$cmds['MoveDown'] = $cmds['MoveRoot']."Down";
|
||||
$cmds['MoveLeft'] = $cmds['MoveRoot']."Left";
|
||||
$cmds['MoveRight'] = $cmds['MoveRoot']."Right";
|
||||
$cmds['MoveUpLeft'] = $cmds['MoveRoot']."UpLeft";
|
||||
$cmds['MoveUpRight'] = $cmds['MoveRoot']."UpRight";
|
||||
$cmds['MoveDownLeft'] = $cmds['MoveRoot']."DownLeft";
|
||||
$cmds['MoveDownRight'] = $cmds['MoveRoot']."DownRight";
|
||||
}
|
||||
return( $cmds );
|
||||
}
|
||||
|
||||
function controlFocus( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="arrowControl focusControls">
|
||||
<div class="arrowLabel"><?= $SLANG['Near'] ?></div>
|
||||
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['FocusNear'] ?>',event,0,-1)"></div>
|
||||
<div class="arrowCenter"<?php if ( $monitor['CanFocusCon'] ) { ?> onclick="controlCmd('<?= $cmds['FocusStop'] ?>')"<?php } ?>><?= $SLANG['Focus'] ?></div>
|
||||
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['FocusFar'] ?>',event,0,1)"></div>
|
||||
<div class="arrowLabel"><?= $SLANG['Far'] ?></div>
|
||||
<?php
|
||||
if ( $monitor['CanAutoFocus'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['FocusAuto'] ?>')"/>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['FocusMan'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function controlZoom( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="arrowControl zoomControls">
|
||||
<div class="arrowLabel"><?= $SLANG['Tele'] ?></div>
|
||||
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['ZoomTele'] ?>',event,0,-1)"></div>
|
||||
<div class="arrowCenter"<?php if ( $monitor['CanZoomCon'] ) { ?> onclick="controlCmd('<?= $cmds['ZoomStop'] ?>')"<?php } ?>><?= $SLANG['Zoom'] ?></div>
|
||||
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['ZoomWide'] ?>',event,0,1)"></div>
|
||||
<div class="arrowLabel"><?= $SLANG['Wide'] ?></div>
|
||||
<?php
|
||||
if ( $monitor['CanAutoZoom'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['ZoomAuto'] ?>')"/>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['ZoomMan'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div><?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function controlIris( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="arrowControl irisControls">
|
||||
<div class="arrowLabel"><?= $SLANG['Open'] ?></div>
|
||||
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['IrisOpen'] ?>',event,0,-1)"></div>
|
||||
<div class="arrowCenter"<?php if ( $monitor['CanIrisCon'] ) { ?> onclick="controlCmd('<?= $cmds['IrisStop'] ?>')"<?php } ?>><?= $SLANG['Iris'] ?></div>
|
||||
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['IrisClose'] ?>',event,0,1)"></div>
|
||||
<div class="arrowLabel"><?= $SLANG['Close'] ?></div>
|
||||
<?php
|
||||
if ( $monitor['CanAutoIris'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['IrisAuto'] ?>')"/>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['IrisMan'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function controlWhite( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="arrowControl whiteControls">
|
||||
<div class="arrowLabel"><?= $SLANG['In'] ?></div>
|
||||
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['WhiteIn'] ?>',event,0,-1)"></div>
|
||||
<div class="arrowCenter"<?php if ( $monitor['CanWhiteCon'] ) { ?> onclick="controlCmd('<?= $cmds['WhiteStop'] ?>')"<?php } ?>><?= $SLANG['White'] ?></div>
|
||||
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['WhiteOut'] ?>',event,0,1)"></div>
|
||||
<div class="arrowLabel"><?= $SLANG['Out'] ?></div>
|
||||
<?php
|
||||
if ( $monitor['CanAutoWhite'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['WhiteAuto'] ?>')"/>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['WhiteMan'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function controlPanTilt( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="pantiltControls">
|
||||
<div class="pantilLabel"><?= $SLANG['PanTilt'] ?></div>
|
||||
<div class="pantiltButtons">
|
||||
<?php
|
||||
$hasPan = $monitor['CanPan'];
|
||||
$hasTilt = $monitor['CanTilt'];
|
||||
$hasDiag = $hasPan && $hasTilt && $monitor['CanMoveDiag'];
|
||||
?>
|
||||
<div class="arrowBtn upLeftBtn<?= $hasDiag?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveUpLeft'] ?>',event,-1,-1)"></div>
|
||||
<div class="arrowBtn upBtn<?= $hasTilt?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveUp'] ?>',event,0,-1)"></div>
|
||||
<div class="arrowBtn upRightBtn<?= $hasDiag?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveUpRight'] ?>',event,1,-1)"></div>
|
||||
<div class="arrowBtn leftBtn<?= $hasPan?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveLeft'] ?>',event,1,0)"></div>
|
||||
<div class="arrowBtn centerBtn" onclick="controlCmd('<?= $cmds['Center'] ?>')"></div>
|
||||
<div class="arrowBtn rightBtn<?= $hasPan?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveRight'] ?>',event,1,0)"></div>
|
||||
<div class="arrowBtn downLeftBtn<?= $hasDiag?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveDownLeft'] ?>',event,-1,1)"></div>
|
||||
<div class="arrowBtn downBtn<?= $hasTilt?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveDown'] ?>',event,0,1)"></div>
|
||||
<div class="arrowBtn downRightBtn<?= $hasDiag?'':' invisible' ?>" onclick="controlCmd('<?= $cmds['MoveDownRight'] ?>',event,1,1)"></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function controlPresets( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
define( "MAX_PRESETS", "12" );
|
||||
|
||||
$sql = "select * from ControlPresets where MonitorId = '".$monitor['Id']."'";
|
||||
$labels = array();
|
||||
foreach( dbFetchAll( $sql ) as $row )
|
||||
{
|
||||
$labels[$row['Preset']] = $row['Label'];
|
||||
}
|
||||
|
||||
$presetBreak = (int)(($monitor['NumPresets']+1)/((int)(($monitor['NumPresets']-1)/MAX_PRESETS)+1));
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="presetControls">
|
||||
<!--<div><?= $SLANG['Presets'] ?></div>-->
|
||||
<div>
|
||||
<?php
|
||||
for ( $i = 1; $i <= $monitor['NumPresets']; $i++ )
|
||||
{
|
||||
?><input type="button" class="ptzNumBtn" title="<?= isset($labels[$i])?$labels[$i]:"" ?>" value="<?= $i ?>" onclick="controlCmd('<?= $cmds['PresetGoto'] ?><?= $i ?>');"/><?php
|
||||
if ( $i && (($i%$presetBreak) == 0) )
|
||||
{
|
||||
?><br/><?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div>
|
||||
<?php
|
||||
if ( $monitor['HasHomePreset'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Home'] ?>" onclick="controlCmd('<?= $cmds['PresetHome'] ?>');"/>
|
||||
<?php
|
||||
}
|
||||
if ( canEdit( 'Monitors') && $monitor['CanSetPresets'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Set'] ?>" onclick="createPopup( '?view=controlpreset&mid=<?= $monitor['Id'] ?>', 'zmPreset', 'preset' );"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function controlPower( $monitor, $cmds )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
?>
|
||||
<div class="powerControls">
|
||||
<div class="powerLabel"><?= $SLANG['Control'] ?></div>
|
||||
<div>
|
||||
<?php
|
||||
if ( $monitor['CanWake'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Wake'] ?>" onclick="controlCmd('<?= $cmds['Wake'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
if ( $monitor['CanSleep'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Sleep'] ?>" onclick="controlCmd('<?= $cmds['Sleep'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
if ( $monitor['CanReset'] )
|
||||
{
|
||||
?>
|
||||
<input type="button" class="ptzTextBtn" value="<?= $SLANG['Reset'] ?>" onclick="controlCmd('<?= $cmds['Reset'] ?>')"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function ptzControls( $monitor )
|
||||
{
|
||||
$cmds = getControlCommands( $monitor );
|
||||
ob_start();
|
||||
?>
|
||||
<div class="controlsPanel">
|
||||
<?php
|
||||
if ( $monitor['CanFocus'] )
|
||||
echo controlFocus( $monitor, $cmds );
|
||||
if ( $monitor['CanZoom'] )
|
||||
echo controlZoom( $monitor, $cmds );
|
||||
if ( $monitor['CanIris'] )
|
||||
echo controlIris( $monitor, $cmds );
|
||||
if ( $monitor['CanWhite'] )
|
||||
echo controlWhite( $monitor, $cmds );
|
||||
if ( $monitor['CanMove'] || ( $monitor['CanWake'] || $monitor['CanSleep'] || $monitor['CanReset'] ) )
|
||||
{
|
||||
?>
|
||||
<div class="pantiltPanel">
|
||||
<?php
|
||||
if ( $monitor['CanMove'] )
|
||||
echo controlPanTilt( $monitor, $cmds );
|
||||
if ( $monitor['CanWake'] || $monitor['CanSleep'] || $monitor['CanReset'] )
|
||||
echo controlPower( $monitor, $cmds );
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
if ( $monitor['HasPresets'] )
|
||||
echo controlPresets( $monitor, $cmds );
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,963 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web export function library, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
function exportHeader( $title )
|
||||
{
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><?= $title ?></title>
|
||||
<style type="text/css">
|
||||
<!--
|
||||
<?php include( ZM_SKIN_PATH.'/css/export.css' ); ?>
|
||||
|
||||
|
||||
ul.tabs {
|
||||
margin: 0;
|
||||
margin-bottom: -1px;
|
||||
padding: 0;
|
||||
float: left;
|
||||
list-style: none;
|
||||
height: 32px;
|
||||
border-bottom: 1px solid #7f7fb2;
|
||||
border-left: 1px solid #7f7fb2;
|
||||
width: 100%;
|
||||
}
|
||||
ul.tabs li {
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 31px;
|
||||
line-height: 31px;
|
||||
border: 1px solid #7f7fb2;
|
||||
border-left: none;
|
||||
margin-bottom: -1px;
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
ul.tabs li a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
display: block;
|
||||
font-size: 1.2em;
|
||||
padding: 0 20px;
|
||||
outline: none;
|
||||
}
|
||||
ul.tabs li a:hover {
|
||||
background: #ccc;
|
||||
}
|
||||
html ul.tabs li.active, html ul.tabs li.active a:hover {
|
||||
background: #dddddd;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
<script type="text/javascript" src="<?php echo ZM_SKIN_PATH; ?>/js/jquery-1.4.2.min.js"></script>
|
||||
<script type="text/javascript" language="javascript" charset="utf-8">
|
||||
|
||||
/*==========[tab code]==========*/
|
||||
$(document).ready(function() {
|
||||
|
||||
//When page loads...
|
||||
$(".tab_content").hide(); //Hide all content
|
||||
$("ul.tabs li:first").addClass("active").show(); //Activate first tab
|
||||
$(".tab_content:first").show(); //Show first tab content
|
||||
|
||||
//On Click Event
|
||||
$("ul.tabs li").click(function() {
|
||||
|
||||
$("ul.tabs li").removeClass("active"); //Remove any "active" class
|
||||
$(this).addClass("active"); //Add "active" class to selected tab
|
||||
$(".tab_content").hide(); //Hide all tab content
|
||||
|
||||
var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
|
||||
$(activeTab).fadeIn(); //Fade in the active ID content
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
// ]]>
|
||||
</script>
|
||||
</head>
|
||||
<?php
|
||||
}
|
||||
|
||||
function exportEventDetail( $event, $exportFrames, $exportImages )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
exportHeader( $SLANG['Event']." ".$event['Id'] );
|
||||
|
||||
$otherlinks = '';
|
||||
if( $exportFrames ) $otherlinks .= '<a href="zmEventFrames.html">'.$SLANG['Frames'].'</a>,';
|
||||
if( $exportImages ) $otherlinks .= '<a href="zmEventImages.html">'.$SLANG['Images'].'</a>,';
|
||||
$otherlinks = substr($otherlinks,0,-1);
|
||||
|
||||
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="content">
|
||||
<h2><?= $SLANG['Event'] ?>: <?= validHtmlStr($event['Name']) ?><?php if(!empty($otherlinks)) { ?> (<?=$otherlinks?>) <?php } ?></h2>
|
||||
<table id="eventDetail">
|
||||
<tr><th scope="row"><?= $SLANG['Id'] ?></th><td><?= $event['Id'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Name'] ?></th><td><?= validHtmlStr($event['Name']) ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Monitor'] ?></th><td><?= validHtmlStr($event['MonitorName']) ?> (<?= $event['MonitorId'] ?>)</td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Cause'] ?></th><td><?= validHtmlStr($event['Cause']) ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Notes'] ?></th><td><?= validHtmlStr($event['Notes']) ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Time'] ?></th><td><?= strftime( STRF_FMT_DATETIME_SHORTER, strtotime($event['StartTime']) ) ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Duration'] ?></th><td><?= $event['Length'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Frames'] ?></th><td><?= $event['Frames'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['AttrAlarmFrames'] ?></th><td><?= $event['AlarmFrames'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['AttrTotalScore'] ?></th><td><?= $event['TotScore'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['AttrAvgScore'] ?></th><td><?= $event['AvgScore'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['AttrMaxScore'] ?></th><td><?= $event['MaxScore'] ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Archived'] ?></th><td><?= $event['Archived']?$SLANG['Yes']:$SLANG['No'] ?></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function exportEventFrames( $event, $exportDetail, $exportImages )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
$sql = "SELECT *, unix_timestamp( TimeStamp ) AS UnixTimeStamp FROM Frames WHERE EventID = ? ORDER BY FrameId";
|
||||
$frames = dbFetchAll( $sql, NULL, array( $event['Id'] ) );
|
||||
|
||||
ob_start();
|
||||
exportHeader( $SLANG['Frames']." ".$event['Id'] );
|
||||
|
||||
$otherlinks = '';
|
||||
if( $exportDetail ) $otherlinks .= '<a href="zmEventDetail.html">'.$SLANG['Event'].'</a>,';
|
||||
if( $exportImages ) $otherlinks .= '<a href="zmEventImages.html">'.$SLANG['Images'].'</a>,';
|
||||
$otherlinks = substr($otherlinks,0,-1);
|
||||
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="content">
|
||||
<h2><?= $SLANG['Frames'] ?>: <?= validHtmlStr($event['Name']) ?><?php if(!empty($otherlinks)) { ?> (<?=$otherlinks?>) <?php } ?></h2>
|
||||
<table id="eventFrames">
|
||||
<tr>
|
||||
<th><?= $SLANG['FrameId'] ?></th>
|
||||
<th><?= $SLANG['Type'] ?></th>
|
||||
<th><?= $SLANG['TimeStamp'] ?></th>
|
||||
<th><?= $SLANG['TimeDelta'] ?></th>
|
||||
<th><?= $SLANG['Score'] ?></th>
|
||||
<?php
|
||||
if ( $exportImages )
|
||||
{
|
||||
?>
|
||||
<th><?= $SLANG['Image'] ?></th>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
if ( count($frames) )
|
||||
{
|
||||
$eventPath = mygetEventPath( $event );
|
||||
foreach ( $frames as $frame )
|
||||
{
|
||||
$imageFile = sprintf( "%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", $frame['FrameId'] );
|
||||
$imagePath = $eventPath."/".$imageFile;
|
||||
$analImage = preg_replace( "/capture/", "analyse", $imagePath );
|
||||
if ( file_exists( $analImage ) )
|
||||
{
|
||||
$imageFile = preg_replace( "/capture/", "analyse", $imageFile );
|
||||
}
|
||||
|
||||
$class = strtolower($frame['Type']);
|
||||
?>
|
||||
<tr class="<?= $class ?>">
|
||||
<td><?= $frame['FrameId'] ?></td>
|
||||
<td><?= $frame['Type'] ?></td>
|
||||
<td><?= strftime( STRF_FMT_TIME, $frame['UnixTimeStamp'] ) ?></td>
|
||||
<td><?= number_format( $frame['Delta'], 2 ) ?></td>
|
||||
<td><?= $frame['Score'] ?></td>
|
||||
<?php
|
||||
if ( $exportImages )
|
||||
{
|
||||
?>
|
||||
<td><a href="<?= $imageFile ?>" target="zmExportImage"><img src="<?= $imageFile ?>" border="0" class="thumb" alt="Frame <?= $frame['FrameId'] ?>"/></a></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td class="monoRow" colspan="<?= $exportImages?6:5 ?>"><?= $SLANG['NoFramesRecorded'] ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
function exportEventImages( $event, $exportDetail, $exportFrames, $myfilelist )
|
||||
{
|
||||
global $SLANG;
|
||||
|
||||
ob_start();
|
||||
exportHeader( $SLANG['Images']." ".$event['Id'] );
|
||||
|
||||
$otherlinks = '';
|
||||
if( $exportDetail ) $otherlinks .= '<a href="zmEventDetail.html">'.$SLANG['Event'].'</a>,';
|
||||
if( $exportFrames ) $otherlinks .= '<a href="zmEventFrames.html">'.$SLANG['Frames'].'</a>,';
|
||||
$otherlinks = substr($otherlinks,0,-1);
|
||||
|
||||
$filelist = array_keys($myfilelist);
|
||||
sort($filelist,SORT_NUMERIC);
|
||||
$slides = '"'.implode('","',$filelist).'"';
|
||||
$listcount = count($filelist);
|
||||
?>
|
||||
<body>
|
||||
<style>
|
||||
*.horizontal_track {background-color: #bbb;width: <?=$event['Width']?>px;line-height: 0px;font-size: 0px;text-align: left;padding: 4px;border: 1px solid;border-color: #ddd #999 #999 #ddd;}
|
||||
*.horizontal_slider {background-color: #666;width: 16px;height: 8px;position: relative;z-index: 2;line-height: 0;margin: 0;border: 2px solid;border-color: #999 #333 #333 #999;}
|
||||
*.horizontal_slit {background-color: #333;width: <?=($event['Width']-10)?>px;height: 2px;margin: 4px 4px 2px 4px;line-height: 0;position: absolute;z-index: 1;border: 1px solid;border-color: #999 #ddd #ddd #999;}
|
||||
*.vertical_track {background-color: #bbb;padding: 3px 5px 15px 5px;border: 1px solid;border-color: #ddd #999 #999 #ddd;}
|
||||
*.vertical_slider {background-color: #666;width: 18px;height: 8px;font: 0px;text-align: left;line-height: 0px;position: relative;z-index: 1;border: 2px solid;border-color: #999 #333 #333 #999;}
|
||||
*.vertical_slit {background-color: #000;width: 2px;height: 100px;position: absolute;margin: 4px 10px 4px 10px;padding: 4px 0 1px 0;line-height: 0;font-size: 0;border: 1px solid;border-color: #666 #ccc #ccc #666;}
|
||||
*.display_holder {background-color: #bbb;color: #fff;width: 34px;height: 20px;text-align: right;padding: 0;border: 1px solid;border-color: #ddd #999 #999 #ddd;}
|
||||
.value_display {background-color: #bbb;color: #333;width: 30px;margin: 0 2px;text-align: right;font-size: 8pt;font-face: verdana, arial, helvetica, sans-serif;font-weight: bold;line-height: 12px;border: 0;cursor: default;}
|
||||
</style>
|
||||
|
||||
<h2><?= $SLANG['Images'] ?>: <?= validHtmlStr($event['Name']) ?><?php if(!empty($otherlinks)) { ?> (<?=$otherlinks?>) <?php } ?></h2>
|
||||
|
||||
<ilayer id="slidensmain" width=&{slidewidth}; height=&{slideheight}; bgColor=&{slidebgcolor}; visibility=hide>
|
||||
<layer id="slidenssub" width=&{slidewidth}; left=auto top=auto></layer>
|
||||
</ilayer>
|
||||
<div id="imagevideo" align="center"></div>
|
||||
<br>
|
||||
<div align="center">
|
||||
<button onclick="stepbackward()">< Step</button><button
|
||||
id="btnrwd" onclick="rewind()" >Rwd</button><button
|
||||
id="btnplay" onclick="playstop()">Stop</button><button
|
||||
onclick="stepforward()">Step ></button><button
|
||||
id="btnspeedup" onclick="speedup()">speedup</button><button
|
||||
id="btnspeeddown" onclick="speeddown()">slowdown</button>
|
||||
</div>
|
||||
<div align="center"><div class="horizontal_track" >
|
||||
<div class="horizontal_slit" > </div>
|
||||
<div class="horizontal_slider" id="imageslider_id" style="left: 0px;"
|
||||
onmousedown="slide(event,'horizontal', <?=($event['Width']-20)?>, 1, <?=$listcount?>, <?=$listcount?>,0, 'imageslider_display_id');" > </div>
|
||||
</div></div>
|
||||
<div align="center"><div class="display_holder" ><input id="imageslider_display_id" class="value_display" type="text" value="0" onfocus="blur(this);" /></div></div>
|
||||
|
||||
|
||||
<script language="JavaScript1.2">
|
||||
|
||||
/***********************************************
|
||||
* Flexi Slideshow- © Dynamic Drive (www.dynamicdrive.com)
|
||||
* This notice must stay intact for use
|
||||
* Visit http://www.dynamicdrive.com/ for full source code
|
||||
***********************************************/
|
||||
|
||||
var eventWidth = <?=$event['Width']?>;
|
||||
var eventHeight = <?=$event['Height']?>;
|
||||
var variableslide=[<?=$slides?>];
|
||||
|
||||
//configure the below 3 variables to set the dimension/background color of the slideshow
|
||||
|
||||
var slidewidth=eventWidth+'px' //set to width of LARGEST image in your slideshow
|
||||
var slideheight=eventHeight+'px' //set to height of LARGEST iamge in your slideshow, plus any text description
|
||||
var slidebgcolor='#ffffff'
|
||||
|
||||
//configure the below variable to determine the delay between image rotations (in miliseconds)
|
||||
var origslidedelay=100;
|
||||
var slidedelay=origslidedelay;
|
||||
|
||||
////Do not edit pass this line////////////////
|
||||
|
||||
var ie=document.all;
|
||||
var dom=document.getElementById;
|
||||
|
||||
for (i=0;i<variableslide.length;i++){
|
||||
var cacheimage=new Image()
|
||||
cacheimage.src=variableslide[i]
|
||||
}
|
||||
|
||||
var currentslide=-1
|
||||
var mytimer = null;
|
||||
|
||||
//if (ie||dom) document.write('<div id="slidedom" style="width:'+slidewidth+'px;height:'+slideheight+'; background-color:'+slidebgcolor+'"></div>');
|
||||
if (ie||dom) document.getElementById('imagevideo').innerHTML = '<div id="slidedom" style="width:'+slidewidth+'px;height:'+slideheight+'; background-color:'+slidebgcolor+'"><img src="" name="imageslideframe"></div>';
|
||||
|
||||
function rotateimages(){
|
||||
if (currentslide==variableslide.length-1) currentslide=0;
|
||||
else currentslide++;
|
||||
|
||||
changeimage();
|
||||
|
||||
mytimer = setTimeout("rotateimages()",slidedelay);
|
||||
}
|
||||
|
||||
function changeimage() {
|
||||
contentcontainer='<center><img src="'+variableslide[currentslide]+'" border="0" vspace="3"></center>';
|
||||
|
||||
if (document.layers){
|
||||
crossrotateobj.document.write(contentcontainer);
|
||||
crossrotateobj.document.close();
|
||||
}
|
||||
else if (ie||dom) document.imageslideframe.src = variableslide[currentslide];
|
||||
|
||||
slideManual(currentslide+1,eventWidth-20, 1, variableslide.length);
|
||||
}
|
||||
|
||||
|
||||
function start_slider(){
|
||||
crossrotateobj=dom? document.getElementById("slidedom") : ie? document.all.slidedom : document.slidensmain.document.slidenssub;
|
||||
if (document.layers) document.slidensmain.visibility="show";
|
||||
rotateimages();
|
||||
}
|
||||
|
||||
|
||||
// seyi_code
|
||||
function rotateimagesrewind(){
|
||||
if (currentslide==0) currentslide=variableslide.length-1;
|
||||
else currentslide--;
|
||||
|
||||
changeimage();
|
||||
|
||||
mytimer = setTimeout("rotateimagesrewind()",slidedelay);
|
||||
}
|
||||
|
||||
function stepforward() {
|
||||
clearTimeout(mytimer);
|
||||
// document.getElementById('btnrwd').style.borderTop='2px solid #ffffff';
|
||||
// document.getElementById('btnrwd').style.borderBottom='2px solid #848284';
|
||||
// document.getElementById('btnrwd').style.borderRight='2px solid #848284';
|
||||
// document.getElementById('btnrwd').style.borderLeft='1px solid #ffffff';
|
||||
document.getElementById('btnplay').disabled = false;
|
||||
document.getElementById('btnplay').innerHTML = 'Play';
|
||||
document.getElementById('btnspeedup').disabled = true;
|
||||
document.getElementById('btnspeeddown').disabled = true;
|
||||
|
||||
if (currentslide==variableslide.length-1) currentslide=0;
|
||||
else currentslide++;
|
||||
|
||||
changeimage();
|
||||
|
||||
}
|
||||
function stepbackward() {
|
||||
clearTimeout(mytimer);
|
||||
// document.getElementById('btnrwd').style.borderTop='2px solid #ffffff';
|
||||
// document.getElementById('btnrwd').style.borderBottom='2px solid #848284';
|
||||
// document.getElementById('btnrwd').style.borderRight='2px solid #848284';
|
||||
// document.getElementById('btnrwd').style.borderLeft='1px solid #ffffff';
|
||||
document.getElementById('btnplay').disabled = false;
|
||||
document.getElementById('btnplay').innerHTML = 'Play';
|
||||
document.getElementById('btnspeedup').disabled = true;
|
||||
document.getElementById('btnspeeddown').disabled = true;
|
||||
|
||||
if (currentslide==0) currentslide=variableslide.length-1;
|
||||
else currentslide--;
|
||||
|
||||
changeimage();
|
||||
|
||||
}
|
||||
function speedup() { slidedelay = slidedelay/2; }
|
||||
function speeddown() { slidedelay = slidedelay*2; }
|
||||
function playstop() {
|
||||
if(document.getElementById('btnplay').innerHTML == 'Play') {
|
||||
slidedelay = origslidedelay;
|
||||
mytimer = setTimeout("rotateimages()",slidedelay);
|
||||
document.getElementById('btnplay').innerHTML = 'Stop';
|
||||
document.getElementById('btnspeedup').disabled = false;
|
||||
document.getElementById('btnspeeddown').disabled = false;
|
||||
} else if(document.getElementById('btnplay').innerHTML == 'Stop') {
|
||||
clearTimeout(mytimer);
|
||||
document.getElementById('btnplay').innerHTML = 'Play';
|
||||
document.getElementById('btnrwd').disabled = false;
|
||||
document.getElementById('btnspeedup').disabled = true;
|
||||
document.getElementById('btnspeeddown').disabled = true;
|
||||
}
|
||||
}
|
||||
function rewind() {
|
||||
clearTimeout(mytimer);
|
||||
|
||||
if(!document.getElementById('btnplay').disabled) {
|
||||
slidedelay = origslidedelay;
|
||||
mytimer = setTimeout("rotateimagesrewind()",slidedelay);
|
||||
|
||||
// document.getElementById('btnrwd').style.borderTop = '2px solid #414241';
|
||||
// document.getElementById('btnrwd').style.borderBottom = '1px solid #ffffff';
|
||||
// document.getElementById('btnrwd').style.borderLeft = '2px solid #414241';
|
||||
// document.getElementById('btnrwd').style.borderRight = '1px solid #ffffff';
|
||||
document.getElementById('btnplay').disabled = true;
|
||||
document.getElementById('btnspeedup').disabled = false;
|
||||
document.getElementById('btnspeeddown').disabled = false;
|
||||
} else {
|
||||
|
||||
// document.getElementById('btnrwd').style.borderTop='2px solid #ffffff';
|
||||
// document.getElementById('btnrwd').style.borderBottom='2px solid #848284';
|
||||
// document.getElementById('btnrwd').style.borderRight='2px solid #848284';
|
||||
// document.getElementById('btnrwd').style.borderLeft='1px solid #ffffff';
|
||||
document.getElementById('btnplay').disabled = false;
|
||||
document.getElementById('btnspeedup').disabled = true;
|
||||
document.getElementById('btnspeeddown').disabled = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------+
|
||||
// CARPE S l i d e r 1.3 |
|
||||
// 2005 - 12 - 10 |
|
||||
// By Tom Hermansson Snickars |
|
||||
// Copyright CARPE Design |
|
||||
// http://carpe.ambiprospect.com/ |
|
||||
//---------------------------------+
|
||||
|
||||
// carpeGetElementByID: Cross-browser version of "document.getElementById()"
|
||||
function carpeGetElementById(element) {
|
||||
if (document.getElementById) element = document.getElementById(element);
|
||||
else if (document.all) element = document.all[element];
|
||||
else element = null;
|
||||
return element;
|
||||
}
|
||||
// carpeLeft: Cross-browser version of "element.style.left"
|
||||
function carpeLeft(elmnt, pos) {
|
||||
if (!(elmnt = carpeGetElementById(elmnt))) return 0;
|
||||
if (elmnt.style && (typeof(elmnt.style.left) == 'string')) {
|
||||
if (typeof(pos) == 'number') elmnt.style.left = pos + 'px';
|
||||
else {
|
||||
pos = parseInt(elmnt.style.left);
|
||||
if (isNaN(pos)) pos = 0;
|
||||
}
|
||||
}
|
||||
else if (elmnt.style && elmnt.style.pixelLeft) {
|
||||
if (typeof(pos) == 'number') elmnt.style.pixelLeft = pos;
|
||||
else pos = elmnt.style.pixelLeft;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
// carpeTop: Cross-browser version of "element.style.top"
|
||||
function carpeTop(elmnt, pos) {
|
||||
if (!(elmnt = carpeGetElementById(elmnt))) return 0;
|
||||
if (elmnt.style && (typeof(elmnt.style.top) == 'string')) {
|
||||
if (typeof(pos) == 'number') elmnt.style.top = pos + 'px';
|
||||
else {
|
||||
pos = parseInt(elmnt.style.top);
|
||||
if (isNaN(pos)) pos = 0;
|
||||
}
|
||||
}
|
||||
else if (elmnt.style && elmnt.style.pixelTop) {
|
||||
if (typeof(pos) == 'number') elmnt.style.pixelTop = pos;
|
||||
else pos = elmnt.style.pixelTop;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
// moveSlider: Handles slider and display while dragging
|
||||
function moveSlider(evnt) {
|
||||
var evnt = (!evnt) ? window.event : evnt; // The mousemove event
|
||||
if (mouseover) { // Only if slider is dragged
|
||||
x = pxLeft + evnt.screenX - xCoord // Horizontal mouse position relative to allowed slider positions
|
||||
y = pxTop + evnt.screenY - yCoord // Horizontal mouse position relative to allowed slider positions
|
||||
if (x > xMax) x = xMax // Limit horizontal movement
|
||||
if (x < 0) x = 0 // Limit horizontal movement
|
||||
if (y > yMax) y = yMax // Limit vertical movement
|
||||
if (y < 0) y = 0 // Limit vertical movement
|
||||
carpeLeft(sliderObj.id, x) // move slider to new horizontal position
|
||||
carpeTop(sliderObj.id, y) // move slider to new vertical position
|
||||
sliderVal = x + y // pixel value of slider regardless of orientation
|
||||
sliderPos = (sliderObj.pxLen / sliderObj.valCount) * Math.round(sliderObj.valCount * sliderVal / sliderObj.pxLen)
|
||||
v = Math.round((sliderPos * sliderObj.scale + sliderObj.fromVal) * // calculate display value
|
||||
Math.pow(10, displayObj.dec)) / Math.pow(10, displayObj.dec)
|
||||
displayObj.value = v // put the new value in the slider display element
|
||||
|
||||
// seyi_code
|
||||
currentslide = v-1;
|
||||
changeimage();
|
||||
return false
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// moveSlider: Handles the start of a slider move.
|
||||
function slide(evnt, orientation, length, from, to, count, decimals, display) {
|
||||
if (!evnt) evnt = window.event;
|
||||
sliderObj = (evnt.target) ? evnt.target : evnt.srcElement; // Get the activated slider element.
|
||||
sliderObj.pxLen = length // The allowed slider movement in pixels.
|
||||
sliderObj.valCount = count ? count - 1 : length // Allowed number of values in the interval.
|
||||
displayObj = carpeGetElementById(display) // Get the associated display element.\
|
||||
displayObj.dec = decimals // Number of decimals to be displayed.
|
||||
sliderObj.scale = (to - from) / length // Slider-display scale [value-change per pixel of movement].
|
||||
if (orientation == 'horizontal') { // Set limits for horizontal sliders.
|
||||
sliderObj.fromVal = from
|
||||
xMax = length
|
||||
yMax = 0
|
||||
}
|
||||
if (orientation == 'vertical') { // Set limits and scale for vertical sliders.
|
||||
sliderObj.fromVal = to
|
||||
xMax = 0
|
||||
yMax = length
|
||||
sliderObj.scale = -sliderObj.scale // Invert scale for vertical sliders. "Higher is more."
|
||||
}
|
||||
pxLeft = carpeLeft(sliderObj.id) // Sliders horizontal position at start of slide.
|
||||
pxTop = carpeTop(sliderObj.id) // Sliders vertical position at start of slide.
|
||||
xCoord = evnt.screenX // Horizontal mouse position at start of slide.
|
||||
yCoord = evnt.screenY // Vertical mouse position at start of slide.
|
||||
mouseover = true
|
||||
document.onmousemove = moveSlider // Start the action if the mouse is dragged.
|
||||
document.onmouseup = sliderMouseUp // Stop sliding.
|
||||
}
|
||||
// sliderMouseup: Handles the mouseup event after moving a slider.
|
||||
// Snaps the slider position to allowed/displayed value.
|
||||
function sliderMouseUp() {
|
||||
mouseover = false // Stop the sliding.
|
||||
v = (displayObj.value) ? displayObj.value : 0 // Find last display value.
|
||||
pos = (v - sliderObj.fromVal)/(sliderObj.scale) // Calculate slider position (regardless of orientation).
|
||||
if (yMax == 0) carpeLeft(sliderObj.id, pos) // Snap horizontal slider to corresponding display position.
|
||||
if (xMax == 0) carpeTop(sliderObj.id, pos) // Snap vertical slider to corresponding display position.
|
||||
if (document.removeEventListener) { // Remove event listeners from 'document' (Moz&co).
|
||||
document.removeEventListener('mousemove', moveSlider)
|
||||
document.removeEventListener('mouseup', sliderMouseUp)
|
||||
}
|
||||
else if (document.detachEvent) { // Remove event listeners from 'document' (IE&co).
|
||||
document.detachEvent('onmousemove', moveSlider)
|
||||
document.detachEvent('onmouseup', sliderMouseUp)
|
||||
}
|
||||
}
|
||||
|
||||
//seyi_code
|
||||
//slide(event,'horizontal', 300, 1, 22, 22,0, 'imageslider_display_id');
|
||||
//slide(evnt, orientation, length, from, to, count, decimals, display) {
|
||||
function slideManual(val,length,from,to) {
|
||||
scale = (to - from) / length // Slider-display scale [value-change per pixel of movement].
|
||||
fromVal = from
|
||||
xMax = length
|
||||
yMax = 0
|
||||
sliderid = 'imageslider_id';
|
||||
|
||||
|
||||
v = (val) ? val : 0 // Find last display value.
|
||||
displayobject = carpeGetElementById('imageslider_display_id') // Get the associated display element.\
|
||||
displayobject.value = val;
|
||||
pos = (v - fromVal)/(scale) // Calculate slider position (regardless of orientation).
|
||||
if (yMax == 0) carpeLeft(sliderid, pos) // Snap horizontal slider to corresponding display position.
|
||||
}
|
||||
|
||||
if (ie||dom) start_slider();
|
||||
else if (document.layers) window.onload=start_slider;
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function exportEventImagesMaster( $eids )
|
||||
{
|
||||
global $SLANG;
|
||||
ob_start();
|
||||
exportHeader( $SLANG['Images'].' Master' );
|
||||
?>
|
||||
<body>
|
||||
<h2><?= $SLANG['Images'] ?> Master</h2>
|
||||
<?php
|
||||
foreach ($eids as $eid) {
|
||||
//get monitor id and event id
|
||||
$sql = 'SELECT E.MonitorId FROM Monitors AS M INNER JOIN Events AS E ON (M.Id = E.MonitorId) WHERE E.Id = ?';
|
||||
$event = dbFetchOne( $sql, NULL, array( $eid ) );
|
||||
$eventMonitorId[$eid] = $event['MonitorId'];
|
||||
}
|
||||
|
||||
$monitors = array_values(array_flip(array_flip($eventMonitorId))); //unique monitors and reindex the array
|
||||
$monitorNames = array();
|
||||
|
||||
//*
|
||||
if(!empty($monitors)) {
|
||||
$tmp = dbFetchAll("SELECT Id,Name FROM Monitors WHERE Id IN (".implode(',', $monitors).") ");
|
||||
foreach ( $tmp as $row ) { $monitorNames[$row['Id']] = $row['Name']; }
|
||||
}
|
||||
//*/
|
||||
//trigger_error(print_r($monitorNames,1));
|
||||
|
||||
?>
|
||||
<div id= 'tabs'>
|
||||
<ul class= 'tabs'>
|
||||
<li class = 'active' ><a href='#all' > All </a></li>
|
||||
<?php
|
||||
|
||||
foreach ($monitors as $monitor) {
|
||||
# code...
|
||||
echo "<li><a href='#tab$monitor'>" . $monitorNames[$monitor] . "</a></li>";
|
||||
}
|
||||
?>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<table width="100%" height="100%" ><tr>
|
||||
<td valign="top" bgcolor="#dddddd" style="padding:10px;">
|
||||
<div class='tab_content' id='all'>
|
||||
<h2> All </h2>
|
||||
<?php
|
||||
if (!is_array($eids))
|
||||
{
|
||||
echo "<div><a href=\"javascript:switchevent('$eids/zm/EventImages.html');\"> $eids </div>";
|
||||
}
|
||||
?>
|
||||
<?php foreach($eids as $eid)
|
||||
{
|
||||
?>
|
||||
<div><a href="javascript:switchevent('<?php echo $eventMonitorId[$eid].'/' . $eid; ?>/zmEventImages.html');"><?=$eid?></a></div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
foreach ($monitors as $monitor)
|
||||
{
|
||||
echo "<div class='tab_content' id='tab$monitor'>";
|
||||
echo "<h2>Monitor: " . $monitorNames[$monitor] . " </h2>";
|
||||
foreach ($eids as $eid)
|
||||
{
|
||||
if ($eventMonitorId[$eid] == $monitor)
|
||||
{
|
||||
?>
|
||||
<div><a href="javascript:switchevent('<?php echo $eventMonitorId[$eid].'/' . $eid; ?>/zmEventImages.html');"><?=$eid?></a></div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
echo'</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
</td><td>
|
||||
|
||||
<iframe id="myframe" onload="resizeCaller();" name="myframe" src="#"
|
||||
scrolling="no" marginwidth="0" marginheight="0" frameborder="0"
|
||||
vspace="0" hspace="0" style="overflow:visible; width:100%; display:none">
|
||||
</iframe>
|
||||
|
||||
</td>
|
||||
</tr></table>
|
||||
|
||||
<script type="text/javascript">
|
||||
function switchevent(src) {
|
||||
if(document.all) document.all.myframe.src = src;
|
||||
else window.frames['myframe'].location.href = src;
|
||||
}
|
||||
|
||||
/***********************************************
|
||||
* IFrame SSI script II- © Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
|
||||
* Visit DynamicDrive.com for hundreds of original DHTML scripts
|
||||
* This notice must stay intact for legal use
|
||||
***********************************************/
|
||||
|
||||
//Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
|
||||
//Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none:
|
||||
var iframeids=["myframe"]
|
||||
|
||||
//Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended):
|
||||
var iframehide="yes"
|
||||
|
||||
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
|
||||
var FFextraHeight=parseFloat(getFFVersion)>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers
|
||||
|
||||
function resizeCaller() {
|
||||
var dyniframe=new Array()
|
||||
for (i=0; i<iframeids.length; i++){
|
||||
if (document.getElementById) resizeIframe(iframeids[i]);
|
||||
//reveal iframe for lower end browsers? (see var above):
|
||||
if ((document.all || document.getElementById) && iframehide=="no"){
|
||||
var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i])
|
||||
tempobj.style.display="block"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function resizeIframe(frameid){
|
||||
var currentfr=document.getElementById(frameid)
|
||||
if (currentfr && !window.opera){
|
||||
currentfr.style.display="block"
|
||||
if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) //ns6 syntax
|
||||
currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight;
|
||||
else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax
|
||||
currentfr.height = currentfr.Document.body.scrollHeight;
|
||||
if (currentfr.addEventListener) currentfr.addEventListener("load", readjustIframe, false);
|
||||
else if (currentfr.attachEvent){
|
||||
currentfr.detachEvent("onload", readjustIframe) // Bug fix line
|
||||
currentfr.attachEvent("onload", readjustIframe)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function readjustIframe(loadevt) {
|
||||
var crossevt=(window.event)? event : loadevt;
|
||||
var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement
|
||||
if (iframeroot) resizeIframe(iframeroot.id);
|
||||
}
|
||||
|
||||
function loadintoIframe(iframeid, url){
|
||||
if (document.getElementById) document.getElementById(iframeid).src=url;
|
||||
}
|
||||
|
||||
//if (window.addEventListener) window.addEventListener("load", resizeCaller, false)
|
||||
//else if (window.attachEvent) window.attachEvent("onload", resizeCaller)
|
||||
//else window.onload=resizeCaller
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
return( ob_get_clean() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function exportFileList( $eid, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc )
|
||||
{
|
||||
|
||||
if ( canView( 'Events' ) && $eid )
|
||||
{
|
||||
$sql = 'SELECT E.Id,E.MonitorId,M.Name AS MonitorName,M.Width,M.Height,E.Name,E.Cause,E.Notes,E.StartTime,E.Length,E.Frames,E.AlarmFrames,E.TotScore,E.AvgScore,E.MaxScore,E.Archived FROM Monitors AS M INNER JOIN Events AS E ON (M.Id = E.MonitorId) WHERE E.Id = ?';
|
||||
$event = dbFetchOne( $sql, NULL, array( $eid ) );
|
||||
$eventPath = mygetEventPath( $event );
|
||||
$files = array();
|
||||
if ( $dir = opendir( $eventPath ) )
|
||||
{
|
||||
while ( ($file = readdir( $dir )) !== false )
|
||||
{
|
||||
if ( is_file( $eventPath."/".$file ) )
|
||||
{
|
||||
$files[$file] = $file;
|
||||
}
|
||||
}
|
||||
closedir( $dir );
|
||||
}
|
||||
|
||||
$exportFileList = array();
|
||||
|
||||
if ( $exportDetail )
|
||||
{
|
||||
$file = "zmEventDetail.html";
|
||||
if ( !($fp = fopen( $eventPath."/".$file, "w" )) )
|
||||
{
|
||||
Fatal( "Can't open event detail export file '$file'" );
|
||||
}
|
||||
fwrite( $fp, exportEventDetail( $event, $exportFrames, $exportImages ) );
|
||||
fclose( $fp );
|
||||
$exportFileList[$file] = $eventPath."/".$file;
|
||||
}
|
||||
if ( $exportFrames )
|
||||
{
|
||||
$file = "zmEventFrames.html";
|
||||
if ( !($fp = fopen( $eventPath."/".$file, "w" )) )
|
||||
{
|
||||
Fatal( "Can't open event frames export file '$file'" );
|
||||
}
|
||||
fwrite( $fp, exportEventFrames( $event, $exportDetail, $exportImages ) );
|
||||
fclose( $fp );
|
||||
$exportFileList[$file] = $eventPath."/".$file;
|
||||
}
|
||||
if ( $exportImages )
|
||||
{
|
||||
$filesLeft = array();
|
||||
$myfilelist = array();
|
||||
foreach ( $files as $file )
|
||||
{
|
||||
if ( preg_match( "/-(?:capture|analyse).jpg$/", $file ) )
|
||||
{
|
||||
$exportFileList[$file] = $eventPath."/".$file;
|
||||
$myfilelist[$file] = $eventPath."/".$file;
|
||||
}
|
||||
else
|
||||
{
|
||||
$filesLeft[$file] = $file;
|
||||
}
|
||||
}
|
||||
$files = $filesLeft;
|
||||
|
||||
|
||||
|
||||
// create an image slider
|
||||
if(!empty($myfilelist)) {
|
||||
$file = "zmEventImages.html";
|
||||
if ( !($fp = fopen( $eventPath."/".$file, "w" )) ) Fatal( "Can't open event images export file '$file'" );
|
||||
fwrite( $fp, exportEventImages( $event, $exportDetail, $exportFrames, $myfilelist ) );
|
||||
fclose( $fp );
|
||||
$exportFileList[$file] = $eventPath."/".$file;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if ( $exportVideo )
|
||||
{
|
||||
$filesLeft = array();
|
||||
foreach ( $files as $file )
|
||||
{
|
||||
if ( preg_match( "/\.(?:mpg|mpeg|avi|asf|3gp)$/", $file ) )
|
||||
{
|
||||
$exportFileList[$file] = $eventPath."/".$file;
|
||||
}
|
||||
else
|
||||
{
|
||||
$filesLeft[$file] = $file;
|
||||
}
|
||||
}
|
||||
$files = $filesLeft;
|
||||
}
|
||||
if ( $exportMisc )
|
||||
{
|
||||
foreach ( $files as $file )
|
||||
{
|
||||
$exportFileList[$file] = $eventPath."/".$file;
|
||||
}
|
||||
$files = array();
|
||||
}
|
||||
}
|
||||
return( array_values( $exportFileList ) );
|
||||
}
|
||||
|
||||
function exportEvents( $eids, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc, $exportFormat )
|
||||
{
|
||||
|
||||
|
||||
if ( canView( 'Events' ) && !empty($eids) )
|
||||
{
|
||||
$export_root = "zmExport";
|
||||
$export_listFile = "zmFileList.txt";
|
||||
$exportFileList = array();
|
||||
$html_eventMaster = '';
|
||||
|
||||
|
||||
if ( is_array( $eids ) )
|
||||
{
|
||||
foreach ( $eids as $eid )
|
||||
{
|
||||
$exportFileList = array_merge( $exportFileList, exportFileList( $eid , $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc ) );
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$eid = $eids;
|
||||
$exportFileList = exportFileList( $eid, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc );
|
||||
}
|
||||
|
||||
// create an master image slider
|
||||
if($exportImages)
|
||||
{
|
||||
if ( !is_array($eids) )
|
||||
{
|
||||
$eids = array($eids);
|
||||
}
|
||||
$monitorPath = 'events/';
|
||||
$html_eventMaster = 'zmEventImagesMaster_'.date('Ymd_His'). '.html';
|
||||
if ( !($fp = fopen( $monitorPath."/".$html_eventMaster, "w" )) ) Fatal( "Can't open event images export file '$html_eventMaster'" );
|
||||
fwrite( $fp, exportEventImagesMaster( $eids ) );
|
||||
fclose( $fp );
|
||||
$exportFileList[] = $monitorPath."/".$html_eventMaster;
|
||||
}
|
||||
|
||||
$listFile = "temp/".$export_listFile;
|
||||
if ( !($fp = fopen( $listFile, "w" )) )
|
||||
{
|
||||
Fatal( "Can't open event export list file '$listFile'" );
|
||||
}
|
||||
foreach ( $exportFileList as $exportFile )
|
||||
{
|
||||
fwrite( $fp, "$exportFile\n" );
|
||||
}
|
||||
fclose( $fp );
|
||||
$archive = "";
|
||||
if ( $exportFormat == "tar" )
|
||||
{
|
||||
$archive = "temp/".$export_root.".tar.gz";
|
||||
@unlink( $archive );
|
||||
$command = "tar --create --gzip --file=$archive --files-from=$listFile";
|
||||
exec( escapeshellcmd( $command ), $output, $status );
|
||||
if ( $status )
|
||||
{
|
||||
Error( "Command '$command' returned with status $status" );
|
||||
if ( $output[0] )
|
||||
Error( "First line of output is '".$output[0]."'" );
|
||||
return( false );
|
||||
}
|
||||
}
|
||||
elseif ( $exportFormat == "zip" )
|
||||
{
|
||||
$archive = "temp/zm_export.zip";
|
||||
$archive = "temp/".$export_root.".zip";
|
||||
@unlink( $archive );
|
||||
$command = "cat ".escapeshellarg($listFile)." | zip -q ".escapeshellarg($archive)." -@";
|
||||
//cat zmFileList.txt | zip -q zm_export.zip -@
|
||||
//-bash: zip: command not found
|
||||
|
||||
exec( $command, $output, $status );
|
||||
if ( $status )
|
||||
{
|
||||
Error( "Command '$command' returned with status $status" );
|
||||
if ( $output[0] )
|
||||
Error( "First line of output is '".$output[0]."'" );
|
||||
return( false );
|
||||
}
|
||||
}
|
||||
|
||||
//clean up temporary files
|
||||
if(!empty($html_eventMaster)) {
|
||||
unlink($monitorPath.'/'.$html_eventMaster);
|
||||
}
|
||||
|
||||
}
|
||||
return( $archive );
|
||||
}
|
||||
function mygetEventPath( $event )
|
||||
{
|
||||
if ( ZM_USE_DEEP_STORAGE )
|
||||
$eventPath = ZM_DIR_EVENTS.'/'.$event['MonitorId'].'/'.strftime( "%y/%m/%d/%H/%M/%S", strtotime($event['StartTime']) );
|
||||
else
|
||||
$eventPath = ZM_DIR_EVENTS.'/'.$event['MonitorId'].'/'.$event['Id'];
|
||||
return( $eventPath );
|
||||
}
|
|
@ -0,0 +1,112 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web function library, $Date: 2008-07-08 16:06:45 +0100 (Tue, 08 Jul 2008) $, $Revision: 2484 $
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
function xhtmlHeaders( $file, $title )
|
||||
{
|
||||
$skinCssFile = getSkinFile( 'css/skin.css' );
|
||||
$skinCssPhpFile = getSkinFile( 'css/skin.css.php' );
|
||||
$skinJsFile = getSkinFile( 'js/skin.js' );
|
||||
$skinJsPhpFile = getSkinFile( 'js/skin.js.php' );
|
||||
|
||||
$basename = basename( $file, '.php' );
|
||||
$viewCssFile = getSkinFile( 'views/css/'.$basename.'.css' );
|
||||
$viewCssPhpFile = getSkinFile( 'views/css/'.$basename.'.css.php' );
|
||||
$viewJsFile = getSkinFile( 'views/js/'.$basename.'.js' );
|
||||
$viewJsPhpFile = getSkinFile( 'views/js/'.$basename.'.js.php' );
|
||||
|
||||
extract( $GLOBALS, EXTR_OVERWRITE );
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><?= ZM_WEB_TITLE_PREFIX ?> - <?= validHtmlStr($title) ?></title>
|
||||
<link rel="icon" type="image/ico" href="graphics/favicon.ico"/>
|
||||
<link rel="shortcut icon" href="graphics/favicon.ico"/>
|
||||
<link rel="stylesheet" href="css/reset.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="css/overlay.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="<?= $skinCssFile ?>" type="text/css" media="screen"/>
|
||||
<?php
|
||||
if ( $viewCssFile )
|
||||
{
|
||||
?>
|
||||
<link rel="stylesheet" href="<?= $viewCssFile ?>" type="text/css" media="screen"/>
|
||||
<?php
|
||||
}
|
||||
if ( $viewCssPhpFile )
|
||||
{
|
||||
?>
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
<?php
|
||||
require_once( $viewCssPhpFile );
|
||||
?>
|
||||
/*]]>*/
|
||||
</style>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<script type="text/javascript" src="tools/mootools/mootools-core.js"></script>
|
||||
<script type="text/javascript" src="tools/mootools/mootools-more.js"></script>
|
||||
<script type="text/javascript" src="js/mootools.ext.js"></script>
|
||||
<script type="text/javascript" src="js/logger.js"></script>
|
||||
<script type="text/javascript" src="js/overlay.js"></script>
|
||||
<?php
|
||||
if ( $skinJsPhpFile )
|
||||
{
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
<!--
|
||||
<?php
|
||||
require_once( $skinJsPhpFile );
|
||||
?>
|
||||
//-->
|
||||
//]]>
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
if ( $viewJsPhpFile )
|
||||
{
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
<!--
|
||||
<?php
|
||||
require_once( $viewJsPhpFile );
|
||||
?>
|
||||
//-->
|
||||
//]]>
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<script type="text/javascript" src="<?= $skinJsFile ?>"></script>
|
||||
<?php
|
||||
if ( $viewJsFile )
|
||||
{
|
||||
?>
|
||||
<script type="text/javascript" src="<?= $viewJsFile ?>"></script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</head>
|
||||
<?php
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,525 @@
|
|||
<?php
|
||||
|
||||
function getDateScale( $scales, $range, $minLines, $maxLines )
|
||||
{
|
||||
foreach ( $scales as $scale )
|
||||
{
|
||||
$align = isset($scale['align'])?$scale['align']:1;
|
||||
$scaleRange = (int)($range/($scale['factor']*$align));
|
||||
//echo "S:".$scale['name'].", A:$align, SR:$scaleRange<br>";
|
||||
if ( $scaleRange >= $minLines )
|
||||
{
|
||||
$scale['range'] = $scaleRange;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( !isset($scale['range']) )
|
||||
{
|
||||
$scale['range'] = (int)($range/($scale['factor']*$align));
|
||||
}
|
||||
$scale['divisor'] = 1;
|
||||
while ( ($scale['range']/$scale['divisor']) > $maxLines )
|
||||
{
|
||||
$scale['divisor']++;
|
||||
}
|
||||
$scale['lines'] = (int)($scale['range']/$scale['divisor']);
|
||||
return( $scale );
|
||||
}
|
||||
|
||||
function getYScale( $range, $minLines, $maxLines )
|
||||
{
|
||||
$scale['range'] = $range;
|
||||
$scale['divisor'] = 1;
|
||||
while ( $scale['range']/$scale['divisor'] > $maxLines )
|
||||
{
|
||||
$scale['divisor']++;
|
||||
}
|
||||
$scale['lines'] = (int)(($scale['range']-1)/$scale['divisor'])+1;
|
||||
|
||||
return( $scale );
|
||||
}
|
||||
|
||||
function getSlotFrame( $slot )
|
||||
{
|
||||
$slotFrame = isset($slot['frame'])?$slot['frame']['FrameId']:1;
|
||||
if ( false && $slotFrame )
|
||||
{
|
||||
$slotFrame -= $monitor['PreEventCount'];
|
||||
if ( $slotFrame < 1 )
|
||||
$slotFrame = 1;
|
||||
}
|
||||
return( $slotFrame );
|
||||
}
|
||||
|
||||
function parseFilterToTree( $filter )
|
||||
{
|
||||
if ( count($filter['terms']) > 0 )
|
||||
{
|
||||
$postfixExpr = array();
|
||||
$postfixStack = array();
|
||||
|
||||
$priorities = array(
|
||||
'<' => 1,
|
||||
'<=' => 1,
|
||||
'>' => 1,
|
||||
'>=' => 1,
|
||||
'=' => 2,
|
||||
'!=' => 2,
|
||||
'=~' => 2,
|
||||
'!~' => 2,
|
||||
'=[]' => 2,
|
||||
'![]' => 2,
|
||||
'and' => 3,
|
||||
'or' => 4,
|
||||
);
|
||||
|
||||
for ( $i = 0; $i <= count($filter['terms']); $i++ )
|
||||
{
|
||||
if ( !empty($filter['terms'][$i]['cnj']) )
|
||||
{
|
||||
while( true )
|
||||
{
|
||||
if ( !count($postfixStack) )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"cnj", 'value'=>$filter['terms'][$i]['cnj'], 'sqlValue'=>$filter['terms'][$i]['cnj']);
|
||||
break;
|
||||
}
|
||||
elseif ( $postfixStack[count($postfixStack)-1]['type'] == 'obr' )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"cnj", 'value'=>$filter['terms'][$i]['cnj'], 'sqlValue'=>$filter['terms'][$i]['cnj']);
|
||||
break;
|
||||
}
|
||||
elseif ( $priorities[$filter['terms'][$i]['cnj']] < $priorities[$postfixStack[count($postfixStack)-1]['value']] )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"cnj", 'value'=>$filter['terms'][$i]['cnj'], 'sqlValue'=>$filter['terms'][$i]['cnj']);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$postfixExpr[] = array_pop( $postfixStack );
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( !empty($filter['terms'][$i]['obr']) )
|
||||
{
|
||||
for ( $j = 0; $j < $filter['terms'][$i]['obr']; $j++ )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"obr", 'value'=>$filter['terms'][$i]['obr']);
|
||||
}
|
||||
}
|
||||
if ( !empty($filter['terms'][$i]['attr']) )
|
||||
{
|
||||
$dtAttr = false;
|
||||
switch ( $filter['terms'][$i]['attr'])
|
||||
{
|
||||
case 'MonitorName':
|
||||
$sqlValue = 'M.'.preg_replace( '/^Monitor/', '', $filter['terms'][$i]['attr']);
|
||||
break;
|
||||
case 'Name':
|
||||
$sqlValue = "E.Name";
|
||||
break;
|
||||
case 'Cause':
|
||||
$sqlValue = "E.Cause";
|
||||
break;
|
||||
case 'DateTime':
|
||||
$sqlValue = "E.StartTime";
|
||||
$dtAttr = true;
|
||||
break;
|
||||
case 'Date':
|
||||
$sqlValue = "to_days( E.StartTime )";
|
||||
$dtAttr = true;
|
||||
break;
|
||||
case 'Time':
|
||||
$sqlValue = "extract( hour_second from E.StartTime )";
|
||||
break;
|
||||
case 'Weekday':
|
||||
$sqlValue = "weekday( E.StartTime )";
|
||||
break;
|
||||
case 'Id':
|
||||
case 'Name':
|
||||
case 'MonitorId':
|
||||
case 'Length':
|
||||
case 'Frames':
|
||||
case 'AlarmFrames':
|
||||
case 'TotScore':
|
||||
case 'AvgScore':
|
||||
case 'MaxScore':
|
||||
case 'Archived':
|
||||
$sqlValue = "E.".$filter['terms'][$i]['attr'];
|
||||
break;
|
||||
case 'DiskPercent':
|
||||
$sqlValue = getDiskPercent();
|
||||
break;
|
||||
case 'DiskBlocks':
|
||||
$sqlValue = getDiskBlocks();
|
||||
break;
|
||||
default :
|
||||
$sqlValue = $filter['terms'][$i]['attr'];
|
||||
break;
|
||||
}
|
||||
if ( $dtAttr )
|
||||
{
|
||||
$postfixExpr[] = array( 'type'=>"attr", 'value'=>$filter['terms'][$i]['attr'], 'sqlValue'=>$sqlValue, 'dtAttr'=>true );
|
||||
}
|
||||
else
|
||||
{
|
||||
$postfixExpr[] = array( 'type'=>"attr", 'value'=>$filter['terms'][$i]['attr'], 'sqlValue'=>$sqlValue );
|
||||
}
|
||||
}
|
||||
if ( isset($filter['terms'][$i]['op']) )
|
||||
{
|
||||
if ( empty($filter['terms'][$i]['op']) )
|
||||
{
|
||||
$filter['terms'][$i]['op' ]= '=';
|
||||
}
|
||||
switch ( $filter['terms'][$i]['op' ])
|
||||
{
|
||||
case '=' :
|
||||
case '!=' :
|
||||
case '>=' :
|
||||
case '>' :
|
||||
case '<' :
|
||||
case '<=' :
|
||||
$sqlValue = $filter['terms'][$i]['op'];
|
||||
break;
|
||||
case '=~' :
|
||||
$sqlValue = "regexp";
|
||||
break;
|
||||
case '!~' :
|
||||
$sqlValue = "not regexp";
|
||||
break;
|
||||
case '=[]' :
|
||||
$sqlValue = 'in (';
|
||||
break;
|
||||
case '![]' :
|
||||
$sqlValue = 'not in (';
|
||||
break;
|
||||
}
|
||||
while( true )
|
||||
{
|
||||
if ( !count($postfixStack) )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"op", 'value'=>$filter['terms'][$i]['op'], 'sqlValue'=>$sqlValue );
|
||||
break;
|
||||
}
|
||||
elseif ( $postfixStack[count($postfixStack)-1]['type'] == 'obr' )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"op", 'value'=>$filter['terms'][$i]['op'], 'sqlValue'=>$sqlValue );
|
||||
break;
|
||||
}
|
||||
elseif ( $priorities[$filter['terms'][$i]['op']] < $priorities[$postfixStack[count($postfixStack)-1]['value']] )
|
||||
{
|
||||
$postfixStack[] = array( 'type'=>"op", 'value'=>$filter['terms'][$i]['op'], 'sqlValue'=>$sqlValue );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$postfixExpr[] = array_pop( $postfixStack );
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( isset($filter['terms'][$i]['val']) )
|
||||
{
|
||||
$valueList = array();
|
||||
foreach ( preg_split( '/["\'\s]*?,["\'\s]*?/', preg_replace( '/^["\']+?(.+)["\']+?$/', '$1', $filter['terms'][$i]['val' ]) ) as $value )
|
||||
{
|
||||
switch ( $filter['terms'][$i]['attr'])
|
||||
{
|
||||
case 'MonitorName':
|
||||
case 'Name':
|
||||
case 'Cause':
|
||||
case 'Notes':
|
||||
$value = "'$value'";
|
||||
break;
|
||||
case 'DateTime':
|
||||
$value = "'".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."'";
|
||||
break;
|
||||
case 'Date':
|
||||
$value = "to_days( '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
|
||||
break;
|
||||
case 'Time':
|
||||
$value = "extract( hour_second from '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
|
||||
break;
|
||||
case 'Weekday':
|
||||
$value = "weekday( '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
|
||||
break;
|
||||
}
|
||||
$valueList[] = $value;
|
||||
}
|
||||
$postfixExpr[] = array( 'type'=>"val", 'value'=>$filter['terms'][$i]['val'], 'sqlValue'=>join( ',', $valueList ) );
|
||||
}
|
||||
if ( !empty($filter['terms'][$i]['cbr']) )
|
||||
{
|
||||
for ( $j = 0; $j < $filter['terms'][$i]['cbr']; $j++ )
|
||||
{
|
||||
while ( count($postfixStack) )
|
||||
{
|
||||
$element = array_pop( $postfixStack );
|
||||
if ( $element['type'] == "obr" )
|
||||
{
|
||||
$postfixExpr[count($postfixExpr)-1]['bracket'] = true;
|
||||
break;
|
||||
}
|
||||
$postfixExpr[] = $element;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while ( count($postfixStack) )
|
||||
{
|
||||
$postfixExpr[] = array_pop( $postfixStack );
|
||||
}
|
||||
|
||||
$exprStack = array();
|
||||
//foreach ( $postfixExpr as $element )
|
||||
//{
|
||||
//echo $element['value']." ";
|
||||
//}
|
||||
//echo "<br>";
|
||||
foreach ( $postfixExpr as $element )
|
||||
{
|
||||
if ( $element['type'] == 'attr' || $element['type'] == 'val' )
|
||||
{
|
||||
$node = array( 'data'=>$element, 'count'=>0 );
|
||||
$exprStack[] = $node;
|
||||
}
|
||||
elseif ( $element['type'] == 'op' || $element['type'] == 'cnj' )
|
||||
{
|
||||
$right = array_pop( $exprStack );
|
||||
$left = array_pop( $exprStack );
|
||||
$node = array( 'data'=>$element, 'count'=>2+$left['count']+$right['count'], 'right'=>$right, 'left'=>$left );
|
||||
$exprStack[] = $node;
|
||||
}
|
||||
else
|
||||
{
|
||||
Fatal( "Unexpected element type '".$element['type']."', value '".$element['value']."'" );
|
||||
}
|
||||
}
|
||||
if ( count($exprStack) != 1 )
|
||||
{
|
||||
Fatal( "Expression stack has ".count($exprStack)." elements" );
|
||||
}
|
||||
$exprTree = array_pop( $exprStack );
|
||||
return( $exprTree );
|
||||
}
|
||||
return( false );
|
||||
}
|
||||
|
||||
function _parseTreeToInfix( $node )
|
||||
{
|
||||
$expression = '';
|
||||
if ( isset($node) )
|
||||
{
|
||||
if ( isset($node['left']) )
|
||||
{
|
||||
if ( !empty($node['data']['bracket']) )
|
||||
$expression .= '( ';
|
||||
$expression .= _parseTreeToInfix( $node['left'] );
|
||||
}
|
||||
$expression .= $node['data']['value']." ";
|
||||
if ( isset($node['right']) )
|
||||
{
|
||||
$expression .= _parseTreeToInfix( $node['right'] );
|
||||
if ( !empty($node['data']['bracket']) )
|
||||
$expression .= ') ';
|
||||
}
|
||||
}
|
||||
return( $expression );
|
||||
}
|
||||
|
||||
function parseTreeToInfix( $tree )
|
||||
{
|
||||
return( _parseTreeToInfix( $tree ) );
|
||||
}
|
||||
|
||||
function _parseTreeToSQL( $node, $cbr=false )
|
||||
{
|
||||
$expression = '';
|
||||
if ( $node )
|
||||
{
|
||||
if ( isset($node['left']) )
|
||||
{
|
||||
if ( !empty($node['data']['bracket']) )
|
||||
$expression .= '( ';
|
||||
$expression .= _parseTreeToSQL( $node['left'] );
|
||||
}
|
||||
$inExpr = $node['data']['type'] == 'op' && ($node['data']['value'] == '=[]' || $node['data']['value'] == '![]');
|
||||
$expression .= $node['data']['sqlValue'];
|
||||
if ( !$inExpr )
|
||||
$expression .= ' ';
|
||||
if ( $cbr )
|
||||
$expression .= ') ';
|
||||
if ( isset($node['right']) )
|
||||
{
|
||||
$expression .= _parseTreeToSQL( $node['right'], $inExpr );
|
||||
if ( !empty($node['data']['bracket']) )
|
||||
$expression .= ') ';
|
||||
}
|
||||
}
|
||||
return( $expression );
|
||||
}
|
||||
|
||||
function parseTreeToSQL( $tree )
|
||||
{
|
||||
return( _parseTreeToSQL( $tree ) );
|
||||
}
|
||||
|
||||
function _parseTreeToFilter( $node, &$terms, &$level )
|
||||
{
|
||||
$elements = array();
|
||||
if ( $node )
|
||||
{
|
||||
if ( isset($node['left']) )
|
||||
{
|
||||
if ( !empty($node['data']['bracket']) )
|
||||
$terms[$level]['obr'] = 1;
|
||||
_parseTreeToFilter( $node['left'], $terms, $level );
|
||||
}
|
||||
if ( $node['data']['type'] == 'cnj' )
|
||||
{
|
||||
$level++;
|
||||
}
|
||||
$terms[$level][$node['data']['type']] = $node['data']['value'];
|
||||
if ( isset($node['right']) )
|
||||
{
|
||||
_parseTreeToFilter( $node['right'], $terms, $level );
|
||||
if ( !empty($node['data']['bracket']) )
|
||||
$terms[$level]['cbr'] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function parseTreeToFilter( $tree )
|
||||
{
|
||||
$terms = array();
|
||||
if ( isset($tree) )
|
||||
{
|
||||
$level = 0;
|
||||
_parseTreeToFilter( $tree, $terms, $level );
|
||||
}
|
||||
return( array( 'terms' => $terms ) );
|
||||
}
|
||||
|
||||
function parseTreeToQuery( $tree )
|
||||
{
|
||||
$filter = parseTreeToFilter( $tree );
|
||||
parseFilter( $filter, false, '&' );
|
||||
return( $filter['query'] );
|
||||
}
|
||||
|
||||
function _drawTree( $node, $level )
|
||||
{
|
||||
if ( isset($node['left']) )
|
||||
{
|
||||
_drawTree( $node['left'], $level+1 );
|
||||
}
|
||||
echo str_repeat( ".", $level*2 ).$node['data']['value']."<br>";
|
||||
if ( isset($node['right']) )
|
||||
{
|
||||
_drawTree( $node['right'], $level+1 );
|
||||
}
|
||||
}
|
||||
|
||||
function drawTree( $tree )
|
||||
{
|
||||
_drawTree( $tree, 0 );
|
||||
}
|
||||
|
||||
function _extractDatetimeRange( &$node, &$minTime, &$maxTime, &$expandable, $subOr )
|
||||
{
|
||||
$pruned = $leftPruned = $rightPruned = false;
|
||||
if ( $node )
|
||||
{
|
||||
if ( isset($node['left']) && isset($node['right']) )
|
||||
{
|
||||
if ( $node['data']['type'] == 'cnj' && $node['data']['value'] == 'or' )
|
||||
{
|
||||
$subOr = true;
|
||||
}
|
||||
elseif ( !empty($node['left']['data']['dtAttr']) )
|
||||
{
|
||||
if ( $subOr )
|
||||
{
|
||||
$expandable = false;
|
||||
}
|
||||
elseif ( $node['data']['type'] == 'op' )
|
||||
{
|
||||
if ( $node['data']['value'] == '>' || $node['data']['value'] == '>=' )
|
||||
{
|
||||
if ( !$minTime || $minTime > $node['right']['data']['sqlValue'] )
|
||||
{
|
||||
$minTime = $node['right']['data']['value'];
|
||||
return( true );
|
||||
}
|
||||
}
|
||||
if ( $node['data']['value'] == '<' || $node['data']['value'] == '<=' )
|
||||
{
|
||||
if ( !$maxTime || $maxTime < $node['right']['data']['sqlValue'] )
|
||||
{
|
||||
$maxTime = $node['right']['data']['value'];
|
||||
return( true );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Fatal( "Unexpected node type '".$node['data']['type']."'" );
|
||||
}
|
||||
return( false );
|
||||
}
|
||||
|
||||
$leftPruned = _extractDatetimeRange( $node['left'], $minTime, $maxTime, $expandable, $subOr );
|
||||
$rightPruned = _extractDatetimeRange( $node['right'], $minTime, $maxTime, $expandable, $subOr );
|
||||
|
||||
if ( $leftPruned && $rightPruned )
|
||||
{
|
||||
$pruned = true;
|
||||
}
|
||||
elseif ( $leftPruned )
|
||||
{
|
||||
$node = $node['right'];
|
||||
}
|
||||
elseif ( $rightPruned )
|
||||
{
|
||||
$node = $node['left'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return( $pruned );
|
||||
}
|
||||
|
||||
function extractDatetimeRange( &$tree, &$minTime, &$maxTime, &$expandable )
|
||||
{
|
||||
$minTime = "";
|
||||
$maxTime = "";
|
||||
$expandable = true;
|
||||
|
||||
_extractDateTimeRange( $tree, $minTime, $maxTime, $expandable, false );
|
||||
}
|
||||
|
||||
function appendDatetimeRange( &$tree, $minTime, $maxTime=false )
|
||||
{
|
||||
$attrNode = array( 'data'=>array( 'type'=>'attr', 'value'=>'DateTime', 'sqlValue'=>'E.StartTime', 'dtAttr'=>true ), 'count'=>0 );
|
||||
$valNode = array( 'data'=>array( 'type'=>'val', 'value'=>$minTime, 'sqlValue'=>$minTime ), 'count'=>0 );
|
||||
$opNode = array( 'data'=>array( 'type'=>'op', 'value'=>'>=', 'sqlValue'=>'>=' ), 'count'=>2, 'left'=>$attrNode, 'right'=>$valNode );
|
||||
if ( isset($tree) )
|
||||
{
|
||||
$cnjNode = array( 'data'=>array( 'type'=>'cnj', 'value'=>'and', 'sqlValue'=>'and' ), 'count'=>2+$tree['count']+$opNode['count'], 'left'=>$tree, 'right'=>$opNode );
|
||||
$tree = $cnjNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
$tree = $opNode;
|
||||
}
|
||||
|
||||
if ( $maxTime )
|
||||
{
|
||||
$attrNode = array( 'data'=>array( 'type'=>'attr', 'value'=>'DateTime', 'sqlValue'=>'E.StartTime', 'dtAttr'=>true ), 'count'=>0 );
|
||||
$valNode = array( 'data'=>array( 'type'=>'val', 'value'=>$maxTime, 'sqlValue'=>$maxTime ), 'count'=>0 );
|
||||
$opNode = array( 'data'=>array( 'type'=>'op', 'value'=>'<=', 'sqlValue'=>'<=' ), 'count'=>2, 'left'=>$attrNode, 'right'=>$valNode );
|
||||
$cnjNode = array( 'data'=>array( 'type'=>'cnj', 'value'=>'and', 'sqlValue'=>'and' ), 'count'=>2+$tree['count']+$opNode['count'], 'left'=>$tree, 'right'=>$opNode );
|
||||
$tree = $cnjNode;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -0,0 +1,7 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/js
|
||||
|
||||
dist_web_DATA = \
|
||||
skin.js \
|
||||
skin.js.php
|
|
@ -0,0 +1,154 @@
|
|||
/*!
|
||||
* jQuery JavaScript Library v1.4.2
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2010, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
* http://sizzlejs.com/
|
||||
* Copyright 2010, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Sat Feb 13 22:33:48 2010 -0500
|
||||
*/
|
||||
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
|
||||
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
|
||||
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
|
||||
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
|
||||
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
|
||||
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
|
||||
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
|
||||
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
|
||||
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
|
||||
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
|
||||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
|
||||
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
|
||||
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
|
||||
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
|
||||
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
|
||||
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
|
||||
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
|
||||
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
||||
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
|
||||
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
|
||||
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
|
||||
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
|
||||
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
|
||||
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
|
||||
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
|
||||
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
|
||||
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
|
||||
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
|
||||
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
|
||||
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
|
||||
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
|
||||
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
||||
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
|
||||
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
|
||||
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
|
||||
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
|
||||
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
|
||||
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
|
||||
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
|
||||
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
||||
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
||||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
|
||||
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
|
||||
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
|
||||
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
|
||||
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
|
||||
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
|
||||
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
|
||||
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
|
||||
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
|
||||
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
|
||||
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
|
||||
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
|
||||
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
||||
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
|
||||
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
|
||||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
|
||||
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
|
||||
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
||||
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
|
||||
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
|
||||
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
|
||||
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
|
||||
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
|
||||
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
|
||||
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
|
||||
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
|
||||
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
|
||||
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
|
||||
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
|
||||
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
|
||||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
|
||||
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
|
||||
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
|
||||
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
|
||||
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
|
||||
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
|
||||
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
|
||||
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
|
||||
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
|
||||
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
|
||||
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
|
||||
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
|
||||
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
|
||||
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
||||
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
||||
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
||||
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
||||
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
||||
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
|
||||
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
|
||||
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
|
||||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
|
||||
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
|
||||
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
|
||||
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
|
||||
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
|
||||
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
|
||||
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
|
||||
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
|
||||
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
|
||||
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
|
||||
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
|
||||
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
|
||||
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
|
||||
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
|
||||
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
|
||||
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
|
||||
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
|
||||
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
|
||||
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
|
||||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
|
||||
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
|
||||
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
|
||||
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
|
||||
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
|
||||
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
|
||||
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
|
||||
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
|
||||
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
|
||||
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
|
||||
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
|
||||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
|
||||
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
|
||||
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
|
||||
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
|
||||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
|
||||
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
|
||||
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
|
||||
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
|
||||
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
||||
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
|
||||
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
|
||||
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
|
||||
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
|
||||
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
|
||||
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
|
|
@ -0,0 +1,310 @@
|
|||
//
|
||||
// ZoneMinder base static javascript file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
//
|
||||
// This file should only contain static JavaScript and no php.
|
||||
// Use skin.js.php for JavaScript that need pre-processing
|
||||
//
|
||||
|
||||
// Javascript window sizes
|
||||
var popupSizes = {
|
||||
'bandwidth': { 'width': 300, 'height': 120 },
|
||||
'console': { 'width': 750, 'height': 312 },
|
||||
'control': { 'width': 380, 'height': 480 },
|
||||
'controlcaps': { 'width': 780, 'height': 320 },
|
||||
'controlcap': { 'width': 400, 'height': 400 },
|
||||
'cycle': { 'addWidth': 32, 'minWidth': 384, 'addHeight': 62 },
|
||||
'device': { 'width': 260, 'height': 150 },
|
||||
'devices': { 'width': 400, 'height': 240 },
|
||||
'donate': { 'width': 500, 'height': 280 },
|
||||
'event': { 'addWidth': 108, 'minWidth': 496, 'addHeight': 230, minHeight: 540 },
|
||||
'eventdetail': { 'width': 600, 'height': 220 },
|
||||
'events': { 'width': 960, 'height': 780 },
|
||||
'export': { 'width': 400, 'height': 340 },
|
||||
'filter': { 'width': 720, 'height': 360 },
|
||||
'filtersave': { 'width': 610, 'height': 120 },
|
||||
'frame': { 'addWidth': 32, 'minWidth': 384, 'addHeight': 100 },
|
||||
'frames': { 'width': 500, 'height': 600 },
|
||||
'function': { 'width': 300, 'height': 92 },
|
||||
'group': { 'width': 360, 'height': 180 },
|
||||
'groups': { 'width': 440, 'height': 220 },
|
||||
'image': { 'addWidth': 48, 'addHeight': 80 },
|
||||
'log': { 'width': 1080, 'height': 720 },
|
||||
'login': { 'width': 720, 'height': 480 },
|
||||
'logout': { 'width': 260, 'height': 100 },
|
||||
'monitor': { 'width': 450, 'height': 440 },
|
||||
'monitorpreset':{ 'width': 440, 'height': 200 },
|
||||
'monitorprobe': { 'width': 500, 'height': 240 },
|
||||
'monitorselect':{ 'width': 160, 'height': 200 },
|
||||
'montage': { 'width': -1, 'height': -1 },
|
||||
'optionhelp': { 'width': 400, 'height': 320 },
|
||||
'options': { 'width': 1000, 'height': 660 },
|
||||
'preset': { 'width': 300, 'height': 120 },
|
||||
'settings': { 'width': 220, 'height': 225 },
|
||||
'state': { 'width': 370, 'height': 134 },
|
||||
'stats': { 'width': 840, 'height': 200 },
|
||||
'timeline': { 'width': 760, 'height': 540 },
|
||||
'user': { 'width': 360, 'height': 420 },
|
||||
'version': { 'width': 360, 'height': 140 },
|
||||
'video': { 'width': 420, 'height': 360 },
|
||||
'videoview': { 'addWidth': 48, 'addHeight': 80 },
|
||||
'watch': { 'addWidth': 96, 'minWidth': 420, 'addHeight': 384 },
|
||||
'zone': { 'addWidth': 450, 'addHeight': 200, 'minHeight': 450 },
|
||||
'zones': { 'addWidth': 72, 'addHeight': 232 }
|
||||
};
|
||||
|
||||
var popupOptions = "resizable,scrollbars,status=no";
|
||||
|
||||
function checkSize() {
|
||||
if (window.outerHeight) {
|
||||
var w = window.outerWidth;
|
||||
var prevW = w;
|
||||
var h = window.outerHeight;
|
||||
var prevH = h;
|
||||
if (h > screen.availHeight)
|
||||
h = screen.availHeight;
|
||||
if (w > screen.availWidth)
|
||||
w = screen.availWidth;
|
||||
if (w != prevW || h != prevH)
|
||||
window.resizeTo(w,h);
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
function newWindow( url, name, width, height )
|
||||
{
|
||||
var windowId = window.open( url, name, popupOptions+",width="+width+",height="+height );
|
||||
}
|
||||
|
||||
function getPopupSize( tag, width, height )
|
||||
{
|
||||
var popupSize = Object.clone( popupSizes[tag] );
|
||||
if ( !popupSize )
|
||||
{
|
||||
Error( "Can't find window size for tag '"+tag+"'" );
|
||||
return( { 'width': 0, 'height': 0 } );
|
||||
}
|
||||
if ( popupSize.width && popupSize.height )
|
||||
{
|
||||
if ( width || height )
|
||||
Warning( "Ignoring passed dimensions "+width+"x"+height+" when getting popup size for tag '"+tag+"'" );
|
||||
return( popupSize );
|
||||
}
|
||||
if ( popupSize.addWidth )
|
||||
{
|
||||
popupSize.width = popupSize.addWidth;
|
||||
if ( !width )
|
||||
Error( "Got addWidth but no passed width when getting popup size for tag '"+tag+"'" );
|
||||
else
|
||||
popupSize.width += parseInt(width);
|
||||
}
|
||||
else if ( width )
|
||||
{
|
||||
popupSize.width = width;
|
||||
Error( "Got passed width but no addWidth when getting popup size for tag '"+tag+"'" );
|
||||
}
|
||||
if ( popupSize.minWidth && popupSize.width < popupSize.minWidth )
|
||||
{
|
||||
Warning( "Adjusting to minimum width when getting popup size for tag '"+tag+"'" );
|
||||
popupSize.width = popupSize.minWidth;
|
||||
}
|
||||
if ( popupSize.addHeight )
|
||||
{
|
||||
popupSize.height = popupSize.addHeight;
|
||||
if ( !height )
|
||||
Error( "Got addHeight but no passed height when getting popup size for tag '"+tag+"'" );
|
||||
else
|
||||
popupSize.height += parseInt(height);
|
||||
}
|
||||
else if ( height )
|
||||
{
|
||||
popupSize.height = height;
|
||||
Error( "Got passed height but no addHeight when getting popup size for tag '"+tag+"'" );
|
||||
}
|
||||
if ( popupSize.minHeight && popupSize.height < popupSize.minHeight )
|
||||
{
|
||||
Warning( "Adjusting to minimum height when getting popup size for tag '"+tag+"'" );
|
||||
popupSize.height = popupSize.minHeight;
|
||||
}
|
||||
Debug( popupSize );
|
||||
return( popupSize );
|
||||
}
|
||||
|
||||
function zmWindow()
|
||||
{
|
||||
var zmWin = window.open( 'http://www.zoneminder.com', 'ZoneMinder' );
|
||||
zmWin.focus();
|
||||
}
|
||||
|
||||
function createPopup( url, name, tag, width, height )
|
||||
{
|
||||
var popupSize = getPopupSize( tag, width, height );
|
||||
var popupDimensions = "";
|
||||
if ( popupSize.width > 0 )
|
||||
popupDimensions += ",width="+popupSize.width;
|
||||
if ( popupSize.height > 0 )
|
||||
popupDimensions += ",height="+popupSize.height;
|
||||
var popup = window.open( url, name, popupOptions+popupDimensions );
|
||||
popup.focus();
|
||||
}
|
||||
|
||||
function createEventPopup( eventId, eventFilter, width, height )
|
||||
{
|
||||
var url = '?view=event&eid='+eventId;
|
||||
if ( eventFilter )
|
||||
url += eventFilter;
|
||||
var name = 'zmEvent';
|
||||
var popupSize = getPopupSize( 'event', width, height );
|
||||
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
|
||||
popup.focus();
|
||||
}
|
||||
|
||||
function createFramesPopup( eventId, width, height )
|
||||
{
|
||||
var url = '?view=frames&eid='+eventId;
|
||||
var name = 'zmFrames';
|
||||
var popupSize = getPopupSize( 'frames', width, height );
|
||||
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
|
||||
popup.focus();
|
||||
}
|
||||
|
||||
function createFramePopup( eventId, frameId, width, height )
|
||||
{
|
||||
var url = '?view=frame&eid='+eventId+'&fid='+frameId;
|
||||
var name = 'zmFrame';
|
||||
var popupSize = getPopupSize( 'frame', width, height );
|
||||
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
|
||||
popup.focus();
|
||||
}
|
||||
|
||||
function windowToFront()
|
||||
{
|
||||
top.window.focus();
|
||||
}
|
||||
|
||||
function closeWindow()
|
||||
{
|
||||
top.window.close();
|
||||
}
|
||||
|
||||
function refreshWindow()
|
||||
{
|
||||
window.location.reload( true );
|
||||
}
|
||||
|
||||
function refreshParentWindow()
|
||||
{
|
||||
if ( window.opener )
|
||||
window.opener.location.reload( true );
|
||||
}
|
||||
|
||||
//Shows a message if there is an error in the streamObj or the stream doesn't exist. Returns true if error, false otherwise.
|
||||
function checkStreamForErrors( funcName, streamObj )
|
||||
{
|
||||
if ( !streamObj )
|
||||
{
|
||||
Error( funcName+": stream object was null" );
|
||||
return true;
|
||||
}
|
||||
if ( streamObj.result == "Error" )
|
||||
{
|
||||
Error( funcName+" stream error: "+streamObj.message );
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function secsToTime( seconds )
|
||||
{
|
||||
var timeString = "--";
|
||||
if ( seconds < 60 )
|
||||
timeString = seconds.toString();
|
||||
else if ( seconds < 60*60 )
|
||||
{
|
||||
var timeMins = parseInt(seconds/60);
|
||||
var timeSecs = seconds%60;
|
||||
if ( timeSecs < 10 )
|
||||
timeSecs = '0'+timeSecs.toString().substr( 0, 4 );
|
||||
else
|
||||
timeSecs = timeSecs.toString().substr( 0, 5 );
|
||||
timeString = timeMins+":"+timeSecs;
|
||||
}
|
||||
else
|
||||
{
|
||||
var timeHours = parseInt(seconds/3600);
|
||||
var timeMins = (seconds%3600)/60;
|
||||
var timeSecs = seconds%60;
|
||||
if ( timeMins < 10 )
|
||||
timeMins = '0'+timeMins.toString().substr( 0, 4 );
|
||||
else
|
||||
timeMins = timeMins.toString().substr( 0, 5 );
|
||||
if ( timeSecs < 10 )
|
||||
timeSecs = '0'+timeSecs.toString().substr( 0, 4 );
|
||||
else
|
||||
timeSecs = timeSecs.toString().substr( 0, 5 );
|
||||
timeString = timeHours+":"+timeMins+":"+timeSecs;
|
||||
}
|
||||
return( timeString );
|
||||
}
|
||||
|
||||
function submitTab( tab )
|
||||
{
|
||||
var form = $('contentForm');
|
||||
form.action.value = "";
|
||||
form.tab.value = tab;
|
||||
form.submit();
|
||||
}
|
||||
|
||||
function configureDeleteButton( element )
|
||||
{
|
||||
var form = element.form;
|
||||
var checked = element.checked;
|
||||
if ( !checked )
|
||||
{
|
||||
for ( var i = 0; i < form.elements.length; i++ )
|
||||
{
|
||||
if ( form.elements[i].name == element.name )
|
||||
{
|
||||
if ( form.elements[i].checked )
|
||||
{
|
||||
checked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
form.deleteBtn.disabled = !checked;
|
||||
}
|
||||
|
||||
function confirmDelete( message )
|
||||
{
|
||||
return( confirm( message?message:'Are you sure you wish to delete?' ) );
|
||||
}
|
||||
|
||||
if ( refreshParent )
|
||||
{
|
||||
refreshParentWindow();
|
||||
}
|
||||
|
||||
if ( focusWindow )
|
||||
{
|
||||
windowToFront();
|
||||
}
|
||||
window.addEvent( 'domready', checkSize);
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder base javascript file, $Date: 2008-04-21 14:52:05 +0100 (Mon, 21 Apr 2008) $, $Revision: 2391 $
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
//
|
||||
// This file should only contain JavaScript that needs preprocessing by php.
|
||||
// Static JavaScript should go in skin.js
|
||||
//
|
||||
|
||||
?>
|
||||
var AJAX_TIMEOUT = <?= ZM_WEB_AJAX_TIMEOUT ?>;
|
||||
|
||||
var currentView = '<?= $view ?>';
|
||||
var thisUrl = "<?= ZM_BASE_URL.$_SERVER['PHP_SELF'] ?>";
|
||||
var skinPath = "<?= ZM_SKIN_PATH ?>";
|
||||
|
||||
var canEditSystem = <?= canEdit('System' )?'true':'false' ?>;
|
||||
var canViewSystem = <?= canView('System' )?'true':'false' ?>;
|
||||
|
||||
var refreshParent = <?= !empty($refreshParent)?'true':'false' ?>;
|
||||
|
||||
var focusWindow = <?= !empty($focusWindow)?'true':'false' ?>;
|
||||
|
||||
var imagePrefix = "<?= viewImagePath( "", '&' ) ?>";
|
|
@ -0,0 +1,5 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/lang
|
||||
|
||||
dist_web_DATA = # No files here
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder HTML interface file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( empty($_COOKIE['zmBandwidth']) )
|
||||
$_COOKIE['zmBandwidth'] = "low";
|
||||
|
||||
//ini_set( "magic_quotes_gpc", "Off" );
|
||||
|
||||
// Uncomment if there are language overrides
|
||||
//if ( $skinLangFile = loadLanguage( ZM_SKIN_PATH ) )
|
||||
//require_once( $skinLangFile );
|
||||
|
||||
foreach ( getSkinIncludes( 'includes/config.php' ) as $includeFile )
|
||||
require_once $includeFile;
|
||||
|
||||
foreach ( getSkinIncludes( 'includes/functions.php' ) as $includeFile )
|
||||
require_once $includeFile;
|
||||
|
||||
if ( empty($view) )
|
||||
$view = isset($user)?'console':'login';
|
||||
|
||||
if ( !isset($user) && ZM_OPT_USE_AUTH && ZM_AUTH_TYPE == "remote" && !empty( $_SERVER['REMOTE_USER']) )
|
||||
{
|
||||
$view = "postlogin";
|
||||
$action = "login";
|
||||
$_REQUEST['username'] = $_SERVER['REMOTE_USER'];
|
||||
}
|
||||
|
||||
if ( isset($user) )
|
||||
{
|
||||
// Bandwidth Limiter
|
||||
if ( !empty($user['MaxBandwidth']) )
|
||||
{
|
||||
if ( $user['MaxBandwidth'] == "low" )
|
||||
{
|
||||
$_COOKIE['zmBandwidth'] = "low";
|
||||
}
|
||||
elseif ( $user['MaxBandwidth'] == "medium" && $_COOKIE['zmBandwidth'] == "high" )
|
||||
{
|
||||
$_COOKIE['zmBandwidth'] = "medium";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If there are additional actions
|
||||
foreach ( getSkinIncludes( 'includes/actions.php' ) as $includeFile )
|
||||
require_once $includeFile;
|
||||
|
||||
?>
|
|
@ -0,0 +1,55 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
SUBDIRS = \
|
||||
css \
|
||||
js
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/views
|
||||
|
||||
dist_web_DATA = \
|
||||
bandwidth.php \
|
||||
blank.php \
|
||||
console.php \
|
||||
controlcap.php \
|
||||
controlcaps.php \
|
||||
control.php \
|
||||
controlpreset.php \
|
||||
cycle.php \
|
||||
device.php \
|
||||
devices.php \
|
||||
donate.php \
|
||||
error.php \
|
||||
eventdetail.php \
|
||||
event.php \
|
||||
events.php \
|
||||
export.php \
|
||||
filter.php \
|
||||
filtersave.php \
|
||||
frame.php \
|
||||
frames.php \
|
||||
function.php \
|
||||
group.php \
|
||||
groups.php \
|
||||
log.php \
|
||||
login.php \
|
||||
logout.php \
|
||||
Makefile.am \
|
||||
monitor.php \
|
||||
monitorpreset.php \
|
||||
monitorprobe.php \
|
||||
montage.php \
|
||||
none.php \
|
||||
optionhelp.php \
|
||||
options.php \
|
||||
postlogin.php \
|
||||
settings.php \
|
||||
state.php \
|
||||
stats.php \
|
||||
status.php \
|
||||
timeline.php \
|
||||
user.php \
|
||||
version.php \
|
||||
video.php \
|
||||
watch.php \
|
||||
zone.php \
|
||||
zones.php
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web bandwidth view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
$newBandwidth = $_COOKIE['zmBandwidth'];
|
||||
|
||||
if ( $user && !empty($user['MaxBandwidth']) )
|
||||
{
|
||||
if ( $user['MaxBandwidth'] == "low" )
|
||||
{
|
||||
unset( $bwArray['high'] );
|
||||
unset( $bwArray['medium'] );
|
||||
}
|
||||
elseif ( $user['MaxBandwidth'] == "medium" )
|
||||
{
|
||||
unset( $bwArray['high'] );
|
||||
}
|
||||
}
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Bandwidth'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Bandwidth'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="bandwidth"/>
|
||||
<p><?= $SLANG['SetNewBandwidth'] ?></p>
|
||||
<p><?= buildSelect( "newBandwidth", $bwArray ) ?></p>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow();"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web empty view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
?>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<?php
|
||||
if ( !empty($refreshParent) )
|
||||
{
|
||||
?>
|
||||
<head>
|
||||
<script type="text/javascript">
|
||||
//self.onerror = function() { return( true ); }
|
||||
opener.location.reload(true);
|
||||
</script>
|
||||
</head>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</html>
|
|
@ -0,0 +1,352 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web console file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
$eventCounts = array(
|
||||
array(
|
||||
"title" => $SLANG['Events'],
|
||||
"filter" => array(
|
||||
"terms" => array(
|
||||
)
|
||||
),
|
||||
),
|
||||
array(
|
||||
"title" => $SLANG['Hour'],
|
||||
"filter" => array(
|
||||
"terms" => array(
|
||||
array( "attr" => "DateTime", "op" => ">=", "val" => "-1 hour" ),
|
||||
)
|
||||
),
|
||||
),
|
||||
array(
|
||||
"title" => $SLANG['Day'],
|
||||
"filter" => array(
|
||||
"terms" => array(
|
||||
array( "attr" => "DateTime", "op" => ">=", "val" => "-1 day" ),
|
||||
)
|
||||
),
|
||||
),
|
||||
array(
|
||||
"title" => $SLANG['Week'],
|
||||
"filter" => array(
|
||||
"terms" => array(
|
||||
array( "attr" => "DateTime", "op" => ">=", "val" => "-7 day" ),
|
||||
)
|
||||
),
|
||||
),
|
||||
array(
|
||||
"title" => $SLANG['Month'],
|
||||
"filter" => array(
|
||||
"terms" => array(
|
||||
array( "attr" => "DateTime", "op" => ">=", "val" => "-1 month" ),
|
||||
)
|
||||
),
|
||||
),
|
||||
array(
|
||||
"title" => $SLANG['Archived'],
|
||||
"filter" => array(
|
||||
"terms" => array(
|
||||
array( "attr" => "Archived", "op" => "=", "val" => "1" ),
|
||||
)
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$running = daemonCheck();
|
||||
$status = $running?$SLANG['Running']:$SLANG['Stopped'];
|
||||
|
||||
$group = NULL;
|
||||
if ( ! empty($_COOKIE['zmGroup']) ) {
|
||||
if ( $group = dbFetchOne( 'select * from Groups where Id = ?', NULL, array($_COOKIE['zmGroup'])) )
|
||||
$groupIds = array_flip(explode( ',', $group['MonitorIds'] ));
|
||||
}
|
||||
|
||||
noCacheHeaders();
|
||||
|
||||
$maxWidth = 0;
|
||||
$maxHeight = 0;
|
||||
$cycleCount = 0;
|
||||
$minSequence = 0;
|
||||
$maxSequence = 1;
|
||||
$seqIdList = array();
|
||||
$monitors = dbFetchAll( "select * from Monitors order by Sequence asc" );
|
||||
$displayMonitors = array();
|
||||
for ( $i = 0; $i < count($monitors); $i++ )
|
||||
{
|
||||
if ( !visibleMonitor( $monitors[$i]['Id'] ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( $group && !empty($groupIds) && !array_key_exists( $monitors[$i]['Id'], $groupIds ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$monitors[$i]['Show'] = true;
|
||||
if ( empty($minSequence) || ($monitors[$i]['Sequence'] < $minSequence) )
|
||||
{
|
||||
$minSequence = $monitors[$i]['Sequence'];
|
||||
}
|
||||
if ( $monitors[$i]['Sequence'] > $maxSequence )
|
||||
{
|
||||
$maxSequence = $monitors[$i]['Sequence'];
|
||||
}
|
||||
$monitors[$i]['zmc'] = zmcStatus( $monitors[$i] );
|
||||
$monitors[$i]['zma'] = zmaStatus( $monitors[$i] );
|
||||
$monitors[$i]['ZoneCount'] = dbFetchOne( 'select count(Id) as ZoneCount from Zones where MonitorId = ?', 'ZoneCount', array($monitors[$i]['Id']) );
|
||||
$counts = array();
|
||||
for ( $j = 0; $j < count($eventCounts); $j++ )
|
||||
{
|
||||
$filter = addFilterTerm( $eventCounts[$j]['filter'], count($eventCounts[$j]['filter']['terms']), array( "cnj" => "and", "attr" => "MonitorId", "op" => "=", "val" => $monitors[$i]['Id'] ) );
|
||||
parseFilter( $filter );
|
||||
$counts[] = "count(if(1".$filter['sql'].",1,NULL)) as EventCount$j";
|
||||
$monitors[$i]['eventCounts'][$j]['filter'] = $filter;
|
||||
}
|
||||
$sql = "select ".join($counts,", ")." from Events as E where MonitorId = ?";
|
||||
$counts = dbFetchOne( $sql, NULL, array($monitors[$i]['Id']) );
|
||||
if ( $monitors[$i]['Function'] != 'None' )
|
||||
{
|
||||
$cycleCount++;
|
||||
$scaleWidth = reScale( $monitors[$i]['Width'], $monitors[$i]['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
|
||||
$scaleHeight = reScale( $monitors[$i]['Height'], $monitors[$i]['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
|
||||
if ( $maxWidth < $scaleWidth ) $maxWidth = $scaleWidth;
|
||||
if ( $maxHeight < $scaleHeight ) $maxHeight = $scaleHeight;
|
||||
}
|
||||
if ( $counts ) $monitors[$i] = array_merge( $monitors[$i], $counts );
|
||||
$seqIdList[] = $monitors[$i]['Id'];
|
||||
$displayMonitors[] = $monitors[$i];
|
||||
}
|
||||
$lastId = 0;
|
||||
$seqIdUpList = array();
|
||||
foreach ( $seqIdList as $seqId )
|
||||
{
|
||||
if ( !empty($lastId) )
|
||||
$seqIdUpList[$seqId] = $lastId;
|
||||
else
|
||||
$seqIdUpList[$seqId] = $seqId;
|
||||
$lastId = $seqId;
|
||||
}
|
||||
$lastId = 0;
|
||||
$seqIdDownList = array();
|
||||
foreach ( array_reverse($seqIdList) as $seqId )
|
||||
{
|
||||
if ( !empty($lastId) )
|
||||
$seqIdDownList[$seqId] = $lastId;
|
||||
else
|
||||
$seqIdDownList[$seqId] = $seqId;
|
||||
$lastId = $seqId;
|
||||
}
|
||||
|
||||
$cycleWidth = $maxWidth;
|
||||
$cycleHeight = $maxHeight;
|
||||
|
||||
$eventsView = ZM_WEB_EVENTS_VIEW;
|
||||
$eventsWindow = 'zm'.ucfirst(ZM_WEB_EVENTS_VIEW);
|
||||
|
||||
$eventCount = 0;
|
||||
for ( $i = 0; $i < count($eventCounts); $i++ )
|
||||
{
|
||||
$eventCounts[$i]['total'] = 0;
|
||||
}
|
||||
$zoneCount = 0;
|
||||
foreach( $displayMonitors as $monitor )
|
||||
{
|
||||
for ( $i = 0; $i < count($eventCounts); $i++ )
|
||||
{
|
||||
$eventCounts[$i]['total'] += $monitor['EventCount'.$i];
|
||||
}
|
||||
$zoneCount += $monitor['ZoneCount'];
|
||||
}
|
||||
|
||||
$seqUpFile = getSkinFile( 'graphics/seq-u.gif' );
|
||||
$seqDownFile = getSkinFile( 'graphics/seq-d.gif' );
|
||||
|
||||
$versionClass = (ZM_DYN_DB_VERSION&&(ZM_DYN_DB_VERSION!=ZM_VERSION))?'errorText':'';
|
||||
|
||||
xhtmlHeaders( __FILE__, $SLANG['Console'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<form name="monitorForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="action" value=""/>
|
||||
<div id="header">
|
||||
<h3 id="systemTime"><?= preg_match( '/%/', DATE_FMT_CONSOLE_LONG )?strftime( DATE_FMT_CONSOLE_LONG ):date( DATE_FMT_CONSOLE_LONG ) ?></h3>
|
||||
<h3 id="systemStats"><?= $SLANG['Load'] ?>: <?= getLoad() ?> / <?= $SLANG['Disk'] ?>: <?= getDiskPercent() ?>%</h3>
|
||||
<h2 id="title"><a href="http://www.zoneminder.com" target="ZoneMinder">ZoneMinder</a> <?= $SLANG['Console'] ?> - <?= makePopupLink( '?view=state', 'zmState', 'state', $status, canEdit( 'System' ) ) ?> - <?= makePopupLink( '?view=version', 'zmVersion', 'version', '<span class="'.$versionClass.'">v'.ZM_VERSION.'</span>', canEdit( 'System' ) ) ?></h2>
|
||||
<div class="clear"></div>
|
||||
<div id="monitorSummary"><?= makePopupLink( '?view=groups', 'zmGroups', 'groups', sprintf( $CLANG['MonitorCount'], count($displayMonitors), zmVlang( $VLANG['Monitor'], count($displayMonitors) ) ).($group?' ('.$group['Name'].')':''), canView( 'System' ) ); ?></div>
|
||||
<?php
|
||||
if ( ZM_OPT_X10 && canView( 'Devices' ) )
|
||||
{
|
||||
?>
|
||||
<div id="devices"><?= makePopupLink( '?view=devices', 'zmDevices', 'devices', $SLANG['Devices'] ) ?></div>
|
||||
<?php
|
||||
}
|
||||
if ( canView( 'System' ) )
|
||||
{
|
||||
?>
|
||||
<div id="options"><?= makePopupLink( '?view=options', 'zmOptions', 'options', $SLANG['Options'] ) ?><?php if ( logToDatabase() > Logger::NOLOG ) { ?> / <?= makePopupLink( '?view=log', 'zmLog', 'log', '<span class="'.logState().'">'.$SLANG['Log'].'</span>' ) ?><?php } ?></div>
|
||||
<?php
|
||||
}
|
||||
if ( canView( 'Stream' ) && $cycleCount > 1 )
|
||||
{
|
||||
$cycleGroup = isset($_COOKIE['zmGroup'])?$_COOKIE['zmGroup']:0;
|
||||
?>
|
||||
<div id="cycleMontage"><?= makePopupLink( '?view=cycle&group='.$cycleGroup, 'zmCycle'.$cycleGroup, array( 'cycle', $cycleWidth, $cycleHeight ), $SLANG['Cycle'], $running ) ?> / <?= makePopupLink( '?view=montage&group='.$cycleGroup, 'zmMontage'.$cycleGroup, 'montage', $SLANG['Montage'], $running ) ?></div>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<h3 id="loginBandwidth"><?php
|
||||
if ( ZM_OPT_USE_AUTH )
|
||||
{
|
||||
?><?= $SLANG['LoggedInAs'] ?> <?= makePopupLink( '?view=logout', 'zmLogout', 'logout', $user['Username'], (ZM_AUTH_TYPE == "builtin") ) ?>, <?= strtolower( $SLANG['ConfiguredFor'] ) ?><?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?><?= $SLANG['ConfiguredFor'] ?><?php
|
||||
}
|
||||
?> <?= makePopupLink( '?view=bandwidth', 'zmBandwidth', 'bandwidth', $bwArray[$_COOKIE['zmBandwidth']], ($user && $user['MaxBandwidth'] != 'low' ) ) ?> <?= $SLANG['BandwidthHead'] ?></h3>
|
||||
</div>
|
||||
<div id="content">
|
||||
<table id="consoleTable" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="colName"><?= $SLANG['Name'] ?></th>
|
||||
<th class="colFunction"><?= $SLANG['Function'] ?></th>
|
||||
<th class="colSource"><?= $SLANG['Source'] ?></th>
|
||||
<?php
|
||||
for ( $i = 0; $i < count($eventCounts); $i++ )
|
||||
{
|
||||
?>
|
||||
<th class="colEvents"><?= $eventCounts[$i]['title'] ?></th>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<th class="colZones"><?= $SLANG['Zones'] ?></th>
|
||||
<?php
|
||||
if ( canEdit('Monitors') )
|
||||
{
|
||||
?>
|
||||
<th class="colOrder"><?= $SLANG['Order'] ?></th>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<th class="colMark"><?= $SLANG['Mark'] ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="colLeftButtons" colspan="3">
|
||||
<input type="button" value="<?= $SLANG['Refresh'] ?>" onclick="location.reload(true);"/>
|
||||
<?= makePopupButton( '?view=monitor', 'zmMonitor0', 'monitor', $SLANG['AddNewMonitor'], (canEdit( 'Monitors' ) && !$user['MonitorIds']) ) ?>
|
||||
<?= makePopupButton( '?view=filter&filter[terms][0][attr]=DateTime&filter[terms][0][op]=%3c&filter[terms][0][val]=now', 'zmFilter', 'filter', $SLANG['Filters'], canView( 'Events' ) ) ?>
|
||||
</td>
|
||||
<?php
|
||||
for ( $i = 0; $i < count($eventCounts); $i++ )
|
||||
{
|
||||
parseFilter( $eventCounts[$i]['filter'] );
|
||||
?>
|
||||
<td class="colEvents"><?= makePopupLink( '?view='.$eventsView.'&page=1'.$eventCounts[$i]['filter']['query'], $eventsWindow, $eventsView, $eventCounts[$i]['total'], canView( 'Events' ) ) ?></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td class="colZones"><?= $zoneCount ?></td>
|
||||
<td class="colRightButtons" colspan="<?= canEdit('Monitors')?2:1 ?>"><input type="button" name="editBtn" value="<?= $SLANG['Edit'] ?>" onclick="editMonitor( this )" disabled="disabled"/><input type="button" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" onclick="deleteMonitor( this )" disabled="disabled"/></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<?php
|
||||
foreach( $displayMonitors as $monitor )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<?php
|
||||
if ( !$monitor['zmc'] )
|
||||
$dclass = "errorText";
|
||||
else
|
||||
{
|
||||
if ( !$monitor['zma'] )
|
||||
$dclass = "warnText";
|
||||
else
|
||||
$dclass = "infoText";
|
||||
}
|
||||
if ( $monitor['Function'] == 'None' )
|
||||
$fclass = "errorText";
|
||||
elseif ( $monitor['Function'] == 'Monitor' )
|
||||
$fclass = "warnText";
|
||||
else
|
||||
$fclass = "infoText";
|
||||
if ( !$monitor['Enabled'] )
|
||||
$fclass .= " disabledText";
|
||||
$scale = max( reScale( SCALE_BASE, $monitor['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE );
|
||||
?>
|
||||
<td class="colName"><?= makePopupLink( '?view=watch&mid='.$monitor['Id'], 'zmWatch'.$monitor['Id'], array( 'watch', reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ) ), $monitor['Name'], $running && ($monitor['Function'] != 'None') && canView( 'Stream' ) ) ?></td>
|
||||
<td class="colFunction"><?= makePopupLink( '?view=function&mid='.$monitor['Id'], 'zmFunction', 'function', '<span class="'.$fclass.'">'.$SLANG['Fn'.$monitor['Function']].( empty($monitor['Enabled']) ? ', disabled' : '' ) .'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php if ( $monitor['Type'] == "Local" ) { ?>
|
||||
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.$monitor['Device'].' ('.$monitor['Channel'].')</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php } elseif ( $monitor['Type'] == "Remote" ) { ?>
|
||||
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.preg_replace( '/^.*@/', '', $monitor['Host'] ).'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php } elseif ( $monitor['Type'] == "File" ) { ?>
|
||||
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.preg_replace( '/^.*\//', '', $monitor['Path'] ).'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php } elseif ( $monitor['Type'] == "Ffmpeg" ) { ?>
|
||||
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.preg_replace( '/^.*\//', '', $monitor['Path'] ).'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php } elseif ( $monitor['Type'] == "Libvlc" ) {
|
||||
$domain = parse_url( $monitor['Path'], PHP_URL_HOST );
|
||||
$shortpath = $domain ? $domain : preg_replace( '/^.*\//', '', $monitor['Path'] );
|
||||
?>
|
||||
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.$shortpath.'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php } elseif ( $monitor['Type'] == "cURL" ) { ?>
|
||||
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.preg_replace( '/^.*\//', '', $monitor['Path'] ).'</span>', canEdit( 'Monitors' ) ) ?></td>
|
||||
<?php } else { ?>
|
||||
<td class="colSource"> </td>
|
||||
<?php } ?>
|
||||
<?php
|
||||
for ( $i = 0; $i < count($eventCounts); $i++ )
|
||||
{
|
||||
?>
|
||||
<td class="colEvents"><?= makePopupLink( '?view='.$eventsView.'&page=1'.$monitor['eventCounts'][$i]['filter']['query'], $eventsWindow, $eventsView, $monitor['EventCount'.$i], canView( 'Events' ) ) ?></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td class="colZones"><?= makePopupLink( '?view=zones&mid='.$monitor['Id'], 'zmZones', array( 'zones', $monitor['Width'], $monitor['Height'] ), $monitor['ZoneCount'], canView( 'Monitors' ) ) ?></td>
|
||||
<?php
|
||||
if ( canEdit('Monitors') )
|
||||
{
|
||||
?>
|
||||
<td class="colOrder"><?= makeLink( '?view='.$view.'&action=sequence&mid='.$monitor['Id'].'&smid='.$seqIdUpList[$monitor['Id']], '<img src="'.$seqUpFile.'" alt="Up"/>', $monitor['Sequence']>$minSequence ) ?><?= makeLink( '?view='.$view.'&action=sequence&mid='.$monitor['Id'].'&smid='.$seqIdDownList[$monitor['Id']], '<img src="'.$seqDownFile.'" alt="Down"/>', $monitor['Sequence']<$maxSequence ) ?></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td class="colMark"><input type="checkbox" name="markMids[]" value="<?= $monitor['Id'] ?>" onclick="setButtonStates( this )"<?php if ( !canEdit( 'Monitors' ) ) { ?> disabled="disabled"<?php } ?>/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web control view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Control' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$groupSql = "";
|
||||
if ( !empty($_REQUEST['group']) ) {
|
||||
$row = dbFetchOne( 'SELECT * FROM Groups WHERE Id = ?', NULL, array($_REQUEST['group']) );
|
||||
$groupSql = " and find_in_set( Id, '".$row['MonitorIds']."' )";
|
||||
}
|
||||
|
||||
$mid = validInt($_REQUEST['mid']);
|
||||
|
||||
$sql = "SELECT * FROM Monitors WHERE Function != 'None' AND Controllable = 1$groupSql ORDER BY Sequence";
|
||||
$mids = array();
|
||||
foreach( dbFetchAll( $sql ) as $row )
|
||||
{
|
||||
if ( !visibleMonitor( $row['Id'] ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( empty($mid) )
|
||||
$mid = $row['Id'];
|
||||
$mids[$row['Id']] = $row['Name'];
|
||||
}
|
||||
|
||||
foreach ( getSkinIncludes( 'includes/control_functions.php' ) as $includeFile )
|
||||
require_once $includeFile;
|
||||
|
||||
$sql = 'SELECT C.*,M.* FROM Monitors AS M INNER JOIN Controls AS C ON (M.ControlId = C.Id ) WHERE M.Id = ?';
|
||||
$monitor = dbFetchOne( $sql, NULL, array( $mid ) );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Control'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= $SLANG['Control'] ?></h2>
|
||||
<div id="headerControl">
|
||||
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<?= buildSelect( "mid", $mids, "this.form.submit();" ); ?>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div id="ptzControls" class="ptzControls">
|
||||
<?= ptzControls( $monitor ) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,512 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web control capabilities view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'Control' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$tabs = array();
|
||||
$tabs["main"] = $SLANG['Main'];
|
||||
$tabs["move"] = $SLANG['Move'];
|
||||
$tabs["pan"] = $SLANG['Pan'];
|
||||
$tabs["tilt"] = $SLANG['Tilt'];
|
||||
$tabs["zoom"] = $SLANG['Zoom'];
|
||||
$tabs["focus"] = $SLANG['Focus'];
|
||||
$tabs["white"] = $SLANG['White'];
|
||||
$tabs["iris"] = $SLANG['Iris'];
|
||||
$tabs["presets"] = $SLANG['Presets'];
|
||||
|
||||
if ( isset($_REQUEST['tab']) )
|
||||
$tab = validHtmlStr($_REQUEST['tab']);
|
||||
else
|
||||
$tab = "main";
|
||||
|
||||
if ( isset( $_REQUEST['newControl'] ) )
|
||||
{
|
||||
$newControl = $_REQUEST['newControl'];
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !empty($_REQUEST['cid']) )
|
||||
{
|
||||
$control = dbFetchOne( 'SELECT * FROM Controls WHERE Id = ?', NULL, array($_REQUEST['cid'] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$control = array(
|
||||
'Name' => $SLANG['New'],
|
||||
'Type' => "Local",
|
||||
'Protocol' => "",
|
||||
'CanWake' => "",
|
||||
'CanSleep' => "",
|
||||
'CanReset' => "",
|
||||
'CanMove' => "",
|
||||
'CanMoveDiag' => "",
|
||||
'CanMoveMap' => "",
|
||||
'CanMoveAbs' => "",
|
||||
'CanMoveRel' => "",
|
||||
'CanMoveCon' => "",
|
||||
'CanPan' => "",
|
||||
'MinPanRange' => "",
|
||||
'MaxPanRange' => "",
|
||||
'MinPanStep' => "",
|
||||
'MaxPanStep' => "",
|
||||
'HasPanSpeed' => "",
|
||||
'MinPanSpeed' => "",
|
||||
'MaxPanSpeed' => "",
|
||||
'HasTurboPan' => "",
|
||||
'TurboPanSpeed' => "",
|
||||
'CanTilt' => "",
|
||||
'MinTiltRange' => "",
|
||||
'MaxTiltRange' => "",
|
||||
'MinTiltStep' => "",
|
||||
'MaxTiltStep' => "",
|
||||
'HasTiltSpeed' => "",
|
||||
'MinTiltSpeed' => "",
|
||||
'MaxTiltSpeed' => "",
|
||||
'HasTurboTilt' => "",
|
||||
'TurboTiltSpeed' => "",
|
||||
'CanZoom' => "",
|
||||
'CanZoomAbs' => "",
|
||||
'CanZoomRel' => "",
|
||||
'CanZoomCon' => "",
|
||||
'MinZoomRange' => "",
|
||||
'MaxZoomRange' => "",
|
||||
'MinZoomStep' => "",
|
||||
'MaxZoomStep' => "",
|
||||
'HasZoomSpeed' => "",
|
||||
'MinZoomSpeed' => "",
|
||||
'MaxZoomSpeed' => "",
|
||||
'CanFocus' => "",
|
||||
'CanAutoFocus' => "",
|
||||
'CanFocusAbs' => "",
|
||||
'CanFocusRel' => "",
|
||||
'CanFocusCon' => "",
|
||||
'MinFocusRange' => "",
|
||||
'MaxFocusRange' => "",
|
||||
'MinFocusStep' => "",
|
||||
'MaxFocusStep' => "",
|
||||
'HasFocusSpeed' => "",
|
||||
'MinFocusSpeed' => "",
|
||||
'MaxFocusSpeed' => "",
|
||||
'CanIris' => "",
|
||||
'CanAutoIris' => "",
|
||||
'CanIrisAbs' => "",
|
||||
'CanIrisRel' => "",
|
||||
'CanIrisCon' => "",
|
||||
'MinIrisRange' => "",
|
||||
'MaxIrisRange' => "",
|
||||
'MinIrisStep' => "",
|
||||
'MaxIrisStep' => "",
|
||||
'HasIrisSpeed' => "",
|
||||
'MinIrisSpeed' => "",
|
||||
'MaxIrisSpeed' => "",
|
||||
'CanGain' => "",
|
||||
'CanAutoGain' => "",
|
||||
'CanGainAbs' => "",
|
||||
'CanGainRel' => "",
|
||||
'CanGainCon' => "",
|
||||
'MinGainRange' => "",
|
||||
'MaxGainRange' => "",
|
||||
'MinGainStep' => "",
|
||||
'MaxGainStep' => "",
|
||||
'HasGainSpeed' => "",
|
||||
'MinGainSpeed' => "",
|
||||
'MaxGainSpeed' => "",
|
||||
'CanWhite' => "",
|
||||
'CanAutoWhite' => "",
|
||||
'CanWhiteAbs' => "",
|
||||
'CanWhiteRel' => "",
|
||||
'CanWhiteCon' => "",
|
||||
'MinWhiteRange' => "",
|
||||
'MaxWhiteRange' => "",
|
||||
'MinWhiteStep' => "",
|
||||
'MaxWhiteStep' => "",
|
||||
'HasWhiteSpeed' => "",
|
||||
'MinWhiteSpeed' => "",
|
||||
'MaxWhiteSpeed' => "",
|
||||
'HasPresets' => "",
|
||||
'NumPresets' => "",
|
||||
'HasHomePreset' => "",
|
||||
'CanSetPresets' => "",
|
||||
);
|
||||
}
|
||||
$newControl = $control;
|
||||
}
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['ControlCap']." - ".$newControl['Name'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['ControlCap'] ?> - <?= $newControl['Name'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<ul class="tabList">
|
||||
<?php
|
||||
foreach ( $tabs as $name=>$value )
|
||||
{
|
||||
if ( $tab == $name )
|
||||
{
|
||||
?>
|
||||
<li class="active"><?= $value ?></li>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<li><a href="#" onclick="submitTab( '<?= $name ?>' ); return( false );"><?= $value ?></a></li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<div class="clear"></div>
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="tab" value="<?= $tab ?>"/>
|
||||
<input type="hidden" name="action" value="controlcap"/>
|
||||
<input type="hidden" name="cid" value="<?= requestVar('cid') ?>"/>
|
||||
<?php
|
||||
if ( $tab != 'main' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[Name]" value="<?= validHtmlStr($newControl['Name']) ?>"/>
|
||||
<input type="hidden" name="newControl[Type]" value="<?= validHtmlStr($newControl['Type']) ?>"/>
|
||||
<input type="hidden" name="newControl[Protocol]" value="<?= validHtmlStr($newControl['Protocol']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanWake]" value="<?= !empty($newControl['CanWake']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanSleep]" value="<?= !empty($newControl['CanSleep']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanReset]" value="<?= !empty($newControl['CanReset']) ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'move' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanMove]" value="<?= !empty($newControl['CanMove']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanMoveDiag]" value="<?= !empty($newControl['CanMoveDiag']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanMoveMap]" value="<?= !empty($newControl['CanMoveMap']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanMoveAbs]" value="<?= !empty($newControl['CanMoveAbs']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanMoveRel]" value="<?= !empty($newControl['CanMoveRel']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanMoveCon]" value="<?= !empty($newControl['CanMoveCon']) ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'pan' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanPan]" value="<?= !empty($newControl['CanPan']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinPanRange]" value="<?= $newControl['MinPanRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxPanRange]" value="<?= $newControl['MaxPanRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinPanStep]" value="<?= $newControl['MinPanStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxPanStep]" value="<?= $newControl['MaxPanStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasPanSpeed]" value="<?= !empty($newControl['HasPanSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinPanSpeed]" value="<?= $newControl['MinPanSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxPanSpeed]" value="<?= $newControl['MaxPanSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasTurboPan]" value="<?= !empty($newControl['HasTurboPan']) ?>"/>
|
||||
<input type="hidden" name="newControl[TurboPanSpeed]" value="<?= $newControl['TurboPanSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'tilt' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanTilt]" value="<?= !empty($newControl['CanTilt']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinTiltRange]" value="<?= $newControl['MinTiltRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxTiltRange]" value="<?= $newControl['MaxTiltRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinTiltStep]" value="<?= $newControl['MinTiltStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxTiltStep]" value="<?= $newControl['MaxTiltStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasTiltSpeed]" value="<?= !empty($newControl['HasTiltSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinTiltSpeed]" value="<?= $newControl['MinTiltSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxTiltSpeed]" value="<?= $newControl['MaxTiltSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasTurboTilt]" value="<?= !empty($newControl['HasTurboTilt']) ?>"/>
|
||||
<input type="hidden" name="newControl[TurboTiltSpeed]" value="<?= $newControl['TurboTiltSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'zoom' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanZoom]" value="<?= !empty($newControl['CanZoom']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanZoomAbs]" value="<?= !empty($newControl['CanZoomAbs']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanZoomRel]" value="<?= !empty($newControl['CanZoomRel']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanZoomCon]" value="<?= !empty($newControl['CanZoomCon']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinZoomRange]" value="<?= $newControl['MinZoomRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxZoomRange]" value="<?= $newControl['MaxZoomRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinZoomStep]" value="<?= $newControl['MinZoomStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxZoomStep]" value="<?= $newControl['MaxZoomStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasZoomSpeed]" value="<?= !empty($newControl['HasZoomSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinZoomSpeed]" value="<?= $newControl['MinZoomSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxZoomSpeed]" value="<?= $newControl['MaxZoomSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'focus' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanFocus]" value="<?= !empty($newControl['CanFocus']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanAutoFocus]" value="<?= !empty($newControl['CanAutoFocus']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanFocusAbs]" value="<?= !empty($newControl['CanFocusAbs']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanFocusRel]" value="<?= !empty($newControl['CanFocusRel']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanFocusCon]" value="<?= !empty($newControl['CanFocusCon']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinFocusRange]" value="<?= $newControl['MinFocusRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxFocusRange]" value="<?= $newControl['MaxFocusRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinFocusStep]" value="<?= $newControl['MinFocusStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxFocusStep]" value="<?= $newControl['MaxFocusStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasFocusSpeed]" value="<?= !empty($newControl['HasFocusSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinFocusSpeed]" value="<?= $newControl['MinFocusSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxFocusSpeed]" value="<?= $newControl['MaxFocusSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'iris' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanIris]" value="<?= !empty($newControl['CanIris']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanAutoIris]" value="<?= !empty($newControl['CanAutoIris']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanIrisAbs]" value="<?= !empty($newControl['CanIrisAbs']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanIrisRel]" value="<?= !empty($newControl['CanIrisRel']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanIrisCon]" value="<?= !empty($newControl['CanIrisCon']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinIrisRange]" value="<?= $newControl['MinIrisRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxIrisRange]" value="<?= $newControl['MaxIrisRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinIrisStep]" value="<?= $newControl['MinIrisStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxIrisStep]" value="<?= $newControl['MaxIrisStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasIrisSpeed]" value="<?= !empty($newControl['HasIrisSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinIrisSpeed]" value="<?= $newControl['MinIrisSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxIrisSpeed]" value="<?= $newControl['MaxIrisSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'gain' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanGain]" value="<?= !empty($newControl['CanGain']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanAutoGain]" value="<?= !empty($newControl['CanAutoGain']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanGainAbs]" value="<?= !empty($newControl['CanGainAbs']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanGainRel]" value="<?= !empty($newControl['CanGainRel']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanGainCon]" value="<?= !empty($newControl['CanGainCon']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinGainRange]" value="<?= $newControl['MinGainRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxGainRange]" value="<?= $newControl['MaxGainRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinGainStep]" value="<?= $newControl['MinGainStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxGainStep]" value="<?= $newControl['MaxGainStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasGainSpeed]" value="<?= !empty($newControl['HasGainSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinGainSpeed]" value="<?= $newControl['MinGainSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxGainSpeed]" value="<?= $newControl['MaxGainSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'white' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[CanWhite]" value="<?= !empty($newControl['CanWhite']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanAutoWhite]" value="<?= !empty($newControl['CanAutoWhite']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanWhiteAbs]" value="<?= !empty($newControl['CanWhiteAbs']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanWhiteRel]" value="<?= !empty($newControl['CanWhiteRel']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanWhiteCon]" value="<?= !empty($newControl['CanWhiteCon']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinWhiteRange]" value="<?= $newControl['MinWhiteRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxWhiteRange]" value="<?= $newControl['MaxWhiteRange'] ?>"/>
|
||||
<input type="hidden" name="newControl[MinWhiteStep]" value="<?= $newControl['MinWhiteStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxWhiteStep]" value="<?= $newControl['MaxWhiteStep'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasWhiteSpeed]" value="<?= !empty($newControl['HasWhiteSpeed']) ?>"/>
|
||||
<input type="hidden" name="newControl[MinWhiteSpeed]" value="<?= $newControl['MinWhiteSpeed'] ?>"/>
|
||||
<input type="hidden" name="newControl[MaxWhiteSpeed]" value="<?= $newControl['MaxWhiteSpeed'] ?>"/>
|
||||
<?php
|
||||
}
|
||||
if ( $tab != 'presets' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="newControl[HasPresets]" value="<?= !empty($newControl['HasPresets']) ?>"/>
|
||||
<input type="hidden" name="newControl[NumPresets]" value="<?= $newControl['NumPresets'] ?>"/>
|
||||
<input type="hidden" name="newControl[HasHomePreset]" value="<?= !empty($newControl['HasHomePreset']) ?>"/>
|
||||
<input type="hidden" name="newControl[CanSetPresets]" value="<?= !empty($newControl['CanSetPresets']) ?>"/>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<tbody>
|
||||
<?php
|
||||
switch ( $tab )
|
||||
{
|
||||
case 'main' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['Name'] ?></th><td><input type="text" name="newControl[Name]" value="<?= validHtmlStr($newControl['Name']) ?>" size="24"/></td></tr>
|
||||
<?php
|
||||
$types = array( 'Local'=>$SLANG['Local'], 'Remote'=>$SLANG['Remote'], 'Ffmpeg'=>$SLANG['Ffmpeg'], 'Libvlc'=>$SLANG['Libvlc'], 'cURL'=>"cURL");
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['Type'] ?></th><td><?= buildSelect( "newControl[Type]", $types ); ?></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['Protocol'] ?></th><td><input type="text" name="newControl[Protocol]" value="<?= validHtmlStr($newControl['Protocol']) ?>" size="24"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanWake'] ?></th><td><input type="checkbox" name="newControl[CanWake]" value="1"<?php if ( !empty($newControl['CanWake']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanSleep'] ?></th><td><input type="checkbox" name="newControl[CanSleep]" value="1"<?php if ( !empty($newControl['CanSleep']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanReset'] ?></th><td><input type="checkbox" name="newControl[CanReset]" value="1"<?php if ( !empty($newControl['CanReset']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'move' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanMove'] ?></th><td><input type="checkbox" name="newControl[CanMove]" value="1"<?php if ( !empty($newControl['CanMove']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanMoveDiag'] ?></th><td><input type="checkbox" name="newControl[CanMoveDiag]" value="1"<?php if ( !empty($newControl['CanMoveDiag']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanMoveMap'] ?></th><td><input type="checkbox" name="newControl[CanMoveMap]" value="1"<?php if ( !empty($newControl['CanMoveMap']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanMoveAbs'] ?></th><td><input type="checkbox" name="newControl[CanMoveAbs]" value="1"<?php if ( !empty($newControl['CanMoveAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanMoveRel'] ?></th><td><input type="checkbox" name="newControl[CanMoveRel]" value="1"<?php if ( !empty($newControl['CanMoveRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanMoveCon'] ?></th><td><input type="checkbox" name="newControl[CanMoveCon]" value="1"<?php if ( !empty($newControl['CanMoveCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'pan' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanPan'] ?></th><td><input type="checkbox" name="newControl[CanPan]" value="1"<?php if ( !empty($newControl['CanPan']) ) { ?> checked="checked"<?php } ?>></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinPanRange'] ?></th><td><input type="text" name="newControl[MinPanRange]" value="<?= $newControl['MinPanRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxPanRange'] ?></th><td><input type="text" name="newControl[MaxPanRange]" value="<?= $newControl['MaxPanRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinPanStep'] ?></th><td><input type="text" name="newControl[MinPanStep]" value="<?= $newControl['MinPanStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxPanStep'] ?></th><td><input type="text" name="newControl[MaxPanStep]" value="<?= $newControl['MaxPanStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasPanSpeed'] ?></th><td><input type="checkbox" name="newControl[HasPanSpeed]" value="1"<?php if ( !empty($newControl['HasPanSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinPanSpeed'] ?></th><td><input type="text" name="newControl[MinPanSpeed]" value="<?= $newControl['MinPanSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxPanSpeed'] ?></th><td><input type="text" name="newControl[MaxPanSpeed]" value="<?= $newControl['MaxPanSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasTurboPan'] ?></th><td><input type="checkbox" name="newControl[HasTurboPan]" value="1"<?php if ( !empty($newControl['HasTurboPan']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['TurboPanSpeed'] ?></th><td><input type="text" name="newControl[TurboPanSpeed]" value="<?= $newControl['TurboPanSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'tilt' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanTilt'] ?></th><td><input type="checkbox" name="newControl[CanTilt]" value="1"<?php if ( !empty($newControl['CanTilt']) ) { ?> checked="checked"<?php } ?>></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinTiltRange'] ?></th><td><input type="text" name="newControl[MinTiltRange]" value="<?= $newControl['MinTiltRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxTiltRange'] ?></th><td><input type="text" name="newControl[MaxTiltRange]" value="<?= $newControl['MaxTiltRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinTiltStep'] ?></th><td><input type="text" name="newControl[MinTiltStep]" value="<?= $newControl['MinTiltStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxTiltStep'] ?></th><td><input type="text" name="newControl[MaxTiltStep]" value="<?= $newControl['MaxTiltStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasTiltSpeed'] ?></th><td><input type="checkbox" name="newControl[HasTiltSpeed]" value="1"<?php if ( !empty($newControl['HasTiltSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinTiltSpeed'] ?></th><td><input type="text" name="newControl[MinTiltSpeed]" value="<?= $newControl['MinTiltSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxTiltSpeed'] ?></th><td><input type="text" name="newControl[MaxTiltSpeed]" value="<?= $newControl['MaxTiltSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasTurboTilt'] ?></th><td><input type="checkbox" name="newControl[HasTurboTilt]" value="1"<?php if ( !empty($newControl['HasTurboTilt']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['TurboTiltSpeed'] ?></th><td><input type="text" name="newControl[TurboTiltSpeed]" value="<?= $newControl['TurboTiltSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'zoom' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanZoom'] ?></th><td><input type="checkbox" name="newControl[CanZoom]" value="1"<?php if ( !empty($newControl['CanZoom']) ) { ?> checked="checked"<?php } ?>></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanZoomAbs'] ?></th><td><input type="checkbox" name="newControl[CanZoomAbs]" value="1"<?php if ( !empty($newControl['CanZoomAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanZoomRel'] ?></th><td><input type="checkbox" name="newControl[CanZoomRel]" value="1"<?php if ( !empty($newControl['CanZoomRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanZoomCon'] ?></th><td><input type="checkbox" name="newControl[CanZoomCon]" value="1"<?php if ( !empty($newControl['CanZoomCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinZoomRange'] ?></th><td><input type="text" name="newControl[MinZoomRange]" value="<?= $newControl['MinZoomRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxZoomRange'] ?></th><td><input type="text" name="newControl[MaxZoomRange]" value="<?= $newControl['MaxZoomRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinZoomStep'] ?></th><td><input type="text" name="newControl[MinZoomStep]" value="<?= $newControl['MinZoomStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxZoomStep'] ?></th><td><input type="text" name="newControl[MaxZoomStep]" value="<?= $newControl['MaxZoomStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasZoomSpeed'] ?></th><td><input type="checkbox" name="newControl[HasZoomSpeed]" value="1"<?php if ( !empty($newControl['HasZoomSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinZoomSpeed'] ?></th><td><input type="text" name="newControl[MinZoomSpeed]" value="<?= $newControl['MinZoomSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxZoomSpeed'] ?></th><td><input type="text" name="newControl[MaxZoomSpeed]" value="<?= $newControl['MaxZoomSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'focus' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanFocus'] ?></th><td><input type="checkbox" name="newControl[CanFocus]" value="1"<?php if ( !empty($newControl['CanFocus']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanAutoFocus'] ?></th><td><input type="checkbox" name="newControl[CanAutoFocus]" value="1"<?php if ( !empty($newControl['CanAutoFocus']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanFocusAbs'] ?></th><td><input type="checkbox" name="newControl[CanFocusAbs]" value="1"<?php if ( !empty($newControl['CanFocusAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanFocusRel'] ?></th><td><input type="checkbox" name="newControl[CanFocusRel]" value="1"<?php if ( !empty($newControl['CanFocusRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanFocusCon'] ?></th><td><input type="checkbox" name="newControl[CanFocusCon]" value="1"<?php if ( !empty($newControl['CanFocusCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinFocusRange'] ?></th><td><input type="text" name="newControl[MinFocusRange]" value="<?= $newControl['MinFocusRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxFocusRange'] ?></th><td><input type="text" name="newControl[MaxFocusRange]" value="<?= $newControl['MaxFocusRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinFocusStep'] ?></th><td><input type="text" name="newControl[MinFocusStep]" value="<?= $newControl['MinFocusStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxFocusStep'] ?></th><td><input type="text" name="newControl[MaxFocusStep]" value="<?= $newControl['MaxFocusStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasFocusSpeed'] ?></th><td><input type="checkbox" name="newControl[HasFocusSpeed]" value="1"<?php if ( !empty($newControl['HasFocusSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinFocusSpeed'] ?></th><td><input type="text" name="newControl[MinFocusSpeed]" value="<?= $newControl['MinFocusSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxFocusSpeed'] ?></th><td><input type="text" name="newControl[MaxFocusSpeed]" value="<?= $newControl['MaxFocusSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'iris' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanIris'] ?></th><td><input type="checkbox" name="newControl[CanIris]" value="1"<?php if ( !empty($newControl['CanIris']) ) { ?> checked="checked"<?php } ?>></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanAutoIris'] ?></th><td><input type="checkbox" name="newControl[CanAutoIris]" value="1"<?php if ( !empty($newControl['CanAutoIris']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanIrisAbs'] ?></th><td><input type="checkbox" name="newControl[CanIrisAbs]" value="1"<?php if ( !empty($newControl['CanIrisAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanIrisRel'] ?></th><td><input type="checkbox" name="newControl[CanIrisRel]" value="1"<?php if ( !empty($newControl['CanIrisRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanIrisCon'] ?></th><td><input type="checkbox" name="newControl[CanIrisCon]" value="1"<?php if ( !empty($newControl['CanIrisCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinIrisRange'] ?></th><td><input type="text" name="newControl[MinIrisRange]" value="<?= $newControl['MinIrisRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxIrisRange'] ?></th><td><input type="text" name="newControl[MaxIrisRange]" value="<?= $newControl['MaxIrisRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinIrisStep'] ?></th><td><input type="text" name="newControl[MinIrisStep]" value="<?= $newControl['MinIrisStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxIrisStep'] ?></th><td><input type="text" name="newControl[MaxIrisStep]" value="<?= $newControl['MaxIrisStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasIrisSpeed'] ?></th><td><input type="checkbox" name="newControl[HasIrisSpeed]" value="1"<?php if ( !empty($newControl['HasIrisSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinIrisSpeed'] ?></th><td><input type="text" name="newControl[MinIrisSpeed]" value="<?= $newControl['MinIrisSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxIrisSpeed'] ?></th><td><input type="text" name="newControl[MaxIrisSpeed]" value="<?= $newControl['MaxIrisSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'gain' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanGain'] ?></th><td><input type="checkbox" name="newControl[CanGain]" value="1"<?php if ( !empty($newControl['CanGain']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanAutoGain'] ?></th><td><input type="checkbox" name="newControl[CanAutoGain]" value="1"<?php if ( !empty($newControl['CanAutoGain']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanGainAbs'] ?></th><td><input type="checkbox" name="newControl[CanGainAbs]" value="1"<?php if ( !empty($newControl['CanGainAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanGainRel'] ?></th><td><input type="checkbox" name="newControl[CanGainRel]" value="1"<?php if ( !empty($newControl['CanGainRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanGainCon'] ?></th><td><input type="checkbox" name="newControl[CanGainCon]" value="1"<?php if ( !empty($newControl['CanGainCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinGainRange'] ?></th><td><input type="text" name="newControl[MinGainRange]" value="<?= $newControl['MinGainRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxGainRange'] ?></th><td><input type="text" name="newControl[MaxGainRange]" value="<?= $newControl['MaxGainRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinGainStep'] ?></th><td><input type="text" name="newControl[MinGainStep]" value="<?= $newControl['MinGainStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxGainStep'] ?></th><td><input type="text" name="newControl[MaxGainStep]" value="<?= $newControl['MaxGainStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasGainSpeed'] ?></th><td><input type="checkbox" name="newControl[HasGainSpeed]" value="1"<?php if ( !empty($newControl['HasGainSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinGainSpeed'] ?></th><td><input type="text" name="newControl[MinGainSpeed]" value="<?= $newControl['MinGainSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxGainSpeed'] ?></th><td><input type="text" name="newControl[MaxGainSpeed]" value="<?= $newControl['MaxGainSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'white' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['CanWhite'] ?></th><td><input type="checkbox" name="newControl[CanWhite]" value="1"<?php if ( !empty($newControl['CanWhite']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanAutoWhite'] ?></th><td><input type="checkbox" name="newControl[CanAutoWhite]" value="1"<?php if ( !empty($newControl['CanAutoWhite']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanWhiteAbs'] ?></th><td><input type="checkbox" name="newControl[CanWhiteAbs]" value="1"<?php if ( !empty($newControl['CanWhiteAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanWhiteRel'] ?></th><td><input type="checkbox" name="newControl[CanWhiteRel]" value="1"<?php if ( !empty($newControl['CanWhiteRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanWhiteCon'] ?></th><td><input type="checkbox" name="newControl[CanWhiteCon]" value="1"<?php if ( !empty($newControl['CanWhiteCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinWhiteRange'] ?></th><td><input type="text" name="newControl[MinWhiteRange]" value="<?= $newControl['MinWhiteRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxWhiteRange'] ?></th><td><input type="text" name="newControl[MaxWhiteRange]" value="<?= $newControl['MaxWhiteRange'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinWhiteStep'] ?></th><td><input type="text" name="newControl[MinWhiteStep]" value="<?= $newControl['MinWhiteStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxWhiteStep'] ?></th><td><input type="text" name="newControl[MaxWhiteStep]" value="<?= $newControl['MaxWhiteStep'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasWhiteSpeed'] ?></th><td><input type="checkbox" name="newControl[HasWhiteSpeed]" value="1"<?php if ( !empty($newControl['HasWhiteSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MinWhiteSpeed'] ?></th><td><input type="text" name="newControl[MinWhiteSpeed]" value="<?= $newControl['MinWhiteSpeed'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['MaxWhiteSpeed'] ?></th><td><input type="text" name="newControl[MaxWhiteSpeed]" value="<?= $newControl['MaxWhiteSpeed'] ?>" size="8"/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
case 'presets' :
|
||||
{
|
||||
?>
|
||||
<tr><th scope="row"><?= $SLANG['HasPresets'] ?></th><td><input type="checkbox" name="newControl[HasPresets]" value="1"<?php if ( !empty($newControl['HasPresets']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['NumPresets'] ?></th><td><input type="text" name="newControl[NumPresets]" value="<?= $newControl['NumPresets'] ?>" size="8"/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['HasHomePreset'] ?></th><td><input type="checkbox" name="newControl[HasHomePreset]" value="1"<?php if ( !empty($newControl['HasHomePreset']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<tr><th scope="row"><?= $SLANG['CanSetPresets'] ?></th><td><input type="checkbox" name="newControl[CanSetPresets]" value="1"<?php if ( !empty($newControl['CanSetPresets']) ) { ?> checked="checked"<?php } ?>/></td></tr>
|
||||
<?php
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"<?php if ( !canEdit( 'Control' ) ) { ?> disabled="disabled"<?php } ?>/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web controls file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Control' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$controls = dbFetchAll( 'SELECT * FROM Controls ORDER BY Id' );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['ControlCaps'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= $SLANG['ControlCaps'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>" onsubmit="return( confirmDelete( 'Warning, deleting a control will reset all monitors that use it to be uncontrollable.\nAre you sure you wish to delete?' ) );">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="action" value="delete"/>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="colName"><?= $SLANG['Name'] ?></th>
|
||||
<th class="colType"><?= $SLANG['Type'] ?></th>
|
||||
<th class="colProtocol"><?= $SLANG['Protocol'] ?></th>
|
||||
<th class="colCanMove"><?= $SLANG['CanMove'] ?></th>
|
||||
<th class="colCanZoom"><?= $SLANG['CanZoom'] ?></th>
|
||||
<th class="colCanFocus"><?= $SLANG['CanFocus'] ?></th>
|
||||
<th class="colCanIris"><?= $SLANG['CanIris'] ?></th>
|
||||
<th class="colCanWhiteBal"><?= $SLANG['CanWhiteBal'] ?></th>
|
||||
<th class="colHasPresets"><?= $SLANG['HasPresets'] ?></th>
|
||||
<th class="colMark"><?= $SLANG['Mark'] ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
foreach( $controls as $control )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td class="colName"><?= makePopupLink( '?view=controlcap&cid='.$control['Id'], 'zmControlCap', 'controlcap', $control['Name'], canView( 'Control' ) ) ?></td>
|
||||
<td class="colType"><?= $control['Type'] ?></td>
|
||||
<td class="colProtocol"><?= $control['Protocol'] ?></td>
|
||||
<td class="colCanMove"><?= $control['CanMove']?$SLANG['Yes']:$SLANG['No'] ?></td>
|
||||
<td class="colCanZoom"><?= $control['CanZoom']?$SLANG['Yes']:$SLANG['No'] ?></td>
|
||||
<td class="colCanFocus"><?= $control['CanFocus']?$SLANG['Yes']:$SLANG['No'] ?></td>
|
||||
<td class="colCanIris"><?= $control['CanIris']?$SLANG['Yes']:$SLANG['No'] ?></td>
|
||||
<td class="colCanWhiteBal"><?= $control['CanWhite']?$SLANG['Yes']:$SLANG['No'] ?></td>
|
||||
<td class="colHasPresets"><?= $control['HasHomePreset']?'H':'' ?><?= $control['HasPresets']?$control['NumPresets']:'0' ?></td>
|
||||
<td class="colMark"><input type="checkbox" name="markCids[]" value="<?= $control['Id'] ?>" onclick="configureDeleteButton( this );"<?php if ( !canEdit( 'Control' ) ) {?> disabled="disabled"<?php } ?>/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="button" value="<?= $SLANG['AddNewControl'] ?>" onclick="createPopup( '?view=controlcap', 'zmControlCap', 'controlcap' );"<?php if ( !canEdit( 'Control' ) ) {?> disabled="disabled"<?php } ?>/><input type="submit" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" disabled="disabled"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web run state view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'Monitors' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$monitor = dbFetchOne( 'SELECT C.*,M.* FROM Monitors AS M INNER JOIN Controls AS C ON (M.ControlId = C.Id ) WHERE M.Id = ?', NULL, array( $_REQUEST['mid']) );
|
||||
|
||||
$labels = array();
|
||||
foreach( dbFetchAll( 'SELECT * FROM ControlPresets WHERE MonitorId = ?', NULL, array( $monitor['Id'] ) ) as $row ) {
|
||||
$labels[$row['Preset']] = $row['Label'];
|
||||
}
|
||||
|
||||
$presets = array();
|
||||
for ( $i = 1; $i <= $monitor['NumPresets']; $i++ )
|
||||
{
|
||||
$presets[$i] = $SLANG['Preset']." ".$i;
|
||||
if ( !empty($labels[$i]) )
|
||||
{
|
||||
$presets[$i] .= " (".validHtmlStr($labels[$i]).")";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['SetPreset'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['SetPreset'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="mid" value="<?= $monitor['Id'] ?>"/>
|
||||
<input type="hidden" name="action" value="control"/>
|
||||
<input type="hidden" name="control" value="presetSet"/>
|
||||
<input type="hidden" name="showControls" value="1"/>
|
||||
<p><?= buildSelect( "preset", $presets, "updateLabel()" ) ?></p>
|
||||
<p><label for="newLabel"><?= $SLANG['NewLabel'] ?></label><input type="text" name="newLabel" id="newLabel" value="" size="16"/></p>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,31 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/views/css
|
||||
|
||||
dist_web_DATA = \
|
||||
console.css \
|
||||
controlcaps.css \
|
||||
control.css \
|
||||
devices.css \
|
||||
event.css \
|
||||
events.css \
|
||||
export.css \
|
||||
filter.css \
|
||||
frame.css \
|
||||
frames.css \
|
||||
groups.css \
|
||||
log.css \
|
||||
monitor.css \
|
||||
montage_2wide.css \
|
||||
montage_3wide50enlarge.css \
|
||||
montage_3wide.css \
|
||||
montage_4wide.css \
|
||||
montage.css \
|
||||
montage_freeform.css \
|
||||
options.css \
|
||||
stats.css \
|
||||
timeline.css \
|
||||
timeline.css.php \
|
||||
video.css \
|
||||
watch.css \
|
||||
zone.css
|
|
@ -0,0 +1,97 @@
|
|||
#systemTime {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#title {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#systemStats {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#monitorSummary {
|
||||
float: left;
|
||||
text-align: left;
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
#devices {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#loginBandwidth {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
#cycleMontage {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#options {
|
||||
float: right;
|
||||
text-align: right;
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
#consoleTable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#consoleTable tr.highlight {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
#consoleTable thead th {
|
||||
padding-bottom: 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#consoleTable tfoot td {
|
||||
padding-top: 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#consoleTable th,td {
|
||||
height: 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#consoleTable .colOrder {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#consoleTable .colMark {
|
||||
width: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#consoleTable .colEvents {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#consoleTable .colZones {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#consoleTable .colLeftButtons {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#consoleTable .colLeftButtons input {
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
#consoleTable .colRightButtons {
|
||||
text-align: right;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
#consoleTable .colRightButtons input {
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
@import url(../../css/control.css);
|
|
@ -0,0 +1,3 @@
|
|||
#content table.major .colCanMove, #content table.major .colCanZoom, #content table.major .colCanFocus, #content table.major .colCanIris, #content table.major .colCanWhiteBal, #content table.major .colHasPresets {
|
||||
text-align: center;
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
input.set {
|
||||
border: 1px #7F7FB2 dashed;
|
||||
}
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
#dataBar {
|
||||
width: 100%;
|
||||
margin: 2px auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#dataBar #dataTable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#dataBar #dataTable td {
|
||||
text-align: center;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#menuBar1 {
|
||||
width: 100%;
|
||||
height: 1.5em;
|
||||
padding: 3px 0;
|
||||
text-align: center;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#menuBar1 #nameControl {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#menuBar1 #nameControl #eventName {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
#menuBar1 #replayControl {
|
||||
float: right;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
#menuBar1 #scaleControl {
|
||||
float: right;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
#menuBar2 {
|
||||
width: 100%;
|
||||
height: 1.2em;
|
||||
padding: 3px 0;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
#menuBar2 div {
|
||||
text-align: left;
|
||||
float: left;
|
||||
padding: 0 12px;
|
||||
}
|
||||
|
||||
#menuBar2 #closeWindow {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#imageFeed {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorStatus {
|
||||
width: 100%;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 2px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorStatus #enableAlarms {
|
||||
position: absolute;
|
||||
left: 4px;
|
||||
}
|
||||
|
||||
#monitorStatus #forceAlarm {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
}
|
||||
|
||||
#monitorStatus #monitorState {
|
||||
}
|
||||
|
||||
#dvrControls {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 2px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#dvrControls input {
|
||||
height: 20px;
|
||||
width: 28px;
|
||||
padding-bottom: 3px;
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
#dvrControls input[disabled=disabled] {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
|
||||
#dvrControls input.active {
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
#dvrControls input.inactive {
|
||||
border: 1px solid green;
|
||||
}
|
||||
|
||||
#dvrControls input.unavail {
|
||||
border: 1px solid red;
|
||||
}
|
||||
|
||||
#replayStatus {
|
||||
margin: 3px 0 2px;
|
||||
text-align: center;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#replayStatus > span {
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
#progressBar {
|
||||
position: relative;
|
||||
border: 1px solid #666666;
|
||||
height: 15px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#progressBar .progressBox {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 15px;
|
||||
background: #eeeeee;
|
||||
border-left: 1px solid #999999;
|
||||
}
|
||||
|
||||
#progressBar .complete {
|
||||
background: #aaaaaa;
|
||||
}
|
||||
|
||||
#eventStills {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#eventThumbsPanel {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin: 4px auto;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#eventThumbs {
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
#eventThumbs img {
|
||||
height: 25px; /* HACK - Although this is pixels it will be interpreted as a scale %ge, so 25px = 25% scaling for thumbnails */
|
||||
margin: 2px;
|
||||
background-color: #dddddd;
|
||||
}
|
||||
|
||||
#eventThumbs img.placeholder {
|
||||
/* width: 100px; */
|
||||
}
|
||||
|
||||
#eventThumbs img.selected {
|
||||
}
|
||||
|
||||
#eventImagePanel {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
#eventImageFrame {
|
||||
border: 2px solid gray;
|
||||
background-color: white;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
#eventImage {
|
||||
}
|
||||
|
||||
#eventImageBar {
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
#eventImageStats {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#eventImageData {
|
||||
margin: 0 auto;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
#eventImageClose {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#eventImageNav {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#eventImageNav input {
|
||||
width: 32px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
#thumbsSliderPanel {
|
||||
width: 400px;
|
||||
margin: 4px auto 0;
|
||||
background: #888888;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
#thumbsSlider {
|
||||
width: 400px;
|
||||
height: 10px;
|
||||
background: #dddddd;
|
||||
}
|
||||
|
||||
#thumbsKnob {
|
||||
width: 8px;
|
||||
height: 10px;
|
||||
background-color: #444444;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#controls {
|
||||
height: 16px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#controls a {
|
||||
width: 32%;
|
||||
}
|
||||
|
||||
#controls #refreshLink {
|
||||
position: absolute;
|
||||
left: 0%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#controls #filterLink {
|
||||
position: absolute;
|
||||
left: 34%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#controls #timelineLink {
|
||||
position: absolute;
|
||||
left: 68%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#contentTable.major .colTime {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#contentTable.major .colId, #contentTable.major .colDuration, #contentTable.major .colFrames, #contentTable.major .colAlarmFrames, #contentTable.major .colTotScore, #contentTable.major .colMaxScore, #contentTable.major .colAvgScore {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#contentTable.major td.colDuration {
|
||||
text-align: right;
|
||||
padding-right: 8px;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#contentTable + input {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
#contentTable th, #contentTable td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#exportProgress {
|
||||
margin: 8px auto 4px;
|
||||
}
|
||||
|
||||
#downloadLink {
|
||||
margin-top: 8px;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#filterSelector {
|
||||
}
|
||||
|
||||
table.filterTable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#fieldsTable td {
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
#fieldsTable input[type=button] {
|
||||
width: 1.6em;
|
||||
margin-left: 2px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#sortTable input[type=text] {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
#actionsTable input[type=text] {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
#controls {
|
||||
width: 80%;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#controls a {
|
||||
width: 40px;
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
#firstLink {
|
||||
position: absolute;
|
||||
left: 13%;
|
||||
}
|
||||
|
||||
#prevLink {
|
||||
position: absolute;
|
||||
left: 37%;
|
||||
}
|
||||
|
||||
#nextLink {
|
||||
position: absolute;
|
||||
left: 63%;
|
||||
}
|
||||
|
||||
#lastLink {
|
||||
position: absolute;
|
||||
left: 87%;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#contentTable.major .colId, #contentTable.major .colType, #contentTable.major .colTimeStamp, #contentTable.major .colTimeDelta, #contentTable.major .colScore {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
tr.alarm {
|
||||
background-color: #fa8072;
|
||||
}
|
||||
|
||||
tr.bulk {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
|
||||
tr.normal {
|
||||
background-color: #ffffff;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#contentTable .colSelect {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#contentTable .colSelect input {
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
#logSummary {
|
||||
margin: 4px auto 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#logSummary tr {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#logSummary td {
|
||||
border: 1px solid #7f7fb2;
|
||||
padding: 0 6px;
|
||||
text-align: center;
|
||||
font-size: 10px;
|
||||
line-height: 15px;
|
||||
}
|
||||
|
||||
tr.log-fat td {
|
||||
background-color:#ffcccc;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
tr.log-err td {
|
||||
background-color:#ffcccc;
|
||||
}
|
||||
|
||||
tr.log-war td {
|
||||
background-color: #ffe4b5;
|
||||
}
|
||||
|
||||
tr.log-dbg td {
|
||||
color: #666666;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#exportLog label {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#exportLog input[type=radio] {
|
||||
margin-right: 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#exportError {
|
||||
display: none;
|
||||
color: #dc143c;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
#exportErrorText {
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
.swatch {
|
||||
border: 1px solid black;
|
||||
margin-left: 3px;
|
||||
padding: 0px;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
#header {
|
||||
width: 99%;
|
||||
}
|
||||
|
||||
#layout {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: 99%;
|
||||
}
|
||||
|
||||
#monitors .alarm {
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
#monitors .alert {
|
||||
color: #ffa500;
|
||||
}
|
||||
|
||||
#monitors .imageFeed {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#monitors .imageFeed img.idle {
|
||||
border: 2px solid #ffffff;
|
||||
}
|
||||
|
||||
#monitors .imageFeed img.alarm {
|
||||
border: 2px solid #ff0000;
|
||||
}
|
||||
|
||||
#monitors .imageFeed img.alert {
|
||||
border: 2px solid #ffa500;
|
||||
}
|
||||
|
||||
#monitors .monitorState {
|
||||
margin: 2px auto;
|
||||
text-align: center;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#monitors {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame {
|
||||
padding: 1px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#monitors .monitor {
|
||||
}
|
||||
|
||||
#monitorFrame0, #monitorFrame2, #monitorFrame4, #monitorFrame6, #monitorFrame8, #monitorFrame10, #monitorFrame12, #monitorFrame14 {
|
||||
width: 49%;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#monitor0, #monitor2, #monitor4, #monitor6, #monitor8, #monitor10, #monitor12, #monitor14 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#monitorFrame1, #monitorFrame3, #monitorFrame5, #monitorFrame7, #monitorFrame9, #monitorFrame11, #monitorFrame13, #monitorFrame15 {
|
||||
width: 49%;
|
||||
}
|
||||
|
||||
#monitor1, #monitor3, #monitor5, #monitor7, #monitor9, #monitor11, #monitor13, #monitor15 {
|
||||
float: left;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
#monitors {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame {
|
||||
padding: 1px;
|
||||
float: left;
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
#monitors .monitor {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorFrame0, #monitorFrame3, #monitorFrame6, #monitorFrame9, #monitorFrame12, #monitorFrame15 {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#monitor0, #monitor3, #monitor6, #monitor9, #monitor12, #monitor15 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#monitorFrame1, #monitorFrame4, #monitorFrame7, #monitorFrame10, #monitorFrame13, #monitorFrame16 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitor1, #monitor4, #monitor7, #monitor10, #monitor13, #monitor16 {
|
||||
}
|
||||
|
||||
#monitorFrame2, #monitorFrame5, #monitorFrame8, #monitorFrame11, #monitorFrame14, #monitorFrame17 {
|
||||
}
|
||||
|
||||
#monitor2, #monitor5, #monitor8, #monitor11, #monitor14, #monitor17 {
|
||||
float: left;
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
#monitors {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame {
|
||||
float: left;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
#monitors .monitor {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorFrame0, #monitorFrame3, #monitorFrame6, #monitorFrame9, #monitorFrame12, #monitorFrame15 {
|
||||
width: 32%;
|
||||
text-align: right;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#monitor0, #monitor3, #monitor6, #monitor9, #monitor12, #monitor15 {
|
||||
margin-left: auto;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#monitorFrame1, #monitorFrame4, #monitorFrame7, #monitorFrame10, #monitorFrame13, #monitorFrame16 {
|
||||
width: 32%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitor1, #monitor4, #monitor7, #monitor10, #monitor13, #monitor16 {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
#monitorFrame2, #monitorFrame5, #monitorFrame8, #monitorFrame11, #monitorFrame14, #monitorFrame17 {
|
||||
width: 32%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#monitor2, #monitor5, #monitor8, #monitor11, #monitor14, #monitor17 {
|
||||
margin-left: 0;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
#monitors .imageFeed img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame > div.alarm, #monitors .monitorFrame > div.alert {
|
||||
position: absolute;
|
||||
width: 96%;
|
||||
left: 2%;
|
||||
top: 72px;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame > div.alert {
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame > div.alarm {
|
||||
z-index: 200;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame div.alarm, #monitors .monitorFrame div.alert {
|
||||
font-size: 140%;
|
||||
line-height: 160%;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame div.monitorState {
|
||||
text-align: center;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
#monitors {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame {
|
||||
padding: 1px;
|
||||
float: left;
|
||||
width: 24.5%;
|
||||
}
|
||||
|
||||
#monitors .monitor {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorFrame0, #monitorFrame4, #monitorFrame8, #monitorFrame12, #monitorFrame16, #monitorFrame20 {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#monitor0, #monitor4, #monitor8, #monitor12, #monitor16, #monitor20 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#monitorFrame1, #monitorFrame5, #monitorFrame9, #monitorFrame13, #monitorFrame17, #monitorFrame21 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitor1, #monitor5, #monitor9, #monitor13, #monitor17, #monitor21 {
|
||||
}
|
||||
|
||||
#monitorFrame2, #monitorFrame6, #monitorFrame10, #monitorFrame14, #monitorFrame18, #monitorFrame22 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitor2, #monitor6, #monitor10, #monitor14, #monitor18, #monitor22 {
|
||||
}
|
||||
|
||||
#monitorFrame3, #monitorFrame7, #monitorFrame11, #monitorFrame15, #monitorFrame19, #monitorFrame23 {
|
||||
}
|
||||
|
||||
#monitor3, #monitor7, #monitor11, #monitor15, #monitor19, #monitor23 {
|
||||
float: left;
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
#monitors {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitors .monitorFrame {
|
||||
float: left;
|
||||
padding: 1px;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
input.small {
|
||||
width: 6em;
|
||||
}
|
||||
|
||||
input.medium {
|
||||
width: 9em;
|
||||
}
|
||||
|
||||
input.large {
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
#contentTable.optionTable th, #contentTable.optionTable td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#contentTable.userTable th, #contentTable.userTable td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#contentTable.userTable .colMonitor, #contentTable.userTable .colUsername {
|
||||
text-align: left;
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#settingsPanel {
|
||||
float: left;
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
#pluginSettings {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#pluginSettings th, #pluginSettings td {
|
||||
border: 1px solid #7f7fb2;
|
||||
padding: 3px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#pluginSettings th[scope=row] {
|
||||
padding: 4px 3px 3px;
|
||||
vertical-align: top;
|
||||
white-space: nowrap;
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
#contentTable.major .colZone, #contentTable.major .colPixelDiff, #contentTable.major .colAlarmPx, #contentTable.major .colFilterPx, #contentTable.major .colBlobPx, #contentTable.major .colBlobs, #contentTable.major .colBlobSizes, #contentTable.major .colAlarmLimits, #contentTable.major .colScore {
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#contentTable.major .rowNoStats {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
}
|
|
@ -0,0 +1,222 @@
|
|||
#content {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
border: 1px solid #666666;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#title {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
color: #016A9D;
|
||||
height: 30px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
#listLink {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 20px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
#closeLink {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 20px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
#topPanel {
|
||||
position: relative;
|
||||
height: 220px;
|
||||
margin: 4px auto 6px;
|
||||
}
|
||||
|
||||
#topPanel #imagePanel
|
||||
{
|
||||
width: 50%;
|
||||
float: left;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#topPanel #image {
|
||||
float: right;
|
||||
margin: 0 auto;
|
||||
width: 90%;
|
||||
text-align: right;
|
||||
margin-right: 2px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #c8c8c8;
|
||||
}
|
||||
|
||||
#topPanel #image img {
|
||||
float: left;
|
||||
top: 0px;
|
||||
background-color: #f8f8f8;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#topPanel #dataPanel {
|
||||
width: 45%;
|
||||
float: left;
|
||||
text-align: left;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
#topPanel #textPanel {
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
height: 140px;
|
||||
margin: 0 auto;
|
||||
color: #016A9D;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
line-height: 14px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #c8c8c8;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#topPanel #navPanel {
|
||||
width: 100%;
|
||||
height: 70px;
|
||||
margin: 4px auto;
|
||||
}
|
||||
|
||||
#topPanel #navPanel input {
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #c8c8c8;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#chartPanel {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#chartPanel #chart {
|
||||
position: relative;
|
||||
border: 1px solid black;
|
||||
margin: 0 auto;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
#chartPanel #activity {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
left: 0px;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
|
||||
#chartPanel #activity div.activity {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
z-index: 3;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
#chartPanel .events {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
left: 0px;
|
||||
background-color: #fcfcfc;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
#chartPanel .event {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
#chartLabels {
|
||||
margin: 25px auto 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#range {
|
||||
width: 30%;
|
||||
margin: 0 auto;
|
||||
color: #016A9D;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
#key {
|
||||
float: right;
|
||||
margin-top: -4px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
span.keyEntry {
|
||||
}
|
||||
|
||||
img.keyBox {
|
||||
position: relative;
|
||||
border: 1px solid black;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
top: 4px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
div.majGridX {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0px;
|
||||
width: 1px;
|
||||
border-left: dotted 1px #cccccc;
|
||||
}
|
||||
|
||||
div.majTickX {
|
||||
position: absolute;
|
||||
bottom: -7px;
|
||||
width: 1px;
|
||||
height: 7px;
|
||||
border-left: solid 1px black;
|
||||
}
|
||||
|
||||
div.majLabelX {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
bottom: -20px;
|
||||
width: 50px;
|
||||
font-size: 9px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
div.majGridY {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
left: 0px;
|
||||
height: 1px;
|
||||
border-top: dotted 1px #cccccc;
|
||||
}
|
||||
|
||||
div.majTickY {
|
||||
position: absolute;
|
||||
left: -7px;
|
||||
height: 1px;
|
||||
width: 7px;
|
||||
border-top: solid 1px black;
|
||||
}
|
||||
|
||||
div.majLabelY {
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
left: -30px;
|
||||
width: 20px;
|
||||
font-size: 9px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
div.zoom {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
bottom: 0px;
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
.chartSize {
|
||||
width: <?= $chart['width'] ?>px;
|
||||
height: <?= $chart['height'] ?>px;
|
||||
}
|
||||
|
||||
.graphSize {
|
||||
width: <?= $chart['graph']['width'] ?>px;
|
||||
height: <?= $chart['graph']['height'] ?>px;
|
||||
}
|
||||
|
||||
.graphHeight {
|
||||
height: <?= $chart['graph']['height'] ?>px;
|
||||
}
|
||||
|
||||
.graphWidth {
|
||||
width: <?= $chart['graph']['width'] ?>px;
|
||||
}
|
||||
|
||||
.imageSize {
|
||||
width: <?= $chart['image']['width'] ?>px;
|
||||
height: <?= $chart['image']['height'] ?>px;
|
||||
}
|
||||
|
||||
.imageHeight {
|
||||
height: <?= $chart['image']['height'] ?>px;
|
||||
}
|
||||
|
||||
.activitySize {
|
||||
width: <?= $chart['graph']['width'] ?>px;
|
||||
height: <?= $chart['graph']['activityHeight'] ?>px;
|
||||
}
|
||||
|
||||
.eventsSize {
|
||||
width: <?= $chart['graph']['width'] ?>px;
|
||||
height: <?= $chart['graph']['eventBarHeight'] ?>px;
|
||||
}
|
||||
|
||||
.eventsHeight {
|
||||
height: <?= $chart['graph']['eventBarHeight'] ?>px;
|
||||
}
|
||||
<?php
|
||||
if ( $mode == "overlay" )
|
||||
{
|
||||
foreach ( array_keys($monitorIds) as $monitorId )
|
||||
{
|
||||
?>
|
||||
#chartPanel .eventsPos<?= $monitorId ?> {
|
||||
top: <?= $chart['eventBars'][$monitorId]['top'] ?>px;
|
||||
}
|
||||
<?php
|
||||
}
|
||||
}
|
||||
elseif ( $mode == "split" )
|
||||
{
|
||||
foreach ( array_keys($monitorIds) as $monitorId )
|
||||
{
|
||||
?>
|
||||
#chartPanel .activityPos<?= $monitorId ?> {
|
||||
top: <?= $char['activityBars'][$monitorId]['top'] ?>px;
|
||||
}
|
||||
|
||||
#chartPanel .eventsPos<?= $monitorId ?> {
|
||||
top: <?= $char['eventBars'][$monitorId]['top'] ?>px;
|
||||
}
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
foreach( array_keys($monEventSlots) as $monitorId )
|
||||
{
|
||||
?>
|
||||
.monitorColour<?= $monitorId ?> {
|
||||
background-color: <?= $monitors[$monitorId]['WebColour'] ?>;
|
||||
}
|
||||
<?php
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,19 @@
|
|||
#contentTable + input {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
#videoProgress {
|
||||
margin: 8px auto 4px;
|
||||
}
|
||||
|
||||
#videoFilesHeader {
|
||||
margin: 8px auto 4px;
|
||||
}
|
||||
|
||||
#videoNoFiles {
|
||||
margin: 4px auto;
|
||||
}
|
||||
|
||||
#videoFile {
|
||||
margin-bottom: 6px;
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
@import url(../../css/control.css);
|
||||
|
||||
#menuBar {
|
||||
margin: 6px auto 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#menuBar #monitorName {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#menuBar #closeControl {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#menuBar #menuControls {
|
||||
margin: 0 auto;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
#menuBar #menuControls #controlControl {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#menuBar #menuControls #eventsControl {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#menuBar #menuControls #settingsControl {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#menuBar #menuControls #scaleControl {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#imageFeed{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorStatus {
|
||||
margin: 4px auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#monitorStatus #enableDisableAlarms {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#monitorStatus #forceCancelAlarm {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#monitorStatus #monitorState {
|
||||
}
|
||||
|
||||
#dvrControls {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 2px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#dvrControls input {
|
||||
height: 20px;
|
||||
width: 28px;
|
||||
padding-bottom: 3px;
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
#dvrControls input[disabled] {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
|
||||
#dvrControls input.active {
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
#dvrControls input.inactive {
|
||||
border: 1px solid green;
|
||||
}
|
||||
|
||||
#dvrControls input.unavail {
|
||||
border: 1px solid red;
|
||||
}
|
||||
|
||||
#replayStatus {
|
||||
margin: 3px 0 2px;
|
||||
text-align: center;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#replayStatus > span {
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
#events {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#eventList {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#eventList thead td {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#eventList th, #eventList td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
span.alarm {
|
||||
color: #DC143C;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
span.alert {
|
||||
color: #FF8C00;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#eventList tr.recent {
|
||||
background-color: #B0E0E6;
|
||||
}
|
||||
|
||||
#eventList tr.highlight {
|
||||
background-color: #DCDCDC;
|
||||
}
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
#settingsPanel {
|
||||
float: left;
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
#zoneSettings {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#zoneSettings th, #zoneSettings td {
|
||||
border: 1px solid #7f7fb2;
|
||||
padding: 3px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#zoneSettings th[scope=row] {
|
||||
padding: 4px 3px 3px;
|
||||
vertical-align: top;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#definitionPanel {
|
||||
float: left;
|
||||
margin: 0 2px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#definitionPanel input[type=submit], #definitionPanel input[type=submit] {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
#imagePanel {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* NB: The size of the imageFrame determines the area within which the markers
|
||||
* may be moved. When adjusting the padding and margins of the imageFrame and
|
||||
* the DIVs within it, test that the markers behave sensibly when dragged to
|
||||
* the extreme edges of the imageFrame. */
|
||||
#imageFrame {
|
||||
position: relative;
|
||||
padding: 0 3px 3px 0; /* Compensate for negative margins in the markers just below. */
|
||||
}
|
||||
|
||||
#imageFrame div {
|
||||
position: absolute;
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
margin-left: -3px;
|
||||
margin-top: -3px;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
#imageFrame div {
|
||||
background-image: url(../../graphics/point-g.gif);
|
||||
}
|
||||
|
||||
#imageFrame div.highlight {
|
||||
background-image: url(../../graphics/point-o.gif);
|
||||
}
|
||||
|
||||
#imageFrame div.active {
|
||||
background-image: url(../../graphics/point-r.gif);
|
||||
}
|
||||
|
||||
#zonePoints {
|
||||
margin: 8px 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#zonePoints td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#zonePoints table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#zonePoints table tr.highlight {
|
||||
background-color: #f0e68c;
|
||||
}
|
||||
|
||||
#zonePoints table tr.active {
|
||||
background-color: #ffa07a;
|
||||
}
|
||||
|
||||
#zonePoints table th, #zonePoints table td {
|
||||
border: 1px solid #7f7fb2;
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#zonePoints table a {
|
||||
margin: 0 2px;
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web cycle view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Stream' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
if ( empty($_REQUEST['mode']) )
|
||||
{
|
||||
if ( canStream() )
|
||||
$mode = "stream";
|
||||
else
|
||||
$mode = "still";
|
||||
}
|
||||
else
|
||||
{
|
||||
$mode = validHtmlStr($_REQUEST['mode']);
|
||||
}
|
||||
|
||||
$group = '';
|
||||
$groupSql = '';
|
||||
if ( !empty($_REQUEST['group']) )
|
||||
{
|
||||
$group = validInt($_REQUEST['group']);
|
||||
$row = dbFetchOne( 'SELECT * FROM Groups WHERE Id = ?', NULL, array($group) );
|
||||
$groupSql = " and find_in_set( Id, '".$row['MonitorIds']."' )";
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM Monitors WHERE Function != 'None'$groupSql ORDER BY Sequence";
|
||||
$monitors = array();
|
||||
$monIdx = 0;
|
||||
foreach( dbFetchAll( $sql ) as $row )
|
||||
{
|
||||
if ( !visibleMonitor( $row['Id'] ) )
|
||||
continue;
|
||||
if ( isset($_REQUEST['mid']) && $row['Id'] == $_REQUEST['mid'] )
|
||||
$monIdx = count($monitors);
|
||||
$row['ScaledWidth'] = reScale( $row['Width'], $row['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
|
||||
$row['ScaledHeight'] = reScale( $row['Height'], $row['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
|
||||
$monitors[] = $row;
|
||||
}
|
||||
|
||||
$monitor = $monitors[$monIdx];
|
||||
$nextMid = $monIdx==(count($monitors)-1)?$monitors[0]['Id']:$monitors[$monIdx+1]['Id'];
|
||||
$montageWidth = $monitor['ScaledWidth'];
|
||||
$montageHeight = $monitor['ScaledHeight'];
|
||||
$widthScale = ($montageWidth*SCALE_BASE)/$monitor['Width'];
|
||||
$heightScale = ($montageHeight*SCALE_BASE)/$monitor['Height'];
|
||||
$scale = (int)(($widthScale<$heightScale)?$widthScale:$heightScale);
|
||||
|
||||
if ( false && (ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT) )
|
||||
{
|
||||
$streamMode = "mpeg";
|
||||
$streamSrc = getStreamSrc( array( "mode=".$streamMode, "monitor=".$monitor['Id'], "scale=".$scale, "bitrate=".ZM_WEB_VIDEO_BITRATE, "maxfps=".ZM_WEB_VIDEO_MAXFPS, "format=".ZM_MPEG_LIVE_FORMAT ) );
|
||||
}
|
||||
elseif ( $mode == 'stream' && canStream() )
|
||||
{
|
||||
$streamMode = "jpeg";
|
||||
$streamSrc = getStreamSrc( array( "mode=".$streamMode, "monitor=".$monitor['Id'], "scale=".$scale, "maxfps=".ZM_WEB_VIDEO_MAXFPS ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$streamMode = "single";
|
||||
$streamSrc = getStreamSrc( array( "mode=".$streamMode, "monitor=".$monitor['Id'], "scale=".$scale ) );
|
||||
}
|
||||
|
||||
noCacheHeaders();
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['CycleWatch'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<?php if ( $mode == "stream" ) { ?>
|
||||
<a href="?view=<?= $view ?>&mode=still&group=<?= $group ?>&mid=<?= $monitor['Id'] ?>"><?= $SLANG['Stills'] ?></a>
|
||||
<?php } else { ?>
|
||||
<a href="?view=<?= $view ?>&mode=stream&group=<?= $group ?>&mid=<?= $monitor['Id'] ?>"><?= $SLANG['Stream'] ?></a>
|
||||
<?php } ?>
|
||||
<a href="#" onclick="closeWindow(); return( false );"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= $SLANG['Cycle'] ?> - <?= validHtmlStr($monitor['Name']) ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div id="imageFeed">
|
||||
<?php
|
||||
if ( $streamMode == "mpeg" )
|
||||
{
|
||||
outputVideoStream( "liveStream", $streamSrc, reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ), ZM_MPEG_LIVE_FORMAT, validHtmlStr($monitor['Name']) );
|
||||
}
|
||||
elseif ( $streamMode == "jpeg" )
|
||||
{
|
||||
if ( canStreamNative() )
|
||||
outputImageStream( "liveStream", $streamSrc, reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ), validHtmlStr($monitor['Name']) );
|
||||
elseif ( canStreamApplet() )
|
||||
outputHelperStream( "liveStream", $streamSrc, reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ), validHtmlStr($monitor['Name']) );
|
||||
}
|
||||
else
|
||||
{
|
||||
outputImageStill( "liveStream", $streamSrc, reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ), validHtmlStr($monitor['Name']) );
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web device detail view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'Devices' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
if ( !empty($_REQUEST['did']) ) {
|
||||
$newDevice = dbFetchOne( 'SELECT * FROM Devices WHERE Id = ?', NULL, array($_REQUEST['did']) );
|
||||
} else {
|
||||
$newDevice = array(
|
||||
"Id" => "",
|
||||
"Name" => "New Device",
|
||||
"KeyString" => ""
|
||||
);
|
||||
}
|
||||
|
||||
xhtmlHeaders( __FILE__, $SLANG['Device']." - ".$newDevice['Name'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Device']." - ".validHtmlStr($newDevice['Name']) ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="action" value="device"/>
|
||||
<input type="hidden" name="did" value="<?= $newDevice['Id'] ?>"/>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['Name'] ?></th>
|
||||
<td><input type="text" name="newDevice[Name]" value="<?= validHtmlStr($newDevice['Name']) ?>"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['KeyString'] ?></th>
|
||||
<td><input type="text" name="newDevice[KeyString]" value="<?= validHtmlStr($newDevice['KeyString']) ?>"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"<?php if ( !canEdit( 'Devices' ) ) { ?> disabled="disabled"<?php } ?>/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web devices file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Devices' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM Devices WHERE Type = 'X10' ORDER BY Name";
|
||||
$devices = array();
|
||||
foreach( dbFetchAll( $sql ) as $row )
|
||||
{
|
||||
$row['Status'] = getDeviceStatusX10( $row['KeyString'] );
|
||||
$devices[] = $row;
|
||||
}
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Devices'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Devices'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="device"/>
|
||||
<input type="hidden" name="key" value=""/>
|
||||
<input type="hidden" name="command" value=""/>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<tbody>
|
||||
<?php
|
||||
foreach( $devices as $device )
|
||||
{
|
||||
if ( $device['Status'] == 'ON' )
|
||||
{
|
||||
$fclass = "infoText";
|
||||
}
|
||||
elseif ( $device['Status'] == 'OFF' )
|
||||
{
|
||||
$fclass = "warnText";
|
||||
}
|
||||
else
|
||||
{
|
||||
$fclass = "errorText";
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td><?= makePopupLink( '?view=device&did='.$device['Id'], 'zmDevice', 'device', '<span class="'.$fclass.'">'.validHtmlStr($device['Name']).' ('.validHtmlStr($device['KeyString']).')</span>', canEdit( 'Devices' ) ) ?></td>
|
||||
<td><input type="button" value="<?= $SLANG['On'] ?>"<?= ($device['Status'] != 'ON')?' class="set"':'' ?> onclick="switchDeviceOn( this, '<?= validHtmlStr($device['KeyString']) ?>' )"<?= canEdit( 'Devices' )?"":' disabled="disabled"' ?>/></td>
|
||||
<td><input type="button" value="<?= $SLANG['Off'] ?>"<?= ($device['Status'] != 'OFF')?' class="set"':'' ?> onclick="switchDeviceOff( this, '<?= validHtmlStr($device['KeyString']) ?>' )"<?= canEdit( 'Devices' )?"":' disabled="disabled"' ?>/></td>
|
||||
<td><input type="checkbox" name="markDids[]" value="<?= $device['Id'] ?>" onclick="configureButtons( this, 'markDids' );"<?php if ( !canEdit( 'Devices' ) ) {?> disabled="disabled"<?php } ?>/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="button" value="<?= $SLANG['New'] ?>" onclick="createPopup( '?view=device&did=0', 'zmDevice', 'device' )"<?= canEdit('Devices')?'':' disabled="disabled"' ?>/>
|
||||
<input type="button" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" onclick="deleteDevice( this )" disabled="disabled"/>
|
||||
<input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow();"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web donate view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'System' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$options = array(
|
||||
"go" => $SLANG['DonateYes'],
|
||||
"hour" => $SLANG['DonateRemindHour'],
|
||||
"day" => $SLANG['DonateRemindDay'],
|
||||
"week" => $SLANG['DonateRemindWeek'],
|
||||
"month" => $SLANG['DonateRemindMonth'],
|
||||
"never" => $SLANG['DonateRemindNever'],
|
||||
"already" => $SLANG['DonateAlready'],
|
||||
);
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Donate'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Donate'] ?></h2>
|
||||
<h1>ZoneMinder - <?= $SLANG['Donate'] ?></h1>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="donate"/>
|
||||
<p>
|
||||
<?= $SLANG['DonateEnticement'] ?>
|
||||
</p>
|
||||
<p>
|
||||
<?= buildSelect( "option", $options ); ?>
|
||||
</p>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Apply'] ?>" onclick="submitForm( this )">
|
||||
<input type="button" value="<?= $SLANG['Close'] ?>" onclick="closeWindow()">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web error view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Error'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h1>ZoneMinder <?= $SLANG['Error'] ?></h1>
|
||||
</div>
|
||||
<div id="content">
|
||||
<p>
|
||||
<?= $SLANG['YouNoPerms'] ?>
|
||||
</p>
|
||||
<p>
|
||||
<?= $SLANG['ContactAdmin'] ?>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,224 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web event view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$eid = validInt( $_REQUEST['eid'] );
|
||||
$fid = !empty($_REQUEST['fid'])?validInt($_REQUEST['fid']):1;
|
||||
|
||||
if ( $user['MonitorIds'] )
|
||||
$midSql = " and MonitorId in (".join( ",", preg_split( '/["\'\s]*,["\'\s]*/', dbEscape($user['MonitorIds']) ) ).")";
|
||||
else
|
||||
$midSql = '';
|
||||
|
||||
$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 = ?'.$midSql;
|
||||
$event = dbFetchOne( $sql, NULL, array($eid) );
|
||||
|
||||
if ( isset( $_REQUEST['rate'] ) )
|
||||
$rate = validInt($_REQUEST['rate']);
|
||||
else
|
||||
$rate = reScale( RATE_BASE, $event['DefaultRate'], ZM_WEB_DEFAULT_RATE );
|
||||
if ( isset( $_REQUEST['scale'] ) )
|
||||
$scale = validInt($_REQUEST['scale']);
|
||||
else
|
||||
$scale = reScale( SCALE_BASE, $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
|
||||
|
||||
$replayModes = array(
|
||||
'single' => $SLANG['ReplaySingle'],
|
||||
'all' => $SLANG['ReplayAll'],
|
||||
'gapless' => $SLANG['ReplayGapless'],
|
||||
);
|
||||
|
||||
if ( isset( $_REQUEST['streamMode'] ) )
|
||||
$streamMode = validHtmlStr($_REQUEST['streamMode']);
|
||||
else
|
||||
$streamMode = canStream()?'stream':'stills';
|
||||
|
||||
if ( isset( $_REQUEST['replayMode'] ) )
|
||||
$replayMode = validHtmlStr($_REQUEST['replayMode']);
|
||||
if ( isset( $_COOKIE['replayMode']) && preg_match('#^[a-z]+$#', $_COOKIE['replayMode']) )
|
||||
$replayMode = validHtmlStr($_COOKIE['replayMode']);
|
||||
else {
|
||||
$keys = array_keys( $replayModes );
|
||||
$replayMode = array_shift( $keys );
|
||||
}
|
||||
|
||||
parseSort();
|
||||
parseFilter( $_REQUEST['filter'] );
|
||||
$filterQuery = $_REQUEST['filter']['query'];
|
||||
|
||||
$panelSections = 40;
|
||||
$panelSectionWidth = (int)ceil(reScale($event['Width'],$scale)/$panelSections);
|
||||
$panelWidth = ($panelSections*$panelSectionWidth-1);
|
||||
|
||||
$connkey = generateConnKey();
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Event'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="content">
|
||||
<div id="dataBar">
|
||||
<table id="dataTable" class="major" cellspacing="0">
|
||||
<tr>
|
||||
<td><span id="dataId" title="<?= $SLANG['Id'] ?>"><?= $event['Id'] ?></span></td>
|
||||
<td><span id="dataCause" title="<?= $event['Notes']?validHtmlStr($event['Notes']):$SLANG['AttrCause'] ?>"><?= validHtmlStr($event['Cause']) ?></span></td>
|
||||
<td><span id="dataTime" title="<?= $SLANG['Time'] ?>"><?= strftime( STRF_FMT_DATETIME_SHORT, strtotime($event['StartTime'] ) ) ?></span></td>
|
||||
<td><span id="dataDuration" title="<?= $SLANG['Duration'] ?>"><?= $event['Length'] ?></span>s</td>
|
||||
<td><span id="dataFrames" title="<?= $SLANG['AttrFrames']."/".$SLANG['AttrAlarmFrames'] ?>"><?= $event['Frames'] ?>/<?= $event['AlarmFrames'] ?></span></td>
|
||||
<td><span id="dataScore" title="<?= $SLANG['AttrTotalScore']."/".$SLANG['AttrAvgScore']."/".$SLANG['AttrMaxScore'] ?>"><?= $event['TotScore'] ?>/<?= $event['AvgScore'] ?>/<?= $event['MaxScore'] ?></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="menuBar1">
|
||||
<div id="scaleControl"><label for="scale"><?= $SLANG['Scale'] ?></label><?= buildSelect( "scale", $scales, "changeScale();" ); ?></div>
|
||||
<div id="replayControl"><label for="replayMode"><?= $SLANG['Replay'] ?></label><?= buildSelect( "replayMode", $replayModes, "changeReplayMode();" ); ?></div>
|
||||
<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>
|
||||
</div>
|
||||
<div id="menuBar2">
|
||||
<div id="closeWindow"><a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a></div>
|
||||
<?php
|
||||
if ( canEdit( 'Events' ) )
|
||||
{
|
||||
?>
|
||||
<div id="deleteEvent"><a href="#" onclick="deleteEvent()"><?= $SLANG['Delete'] ?></a></div>
|
||||
<div id="editEvent"><a href="#" onclick="editEvent()"><?= $SLANG['Edit'] ?></a></div>
|
||||
<?php
|
||||
}
|
||||
if ( canView( 'Events' ) )
|
||||
{
|
||||
?>
|
||||
<div id="exportEvent"><a href="#" onclick="exportEvent()"><?= $SLANG['Export'] ?></a></div>
|
||||
<?php
|
||||
}
|
||||
if ( canEdit( 'Events' ) )
|
||||
{
|
||||
?>
|
||||
<div id="archiveEvent" class="hidden"><a href="#" onclick="archiveEvent()"><?= $SLANG['Archive'] ?></a></div>
|
||||
<div id="unarchiveEvent" class="hidden"><a href="#" onclick="unarchiveEvent()"><?= $SLANG['Unarchive'] ?></a></div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<div id="framesEvent"><a href="#" onclick="showEventFrames()"><?= $SLANG['Frames'] ?></a></div>
|
||||
<div id="streamEvent"<?php if ( $streamMode == 'stream' ) { ?> class="hidden"<?php } ?>><a href="#" onclick="showStream()"><?= $SLANG['Stream'] ?></a></div>
|
||||
<div id="stillsEvent"<?php if ( $streamMode == 'still' ) { ?> class="hidden"<?php } ?>><a href="#" onclick="showStills()"><?= $SLANG['Stills'] ?></a></div>
|
||||
<?php
|
||||
if ( ZM_OPT_FFMPEG )
|
||||
{
|
||||
?>
|
||||
<div id="videoEvent"><a href="#" onclick="videoEvent()"><?= $SLANG['Video'] ?></a></div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div id="eventStream">
|
||||
<div id="imageFeed">
|
||||
<?php
|
||||
if ( ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT )
|
||||
{
|
||||
$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 ) );
|
||||
outputVideoStream( "evtStream", $streamSrc, reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ), ZM_MPEG_LIVE_FORMAT );
|
||||
}
|
||||
else
|
||||
{
|
||||
$streamSrc = getStreamSrc( array( "source=event", "mode=jpeg", "event=".$eid, "frame=".$fid, "scale=".$scale, "rate=".$rate, "maxfps=".ZM_WEB_VIDEO_MAXFPS, "replay=".$replayMode) );
|
||||
if ( canStreamNative() )
|
||||
{
|
||||
outputImageStream( "evtStream", $streamSrc, reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ), validHtmlStr($event['Name']) );
|
||||
}
|
||||
else
|
||||
{
|
||||
outputHelperStream( "evtStream", $streamSrc, reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ) );
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<p id="dvrControls">
|
||||
<input type="button" value="<+" id="prevBtn" title="<?= $SLANG['Prev'] ?>" class="inactive" onclick="streamPrev( true )"/>
|
||||
<input type="button" value="<<" id="fastRevBtn" title="<?= $SLANG['Rewind'] ?>" class="inactive" disabled="disabled" onclick="streamFastRev( true )"/>
|
||||
<input type="button" value="<" id="slowRevBtn" title="<?= $SLANG['StepBack'] ?>" class="unavail" disabled="disabled" onclick="streamSlowRev( true )"/>
|
||||
<input type="button" value="||" id="pauseBtn" title="<?= $SLANG['Pause'] ?>" class="inactive" onclick="streamPause( true )"/>
|
||||
<input type="button" value="|>" id="playBtn" title="<?= $SLANG['Play'] ?>" class="active" disabled="disabled" onclick="streamPlay( true )"/>
|
||||
<input type="button" value=">" id="slowFwdBtn" title="<?= $SLANG['StepForward'] ?>" class="unavail" disabled="disabled" onclick="streamSlowFwd( true )"/>
|
||||
<input type="button" value=">>" id="fastFwdBtn" title="<?= $SLANG['FastForward'] ?>" class="inactive" disabled="disabled" onclick="streamFastFwd( true )"/>
|
||||
<input type="button" value="–" id="zoomOutBtn" title="<?= $SLANG['ZoomOut'] ?>" class="avail" onclick="streamZoomOut()"/>
|
||||
<input type="button" value="+>" id="nextBtn" title="<?= $SLANG['Next'] ?>" class="inactive" onclick="streamNext( true )"/>
|
||||
</p>
|
||||
<div id="replayStatus">
|
||||
<span id="mode">Mode: <span id="modeValue"> </span></span>
|
||||
<span id="rate">Rate: <span id="rateValue"></span>x</span>
|
||||
<span id="progress">Progress: <span id="progressValue"></span>s</span>
|
||||
<span id="zoom">Zoom: <span id="zoomValue"></span>x</span>
|
||||
</div>
|
||||
<div id="progressBar" class="invisible">
|
||||
<?php
|
||||
for ( $i = 0; $i < $panelSections; $i++ )
|
||||
{
|
||||
?>
|
||||
<div class="progressBox" id="progressBox<?= $i ?>" title=""></div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="eventStills" class="hidden">
|
||||
<div id="eventThumbsPanel">
|
||||
<div id="eventThumbs">
|
||||
</div>
|
||||
</div>
|
||||
<div id="eventImagePanel" class="hidden">
|
||||
<div id="eventImageFrame">
|
||||
<img id="eventImage" src="graphics/transparent.gif" alt=""/>
|
||||
<div id="eventImageBar">
|
||||
<div id="eventImageClose"><input type="button" value="<?= $SLANG['Close'] ?>" onclick="hideEventImage()"/></div>
|
||||
<div id="eventImageStats" class="hidden"><input type="button" value="<?= $SLANG['Stats'] ?>" onclick="showFrameStats()"/></div>
|
||||
<div id="eventImageData">Frame <span id="eventImageNo"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="eventImageNav">
|
||||
<div id="eventImageButtons">
|
||||
<div id="prevButtonsPanel">
|
||||
<input id="prevEventBtn" type="button" value="<E" onclick="prevEvent()" disabled="disabled"/>
|
||||
<input id="prevThumbsBtn" type="button" value="<<" onclick="prevThumbs()" disabled="disabled"/>
|
||||
<input id="prevImageBtn" type="button" value="<" onclick="prevImage()" disabled="disabled"/>
|
||||
<input id="nextImageBtn" type="button" value=">" onclick="nextImage()" disabled="disabled"/>
|
||||
<input id="nextThumbsBtn" type="button" value=">>" onclick="nextThumbs()" disabled="disabled"/>
|
||||
<input id="nextEventBtn" type="button" value="E>" onclick="nextEvent()" disabled="disabled"/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="thumbsSliderPanel">
|
||||
<div id="thumbsSlider">
|
||||
<div id="thumbsKnob">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,131 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web event detail view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
if ( isset($_REQUEST['eid']) ) {
|
||||
$mode = 'single';
|
||||
$eid = validInt($_REQUEST['eid']);
|
||||
$newEvent = dbFetchOne( 'SELECT E.* FROM Events AS E WHERE E.Id = ?', NULL, array($eid) );
|
||||
} elseif ( isset($_REQUEST['eids']) ) {
|
||||
$mode = 'multi';
|
||||
$sql = 'SELECT E.* FROM Events AS E WHERE ';
|
||||
$sqlWhere = array();
|
||||
$sqlValues = array();
|
||||
foreach ( $_REQUEST['eids'] as $eid ) {
|
||||
$sqlWhere[] = 'E.Id = ?';
|
||||
$sqlValues[] = $eid;
|
||||
}
|
||||
unset( $eid );
|
||||
$sql .= join( " or ", $sqlWhere );
|
||||
foreach( dbFetchAll( $sql, NULL, $sqlValues ) as $row )
|
||||
{
|
||||
if ( !isset($newEvent) )
|
||||
{
|
||||
$newEvent = $row;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( $newEvent['Cause'] && $newEvent['Cause'] != $row['Cause'] )
|
||||
$newEvent['Cause'] = "";
|
||||
if ( $newEvent['Notes'] && $newEvent['Notes'] != $row['Notes'] )
|
||||
$newEvent['Notes'] = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$mode = '';
|
||||
}
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
if ( $mode == 'single' )
|
||||
xhtmlHeaders(__FILE__, $SLANG['Event']." - ".$eid );
|
||||
else
|
||||
xhtmlHeaders(__FILE__, $SLANG['Events'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<?php
|
||||
if ( $mode == 'single' )
|
||||
{
|
||||
?>
|
||||
<h2><?= $SLANG['Event'] ?> <?= $eid ?></h2>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<h2><?= $SLANG['Events'] ?></h2>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<?php
|
||||
if ( $mode == 'single' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="action" value="eventdetail"/>
|
||||
<input type="hidden" name="eid" value="<?= $eid ?>"/>
|
||||
<?php
|
||||
}
|
||||
elseif ( $mode = 'multi' )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="eventdetail"/>
|
||||
<?php
|
||||
foreach ( $_REQUEST['eids'] as $eid )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="markEids[]" value="<?= validHtmlStr($eid) ?>"/>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['Cause'] ?></th>
|
||||
<td><input type="text" name="newEvent[Cause]" value="<?= validHtmlStr($newEvent['Cause']) ?>" size="32"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['Notes'] ?></th>
|
||||
<td><textarea name="newEvent[Notes]" rows="6" cols="50"><?= validHtmlStr($newEvent['Notes']) ?></textarea></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"<?php if ( !canEdit( 'Events' ) ) { ?> disabled="disabled"<?php } ?>/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,263 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web events view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Events' ) || (!empty($_REQUEST['execute']) && !canEdit('Events')) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !empty($_REQUEST['execute']) )
|
||||
{
|
||||
executeFilter( $tempFilterName );
|
||||
}
|
||||
|
||||
$countSql = 'SELECT count(E.Id) AS EventCount FROM Monitors AS M INNER JOIN Events AS E ON (M.Id = E.MonitorId) WHERE';
|
||||
$eventsSql = 'SELECT E.Id,E.MonitorId,M.Name AS MonitorName,M.DefaultScale,E.Name,E.Width,E.Height,E.Cause,E.Notes,E.StartTime,E.Length,E.Frames,E.AlarmFrames,E.TotScore,E.AvgScore,E.MaxScore,E.Archived FROM Monitors AS M INNER JOIN Events AS E on (M.Id = E.MonitorId) WHERE';
|
||||
if ( $user['MonitorIds'] ) {
|
||||
$user_monitor_ids = " M.Id in (".join( ",", preg_split( '/["\'\s]*,["\'\s]*/', $user['MonitorIds'] ) ).")";
|
||||
$countSql .= $user_monitor_ids;
|
||||
$eventsSql .= $user_monitor_ids;
|
||||
} else {
|
||||
$countSql .= " 1";
|
||||
$eventsSql .= " 1";
|
||||
}
|
||||
|
||||
parseSort();
|
||||
parseFilter( $_REQUEST['filter'] );
|
||||
$filterQuery = $_REQUEST['filter']['query'];
|
||||
|
||||
if ( $_REQUEST['filter']['sql'] )
|
||||
{
|
||||
$countSql .= $_REQUEST['filter']['sql'];
|
||||
$eventsSql .= $_REQUEST['filter']['sql'];
|
||||
}
|
||||
$eventsSql .= " ORDER BY $sortColumn $sortOrder";
|
||||
|
||||
if ( isset($_REQUEST['page']) )
|
||||
$page = validInt($_REQUEST['page']);
|
||||
else
|
||||
$page = 0;
|
||||
if ( isset($_REQUEST['limit']) )
|
||||
$limit = validInt($_REQUEST['limit']);
|
||||
else
|
||||
$limit = 0;
|
||||
|
||||
$nEvents = dbFetchOne( $countSql, 'EventCount' );
|
||||
if ( !empty($limit) && $nEvents > $limit )
|
||||
{
|
||||
$nEvents = $limit;
|
||||
}
|
||||
$pages = (int)ceil($nEvents/ZM_WEB_EVENTS_PER_PAGE);
|
||||
if ( $pages > 1 ) {
|
||||
if ( !empty($page) ) {
|
||||
if ( $page < 0 )
|
||||
$page = 1;
|
||||
if ( $page > $pages )
|
||||
$page = $pages;
|
||||
}
|
||||
}
|
||||
if ( !empty($page) ) {
|
||||
$limitStart = (($page-1)*ZM_WEB_EVENTS_PER_PAGE);
|
||||
if ( empty( $limit ) )
|
||||
{
|
||||
$limitAmount = ZM_WEB_EVENTS_PER_PAGE;
|
||||
}
|
||||
else
|
||||
{
|
||||
$limitLeft = $limit - $limitStart;
|
||||
$limitAmount = ($limitLeft>ZM_WEB_EVENTS_PER_PAGE)?ZM_WEB_EVENTS_PER_PAGE:$limitLeft;
|
||||
}
|
||||
$eventsSql .= " limit $limitStart, $limitAmount";
|
||||
} elseif ( !empty( $limit ) ) {
|
||||
$eventsSql .= " limit 0, ".$limit;
|
||||
}
|
||||
|
||||
$maxWidth = 0;
|
||||
$maxHeight = 0;
|
||||
$archived = false;
|
||||
$unarchived = false;
|
||||
$events = array();
|
||||
foreach ( dbFetchAll( $eventsSql ) as $event )
|
||||
{
|
||||
$events[] = $event;
|
||||
$scale = max( reScale( SCALE_BASE, $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE );
|
||||
$eventWidth = reScale( $event['Width'], $scale );
|
||||
$eventHeight = reScale( $event['Height'], $scale );
|
||||
if ( $maxWidth < $eventWidth ) $maxWidth = $eventWidth;
|
||||
if ( $maxHeight < $eventHeight ) $maxHeight = $eventHeight;
|
||||
if ( $event['Archived'] )
|
||||
$archived = true;
|
||||
else
|
||||
$unarchived = true;
|
||||
}
|
||||
|
||||
$maxShortcuts = 5;
|
||||
$pagination = getPagination( $pages, $page, $maxShortcuts, $filterQuery.$sortQuery.'&limit='.$limit );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Events'] );
|
||||
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<?php
|
||||
if ( $pages > 1 )
|
||||
{
|
||||
if ( !empty($page) )
|
||||
{
|
||||
?>
|
||||
<a href="?view=<?= $view ?>&page=0<?= $filterQuery ?><?= $sortQuery ?>&limit=<?= $limit ?>"><?= $SLANG['ViewAll'] ?></a>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<a href="?view=<?= $view ?>&page=1<?= $filterQuery ?><?= $sortQuery ?>&limit=<?= $limit ?>"><?= $SLANG['ViewPaged'] ?></a>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<a href="#" onclick="closeWindows();"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= sprintf( $CLANG['EventCount'], $nEvents, zmVlang( $VLANG['Event'], $nEvents ) ) ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="action" value=""/>
|
||||
<input type="hidden" name="page" value="<?= $page ?>"/>
|
||||
<?= $_REQUEST['filter']['fields'] ?>
|
||||
<input type="hidden" name="sort_field" value="<?= validHtmlStr($_REQUEST['sort_field']) ?>"/>
|
||||
<input type="hidden" name="sort_asc" value="<?= validHtmlStr($_REQUEST['sort_asc']) ?>"/>
|
||||
<input type="hidden" name="limit" value="<?= $limit ?>"/>
|
||||
<?php
|
||||
if ( $pagination )
|
||||
{
|
||||
?>
|
||||
<h3 class="pagination"><?= $pagination ?></h3>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<p id="controls">
|
||||
<a id="refreshLink" href="#" onclick="location.reload(true);"><?= $SLANG['Refresh'] ?></a>
|
||||
<a id="filterLink" href="#" onclick="createPopup( '?view=filter&page=<?= $page ?><?= $filterQuery ?>', 'zmFilter', 'filter' );"><?= $SLANG['ShowFilterWindow'] ?></a>
|
||||
<a id="timelineLink" href="#" onclick="createPopup( '?view=timeline<?= $filterQuery ?>', 'zmTimeline', 'timeline' );"><?= $SLANG['ShowTimeline'] ?></a>
|
||||
</p>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<tbody>
|
||||
<?php
|
||||
$count = 0;
|
||||
foreach ( $events as $event )
|
||||
{
|
||||
if ( ($count++%ZM_WEB_EVENTS_PER_PAGE) == 0 )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<th class="colId"><a href="<?= sortHeader( 'Id' ) ?>"><?= $SLANG['Id'] ?><?= sortTag( 'Id' ) ?></a></th>
|
||||
<th class="colName"><a href="<?= sortHeader( 'Name' ) ?>"><?= $SLANG['Name'] ?><?= sortTag( 'Name' ) ?></a></th>
|
||||
<th class="colMonitor"><a href="<?= sortHeader( 'MonitorName' ) ?>"><?= $SLANG['Monitor'] ?><?= sortTag( 'MonitorName' ) ?></a></th>
|
||||
<th class="colCause"><a href="<?= sortHeader( 'Cause' ) ?>"><?= $SLANG['Cause'] ?><?= sortTag( 'Cause' ) ?></a></th>
|
||||
<th class="colTime"><a href="<?= sortHeader( 'StartTime' ) ?>"><?= $SLANG['Time'] ?><?= sortTag( 'StartTime' ) ?></a></th>
|
||||
<th class="colDuration"><a href="<?= sortHeader( 'Length' ) ?>"><?= $SLANG['Duration'] ?><?= sortTag( 'Length' ) ?></a></th>
|
||||
<th class="colFrames"><a href="<?= sortHeader( 'Frames' ) ?>"><?= $SLANG['Frames'] ?><?= sortTag( 'Frames' ) ?></a></th>
|
||||
<th class="colAlarmFrames"><a href="<?= sortHeader( 'AlarmFrames' ) ?>"><?= $SLANG['AlarmBrFrames'] ?><?= sortTag( 'AlarmFrames' ) ?></a></th>
|
||||
<th class="colTotScore"><a href="<?= sortHeader( 'TotScore' ) ?>"><?= $SLANG['TotalBrScore'] ?><?= sortTag( 'TotScore' ) ?></a></th>
|
||||
<th class="colAvgScore"><a href="<?= sortHeader( 'AvgScore' ) ?>"><?= $SLANG['AvgBrScore'] ?><?= sortTag( 'AvgScore' ) ?></a></th>
|
||||
<th class="colMaxScore"><a href="<?= sortHeader( 'MaxScore' ) ?>"><?= $SLANG['MaxBrScore'] ?><?= sortTag( 'MaxScore' ) ?></a></th>
|
||||
<?php
|
||||
if ( ZM_WEB_LIST_THUMBS )
|
||||
{
|
||||
?>
|
||||
<th class="colThumbnail"><?= $SLANG['Thumbnail'] ?></th>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<th class="colMark"><input type="checkbox" name="toggleCheck" value="1" onclick="toggleCheckbox( this, 'markEids' );"<?php if ( !canEdit( 'Events' ) ) { ?> disabled="disabled"<?php } ?>/></th>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
$scale = max( reScale( SCALE_BASE, $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE );
|
||||
?>
|
||||
<tr>
|
||||
<td class="colId"><?= makePopupLink( '?view=event&eid='.$event['Id'].$filterQuery.$sortQuery.'&page=1', 'zmEvent', array( 'event', reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ) ), $event['Id'].($event['Archived']?'*':'') ) ?></td>
|
||||
<td class="colName"><?= makePopupLink( '?view=event&eid='.$event['Id'].$filterQuery.$sortQuery.'&page=1', 'zmEvent', array( 'event', reScale( $event['Width'], $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), reScale( $event['Height'], $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE ) ), validHtmlStr($event['Name']).($event['Archived']?'*':'' ) ) ?></td>
|
||||
<td class="colMonitorName"><?= $event['MonitorName'] ?></td>
|
||||
<td class="colCause"><?= makePopupLink( '?view=eventdetail&eid='.$event['Id'], 'zmEventDetail', 'eventdetail', validHtmlStr($event['Cause']), canEdit( 'Events' ), 'title="'.htmlspecialchars($event['Notes']).'"' ) ?></td>
|
||||
<td class="colTime"><?= strftime( STRF_FMT_DATETIME_SHORTER, strtotime($event['StartTime']) ) ?></td>
|
||||
<td class="colDuration"><?= $event['Length'] ?></td>
|
||||
<td class="colFrames"><?= makePopupLink( '?view=frames&eid='.$event['Id'], 'zmFrames', 'frames', $event['Frames'] ) ?></td>
|
||||
<td class="colAlarmFrames"><?= makePopupLink( '?view=frames&eid='.$event['Id'], 'zmFrames', 'frames', $event['AlarmFrames'] ) ?></td>
|
||||
<td class="colTotScore"><?= $event['TotScore'] ?></td>
|
||||
<td class="colAvgScore"><?= $event['AvgScore'] ?></td>
|
||||
<td class="colMaxScore"><?= makePopupLink( '?view=frame&eid='.$event['Id'].'&fid=0', 'zmImage', array( 'image', reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ) ), $event['MaxScore'] ) ?></td>
|
||||
<?php
|
||||
if ( ZM_WEB_LIST_THUMBS )
|
||||
{
|
||||
if ( $thumbData = createListThumbnail( $event ) )
|
||||
{
|
||||
?>
|
||||
<td class="colThumbnail"><?= makePopupLink( '?view=frame&eid='.$event['Id'].'&fid='.$thumbData['FrameId'], 'zmImage', array( 'image', reScale( $event['Width'], $scale ), reScale( $event['Height'], $scale ) ), '<img src="'.viewImagePath( $thumbData['Path'] ).'" width="'.$thumbData['Width'].'" height="'.$thumbData['Height'].'" alt="'.$thumbData['FrameId'].'/'.$event['MaxScore'].'"/>' ) ?></td>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<td class="colThumbnail"> </td>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<td class="colMark"><input type="checkbox" name="markEids[]" value="<?= $event['Id'] ?>" onclick="configureButton( this, 'markEids' );"<?php if ( !canEdit( 'Events' ) ) { ?> disabled="disabled"<?php } ?>/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php
|
||||
if ( $pagination )
|
||||
{
|
||||
?>
|
||||
<h3 class="pagination"><?= $pagination ?></h3>
|
||||
<?php
|
||||
}
|
||||
if ( true || canEdit( 'Events' ) )
|
||||
{
|
||||
?>
|
||||
<div id="contentButtons">
|
||||
<input type="button" name="viewBtn" value="<?= $SLANG['View'] ?>" onclick="viewEvents( this, 'markEids' );" disabled="disabled"/>
|
||||
<input type="button" name="archiveBtn" value="<?= $SLANG['Archive'] ?>" onclick="archiveEvents( this, 'markEids' )" disabled="disabled"/>
|
||||
<input type="button" name="unarchiveBtn" value="<?= $SLANG['Unarchive'] ?>" onclick="unarchiveEvents( this, 'markEids' );" disabled="disabled"/>
|
||||
<input type="button" name="editBtn" value="<?= $SLANG['Edit'] ?>" onclick="editEvents( this, 'markEids' )" disabled="disabled"/>
|
||||
<input type="button" name="exportBtn" value="<?= $SLANG['Export'] ?>" onclick="exportEvents( this, 'markEids' )" disabled="disabled"/>
|
||||
<input type="button" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" onclick="deleteEvents( this, 'markEids' );" disabled="disabled"/>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,131 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web export view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isset($_SESSION['export']) )
|
||||
{
|
||||
if ( isset($_SESSION['export']['detail']) )
|
||||
$_REQUEST['exportDetail'] = $_SESSION['export']['detail'];
|
||||
if ( isset($_SESSION['export']['frames']) )
|
||||
$_REQUEST['exportFrames'] = $_SESSION['export']['frames'];
|
||||
if ( isset($_SESSION['export']['images']) )
|
||||
$_REQUEST['exportImages'] = $_SESSION['export']['images'];
|
||||
if ( isset($_SESSION['export']['video']) )
|
||||
$_REQUEST['exportVideo'] = $_SESSION['export']['video'];
|
||||
if ( isset($_SESSION['export']['misc']) )
|
||||
$_REQUEST['exportMisc'] = $_SESSION['export']['misc'];
|
||||
if ( isset($_SESSION['export']['format']) )
|
||||
$_REQUEST['exportFormat'] = $_SESSION['export']['format'];
|
||||
}
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Export'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<a href="#" onclick="closeWindow()"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= $SLANG['ExportOptions'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<?php
|
||||
if ( !empty($_REQUEST['eid']) )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="id" value="<?= validInt($_REQUEST['eid']) ?>"/>
|
||||
<?php
|
||||
}
|
||||
elseif ( !empty($_REQUEST['eids']) )
|
||||
{
|
||||
foreach ( $_REQUEST['eids'] as $eid )
|
||||
{
|
||||
?>
|
||||
<input type="hidden" name="eids[]" value="<?= validInt($eid) ?>"/>
|
||||
<?php
|
||||
}
|
||||
unset( $eid );
|
||||
}
|
||||
?>
|
||||
<table id="contentTable" class="minor" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['ExportDetails'] ?></th>
|
||||
<td><input type="checkbox" name="exportDetail" value="1"<?php if ( !empty($_REQUEST['exportDetail']) ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['ExportFrames'] ?></th>
|
||||
<td><input type="checkbox" name="exportFrames" value="1"<?php if ( !empty($_REQUEST['exportFrames']) ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['ExportImageFiles'] ?></th>
|
||||
<td><input type="checkbox" name="exportImages" value="1"<?php if ( !empty($_REQUEST['exportImages']) ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['ExportVideoFiles'] ?></th>
|
||||
<td><input type="checkbox" name="exportVideo" value="1"<?php if ( !empty($_REQUEST['exportVideo']) ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['ExportMiscFiles'] ?></th>
|
||||
<td><input type="checkbox" name="exportMisc" value="1"<?php if ( !empty($_REQUEST['exportMisc']) ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['ExportFormat'] ?></th>
|
||||
<td>
|
||||
<input type="radio" id="exportFormatTar" name="exportFormat" value="tar"<?php if ( isset($_REQUEST['exportFormat']) && $_REQUEST['exportFormat'] == "tar" ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/><label for="exportFormatTar"><?= $SLANG['ExportFormatTar'] ?></label>
|
||||
<input type="radio" id="exportFormatZip" name="exportFormat" value="zip"<?php if ( isset($_REQUEST['exportFormat']) && $_REQUEST['exportFormat'] == "zip" ) { ?> checked="checked"<?php } ?> onclick="configureExportButton( this )"/><label for="exportFormatZip"><?= $SLANG['ExportFormatZip'] ?></label>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<input type="button" id="exportButton" name="exportButton" value="<?= $SLANG['Export'] ?>" onclick="exportEvent( this.form );" disabled="disabled"/>
|
||||
</form>
|
||||
</div>
|
||||
<?php
|
||||
if ( isset($_REQUEST['generated']) )
|
||||
{
|
||||
?>
|
||||
<h2 id="exportProgress" class="<?= $_REQUEST['generated']?'infoText':'errorText' ?>"><span id="exportProgressText"><?= $_REQUEST['generated']?$SLANG['ExportSucceeded']:$SLANG['ExportFailed'] ?></span><span id="exportProgressTicker"></span></h2>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<h2 id="exportProgress" class="hidden warnText"><span id="exportProgressText"><?= $SLANG['Exporting'] ?></span><span id="exportProgressTicker"></span></h2>
|
||||
<?php
|
||||
}
|
||||
if ( !empty($_REQUEST['generated']) )
|
||||
{
|
||||
?>
|
||||
<h3 id="downloadLink"><a href="<?= validHtmlStr($_REQUEST['exportFile']) ?>"><?= $SLANG['Download'] ?></a></h3>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,331 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web filter view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
$selectName = "filterName";
|
||||
$filterNames = array( ''=>$SLANG['ChooseFilter'] );
|
||||
foreach ( dbFetchAll( "select * from Filters order by Name" ) as $row )
|
||||
{
|
||||
$filterNames[$row['Name']] = $row['Name'];
|
||||
if ( $row['Background'] )
|
||||
$filterNames[$row['Name']] .= "*";
|
||||
if ( !empty($_REQUEST['reload']) && isset($_REQUEST['filterName']) && $_REQUEST['filterName'] == $row['Name'] )
|
||||
$dbFilter = $row;
|
||||
}
|
||||
|
||||
$backgroundStr = "";
|
||||
if ( isset($dbFilter) )
|
||||
{
|
||||
if ( $dbFilter['Background'] )
|
||||
$backgroundStr = '['.strtolower($SLANG['Background']).']';
|
||||
$_REQUEST['filter'] = jsonDecode( $dbFilter['Query'] );
|
||||
$_REQUEST['sort_field'] = isset($_REQUEST['filter']['sort_field'])?$_REQUEST['filter']['sort_field']:"DateTime";
|
||||
$_REQUEST['sort_asc'] = isset($_REQUEST['filter']['sort_asc'])?$_REQUEST['filter']['sort_asc']:"1";
|
||||
$_REQUEST['limit'] = isset($_REQUEST['filter']['limit'])?$_REQUEST['filter']['limit']:"";
|
||||
unset( $_REQUEST['filter']['sort_field'] );
|
||||
unset( $_REQUEST['filter']['sort_asc'] );
|
||||
unset( $_REQUEST['filter']['limit'] );
|
||||
}
|
||||
|
||||
$conjunctionTypes = array(
|
||||
'and' => $SLANG['ConjAnd'],
|
||||
'or' => $SLANG['ConjOr']
|
||||
);
|
||||
$obracketTypes = array();
|
||||
$cbracketTypes = array();
|
||||
if ( isset($_REQUEST['filter']['terms']) )
|
||||
{
|
||||
for ( $i = 0; $i <= count($_REQUEST['filter']['terms'])-2; $i++ )
|
||||
{
|
||||
$obracketTypes[$i] = str_repeat( "(", $i );
|
||||
$cbracketTypes[$i] = str_repeat( ")", $i );
|
||||
}
|
||||
}
|
||||
|
||||
$attrTypes = array(
|
||||
'MonitorId' => $SLANG['AttrMonitorId'],
|
||||
'MonitorName' => $SLANG['AttrMonitorName'],
|
||||
'Id' => $SLANG['AttrId'],
|
||||
'Name' => $SLANG['AttrName'],
|
||||
'Cause' => $SLANG['AttrCause'],
|
||||
'Notes' => $SLANG['AttrNotes'],
|
||||
'DateTime' => $SLANG['AttrDateTime'],
|
||||
'Date' => $SLANG['AttrDate'],
|
||||
'Time' => $SLANG['AttrTime'],
|
||||
'Weekday' => $SLANG['AttrWeekday'],
|
||||
'Length' => $SLANG['AttrDuration'],
|
||||
'Frames' => $SLANG['AttrFrames'],
|
||||
'AlarmFrames' => $SLANG['AttrAlarmFrames'],
|
||||
'TotScore' => $SLANG['AttrTotalScore'],
|
||||
'AvgScore' => $SLANG['AttrAvgScore'],
|
||||
'MaxScore' => $SLANG['AttrMaxScore'],
|
||||
'Archived' => $SLANG['AttrArchiveStatus'],
|
||||
'DiskPercent' => $SLANG['AttrDiskPercent'],
|
||||
'DiskBlocks' => $SLANG['AttrDiskBlocks'],
|
||||
'SystemLoad' => $SLANG['AttrSystemLoad'],
|
||||
);
|
||||
$opTypes = array(
|
||||
'=' => $SLANG['OpEq'],
|
||||
'!=' => $SLANG['OpNe'],
|
||||
'>=' => $SLANG['OpGtEq'],
|
||||
'>' => $SLANG['OpGt'],
|
||||
'<' => $SLANG['OpLt'],
|
||||
'<=' => $SLANG['OpLtEq'],
|
||||
'=~' => $SLANG['OpMatches'],
|
||||
'!~' => $SLANG['OpNotMatches'],
|
||||
'=[]' => $SLANG['OpIn'],
|
||||
'![]' => $SLANG['OpNotIn'],
|
||||
);
|
||||
$archiveTypes = array(
|
||||
'0' => $SLANG['ArchUnarchived'],
|
||||
'1' => $SLANG['ArchArchived']
|
||||
);
|
||||
$weekdays = array();
|
||||
for ( $i = 0; $i < 7; $i++ )
|
||||
{
|
||||
$weekdays[$i] = strftime( "%A", mktime( 12, 0, 0, 1, $i+1, 2001 ) );
|
||||
}
|
||||
$sort_fields = array(
|
||||
'Id' => $SLANG['AttrId'],
|
||||
'Name' => $SLANG['AttrName'],
|
||||
'Cause' => $SLANG['AttrCause'],
|
||||
'Notes' => $SLANG['AttrNotes'],
|
||||
'MonitorName' => $SLANG['AttrMonitorName'],
|
||||
'DateTime' => $SLANG['AttrDateTime'],
|
||||
'Length' => $SLANG['AttrDuration'],
|
||||
'Frames' => $SLANG['AttrFrames'],
|
||||
'AlarmFrames' => $SLANG['AttrAlarmFrames'],
|
||||
'TotScore' => $SLANG['AttrTotalScore'],
|
||||
'AvgScore' => $SLANG['AttrAvgScore'],
|
||||
'MaxScore' => $SLANG['AttrMaxScore'],
|
||||
);
|
||||
$sort_dirns = array(
|
||||
'1' => $SLANG['SortAsc'],
|
||||
'0' => $SLANG['SortDesc']
|
||||
);
|
||||
if ( empty($_REQUEST['sort_field']) )
|
||||
{
|
||||
$_REQUEST['sort_field'] = ZM_WEB_EVENT_SORT_FIELD;
|
||||
$_REQUEST['sort_asc'] = (ZM_WEB_EVENT_SORT_ORDER == "asc");
|
||||
}
|
||||
|
||||
$hasCal = file_exists( 'tools/jscalendar/calendar.js' );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['EventFilter'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= $SLANG['EventFilter'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="filter"/>
|
||||
<input type="hidden" name="page" value="<?= requestVar( 'page' ) ?>"/>
|
||||
<input type="hidden" name="reload" value="0"/>
|
||||
<input type="hidden" name="execute" value="0"/>
|
||||
<input type="hidden" name="action" value=""/>
|
||||
<input type="hidden" name="subaction" value=""/>
|
||||
<input type="hidden" name="line" value=""/>
|
||||
<input type="hidden" name="fid" value=""/>
|
||||
<hr/>
|
||||
<div id="filterSelector"><label for="<?= $selectName ?>"><?= $SLANG['UseFilter'] ?></label><?php if ( count($filterNames) > 1 ) { echo buildSelect( $selectName, $filterNames, "submitToFilter( this, 1 );" ); } else { ?><select disabled="disabled"><option><?= $SLANG['NoSavedFilters'] ?></option></select><?php } ?><?= $backgroundStr ?></div>
|
||||
<hr/>
|
||||
<table id="fieldsTable" class="filterTable" cellspacing="0">
|
||||
<tbody>
|
||||
<?php
|
||||
for ( $i = 0; isset($_REQUEST['filter']) && $i < count($_REQUEST['filter']['terms']); $i++ )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<?php
|
||||
if ( $i == 0 )
|
||||
{
|
||||
?>
|
||||
<td> </td>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][cnj]", $conjunctionTypes ); ?></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td><?php if ( count($_REQUEST['filter']['terms']) > 2 ) { echo buildSelect( "filter[terms][$i][obr]", $obracketTypes ); } else { ?> <?php } ?></td>
|
||||
<td><?= buildSelect( "filter[terms][$i][attr]", $attrTypes, "clearValue( this, $i ); submitToFilter( this, 0 );" ); ?></td>
|
||||
<?php
|
||||
if ( isset($_REQUEST['filter']['terms'][$i]['attr']) )
|
||||
{
|
||||
if ( $_REQUEST['filter']['terms'][$i]['attr'] == "Archived" )
|
||||
{
|
||||
?>
|
||||
<td><?= $SLANG['OpEq'] ?><input type="hidden" name="filter[terms][<?= $i ?>][op]" value="="/></td>
|
||||
<td><?= buildSelect( "filter[terms][$i][val]", $archiveTypes ); ?></td>
|
||||
<?php
|
||||
}
|
||||
elseif ( $_REQUEST['filter']['terms'][$i]['attr'] == "DateTime" )
|
||||
{
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><input name="filter[terms][<?= $i ?>][val]" id="filter[terms][<?= $i ?>][val]" value="<?= isset($_REQUEST['filter']['terms'][$i]['val'])?validHtmlStr($_REQUEST['filter']['terms'][$i]['val']):'' ?>"/><?php if ( $hasCal ) { ?><script type="text/javascript">Calendar.setup( { inputField: "filter[terms][<?= $i ?>][val]", ifFormat: "%Y-%m-%d %H:%M", showsTime: true, timeFormat: "24", showOthers: true, weekNumbers: false });</script><?php } ?></td>
|
||||
<?php
|
||||
}
|
||||
elseif ( $_REQUEST['filter']['terms'][$i]['attr'] == "Date" )
|
||||
{
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><input name="filter[terms][<?= $i ?>][val]" id="filter[terms][<?= $i ?>][val]" value="<?= isset($_REQUEST['filter']['terms'][$i]['val'])?validHtmlStr($_REQUEST['filter']['terms'][$i]['val']):'' ?>"/><?php if ( $hasCal ) { ?><script type="text/javascript">Calendar.setup( { inputField: "filter[terms][<?= $i ?>][val]", ifFormat: "%Y-%m-%d", showOthers: true, weekNumbers: false });</script><?php } ?></td>
|
||||
<?php
|
||||
}
|
||||
elseif ( $_REQUEST['filter']['terms'][$i]['attr'] == "Weekday" )
|
||||
{
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><?= buildSelect( "filter[terms][$i][val]", $weekdays ); ?></td>
|
||||
<?php
|
||||
}
|
||||
elseif ( false && $_REQUEST['filter']['terms'][$i]['attr'] == "MonitorName" )
|
||||
{
|
||||
$monitors = array();
|
||||
foreach ( dbFetchAll( "select Id,Name from Monitors order by Sequence asc" ) as $monitor )
|
||||
{
|
||||
if ( visibleMonitor( $monitor['Id'] ) )
|
||||
{
|
||||
$monitors[$monitor['Name']] = $monitor['Name'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><?= buildSelect( "filter[terms][$i][val]", $monitors ); ?></td>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><input name="filter[terms][<?= $i ?>][val]" value="<?= $_REQUEST['filter']['terms'][$i]['val'] ?>"/></td>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<td><?= buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><input name="filter[terms][<?= $i ?>][val]" value="<?= isset($_REQUEST['filter']['terms'][$i]['val'])?$_REQUEST['filter']['terms'][$i]['val']:'' ?>"/></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td><?php if ( count($_REQUEST['filter']['terms']) > 2 ) { echo buildSelect( "filter[terms][$i][cbr]", $cbracketTypes ); } else { ?> <?php } ?></td>
|
||||
<td><input type="button" onclick="addTerm( this, <?= $i+1 ?> )" value="+"/><?php if ( $_REQUEST['filter']['terms'] > 1 ) { ?><input type="button" onclick="delTerm( this, <?= $i ?> )" value="-"/><?php } ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<table id="sortTable" class="filterTable" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><label for="sort_field"><?= $SLANG['SortBy'] ?></label><?= buildSelect( "sort_field", $sort_fields ); ?><?= buildSelect( "sort_asc", $sort_dirns ); ?></td>
|
||||
<td><label for="limit"><?= $SLANG['LimitResultsPre'] ?></label><input type="text" size="6" id="limit" name="limit" value="<?= isset($_REQUEST['limit'])?validInt($_REQUEST['limit']):"" ?>"/><?= $SLANG['LimitResultsPost'] ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<table id="actionsTable" class="filterTable" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterArchiveEvents'] ?></td>
|
||||
<td><input type="checkbox" name="autoArchive" value="1"<?php if ( !empty($dbFilter['AutoArchive']) ) { ?> checked="checked"<?php } ?> onclick="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
if ( ZM_OPT_FFMPEG )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterVideoEvents'] ?></td>
|
||||
<td><input type="checkbox" name="autoVideo" value="1"<?php if ( !empty($dbFilter['AutoVideo']) ) { ?> checked="checked"<?php } ?> onclick="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
if ( ZM_OPT_UPLOAD )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterUploadEvents'] ?></td>
|
||||
<td><input type="checkbox" name="autoUpload" value="1"<?php if ( !empty($dbFilter['AutoUpload']) ) { ?> checked="checked"<?php } ?> onclick="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
if ( ZM_OPT_EMAIL )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterEmailEvents'] ?></td>
|
||||
<td><input type="checkbox" name="autoEmail" value="1"<?php if ( !empty($dbFilter['AutoEmail']) ) { ?> checked="checked"<?php } ?> onclick="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
if ( ZM_OPT_MESSAGE )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterMessageEvents'] ?></td>
|
||||
<td><input type="checkbox" name="autoMessage" value="1"<?php if ( !empty($dbFilter['AutoMessage']) ) { ?> checked="checked"<?php } ?> onclick="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterExecuteEvents'] ?></td>
|
||||
<td><input type="checkbox" name="autoExecute" value="1"<?php if ( !empty($dbFilter['AutoExecute']) ) { ?> checked="checked"<?php } ?>/><input type="text" name="autoExecuteCmd" value="<?= isset($dbFilter['AutoExecuteCmd'])?$dbFilter['AutoExecuteCmd']:"" ?>" size="32" maxlength="255" onchange="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?= $SLANG['FilterDeleteEvents'] ?></td>
|
||||
<td colspan="2"><input type="checkbox" name="autoDelete" value="1"<?php if ( !empty($dbFilter['AutoDelete']) ) { ?> checked="checked"<?php } ?> onclick="updateButtons( this )"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Submit'] ?>" onclick="submitToEvents( this );"/>
|
||||
<input type="button" name="executeButton" id="executeButton" value="<?= $SLANG['Execute'] ?>" onclick="executeFilter( this );"/>
|
||||
<?php if ( canEdit( 'Events' ) ) { ?>
|
||||
<input type="button" value="<?= $SLANG['Save'] ?>" onclick="saveFilter( this );"/><?php } ?>
|
||||
<?php if ( canEdit( 'Events' ) && isset($dbFilter) ) { ?>
|
||||
<input type="button" value="<?= $SLANG['Delete'] ?>" onclick="deleteFilter( this, '<?= $dbFilter['Name'] ?>' );"/><?php } ?>
|
||||
<input type="button" value="<?= $SLANG['Reset'] ?>" onclick="submitToFilter( this, 1 );"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web filter save view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$selectName = "filterName";
|
||||
$newSelectName = "new".ucfirst($selectName);
|
||||
foreach ( dbFetchAll( "select * from Filters order by Name" ) as $row )
|
||||
{
|
||||
$filterNames[$row['Name']] = $row['Name'];
|
||||
if ( $_REQUEST['filterName'] == $row['Name'] )
|
||||
{
|
||||
$filterData = $row;
|
||||
}
|
||||
}
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
$filter = $_REQUEST['filter'];
|
||||
|
||||
parseFilter( $filter );
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['SaveFilter'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['SaveFilter'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="filter"/>
|
||||
<?= $filter['fields'] ?>
|
||||
<input type="hidden" name="sort_field" value="<?= requestVar( 'sort_field' ) ?>"/>
|
||||
<input type="hidden" name="sort_asc" value="<?= requestVar( 'sort_asc' ) ?>"/>
|
||||
<input type="hidden" name="limit" value="<?= requestVar( 'limit' ) ?>"/>
|
||||
<input type="hidden" name="autoArchive" value="<?= requestVar( 'autoArchive' ) ?>"/>
|
||||
<input type="hidden" name="autoVideo" value="<?= requestVar( 'autoVideo' ) ?>"/>
|
||||
<input type="hidden" name="autoUpload" value="<?= requestVar( 'autoUpload' ) ?>"/>
|
||||
<input type="hidden" name="autoEmail" value="<?= requestVar( 'autoEmail' ) ?>"/>
|
||||
<input type="hidden" name="autoMessage" value="<?= requestVar( 'autoMessage' ) ?>"/>
|
||||
<input type="hidden" name="autoExecute" value="<?= requestVar( 'autoExecute' ) ?>"/>
|
||||
<input type="hidden" name="autoExecuteCmd" value="<?= requestVar( 'autoExecuteCmd' ) ?>"/>
|
||||
<input type="hidden" name="autoDelete" value="<?= requestVar( 'autoDelete' ) ?>"/>
|
||||
<?php if ( count($filterNames) ) { ?>
|
||||
<p>
|
||||
<label for="<?= $selectName ?>"><?= $SLANG['SaveAs'] ?></label><?= buildSelect( $selectName, $filterNames ); ?><label for="<?= $newSelectName ?>"><?= $SLANG['OrEnterNewName'] ?></label><input type="text" size="32" id="<?= $newSelectName ?>" name="<?= $newSelectName ?>" value="<?= requestVar('filterName') ?>"/>
|
||||
</p>
|
||||
<?php } else { ?>
|
||||
<p>
|
||||
<label for="<?= $newSelectName ?>"><?= $SLANG['EnterNewFilterName'] ?></label><input type="text" size="32" id="<?= $newSelectName ?>" name="<?= $newSelectName ?>" value="">
|
||||
</p>
|
||||
<?php } ?>
|
||||
<p>
|
||||
<label for="background"><?= $SLANG['BackgroundFilter'] ?></label><input type="checkbox" id="background" name="background" value="1"<?php if ( !empty($filterData['Background']) ) { ?> checked="checked"<?php } ?>/>
|
||||
</p>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"<?php if ( !canEdit( 'Events' ) ) { ?> disabled="disabled"<?php } ?>/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow();"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web frame view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$eid = validInt($_REQUEST['eid']);
|
||||
if ( !empty($_REQUEST['fid']) )
|
||||
$fid = validInt($_REQUEST['fid']);
|
||||
|
||||
$sql = 'SELECT E.*,M.Name AS MonitorName,M.DefaultScale FROM Events AS E INNER JOIN Monitors AS M ON E.MonitorId = M.Id WHERE E.Id = ?';
|
||||
$event = dbFetchOne( $sql, NULL, array($eid) );
|
||||
|
||||
if ( !empty($fid) ) {
|
||||
$sql = 'SELECT * FROM Frames WHERE EventId = ? AND FrameId = ?';
|
||||
if ( !($frame = dbFetchOne( $sql, NULL, array($eid, $fid) )) )
|
||||
$frame = array( 'FrameId'=>$fid, 'Type'=>'Normal', 'Score'=>0 );
|
||||
} else {
|
||||
$frame = dbFetchOne( 'SELECT * FROM Frames WHERE EventId = ? AND Score = ?', NULL, array( $eid, $event['MaxScore'] ) );
|
||||
}
|
||||
|
||||
$maxFid = $event['Frames'];
|
||||
|
||||
$firstFid = 1;
|
||||
$prevFid = $frame['FrameId']-1;
|
||||
$nextFid = $frame['FrameId']+1;
|
||||
$lastFid = $maxFid;
|
||||
|
||||
$alarmFrame = $frame['Type']=='Alarm';
|
||||
|
||||
if ( isset( $_REQUEST['scale'] ) )
|
||||
$scale = validInt($_REQUEST['scale']);
|
||||
else
|
||||
$scale = max( reScale( SCALE_BASE, $event['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE );
|
||||
|
||||
$imageData = getImageSrc( $event, $frame, $scale, (isset($_REQUEST['show']) && $_REQUEST['show']=="capt") );
|
||||
|
||||
$imagePath = $imageData['thumbPath'];
|
||||
$eventPath = $imageData['eventPath'];
|
||||
$dImagePath = sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-diag-d.jpg", $eventPath, $frame['FrameId'] );
|
||||
$rImagePath = sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-diag-r.jpg", $eventPath, $frame['FrameId'] );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Frame']." - ".$event['Id']." - ".$frame['FrameId'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons">
|
||||
<?php if ( ZM_RECORD_EVENT_STATS && $alarmFrame ) { echo makePopupLink( '?view=stats&eid='.$event['Id'].'&fid='.$frame['FrameId'], 'zmStats', 'stats', $SLANG['Stats'] ); } ?>
|
||||
<?php if ( canEdit( 'Events' ) ) { ?><a href="?view=none&action=delete&markEid=<?= $event['Id'] ?>"><?= $SLANG['Delete'] ?></a><?php } ?>
|
||||
<a href="#" onclick="closeWindow(); return( false );"><?= $SLANG['Close'] ?></a>
|
||||
</div>
|
||||
<h2><?= $SLANG['Frame'] ?> <?= $event['Id']."-".$frame['FrameId']." (".$frame['Score'].")" ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<p id="image"><?php if ( $imageData['hasAnalImage'] ) { ?><a href="?view=frame&eid=<?= $event['Id'] ?>&fid=<?= $frame['FrameId'] ?>&scale=<?= $scale ?>&show=<?= $imageData['isAnalImage']?"capt":"anal" ?>"><?php } ?><img src="<?= viewImagePath( $imagePath ) ?>" width="<?= reScale( $event['Width'], $event['DefaultScale'], $scale ) ?>" height="<?= reScale( $event['Height'], $event['DefaultScale'], $scale ) ?>" alt="<?= $frame['EventId']."-".$frame['FrameId'] ?>" class="<?= $imageData['imageClass'] ?>"/><?php if ( $imageData['hasAnalImage'] ) { ?></a><?php } ?></p>
|
||||
<p id="controls">
|
||||
<?php if ( $frame['FrameId'] > 1 ) { ?>
|
||||
<a id="firstLink" href="?view=frame&eid=<?= $event['Id'] ?>&fid=<?= $firstFid ?>&scale=<?= $scale ?>"><?= $SLANG['First'] ?></a>
|
||||
<?php } if ( $frame['FrameId'] > 1 ) { ?>
|
||||
<a id="prevLink" href="?view=frame&eid=<?= $event['Id'] ?>&fid=<?= $prevFid ?>&scale=<?= $scale ?>"><?= $SLANG['Prev'] ?></a>
|
||||
<?php } if ( $frame['FrameId'] < $maxFid ) { ?>
|
||||
<a id="nextLink" href="?view=frame&eid=<?= $event['Id'] ?>&fid=<?= $nextFid ?>&scale=<?= $scale ?>"><?= $SLANG['Next'] ?></a>
|
||||
<?php } if ( $frame['FrameId'] < $maxFid ) { ?>
|
||||
<a id="lastLink" href="?view=frame&eid=<?= $event['Id'] ?>&fid=<?= $lastFid ?>&scale=<?= $scale ?>"><?= $SLANG['Last'] ?></a>
|
||||
<?php } ?>
|
||||
</p>
|
||||
<?php if (file_exists ($dImagePath)) { ?>
|
||||
<p id="diagImagePath"><?= $dImagePath ?></p>
|
||||
<p id="diagImage"><img src=?"<?= viewImagePath( $dImagePath ) ?>" width="<?= reScale( $event['Width'], $event['DefaultScale'], $scale ) ?>" height="<?= reScale( $event['Height'], $event['DefaultScale'], $scale ) ?>" class="<?= $imageData['imageClass'] ?>"/></p>
|
||||
<?php } if (file_exists ($rImagePath)) { ?>
|
||||
<p id="refImagePath"><?= $rImagePath ?></p>
|
||||
<p id="refImage"><img src="<?= viewImagePath( $rImagePath ) ?>" width="<?= reScale( $event['Width'], $event['DefaultScale'], $scale ) ?>" height="<?= reScale( $event['Height'], $event['DefaultScale'], $scale ) ?>" class="<?= $imageData['imageClass'] ?>"/></p>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web frames view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'Events' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
$sql = 'SELECT E.*,M.Name AS MonitorName FROM Events AS E INNER JOIN Monitors AS M ON E.MonitorId = M.Id WHERE E.Id = ?';
|
||||
$event = dbFetchOne( $sql, NULL, array($_REQUEST['eid']) );
|
||||
|
||||
$sql = 'SELECT *, unix_timestamp( TimeStamp ) AS UnixTimeStamp FROM Frames WHERE EventID = ? ORDER BY FrameId';
|
||||
$frames = dbFetchAll( $sql, NULL, array( $_REQUEST['eid'] ) );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Frames']." - ".$event['Id'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerButtons"><a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a></div>
|
||||
<h2><?= $SLANG['Frames'] ?> - <?= $event['Id'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="colId"><?= $SLANG['FrameId'] ?></th>
|
||||
<th class="colType"><?= $SLANG['Type'] ?></th>
|
||||
<th class="colTimeStamp"><?= $SLANG['TimeStamp'] ?></th>
|
||||
<th class="colTimeDelta"><?= $SLANG['TimeDelta'] ?></th>
|
||||
<th class="colScore"><?= $SLANG['Score'] ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
if ( count($frames) )
|
||||
{
|
||||
foreach ( $frames as $frame )
|
||||
{
|
||||
$class = strtolower($frame['Type']);
|
||||
?>
|
||||
<tr class="<?= $class ?>">
|
||||
<td class="colId"><?= makePopupLink( '?view=frame&eid='.$event['Id'].'&fid='.$frame['FrameId'], 'zmImage', array( 'image', $event['Width'], $event['Height'] ), $frame['FrameId'] ) ?></td>
|
||||
<td class="colType"><?= $frame['Type'] ?></td>
|
||||
<td class="colTimeStamp"><?= strftime( STRF_FMT_TIME, $frame['UnixTimeStamp'] ) ?></td>
|
||||
<td class="colTimeDelta"><?= number_format( $frame['Delta'], 2 ) ?></td>
|
||||
<?php
|
||||
if ( ZM_RECORD_EVENT_STATS && ($frame['Type'] == 'Alarm') )
|
||||
{
|
||||
?>
|
||||
<td class="colScore"><?= makePopupLink( '?view=stats&eid='.$event['Id'].'&fid='.$frame['FrameId'], 'zmStats', 'stats', $frame['Score'] ) ?></td>
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<td class="colScore"><?= $frame['Score'] ?></td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td colspan="5"><?= $SLANG['NoFramesRecorded'] ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web function view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'Monitors' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$monitor = dbFetchMonitor( $_REQUEST['mid'] );
|
||||
|
||||
$focusWindow = true;
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Function']." - ".validHtmlStr($monitor['Name']) );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Function']." - ".validHtmlStr($monitor['Name']) ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="function"/>
|
||||
<input type="hidden" name="mid" value="<?= $monitor['Id'] ?>"/>
|
||||
<p>
|
||||
<select name="newFunction">
|
||||
<?php
|
||||
foreach ( getEnumValues( 'Monitors', 'Function' ) as $optFunction )
|
||||
{
|
||||
?>
|
||||
<option value="<?= $optFunction ?>"<?php if ( $optFunction == $monitor['Function'] ) { ?> selected="selected"<?php } ?>><?= $SLANG['Fn'.$optFunction] ?></option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<label for="newEnabled"><?= $SLANG['Enabled'] ?></label><input type="checkbox" name="newEnabled" id="newEnabled" value="1"<?php if ( !empty($monitor['Enabled']) ) { ?> checked="checked"<?php } ?>/>
|
||||
</p>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"/>
|
||||
<input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web group detail view file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canEdit( 'System' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !empty($_REQUEST['gid']) )
|
||||
{
|
||||
$newGroup = dbFetchGroup( $_REQUEST['gid'] );
|
||||
}
|
||||
else
|
||||
{
|
||||
$newGroup = array(
|
||||
"Id" => "",
|
||||
"Name" => "New Group",
|
||||
"MonitorIds" => ""
|
||||
);
|
||||
}
|
||||
|
||||
xhtmlHeaders( __FILE__, $SLANG['Group']." - ".$newGroup['Name'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Group'] ?> - <?= $newGroup['Name'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="groupForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="<?= $view ?>"/>
|
||||
<input type="hidden" name="action" value="group"/>
|
||||
<input type="hidden" name="gid" value="<?= $newGroup['Id'] ?>"/>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['Name'] ?></th>
|
||||
<td><input type="text" name="newGroup[Name]" value="<?= validHtmlStr($newGroup['Name']) ?>"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><?= $SLANG['MonitorIds'] ?></th>
|
||||
<td>
|
||||
<select name="newGroup[MonitorIds][]" size="4" multiple="multiple">
|
||||
<?php
|
||||
$monitors = dbFetchAll( "select Id,Name from Monitors order by Sequence asc" );
|
||||
$monitorIds = array_flip( explode( ',', $newGroup['MonitorIds'] ) );
|
||||
foreach ( $monitors as $monitor )
|
||||
{
|
||||
if ( visibleMonitor( $monitor['Id'] ) )
|
||||
{
|
||||
?>
|
||||
<option value="<?= $monitor['Id'] ?>"<?php if ( array_key_exists( $monitor['Id'], $monitorIds ) ) { ?> selected="selected"<?php } ?>><?= validHtmlStr($monitor['Name']) ?></option>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Save'] ?>"<?php if ( !canEdit( 'System' ) ) { ?> disabled="disabled"<?php } ?>/>
|
||||
<input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,94 @@
|
|||
<?php
|
||||
//
|
||||
// ZoneMinder web monitor groups file, $Date$, $Revision$
|
||||
// Copyright (C) 2001-2008 Philip Coombes
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
if ( !canView( 'System' ) )
|
||||
{
|
||||
$view = "error";
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = "select * from Groups order by Name";
|
||||
$groups = array();
|
||||
$selected = false;
|
||||
foreach( dbFetchAll( $sql ) as $row )
|
||||
{
|
||||
if ( !empty($_COOKIE['zmGroup']) && ($row['Id'] == $_COOKIE['zmGroup']) )
|
||||
{
|
||||
$row['selected'] = true;
|
||||
$selected = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$row['selected'] = false;
|
||||
}
|
||||
$groups[] = $row;
|
||||
}
|
||||
|
||||
xhtmlHeaders(__FILE__, $SLANG['Groups'] );
|
||||
?>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<h2><?= $SLANG['Groups'] ?></h2>
|
||||
</div>
|
||||
<div id="content">
|
||||
<form name="groupsForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
|
||||
<input type="hidden" name="view" value="none"/>
|
||||
<input type="hidden" name="action" value="setgroup"/>
|
||||
<table id="contentTable" class="major" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="colName"><?= $SLANG['Name'] ?></th>
|
||||
<th class="colIds"><?= $SLANG['MonitorIds'] ?></th>
|
||||
<th class="colSelect"><?= $SLANG['Select'] ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="highlight">
|
||||
<td class="colName"><?= $SLANG['NoGroup'] ?></td>
|
||||
<td class="colIds"><?= $SLANG['All'] ?></td>
|
||||
<td class="colSelect"><input type="radio" name="gid" value="0"<?= !$selected?' checked="checked"':'' ?> onclick="configureButtons( this );"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
foreach ( $groups as $group )
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<td class="colName"><?= validHtmlStr($group['Name']) ?></td>
|
||||
<td class="colIds"><?= monitorIdsToNames( $group['MonitorIds'], 30 ) ?></td>
|
||||
<td class="colSelect"><input type="radio" name="gid" value="<?= $group['Id'] ?>"<?= $group['selected']?' checked="checked"':'' ?> onclick="configureButtons( this );"/></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="contentButtons">
|
||||
<input type="submit" value="<?= $SLANG['Apply'] ?>"/>
|
||||
<input type="button" value="<?= $SLANG['New'] ?>" onclick="newGroup()"<?= canEdit('System')?'':' disabled="disabled"' ?>/>
|
||||
<input type="button" name="editBtn" value="<?= $SLANG['Edit'] ?>" onclick="editGroup( this )"<?= $selected&&canEdit('System')?'':' disabled="disabled"' ?>/>
|
||||
<input type="button" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" onclick="deleteGroup( this )"<?= $selected&&canEdit('System')?'':' disabled="disabled"' ?>/>
|
||||
<input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow();"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,49 @@
|
|||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
webdir = @WEB_PREFIX@/skins/classic/views/js
|
||||
|
||||
dist_web_DATA = \
|
||||
console.js \
|
||||
console.js.php \
|
||||
control.js \
|
||||
controlpreset.js \
|
||||
controlpreset.js.php \
|
||||
cycle.js \
|
||||
cycle.js.php \
|
||||
devices.js \
|
||||
donate.js \
|
||||
donate.js.php \
|
||||
event.js \
|
||||
event.js.php \
|
||||
events.js \
|
||||
events.js.php \
|
||||
export.js \
|
||||
export.js.php \
|
||||
filter.js \
|
||||
filter.js.php \
|
||||
group.js \
|
||||
groups.js \
|
||||
log.js \
|
||||
login.js \
|
||||
Makefile.am \
|
||||
monitor.js \
|
||||
monitor.js.php \
|
||||
monitorpreset.js \
|
||||
monitorprobe.js \
|
||||
montage.js \
|
||||
montage.js.php \
|
||||
options.js.php \
|
||||
postlogin.js \
|
||||
state.js \
|
||||
state.js.php \
|
||||
timeline.js \
|
||||
timeline.js.php \
|
||||
user.js \
|
||||
version.js \
|
||||
version.js.php \
|
||||
video.js \
|
||||
video.js.php \
|
||||
watch.js \
|
||||
watch.js.php \
|
||||
zone.js \
|
||||
zone.js.php
|
|
@ -0,0 +1,65 @@
|
|||
function setButtonStates( element )
|
||||
{
|
||||
var form = element.form;
|
||||
var checked = 0;
|
||||
for ( var i = 0; i < form.elements.length; i++ )
|
||||
{
|
||||
if ( form.elements[i].type == "checkbox" )
|
||||
{
|
||||
if ( form.elements[i].checked )
|
||||
{
|
||||
if ( checked++ > 1 )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$(element).getParent( 'tr' ).toggleClass( 'highlight' );
|
||||
form.editBtn.disabled = (checked!=1);
|
||||
form.deleteBtn.disabled = (checked==0);
|
||||
}
|
||||
|
||||
function editMonitor( element )
|
||||
{
|
||||
var form = element.form;
|
||||
for ( var i = 0; i < form.elements.length; i++ )
|
||||
{
|
||||
if ( form.elements[i].type == "checkbox" )
|
||||
{
|
||||
if ( form.elements[i].checked )
|
||||
{
|
||||
var monitorId = form.elements[i].value;
|
||||
createPopup( '?view=monitor&mid='+monitorId, 'zmMonitor'+monitorId, 'monitor' );
|
||||
form.elements[i].checked = false;
|
||||
setButtonStates( form.elements[i] );
|
||||
//$(form.elements[i]).getParent( 'tr' ).removeClass( 'highlight' );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function deleteMonitor( element )
|
||||
{
|
||||
if ( confirm( 'Warning, deleting a monitor also deletes all events and database entries associated with it.\nAre you sure you wish to delete?' ) )
|
||||
{
|
||||
var form = element.form;
|
||||
form.elements['action'].value = 'delete';
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
|
||||
function reloadWindow()
|
||||
{
|
||||
window.location.replace( thisUrl );
|
||||
}
|
||||
|
||||
function initPage()
|
||||
{
|
||||
reloadWindow.periodical( consoleRefreshTimeout );
|
||||
if ( showVersionPopup )
|
||||
createPopup( '?view=version', 'zmVersion', 'version' );
|
||||
if ( showDonatePopup )
|
||||
createPopup( '?view=donate', 'zmDonate', 'donate' );
|
||||
}
|
||||
|
||||
window.addEvent( 'domready', initPage );
|
|
@ -0,0 +1,28 @@
|
|||
var consoleRefreshTimeout = <?= 1000*ZM_WEB_REFRESH_MAIN ?>;
|
||||
|
||||
<?php
|
||||
if ( ZM_CHECK_FOR_UPDATES && canEdit('System') && ZM_DYN_LAST_VERSION && ( verNum(ZM_VERSION) < verNum(ZM_DYN_LAST_VERSION) ) && ( verNum(ZM_DYN_CURR_VERSION) < verNum(ZM_DYN_LAST_VERSION) ) && ( ZM_DYN_NEXT_REMINDER < time() ) )
|
||||
{
|
||||
$showVersionPopup = true;
|
||||
}
|
||||
elseif ( ZM_DYN_SHOW_DONATE_REMINDER )
|
||||
{
|
||||
if ( canEdit('System') )
|
||||
{
|
||||
if ( ZM_DYN_DONATE_REMINDER_TIME > 0 )
|
||||
{
|
||||
if ( ZM_DYN_DONATE_REMINDER_TIME < time() )
|
||||
{
|
||||
$showDonatePopup = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$nextReminder = time() + 30*24*60*60;
|
||||
dbQuery( "update Config set Value = '".$nextReminder."' where Name = 'ZM_DYN_DONATE_REMINDER_TIME'" );
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
var showVersionPopup = <?= isset($showVersionPopup )?'true':'false' ?>;
|
||||
var showDonatePopup = <?= isset($showDonatePopup )?'true':'false' ?>;
|
|
@ -0,0 +1,49 @@
|
|||
var controlParms = "view=request&request=control";
|
||||
var controlReq = new Request.JSON( { url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, onSuccess: getControlResponse } );
|
||||
|
||||
function getControlResponse( respObj, respText )
|
||||
{
|
||||
if ( !respObj )
|
||||
return;
|
||||
//console.log( respText );
|
||||
if ( respObj.result != 'Ok' )
|
||||
{
|
||||
alert( "Control response was status = "+respObj.status+"\nmessage = "+respObj.message );
|
||||
}
|
||||
}
|
||||
|
||||
function controlCmd( control, event, xtell, ytell )
|
||||
{
|
||||
var locParms = "&id="+$('mid').get('value');
|
||||
if ( event && (xtell || ytell) )
|
||||
{
|
||||
var xEvent = new Event( event );
|
||||
var target = xEvent.target;
|
||||
var coords = $(target).getCoordinates();
|
||||
|
||||
var l = coords.left;
|
||||
var t = coords.top;
|
||||
var x = xEvent.page.x - l;
|
||||
var y = xEvent.page.y - t;
|
||||
|
||||
if ( xtell )
|
||||
{
|
||||
var xge = parseInt( (x*100)/coords.width );
|
||||
if ( xtell == -1 )
|
||||
xge = 100 - xge;
|
||||
else if ( xtell == 2 )
|
||||
xge = 2*(50 - xge);
|
||||
locParms += "&xge="+xge;
|
||||
}
|
||||
if ( ytell )
|
||||
{
|
||||
var yge = parseInt( (y*100)/coords.height );
|
||||
if ( ytell == -1 )
|
||||
yge = 100 - yge;
|
||||
else if ( ytell == 2 )
|
||||
yge = 2*(50 - yge);
|
||||
locParms += "&yge="+yge;
|
||||
}
|
||||
}
|
||||
controlReq.send( controlParms+"&control="+control+locParms );
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
function updateLabel()
|
||||
{
|
||||
var presetIndex = $('contentForm').preset.getValue();
|
||||
if ( labels[presetIndex] )
|
||||
{
|
||||
$('contentForm').newLabel.value = labels[presetIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
$('contentForm').newLabel.value = "";
|
||||
}
|
||||
}
|
||||
|
||||
window.addEvent( 'domready', updateLabel );
|
|
@ -0,0 +1,9 @@
|
|||
var labels = new Array();
|
||||
<?php
|
||||
foreach ( $labels as $index=>$label )
|
||||
{
|
||||
?>
|
||||
labels[<?= validInt($index) ?>] = "<?= validJsStr($label) ?>";
|
||||
<?php
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,11 @@
|
|||
function nextCycleView()
|
||||
{
|
||||
window.location.replace( '?view=cycle&group='+currGroup+'&mid='+nextMid+'&mode='+mode, cycleRefreshTimeout );
|
||||
}
|
||||
|
||||
function initCycle()
|
||||
{
|
||||
nextCycleView.periodical( cycleRefreshTimeout );
|
||||
}
|
||||
|
||||
window.addEvent( 'domready', initCycle );
|
|
@ -0,0 +1,5 @@
|
|||
var currGroup = "<?= isset($_REQUEST['group'])?validJsStr($_REQUEST['group']):'' ?>";
|
||||
var nextMid = "<?= isset($nextMid)?$nextMid:'' ?>";
|
||||
var mode = "<?= $mode ?>";
|
||||
|
||||
var cycleRefreshTimeout = <?= 1000*ZM_WEB_REFRESH_CYCLE ?>;
|
|
@ -0,0 +1,47 @@
|
|||
function switchDeviceOn( element, key )
|
||||
{
|
||||
var form = element.form;
|
||||
form.view.value = currentView;
|
||||
form.action.value = 'device';
|
||||
form.command.value = 'on';
|
||||
form.key.value = key;
|
||||
form.submit();
|
||||
}
|
||||
|
||||
function switchDeviceOff( element, key )
|
||||
{
|
||||
var form = element.form;
|
||||
form.view.value = currentView;
|
||||
form.action.value = 'device';
|
||||
form.command.value = 'off';
|
||||
form.key.value = key;
|
||||
form.submit();
|
||||
}
|
||||
|
||||
function deleteDevice( element )
|
||||
{
|
||||
var form = element.form;
|
||||
form.view.value = currentView;
|
||||
form.action.value = 'delete';
|
||||
form.submit();
|
||||
}
|
||||
|
||||
function configureButtons( element, name )
|
||||
{
|
||||
var form = element.form;
|
||||
var checked = false;
|
||||
for (var i = 0; i < form.elements.length; i++)
|
||||
{
|
||||
if ( form.elements[i].name.indexOf(name) == 0)
|
||||
{
|
||||
if ( form.elements[i].checked )
|
||||
{
|
||||
checked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
form.deleteBtn.disabled = !checked;
|
||||
}
|
||||
|
||||
window.focus();
|
|
@ -0,0 +1,14 @@
|
|||
function submitForm( element )
|
||||
{
|
||||
var form = element.form;
|
||||
if ( form.option.selectedIndex == 0 )
|
||||
form.view.value = currentView;
|
||||
else
|
||||
form.view.value = 'none';
|
||||
form.submit();
|
||||
}
|
||||
|
||||
if ( action == "donate" && option == "go" )
|
||||
{
|
||||
zmWindow();
|
||||
}
|