Skip to content

Commit 0fc2a0e

Browse files
authored
Merge pull request #1106 from ai91/feature/plans_attributes
Модуль "Планы": поддержка обновления аттрибутов через вебсокеты
2 parents 4f131e6 + 4d5eb35 commit 0fc2a0e

File tree

3 files changed

+66
-13
lines changed

3 files changed

+66
-13
lines changed

lib/websockets/server/lib/WebSocket/Application/MajordomoApplication.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,10 @@ private function _actionPostProperty($data)
407407
$state['TEMPLATE']=$v['TEMPLATE'];
408408
$state['ITEM']=$k;
409409
}
410+
if ($v['ATTRIBUTES']) {
411+
$state['ATTRIBUTES'] = $v['ATTRIBUTES'];
412+
$state['ITEM']=$k;
413+
}
410414
if (preg_match('/^component(\d+)$/',$k,$m)) {
411415
$state['COMPONENT_ID']=$m[1];
412416
$state['ITEM']=$k;
@@ -415,6 +419,14 @@ private function _actionPostProperty($data)
415419
if ($state['TEMPLATE']) {
416420
unset($state['TEMPLATE']);
417421
}
422+
if ($state['ATTRIBUTES'] && is_array($state['ATTRIBUTES'])) {
423+
foreach($state['ATTRIBUTES'] as &$attribute) {
424+
if ($attribute['TEMPLATE'] != '') {
425+
unset($attribute['TEMPLATE']);
426+
}
427+
}
428+
unset($attribute);
429+
}
418430
$send_plan_states[] = $state;
419431
}
420432

modules/plans/plans.class.php

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -356,24 +356,49 @@ function findDynamicText($content,$process = 1) {
356356
xml_parse_into_struct($p, $content, $vals, $index);
357357
xml_parser_free($p);
358358
foreach($vals as $val) {
359-
if (isset($val['value']) && preg_match_all('/%([\w\d\.]+?)\.([\w\d\.]+?)%/',$val['value'],$m) && isset($val['attributes'])) {
359+
if (isset($val['attributes'])) {
360+
$item=array();
360361
$id = '';
362+
$dynamic = false;
363+
$props=array();
364+
$attributes=array();
361365
foreach($val['attributes'] as $attr=>$attr_v) {
362366
if (strtolower($attr)=='id') {
363367
$id=$attr_v;
368+
} else if(preg_match_all('/%([\w\d\.]+?)\.([\w\d\.]+?)%/',$attr_v, $m)) {
369+
$dynamic = true;
370+
foreach($m[0] as $prop) {
371+
$prop=trim($prop,'%');
372+
$props[]=$prop;
373+
}
374+
$attribute=array('NAME'=>strtolower($attr),'TEMPLATE'=>$attr_v);
375+
if($process) {
376+
$attribute['CONTENT']=processTitle($attribute['TEMPLATE']);
377+
}
378+
$attributes[]=$attribute;
364379
}
365380
}
366-
if ($id!='') {
367-
$props=array();
368-
foreach($m[0] as $prop) {
369-
$prop=trim($prop,'%');
370-
$props[]=$prop;
381+
if($id!=''){
382+
$item['ITEM']=$id;
383+
384+
if (isset($val['value']) && preg_match_all('/%([\w\d\.]+?)\.([\w\d\.]+?)%/',$val['value'], $m)) {
385+
$dynamic = true;
386+
foreach($m[0] as $prop) {
387+
$prop=trim($prop,'%');
388+
$props[]=$prop;
389+
}
390+
$item['TEMPLATE']=$val['value'];
391+
if ($process) {
392+
$item['CONTENT']=processTitle($item['TEMPLATE']);
393+
}
371394
}
372-
$item=array('ITEM'=>$id,'TEMPLATE'=>$val['value'],'PROPERTIES'=>$props);
373-
if ($process) {
374-
$item['CONTENT']=processTitle($item['TEMPLATE']);
395+
if($dynamic) {
396+
if(!empty($attributes)) {
397+
$item['ATTRIBUTES'] = $attributes;
398+
}
399+
$item['PROPERTIES']=$props;
400+
$result[]=$item;
375401
}
376-
$result[]=$item;
377402
}
378403
}
379404
}
@@ -448,7 +473,7 @@ function getWatchedProperties($plans) {
448473
foreach($dynData as $dynItem) {
449474
//$content = str_replace($dynItem['TEMPLATE'],$dynItem['CONTENT'],$content);
450475
foreach($dynItem['PROPERTIES'] as $property) {
451-
$properties[]=array('PROPERTY'=>mb_strtolower($property,'UTF-8'),'STATE_ID'=>$dynItem['ITEM'],'TEMPLATE'=>$dynItem['TEMPLATE']);
476+
$properties[]=array('PROPERTY'=>mb_strtolower($property,'UTF-8'),'STATE_ID'=>$dynItem['ITEM'],'TEMPLATE'=>$dynItem['TEMPLATE'],'ATTRIBUTES'=>$dynItem['ATTRIBUTES']);
452477
}
453478
}
454479
}
@@ -474,8 +499,18 @@ function processState(&$state) {
474499
if ($component['ID']) {
475500
//...
476501
}
477-
} elseif ($state['TEMPLATE']) {
478-
$state['CONTENT']=processTitle($state['TEMPLATE']);
502+
} else {
503+
if ($state['TEMPLATE']) {
504+
$state['CONTENT']=processTitle($state['TEMPLATE']);
505+
}
506+
if ($state['ATTRIBUTES'] && is_array($state['ATTRIBUTES'])) {
507+
foreach($state['ATTRIBUTES'] as &$attribute) {
508+
if ($attribute['TEMPLATE'] != '') {
509+
$attribute['CONTENT']=processTitle($attribute['TEMPLATE']);
510+
}
511+
}
512+
unset($attribute);
513+
}
479514
}
480515
}
481516

templates/plans/preview.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@
7070
} else {
7171
elem.text(obj[i].CONTENT);
7272
}
73+
if (obj[i].ATTRIBUTES instanceof Array) {
74+
var attrCnt = obj[i].ATTRIBUTES.length;
75+
for (var ai=0; ai<attrCnt; ai++) {
76+
elem.attr(obj[i].ATTRIBUTES[ai].NAME, obj[i].ATTRIBUTES[ai].CONTENT);
77+
}
78+
}
7379
}
7480
}
7581
}

0 commit comments

Comments
 (0)