2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 07:16:03 +00:00

02_FTUISRV: fix replacesetMagic to use hash - fhem.pl warning

git-svn-id: https://svn.fhem.de/fhem/trunk@14077 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
viegener 2017-04-22 21:24:14 +00:00
parent 791997f95d
commit 97cfaa871f
2 changed files with 35 additions and 23 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- bugfix: 02_FTUISRV: fix replacesetMagic to use hash - fhem.pl warning
- bugfix: 10_pilight_ctrl: fix GS-iwds07
- feature: 98_TRAFFIC: v1.3.1, attribute change, map setting save buttons
- feature: 98_TRAFFIC: v1.3, map customizable, enhancements, fix JSON error

View File

@ -74,6 +74,8 @@
# more tolerance on spaces around =
# doc change on ftui-if
# FIX: changed replaceSetmagic to hand over real device hash
#
#
################################################################
#TODO:
@ -269,6 +271,9 @@ sub FTUISRV_CGI() {
# get device name
$name= $data{FWEXT}{$link}{deviceName};
# get corresponding hash
my $hash = $defs{$name};
# check system / device loglevel
my $logLevel = $attr{global}{verbose};
$logLevel = $attr{$name}{verbose} if ( defined( $attr{$name}{verbose} ) );
@ -299,7 +304,7 @@ sub FTUISRV_CGI() {
$filename = $1;
$value = $4;
Log3 $name, 5, "$name: set Reading $reading = $value";
readingsSingleUpdate($defs{$name}, $reading, $value, 1);
readingsSingleUpdate($hash, $reading, $value, 1);
}
};
@ -316,12 +321,12 @@ sub FTUISRV_CGI() {
my $parhash = {};
my $validatehash = {};
my ($err, $validated, $content) = FTUISRV_handletemplatefile( $name, $filename, $parhash, $validatehash );
my ($err, $validated, $content) = FTUISRV_handletemplatefile( $hash, $filename, $parhash, $validatehash );
# Validate HTML Result after parsing
my $validate = AttrVal($name,'validateResult',0);
if ( ( $validate ) && ( ( $filename =~ /\.html?$/i ) || ( $filename =~ /\.part?$/i ) ) && ( ! $validated ) ) {
FTUISRV_validateHtml( $name, $content, $validate, $filename );
FTUISRV_validateHtml( $hash, $content, $validate, $filename );
}
return("text/plain; charset=utf-8", "Error in filehandling: $err") if ( defined($err) );
@ -354,7 +359,8 @@ sub FTUISRV_CGI() {
# optional: check FTUI
sub FTUISRV_validateHtml( $$$$ ) {
my ($name, $content, $validateLevel, $filename ) = @_;
my ($hash, $content, $validateLevel, $filename ) = @_;
my $name = $hash->{NAME};
# state: 0: normal / 1: in tag / 2: in comment / 3: in quotes / 4: in dquotes / 5: in ptag
#
@ -640,7 +646,8 @@ sub popTag( $$ ) {
# contents
sub FTUISRV_replaceKeys( $$$$ ) {
my ($name, $filename, $content, $parhash) = @_;
my ($hash, $filename, $content, $parhash) = @_;
my $name = $hash->{NAME};
# make replacements of keys from hash
while ( $content =~ /<\?ftui-key=([^\s]+)\s*\?>/g ) {
@ -675,7 +682,8 @@ sub FTUISRV_replaceKeys( $$$$ ) {
# contents
sub FTUISRV_handleIf( $$$ ) {
my ($name, $filename, $content) = @_;
my ($hash, $filename, $content) = @_;
my $name = $hash->{NAME};
# Look for if expression
my $done = "";
@ -687,7 +695,7 @@ sub FTUISRV_handleIf( $$$ ) {
my $rest = $3;
# handle rest to check recursively for further ifs
$rest = FTUISRV_handleIf( $name, $filename, $rest );
$rest = FTUISRV_handleIf( $hash, $filename, $rest );
# identify then and else parts
my $then;
@ -708,7 +716,7 @@ sub FTUISRV_handleIf( $$$ ) {
# check expression
my %dummy;
my ($err, @a) = ReplaceSetMagic(\%dummy, 0, ( $expr ) );
my ($err, @a) = ReplaceSetMagic($hash, 0, ( $expr ) );
if ( $err ) {
Log3 $name, 1, "$name: FTUISRV_handleIf failed on ReplaceSetmagic with :$err: on header :$expr:";
} else {
@ -743,7 +751,8 @@ sub FTUISRV_handleIf( $$$ ) {
# contents
sub FTUISRV_handleInc( $$$$$$ ) {
my ($name, $filename, $curdir, $content, $parhash, $validatehash) = @_;
my ($hash, $filename, $curdir, $content, $parhash, $validatehash) = @_;
my $name = $hash->{NAME};
# Look for if expression
my $done = "";
@ -761,7 +770,7 @@ sub FTUISRV_handleInc( $$$$$$ ) {
# replace [device:reading] or even perl expressions with replaceSetMagic
my %dummy;
Log3 $name, 4, "$name: FTUISRV_handleInc ReplaceSetmagic INC before :$values:";
my ($err, @a) = ReplaceSetMagic(\%dummy, 0, ( $values ) );
my ($err, @a) = ReplaceSetMagic($hash, 0, ( $values ) );
if ( $err ) {
Log3 $name, 1, "$name: FTUISRV_handleInc ($filename) failed on ReplaceSetmagic with :$err: on INC :$values:";
@ -790,7 +799,7 @@ sub FTUISRV_handleInc( $$$$$$ ) {
Log3 $name, 4, "$name: start handling include (rec) :$incfile:";
my $inccontent;
my $dummy;
($err, $dummy, $inccontent) = FTUISRV_handletemplatefile( $name, $incfile, $incparhash, $validatehash );
($err, $dummy, $inccontent) = FTUISRV_handletemplatefile( $hash, $incfile, $incparhash, $validatehash );
Log3 $name, 4, "$name: done handling include (rec) :$incfile: ".(defined($err)?"Err: ".$err:"ok");
@ -823,7 +832,8 @@ sub FTUISRV_handleInc( $$$$$$ ) {
# contents
sub FTUISRV_handleLoopInc( $$$$$$ ) {
my ($name, $filename, $curdir, $content, $parhash, $validatehash) = @_;
my ($hash, $filename, $curdir, $content, $parhash, $validatehash) = @_;
my $name = $hash->{NAME};
# Look for if expression
my $done = "";
@ -851,7 +861,7 @@ sub FTUISRV_handleLoopInc( $$$$$$ ) {
# replace [device:reading] or even perl expressions with replaceSetMagic
my %dummy;
Log3 $name, 4, "$name: FTUISRV_handleLoopInc ReplaceSetmagic INC before :$values:";
my ($err, @a) = ReplaceSetMagic(\%dummy, 0, ( $values ) );
my ($err, @a) = ReplaceSetMagic($hash, 0, ( $values ) );
if ( $err ) {
Log3 $name, 1, "$name: FTUISRV_handleLoopInc ($filename) failed on ReplaceSetmagic with :$err: on INC :$values:";
@ -889,7 +899,7 @@ sub FTUISRV_handleLoopInc( $$$$$$ ) {
Log3 $name, 4, "$name: start handling include (rec) :$incfile: with value $key = :$loopvariable:";
my $inccontent;
my $dummy;
($err, $dummy, $inccontent) = FTUISRV_handletemplatefile( $name, $incfile, $loopincparhash, $validatehash );
($err, $dummy, $inccontent) = FTUISRV_handletemplatefile( $hash, $incfile, $loopincparhash, $validatehash );
Log3 $name, 4, "$name: done handling include (rec) :$incfile: ".(defined($err)?"Err: ".$err:"ok");
@ -923,7 +933,8 @@ sub FTUISRV_handleLoopInc( $$$$$$ ) {
# contents
sub FTUISRV_handletemplatefile( $$$$ ) {
my ($name, $filename, $parhash, $validatehash) = @_;
my ($hash, $filename, $parhash, $validatehash) = @_;
my $name = $hash->{NAME};
my $content;
my $err;
@ -939,7 +950,7 @@ sub FTUISRV_handletemplatefile( $$$$ ) {
if ( ( $validate ) && ( ! defined($validatehash->{$filename} ) ) && ( ( $filename =~ /\.html?$/i ) || ( $filename =~ /\.part?$/i ) ) ) {
$validated = 1;
$validatehash->{$filename} = 1 if ( ! defined($validatehash->{$filename} ) );
FTUISRV_validateHtml( $name, $content, $validate, $filename );
FTUISRV_validateHtml( $hash, $content, $validate, $filename );
}
@ -969,10 +980,10 @@ sub FTUISRV_handletemplatefile( $$$$ ) {
# replace escaped > (i.e. \>) by > for key replacement
$sval =~ s/\?\\>/\?>/g;
$sval = FTUISRV_replaceKeys( $name, $filename." header", $sval, $parhash );
$sval = FTUISRV_replaceKeys( $hash, $filename." header", $sval, $parhash );
Log3 $name, 4, "$name: FTUISRV_handletemplatefile default value for key :$skey: after replace :".$sval.":";
my ($err, @a) = ReplaceSetMagic(\%dummy, 0, ( $sval ) );
my ($err, @a) = ReplaceSetMagic($hash, 0, ( $sval ) );
if ( $err ) {
Log3 $name, 1, "$name: FTUISRV_handletemplatefile failed on ReplaceSetmagic with :$err: on header :$sval:";
} else {
@ -991,19 +1002,19 @@ sub FTUISRV_handletemplatefile( $$$$ ) {
}
# replace the keys first before loop/if
$content = FTUISRV_replaceKeys( $name, $filename, $content, $parhash );
$content = FTUISRV_replaceKeys( $hash, $filename, $content, $parhash );
# eval if else endif expressions
$content = FTUISRV_handleIf( $name, $filename, $content );
$content = FTUISRV_handleIf( $hash, $filename, $content );
# Handle includes
Log3 $name, 4, "$name: look for includes :$filename:";
( $err, $content ) = FTUISRV_handleInc( $name, $filename, $curdir, $content, $parhash, $validatehash );
( $err, $content ) = FTUISRV_handleInc( $hash, $filename, $curdir, $content, $parhash, $validatehash );
# error will always result in stopping recursion
return ($err, $validated, $content) if ( defined($err) );
( $err, $content ) = FTUISRV_handleLoopInc( $name, $filename, $curdir, $content, $parhash, $validatehash );
( $err, $content ) = FTUISRV_handleLoopInc( $hash, $filename, $curdir, $content, $parhash, $validatehash );
# error will always result in stopping recursion
return ($err, $validated, $content) if ( defined($err) );