John Morton writes:
Scenario:
So in my password change report I want to do something like this:
(name and new_password arrive from the request, pwd_format is an acquired default)
<dtml-call "sql_change_password( user_id=sql_get_user_id(name=name), password=encodePassword(password=new_password), pwd_format=pwd_format )">
Of course this won't work because user_id ends up being a list reference or something, so I tried this: <dtml-let name="'jwm'" old_password="'clear'" new_password="'foobar'"> <dtml-let password=new_password> <dtml-let enc_pass="encodePassword"> <dtml-in "sql_get_user_id(name=name)"> <dtml-call "sql_change_password(user_id=id,password=enc_pass,pwd_format=pwd_format)"> </dtml-in> </dtml-let> </dtml-let> </dtml-let> ...which also doesn't work, resulting in more complaints about infinite recursion. But this does: <dtml-let name="'jwm'" old_password="'clear'" new_password="'foobar'"> <dtml-let password=new_password> <dtml-let enc_pass="encodePassword"> <dtml-in "sql_get_user_id(name=name)"> <dtml-if enc_pass> <dtml-call "sql_change_password(user_id=id,password=enc_pass,pwd_format=pwd_format)"> </dtml-if> </dtml-in> </dtml-let> </dtml-let> </dtml-let> It looks like a side effect of the caching properties of <dtml-if ...> is that encodePassword gets evaluated at the 'if'. Of course, I expected it would get evaluated at the <dtml-let> tag, but it appears that in the first piece of code it gets evalutate in sql_change_password somehow, so that it's trying to get a value for password by calling encodePassword which needs a property called password, so it tries to get a value for password... Is that what's happening? Should it be? John.