Skip to content

Commit 5b6fc7c

Browse files
committed
Updates
* Redis cache fix * getObject method fix * Simple Devices: now user can set additional conditions to some properties on Settings tab.
1 parent fe0ac29 commit 5b6fc7c

16 files changed

+1382
-1276
lines changed

lib/caching.class.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ function saveToCache($key, $value)
107107
$redisConnection = new Redis();
108108
$redisConnection->pconnect(USE_REDIS);
109109
}
110-
$redisConnection->set($key, $value);
110+
$redisConnection->set($key, (string)$value);
111111
return;
112112
}
113113

lib/common.class.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ function runScheduledJobs()
315315
SQLExec("UPDATE jobs SET PROCESSED=" . $jobs[$i]['PROCESSED'] . ", STARTED='" . $jobs[$i]['STARTED'] . "' WHERE ID=" . $jobs[$i]['ID']);
316316

317317
if ($jobs[$i]['COMMANDS'] != '') {
318-
$url = BASE_URL . '/objects/?system_call=1&job=' . $jobs[$i]['ID'];
318+
$url = BASE_URL . '/objects/?system_call=1&job=' . $jobs[$i]['ID'] . '&title=' . urlencode($jobs[$i]['TITLE']);
319319
$result = trim(getURL($url, 0));
320320
$result = preg_replace('/<!--.+-->/is', '', $result);
321321
if (!preg_match('/OK$/', $result)) {
@@ -845,6 +845,24 @@ function checkAccess($object_type, $object_id)
845845
return $result;
846846
}
847847

848+
function checkAccessDefined($object_type, $object_id)
849+
{
850+
$rec = SQLSelectOne("SELECT ID FROM security_rules WHERE OBJECT_TYPE='" . DBSafe($object_type) . "' AND OBJECT_ID=" . (int)$object_id);
851+
if ($rec['ID']) return true;
852+
return false;
853+
}
854+
855+
function checkAccessCopy($object_type, $src_id, $dst_id)
856+
{
857+
$rec = SQLSelectOne("SELECT * FROM security_rules WHERE OBJECT_TYPE='" . DBSafe($object_type) . "' AND OBJECT_ID=" . (int)$src_id);
858+
if ($rec['ID']) {
859+
SQLExec("DELETE FROM security_rules WHERE OBJECT_TYPE='".DBSafe($object_type)."' AND OBJECT_ID=".(int)$dst_id);
860+
unset($rec['ID']);
861+
$rec['OBJECT_ID']=(int)$dst_id;
862+
SQLInsert('security_rules',$rec);
863+
}
864+
}
865+
848866
/**
849867
* Summary of registerError
850868
* @param mixed $code Code (default 'custom')

modules/devices/darknessmode_activate.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
$objects = getObjectsByProperty('groupSunset', '=', 1);
77
$total = count($objects);
88
for ($i = 0; $i < $total; $i++) {
9-
usleep(50000);
9+
10+
$obj = getObject($objects[$i]);
11+
if (is_object($obj) && $obj->device_id && !checkAccess('prop_groupSunset', $obj->device_id)) continue;
12+
1013
callMethodSafe($objects[$i] . '.turnOn', array('source' => 'DarknessMode'));
11-
//sleep(1);
14+
usleep(50000);
15+
1216
}
Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
<?php
22

3-
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES==1) return;
3+
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES == 1) return;
44

55
//groupSunrise
66
$objects = getObjectsByProperty('groupSunrise', '=', 1);
77
$total = count($objects);
88
for ($i = 0; $i < $total; $i++) {
9-
if (getGlobal($objects[$i] . '.status')) {
10-
usleep(50000);
11-
callMethodSafe($objects[$i] . '.turnOff', array('source' => 'DarknessMode'));
12-
//sleep(1);
13-
}
9+
if (getGlobal($objects[$i] . '.status')) {
10+
11+
$obj = getObject($objects[$i]);
12+
if (is_object($obj) && $obj->device_id && !checkAccess('prop_groupSunrise', $obj->device_id)) continue;
13+
14+
callMethodSafe($objects[$i] . '.turnOff', array('source' => 'DarknessMode'));
15+
usleep(50000);
16+
17+
}
1418
}

modules/devices/devices_edit.inc.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,14 @@
168168
}
169169
setGlobal($rec['LINKED_OBJECT'] . '.' . $k, $value);
170170
if (is_array($apply_others)) {
171-
foreach($apply_others as $other_dev) {
171+
foreach ($apply_others as $other_dev) {
172172
setGlobal($other_dev . '.' . $k, $value);
173+
if ($v['_CONFIG_RESTRICTIONS'] && checkAccessDefined('prop_' . $k, $rec['ID'])) {
174+
$other_obj = getObject($other_dev);
175+
if (is_object($other_obj) && $other_obj->device_id) {
176+
checkAccessCopy('prop_' . $k, $rec['ID'], $other_obj->device_id);
177+
}
178+
}
173179
}
174180
}
175181
}
@@ -204,6 +210,11 @@
204210
$styles = $scene_class->getAllTypes();
205211
$v['FOLDERS'] = $styles;
206212
}
213+
214+
if ($v['_CONFIG_RESTRICTIONS'] && checkAccessDefined('prop_' . $v['NAME'], $rec['ID'])) {
215+
$v['_CONFIG_RESTRICTIONS_SET'] = 1;
216+
}
217+
207218
$res_properties[] = $v;
208219
}
209220
}
@@ -446,7 +457,8 @@
446457
$class_2b_changed = 0;
447458
break;
448459
}
449-
$tmp_class_id = current(SQLSelectOne("SELECT PARENT_ID FROM classes WHERE ID=" . (int)$tmp_class_id));
460+
$tmp = SQLSelectOne("SELECT PARENT_ID FROM classes WHERE ID=" . (int)$tmp_class_id);
461+
$tmp_class_id = (int)$tmp['PARENT_ID'];
450462
}
451463
if ($class_2b_changed) {
452464
//move object to new class

modules/devices/devices_schedule.inc.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
if ($point['SET_TIME']) {
4242

4343
}
44+
45+
if (checkAccessDefined('spoint',$point_id)) {
46+
$out['POINT_ACCESS_DEFINED']=1;
47+
}
48+
4449
}
4550

4651

@@ -71,8 +76,7 @@
7176
}
7277
}
7378
$point_item['SET_DAYS']=implode(', ',$point_days_title);
74-
$rule=SQLSelectOne("SELECT ID FROM security_rules WHERE OBJECT_TYPE='spoint' AND OBJECT_ID=".$point_item['ID']);
75-
if ($rule['ID']) {
79+
if (checkAccessDefined('spoint',$point_item['ID'])) {
7680
$point_item['HAS_RULE']=1;
7781
}
7882
}

modules/devices/devices_structure.inc.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@
5454
'PARENT_CLASS'=>'SDevices',
5555
'DESCRIPTION'=>'Controllable device',
5656
'PROPERTIES'=>array(
57-
'groupEco'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_ECO,'_CONFIG_TYPE'=>'yesno','_CONFIG_HELP'=>'SdGroupEco'),
58-
'groupEcoOn'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_ECO_ON,'_CONFIG_TYPE'=>'yesno','_CONFIG_HELP'=>'SdGroupEcoOn'),
59-
'groupSunrise'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_SUNRISE,'_CONFIG_TYPE'=>'yesno','_CONFIG_HELP'=>'SdGroupSunrise'),
60-
'groupSunset'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_SUNSET,'_CONFIG_TYPE'=>'yesno','_CONFIG_HELP'=>'SdGroupSunset'),
61-
'groupNight'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_NIGHT,'_CONFIG_TYPE'=>'yesno','_CONFIG_HELP'=>'SdGroupNight'),
57+
'groupEco'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_ECO,'_CONFIG_TYPE'=>'yesno','_CONFIG_RESTRICTIONS'=>1,'_CONFIG_HELP'=>'SdGroupEco'),
58+
'groupEcoOn'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_ECO_ON,'_CONFIG_TYPE'=>'yesno','_CONFIG_RESTRICTIONS'=>1,'_CONFIG_HELP'=>'SdGroupEcoOn'),
59+
'groupSunrise'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_SUNRISE,'_CONFIG_TYPE'=>'yesno','_CONFIG_RESTRICTIONS'=>1,'_CONFIG_HELP'=>'SdGroupSunrise'),
60+
'groupSunset'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_SUNSET,'_CONFIG_TYPE'=>'yesno','_CONFIG_RESTRICTIONS'=>1,'_CONFIG_HELP'=>'SdGroupSunset'),
61+
'groupNight'=>array('DESCRIPTION'=>LANG_DEVICES_GROUP_NIGHT,'_CONFIG_TYPE'=>'yesno','_CONFIG_RESTRICTIONS'=>1,'_CONFIG_HELP'=>'SdGroupNight'),
6262
'isActivity'=>array('DESCRIPTION'=>LANG_DEVICES_IS_ACTIVITY,'_CONFIG_TYPE'=>'yesno','_CONFIG_HELP'=>'SdIsActivity'),
6363
'loadType'=>array('DESCRIPTION'=>LANG_DEVICES_LOADTYPE,
6464
'_CONFIG_TYPE'=>'select','_CONFIG_HELP'=>'SdLoadType',
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
<?php
22

3-
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES==1) return;
3+
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES == 1) return;
44

55
//groupEco
66
$objects = getObjectsByProperty('groupEco', '=', 1);
77
$total = count($objects);
88
for ($i = 0; $i < $total; $i++) {
9-
if (getGlobal($objects[$i] . '.status')) {
10-
usleep(50000);
11-
callMethodSafe($objects[$i] . '.turnOff', array('source' => 'EconomMode'));
12-
//sleep(1);
13-
}
9+
if (getGlobal($objects[$i] . '.status')) {
10+
11+
$obj = getObject($objects[$i]);
12+
if (is_object($obj) && $obj->device_id && !checkAccess('prop_groupEco', $obj->device_id)) continue;
13+
14+
callMethodSafe($objects[$i] . '.turnOff', array('source' => 'EconomMode'));
15+
usleep(50000);
16+
}
1417
}

modules/devices/econommode_deactivate.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
$objects = getObjectsByProperty('groupEcoOn', '=', 1);
77
$total = count($objects);
88
for ($i = 0; $i < $total; $i++) {
9-
usleep(50000);
9+
10+
$obj = getObject($objects[$i]);
11+
if (is_object($obj) && $obj->device_id && !checkAccess('prop_groupEcoOn', $obj->device_id)) continue;
12+
1013
callMethodSafe($objects[$i] . '.turnOn', array('source' => 'EconomMode'));
11-
//sleep(1);
14+
usleep(50000);
1215
}
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
<?php
2-
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES==1) return;
2+
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES == 1) return;
33

44
//groupNight
55
$objects = getObjectsByProperty('groupNight', '=', 1);
66
$total = count($objects);
77
for ($i = 0; $i < $total; $i++) {
88
$currentStatus = gg($objects[$i] . '.status');
99
if ($currentStatus) {
10-
usleep(50000);
10+
11+
$obj = getObject($objects[$i]);
12+
if (is_object($obj) && $obj->device_id && !checkAccess('prop_groupNight', $obj->device_id)) continue;
13+
1114
callMethodSafe($objects[$i] . '.turnOff', array('source' => 'NightMode'));
15+
usleep(50000);
16+
1217
}
1318
}

0 commit comments

Comments
 (0)