Search code examples
coldfusioncoldfusion-9cfmlcfdump

CF9: What is this evaluate statement evaluating?


I'm stuck and need a fresh set of eyes on this, please.

I'm working with someone else's spaghetti code who is no longer around and having a heck of a time figuring out what they were evaluating.

<cfset surveyCount = 0>
<cfloop query="surveys">
    <cfif evaluate("defaultReport" & ID)>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
</cfloop>  

In the query dump, I see 9 records which is what I am expecting but because because the evaluate is failing, the surveyCount isn't being incremented. I do not see any columns for defaultReport. In my 15 years of working with CF, I've always avoided evaluate() and now when I need to analyze it, I'm at a complete loss. Can someone offer any guidance?

Added CFDump image (some columns names have been removed for privacy and security): enter image description here

UPDATE I: This file has numerous cfinclude statements and very little code formatting. As a result, I overlooked some cfinclude statements. I found the following. I'm still looking but wanted to document this as I dig.

<cfloop query="surveys"> <cfscript> variables["defaultReport" & ID] = evaluate(thisAssociation & "Price"); </cfscript> </cfloop>

UPDATE II: Dumping the variable scope, I did confirm the variable I am looking for (finding the query I posted in UPDATE I helped, too). :)
enter image description here


Solution

  • What they wanted to do is to increase surveyCount but only if this thing: evaluate("defaultReport" & ID) evaluates to true.

    From your query dump picture it looks like the IDs are numbers like 144, 145, etc...

    In this context, you can think at evaluate("defaultReport" & ID) as something like defaultReport144, defaultReport145, etc... (these are variables set somewhere in the code).

    So the code:

    <cfif evaluate("defaultReport" & ID)>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
    

    becomes (for an ID of 144, the first one on your query loop)

    <cfif defaultReport144>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
    

    and so on... for the other IDs

    So, search your code for where variables like defaultReport144, defaultReport145, etc... are set to either true or false (0 or 1).

    Something like:

    <cfset defaultReport144 = true />

    or maybe they use some expression that evaluates to true or false, like:

    <cfset defaultReport144 = [some expression] />

    If you can't find, then maybe the code was changed or removed in the place where these defaultReport... variables were set.

    ColdFusion evaluate() documentation:
    https://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f4e.html