Skip to content

Commit 469f59a

Browse files
committed
Updates
* Linked Object widget now has link to Simple Device (if applicable) * Device widget for scene now support "view" (normal/mini) * Fix for scenes (incorrect JSON)
1 parent 776d837 commit 469f59a

File tree

6 files changed

+104
-49
lines changed

6 files changed

+104
-49
lines changed

modules/linkedobject/linkedobject.class.php

Lines changed: 49 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class linkedobject extends module
1515
{
1616
var $property_field;
1717
var $method_field;
18+
1819
/**
1920
* linkedobject
2021
*
@@ -40,16 +41,16 @@ function __construct()
4041
function saveParams($data = 0)
4142
{
4243
$p = array();
43-
if (IsSet($this->id)) {
44+
if (isset($this->id)) {
4445
$p["id"] = $this->id;
4546
}
46-
if (IsSet($this->view_mode)) {
47+
if (isset($this->view_mode)) {
4748
$p["view_mode"] = $this->view_mode;
4849
}
49-
if (IsSet($this->edit_mode)) {
50+
if (isset($this->edit_mode)) {
5051
$p["edit_mode"] = $this->edit_mode;
5152
}
52-
if (IsSet($this->tab)) {
53+
if (isset($this->tab)) {
5354
$p["tab"] = $this->tab;
5455
}
5556
return parent::saveParams($p);
@@ -102,10 +103,10 @@ function run()
102103
} else {
103104
$this->usual($out);
104105
}
105-
if (IsSet($this->owner->action)) {
106+
if (isset($this->owner->action)) {
106107
$out['PARENT_ACTION'] = $this->owner->action;
107108
}
108-
if (IsSet($this->owner->name)) {
109+
if (isset($this->owner->name)) {
109110
$out['PARENT_NAME'] = $this->owner->name;
110111
}
111112

@@ -122,9 +123,9 @@ function run()
122123
}
123124

124125
if (isset($this->width)) {
125-
$ifPX = substr($this->width, -1);
126-
if($ifPX != 'x' && $ifPX != '%') $this->width = $this->width.'px';
127-
126+
$ifPX = substr($this->width, -1);
127+
if ($ifPX != 'x' && $ifPX != '%') $this->width = $this->width . 'px';
128+
128129
$out['WIDTH'] = $this->width;
129130
} else {
130131
$out['WIDTH'] = '90%';
@@ -137,8 +138,13 @@ function run()
137138
}
138139

139140
if ($op == 'redirect') {
140-
global $object;
141-
global $sub;
141+
$device_id = gr('device_id', 'int');
142+
if ($device_id) {
143+
redirect(ROOTHTML . 'panel/devices/' . $device_id . '.html?tab=settings');
144+
}
145+
146+
$object = gr('object');
147+
$sub = gr('sub');
142148
if (!$object) {
143149
redirect(ROOTHTML);
144150
}
@@ -162,7 +168,7 @@ function run()
162168
for ($i = 0; $i < $total; $i++) {
163169
$res[] = $tmp[$i];
164170
}
165-
$res[]=array('ID'=>'scripts','TITLE'=>'AllScripts','DESCRIPTION'=>LANG_SCRIPTS);
171+
$res[] = array('ID' => 'scripts', 'TITLE' => 'AllScripts', 'DESCRIPTION' => LANG_SCRIPTS);
166172
$res['OBJECTS'] = $res;
167173

168174
//$tmp=SQLSelectOne("SELECT TITLE FROM objects ORDER BY ID DESC LIMIT 1");
@@ -177,8 +183,11 @@ function run()
177183
$properties = array();
178184
do {
179185
if (!$object) break;
180-
if ($object=='AllScripts') break;
186+
if ($object == 'AllScripts') break;
181187
$obj = getObject($object);
188+
if ($obj->device_id) {
189+
$res['DEVICE_ID'] = $obj->device_id;
190+
}
182191
if (!$obj) break;
183192
$parent_properties = $obj->getParentProperties($obj->class_id, '', 1);
184193
if ($parent_properties && is_array($parent_properties)) {
@@ -203,8 +212,8 @@ function run()
203212
$properties = array();
204213
do {
205214
if (!$object) break;
206-
if ($object=='AllScripts') {
207-
$properties=SQLSelect("SELECT TITLE FROM scripts ORDER BY TITLE");
215+
if ($object == 'AllScripts') {
216+
$properties = SQLSelect("SELECT TITLE FROM scripts ORDER BY TITLE");
208217
break;
209218
}
210219
$obj = getObject($object);
@@ -238,36 +247,39 @@ function run()
238247
}
239248

240249
if ($this->object_field) {
241-
$objects = SQLSelect("SELECT objects.CLASS_ID, objects.TITLE, objects.DESCRIPTION, classes.TITLE AS CLASS_NAME FROM objects JOIN classes WHERE CLASS_ID=classes.ID ORDER BY CLASS_ID, TITLE");
250+
$objects = SQLSelect("SELECT objects.CLASS_ID, objects.TITLE, objects.DESCRIPTION, classes.TITLE AS CLASS_NAME FROM objects JOIN classes ON CLASS_ID=classes.ID ORDER BY CLASS_ID, TITLE");
242251

243-
$objects[]=array('ID'=>'scripts','TITLE'=>'AllScripts','DESCRIPTION'=>LANG_SCRIPTS);
252+
$objects[] = array('ID' => 'scripts', 'TITLE' => 'AllScripts', 'DESCRIPTION' => LANG_SCRIPTS);
244253

245254
$total = count($objects);
246-
$old_class_id=0;
255+
$old_class_id = 0;
247256

248-
$list_result='';
257+
$list_result = '';
249258

250259
if ($total) {
251-
$objects[0]['FIRST']=1;
252-
$objects[$total-1]['LAST']=1;
253-
for($i=0;$i<$total;$i++) {
254-
if (isset($objects[$i]['CLASS_ID']) && $objects[$i]['CLASS_ID']!=$old_class_id) {
255-
$objects[$i]['NEW_GROUP']=1;
256-
$old_class_id=$objects[$i]['CLASS_ID'];
257-
if ($i>0) {
258-
$list_result.='</optgroup>';
260+
$objects[0]['FIRST'] = 1;
261+
$objects[$total - 1]['LAST'] = 1;
262+
for ($i = 0; $i < $total; $i++) {
263+
if (isset($objects[$i]['CLASS_ID']) && $objects[$i]['CLASS_ID'] != $old_class_id) {
264+
$objects[$i]['NEW_GROUP'] = 1;
265+
$old_class_id = $objects[$i]['CLASS_ID'];
266+
if ($i > 0) {
267+
$list_result .= '</optgroup>';
259268
}
260-
$list_result.='<optgroup label="'.$objects[$i]['CLASS_NAME'].'">';
269+
$list_result .= '<optgroup label="' . $objects[$i]['CLASS_NAME'] . '">';
261270
}
262-
$list_result.='<option value="'.$objects[$i]['TITLE'].'">'.$objects[$i]['TITLE'];
263-
if ($objects[$i]['DESCRIPTION']!='') {
264-
$list_result.=' - '.$objects[$i]['DESCRIPTION'];
271+
272+
$value = $objects[$i]['TITLE'];
273+
$list_result .= '<option value="' . $value . '">';
274+
$list_result .= $objects[$i]['TITLE'];
275+
if ($objects[$i]['DESCRIPTION'] != '') {
276+
$list_result .= ' - ' . $objects[$i]['DESCRIPTION'];
265277
}
266-
$list_result.='</option>';
278+
$list_result .= '</option>';
267279
}
268-
$list_result.='</optgroup>';
280+
$list_result .= '</optgroup>';
269281
}
270-
$out['OBJECTS_LIST_RESULT']=$list_result;
282+
$out['OBJECTS_LIST_RESULT'] = $list_result;
271283

272284
/*
273285
foreach($objects as $key => $object) {
@@ -283,12 +295,11 @@ function run()
283295
}
284296
}
285297
*/
286-
287298

288-
//echo '<pre>';
289-
//var_dump($objects);
290-
//die();
291299

300+
//echo '<pre>';
301+
//var_dump($objects);
302+
//die();
292303

293304

294305
$out['OBJECTS'] = $objects;

modules/scenes/scenes.class.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,7 @@ function usual(&$out)
670670
$this->processState($states[$i]);
671671
}
672672
echo json_encode($states);
673+
exit;
673674
}
674675
if ($op == 'click') {
675676
global $id;

modules/scenes/widget_types.inc.php

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434
'DEFAULT_VALUE' => 'left',
3535
'_CONFIG_TYPE' => 'select',
3636
'_CONFIG_OPTIONS' => array(
37-
array('VALUE' => 'left', 'TITLE'=>LANG_WIDGET_TEXT_ALIGNMENT_LEFT),
38-
array('VALUE' => 'center', 'TITLE'=>LANG_WIDGET_TEXT_ALIGNMENT_CENTER),
39-
array('VALUE' => 'right', 'TITLE'=>LANG_WIDGET_TEXT_ALIGNMENT_RIGHT)
37+
array('VALUE' => 'left', 'TITLE' => LANG_WIDGET_TEXT_ALIGNMENT_LEFT),
38+
array('VALUE' => 'center', 'TITLE' => LANG_WIDGET_TEXT_ALIGNMENT_CENTER),
39+
array('VALUE' => 'right', 'TITLE' => LANG_WIDGET_TEXT_ALIGNMENT_RIGHT)
4040
)
4141
),
4242
'text_color' => array('DESCRIPTION' => LANG_WIDGET_TEXT_BLOCK_COLOR,
@@ -85,16 +85,34 @@
8585
'TEMPLATE' => 'file:image_block.html'
8686
),
8787
'device_scaled' => array(
88-
'TITLE' => LANG_DEVICE.' (scaled)',
88+
'TITLE' => LANG_DEVICE . ' (scaled)',
8989
'DESCRIPTION' => LANG_DEVICE,
9090
'PROPERTIES' => array(
91-
'device_id'=>array(
92-
'DESCRIPTION'=>LANG_DEVICE,
93-
'_CONFIG_TYPE'=>'select',
94-
'_CONFIG_OPTIONS'=>function () {
91+
'device_id' => array(
92+
'DESCRIPTION' => LANG_DEVICE,
93+
'_CONFIG_TYPE' => 'select',
94+
'_CONFIG_OPTIONS' => function () {
9595
$options = SQLSelect("SELECT ID as VALUE, TITLE FROM devices ORDER BY TITLE");
9696
return $options;
9797
}),
98+
'view' => array(
99+
'DESCRIPTION' => LANG_CLASS_TEMPLATE,
100+
'_CONFIG_TYPE' => 'select',
101+
'_CONFIG_OPTIONS' => function () {
102+
$options = array(
103+
array('VALUE'=>'','TITLE'=>LANG_DEFAULT),
104+
array('VALUE'=>'mini','TITLE'=>'Mini')
105+
);
106+
return $options;
107+
}
108+
),
109+
'viewbox_width' => array('FUNCTION' => function ($data) {
110+
if ($data['view']=='mini') {
111+
return 60;
112+
} else {
113+
return 260;
114+
}
115+
}),
98116
'widget_background' => array('DESCRIPTION' => LANG_WIDGET_TEXT_BLOCK_BACKGROUND_COLOR,
99117
'DEFAULT_VALUE' => '#000000', '_CONFIG_TYPE' => 'color'),
100118
'background_opacity' => array('DESCRIPTION' => LANG_WIDGET_TEXT_BLOCK_BACKGROUND_OPACITY,
@@ -118,7 +136,7 @@
118136
list($r, $g, $b) = sscanf($data['widget_background'], "#%02x%02x%02x");
119137
return "$r, $g, $b, " . $data['background_opacity'];
120138
})
121-
),
139+
),
122140
'RESIZABLE' => true,
123141
'DEFAULT_WIDTH' => 260,
124142
'DEFAULT_HEIGHT' => 60,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<div class="device-widget mini sensor %.alive|"offline;online"%"
2+
onclick="var url=('<#ROOTHTML#>pChart/?p=%.object_title%'+'.value&op=log&subop=24h&minimal=1');parent.$.fancybox.open({ src: url, type: 'iframe',iframe:{preload:false}});return false;"
3+
title="%.object_description%">
4+
<div class="device-header">%.value% %.unit%
5+
<span>%.direction|"-1=&#9660;1=&#9650;0=&#8801"%</span>
6+
</div>
7+
</div>

templates/linkedobject/linkedobject.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
[#OBJECTS_LIST_RESULT#]
1313
</select>
1414
<a href="#" id="linked_object_link<#UNIQ#>" target="_blank" style='display:none'><i class="glyphicon glyphicon-export"></i></a>
15+
<a href="#" id="linked_object_device_link<#UNIQ#>" target="_blank" style='display:none'><i class="glyphicon glyphicon-hdd"></i></a>
1516
</nobr>
1617
</span>
1718
[#endif#]
@@ -100,6 +101,15 @@
100101
return;
101102
}
102103

104+
/*
105+
if (selected_object<#UNIQ#>) {
106+
const data = selected_object<#UNIQ#>.split('/');
107+
if (data[1]) {
108+
} else {
109+
$('#linked_object_device_link<#UNIQ#>').hide();
110+
}
111+
}*/
112+
103113
$('#linked_object_link<#UNIQ#>').attr("href", "<#ROOTHTML#>panel/linkedobject.html?op=redirect&object="+selected_object<#UNIQ#>);
104114
$('#linked_object_link<#UNIQ#>').show();
105115

@@ -111,6 +121,14 @@
111121
$.get(url, function(obj) {
112122
//var obj=jQuery.parseJSON(data);
113123
$('#linked_property_copy<#UNIQ#>').empty();
124+
125+
if (obj.DEVICE_ID) {
126+
$('#linked_object_device_link<#UNIQ#>').attr("href", "<#ROOTHTML#>panel/linkedobject.html?op=redirect&device_id="+obj.DEVICE_ID);
127+
$('#linked_object_device_link<#UNIQ#>').show();
128+
} else {
129+
$('#linked_object_device_link<#UNIQ#>').hide();
130+
}
131+
114132
var objPropertyCnt = obj.PROPERTIES.length;
115133

116134
if (objPropertyCnt > 0) {

templates/scenes/widgets/device_block.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
display: flex;
33
align-items: center;
44
background-color: rgba(%widget_background_rgba%);
5-
justify-content: center;"><svg width="100%" height="100%" viewBox="0 0 260 60" preserveAspectRatio="none">
6-
<foreignObject width="100%" height="100%">[#module name="devices" id="%device_id%"#]</foreignObject></svg>
5+
justify-content: center;"><svg width="100%" height="100%" viewBox="0 0 %viewbox_width% 60" preserveAspectRatio="none">
6+
<foreignObject width="100%" height="100%">[#module name="devices" id="%device_id%" view="%view%"#]</foreignObject></svg>
77
</div>

0 commit comments

Comments
 (0)