Skip to content

Commit 8c6396a

Browse files
Merge branch 'master' of github.com:ZoneMinder/zoneminder
2 parents 4b52232 + 75ecf1f commit 8c6396a

File tree

8 files changed

+157
-144
lines changed

8 files changed

+157
-144
lines changed

web/skins/classic/js/skin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ function isJSON(str) {
773773
};
774774

775775
function setCookie(name, value, seconds) {
776-
var newValue = (typeof value === 'string') ? value : JSON.stringify(value);
776+
var newValue = (typeof value === 'string' || typeof value === 'boolean') ? value : JSON.stringify(value);
777777
let expires = "";
778778
if (seconds) {
779779
const date = new Date();

web/skins/classic/views/_monitor_filters.php

Lines changed: 134 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -18,163 +18,165 @@
1818
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1919
//
2020

21-
require_once('includes/Monitor.php');
22-
23-
zm_session_start();
24-
foreach (array('GroupId','Capturing','Analysing','Recording','ServerId','StorageId','Status','MonitorId','MonitorName','Source') as $var) {
25-
if (isset($_REQUEST[$var])) {
26-
if ($_REQUEST[$var] != '') {
27-
$_SESSION[$var] = $_REQUEST[$var];
28-
} else {
21+
function addFilterSelect($name, $options) {
22+
$html = '<span class="term '.$name.'Filter"><label>'.translate($name).'</label>';
23+
$html .= '<span class="term-value-wrapper">';
24+
$html .= htmlSelect($name.'[]', $options,
25+
(isset($_SESSION[$name])?$_SESSION[$name]:''),
26+
array(
27+
'data-on-change'=>'submitThisForm',
28+
'class'=>'chosen',
29+
'multiple'=>'multiple',
30+
'data-placeholder'=>'All',
31+
)
32+
);
33+
$html .= '</span>';
34+
$html .= '</span>'.PHP_EOL;
35+
return $html;
36+
}
37+
38+
function buildMonitorsFilters() {
39+
global $user, $Servers;
40+
require_once('includes/Monitor.php');
41+
42+
zm_session_start();
43+
foreach (array('GroupId','Capturing','Analysing','Recording','ServerId','StorageId','Status','MonitorId','MonitorName','Source') as $var) {
44+
if (isset($_REQUEST[$var])) {
45+
if ($_REQUEST[$var] != '') {
46+
$_SESSION[$var] = $_REQUEST[$var];
47+
} else {
48+
unset($_SESSION[$var]);
49+
}
50+
} else if (isset($_REQUEST['filtering'])) {
2951
unset($_SESSION[$var]);
3052
}
31-
} else if (isset($_REQUEST['filtering'])) {
32-
unset($_SESSION[$var]);
3353
}
34-
}
35-
session_write_close();
54+
session_write_close();
3655

37-
$storage_areas = ZM\Storage::find();
38-
$StorageById = array();
39-
foreach ($storage_areas as $S) {
40-
$StorageById[$S->Id()] = $S;
41-
}
56+
$storage_areas = ZM\Storage::find();
57+
$StorageById = array();
58+
foreach ($storage_areas as $S) {
59+
$StorageById[$S->Id()] = $S;
60+
}
4261

43-
$ServersById = array();
44-
foreach ($Servers as $s) {
45-
$ServersById[$s->Id()] = $s;
46-
}
62+
$ServersById = array();
63+
foreach ($Servers as $s) {
64+
$ServersById[$s->Id()] = $s;
65+
}
4766

48-
$html =
67+
$html =
4968
'
5069
<div class="controlHeader">
5170
5271
<!-- Used to submit the form with the enter key -->
5372
<input type="submit" class="d-none"/>
5473
<input type="hidden" name="filtering" value=""/>
5574
';
56-
$groupSql = '';
57-
if (canView('Groups')) {
58-
$GroupsById = array();
59-
foreach (ZM\Group::find() as $G) {
60-
$GroupsById[$G->Id()] = $G;
75+
$groupSql = '';
76+
if (canView('Groups')) {
77+
$GroupsById = array();
78+
foreach (ZM\Group::find() as $G) {
79+
$GroupsById[$G->Id()] = $G;
80+
}
81+
82+
if (count($GroupsById)) {
83+
$html .= '<span class="term" id="groupControl"><label>'. translate('Group') .'</label>';
84+
$html .= '<span class="term-value-wrapper">';
85+
# This will end up with the group_id of the deepest selection
86+
$group_id = isset($_SESSION['GroupId']) ? $_SESSION['GroupId'] : null;
87+
$html .= ZM\Group::get_group_dropdown();
88+
$groupSql = ZM\Group::get_group_sql($group_id);
89+
$html .= '</span>';
90+
$html .= '</span>';
91+
}
6192
}
6293

63-
if (count($GroupsById)) {
64-
$html .= '<span class="term" id="groupControl"><label>'. translate('Group') .'</label>';
65-
$html .= '<span class="term-value-wrapper">';
66-
# This will end up with the group_id of the deepest selection
67-
$group_id = isset($_SESSION['GroupId']) ? $_SESSION['GroupId'] : null;
68-
$html .= ZM\Group::get_group_dropdown();
69-
$groupSql = ZM\Group::get_group_sql($group_id);
70-
$html .= '</span>';
71-
$html .= '</span>';
94+
$selected_monitor_ids = isset($_SESSION['MonitorId']) ? $_SESSION['MonitorId'] : array();
95+
if ( !is_array($selected_monitor_ids) ) {
96+
$selected_monitor_ids = array($selected_monitor_ids);
7297
}
73-
}
7498

75-
$selected_monitor_ids = isset($_SESSION['MonitorId']) ? $_SESSION['MonitorId'] : array();
76-
if ( !is_array($selected_monitor_ids) ) {
77-
$selected_monitor_ids = array($selected_monitor_ids);
78-
}
99+
$conditions = array();
100+
$values = array();
79101

80-
$conditions = array();
81-
$values = array();
82-
83-
if ( $groupSql )
84-
$conditions[] = $groupSql;
85-
foreach ( array('ServerId','StorageId','Status','Capturing','Analysing','Recording') as $filter ) {
86-
if ( isset($_SESSION[$filter]) ) {
87-
if ( is_array($_SESSION[$filter]) ) {
88-
$conditions[] = '`'.$filter . '` IN ('.implode(',', array_map(function(){return '?';}, $_SESSION[$filter])). ')';
89-
$values = array_merge($values, $_SESSION[$filter]);
90-
} else {
91-
$conditions[] = '`'.$filter . '`=?';
92-
$values[] = $_SESSION[$filter];
102+
if ( $groupSql )
103+
$conditions[] = $groupSql;
104+
foreach ( array('ServerId','StorageId','Status','Capturing','Analysing','Recording') as $filter ) {
105+
if ( isset($_SESSION[$filter]) ) {
106+
if ( is_array($_SESSION[$filter]) ) {
107+
$conditions[] = '`'.$filter . '` IN ('.implode(',', array_map(function(){return '?';}, $_SESSION[$filter])). ')';
108+
$values = array_merge($values, $_SESSION[$filter]);
109+
} else {
110+
$conditions[] = '`'.$filter . '`=?';
111+
$values[] = $_SESSION[$filter];
112+
}
93113
}
114+
} # end foreach filter
115+
116+
if (count($user->unviewableMonitorIds()) ) {
117+
$ids = $user->viewableMonitorIds();
118+
$conditions[] = 'M.Id IN ('.implode(',',array_map(function(){return '?';}, $ids)).')';
119+
$values = array_merge($values, $ids);
94120
}
95-
} # end foreach filter
96121

97-
if (count($user->unviewableMonitorIds()) ) {
98-
$ids = $user->viewableMonitorIds();
99-
$conditions[] = 'M.Id IN ('.implode(',',array_map(function(){return '?';}, $ids)).')';
100-
$values = array_merge($values, $ids);
101-
}
122+
$html .= '<span class="term MonitorNameFilter"><label>'.translate('Name').'</label>';
123+
$html .= '<span class="term-value-wrapper">';
124+
$html .= '<input type="text" name="MonitorName" value="'.(isset($_SESSION['MonitorName'])?validHtmlStr($_SESSION['MonitorName']):'').'" placeholder="text or regular expression"/></span>';
125+
$html .= '</span>'.PHP_EOL;
102126

103-
$html .= '<span class="term MonitorNameFilter"><label>'.translate('Name').'</label>';
104-
$html .= '<span class="term-value-wrapper">';
105-
$html .= '<input type="text" name="MonitorName" value="'.(isset($_SESSION['MonitorName'])?validHtmlStr($_SESSION['MonitorName']):'').'" placeholder="text or regular expression"/></span>';
106-
$html .= '</span>'.PHP_EOL;
127+
$html .= addFilterSelect('Capturing', array('None'=>translate('None'), 'Always'=>translate('Always'), 'OnDemand'=>translate('On Demand')));
128+
$html .= addFilterSelect('Analysing', array('None'=>translate('None'), 'Always'=>translate('Always')));
129+
$html .= addFilterSelect('Recording', array('None'=>translate('None'), 'OnMotion'=>translate('On Motion'),'Always'=>translate('Always')));
107130

108-
function addFilterSelect($name, $options) {
109-
$html = '<span class="term '.$name.'Filter"><label>'.translate($name).'</label>';
110-
$html .= '<span class="term-value-wrapper">';
111-
$html .= htmlSelect($name.'[]', $options,
112-
(isset($_SESSION[$name])?$_SESSION[$name]:''),
131+
if ( count($ServersById) > 1 ) {
132+
$html .= '<span class="term ServerFilter"><label>'. translate('Server').'</label>';
133+
$html .= '<span class="term-value-wrapper">';
134+
$html .= htmlSelect('ServerId[]', $ServersById,
135+
(isset($_SESSION['ServerId'])?$_SESSION['ServerId']:''),
113136
array(
114137
'data-on-change'=>'submitThisForm',
115138
'class'=>'chosen',
116139
'multiple'=>'multiple',
117140
'data-placeholder'=>'All',
118141
)
119142
);
120-
$html .= '</span>';
121-
$html .= '</span>'.PHP_EOL;
122-
return $html;
123-
}
124-
125-
$html .= addFilterSelect('Capturing', array('None'=>translate('None'), 'Always'=>translate('Always'), 'OnDemand'=>translate('On Demand')));
126-
$html .= addFilterSelect('Analysing', array('None'=>translate('None'), 'Always'=>translate('Always')));
127-
$html .= addFilterSelect('Recording', array('None'=>translate('None'), 'OnMotion'=>translate('On Motion'),'Always'=>translate('Always')));
143+
$html .= '</span>';
144+
$html .= '</span>';
145+
} # end if have Servers
128146

129-
if ( count($ServersById) > 1 ) {
130-
$html .= '<span class="term ServerFilter"><label>'. translate('Server').'</label>';
131-
$html .= '<span class="term-value-wrapper">';
132-
$html .= htmlSelect('ServerId[]', $ServersById,
133-
(isset($_SESSION['ServerId'])?$_SESSION['ServerId']:''),
134-
array(
135-
'data-on-change'=>'submitThisForm',
136-
'class'=>'chosen',
137-
'multiple'=>'multiple',
138-
'data-placeholder'=>'All',
139-
)
140-
);
141-
$html .= '</span>';
142-
$html .= '</span>';
143-
} # end if have Servers
147+
if ( count($StorageById) > 1 ) {
148+
$html .= '<span class="term StorageFilter"><label>'.translate('Storage').'</label>';
149+
$html .= '<span class="term-value-wrapper">';
150+
$html .= htmlSelect('StorageId[]', $StorageById,
151+
(isset($_SESSION['StorageId'])?$_SESSION['StorageId']:''),
152+
array(
153+
'data-on-change'=>'submitThisForm',
154+
'class'=>'chosen',
155+
'multiple'=>'multiple',
156+
'data-placeholder'=>'All',
157+
) );
158+
$html .= '</span>';
159+
$html .= '</span>';
160+
} # end if have Storage Areas
144161

145-
if ( count($StorageById) > 1 ) {
146-
$html .= '<span class="term StorageFilter"><label>'.translate('Storage').'</label>';
162+
$html .= '<span class="term StatusFilter"><label>'.translate('Status').'</label>';
163+
$status_options = array(
164+
'Unknown' => translate('StatusUnknown'),
165+
'NotRunning' => translate('StatusNotRunning'),
166+
'Running' => translate('StatusRunning'),
167+
'Connected' => translate('StatusConnected'),
168+
);
147169
$html .= '<span class="term-value-wrapper">';
148-
$html .= htmlSelect('StorageId[]', $StorageById,
149-
(isset($_SESSION['StorageId'])?$_SESSION['StorageId']:''),
170+
$html .= htmlSelect( 'Status[]', $status_options,
171+
( isset($_SESSION['Status']) ? $_SESSION['Status'] : '' ),
150172
array(
151173
'data-on-change'=>'submitThisForm',
152174
'class'=>'chosen',
153175
'multiple'=>'multiple',
154-
'data-placeholder'=>'All',
176+
'data-placeholder'=>'All'
155177
) );
156178
$html .= '</span>';
157179
$html .= '</span>';
158-
} # end if have Storage Areas
159-
160-
$html .= '<span class="term StatusFilter"><label>'.translate('Status').'</label>';
161-
$status_options = array(
162-
'Unknown' => translate('StatusUnknown'),
163-
'NotRunning' => translate('StatusNotRunning'),
164-
'Running' => translate('StatusRunning'),
165-
'Connected' => translate('StatusConnected'),
166-
);
167-
$html .= '<span class="term-value-wrapper">';
168-
$html .= htmlSelect( 'Status[]', $status_options,
169-
( isset($_SESSION['Status']) ? $_SESSION['Status'] : '' ),
170-
array(
171-
'data-on-change'=>'submitThisForm',
172-
'class'=>'chosen',
173-
'multiple'=>'multiple',
174-
'data-placeholder'=>'All'
175-
) );
176-
$html .= '</span>';
177-
$html .= '</span>';
178180

179181
$html .= '<span class="term SourceFilter"><label>'.translate('Source').'</label>';
180182
$html .= '<span class="term-value-wrapper">';
@@ -183,10 +185,10 @@ function addFilterSelect($name, $options) {
183185
$html .= '</span>';
184186

185187
$sqlAll = 'SELECT M.*, S.*, E.*
186-
FROM Monitors AS M
187-
LEFT JOIN Monitor_Status AS S ON S.MonitorId=M.Id
188-
LEFT JOIN Event_Summaries AS E ON E.MonitorId=M.Id
189-
WHERE M.`Deleted`=false';
188+
FROM Monitors AS M
189+
LEFT JOIN Monitor_Status AS S ON S.MonitorId=M.Id
190+
LEFT JOIN Event_Summaries AS E ON E.MonitorId=M.Id
191+
WHERE M.`Deleted`=false';
190192
$sqlSelected = $sqlAll . ( count($conditions) ? ' AND ' . implode(' AND ', $conditions) : '' ).' ORDER BY Sequence ASC';
191193
$monitors = dbFetchAll($sqlSelected, null, $values);
192194

@@ -195,7 +197,7 @@ function addFilterSelect($name, $options) {
195197
if ( visibleMonitor($row['Id']) ) { #We count only available monitors.
196198
++$colAllAvailableMonitors;
197199
}
198-
}
200+
}
199201

200202
$displayMonitors = array();
201203
$monitors_dropdown = array();
@@ -283,6 +285,14 @@ function addFilterSelect($name, $options) {
283285
$display_monitor_ids = array_map(function($monitor_row){return $monitor_row['Id'];}, $displayMonitors);
284286
$html .= '</span>';
285287
$html .= '</span>';
286-
echo $html;
288+
$html .= '</div>';
289+
290+
return [
291+
"filterBar" => $html,
292+
"displayMonitors" => $displayMonitors,
293+
"storage_areas" => $storage_areas,
294+
"StorageById" => $StorageById,
295+
"selected_monitor_ids" => $selected_monitor_ids
296+
];
297+
}
287298
?>
288-
</div>

web/skins/classic/views/console.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,12 @@
9797
require_once('includes/Group_Monitor.php');
9898

9999
$navbar = getNavBarHTML();
100-
ob_start();
101100
include('_monitor_filters.php');
102-
$filterbar = ob_get_contents();
103-
ob_end_clean();
101+
$resultMonitorFilters = buildMonitorsFilters();
102+
$filterbar = $resultMonitorFilters['filterBar'];
103+
$displayMonitors = $resultMonitorFilters['displayMonitors'];
104+
$storage_areas = $resultMonitorFilters['storage_areas'];
105+
$StorageById = $resultMonitorFilters['StorageById'];
104106

105107
$displayMonitorIds = array_map(function($m){return $m['Id'];}, $displayMonitors);
106108

web/skins/classic/views/cycle.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
return;
2424
}
2525

26-
ob_start();
2726
include('_monitor_filters.php');
28-
$filterbar = ob_get_contents();
29-
ob_end_clean();
27+
$resultMonitorFilters = buildMonitorsFilters();
28+
$filterbar = $resultMonitorFilters['filterBar'];
29+
$displayMonitors = $resultMonitorFilters['displayMonitors'];
3030

3131
$options = array();
3232

web/skins/classic/views/montage.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,10 @@
181181

182182
session_write_close();
183183

184-
ob_start();
185184
include('_monitor_filters.php');
186-
$filterbar = ob_get_contents();
187-
ob_end_clean();
185+
$resultMonitorFilters = buildMonitorsFilters();
186+
$filterbar = $resultMonitorFilters['filterBar'];
187+
$displayMonitors = $resultMonitorFilters['displayMonitors'];
188188

189189
$need_hls = false;
190190
$need_janus = false;

web/skins/classic/views/montagereview.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@
5757
}
5858

5959
require_once('includes/Filter.php');
60-
ob_start();
6160
include('_monitor_filters.php');
62-
$filter_bar = ob_get_contents();
63-
ob_end_clean();
61+
$resultMonitorFilters = buildMonitorsFilters();
62+
$filterbar = $resultMonitorFilters['filterBar'];
63+
$displayMonitors = $resultMonitorFilters['displayMonitors'];
64+
$selected_monitor_ids = $resultMonitorFilters['selected_monitor_ids'];
6465

6566
$preference = ZM\User_Preference::find_one([
6667
'UserId'=>$user->Id(),

0 commit comments

Comments
 (0)