@@ -356,24 +356,49 @@ function findDynamicText($content,$process = 1) {
356
356
xml_parse_into_struct ($ p , $ content , $ vals , $ index );
357
357
xml_parser_free ($ p );
358
358
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 ();
360
361
$ id = '' ;
362
+ $ dynamic = false ;
363
+ $ props =array ();
364
+ $ attributes =array ();
361
365
foreach ($ val ['attributes ' ] as $ attr =>$ attr_v ) {
362
366
if (strtolower ($ attr )=='id ' ) {
363
367
$ 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 ;
364
379
}
365
380
}
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
+ }
371
394
}
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 ;
375
401
}
376
- $ result []=$ item ;
377
402
}
378
403
}
379
404
}
@@ -448,7 +473,7 @@ function getWatchedProperties($plans) {
448
473
foreach ($ dynData as $ dynItem ) {
449
474
//$content = str_replace($dynItem['TEMPLATE'],$dynItem['CONTENT'],$content);
450
475
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 ' ] );
452
477
}
453
478
}
454
479
}
@@ -474,8 +499,18 @@ function processState(&$state) {
474
499
if ($ component ['ID ' ]) {
475
500
//...
476
501
}
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
+ }
479
514
}
480
515
}
481
516
0 commit comments